File indexing completed on 2025-08-05 08:11:56
0001 #include "TH2INTT.h"
0002
0003 struct chan_info{
0004 int pid;
0005 int module;
0006 int chip;
0007 int chan;
0008 int adc;
0009
0010 };
0011
0012 struct to_ch_str{
0013 int pid;
0014 int module;
0015 int chip;
0016 int chan;
0017 };
0018
0019 to_ch_str convertToIndices(int input) {
0020 const int dim1 = 8;
0021 const int dim2 = 14;
0022 const int dim3 = 26;
0023 const int dim4 = 128;
0024
0025 to_ch_str result;
0026 result.chan = input % dim4;
0027 input /= dim4;
0028 result.chip = input % dim3;
0029 input /= dim3;
0030 result.module = input % dim2;
0031 input /= dim2;
0032 result.pid = input % dim1;
0033
0034 return result;
0035 }
0036
0037 void print_clone_hit()
0038 {
0039
0040 string folder_directory = "/sphenix/user/ChengWei/INTT/INTT_commissioning/ZeroField/20869";
0041 string file_name = "beam_inttall-00020869-0000_event_base_ana";
0042 string output_directory = folder_directory + "/PreCheck_" + file_name;
0043 double standard_ch_ratio_typeA = 1. / (8*14*16*128);
0044 double standard_ch_ratio_typeB = 1. / (8*14*10*128);
0045 int criterion = 3;
0046 bool All_event_used = false;
0047 long long defined_event = 200000;
0048
0049 system(Form("mkdir %s",output_directory.c_str()));
0050
0051 TFile * file_in = TFile::Open(Form("%s/%s.root",folder_directory.c_str(),file_name.c_str()));
0052 TTree * tree = (TTree *)file_in->Get("tree");
0053 long long N_event = (All_event_used == true) ? tree -> GetEntries() : defined_event;
0054 cout<<Form("N_event in file %s : %lli",file_name.c_str(), N_event)<<endl;
0055
0056
0057 int fNhits;
0058 int pid[100000];
0059 int module[100000];
0060 int chip_id[100000];
0061 int chan_id[100000];
0062 int adc[100000];
0063
0064
0065
0066
0067 tree -> SetBranchStatus("*",0);
0068 tree -> SetBranchStatus("fNhits",1);
0069 tree -> SetBranchStatus("fhitArray.pid",1);
0070 tree -> SetBranchStatus("fhitArray.module",1);
0071 tree -> SetBranchStatus("fhitArray.chip_id",1);
0072 tree -> SetBranchStatus("fhitArray.chan_id",1);
0073 tree -> SetBranchStatus("fhitArray.adc",1);
0074
0075
0076
0077 tree -> SetBranchAddress("fNhits",&fNhits);
0078 tree -> GetEntry(0);
0079 tree -> SetBranchAddress("fhitArray.pid",&pid[0]);
0080 tree -> SetBranchAddress("fhitArray.module",&module[0]);
0081 tree -> SetBranchAddress("fhitArray.chip_id",&chip_id[0]);
0082 tree -> SetBranchAddress("fhitArray.chan_id",&chan_id[0]);
0083 tree -> SetBranchAddress("fhitArray.adc",&adc[0]);
0084
0085
0086
0087
0088 int ch_adc[8][14][26][128]; memset(ch_adc, -1, sizeof(ch_adc));
0089 long long ld_clone_all[8][14]; memset(ld_clone_all, 0, sizeof(ld_clone_all));
0090 long long ld_hit_before_all[8][14]; memset(ld_hit_before_all, 0, sizeof(ld_hit_before_all));
0091 long long ld_hit_after_all[8][14]; memset(ld_hit_after_all, 0, sizeof(ld_hit_after_all));
0092 long long ch_hit_after_all[8][14][26][128]; memset(ch_hit_after_all, 0, sizeof(ch_hit_after_all));
0093 long long hit_after_all_typeA = 0;
0094 long long hit_after_all_typeB = 0;
0095 vector<long long>ch_hit_after_all_seq; ch_hit_after_all_seq.clear();
0096 vector<chan_info> event_hit_info_vec; event_hit_info_vec.clear();
0097
0098
0099 int bad_ch[8][14]; memset(bad_ch, 0, sizeof(bad_ch));
0100
0101 for (int i = 0; i < N_event; i++)
0102 {
0103 tree -> GetEntry(i);
0104 if (i % 1000 == 0) cout<<"running : "<<i<<endl;
0105
0106 for (int i1 = 0; i1 < fNhits; i1++)
0107 {
0108 if (pid[i1] > 3000 && pid[i1] < 3009 && module[i1] > -1 && module[i1] < 14 && chip_id[i1] > 0 && chip_id[i1] < 27 && chan_id[i1] > -1 && chan_id[i1] < 128 && adc[i1] > -1 && adc[i1] < 8) {
0109
0110 if (ch_adc[ pid[i1] - 3001 ][ module[i1] ][ chip_id[i1] - 1 ][ chan_id[i1] ] == -1)
0111 {
0112 ch_adc[ pid[i1] - 3001 ][ module[i1] ][ chip_id[i1] - 1 ][ chan_id[i1] ] = adc[i1];
0113 }
0114 else
0115 {
0116 cout<<"clone hit found, event : "<<i<<" pid : "<<pid[i1]<<" module : "<<module[i1]<<" chip : "<<chip_id[i1]<<" chan : "<<chan_id[i1]<<" adc : "<<adc[i1]<<endl;
0117 ld_clone_all[ pid[i1] - 3001 ][ module[i1] ] += 1;
0118 ch_adc[ pid[i1] - 3001 ][ module[i1] ][ chip_id[i1] - 1 ][ chan_id[i1] ] = adc[i1];
0119 }
0120
0121 ld_hit_before_all[ pid[i1] - 3001 ][ module[i1] ] += 1;
0122
0123 }
0124 }
0125
0126 for (int i0 = 0; i0 < 8; i0++)
0127 {
0128 for (int i1 = 0; i1 < 14; i1++)
0129 {
0130 for (int i2 = 0; i2 < 26; i2++)
0131 {
0132 for (int i3 = 0; i3 < 128; i3++)
0133 {
0134 if ( ch_adc[i0][i1][i2][i3] != -1 ){
0135 event_hit_info_vec.push_back({i0, i1, i2+1, i3, ch_adc[i0][i1][i2][i3]});
0136 ld_hit_after_all[i0][i1] += 1;
0137 ch_hit_after_all[i0][i1][i2][i3] += 1;
0138
0139
0140 if ((i2 >= 0 && i2 <= 4) || ( i2 >= 13 && i2 <= 17) ) { hit_after_all_typeB += 1; }
0141 else { hit_after_all_typeA += 1; }
0142 }
0143
0144 }
0145 }
0146 }
0147 }
0148
0149 memset(ch_adc, -1, sizeof(ch_adc));
0150
0151 event_hit_info_vec.clear();
0152
0153 }
0154 }