void Fitter::MakePlots(const string& name, const string& title, RooPlot*& pPlot1, RooPlot*& pPlot2, RooAbsPdf* pPdf, RooDataSet* pData) { bool plotbkg = false; RooPlot* pFrame = pPlot1? pPlot1 : pFitVar->frame(RooFit::Bins(50), RooFit::Name(name.c_str()), RooFit::Title(title.c_str())); RooPlot* pFramePull = pPlot2? pPlot2 : pFitVar->frame(RooFit::Bins(50), RooFit::Name((name+"_Pull").c_str()), RooFit::Title((title+" Pull").c_str())); RooHist* pHisPull = NULL; double pullMax = 0.; if(!pPdf && !pData) plotbkg = true; if(!pPdf) pPdf = pTotPdf; if(!pData) pData = this->pData; pData->plotOn(pFrame, RooFit::MarkerSize(0.9)); if(plotbkg) { RooArgList bkgComponent; for(auto& pdf : bkgPdfs) bkgComponent.add(pdf.GetPdf()); pTotPdf->plotOn(pFrame, RooFit::Components(bkgComponent), RooFit::LineColor(kGreen) ); } pPdf->plotOn(pFrame, RooFit::LineColor(kRed)); pPdf->paramOn(pFrame, RooFit::Format("NEU", RooFit::AutoPrecision(1)), RooFit::Layout(0.65, 0.99, 0.93)); pFrame->getAttText()->SetTextSize(0.75*pFrame->GetYaxis()->GetLabelSize()); pHisPull = pFrame->pullHist(); pFramePull->addPlotable(pHisPull, "P"); pullMax = max(fabs(pFramePull->GetMinimum()), pFramePull->GetMaximum()); pFramePull->GetYaxis()->SetRangeUser(-pullMax,pullMax); pPlot1 = pFrame; pPlot2 = pFramePull; }
RooAddPdf *buildSumOfGaussians(string name, RooRealVar *mass, RooRealVar *MH, int nGaussians){ RooArgList *gaussians = new RooArgList(); RooArgList *coeffs = new RooArgList(); for (int g=0; g<nGaussians; g++){ RooRealVar *dm = new RooRealVar(Form("dm_g%d",g),Form("dm_g%d",g),0.1,-5.*(1.+0.5*g),5.*(1.+0.5*g)); RooAbsReal *mean = new RooFormulaVar(Form("mean_g%d",g),Form("mean_g%d",g),"@0+@1",RooArgList(*MH,*dm)); RooRealVar *sigma = new RooRealVar(Form("sigma_g%d",g),Form("sigma_g%d",g),2.,0.7,5.*(1.+0.5*g)); RooGaussian *gaus = new RooGaussian(Form("gaus_g%d",g),Form("gaus_g%d",g),*mass,*mean,*sigma); //tempFitParams.insert(pair<string,RooRealVar*>(string(dm->GetName()),dm)); //tempFitParams.insert(pair<string,RooRealVar*>(string(sigma->GetName()),sigma)); //tempFitUtils.insert(pair<string,RooAbsReal*>(string(mean->GetName()),mean)); //tempGaussians.insert(pair<string,RooGaussian*>(string(gaus->GetName()),gaus)); gaussians->add(*gaus); if (g<nGaussians-1) { RooRealVar *frac = new RooRealVar(Form("frac_g%d",g),Form("frac_g%d",g),0.1,0.01,0.99); //tempFitParams.insert(pair<string,RooRealVar*>(string(frac->GetName()),frac)); coeffs->add(*frac); } if (g==nGaussians-1 && forceFracUnity_){ string formula="1."; for (int i=0; i<nGaussians-1; i++) formula += Form("-@%d",i); RooAbsReal *recFrac = new RooFormulaVar(Form("frac_g%d",g),Form("frac_g%d",g),formula.c_str(),*coeffs); //tempFitUtils.insert(pair<string,RooAbsReal*>(string(recFrac->GetName()),recFrac)); coeffs->add(*recFrac); } } RooAddPdf *tempSumOfGaussians = new RooAddPdf(name.c_str(),name.c_str(),*gaussians,*coeffs,recursive_); return tempSumOfGaussians; }
/// /// Fills vector with floating pars names /// void Utils::getParameters(const RooFitResult &result, std::vector<TString> &names){ RooArgList pars = result.floatParsFinal(); TIterator * it = pars.createIterator(); while(RooRealVar* p = (RooRealVar*) it->Next()){ names.push_back(TString(p->GetName())); } };
testWrapper(){ gSystem->Load("libTMVAWrapper.so"); RooWorkspace w("w"); w.factory("x[-5,5]"); w.factory("alpha[-5,5]"); x = w.var("x"); alpha = w.var("alpha"); // vars = w.allVars(); RooArgList vars; vars.add(*x); vars.add(*alpha); vars.Print(); TMVAWrapper wrap("wrap","wrap", vars, "TMVARegression_alphavary.root_MLP.weights.xml"); wrap.Print("v"); cout << "wrap = " << wrap.getVal() <<endl; x->setVal(1); alpha->setVal(2.); cout << "wrap = " << wrap.getVal() <<endl; // w.import(wrap); // w.Print(); // return; // cout << "\n\nvars are: " << wrap.getListOfVars() << endl; frame = x->frame(); wrap.plotOn(frame); frame->Draw(); }
void THSRooFit::SetDataWeight(){ if(!fInWeights) return; if(fInWeights->GetSpeciesID(fWeightName)<0) return; RooArgList setWeights; RooRealVar wvar(fWeightName,fWeightName,0); setWeights.add(wvar); setWeights.Print(); RooDataSet wData("weights","weights",setWeights) ; //Loop over the weights find the entry for the event ID for(Int_t ev=0;ev<fData->numEntries();ev++){ const RooArgSet* vars=fData->get(ev); fInWeights->GetEntryBinarySearch((Long64_t)vars->getRealValue(fIDBranchName)); // wvar.setVal(fInWeights->GetWeight(fWeightName)); wvar.setVal(fInWeights->GetWeight(fWeightName)); wData.add(setWeights); } wData.Print(); ((RooDataSet*)fData)->merge(&wData); fData->Print(); RooDataSet* tmpData=0; tmpData=new RooDataSet(TString("Weight_")+fWeightName+fData->GetName(),fData->GetTitle(),(RooDataSet*)fData,*fData->get(),0,fWeightName); fData->SetName("Empty");fData->reset();fData=0; fData=tmpData; fData->Print(); if(ftoWS) fWS->import(*fData); //import if told to else if(!(fDataBins))fWS->import(*fData); //or no databins to confuse it }
map<string,RooAddPdf*> getMITPdfs(RooWorkspace *work, int ncats, bool is2011){ map<string,RooAddPdf*> result; RooArgList pdfs; RooArgList norms; string sqrts; string catstring; if (is2011){ sqrts="7TeV"; catstring="cat"; } else { sqrts="8TeV"; catstring="mvacat"; } for (int cat=0; cat<ncats; cat++){ RooAddPdf *ggh = (RooAddPdf*)work->pdf(Form("hggpdfsmrel_%s%d_%s_ggh",catstring.c_str(),cat,sqrts.c_str())); RooAddPdf *vbf = (RooAddPdf*)work->pdf(Form("hggpdfsmrel_%s%d_%s_vbf",catstring.c_str(),cat,sqrts.c_str())); RooAddPdf *wzh = (RooAddPdf*)work->pdf(Form("hggpdfsmrel_%s%d_%s_wzh",catstring.c_str(),cat,sqrts.c_str())); RooAddPdf *tth = (RooAddPdf*)work->pdf(Form("hggpdfsmrel_%s%d_%s_tth",catstring.c_str(),cat,sqrts.c_str())); RooFormulaVar *ggh_norm = (RooFormulaVar*)work->function(Form("hggpdfsmrel_%s%d_%s_ggh_norm",catstring.c_str(),cat,sqrts.c_str())); RooFormulaVar *vbf_norm = (RooFormulaVar*)work->function(Form("hggpdfsmrel_%s%d_%s_vbf_norm",catstring.c_str(),cat,sqrts.c_str())); RooFormulaVar *wzh_norm = (RooFormulaVar*)work->function(Form("hggpdfsmrel_%s%d_%s_wzh_norm",catstring.c_str(),cat,sqrts.c_str())); RooFormulaVar *tth_norm = (RooFormulaVar*)work->function(Form("hggpdfsmrel_%s%d_%s_tth_norm",catstring.c_str(),cat,sqrts.c_str())); pdfs.add(*ggh); pdfs.add(*vbf); pdfs.add(*wzh); pdfs.add(*tth); norms.add(*ggh_norm); norms.add(*vbf_norm); norms.add(*wzh_norm); norms.add(*tth_norm); result.insert(pair<string,RooAddPdf*>(Form("cat%d",cat),new RooAddPdf(Form("sig_cat%d",cat),"sig",RooArgList(*ggh,*vbf,*wzh,*tth),RooArgList(*ggh_norm,*vbf_norm,*wzh_norm,*tth_norm)))); } result.insert(pair<string,RooAddPdf*>("all",new RooAddPdf("sig_all","sig",pdfs,norms))); return result; }
RooArgList Fitter::GetYieldsList() { RooArgList yldList; for(auto& pVec_pdfs : {&sigPdfs, &bkgPdfs}) for(auto& pdf : *pVec_pdfs) yldList.add(pdf.GetYld()); return yldList; }
void makeSystPlot(RooWorkspace *tempWS, RooWorkspace *WS, TString systT, int Bin, int toMassNo, int fromMassNo) { std::cout<< "SystName--> " << systT.Data() << std::endl; RooArgList * hobs = new RooArgList("hobs"); TString xname; if(IFILE.Contains ("Zmm") | IFILE.Contains ("Zee")) { xname = "CMS_vhbb_BDT_Zll_8TeV"; } if(IFILE.Contains("We") | IFILE.Contains("Wm")) { xname = "CMS_vhbb_BDT_Wln_8TeV"; } if(IFILE.Contains ("Zn") && (Bin == 0)) { xname = "CMS_vhbb_BDT_ZnunuLowPt_8TeV"; } if(IFILE.Contains ("Zn") && (Bin == 1)) { xname = "CMS_vhbb_BDT_ZnunuMedPt_8TeV"; } if(IFILE.Contains ("Zn") && (Bin == 2)) { xname = "CMS_vhbb_BDT_ZnunuHighPt_8TeV"; } if(IFILE.Contains("Wt")) { xname = "BDT"; } std::cout<< "BDT Name--> " << xname.Data() << std::endl; hobs->add(*WS->var(xname.Data())); RooRealVar BDT(xname.Data(),xname.Data(),-1,1); tempRooDataHistNom = (RooDataHist*) tempWS->data(systT.Data()); tempHistNom = tempRooDataHistNom->createHistogram(systT.Data(),BDT,RooFit::Binning(bins)); if(systT.Contains("WH")) { tempHistNom->Scale(xSec8WH[toMassNo]/xSec8WH[fromMassNo]); } if(systT.Contains("ZH")) { tempHistNom->Scale(xSec8ZH[toMassNo]/xSec8ZH[fromMassNo]); } RooDataHist *DHnom; DHnom = new RooDataHist(systT.Data(),"",*hobs,tempHistNom); WS->import(*(new RooHistPdf(systT.Data(),"",*hobs,*DHnom))); }
void Utils::setParameters(RooWorkspace* w, TString parname, RooSlimFitResult* r, bool constAndFloat) { if ( constAndFloat ){ RooArgList list = r->floatParsFinal(); list.add(r->constPars()); setParameters(w, parname, &list); return; } setParameters(w, parname, &(r->floatParsFinal())); }
//#include "/uscms_data/d3/cvernier/DiH_13TeV/CMSSW_7_1_5/src/HiggsAnalysis/CombinedLimit/interface/RooMultiPdf.h" //#include "HiggsAnalysis/CombinedLimit/interface/RooMultiPdf.h" void makeRooMultiPdfWorkspace(){ // Load the combine Library gSystem->Load("libHiggsAnalysisCombinedLimit.so"); // Open the dummy H->gg workspace TFile *f_hgg = TFile::Open("w_background_Bern.root"); RooWorkspace *w_hgg = (RooWorkspace*)f_hgg->Get("HbbHbb"); // The observable (CMS_hgg_mass in the workspace) RooRealVar *mass = w_hgg->var("x"); // Get three of the functions inside, exponential, linear polynomial, power law RooAbsPdf *pdf_exp = w_hgg->pdf("bg_exp"); RooAbsPdf *pdf_pol = w_hgg->pdf("bg"); // Fit the functions to the data to set the "prefit" state (note this can and should be redone with combine when doing // bias studies as one typically throws toys from the "best-fit" RooAbsData *data = w_hgg->data("data_obs"); pdf_exp->fitTo(*data); // index 0 pdf_pol->fitTo(*data); // index 2 // Make a plot (data is a toy dataset) RooPlot *plot = mass->frame(); data->plotOn(plot); pdf_exp->plotOn(plot,RooFit::LineColor(kBlue)); pdf_pol->plotOn(plot,RooFit::LineColor(kRed)); plot->SetTitle("PDF fits to toy data"); plot->Draw(); // Make a RooCategory object. This will control which of the pdfs is "active" RooCategory cat("pdf_index","Index of Pdf which is active"); // Make a RooMultiPdf object. The order of the pdfs will be the order of their index, ie for below // 0 == exponential // 1 == linear function // 2 == powerlaw RooArgList mypdfs; mypdfs.add(*pdf_exp); mypdfs.add(*pdf_pol); RooMultiPdf multipdf("roomultipdf","All Pdfs",cat,mypdfs); // As usual make an extended term for the background with _norm for freely floating yield RooRealVar norm("roomultipdf_norm","Number of background events",0,10000); // Save to a new workspace TFile *fout = new TFile("background_pdfs.root","RECREATE"); RooWorkspace wout("backgrounds","backgrounds"); wout.import(cat); wout.import(norm); wout.import(multipdf); wout.Print(); wout.Write(); }
void GenericModel::AddModelData(RooArgList& params, RooDataSet* data) { // Add a set of data calculated with the model for the given set of parameter values. if (!data) return; fDataSets.Add(data); RooArgList* ral = new RooArgList; ral->addClone(params); fDataSetParams.Add(ral);//keep a copy of the parameter values ++fNDataSets; }
JetTagBin::JetTagBin(TFile & file, string jtBinName, vector<Sample> theSamples): jtBinName_(jtBinName) { jtBinVar_= new RooRealVar(jtBinName.c_str(), jtBinName.c_str(), 50, 600); int nbins_def = 0; for(unsigned int i=0;i<theSamples.size();++i) { string name = theSamples[i].name()+jtBinName; string histname = ""; if ( theSamples[i].sampName()=="" ) histname = name; else histname = theSamples[i].sampName()+jtBinName; if ( verbose ) cout << "Opening histogram " << histname << endl; TH1F * tempHisto = (TH1F*)file.Get(histname.c_str()); TH1F * tempHisto2; if(tempHisto==0) { cout << "Template " << name << " does not exist" << endl; assert(0); // maybe we don't assert but rather break/continue so we can easily work with different jtbin names } else { tempHisto2 = (TH1F*) tempHisto->Clone(); // delete tempHisto; } // We set the binning, assuming all samples have the same binning int nbins = tempHisto2->GetNbinsX(); if(i==0) { nbins_def = nbins; int xlo = tempHisto2->GetBinLowEdge(1); int xhi = tempHisto2->GetBinLowEdge(nbins + 1); RooUniformBinning jtBinning(xlo,xhi,nbins_def); jtBinVar_->setBinning(jtBinning); } else { if (nbins!=nbins_def) { cout << "something here " << endl; assert(0); } } Template * temp = new Template(*tempHisto2, name, *jtBinVar_, theSamples[i]); jtTemplates_.push_back( temp ); delete tempHisto2; } if ( verbose ) cout << "Making combined pdf" << endl; RooArgList TemplateList; for(unsigned int i=0;i<jtTemplates_.size();++i) { TemplateList.add(*(jtTemplates_[i]->epdf())); } jtPdf_ = new RooAddPdf((jtBinName_+"_pdf").c_str(),(jtBinName_+"_pdf").c_str(),TemplateList); jtData_ = 0; jtNll_ = 0; }
//-------------------------------------------------------------------------------------------------- void printCorrelations(ostream& os, RooFitResult *res) { ios_base::fmtflags flags = os.flags(); const RooArgList parlist = res->floatParsFinal(); os << " Correlation Matrix" << endl; os << " --------------------" << endl; for(Int_t i=0; i<parlist.getSize(); i++) { for(Int_t j=0; j<parlist.getSize(); j++) os << " " << setw(7) << setprecision(4) << fixed << res->correlationMatrix()(i,j); os << endl; } os.flags(flags); }
/// /// Set each parameter in workspace to the values found /// in the fit result /// void Utils::setParameters(RooWorkspace* w, RooFitResult* values){ RooArgList list = values->floatParsFinal(); list.add(values->constPars()); TIterator* it = list.createIterator(); while(RooRealVar* p = (RooRealVar*)it->Next()){ RooRealVar* var = dynamic_cast<RooRealVar*>(w->allVars().find(p->GetName())); if(!(var)){ std::cout << "WARNING in Utils::setParameters(RooWorkspace,RooFitResult) -- no Var found with name " << p->GetName() << " in Workspace!" << endl; } else{ var->setVal(p->getVal()); } } return; };
/// /// searches for unphysical values in a fit result, fills problematic var names in vectors /// returns true if everything is within boundaries /// bool Utils::checkBoundary(const RooSlimFitResult& r, std::vector<TString> lowProb, std::vector<TString> highProb){ // make sure vectors are empty lowProb.clear(); highProb.clear(); RooArgList floats = r.floatParsFinal(); TIterator* floatIt = floats.createIterator(); while(RooRealVar* var = (RooRealVar*)floatIt->Next()){ //check lower bound if(var->getVal() < var->getMin("phys")){ lowProb.push_back(var->GetName()); } // check higher bound if( var->getVal() > var->getMax("phys")){ highProb.push_back(var->GetName()); } } return (lowProb.size() != 0 || highProb.size() != 0) ? false : true; }
void ParameterCache::printFitResultToOutStream(ofstream &out, RooSlimFitResult *slimFitRes) { out << "### FCN: " << slimFitRes->minNll() << ", EDM: " << slimFitRes->edm() << endl; out << "### COV quality: " << slimFitRes->covQual() << ", status: " << slimFitRes->status() << ", confirmed: " << (slimFitRes->isConfirmed()?"yes":"no") << endl; RooArgList argList = slimFitRes->floatParsFinal(); argList.add(slimFitRes->constPars()); argList.sort(); TIterator *iter = argList.createIterator(); while ( RooRealVar *arg=(RooRealVar*)iter->Next() ) { if ( TString(arg->GetName()).Contains("obs") ) continue; out << Form("%-25s",arg->GetName()) << " " << Form("%12.6f",arg->getVal()) << " " << Form("%12.6f",arg->getErrorLo()) << " " << Form("%12.6f",arg->getErrorHi()) << endl; } delete iter; }
void LatexMaker::writeFile() { // central values and errors ofstream outfile; outfile.open(outfname + ".tex"); RooArgList *observables = pdf->getObservables(); vector<TString> labels = pdf->getLatexObservables(); outfile << "\\begin{align}" << endl; for ( int i=0; i<pdf->getNobs(); i++ ) { RooRealVar *var = (RooRealVar*)observables->at(i); TString title = var->GetTitle(); title.ReplaceAll("#","\\"); if ( i < labels.size() ) title = labels[i]; if ( var->getVal() < 0. ) { outfile << Form("%-30s \\phantom{OO} &= %7.5f & {}\\pm{} & %7.5f \\phantom{1} & {}\\pm{} & %7.5f \\phantom{1} \\\\", title.Data(), var->getVal(), pdf->StatErr[i], pdf->SystErr[i]) << endl; } else { outfile << Form("%-30s \\phantom{OO} &= \\phantom{-}%7.5f & {}\\pm{} & %7.5f \\phantom{1} & {}\\pm{} & %7.5f \\phantom{1} \\\\", title.Data(), var->getVal(), pdf->StatErr[i], pdf->SystErr[i]) << endl; } } outfile << "\\end{align}" << endl; outfile.close(); // stat correlations ofstream outfile_stat; outfile_stat.open(outfname + "_stat.tex"); writeCorrMatrix( outfile_stat, pdf->corStatMatrix, observables, labels ); outfile_stat.close(); // syst correlations ofstream outfile_syst; outfile_syst.open(outfname + "_syst.tex"); writeCorrMatrix( outfile_syst, pdf->corSystMatrix, observables, labels ); outfile_syst.close(); }
void logStatisticsPar(std::ostream& out, RooDataSet *dataSet, RooRealVar *realVar, int nBins, double chi2, const RooArgList &variables) { TH1 *histogram = dataSet->createHistogram(Form("h%s", dataSet->GetName()), *realVar, RooFit::Binning(nBins)); // Create the TeX file out << "\\documentclass[10pt]{article}" << std::endl; out << "\\usepackage[usenames]{color} %used for font color" << std::endl; out << "\\usepackage{fontspec}" << std::endl; out << "\\usepackage{xunicode}" << std::endl; out << "\\usepackage{xltxtra}" << std::endl; out << "\\defaultfontfeatures{Scale=MatchLowercase}" << std::endl; out << "\\setromanfont[Mapping=tex-text]{Myriad Pro}" << std::endl; out << "\\setsansfont[Mapping=tex-text]{Myriad Pro}" << std::endl; out << "\\setmonofont{Monaco}" << std::endl; out << "\\begin{document}" << std::endl; out << "\\thispagestyle{empty}" << std::endl; out << "\\setlength{\\tabcolsep}{1ex}" << std::endl; out << "\\setlength{\\fboxsep}{0ex}" << std::endl; out << "{\\fontsize{7pt}{0.9em}\\selectfont" << std::endl; out << "\\framebox{\\begin{tabular*}{60pt}{l@{\\extracolsep{\\fill}}r}" << std::endl; // This is the particular info for the histogram out << "Entries & " ; formatNumber(histogram->GetEntries(), out) << " \\\\" << std::endl; out << "Mean & " ; formatNumber(histogram->GetMean(), out) << " \\\\" << std::endl; out << "RMS & " ; formatNumber(histogram->GetRMS(), out) << " \\\\" << std::endl; if (chi2 > 0.0) { out << "Fit $\\chi^{2}$ & " ; formatNumber(chi2, out) << " \\\\" << std::endl; } RooRealVar *theVariable; for (int index = 0; index < variables.getSize(); index++) { theVariable = dynamic_cast<RooRealVar*>(variables.find(variables[index].GetName())); out << theVariable->GetTitle() << " & $\\textrm{" ; formatNumber(theVariable->getValV(), out) << "} \\pm \\textrm{" ; formatNumber(theVariable->getError(), out) << "}$ \\\\" << std::endl; } out << "\\end{tabular*}}}" << std::endl; out << "\\end{document}" << std::endl; histogram->Delete(); }
void GenericModel::ConstructPseudoPDF(Bool_t) { // Build a parameterised pseudo-PDF from all the imported model datasets. // Each dataset is transformed into a RooNDKeysPdf kernel estimation p.d.f. // This p.d.f. models the distribution of an arbitrary input dataset as a // superposition of Gaussian kernels, one for each data point, each // contributing 1/N to the total integral of the p.d.f. // // If debug=kTRUE, each dataset and kernel PDF will be displayed in a canvas. // This can help to decide if the kernel smoothing parameter needs attention. if (!GetNumberOfDataSets()) { Error("ConstructPseudoPDF", "import model datasets with ImportModelData() first"); return; } if (fModelPseudoPDF) { delete fModelPseudoPDF; fModelPseudoPDF = 0; fNDKeys.Delete(); fFractions.removeAll(); } //generate kernels RooArgList kernels; Double_t initialWeight = 1. / GetNumberOfDataSets(); for (int i = 0; i < GetNumberOfDataSets(); i++) { Info("ConstructPseudoPDF", "Kernel estimation of dataset#%d...", i); RooNDKeysPdf* p = new RooNDKeysPdf(Form("NDK%d", i), Form("Kernel estimation of dataset#%d", i), GetObservables(), *((RooDataSet*)fDataSets[i]), "am", fSmoothing); fNDKeys.Add(p); kernels.add(*p); if (i < (GetNumberOfDataSets() - 1)) fFractions.addClone(RooRealVar(Form("W%d", i), Form("fractional weight of kernel-PDF #%d", i), initialWeight, 0., 1.)); } fModelPseudoPDF = new RooAddPdf("Model", "Pseudo-PDF constructed from kernels for model datasets", kernels, fFractions, kTRUE); }
void GenericModel::ImportModelData(Int_t parameter_num, RooArgList* plist) { // Import all model datasets corresponding to the defined parameters, ranges & binnings RooArgList PLIST; if (plist) PLIST.addClone(*plist); RooRealVar* par = dynamic_cast<RooRealVar*>(fParameters.at(parameter_num)); RooAbsBinning& bins = par->getBinning(); Int_t N = bins.numBins(); RooRealVar* par_in_list = (RooRealVar*)PLIST.find(par->GetName()); if (!par_in_list) { PLIST.addClone(RooRealVar(par->GetName(), par->GetTitle(), 0.)); par_in_list = (RooRealVar*)PLIST.find(par->GetName()); } for (int i = 0; i < N; i++) { par_in_list->setMax(bins.binHigh(i)); par_in_list->setMin(bins.binLow(i)); par_in_list->setVal(bins.binCenter(i)); if ((parameter_num + 1) < GetNumberOfParameters()) ImportModelData(parameter_num + 1, &PLIST); else { AddModelData(PLIST, GetModelDataSet(PLIST)); } } }
int Fitter::InitPdfs() { map<string, int> serials; auto AddSerial = [&serials](const string& name) { ostringstream oss; oss << name << serials[name]++; return oss.str(); }; const string sigName = "sig"; const string bkgName = "bkg"; int nSigs = sigPdfs.size(); int nBkgs = bkgPdfs.size(); int nData = pData->numEntries(); RooArgList pdfs; RooArgList ylds; for(int i=0; i<2; ++i) { vector<FitterPdf>& vec_pdf = i? bkgPdfs : sigPdfs; const string& name = i? bkgName : sigName; for(auto& pdf : vec_pdf) { if(pdf.Init(AddSerial(name), *pFitVar, nSigs + nBkgs, nData)) return 1; pdfs.add(pdf.GetPdf()); ylds.add(pdf.GetYld()); } } pTotPdf = new RooAddPdf("pdf", "pdf", pdfs, ylds); return 0; }
void makeConnectedBinList(string procname, RooRealVar& var, RooWorkspace& ws, TH1F* rhist, vector<pair<RooRealVar*, TH1*> > syst, const RooArgList& srbinlist, RooArgList* crbinlist=NULL) { if (crbinlist == NULL) crbinlist = new RooArgList(); for (int i = 1; i <= rhist->GetNbinsX(); i++) { stringstream rbinss; rbinss << "r_" << procname << "_bin" << i; RooRealVar* rbinvar = new RooRealVar(rbinss.str().c_str(), "", rhist->GetBinContent(i)); stringstream rerrbinss; rerrbinss << procname << "_bin" << i << "_Runc"; RooRealVar* rerrbinvar = new RooRealVar(rerrbinss.str().c_str(), "", 0., -5., 5.); stringstream binss; binss << procname << "_bin" << i; RooArgList fobinlist; fobinlist.add(srbinlist[i-1]); fobinlist.add(*rbinvar); fobinlist.add(*rerrbinvar); stringstream formss; formss << "@0/"; formss << "("; formss << "@1"; formss << "*(1+" << rhist->GetBinError(i)/rhist->GetBinContent(i) << "*@2)"; for (int j = 0; j < syst.size(); j++) { stringstream systbinss; if (syst[j].first == NULL) { systbinss << procname << "_bin" << i << "_" << syst[j].second->GetName(); RooRealVar* systbinvar = new RooRealVar(systbinss.str().c_str(), "", 0., -5., 5.); fobinlist.add(*systbinvar); } else { fobinlist.add(*syst[j].first); } formss << "*(1+" << syst[j].second->GetBinContent(i) << "*@" << j+3 << ")"; } formss << ")"; RooFormulaVar* binvar = new RooFormulaVar(binss.str().c_str(), "", formss.str().c_str(), RooArgList(fobinlist)); crbinlist->add(*binvar); } stringstream normss; normss << procname << "_norm"; RooParametricHist phist(procname.c_str(), "", var, *crbinlist, *rhist); RooAddition norm(normss.str().c_str(),"", *crbinlist); ws.import(phist,RooFit::RecycleConflictNodes()); ws.import(norm, RooFit::RecycleConflictNodes()); }
void makePdf( RooWorkspace *w ) { // bkg w->factory("Exponential::bkg_pdf( B_s0_DTF_B_s0_M, bkg_exp_p1[-0.002,-0.004,0.] )"); // sig w->factory("bs2kstkst_l [ -5 ,-20 ,0]"); w->factory("bs2kstkst_zeta [ 1.e-5 ]"); w->factory("bs2kstkst_fb [ 0. ]"); w->factory("bs2kstkst_sigma [ 15 ,10 ,100]"); w->factory("bs2kstkst_mu [ 5350 ,5400 ]"); w->factory("bs2kstkst_a [ 2.5 , 0 ,10 ]"); w->factory("bs2kstkst_n [ 2.5 , 0 ,10 ]"); w->factory("bs2kstkst_a2 [ 2.5 , 0 ,10 ]"); w->factory("bs2kstkst_n2 [ 2.5 , 0 ,10 ]"); w->var("bs2kstkst_zeta")->setConstant(true); w->var("bs2kstkst_fb")->setConstant(true); RooIpatia2 *pdf = new RooIpatia2("bs2kstkst_pdf","bs2kstkst_mc_pdf",*w->var("B_s0_DTF_B_s0_M"),*w->var("bs2kstkst_l"),*w->var("bs2kstkst_zeta"),*w->var("bs2kstkst_fb"),*w->var("bs2kstkst_sigma"),*w->var("bs2kstkst_mu"),*w->var("bs2kstkst_a"),*w->var("bs2kstkst_n"),*w->var("bs2kstkst_a2"),*w->var("bs2kstkst_n2")); w->import(*pdf); delete pdf; //w->factory("Gaussian::bs2kstkst_pdf( B_s0_DTF_B_s0_M, bs2kstkst_mean[5320,5380], bs2kstkst_sigma[1,20] )"); // other sig w->factory("Gaussian::bd2kstkst_pdf( B_s0_DTF_B_s0_M, bd2kstkst_mean[5250,5300], bd2kstkst_sigma[1,20] )"); RooArgList *pdfs = new RooArgList(); RooArgList *yields = new RooArgList(); pdfs->add( *w->pdf("bkg_pdf") ); pdfs->add( *w->pdf("bs2kstkst_pdf") ); pdfs->add( *w->pdf("bd2kstkst_pdf") ); w->factory( "bkg_y[1e3,1e5]" ); w->factory( "bs2kstkst_y[0,20e3]" ); w->factory( "bd2kstkst_y[0,3000]" ); yields->add( *w->var("bkg_y") ); yields->add( *w->var("bs2kstkst_y") ); yields->add( *w->var("bd2kstkst_y") ); // total RooAddPdf *addpdf = new RooAddPdf( "pdf","pdf", *pdfs, *yields); w->import(*addpdf); delete addpdf; //w->factory("SUM::pdf( bkg_y[1e3,1e5]*bkg_pdf, bs2kstkst_y[0,20e3]*bs2kstkst_pdf, bd2kstkst_y[0,3000]*bd2kstkst_pdf )"); }
void makeBinList(string procname, RooRealVar& var, RooWorkspace& ws, TH1F* hist, RooArgList& binlist, bool setConst = false) { for (int i = 1; i <= hist->GetNbinsX(); i++) { stringstream binss; binss << procname << "_bin" << i; RooRealVar* binvar; if (!setConst) binvar = new RooRealVar(binss.str().c_str(), "", hist->GetBinContent(i), 0., hist->GetBinContent(i)*2.0); else binvar = new RooRealVar(binss.str().c_str(), "", hist->GetBinContent(i)); binlist.add(*binvar); } stringstream normss; normss << procname << "_norm"; RooParametricHist phist(procname.c_str(), "", var, binlist, *hist); RooAddition norm(normss.str().c_str(), "", binlist); ws.import(phist,RooFit::RecycleConflictNodes()); ws.import(norm, RooFit::RecycleConflictNodes()); }
RooAbsArg *cloneRecursiveRename(RooAbsArg *arg, const char *postfix) { RooAbsArg *clone = arg->cloneTree(); RooArgSet *clonecomps = clone->getComponents(); RooArgSet *clonevars = clone->getVariables(); RooArgList cloneargs; cloneargs.add(*clonecomps); cloneargs.add(*clonevars); delete clonecomps; delete clonevars; for (int iarg=0; iarg<cloneargs.getSize(); ++iarg) { cloneargs.at(iarg)->SetName(TString::Format("%s_%s",cloneargs.at(iarg)->GetName(),postfix)); } return clone; }
double ro_fit4( TH1F * h2, int p4,int p3,int p2,int p1 ){ TCanvas *chi=(TCanvas*)gROOT->GetListOfCanvases()->FindObject("c_hist"); if (chi!=NULL){ chi->cd(); } int npeaks=4; if (npeaks>NMAX){ printf("TOO MANY PEAKS\n",""); return 1;} TH1F *h2; double pk[NMAX]; double si[NMAX]; double ar[NMAX]; double al[NMAX]; double n1; double min=h2->GetXaxis()->GetFirst(), max=h2->GetXaxis()->GetLast(), smin=(max-min)/1000, smax=(max-min), amin=h2->Integral( min, max )/1000., amax=h2->Integral( min, max ), almin=0., almax=100., nmin=1.0, nmax=100.; pk[0]=p4; pk[1]=p3; pk[2]=p2; pk[3]=p1; for (int i=0;i<npeaks;i++){ // pk[i]=1.0*(i+1)/(1+npeaks)*(max-min) +min; si[i]=4.3.; ar[i]=1.0*(amax+amin)/npeaks/2; //area al[i]=1.3; } n1=5.1; smin=0.5* si[0]; smax=2.*si[0]; int tag=1; int i; printf("%d peaks : ", npeaks); for (i=0;i<npeaks;i++){ printf( "%8.2f ",pk[i] ); } printf("\n######### TAG %7d\n", tag++); //================ MAIN variable 1D ============== RooRealVar x("x", "x", min, max); /* * * CHEBYSHEV HERE */ char sbg="p1"; // Build Chebychev polynomial p.d.f. // RooRealVar a0("a0","a0", 0.) ; RooRealVar a0("a0","a0", 0., -10, 10) ; RooRealVar a1("a1","a1", 0., -10, 10) ; RooRealVar a2("a2","a2", 0., -10, 10) ; RooRealVar a3("a3","a3", 0., -10, 10) ; RooArgSet setcheb; if ( sbg=="pn" ){ setcheb.add(a0);a0=0.;a0.setConstant(kTRUE);bgarea=0.;bgarea.setConstant(kTRUE);} if ( sbg=="p0" ){ setcheb.add(a0); a0=0.; a0.setConstant(kTRUE); } if ( sbg=="p1" ){ setcheb.add(a0); } if ( sbg=="p2" ){ setcheb.add(a1);setcheb.add(a0); } if ( sbg=="p3" ){ setcheb.add(a2);setcheb.add(a1); setcheb.add(a0);} if ( sbg=="p4" ){ setcheb.add(a3);setcheb.add(a2); setcheb.add(a1); setcheb.add(a0); } RooChebychev bkg("bkg","Background",x, setcheb ) ; RooRealVar mean1("mean1", "mean_", pk[0], min,max); RooRealVar mean2("mean2", "mean_", pk[1], min,max); RooRealVar mean3("mean3", "mean_", pk[2], min,max); RooRealVar mean4("mean4", "mean_", pk[3], min,max); RooRealVar mean5("mean5", "mean_", pk[4], min,max); RooRealVar mean6("mean6", "mean_", pk[5], min,max); RooRealVar mean7("mean7", "mean_", pk[6], min,max); RooRealVar mean8("mean8", "mean_", pk[7], min,max); RooRealVar mean9("mean9", "mean_", pk[8], min,max); RooRealVar meana("meana", "mean_", pk[9], min,max); RooRealVar meanb("meanb", "mean_", pk[10], min,max); RooRealVar meanc("meanc", "mean_", pk[11], min,max); RooRealVar meand("meand", "mean_", pk[12], min,max); RooRealVar meane("meane", "mean_", pk[13], min,max); RooRealVar meanf("meanf", "mean_", pk[14], min,max); RooRealVar sigm1("sigm1", "sigma", si[0], smin, smax); RooRealVar sigm2("sigm2", "sigma", si[1], smin, smax); RooRealVar sigm3("sigm3", "sigma", si[2], smin, smax); RooRealVar sigm4("sigm4", "sigma", si[3], smin, smax); RooRealVar sigm5("sigm5", "sigma", si[4], smin, smax); RooRealVar sigm6("sigm6", "sigma", si[5], smin, smax); RooRealVar sigm7("sigm7", "sigma", si[6], smin, smax); RooRealVar sigm8("sigm8", "sigma", si[7], smin, smax); RooRealVar sigm9("sigm9", "sigma", si[8], smin, smax); RooRealVar sigma("sigma", "sigma", si[9], smin, smax); RooRealVar sigmb("sigmb", "sigma", si[10], smin, smax); RooRealVar sigmc("sigmc", "sigma", si[11], smin, smax); RooRealVar sigmd("sigmd", "sigma", si[12], smin, smax); RooRealVar sigme("sigme", "sigma", si[13], smin, smax); RooRealVar sigmf("sigmf", "sigma", si[14], smin, smax); RooRealVar fs2("fs2","fs2", 0.0 ); // factor sigma = 1==free or 0==fix RooRealVar fs3("fs3","fs3", 0.0 ); // factor sigma = 1==free or 0==fix RooRealVar fs4("fs4","fs4", 0.0 ); // factor sigma = 1==free or 0==fix RooRealVar fs5("fs5","fs5", 0.0 ); // factor sigma = 1==free or 0==fix RooRealVar fs6("fs6","fs6", 0.0 ); // factor sigma = 1==free or 0==fix RooRealVar fs7("fs7","fs7", 0.0 ); // factor sigma = 1==free or 0==fix RooRealVar fs8("fs8","fs8", 0.0 ); // factor sigma = 1==free or 0==fix RooRealVar fs9("fs9","fs9", 0.0 ); // factor sigma = 1==free or 0==fix RooRealVar fsa("fsa","fsa", 0.0 ); // factor sigma = 1==free or 0==fix RooRealVar fsb("fsb","fsb", 0.0 ); // factor sigma = 1==free or 0==fix RooRealVar fsc("fsc","fsc", 0.0 ); // factor sigma = 1==free or 0==fix RooRealVar fsd("fsd","fsd", 0.0 ); // factor sigma = 1==free or 0==fix RooRealVar fse("fse","fse", 0.0 ); // factor sigma = 1==free or 0==fix RooRealVar fsf("fsf","fsf", 0.0 ); // factor sigma = 1==free or 0==fix RooFormulaVar fsigm2( "fsigm2", " fs2*sigm2 + (1.0-fs2)*sigm1" , RooArgSet(sigm1,sigm2,fs2) ); RooFormulaVar fsigm3( "fsigm3", " fs3*sigm3 + (1.0-fs3)*sigm1" , RooArgSet(sigm1,sigm3,fs3) ); RooFormulaVar fsigm4( "fsigm4", " fs4*sigm4 + (1.0-fs4)*sigm1" , RooArgSet(sigm1,sigm4,fs4) ); RooFormulaVar fsigm5( "fsigm5", " fs5*sigm5 + (1.0-fs5)*sigm1" , RooArgSet(sigm1,sigm5,fs5) ); RooFormulaVar fsigm6( "fsigm6", " fs6*sigm6 + (1.0-fs6)*sigm1" , RooArgSet(sigm1,sigm6,fs6) ); RooFormulaVar fsigm7( "fsigm7", " fs7*sigm7 + (1.0-fs7)*sigm1" , RooArgSet(sigm1,sigm7,fs7) ); RooFormulaVar fsigm8( "fsigm8", " fs8*sigm8 + (1.0-fs8)*sigm1" , RooArgSet(sigm1,sigm8,fs8) ); RooFormulaVar fsigm9( "fsigm9", " fs9*sigm9 + (1.0-fs9)*sigm1" , RooArgSet(sigm1,sigm9,fs9) ); RooFormulaVar fsigma( "fsigma", " fsa*sigma + (1.0-fsa)*sigm1" , RooArgSet(sigm1,sigma,fsa) ); RooFormulaVar fsigmb( "fsigmb", " fsb*sigmb + (1.0-fsb)*sigm1" , RooArgSet(sigm1,sigmb,fsb) ); RooFormulaVar fsigmc( "fsigmc", " fsc*sigmc + (1.0-fsc)*sigm1" , RooArgSet(sigm1,sigmc,fsc) ); RooFormulaVar fsigmd( "fsigmd", " fsd*sigmd + (1.0-fsd)*sigm1" , RooArgSet(sigm1,sigmd,fsd) ); RooFormulaVar fsigme( "fsigme", " fse*sigme + (1.0-fse)*sigm1" , RooArgSet(sigm1,sigme,fse) ); RooFormulaVar fsigmf( "fsigmf", " fsf*sigmf + (1.0-fsf)*sigm1" , RooArgSet(sigm1,sigmf,fsf) ); // -------- fsx 0== FIX to sigm1; 1==free sigma fs2.setVal( 0.0 ); fs3.setVal( 0.0 ); fs4.setVal( 0.0 ); fs5.setVal( 1.0 ); fs6.setVal( 1.0 ); fs7.setVal( 1.0 ); fs8.setVal( 1.0 ); fs9.setVal( 1.0 ); fsa.setVal( 1.0 ); fsb.setVal( 1.0 ); fsc.setVal( 1.0 ); fsd.setVal( 1.0 ); fse.setVal( 1.0 ); fsf.setVal( 1.0 ); fs2.setConstant( kTRUE ); fs3.setConstant( kTRUE ); fs4.setConstant( kTRUE ); fs5.setConstant( kTRUE ); fs6.setConstant( kTRUE ); fs7.setConstant( kTRUE ); fs8.setConstant( kTRUE ); fs9.setConstant( kTRUE ); fsa.setConstant( kTRUE ); fsb.setConstant( kTRUE ); fsc.setConstant( kTRUE ); fsd.setConstant( kTRUE ); fse.setConstant( kTRUE ); fsf.setConstant( kTRUE ); if (fs2.getVal()==0.0){sigm2.setConstant( kTRUE );} if (fs3.getVal()==0.0){sigm3.setConstant( kTRUE );} if (fs4.getVal()==0.0){sigm4.setConstant( kTRUE );} if (fs5.getVal()==0.0){sigm5.setConstant( kTRUE );} if (fs6.getVal()==0.0){sigm6.setConstant( kTRUE );} if (fs7.getVal()==0.0){sigm7.setConstant( kTRUE );} if (fs8.getVal()==0.0){sigm8.setConstant( kTRUE );} if (fs9.getVal()==0.0){sigm9.setConstant( kTRUE );} if (fsa.getVal()==0.0){sigma.setConstant( kTRUE );} if (fsb.getVal()==0.0){sigmb.setConstant( kTRUE );} if (fsc.getVal()==0.0){sigmc.setConstant( kTRUE );} if (fsd.getVal()==0.0){sigmd.setConstant( kTRUE );} if (fse.getVal()==0.0){sigme.setConstant( kTRUE );} if (fsf.getVal()==0.0){sigmf.setConstant( kTRUE );} // extra thing that goes to RootSet RooRealVar area1("area1", "area_", ar[0], amin, amax); RooRealVar area2("area2", "area_", ar[1], amin, amax); RooRealVar area3("area3", "area_", ar[2], amin, amax); RooRealVar area4("area4", "area_", ar[3], amin, amax); RooRealVar area5("area5", "area_", ar[4], amin, amax); RooRealVar area6("area6", "area_", ar[5], amin, amax); RooRealVar area7("area7", "area_", ar[6], amin, amax); RooRealVar area8("area8", "area_", ar[7], amin, amax); RooRealVar area9("area9", "area_", ar[8], amin, amax); RooRealVar areaa("areaa", "area_", ar[9], amin, amax); RooRealVar areab("areab", "area_", ar[10], amin, amax); RooRealVar areac("areac", "area_", ar[11], amin, amax); RooRealVar aread("aread", "area_", ar[12], amin, amax); RooRealVar areae("areae", "area_", ar[13], amin, amax); RooRealVar areaf("areaf", "area_", ar[14], amin, amax); RooRealVar bgarea("bgarea", "bgarea", 1.0*(amin+amax)/2., 0, amax); //=================== only one instance =================== RooRealVar alph1("alph1", "alph1", al[0], almin, almax ); RooRealVar ncbs1("n1", "n1", n1, nmin, nmax ); RooCBShape cb1("cb1","CBS", x,mean1, sigm1,alph1,ncbs1); RooCBShape cb2("cb2","CBS", x,mean2,fsigm2,alph1,ncbs1); RooCBShape cb3("cb3","CBS", x,mean3,fsigm3,alph1,ncbs1); RooCBShape cb4("cb4","CBS", x,mean4,fsigm4,alph1,ncbs1); RooCBShape cb5("cb5","CBS", x,mean5,fsigm5,alph1,ncbs1); RooCBShape cb6("cb6","CBS", x,mean6,fsigm6,alph1,ncbs1); RooCBShape cb7("cb7","CBS", x,mean7,fsigm7,alph1,ncbs1); RooCBShape cb8("cb8","CBS", x,mean8,fsigm8,alph1,ncbs1); RooCBShape cb9("cb9","CBS", x,mean9,fsigm9,alph1,ncbs1); RooCBShape cba("cba","CBS", x,meana,fsigma,alph1,ncbs1); RooCBShape cbb("cbb","CBS", x,meanb,fsigmb,alph1,ncbs1); RooCBShape cbc("cbc","CBS", x,meanc,fsigmc,alph1,ncbs1); RooCBShape cbd("cbd","CBS", x,meand,fsigmd,alph1,ncbs1); RooCBShape cbe("cbe","CBS", x,meane,fsigme,alph1,ncbs1); RooCBShape cbf("cbf","CBS", x,meanf,fsigmf,alph1,ncbs1); RooExtendPdf ecb1("ecb1","ECBS", cb1, area1 ); RooExtendPdf ecb2("ecb2","ECBS", cb2, area2 ); RooExtendPdf ecb3("ecb3","ECBS", cb3, area3 ); RooExtendPdf ecb4("ecb4","ECBS", cb4, area4 ); RooExtendPdf ecb5("ecb5","ECBS", cb5, area5 ); RooExtendPdf ecb6("ecb6","ECBS", cb6, area6 ); RooExtendPdf ecb7("ecb7","ECBS", cb7, area7 ); RooExtendPdf ecb8("ecb8","ECBS", cb8, area8 ); RooExtendPdf ecb9("ecb9","ECBS", cb9, area9 ); RooExtendPdf ecba("ecba","ECBS", cba, areaa ); RooExtendPdf ecbb("ecbb","ECBS", cbb, areab ); RooExtendPdf ecbc("ecbc","ECBS", cbc, areac ); RooExtendPdf ecbd("ecbd","ECBS", cbd, aread ); RooExtendPdf ecbe("ecbe","ECBS", cbe, areae ); RooExtendPdf ecbf("ecbf","ECBS", cbf, areaf ); RooArgList erl; if (npeaks>0)erl.add( ecb1 ); if (npeaks>1)erl.add( ecb2 ); if (npeaks>2)erl.add( ecb3 ); if (npeaks>3)erl.add( ecb4 ); if (npeaks>4)erl.add( ecb5 ); if (npeaks>5)erl.add( ecb6 ); if (npeaks>6)erl.add( ecb7 ); if (npeaks>7)erl.add( ecb8 ); if (npeaks>8)erl.add( ecb9 ); if (npeaks>9)erl.add( ecba ); if (npeaks>10)erl.add( ecbb ); if (npeaks>11)erl.add( ecbc ); if (npeaks>12)erl.add( ecbd ); if (npeaks>13)erl.add( ecbe ); if (npeaks>14)erl.add( ecbf ); RooExtendPdf ebkg("ebkg","EBkg", bkg, bgarea ); erl.add( ebkg ); RooAddPdf emodelV("emodel","emultiplet", erl ); emodelV.Print("v"); RooDataHist datah("datah","datah with x",x,h2); RooPlot* xframe = x.frame(); datah.plotOn(xframe, DrawOption("logy") ); // RooPlot* xframe = x.frame(); /* bkg.plotOn( xframe, LineColor(kBlue) ); cb1.plotOn( xframe, LineColor(kRed) ); */ // xframe->Draw(); /* * Here I believe to put the parameters for fit???? * */ /* RooArgList rl; if (npeaks>0)rl.add( cb1 ); if (npeaks>1)rl.add( cb2 ); if (npeaks>2)rl.add( cb3 ); if (npeaks>3)rl.add( cb4 ); if (npeaks>4)rl.add( cb5 ); if (npeaks>5)rl.add( cb6 ); if (npeaks>6)rl.add( cb7 ); if (npeaks>7)rl.add( cb8 ); if (npeaks>8)rl.add( cb9 ); if (npeaks>9)rl.add( cba ); if (npeaks>10)rl.add( cbb ); if (npeaks>11)rl.add( cbc ); if (npeaks>12)rl.add( cbd ); if (npeaks>13)rl.add( cbe ); if (npeaks>14)rl.add( cbf ); rl.add( bkg ); // asi zastoupeni jednotlivych piku viz vyse------------ // RooArgSet rs; RooArgList rs; if (npeaks>0)rs.add( area1 ); if (npeaks>1)rs.add( area2 ); if (npeaks>2)rs.add( area3 ); if (npeaks>3)rs.add( area4 ); if (npeaks>4)rs.add( area5 ); if (npeaks>5)rs.add( area6 ); if (npeaks>6)rs.add( area7 ); if (npeaks>7)rs.add( area8 ); if (npeaks>8)rs.add( area9 ); if (npeaks>9)rs.add( areaa ); if (npeaks>10)rs.add( areab ); if (npeaks>11)rs.add( areac ); if (npeaks>12)rs.add( aread ); if (npeaks>13)rs.add( areae ); if (npeaks>14)rs.add( areaf ); rs.add( bgarea ); //if # coefficients(rs)+1=functions(rl) => coef.are interpreted as fractions RooAddPdf modelV("model","multiplet", rl, rs ); modelV.Print("v"); */ /* * WITH CUSTOMIZER - I can change parameters inside. But * - then all is a clone and I dont know how to reach it.->Iterations...difficlt I try something with RooFormulaVar */ fitresult = emodelV.fitTo( datah , Save() ); fitresult->Print("v") ; fitresult->floatParsFinal().Print("s") ; // model->Print(); // not interesting........ emodelV.plotOn(xframe, LineColor(kRed), DrawOption("l0z") ); emodelV.plotOn(xframe, Components(ecb1),LineColor(kGreen),LineStyle(kDashed) ); emodelV.plotOn(xframe, Components(RooArgSet(ecb1,ebkg)),LineColor(kBlue),LineStyle(kDashed) ); emodelV.plotOn(xframe, Components(RooArgSet(ecb2,ebkg)),LineColor(kBlue),LineStyle(kDashed) ); emodelV.plotOn(xframe, Components(RooArgSet(ecb3,ebkg)),LineColor(kBlue),LineStyle(kDashed) ); emodelV.plotOn(xframe, Components(RooArgSet(ecb4,ebkg)),LineColor(kBlue),LineStyle(kDashed) ); emodelV.plotOn(xframe, Components( RooArgSet(ebkg) ), LineColor(kRed) ); xframe->Draw(); printf("FWHM = = %f chan\n", sigm1.getVal()*2.3548 ); printf("FWHM = = %f keV\n", sigm1.getVal()*2.3548 *5804.0/p1 ); return sigm1.getVal()*2.3548 *5804.0/p1 ; }//==================================ro_fit4 ======
void RooToyMCFit(){ stringstream out; out.str(""); out << "toyMC_" << _sigma_over_tau << "_" << _purity << "_" << mistag_rate << ".root"; TFile* file = TFile::Open(out.str().c_str()); TTree* tree = (TTree*)file->Get("ToyTree"); tree->Print(); // TFile* file = TFile::Open("ToyData/toyMC_453_0.912888_0.3_0.8_0.root"); // TFile* file = TFile::Open("ToyData/toyMC_10000_0.9_0.3_0.8_0.root"); // TTree* tree = (TTree*)file->Get("ToyTree1"); RooRealVar tau("tau","tau",_tau,"ps"); tau.setConstant(kTRUE); RooRealVar dm("dm","dm",_dm,"ps^{-1}"); dm.setConstant(kTRUE); RooAbsReal* sin2beta; RooAbsReal* cos2beta; if(softlimit){ RooRealVar x("x","x",_cos2beta,-3.,30000.); if(constBeta) x.setConstant(kTRUE); RooRealVar y("y","y",_sin2beta,-3.,30000.); if(constBeta) y.setConstant(kTRUE); cos2beta = new RooFormulaVar("cos2beta","cos2beta","@0/sqrt(@0*@0+@1*@1)",RooArgSet(x,y)); sin2beta = new RooFormulaVar("sin2beta","sin2beta","@0/sqrt(@0*@0+@1*@1)",RooArgSet(y,x)); // sin2beta = new RooFormulaVar("sin2beta","sin2beta","2/TMath::Pi()*TMath::ATan(@0)",RooArgSet(y)); // cos2beta = new RooFormulaVar("cos2beta","cos2beta","2/TMath::Pi()*TMath::ATan(@0)",RooArgSet(x)); } else{ sin2beta = new RooRealVar("sin2beta","sin2beta",_sin2beta,-3.,3.); if(constBeta) ((RooRealVar*)sin2beta)->setConstant(kTRUE); cos2beta = new RooRealVar("cos2beta","cos2beta",_cos2beta,-3.,3.); if(constBeta) ((RooRealVar*)cos2beta)->setConstant(kTRUE); } RooRealVar dt("dt","#Deltat",-5.,5.,"ps"); RooRealVar avgMisgat("avgMisgat","avgMisgat",mistag_rate,0.0,0.5); if(constMistag) avgMisgat.setConstant(kTRUE); RooRealVar delMisgat("delMisgat","delMisgat",0); delMisgat.setConstant(kTRUE); RooRealVar mu("mu","mu",0); mu.setConstant(kTRUE); tau.Print(); dm.Print(); sin2beta->Print(); cos2beta->Print(); avgMisgat.Print(); RooRealVar moment("moment","moment",0.); moment.setConstant(kTRUE); RooRealVar parity("parity","parity",-1.); parity.setConstant(kTRUE); RooRealVar* K[8]; RooAbsReal* Kb[8]; RooArgList Kset; RooRealVar* C[8]; RooRealVar* S[8]; RooFormulaVar* a1[2][8]; RooFormulaVar* b1[2][8]; RooFormulaVar* a2[2][8]; RooFormulaVar* b2[2][8]; for(int i=0; i<8; i++){ out.str(""); out << "K" << i+1; K[i] = new RooRealVar(out.str().c_str(),out.str().c_str(),_K[i],0.,1.); Kset.add(*K[i]); if(constK) K[i]->setConstant(kTRUE); K[i]->Print(); if(i!=7){ out.str(""); out << "Kb" << i+1; Kb[i] = new RooRealVar(out.str().c_str(),out.str().c_str(),_Kb[i],0.,1.); Kset.add(*Kb[i]); if(constK) ((RooRealVar*)Kb[i])->setConstant(kTRUE); Kb[i]->Print(); } out.str(""); out << "C" << i+1; C[i] = new RooRealVar(out.str().c_str(),out.str().c_str(),_C[i]); C[i]->setConstant(kTRUE); C[i]->Print(); out.str(""); out << "S" << i+1; S[i] = new RooRealVar(out.str().c_str(),out.str().c_str(),_S[i]); S[i]->setConstant(kTRUE); S[i]->Print(); } Kb[7] = new RooFormulaVar("K8b","K8b","1-@0-@1-@2-@3-@4-@5-@6-@7-@8-@9-@10-@11-@12-@13-@14",Kset); for(int i=0; i<8; i++){ out.str(""); out << "a10_" << i+1; a1[0][i] = new RooFormulaVar(out.str().c_str(),out.str().c_str(),"-(@0-@1)/(@0+@1)",RooArgList(*K[i],*Kb[i])); a1[0][i]->Print(); out.str(""); out << "a11_" << i+1; a1[1][i] = new RooFormulaVar(out.str().c_str(),out.str().c_str(),"(@0-@1)/(@0+@1)",RooArgList(*K[i],*Kb[i])); a1[1][i]->Print(); out.str(""); out << "a20_" << i+1; a2[0][i] = new RooFormulaVar(out.str().c_str(),out.str().c_str(),"(@0-@1)/(@0+@1)",RooArgList(*K[i],*Kb[i])); a2[0][i]->Print(); out.str(""); out << "a21_" << i+1; a2[1][i] = new RooFormulaVar(out.str().c_str(),out.str().c_str(),"-(@0-@1)/(@0+@1)",RooArgList(*K[i],*Kb[i])); a2[1][i]->Print(); out.str(""); out << "b10_" << i+1; b1[0][i] = new RooFormulaVar(out.str().c_str(),out.str().c_str(),"2.*(@2*@4+@3*@5)*TMath::Sqrt(@0*@1)/(@0+@1)",RooArgList(*K[i],*Kb[i],*C[i],*S[i],*sin2beta,*cos2beta)); b1[0][i]->Print(); out.str(""); out << "b11_" << i+1; b1[1][i] = new RooFormulaVar(out.str().c_str(),out.str().c_str(),"2.*(@2*@4-@3*@5)*TMath::Sqrt(@0*@1)/(@0+@1)",RooArgList(*K[i],*Kb[i],*C[i],*S[i],*sin2beta,*cos2beta)); b1[1][i]->Print(); out.str(""); out << "b20_" << i+1; b2[0][i] = new RooFormulaVar(out.str().c_str(),out.str().c_str(),"-2.*(@2*@4+@3*@5)*TMath::Sqrt(@0*@1)/(@0+@1)",RooArgList(*K[i],*Kb[i],*C[i],*S[i],*sin2beta,*cos2beta)); b2[0][i]->Print(); out.str(""); out << "b21_" << i+1; b2[1][i] = new RooFormulaVar(out.str().c_str(),out.str().c_str(),"-2.*(@2*@4-@3*@5)*TMath::Sqrt(@0*@1)/(@0+@1)",RooArgList(*K[i],*Kb[i],*C[i],*S[i],*sin2beta,*cos2beta)); b2[1][i]->Print(); cout << "bin = " << i+1 << endl; cout << " a11 = " << a1[0][i]->getVal() << " b11 = " << b1[0][i]->getVal() << endl; cout << " a12 = " << a1[1][i]->getVal() << " b12 = " << b1[1][i]->getVal() << endl; cout << " a21 = " << a2[0][i]->getVal() << " b21 = " << b2[0][i]->getVal() << endl; cout << " a22 = " << a2[1][i]->getVal() << " b22 = " << b2[1][i]->getVal() << endl; } RooRealVar* dgamma = new RooRealVar("dgamma","dgamma",0.); dgamma->setConstant(kTRUE); RooRealVar* f0 = new RooRealVar("f0","f0",1.); f0->setConstant(kTRUE); RooRealVar* f1 = new RooRealVar("f1","f1",0.); f1->setConstant(kTRUE); RooCategory tag("tag","tag"); tag.defineType("B0",1); tag.defineType("anti-B0",-1); RooCategory bin("bin","bin"); bin.defineType("1",1); bin.defineType("2",2); bin.defineType("3",3); bin.defineType("4",4); bin.defineType("5",5); bin.defineType("6",6); bin.defineType("7",7); bin.defineType("8",8); bin.defineType("-1",-1); bin.defineType("-2",-2); bin.defineType("-3",-3); bin.defineType("-4",-4); bin.defineType("-5",-5); bin.defineType("-6",-6); bin.defineType("-7",-7); bin.defineType("-8",-8); RooSuperCategory bintag("bintag","bintag",RooArgSet(bin,tag)); tree->Print(); RooDataSet d("data","data",tree,RooArgSet(dt,bin,tag)); cout << "DataSet is ready." << endl; d.Print(); RooRealVar mean("mean","mean",0.,"ps"); mean.setConstant(kTRUE); RooRealVar sigma("sigma","sigma",_sigma_over_tau*_tau,0.,1.5*_tau,"ps"); if(constSigma) sigma.setConstant(kTRUE); RooGaussModel rf("rf","rf",dt,mean,sigma); // RooTruthModel rf("rf","rf",dt); RooGaussian rfpdf("rfpdf","rfpdf",dt,mean,sigma); cout << "Preparing PDFs..." << endl; // RooRealVar* fsigs1[8]; // RooRealVar* fsigs1b[8]; // RooRealVar* fsigs2[8]; // RooRealVar* fsigs2b[8]; RooBDecay* sigpdfs1[8]; RooBDecay* sigpdfs1b[8]; RooBDecay* sigpdfs2[8]; RooBDecay* sigpdfs2b[8]; RooAddPdf* PDFs1[8]; RooAddPdf* PDFs1b[8]; RooAddPdf* PDFs2[8]; RooAddPdf* PDFs2b[8]; RooAddPdf* pdfs1[8]; RooAddPdf* pdfs1b[8]; RooAddPdf* pdfs2[8]; RooAddPdf* pdfs2b[8]; RooSimultaneous pdf("pdf","pdf",bintag); RooRealVar fsig("fsig","fsig",_purity,0.,1.); if(constFSig) fsig.setConstant(kTRUE); fsig.Print(); for(int j=0; j<8; j++){ // out.str(""); // out << "fsig1" << j+1; // fsigs1[j] = new RooRealVar(out.str().c_str(),out.str().c_str(),_purity,0.,1.); if(constFSig) fsigs1[j]->setConstant(kTRUE); // out.str(""); // out << "fsig1b" << j+1; // fsigs1b[j] = new RooRealVar(out.str().c_str(),out.str().c_str(),_purity,0.,1.); if(constFSig) fsigs1b[j]->setConstant(kTRUE); // out.str(""); // out << "fsig2" << j+1; // fsigs2[j] = new RooRealVar(out.str().c_str(),out.str().c_str(),_purity,0.,1.); if(constFSig) fsigs2[j]->setConstant(kTRUE); // out.str(""); // out << "fsig2b" << j+1; // fsigs2b[j] = new RooRealVar(out.str().c_str(),out.str().c_str(),_purity,0.,1.); if(constFSig) fsigs2b[j]->setConstant(kTRUE); out.str(""); out << "sigpdf1" << j+1; sigpdfs1[j] = new RooBDecay(out.str().c_str(),out.str().c_str(),dt,tau,*dgamma,*f0,*f1,*a1[0][j],*b1[0][j],dm,rf,RooBDecay::DoubleSided); out.str(""); out << "sigpdf1b" << j+1; sigpdfs1b[j] = new RooBDecay(out.str().c_str(),out.str().c_str(),dt,tau,*dgamma,*f0,*f1,*a1[1][j],*b1[1][j],dm,rf,RooBDecay::DoubleSided); out.str(""); out << "sigpdf2" << j+1; sigpdfs2[j] = new RooBDecay(out.str().c_str(),out.str().c_str(),dt,tau,*dgamma,*f0,*f1,*a2[0][j],*b2[0][j],dm,rf,RooBDecay::DoubleSided); out.str(""); out << "sigpdf2b" << j+1; sigpdfs2b[j] = new RooBDecay(out.str().c_str(),out.str().c_str(),dt,tau,*dgamma,*f0,*f1,*a2[1][j],*b2[1][j],dm,rf,RooBDecay::DoubleSided); out.str(""); out << "PDF1" << j+1; PDFs1[j] = new RooAddPdf(out.str().c_str(),out.str().c_str(),RooArgList(*sigpdfs1[j],rfpdf),RooArgList(fsig)); out.str(""); out << "PDF1b" << j+1; PDFs1b[j] = new RooAddPdf(out.str().c_str(),out.str().c_str(),RooArgList(*sigpdfs1b[j],rfpdf),RooArgList(fsig)); out.str(""); out << "PDF2" << j+1; PDFs2[j] = new RooAddPdf(out.str().c_str(),out.str().c_str(),RooArgList(*sigpdfs2[j],rfpdf),RooArgList(fsig)); out.str(""); out << "PDF2b" << j+1; PDFs2b[j] = new RooAddPdf(out.str().c_str(),out.str().c_str(),RooArgList(*sigpdfs2b[j],rfpdf),RooArgList(fsig)); //Adding mistaging out.str(""); out << "pdf1" << j+1; pdfs1[j] = new RooAddPdf(out.str().c_str(),out.str().c_str(),RooArgList(*PDFs2[j],*PDFs1[j]),RooArgList(avgMisgat)); out.str(""); out << "pdf1b" << j+1; pdfs1b[j] = new RooAddPdf(out.str().c_str(),out.str().c_str(),RooArgList(*PDFs2b[j],*PDFs1b[j]),RooArgList(avgMisgat)); out.str(""); out << "pdf2" << j+1; pdfs2[j] = new RooAddPdf(out.str().c_str(),out.str().c_str(),RooArgList(*PDFs1[j],*PDFs2[j]),RooArgList(avgMisgat)); out.str(""); out << "pdf2b" << j+1; pdfs2b[j] = new RooAddPdf(out.str().c_str(),out.str().c_str(),RooArgList(*PDFs1b[j],*PDFs2b[j]),RooArgList(avgMisgat)); out.str(""); out << "{" << j+1 << ";B0}"; pdf.addPdf(*pdfs1[j],out.str().c_str()); out.str(""); out << "{" << -(j+1) << ";B0}"; pdf.addPdf(*pdfs1b[j],out.str().c_str()); out.str(""); out << "{" << j+1 << ";anti-B0}"; pdf.addPdf(*pdfs2[j],out.str().c_str()); out.str(""); out << "{" << -(j+1) << ";anti-B0}"; pdf.addPdf(*pdfs2b[j],out.str().c_str()); } cout << "Fitting..." << endl; pdf.fitTo(d,Verbose(),Timer()); dt.setBins(50); cout << "Drawing plots." << endl; for(int i=0; i<8; i++){ RooPlot* dtFrame = dt.frame(); out.str(""); out << "tag == 1 && bin == " << i+1; RooDataSet* ds = d.reduce(out.str().c_str()); ds->plotOn(dtFrame,DataError(RooAbsData::SumW2),MarkerSize(1),Cut(out.str().c_str()),MarkerColor(kBlue)); out.str(""); out << "{" << j+1 << ";B0}"; bintag = out.str().c_str(); pdf.plotOn(dtFrame,ProjWData(*ds),Slice(bintag),LineColor(kBlue)); double chi2 = dtFrame->chiSquare(); out.str(""); out << "tag == -1 && bin == " << i+1; RooDataSet* dsb = d.reduce(out.str().c_str()); dsb->plotOn(dtFrame,DataError(RooAbsData::SumW2),MarkerSize(1),Cut(out.str().c_str()),MarkerColor(kRed)); out.str(""); out << "{" << j+1 << ";anti-B0}"; bintag = out.str().c_str(); pdf.plotOn(dtFrame,ProjWData(*dsb),Slice(bintag),LineColor(kRed)); double chi2b = dtFrame->chiSquare(); out.str(""); out << "#Delta t, toy MC, bin == " << i+1; TCanvas* cm = new TCanvas(out.str().c_str(),out.str().c_str(),600,400); cm->cd(); dtFrame->GetXaxis()->SetTitleSize(0.05); dtFrame->GetXaxis()->SetTitleOffset(0.85); dtFrame->GetXaxis()->SetLabelSize(0.05); dtFrame->GetYaxis()->SetTitleOffset(1.6); TPaveText *ptB = new TPaveText(0.7,0.65,0.98,0.99,"brNDC"); ptB->SetFillColor(0); ptB->SetTextAlign(12); out.str(""); out << "bin = " << (i+1); ptB->AddText(out.str().c_str()); out.str(""); out << "#chi^{2}(B^{0}) = " << chi2; ptB->AddText(out.str().c_str()); out.str(""); out << "#chi^{2}(#barB^{0}) = " << chi2b; ptB->AddText(out.str().c_str()); out.str(""); out << "#sigma/#tau = " << _sigma_over_tau; ptB->AddText(out.str().c_str()); out.str(""); out << "purity = " << _purity; ptB->AddText(out.str().c_str()); out.str(""); out << "mistag = " << mistag_rate; ptB->AddText(out.str().c_str()); dtFrame->Draw(); ptB->Draw(); out.str(""); out << "../Reports/cpfitfigs/dt_bin" << (i+1) << ".root"; cm->Print(out.str().c_str()); out.str(""); out << "../Reports/cpfitfigs/dt_bin" << (i+1) << ".png"; cm->Print(out.str().c_str()); } for(int i=0; i<8; i++){ RooPlot* dtFrame = dt.frame(); out.str(""); out << "tag == 1 && bin == " << -(i+1); RooDataSet* ds2 = (RooDataSet*)d.reduce(out.str().c_str()); ds2->plotOn(dtFrame,DataError(RooAbsData::SumW2),MarkerSize(1),Cut(out.str().c_str()),MarkerColor(kBlue)); out.str(""); out << "{" << -(j+1) << ";B0}"; bintag = out.str().c_str(); pdf.plotOn(dtFrame,ProjWData(*ds2),Slice(bintag),LineColor(kBlue)); double chi2 = dtFrame->chiSquare(); out.str(""); out << "tag == -1 && bin == " << -(i+1); RooDataSet* ds2b = (RooDataSet*)d.reduce(out.str().c_str()); ds2b->plotOn(dtFrame,DataError(RooAbsData::SumW2),MarkerSize(1),Cut(out.str().c_str()),MarkerColor(kRed)); out.str(""); out << "{" << -(j+1) << ";anti-B0}"; bin = out.str().c_str(); pdf.plotOn(dtFrame,ProjWData(*ds2b),Slice(bintag),LineColor(kRed)); double chi2b = dtFrame->chiSquare(); out.str(""); out << "#Delta t, toy MC, bin == " << -(i+1); TCanvas* cm = new TCanvas(out.str().c_str(),out.str().c_str(),600,400); cm->cd(); dtFrame->GetXaxis()->SetTitleSize(0.05); dtFrame->GetXaxis()->SetTitleOffset(0.85); dtFrame->GetXaxis()->SetLabelSize(0.05); dtFrame->GetYaxis()->SetTitleOffset(1.6); TPaveText *ptB = new TPaveText(0.7,0.65,0.98,0.99,"brNDC"); ptB->SetFillColor(0); ptB->SetTextAlign(12); out.str(""); out << "bin = " << -(i+1); ptB->AddText(out.str().c_str()); out.str(""); out << "#chi^{2}(B^{0}) = " << chi2; ptB->AddText(out.str().c_str()); out.str(""); out << "#chi^{2}(#barB^{0}) = " << chi2b; ptB->AddText(out.str().c_str()); out.str(""); out << "#sigma/#tau = " << _sigma_over_tau; ptB->AddText(out.str().c_str()); out.str(""); out << "purity = " << _purity; ptB->AddText(out.str().c_str()); out.str(""); out << "mistag = " << mistag_rate; ptB->AddText(out.str().c_str()); dtFrame->Draw(); ptB->Draw(); out.str(""); out << "../Reports/cpfitfigs/dt_bin" << -(i+1) << ".root"; cm->Print(out.str().c_str()); out.str(""); out << "../Reports/cpfitfigs/dt_bin" << -(i+1) << ".png"; cm->Print(out.str().c_str()); } return; }
int main(int argc, char* argv[]) { doofit::builder::EasyPdf *epdf = new doofit::builder::EasyPdf(); epdf->Var("sig_yield"); epdf->Var("sig_yield").setVal(153000); epdf->Var("sig_yield").setConstant(false); //decay time epdf->Var("obsTime"); epdf->Var("obsTime").SetTitle("t_{#kern[-0.2]{B}_{#kern[-0.1]{ d}}^{#kern[-0.1]{ 0}}}"); epdf->Var("obsTime").setUnit("ps"); epdf->Var("obsTime").setRange(0.,16.); // tag, respectively the initial state of the produced B meson epdf->Cat("obsTag"); epdf->Cat("obsTag").defineType("B_S",1); epdf->Cat("obsTag").defineType("Bbar_S",-1); //finalstate epdf->Cat("catFinalState"); epdf->Cat("catFinalState").defineType("f",1); epdf->Cat("catFinalState").defineType("fbar",-1); epdf->Var("obsEtaOS"); epdf->Var("obsEtaOS").setRange(0.0,0.5); std::vector<double> knots; knots.push_back(0.07); knots.push_back(0.10); knots.push_back(0.138); knots.push_back(0.16); knots.push_back(0.23); knots.push_back(0.28); knots.push_back(0.35); knots.push_back(0.42); knots.push_back(0.44); knots.push_back(0.48); knots.push_back(0.5); // empty arg list for coefficients RooArgList* list = new RooArgList(); // create first coefficient RooRealVar* coeff_first = &(epdf->Var("parCSpline1")); coeff_first->setRange(0,10000); coeff_first->setVal(1); coeff_first->setConstant(false); list->add( *coeff_first ); for (unsigned int i=1; i <= knots.size(); ++i){ std::string number = boost::lexical_cast<std::string>(i); RooRealVar* coeff = &(epdf->Var("parCSpline"+number)); coeff->setRange(0,10000); coeff->setVal(1); coeff->setConstant(false); list->add( *coeff ); } // create last coefficient RooRealVar* coeff_last = &(epdf->Var("parCSpline"+boost::lexical_cast<std::string>(knots.size()))); coeff_last->setRange(0,10000); coeff_last->setVal(1); coeff_last->setConstant(false); list->add( *coeff_last ); list->Print(); doofit::roofit::pdfs::DooCubicSplinePdf splinePdf("splinePdf",epdf->Var("obsEtaOS"),knots,*list,0,0.5); //doofit::roofit::pdfs::DooCubicSplinePdf* splinePdf = new doofit::roofit::pdfs::DooCubicSplinePdf("splinePdf", epdf->Var("obsEtaOS"), knots, *list,0,0.5); //Koeffizienten DecRateCoeff *coeff_c = new DecRateCoeff("coef_cos","coef_cos",DecRateCoeff::CPOdd,epdf->Cat("catFinalState"),epdf->Cat("obsTag"),epdf->Var("C_f"),epdf->Var("C_fbar"),epdf->Var("obsEtaOS"),splinePdf,epdf->Var("tageff"),epdf->Var("obsEtaOS"),epdf->Var("asym_prod"),epdf->Var("asym_det"),epdf->Var("asym_tageff")); DecRateCoeff *coeff_s = new DecRateCoeff("coef_sin","coef_sin",DecRateCoeff::CPOdd,epdf->Cat("catFinalState"),epdf->Cat("obsTag"),epdf->Var("S_f"),epdf->Var("S_fbar"),epdf->Var("obsEtaOS"),splinePdf,epdf->Var("tageff"),epdf->Var("obsEtaOS"),epdf->Var("asym_prod"),epdf->Var("asym_det"),epdf->Var("asym_tageff")); DecRateCoeff *coeff_sh = new DecRateCoeff("coef_sinh","coef_sinh",DecRateCoeff::CPEven,epdf->Cat("catFinalState"),epdf->Cat("obsTag"),epdf->Var("f1_f"),epdf->Var("f1_fbar"),epdf->Var("obsEtaOS"),splinePdf,epdf->Var("tageff"),epdf->Var("obsEtaOS"),epdf->Var("asym_prod"),epdf->Var("asym_det"),epdf->Var("asym_tageff")); DecRateCoeff *coeff_ch = new DecRateCoeff("coef_cosh","coef_cosh",DecRateCoeff::CPEven,epdf->Cat("catFinalState"),epdf->Cat("obsTag"),epdf->Var("f0_f"),epdf->Var("f0_fbar"),epdf->Var("obsEtaOS"),splinePdf,epdf->Var("tageff"),epdf->Var("obsEtaOS"),epdf->Var("asym_prod"),epdf->Var("asym_det"),epdf->Var("asym_tageff")); epdf->AddRealToStore(coeff_ch); epdf->AddRealToStore(coeff_sh); epdf->AddRealToStore(coeff_c); epdf->AddRealToStore(coeff_s); ///////////////////Generiere PDF's///////////////////// //Zeit epdf->GaussModel("resTimeGauss",epdf->Var("obsTime"),epdf->Var("allTimeResMean"),epdf->Var("allTimeReso")); epdf->BDecay("pdfSigTime",epdf->Var("obsTime"),epdf->Var("tau"),epdf->Var("dgamma"),epdf->Real("coef_cosh"),epdf->Real("coef_sinh"),epdf->Real("coef_cos"),epdf->Real("coef_sin"),epdf->Var("deltaM"),epdf->Model("resTimeGauss")); //Zusammenfassen der Parameter in einem RooArgSet RooArgSet Observables; Observables.add(RooArgSet( epdf->Var("obsTime"),epdf->Cat("catFinalState"),epdf->Cat("obsTag"),epdf->Var("obsEtaOS"))); epdf->Extend("pdfExtend", epdf->Pdf("pdfSigTime"),epdf->Real("sig_yield")); //Multipliziere Signal und Untergrund PDF mit ihrer jeweiligen Zerfalls PDF// //Untergrund * Zerfall /*epdf->Product("pdf_bkg", RooArgSet(epdf->Pdf("pdf_bkg_mass_expo"), epdf->Pdf("pdf_bkg_mass_time"))); //Signal * Zerfall epdf->Product("pdf_sig", RooArgSet(epdf->Pdf("pdf_sig_mass_gauss"),epdf->Pdf("pdfSigTime"))); //Addiere PDF's epdf->Add("pdf_total", RooArgSet(epdf->Pdf("pdf_sig_mass_gauss*pdf_sig_time_decay"), epdf->Pdf("pdf_bkg_mass*pdf_bkg_time_decay")), RooArgSet(epdf->Var("bkg_Yield"),epdf->Var("sig_Yield")));*/ RooWorkspace ws; ws.import(epdf->Pdf("pdfExtend")); ws.defineSet("Observables",Observables, true); ws.Print(); doofit::config::CommonConfig cfg_com("common"); cfg_com.InitializeOptions(argc, argv); doofit::toy::ToyFactoryStdConfig cfg_tfac("toyfac"); cfg_tfac.InitializeOptions(cfg_com); doofit::toy::ToyStudyStdConfig cfg_tstudy("toystudy"); cfg_tstudy.InitializeOptions(cfg_tfac); // set a previously defined workspace to get PDF from (not mandatory, but convenient) cfg_tfac.set_workspace(&ws); // Check for a set --help flag and if so, print help and exit gracefully // (recommended). cfg_com.CheckHelpFlagAndPrintHelp(); // More custom code, e.g. to set options internally. // Not required as configuration via command line/config file is enough. cfg_com.PrintAll(); // Print overview of all options (optional) // cfg_com.PrintAll(); // Initialize the toy factory module with the config objects and start // generating toy samples. doofit::toy::ToyFactoryStd tfac(cfg_com, cfg_tfac); doofit::toy::ToyStudyStd tstudy(cfg_com, cfg_tstudy); RooDataSet* data = tfac.Generate(); data->Print(); epdf->Pdf("pdfExtend").getParameters(data)->readFromFile("/home/chasenberg/Repository/bachelor-template/ToyStudy/dootoycp-parameter_spline.txt"); epdf->Pdf("pdfExtend").getParameters(data)->writeToFile("/home/chasenberg/Repository/bachelor-template/ToyStudy/dootoycp-parameter_spline.txt.new"); //epdf->Pdf("pdfExtend").fitTo(*data); //epdf->Pdf("pdfExtend").getParameters(data)->writeToFile("/home/chasenberg/Repository/bachelor-template/ToyStudy/dootoycp-fit-result.txt"); RooFitResult* fit_result = epdf->Pdf("pdfExtend").fitTo(*data, RooFit::Save(true)); tstudy.StoreFitResult(fit_result); /*using namespace doofit::plotting; PlotConfig cfg_plot("cfg_plot"); cfg_plot.InitializeOptions(); cfg_plot.set_plot_directory("/net/lhcb-tank/home/chasenberg/Ergebnis/dootoycp_spline-lhcb/time/"); // plot PDF and directly specify components Plot myplot(cfg_plot, epdf->Var("obsTime"), *data, RooArgList(epdf->Pdf("pdfExtend"))); myplot.PlotItLogNoLogY(); PlotConfig cfg_plotEta("cfg_plotEta"); cfg_plotEta.InitializeOptions(); cfg_plotEta.set_plot_directory("/net/lhcb-tank/home/chasenberg/Ergebnis/dootoycp_spline-lhcb/eta/"); // plot PDF and directly specify components Plot myplotEta(cfg_plotEta, epdf->Var("obsEtaOS"), *data, RooArgList(splinePdf)); myplotEta.PlotIt();*/ }
prepDataFiles(){ // TDirectory *theDr = (TDirectory*) myFile->Get("eleIDdir");///denom_pt/fit_eff_plots"); //theDr->ls(); int myIndex; TSystemDirectory dir(thePath, thePath); TSystemFile *file; TString fname; TIter next(dir.GetListOfFiles()); while ((file=(TSystemFile*)next())) { fname = file->GetName(); if (fname.BeginsWith("TnP")&& fname.Contains("mc")) { ofstream myfile; TFile *myFile = new TFile(fname); TIter nextkey(myFile->GetListOfKeys()); TKey *key; while (key = (TKey*)nextkey()) { TString theTypeClasse = key->GetClassName(); TString theNomClasse = key->GetTitle(); if ( theTypeClasse == "TDirectoryFile"){ TDirectory *theDr = (TDirectory*) myFile->Get(theNomClasse); TIter nextkey2(theDr->GetListOfKeys()); TKey *key2; while (key2 = (TKey*)nextkey2()) { TString theTypeClasse2 = key2->GetClassName(); TString theNomClasse2 = key2->GetTitle(); myfile.open (theNomClasse2+".info"); if ( theTypeClasse == "TDirectoryFile"){ cout << "avant " << endl; TDirectory *theDr2 = (TDirectory*) myFile->Get(theNomClasse+"/"+theNomClasse2); cout << "apres " << endl; TIter nextkey3(theDr2->GetListOfKeys()); TKey *key3; while (key3 = (TKey*)nextkey3()) { TString theTypeClasse3 = key3->GetClassName(); TString theNomClasse3 = key3->GetTitle(); if ((theNomClasse3.Contains("FromMC"))) { TString localClasse3 = theNomClasse3; localClasse3.ReplaceAll("__","%"); cout << "apres " << localClasse3 << endl; TObjArray* listBin = localClasse3.Tokenize('%'); TString first = ((TObjString*)listBin->At(0))->GetString(); TString second = ((TObjString*)listBin->At(2))->GetString(); myfile << first; myfile << " " << second << " "; cout << "coucou la on va récupérer le rooFitResult " << endl; RooFitResult *theResults = (RooFitResult*) myFile->Get(theNomClasse+"/"+theNomClasse2+"/"+theNomClasse3+"/fitresults"); theResults->Print(); RooArgList theParam = theResults->floatParsFinal(); int taille = theParam.getSize(); for (int m = 0 ; m < taille ; m++){ cout << "m=" << m << endl; RooAbsArg *theArg = (RooAbsArg*) theParam.at(m); RooAbsReal *theReal = (RooAbsReal*) theArg; myfile << theReal->getVal() << " " ; } myfile << "\n"; } } } myfile.close(); } } } delete myFile; } } }
void ztonunu1() { // RooMsgService::instance().addStream(DEBUG,Topic(Tracing),ClassName("RooPoisson"),OutputFile("debug.log")) ; float acc_mm_mean( 0.98 ) ; float acc_mm_err( 0.02 ) ; float acc_ee_mean( 0.98 ) ; float acc_ee_err( 0.02 ) ; float eff_mm_mean( 0.77 ) ; float eff_mm_err( 0.08 ) ; float eff_ee_mean( 0.76 ) ; float eff_ee_err( 0.08 ) ; RooRealVar* rv_Nsbee = new RooRealVar( "Nsbee" ,"Nsbee" , 0., 100. ) ; RooRealVar* rv_Nsbmm = new RooRealVar( "Nsbmm" ,"Nsbmm" , 0., 100. ) ; RooRealVar* rv_Nsigee = new RooRealVar( "Nsigee" ,"Nsigee" , 0., 100. ) ; RooRealVar* rv_Nsigmm = new RooRealVar( "Nsigmm" ,"Nsigmm" , 0., 100. ) ; rv_Nsbee->setVal( 5 ) ; rv_Nsbmm->setVal( 3 ) ; rv_Nsigee->setVal( 4 ) ; rv_Nsigmm->setVal( 3 ) ; RooRealVar* rv_mu_Znnsb = new RooRealVar( "mu_Znnsb" , "mu_Znnsb" , 0., 100. ) ; RooRealVar* rv_mu_Znnsig = new RooRealVar( "mu_Znnsig" , "mu_Znnsig" , 0., 100. ) ; rv_mu_Znnsb->setVal( 37 ) ; // starting value rv_mu_Znnsig->setVal( 17. ) ; // starting value RooRealVar* rv_bfRatio = new RooRealVar( "bfRatio", "bfRatio", 0., 10. ) ; rv_bfRatio->setVal( 5.95 ) ; rv_bfRatio->setConstant( kTRUE ) ; RooRealVar* rv_acc_mm = new RooRealVar( "acc_mm", "acc_mm", 0.001, 1.000 ) ; RooRealVar* rv_acc_ee = new RooRealVar( "acc_ee", "acc_ee", 0.001, 1.000 ) ; RooRealVar* rv_eff_mm = new RooRealVar( "eff_mm", "eff_mm", 0.001, 1.000 ) ; RooRealVar* rv_eff_ee = new RooRealVar( "eff_ee", "eff_ee", 0.001, 1.000 ) ; rv_acc_mm->setVal( acc_mm_mean ) ; rv_acc_ee->setVal( acc_ee_mean ) ; rv_eff_mm->setVal( eff_mm_mean ) ; rv_eff_ee->setVal( eff_ee_mean ) ; RooRealVar* rv_lumi_ratio = new RooRealVar( "lumi_ratio", "lumi_ratio", 0., 10. ) ; rv_lumi_ratio -> setVal( 686./869. ) ; rv_lumi_ratio -> setConstant( kTRUE) ; RooFormulaVar* rv_mu_Zeesb = new RooFormulaVar( "mu_Zeesb", "mu_Znnsb * ( acc_ee * eff_ee / (bfRatio*lumi_ratio) )", RooArgSet( *rv_mu_Znnsb, *rv_acc_ee, *rv_eff_ee, *rv_bfRatio, *rv_lumi_ratio ) ) ; RooFormulaVar* rv_mu_Zmmsb = new RooFormulaVar( "mu_Zmmsb", "mu_Znnsb * ( acc_mm * eff_mm / (bfRatio*lumi_ratio) )", RooArgSet( *rv_mu_Znnsb, *rv_acc_mm, *rv_eff_mm, *rv_bfRatio, *rv_lumi_ratio ) ) ; RooFormulaVar* rv_mu_Zeesig = new RooFormulaVar( "mu_Zeesig", "mu_Znnsig * ( acc_ee * eff_ee / (bfRatio*lumi_ratio) )", RooArgSet( *rv_mu_Znnsig, *rv_acc_ee, *rv_eff_ee, *rv_bfRatio, *rv_lumi_ratio ) ) ; RooFormulaVar* rv_mu_Zmmsig = new RooFormulaVar( "mu_Zmmsig", "mu_Znnsig * ( acc_mm * eff_mm / (bfRatio*lumi_ratio) )", RooArgSet( *rv_mu_Znnsig, *rv_acc_mm, *rv_eff_mm, *rv_bfRatio, *rv_lumi_ratio ) ) ; RooFormulaVar* rv_n_sbee = new RooFormulaVar( "n_sbee" , "mu_Zeesb" , RooArgSet( *rv_mu_Zeesb ) ) ; RooFormulaVar* rv_n_sbmm = new RooFormulaVar( "n_sbmm" , "mu_Zmmsb" , RooArgSet( *rv_mu_Zmmsb ) ) ; RooFormulaVar* rv_n_sigee = new RooFormulaVar( "n_sigee" , "mu_Zeesig" , RooArgSet( *rv_mu_Zeesig ) ) ; RooFormulaVar* rv_n_sigmm = new RooFormulaVar( "n_sigmm" , "mu_Zmmsig" , RooArgSet( *rv_mu_Zmmsig ) ) ; RooGaussian* pdf_acc_mm = new RooGaussian( "pdf_acc_mm", "Gaussian pdf for Z to mumu acceptance", *rv_acc_mm, RooConst( acc_mm_mean ), RooConst( acc_mm_err ) ) ; RooGaussian* pdf_acc_ee = new RooGaussian( "pdf_acc_ee", "Gaussian pdf for Z to ee acceptance", *rv_acc_ee, RooConst( acc_ee_mean ), RooConst( acc_ee_err ) ) ; RooGaussian* pdf_eff_mm = new RooGaussian( "pdf_eff_mm", "Gaussian pdf for Z to mumu efficiency", *rv_eff_mm, RooConst( eff_mm_mean ), RooConst( eff_mm_err ) ) ; RooGaussian* pdf_eff_ee = new RooGaussian( "pdf_eff_ee", "Gaussian pdf for Z to ee efficiency", *rv_eff_ee, RooConst( eff_ee_mean ), RooConst( eff_ee_err ) ) ; RooPoisson* pdf_Nsbee = new RooPoisson( "pdf_Nsbee" , "Nsb , Z to ee Poisson PDF", *rv_Nsbee , *rv_n_sbee ) ; RooPoisson* pdf_Nsbmm = new RooPoisson( "pdf_Nsbmm" , "Nsb , Z to mm Poisson PDF", *rv_Nsbmm , *rv_n_sbmm ) ; RooPoisson* pdf_Nsigee = new RooPoisson( "pdf_Nsigee" , "Nsig, Z to ee Poisson PDF", *rv_Nsigee , *rv_n_sigee ) ; RooPoisson* pdf_Nsigmm = new RooPoisson( "pdf_Nsigmm" , "Nsig, Z to mm Poisson PDF", *rv_Nsigmm , *rv_n_sigmm ) ; RooArgSet pdflist ; pdflist.add( *pdf_acc_mm ) ; pdflist.add( *pdf_acc_ee ) ; pdflist.add( *pdf_eff_mm ) ; pdflist.add( *pdf_eff_ee ) ; pdflist.add( *pdf_Nsbee ) ; pdflist.add( *pdf_Nsbmm ) ; pdflist.add( *pdf_Nsigee ) ; pdflist.add( *pdf_Nsigmm ) ; RooProdPdf* znnLikelihood = new RooProdPdf( "znnLikelihood", "Z to nunu likelihood", pdflist ) ; RooArgSet observedParametersList ; observedParametersList.add( *rv_Nsbee ) ; observedParametersList.add( *rv_Nsbmm ) ; observedParametersList.add( *rv_Nsigee ) ; observedParametersList.add( *rv_Nsigmm ) ; RooDataSet* dsObserved = new RooDataSet( "ztonn_rds", "Z to nunu dataset", observedParametersList ) ; dsObserved->add( observedParametersList ) ; //// RooDataSet* dsObserved = znnLikelihood->generate( observedParametersList, 1) ; RooWorkspace* znnWorkspace = new RooWorkspace("ztonn_ws") ; znnWorkspace->import( *znnLikelihood ) ; znnWorkspace->import( *dsObserved ) ; znnWorkspace->Print() ; dsObserved->printMultiline(cout, 1, kTRUE, "") ; RooFitResult* fitResult = znnLikelihood->fitTo( *dsObserved, Verbose(true), Save(true) ) ; printf("\n\n----- Constant parameters:\n") ; RooArgList constPars = fitResult->constPars() ; for ( int pi=0; pi<constPars.getSize(); pi++ ) { constPars[pi].Print() ; } // pi. printf("\n\n----- Floating parameters:\n") ; RooArgList floatPars = fitResult->floatParsFinal() ; for ( int pi=0; pi<floatPars.getSize(); pi++ ) { floatPars[pi].Print() ; } // pi. printf("\n\n") ; ProfileLikelihoodCalculator plc_znn_sb( *dsObserved, *znnLikelihood, RooArgSet( *rv_mu_Znnsb ) ) ; ProfileLikelihoodCalculator plc_znn_sig( *dsObserved, *znnLikelihood, RooArgSet( *rv_mu_Znnsig ) ) ; plc_znn_sb.SetTestSize(0.32) ; plc_znn_sig.SetTestSize(0.32) ; ConfInterval* sb_znn_interval = plc_znn_sb.GetInterval() ; float sbZnnLow = ((LikelihoodInterval*) sb_znn_interval)->LowerLimit(*rv_mu_Znnsb) ; float sbZnnHigh = ((LikelihoodInterval*) sb_znn_interval)->UpperLimit(*rv_mu_Znnsb) ; printf("\n\n znn SB interval %6.1f to %6.1f\n", sbZnnLow, sbZnnHigh ) ; ConfInterval* sig_znn_interval = plc_znn_sig.GetInterval() ; float sigZnnLow = ((LikelihoodInterval*) sig_znn_interval)->LowerLimit(*rv_mu_Znnsig) ; float sigZnnHigh = ((LikelihoodInterval*) sig_znn_interval)->UpperLimit(*rv_mu_Znnsig) ; printf("\n\n znn SIG interval %6.1f to %6.1f\n", sigZnnLow, sigZnnHigh ) ; TCanvas* c_prof_sb = new TCanvas("c_prof_sb","SB Z to nunu profile") ; LikelihoodIntervalPlot plot_znn_sb((LikelihoodInterval*)sb_znn_interval) ; plot_znn_sb.Draw() ; c_prof_sb->SaveAs("znn_sb_profile.png") ; TCanvas* c_prof_sig = new TCanvas("c_prof_sig","sig Z to nunu profile") ; LikelihoodIntervalPlot plot_znn_sig((LikelihoodInterval*)sig_znn_interval) ; plot_znn_sig.Draw() ; c_prof_sig->SaveAs("znn_sig_profile.png") ; }