Skip to content

Commit d8193ca

Browse files
committed
[RF] Implement mechanism in RooCmdArg to take ownership of temporaries
It happens often that one passes a temporary RooArgSet to the RooCmdArg constructor, where the RooCmdArg is itself a temporary that is passed to a RooFit function. The RooCmdArg contains only pointers to the RooArgSets, so this pattern relies on the RooArgSet being kept alive until the function end. In code, this pattern would look like this statement: ```C++ func(RooCmdArg{RooArgSet{}}); ``` In C++, this works because the temporaries survive until the statement end. But in Python, the inner temporary RooArgSet will be destructed after the RooCmdArg has been constructed, leaving the RooCmdArg with dangling pointers. To solve this problem, all the functions that can create a RooCmdArg from a RooArgSet are overloaded with versions accepting rvalue references. These overloads are indeed used for temporaries both in C++ and Python. In the rvalue reference versions, the temporaries are moved into a vector of std::unique_ptr<TObject>. The constructed RooCmdArg then takes ownership of this vector wrapped in a shared_ptr.
1 parent 882818b commit d8193ca

File tree

4 files changed

+69
-8
lines changed

4 files changed

+69
-8
lines changed

roofit/roofitcore/inc/RooCmdArg.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,12 @@ class RooCmdArg : public TNamed {
9898

9999
void Print(const char* = "") const;
100100

101+
template<class T>
102+
static T const& take(T && obj) {
103+
_nextSharedData.emplace_back(new T{std::move(obj)});
104+
return static_cast<T const&>(*_nextSharedData.back());
105+
}
106+
101107
protected:
102108

103109
static const RooCmdArg _none ; // Static instance of null object
@@ -116,6 +122,12 @@ class RooCmdArg : public TNamed {
116122
RooArgSet* _c ; // Payload RooArgSets
117123
RooLinkedList _argList ; // Payload sub-arguments
118124
Bool_t _prefixSubArgs ; // Prefix subarguments with container name?
125+
126+
using DataCollection = std::vector<std::unique_ptr<TObject>>;
127+
std::shared_ptr<DataCollection> _sharedData; //!
128+
129+
// the next RooCmdArg created will take ownership of this data
130+
static DataCollection _nextSharedData;
119131

120132
ClassDef(RooCmdArg,2) // Generic named argument container
121133
};

roofit/roofitcore/inc/RooGlobalFunc.h

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,6 @@
1919
#include "RooCmdArg.h"
2020
#include <map>
2121
#include <string>
22-
//#include "RooDataHist.h"
23-
//#include "RooAbsPdf.h"
24-
//#include "RooRealConstant.h"
25-
//#include "RooMsgService.h"
2622

2723
class RooDataHist ;
2824
class RooDataSet ;
@@ -46,9 +42,6 @@ class RooNumIntConfig ;
4642
class RooArgList ;
4743
class RooAbsCollection ;
4844
class TH1 ;
49-
class TF1 ;
50-
class TF2 ;
51-
class TF3 ;
5245
class TTree ;
5346

5447
/*! \namespace RooFit
@@ -83,10 +76,13 @@ enum MPSplit { BulkPartition=0, Interleave=1, SimComponents=2, Hybrid=3 } ;
8376
RooCmdArg DrawOption(const char* opt) ;
8477
RooCmdArg Normalization(Double_t scaleFactor) ;
8578
RooCmdArg Slice(const RooArgSet& sliceSet) ;
79+
RooCmdArg Slice(RooArgSet && sliceSet) ;
8680
RooCmdArg Slice(RooCategory& cat, const char* label) ;
8781
RooCmdArg Project(const RooArgSet& projSet) ;
82+
RooCmdArg Project(RooArgSet && projSet) ;
8883
RooCmdArg ProjWData(const RooAbsData& projData, Bool_t binData=kFALSE) ;
8984
RooCmdArg ProjWData(const RooArgSet& projSet, const RooAbsData& projData, Bool_t binData=kFALSE) ;
85+
RooCmdArg ProjWData(RooArgSet && projSet, const RooAbsData& projData, Bool_t binData=kFALSE) ;
9086
RooCmdArg Asymmetry(const RooCategory& cat) ;
9187
RooCmdArg Precision(Double_t prec) ;
9288
RooCmdArg ShiftToZero() ;
@@ -108,11 +104,13 @@ RooCmdArg MoveToBack() ;
108104
RooCmdArg VisualizeError(const RooDataSet& paramData, Double_t Z=1) ;
109105
RooCmdArg VisualizeError(const RooFitResult& fitres, Double_t Z=1, Bool_t linearMethod=kTRUE) ;
110106
RooCmdArg VisualizeError(const RooFitResult& fitres, const RooArgSet& param, Double_t Z=1, Bool_t linearMethod=kTRUE) ;
107+
RooCmdArg VisualizeError(const RooFitResult& fitres, RooArgSet && param, Double_t Z=1, Bool_t linearMethod=kTRUE) ;
111108
RooCmdArg ShowProgress() ;
112109

113110
// RooAbsPdf::plotOn arguments
114111
RooCmdArg Normalization(Double_t scaleFactor, Int_t scaleType) ;
115112
RooCmdArg Components(const RooArgSet& compSet) ;
113+
RooCmdArg Components(RooArgSet && compSet) ;
116114
RooCmdArg Components(const char* compSpec) ;
117115

118116
// RooAbsData::plotOn arguments
@@ -156,7 +154,9 @@ RooCmdArg Import(RooDataSet& data) ;
156154
RooCmdArg Import(TTree& tree) ;
157155
RooCmdArg ImportFromFile(const char* fname, const char* tname) ;
158156
RooCmdArg StoreError(const RooArgSet& aset) ;
157+
RooCmdArg StoreError(RooArgSet && aset) ;
159158
RooCmdArg StoreAsymError(const RooArgSet& aset) ;
159+
RooCmdArg StoreAsymError(RooArgSet && aset) ;
160160
RooCmdArg OwnLinked() ;
161161

162162
/** @} */
@@ -183,9 +183,11 @@ RooCmdArg AutoBinning(Int_t nbins=100, Double_t marginFactor=0.1) ;
183183

184184
// RooAbsReal::fillHistogram arguments
185185
RooCmdArg IntegratedObservables(const RooArgSet& intObs) ;
186+
RooCmdArg IntegratedObservables(RooArgSet && intObs) ;
186187

187188
// RooAbsData::reduce arguments
188189
RooCmdArg SelectVars(const RooArgSet& vars) ;
190+
RooCmdArg SelectVars(RooArgSet && vars) ;
189191
RooCmdArg EventRange(Int_t nStart, Int_t nStop) ;
190192

191193

@@ -216,13 +218,17 @@ RooCmdArg InitialHesse(Bool_t flag=kTRUE) ;
216218
RooCmdArg Hesse(Bool_t flag=kTRUE) ;
217219
RooCmdArg Minos(Bool_t flag=kTRUE) ;
218220
RooCmdArg Minos(const RooArgSet& minosArgs) ;
221+
RooCmdArg Minos(RooArgSet && minosArgs) ;
219222
RooCmdArg SplitRange(Bool_t flag=kTRUE) ;
220223
RooCmdArg SumCoefRange(const char* rangeName) ;
221224
RooCmdArg Constrain(const RooArgSet& params) ;
225+
RooCmdArg Constrain(RooArgSet && params) ;
222226
RooCmdArg GlobalObservables(const RooArgSet& globs) ;
227+
RooCmdArg GlobalObservables(RooArgSet && globs) ;
223228
RooCmdArg GlobalObservablesTag(const char* tagName) ;
224229
//RooCmdArg Constrained() ;
225230
RooCmdArg ExternalConstraints(const RooArgSet& constraintPdfs) ;
231+
RooCmdArg ExternalConstraints(RooArgSet && constraintPdfs) ;
226232
RooCmdArg PrintEvalErrors(Int_t numErrors) ;
227233
RooCmdArg EvalErrorWall(Bool_t flag) ;
228234
RooCmdArg SumW2Error(Bool_t flag) ;
@@ -238,13 +244,17 @@ RooCmdArg RecoverFromUndefinedRegions(double strength);
238244
RooCmdArg Label(const char* str) ;
239245
RooCmdArg Layout(Double_t xmin, Double_t xmax=0.99, Double_t ymin=0.95) ;
240246
RooCmdArg Parameters(const RooArgSet& params) ;
247+
RooCmdArg Parameters(RooArgSet && params) ;
241248
RooCmdArg ShowConstants(Bool_t flag=kTRUE) ;
242249

243250
// RooTreeData::statOn arguments
244251
RooCmdArg What(const char* str) ;
245252

246253
// RooProdPdf::ctor arguments
247254
RooCmdArg Conditional(const RooArgSet& pdfSet, const RooArgSet& depSet, Bool_t depsAreCond=kFALSE) ;
255+
RooCmdArg Conditional(RooArgSet && pdfSet, const RooArgSet& depSet, Bool_t depsAreCond=kFALSE) ;
256+
RooCmdArg Conditional(const RooArgSet& pdfSet, RooArgSet && depSet, Bool_t depsAreCond=kFALSE) ;
257+
RooCmdArg Conditional(RooArgSet && pdfSet, RooArgSet && depSet, Bool_t depsAreCond=kFALSE) ;
248258

249259
/**
250260
* \defgroup Generating Arguments for generating data
@@ -274,6 +284,7 @@ RooCmdArg IntrinsicBinning(Bool_t flag=kTRUE) ;
274284

275285
// RooAbsReal::createIntegral arguments
276286
RooCmdArg NormSet(const RooArgSet& nset) ;
287+
RooCmdArg NormSet(RooArgSet && nset) ;
277288
RooCmdArg NumIntConfig(const RooNumIntConfig& cfg) ;
278289

279290
// RooMCStudy::ctor arguments
@@ -330,6 +341,7 @@ RooCmdArg Restrict(const char* catName, const char* stateNameList) ;
330341

331342
// RooAbsPdf::createCdf() arguments
332343
RooCmdArg SupNormSet(const RooArgSet& nset) ;
344+
RooCmdArg SupNormSet(RooArgSet && nset) ;
333345
RooCmdArg ScanParameters(Int_t nbins,Int_t intOrder) ;
334346
RooCmdArg ScanNumCdf() ;
335347
RooCmdArg ScanAllCdf() ;

roofit/roofitcore/src/RooCmdArg.cxx

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,9 @@ RooCmdArg::RooCmdArg(const char* name, Int_t i1, Int_t i2, Double_t d1, Double_t
101101
if (ca) {
102102
_argList.Add(new RooCmdArg(*ca)) ;
103103
}
104+
105+
_sharedData.reset(new DataCollection);
106+
_sharedData->swap(_nextSharedData);
104107
}
105108

106109

@@ -109,7 +112,8 @@ RooCmdArg::RooCmdArg(const char* name, Int_t i1, Int_t i2, Double_t d1, Double_t
109112
/// Copy constructor
110113

111114
RooCmdArg::RooCmdArg(const RooCmdArg& other) :
112-
TNamed(other)
115+
TNamed(other),
116+
_sharedData{other._sharedData}
113117
{
114118
_i[0] = other._i[0] ;
115119
_i[1] = other._i[1] ;
@@ -143,6 +147,8 @@ RooCmdArg& RooCmdArg::operator=(const RooCmdArg& other)
143147
{
144148
if (&other==this) return *this ;
145149

150+
_sharedData = other._sharedData;
151+
146152
SetName(other.GetName()) ;
147153
SetTitle(other.GetTitle()) ;
148154

@@ -224,3 +230,5 @@ void RooCmdArg::Print(const char*) const {
224230
<< "\nstrings\t" << _s[0] << " " << _s[1] << " " << _s[2]
225231
<< "\nobjects\t" << _o[0] << " " << _o[1] << std::endl;
226232
}
233+
234+
RooCmdArg::DataCollection RooCmdArg::_nextSharedData = RooCmdArg::DataCollection{};

roofit/roofitcore/src/RooGlobalFunc.cxx

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,17 @@ namespace RooFit {
3838
// RooAbsReal::plotOn arguments
3939
RooCmdArg DrawOption(const char* opt) { return RooCmdArg("DrawOption",0,0,0,0,opt,0,0,0) ; }
4040
RooCmdArg Slice(const RooArgSet& sliceSet) { return RooCmdArg("SliceVars",0,0,0,0,0,0,&sliceSet,0) ; }
41+
RooCmdArg Slice(RooArgSet && sliceSet) { return Slice(RooCmdArg::take(std::move(sliceSet))); }
4142
RooCmdArg Slice(RooCategory& cat, const char* label) { return RooCmdArg("SliceCat",0,0,0,0,label,0,&cat,0) ; }
4243

4344
RooCmdArg Project(const RooArgSet& projSet) { return RooCmdArg("Project",0,0,0,0,0,0,&projSet,0) ; }
45+
RooCmdArg Project(RooArgSet && projSet) { return Project(RooCmdArg::take(std::move(projSet))); }
4446
RooCmdArg ProjWData(const RooArgSet& projSet,
4547
const RooAbsData& projData,
4648
Bool_t binData) { return RooCmdArg("ProjData",binData,0,0,0,0,0,&projSet,&projData) ; }
49+
RooCmdArg ProjWData(RooArgSet && projSet, const RooAbsData& projData, Bool_t binData) {
50+
return ProjWData(RooCmdArg::take(std::move(projSet)), projData, binData);
51+
}
4752
RooCmdArg ProjWData(const RooAbsData& projData,
4853
Bool_t binData) { return RooCmdArg("ProjData",binData,0,0,0,0,0,0,&projData) ; }
4954
RooCmdArg Asymmetry(const RooCategory& cat) { return RooCmdArg("Asymmetry",0,0,0,0,0,0,&cat,0) ; }
@@ -68,11 +73,15 @@ namespace RooFit {
6873
RooCmdArg VisualizeError(const RooFitResult& fitres, Double_t Z, Bool_t EVmethod) { return RooCmdArg("VisualizeError",EVmethod,0,Z,0,0,0,&fitres,0) ; }
6974
RooCmdArg VisualizeError(const RooFitResult& fitres, const RooArgSet& param, Double_t Z, Bool_t EVmethod)
7075
{ return RooCmdArg("VisualizeError",EVmethod,0,Z,0,0,0,&fitres,0,0,0,&param) ; }
76+
RooCmdArg VisualizeError(const RooFitResult& fitres, RooArgSet && param, Double_t Z, Bool_t linearMethod) {
77+
return VisualizeError(fitres, RooCmdArg::take(std::move(param)), Z, linearMethod);
78+
}
7179
RooCmdArg VisualizeError(const RooDataSet& paramData, Double_t Z) { return RooCmdArg("VisualizeErrorData",0,0,Z,0,0,0,&paramData,0) ; }
7280
RooCmdArg ShowProgress() { return RooCmdArg("ShowProgress",1,0,0,0,0,0,0,0) ; }
7381

7482
// RooAbsPdf::plotOn arguments
7583
RooCmdArg Components(const RooArgSet& compSet) { return RooCmdArg("SelectCompSet",0,0,0,0,0,0,&compSet,0) ; }
84+
RooCmdArg Components(RooArgSet && compSet) { return Components(RooCmdArg::take(std::move(compSet))); }
7685
RooCmdArg Components(const char* compSpec) { return RooCmdArg("SelectCompSpec",0,0,0,0,compSpec,0,0,0) ; }
7786
RooCmdArg Normalization(Double_t scaleFactor, Int_t scaleType)
7887
{ return RooCmdArg("Normalization",scaleType,0,scaleFactor,0,0,0,0,0) ; }
@@ -129,7 +138,9 @@ namespace RooFit {
129138
RooCmdArg Import(TTree& tree) { return RooCmdArg("ImportTree",0,0,0,0,0,0,reinterpret_cast<TObject*>(&tree),0) ; }
130139
RooCmdArg ImportFromFile(const char* fname, const char* tname){ return RooCmdArg("ImportFromFile",0,0,0,0,fname,tname,0,0) ; }
131140
RooCmdArg StoreError(const RooArgSet& aset) { return RooCmdArg("StoreError",0,0,0,0,0,0,0,0,0,0,&aset) ; }
141+
RooCmdArg StoreError(RooArgSet && aset) { return StoreError(RooCmdArg::take(std::move(aset))); }
132142
RooCmdArg StoreAsymError(const RooArgSet& aset) { return RooCmdArg("StoreAsymError",0,0,0,0,0,0,0,0,0,0,&aset) ; }
143+
RooCmdArg StoreAsymError(RooArgSet && aset) { return StoreAsymError(RooCmdArg::take(std::move(aset))); }
133144
RooCmdArg OwnLinked() { return RooCmdArg("OwnLinked",1,0,0,0,0,0,0,0,0,0,0) ; }
134145

135146
RooCmdArg Import(const std::map<std::string,RooDataSet*>& arg) {
@@ -180,6 +191,7 @@ namespace RooFit {
180191

181192
// RooAbsData::reduce arguments
182193
RooCmdArg SelectVars(const RooArgSet& vars) { return RooCmdArg("SelectVars",0,0,0,0,0,0,&vars,0) ; }
194+
RooCmdArg SelectVars(RooArgSet && vars) { return SelectVars(RooCmdArg::take(std::move(vars))); }
183195
RooCmdArg EventRange(Int_t nStart, Int_t nStop) { return RooCmdArg("EventRange",nStart,nStop,0,0,0,0,0,0) ; }
184196

185197
// RooAbsPdf::fitTo arguments
@@ -196,15 +208,19 @@ namespace RooFit {
196208
RooCmdArg Hesse(Bool_t flag) { return RooCmdArg("Hesse",flag,0,0,0,0,0,0,0) ; }
197209
RooCmdArg Minos(Bool_t flag) { return RooCmdArg("Minos",flag,0,0,0,0,0,0,0) ; }
198210
RooCmdArg Minos(const RooArgSet& minosArgs) { return RooCmdArg("Minos",kTRUE,0,0,0,0,0,&minosArgs,0) ; }
211+
RooCmdArg Minos(RooArgSet && minosArgs) { return Minos(RooCmdArg::take(std::move(minosArgs))); }
199212
RooCmdArg ConditionalObservables(const RooArgSet& set) { return RooCmdArg("ProjectedObservables",0,0,0,0,0,0,0,0,0,0,&set) ; }
200213
RooCmdArg ProjectedObservables(const RooArgSet& set) { return RooCmdArg("ProjectedObservables",0,0,0,0,0,0,0,0,0,0,&set) ; }
201214
RooCmdArg SplitRange(Bool_t flag) { return RooCmdArg("SplitRange",flag,0,0,0,0,0,0,0) ; }
202215
RooCmdArg SumCoefRange(const char* rangeName) { return RooCmdArg("SumCoefRange",0,0,0,0,rangeName,0,0,0) ; }
203216
RooCmdArg Constrain(const RooArgSet& params) { return RooCmdArg("Constrain",0,0,0,0,0,0,0,0,0,0,&params) ; }
217+
RooCmdArg Constrain(RooArgSet && params) { return Constrain(RooCmdArg::take(std::move(params))); }
204218
RooCmdArg GlobalObservables(const RooArgSet& globs) { return RooCmdArg("GlobalObservables",0,0,0,0,0,0,0,0,0,0,&globs) ; }
219+
RooCmdArg GlobalObservables(RooArgSet && globs) { return GlobalObservables(RooCmdArg::take(std::move(globs))); }
205220
RooCmdArg GlobalObservablesTag(const char* tagName) { return RooCmdArg("GlobalObservablesTag",0,0,0,0,tagName,0,0,0) ; }
206221
// RooCmdArg Constrained() { return RooCmdArg("Constrained",kTRUE,0,0,0,0,0,0,0) ; }
207222
RooCmdArg ExternalConstraints(const RooArgSet& cpdfs) { return RooCmdArg("ExternalConstraints",0,0,0,0,0,0,&cpdfs,0,0,0,&cpdfs) ; }
223+
RooCmdArg ExternalConstraints(RooArgSet && cpdfs) { return ExternalConstraints(RooCmdArg::take(std::move(cpdfs))); }
208224
RooCmdArg PrintEvalErrors(Int_t numErrors) { return RooCmdArg("PrintEvalErrors",numErrors,0,0,0,0,0,0,0) ; }
209225
RooCmdArg EvalErrorWall(Bool_t flag) { return RooCmdArg("EvalErrorWall",flag,0,0,0,0,0,0,0) ; }
210226
RooCmdArg SumW2Error(Bool_t flag) { return RooCmdArg("SumW2Error",flag,0,0,0,0,0,0,0) ; }
@@ -222,13 +238,23 @@ namespace RooFit {
222238
RooCmdArg Label(const char* str) { return RooCmdArg("Label",0,0,0,0,str,0,0,0) ; }
223239
RooCmdArg Layout(Double_t xmin, Double_t xmax, Double_t ymin) { return RooCmdArg("Layout",Int_t(ymin*10000),0,xmin,xmax,0,0,0,0) ; }
224240
RooCmdArg Parameters(const RooArgSet& params) { return RooCmdArg("Parameters",0,0,0,0,0,0,&params,0) ; }
241+
RooCmdArg Parameters(RooArgSet && params) { return Parameters(RooCmdArg::take(std::move(params))) ; }
225242
RooCmdArg ShowConstants(Bool_t flag) { return RooCmdArg("ShowConstants",flag,0,0,0,0,0,0,0) ; }
226243

227244
// RooTreeData::statOn arguments
228245
RooCmdArg What(const char* str) { return RooCmdArg("What",0,0,0,0,str,0,0,0) ; }
229246

230247
// RooProdPdf::ctor arguments
231248
RooCmdArg Conditional(const RooArgSet& pdfSet, const RooArgSet& depSet, Bool_t depsAreCond) { return RooCmdArg("Conditional",depsAreCond,0,0,0,0,0,0,0,0,0,&pdfSet,&depSet) ; } ;
249+
RooCmdArg Conditional(RooArgSet && pdfSet, const RooArgSet& depSet, Bool_t depsAreCond) {
250+
return Conditional(RooCmdArg::take(std::move(pdfSet)), depSet, depsAreCond);
251+
}
252+
RooCmdArg Conditional(const RooArgSet& pdfSet, RooArgSet && depSet, Bool_t depsAreCond) {
253+
return Conditional(pdfSet, RooCmdArg::take(std::move(depSet)), depsAreCond);
254+
}
255+
RooCmdArg Conditional(RooArgSet && pdfSet, RooArgSet && depSet, Bool_t depsAreCond) {
256+
return Conditional(RooCmdArg::take(std::move(pdfSet)), RooCmdArg::take(std::move(depSet)), depsAreCond);
257+
}
232258

233259
// RooAbsPdf::generate arguments
234260
RooCmdArg ProtoData(const RooDataSet& protoData, Bool_t randomizeOrder, Bool_t resample)
@@ -257,9 +283,11 @@ namespace RooFit {
257283

258284
// RooAbsReal::fillHistogram arguments
259285
RooCmdArg IntegratedObservables(const RooArgSet& intObs) { return RooCmdArg("IntObs",0,0,0,0,0,0,0,0,0,0,&intObs,0) ; } ;
286+
RooCmdArg IntegratedObservables(RooArgSet && intObs) { return IntegratedObservables(RooCmdArg::take(std::move(intObs))); }
260287

261288
// RooAbsReal::createIntegral arguments
262289
RooCmdArg NormSet(const RooArgSet& nset) { return RooCmdArg("NormSet",0,0,0,0,0,0,&nset,0) ; }
290+
RooCmdArg NormSet(RooArgSet && nset) { return NormSet(RooCmdArg::take(std::move(nset))); }
263291
RooCmdArg NumIntConfig(const RooNumIntConfig& cfg) { return RooCmdArg("NumIntConfig",0,0,0,0,0,0,&cfg,0) ; }
264292

265293
// RooMCStudy::ctor arguments
@@ -331,6 +359,7 @@ namespace RooFit {
331359

332360
// RooAbsPdf::createCdf() arguments
333361
RooCmdArg SupNormSet(const RooArgSet& nset) { return RooCmdArg("SupNormSet",0,0,0,0,0,0,&nset,0) ; }
362+
RooCmdArg SupNormSet(RooArgSet && nset) { return SupNormSet(RooCmdArg::take(std::move(nset))); }
334363
RooCmdArg ScanParameters(Int_t nbins,Int_t intOrder) { return RooCmdArg("ScanParameters",nbins,intOrder,0,0,0,0,0,0) ; }
335364
RooCmdArg ScanNumCdf() { return RooCmdArg("ScanNumCdf",1,0,0,0,0,0,0,0) ; }
336365
RooCmdArg ScanAllCdf() { return RooCmdArg("ScanAllCdf",1,0,0,0,0,0,0,0) ; }

0 commit comments

Comments
 (0)