00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #ifndef ROO_MC_STUDY
00017 #define ROO_MC_STUDY
00018
00019 #include "TList.h"
00020 #include "TNamed.h"
00021 #include "RooArgSet.h"
00022 #include <list>
00023 class RooAbsPdf;
00024 class RooDataSet ;
00025 class RooAbsData ;
00026 class RooAbsGenContext ;
00027 class RooFitResult ;
00028 class RooPlot ;
00029 class RooRealVar ;
00030 class RooAbsMCStudyModule ;
00031
00032 class RooMCStudy : public TNamed {
00033 public:
00034
00035 RooMCStudy(const RooAbsPdf& model, const RooArgSet& observables,
00036 const RooCmdArg& arg1=RooCmdArg::none(), const RooCmdArg& arg2=RooCmdArg::none(),
00037 const RooCmdArg& arg3=RooCmdArg::none(), const RooCmdArg& arg4=RooCmdArg::none(), const RooCmdArg& arg5=RooCmdArg::none(),
00038 const RooCmdArg& arg6=RooCmdArg::none(), const RooCmdArg& arg7=RooCmdArg::none(), const RooCmdArg& arg8=RooCmdArg::none()) ;
00039
00040 RooMCStudy(const RooAbsPdf& genModel, const RooAbsPdf& fitModel,
00041 const RooArgSet& dependents, const char* genOptions="",
00042 const char* fitOptions="", const RooDataSet* genProtoData=0,
00043 const RooArgSet& projDeps=RooArgSet()) ;
00044 virtual ~RooMCStudy() ;
00045
00046
00047 void addModule(RooAbsMCStudyModule& module) ;
00048
00049
00050
00051 Bool_t generateAndFit(Int_t nSamples, Int_t nEvtPerSample=0, Bool_t keepGenData=kFALSE, const char* asciiFilePat=0) ;
00052 Bool_t generate(Int_t nSamples, Int_t nEvtPerSample=0, Bool_t keepGenData=kFALSE, const char* asciiFilePat=0) ;
00053 Bool_t fit(Int_t nSamples, const char* asciiFilePat) ;
00054 Bool_t fit(Int_t nSamples, TList& dataSetList) ;
00055 Bool_t addFitResult(const RooFitResult& fr) ;
00056
00057
00058 const RooArgSet* fitParams(Int_t sampleNum) const ;
00059 const RooFitResult* fitResult(Int_t sampleNum) const ;
00060 const RooDataSet* genData(Int_t sampleNum) const ;
00061 const RooDataSet& fitParDataSet() ;
00062 const RooDataSet* genParDataSet() const {
00063
00064
00065 return _genParData ;
00066 }
00067
00068
00069 RooPlot* plotParamOn(RooPlot* frame, const RooCmdArg& arg1=RooCmdArg::none(), const RooCmdArg& arg2=RooCmdArg::none(),
00070 const RooCmdArg& arg3=RooCmdArg::none(), const RooCmdArg& arg4=RooCmdArg::none(),
00071 const RooCmdArg& arg5=RooCmdArg::none(), const RooCmdArg& arg6=RooCmdArg::none(),
00072 const RooCmdArg& arg7=RooCmdArg::none(), const RooCmdArg& arg8=RooCmdArg::none()) ;
00073 RooPlot* plotParam(const RooRealVar& param, const RooCmdArg& arg1=RooCmdArg::none(), const RooCmdArg& arg2=RooCmdArg::none(),
00074 const RooCmdArg& arg3=RooCmdArg::none(), const RooCmdArg& arg4=RooCmdArg::none(),
00075 const RooCmdArg& arg5=RooCmdArg::none(), const RooCmdArg& arg6=RooCmdArg::none(),
00076 const RooCmdArg& arg7=RooCmdArg::none(), const RooCmdArg& arg8=RooCmdArg::none()) ;
00077 RooPlot* plotParam(const char* paramName, const RooCmdArg& arg1=RooCmdArg::none(), const RooCmdArg& arg2=RooCmdArg::none(),
00078 const RooCmdArg& arg3=RooCmdArg::none(), const RooCmdArg& arg4=RooCmdArg::none(),
00079 const RooCmdArg& arg5=RooCmdArg::none(), const RooCmdArg& arg6=RooCmdArg::none(),
00080 const RooCmdArg& arg7=RooCmdArg::none(), const RooCmdArg& arg8=RooCmdArg::none()) ;
00081 RooPlot* plotNLL(const RooCmdArg& arg1=RooCmdArg::none(), const RooCmdArg& arg2=RooCmdArg::none(),
00082 const RooCmdArg& arg3=RooCmdArg::none(), const RooCmdArg& arg4=RooCmdArg::none(),
00083 const RooCmdArg& arg5=RooCmdArg::none(), const RooCmdArg& arg6=RooCmdArg::none(),
00084 const RooCmdArg& arg7=RooCmdArg::none(), const RooCmdArg& arg8=RooCmdArg::none()) ;
00085 RooPlot* plotError(const RooRealVar& param, const RooCmdArg& arg1=RooCmdArg::none(), const RooCmdArg& arg2=RooCmdArg::none(),
00086 const RooCmdArg& arg3=RooCmdArg::none(), const RooCmdArg& arg4=RooCmdArg::none(),
00087 const RooCmdArg& arg5=RooCmdArg::none(), const RooCmdArg& arg6=RooCmdArg::none(),
00088 const RooCmdArg& arg7=RooCmdArg::none(), const RooCmdArg& arg8=RooCmdArg::none()) ;
00089 RooPlot* plotPull(const RooRealVar& param, const RooCmdArg& arg1, const RooCmdArg& arg2=RooCmdArg::none(),
00090 const RooCmdArg& arg3=RooCmdArg::none(), const RooCmdArg& arg4=RooCmdArg::none(),
00091 const RooCmdArg& arg5=RooCmdArg::none(), const RooCmdArg& arg6=RooCmdArg::none(),
00092 const RooCmdArg& arg7=RooCmdArg::none(), const RooCmdArg& arg8=RooCmdArg::none()) ;
00093
00094
00095 RooPlot* plotNLL(Double_t lo, Double_t hi, Int_t nBins=100) ;
00096 RooPlot* plotError(const RooRealVar& param, Double_t lo, Double_t hi, Int_t nbins=100) ;
00097 RooPlot* plotPull(const RooRealVar& param, Double_t lo=-3.0, Double_t hi=3.0, Int_t nbins=25, Bool_t fitGauss=kFALSE) ;
00098
00099 protected:
00100
00101 friend class RooAbsMCStudyModule ;
00102
00103 RooPlot* makeFrameAndPlotCmd(const RooRealVar& param, RooLinkedList& cmdList, Bool_t symRange=kFALSE) const ;
00104
00105 Bool_t run(Bool_t generate, Bool_t fit, Int_t nSamples, Int_t nEvtPerSample, Bool_t keepGenData, const char* asciiFilePat) ;
00106 Bool_t fitSample(RooAbsData* genSample) ;
00107 RooFitResult* doFit(RooAbsData* genSample) ;
00108
00109 void calcPulls() ;
00110
00111 RooAbsData* _genSample ;
00112 RooAbsPdf* _genModel ;
00113 RooAbsGenContext* _genContext ;
00114 RooArgSet* _genInitParams ;
00115 RooArgSet* _genParams ;
00116 const RooDataSet* _genProtoData ;
00117 RooArgSet _projDeps ;
00118
00119 RooAbsPdf* _constrPdf ;
00120 RooAbsGenContext* _constrGenContext ;
00121
00122 RooArgSet _dependents ;
00123 RooArgSet _allDependents ;
00124 RooAbsPdf* _fitModel ;
00125 RooArgSet* _fitInitParams ;
00126 RooArgSet* _fitParams ;
00127 RooRealVar* _nllVar ;
00128 RooRealVar* _ngenVar ;
00129
00130 TList _genDataList ;
00131 TList _fitResList ;
00132 RooDataSet* _genParData ;
00133 RooDataSet* _fitParData ;
00134 TString _fitOptions ;
00135 RooLinkedList _fitOptList ;
00136 Bool_t _extendedGen ;
00137 Bool_t _binGenData ;
00138 Double_t _nExpGen ;
00139 Bool_t _randProto ;
00140
00141 Bool_t _canAddFitResults ;
00142 Bool_t _verboseGen ;
00143 Bool_t _perExptGenParams ;
00144 Bool_t _silence ;
00145
00146 std::list<RooAbsMCStudyModule*> _modList ;
00147
00148
00149 RooFitResult* refit(RooAbsData* genSample=0) ;
00150 void resetFitParams() ;
00151
00152 private:
00153
00154 RooMCStudy(const RooMCStudy&) ;
00155
00156 ClassDef(RooMCStudy,0)
00157 } ;
00158
00159
00160 #endif
00161