#include #include #include #include #include #include #include "TTree.h" #include "TFile.h" #include "TLorentzVector.h" #include "TH1D.h" #include "TH2.h" #include "TProfile.h" #include "TDirectoryFile.h" #include "TCanvas.h" #include "TROOT.h" #include "TLegend.h" #include "TVectorD.h" #include "TColor.h" #include "TString.h" #include "RooDataSet.h" #include "RooArgSet.h" #include "RooAbsPdf.h" #include "RooDoubleCBFast.h" #include "RooGaussian.h" #include "RooPlot.h" #include "RooBinning.h" #include "RooDataHist.h" #include "RooMomentMorph.h" #include "RooRealVar.h" #include "RooAddPdf.h" #include "RooPolynomial.h" #include "RooExtendPdf.h" #include "RooWorkspace.h" #include "RooAbsReal.h" #include "AtlasLabels.h" #include "AtlasUtils.h" #include "RooChi2Var.h" void polFit(RooDataSet& datasetSR, RooDataSet& datasetAR1, RooDataSet& datasetAR2, RooDataSet& datasetAR3, RooRealVar& massSR, RooRealVar& massAR1, RooRealVar& massAR2, RooRealVar& massAR3, RooPolynomial& pol2SR, RooPolynomial& pol2AR1, RooPolynomial& pol2AR2, RooPolynomial& pol2AR3, RooRealVar& normSR, RooRealVar& normAR1, RooRealVar& normAR2, RooRealVar& normAR3, std::string sampleName) { std::cout<<"beginning pol2fit()"< datasets; std::vector masses; std::vector polynomials; std::vector norms; std::vector channels; datasets.push_back(datasetSR);datasets.push_back(datasetAR1);datasets.push_back(datasetAR2);datasets.push_back(datasetAR3); masses.push_back(massSR);masses.push_back(massAR1);masses.push_back(massAR2);masses.push_back(massAR3); polynomials.push_back(pol2SR);polynomials.push_back(pol2AR1);polynomials.push_back(pol2AR2);polynomials.push_back(pol2AR3); norms.push_back(normSR);norms.push_back(normAR1);norms.push_back(normAR2);norms.push_back(normAR3); //std::string channels[4]={"SR","AR1","AR2","AR3"}; channels.push_back("SR");channels.push_back("AR1");channels.push_back("AR2");channels.push_back("AR3"); int numberOfChannels = channels.size(); std::string model_str="euu"; std::cout<<"local variables setup"<cd(); for(int i=0;icd(); gROOT->SetStyle("ATLAS"); TCanvas* canvas = new TCanvas(); std::cout<<"TCanvas setup"<cd(); frame->Draw(); ATLASLabel(0.2, 0.88, "Work in Progress"); std::string parsed_str=model_str+", "+sampleName+", "+channels.at(i)+", entries = %.3f"; const char* parsed_char = parsed_str.c_str(); myText(0.2, 0.82, kBlack, TString::Format(parsed_char, datasets.at(i).sumEntries())); myText(0.2, 0.76, kBlack, TString::Format("n = %.3f", norms.at(i).getVal())); std::string savedName_str=sampleName+channels.at(i)+"_"+model_str; const char* savedName_char=savedName_str.c_str(); canvas->SaveAs(savedName_char); std::cout<<"TCanvas saved"<import(polynomials.at(i)); workspace->import(norms.at(i)); workspace->Print(); workspace->Write(); */ } f_out->Close(); } int test() { float weight = 0; float weight_fake = 0; float mass = 0; std::vector *base_mu_Pt = nullptr; std::vector *mu_corr_PflowTight_VarRad = nullptr; std::vector *base_mu_d0 = nullptr; std::vector *base_mu_d0Err = nullptr; bool isSR_OS = 0; bool isFakeSR_OS = 0; std::string channelStrings[5]={"SR","AR1","AR2","AR3","extraStringToAvoidSegFault"}; int numberOfChannels = sizeof(channelStrings)/sizeof(channelStrings[0]); std::vectormasses; std::vectorweights; std::vectorhs; std::vectordatasets; masses.reserve(numberOfChannels);weights.reserve(numberOfChannels);hs.reserve(numberOfChannels);datasets.reserve(numberOfChannels); for(int i=0;i< numberOfChannels;i++){ std::string mass_str = "mass"+channelStrings[i]; std::string weight_str = "weight"+channelStrings[i]; std::string hs_str = "hs"+channelStrings[i]; std::string dataset_str = "dataset"+channelStrings[i]; const char* mass_char = mass_str.c_str(); const char* weight_char = weight_str.c_str(); const char* hs_char = hs_str.c_str(); const char* dataset_char = dataset_str.c_str(); RooRealVar mass(mass_char, "m_{#mu#mu}", 12,77); masses.push_back(mass); RooRealVar weight(weight_char, weight_char, 0); weights.push_back(weight); RooArgSet hs_var(hs_char); hs_var.add(mass); hs_var.add(weight); hs.push_back(hs_var); RooDataSet dataset(dataset_char, "", hs_var, RooFit::WeightVar(weight)); datasets.push_back(dataset); } //get index for channels (doing this the long way seems uneccessary for such a short list, but it's useful in case other channels want to be added in the future) int indexSR=std::distance(channelStrings, std::find(channelStrings, channelStrings + sizeof(channelStrings)/sizeof(channelStrings[0]), "SR")); int indexAR1=std::distance(channelStrings, std::find(channelStrings, channelStrings + sizeof(channelStrings)/sizeof(channelStrings[0]), "AR1")); int indexAR2=std::distance(channelStrings, std::find(channelStrings, channelStrings + sizeof(channelStrings)/sizeof(channelStrings[0]), "AR2")); int indexAR3=std::distance(channelStrings, std::find(channelStrings, channelStrings + sizeof(channelStrings)/sizeof(channelStrings[0]), "AR3")); std::vector norms; std::vector polynomials; norms.reserve(4);polynomials.reserve(4); std::cout<<"initializing local variables for data"<