/***************************************************************************** * Project: BaBar detector at the SLAC PEP-II B-factory * Package: RooDKDalitz * File: $Id: RooDKFitMaster.rdl,v 1.109 2010-05-12 22:16:35 martinee Exp $ * See .cc file *****************************************************************************/ #ifndef ROO_DK_FIT_MASTER #define ROO_DK_FIT_MASTER //#include //#include //#include "RVersion.h" #include "TCanvas.h" #include "RooFitCore/RooHistPdf.hh" #include "RooFitCore/RooRealVar.hh" #include "RooFitCore/RooStringVar.hh" #include "RooFitCore/RooDataSet.hh" #include "RooFitCore/RooSimultaneous.hh" #include "RooFitCore/RooCustomizer.hh" #include "RooFitCore/RooFitResult.hh" #include "RooFitCore/RooSimPdfBuilder.hh" #include "RooFitCore/RooMinuit.hh" #include "EvtGenBase/EvtDalitzPlot.hh" #include "RooFitCore/RooGlobalFunc.hh" using namespace RooFit; class RooNLLVar; //class RooDKChi2Var; class RooChi2Var; class TRandom; class RooDKFitProto; #include class RooDKFitMaster { public: enum Container { EXTERNAL, TOYMC } ; enum Method { SEL, MD, MI } ; RooDKFitMaster(const char* configFile="dummy"); ~RooDKFitMaster() ; // main methods void load_datasets(); // load ascii files, build raw datasets, apply cuts and build dataset for fitting into EXTERNAL container void build_pdfs(Method method, Container container); // build global PDFs from prototypes void generateToyMc(Method method); // generate toy Mc samples and put into TOYMC container void perform_fit(Method method, Container container, Int_t nCPUs); // perform fit on given dataset container using the requested method void persist_datasets_toRoot(Method method, Container container); // persist given fit dataset contained in Root file void read_datasets_fromRoot(Container container); // read fit dataset contained in Root file void persist_fitresults_toRoot(Container container); // persist fit result for given fit dataset container in Root file void read_fitresults_fromRoot(); // read back from Root file fit results and put into EXTERNAL dataset container void dumpToyMCGenParameters(const char* asciifile); // dump Toy Mc generated parameter values void dumpParametersToAscii(const char* asciifile,Bool_t kToyMcResults=kFALSE); // dump fit parameters to ascii // other methods RooFitResult* perform_fit(RooAbsPdf* pdf, RooDataSet* data, RooDataHist* data_hist, RooArgSet* physVarsForMinos, Int_t nCPUs); void dumpFractions(TString BMode, TString DMode, TString pdfNameCompRoot, const char* filename, Int_t iAmpInit=0, Int_t iAmpFinal=0); void dumpDalitzAmplitude(TString BMode, TString DMode, TString pdfNameCompRoot, Int_t nbins); void persist_datasets_toRoot(RooDataSet* data, const char* file); RooDataSet* read_datasets_fromRoot(const char* file); void persist_fitresults_toRoot(RooFitResult* fitSelRes, RooArgSet* paramsSelInit, RooFitResult* fitRes, RooArgSet* paramsInit, RooFitResult* fitMIRes, RooArgSet* paramsMIInit, const char* file); void read_fitresults_fromRoot(const char* file); void statisticsTables(RooDataSet* data); void dumpParametersToAscii(const char* rootfile, const char* asciifile); void dumpParametersToAscii(RooFitResult* fitSelResults, RooFitResult* fitResults, RooFitResult* fitMIResults, const char* asciifile); void getListOfRhos(RooFitResult* fitRes, RooArgSet& listOfRhos); void dumpParametersToAscii_input(const char* asciifile); // plotting methods void makePlots(TString BMode, TString DMode, TString opt="All", const char* epsfile_root="results/", Bool_t kToyMc=kFALSE, Bool_t kPdfSel=kFALSE, Int_t nbins=120, TString bkgCompOpt="Y", Bool_t nice=kFALSE, Double_t epsRel=1e-05, Bool_t plotPdf=kTRUE, Bool_t logScale=kFALSE); void makePlotsVar(RooRealVar* var, TString varName, RooDataSet* data, RooAbsPdf* pdf, Int_t nbins, Bool_t logScale, Bool_t plotPdf, TString bkgCompOpt, Bool_t nice, TString niceName, TString niceUnits, TString file_root, RooArgSet& projDataDeps, RooAbsData* projData); TCanvas* makePlotAndResid(RooPlot* dataPlot, RooPlot* pdfPlot, RooPlot* pdfPlotComp1=0, RooPlot* pdfPlotComp2=0, RooPlot* pdfPlotComp3=0, RooPlot* pdfPlotComp4=0, RooPlot* pdfPlotComp5=0, RooPlot* pdfPlotComp6=0, Float_t r=0.2, Bool_t logScale=kFALSE, Bool_t doResid=kTRUE); TCanvas* makePlot(RooPlot* dataPlot, Float_t r=0.2, Bool_t logScale=kFALSE) { return makePlotAndResid(dataPlot,0,0,0,0,0,0,0,r,logScale,kFALSE); } void makeDalitzPlots(TString BMode, TString DMode, Int_t charge, TString opt="Dalitz", const char* epsfile_root="results/", Bool_t kToyMc=kFALSE, Int_t nbins=120, Int_t nevtsToyMc=0, char* epsfile_suffix=0, TString bkgCompOpt="Y", TString slice_cut="", Bool_t nice=kFALSE, Double_t epsRel=1e-05,Bool_t plotPdf=kTRUE, Bool_t logScale=kFALSE, const char* chi2filename="", const char* chi2adaptivefilename="", Int_t nbinsIntegralChi2=1000, Int_t nentriesChi2AdaptiveThr=50); Double_t makeIntegralBinTool(EvtDalitzPlot& dp, RooAbsPdf* pdf, RooRealVar* qPair1, EvtCyclic3::Pair pair1, RooRealVar* qPair2, EvtCyclic3::Pair pair2, Double_t qPair1binLow, Double_t qPair1binWidth, Double_t qPair2binLow, Double_t qPair2binWidth, Int_t ndivPair1, Int_t ndivPair2); Double_t makeIntegralBinTool(RooAbsPdf* pdf, RooRealVar* qPair1, RooRealVar* qPair2, Double_t qPair1binLow, Double_t qPair1binWidth, Double_t qPair2binLow, Double_t qPair2binWidth, Int_t ndivPair1, Int_t ndivPair2); void makeDalitzPlotProjectionsTool(TString BMode, Int_t charge, Int_t nbins, Int_t nevtsToyMc, TString bkgCompOpt, TString slice_cut, Bool_t nice, Bool_t plotPdf, RooDataSet* data_common, RooDataSet* slice_data_common, RooAbsPdf* pdf, RooRealVar* qPair, RooHistPdf *qpair_pdf_slice_toymc_common, RooArgSet& projDataDeps, RooDataHist& projData_hist, TString file_root, TString opt, char* epsfile_suffix, Bool_t logScale=kFALSE, Bool_t thirdProjection=kFALSE, RooRealVar* qPair_other=0, RooFormulaVar* qPair_other_func=0); void makeHarmonicsPlots(TString BMode, TString DMode, Int_t charge, TString opt="Dalitz", const char* epsfile_root="results/", Bool_t kToyMc=kFALSE, Int_t nbins=120, Int_t nevtsToyMc=0, char* epsfile_suffix=0, Bool_t nice=kFALSE, Bool_t mESenhanced=kTRUE, Double_t epsRel=1e-05); void rescaleYields(TString BMode, TString DMode); //void numericIntegrationDalitz(RooAbsPdf* thePdf, RooRealVar* qPair_integral, RooRealVar* qPair_plot, // RooPlot* xframe, Int_t nEvents,Double_t norm, TString subPdfName = "0"); //Double_t numericIntegrationDalitzNorm(RooAbsPdf* thePdf, RooRealVar* qPairA, RooRealVar* qPairB); void makeContourPlots(TString BMode, const char* epsfile_root, Int_t nPointsContour=25, Bool_t c1=kTRUE, Bool_t c2=kTRUE, Bool_t c3=kFALSE, Bool_t c4=kFALSE, Bool_t c5=kFALSE, Bool_t c6=kFALSE); Double_t giveMeHarmonics(Double_t m, Double_t m1, Double_t m2, Double_t m3, Double_t m2rest, Double_t m2angle, Int_t L, Double_t f=0); // proto PDF components object RooDKFitProto* _gFit; // Data sets, fit results and PDFs RooDataSet *_fitData, *_fitDataToyMc ; RooDataSet *_fitDataSel, *_fitDataSelToyMc ; RooSimultaneous *_pdfSel, *_pdfGlobal, *_pdfMIGlobal, *_pdfSelRaw, *_pdfGlobalRaw, *_pdfMIGlobalRaw ; RooSimultaneous *_pdfGlobalToyMc, *_pdfMIGlobalToyMc, *_pdfGlobalRawToyMc, *_pdfMIGlobalRawToyMc ; RooFitResult *_fitSelResults, *_fitResults, *_fitMIResults, *_fitSelResultsToyMc, *_fitResultsToyMc, *_fitMIResultsToyMc ; //RooDataSet *_fitDataSel_bbbar,*_fitData_bbbar; // Configuration variables RooStringVar *_dataRootFile, *_resultsRootFile; RooStringVar *_dkDir,*_dkFiles,*_dpiDir,*_dpiFiles; //RooStringVar *_dkFiles_bbbar,*_dpiFiles_bbbar; RooStringVar *_dsel_dk,*_dsel_dpi,*_dsel_fit,*_dsel_fitSel,*_dsel_dk_fit,*_dsel_dpi_fit; RooStringVar *_dsel_runBlock; RooRealVar *_mESMax,*_mESMin,*_deltaEshiftMax,*_deltaEshiftMin,*_mDMax,*_mDMin,*_mDMax_Sel,*_mDMin_Sel; RooRealVar *_deltamMin,*_deltamMax,*_deltamMin_Sel,*_deltamMax_Sel,*_tRecoMin,*_tRecoMax,*_tErrMin,*_tErrMax,*_tTrueMin,*_tTrueMax; RooRealVar *_fisherMax,*_fisherMin,*_fisherMax_Sel,*_fisherMin_Sel; RooRealVar *_qABBins,*_qACBins,*_qBCBins,*_mESBins,*_deltaEBins,*_deltaEshiftBins,*_mDBins,*_deltamBins,*_tRecoBins,*_tErrBins,*_tTrueBins,*_fisherBins; RooRealVar *_deltaEMax_dkSel,*_deltaEMin_dkSel,*_deltaEMax_dpiSel,*_deltaEMin_dpiSel; RooRealVar *_deltaEMax_dk,*_deltaEMin_dk,*_deltaEMax_dpi,*_deltaEMin_dpi; RooCategory *_minimizer,*_simplex,*_doMinosPhys,*_doBinnedFit,*_typeBinnedFit; RooCategory *_fitVerbose,*_flavorOption,*_deltaEDhOption,*_fixShapeParams,*_fixYieldParams,*_fixDhYieldParams; RooCategory *_mESOption,*_fisherOption; RooCategory *_mDOption,*_deltamOption,*_tErrOption; RooCategory *_removeEvtsOutPS; RooCategory *_phaseShiftWatson; RooCategory *_coherentAmpFakeD; RooCategory *_resFcn; RooStringVar *_diskCachePrefix; RooRealVar *_maxHashMapSize; char* _configFile; RooCategory *_integTypeNorm; RooRealVar *_nBins1DNorm,*_nBins2DNorm; RooRealVar *_nBins2DeffMap; RooCategory *_binningMIOption; RooRealVar *_nMcExpMICoefs; RooArgSet _fileConfigIOData, _fileConfigDriver; // deltaE_dk and deltaE_dpi RooRealVar *_deltaE_dk,*_deltaE_dpi; RooFormulaVar *_deltaE_dk_func,*_deltaE_dpi_func; RooFormulaVar *_deltaE_dk_dummy_func,*_deltaE_dpi_dummy_func; // Blinding RooRealVar *_blindSigma_phaseW,*_blindSigma_phaseS,*_blindSigma_phaseM,*_blindSigma_phaseP,*_blindSigma_rb; RooStringVar *_blindString_phaseW,*_blindString_phaseS,*_blindString_phaseM,*_blindString_phaseP,*_blindString_rb; RooRealVar *_blindSigma_reM,*_blindSigma_imM,*_blindSigma_reP,*_blindSigma_imP; RooStringVar *_blindString_reM,*_blindString_imM,*_blindString_reP,*_blindString_imP; RooRealVar *_blindSigma_absqOverp,*_blindSigma_argqOverp,*_blindSigma_x,*_blindSigma_y; RooStringVar *_blindString_absqOverp,*_blindString_argqOverp,*_blindString_x,*_blindString_y; RooArgSet _blindConfig; // list of initial parameters RooArgSet *_paramsSelInit, *_paramsInit, *_paramsMIInit; // toyMc configuration RooStringVar *_toyMcSeed, *_toyMcDataRootFile, *_toyMcResultsRootFile ; RooCategory *_toyMcOption, *_toyMcFixYields, *_toyMcParamsFromResultsRootFile, *_toyMcRandomizePhysParams ; RooArgSet _fileConfigToyMcGen; // generator TRandom* _generator; // RooMinuit and RooNag objects RooNLLVar* getNLLVar(RooAbsPdf* pdf, RooDataSet* data, RooDataHist* data_hist, Int_t nCPUs); //RooChi2Var* getChi2Var(RooAbsPdf* pdf, RooDataSet* data, RooDataHist* data_hist, Int_t nCPUs); RooNLLVar* _nll; //RooDKChi2Var* _chi2; RooChi2Var* _chi2; RooMinuit* _mMinuit ; #ifdef NAG_C_ROOT RooNag* _mNag ; #endif TH2F* contour(RooRealVar& var1, RooRealVar& var2, Double_t n1=1, Double_t n2=0, Double_t n3=0); // MC integration //std::vector< std::vector > _DmassLineShape; void adaptive2dBinning(const RooDataSet* data, const RooRealVar* qPair1, const RooRealVar* qPair2, const Float_t occ_min, std::vector& xmin, std::vector& ymin, std::vector& xmax, std::vector& ymax, std::vector& occ); void adaptive2dBinning_tool(const std::vector& xdata, const std::vector& ydata, const std::vector& weightdata, const Double_t xmin, const Double_t ymin, const Double_t xmax, const Double_t ymax, const Float_t occ_min, std::vector< std::vector > & bins); protected: void buildAllCuts(Bool_t deltaEin, Bool_t fisherin, Bool_t mDin, Bool_t deltamin, Bool_t runBlockin, TString& dsel_fitSel, TString& dsel_fit, TString& dsel_dk_fit, TString& dsel_dpi_fit); void addCut(RooStringVar* currentCut, RooStringVar* newCut, const char* opt){ addCut(currentCut,newCut->getVal(),opt); } void addCut(RooStringVar* currentCut, const char* newCut, const char* opt); void addCut(TString& currentCut, const char* newCut, const char* opt); void IOToyMc(); void assignFitResultsToPdfParams(RooArgSet* pdfParams, RooArgSet& fitParams); RooAbsPdf* getPdfComp(RooSimultaneous* pdf, RooCatType* typeRunBlock, RooCatType* typeBdecay, RooCatType* typeDdecay, TString& nameComp); void setConstant(RooAbsArg* arg); void removeDdecayParsNotReplicated(RooArgSet* pars); void replaceAmpXbyAmpName(RooArgSet* pars); void removeMIDdecayParsNotUsed(RooArgSet* pars); RooArgSet* selectPHYSParams(const RooArgSet* list); RooSimultaneous* doCustomize(RooSimultaneous* pdf, const RooArgSet& selDataVars); void replaceArg(RooCustomizer *cust, RooArgSet* pars, TString& name, TString& name2); void replaceArgDstStrongPhase(RooCustomizer *cust, RooArgSet* pars, const char* name_root, const char* suffix, const char* suffix2); RooSimultaneous* doDalitzParsCustomize(RooSimultaneous* pdf, const RooArgSet& selDataVars); void replaceDalitzPars(RooCustomizer *cust, RooArgSet* pars, const char* nameAmp, const char* nameAmp2, const char* namePar, TString faked); RooSimultaneous* doPhaseWatsonCustomize(RooSimultaneous* pdf, const RooArgSet& selDataVars); void replacePhaseWatson(RooCustomizer *cust, RooArgSet* pars, const char* suffix, const char* nameAmp, const char* nameAmp2, Double_t phaseShiftDeg); inline Double_t minVal(Double_t a, Double_t b){ return (ab)?a:b; } RooDataSet* generateComp(RooAbsPdf* pdfComp, RooArgSet& depsProto, RooArgSet& depsToGen, RooAbsPdf* pTrkPdf, RooAbsPdf* tErrPdf, Int_t charge=0, Int_t nTotEvts=0); RooRealVar* getDeltaEComp(RooAbsPdf* pdf, Double_t& min, Double_t& max, Double_t& minSel, Double_t& maxSel, Bool_t rangeSel=kFALSE); void rescalePdfCoefs(const RooArgList& pdfList, const RooArgList& coefList, const RooArgSet& deps, const char* rangeName_init, const char* rangeName_final, std::vector& pdfnames, std::vector& coefs_init, std::vector& coefs_final, std::vector& ratios); void randomizePhysParams(RooArgSet& params); Int_t getIndexCat(Int_t indexCatDdecayMode) const; Int_t getIndexCat(TString catDdecayMode) const; RooSimPdfBuilder *_mgr ; std::vector _cust_list; ClassDef(RooDKFitMaster,0) //Implementation of gamma DK Dalitz fit master } ; #endif