#include "../GlobalFunctions.hh" using namespace std; using namespace RooFit ; class factor{ private: public: string Channel; bool MagUp; Int_t year; Int_t nEvents; Double_t OtherScale; factor(){ Channel = ""; MagUp = false; nEvents = 0; OtherScale = 1.0; } //empty constructor factor(string Channel_tmp, bool MagUp_tmp, Int_t year_tmp, Int_t nEvents_tmp); //default constructor with no other scales factor(string Channel_tmp, bool MagUp_tmp, Int_t year, Int_t nEvents_tmp, Double_t OtherScale_tmp); //default constructor ~factor(); //destuctor }; factor::factor(string Channel_tmp, bool MagUp_tmp, Int_t year_tmp, Int_t nEvents_tmp){ Channel = Channel_tmp; MagUp = MagUp_tmp; year = year_tmp; nEvents = nEvents_tmp; OtherScale = 1.0; return; } factor::factor(string Channel_tmp, bool MagUp_tmp, Int_t year_tmp, Int_t nEvents_tmp, Double_t OtherScale_tmp){ Channel = Channel_tmp; MagUp = MagUp_tmp; year = year_tmp; nEvents = nEvents_tmp; OtherScale = OtherScale_tmp; return; } factor::~factor(){ Channel = ""; MagUp = false; year = 0; nEvents = 0; OtherScale = 1.0; return; } class oneChannelFactors{ //factors just for one channel, including the lenght, for easier handling private: public: string Channel = ""; vector factorsVec; int VecSize = 0; oneChannelFactors(){ Channel = ""; VecSize = 0; factorsVec.clear(); } //empty constructor oneChannelFactors(vector factorsVec_tmp); //default constructor ~oneChannelFactors(); //destuctor }; oneChannelFactors::~oneChannelFactors(){ factorsVec.empty(); Channel = ""; VecSize = 0; } oneChannelFactors::oneChannelFactors(vector factorsVec_tmp){ Channel = factorsVec_tmp.at(0).Channel; //todo, check if they are all the same factorsVec = factorsVec_tmp; VecSize = factorsVec_tmp.size(); return; } class allFactors{ private: public: vector factorsChannelVec; int NoChannels = 0; allFactors(){ NoChannels = 0; factorsChannelVec.clear(); } //empty constructor allFactors(int Run, bool RefChan); //default constructor ~allFactors(); //destuctor }; allFactors::allFactors(int Run, bool RefChan){ oneChannelFactors one_channel_factors_tmp; factor factor_tmp; vector factorsVec_tmp; if (!RefChan){ //-------------------------------------------------------------------- // KplusPi0 //-------------------------------------------------------------------- //Run I if (Run == 1){ factor_tmp = factor("KplusPi0", false, 2011, 507551 ); factorsVec_tmp.push_back(factor_tmp); factor_tmp = factor("KplusPi0", true, 2011, 502787 ); factorsVec_tmp.push_back(factor_tmp); factor_tmp = factor("KplusPi0", false, 2012, 514015 ); factorsVec_tmp.push_back(factor_tmp); factor_tmp = factor("KplusPi0", true, 2012, 500458 ); factorsVec_tmp.push_back(factor_tmp); } // Run II if (Run == 2){ factor_tmp = factor("KplusPi0", false, 2015, 500320 ); factorsVec_tmp.push_back(factor_tmp); factor_tmp = factor("KplusPi0", true, 2015, 507272 ); factorsVec_tmp.push_back(factor_tmp); factor_tmp = factor("KplusPi0", false, 2016, 999419 ); factorsVec_tmp.push_back(factor_tmp); factor_tmp = factor("KplusPi0", true, 2016, 1000151 ); factorsVec_tmp.push_back(factor_tmp); } one_channel_factors_tmp = oneChannelFactors(factorsVec_tmp); factorsChannelVec.push_back(one_channel_factors_tmp); factorsVec_tmp.clear(); //-------------------------------------------------------------------- // B0toKstMuMu //-------------------------------------------------------------------- //Run I if (Run == 1){ factor_tmp = factor("B0toKstMuMu", false, 2011, 525851, 1.5 ); factorsVec_tmp.push_back(factor_tmp); factor_tmp = factor("B0toKstMuMu", true, 2011, 506402, 1.5 ); factorsVec_tmp.push_back(factor_tmp); factor_tmp = factor("B0toKstMuMu", false, 2012, 257748, 1.5 ); factorsVec_tmp.push_back(factor_tmp); factor_tmp = factor("B0toKstMuMu", true, 2012, 260000, 1.5 ); factorsVec_tmp.push_back(factor_tmp); } // Run II if (Run == 2){ factor_tmp = factor("B0toKstMuMu", false, 2015, 502704, 1.5* 13.0/(13.0-4.0) ); factorsVec_tmp.push_back(factor_tmp); factor_tmp = factor("B0toKstMuMu", true, 2015, 503254, 1.5* 12.0/(12.0-1.0) ); factorsVec_tmp.push_back(factor_tmp); factor_tmp = factor("B0toKstMuMu", false, 2016, 657410, 1.5* 5.0/(5.0-4.0) ); factorsVec_tmp.push_back(factor_tmp); factor_tmp = factor("B0toKstMuMu", true, 2016, 707852, 1.5* 5.0/(5.0-1.0) ); factorsVec_tmp.push_back(factor_tmp); } one_channel_factors_tmp = oneChannelFactors(factorsVec_tmp); factorsChannelVec.push_back(one_channel_factors_tmp); factorsVec_tmp.clear(); } else{ //-------------------------------------------------------------------- // RefKplusPi0 //-------------------------------------------------------------------- //Run I if (Run == 1){ factor_tmp = factor("RefKplusPi0", false, 2011, 1011831 ); factorsVec_tmp.push_back(factor_tmp); factor_tmp = factor("RefKplusPi0", true, 2011, 1007920 ); factorsVec_tmp.push_back(factor_tmp); factor_tmp = factor("RefKplusPi0", false, 2012, 1003888 ); factorsVec_tmp.push_back(factor_tmp); factor_tmp = factor("RefKplusPi0", true, 2012, 1000278 ); factorsVec_tmp.push_back(factor_tmp); } // Run II if (Run == 2){ factor_tmp = factor("RefKplusPi0", false, 2015, -1 ); factorsVec_tmp.push_back(factor_tmp); factor_tmp = factor("RefKplusPi0", true, 2015, -1 ); factorsVec_tmp.push_back(factor_tmp); factor_tmp = factor("RefKplusPi0", false, 2016, -1 ); factorsVec_tmp.push_back(factor_tmp); factor_tmp = factor("RefKplusPi0", true, 2016, -1 ); factorsVec_tmp.push_back(factor_tmp); } one_channel_factors_tmp = oneChannelFactors(factorsVec_tmp); factorsChannelVec.push_back(one_channel_factors_tmp); factorsVec_tmp.clear(); //-------------------------------------------------------------------- // B0toKstJpsi //-------------------------------------------------------------------- //Run I if (Run == 1){ factor_tmp = factor("B0toKstJpsi", false, 2011, 3081998, 1.5 ); factorsVec_tmp.push_back(factor_tmp); factor_tmp = factor("B0toKstJpsi", true, 2011, 3076566, 1.5 * 13.0/(13.0-1.0) ); factorsVec_tmp.push_back(factor_tmp); factor_tmp = factor("B0toKstJpsi", false, 2012, 4435958, 1.5 * 15.0/(15.0-1.0) ); factorsVec_tmp.push_back(factor_tmp); factor_tmp = factor("B0toKstJpsi", true, 2012, 4425822, 1.5 ); factorsVec_tmp.push_back(factor_tmp); } // Run II if (Run == 2){ factor_tmp = factor("B0toKstJpsi", false, 2015, 874037 , 1.5 ); factorsVec_tmp.push_back(factor_tmp); factor_tmp = factor("B0toKstJpsi", true, 2015, 502444 , 1.5 ); factorsVec_tmp.push_back(factor_tmp); factor_tmp = factor("B0toKstJpsi", false, 2016, 5033743 , 1.5*125.0/(125.0-2.0) ); factorsVec_tmp.push_back(factor_tmp); factor_tmp = factor("B0toKstJpsi", true, 2016, 4991624 , 1.5*133.0/(133.0-2.0) ); factorsVec_tmp.push_back(factor_tmp); } one_channel_factors_tmp = oneChannelFactors(factorsVec_tmp); factorsChannelVec.push_back(one_channel_factors_tmp); factorsVec_tmp.clear(); //-------------------------------------------------------------------- // BtoXJpsi //-------------------------------------------------------------------- //Run I if (Run == 1){ factor_tmp = factor("BtoXJpsi", false, 2011, -1);//2508491); factorsVec_tmp.push_back(factor_tmp); factor_tmp = factor("BtoXJpsi", true, 2011,-1);// 2514495); factorsVec_tmp.push_back(factor_tmp); factor_tmp = factor("BtoXJpsi", false, 2012, -1);//2504990); factorsVec_tmp.push_back(factor_tmp); factor_tmp = factor("BtoXJpsi", true, 2012,-1);// 2535488); factorsVec_tmp.push_back(factor_tmp); } // Run II if (Run == 2){ factor_tmp = factor("BtoXJpsi", false, 2015, -1); factorsVec_tmp.push_back(factor_tmp); factor_tmp = factor("BtoXJpsi", true, 2015, -1 ); factorsVec_tmp.push_back(factor_tmp); factor_tmp = factor("BtoXJpsi", false, 2016, 5090001 ); factorsVec_tmp.push_back(factor_tmp); factor_tmp = factor("BtoXJpsi", true, 2016, 6055765 ); factorsVec_tmp.push_back(factor_tmp); } one_channel_factors_tmp = oneChannelFactors(factorsVec_tmp); factorsChannelVec.push_back(one_channel_factors_tmp); factorsVec_tmp.clear(); //-------------------------------------------------------------------- // BtoK1MuMu //-------------------------------------------------------------------- /* //Run I if (Run == 1){ factor_tmp = factor("BtoK1MuMu", false, 2011, 1038809 ); factorsVec_tmp.push_back(factor_tmp); factor_tmp = factor("BtoK1MuMu", true, 2011, 1027740 ); factorsVec_tmp.push_back(factor_tmp); factor_tmp = factor("BtoK1MuMu", false, 2012, 2003930 ); factorsVec_tmp.push_back(factor_tmp); factor_tmp = factor("BtoK1MuMu", true, 2012, 2008883 ); factorsVec_tmp.push_back(factor_tmp); } // Run II if (Run == 2){ factor_tmp = factor("BtoK1MuMu", false, 2015, -1 ); factorsVec_tmp.push_back(factor_tmp); factor_tmp = factor("BtoK1MuMu", true, 2015, -1 ); factorsVec_tmp.push_back(factor_tmp); factor_tmp = factor("BtoK1MuMu", false, 2016, -1 ); factorsVec_tmp.push_back(factor_tmp); factor_tmp = factor("BtoK1MuMu", true, 2016, -1 ); factorsVec_tmp.push_back(factor_tmp); } one_channel_factors_tmp = oneChannelFactors(factorsVec_tmp); factorsChannelVec.push_back(one_channel_factors_tmp); factorsVec_tmp.clear(); */ //-------------------------------------------------------------------- // BtoK1Jpsi //-------------------------------------------------------------------- //Run I if (Run == 1){ factor_tmp = factor("BtoK1Jpsi", false, 2011, -1 ); factorsVec_tmp.push_back(factor_tmp); factor_tmp = factor("BtoK1Jpsi", true, 2011, -1 ); factorsVec_tmp.push_back(factor_tmp); factor_tmp = factor("BtoK1Jpsi", false, 2012, 250249, 2.0 ); factorsVec_tmp.push_back(factor_tmp); factor_tmp = factor("BtoK1Jpsi", true, 2012, 265250, 2.0 ); factorsVec_tmp.push_back(factor_tmp); } // Run II if (Run == 2){ factor_tmp = factor("BtoK1Jpsi", false, 2015, -1 ); factorsVec_tmp.push_back(factor_tmp); factor_tmp = factor("BtoK1Jpsi", true, 2015, -1 ); factorsVec_tmp.push_back(factor_tmp); factor_tmp = factor("BtoK1Jpsi", false, 2016, -1 ); factorsVec_tmp.push_back(factor_tmp); factor_tmp = factor("BtoK1Jpsi", true, 2016, -1 ); factorsVec_tmp.push_back(factor_tmp); } one_channel_factors_tmp = oneChannelFactors(factorsVec_tmp); factorsChannelVec.push_back(one_channel_factors_tmp); factorsVec_tmp.clear(); } //-------------------------------------------------------------------- // PHSP //-------------------------------------------------------------------- /* //Run I if (Run == 1){ factor_tmp = factor("PHSP", false, 2011, 94529 ); factorsVec_tmp.push_back(factor_tmp); factor_tmp = factor("PHSP", true, 2011, 91600 ); factorsVec_tmp.push_back(factor_tmp); factor_tmp = factor("PHSP", false, 2012, 175028 ); factorsVec_tmp.push_back(factor_tmp); factor_tmp = factor("PHSP", true, 2012, 203760 ); factorsVec_tmp.push_back(factor_tmp); } // Run II if (Run == 2){ factor_tmp = factor("PHSP", false, 2015, 76712 ); factorsVec_tmp.push_back(factor_tmp); factor_tmp = factor("PHSP", true, 2015, 72037 ); factorsVec_tmp.push_back(factor_tmp); factor_tmp = factor("PHSP", false, 2016, 214587 ); factorsVec_tmp.push_back(factor_tmp); factor_tmp = factor("PHSP", true, 2016, 216923 ); factorsVec_tmp.push_back(factor_tmp); } one_channel_factors_tmp = oneChannelFactors(factorsVec_tmp); factorsChannelVec.push_back(one_channel_factors_tmp); factorsVec_tmp.clear(); */ NoChannels = factorsChannelVec.size(); } allFactors::~allFactors(){ factorsChannelVec.empty(); NoChannels = 0; } //void allFactors::print(){ //TODO /* cout << "[INFO]\t\tUsing " << NoVariables << " variables." << endl; cout << "[INFO]\t\tBranchName \t\t LaTeXName \t\t Unit \t\t DataType" << endl; for (vector::iterator tracksIter1 = AllVariables.begin(); tracksIter1 !=AllVariables.end();++tracksIter1){ cout<< "[INFO]\t\t" << (*tracksIter1).ReaderName << "\t\t" << (*tracksIter1).LaTeXName << "\t\t" << (*tracksIter1).Unit << "\t\t" << (*tracksIter1).DataType << endl; } */ //} oneChannelFactors SignalFactors(int Run =1){ factor factorSig; vector factorsSigVec; //-------------------------------------------------------------------- // KplusPi0 //-------------------------------------------------------------------- //Run I if (Run ==1){ factorSig = factor("KplusPi0", false, 2011, 507551 ); factorsSigVec.push_back(factorSig); factorSig = factor("KplusPi0", true, 2011, 502787 ); factorsSigVec.push_back(factorSig); factorSig = factor("KplusPi0", false, 2012, 514015 ); factorsSigVec.push_back(factorSig); factorSig = factor("KplusPi0", true, 2012, 500458 ); factorsSigVec.push_back(factorSig); } // Run II else{ factorSig = factor("KplusPi0", false, 2015, 500320 ); factorsSigVec.push_back(factorSig); factorSig = factor("KplusPi0", true, 2015, 507272 ); factorsSigVec.push_back(factorSig); factorSig = factor("KplusPi0", false, 2016, 999419 ); factorsSigVec.push_back(factorSig); factorSig = factor("KplusPi0", true, 2016, 1000151 ); factorsSigVec.push_back(factorSig); } return oneChannelFactors(factorsSigVec); } oneChannelFactors SignalRefFactors(int Run =1){ factor factorSig; vector factorsSigVec; //-------------------------------------------------------------------- // RefKplusPi0 //-------------------------------------------------------------------- //Run I if (Run ==1){ factorSig = factor("RefKplusPi0", false, 2011, 1011831 ); factorsSigVec.push_back(factorSig); factorSig = factor("RefKplusPi0", true, 2011, 1007920 ); factorsSigVec.push_back(factorSig); factorSig = factor("RefKplusPi0", false, 2012, 1003888 ); factorsSigVec.push_back(factorSig); factorSig = factor("RefKplusPi0", true, 2012, 1000278 ); factorsSigVec.push_back(factorSig); } // Run II else{ factorSig = factor("RefKplusPi0", false, 2015, -1 ); factorsSigVec.push_back(factorSig); factorSig = factor("RefKplusPi0", true, 2015, -1 ); factorsSigVec.push_back(factorSig); factorSig = factor("RefKplusPi0", false, 2016, -1 ); factorsSigVec.push_back(factorSig); factorSig = factor("RefKplusPi0", true, 2016, -1 ); factorsSigVec.push_back(factorSig); } return oneChannelFactors(factorsSigVec); } string HistName(string channel, int year, bool MagUp, bool preselected, bool TM){ if (preselected) return channel + "_KGammaGammaMuMu_mass_after_preselection_" + (TM ? "TM_" : "") + to_string(year) + (MagUp ? "MagUp" : "MagDown"); else return channel + "_KGammaGammaMuMu_mass_before_preselection_" + (TM ? "TM_" : "") + to_string(year) + (MagUp ? "MagUp" : "MagDown"); } void designCanvas(TCanvas* canvas){ canvas->SetRightMargin(0.04); canvas->SetTopMargin(0.04); canvas->SetLeftMargin(0.12); canvas->SetBottomMargin(0.12); return; } void designPlots(TH1F *hist, int color){ hist->SetLineWidth(2); hist->SetLineColor(color); hist->GetYaxis()->SetTitleOffset(1.7); hist->GetXaxis()->SetTitleOffset(1.0); hist->SetTitle(""); } //the function to loop over all events and merge them into one file; apply cut-based selection while merging int PlotMasses(int Run =1, bool RefChan=true, bool TruthMatched = false, bool Stripped = false) { if (!Kst2Kpluspi0Resolved){ cout << "Only applicable for KplusPi0 channel! Fix GlobalFunctions.hh" << endl; return 0; } if (Stripped && TruthMatched){ cout << "[ERROR]\t Stripped data cannot be truthmatched, setting TruthMatched to false" << endl; TruthMatched = false; } TFile *tmpFile = 0; // TFile *outputFile = new TFile(Form("%s/data/MC/tmp%s.root",path_to_output_KplusPizero.c_str(), (smallSample ? "_small":"")),"RECREATE"); TFile *outputFile = new TFile(Form("%s/data/MC/pi0Resolved_background_histos%s.root",path_to_output_KplusPizero.c_str(), (smallSample ? "_small":"")),"RECREATE"); //std::vector StrippedMasses; //std::vector PreselectedMasses; TH1F *tmp = new TH1F("tmp" , "tmp", 100, cut_B_plus_M_low, cut_B_plus_M_high); //tmp variables string decay = ""; string year_str = ""; //Data allFactors ChannelFactors = allFactors(Run, RefChan); //the boolean is just to differentiate it form the defaul constructor factor fac = factor(); oneChannelFactors SigFac = SignalFactors(Run); oneChannelFactors SigRefFac = SignalRefFactors(Run); Double_t scaling_factor = 0.0; TTree * treeMC, *treeMCold; //if (TruthMatched) treeMC = new TTree("DecayTreeTruthMatched"); //else treeMC = new TTree("DecayTree"); TCanvas* CanvasPreselectedVec[2][2]; //Create 8 canvases for each year and polarity TPaveText *legend[2][2]; //This would be so much nicer in python... gStyle->SetOptStat(0); for (int c = 0; c < 2; c++){ CanvasPreselectedVec[0][c] = new TCanvas(Form("cPD%i", (Run==1) ? 2011+c : 2015+c), "", 10,10,600,600); CanvasPreselectedVec[1][c] = new TCanvas(Form("cPU%i",(Run==1) ? 2011+c : 2015+c), "", 10,10,600,600); designCanvas(CanvasPreselectedVec[0][c]); designCanvas(CanvasPreselectedVec[1][c]); CanvasPreselectedVec[0][c]->SetName( Form("BkgPresel_%idown", (Run==1) ? 2011+c : 2015+c) ); CanvasPreselectedVec[1][c]->SetName( Form("BkgPresel_%iup", (Run==1) ? 2011+c : 2015+c) ); legend[0][c] =new TPaveText ( 0.68 , ( RefChan ? 0.7 : 0.8), 0.93, 0.93, "NDC"); legend[0][c]->SetFillColor(kWhite); legend[1][c] =new TPaveText ( 0.68 , ( RefChan ? 0.7 : 0.8), 0.93, 0.93, "NDC"); legend[1][c]->SetFillColor(kWhite); } //I'm pretty sure there is a nicer way to do that, but 9 mod year-2009 gets 1,0,3,2 oneChannelFactors facIter; //for (auto i : ChannelFactors.factorsChannelVec){ //Loop over decay channels for (int ch = 0; ch < ChannelFactors.NoChannels; ch++){ //Loop over decay channels: better to have a number for colors and saving the histograms facIter = ChannelFactors.factorsChannelVec.at(ch); decay = facIter.Channel; cout << decay << endl; //cout << ChannelFactors.NoChannels << endl; for (int pos = 0; pos < facIter.VecSize; pos++ ){ //Loop over years and polarities in given decay channel //get the mass histograms fac = facIter.factorsVec.at(pos); year_str = to_string(fac.year); if (fac.nEvents == -1) continue; if (TruthMatched){ tmpFile = new TFile(Form("%s/data/MC/%s/%s%s/%s%s_pi0Resolved%s.root",path_to_output_KplusPizero.c_str(), fac.Channel.c_str(), year_str.c_str(), fac.MagUp ? "up" : "down", year_str.c_str(),fac.MagUp ? "up" : "down",(smallSample ? "_small":""))); if (TruthMatched) treeMCold = (TTree *)tmpFile->Get("DecayTreeTruthMatched"); else treeMCold = (TTree *)tmpFile->Get("DecayTree"); treeMCold->SetBranchStatus("*",0); treeMCold->SetBranchStatus("B_plus_DTF_M",1); outputFile->cd(); treeMC = treeMCold->CloneTree(); treeMC->Draw(Form("B_plus_DTF_M>>tmp%i",pos), Form("B_plus_DTF_M>%f && B_plus_DTF_M<%f", cut_B_plus_M_low, cut_B_plus_M_high) ); tmp = (TH1F *)gDirectory->Get(Form("tmp%i",pos)); } else{ tmpFile = new TFile(Form("%s/data/MC/%s/%s%s/%s%s_pi0Resolved_histos%s.root",path_to_output_KplusPizero.c_str(), fac.Channel.c_str(), year_str.c_str(), fac.MagUp ? "up" : "down", year_str.c_str(),fac.MagUp ? "up" : "down",(smallSample ? "_small":"")),"READ"); if (Stripped) tmp = (TH1F *) tmpFile->Get("h_KGammaGammaMuMu_mass_before_preselection")->Clone(); else tmp = (TH1F *) tmpFile->Get("h_KGammaGammaMuMu_mass_after_preselection")->Clone(); } //Calcualte the needed scale if (RefChan) scaling_factor = double((SigRefFac.factorsVec.at(pos)).nEvents)/double(fac.nEvents); else scaling_factor = double((SigFac.factorsVec.at(pos)).nEvents)/double(fac.nEvents); scaling_factor = scaling_factor*fac.OtherScale; cout << fac.year << (fac.MagUp ? "up " : "down") << "\t Scaling factor: " << scaling_factor << endl; tmp->Scale(scaling_factor); cout << "\t\tIntegral: " << tmp->Integral() << endl; //Save the scaled histograms outputFile->cd(); tmp ->SetName(HistName(fac.Channel,fac.year,fac.MagUp,0,TruthMatched).c_str()); tmp ->SetTitle(HistName(fac.Channel,fac.year,fac.MagUp,0,TruthMatched).c_str()); designPlots(tmp,ch+1); tmp->Write(HistName(fac.Channel,fac.year,fac.MagUp,0,TruthMatched).c_str()); CanvasPreselectedVec[int(fac.MagUp)][fac.year-((Run==1) ? 2011 : 2015)]->cd(); //boolean is dangerous there but f* it legend[int(fac.MagUp)][fac.year-((Run==1) ? 2011 : 2015)]->AddText(decay.c_str()); ((TText*)legend[int(fac.MagUp)][fac.year-((Run==1) ? 2011 : 2015)]->GetListOfLines()->Last())->SetTextColor(ch+1); if ( fac.Channel == "KplusPi0" || fac.Channel == "RefKplusPi0" ){ tmp->DrawCopy(); } else{ tmp->DrawCopy("same"); } CanvasPreselectedVec[int(fac.MagUp)][fac.year-((Run==1) ? 2011 : 2015)]->Modified(); CanvasPreselectedVec[int(fac.MagUp)][fac.year-((Run==1) ? 2011 : 2015)]->Update(); //CanvasPreselectedVec[int(fac.MagUp)][fac.year-((Run==1) ? 2011 : 2015)]->Write(); tmpFile->Close(); } } cout << "Drawing legend " << endl; //Draw legends for (int c = 0; c < 2; c++){ CanvasPreselectedVec[0][c]->cd(); legend[0][c]->Draw(); CanvasPreselectedVec[1][c]->cd(); legend[1][c]->Draw(); } cout << "Saving histos " << endl; for (int c = 0; c < 2; c++){ CanvasPreselectedVec[0][c]->SaveAs( Form("%s/data/MC/BackgroundComparisons/BkgSamples_%s_%idown%s%s.pdf",path_to_output_KplusPizero.c_str(), (Stripped ? "Stripped" : "Preselected"), (Run==1) ? 2011+c : 2015+c, RefChan ? "_Ref" : "", TruthMatched ? "_TM" : "") ,"jpg"); CanvasPreselectedVec[1][c]->SaveAs( Form("%s/data/MC/BackgroundComparisons/BkgSamples_%s_%iup%s%s.pdf", path_to_output_KplusPizero.c_str(), (Stripped ? "Stripped" : "Preselected"), (Run==1) ? 2011+c : 2015+c, RefChan ? "_Ref" : "", TruthMatched ? "_TM" : "") ,"jpg"); } CanvasPreselectedVec[int(fac.MagUp)][fac.year-((Run==1) ? 2011 : 2015)]->Write(); outputFile->Close(); return 1; } int PlotAllMasses(){ if (PlotMasses(1,0,0,0) == 0) return 0; if (PlotMasses(1,0,0,1) == 0) return 0; if (PlotMasses(1,1,0,0) == 0) return 0; if (PlotMasses(1,1,0,1) == 0) return 0; if (PlotMasses(2,0,0,0) == 0) return 0; if (PlotMasses(2,0,0,1) == 0) return 0; return 1; }