File indexing completed on 2025-08-06 08:12:27
0001 #ifndef INTTCluUpdate_h
0002 #define INTTCluUpdate_h
0003
0004 #include "INTTEta.h"
0005 #include "ana_map_folder/ana_map_v1.h"
0006
0007
0008
0009 namespace ana_map_version = ANA_MAP_V3;
0010
0011 class INTTCluUpdate : public INTTEta
0012 {
0013 public:
0014 INTTCluUpdate(
0015 string run_type,
0016 string out_folder_directory,
0017 pair<double,double> beam_origin,
0018 pair<double,double> selected_Z_range_in,
0019 int geo_mode_id,
0020 double phi_diff_cut = 0.11,
0021 pair<double, double> DCA_cut = {-1,1},
0022 int N_clu_cutl = 20,
0023 int N_clu_cut = 10000,
0024 bool draw_event_display = true,
0025 double peek = 3.32405,
0026 double angle_diff_new_l = 0.0,
0027 double angle_diff_new_r = 3,
0028 bool print_message_opt = true
0029 ):
0030 INTTEta(
0031 run_type,
0032 out_folder_directory,
0033 beam_origin,
0034 geo_mode_id,
0035 phi_diff_cut,
0036 DCA_cut,
0037 N_clu_cutl,
0038 N_clu_cut,
0039 draw_event_display,
0040 peek,
0041 angle_diff_new_l,
0042 angle_diff_new_r,
0043 print_message_opt),
0044 selected_Z_range(selected_Z_range_in)
0045 {
0046 out_clu_X.clear();
0047 out_clu_Y.clear();
0048 out_clu_Z.clear();
0049 out_clu_eta.clear();
0050 out_clu_phi.clear();
0051 out_clu_R.clear();
0052 out_clu_layer.clear();
0053 out_clu_ladder.clear();
0054 out_clu_ZID.clear();
0055 out_clu_phi_size.clear();
0056 out_clu_z_size.clear();
0057
0058 InitTFileOut();
0059 InitHist();
0060 }
0061
0062 void ProcessEvt(
0063 int event_i,
0064 vector<clu_info> temp_sPH_inner_nocolumn_vec,
0065 vector<clu_info> temp_sPH_outer_nocolumn_vec,
0066 vector<vector<double>> temp_sPH_nocolumn_vec,
0067 vector<vector<double>> temp_sPH_nocolumn_rz_vec,
0068 int NvtxMC,
0069 vector<double> TrigvtxMC,
0070 bool PhiCheckTag,
0071 Long64_t bco_full,
0072 pair<double,double> evt_z,
0073 int centrality_bin,
0074 vector<vector<float>> true_track_info,
0075 double zvtx_weighting
0076 ) override;
0077
0078 void ClearEvt() override;
0079 void EndRun() override;
0080
0081 protected:
0082 void InitTFileOut();
0083 void InitTTreeOut();
0084 void InitHist();
0085
0086 pair<double,double> selected_Z_range;
0087
0088 int inner_NClu;
0089 int outer_NClu;
0090
0091
0092 TFile * file_out;
0093 TTree * tree_out;
0094 vector<double> out_clu_X;
0095 vector<double> out_clu_Y;
0096 vector<double> out_clu_Z;
0097 vector<double> out_clu_eta;
0098 vector<double> out_clu_phi;
0099 vector<double> out_clu_R;
0100 vector<int> out_clu_layer;
0101 vector<int> out_clu_ladder;
0102 vector<int> out_clu_ZID;
0103 vector<int> out_clu_phi_size;
0104 vector<int> out_clu_z_size;
0105 int out_NClus;
0106 double out_reco_INTT_Z;
0107 double out_reco_MBD_Z;
0108 double out_true_Z;
0109 int out_NvtxMC;
0110 bool out_PhiCheckTag;
0111 Long64_t out_bco_full;
0112 float out_centrality_float;
0113 int out_is_min_bias;
0114 int out_is_min_bias_wozdc;
0115 double out_MBD_north_charge_sum;
0116 double out_MBD_south_charge_sum;
0117
0118 TH1F * exclusive_NClus_inner;
0119 TH1F * exclusive_NClus_outer;
0120 TH1F * exclusive_NClus_sum;
0121
0122 TH1F * exclusive_cluster_inner_adc;
0123 TH1F * exclusive_cluster_outer_adc;
0124
0125 TH2F * exclusive_cluster_inner_eta_adc_2D;
0126 TH2F * exclusive_cluster_outer_eta_adc_2D;
0127 TH2F * exclusive_cluster_inner_eta_phi_2D;
0128 TH2F * exclusive_cluster_outer_eta_phi_2D;
0129
0130 TH1F * exclusive_cluster_inner_eta;
0131 TH1F * exclusive_cluster_inner_phi;
0132 TH1F * exclusive_cluster_outer_eta;
0133 TH1F * exclusive_cluster_outer_phi;
0134 TH1F * exclusive_cluster_all_eta;
0135 TH1F * exclusive_cluster_all_phi;
0136 };
0137
0138 void INTTCluUpdate::InitTFileOut()
0139 {
0140 file_out = new TFile((out_folder_directory + "/INTTCluDist.root").c_str(), "RECREATE");
0141 }
0142
0143 void INTTCluUpdate::InitTTreeOut()
0144 {
0145 tree_out = new TTree("EventTree", "EventTree");
0146
0147 tree_out -> Branch("NClus", &out_NClus);
0148
0149 tree_out -> Branch("clu_X", &out_clu_X);
0150 tree_out -> Branch("clu_Y", &out_clu_Y);
0151 tree_out -> Branch("clu_Z", &out_clu_Z);
0152 tree_out -> Branch("clu_eta", &out_clu_eta);
0153 tree_out -> Branch("clu_phi", &out_clu_phi);
0154 tree_out -> Branch("clu_R", &out_clu_R);
0155 tree_out -> Branch("clu_layer", &out_clu_layer);
0156 tree_out -> Branch("clu_ladder", &out_clu_ladder);
0157 tree_out -> Branch("clu_ZID", &out_clu_ZID);
0158 tree_out -> Branch("clu_phi_size", &out_clu_phi_size);
0159 tree_out -> Branch("clu_z_size", &out_clu_z_size);
0160
0161 tree_out -> Branch("reco_INTT_Z", &out_reco_INTT_Z);
0162 tree_out -> Branch("reco_MBD_Z", &out_reco_MBD_Z);
0163 tree_out -> Branch("true_Z", &out_true_Z);
0164 tree_out -> Branch("NvtxMC", &out_NvtxMC);
0165 tree_out -> Branch("PhiCheckTag", &out_PhiCheckTag);
0166 tree_out -> Branch("bco_full", &out_bco_full);
0167 tree_out -> Branch("centrality_float", &out_centrality_float);
0168 tree_out -> Branch("is_min_bias", &out_is_min_bias);
0169 tree_out -> Branch("is_min_bias_wozdc", &out_is_min_bias_wozdc);
0170 tree_out -> Branch("MBD_north_charge_sum", &out_MBD_north_charge_sum);
0171 tree_out -> Branch("MBD_south_charge_sum", &out_MBD_south_charge_sum);
0172 }
0173
0174 void INTTCluUpdate::InitHist()
0175 {
0176 exclusive_NClus_inner = new TH1F("","exclusive_NClus_inner;NClus inner barrel;Entry",50, 0, 5000);
0177 exclusive_NClus_outer = new TH1F("","exclusive_NClus_outer;NClus outer barrel;Entry",50,0,5000);
0178 exclusive_NClus_sum = new TH1F("","exclusive_NClus_sum;NClus total;Entry",50,0,9000);
0179
0180 exclusive_cluster_inner_eta = new TH1F("","exclusive_cluster_inner_eta;Cluster inner #eta;Entry",50,-3.5,3.5);
0181 exclusive_cluster_inner_phi = new TH1F("","exclusive_cluster_inner_phi;Cluster inner #phi [radian];Entry",50,-3.5,3.5);
0182 exclusive_cluster_outer_eta = new TH1F("","exclusive_cluster_outer_eta;Cluster outer #eta;Entry",50,-3.5,3.5);
0183 exclusive_cluster_outer_phi = new TH1F("","exclusive_cluster_outer_phi;Cluster outer #phi [radian];Entry",50,-3.5,3.5);
0184 exclusive_cluster_all_eta = new TH1F("","exclusive_cluster_all_eta;Cluster #eta;Entry",50,-3.5,3.5);
0185 exclusive_cluster_all_phi = new TH1F("","exclusive_cluster_all_phi;Cluster #phi [radian];Entry",50,-3.5,3.5);
0186
0187 exclusive_cluster_inner_adc = new TH1F("","exclusive_cluster_inner_adc;Cluster inner adc;Entry",50,0,400);
0188 exclusive_cluster_outer_adc = new TH1F("","exclusive_cluster_outer_adc;Cluster outer adc;Entry",50,0,400);
0189
0190 exclusive_cluster_inner_eta_adc_2D = new TH2F("","exclusive_cluster_inner_eta_adc_2D;Cluster inner #eta; Cluster ADC",
0191 2000, exclusive_cluster_inner_eta -> GetXaxis() -> GetXmin(), exclusive_cluster_inner_eta -> GetXaxis() -> GetXmax(),
0192 exclusive_cluster_inner_adc -> GetNbinsX(), exclusive_cluster_inner_adc -> GetXaxis() -> GetXmin(), exclusive_cluster_inner_adc -> GetXaxis() -> GetXmax()
0193 );
0194
0195 exclusive_cluster_outer_eta_adc_2D = new TH2F("","exclusive_cluster_outer_eta_adc_2D;Cluster outer #eta; Cluster ADC",
0196 2000, exclusive_cluster_outer_eta -> GetXaxis() -> GetXmin(), exclusive_cluster_outer_eta -> GetXaxis() -> GetXmax(),
0197 exclusive_cluster_outer_adc -> GetNbinsX(), exclusive_cluster_outer_adc -> GetXaxis() -> GetXmin(), exclusive_cluster_outer_adc -> GetXaxis() -> GetXmax()
0198 );
0199
0200 exclusive_cluster_inner_eta_phi_2D = new TH2F(
0201 "",
0202 "exclusive_cluster_inner_eta_phi_2D;Cluster inner #eta; Cluster inner #phi",
0203 2000, exclusive_cluster_inner_eta -> GetXaxis() -> GetXmin(), exclusive_cluster_inner_eta -> GetXaxis() -> GetXmax(),
0204 2000, exclusive_cluster_inner_phi -> GetXaxis() -> GetXmin(), exclusive_cluster_inner_phi -> GetXaxis() -> GetXmax()
0205 );
0206 exclusive_cluster_outer_eta_phi_2D = new TH2F(
0207 "",
0208 "exclusive_cluster_outer_eta_phi_2D;Cluster outer #eta; Cluster outer #phi",
0209 2000, exclusive_cluster_outer_eta -> GetXaxis() -> GetXmin(), exclusive_cluster_outer_eta -> GetXaxis() -> GetXmax(),
0210 2000, exclusive_cluster_outer_phi -> GetXaxis() -> GetXmin(), exclusive_cluster_outer_phi -> GetXaxis() -> GetXmax()
0211 );
0212 }
0213
0214 void INTTCluUpdate::ProcessEvt(
0215 int event_i,
0216 vector<clu_info> temp_sPH_inner_nocolumn_vec,
0217 vector<clu_info> temp_sPH_outer_nocolumn_vec,
0218 vector<vector<double>> temp_sPH_nocolumn_vec,
0219 vector<vector<double>> temp_sPH_nocolumn_rz_vec,
0220 int NvtxMC,
0221 vector<double> TrigvtxMC,
0222 bool PhiCheckTag,
0223 Long64_t bco_full,
0224 pair<double,double> evt_z,
0225 int centrality_bin,
0226 vector<vector<float>> true_track_info,
0227 double zvtx_weighting = 1.0
0228 )
0229 {
0230 return_tag = 0;
0231
0232 if (event_i%100 == 0) {cout<<"In INTTEta class, running event : "<<event_i<<endl;}
0233
0234 inner_NClu = temp_sPH_inner_nocolumn_vec.size();
0235 outer_NClu = temp_sPH_outer_nocolumn_vec.size();
0236 total_NClus = inner_NClu + outer_NClu;
0237
0238
0239 if (total_NClus < zvtx_cal_require) {return; cout<<"return confirmation"<<endl;}
0240
0241 if (run_type == "MC" && NvtxMC != 1) { return; cout<<"In INTTEta class, event : "<<event_i<<" Nvtx : "<<NvtxMC<<" Nvtx more than one "<<endl;}
0242 if (PhiCheckTag == false) { return; cout<<"In INTTEta class, event : "<<event_i<<" Nvtx : "<<NvtxMC<<" Not full phi has hits "<<endl;}
0243
0244 if (inner_NClu < 10 || outer_NClu < 10 || total_NClus > N_clu_cut || total_NClus < N_clu_cutl)
0245 {
0246 return;
0247 printf("In INTTEta class, event : %i, low clu continue, NClus : %lu \n", event_i, total_NClus);
0248 }
0249
0250 if (evt_z.first < selected_Z_range.first || evt_z.first > selected_Z_range.second) {return;}
0251
0252 exclusive_NClus_inner -> Fill(inner_NClu, zvtx_weighting);
0253 exclusive_NClus_outer -> Fill(outer_NClu, zvtx_weighting);
0254 exclusive_NClus_sum -> Fill(total_NClus, zvtx_weighting);
0255
0256 for (int inner_i = 0; inner_i < temp_sPH_inner_nocolumn_vec.size(); inner_i++) {
0257 double Clus_InnerPhi_Offset_radian = atan2(temp_sPH_inner_nocolumn_vec[inner_i].y - beam_origin.second, temp_sPH_inner_nocolumn_vec[inner_i].x - beam_origin.first);
0258
0259 double clu_eta = get_clu_eta({beam_origin.first, beam_origin.second, evt_z.first},{temp_sPH_inner_nocolumn_vec[inner_i].x, temp_sPH_inner_nocolumn_vec[inner_i].y, temp_sPH_inner_nocolumn_vec[inner_i].z});
0260
0261 exclusive_cluster_inner_eta -> Fill(clu_eta, zvtx_weighting);
0262 exclusive_cluster_inner_phi -> Fill(Clus_InnerPhi_Offset_radian, zvtx_weighting);
0263
0264 exclusive_cluster_inner_eta_phi_2D -> Fill(clu_eta, Clus_InnerPhi_Offset_radian, zvtx_weighting);
0265
0266 exclusive_cluster_inner_eta_adc_2D -> Fill(clu_eta, temp_sPH_inner_nocolumn_vec[inner_i].sum_adc, zvtx_weighting);
0267
0268 exclusive_cluster_all_eta -> Fill(clu_eta, zvtx_weighting);
0269 exclusive_cluster_all_phi -> Fill(Clus_InnerPhi_Offset_radian, zvtx_weighting);
0270
0271 exclusive_cluster_inner_adc -> Fill(temp_sPH_inner_nocolumn_vec[inner_i].sum_adc, zvtx_weighting);
0272 }
0273 for (int outer_i = 0; outer_i < temp_sPH_outer_nocolumn_vec.size(); outer_i++) {
0274 double Clus_OuterPhi_Offset_radian = atan2(temp_sPH_outer_nocolumn_vec[outer_i].y - beam_origin.second, temp_sPH_outer_nocolumn_vec[outer_i].x - beam_origin.first);
0275
0276 double clu_eta = get_clu_eta({beam_origin.first, beam_origin.second, evt_z.first},{temp_sPH_outer_nocolumn_vec[outer_i].x, temp_sPH_outer_nocolumn_vec[outer_i].y, temp_sPH_outer_nocolumn_vec[outer_i].z});
0277
0278 exclusive_cluster_outer_eta -> Fill(clu_eta, zvtx_weighting);
0279 exclusive_cluster_outer_phi -> Fill(Clus_OuterPhi_Offset_radian, zvtx_weighting);
0280
0281 exclusive_cluster_outer_eta_phi_2D -> Fill(clu_eta, Clus_OuterPhi_Offset_radian, zvtx_weighting);
0282
0283 exclusive_cluster_outer_eta_adc_2D -> Fill(clu_eta, temp_sPH_outer_nocolumn_vec[outer_i].sum_adc, zvtx_weighting);
0284
0285 exclusive_cluster_all_eta -> Fill(clu_eta, zvtx_weighting);
0286 exclusive_cluster_all_phi -> Fill(Clus_OuterPhi_Offset_radian, zvtx_weighting);
0287
0288 exclusive_cluster_outer_adc -> Fill(temp_sPH_outer_nocolumn_vec[outer_i].sum_adc, zvtx_weighting);
0289 }
0290
0291 return_tag = 1;
0292 }
0293
0294 void INTTCluUpdate::ClearEvt()
0295 {
0296 return;
0297 }
0298
0299 void INTTCluUpdate::EndRun()
0300 {
0301 out_file -> cd();
0302
0303 exclusive_NClus_inner -> Write("exclusive_NClus_inner");
0304 exclusive_NClus_outer -> Write("exclusive_NClus_outer");
0305 exclusive_NClus_sum -> Write("exclusive_NClus_sum");
0306 exclusive_cluster_inner_adc -> Write("exclusive_cluster_inner_adc");
0307 exclusive_cluster_outer_adc -> Write("exclusive_cluster_outer_adc");
0308 exclusive_cluster_inner_eta_adc_2D -> Write("exclusive_cluster_inner_eta_adc_2D");
0309 exclusive_cluster_outer_eta_adc_2D -> Write("exclusive_cluster_outer_eta_adc_2D");
0310 exclusive_cluster_inner_eta_phi_2D -> Write("exclusive_cluster_inner_eta_phi_2D");
0311 exclusive_cluster_outer_eta_phi_2D -> Write("exclusive_cluster_outer_eta_phi_2D");
0312 exclusive_cluster_inner_eta -> Write("exclusive_cluster_inner_eta");
0313 exclusive_cluster_inner_phi -> Write("exclusive_cluster_inner_phi");
0314 exclusive_cluster_outer_eta -> Write("exclusive_cluster_outer_eta");
0315 exclusive_cluster_outer_phi -> Write("exclusive_cluster_outer_phi");
0316 exclusive_cluster_all_eta -> Write("exclusive_cluster_all_eta");
0317 exclusive_cluster_all_phi -> Write("exclusive_cluster_all_phi");
0318
0319 out_file -> Close();
0320 std::cout<<"End of INTTCluUpdate"<<std::endl;
0321 }
0322
0323
0324 #endif