43 ClassImp(RooGenFitStudy);
50 RooGenFitStudy::RooGenFitStudy(
const char* name,
const char* title) :
51 RooAbsStudy(name?name:
"RooGenFitStudy",title?title:
"RooGenFitStudy"),
67 RooGenFitStudy::RooGenFitStudy(
const RooGenFitStudy& other) :
69 _genPdfName(other._genPdfName),
70 _genObsName(other._genObsName),
71 _fitPdfName(other._fitPdfName),
72 _fitObsName(other._fitObsName),
81 TIterator* giter = other._genOpts.MakeIterator() ;
83 while((o=giter->Next())) {
84 _genOpts.Add(o->Clone()) ;
88 TIterator* fiter = other._fitOpts.MakeIterator() ;
89 while((o=fiter->Next())) {
90 _fitOpts.Add(o->Clone()) ;
100 RooGenFitStudy::~RooGenFitStudy()
102 if (_params)
delete _params ;
110 Bool_t RooGenFitStudy::attach(RooWorkspace& w)
112 Bool_t ret = kFALSE ;
114 RooAbsPdf* pdf = w.pdf(_genPdfName.c_str()) ;
118 coutE(InputArguments) <<
"RooGenFitStudy(" << GetName() <<
") ERROR: generator p.d.f named " << _genPdfName <<
" not found in workspace " << w.GetName() << endl ;
122 _genObs.add(w.argSet(_genObsName.c_str())) ;
123 if (_genObs.getSize()==0) {
124 coutE(InputArguments) <<
"RooGenFitStudy(" << GetName() <<
") ERROR: no generator observables defined" << endl ;
128 pdf = w.pdf(_fitPdfName.c_str()) ;
132 coutE(InputArguments) <<
"RooGenFitStudy(" << GetName() <<
") ERROR: fitting p.d.f named " << _fitPdfName <<
" not found in workspace " << w.GetName() << endl ;
136 _fitObs.add(w.argSet(_fitObsName.c_str())) ;
137 if (_fitObs.getSize()==0) {
138 coutE(InputArguments) <<
"RooGenFitStudy(" << GetName() <<
") ERROR: no fitting observables defined" << endl ;
149 void RooGenFitStudy::setGenConfig(
const char* pdfName,
const char* obsName,
const RooCmdArg& arg1,
const RooCmdArg& arg2,
const RooCmdArg& arg3)
151 _genPdfName = pdfName ;
152 _genObsName = obsName ;
153 _genOpts.Add(arg1.Clone()) ;
154 _genOpts.Add(arg2.Clone()) ;
155 _genOpts.Add(arg3.Clone()) ;
162 void RooGenFitStudy::setFitConfig(
const char* pdfName,
const char* obsName,
const RooCmdArg& arg1,
const RooCmdArg& arg2,
const RooCmdArg& arg3)
164 _fitPdfName = pdfName ;
165 _fitObsName = obsName ;
166 _fitOpts.Add(arg1.Clone()) ;
167 _fitOpts.Add(arg2.Clone()) ;
168 _fitOpts.Add(arg3.Clone()) ;
176 Bool_t RooGenFitStudy::initialize()
178 _nllVar =
new RooRealVar(
"NLL",
"-log(Likelihood)",0) ;
179 _ngenVar =
new RooRealVar(
"ngen",
"number of generated events",0) ;
181 _params = _fitPdf->getParameters(_genObs) ;
182 RooArgSet modelParams(*_params) ;
183 _initParams = (RooArgSet*) _params->snapshot() ;
184 _params->add(*_nllVar) ;
185 _params->add(*_ngenVar) ;
187 _genSpec = _genPdf->prepareMultiGen(_genObs,(RooCmdArg&)*_genOpts.At(0),(RooCmdArg&)*_genOpts.At(1),(RooCmdArg&)*_genOpts.At(2)) ;
189 registerSummaryOutput(*_params,modelParams) ;
198 Bool_t RooGenFitStudy::execute()
200 *_params = *_initParams ;
201 RooDataSet* data = _genPdf->generate(*_genSpec) ;
202 RooFitResult* fr = _fitPdf->fitTo(*data,RooFit::Save(kTRUE),(RooCmdArg&)*_fitOpts.At(0),(RooCmdArg&)*_fitOpts.At(1),(RooCmdArg&)*_fitOpts.At(2)) ;
204 if (fr->status()==0) {
205 _ngenVar->setVal(data->sumEntries()) ;
206 _nllVar->setVal(fr->minNll()) ;
207 storeSummaryOutput(*_params) ;
208 storeDetailedOutput(*fr) ;
220 Bool_t RooGenFitStudy::finalize()
240 void RooGenFitStudy::Print(Option_t* )
const