Angular analysis of B+->K*+(K+pi0)mumu
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

518 lines
14 KiB

//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;
}
};