//Classes and function used in MCtruthmatching.cpp to truthmatch the samples //Renata Kopečná #include "GlobalFunctions.hh" class counters{ public: int B_plus_VETO; int K_star_plus_VETO; int mu_VETO; int J_psi_VETO; int K_plus_VETO; int pi_zero_VETO; int gammas_VETO; int MOTHER_ID_VETO; int GD_MOTHER_ID_VETO; int GD_GD_MOTHER_ID_VETO; int K_short_VETO; int Ks_pi_VETO; int pi_plus_VETO; int Kshort_pi_zero_daughters; int ReconstructedPionsWhichAreMuons; counters(){ //default constructor B_plus_VETO = 0; K_star_plus_VETO = 0; mu_VETO = 0; J_psi_VETO = 0; K_plus_VETO = 0; pi_zero_VETO = 0; gammas_VETO = 0; MOTHER_ID_VETO = 0; GD_MOTHER_ID_VETO = 0; GD_GD_MOTHER_ID_VETO = 0; K_short_VETO = 0; Ks_pi_VETO = 0; pi_plus_VETO = 0; Kshort_pi_zero_daughters = 0; ReconstructedPionsWhichAreMuons = 0; } void printCounters(bool B0, bool K1); ~counters(); //destuctor }; void counters::printCounters(bool B0, bool K1){ coutInfo("The incorrect reconstructed particles are the following:"); coutInfo("(only the first found-incorrect particle is counted)"); coutInfo(""); coutInfo((B0 ? "B_zero:\t\t" : "B_plus:\t\t")+to_string(B_plus_VETO)); coutInfo((B0 ? "K_star_zero:\t" : ( K1 ? "K_one_plus:\t" : "K_star_plus:\t"))+to_string(K_star_plus_VETO)); coutInfo("mu:\t\t"+to_string(mu_VETO)); if(Kst2Kpluspi0Resolved){ coutInfo("K_plus:\t\t"+to_string(K_plus_VETO)); coutInfo("pi_zero TM:\t"+to_string(pi_zero_VETO)); coutInfo("gamma:\t\t"+to_string(gammas_VETO)); } if(Kst2Kspiplus){ coutInfo("K_short:\t"+to_string(K_short_VETO)); coutInfo("Ks_pi_minus:\t"+to_string(Ks_pi_VETO)); coutInfo("pi_plus:\t"+to_string(pi_plus_VETO)); } coutInfo("J_psi:\t\t"+to_string(J_psi_VETO)); if(Kst2Kspiplus){ coutInfo("Pi0 daughers of the Kshort:\t"+to_string(Kshort_pi_zero_daughters)); coutInfo("Muons mis-IDed as pions:\t"+to_string(ReconstructedPionsWhichAreMuons)+"/"+to_string(Ks_pi_VETO + pi_plus_VETO)); } coutInfo("Total incorrect family members of all particles: "+to_string(MOTHER_ID_VETO + GD_MOTHER_ID_VETO + GD_GD_MOTHER_ID_VETO)); coutInfo("MotherID:\t"+to_string(MOTHER_ID_VETO)); coutInfo("GDmotherID:\t"+to_string(GD_MOTHER_ID_VETO)); coutInfo("GDGDmotherID:\t"+to_string(GD_GD_MOTHER_ID_VETO)); return; } counters::~counters(){ //destuctor B_plus_VETO = 0; K_star_plus_VETO = 0; mu_VETO = 0; J_psi_VETO = 0; K_plus_VETO = 0; pi_zero_VETO = 0; gammas_VETO = 0; MOTHER_ID_VETO = 0; GD_MOTHER_ID_VETO = 0; K_short_VETO = 0; Ks_pi_VETO = 0; pi_plus_VETO = 0; Kshort_pi_zero_daughters = 0; ReconstructedPionsWhichAreMuons = 0; } bool isBKGCAT(int BKGCAT, bool ReferenceChannel){ if (Kst2Kspiplus){ if(ReferenceChannel){ if(BKGCAT == 0 || BKGCAT == 50) return true; else return false; } else{ if(BKGCAT == 10 || BKGCAT == 50) return true; else return false; } } else{ if(ReferenceChannel){ if(BKGCAT == 0 || BKGCAT == 40 || BKGCAT == 50) return true; else return false; } else{ if(BKGCAT == 10 || BKGCAT == 40 || BKGCAT == 50) return true; else return false; } } } //TRUED B+ class B_plus_IDs{ public: int B_plus_TRUEID; B_plus_IDs(){ B_plus_TRUEID = 0; } ~B_plus_IDs(){ B_plus_TRUEID = 0; } bool isBplus(counters *counter, bool B_plus_TM){ if (!B_plus_TM) return true; if(TMath::Abs(B_plus_TRUEID) != TRUEID.B_PLUS){ counter->B_plus_VETO++; return false; } else return true; } }; //TRUEID K*+ class K_star_IDs{ public: int K_star_plus_TRUEID; int K_star_plus_MOTHER_ID; K_star_IDs(){ K_star_plus_TRUEID = 0; K_star_plus_MOTHER_ID = 0; } ~K_star_IDs(){ K_star_plus_TRUEID = 0; K_star_plus_MOTHER_ID = 0; } bool isKstar(counters *counter, bool K_star_plus_TM, bool B_plus_TM){ if (K_star_plus_TM && TMath::Abs(K_star_plus_TRUEID) != TRUEID.K_STAR_PLUS){ counter->K_star_plus_VETO++; return false; } if (B_plus_TM && TMath::Abs(K_star_plus_MOTHER_ID) != TRUEID.B_PLUS){ counter->MOTHER_ID_VETO++; return false; } return true; } }; //TRUEID K+ class K_plus_IDs{ public: int K_plus_TRUEID; int K_plus_MOTHER_ID; int K_plus_GD_MOTHER_ID; K_plus_IDs(){ K_plus_TRUEID = 0; K_plus_MOTHER_ID = 0; K_plus_GD_MOTHER_ID = 0; } ~K_plus_IDs(){ K_plus_TRUEID = 0; K_plus_MOTHER_ID = 0; K_plus_GD_MOTHER_ID = 0; } bool isKplus(counters *counter, bool K_plus_TM, bool K_star_plus_TM, bool B_plus_TM){// flags *allFlags){ if (K_plus_TM && TMath::Abs(K_plus_TRUEID) != TRUEID.K_PLUS){ counter->K_plus_VETO++; return false; } if (K_star_plus_TM && TMath::Abs(K_plus_MOTHER_ID) != TRUEID.K_STAR_PLUS){ counter->MOTHER_ID_VETO++; return false; } if (B_plus_TM && TMath::Abs(K_plus_GD_MOTHER_ID) != TRUEID.B_PLUS){ counter->GD_MOTHER_ID_VETO++; return false; } return true; } }; //TRUEID pi0 class pi_zero_IDs{ public: int pi_zero_TRUEID; int pi_zero_MOTHER_ID; int pi_zero_GD_MOTHER_ID; pi_zero_IDs(){ pi_zero_TRUEID = 0; pi_zero_MOTHER_ID = 0; pi_zero_GD_MOTHER_ID = 0; } ~pi_zero_IDs(){ pi_zero_TRUEID = 0; pi_zero_MOTHER_ID = 0; pi_zero_GD_MOTHER_ID = 0; } bool isPi0(counters *counter, bool pi_zero_TM, bool K_star_plus_TM, bool B_plus_TM, double pi_zero_resolved_M, double B_plus_M, TH1D *h_pi0_mismatched_mass, TH1D *h_Bplus_mass_pi0mismatched, TH1D *h_pi0_resolved_mass){ if (pi_zero_TM){ if(TMath::Abs(pi_zero_TRUEID) == TRUEID.PI_ZERO){ h_pi0_resolved_mass->Fill(pi_zero_resolved_M); } else{ counter->pi_zero_VETO++; h_pi0_mismatched_mass->Fill(pi_zero_resolved_M); h_Bplus_mass_pi0mismatched->Fill(B_plus_M); return false; } } if (K_star_plus_TM && TMath::Abs(pi_zero_MOTHER_ID) != TRUEID.K_STAR_PLUS){ counter->MOTHER_ID_VETO++; return false; } if (B_plus_TM && TMath::Abs(pi_zero_GD_MOTHER_ID) != TRUEID.B_PLUS){ counter->GD_MOTHER_ID_VETO++; return false; } return true; } }; //TRUEID gamma class gamma_IDs{ public: int gamma_TRUEID; int gamma_MOTHER_ID; int gamma_GD_MOTHER_ID; int gamma_GD_GD_MOTHER_ID; gamma_IDs(){ gamma_TRUEID = 0; gamma_MOTHER_ID = 0; gamma_GD_MOTHER_ID = 0; gamma_GD_GD_MOTHER_ID = 0; } ~gamma_IDs(){ gamma_TRUEID = 0; gamma_MOTHER_ID = 0; gamma_GD_MOTHER_ID = 0; gamma_GD_GD_MOTHER_ID = 0; } //Check if gamma was converted bool isGammaConversion(counters *counter, bool gamma_TM, bool pi_zero_TM, bool K_star_plus_TM){ if(gamma_TM && TMath::Abs(gamma_TRUEID) != TRUEID.ELECTRON){ ++counter->gammas_VETO; return false; } if(gamma_TM && TMath::Abs(gamma_MOTHER_ID) != TRUEID.GAMMA){ ++counter->gammas_VETO; return false; } if(pi_zero_TM && TMath::Abs(gamma_GD_MOTHER_ID) != TRUEID.PI_ZERO){ ++counter->MOTHER_ID_VETO; return false; } if(K_star_plus_TM && TMath::Abs(gamma_GD_GD_MOTHER_ID) != TRUEID.K_STAR_PLUS){ ++counter->GD_MOTHER_ID_VETO; return false; } return true; } //TRUEID gamma bool isGammaTrue(counters *counter, bool gamma_TM,bool gamma_TM_full, bool pi_zero_TM, bool K_star_plus_TM, bool B_plus_TM){ if (!gamma_TM_full) return true; if(gamma_TM && TMath::Abs(gamma_TRUEID) != TRUEID.GAMMA){ ++counter->gammas_VETO; return false; } if (pi_zero_TM && TMath::Abs(gamma_MOTHER_ID) != TRUEID.PI_ZERO){ ++counter->MOTHER_ID_VETO; return false; } if (K_star_plus_TM && TMath::Abs(gamma_GD_MOTHER_ID) != TRUEID.K_STAR_PLUS){ ++counter->GD_MOTHER_ID_VETO; return false; } if (B_plus_TM && TMath::Abs(gamma_GD_GD_MOTHER_ID) != TRUEID.B_PLUS){ ++counter->GD_GD_MOTHER_ID_VETO; return false; } return true; } }; //TRUEID Ks class K_short_IDs{ public: int K_short_TRUEID; int K_short_MOTHER_ID; int K_short_GD_MOTHER_ID; K_short_IDs(){ K_short_TRUEID = 0; K_short_MOTHER_ID = 0; K_short_GD_MOTHER_ID = 0; } ~K_short_IDs(){ K_short_TRUEID = 0; K_short_MOTHER_ID = 0; K_short_GD_MOTHER_ID = 0; } bool isKshort(counters *counter){ if(TMath::Abs(K_short_TRUEID) != TRUEID.K_SHORT){ counter->K_short_VETO++; return false; } if(TMath::Abs(K_short_MOTHER_ID) != TRUEID.K_STAR_PLUS){ counter->MOTHER_ID_VETO++; return false; } if(TMath::Abs(K_short_GD_MOTHER_ID) != TRUEID.B_PLUS){ counter->GD_MOTHER_ID_VETO++; return false; } return true; } }; //TRUEID pi+ class pi_plus_IDs{ public: int pi_plus_TRUEID; int pi_plus_MOTHER_ID; int pi_plus_GD_MOTHER_ID; pi_plus_IDs(){ pi_plus_TRUEID = 0; pi_plus_MOTHER_ID = 0; pi_plus_GD_MOTHER_ID = 0; } ~pi_plus_IDs(){ pi_plus_TRUEID = 0; pi_plus_MOTHER_ID = 0; pi_plus_GD_MOTHER_ID = 0; } bool isPiPlus(counters *counter){ if(TMath::Abs(pi_plus_TRUEID) != TRUEID.PI_PLUS){ if(TMath::Abs(pi_plus_TRUEID) == TRUEID.MU_MINUS) counter->ReconstructedPionsWhichAreMuons++; counter->pi_plus_VETO++; return false; } if(TMath::Abs(pi_plus_MOTHER_ID) != TRUEID.K_STAR_PLUS){ counter->MOTHER_ID_VETO++; return false; } if(TMath::Abs(pi_plus_GD_MOTHER_ID) != TRUEID.B_PLUS){ counter->GD_MOTHER_ID_VETO++; return false; } return true; } }; //TRUEID pions coming from Ks class Ks_pi_IDs{ public: int Ks_pi_TRUEID; int Ks_pi_MOTHER_ID; int Ks_pi_GD_MOTHER_ID; int Ks_pi_GD_GD_MOTHER_ID; Ks_pi_IDs(){ Ks_pi_TRUEID = 0; Ks_pi_MOTHER_ID = 0; Ks_pi_GD_MOTHER_ID = 0; Ks_pi_GD_GD_MOTHER_ID = 0; } ~Ks_pi_IDs(){ Ks_pi_TRUEID = 0; Ks_pi_MOTHER_ID = 0; Ks_pi_GD_MOTHER_ID = 0; Ks_pi_GD_GD_MOTHER_ID = 0; } bool isKsPi(counters *counter){ if(TMath::Abs(Ks_pi_TRUEID) != TRUEID.PI_PLUS){ if(TMath::Abs(Ks_pi_TRUEID) == TRUEID.PI_ZERO)counter->Kshort_pi_zero_daughters++; if(TMath::Abs(Ks_pi_TRUEID) == TRUEID.MU_MINUS)counter->ReconstructedPionsWhichAreMuons++; counter->Ks_pi_VETO++; return false; } if(TMath::Abs(Ks_pi_MOTHER_ID) != TRUEID.K_SHORT){ counter->MOTHER_ID_VETO++; return false; } if(TMath::Abs(Ks_pi_GD_MOTHER_ID) != TRUEID.K_STAR_PLUS){ counter->GD_MOTHER_ID_VETO++; return false; } if(TMath::Abs(Ks_pi_GD_GD_MOTHER_ID) != TRUEID.B_PLUS){ counter->GD_GD_MOTHER_ID_VETO++; return false; } return true; } }; //TRUEID muon class mu_IDs{ public: int mu_TRUEID; int mu_MOTHER_ID; int mu_GD_MOTHER_ID; bool ReferenceChannel = false; mu_IDs(bool isRefChan){ mu_TRUEID = 0; mu_MOTHER_ID = 0; mu_GD_MOTHER_ID = 0; ReferenceChannel = isRefChan; } ~mu_IDs(){ mu_TRUEID = 0; mu_MOTHER_ID = 0; mu_GD_MOTHER_ID = 0; ReferenceChannel = 0; } bool isMu(counters *counter, bool mu_TM, bool J_psi_TM, bool B_plus_TM){//flags *allFlags){ if (mu_TM && TMath::Abs(mu_TRUEID) != TRUEID.MU_MINUS){ counter->mu_VETO++; return false; } if(ReferenceChannel){ if (J_psi_TM && TMath::Abs(mu_MOTHER_ID) != TRUEID.J_PSI){ counter->MOTHER_ID_VETO++; return false; } if(B_plus_TM && TMath::Abs(mu_GD_MOTHER_ID) != TRUEID.B_PLUS){ counter->GD_MOTHER_ID_VETO++; return false; } } else{ if(B_plus_TM && TMath::Abs(mu_MOTHER_ID) != TRUEID.B_PLUS){ counter->MOTHER_ID_VETO++; return false; } } return true; } }; //TRUEID J/psi class J_psi_IDs{ public: int J_psi_TRUEID; int J_psi_MOTHER_ID; int J_psi_GD_MOTHER_ID; bool ReferenceChannel = false; J_psi_IDs(bool isRefChan){ J_psi_TRUEID = 0; J_psi_MOTHER_ID = 0; J_psi_GD_MOTHER_ID = 0; ReferenceChannel = isRefChan; } ~J_psi_IDs(){ J_psi_TRUEID = 0; J_psi_MOTHER_ID = 0; J_psi_GD_MOTHER_ID = 0; ReferenceChannel = 0; } bool isJpsi(counters *counter, bool J_psi_TM, bool B_plus_TM){ if(ReferenceChannel){ if(J_psi_TM && TMath::Abs(J_psi_TRUEID) != TRUEID.J_PSI){ counter->J_psi_VETO++; return false; } if(B_plus_TM && TMath::Abs(J_psi_MOTHER_ID) != TRUEID.B_PLUS){ counter->MOTHER_ID_VETO++; return false; } } else{ if(J_psi_TM && TMath::Abs(J_psi_TRUEID) == TRUEID.J_PSI){ counter->J_psi_VETO++; return false; } } return true; } };