42using std::map, std::list, std::string;
60 const RooArgSet& vars,
RooCategory& indexCat,map<std::string,RooAbsDataStore*>
const& inputData) :
63 for (
const auto& iter : inputData) {
77 for (
const auto& item : other.
_dataMap) {
78 RooAbsDataStore* clonedata = item.second->clone() ;
79 _dataMap[item.first] = clonedata ;
97 for (
const auto& item : other.
_dataMap) {
98 RooAbsDataStore* clonedata = item.second->clone(vars) ;
99 _dataMap[item.first] = clonedata ;
123 const char* cutRange, std::size_t nStart, std::size_t nStop)
128 varsNoIndex.
remove(*indexCat,
true) ;
132 auto out = std::make_unique<RooCompositeDataStore>(
name, title, varsNoIndex, *
_indexCat, std::map<std::string,RooAbsDataStore*>{});
141 if (indexCatForCut) {
143 initialIndex = indexCatForCut->getCurrentIndex();
149 if (indexCatForCut) indexCatForCut->setIndex(item.first);
150 out->_dataMap[item.first] = item.second->reduce(
name, title, varsNoIndex, cutVar, cutRange, nStart, nStop).release();
152 if (indexCatForCut) {
154 indexCatForCut->setIndex(initialIndex);
158 out->_ownComps =
true;
169 item.second->recalculateCache(proj,firstEvent,lastEvent,stepSize,skipZeroWeights) ;
180 ret |= item.second->hasFilledCache() ;
191 item.second->forceCacheUpdate() ;
204 return subset->
fill() ;
217 sum+= item.second->sumEntries() ;
233 if (idx>=(offset+item.second->numEntries())) {
234 offset += item.second->numEntries() ;
237 _vars.assign(*item.second->get(idx-offset)) ;
289 if (item.second->isWeighted())
return true ;
299 throw(std::runtime_error(
"RooCompositeDataSore::loadValues() NOT IMPLEMENTED")) ;
315 coutE(InputArguments) <<
"RooCompositeDataStore::changeObservableName(" <<
GetName() <<
" no observable " << from <<
" in this dataset" << std::endl ;
325 ret |= item.second->changeObservableName(from,to) ;
341 ret = item.second->addColumn(newVar,adjustRange) ;
354 throw string(
"RooCompositeDataStore::merge() is not implemented yet") ;
366 for (
int i=0 ; i<nevt ; i++) {
380 n += item.second->numEntries() ;
393 item.second->reset() ;
404 item.second->cacheArgs(owner,newVarSet,nset,skipZeroWeights) ;
416 set.selectCommon(*item.second->get(), subset);
417 item.second->setArgStatus(subset,active) ;
431 item.second->attachCache(newOwner,inCachedVars) ;
443 item.second->resetCache() ;
455 item.second->attachBuffers(extObs);
467 item.second->resetBuffers();
477 std::cout <<
"RooCompositeDataStore::dump()" << std::endl ;
479 std::cout <<
"state number " << item.first <<
" has store " << item.second->ClassName() <<
" with variables " << *item.second->get() ;
480 if (item.second->isWeighted()) std::cout <<
" and is weighted " ;
481 std::cout << std::endl ;
495 for (std::size_t i = 0; i < static_cast<std::size_t>(
numEntries()); ++i) {
int Int_t
Signed integer 4 bytes (int).
Common abstract base class for objects that represent a value and a "shape" in RooFit.
RooFit::OwningPtr< RooArgSet > getObservables(const RooArgSet &set, bool valueOnly=true) const
Given a set of possible observables, return the observables that this PDF depends on.
void SetName(const char *name) override
Set the name of the TNamed.
int value_type
The type used to denote a specific category state.
value_type lookupIndex(const std::string &stateName) const
Find the index number corresponding to the state name.
virtual bool remove(const RooAbsArg &var, bool silent=false, bool matchByNameOnly=false)
Remove the specified argument from our list.
RooAbsCollection & assignValueOnly(const RooAbsCollection &other, bool forceIfSizeOne=false)
Sets the value of any argument in our set that also appears in the other set.
RooAbsArg * find(const char *name) const
Find object with given name in list.
virtual const RooArgSet * get(Int_t index) const =0
virtual Int_t numEntries() const =0
RooArgSet is a container object that can hold multiple RooAbsArg objects.
Object to represent discrete states.
void attachCache(const RooAbsArg *newOwner, const RooArgSet &cachedVars) override
Initialize cache of dataset: attach variables of cache ArgSet to the corresponding TTree branches.
RooAbsArg * addColumn(RooAbsArg &var, bool adjustRange=true) override
WVE ownership issue here!
std::unique_ptr< std::vector< double > > _weightBuffer
! Buffer for weights in case a batch of values is requested.
Int_t _curIndex
! Index associated with current event
void loadValues(const RooAbsDataStore *tds, const RooFormulaVar *select=nullptr, const char *rangeName=nullptr, std::size_t nStart=0, std::size_t nStop=std::numeric_limits< std::size_t >::max()) override
Int_t numEntries() const override
std::span< const double > getWeightBatch(std::size_t first, std::size_t len) const override
Get the weights of the events in the range [first, first+len).
std::map< Int_t, RooAbsDataStore * > _dataMap
RooAbsDataStore * merge(const RooArgSet &allvars, std::list< RooAbsDataStore * > dstoreList) override
bool changeObservableName(const char *from, const char *to) override
Change name of internal observable named 'from' into 'to'.
~RooCompositeDataStore() override
Destructor.
void cacheArgs(const RooAbsArg *owner, RooArgSet &varSet, const RooArgSet *nset=nullptr, bool skipZeroWeights=false) override
void recalculateCache(const RooArgSet *, Int_t, Int_t, Int_t, bool) override
Forward recalculate request to all subsets.
bool isWeighted() const override
void setArgStatus(const RooArgSet &set, bool active) override
bool hasFilledCache() const override
RooAbsDataStore * _curStore
! Datastore associated with current event
double weightError(RooAbsData::ErrorType etype=RooAbsData::Poisson) const override
double sumEntries() const override
Forward fill request to appropriate subset.
std::unique_ptr< RooAbsDataStore > reduce(RooStringView name, RooStringView title, const RooArgSet &vars, const RooFormulaVar *cutVar, const char *cutRange, std::size_t nStart, std::size_t nStop) override
void resetBuffers() override
Int_t fill() override
Forward fill request to appropriate subset.
void attachBuffers(const RooArgSet &extObs) override
double weight() const override
void resetCache() override
void forceCacheUpdate() override
void append(RooAbsDataStore &other) override
virtual const RooArgSet * get() const
The RooStringView is a wrapper around a C-style string that can also be constructed from a std::strin...
const char * GetName() const override
Returns name of object.
static uint64_t sum(uint64_t i)