File indexing completed on 2026-10-15 08:20:37
0001 #ifndef CUTS_H
0002 #define CUTS_H
0003
0004 #include "binning.h"
0005
0006 struct CutSettings
0007 {
0008 std::string name = "";
0009 std::string mother_name = "";
0010 bool isData = false;
0011
0012 int track_1_min_MVTX_nHits = -1;
0013 int track_2_min_MVTX_nHits = -1;
0014 int track_1_min_INTT_nHits = -1;
0015 int track_2_min_INTT_nHits = -1;
0016 int track_1_min_TPC_nHits = -1;
0017 int track_2_min_TPC_nHits = -1;
0018
0019 float primary_vertex_max_z = FLT_MAX;
0020 float track_1_min_pT = -1.;
0021 float track_2_min_pT = -1.;
0022 float track_1_max_quality = FLT_MAX;
0023 float track_2_max_quality = FLT_MAX;
0024
0025 float track_1_PV_min_DCA_xy = -1.;
0026 float track_2_PV_min_DCA_xy = -1.;
0027 float track_1_track_2_max_DCA = FLT_MAX;
0028 float track_1_track_2_max_DCA_xy = FLT_MAX;
0029
0030 float min_DIRA = -FLT_MAX;
0031
0032 int max_background_order = 1;
0033 std::pair<float,float> left_sideband = {-FLT_MAX,FLT_MAX};
0034 std::pair<float,float> right_sideband = {-FLT_MAX,FLT_MAX};
0035
0036 std::string misc_cutstring = "";
0037 };
0038
0039 CutSettings add_misc_cutstring(const CutSettings& c, std::string newname, std::string newmisc_cutstring)
0040 {
0041 CutSettings copy = c;
0042 copy.name = newname;
0043 copy.misc_cutstring = newmisc_cutstring;
0044 return copy;
0045 }
0046
0047 std::string generate_fiducial_cuts(const std::string& particle_name,const std::vector<HistogramInfo> variables)
0048 {
0049 std::string cut;
0050 for(size_t i=0;i<variables.size();i++)
0051 {
0052 cut += particle_name+"_"+variables[i].name+">="+std::to_string(variables[i].bins.front())
0053 +" && "+particle_name+"_"+variables[i].name+"<="+std::to_string(variables[i].bins.back());
0054 if(i<variables.size()-1) cut += " && ";
0055 }
0056 return cut;
0057 }
0058
0059 std::string generate_selection_cutstring(const CutSettings& settings,const std::vector<HistogramInfo> variables)
0060 {
0061 std::string daughter_pt_cuts = "track_1_pT>"+std::to_string(settings.track_1_min_pT)+" && track_2_pT>"+std::to_string(settings.track_2_min_pT);
0062 std::string fiducial_cuts = generate_fiducial_cuts(settings.mother_name,variables);
0063
0064
0065 if(settings.isData)
0066 {
0067 std::string crossing_cuts = "track_1_bunch_crossing>0 && track_1_bunch_crossing<360 && track_2_bunch_crossing>0 && track_2_bunch_crossing<360";
0068 std::string full_cuts = crossing_cuts+" && "+daughter_pt_cuts+" && "+fiducial_cuts;
0069 if(!settings.misc_cutstring.empty()) full_cuts += " && "+settings.misc_cutstring;
0070 return full_cuts;
0071 }
0072
0073
0074 else
0075 {
0076 std::string MC_PVz_cut = "fabs(primary_vertex_z)<="+std::to_string(settings.primary_vertex_max_z);
0077
0078 std::string MC_nHits_cuts = "track_1_MVTX_nHits>"+std::to_string(settings.track_1_min_MVTX_nHits)
0079 +" && track_2_MVTX_nHits>"+std::to_string(settings.track_2_min_MVTX_nHits)
0080 +" && track_1_INTT_nHits>"+std::to_string(settings.track_1_min_INTT_nHits)
0081 +" && track_2_INTT_nHits>"+std::to_string(settings.track_2_min_INTT_nHits)
0082 +" && track_1_TPC_nHits>"+std::to_string(settings.track_1_min_TPC_nHits)
0083 +" && track_2_TPC_nHits>"+std::to_string(settings.track_2_min_TPC_nHits);
0084
0085 std::string MC_daughter_selection_cuts = "fabs(track_1_PV_DCA_xy)>="+std::to_string(settings.track_1_PV_min_DCA_xy)
0086 +" && fabs(track_2_PV_DCA_xy)>="+std::to_string(settings.track_2_PV_min_DCA_xy)
0087 +" && (track_1_chi2/track_1_nDoF)<="+std::to_string(settings.track_1_max_quality)
0088 +" && (track_2_chi2/track_2_nDoF)<="+std::to_string(settings.track_2_max_quality);
0089
0090 std::string MC_mother_selection_cuts = settings.mother_name+"_DIRA>="+std::to_string(settings.min_DIRA)
0091 +" && track_1_track_2_DCA_xy<="+std::to_string(settings.track_1_track_2_max_DCA_xy)
0092 +" && track_1_track_2_DCA<="+std::to_string(settings.track_1_track_2_max_DCA);
0093
0094 std::string full_cuts = daughter_pt_cuts+" && "+fiducial_cuts+" && "+MC_PVz_cut+" && "+MC_nHits_cuts+" && "+MC_daughter_selection_cuts+" && "+MC_mother_selection_cuts;
0095 if(!settings.misc_cutstring.empty()) full_cuts += " && "+settings.misc_cutstring;
0096 return full_cuts;
0097 }
0098 }
0099
0100 namespace StandardCuts
0101 {
0102
0103
0104 CutSettings data_K_S0_cuts =
0105 {
0106 .name = "data_K_S0_cuts",
0107 .mother_name = "K_S0",
0108 .isData = true,
0109 .track_1_min_pT = 0.2,
0110 .track_2_min_pT = 0.2,
0111
0112 .max_background_order = 6,
0113 .left_sideband = {0.4,0.42},
0114 .right_sideband = {0.58,0.64}
0115 };
0116 CutSettings data_Lambda0_cuts =
0117 {
0118 .name = "data_Lambda0_cuts",
0119 .mother_name = "Lambda0",
0120 .isData = true,
0121 .track_1_min_pT = 0.2,
0122 .track_2_min_pT = 0.2,
0123
0124 .max_background_order = 6,
0125 .left_sideband = {1.09,1.105},
0126 .right_sideband = {1.13,1.18}
0127 };
0128
0129
0130 CutSettings data_Lambda0_pos_cuts = add_misc_cutstring(data_Lambda0_cuts,"data_Lambda0_pos_cuts","track_1_charge==-1 && track_2_charge==1");
0131
0132
0133 CutSettings data_Lambda0_neg_cuts = add_misc_cutstring(data_Lambda0_cuts,"data_Lambda0_neg_cuts","track_1_charge==1 && track_2_charge==-1");
0134
0135
0136 CutSettings MC_K_S0_cuts =
0137 {
0138 .name = "MC_K_S0_cuts",
0139 .mother_name = "K_S0",
0140 .isData = false,
0141
0142 .track_1_min_MVTX_nHits = 0,
0143 .track_2_min_MVTX_nHits = 0,
0144 .track_1_min_INTT_nHits = 0,
0145 .track_2_min_INTT_nHits = 0,
0146 .track_1_min_TPC_nHits = 19,
0147 .track_2_min_TPC_nHits = 19,
0148
0149 .primary_vertex_max_z = 10.,
0150 .track_1_min_pT = 0.2,
0151 .track_2_min_pT = 0.2,
0152 .track_1_max_quality = 300.,
0153 .track_2_max_quality = 300.,
0154
0155 .track_1_PV_min_DCA_xy = 0.01,
0156 .track_2_PV_min_DCA_xy = 0.01,
0157 .track_1_track_2_max_DCA = 0.75,
0158 .track_1_track_2_max_DCA_xy = 1.25,
0159
0160 .min_DIRA = 0.98,
0161
0162 .max_background_order = 8,
0163 .left_sideband = {0.42,0.46},
0164 .right_sideband = {0.52,0.58}
0165 };
0166
0167 CutSettings MC_Lambda0_cuts =
0168 {
0169 .name = "MC_Lambda0_cuts",
0170 .mother_name = "Lambda0",
0171 .isData = false,
0172
0173 .track_1_min_MVTX_nHits = 0,
0174 .track_2_min_MVTX_nHits = 0,
0175 .track_1_min_INTT_nHits = 0,
0176 .track_2_min_INTT_nHits = 0,
0177 .track_1_min_TPC_nHits = 19,
0178 .track_2_min_TPC_nHits = 19,
0179
0180 .primary_vertex_max_z = 10.,
0181 .track_1_min_pT = 0.2,
0182 .track_2_min_pT = 0.2,
0183 .track_1_max_quality = 300.,
0184 .track_2_max_quality = 300.,
0185
0186 .track_1_PV_min_DCA_xy = 0.01,
0187 .track_2_PV_min_DCA_xy = 0.01,
0188 .track_1_track_2_max_DCA = 0.75,
0189 .track_1_track_2_max_DCA_xy = 1.25,
0190
0191 .min_DIRA = 0.98,
0192
0193 .max_background_order = 8,
0194 .left_sideband = {1.1,1.105},
0195 .right_sideband = {1.125,1.14}
0196 };
0197
0198
0199 CutSettings MC_Lambda0_pos_cuts = add_misc_cutstring(MC_Lambda0_cuts,"MC_Lambda0_pos_cuts","track_1_charge==-1 && track_2_charge==1");
0200
0201
0202 CutSettings MC_Lambda0_neg_cuts = add_misc_cutstring(MC_Lambda0_cuts,"MC_Lambda0_neg_cuts","track_1_charge==1 && track_2_charge==-1");
0203
0204 }
0205
0206 #endif