100 _wgtVar(weightVar(vars,wgtVarName)),
117 _wgtVar(weightVar(vars,wgtVarName)),
138 _wgtVar(weightVar(vars,wgtVarName)),
159 _wgtVar(weightVar(vars,wgtVarName)),
167 if (selExpr && *selExpr) {
187 _wgtVar(weightVar(vars,wgtVarName)),
208 _wgtVar(weightVar(vars,wgtVarName)),
216 if (selExpr && *selExpr) {
235 _wgtVar(weightVar(vars,wgtVarName)),
264 loadValues(&tds,cloneVar,cutRange,nStart,nStop);
266 if (cloneVar)
delete cloneVar ;
336 _varsww(other._varsww),
337 _wgtVar(other._wgtVar),
338 _extWgtArray(other._extWgtArray),
339 _extWgtErrLoArray(other._extWgtErrLoArray),
340 _extWgtErrHiArray(other._extWgtErrHiArray),
341 _extSumW2Array(other._extSumW2Array),
342 _curWgt(other._curWgt),
343 _curWgtErrLo(other._curWgtErrLo),
344 _curWgtErrHi(other._curWgtErrHi),
345 _curWgtErr(other._curWgtErr)
355 RooAbsDataStore(other,varsNoWeight(vars,other._wgtVar?other._wgtVar->GetName():0),newname),
360 _wgtVar(other._wgtVar?weightVar(vars,other._wgtVar->GetName()):0),
361 _extWgtArray(other._extWgtArray),
362 _extWgtErrLoArray(other._extWgtErrLoArray),
363 _extWgtErrHiArray(other._extWgtErrHiArray),
364 _extSumW2Array(other._extSumW2Array),
365 _curWgt(other._curWgt),
366 _curWgtErrLo(other._curWgtErrLo),
367 _curWgtErrHi(other._curWgtErrHi),
368 _curWgtErr(other._curWgtErr)
427 Bool_t notInMemNow= (pwd!=memDir) ;
462 std::unique_ptr<
TTree,
decltype(deleter)> tClone(
static_cast<TTree*
>(t->
Clone()), deleter);
470 for (
const auto var : *sourceArgSet) {
471 if (!tClone->GetBranch(var->GetName())) {
472 missingBranches =
kTRUE;
473 coutE(InputArguments) <<
"Didn't find a branch in Tree '" << tClone->GetName() <<
"' to read variable '"
474 << var->GetName() <<
"' from."
475 <<
"\n\tNote: Name the RooFit variable the same as the branch." << std::endl;
478 if (missingBranches) {
479 coutE(InputArguments) <<
"Cannot import data from TTree '" << tClone->GetName()
480 <<
"' because some branches are missing !" << std::endl;
485 for (
const auto sourceArg : *sourceArgSet) {
490 std::unique_ptr<RooFormulaVar> selectClone;
493 selectClone->recursiveRedirectServers(*sourceArgSet) ;
498 Int_t numInvalid(0) ;
499 const Long64_t nevent = tClone->GetEntries();
500 for(
Long64_t i=0; i < nevent; ++i) {
501 const auto entryNumber = tClone->GetEntryNumber(i);
502 if (entryNumber<0)
break;
503 tClone->GetEntry(entryNumber,1);
507 for (
unsigned int j=0; j < sourceArgSet->size(); ++j) {
509 const auto sourceArg = (*sourceArgSet)[j];
511 destArg->copyCache(sourceArg) ;
512 sourceArg->copyCache(destArg) ;
513 if (!destArg->isValid()) {
516 if (numInvalid < 5) {
517 auto& log =
coutI(DataHandling);
518 log <<
"RooTreeDataStore::loadValues(" <<
GetName() <<
") Skipping event #" << i <<
" because " << destArg->GetName()
519 <<
" cannot accommodate the value ";
520 if(sourceArg->isCategory()) {
521 log << static_cast<RooAbsCategory*>(sourceArg)->getCurrentIndex();
523 log << static_cast<RooAbsReal*>(sourceArg)->getVal();
526 }
else if (numInvalid == 5) {
527 coutI(DataHandling) <<
"RooTreeDataStore::loadValues(" <<
GetName() <<
") Skipping ..." << std::endl;
534 if (!allOK || (selectClone && selectClone->getVal()==0)) {
542 coutW(DataHandling) <<
"RooTreeDataStore::loadValues(" <<
GetName() <<
") Ignored " << numInvalid <<
" out-of-range events" << endl ;
559 const char* rangeName, std::size_t nStart, std::size_t nStop)
562 std::unique_ptr<RooFormulaVar> selectClone;
565 selectClone->recursiveRedirectServers(*ads->
get()) ;
573 const auto numEntr =
static_cast<std::size_t
>(ads->
numEntries());
574 std::size_t nevent = nStop < numEntr ? nStop : numEntr;
581 std::vector<std::string> ranges;
586 for (
auto i=nStart; i < nevent ; ++i) {
590 if (selectClone && selectClone->getVal()==0) {
602 bool allValid =
true;
603 for (
const auto arg :
_varsww) {
604 allValid = arg->isValid() && (ranges.empty() || std::any_of(ranges.begin(), ranges.end(),
605 [arg](
const std::string& range){return arg->inRange(range.c_str());}) );
651 for (
auto var :
_vars) {
652 var->setValueDirty();
656 var->setValueDirty();
657 var->clearValueDirty();
743 throw string(
Form(
"RooDataHist::weightError(%s) error type Auto not allowed here",
GetName())) ;
747 throw string(
Form(
"RooDataHist::weightError(%s) error type Expected not allowed here",
GetName())) ;
807 coutE(InputArguments) <<
"RooTreeDataStore::changeObservableName(" <<
GetName() <<
" no observable " << from <<
" in this dataset" << endl ;
878 coutE(InputArguments) <<
GetName() <<
"::addColumn: holder argument is not fundamental: \""
879 << valHolder->
GetName() <<
"\"" << endl;
948 holderSet->
add(*valHolder) ;
952 coutE(InputArguments) <<
GetName() <<
"::addColumn: holder argument is not fundamental: \""
953 << valHolder->
GetName() <<
"\"" << endl;
959 if (!newVarCloneList) {
960 coutE(InputArguments) <<
"RooTreeDataStore::RooTreeData(" <<
GetName()
961 <<
") Couldn't deep-clone variable " << var->
GetName() <<
", abort." << endl ;
968 cloneSetList.
Add(newVarCloneList) ;
969 cloneSet.
add(*newVarClone) ;
1019 Int_t nevt = dstoreList.front()->numEntries() ;
1020 for (
int i=0 ; i<nevt ; i++) {
1026 for (list<RooAbsDataStore*>::iterator iter = dstoreList.begin() ; iter!=dstoreList.end() ; ++iter) {
1031 mergedStore->
fill() ;
1033 return mergedStore ;
1045 for (
int i=0 ; i<nevt ; i++) {
1064 for (
int i=0 ; i<nevt ; i++) {
1069 carry = (t -
sum) -
y;
1078 for (
int i=0 ; i<nevt ; i++) {
1082 carry = (t -
sum) -
y;
1168 delete constExprVarSet ;
1185 coutE(InputArguments) <<
"RooTreeDataStore::setArgStatus(" <<
GetName()
1186 <<
") dataset doesn't contain variable " << arg->
GetName() << endl ;
1221 for (
const auto arg :
_varsww) {
1224 if (arg->getAttribute(
"StoreError")) {
1227 if (arg->getAttribute(
"StoreAsymError")) {
1244 while((arg=iter.
next())) {
1257 while((arg=iter.
next())) {
1311 if (!ret1)
return 0 ;
1327void RooTreeDataStore::Streamer(
TBuffer &R__b)
1333 R__b.
ReadClassBuffer(RooTreeDataStore::Class(),
this, R__v, R__s, R__c);
1349 if (
_tree && parent) {
1372 std::replace(title.begin(), title.end(),
' ',
'_');
1373 std::replace(title.begin(), title.end(),
'-',
'_');
1374 return std::string(
"RooTreeDataStore_") +
GetName() +
"_" + title;
1392 for (std::size_t i = 0; i <
GetEntries(); ++i) {
char * Form(const char *fmt,...)
RooAbsArg is the common abstract base class for objects that represent a value and a "shape" in RooFi...
virtual RooAbsArg * cloneTree(const char *newname=0) const
Clone tree expression of objects.
void attachDataStore(const RooAbsDataStore &set)
Replace server nodes with names matching the dataset variable names with those data set variables,...
virtual void setTreeBranchStatus(TTree &t, Bool_t active)=0
virtual void copyCache(const RooAbsArg *source, Bool_t valueOnly=kFALSE, Bool_t setValDirty=kTRUE)=0
virtual Bool_t isFundamental() const
Is this object a fundamental type that can be added to a dataset? Fundamental-type subclasses overrid...
void setAttribute(const Text_t *name, Bool_t value=kTRUE)
Set (default) or clear a named boolean attribute of this object.
virtual void attachToTree(TTree &t, Int_t bufSize=32000)=0
Overloadable function for derived classes to implement attachment as branch to a TTree.
void setValueDirty()
Mark the element dirty. This forces a re-evaluation when a value is requested.
virtual void syncCache(const RooArgSet *nset=0)=0
TString cleanBranchName() const
Construct a mangled name from the actual name that is free of any math symbols that might be interpre...
virtual RooAbsArg * createFundamental(const char *newname=0) const =0
Create a fundamental-type object that stores our type of value.
virtual void fillTreeBranch(TTree &t)=0
Bool_t recursiveRedirectServers(const RooAbsCollection &newServerList, Bool_t mustReplaceAll=kFALSE, Bool_t nameChange=kFALSE, Bool_t recurseInNewSet=kTRUE)
Recursively replace all servers with the new servers in newSet.
void SetName(const char *name)
Set the name of the TNamed.
virtual void removeAll()
Remove all arguments from our set, deleting them if we own them.
Storage_t const & get() const
Const access to the underlying stl container.
RooAbsCollection & assignValueOnly(const RooAbsCollection &other, bool forceIfSizeOne=false)
Sets the value of any argument in our set that also appears in the other set.
RooFIter fwdIterator() const
One-time forward iterator.
virtual Bool_t add(const RooAbsArg &var, Bool_t silent=kFALSE)
Add the specified argument to list.
void assign(const RooAbsCollection &other) const
Sets the value, cache and constant attribute of any argument in our set that also appears in the othe...
virtual Bool_t addOwned(RooAbsArg &var, Bool_t silent=kFALSE)
Add an argument and transfer the ownership to the collection.
RooAbsCollection * selectByAttrib(const char *name, Bool_t value) const
Create a subset of the current collection, consisting only of those elements with the specified attri...
virtual Bool_t remove(const RooAbsArg &var, Bool_t silent=kFALSE, Bool_t matchByNameOnly=kFALSE)
Remove the specified argument from our list.
TIterator * createIterator(Bool_t dir=kIterForward) const
TIterator-style iteration over contained elements.
RooAbsArg * find(const char *name) const
Find object with given name in list.
RooAbsDataStore is the abstract base class for data collection that use a TTree as internal storage m...
virtual const RooArgSet * get(Int_t index) const =0
virtual Double_t weight() const =0
virtual Int_t numEntries() const =0
Double_t getVal(const RooArgSet *normalisationSet=nullptr) const
Evaluate object.
RooArgList is a container object that can hold multiple RooAbsArg objects.
RooArgSet is a container object that can hold multiple RooAbsArg objects.
RooArgSet * snapshot(bool deepCopy=true) const
Use RooAbsCollection::snapshot(), but return as RooArgSet.
A one-time forward iterator working on RooLinkedList or RooAbsCollection.
RooAbsArg * next()
Return next element or nullptr if at end.
Bool_t getPoissonInterval(Int_t n, Double_t &mu1, Double_t &mu2, Double_t nSigma=1) const
Return a confidence interval for the expected number of events given n observed (unweighted) events.
static const RooHistError & instance()
Return a reference to a singleton object that is created the first time this method is called.
RooRealVar represents a variable that can be changed from the outside.
Double_t getAsymErrorLo() const
Bool_t hasAsymError(Bool_t allowZero=kTRUE) const
Double_t getAsymErrorHi() const
Double_t getError() const
virtual void setVal(Double_t value)
Set value of variable to 'value'.
A simple container to hold a batch of data values.
RooTreeDataStore is a TTree-backed data storage.
const Double_t * _extSumW2Array
External weight array - high error.
const Double_t * _extWgtArray
virtual Double_t weight() const
Return the weight of the n-th data point (n='index') in memory.
void initialize()
One-time initialization common to all constructor forms.
virtual void append(RooAbsDataStore &other)
RooArgSet varsNoWeight(const RooArgSet &allVars, const char *wgtName=0)
Utility function for constructors Return RooArgSet that is copy of allVars minus variable matching wg...
virtual Bool_t changeObservableName(const char *from, const char *to)
Change name of internal observable named 'from' into 'to'.
virtual void cacheArgs(const RooAbsArg *owner, RooArgSet &varSet, const RooArgSet *nset=0, Bool_t skipZeroWeights=kFALSE)
Cache given RooAbsArgs with this tree: The tree is given direct write access of the args internal cac...
virtual void attachBuffers(const RooArgSet &extObs)
std::string makeTreeName() const
Generate a name for the storage tree from the name and title of this instance.
RooRealVar * weightVar(const RooArgSet &allVars, const char *wgtName=0)
Utility function for constructors Return pointer to weight variable if it is defined.
const Double_t * _extWgtErrLoArray
External weight array.
virtual Int_t fill()
Interface function to TTree::Fill.
Stat_t GetEntries() const
Interface function to TTree::GetEntries.
Int_t GetEntry(Int_t entry=0, Int_t getall=0)
Interface function to TTree::GetEntry.
Double_t _curWgt
Buffer for weights in case a batch of values is requested.
virtual void checkInit() const
static Int_t _defTreeBufSize
RooArgSet _attachedBuffers
void loadValues(const TTree *t, const RooFormulaVar *select=0, const char *rangeName=0, Int_t nStart=0, Int_t nStop=2000000000)
Load values from tree 't' into this data collection, optionally selecting events using the RooFormula...
const Double_t * _extWgtErrHiArray
External weight array - low error.
void attachCache(const RooAbsArg *newOwner, const RooArgSet &cachedVars)
Initialize cache of dataset: attach variables of cache ArgSet to the corresponding TTree branches.
virtual void resetCache()
Remove tree with values of cached observables and clear list of cached observables.
Bool_t _defCtor
Object owning cache contents.
void restoreAlternateBuffers()
virtual Double_t weightError(RooAbsData::ErrorType etype=RooAbsData::Poisson) const
RooAbsDataStore * merge(const RooArgSet &allvars, std::list< RooAbsDataStore * > dstoreList)
Merge columns of supplied data set(s) with this data set.
void createTree(std::string_view name, std::string_view title)
Create TTree object that lives in memory, independent of current location of gDirectory.
virtual void resetBuffers()
virtual RooAbsArg * addColumn(RooAbsArg &var, Bool_t adjustRange=kTRUE)
Add a new column to the data set which holds the pre-calculated values of 'newVar'.
virtual RooArgSet * addColumns(const RooArgList &varList)
Utility function to add multiple columns in one call See addColumn() for details.
std::unique_ptr< std::vector< double > > _weightBuffer
External sum of weights array.
Int_t Fill()
Interface function to TTree::Fill.
virtual ~RooTreeDataStore()
Destructor.
void Reset(Option_t *option=0)
Interface function to TTree::Reset.
virtual Double_t sumEntries() const
virtual RooSpan< const double > getWeightBatch(std::size_t first, std::size_t len) const
Get the weights of the events in the range [first, first+len).
virtual const RooArgSet * get() const
const RooAbsArg * _cacheOwner
TTree holding the cached function values.
RooArgSet _varsww
Was object constructed with default ctor?
virtual Int_t numEntries() const
virtual void setArgStatus(const RooArgSet &set, Bool_t active)
Activate or deactivate the branch status of the TTree branch associated with the given set of dataset...
void Draw(Option_t *option="")
Default Draw method for all objects.
Buffer base class used for serializing objects.
virtual Int_t ReadClassBuffer(const TClass *cl, void *pointer, const TClass *onfile_class=0)=0
TObject * GetParent() const
Return pointer to parent of this buffer.
virtual Version_t ReadVersion(UInt_t *start=0, UInt_t *bcnt=0, const TClass *cl=0)=0
virtual Int_t WriteClassBuffer(const TClass *cl, void *pointer)=0
Describe directory structure in memory.
std::enable_if_t<!std::is_base_of< TObject, T >::value, Int_t > WriteObject(const T *obj, const char *name, Option_t *option="", Int_t bufsize=0)
Write an object with proper type checking.
void GetObject(const char *namecycle, T *&ptr)
Get an object with proper type checking.
A ROOT file is a suite of consecutive data records (TKey instances) with a well defined format.
Iterator abstract base class.
virtual TObject * Next()=0
virtual void Add(TObject *obj)
virtual void Delete(Option_t *option="")
Remove all objects from the list AND delete all heap based objects.
virtual void SetTitle(const char *title="")
Set the title of the TNamed.
virtual void SetName(const char *name)
Set the name of the TNamed.
virtual const char * GetTitle() const
Returns title of object.
virtual TObject * Clone(const char *newname="") const
Make a clone of an object using the Streamer facility.
virtual const char * GetName() const
Returns name of object.
@ kCanDelete
if object in a list can be deleted
@ kMustCleanup
if object destructor must call RecursiveRemove()
const char * Data() const
TString & Append(const char *cs)
A TTree represents a columnar dataset.
virtual Int_t Fill()
Fill all branches.
virtual TBranch * GetBranch(const char *name)
Return pointer to the branch with the given name in this tree or its friends.
virtual Int_t GetEntry(Long64_t entry, Int_t getall=0)
Read all branches of entry and return total number of bytes read.
virtual Int_t FlushBaskets(Bool_t create_cluster=true) const
Write to disk all the basket that have not yet been individually written and create an event cluster ...
virtual Long64_t CopyEntries(TTree *tree, Long64_t nentries=-1, Option_t *option="", Bool_t needCopyAddresses=false)
Copy nentries from given tree to this tree.
TDirectory * GetDirectory() const
virtual void SetDirectory(TDirectory *dir)
Change the tree's directory.
virtual Long64_t GetEntries() const
virtual void Reset(Option_t *option="")
Reset baskets, buffers and entries count in all branches and leaves.
virtual void Draw(Option_t *opt)
Default Draw method for all objects.
std::vector< std::string > Split(std::string_view str, std::string_view delims, bool skipEmpty=false)
Splits a string at each character in delims.
static uint64_t sum(uint64_t i)