Back to home page

sPhenix code displayed by LXR

 
 

    


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 // todo : if the centrality bin or the eta and z regions are changed, modify the "ana_map_v1.h" first,
0008 // todo : and change the following "namespace" name
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     // cout<<"test_0"<<endl;
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