#include "../GlobalFunctions.hh" ////////////////////////////////////////////////////////////////////// /// QuickChecker() /// /// Epicly flexible tool to quickly create basic plots for checking various features. /// /// All definitions happen in the AllBranches constructor, where used branches are defined. /// Cuts are also defined in the constructor, the strings are transferred to CopyTree. /// EpicOptimizer() doesn't need to be touched at all. /// /// /// Options to create either standalone years plots (Run==0), /// plots per Run (Run==1 || Run ==2) or both runs combined (Run==12) /// /// Possibility to run on stripped/preselected data/MC/PHSP/Ref. /// In the case of MC also possibility to run only on TruthMatched data. /// /// TODO: should add an option tfor sweighted and BDT-cutted data /// /// Standard output in data/MC/PHSP/Ref folder, year/run and preselection option in the name. /// /// Disclaimer: Probably leaky and not super-safe to you, so proceed with caution. /// /// /*******************************/ class Int_branch{ public: int BranchVar; //where to save the branch const char* BranchName; //Name of the branch Int_branch(); //default constructor Int_branch(int var, const char* name); //default constructor ~Int_branch(); //destuctor }; Int_branch::Int_branch(int var, const char* name){ //here add what branches you wanna load BranchVar = var; BranchName = name; } /*******************************/ class Float_branch{ public: float BranchVar; //where to save the branch const char* BranchName; //Name of the branch Float_branch(); //default constructor ~Float_branch(); //destuctor Float_branch(float var, const char* name); //constructor }; Float_branch::Float_branch(float var, const char* name){ //here add what branches you wanna load BranchVar = var; BranchName = name; } /*******************************/ class Float_arr_branch{ public: float *BranchVar; //where to save the branch const char* BranchName; //Name of the branch Float_arr_branch(); //default constructor Float_arr_branch(float *var, const char* name); //constructor ~Float_arr_branch(); //destuctor }; Float_arr_branch::Float_arr_branch(float *var, const char* name){ //here add what branches you wanna load BranchVar = var; BranchName = name; } /*******************************/ class Double_branch{ public: double BranchVar; //where to save the branch const char* BranchName; //Name of the branch Double_branch(); //default constructor Double_branch(double var, const char* name); //constructor ~Double_branch(); //destuctor }; Double_branch::Double_branch(double var, const char* name){ //here add what branches you wanna load BranchVar = var; BranchName = name; } /*******************************/ class Double_arr_branch{ public: double *BranchVar; //where to save the branch const char* BranchName; //Name of the branch Double_arr_branch(); //default constructor Double_arr_branch(double *var, const char* name); //constructor ~Double_arr_branch(); //destuctor }; Double_arr_branch::Double_arr_branch(double *var, const char* name){ //here add what branches you wanna load BranchVar = var; BranchName = name; } /*******************************/ class AllBranches{ public: vector IntBranches; vector FloatBranches; vector FloatArrBranches; vector DoubleBranches; vector DoubleArrBranches; vector Cuts; AllBranches(); //default constructor ~AllBranches(); //destuctor }; AllBranches::AllBranches(){ //here add what branches you wanna load // int I_nTracks = 0; // IntBranches.push_back(new Int_branch(I_nTracks, "nTracks")); /* double D_K_star_plus_PT = 0.0; DoubleBranches.push_back(new Double_branch(D_K_star_plus_PT, "K_star_plus_PT")); Cuts.push_back("K_star_plus_PT > 1300"); //Cuts.push_back("K_star_plus_PT < 300"); */ double D_B_plus_ThetaL = 0.0; DoubleBranches.push_back(new Double_branch(D_B_plus_ThetaL, "B_plus_ThetaL")); double D_B_plus_ThetaK = 0.0; DoubleBranches.push_back(new Double_branch(D_B_plus_ThetaK, "B_plus_ThetaK")); double D_B_plus_Phi = 0.0; DoubleBranches.push_back(new Double_branch(D_B_plus_Phi, "B_plus_Phi")); double D_B_plus_TRUEThetaL = 0.0; DoubleBranches.push_back(new Double_branch(D_B_plus_TRUEThetaL, "B_plus_TRUEThetaL")); double D_B_plus_TRUEThetaK = 0.0; DoubleBranches.push_back(new Double_branch(D_B_plus_TRUEThetaK, "B_plus_TRUEThetaK")); double D_B_plus_TRUEPhi = 0.0; DoubleBranches.push_back(new Double_branch(D_B_plus_TRUEPhi, "B_plus_TRUEPhi")); double D_B_plus_M = 0.0; DoubleBranches.push_back(new Double_branch(D_B_plus_M, "B_plus_M")); Cuts.push_back("B_plus_M < 600000000"); /* double D_B_plus_M = 0.0; DoubleBranches.push_back(new Double_branch(D_B_plus_M, "B_plus_M")); Cuts.push_back("B_plus_M > 5000"); Cuts.push_back("B_plus_M < 6000"); float K_star_plus_M = 0; DoubleBranches.push_back(new Double_branch(K_star_plus_M,"K_star_plus_M")); Cuts.push_back("K_star_plus_M > 792"); Cuts.push_back("K_star_plus_M <1050"); double D_K_plus_PT = 0.0; DoubleBranches.push_back(new Double_branch(D_K_plus_PT, "K_plus_PT")); Cuts.push_back("K_plus_PT > 300"); double D_B_plus_PT = 0.0; DoubleBranches.push_back(new Double_branch(D_B_plus_PT, "B_plus_PT")); Cuts.push_back("B_plus_PT > 2000"); double K_star_plus_FDCHI2_OWNPV = 0.0; DoubleBranches.push_back(new Double_branch(K_star_plus_FDCHI2_OWNPV, "K_star_plus_FDCHI2_OWNPV")); Cuts.push_back("K_star_plus_FDCHI2_OWNPV > -100000"); double B_plus_FDCHI2_OWNPV = 0.0; DoubleBranches.push_back(new Double_branch(B_plus_FDCHI2_OWNPV, "B_plus_FDCHI2_OWNPV")); Cuts.push_back("B_plus_FDCHI2_OWNPV > 121"); double K_star_plus_FDCHI2_OWNPV = 0.0; DoubleBranches.push_back(new Double_branch(K_star_plus_FDCHI2_OWNPV, "K_star_plus_FDCHI2_OWNPV")); Cuts.push_back("K_star_plus_FDCHI2_OWNPV > -100000"); int B_plus_Hlt2Topo3BodyBBDTDecision_TOS = 0.0; int B_plus_Hlt2TopoMu2BodyBBDTDecision_TOS = 0.0; int B_plus_Hlt2TopoMu3BodyBBDTDecision_TOS = 0.0; int B_plus_Hlt2TopoMuMu2BodyBBDTDecision_TOS = 0.0; int B_plus_Hlt2TopoMuMu3BodyBBDTDecision_TOS = 0.0; double D_pi_zero_resolved_TRUEP_X = 0.0; DoubleBranches.push_back(new Double_branch(D_pi_zero_resolved_TRUEP_X, "pi_zero_resolved_TRUEP_X")); Cuts.push_back("pi_zero_resolved_TRUEP_X > -100000"); double D_pi_zero_resolved_TRUEP_Y = 0.0; DoubleBranches.push_back(new Double_branch(D_pi_zero_resolved_TRUEP_Y, "pi_zero_resolved_TRUEP_Y")); Cuts.push_back("pi_zero_resolved_TRUEP_Y > -100000"); double D_pi_zero_resolved_TRUEP_Z = 0.0; DoubleBranches.push_back(new Double_branch(D_pi_zero_resolved_TRUEP_Z, "pi_zero_resolved_TRUEP_Z")); Cuts.push_back("pi_zero_resolved_TRUEP_Z > -100000"); double D_pi_zero_resolved_ETA = 0.0; DoubleBranches.push_back(new Double_branch(D_pi_zero_resolved_ETA, "pi_zero_resolved_ETA")); Cuts.push_back("pi_zero_resolved_ETA > -100000"); double D_pi_zero_resolved_PX = 0.0; DoubleBranches.push_back(new Double_branch(D_pi_zero_resolved_PX, "pi_zero_resolved_PX")); Cuts.push_back("pi_zero_resolved_PX > -100000"); double D_pi_zero_resolved_PY = 0.0; DoubleBranches.push_back(new Double_branch(D_pi_zero_resolved_PY, "pi_zero_resolved_PY")); Cuts.push_back("pi_zero_resolved_PY > -100000"); double D_pi_zero_resolved_PZ = 0.0; DoubleBranches.push_back(new Double_branch(D_pi_zero_resolved_PZ, "pi_zero_resolved_PZ")); Cuts.push_back("pi_zero_resolved_PZ> -100000"); double D_K_star_plus_M_DTF = 0.0; DoubleBranches.push_back(new Double_branch(D_K_star_plus_M_DTF, "K_star_plus_M_DTF")); Cuts.push_back("K_star_plus_M_DTF > 792"); Cuts.push_back("K_star_plus_M_DTF <1050"); */ /* float K_star_plus_M = 0; DoubleBranches.push_back(new Double_branch(K_star_plus_M,"K_star_plus_M")); Cuts.push_back("K_star_plus_M > 792"); Cuts.push_back("K_star_plus_M <1050"); */ /* float F_B_plus_DTF_Kst_892_plus_M[20]; FloatArrBranches.push_back(new Float_arr_branch(F_B_plus_DTF_Kst_892_plus_M,"B_plus_DTF_Kst_892_plus_M")); Cuts.push_back("B_plus_DTF_Kst_892_plus_M[0] > 792"); Cuts.push_back("B_plus_DTF_Kst_892_plus_M[0] <1050"); */ //truthmatching //assign variables to TRUEID /* int B_plus_TRUEID= 0;; IntBranches.push_back(new Int_branch(B_plus_TRUEID, "B_plus_TRUEID")); Cuts.push_back("abs(B_plus_TRUEID) == " + to_string(TRUEID.B_PLUS)); int K_star_plus_TRUEID= 0; IntBranches.push_back(new Int_branch(K_star_plus_TRUEID, "K_star_plus_TRUEID")); Cuts.push_back("abs(K_star_plus_TRUEID) == " + to_string(TRUEID.K_STAR_PLUS)); int K_plus_TRUEID= 0; IntBranches.push_back(new Int_branch(K_plus_TRUEID, "K_plus_TRUEID")); Cuts.push_back("abs(K_plus_TRUEID) == " + to_string(TRUEID.K_PLUS)); int pi_zero_TRUEID= 0; IntBranches.push_back(new Int_branch(pi_zero_TRUEID, "pi_zero_resolved_TRUEID")); Cuts.push_back("abs(pi_zero_resolved_TRUEID) == " + to_string(TRUEID.PI_ZERO)); int gamma1_TRUEID= 0; IntBranches.push_back(new Int_branch(gamma1_TRUEID, "gamma1_TRUEID")); Cuts.push_back("abs(gamma1_TRUEID) == " + to_string(TRUEID.GAMMA)); int gamma2_TRUEID= 0; IntBranches.push_back(new Int_branch(gamma2_TRUEID, "gamma2_TRUEID")); Cuts.push_back("abs(gamma2_TRUEID) == " + to_string(TRUEID.GAMMA)); //assign variables to TRUE_MOTHER_ID int K_star_plus_MOTHER_ID= 0; IntBranches.push_back(new Int_branch(K_star_plus_MOTHER_ID, "K_star_plus_MC_MOTHER_ID")); Cuts.push_back("abs(K_star_plus_MC_MOTHER_ID) == " + to_string(TRUEID.B_PLUS)); int K_plus_MOTHER_ID= 0; IntBranches.push_back(new Int_branch(K_plus_MOTHER_ID, "K_plus_MC_MOTHER_ID")); Cuts.push_back("abs(K_plus_MC_MOTHER_ID) == " + to_string(TRUEID.K_STAR_PLUS)); int pi_zero_MOTHER_ID= 0; IntBranches.push_back(new Int_branch(pi_zero_MOTHER_ID, "pi_zero_resolved_MC_MOTHER_ID")); Cuts.push_back("abs(pi_zero_resolved_MC_MOTHER_ID) == " + to_string(TRUEID.K_STAR_PLUS)); int gamma1_MOTHER_ID= 0; IntBranches.push_back(new Int_branch(gamma1_MOTHER_ID, "gamma1_MC_MOTHER_ID")); Cuts.push_back("abs(gamma1_MC_MOTHER_ID) == " + to_string(TRUEID.PI_ZERO)); int gamma2_MOTHER_ID= 0; IntBranches.push_back(new Int_branch(gamma2_MOTHER_ID, "gamma2_MC_MOTHER_ID")); Cuts.push_back("abs(gamma2_MC_MOTHER_ID) == " + to_string(TRUEID.PI_ZERO)); //assign variables to TRUE_GD_MOTHER_ID int K_plus_GD_MOTHER_ID= 0; IntBranches.push_back(new Int_branch(K_plus_GD_MOTHER_ID, "K_plus_MC_GD_MOTHER_ID")); Cuts.push_back("abs(K_plus_MC_GD_MOTHER_ID) == " + to_string(TRUEID.B_PLUS)); int pi_zero_GD_MOTHER_ID= 0; IntBranches.push_back(new Int_branch(pi_zero_GD_MOTHER_ID, "pi_zero_resolved_MC_GD_MOTHER_ID")); Cuts.push_back("abs(pi_zero_resolved_MC_GD_MOTHER_ID) == " + to_string(TRUEID.B_PLUS)); int gamma1_GD_MOTHER_ID= 0; IntBranches.push_back(new Int_branch(gamma1_GD_MOTHER_ID, "gamma1_MC_GD_MOTHER_ID")); Cuts.push_back("abs(gamma1_MC_GD_MOTHER_ID) == " + to_string(TRUEID.K_STAR_PLUS)); int gamma2_GD_MOTHER_ID= 0; IntBranches.push_back(new Int_branch(gamma2_GD_MOTHER_ID, "gamma2_MC_GD_MOTHER_ID")); Cuts.push_back("abs(gamma2_MC_GD_MOTHER_ID) == " + to_string(TRUEID.K_STAR_PLUS)); //assign variables to TRUE_GD_MOTHER_ID int gamma1_GD_GD_MOTHER_ID= 0; IntBranches.push_back(new Int_branch(gamma1_GD_GD_MOTHER_ID, "gamma1_MC_GD_GD_MOTHER_ID")); Cuts.push_back("abs(gamma1_MC_GD_GD_MOTHER_ID) == " + to_string(TRUEID.B_PLUS)); int gamma2_GD_GD_MOTHER_ID= 0; IntBranches.push_back(new Int_branch(gamma2_GD_GD_MOTHER_ID, "gamma2_MC_GD_GD_MOTHER_ID")); Cuts.push_back("abs(gamma2_MC_GD_GD_MOTHER_ID) == " + to_string(TRUEID.B_PLUS)); */ } int EpicOptimizer(std::string year = "2012", std::string magnet = "down", int Run = 0, bool MC = false, bool ReferenceChannel = false, bool PHSP = false, bool preselected = true, bool truthMatched = false) { int MaxEntries = 1000000; //specify year(s) std::vector years; if (!(Run == 0 || Run == 1 || Run == 2 || Run == 12)){ cout << "[INFO]\t\tWrong run number, allowed options are 0 ,1, 2 or 12!" << endl; cout << "[INFO]\t\tUsing Run = 0, meaning year " << year << endl; Run = 0; } switch (Run){ case (0): { years.push_back(year); break; } case (1): { years.push_back("2011"); years.push_back("2012"); break; } case (2): { years.push_back("2015"); years.push_back("2016"); break; } case (12): { years.push_back("2011"); years.push_back("2012"); years.push_back("2015"); years.push_back("2016"); break; } } if(ReferenceChannel && PHSP){ std::cout << "[WARNING]\tCannot set boolean of reference channel and phase-space MC at the same time! Process Reference Channel!" << std::endl; PHSP = false; } TFile* output = 0; TChain* tree = 0; if (!preselected){ if(Kst2Kpluspi0Resolved) tree=new TChain("b2KstKpi0mumuResolvedTuple/DecayTree"); if(Kst2Kpluspi0Merged) tree=new TChain("b2KstKpi0mumuMergeddTuple/DecayTree"); if(Kst2Kspiplus) tree=new TChain("b2KstKs0pimumu_Tuple/DecayTree"); } else{ if ((MC||ReferenceChannel||PHSP) && truthMatched) tree=new TChain("DecayTreeTruthMatched"); else tree=new TChain("DecayTree"); } for (std::vector::iterator y = years.begin(); y != years.end(); ++y){ //load data for given years if (!preselected){ //load stripped data //Kst2Kpluspi0Resolved case if(Kst2Kpluspi0Resolved){ if(!MC){ if(smallSample) tree->Add(Form("%s/data/%s%s/*B2Kstmumu*13.root",path_to_data.c_str(), y->c_str(),magnet.c_str())); else{ tree->Add(Form("%s/data/%s%s/*.root",path_to_data.c_str(), y->c_str(),magnet.c_str())); std::cout << "Adding " << Form("%s/data/%s%s/*B2Kstmumu*.root",path_to_data.c_str(), y->c_str(),magnet.c_str()) << endl; } } else{ if(ReferenceChannel){ if(smallSample) tree->Add(Form("%s/data/MC/RefKplusPi0/%s%s/*B2KstJpsi*1.root",path_to_data.c_str(), y->c_str(),magnet.c_str())); else tree->Add(Form("%s/data/MC/RefKplusPi0/%s%s/*B2KstJpsi*.root",path_to_data.c_str(), y->c_str(),magnet.c_str())); } else if(PHSP){ if(smallSample) tree->Add(Form("%s/data/PHSP/KplusPi0/%s%s/*B2Kstmumu*1.root",path_to_data.c_str(), y->c_str(),magnet.c_str())); else tree->Add(Form("%s/data/PHSP/KplusPi0/%s%s/*B2Kstmumu*.root",path_to_data.c_str(), y->c_str(),magnet.c_str())); } else{ if(smallSample) tree->Add(Form("%s/data/MC/KplusPi0/%s%s/*B2Kstmumu*1.root",path_to_data.c_str(), y->c_str(),magnet.c_str())); else tree->Add(Form("%s/data/MC/KplusPi0/%s%s/*B2Kstmumu*.root",path_to_data.c_str(), y->c_str(),magnet.c_str())); } } } //Kst2Kpluspi0Merged case if(Kst2Kpluspi0Merged){ if(!MC){ if(smallSample) tree->Add(Form("%s/data/%s%s/*B2Kstmumu*13.root",path_to_data.c_str(), y->c_str(),magnet.c_str())); else tree->Add(Form("%s/data/%s%s/*B2Kstmumu*.root",path_to_data.c_str(), y->c_str(),magnet.c_str())); } else{ if(smallSample) tree->Add(Form("%s/data/MC/KplusPi0/%s%s/*B2Kstmumu*1.root",path_to_data.c_str(), y->c_str(),magnet.c_str())); else tree->Add(Form("%s/data/MC/KplusPi0/%s%s/*B2Kstmumu*.root",path_to_data.c_str(), y->c_str(),magnet.c_str())); } } //Kst2Kspiplus case if(Kst2Kspiplus){ tree=new TChain("b2KstKs0pimumu_Tuple/DecayTree"); if(!MC){ if(smallSample) tree->Add(Form("%s/data/%s%s/*B2Kstmumu*23.root",path_to_data.c_str(), y->c_str(),magnet.c_str())); else tree->Add(Form("%s/data/%s%s/*B2Kstmumu*.root",path_to_data.c_str(), y->c_str(),magnet.c_str())); } else{ if(ReferenceChannel){ if(smallSample) tree->Add(Form("%s/data/MC/RefKshortPiplus/%s%s/*B2KstJpsi*13.root",path_to_data.c_str(), y->c_str(),magnet.c_str())); else tree->Add(Form("%s/data/MC/RefKshortPiplus/%s%s/*B2KstJpsi*.root",path_to_data.c_str(), y->c_str(),magnet.c_str())); } else if(PHSP){ if(smallSample) tree->Add(Form("%s/data/PHSP/KshortPiplus/%s%s/*B2Kstmumu*1.root",path_to_data.c_str(), y->c_str(),magnet.c_str())); else tree->Add(Form("%s/data/PHSP/KshortPiplus/%s%s/*B2Kstmumu*.root",path_to_data.c_str(), y->c_str(),magnet.c_str())); } else{ if(smallSample) tree->Add(Form("%s/data/MC/KshortPiplus/%s%s/*B2Kstmumu*1.root",path_to_data.c_str(), y->c_str(),magnet.c_str())); else tree->Add(Form("%s/data/MC/KshortPiplus/%s%s/*B2Kstmumu*.root",path_to_data.c_str(), y->c_str(),magnet.c_str())); } } } } else{ //load preselected data // Kst2Kpluspi0Resolved case if(Kst2Kpluspi0Resolved){ if(!MC){ tree->Add(Form("%s/data/%s%s/%s%s_pi0Resolved.root",path_to_output_KplusPizero.c_str(), y->c_str(),magnet.c_str(), y->c_str(),magnet.c_str())); cout << Form("%s/data/%s%s/%s%s_pi0Resolved.root",path_to_output_KplusPizero.c_str(), y->c_str(),magnet.c_str(), y->c_str(),magnet.c_str()) << endl; } else{ if(ReferenceChannel){ tree->Add(Form("%s/data/MC/RefKplusPi0/%s%s/%s%s_pi0Resolved.root",path_to_output_KplusPizero.c_str(), y->c_str(),magnet.c_str(), y->c_str(),magnet.c_str())); } else if (PHSP){ tree->Add(Form("%s/data/PHSP/KplusPi0/%s%s/%s%s_pi0Resolved.root",path_to_output_KplusPizero.c_str(), y->c_str(),magnet.c_str(), y->c_str(),magnet.c_str())); } else{ tree->Add(Form("%s/data/MC/KplusPi0/%s%s/%s%s_pi0Resolved.root",path_to_output_KplusPizero.c_str(), y->c_str(),magnet.c_str(), y->c_str(),magnet.c_str())); cout << Form("%s/data/MC/KplusPi0/%s%s/%s%s_pi0Resolved.root",path_to_output_KplusPizero.c_str(), y->c_str(),magnet.c_str(), y->c_str(),magnet.c_str()) << endl; } } } // Kst2Kpluspi0Merged case if(Kst2Kpluspi0Merged){ if(!MC){ tree->Add(Form("%s/data/%s%s/%s%s_pi0Merged.root",path_to_output_KplusPizero.c_str(), y->c_str(),magnet.c_str(), y->c_str(),magnet.c_str())); } else{ if(ReferenceChannel){ tree->Add(Form("%s/data/MC/RefKplusPi0/%s%s/%s%s_pi0Merged.root",path_to_output_KplusPizero.c_str(), y->c_str(),magnet.c_str(), y->c_str(),magnet.c_str())); } else if (PHSP){ tree->Add(Form("%s/data/PHSP/KplusPi0/%s%s/%s%s_pi0Merged.root",path_to_output_KplusPizero.c_str(), y->c_str(),magnet.c_str(), y->c_str(),magnet.c_str())); } else{ tree->Add(Form("%s/data/MC/KplusPi0/%s%s/%s%s_pi0Merged.root",path_to_output_KplusPizero.c_str(), y->c_str(),magnet.c_str(), y->c_str(),magnet.c_str())); } } } // Kst2Kspiplus case if(Kst2Kspiplus){ if (!MC){ tree->Add(Form("%s/data/%s%s/%s%s_piplus.root",path_to_output_KshortPiplus.c_str(), y->c_str(),magnet.c_str(), y->c_str(),magnet.c_str())); } else{ if(ReferenceChannel){ tree->Add(Form("%s/data/MC/RefKshortPiplus/%s%s/%s%s_piplus.root",path_to_output_KshortPiplus.c_str(), y->c_str(),magnet.c_str(), y->c_str(),magnet.c_str())); } else if (PHSP){ tree->Add(Form("%s/data/PHSP/KshortPiplus/%s%s/%s%s_piplus.root",path_to_output_KplusPizero.c_str(), y->c_str(),magnet.c_str(), y->c_str(),magnet.c_str())); } else{ tree->Add(Form("%s/data/MC/KshortPiplus/%s%s/%s%s_piplus.root",path_to_output_KshortPiplus.c_str(), y->c_str(),magnet.c_str(), y->c_str(),magnet.c_str())); } } } } //end of preselected data if } //end of the year loop // set branches here tree->SetBranchStatus("*",0); cout << "[INFO]\tOld tree entries: " << tree->GetEntries() << endl; AllBranches * AllB = NULL; AllB = new AllBranches(); for (std::vector::iterator IB = AllB->IntBranches.begin(); IB != AllB->IntBranches.end(); ++IB){ tree->SetBranchStatus((*IB)->BranchName,1); tree->SetBranchAddress((*IB)->BranchName,&(*IB)->BranchVar); } for (std::vector::iterator FB = AllB->FloatBranches.begin(); FB != AllB->FloatBranches.end(); ++FB){ tree->SetBranchStatus((*FB)->BranchName,1); tree->SetBranchAddress((*FB)->BranchName,&(*FB)->BranchVar); } for (std::vector::iterator FaB = AllB->FloatArrBranches.begin(); FaB != AllB->FloatArrBranches.end(); ++FaB){ tree->SetBranchStatus((*FaB)->BranchName,1); tree->SetBranchAddress((*FaB)->BranchName,&(*FaB)->BranchVar); } for (std::vector::iterator DB = AllB->DoubleBranches.begin(); DB != AllB->DoubleBranches.end(); ++DB){ tree->SetBranchStatus((*DB)->BranchName,1); tree->SetBranchAddress((*DB)->BranchName,&(*DB)->BranchVar); } for (std::vector::iterator DaB = AllB->DoubleArrBranches.begin(); DaB != AllB->DoubleArrBranches.end(); ++DaB){ tree->SetBranchStatus((*DaB)->BranchName,1); tree->SetBranchAddress((*DaB)->BranchName,&(*DaB)->BranchVar); } //parse cuts std::string AllCuts = ""; if (AllB->Cuts.size()==0){ cout << "[ERROR]\t No cuts selected, just copying the tree." << endl; return 0; } AllCuts = AllCuts + *AllB->Cuts.begin(); cout << "[INFO]\t\t MaxEntries: " << MaxEntries << endl; cout << "[INFO]\t\t Appling cuts:" << endl; cout << "\t\t\t" << AllCuts << endl; for (vector::iterator t = AllB->Cuts.begin()+1; t != AllB->Cuts.end(); ++t){ AllCuts = AllCuts + " && " + *t ; cout << "\t\t\t" << *t << endl; } AllB->Cuts.clear(); TTree* NewTree = tree->CopyTree( AllCuts.c_str(),"",MaxEntries,0 ); cout << "[INFO]\tNew tree entries: " << NewTree->GetEntries() << endl; //Set the appropriate outputfile string path = ""; if (Run==0) Run = std::stoi( year ); // Kst2Kpluspi0Resolved case if(Kst2Kpluspi0Resolved){ path = path_to_output_KplusPizero + "/data/"; if(!MC){ path =path+ to_string(Run) + magnet + "_" +(preselected ? "preselected" : "") + "_quickcheck_pi0Resolved.root"; output = new TFile(path.c_str(),"RECREATE"); } else{ if(ReferenceChannel)path =path +"MC/RefKplusPi0"; else if (PHSP) path =path +"PHSP/KplusPi0/"; else path =path +"MC/KplusPi0/"; path =path + to_string(Run) + magnet +(preselected ? "_preselected" : "") + (truthMatched ? "_TruthMatched" : "") + "_quickcheck_pi0Resolved.root"; output = new TFile(path.c_str(),"RECREATE"); } } // Kst2Kpluspi0Merged case if(Kst2Kpluspi0Merged){ path = path_to_output_KplusPizero + "/data/"; if(!MC){ path =path+ to_string(Run) + magnet + "_" +(preselected ? "preselected" : "") + "_quickcheck_pi0Merged.root"; output = new TFile(path.c_str(),"RECREATE"); } else{ if(ReferenceChannel)path =path +"MC/RefKplusPi0"; else if (PHSP) path =path +"PHSP/KplusPi0/"; else path =path +"MC/KplusPi0/"; path =path + to_string(Run) + magnet +(preselected ? "_preselected" : "") + (truthMatched ? "_TruthMatched" : "") + "_quickcheck_pi0Merged.root"; output = new TFile(path.c_str(),"RECREATE"); } } // Kst2Kspiplus case //TODO: needs a check if(Kst2Kspiplus){ path = path_to_output_KshortPiplus + "/data/"; if(!MC){ path =path+ to_string(Run) + magnet + "_" +(preselected ? "preselected" : "") + "_quickcheck_piplus.root"; output = new TFile(path.c_str(),"RECREATE"); } else{ if(ReferenceChannel)path =path +"MC/RefKshortPiplus/"; else if (PHSP) path =path +"PHSP/KshortPiplus/"; else path =path +"MC/KshortPiplus/"; path =path + to_string(Run) + magnet +(preselected ? "_preselected" : "") + (truthMatched ? "_TruthMatched" : "") + "_quickcheck_piplus.root"; output = new TFile(path.c_str(),"RECREATE"); } } output->cd(); // Stupid arrays :) /* TCanvas *c1 = new TCanvas("c1", "", 10,10,800,800); c1->cd(); NewTree->Draw("B_plus_DTF_Kst_892_plus_M[0]"); output->cd(); c1->Write(); */ NewTree->Write(); output->Close(); cout << "[INFO]\t\t New tree created." << endl; return 1; } int EpicOptimizerDataSeparate(string magnet = "down", bool preselected=false) { if ( EpicOptimizer( "2011" ,magnet,0, false, false,false,preselected,false) == 0) return 0; if ( EpicOptimizer( "2012" ,magnet,0, false, false,false,preselected,false) == 0) return 0; if ( EpicOptimizer( "2015" ,magnet,0, false, false,false,preselected,false) == 0) return 0; if ( EpicOptimizer( "2016" ,magnet,0, false, false,false,preselected,false) == 0) return 0; return 1; } int EpicOptimizerAllDataSeparate(bool preselected) { if ( EpicOptimizerDataSeparate("down",preselected) == 0) return 0; if ( EpicOptimizerDataSeparate("up",preselected) == 0) return 0; return 1; } int EpicOptimizerMCSeparate(string magnet = "down", bool preselected=false, bool truthMatched=false) { if ( EpicOptimizer( "2011" ,magnet,0, true, false,false,preselected,truthMatched) == 0) return 0; if ( EpicOptimizer( "2012" ,magnet,0, true, false,false,preselected,truthMatched) == 0) return 0; if ( EpicOptimizer( "2015" ,magnet,0, true, false,false,preselected,truthMatched) == 0) return 0; if ( EpicOptimizer( "2016" ,magnet,0, true, false,false,preselected,truthMatched) == 0) return 0; return 1; } int EpicOptimizerAllMCSeparate(bool preselected=false, bool truthMatched=false) { if ( EpicOptimizerMCSeparate("down",preselected, truthMatched) == 0) return 0; if ( EpicOptimizerMCSeparate("up", preselected, truthMatched) == 0) return 0; return 1; } int EpicOptimizerRefSeparate(string magnet = "down", bool preselected=false, bool truthMatched=false) { if ( EpicOptimizer( "2011" ,magnet,0, true, true,false,preselected,truthMatched) == 0) return 0; if ( EpicOptimizer( "2012" ,magnet,0, true, true,false,preselected,truthMatched) == 0) return 0; if ( EpicOptimizer( "2015" ,magnet,0, true, true,false,preselected,truthMatched) == 0) return 0; if ( EpicOptimizer( "2016" ,magnet,0, true, true,false,preselected,truthMatched) == 0) return 0; return 1; } int EpicOptimizerAllRefSeparate(bool preselected=false, bool truthMatched=false) { if ( EpicOptimizerRefSeparate("down",preselected, truthMatched) == 0) return 0; if ( EpicOptimizerRefSeparate("up", preselected, truthMatched) == 0) return 0; return 1; } int EpicOptimizerPHSPSeparate(string magnet = "down", bool preselected=false, bool truthMatched=false) { if ( EpicOptimizer( "2011" ,magnet,0, true, false,true,preselected,truthMatched) == 0) return 0; if ( EpicOptimizer( "2012" ,magnet,0, true, false,true,preselected,truthMatched) == 0) return 0; if ( EpicOptimizer( "2015" ,magnet,0, true, false,true,preselected,truthMatched) == 0) return 0; if ( EpicOptimizer( "2016" ,magnet,0, true, false,true,preselected,truthMatched) == 0) return 0; return 1; } int EpicOptimizerAllPHSPSeparate(bool preselected=false, bool truthMatched=false) { if ( EpicOptimizerPHSPSeparate("down",preselected, truthMatched) == 0) return 0; if ( EpicOptimizerPHSPSeparate("up", preselected, truthMatched) == 0) return 0; return 1; }