26 class RooAbsGenContext ;
 
   30 class RooAbsMCStudyModule ;
 
   32 class RooMCStudy : 
public TNamed {
 
   35   RooMCStudy(
const RooAbsPdf& model, 
const RooArgSet& observables, 
 
   36         const RooCmdArg& arg1=RooCmdArg::none(), 
const RooCmdArg& arg2=RooCmdArg::none(),
 
   37              const RooCmdArg& arg3=RooCmdArg::none(), 
const RooCmdArg& arg4=RooCmdArg::none(), 
const RooCmdArg& arg5=RooCmdArg::none(),
 
   38              const RooCmdArg& arg6=RooCmdArg::none(), 
const RooCmdArg& arg7=RooCmdArg::none(), 
const RooCmdArg& arg8=RooCmdArg::none()) ;
 
   40   RooMCStudy(
const RooAbsPdf& genModel, 
const RooAbsPdf& fitModel, 
 
   41         const RooArgSet& dependents, 
const char* genOptions=
"",
 
   42         const char* fitOptions=
"", 
const RooDataSet* genProtoData=0,
 
   43         const RooArgSet& projDeps=RooArgSet()) ;
 
   44   virtual ~RooMCStudy() ;
 
   47   void addModule(RooAbsMCStudyModule& module) ;
 
   51   Bool_t generateAndFit(Int_t nSamples, Int_t nEvtPerSample=0, Bool_t keepGenData=kFALSE, 
const char* asciiFilePat=0) ;
 
   52   Bool_t generate(Int_t nSamples, Int_t nEvtPerSample=0, Bool_t keepGenData=kFALSE, 
const char* asciiFilePat=0) ;
 
   53   Bool_t fit(Int_t nSamples, 
const char* asciiFilePat) ;
 
   54   Bool_t fit(Int_t nSamples, TList& dataSetList) ;
 
   55   Bool_t addFitResult(
const RooFitResult& fr) ;
 
   58   const RooArgSet* fitParams(Int_t sampleNum) 
const ;
 
   59   const RooFitResult* fitResult(Int_t sampleNum) 
const ;
 
   60         RooAbsData* genData(Int_t sampleNum) 
const ;
 
   61   const RooDataSet& fitParDataSet() ;
 
   63   const RooDataSet* genParDataSet()
 const { 
 
   70   RooPlot* plotParamOn(RooPlot* frame, 
const RooCmdArg& arg1=RooCmdArg::none(), 
const RooCmdArg& arg2=RooCmdArg::none(),
 
   71                        const RooCmdArg& arg3=RooCmdArg::none(), 
const RooCmdArg& arg4=RooCmdArg::none(),
 
   72                        const RooCmdArg& arg5=RooCmdArg::none(), 
const RooCmdArg& arg6=RooCmdArg::none(),
 
   73                        const RooCmdArg& arg7=RooCmdArg::none(), 
const RooCmdArg& arg8=RooCmdArg::none()) ;
 
   74   RooPlot* plotParam(
const RooRealVar& param, 
const RooCmdArg& arg1=RooCmdArg::none(), 
const RooCmdArg& arg2=RooCmdArg::none(),
 
   75                      const RooCmdArg& arg3=RooCmdArg::none(), 
const RooCmdArg& arg4=RooCmdArg::none(),
 
   76                      const RooCmdArg& arg5=RooCmdArg::none(), 
const RooCmdArg& arg6=RooCmdArg::none(),
 
   77                      const RooCmdArg& arg7=RooCmdArg::none(), 
const RooCmdArg& arg8=RooCmdArg::none()) ;
 
   78   RooPlot* plotParam(
const char* paramName, 
const RooCmdArg& arg1=RooCmdArg::none(), 
const RooCmdArg& arg2=RooCmdArg::none(),
 
   79                      const RooCmdArg& arg3=RooCmdArg::none(), 
const RooCmdArg& arg4=RooCmdArg::none(),
 
   80                      const RooCmdArg& arg5=RooCmdArg::none(), 
const RooCmdArg& arg6=RooCmdArg::none(),
 
   81                      const RooCmdArg& arg7=RooCmdArg::none(), 
const RooCmdArg& arg8=RooCmdArg::none()) ;
 
   82   RooPlot* plotNLL(
const RooCmdArg& arg1=RooCmdArg::none(), 
const RooCmdArg& arg2=RooCmdArg::none(),
 
   83                      const RooCmdArg& arg3=RooCmdArg::none(), 
const RooCmdArg& arg4=RooCmdArg::none(),
 
   84                      const RooCmdArg& arg5=RooCmdArg::none(), 
const RooCmdArg& arg6=RooCmdArg::none(),
 
   85                      const RooCmdArg& arg7=RooCmdArg::none(), 
const RooCmdArg& arg8=RooCmdArg::none()) ;
 
   86   RooPlot* plotError(
const RooRealVar& param, 
const RooCmdArg& arg1=RooCmdArg::none(), 
const RooCmdArg& arg2=RooCmdArg::none(),
 
   87                      const RooCmdArg& arg3=RooCmdArg::none(), 
const RooCmdArg& arg4=RooCmdArg::none(),
 
   88                      const RooCmdArg& arg5=RooCmdArg::none(), 
const RooCmdArg& arg6=RooCmdArg::none(),
 
   89                      const RooCmdArg& arg7=RooCmdArg::none(), 
const RooCmdArg& arg8=RooCmdArg::none()) ;
 
   90   RooPlot* plotPull(
const RooRealVar& param, 
const RooCmdArg& arg1, 
const RooCmdArg& arg2=RooCmdArg::none(),
 
   91                      const RooCmdArg& arg3=RooCmdArg::none(), 
const RooCmdArg& arg4=RooCmdArg::none(),
 
   92                      const RooCmdArg& arg5=RooCmdArg::none(), 
const RooCmdArg& arg6=RooCmdArg::none(),
 
   93                      const RooCmdArg& arg7=RooCmdArg::none(), 
const RooCmdArg& arg8=RooCmdArg::none()) ;
 
   96   RooPlot* plotNLL(Double_t lo, Double_t hi, Int_t nBins=100) ;
 
   97   RooPlot* plotError(
const RooRealVar& param, Double_t lo, Double_t hi, Int_t nbins=100) ;
 
   98   RooPlot* plotPull(
const RooRealVar& param, Double_t lo=-3.0, Double_t hi=3.0, Int_t nbins=25, Bool_t fitGauss=kFALSE) ;
 
  102   friend class RooAbsMCStudyModule ;
 
  104   RooPlot* makeFrameAndPlotCmd(
const RooRealVar& param, RooLinkedList& cmdList, Bool_t symRange=kFALSE) 
const ;
 
  106   Bool_t run(Bool_t generate, Bool_t fit, Int_t nSamples, Int_t nEvtPerSample, Bool_t keepGenData, 
const char* asciiFilePat) ;
 
  107   Bool_t fitSample(RooAbsData* genSample) ;
 
  108   RooFitResult* doFit(RooAbsData* genSample) ;  
 
  112   RooAbsData*       _genSample ;       
 
  113   RooAbsPdf*        _genModel ;        
 
  114   RooAbsGenContext* _genContext ;      
 
  115   RooArgSet*        _genInitParams ;   
 
  116   RooArgSet*        _genParams ;       
 
  117   const RooDataSet* _genProtoData ;    
 
  118   RooArgSet         _projDeps ;        
 
  120   RooAbsPdf*        _constrPdf ;        
 
  121   RooAbsGenContext* _constrGenContext ; 
 
  123   RooArgSet    _dependents ;    
 
  124   RooArgSet    _allDependents ; 
 
  125   RooAbsPdf*   _fitModel ;      
 
  126   RooArgSet*   _fitInitParams ; 
 
  127   RooArgSet*   _fitParams ;     
 
  128   RooRealVar*  _nllVar ;
 
  129   RooRealVar*  _ngenVar ; 
 
  133   RooDataSet* _genParData ;     
 
  134   RooDataSet* _fitParData ;     
 
  135   TString     _fitOptions ;     
 
  136   RooLinkedList _fitOptList ;   
 
  137   Bool_t      _extendedGen ;    
 
  142   Bool_t      _canAddFitResults ; 
 
  144   Bool_t      _perExptGenParams ; 
 
  147   std::list<RooAbsMCStudyModule*> _modList ; 
 
  150   RooFitResult* refit(RooAbsData* genSample=0) ;
 
  151   void resetFitParams() ;
 
  152   virtual void RecursiveRemove(TObject *obj);
 
  156   RooMCStudy(
const RooMCStudy&) ;
 
  158   ClassDef(RooMCStudy,0)