Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-08-05 08:11:54

0001 // #include "DAC_Scan_ladder.h"
0002 //#include "InttConversion.h"
0003 #include "/sphenix/user/ChengWei/INTT/INTT_commissioning/INTT_CW/INTT_commissioning/DAC_Scan/InttClustering.h"
0004 #include "sigmaEff.h"
0005 #include "sPhenixStyle.C"
0006 
0007 // todo : the number of number is given by the adc_setting_run !!!
0008 // todo : also the range of the hist.
0009 // todo : the adc follows the following convention
0010 // todo : 1. the increment has to be 4
0011 // todo : remember to check the "adc_conv"
0012 // vector<vector<int>> adc_setting_run = {  
0013 //     // {8  , 12 , 16 , 20 , 24 , 28 , 32 , 36 },
0014 //     // {28 , 32 , 36 , 40 , 44 , 48 , 52 , 56 },
0015 //     {48 , 52 , 56 , 60 , 64 , 68 , 72 , 76 }, // note : 3
0016 //     {68 , 72 , 76 , 80 , 84 , 88 , 92 , 96 }, // note : 4
0017 //     {88 , 92 , 96 , 100, 104, 108, 112, 116}, // note : 5
0018 //     {108, 112, 116, 120, 124, 128, 132, 136}, // note : 6
0019 //     {128, 132, 136, 140, 144, 148, 152, 156}, // note : 7
0020 //     // {148, 152, 156, 160, 164, 168, 172, 176},
0021 //     // {168, 172, 176, 180, 184, 188, 192, 196},
0022 //     // {188, 192, 196, 200, 204, 208, 212, 216}
0023 // };
0024 
0025 vector<vector<int>> adc_setting_run = { 
0026     {15, 30, 60, 90, 120, 150, 180, 210, 240}
0027     // {15, 30, 50, 70, 90, 110, 130, 150,170}
0028     // {8  , 12 , 16 , 20 , 24 , 28 , 32 , 36 },
0029     // {28 , 32 , 36 , 40 , 44 , 48 , 52 , 56 },
0030     // {48 , 52 , 56 , 60 , 64 , 68 , 72 , 76 }, // note : 3
0031     // {68 , 72 , 76 , 80 , 84 , 88 , 92 , 96 }, // note : 4
0032     // {88 , 92 , 96 , 100, 104, 108, 112, 116}, // note : 5
0033     // {108, 112, 116, 120, 124, 128, 132, 136}, // note : 6
0034     // {128, 132, 136, 140, 144, 148, 152, 156}, // note : 7
0035     // {148, 152, 156, 160, 164, 168, 172, 176},
0036     // {168, 172, 176, 180, 184, 188, 192, 196},
0037     // {188, 192, 196, 200, 204, 208, 212, 216}
0038 };
0039 
0040 TString color_code_2[8] = {"#CC768D","#19768D","#DDA573","#009193","#6E9193","#941100","#A08144","#517E66"};
0041 
0042 struct full_hit_info {
0043     int FC;
0044     int chip_id;
0045     int chan_id;
0046     int adc;
0047 };
0048 
0049 
0050 struct ladder_info {
0051     int FC;
0052     TString Port;
0053     int ROC;
0054     int Direction; // note : 0 : south, 1 : north 
0055 };
0056 
0057 double get_radius(double x, double y)
0058 {
0059     return sqrt(pow(x,2)+pow(y,2));
0060 }
0061 
0062 double get_radius_sign(double x, double y)
0063 {
0064     double phi = ((y) < 0) ? atan2((y),(x)) * (180./TMath::Pi()) + 360 : atan2((y),(x)) * (180./TMath::Pi());
0065     
0066     return (phi > 180) ? sqrt(pow(x,2)+pow(y,2)) * -1 : sqrt(pow(x,2)+pow(y,2)); 
0067 }
0068 
0069 void Characterize_Pad (TPad *pad, float left = 0.15, float right = 0.1, float top = 0.1, float bottom = 0.12, bool set_logY = false, int setgrid_bool = 0)
0070 {
0071     if (setgrid_bool == true) {pad -> SetGrid (1, 1);}
0072     pad -> SetLeftMargin   (left);
0073     pad -> SetRightMargin  (right);
0074     pad -> SetTopMargin    (top);
0075     pad -> SetBottomMargin (bottom);
0076     pad -> SetTicks(1,1);
0077     if (set_logY == true)
0078     {
0079         pad -> SetLogy (1);
0080     }
0081     
0082 }
0083 
0084 std::vector<double> calculateDistanceAndClosestPoint(double x1, double y1, double x2, double y2, double target_x, double target_y) {
0085     
0086     if (x1 != x2)
0087     {
0088         // Calculate the slope and intercept of the line passing through (x1, y1) and (x2, y2)
0089         double a = (y2 - y1) / (x2 - x1);
0090         double b = y1 - a * x1;
0091 
0092         // cout<<"slope : y="<<a<<"x+"<<b<<endl;
0093         
0094         // Calculate the closest distance from (target_x, target_y) to the line y = ax + b
0095         double closest_distance = std::abs(a * target_x - target_y + b) / std::sqrt(a * a + 1);
0096 
0097         // Calculate the coordinates of the closest point (Xc, Yc) on the line y = ax + b
0098         double Xc = (target_x + a * target_y - a * b) / (a * a + 1);
0099         double Yc = a * Xc + b;
0100 
0101         return { closest_distance, Xc, Yc };
0102     }
0103     else 
0104     {
0105         double closest_distance = std::abs(x1 - target_x);
0106         double Xc = x1;
0107         double Yc = target_y;
0108 
0109         return { closest_distance, Xc, Yc };
0110     }
0111     
0112     
0113 }
0114 
0115 double get_z_vertex(clu_info inner_clu, clu_info outer_clu, double target_x, double target_y)
0116 {
0117     // note : x = z, 
0118     // note : y = radius
0119     double inner_clu_r = sqrt(pow(inner_clu.x,2)+ pow(inner_clu.y,2));
0120     double outer_clu_r = sqrt(pow(outer_clu.x,2)+ pow(outer_clu.y,2));
0121     double target_r    = sqrt(pow(target_x,2)   + pow(target_y,2));
0122 
0123     // Use the slope equation (y = ax + b) to calculate the x-coordinate for the target y
0124     if ( fabs(outer_clu.z - inner_clu.z) < 0.00001 ){
0125         return outer_clu.z;
0126     }
0127     else {
0128         double slope = (outer_clu_r - inner_clu_r) / (outer_clu.z - inner_clu.z);
0129         double yIntercept = inner_clu_r - slope * inner_clu.z;
0130         double xCoordinate = (target_r - yIntercept) / slope;
0131         return xCoordinate;
0132     }
0133     
0134 }
0135 
0136 // Function to calculate the angle between two vectors in degrees using the cross product
0137 double calculateAngleBetweenVectors(double x1, double y1, double x2, double y2, double targetX, double targetY) {
0138     // Calculate the vectors vector_1 (point_1 to point_2) and vector_2 (point_1 to target)
0139     double vector1X = x2 - x1;
0140     double vector1Y = y2 - y1;
0141 
0142     double vector2X = targetX - x1;
0143     double vector2Y = targetY - y1;
0144 
0145     // Calculate the cross product of vector_1 and vector_2 (z-component)
0146     double crossProduct = vector1X * vector2Y - vector1Y * vector2X;
0147     
0148     // cout<<" crossProduct : "<<crossProduct<<endl;
0149 
0150     // Calculate the magnitudes of vector_1 and vector_2
0151     double magnitude1 = std::sqrt(vector1X * vector1X + vector1Y * vector1Y);
0152     double magnitude2 = std::sqrt(vector2X * vector2X + vector2Y * vector2Y);
0153 
0154     // Calculate the angle in radians using the inverse tangent of the cross product and dot product
0155     double dotProduct = vector1X * vector2X + vector1Y * vector2Y;
0156 
0157     double angleInRadians = std::atan2(std::abs(crossProduct), dotProduct);
0158     // Convert the angle from radians to degrees and return it
0159     double angleInDegrees = angleInRadians * 180.0 / M_PI;
0160     
0161     double angleInRadians_new = std::asin( crossProduct/(magnitude1*magnitude2) );
0162     double angleInDegrees_new = angleInRadians_new * 180.0 / M_PI;
0163     
0164     // cout<<"angle : "<<angleInDegrees_new<<endl;
0165 
0166     double DCA_distance = sin(angleInRadians_new) * magnitude2;
0167 
0168     return DCA_distance;
0169 }
0170 
0171 void temp_bkg(TPad * c1, string conversion_mode, double peek, pair<double,double> beam_origin)
0172 {
0173     c1 -> cd();
0174 
0175     int N_ladder[4] = {12, 12, 16, 16};
0176     string ladder_index_string[16] = {"00","01","02","03","04","05","06","07","08","09","10","11","12","13","14","15"};
0177 
0178     vector<double> x_vec; x_vec.clear();
0179     vector<double> y_vec; y_vec.clear();
0180 
0181     vector<double> x_vec_2; x_vec_2.clear();
0182     vector<double> y_vec_2; y_vec_2.clear();
0183 
0184     TGraph * bkg = new TGraph();
0185     bkg -> SetTitle("INTT event display X-Y plane");
0186     bkg -> SetMarkerStyle(20);
0187     bkg -> SetMarkerSize(0.1);
0188     bkg -> SetPoint(0,0,0);
0189     bkg -> SetPoint(1,beam_origin.first,beam_origin.second);
0190     bkg -> GetXaxis() -> SetLimits(-150,150);
0191     bkg -> GetYaxis() -> SetRangeUser(-150,150);
0192     bkg -> GetXaxis() -> SetTitle("X [mm]");
0193     bkg -> GetYaxis() -> SetTitle("Y [mm]");
0194     
0195     bkg -> Draw("ap");
0196 
0197     TLine * ladder_line = new TLine();
0198     ladder_line -> SetLineWidth(1);
0199 
0200     for (int server_i = 0; server_i < 4; server_i++)
0201     {
0202         for (int FC_i = 0; FC_i < 14; FC_i++)
0203         {
0204             ladder_line -> DrawLine(
0205                 InttConversion::Get_XY_all(Form("intt%i",server_i),FC_i,14,0,conversion_mode,peek).x, InttConversion::Get_XY_all(Form("intt%i",server_i),FC_i,14,0,conversion_mode,peek).y,
0206                 InttConversion::Get_XY_all(Form("intt%i",server_i),FC_i,1,0,conversion_mode,peek).x, InttConversion::Get_XY_all(Form("intt%i",server_i),FC_i,1,0,conversion_mode,peek).y
0207             );
0208         }
0209     }
0210     
0211     ladder_line -> Draw("l same");
0212 
0213 }
0214 
0215 double grEY_stddev (TGraphErrors * input_grr)
0216 {
0217     vector<double> input_vector; input_vector.clear();
0218     for (int i = 0; i < input_grr -> GetN(); i++)
0219     {  
0220         input_vector.push_back( input_grr -> GetPointY(i) );
0221     }
0222 
0223     double sum=0;
0224     double average;
0225     double sum_subt = 0;
0226     for (int i=0; i<input_vector.size(); i++)
0227         {
0228             sum+=input_vector[i];
0229 
0230         }
0231     average=sum/input_vector.size();
0232     //cout<<"average is : "<<average<<endl;
0233 
0234     for (int i=0; i<input_vector.size(); i++)
0235         {
0236             //cout<<input_vector[i]-average<<endl;
0237             sum_subt+=pow((input_vector[i]-average),2);
0238 
0239         }
0240     //cout<<"sum_subt : "<<sum_subt<<endl;
0241     double stddev;
0242     stddev=sqrt(sum_subt/(input_vector.size()-1));  
0243     return stddev;
0244 }   
0245 
0246 pair<double, double> mirrorPolynomial(double a, double b) {
0247     // Interchange 'x' and 'y'
0248     double mirroredA = 1.0 / a;
0249     double mirroredB = -b / a;
0250 
0251     return {mirroredA, mirroredB};
0252 }
0253 
0254 // note : vector : {r,z}
0255 // note : p0 : vertex point {r,z,zerror}
0256 // note : p1 : inner layer
0257 // note : p2 : outer layer
0258 double Get_eta(vector<double>p0, vector<double>p1, vector<double>p2)
0259 {
0260     vector<double> r_vec  = {p0[0], p1[0], p2[0]}; 
0261     vector<double> z_vec  = {p0[1], p1[1], p2[1]}; 
0262     vector<double> re_vec = {0, 0, 0}; 
0263     vector<double> ze_vec = {p0[2], ( fabs( p1[1] ) < 130 ) ? 8. : 10., ( fabs( p2[1] ) < 130 ) ? 8. : 10.}; 
0264 
0265     // note : swap the r and z, to have easier fitting 
0266     // note : in principle, Z should be in the x axis, R should be in the Y axis
0267     TGraphErrors * track_gr = new TGraphErrors(3,&r_vec[0],&z_vec[0],&re_vec[0],&ze_vec[0]);    
0268     
0269     double vertical_line = ( fabs( grEY_stddev(track_gr) ) < 0.00001 ) ? 1 : 0;
0270     
0271     if (vertical_line) {return 0;}
0272     else 
0273     {
0274         TF1 * fit_rz = new TF1("fit_rz","pol1",-500,500);
0275         fit_rz -> SetParameters(0,0);
0276 
0277         track_gr -> Fit(fit_rz,"NQ");
0278 
0279         pair<double,double> ax_b = mirrorPolynomial(fit_rz -> GetParameter(1),fit_rz -> GetParameter(0));
0280 
0281         return  -1 * TMath::Log( fabs( tan( atan2(ax_b.first, (ax_b.first > 0) ? 1. : -1. ) / 2 ) ) );
0282 
0283     }
0284 
0285 }
0286 
0287 // note : vector : {r,z}
0288 // note : p0 : vertex point {r,z,zerror}
0289 // note : p1 : another point from detector
0290 // note : since only two points -> no strip width considered
0291 double Get_eta_2P(vector<double>p0, vector<double>p1)
0292 {
0293     // vector<double> r_vec  = {p0[0], p1[0]}; 
0294     // vector<double> z_vec  = {p0[1], p1[1]}; 
0295     // vector<double> re_vec = {0, 0}; 
0296     // vector<double> ze_vec = {p0[2], ( fabs( p1[1] ) < 130 ) ? 8. : 10.}; 
0297 
0298     // note : swap the r and z, to have easier fitting 
0299     // note : in principle, Z should be in the x axis, R should be in the Y axis
0300     // TGraphErrors * track_gr = new TGraphErrors(3,&r_vec[0],&z_vec[0],&re_vec[0],&ze_vec[0]);    
0301     
0302     // double vertical_line = ( fabs( grEY_stddev(track_gr) ) < 0.00001 ) ? 1 : 0;
0303     
0304     return  -1 * TMath::Log( fabs( tan( atan2(p1[0] - p0[0], p1[1] - p0[1]) / 2 ) ) );
0305 
0306     // if (vertical_line) {return 0;}
0307     // else 
0308     // {
0309     //     TF1 * fit_rz = new TF1("fit_rz","pol1",-500,500);
0310     //     fit_rz -> SetParameters(0,0);
0311 
0312     //     track_gr -> Fit(fit_rz,"NQ");
0313 
0314     //     pair<double,double> ax_b = mirrorPolynomial(fit_rz -> GetParameter(1),fit_rz -> GetParameter(0));
0315     // }
0316 
0317 }
0318 
0319 // note : use "ls *.root > file_list.txt" to create the list of the file in the folder, full directory in the file_list.txt
0320 // note : set_folder_name = "folder_xxxx"
0321 // note : server_name = "inttx"
0322 void dNdeta(/*pair<double,double>beam_origin*/)
0323 {
0324     
0325     TCanvas * c4 = new TCanvas("","",850,800);    
0326     c4 -> cd();
0327     
0328     TCanvas * c2 = new TCanvas("","",2500,800);    
0329     c2 -> cd();
0330     TPad *pad_xy = new TPad(Form("pad_xy"), "", 0.0, 0.0, 0.33, 1.0);
0331     Characterize_Pad(pad_xy, 0.15, 0.1, 0.1, 0.1 , 0, 0);
0332     pad_xy -> Draw();
0333 
0334     TPad *pad_rz = new TPad(Form("pad_rz"), "", 0.33, 0.0, 0.66, 1.0);
0335     Characterize_Pad(pad_rz, 0.15, 0.1, 0.1, 0.1 , 0, 0);
0336     pad_rz -> Draw();
0337 
0338     TPad *pad_z = new TPad(Form("pad_z"), "", 0.66, 0.0, 1.0, 1.0);
0339     Characterize_Pad(pad_z, 0.15, 0.1, 0.1, 0.1 , 0, 0);
0340     pad_z -> Draw();
0341 
0342     TCanvas * c1 = new TCanvas("","",1000,800);
0343     c1 -> cd();
0344 
0345     
0346     
0347     // string mother_folder_directory = "/home/phnxrc/INTT/cwshih/DACscan_data/zero_magnet_Takashi_used";
0348     // string file_name = "beam_inttall-00020869-0000_event_base_ana_cluster_ideal_excludeR1500_100kEvent";
0349     // string file_name = "beam_inttall-00020869-0000_event_base_ana_cluster_survey_1_XYAlpha_Peek_3.32mm_excludeR1500_100kEvent";
0350 
0351     string mother_folder_directory = "/sphenix/user/ChengWei/INTT/INTT_commissioning/ZeroField/20869";
0352     string file_name = "beam_inttall-00020869-0000_event_base_ana_cluster_survey_1_XYAlpha_Peek_3.32mm_excludeR20000_150kEvent_3HotCut";
0353 
0354     // string mother_folder_directory = "/home/phnxrc/INTT/cwshih/DACscan_data/new_DAC_Scan_0722/AllServer/DAC2";
0355     // string file_name = "beam_inttall-00023058-0000_event_base_ana_cluster_ideal_excludeR2000_100kEvent";
0356 
0357     system(Form("mkdir %s/folder_%s",mother_folder_directory.c_str(),file_name.c_str()));
0358     system(Form("mkdir %s/folder_%s/good_track",mother_folder_directory.c_str(),file_name.c_str()));
0359 
0360     pair<double,double> beam_origin = {-0,2};
0361     double temp_Y_align = 0.;
0362     double temp_X_align = -0.;
0363 
0364     double zvtx_hist_l = -500;
0365     double zvtx_hist_r = 500;
0366 
0367     int Nhit_cut = 20000;           // note : if (> Nhit_cut)          -> continue
0368     int Nhit_cutl = 400;          // note : if (< Nhit_cutl)         -> continue 
0369     int clu_size_cut = 4;           // note : if (> clu_size_cut)      -> continue
0370     double clu_sum_adc_cut = 31;    // note : if (< clu_sum_adc_cut)   -> continue
0371     int N_clu_cut = 15000;          // note : if (> N_clu_cut)         -> continue  unit number
0372     double phi_diff_cut = 3.5;      // note : if (< phi_diff_cut)      -> pass      unit degree
0373     double DCA_cut = 4;             // note : if (< DCA_cut)           -> pass      unit mm
0374     int zvtx_cal_require = 15;      // note : if (> zvtx_cal_require)  -> pass
0375     int zvtx_draw_requireL = 15;       
0376     int zvtx_draw_requireR = 40000;   // note : if ( zvtx_draw_requireL < event && event < zvtx_draw_requireR) -> pass
0377     double Integrate_portion = 0.4; // todo : it was 0.6826, try to require less event, as most of the tracklets are not that useful
0378     double Integrate_portion_final = 0.68;
0379     bool draw_event_display = true;
0380     int print_rate = 5;
0381 
0382     double mean_zvtx = -210.67; // note : unit : mm
0383 
0384     bool full_event = false;
0385     long long used_event = 10000;
0386 
0387     double dNdeta_upper_range = 1.5;
0388 
0389     int geo_mode_id = 1;
0390     string conversion_mode = (geo_mode_id == 0) ? "ideal" : "survey_1_XYAlpha_Peek";
0391     double peek = 3.32405;
0392 
0393     TFile * file_in = new TFile(Form("%s/%s.root",mother_folder_directory.c_str(),file_name.c_str()),"read");
0394     TTree * tree = (TTree *)file_in->Get("tree_clu");
0395     
0396     long long N_event = (full_event == true) ? tree -> GetEntries() : used_event;
0397     cout<<Form("N_event in file %s : %lli",file_name.c_str(), N_event)<<endl;
0398 
0399     int N_hits;
0400     int N_cluster_inner;
0401     int N_cluster_outer;
0402     vector<int>* column_vec = new vector<int>();
0403     vector<double>* avg_chan_vec = new vector<double>();
0404     vector<int>* sum_adc_vec = new vector<int>();
0405     vector<int>* sum_adc_conv_vec = new vector<int>();
0406     vector<int>* size_vec = new vector<int>();
0407     vector<double>* x_vec = new vector<double>();
0408     vector<double>* y_vec = new vector<double>();
0409     vector<double>* z_vec = new vector<double>();
0410     vector<int>* layer_vec = new vector<int>();
0411     vector<double>* phi_vec = new vector<double>();
0412 
0413     tree -> SetBranchAddress("nhits",&N_hits);
0414     tree -> SetBranchAddress("nclu_inner",&N_cluster_inner);
0415     tree -> SetBranchAddress("nclu_outer",&N_cluster_outer);
0416 
0417     tree -> SetBranchAddress("column", &column_vec);
0418     tree -> SetBranchAddress("avg_chan", &avg_chan_vec);
0419     tree -> SetBranchAddress("sum_adc", &sum_adc_vec);
0420     tree -> SetBranchAddress("sum_adc_conv", &sum_adc_conv_vec);
0421     tree -> SetBranchAddress("size", &size_vec);
0422     tree -> SetBranchAddress("x", &x_vec);
0423     tree -> SetBranchAddress("y", &y_vec);
0424     tree -> SetBranchAddress("z", &z_vec);
0425     tree -> SetBranchAddress("layer", &layer_vec);
0426     tree -> SetBranchAddress("phi", &phi_vec);
0427 
0428     TLatex *draw_text = new TLatex();
0429     draw_text -> SetNDC();
0430     draw_text -> SetTextSize(0.02);
0431 
0432     vector<clu_info> temp_sPH_inner_nocolumn_vec; temp_sPH_inner_nocolumn_vec.clear();
0433     vector<clu_info> temp_sPH_outer_nocolumn_vec; temp_sPH_outer_nocolumn_vec.clear();
0434     vector<vector<double>> temp_sPH_nocolumn_vec(2);
0435     vector<vector<double>> temp_sPH_nocolumn_rz_vec(2);
0436 
0437     TH2F * angle_correlation = new TH2F("","angle_correlation",361,0,361,361,0,361);
0438     angle_correlation -> SetStats(0);
0439     angle_correlation -> GetXaxis() -> SetTitle("Inner Phi (degree)");
0440     angle_correlation -> GetYaxis() -> SetTitle("Outer Phi (degree)");
0441 
0442     TH2F * inner_pos_xy = new TH2F("","inner_pos_xy",360,-100,100,360,-100,100);
0443     inner_pos_xy -> SetStats(0);
0444     inner_pos_xy -> GetXaxis() -> SetTitle("X axis");
0445     inner_pos_xy -> GetYaxis() -> SetTitle("Y axis");
0446 
0447     TH2F * outer_pos_xy = new TH2F("","outer_pos_xy",360,-150,150,360,-150,150);
0448     outer_pos_xy -> SetStats(0);
0449     outer_pos_xy -> GetXaxis() -> SetTitle("X axis");
0450     outer_pos_xy -> GetYaxis() -> SetTitle("Y axis");
0451 
0452     TH2F * inner_outer_pos_xy = new TH2F("","inner_outer_pos_xy",360,-150,150,360,-150,150);
0453     inner_outer_pos_xy -> SetStats(0);
0454     inner_outer_pos_xy -> GetXaxis() -> SetTitle("X axis");
0455     inner_outer_pos_xy -> GetYaxis() -> SetTitle("Y axis");
0456 
0457     TH1F * z_pos_diff = new TH1F("","z_pos_diff",360,-150,150);
0458     z_pos_diff -> GetXaxis() -> SetTitle("inner zpos - outer zpos");
0459     z_pos_diff -> GetYaxis() -> SetTitle("Eentry");
0460 
0461     TH2F * z_pos_diff_angle_diff = new TH2F("","z_pos_diff_angle_diff",100,-25,25,200,-11,11);
0462     z_pos_diff_angle_diff -> SetStats(0);
0463     z_pos_diff_angle_diff -> GetXaxis() -> SetTitle("inner zpos - outer zpos");
0464     z_pos_diff_angle_diff -> GetYaxis() -> SetTitle("Inner phi - outer phi");
0465 
0466     TH1F * Nhits_good = new TH1F("","Nhits_good",360,0,1000);
0467     Nhits_good -> GetXaxis() -> SetTitle("N hits in one event");
0468     Nhits_good -> GetYaxis() -> SetTitle("Eentry");
0469 
0470     TH1F * z_pos_inner = new TH1F("","z_pos_inner",200,-150,150);
0471     z_pos_inner -> GetXaxis() -> SetTitle("inner zpos");
0472     z_pos_inner -> GetYaxis() -> SetTitle("Eentry");
0473 
0474     TH1F * z_pos_outer = new TH1F("","z_pos_outer",200,-150,150);
0475     z_pos_outer -> GetXaxis() -> SetTitle("outer zpos");
0476     z_pos_outer -> GetYaxis() -> SetTitle("Eentry");
0477 
0478     TH2F * z_pos_inner_outer = new TH2F("","z_pos_inner_outer",100,-150,150, 100,-150,150);
0479     z_pos_inner_outer -> SetStats(0);
0480     z_pos_inner_outer -> GetXaxis() -> SetTitle("inner zpos");
0481     z_pos_inner_outer -> GetYaxis() -> SetTitle("outer pos");
0482 
0483     TH2F * DCA_point = new TH2F("","DCA_point",100,-10,10,100,-10,10);
0484     DCA_point -> SetStats(0);
0485     DCA_point -> GetXaxis() -> SetTitle("X pos (mm)");
0486     DCA_point -> GetYaxis() -> SetTitle("Y pos (mm)");
0487 
0488     TH2F * DCA_distance_inner_phi = new TH2F("","DCA_distance_inner_phi",100,0,360,100,-10,10);
0489     DCA_distance_inner_phi -> SetStats(0);
0490     DCA_distance_inner_phi -> GetXaxis() -> SetTitle("inner phi");
0491     DCA_distance_inner_phi -> GetYaxis() -> SetTitle("DCA (mm)");
0492 
0493     TH2F * DCA_distance_outer_phi = new TH2F("","DCA_distance_outer_phi",100,0,360,100,-10,10);
0494     DCA_distance_outer_phi -> SetStats(0);
0495     DCA_distance_outer_phi -> GetXaxis() -> SetTitle("outer phi");
0496     DCA_distance_outer_phi -> GetYaxis() -> SetTitle("DCA (mm)");
0497 
0498     TH1F * N_cluster_outer_pass = new TH1F("","N_cluster_outer_pass",100,0,100);
0499     N_cluster_outer_pass -> GetXaxis() -> SetTitle("N_cluster");
0500     N_cluster_outer_pass -> GetYaxis() -> SetTitle("Eentry");
0501 
0502     TH1F * N_cluster_inner_pass = new TH1F("","N_cluster_inner_pass",100,0,100);
0503     N_cluster_inner_pass -> GetXaxis() -> SetTitle("N_cluster");
0504     N_cluster_inner_pass -> GetYaxis() -> SetTitle("Eentry");
0505 
0506     TH2F * N_cluster_correlation = new TH2F("","N_cluster_correlation",100,0,500,100,0,500);
0507     N_cluster_correlation -> SetStats(0);
0508     N_cluster_correlation -> GetXaxis() -> SetTitle("inner N_cluster");
0509     N_cluster_correlation -> GetYaxis() -> SetTitle("Outer N_cluster");
0510 
0511     TH1F * temp_event_zvtx = new TH1F("","Z vertex dist",125,zvtx_hist_l,zvtx_hist_r);
0512     temp_event_zvtx -> GetXaxis() -> SetTitle("Z vertex position (mm)");
0513     temp_event_zvtx -> GetYaxis() -> SetTitle("Entry");
0514     vector<float> temp_event_zvtx_vec; temp_event_zvtx_vec.clear();
0515     vector<float> temp_event_zvtx_info; temp_event_zvtx_info.clear();
0516     TLine * effi_sig_range_line = new TLine();
0517     effi_sig_range_line -> SetLineWidth(3);
0518     effi_sig_range_line -> SetLineColor(TColor::GetColor("#A08144"));
0519     effi_sig_range_line -> SetLineStyle(2);
0520     TF1 * zvtx_fitting = new TF1("","gaus",-500,500);
0521     // zvtx_fitting -> SetLi
0522 
0523     // TH1F * dNdeta_hist = new TH1F("","",29,-2.9,2.9);
0524     TH1F * dNdeta_hist = new TH1F("","",145,-2.9,2.9);
0525     dNdeta_hist -> SetMarkerStyle(20);
0526     dNdeta_hist -> SetMarkerSize(0.8);
0527     dNdeta_hist -> SetMarkerColor(TColor::GetColor("#1A3947"));
0528     dNdeta_hist -> SetLineColor(TColor::GetColor("#1A3947"));
0529     dNdeta_hist -> SetLineWidth(2);
0530     dNdeta_hist -> GetYaxis() -> SetTitle("dN_{ch}/d#eta");
0531     dNdeta_hist -> GetXaxis() -> SetTitle("#eta");
0532     dNdeta_hist -> GetYaxis() -> SetRangeUser(0,50);
0533     dNdeta_hist -> SetTitleSize(0.06, "X");
0534     dNdeta_hist -> SetTitleSize(0.06, "Y");
0535     dNdeta_hist -> GetXaxis() -> SetTitleOffset (0.71);
0536     dNdeta_hist -> GetYaxis() -> SetTitleOffset (1.1);
0537     dNdeta_hist -> GetXaxis() -> CenterTitle(true);
0538     dNdeta_hist -> GetYaxis() -> CenterTitle(true);
0539 
0540     // TH1F * dNdeta_2P_inner_hist = new TH1F("","",29,-2.9,2.9);
0541     TH1F * dNdeta_2P_inner_hist = new TH1F("","",145,-2.9,2.9);
0542     dNdeta_2P_inner_hist -> SetMarkerStyle(20);
0543     dNdeta_2P_inner_hist -> SetMarkerSize(0.8);
0544     dNdeta_2P_inner_hist -> SetMarkerColor(TColor::GetColor("#1A3947"));
0545     dNdeta_2P_inner_hist -> SetLineColor(TColor::GetColor("#1A3947"));
0546     dNdeta_2P_inner_hist -> SetLineWidth(2);
0547     dNdeta_2P_inner_hist -> GetYaxis() -> SetTitle("dN_{ch}/d#eta");
0548     dNdeta_2P_inner_hist -> GetXaxis() -> SetTitle("#eta");
0549     dNdeta_2P_inner_hist -> GetYaxis() -> SetRangeUser(0,50);
0550     dNdeta_2P_inner_hist -> SetTitleSize(0.06, "X");
0551     dNdeta_2P_inner_hist -> SetTitleSize(0.06, "Y");
0552     dNdeta_2P_inner_hist -> GetXaxis() -> SetTitleOffset (0.71);
0553     dNdeta_2P_inner_hist -> GetYaxis() -> SetTitleOffset (1.1);
0554     dNdeta_2P_inner_hist -> GetXaxis() -> CenterTitle(true);
0555     dNdeta_2P_inner_hist -> GetYaxis() -> CenterTitle(true);
0556 
0557     TH1F * dNdeta_2P_outer_hist = new TH1F("","",29,-2.9,2.9);
0558     dNdeta_2P_outer_hist -> SetMarkerStyle(20);
0559     dNdeta_2P_outer_hist -> SetMarkerSize(0.8);
0560     dNdeta_2P_outer_hist -> SetMarkerColor(TColor::GetColor("#1A3947"));
0561     dNdeta_2P_outer_hist -> SetLineColor(TColor::GetColor("#1A3947"));
0562     dNdeta_2P_outer_hist -> SetLineWidth(2);
0563     dNdeta_2P_outer_hist -> GetYaxis() -> SetTitle("dN_{ch}/d#eta");
0564     dNdeta_2P_outer_hist -> GetXaxis() -> SetTitle("#eta");
0565     dNdeta_2P_outer_hist -> GetYaxis() -> SetRangeUser(0,50);
0566     dNdeta_2P_outer_hist -> SetTitleSize(0.06, "X");
0567     dNdeta_2P_outer_hist -> SetTitleSize(0.06, "Y");
0568     dNdeta_2P_outer_hist -> GetXaxis() -> SetTitleOffset (0.71);
0569     dNdeta_2P_outer_hist -> GetYaxis() -> SetTitleOffset (1.1);
0570     dNdeta_2P_outer_hist -> GetXaxis() -> CenterTitle(true);
0571     dNdeta_2P_outer_hist -> GetYaxis() -> CenterTitle(true);
0572 
0573     double N_good_event = 0;
0574 
0575     TH2F * Good_inner_outer_pos_xy_nzB = new TH2F("","Good_inner_outer_pos_xy_nzB",360,-150,150,360,-150,150);
0576     Good_inner_outer_pos_xy_nzB -> SetStats(0);
0577     Good_inner_outer_pos_xy_nzB -> GetXaxis() -> SetTitle("X axis");
0578     Good_inner_outer_pos_xy_nzB -> GetYaxis() -> SetTitle("Y axis");
0579 
0580     TH2F * Good_inner_outer_pos_xy_nzA = new TH2F("","Good_inner_outer_pos_xy_nzA",360,-150,150,360,-150,150);
0581     Good_inner_outer_pos_xy_nzA -> SetStats(0);
0582     Good_inner_outer_pos_xy_nzA -> GetXaxis() -> SetTitle("X axis");
0583     Good_inner_outer_pos_xy_nzA -> GetYaxis() -> SetTitle("Y axis");
0584 
0585     TH2F * Good_inner_outer_pos_xy_pzA = new TH2F("","Good_inner_outer_pos_xy_pzA",360,-150,150,360,-150,150);
0586     Good_inner_outer_pos_xy_pzA -> SetStats(0);
0587     Good_inner_outer_pos_xy_pzA -> GetXaxis() -> SetTitle("X axis");
0588     Good_inner_outer_pos_xy_pzA -> GetYaxis() -> SetTitle("Y axis");
0589 
0590     TH2F * Good_inner_outer_pos_xy_pzB = new TH2F("","Good_inner_outer_pos_xy_pzB",360,-150,150,360,-150,150);
0591     Good_inner_outer_pos_xy_pzB -> SetStats(0);
0592     Good_inner_outer_pos_xy_pzB -> GetXaxis() -> SetTitle("X axis");
0593     Good_inner_outer_pos_xy_pzB -> GetYaxis() -> SetTitle("Y axis");
0594 
0595     TH2F * Good_track_space = new TH2F("","Good_track_space",200,-300,300,200,-300,300);
0596     Good_track_space -> SetStats(0);
0597     Good_track_space -> GetXaxis() -> SetTitle("X axis");
0598     Good_track_space -> GetYaxis() -> SetTitle("Y axis");
0599 
0600     // dNdeta_hist -> GetXaxis() -> SetLimits(-10,10);
0601     // dNdeta_hist -> GetXaxis() -> SetNdivisions  (505);
0602 
0603     
0604     vector<vector<double>> good_track_xy_vec; good_track_xy_vec.clear();
0605     vector<vector<double>> good_track_rz_vec; good_track_rz_vec.clear();
0606     vector<vector<double>> good_comb_rz_vec; good_comb_rz_vec.clear();
0607     vector<vector<double>> good_comb_xy_vec; good_comb_xy_vec.clear();
0608     vector<vector<double>> good_comb_phi_vec; good_comb_phi_vec.clear();
0609     vector<vector<double>> good_tracklet_rz; good_tracklet_rz.clear();
0610     TLine * track_line = new TLine();
0611     track_line -> SetLineWidth(1);
0612     track_line -> SetLineColorAlpha(38,0.5);
0613 
0614     TLine * coord_line = new TLine();
0615     coord_line -> SetLineWidth(1);
0616     coord_line -> SetLineColor(16);
0617     coord_line -> SetLineStyle(2);
0618 
0619 
0620     vector<float> avg_event_zvtx_vec; avg_event_zvtx_vec.clear();
0621     TH1F * avg_event_zvtx = new TH1F("","avg_event_zvtx",125,zvtx_hist_l,zvtx_hist_r);
0622     avg_event_zvtx -> GetXaxis() -> SetTitle("Z vertex position (mm)");
0623     avg_event_zvtx -> GetYaxis() -> SetTitle("entry");
0624 
0625     TH1F * zvtx_evt_width = new TH1F("","zvtx_evt_width",150,0,800);
0626     zvtx_evt_width -> GetXaxis() -> SetTitle(" mm ");
0627     zvtx_evt_width -> GetYaxis() -> SetTitle("entry");
0628 
0629     int N_event_pass_number = 0;
0630     
0631     if (draw_event_display) c2 -> Print(Form("%s/folder_%s/temp_event_display.pdf(",mother_folder_directory.c_str(),file_name.c_str()));
0632 
0633     for (int event_i = 0; event_i < N_event; event_i++)
0634     {
0635         if (event_i % 1000 == 0) cout<<"code running... "<<event_i<<endl;
0636 
0637         tree -> GetEntry(event_i);
0638         unsigned int length = column_vec -> size();
0639 
0640         if (event_i == 13) cout<<"test, eID : "<<event_i<<" Nhits "<<N_hits<<endl;
0641 
0642         if (N_hits > Nhit_cut) continue;
0643         if (N_hits < Nhit_cutl) continue;
0644 
0645         N_event_pass_number += 1;
0646 
0647         if (N_cluster_inner == 0 || N_cluster_outer == 0) continue;
0648         if (N_cluster_inner == -1 || N_cluster_outer == -1) continue;
0649         if ((N_cluster_inner + N_cluster_outer) < zvtx_cal_require) continue;
0650         if (N_cluster_inner < 30) continue;
0651         if (N_cluster_outer < 30) continue;
0652         
0653 
0654         // note : apply some selection to remove the hot channels
0655         // note : and make the inner_clu_vec and outer_clu_vec
0656         for (int clu_i = 0; clu_i < length; clu_i++)
0657         {
0658             if (size_vec -> at(clu_i) > clu_size_cut) continue; 
0659             // if (size_vec -> at(clu_i) < 2) continue;
0660             if (sum_adc_conv_vec -> at(clu_i) < clu_sum_adc_cut) continue;
0661             // if (z_vec -> at(clu_i) < 0) continue;
0662             
0663             // note : inner
0664             // if (layer_vec -> at(clu_i) == 0 && x_vec -> at(clu_i) < -75 && x_vec -> at(clu_i) > -80 && y_vec -> at(clu_i) > 7.5 && y_vec -> at(clu_i) < 12.5 ) continue;
0665             // // if (layer_vec -> at(clu_i) == 0 && x_vec -> at(clu_i) > 35 && x_vec -> at(clu_i) < 40 && y_vec -> at(clu_i) > 65 && y_vec -> at(clu_i) < 70 ) continue;
0666             // if (layer_vec -> at(clu_i) == 0 && phi_vec -> at(clu_i) > 295 && phi_vec -> at(clu_i) < 302) continue;
0667             // if (layer_vec -> at(clu_i) == 0 && phi_vec -> at(clu_i) > 210 && phi_vec -> at(clu_i) < 213) continue;
0668             // if (layer_vec -> at(clu_i) == 0 && phi_vec -> at(clu_i) > 55 && phi_vec -> at(clu_i) < 65) continue;
0669             // if (layer_vec -> at(clu_i) == 0 && phi_vec -> at(clu_i) > 348 && phi_vec -> at(clu_i) < 353) continue;
0670             // if (layer_vec -> at(clu_i) == 0 && phi_vec -> at(clu_i) > 265 && phi_vec -> at(clu_i) < 270) continue;
0671 
0672             // note : outer
0673             // if (layer_vec -> at(clu_i) == 1 && x_vec -> at(clu_i) < -70 && x_vec -> at(clu_i) > -75 && y_vec -> at(clu_i) > 70 && y_vec -> at(clu_i) < 80 ) continue;
0674             // // if (layer_vec -> at(clu_i) == 1 && x_vec -> at(clu_i) > 70 && x_vec -> at(clu_i) < 83 && y_vec -> at(clu_i) > 50 && y_vec -> at(clu_i) < 65 ) continue;
0675             // // if (layer_vec -> at(clu_i) == 1 && x_vec -> at(clu_i) > 70 && x_vec -> at(clu_i) < 83 && y_vec -> at(clu_i) > 63 && y_vec -> at(clu_i) < 75 ) continue;
0676             // if (layer_vec -> at(clu_i) == 1 && x_vec -> at(clu_i) < -70 && x_vec -> at(clu_i) > -75 && y_vec -> at(clu_i) < -70 && y_vec -> at(clu_i) > -75 ) continue;
0677             // if (layer_vec -> at(clu_i) == 1 && phi_vec -> at(clu_i) > 335 && phi_vec -> at(clu_i) < 340) continue;
0678             // if (layer_vec -> at(clu_i) == 1 && phi_vec -> at(clu_i) > 105 && phi_vec -> at(clu_i) < 115) continue;
0679             // if (layer_vec -> at(clu_i) == 1 && phi_vec -> at(clu_i) > 25 && phi_vec -> at(clu_i) < 47) continue; // todo : for the "new_DAC_Scan_0722/AllServer/DAC2"
0680 
0681 
0682             temp_sPH_nocolumn_vec[0].push_back( (phi_vec -> at(clu_i) > 90 && phi_vec -> at(clu_i) < 270 ) ? x_vec -> at(clu_i) + temp_X_align : x_vec -> at(clu_i) );
0683             temp_sPH_nocolumn_vec[1].push_back( (phi_vec -> at(clu_i) > 90 && phi_vec -> at(clu_i) < 270 ) ? y_vec -> at(clu_i) + temp_Y_align : y_vec -> at(clu_i) );
0684             
0685             double clu_radius = get_radius(
0686                 (phi_vec -> at(clu_i) > 90 && phi_vec -> at(clu_i) < 270 ) ? x_vec -> at(clu_i) + temp_X_align : x_vec -> at(clu_i), 
0687                 (phi_vec -> at(clu_i) > 90 && phi_vec -> at(clu_i) < 270 ) ? y_vec -> at(clu_i) + temp_Y_align : y_vec -> at(clu_i)
0688             );
0689             temp_sPH_nocolumn_rz_vec[0].push_back(z_vec -> at(clu_i));
0690             temp_sPH_nocolumn_rz_vec[1].push_back( ( phi_vec -> at(clu_i) > 180 ) ? clu_radius * -1 : clu_radius );
0691             
0692 
0693             if (layer_vec -> at(clu_i) == 0) // note : inner
0694                 temp_sPH_inner_nocolumn_vec.push_back({
0695                     column_vec -> at(clu_i), 
0696                     avg_chan_vec -> at(clu_i), 
0697                     sum_adc_vec -> at(clu_i), 
0698                     sum_adc_conv_vec -> at(clu_i), 
0699                     size_vec -> at(clu_i), 
0700                     (phi_vec -> at(clu_i) > 90 && phi_vec -> at(clu_i) < 270 ) ? x_vec -> at(clu_i) + temp_X_align : x_vec -> at(clu_i), 
0701                     (phi_vec -> at(clu_i) > 90 && phi_vec -> at(clu_i) < 270 ) ? y_vec -> at(clu_i) + temp_Y_align : y_vec -> at(clu_i), 
0702                     z_vec -> at(clu_i), 
0703                     layer_vec -> at(clu_i), 
0704                     phi_vec -> at(clu_i)
0705                 });
0706             
0707             if (layer_vec -> at(clu_i) == 1) // note : outer
0708                 temp_sPH_outer_nocolumn_vec.push_back({
0709                     column_vec -> at(clu_i), 
0710                     avg_chan_vec -> at(clu_i), 
0711                     sum_adc_vec -> at(clu_i), 
0712                     sum_adc_conv_vec -> at(clu_i), 
0713                     size_vec -> at(clu_i), 
0714                     (phi_vec -> at(clu_i) > 90 && phi_vec -> at(clu_i) < 270 ) ? x_vec -> at(clu_i) + temp_X_align : x_vec -> at(clu_i), 
0715                     (phi_vec -> at(clu_i) > 90 && phi_vec -> at(clu_i) < 270 ) ? y_vec -> at(clu_i) + temp_Y_align : y_vec -> at(clu_i), 
0716                     z_vec -> at(clu_i), 
0717                     layer_vec -> at(clu_i), 
0718                     phi_vec -> at(clu_i)
0719                 });            
0720         }
0721 
0722         N_cluster_outer_pass -> Fill(temp_sPH_outer_nocolumn_vec.size());
0723         N_cluster_inner_pass -> Fill(temp_sPH_inner_nocolumn_vec.size());
0724         N_cluster_correlation -> Fill( temp_sPH_inner_nocolumn_vec.size(), temp_sPH_outer_nocolumn_vec.size() );
0725 
0726         if ((temp_sPH_inner_nocolumn_vec.size() + temp_sPH_outer_nocolumn_vec.size()) > N_clu_cut)
0727         {
0728             temp_event_zvtx_info = {-1000,-1000,-1000};
0729             temp_event_zvtx_vec.clear();
0730             temp_event_zvtx -> Reset("ICESM");
0731             good_track_xy_vec.clear();
0732             good_track_rz_vec.clear();
0733             good_comb_rz_vec.clear();
0734             good_comb_xy_vec.clear();
0735             good_comb_phi_vec.clear();
0736             temp_sPH_nocolumn_rz_vec.clear(); temp_sPH_nocolumn_rz_vec = vector<vector<double>>(2);
0737             temp_sPH_nocolumn_vec.clear(); temp_sPH_nocolumn_vec = vector<vector<double>>(2);
0738             temp_sPH_inner_nocolumn_vec.clear();
0739             temp_sPH_outer_nocolumn_vec.clear();
0740             continue;
0741         }
0742 
0743         // note : try to make sure that the clusters not to be used twice or more 
0744         vector<int> used_outer_check(temp_sPH_outer_nocolumn_vec.size(),0);
0745 
0746         for ( int inner_i = 0; inner_i < temp_sPH_inner_nocolumn_vec.size(); inner_i++ )
0747         {
0748             
0749             for ( int outer_i = 0; outer_i < temp_sPH_outer_nocolumn_vec.size(); outer_i++ )
0750             {
0751                 
0752                 if (used_outer_check[outer_i] == 1) continue; // note : this outer cluster was already used, skip the trial of this combination
0753 
0754                 vector<double> DCA_info_vec = calculateDistanceAndClosestPoint(
0755                     temp_sPH_inner_nocolumn_vec[inner_i].x, temp_sPH_inner_nocolumn_vec[inner_i].y,
0756                     temp_sPH_outer_nocolumn_vec[outer_i].x, temp_sPH_outer_nocolumn_vec[outer_i].y,
0757                     beam_origin.first, beam_origin.second
0758                 );
0759 
0760                 double DCA_sign = calculateAngleBetweenVectors(
0761                     temp_sPH_outer_nocolumn_vec[outer_i].x, temp_sPH_outer_nocolumn_vec[outer_i].y,
0762                     temp_sPH_inner_nocolumn_vec[inner_i].x, temp_sPH_inner_nocolumn_vec[inner_i].y,
0763                     beam_origin.first, beam_origin.second
0764                 );
0765 
0766                 if (DCA_info_vec[0] != fabs(DCA_sign) && fabs( DCA_info_vec[0] - fabs(DCA_sign) ) > 0.1 )
0767                     cout<<"different DCA : "<<DCA_info_vec[0]<<" "<<DCA_sign<<" diff : "<<DCA_info_vec[0] - fabs(DCA_sign)<<endl;
0768 
0769 
0770                 if (fabs(temp_sPH_inner_nocolumn_vec[inner_i].phi - temp_sPH_outer_nocolumn_vec[outer_i].phi) < phi_diff_cut)
0771                 {
0772                     bool DCA_tag = false;
0773 
0774                     if (DCA_info_vec[0] < DCA_cut){
0775 
0776                         used_outer_check[outer_i] = 1; //note : this outer cluster was already used!
0777 
0778                         double zvtx = get_z_vertex(temp_sPH_inner_nocolumn_vec[inner_i],temp_sPH_outer_nocolumn_vec[outer_i],DCA_info_vec[1],DCA_info_vec[2]);
0779 
0780                         temp_event_zvtx -> Fill( zvtx );
0781                         if(zvtx_hist_l <= zvtx && zvtx <= zvtx_hist_r){
0782                             temp_event_zvtx_vec.push_back( zvtx );
0783                         }
0784 
0785                         good_track_xy_vec.push_back({temp_sPH_outer_nocolumn_vec[outer_i].x,temp_sPH_outer_nocolumn_vec[outer_i].y,DCA_info_vec[1],DCA_info_vec[2]});
0786                         good_track_rz_vec.push_back({
0787                                 temp_sPH_outer_nocolumn_vec[outer_i].z, (temp_sPH_outer_nocolumn_vec[outer_i].phi > 180) ? get_radius(temp_sPH_outer_nocolumn_vec[outer_i].x,temp_sPH_outer_nocolumn_vec[outer_i].y) * -1 : get_radius(temp_sPH_outer_nocolumn_vec[outer_i].x,temp_sPH_outer_nocolumn_vec[outer_i].y),
0788                                 zvtx, (temp_sPH_outer_nocolumn_vec[outer_i].phi > 180) ? get_radius(DCA_info_vec[1],DCA_info_vec[2]) * -1 : get_radius(DCA_info_vec[1],DCA_info_vec[2])
0789                             
0790                         });
0791                         good_comb_rz_vec.push_back({
0792                             get_radius(temp_sPH_inner_nocolumn_vec[inner_i].x,temp_sPH_inner_nocolumn_vec[inner_i].y), temp_sPH_inner_nocolumn_vec[inner_i].z,
0793                             get_radius(temp_sPH_outer_nocolumn_vec[outer_i].x,temp_sPH_outer_nocolumn_vec[outer_i].y), temp_sPH_outer_nocolumn_vec[outer_i].z,
0794                         });
0795 
0796                         good_comb_xy_vec.push_back({
0797                             temp_sPH_inner_nocolumn_vec[inner_i].x, temp_sPH_inner_nocolumn_vec[inner_i].y,
0798                             temp_sPH_outer_nocolumn_vec[outer_i].x, temp_sPH_outer_nocolumn_vec[outer_i].y
0799                         });
0800 
0801                         good_comb_phi_vec.push_back({
0802                             temp_sPH_inner_nocolumn_vec[inner_i].phi,
0803                             temp_sPH_outer_nocolumn_vec[outer_i].phi
0804                         });
0805 
0806                         DCA_tag = true;
0807                     }
0808                     
0809 
0810                     DCA_point -> Fill( DCA_info_vec[1], DCA_info_vec[2] );
0811                     angle_correlation -> Fill(temp_sPH_inner_nocolumn_vec[inner_i].phi,temp_sPH_outer_nocolumn_vec[outer_i].phi);
0812                     z_pos_diff -> Fill( temp_sPH_inner_nocolumn_vec[inner_i].z - temp_sPH_outer_nocolumn_vec[outer_i].z );
0813                     z_pos_diff_angle_diff -> Fill( temp_sPH_inner_nocolumn_vec[inner_i].z - temp_sPH_outer_nocolumn_vec[outer_i].z, temp_sPH_inner_nocolumn_vec[inner_i].phi - temp_sPH_outer_nocolumn_vec[outer_i].phi );
0814                     Nhits_good -> Fill(N_hits);
0815                     z_pos_inner -> Fill(temp_sPH_inner_nocolumn_vec[inner_i].z);
0816                     z_pos_outer -> Fill(temp_sPH_outer_nocolumn_vec[outer_i].z);
0817                     z_pos_inner_outer -> Fill(temp_sPH_inner_nocolumn_vec[inner_i].z, temp_sPH_outer_nocolumn_vec[outer_i].z);
0818                     // DCA_distance_inner_phi -> Fill(temp_sPH_inner_nocolumn_vec[inner_i].phi, (temp_sPH_inner_nocolumn_vec[inner_i].phi > 90 && temp_sPH_inner_nocolumn_vec[inner_i].phi < 270) ? DCA_sign * -1 : DCA_sign );
0819                     // DCA_distance_outer_phi -> Fill(temp_sPH_outer_nocolumn_vec[outer_i].phi, (temp_sPH_outer_nocolumn_vec[outer_i].phi > 90 && temp_sPH_outer_nocolumn_vec[outer_i].phi < 270) ? DCA_sign * -1 : DCA_sign );
0820                     DCA_distance_inner_phi -> Fill(temp_sPH_inner_nocolumn_vec[inner_i].phi, DCA_sign );
0821                     DCA_distance_outer_phi -> Fill(temp_sPH_outer_nocolumn_vec[outer_i].phi, DCA_sign );
0822 
0823                     if(DCA_tag == true) break; // note : since this combination (one inner cluster, one outer cluster) satisfied the reuqiremet, no reason to ask this inner cluster try with other outer clusters
0824 
0825                     // cout<<"good comb : "<<fabs(temp_sPH_inner_nocolumn_vec[inner_i].phi - temp_sPH_outer_nocolumn_vec[outer_i].phi)<<" radius in : "<<get_radius(temp_sPH_inner_nocolumn_vec[inner_i].x, temp_sPH_inner_nocolumn_vec[inner_i].y)<<" radius out : "<<get_radius(temp_sPH_outer_nocolumn_vec[outer_i].x, temp_sPH_outer_nocolumn_vec[outer_i].y)<<endl;
0826                 } // note : end of if 
0827                     
0828 
0829             } // note : end of outer loop
0830         } // note : end of inner loop
0831 
0832         if (temp_event_zvtx_vec.size() > zvtx_cal_require)
0833         {
0834             // note : effi_sig method 
0835             temp_event_zvtx_info = sigmaEff_avg(temp_event_zvtx_vec,Integrate_portion);
0836             avg_event_zvtx -> Fill(temp_event_zvtx_info[0]);
0837             avg_event_zvtx_vec.push_back(temp_event_zvtx_info[0]);
0838 
0839             zvtx_evt_width -> Fill(fabs(temp_event_zvtx_info[1] - temp_event_zvtx_info[2]));
0840             
0841             // cout<<"test0 : "<<N_hits<<" Ncluster : "<<(temp_sPH_inner_nocolumn_vec.size() + temp_sPH_outer_nocolumn_vec.size())<<" N good track : "<<good_comb_rz_vec.size()<<" temp_event_zvtx_vec size : "<<temp_event_zvtx_vec.size()<<endl;
0842 
0843             // note : gaus fitting method
0844             // temp_event_zvtx -> Fit(zvtx_fitting,"NQ");
0845             // avg_event_zvtx -> Fill( zvtx_fitting -> GetParameter(1) );
0846 
0847             // note : TH1 mean
0848             // avg_event_zvtx -> Fill( temp_event_zvtx -> GetMean() );
0849 
0850             if ( fabs(temp_event_zvtx_info[0] - mean_zvtx) < 25 && fabs(temp_event_zvtx_info[1] - temp_event_zvtx_info[2]) < 60 ) { // note : the measured z vetex resolution < 70 mm
0851                 
0852                 N_good_event += 1;
0853 
0854                 cout<<"test : "<<N_hits<<" Ncluster : "<<(temp_sPH_inner_nocolumn_vec.size() + temp_sPH_outer_nocolumn_vec.size())<<" N good track : "<<good_comb_rz_vec.size()<<" temp_event_zvtx_vec size : "<<temp_event_zvtx_vec.size()<<endl;
0855 
0856                 c4 -> cd(); 
0857                 Good_track_space -> Draw();
0858 
0859                 // note : for the quick dN/deta calculation
0860                 for (int track_i = 0; track_i < good_comb_rz_vec.size(); track_i++){
0861                     // -1 * TMath::Log( tan( (30/(180./M_PI)) / 2 ) )
0862 
0863                     if (good_track_rz_vec[track_i][2] > temp_event_zvtx_info[1] && good_track_rz_vec[track_i][2] < temp_event_zvtx_info[2]){
0864                         
0865                         double track_eta = Get_eta(
0866                             { sqrt(pow(beam_origin.first,2)+pow(beam_origin.second,2)), temp_event_zvtx_info[0], fabs(temp_event_zvtx_info[1] - temp_event_zvtx_info[2])/2. },
0867                             { good_comb_rz_vec[track_i][0], good_comb_rz_vec[track_i][1] }, // note : inner layer, r & z
0868                             { good_comb_rz_vec[track_i][2], good_comb_rz_vec[track_i][3] }  // note : outer layer, r & z 
0869                         );
0870 
0871                         double track_eta_inner = Get_eta_2P(
0872                             { sqrt(pow(beam_origin.first,2)+pow(beam_origin.second,2)), temp_event_zvtx_info[0], fabs(temp_event_zvtx_info[1] - temp_event_zvtx_info[2])/2. },
0873                             { good_comb_rz_vec[track_i][0], good_comb_rz_vec[track_i][1] } // note : inner layer, r & z
0874                         );
0875 
0876                         double track_eta_outer = Get_eta_2P(
0877                             { sqrt(pow(beam_origin.first,2)+pow(beam_origin.second,2)), temp_event_zvtx_info[0], fabs(temp_event_zvtx_info[1] - temp_event_zvtx_info[2])/2. },
0878                             { good_comb_rz_vec[track_i][2], good_comb_rz_vec[track_i][3] }  // note : outer layer, r & z 
0879                         );
0880 
0881                         good_tracklet_rz.push_back({
0882                             sqrt(pow(beam_origin.first,2)+pow(beam_origin.second,2)), temp_event_zvtx_info[0], // note : origin r, z
0883                             good_comb_rz_vec[track_i][0], good_comb_rz_vec[track_i][1] // note : inner r, z
0884                         });
0885                         
0886                         // note : inner z (nZ B)
0887                         if      (good_comb_rz_vec[track_i][1] < -130 ) { Good_inner_outer_pos_xy_nzB -> Fill(good_comb_xy_vec[track_i][0],good_comb_xy_vec[track_i][1]); }
0888                         // note : inner z (nZ A)
0889                         else if (good_comb_rz_vec[track_i][1] < 0 )    { Good_inner_outer_pos_xy_nzA -> Fill(good_comb_xy_vec[track_i][0],good_comb_xy_vec[track_i][1]); }
0890                         // note : inner z (pZ A)
0891                         else if (good_comb_rz_vec[track_i][1] < 130 )  { Good_inner_outer_pos_xy_pzA -> Fill(good_comb_xy_vec[track_i][0],good_comb_xy_vec[track_i][1]); }
0892                         // note : inner z (pZ B)
0893                         else                                           { Good_inner_outer_pos_xy_pzB -> Fill(good_comb_xy_vec[track_i][0],good_comb_xy_vec[track_i][1]); }
0894                         
0895                         
0896                         // note : Outer z (nZ B)
0897                         if      (good_comb_rz_vec[track_i][3] < -130 ) { Good_inner_outer_pos_xy_nzB -> Fill(good_comb_xy_vec[track_i][2],good_comb_xy_vec[track_i][3]); }
0898                         // note : Outer z (nZ A)
0899                         else if (good_comb_rz_vec[track_i][3] < 0 )    { Good_inner_outer_pos_xy_nzA -> Fill(good_comb_xy_vec[track_i][2],good_comb_xy_vec[track_i][3]); }
0900                         // note : Outer z (pZ A)
0901                         else if (good_comb_rz_vec[track_i][3] < 130 )  { Good_inner_outer_pos_xy_pzA -> Fill(good_comb_xy_vec[track_i][2],good_comb_xy_vec[track_i][3]); }
0902                         // note : Outer z (pZ B)
0903                         else                                           { Good_inner_outer_pos_xy_pzB -> Fill(good_comb_xy_vec[track_i][2],good_comb_xy_vec[track_i][3]); }
0904 
0905 
0906                         // todo : add the cluster position cut probably
0907                         dNdeta_hist -> Fill(track_eta);
0908                         if (good_comb_phi_vec[track_i][0] > 104 && good_comb_phi_vec[track_i][0] < 211) {
0909                             dNdeta_2P_inner_hist -> Fill(track_eta_inner);
0910                             
0911                             track_line -> DrawLine(temp_event_zvtx_info[0], sqrt(pow(beam_origin.first,2)+pow(beam_origin.second,2)), good_comb_rz_vec[track_i][1], good_comb_rz_vec[track_i][0]);
0912                         }
0913 
0914                         if (good_comb_phi_vec[track_i][1] > 104 && good_comb_phi_vec[track_i][1] < 211) dNdeta_2P_outer_hist -> Fill(track_eta_outer);
0915 
0916                     }
0917 
0918                 } // note : good track for loop
0919 
0920                 c4 -> Print( Form("%s/folder_%s/good_track/good_track_%i.pdf",mother_folder_directory.c_str(),file_name.c_str(),event_i) );
0921                 c4 -> Clear();
0922             
0923             }
0924 
0925 
0926         }
0927 
0928         
0929             
0930 
0931         if ( zvtx_draw_requireL < temp_event_zvtx_vec.size() && draw_event_display == true && temp_event_zvtx_vec.size() > zvtx_cal_require)
0932         {   
0933             TGraph * temp_event_xy = new TGraph(temp_sPH_nocolumn_vec[0].size(),&temp_sPH_nocolumn_vec[0][0],&temp_sPH_nocolumn_vec[1][0]);
0934             temp_event_xy -> SetTitle("INTT event display X-Y plane");
0935             temp_event_xy -> GetXaxis() -> SetLimits(-150,150);
0936             temp_event_xy -> GetYaxis() -> SetRangeUser(-150,150);
0937             temp_event_xy -> GetXaxis() -> SetTitle("X [mm]");
0938             temp_event_xy -> GetYaxis() -> SetTitle("Y [mm]");
0939             temp_event_xy -> SetMarkerStyle(20);
0940             temp_event_xy -> SetMarkerColor(2);
0941             temp_event_xy -> SetMarkerSize(1);
0942             TGraph * temp_event_rz = new TGraph(temp_sPH_nocolumn_rz_vec[0].size(),&temp_sPH_nocolumn_rz_vec[0][0],&temp_sPH_nocolumn_rz_vec[1][0]);
0943             temp_event_rz -> SetTitle("INTT event display r-Z plane");
0944             temp_event_rz -> GetXaxis() -> SetLimits(-500,500);
0945             temp_event_rz -> GetYaxis() -> SetRangeUser(-150,150);
0946             temp_event_rz -> GetXaxis() -> SetTitle("Z [mm]");
0947             temp_event_rz -> GetYaxis() -> SetTitle("Radius [mm]");
0948             temp_event_rz -> SetMarkerStyle(20);
0949             temp_event_rz -> SetMarkerColor(2);
0950             temp_event_rz -> SetMarkerSize(1);
0951 
0952             pad_xy -> cd();
0953             temp_bkg(pad_xy, conversion_mode, peek, beam_origin);
0954             temp_event_xy -> Draw("p same");
0955             for (int track_i = 0; track_i < good_track_xy_vec.size(); track_i++){
0956                 track_line -> DrawLine(good_track_xy_vec[track_i][0],good_track_xy_vec[track_i][1],good_track_xy_vec[track_i][2],good_track_xy_vec[track_i][3]);
0957             }
0958             track_line -> Draw("l same");
0959             draw_text -> DrawLatex(0.2, 0.85, Form("eID : %i, Total event hit : %i, innter Ncluster : %i, outer Ncluster : %i",event_i,N_hits,temp_sPH_inner_nocolumn_vec.size(),temp_sPH_outer_nocolumn_vec.size()));
0960         
0961             pad_rz -> cd();
0962             temp_event_rz -> Draw("ap");    
0963             effi_sig_range_line -> DrawLine(temp_event_zvtx_info[0],-150,temp_event_zvtx_info[0],150);
0964             coord_line -> DrawLine(0,-150,0,150);
0965             coord_line -> DrawLine(-500,0,500,0);
0966             for (int track_i = 0; track_i < good_track_rz_vec.size(); track_i++){
0967                 track_line -> DrawLine(good_track_rz_vec[track_i][0],good_track_rz_vec[track_i][1],good_track_rz_vec[track_i][2],good_track_rz_vec[track_i][3]);
0968             }
0969             draw_text -> DrawLatex(0.2, 0.85, Form("Negative radius : Clu_{outer} > 180^{0}"));
0970             draw_text -> DrawLatex(0.2, 0.81, Form("EffiSig avg : %.2f mm",temp_event_zvtx_info[0]));
0971 
0972             pad_z -> cd();
0973             temp_event_zvtx -> Draw("hist");
0974             // zvtx_fitting -> Draw("lsame");
0975             
0976             effi_sig_range_line -> DrawLine(temp_event_zvtx_info[1],0,temp_event_zvtx_info[1],temp_event_zvtx -> GetMaximum()*1.05);
0977             effi_sig_range_line -> DrawLine(temp_event_zvtx_info[2],0,temp_event_zvtx_info[2],temp_event_zvtx -> GetMaximum()*1.05);
0978             
0979             draw_text -> DrawLatex(0.2, 0.85, Form("eID : %i, Total event hit : %i, innter Ncluster : %i, outer Ncluster : %i",event_i,N_hits,temp_sPH_inner_nocolumn_vec.size(),temp_sPH_outer_nocolumn_vec.size()));
0980             // draw_text -> DrawLatex(0.2, 0.84, Form("Gaus fit mean : %.3f mm",zvtx_fitting -> GetParameter(1)));
0981             draw_text -> DrawLatex(0.2, 0.82, Form("EffiSig min : %.2f mm, max : %.2f mm",temp_event_zvtx_info[1],temp_event_zvtx_info[2]));
0982             draw_text -> DrawLatex(0.2, 0.79, Form("EffiSig avg : %.2f mm",temp_event_zvtx_info[0]));
0983 
0984             if(draw_event_display && (event_i % print_rate) == 0){c2 -> Print(Form("%s/folder_%s/temp_event_display.pdf",mother_folder_directory.c_str(),file_name.c_str()));}
0985             pad_xy -> Clear();
0986             pad_rz -> Clear();
0987             pad_z  -> Clear();
0988 
0989         }
0990 
0991         for ( int inner_i = 0; inner_i < temp_sPH_inner_nocolumn_vec.size(); inner_i++ )
0992         {
0993             inner_pos_xy -> Fill(temp_sPH_inner_nocolumn_vec[inner_i].x,temp_sPH_inner_nocolumn_vec[inner_i].y);
0994             inner_outer_pos_xy -> Fill(temp_sPH_inner_nocolumn_vec[inner_i].x,temp_sPH_inner_nocolumn_vec[inner_i].y);
0995         }
0996 
0997         for ( int outer_i = 0; outer_i < temp_sPH_outer_nocolumn_vec.size(); outer_i++ )
0998         {
0999             outer_pos_xy -> Fill(temp_sPH_outer_nocolumn_vec[outer_i].x,temp_sPH_outer_nocolumn_vec[outer_i].y);
1000             inner_outer_pos_xy -> Fill(temp_sPH_outer_nocolumn_vec[outer_i].x,temp_sPH_outer_nocolumn_vec[outer_i].y);
1001         }
1002 
1003         temp_event_zvtx_info = {-1000,-1000,-1000};
1004         temp_event_zvtx_vec.clear();
1005         temp_event_zvtx -> Reset("ICESM");
1006         good_track_xy_vec.clear();
1007         good_track_rz_vec.clear();
1008         good_comb_rz_vec.clear();
1009         good_comb_xy_vec.clear();
1010         good_comb_phi_vec.clear();
1011         temp_sPH_nocolumn_rz_vec.clear(); temp_sPH_nocolumn_rz_vec = vector<vector<double>>(2);
1012         temp_sPH_nocolumn_vec.clear(); temp_sPH_nocolumn_vec = vector<vector<double>>(2);
1013         temp_sPH_inner_nocolumn_vec.clear();
1014         temp_sPH_outer_nocolumn_vec.clear();
1015     } // note : end of event 
1016 
1017     if (draw_event_display) {c2 -> Print(Form("%s/folder_%s/temp_event_display.pdf)",mother_folder_directory.c_str(),file_name.c_str()));}
1018     c2 -> Clear();
1019     c1 -> Clear();
1020     
1021 
1022     c1 -> cd();
1023     vector<float> avg_event_zvtx_info = sigmaEff_avg(avg_event_zvtx_vec,Integrate_portion_final);
1024     avg_event_zvtx -> Draw("hist");
1025     effi_sig_range_line -> DrawLine(avg_event_zvtx_info[1],0,avg_event_zvtx_info[1],avg_event_zvtx -> GetMaximum()*1.05);
1026     effi_sig_range_line -> DrawLine(avg_event_zvtx_info[2],0,avg_event_zvtx_info[2],avg_event_zvtx -> GetMaximum()*1.05);    
1027     draw_text -> DrawLatex(0.15, 0.84, Form("EffiSig min : %.2f mm, max : %.2f mm",avg_event_zvtx_info[1],avg_event_zvtx_info[2]));
1028     draw_text -> DrawLatex(0.15, 0.81, Form("EffiSig avg : %.2f mm",avg_event_zvtx_info[0]));
1029     c1 -> Print(Form("%s/folder_%s/avg_event_zvtx.pdf",mother_folder_directory.c_str(),file_name.c_str()));
1030     c1 -> Clear();
1031 
1032     zvtx_evt_width -> Draw("hist"); 
1033     c1 -> Print(Form("%s/folder_%s/zvtx_evt_width.pdf",mother_folder_directory.c_str(),file_name.c_str()));
1034     c1 -> Clear();
1035 
1036     N_cluster_inner_pass -> Draw("hist"); 
1037     c1 -> Print(Form("%s/folder_%s/N_cluster_inner_pass.pdf",mother_folder_directory.c_str(),file_name.c_str()));
1038     c1 -> Clear();
1039 
1040     N_cluster_outer_pass -> Draw("hist");
1041     c1 -> Print(Form("%s/folder_%s/N_cluster_outer_pass.pdf",mother_folder_directory.c_str(),file_name.c_str()));
1042     c1 -> Clear();
1043 
1044     N_cluster_correlation -> Draw("colz0");
1045     c1 -> Print(Form("%s/folder_%s/N_cluster_correlation.pdf",mother_folder_directory.c_str(),file_name.c_str()));
1046     c1 -> Clear();
1047 
1048     DCA_point -> Draw("colz0");
1049     c1 -> Print(Form("%s/folder_%s/DCA_point_X%.1fY%.1f_.pdf",mother_folder_directory.c_str(),file_name.c_str(),beam_origin.first,beam_origin.second));
1050     c1 -> Clear();
1051 
1052     DCA_distance_inner_phi -> Draw("colz0");
1053     c1 -> Print(Form("%s/folder_%s/DCA_distance_inner_phi_X%.1fY%.1f_.pdf",mother_folder_directory.c_str(),file_name.c_str(),beam_origin.first,beam_origin.second));
1054     c1 -> Clear();
1055 
1056     DCA_distance_outer_phi -> Draw("colz0");
1057     c1 -> Print(Form("%s/folder_%s/DCA_distance_outer_phi_X%.1fY%.1f_.pdf",mother_folder_directory.c_str(),file_name.c_str(),beam_origin.first,beam_origin.second));
1058     c1 -> Clear();
1059 
1060     z_pos_inner_outer -> Draw("colz0");
1061     c1 -> Print(Form("%s/folder_%s/z_pos_inner_outer.pdf",mother_folder_directory.c_str(),file_name.c_str()));
1062     c1 -> Clear();
1063 
1064     z_pos_inner -> Draw("hist");
1065     c1 -> Print(Form("%s/folder_%s/z_pos_inner.pdf",mother_folder_directory.c_str(),file_name.c_str()));
1066     c1 -> Clear();
1067 
1068     z_pos_outer -> Draw("hist");
1069     c1 -> Print(Form("%s/folder_%s/z_pos_outer.pdf",mother_folder_directory.c_str(),file_name.c_str()));
1070     c1 -> Clear();
1071 
1072     Nhits_good -> Draw("hist");
1073     c1 -> Print(Form("%s/folder_%s/Nhits_good.pdf",mother_folder_directory.c_str(),file_name.c_str()));
1074     c1 -> Clear();
1075 
1076     angle_correlation -> Draw("colz0");
1077     c1 -> Print(Form("%s/folder_%s/angle_correlation.pdf",mother_folder_directory.c_str(),file_name.c_str()));
1078     c1 -> Clear();
1079 
1080     z_pos_diff -> Draw("hist");
1081     c1 -> Print(Form("%s/folder_%s/z_pos_diff.pdf",mother_folder_directory.c_str(),file_name.c_str()));
1082     c1 -> Clear();
1083 
1084     z_pos_diff_angle_diff -> Draw("colz0");
1085     c1 -> Print(Form("%s/folder_%s/z_pos_diff_angle_diff.pdf",mother_folder_directory.c_str(),file_name.c_str()));
1086     c1 -> Clear();
1087 
1088     inner_pos_xy -> Draw("colz0");
1089     c1 -> Print(Form("%s/folder_%s/inner_pos_xy.pdf",mother_folder_directory.c_str(),file_name.c_str()));
1090     c1 -> Clear();
1091 
1092     outer_pos_xy -> Draw("colz0");
1093     c1 -> Print(Form("%s/folder_%s/outer_pos_xy.pdf",mother_folder_directory.c_str(),file_name.c_str()));
1094     c1 -> Clear();
1095 
1096     inner_outer_pos_xy -> Draw("colz0");
1097     c1 -> Print(Form("%s/folder_%s/inner_outer_pos_xy.pdf",mother_folder_directory.c_str(),file_name.c_str()));
1098     c1 -> Clear();
1099 
1100     Good_inner_outer_pos_xy_nzB-> Draw("colz0");
1101     c1 -> Print(Form("%s/folder_%s/Good_inner_outer_pos_xy_nzB.pdf",mother_folder_directory.c_str(),file_name.c_str()));
1102     c1 -> Clear();
1103     Good_inner_outer_pos_xy_nzA-> Draw("colz0");
1104     c1 -> Print(Form("%s/folder_%s/Good_inner_outer_pos_xy_nzA.pdf",mother_folder_directory.c_str(),file_name.c_str()));
1105     c1 -> Clear();
1106     Good_inner_outer_pos_xy_pzA-> Draw("colz0");
1107     c1 -> Print(Form("%s/folder_%s/Good_inner_outer_pos_xy_pzA.pdf",mother_folder_directory.c_str(),file_name.c_str()));
1108     c1 -> Clear();
1109     Good_inner_outer_pos_xy_pzB-> Draw("colz0");
1110     c1 -> Print(Form("%s/folder_%s/Good_inner_outer_pos_xy_pzB.pdf",mother_folder_directory.c_str(),file_name.c_str()));
1111     c1 -> Clear();
1112 
1113     Good_track_space -> Draw("");
1114     for (int i = 0; i < good_tracklet_rz.size(); i++){
1115         track_line -> DrawLine(good_tracklet_rz[i][1],good_tracklet_rz[i][0],good_tracklet_rz[i][3],good_tracklet_rz[i][2]);
1116     }
1117     c1 -> Print(Form("%s/folder_%s/good_tracklet_rz.pdf",mother_folder_directory.c_str(),file_name.c_str()));
1118     c1 -> Clear();
1119 
1120     //   note : normalized
1121     dNdeta_hist -> Scale(1./double(N_good_event));    
1122     dNdeta_hist -> GetYaxis() -> SetRangeUser(0,dNdeta_upper_range);
1123     dNdeta_2P_inner_hist -> Scale(1./double(N_good_event));
1124     dNdeta_2P_inner_hist -> GetYaxis() -> SetRangeUser(0,dNdeta_upper_range);
1125     dNdeta_2P_outer_hist -> Scale(1./double(N_good_event));
1126     dNdeta_2P_outer_hist -> GetYaxis() -> SetRangeUser(0,dNdeta_upper_range);
1127 
1128     cout<<" final N good event : "<<N_good_event<<" N event with correct hit : "<<N_event_pass_number<<endl;
1129 
1130 
1131     TCanvas * c3 = new TCanvas("c3","c3",900,800); c3 -> cd();
1132     TPad *pad_obj = new TPad(Form("pad_obj"), "", 0.0, 0.0, 1.0, 1.0);
1133     Characterize_Pad(pad_obj, 0.18,  0.1,  0.1,  0.12, 0, 0);
1134     pad_obj -> SetTicks(1,1);
1135     pad_obj -> Draw();
1136     pad_obj -> cd();
1137 
1138     SetsPhenixStyle();
1139     dNdeta_hist -> Draw("ep");
1140     
1141 
1142     TLatex *ltx = new TLatex();
1143     ltx->SetNDC();
1144     ltx->SetTextSize(0.045);
1145     ltx->DrawLatex(gPad->GetLeftMargin(), 1 - gPad->GetTopMargin() + 0.01, "#it{#bf{sPHENIX INTT}} Work-in-progress");
1146     ltx->DrawLatex(0.48, 0.835, "Run 20869");
1147     ltx->DrawLatex(0.48, 0.785, "Au+Au #sqrt{s_{NN}} = 200 GeV");
1148     c3 -> Print(Form("%s/folder_%s/dNdeta.pdf",mother_folder_directory.c_str(),file_name.c_str()));
1149     pad_obj -> Clear();
1150 
1151     pad_obj -> cd();
1152     dNdeta_2P_inner_hist -> Draw("ep");
1153     ltx->DrawLatex(gPad->GetLeftMargin(), 1 - gPad->GetTopMargin() + 0.01, "#it{#bf{sPHENIX INTT}} Work-in-progress");
1154     ltx->DrawLatex(0.38, 0.835, "Run 20869");
1155     ltx->DrawLatex(0.38, 0.785, "Au+Au #sqrt{s_{NN}} = 200 GeV");
1156     ltx->DrawLatex(0.38, 0.735, "Tracklet : vertex + inner cluster");
1157     c3 -> Print(Form("%s/folder_%s/dNdeta_2P_inner.pdf",mother_folder_directory.c_str(),file_name.c_str()));
1158     pad_obj -> Clear();
1159 
1160     pad_obj -> cd();
1161     dNdeta_2P_outer_hist -> Draw("ep");
1162     ltx->DrawLatex(gPad->GetLeftMargin(), 1 - gPad->GetTopMargin() + 0.01, "#it{#bf{sPHENIX INTT}} Work-in-progress");
1163     ltx->DrawLatex(0.38, 0.835, "Run 20869");
1164     ltx->DrawLatex(0.38, 0.785, "Au+Au #sqrt{s_{NN}} = 200 GeV");
1165     ltx->DrawLatex(0.38, 0.735, "Tracklet : vertex + outer cluster");
1166     c3 -> Print(Form("%s/folder_%s/dNdeta_2P_outer.pdf",mother_folder_directory.c_str(),file_name.c_str()));
1167     pad_obj -> Clear();
1168 
1169 
1170 
1171 
1172 }