#include "../GlobalFunctions.hh" ////////////////////////////////////////////////////////////////////// /// OptimizePreSelection() /// loops over all .root-files created by Preselection() defined in BDTSelection.cc. /// More kinematic, PID and some more cuts are applied and saved in a new file. /// THStack *stack(vector histos){ THStack *tmp = new THStack("IncMC","IncMC"); for(unsigned int h = 0; h < histos.size(); h++){ histos.at(h)->SetFillColor(2+h); tmp->Add(histos.at(h)); } return tmp; } int plotIncSample(std::string year = "2012", std::string magnet = "down") { bool ReferenceChannel = true; TFile* input = 0; TFile* histos = 0; TTree *tree; // Kst2Kpluspi0Resolved case if(Kst2Kpluspi0Resolved){ input = TFile::Open(Form("%s/data/MC/BtoXJpsi/%s%s/%s%s_pi0Resolved%s.root",path_to_output_KplusPizero.c_str(), year.c_str(),magnet.c_str(),year.c_str(),magnet.c_str(),(smallSample ? "_small":"") )); histos = TFile::Open(Form("%s/data/MC/BtoXJpsi/%s%s/%s%s_pi0Resolved_histos%s.root",path_to_output_KplusPizero.c_str(), year.c_str(),magnet.c_str(),year.c_str(),magnet.c_str(),(smallSample ? "_small":"") )); } // Kst2Kpluspi0Merged case if(Kst2Kpluspi0Merged){ //TODO } // Kst2Kspiplus case if(Kst2Kspiplus){ //TODO } input->cd(); cout << "In input" << endl; tree = (TTree*)input->Get("DecayTree"); cout << "Tree has " << tree->GetEntries() << " entries" << endl; tree->SetBranchStatus("*",1); Double_t B_plus_M_DTF; //assign variables to TRUEID Int_t B_plus_TRUEID; Int_t K_star_plus_TRUEID; Int_t K_plus_TRUEID; Int_t K_short_TRUEID; Int_t Ks_pi_plus_TRUEID; Int_t Ks_pi_minus_TRUEID; Int_t pi_plus_TRUEID; Int_t pi_zero_TRUEID; Int_t mu_plus_TRUEID; Int_t mu_minus_TRUEID; Int_t J_psi_TRUEID; Int_t gamma1_TRUEID; Int_t gamma2_TRUEID; //assign variables to TRUE_MOTHER_ID Int_t B_plus_MOTHER_ID; Int_t K_star_plus_MOTHER_ID; Int_t K_plus_MOTHER_ID; Int_t K_short_MOTHER_ID; Int_t Ks_pi_plus_MOTHER_ID; Int_t Ks_pi_minus_MOTHER_ID; Int_t pi_plus_MOTHER_ID; Int_t pi_zero_MOTHER_ID; Int_t mu_plus_MOTHER_ID; Int_t mu_minus_MOTHER_ID; Int_t J_psi_MOTHER_ID; Int_t gamma1_MOTHER_ID; Int_t gamma2_MOTHER_ID; //assign variables to TRUE_GD_MOTHER_ID Int_t K_plus_GD_MOTHER_ID; Int_t K_plus_GD_GD_MOTHER_ID; Int_t K_short_GD_MOTHER_ID; Int_t Ks_pi_plus_GD_MOTHER_ID; Int_t Ks_pi_minus_GD_MOTHER_ID; Int_t pi_plus_GD_MOTHER_ID; Int_t pi_zero_GD_MOTHER_ID; Int_t mu_plus_GD_MOTHER_ID; Int_t mu_minus_GD_MOTHER_ID; Int_t gamma1_GD_MOTHER_ID; Int_t gamma2_GD_MOTHER_ID; //assign variables to TRUE_GD_MOTHER_ID Int_t Ks_pi_plus_GD_GD_MOTHER_ID; Int_t Ks_pi_minus_GD_GD_MOTHER_ID; Int_t gamma1_GD_GD_MOTHER_ID; Int_t gamma2_GD_GD_MOTHER_ID; Int_t pi_zero_merged_MC_GD_GD_MOTHER_ID; //link variables to branches tree -> SetBranchAddress( "B_plus_M_DTF" , &B_plus_M_DTF ); tree -> SetBranchAddress( "B_plus_TRUEID" , &B_plus_TRUEID ); tree -> SetBranchAddress( "K_star_plus_TRUEID" , &K_star_plus_TRUEID ); tree -> SetBranchAddress( "mu_plus_TRUEID" , &mu_plus_TRUEID ); tree -> SetBranchAddress( "mu_minus_TRUEID" , &mu_minus_TRUEID ); tree -> SetBranchAddress( "B_plus_MC_MOTHER_ID" , &B_plus_MOTHER_ID ); tree -> SetBranchAddress( "K_star_plus_MC_MOTHER_ID" , &K_star_plus_MOTHER_ID ); tree -> SetBranchAddress( "mu_plus_MC_MOTHER_ID" , &mu_plus_MOTHER_ID ); tree -> SetBranchAddress( "mu_minus_MC_MOTHER_ID" , &mu_minus_MOTHER_ID ); tree -> SetBranchAddress( "mu_plus_MC_GD_MOTHER_ID" , &mu_plus_GD_MOTHER_ID ); tree -> SetBranchAddress( "mu_minus_MC_GD_MOTHER_ID" , &mu_minus_GD_MOTHER_ID ); if(Kst2Kpluspi0Resolved){ tree -> SetBranchAddress( "K_plus_TRUEID" , &K_plus_TRUEID ); tree -> SetBranchAddress( "pi_zero_resolved_TRUEID" , &pi_zero_TRUEID ); tree -> SetBranchAddress( "gamma1_TRUEID" , &gamma1_TRUEID ); tree -> SetBranchAddress( "gamma2_TRUEID" , &gamma2_TRUEID ); tree -> SetBranchAddress( "K_plus_MC_MOTHER_ID" , &K_plus_MOTHER_ID ); tree -> SetBranchAddress( "pi_zero_resolved_MC_MOTHER_ID" , &pi_zero_MOTHER_ID ); tree -> SetBranchAddress( "gamma1_MC_MOTHER_ID" , &gamma1_MOTHER_ID ); tree -> SetBranchAddress( "gamma2_MC_MOTHER_ID" , &gamma2_MOTHER_ID ); tree -> SetBranchAddress( "K_plus_MC_GD_MOTHER_ID" , &K_plus_GD_MOTHER_ID ); tree -> SetBranchAddress( "K_plus_MC_GD_GD_MOTHER_ID" , &K_plus_GD_GD_MOTHER_ID ); tree -> SetBranchAddress( "pi_zero_resolved_MC_GD_MOTHER_ID" , &pi_zero_GD_MOTHER_ID ); tree -> SetBranchAddress( "gamma1_MC_GD_MOTHER_ID" , &gamma1_GD_MOTHER_ID ); tree -> SetBranchAddress( "gamma2_MC_GD_MOTHER_ID" , &gamma2_GD_MOTHER_ID ); tree -> SetBranchAddress( "gamma1_MC_GD_GD_MOTHER_ID" , &gamma1_GD_GD_MOTHER_ID ); tree -> SetBranchAddress( "gamma2_MC_GD_GD_MOTHER_ID" , &gamma2_GD_GD_MOTHER_ID ); } if(Kst2Kpluspi0Merged){ tree -> SetBranchAddress( "K_plus_TRUEID" , &K_plus_TRUEID ); tree -> SetBranchAddress( "pi_zero_merged_TRUEID" , &pi_zero_TRUEID ); tree -> SetBranchAddress( "K_plus_MC_MOTHER_ID" , &K_plus_MOTHER_ID ); tree -> SetBranchAddress( "pi_zero_merged_MC_MOTHER_ID" , &pi_zero_MOTHER_ID ); tree -> SetBranchAddress( "K_plus_MC_GD_MOTHER_ID" , &K_plus_GD_MOTHER_ID ); tree -> SetBranchAddress( "pi_zero_merged_MC_GD_MOTHER_ID" , &pi_zero_GD_MOTHER_ID ); tree -> SetBranchAddress( "pi_zero_merged_MC_GD_GD_MOTHER_ID" , &pi_zero_merged_MC_GD_GD_MOTHER_ID ); } if(Kst2Kspiplus){ tree -> SetBranchAddress( "K_short_TRUEID" , &K_short_TRUEID ); tree -> SetBranchAddress( "pi_plus_TRUEID" , &pi_plus_TRUEID ); tree -> SetBranchAddress( "Ks_pi_plus_TRUEID" , &Ks_pi_plus_TRUEID ); tree -> SetBranchAddress( "Ks_pi_minus_TRUEID" , &Ks_pi_minus_TRUEID ); tree -> SetBranchAddress( "K_short_MC_MOTHER_ID" , &K_short_MOTHER_ID ); tree -> SetBranchAddress( "pi_plus_MC_MOTHER_ID" , &pi_plus_MOTHER_ID ); tree -> SetBranchAddress( "Ks_pi_plus_MC_MOTHER_ID" , &Ks_pi_plus_MOTHER_ID ); tree -> SetBranchAddress( "Ks_pi_minus_MC_MOTHER_ID" , &Ks_pi_minus_MOTHER_ID ); tree -> SetBranchAddress( "K_short_MC_GD_MOTHER_ID" , &K_short_GD_MOTHER_ID ); tree -> SetBranchAddress( "pi_plus_MC_GD_MOTHER_ID" , &pi_plus_GD_MOTHER_ID ); tree -> SetBranchAddress( "Ks_pi_plus_MC_GD_MOTHER_ID" , &Ks_pi_plus_GD_MOTHER_ID ); tree -> SetBranchAddress( "Ks_pi_minus_MC_GD_MOTHER_ID" , &Ks_pi_minus_GD_MOTHER_ID ); tree -> SetBranchAddress( "Ks_pi_plus_MC_GD_GD_MOTHER_ID" , &Ks_pi_plus_GD_GD_MOTHER_ID ); tree -> SetBranchAddress( "Ks_pi_minus_MC_GD_GD_MOTHER_ID" , &Ks_pi_minus_GD_GD_MOTHER_ID ); } tree -> SetBranchAddress( "J_psi_TRUEID" , &J_psi_TRUEID ); tree -> SetBranchAddress( "J_psi_MC_MOTHER_ID" , &J_psi_MOTHER_ID ); //counter Int_t B_plus_VETO = 0; Int_t K_star_plus_VETO = 0; Int_t K_plus_VETO = 0; Int_t K_short_VETO = 0; Int_t Ks_pi_plus_VETO = 0; Int_t Ks_pi_minus_VETO = 0; Int_t pi_plus_VETO = 0; Int_t pi_zero_VETO = 0; Int_t mu_plus_VETO = 0; Int_t mu_minus_VETO = 0; Int_t J_psi_VETO = 0; Int_t gamma1_VETO = 0; Int_t gamma2_VETO = 0; Int_t MOTHER_ID_VETO = 0; Int_t GD_MOTHER_ID_VETO = 0; Int_t GD_GD_MOTHER_ID_VETO = 0; Int_t TRUE_events = 0; //count the numbers of Kshort daughters, which are pi_zeros Int_t Kshort_pi_zero_daughters = 0; //count muons, mis-IDed as pions Int_t ReconstructedPionsWhichAreMuons = 0; //====================================== //Get histos of all possible backgrounds //====================================== //control plots for pi0 Double_t pi_zero_resolved_M = 0.0; if (Kst2Kpluspi0Resolved) tree -> SetBranchAddress( "pi_zero_resolved_M" , &pi_zero_resolved_M ); TH1 * h_pi0_resolved_mass= new TH1D("h_pi0_resolved_mass" , "m_{#pi_{0}} resolved", 100, 75, 175); h_pi0_resolved_mass->GetXaxis()->SetTitle("m_{pi_{0}} resolved [MeV]"); h_pi0_resolved_mass->GetYaxis()->SetTitle("Counts / 1MeV"); TH1 * h_pi0_mismatched_mass= new TH1D("h_pi0_mismatched_mass" , "m_{#pi_{0}} IDed as gamma", 100, 75, 175); h_pi0_mismatched_mass->GetXaxis()->SetTitle("m_{pi_{0}}[MeV] MisIDed"); h_pi0_mismatched_mass->GetYaxis()->SetTitle("Counts / 1MeV"); TH1 * h_B_plus_TRUEID = new TH1D("h_B_plus_TRUEID", "B^{+} TRUEID", 100000, -1, 99999); TH1 * h_K_star_plus_TRUEID = new TH1D("h_K_star_plus_TRUEID", "K^{*+} TRUEID", 100000, -1, 99999); TH1 * h_K_plus_TRUEID = new TH1D("h_K_plus_TRUEID", "K^{+} TRUEID", 100000, -1, 99999); TH1 * h_pi_zero_TRUEID = new TH1D("h_pi_zero_TRUEID", "#pi^{0} TRUEID", 100000, -1, 99999); TH1 * h_B_plus_TRUEID_rm = new TH1D("h_B_plus_TRUEID_rm", "B^{+} TRUEID", 100000, -1, 99999); TH1 * h_K_star_plus_TRUEID_rm= new TH1D("h_K_star_plus_TRUEID_rm", "K^{*+} TRUEID", 100000, -1, 99999); TH1 * h_K_plus_TRUEID_rm = new TH1D("h_K_plus_TRUEID_rm", "K^{+} TRUEID", 100000, -1, 99999); TH1 * h_pi_zero_TRUEID_rm = new TH1D("h_pi_zero_TRUEID_rm", "#pi^{0} TRUEID", 100000, -1, 99999); TH1 * h_B_plus_K1 = new TH1D("h_B_plus_K1", "h_B_plus_K1", 100, cut_B_plus_M_low, cut_B_plus_M_high); TH1 * h_B_plus_Kst = new TH1D("h_B_plus_Kst", "h_B_plus_Kst", 100, cut_B_plus_M_low, cut_B_plus_M_high); TH1 * h_B_plus_Kpl = new TH1D("h_B_plus_Kpl", "h_B_plus_Kpl", 100, cut_B_plus_M_low, cut_B_plus_M_high); vector Cuts; string tmp_string = ""; int nBins = 75; TH1 * h_BplusMass_tot= new TH1D("h_BplusMass_tot" , "h_BplusMass_tot", nBins ,cut_B_plus_M_low, cut_B_plus_M_high); h_BplusMass_tot->GetXaxis()->SetTitle("B^{+} mass [MeV]"); //====================================== // Define trees for all channels //====================================== TTree *tree_correct = tree->CloneTree(0); tree_correct->SetName("tree_correct"); TH1 * h_BplusMass_correct = new TH1D("h_BplusMass_correct" , "h_BplusMass_correct", nBins ,cut_B_plus_M_low, cut_B_plus_M_high); h_BplusMass_correct->GetXaxis()->SetTitle("B^{+} mass [MeV]"); TTree *tree_K1_1270 = tree->CloneTree(0); tree_K1_1270->SetName("tree_K1_1270"); TH1 * h_BplusMass_K1_1270 = new TH1D("h_BplusMass_K1_1270" , "h_BplusMass_K1_1270", nBins ,cut_B_plus_M_low, cut_B_plus_M_high); h_BplusMass_K1_1270->GetXaxis()->SetTitle("B^{+} mass [MeV]"); TTree *tree_K1_1410 = tree->CloneTree(0); tree_K1_1410->SetName("tree_K1_1410"); TH1 * h_BplusMass_K1_1410 = new TH1D("h_BplusMass_K1_1410" , "h_BplusMass_K1_1410", nBins ,cut_B_plus_M_low, cut_B_plus_M_high); h_BplusMass_K1_1410->GetXaxis()->SetTitle("B^{+} mass [MeV]"); TTree *tree_K1_1400 = tree->CloneTree(0); tree_K1_1400->SetName("tree_K1_1400"); TH1 * h_BplusMass_K1_1400 = new TH1D("h_BplusMass_K1_1400" , "h_BplusMass_K1_1400", nBins ,cut_B_plus_M_low, cut_B_plus_M_high); h_BplusMass_K1_1400->GetXaxis()->SetTitle("B^{+} mass [MeV]"); TTree *tree_K_plus= tree->CloneTree(0); tree_K_plus->SetName("tree_K_plus"); TH1 * h_BplusMass_K_plus = new TH1D("h_BplusMass_K_plus" , "h_BplusMass_K_plus", nBins ,cut_B_plus_M_low, cut_B_plus_M_high); h_BplusMass_K_plus->GetXaxis()->SetTitle("B^{+} mass [MeV]"); TTree *tree_K_plus_misID= tree->CloneTree(0); tree_K_plus_misID->SetName("tree_K_plus_misID"); TH1 * h_BplusMass_K_plus_misID = new TH1D("h_BplusMass_K_plus_misID" , "h_BplusMass_K_plus_misID", nBins ,cut_B_plus_M_low, cut_B_plus_M_high); h_BplusMass_K_plus_misID->GetXaxis()->SetTitle("B^{+} mass [MeV]"); TTree *tree_B_star= tree->CloneTree(0); tree_B_star->SetName("tree_B_star"); TH1 * h_BplusMass_B_star = new TH1D("h_BplusMass_B_star" , "h_BplusMass_B_star", nBins ,cut_B_plus_M_low, cut_B_plus_M_high); h_BplusMass_B_star->GetXaxis()->SetTitle("B^{+} mass [MeV]"); TTree *tree_Kstar_misID= tree->CloneTree(0); tree_Kstar_misID->SetName("tree_Kstar_misID"); TH1 * h_BplusMass_Kstar_misID = new TH1D("h_BplusMass_Kstar_misID" , "h_BplusMass_Kstar_misID", nBins ,cut_B_plus_M_low, cut_B_plus_M_high); h_BplusMass_Kstar_misID->GetXaxis()->SetTitle("B^{+} mass [MeV]"); TTree *tree_bquark= tree->CloneTree(0); tree_bquark->SetName("tree_bquark"); TH1 * h_BplusMass_bquark = new TH1D("h_BplusMass_bquark" , "h_BplusMass_bquark", nBins ,cut_B_plus_M_low, cut_B_plus_M_high); h_BplusMass_bquark->GetXaxis()->SetTitle("B^{+} mass [MeV]"); TTree *tree_combinatorics= tree->CloneTree(0); tree_combinatorics->SetName("tree_combinatorics"); TH1 * h_BplusMass_combinatorics = new TH1D("h_BplusMass_combinatorics" , "h_BplusMass_combinatorics", nBins ,cut_B_plus_M_low, cut_B_plus_M_high); h_BplusMass_combinatorics->GetXaxis()->SetTitle("B^{+} mass [MeV]"); TTree *tree_others = tree->CloneTree(0); tree_others->SetName("tree_others"); TH1 * h_BplusMass_others = new TH1D("h_BplusMass_others" , "h_BplusMass_others", nBins ,cut_B_plus_M_low, cut_B_plus_M_high); h_BplusMass_others->GetXaxis()->SetTitle("B^{+} mass [MeV]"); TH1 * h_BplusMass_JpsiVETO = new TH1D("h_BplusMass_JpsiVETO" , "h_BplusMass_JpsiVETO", nBins ,cut_B_plus_M_low, cut_B_plus_M_high); h_BplusMass_JpsiVETO->GetXaxis()->SetTitle("B^{+} mass [MeV]"); TH1 * h_BplusMass_GDVETO = new TH1D("h_BplusMass_GDVETO" , "h_BplusMass_GDVETO", nBins ,cut_B_plus_M_low, cut_B_plus_M_high); h_BplusMass_GDVETO->GetXaxis()->SetTitle("B^{+} mass [MeV]"); //====================================== //check all particles for correct TRUEID //====================================== //MC loop cout << "Tree has " << tree->GetEntries() << " entries" << endl; int nEvents = tree->GetEntries(); std::cout << "Truth matching of " << nEvents << " INC MC events for " << year << magnet << "!" << std::endl; for(int i = 0; i < nEvents; i++){ if(i%2000==0 && i != 0)std::cout << "Loading MC event " << i << " / " << nEvents << std::endl; bool flag_other = true; //others tree->GetEntry(i); h_BplusMass_tot->Fill(B_plus_M_DTF); //remove nonsense from B and Jpsi if(TMath::Abs(B_plus_TRUEID) != TRUEID.B_PLUS && TMath::Abs(B_plus_TRUEID) != 0 && TMath::Abs(B_plus_TRUEID) != 5){ B_plus_VETO++; h_B_plus_TRUEID_rm->Fill(B_plus_TRUEID); continue; } if(ReferenceChannel){ if(TMath::Abs(J_psi_TRUEID) != TRUEID.J_PSI){ J_psi_VETO++; h_BplusMass_JpsiVETO->Fill(B_plus_M_DTF); continue; } if(TMath::Abs(mu_plus_MOTHER_ID) != TRUEID.J_PSI){ MOTHER_ID_VETO++; h_BplusMass_others->Fill(B_plus_M_DTF); continue; } if(TMath::Abs(mu_minus_MOTHER_ID) != TRUEID.J_PSI){ MOTHER_ID_VETO++; h_BplusMass_others->Fill(B_plus_M_DTF); continue; } if(TMath::Abs(mu_plus_GD_MOTHER_ID) != TRUEID.B_PLUS){ GD_MOTHER_ID_VETO++; h_BplusMass_GDVETO->Fill(B_plus_M_DTF); continue; } if(TMath::Abs(mu_minus_GD_MOTHER_ID) != TRUEID.B_PLUS){ GD_MOTHER_ID_VETO++; h_BplusMass_GDVETO->Fill(B_plus_M_DTF); continue; } } else{ if(TMath::Abs(J_psi_TRUEID) == TRUEID.J_PSI){ J_psi_VETO++; h_BplusMass_JpsiVETO->Fill(B_plus_M_DTF); continue; } if(TMath::Abs(mu_plus_MOTHER_ID) != TRUEID.B_PLUS){ MOTHER_ID_VETO++; h_BplusMass_others->Fill(B_plus_M_DTF); continue; } if(TMath::Abs(mu_minus_MOTHER_ID) != TRUEID.B_PLUS){ MOTHER_ID_VETO++; h_BplusMass_others->Fill(B_plus_M_DTF); continue; } } //correct tree if (TMath::Abs(K_star_plus_TRUEID) == TRUEID.K_STAR_PLUS) if(TMath::Abs(K_plus_TRUEID) == TRUEID.K_PLUS){ //Paticle IDs if(TMath::Abs(K_star_plus_MOTHER_ID) == TRUEID.B_PLUS) if(TMath::Abs(K_plus_MOTHER_ID) == TRUEID.K_STAR_PLUS){ //Mother IDs if(TMath::Abs(K_plus_GD_MOTHER_ID) == TRUEID.B_PLUS){//Grandmother IDs tree_correct->Fill(); h_BplusMass_correct->Fill(B_plus_M_DTF); continue; } } } //K1 tree if (TMath::Abs(K_star_plus_TRUEID) == TRUEID.K_ONE_PLUS || TMath::Abs(K_star_plus_TRUEID) == 0 || TMath::Abs(K_star_plus_TRUEID) == TRUEID.B_PLUS ) if(TMath::Abs(K_plus_TRUEID) == TRUEID.K_STAR_PLUS || TMath::Abs(K_plus_TRUEID) == TRUEID.K_PLUS){ //Paticle IDs if(TMath::Abs(K_star_plus_MOTHER_ID) == TRUEID.B_PLUS || TMath::Abs(K_star_plus_MOTHER_ID) == TRUEID.K_ONE_PLUS || TMath::Abs(K_star_plus_MOTHER_ID) == 0) if(TMath::Abs(K_plus_MOTHER_ID) == TRUEID.K_STAR_PLUS || TMath::Abs(K_plus_MOTHER_ID) == TRUEID.K_ONE_PLUS){ //Mother IDs if(TMath::Abs(K_plus_GD_MOTHER_ID) == TRUEID.B_PLUS || TMath::Abs(K_plus_GD_MOTHER_ID) == TRUEID.K_ONE_PLUS){//Grandmother IDs tree_K1_1270->Fill(); h_BplusMass_K1_1270->Fill(B_plus_M_DTF); continue; } } } //K1 1400 tree if (TMath::Abs(K_star_plus_TRUEID) == TRUEID.K_ONE_PLUS_1400 || TMath::Abs(K_star_plus_TRUEID) == 0|| TMath::Abs(K_star_plus_TRUEID) == TRUEID.B_PLUS ) if(TMath::Abs(K_plus_TRUEID) == TRUEID.K_STAR_PLUS || TMath::Abs(K_plus_TRUEID) == TRUEID.K_PLUS){ //Paticle ID if(TMath::Abs(K_star_plus_MOTHER_ID) == TRUEID.B_PLUS || TMath::Abs(K_star_plus_MOTHER_ID) == TRUEID.K_ONE_PLUS_1400) if(TMath::Abs(K_plus_MOTHER_ID) == TRUEID.K_STAR_PLUS || TMath::Abs(K_plus_MOTHER_ID) == TRUEID.K_ONE_PLUS_1400){ //Mother IDs if(TMath::Abs(K_plus_GD_MOTHER_ID) == TRUEID.B_PLUS || TMath::Abs(K_plus_GD_MOTHER_ID) == TRUEID.K_ONE_PLUS_1400){//Grandmother IDs tree_K1_1400->Fill(); h_BplusMass_K1_1410->Fill(B_plus_M_DTF); tree_others->Fill(); h_BplusMass_others->Fill(B_plus_M_DTF); continue; } } } //K1 1410 tree if (TMath::Abs(K_star_plus_TRUEID) == TRUEID.K_ONE_PLUS_1410 || TMath::Abs(K_star_plus_TRUEID) == 0 ) if(TMath::Abs(K_plus_TRUEID) == TRUEID.K_PLUS){ //Paticle IDs if(TMath::Abs(K_star_plus_MOTHER_ID) == TRUEID.B_PLUS || TMath::Abs(K_star_plus_MOTHER_ID) == 0 || TMath::Abs(K_star_plus_MOTHER_ID) == TRUEID.K_ONE_PLUS_1410) if(TMath::Abs(K_plus_MOTHER_ID) == TRUEID.K_STAR_PLUS || TMath::Abs(K_plus_MOTHER_ID) == TRUEID.K_ONE_PLUS_1410){ //Mother IDs if(TMath::Abs(K_plus_GD_MOTHER_ID) == 0 || TMath::Abs(K_plus_GD_MOTHER_ID) == TRUEID.K_ONE_PLUS_1410){//Grandmother IDs tree_K1_1410->Fill(); h_BplusMass_K1_1410->Fill(B_plus_M_DTF); tree_others->Fill(); h_BplusMass_others->Fill(B_plus_M_DTF); continue; } } } //K1 1270 tree 2.0 if (TMath::Abs(K_star_plus_TRUEID) == TRUEID.K_STAR_PLUS) if(TMath::Abs(K_plus_TRUEID) == TRUEID.K_PLUS){ //Paticle IDs if(TMath::Abs(K_star_plus_MOTHER_ID) == TRUEID.K_ONE_PLUS) if(TMath::Abs(K_plus_MOTHER_ID) == TRUEID.K_STAR_PLUS){ //Mother IDs if(TMath::Abs(K_plus_GD_MOTHER_ID) == TRUEID.K_ONE_PLUS){//Grandmother IDs tree_K1_1270->Fill(); h_BplusMass_K1_1270->Fill(B_plus_M_DTF); continue; } } } //tree_K_plus_misID tree if (TMath::Abs(K_star_plus_TRUEID) == TRUEID.K_ONE_PLUS || TMath::Abs(K_star_plus_TRUEID) == TRUEID.K_STAR_PLUS|| TMath::Abs(K_star_plus_TRUEID) == 0 ) if(TMath::Abs(K_plus_TRUEID) == TRUEID.PI_PLUS){ //Paticle IDs if(TMath::Abs(K_star_plus_MOTHER_ID) == TRUEID.B_PLUS || TMath::Abs(K_star_plus_MOTHER_ID) == TRUEID.K_ONE_PLUS) if(TMath::Abs(K_plus_MOTHER_ID) == TRUEID.K_STAR_PLUS || TMath::Abs(K_plus_MOTHER_ID) == TRUEID.K_ONE_PLUS){ //Mother IDs if(TMath::Abs(K_plus_GD_MOTHER_ID) == TRUEID.B_PLUS || TMath::Abs(K_plus_GD_MOTHER_ID) == TRUEID.K_ONE_PLUS){//Grandmother IDs tree_K_plus_misID->Fill(); h_BplusMass_K_plus_misID->Fill(B_plus_M_DTF); tree_others->Fill(); h_BplusMass_others->Fill(B_plus_M_DTF); continue; } } } //tree_K_plus_misID tree 2.0 (K+->pi+) if (TMath::Abs(K_star_plus_TRUEID) == TRUEID.K_STAR_PLUS) if(TMath::Abs(K_plus_TRUEID) == TRUEID.PI_PLUS){ //Paticle IDs if(TMath::Abs(K_star_plus_MOTHER_ID) == TRUEID.B_PLUS) if(TMath::Abs(K_plus_MOTHER_ID) == TRUEID.K_PLUS){ //Mother IDs if(TMath::Abs(K_plus_GD_MOTHER_ID) == TRUEID.K_STAR_PLUS) if (TMath::Abs(K_plus_GD_GD_MOTHER_ID) == TRUEID.B_PLUS){//Grandmother IDs tree_K_plus_misID->Fill(); h_BplusMass_K_plus_misID->Fill(B_plus_M_DTF); tree_others->Fill(); h_BplusMass_others->Fill(B_plus_M_DTF); continue; } } } //Kplus tree if (TMath::Abs(K_star_plus_TRUEID) == TRUEID.K_PLUS || TMath::Abs(K_star_plus_TRUEID) == 0) if(TMath::Abs(K_plus_TRUEID) == TRUEID.K_PLUS){ //Paticle IDs if(TMath::Abs(K_plus_MOTHER_ID) == TRUEID.B_PLUS){ //Mother IDs if(TMath::Abs(K_plus_GD_MOTHER_ID) == 0){//Grandmother IDs tree_K_plus->Fill(); h_BplusMass_K_plus->Fill(B_plus_M_DTF); tree_others->Fill(); h_BplusMass_others->Fill(B_plus_M_DTF); continue; } } } //K star misID tree if (TMath::Abs(K_star_plus_TRUEID) == TRUEID.K_PLUS) if(TMath::Abs(K_plus_TRUEID) == TRUEID.K_PLUS){ //Paticle IDs if(TMath::Abs(K_star_plus_MOTHER_ID) == TRUEID.K_STAR_PLUS) if(TMath::Abs(K_plus_MOTHER_ID) == TRUEID.K_STAR_PLUS){ //Mother IDs if(TMath::Abs(K_plus_GD_MOTHER_ID) == TRUEID.B_PLUS){//Grandmother IDs tree_Kstar_misID->Fill(); h_BplusMass_Kstar_misID->Fill(B_plus_M_DTF); tree_others->Fill(); h_BplusMass_others->Fill(B_plus_M_DTF); continue; } } } //B+ <-> b quark if (TMath::Abs(K_star_plus_TRUEID) == TRUEID.B_PLUS) if(TMath::Abs(K_plus_TRUEID) == TRUEID.K_PLUS){ //Paticle IDs if(TMath::Abs(K_star_plus_MOTHER_ID) == 5) if(TMath::Abs(K_plus_MOTHER_ID) == TRUEID.B_PLUS){ //Mother IDs tree_bquark->Fill(); h_BplusMass_bquark->Fill(B_plus_M_DTF); continue; } } //B+ <-> b quark 2.0 if (TMath::Abs(K_star_plus_TRUEID) ==5) if(TMath::Abs(K_plus_TRUEID) == TRUEID.K_PLUS){ //Paticle IDs if(TMath::Abs(K_star_plus_MOTHER_ID) == 0) if(TMath::Abs(K_plus_MOTHER_ID) == TRUEID.B_PLUS || TMath::Abs(K_plus_MOTHER_ID) == TRUEID.K_STAR_PLUS ){ //Mother IDs tree_bquark->Fill(); h_BplusMass_bquark->Fill(B_plus_M_DTF); continue; } } //Bstar tree if (TMath::Abs(K_star_plus_TRUEID) == TRUEID.B_PLUS) if(TMath::Abs(K_plus_TRUEID) == TRUEID.K_PLUS){ //Paticle IDs if(TMath::Abs(K_star_plus_MOTHER_ID) == 523) if(TMath::Abs(K_plus_MOTHER_ID) == TRUEID.B_PLUS){ //Mother IDs if(TMath::Abs(K_plus_GD_MOTHER_ID) == 523){//Grandmother IDs tree_B_star->Fill(); h_BplusMass_B_star->Fill(B_plus_M_DTF); continue; } } } //Bstar tree 2.0 if (TMath::Abs(K_star_plus_TRUEID) == TRUEID.K_PLUS) if(TMath::Abs(K_plus_TRUEID) == TRUEID.K_PLUS){ //Paticle IDs if(TMath::Abs(K_star_plus_MOTHER_ID) == 523) if(TMath::Abs(K_plus_MOTHER_ID) == TRUEID.B_PLUS){ //Mother IDs if(TMath::Abs(K_plus_GD_MOTHER_ID) == 523){//Grandmother IDs tree_B_star->Fill(); h_BplusMass_B_star->Fill(B_plus_M_DTF); continue; } } } //Bstar tree 3.0 (K* misID B+) if (TMath::Abs(K_star_plus_TRUEID) == TRUEID.K_PLUS) if(TMath::Abs(K_plus_TRUEID) == TRUEID.K_PLUS){ //Paticle IDs if(TMath::Abs(K_star_plus_MOTHER_ID) == TRUEID.B_PLUS) if(TMath::Abs(K_plus_MOTHER_ID) == TRUEID.B_PLUS){ //Mother IDs if(TMath::Abs(K_plus_GD_MOTHER_ID) == 523){//Grandmother IDs tree_B_star->Fill(); h_BplusMass_B_star->Fill(B_plus_M_DTF); continue; } } } //Bstar tree 4.0 (K* misID B+) if (TMath::Abs(K_star_plus_TRUEID) == 0) if(TMath::Abs(K_plus_TRUEID) == TRUEID.K_PLUS){ //Paticle IDs if(TMath::Abs(K_star_plus_MOTHER_ID) == 0) if(TMath::Abs(K_plus_MOTHER_ID) == TRUEID.B_PLUS){ //Mother IDs if(TMath::Abs(K_plus_GD_MOTHER_ID) == 523 ||TMath::Abs(K_plus_GD_MOTHER_ID) == 10521){//Grandmother IDs tree_B_star->Fill(); h_BplusMass_B_star->Fill(B_plus_M_DTF); continue; } } } //combinatorics tree if (TMath::Abs(K_star_plus_TRUEID) == 0) if(TMath::Abs(K_plus_TRUEID) == TRUEID.K_PLUS ||TMath::Abs(K_plus_TRUEID) == 0 ){ //Paticle IDs if(TMath::Abs(K_star_plus_MOTHER_ID) == 0) if(TMath::Abs(K_plus_MOTHER_ID) == TRUEID.K_STAR_PLUS ||TMath::Abs(K_plus_TRUEID) == 0 ){ //Mother IDs if(TMath::Abs(K_plus_GD_MOTHER_ID) == TRUEID.B_PLUS){//Grandmother IDs tree_combinatorics->Fill(); h_BplusMass_combinatorics->Fill(B_plus_M_DTF); continue; } } } //the rest of stuff tree_others->Fill(); h_BplusMass_others->Fill(B_plus_M_DTF); } //output truthmatching results std::cout << "Resulting TruthMatching data: " << TRUE_events << "/" << nEvents << " are found to be correctly reconstructed!" << std::endl; std::cout << "The incorrect reconstructed particles are the following:" << std::endl; std::cout << "(only the first found-incorrect particle is counted)" << std::endl; std::cout << std::endl; //std::cout << (B0 ? "B_zero:\t\t" : "B_plus:\t\t") << B_plus_VETO << std::endl; //std::cout << (B0 ? "K_star_zero:\t" : ( K1 ? "K_one_plus:\t" : "K_star_plus:\t")) << K_star_plus_VETO << std::endl; std::cout << "mu_plus:\t" << mu_plus_VETO << std::endl; std::cout << "mu_minus:\t" << mu_minus_VETO << std::endl; if(Kst2Kpluspi0Resolved){ std::cout << "K_plus:\t\t" << K_plus_VETO << std::endl; std::cout << "pi_zero:\t" << pi_zero_VETO << std::endl; std::cout << "gamma1:\t\t" << gamma1_VETO << std::endl; std::cout << "gamma2:\t\t" << gamma2_VETO << std::endl; } if(Kst2Kpluspi0Merged){ std::cout << "K_plus:\t\t" << K_plus_VETO << std::endl; std::cout << "pi_zero:\t" << pi_zero_VETO << std::endl; } if(Kst2Kspiplus){ std::cout << "K_short:\t" << K_short_VETO << std::endl; std::cout << "Ks_pi_plus:\t" << Ks_pi_plus_VETO << std::endl; std::cout << "Ks_pi_minus:\t" << Ks_pi_minus_VETO << std::endl; std::cout << "pi_plus:\t" << pi_plus_VETO << std::endl; } std::cout << "J_psi:\t\t" <cd(); tree_correct->Write(); cout << "Correctly id'd entries " << tree_correct->GetEntries() << endl; tree_K1_1270->Write(); cout << "B+->K1(1270) entries " << tree_K1_1270->GetEntries() << endl; tree_K1_1400->Write(); cout << "B+->K1(1400) entries " << tree_K1_1400->GetEntries() << endl; tree_K1_1410->Write(); cout << "B+->K1(1410) entries " << tree_K1_1410->GetEntries() << endl; tree_K_plus->Write(); cout << "B+->K+pi0 entries " << tree_K_plus->GetEntries() << endl; tree_K_plus_misID->Write(); cout << "B+->K*->pi+pi0 " << tree_K_plus_misID->GetEntries() << endl; tree_B_star->Write(); cout << "B*-> B+->K+ entries " << tree_B_star->GetEntries() << endl; tree_Kstar_misID->Write(); cout << "K* misID entries " << tree_Kstar_misID->GetEntries() << endl; tree_combinatorics->Write(); cout << "b-quark entries " << tree_bquark->GetEntries() << endl; tree_bquark->Write(); cout << "Combinatorics " << tree_combinatorics->GetEntries() << endl; tree_others->Write(); cout << "Other entries " << tree_others->GetEntries() << endl; THStack *tmp = new THStack("IncMC","IncMC;B^{+} mass [MeV];Entries"); //tmp->GetXaxis()->SetTitle("B^{+} mass [MeV]"); //tmp->GetYaxis()->SetTitle("Entries"); h_BplusMass_others->SetFillColor(kGreen); h_BplusMass_others->SetLineColor(kGreen); tmp->Add(h_BplusMass_others); h_BplusMass_bquark->SetFillColor(kGreen); h_BplusMass_bquark->SetLineColor(kGreen); tmp->Add(h_BplusMass_bquark); h_BplusMass_K1_1270->SetFillColor(kBlue); h_BplusMass_K1_1270->SetLineColor(kBlue); tmp->Add(h_BplusMass_K1_1270); // h_BplusMass_K1_1400->SetFillColor(0); // h_BplusMass_K1_1400->SetLineColor(0); // tmp->Add(h_BplusMass_K1_1400); // h_BplusMass_K1_1410->SetFillColor(0); // h_BplusMass_K1_1410->SetLineColor(0); // tmp->Add(h_BplusMass_K1_1410); // h_BplusMass_K_plus->SetFillColor(0); // h_BplusMass_K_plus->SetLineColor(0); // tmp->Add(h_BplusMass_K_plus); // h_BplusMass_K_plus_misID->SetFillColor(0); // h_BplusMass_K_plus_misID->SetLineColor(0); // tmp->Add(h_BplusMass_K_plus_misID); h_BplusMass_B_star->SetFillColor(kYellow); h_BplusMass_B_star->SetLineColor(kYellow); tmp->Add(h_BplusMass_B_star); // h_BplusMass_Kstar_misID->SetFillColor(0); // h_BplusMass_Kstar_misID->SetLineColor(0); // tmp->Add(h_BplusMass_Kstar_misID); // // h_BplusMass_combinatorics->SetFillColor(kBlack); // h_BplusMass_combinatorics->SetLineColor(kBlack); // tmp->Add(h_BplusMass_combinatorics); h_BplusMass_JpsiVETO->SetFillColor(kMagenta-10); h_BplusMass_JpsiVETO->SetLineColor(kMagenta-10); tmp->Add(h_BplusMass_JpsiVETO); h_BplusMass_GDVETO->SetFillColor(kOrange-3); h_BplusMass_GDVETO->SetLineColor(kOrange-3); tmp->Add(h_BplusMass_GDVETO); h_BplusMass_correct->SetFillColor(kRed); h_BplusMass_correct->SetLineColor(kRed); tmp->Add(h_BplusMass_correct); tmp->Write(); TCanvas *c1 = new TCanvas("c1","all",900,700); c1->cd(); gStyle->SetOptStat(0); // h_BplusMass_correct->SetFillColor(0); h_BplusMass_correct->Draw(); // h_BplusMass_others->SetFillColor(0); h_BplusMass_others->Draw("SAME"); // h_BplusMass_K1_1270->SetFillColor(0); h_BplusMass_K1_1270->Draw("SAME"); //h_BplusMass_K1_1400->Draw("SAME"); //h_BplusMass_K1_1410->Draw("SAME"); //h_BplusMass_K_plus->Draw("SAME"); //h_BplusMass_K_plus_misID->Draw("SAME"); // h_BplusMass_B_star->SetFillColor(0); h_BplusMass_B_star->Draw("SAME"); //h_BplusMass_Kstar_misID->Draw("SAME"); //h_BplusMass_combinatorics->Draw("SAME"); // h_BplusMass_bquark->SetFillColor(0); h_BplusMass_bquark->Draw("SAME"); // h_BplusMass_JpsiVETO->SetFillColor(0); h_BplusMass_JpsiVETO->Draw("SAME"); // h_BplusMass_GDVETO->SetFillColor(0); h_BplusMass_GDVETO->Draw("SAME"); c1->Write(); TCanvas *c2 = new TCanvas("c2","al2",900,700); c2->cd(); tmp->Draw(); h_BplusMass_tot->SetLineWidth(3); h_BplusMass_tot->SetLineColor(kBlack); h_BplusMass_tot->Draw("SAMEE"); c2->Write(); c2->SaveAs(Form("%s/data/MC/BtoXJpsi/%s%s/%s%s_pi0Resolved%s_BKG.eps",path_to_output_KplusPizero.c_str(), year.c_str(),magnet.c_str(),year.c_str(),magnet.c_str(),(smallSample ? "_small":"") ),"eps"); } // Kst2Kpluspi0Merged case else if(Kst2Kpluspi0Merged){ //TODO } // Kst2Kspiplus case else if(Kst2Kspiplus){ //TODO } else return 0; if(!outputFile->IsOpen()){ std::cout << "[ERROR]\t\tFile was not opened succesfully!" << std::endl; return 0; } outputFile->cd(); //treeTruthMatched->Write("",TObject::kWriteDelete); if (Kst2Kpluspi0Resolved){ h_pi0_mismatched_mass->SetLineColor(kRed); h_pi0_mismatched_mass->SetLineWidth(3); h_pi0_resolved_mass->SetLineColor(kBlue); h_pi0_resolved_mass->SetLineWidth(3); h_pi0_mismatched_mass->Write("",TObject::kWriteDelete); h_pi0_resolved_mass->Write("",TObject::kWriteDelete); h_B_plus_TRUEID ->Write("",TObject::kWriteDelete); h_K_star_plus_TRUEID ->Write("",TObject::kWriteDelete); h_K_plus_TRUEID ->Write("",TObject::kWriteDelete); h_pi_zero_TRUEID ->Write("",TObject::kWriteDelete); h_B_plus_TRUEID_rm ->Write("",TObject::kWriteDelete); h_K_star_plus_TRUEID_rm ->Write("",TObject::kWriteDelete); h_K_plus_TRUEID_rm ->Write("",TObject::kWriteDelete); h_pi_zero_TRUEID_rm ->Write("",TObject::kWriteDelete); h_B_plus_K1 ->Write("",TObject::kWriteDelete); h_B_plus_Kst ->Write("",TObject::kWriteDelete); h_B_plus_Kpl ->Write("",TObject::kWriteDelete); } delete outputFile;//->Close(); delete h_pi0_mismatched_mass; delete h_pi0_resolved_mass; delete tree; std::cout << "[DONE]\t\tFinished Truth-Matching for INC sample: " << year << " " << magnet << std::endl; return 1; } int plotIncSampleAll() { if ( plotIncSample("2011","down") == 0) return 0; if ( plotIncSample("2011","up") == 0) return 0; if ( plotIncSample("2012","down") == 0) return 0; if ( plotIncSample("2012","up") == 0) return 0; if ( plotIncSample("2015","down") == 0) return 0; if ( plotIncSample("2015","up") == 0) return 0; if ( plotIncSample("2016","down") == 0) return 0; if ( plotIncSample("2016","up") == 0) return 0; return 1; }