RooMCStudy is a help class to facilitate Monte Carlo studies such as 'goodness-of-fit' studies, that involve fitting a PDF to multiple toy Monte Carlo sets generated from the same PDF or another PDF.
Given a fit PDF and a generator PDF, RooMCStudy can produce large numbers of toyMC samples and/or fit these samples and acculumate the final parameters of each fit in a dataset.
Additional plotting routines simplify the task of plotting the distribution of the minimized likelihood, each parameters fitted value, fitted error and pull distribution.
Class RooMCStudy provides the option to insert add-in modules that modify the generate and fit cycle and allow to perform extra steps in the cycle. Output of these modules can be stored alongside the fit results in the aggregate results dataset. These study modules should derive from classs RooAbsMCStudyModel
RooMCStudy(const RooAbsPdf& genModel, const RooAbsPdf& fitModel, const RooArgSet& dependents, const char* genOptions = "", const char* fitOptions = "", const RooDataSet* genProtoData = 0, const RooArgSet& projDeps = RooArgSet()) | |
RooMCStudy(const RooAbsPdf& model, const RooArgSet& observables, const RooCmdArg& arg1 = RooCmdArg::none(), const RooCmdArg& arg2 = RooCmdArg::none(), const RooCmdArg& arg3 = RooCmdArg::none(), const RooCmdArg& arg4 = RooCmdArg::none(), const RooCmdArg& arg5 = RooCmdArg::none(), const RooCmdArg& arg6 = RooCmdArg::none(), const RooCmdArg& arg7 = RooCmdArg::none(), const RooCmdArg& arg8 = RooCmdArg::none()) | |
virtual | ~RooMCStudy() |
void | TObject::AbstractMethod(const char* method) const |
Bool_t | addFitResult(const RooFitResult& fr) |
void | addModule(RooAbsMCStudyModule& module) |
virtual void | TObject::AppendPad(Option_t* option = "") |
virtual void | TObject::Browse(TBrowser* b) |
static TClass* | Class() |
virtual const char* | TObject::ClassName() const |
virtual void | TNamed::Clear(Option_t* option = "") |
virtual TObject* | TNamed::Clone(const char* newname = "") const |
virtual Int_t | TNamed::Compare(const TObject* obj) const |
virtual void | TNamed::Copy(TObject& named) const |
virtual void | TObject::Delete(Option_t* option = "")MENU |
virtual Int_t | TObject::DistancetoPrimitive(Int_t px, Int_t py) |
virtual void | TObject::Draw(Option_t* option = "") |
virtual void | TObject::DrawClass() constMENU |
virtual TObject* | TObject::DrawClone(Option_t* option = "") constMENU |
virtual void | TObject::Dump() constMENU |
virtual void | TObject::Error(const char* method, const char* msgfmt) const |
virtual void | TObject::Execute(const char* method, const char* params, Int_t* error = 0) |
virtual void | TObject::Execute(TMethod* method, TObjArray* params, Int_t* error = 0) |
virtual void | TObject::ExecuteEvent(Int_t event, Int_t px, Int_t py) |
virtual void | TObject::Fatal(const char* method, const char* msgfmt) const |
virtual void | TNamed::FillBuffer(char*& buffer) |
virtual TObject* | TObject::FindObject(const char* name) const |
virtual TObject* | TObject::FindObject(const TObject* obj) const |
Bool_t | fit(Int_t nSamples, const char* asciiFilePat) |
Bool_t | fit(Int_t nSamples, TList& dataSetList) |
const RooArgSet* | fitParams(Int_t sampleNum) const |
const RooDataSet& | fitParDataSet() |
const RooFitResult* | fitResult(Int_t sampleNum) const |
const RooAbsData* | genData(Int_t sampleNum) const |
Bool_t | generate(Int_t nSamples, Int_t nEvtPerSample = 0, Bool_t keepGenData = kFALSE, const char* asciiFilePat = 0) |
Bool_t | generateAndFit(Int_t nSamples, Int_t nEvtPerSample = 0, Bool_t keepGenData = kFALSE, const char* asciiFilePat = 0) |
const RooDataSet* | genParDataSet() const |
virtual Option_t* | TObject::GetDrawOption() const |
static Long_t | TObject::GetDtorOnly() |
virtual const char* | TObject::GetIconName() const |
virtual const char* | TNamed::GetName() const |
virtual char* | TObject::GetObjectInfo(Int_t px, Int_t py) const |
static Bool_t | TObject::GetObjectStat() |
virtual Option_t* | TObject::GetOption() const |
virtual const char* | TNamed::GetTitle() const |
virtual UInt_t | TObject::GetUniqueID() const |
virtual Bool_t | TObject::HandleTimer(TTimer* timer) |
virtual ULong_t | TNamed::Hash() const |
virtual void | TObject::Info(const char* method, const char* msgfmt) const |
virtual Bool_t | TObject::InheritsFrom(const char* classname) const |
virtual Bool_t | TObject::InheritsFrom(const TClass* cl) const |
virtual void | TObject::Inspect() constMENU |
void | TObject::InvertBit(UInt_t f) |
virtual TClass* | IsA() const |
virtual Bool_t | TObject::IsEqual(const TObject* obj) const |
virtual Bool_t | TObject::IsFolder() const |
Bool_t | TObject::IsOnHeap() const |
virtual Bool_t | TNamed::IsSortable() const |
Bool_t | TObject::IsZombie() const |
virtual void | TNamed::ls(Option_t* option = "") const |
void | TObject::MayNotUse(const char* method) const |
virtual Bool_t | TObject::Notify() |
void | TObject::Obsolete(const char* method, const char* asOfVers, const char* removedFromVers) const |
static void | TObject::operator delete(void* ptr) |
static void | TObject::operator delete(void* ptr, void* vp) |
static void | TObject::operator delete[](void* ptr) |
static void | TObject::operator delete[](void* ptr, void* vp) |
void* | TObject::operator new(size_t sz) |
void* | TObject::operator new(size_t sz, void* vp) |
void* | TObject::operator new[](size_t sz) |
void* | TObject::operator new[](size_t sz, void* vp) |
TNamed& | TNamed::operator=(const TNamed& rhs) |
virtual void | TObject::Paint(Option_t* option = "") |
RooPlot* | plotError(const RooRealVar& param, Double_t lo, Double_t hi, Int_t nbins = 100) |
RooPlot* | plotError(const RooRealVar& param, const RooCmdArg& arg1 = RooCmdArg::none(), const RooCmdArg& arg2 = RooCmdArg::none(), const RooCmdArg& arg3 = RooCmdArg::none(), const RooCmdArg& arg4 = RooCmdArg::none(), const RooCmdArg& arg5 = RooCmdArg::none(), const RooCmdArg& arg6 = RooCmdArg::none(), const RooCmdArg& arg7 = RooCmdArg::none(), const RooCmdArg& arg8 = RooCmdArg::none()) |
RooPlot* | plotNLL(Double_t lo, Double_t hi, Int_t nBins = 100) |
RooPlot* | plotNLL(const RooCmdArg& arg1 = RooCmdArg::none(), const RooCmdArg& arg2 = RooCmdArg::none(), const RooCmdArg& arg3 = RooCmdArg::none(), const RooCmdArg& arg4 = RooCmdArg::none(), const RooCmdArg& arg5 = RooCmdArg::none(), const RooCmdArg& arg6 = RooCmdArg::none(), const RooCmdArg& arg7 = RooCmdArg::none(), const RooCmdArg& arg8 = RooCmdArg::none()) |
RooPlot* | plotParam(const RooRealVar& param, const RooCmdArg& arg1 = RooCmdArg::none(), const RooCmdArg& arg2 = RooCmdArg::none(), const RooCmdArg& arg3 = RooCmdArg::none(), const RooCmdArg& arg4 = RooCmdArg::none(), const RooCmdArg& arg5 = RooCmdArg::none(), const RooCmdArg& arg6 = RooCmdArg::none(), const RooCmdArg& arg7 = RooCmdArg::none(), const RooCmdArg& arg8 = RooCmdArg::none()) |
RooPlot* | plotParam(const char* paramName, const RooCmdArg& arg1 = RooCmdArg::none(), const RooCmdArg& arg2 = RooCmdArg::none(), const RooCmdArg& arg3 = RooCmdArg::none(), const RooCmdArg& arg4 = RooCmdArg::none(), const RooCmdArg& arg5 = RooCmdArg::none(), const RooCmdArg& arg6 = RooCmdArg::none(), const RooCmdArg& arg7 = RooCmdArg::none(), const RooCmdArg& arg8 = RooCmdArg::none()) |
RooPlot* | plotParamOn(RooPlot* frame, const RooCmdArg& arg1 = RooCmdArg::none(), const RooCmdArg& arg2 = RooCmdArg::none(), const RooCmdArg& arg3 = RooCmdArg::none(), const RooCmdArg& arg4 = RooCmdArg::none(), const RooCmdArg& arg5 = RooCmdArg::none(), const RooCmdArg& arg6 = RooCmdArg::none(), const RooCmdArg& arg7 = RooCmdArg::none(), const RooCmdArg& arg8 = RooCmdArg::none()) |
RooPlot* | plotPull(const RooRealVar& param, Double_t lo = -3.0, Double_t hi = 3.0, Int_t nbins = 25, Bool_t fitGauss = kFALSE) |
RooPlot* | plotPull(const RooRealVar& param, const RooCmdArg& arg1, const RooCmdArg& arg2 = RooCmdArg::none(), const RooCmdArg& arg3 = RooCmdArg::none(), const RooCmdArg& arg4 = RooCmdArg::none(), const RooCmdArg& arg5 = RooCmdArg::none(), const RooCmdArg& arg6 = RooCmdArg::none(), const RooCmdArg& arg7 = RooCmdArg::none(), const RooCmdArg& arg8 = RooCmdArg::none()) |
virtual void | TObject::Pop() |
virtual void | TNamed::Print(Option_t* option = "") const |
virtual Int_t | TObject::Read(const char* name) |
virtual void | TObject::RecursiveRemove(TObject* obj) |
void | TObject::ResetBit(UInt_t f) |
virtual void | TObject::SaveAs(const char* filename = "", Option_t* option = "") constMENU |
virtual void | TObject::SavePrimitive(ostream& out, Option_t* option = "") |
void | TObject::SetBit(UInt_t f) |
void | TObject::SetBit(UInt_t f, Bool_t set) |
virtual void | TObject::SetDrawOption(Option_t* option = "")MENU |
static void | TObject::SetDtorOnly(void* obj) |
virtual void | TNamed::SetName(const char* name)MENU |
virtual void | TNamed::SetNameTitle(const char* name, const char* title) |
static void | TObject::SetObjectStat(Bool_t stat) |
virtual void | TNamed::SetTitle(const char* title = "")MENU |
virtual void | TObject::SetUniqueID(UInt_t uid) |
virtual void | ShowMembers(TMemberInspector& insp) |
virtual Int_t | TNamed::Sizeof() const |
virtual void | Streamer(TBuffer& b) |
void | StreamerNVirtual(TBuffer& b) |
virtual void | TObject::SysError(const char* method, const char* msgfmt) const |
Bool_t | TObject::TestBit(UInt_t f) const |
Int_t | TObject::TestBits(UInt_t f) const |
virtual void | TObject::UseCurrentStyle() |
virtual void | TObject::Warning(const char* method, const char* msgfmt) const |
virtual Int_t | TObject::Write(const char* name = 0, Int_t option = 0, Int_t bufsize = 0) |
virtual Int_t | TObject::Write(const char* name = 0, Int_t option = 0, Int_t bufsize = 0) const |
void | calcPulls() |
virtual void | TObject::DoError(int level, const char* location, const char* fmt, va_list va) const |
RooFitResult* | doFit(RooAbsData* genSample) |
Bool_t | fitSample(RooAbsData* genSample) |
RooPlot* | makeFrameAndPlotCmd(const RooRealVar& param, RooLinkedList& cmdList, Bool_t symRange = kFALSE) const |
void | TObject::MakeZombie() |
RooFitResult* | refit(RooAbsData* genSample = 0) |
void | resetFitParams() |
Bool_t | run(Bool_t generate, Bool_t fit, Int_t nSamples, Int_t nEvtPerSample, Bool_t keepGenData, const char* asciiFilePat) |
RooMCStudy(const RooMCStudy&) |
enum TObject::EStatusBits { | kCanDelete | |
kMustCleanup | ||
kObjInCanvas | ||
kIsReferenced | ||
kHasUUID | ||
kCannotPick | ||
kNoContextMenu | ||
kInvalidObject | ||
}; | ||
enum TObject::[unnamed] { | kIsOnHeap | |
kNotDeleted | ||
kZombie | ||
kBitMask | ||
kSingleKey | ||
kOverwrite | ||
kWriteDelete | ||
}; |
RooArgSet | _allDependents | List of generate + prototype dependents |
Bool_t | _binGenData | Bin data between generating and fitting |
Bool_t | _canAddFitResults | Allow adding of external fit results? |
RooAbsGenContext* | _constrGenContext | Generator context for constraints p.d.f |
RooAbsPdf* | _constrPdf | Constraints p.d.f |
RooArgSet | _dependents | List of dependents |
Bool_t | _extendedGen | Add poisson term to number of events to generate? |
RooArgSet* | _fitInitParams | List of initial values of fit parameters |
RooAbsPdf* | _fitModel | Fit model |
RooLinkedList | _fitOptList | Fit option command list |
TString | _fitOptions | Fit options string |
RooDataSet* | _fitParData | Data set of fit parameters of each sample |
RooArgSet* | _fitParams | List of actual fit parameters |
TList | _fitResList | List of RooFitResult fit output objects |
RooAbsGenContext* | _genContext | Generator context |
TList | _genDataList | List of generated data sample |
RooArgSet* | _genInitParams | List of originalgenerator parameters |
RooAbsPdf* | _genModel | Generator model |
RooDataSet* | _genParData | List of of generated parameters of each sample |
RooArgSet* | _genParams | List of actual generator parameters |
const RooDataSet* | _genProtoData | Generator prototype data set |
RooAbsData* | _genSample | Currently generated sample |
list<RooAbsMCStudyModule*> | _modList | List of additional study modules ; |
Double_t | _nExpGen | Number of expected events to generate in extended mode |
RooRealVar* | _ngenVar | |
RooRealVar* | _nllVar | |
Bool_t | _perExptGenParams | Do generation parameter change per event? |
RooArgSet | _projDeps | List of projected dependents in fit |
Bool_t | _randProto | Randomize order of prototype data access |
Bool_t | _silence | Silent running mode? |
Bool_t | _verboseGen | Verbose generation? |
TString | TNamed::fName | object identifier |
TString | TNamed::fTitle | object title |
Construct Monte Carlo Study Manager. This class automates generating data from a given PDF, fitting the PDF to that data and accumulating the fit statistics. The constructor accepts the following arguments model -- The PDF to be studied observables -- The variables of the PDF to be considered the observables Silence() -- Suppress all RooFit messages during running below PROGRESS level FitModel(const RooAbsPdf&) -- The PDF for fitting, if it is different from the PDF for generating ConditionalObservables (const RooArgSet& set) -- The set of observables that the PDF should _not_ be normalized over Binned(Bool_t flag) -- Bin the dataset before fitting it. Speeds up fitting of large data samples FitOptions(const char*) -- Classic fit options, provided for backward compatibility FitOptions(....) -- Options to be used for fitting. All named arguments inside FitOptions() are passed to RooAbsPdf::fitTo(); Verbose(Bool_t flag) -- Activate informational messages in event generation phase Extended(Bool_t flag) -- Determine number of events for each sample anew from a Poisson distribution Constrain(const RooArgSet& pars) -- Apply internal constraints on given parameters in fit and sample constrained parameter values from constraint p.d.f for each toy. ExternalConstraints(const RooArgSet& ) -- Apply internal constraints on given parameters in fit and sample constrained parameter values from constraint p.d.f for each toy. ProtoData(const RooDataSet&, Bool_t randOrder) -- Prototype data for the event generation. If the randOrder flag is set, the order of the dataset will be re-randomized for each generation cycle to protect against systematic biases if the number of generated events does not exactly match the number of events in the prototype dataset at the cost of reduced precision with mu equal to the specified number of events
OBSOLETE, RETAINED FOR BACKWARD COMPATIBILY. PLEASE USE CONSTRUCTOR WITH NAMED ARGUMENTS Constructor with a generator and fit model. Both models may point to the same object. The 'dependents' set of variables is generated in the generator phase. The optional prototype dataset is passed to the generator Available generator options v - Verbose e - Extended: use Poisson distribution for Nevts generated Available fit options See RooAbsPdf::fitTo()
Insert given RooMCStudy add-on module to the processing chain of this MCStudy object
Run engine method. Generate and/or fit, according to flags, 'nSamples' samples of 'nEvtPerSample' events. If keepGenData is set, all generated data sets will be kept in memory and can be accessed later via genData(). When generating, data sets will be written out in ascii form if the pattern string is supplied The pattern, which is a template for snprintf, should look something like "data/toymc_%04d.dat" and should contain one integer field that encodes the sample serial number. When fitting only, data sets may optionally be read from ascii files, using the same file pattern.
Generate and fit 'nSamples' samples of 'nEvtPerSample' events. If keepGenData is set, all generated data sets will be kept in memory and can be accessed later via genData(). Data sets will be written out is ascii form if the pattern string is supplied. The pattern, which is a template for snprintf, should look something like "data/toymc_%04d.dat" and should contain one integer field that encodes the sample serial number.
Generate 'nSamples' samples of 'nEvtPerSample' events. If keepGenData is set, all generated data sets will be kept in memory and can be accessed later via genData(). Data sets will be written out in ascii form if the pattern string is supplied. The pattern, which is a template for snprintf, should look something like "data/toymc_%04d.dat" and should contain one integer field that encodes the sample serial number.
Fit 'nSamples' datasets, which are read from ASCII files.
The ascii file pattern, which is a template for snprintf, should look something like "data/toymc_%04d.dat"
and should contain one integer field that encodes the sample serial number.
Fit 'nSamples' datasets, as supplied in 'dataSetList'
Reset all fit parameters to the initial model parameters at the time of the RooMCStudy constructor
Internal function. Performs actual fit according to specifications
Internal method. Fit given dataset with fit model. If fit converges (TMinuit status code zero) The fit results are appended to the fit results dataset If the fit option "r" is supplied, the RooFitResult objects will always be saved, regardless of the fit status. RooFitResults objects can be retrieved later via fitResult().
Utility function to add fit result from external fit to this RooMCStudy and process its results through the standard RooMCStudy statistics gathering tools. This function allows users to run the toy MC generation and/or fitting in a distributed way and to collect and analyze the results in a RooMCStudy as if they were run locally. This method is only functional if this RooMCStudy object is cleanm, i.e. it was not used to generate and/or fit any samples.
Return a RooDataSet the resulting fit parameters of each toy cycle. This dataset also contains any additional output that was generated by study modules that were added to this RooMCStudy
Return the RooFitResult object of the fit to given sample
Return the given generated dataset. This method will only return datasets if during the run cycle it was indicated that generator data should be saved.
Plot the distribution of fitted values of a parameter. The parameter shown is the one from which the RooPlot was created, e.g. RooPlot* frame = param.frame(100,-10,10) ; mcstudy.paramOn(frame,LineStyle(kDashed)) ; Any named arguments passed to plotParamOn() are forwarded to the underlying plotOn() call
Plot the distribution of the fitted value of the given parameter on a newly created frame. This function accepts the following optional arguments FrameRange(double lo, double hi) -- Set range of frame to given specification FrameBins(int bins) -- Set default number of bins of frame to given number Frame(...) -- Pass supplied named arguments to RooAbsRealLValue::frame() function. See frame() function for list of allowed arguments If no frame specifications are given, the AutoRange() feature will be used to set the range Any other named argument is passed to the RooAbsData::plotOn() call. See that function for allowed options
Plot the distribution of the fitted value of the given parameter on a newly created frame. This function accepts the following optional arguments FrameRange(double lo, double hi) -- Set range of frame to given specification FrameBins(int bins) -- Set default number of bins of frame to given number Frame(...) -- Pass supplied named arguments to RooAbsRealLValue::frame() function. See frame() function for list of allowed arguments If no frame specifications are given, the AutoRange() feature will be used to set the range Any other named argument is passed to the RooAbsData::plotOn() call. See that function for allowed options
Plot the distribution of the -log(L) values on a newly created frame. This function accepts the following optional arguments FrameRange(double lo, double hi) -- Set range of frame to given specification FrameBins(int bins) -- Set default number of bins of frame to given number Frame(...) -- Pass supplied named arguments to RooAbsRealLValue::frame() function. See frame() function for list of allowed arguments If no frame specifications are given, the AutoRange() feature will be used to set the range Any other named argument is passed to the RooAbsData::plotOn() call. See that function for allowed options
Plot the distribution of the fit errors for the specified parameter on a newly created frame. This function accepts the following optional arguments FrameRange(double lo, double hi) -- Set range of frame to given specification FrameBins(int bins) -- Set default number of bins of frame to given number Frame(...) -- Pass supplied named arguments to RooAbsRealLValue::frame() function. See frame() function for list of allowed arguments If no frame specifications are given, the AutoRange() feature will be used to set the range Any other named argument is passed to the RooAbsData::plotOn() call. See that function for allowed options
Plot the distribution of pull values for the specified parameter on a newly created frame. If asymmetric errors are calculated in the fit (by MINOS) those will be used in the pull calculation This function accepts the following optional arguments FrameRange(double lo, double hi) -- Set range of frame to given specification FrameBins(int bins) -- Set default number of bins of frame to given number Frame(...) -- Pass supplied named arguments to RooAbsRealLValue::frame() function. See frame() function for list of allowed arguments FitGauss(Bool_t flag) -- Add a gaussian fit to the frame If no frame specifications are given, the AutoSymRange() feature will be used to set the range Any other named argument is passed to the RooAbsData::plotOn() call. See that function for allowed options
Internal function. Construct RooPlot from given parameter and modify the list of named arguments 'cmdList' to only contain the plot arguments that should be forwarded to RooAbsData::plotOn()
Create a RooPlot of the -log(L) distribution in the range lo-hi with 'nBins' bins
Create a RooPlot of the distribution of the fitted errors of the given parameter. The frame is created with a range [lo,hi] and plotted data will be binned in 'nbins' bins
Return dataset with generator parameters for each toy. When constraints are used these may generally not be the same