50 RooArgSet RooChi2Var::_emptySet ;
71 RooChi2Var::RooChi2Var(
const char *name,
const char* title, RooAbsReal& func, RooDataHist& hdata,
72 const RooCmdArg& arg1,
const RooCmdArg& arg2,
const RooCmdArg& arg3,
73 const RooCmdArg& arg4,
const RooCmdArg& arg5,
const RooCmdArg& arg6,
74 const RooCmdArg& arg7,
const RooCmdArg& arg8,
const RooCmdArg& arg9) :
75 RooAbsOptTestStatistic(name,title,func,hdata,_emptySet,
76 RooCmdConfig::decodeStringOnTheFly(
"RooChi2Var::RooChi2Var",
"RangeWithName",0,
"",arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9).c_str(),
78 RooCmdConfig::decodeIntOnTheFly(
"RooChi2Var::RooChi2Var",
"NumCPU",0,1,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9),
80 RooCmdConfig::decodeIntOnTheFly(
"RooChi2Var::RooChi2Var",
"Verbose",0,1,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9),
83 RooCmdConfig pc(
"RooChi2Var::RooChi2Var") ;
84 pc.defineInt(
"etype",
"DataError",0,(Int_t)RooDataHist::Auto) ;
85 pc.defineInt(
"extended",
"Extended",0,kFALSE) ;
88 pc.process(arg1) ; pc.process(arg2) ; pc.process(arg3) ;
89 pc.process(arg4) ; pc.process(arg5) ; pc.process(arg6) ;
90 pc.process(arg7) ; pc.process(arg8) ; pc.process(arg9) ;
92 if (func.IsA()->InheritsFrom(RooAbsPdf::Class())) {
93 _funcMode = pc.getInt(
"extended") ? ExtendedPdf : Pdf ;
95 _funcMode = Function ;
97 _etype = (RooDataHist::ErrorType) pc.getInt(
"etype") ;
99 if (_etype==RooAbsData::Auto) {
100 _etype = hdata.isNonPoissonWeighted()? RooAbsData::SumW2 : RooAbsData::Expected ;
134 RooChi2Var::RooChi2Var(
const char *name,
const char* title, RooAbsPdf& pdf, RooDataHist& hdata,
135 const RooCmdArg& arg1,
const RooCmdArg& arg2,
const RooCmdArg& arg3,
136 const RooCmdArg& arg4,
const RooCmdArg& arg5,
const RooCmdArg& arg6,
137 const RooCmdArg& arg7,
const RooCmdArg& arg8,
const RooCmdArg& arg9) :
138 RooAbsOptTestStatistic(name,title,pdf,hdata,
139 *(const RooArgSet*)RooCmdConfig::decodeObjOnTheFly(
"RooChi2Var::RooChi2Var",
"ProjectedObservables",0,&_emptySet
140 ,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9),
141 RooCmdConfig::decodeStringOnTheFly(
"RooChi2Var::RooChi2Var",
"RangeWithName",0,
"",arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9).c_str(),
142 RooCmdConfig::decodeStringOnTheFly(
"RooChi2Var::RooChi2Var",
"AddCoefRange",0,
"",arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9).c_str(),
143 RooCmdConfig::decodeIntOnTheFly(
"RooChi2Var::RooChi2Var",
"NumCPU",0,1,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9),
145 RooCmdConfig::decodeIntOnTheFly(
"RooChi2Var::RooChi2Var",
"Verbose",0,1,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9),
146 RooCmdConfig::decodeIntOnTheFly(
"RooChi2Var::RooChi2Var",
"SplitRange",0,0,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9))
148 RooCmdConfig pc(
"RooChi2Var::RooChi2Var") ;
149 pc.defineInt(
"extended",
"Extended",0,kFALSE) ;
150 pc.defineInt(
"etype",
"DataError",0,(Int_t)RooDataHist::Auto) ;
151 pc.allowUndefined() ;
153 pc.process(arg1) ; pc.process(arg2) ; pc.process(arg3) ;
154 pc.process(arg4) ; pc.process(arg5) ; pc.process(arg6) ;
155 pc.process(arg7) ; pc.process(arg8) ; pc.process(arg9) ;
157 _funcMode = pc.getInt(
"extended") ? ExtendedPdf : Pdf ;
158 _etype = (RooDataHist::ErrorType) pc.getInt(
"etype") ;
159 if (_etype==RooAbsData::Auto) {
160 _etype = hdata.isNonPoissonWeighted()? RooAbsData::SumW2 : RooAbsData::Expected ;
182 RooChi2Var::RooChi2Var(
const char *name,
const char *title, RooAbsPdf& pdf, RooDataHist& hdata,
183 Bool_t extended,
const char* cutRange,
const char* addCoefRange,
184 Int_t nCPU, RooFit::MPSplit interleave, Bool_t verbose, Bool_t splitCutRange, RooDataHist::ErrorType etype) :
185 RooAbsOptTestStatistic(name,title,pdf,hdata,RooArgSet(),cutRange,addCoefRange,nCPU,interleave,verbose,splitCutRange),
186 _etype(etype), _funcMode(extended?ExtendedPdf:Pdf)
209 RooChi2Var::RooChi2Var(
const char *name,
const char *title, RooAbsReal& func, RooDataHist& hdata,
210 const RooArgSet& projDeps, RooChi2Var::FuncMode fmode,
const char* cutRange,
const char* addCoefRange,
211 Int_t nCPU, RooFit::MPSplit interleave, Bool_t verbose, Bool_t splitCutRange, RooDataHist::ErrorType etype) :
212 RooAbsOptTestStatistic(name,title,func,hdata,projDeps,cutRange,addCoefRange,nCPU,interleave,verbose,splitCutRange),
213 _etype(etype), _funcMode(fmode)
222 RooChi2Var::RooChi2Var(
const RooChi2Var& other,
const char* name) :
223 RooAbsOptTestStatistic(other,name),
224 _etype(other._etype),
225 _funcMode(other._funcMode)
234 RooChi2Var::~RooChi2Var()
243 Double_t RooChi2Var::evaluatePartition(std::size_t firstEvent, std::size_t lastEvent, std::size_t stepSize)
const
249 Double_t result(0), carry(0);
251 _dataClone->store()->recalculateCache( _projDeps, firstEvent, lastEvent, stepSize, kFALSE) ;
255 Double_t normFactor(1) ;
257 case Function: normFactor=1 ; break ;
258 case Pdf: normFactor = _dataClone->sumEntries() ; break ;
259 case ExtendedPdf: normFactor = ((RooAbsPdf*)_funcClone)->expectedEvents(_dataClone->get()) ; break ;
263 RooDataHist* hdata = (RooDataHist*) _dataClone ;
264 for (
auto i=firstEvent ; i<lastEvent ; i+=stepSize) {
269 if (!hdata->valid())
continue;
271 const Double_t nData = hdata->weight() ;
273 const Double_t nPdf = _funcClone->getVal(_normSet) * normFactor * hdata->binVolume() ;
275 const Double_t eExt = nPdf-nData ;
279 if (_etype != RooAbsData::Expected) {
280 Double_t eIntLo,eIntHi ;
281 hdata->weightError(eIntLo,eIntHi,_etype) ;
282 eInt = (eExt>0) ? eIntHi : eIntLo ;
288 if (0. == eInt * eInt && 0. == nData * nData && 0. == nPdf * nPdf) continue ;
291 if (0. == eInt * eInt) {
292 coutE(Eval) <<
"RooChi2Var::RooChi2Var(" << GetName() <<
") INFINITY ERROR: bin " << i
293 <<
" has zero error" << endl ;
299 Double_t term = eExt*eExt/(eInt*eInt) ;
300 Double_t y = term - carry;
301 Double_t t = result + y;
302 carry = (t - result) - y;