From b3fc747c957cae9937ec5beb4303de2898cf63d3 Mon Sep 17 00:00:00 2001 From: Shubham Date: Tue, 8 Jan 2019 08:08:15 +0100 Subject: [PATCH 1/8] MIP analysis code for OctTB --- inverted_tracking_cut/AnalyzeHGCOctTB.cc | 547 ++++++++++++++++++ inverted_tracking_cut/AnalyzeHGCOctTB.h | 446 ++++++++++++++ .../Data_muon_config1_one_File.txt | 1 + .../Data_muon_config1_one_File_v7.txt | 1 + .../Data_muon_config1_v1.txt | 20 + .../Data_muon_config1_v2.txt | 20 + .../Data_muon_config1_v7.txt | 20 + .../Data_muon_config1_v7_no_697.txt | 19 + ...ata_muon_config1_v7_no_697_698_699_700.txt | 16 + inverted_tracking_cut/HGCNtupleVariables.cc | 73 +++ inverted_tracking_cut/HGCNtupleVariables.h | 511 ++++++++++++++++ inverted_tracking_cut/Makefile | 37 ++ inverted_tracking_cut/analyzeHGCOctTB | Bin 0 -> 140008 bytes tracking_inclusion/AnalyzeHGCOctTB.cc | 492 ++++++++++++++++ tracking_inclusion/AnalyzeHGCOctTB.h | 422 ++++++++++++++ tracking_inclusion/Data_719_noise_v9.txt | 1 + tracking_inclusion/Data_719_official_v9.txt | 1 + tracking_inclusion/Data_muon_config1.txt | 20 + tracking_inclusion/Data_muon_config1_v7.txt | 20 + tracking_inclusion/Data_muon_config1_v8.txt | 19 + tracking_inclusion/Data_muon_config1_v9.txt | 19 + .../Data_muon_config2_one_File.txt | 1 + .../Data_muon_config2_one_File_v7.txt | 1 + tracking_inclusion/Data_muon_config2_v2.txt | 20 + tracking_inclusion/HGCNtupleVariables.cc | 73 +++ tracking_inclusion/HGCNtupleVariables.h | 511 ++++++++++++++++ tracking_inclusion/Makefile | 37 ++ tracking_inclusion/analyzeHGCOctTB | Bin 0 -> 140008 bytes .../only_EE_layer_config2/AnalyzeHGCOctTB.cc | 388 +++++++++++++ .../only_EE_layer_config2/AnalyzeHGCOctTB.h | 397 +++++++++++++ .../HGCNtupleVariables.cc | 73 +++ .../HGCNtupleVariables.h | 511 ++++++++++++++++ .../only_EE_layer_config2/Makefile | 37 ++ .../only_EE_layer_config2/analyzeHGCOctTB | Bin 0 -> 146544 bytes 34 files changed, 4754 insertions(+) create mode 100644 inverted_tracking_cut/AnalyzeHGCOctTB.cc create mode 100644 inverted_tracking_cut/AnalyzeHGCOctTB.h create mode 100644 inverted_tracking_cut/Data_muon_config1_one_File.txt create mode 100644 inverted_tracking_cut/Data_muon_config1_one_File_v7.txt create mode 100644 inverted_tracking_cut/Data_muon_config1_v1.txt create mode 100644 inverted_tracking_cut/Data_muon_config1_v2.txt create mode 100644 inverted_tracking_cut/Data_muon_config1_v7.txt create mode 100644 inverted_tracking_cut/Data_muon_config1_v7_no_697.txt create mode 100644 inverted_tracking_cut/Data_muon_config1_v7_no_697_698_699_700.txt create mode 100644 inverted_tracking_cut/HGCNtupleVariables.cc create mode 100644 inverted_tracking_cut/HGCNtupleVariables.h create mode 100644 inverted_tracking_cut/Makefile create mode 100755 inverted_tracking_cut/analyzeHGCOctTB create mode 100644 tracking_inclusion/AnalyzeHGCOctTB.cc create mode 100644 tracking_inclusion/AnalyzeHGCOctTB.h create mode 100644 tracking_inclusion/Data_719_noise_v9.txt create mode 100644 tracking_inclusion/Data_719_official_v9.txt create mode 100644 tracking_inclusion/Data_muon_config1.txt create mode 100644 tracking_inclusion/Data_muon_config1_v7.txt create mode 100644 tracking_inclusion/Data_muon_config1_v8.txt create mode 100644 tracking_inclusion/Data_muon_config1_v9.txt create mode 100644 tracking_inclusion/Data_muon_config2_one_File.txt create mode 100644 tracking_inclusion/Data_muon_config2_one_File_v7.txt create mode 100644 tracking_inclusion/Data_muon_config2_v2.txt create mode 100644 tracking_inclusion/HGCNtupleVariables.cc create mode 100644 tracking_inclusion/HGCNtupleVariables.h create mode 100644 tracking_inclusion/Makefile create mode 100755 tracking_inclusion/analyzeHGCOctTB create mode 100644 tracking_inclusion/only_EE_layer_config2/AnalyzeHGCOctTB.cc create mode 100644 tracking_inclusion/only_EE_layer_config2/AnalyzeHGCOctTB.h create mode 100644 tracking_inclusion/only_EE_layer_config2/HGCNtupleVariables.cc create mode 100644 tracking_inclusion/only_EE_layer_config2/HGCNtupleVariables.h create mode 100644 tracking_inclusion/only_EE_layer_config2/Makefile create mode 100755 tracking_inclusion/only_EE_layer_config2/analyzeHGCOctTB diff --git a/inverted_tracking_cut/AnalyzeHGCOctTB.cc b/inverted_tracking_cut/AnalyzeHGCOctTB.cc new file mode 100644 index 0000000..545d59e --- /dev/null +++ b/inverted_tracking_cut/AnalyzeHGCOctTB.cc @@ -0,0 +1,547 @@ +#define AnalyzeHGCOctTB_cxx + +#include +#include +#include +#include "AnalyzeHGCOctTB.h" + +using namespace std; + + + +// chip 3022,44,3028 + + + + +int main(int argc, char* argv[]) +{ + + if (argc < 3) { + cerr << "Please give 4 arguments " << "runList " << " " << "outputFileName" << " " << "dataset" <<" " << "configuration" << endl; + return -1; + } + const char *inputFileList = argv[1]; + const char *outFileName = argv[2]; + const char *data = argv[3]; + const char *config = argv[4]; + + AnalyzeHGCOctTB hgcOctTB(inputFileList, outFileName, data, config); + cout << "dataset " << data << " " << endl; + cout << "congiguration " << config << " " << endl; + + hgcOctTB.EventLoop(data); + return 0; +} + +void AnalyzeHGCOctTB::EventLoop(const char *data) { + if (fChain == 0) return; + + Long64_t nentries = fChain->GetEntriesFast(); + cout << "nentries " << nentries << endl; + cout << "Analyzing dataset " << data << " " << endl; + + Long64_t nbytes = 0, nb = 0; + Long64_t nbytes2 = 0, nb2 = 0; + int decade = 0; + + float rechit_cut[28] = {0.02,0.039,0.019,0.02,0.037,0.076,0.10, + 0.14,0.18,0.24,0.28,0.33,0.48,0.52, + 0.56,0.6,0.64,0.70,0.74,0.78,0.82, + 0.86,0.90,0.92,0.94,0.95,0.98,1.0}; + + bool DEBUG = false; + Long64_t cut_count[28]; + Long64_t nEvents = 0; + Long64_t MIP_pions = 0; + int TOTAL_ACTIVE_LAYER = -1; + int EE_LAYER = -1; + int FH_LAYER = -1; + if(!strcmp(conf_,"alpha") || !strcmp(conf_,"config1")) { + TOTAL_ACTIVE_LAYER = 40; + EE_LAYER = 28; + FH_LAYER = 12; + } + else if(!strcmp(conf_,"bravo") || !strcmp(conf_,"config2")){ + TOTAL_ACTIVE_LAYER = 39; + EE_LAYER = 28; + FH_LAYER = 11; + } + else if(!strcmp(conf_,"charlie") || !strcmp(conf_,"config3")) { + TOTAL_ACTIVE_LAYER = 20; + EE_LAYER = 8; + FH_LAYER = 12; + } + else { + cout<<"ERROR: Unknown configuration!!!!"< decade) + cout << 10 * k << " %" << endl; + decade = k; + + // ===============read this entry == == == == == == == == == == == + + Long64_t ientry = LoadTree(jentry); + if (ientry < 0) { break; cout<<"Breaking"<GetEntry(jentry); nbytes += nb; + nb2 = fChain2->GetEntry(jentry); nbytes2 += nb2; + + if(NRechits == 0) continue; + // if(NRechits > 50 || NRechits < 20) continue; + h_nTracks->Fill(ntracks); + if(ntracks != 1) continue; + if(dwcReferenceType != 15) continue; + Float_t track_x[40]; + Float_t track_y[40]; + + track_x[0] = impactX_HGCal_layer_1; + track_y[0] = impactY_HGCal_layer_1; + track_x[1] = impactX_HGCal_layer_2; + track_y[1] = impactY_HGCal_layer_2; + track_x[2] = impactX_HGCal_layer_3; + track_y[2] = impactY_HGCal_layer_3; + track_x[3] = impactX_HGCal_layer_4; + track_y[3] = impactY_HGCal_layer_4; + track_x[4] = impactX_HGCal_layer_5; + track_y[4] = impactY_HGCal_layer_5; + track_x[5] = impactX_HGCal_layer_6; + track_y[5] = impactY_HGCal_layer_6; + track_x[6] = impactX_HGCal_layer_7; + track_y[6] = impactY_HGCal_layer_7; + track_x[7] = impactX_HGCal_layer_8; + track_y[7] = impactY_HGCal_layer_8; + track_x[8] = impactX_HGCal_layer_9; + track_y[8] = impactY_HGCal_layer_9; + track_x[9] = impactX_HGCal_layer_10; + track_y[9] = impactY_HGCal_layer_10; + track_x[10] = impactX_HGCal_layer_11; + track_y[10] = impactY_HGCal_layer_11; + track_x[11] = impactX_HGCal_layer_12; + track_y[11] = impactY_HGCal_layer_12; + track_x[12] = impactX_HGCal_layer_13; + track_y[12] = impactY_HGCal_layer_13; + track_x[13] = impactX_HGCal_layer_14; + track_y[13] = impactY_HGCal_layer_14; + track_x[14] = impactX_HGCal_layer_15; + track_y[14] = impactY_HGCal_layer_15; + track_x[15] = impactX_HGCal_layer_16; + track_y[15] = impactY_HGCal_layer_16; + track_x[16] = impactX_HGCal_layer_17; + track_y[16] = impactY_HGCal_layer_17; + track_x[17] = impactX_HGCal_layer_18; + track_y[17] = impactY_HGCal_layer_18; + track_x[18] = impactX_HGCal_layer_19; + track_y[18] = impactY_HGCal_layer_19; + track_x[19] = impactX_HGCal_layer_20; + track_y[19] = impactY_HGCal_layer_20; + track_x[20] = impactX_HGCal_layer_21; + track_y[20] = impactY_HGCal_layer_21; + track_x[21] = impactX_HGCal_layer_22; + track_y[21] = impactY_HGCal_layer_22; + track_x[22] = impactX_HGCal_layer_23; + track_y[22] = impactY_HGCal_layer_23; + track_x[23] = impactX_HGCal_layer_24; + track_y[23] = impactY_HGCal_layer_24; + track_x[24] = impactX_HGCal_layer_25; + track_y[24] = impactY_HGCal_layer_25; + track_x[25] = impactX_HGCal_layer_26; + track_y[25] = impactY_HGCal_layer_26; + track_x[26] = impactX_HGCal_layer_27; + track_y[26] = impactY_HGCal_layer_27; + track_x[27] = impactX_HGCal_layer_28; + track_y[27] = impactY_HGCal_layer_28; + track_x[28] = impactX_HGCal_layer_29; + track_y[28] = impactY_HGCal_layer_29; + track_x[29] = impactX_HGCal_layer_30; + track_y[29] = impactY_HGCal_layer_30; + track_x[30] = impactX_HGCal_layer_31; + track_y[30] = impactY_HGCal_layer_31; + track_x[31] = impactX_HGCal_layer_32; + track_y[31] = impactY_HGCal_layer_32; + track_x[32] = impactX_HGCal_layer_33; + track_y[32] = impactY_HGCal_layer_33; + track_x[33] = impactX_HGCal_layer_34; + track_y[33] = impactY_HGCal_layer_34; + track_x[34] = impactX_HGCal_layer_35; + track_y[34] = impactY_HGCal_layer_35; + track_x[35] = impactX_HGCal_layer_36; + track_y[35] = impactY_HGCal_layer_36; + track_x[36] = impactX_HGCal_layer_37; + track_y[36] = impactY_HGCal_layer_37; + track_x[37] = impactX_HGCal_layer_38; + track_y[37] = impactY_HGCal_layer_38; + track_x[38] = impactX_HGCal_layer_39; + track_y[38] = impactY_HGCal_layer_39; + track_x[39] = impactX_HGCal_layer_40; + track_y[39] = impactY_HGCal_layer_40; + + + Double_t rechitEnergySum = 0.0; + Double_t rechitEnergySum_EE = 0.0; + Double_t rechitEnergySum_FH = 0.0; + Double_t un_cali = 0.0; + Long_t Nrechit_layer[40]; + Long_t NRechits_EE[28]; + Long_t NRechits_FH[12][7]; + // long Nrechit_layer[40]; + // long NRechits_EE[28]; + // long NRechits_FH[12][7]; + + int module_part_ = -1; + int module_layer_ = -1; + int module_position_ = -1; + vector dR[40]; + double dr_min_index[40]; + double dr_min[40]; + + for(int ii=0;ii<40;ii++){ + if(ii<28) { + NRechits_EE[ii]=0; + // dR[ii].clear(); + // dr_min_index[ii] = -1.0; + // dr_min[ii] = 1.e10; + } + Nrechit_layer[ii]=0; + dR[ii].clear(); + dr_min_index[ii] = -1.0; + dr_min[ii] = 1.e10; + + } + for(int ii=0;ii<12;ii++){ + for(int jj=0;jj<7;jj++){ + NRechits_FH[ii][jj]=0; + } + } + + + // cout<<"BEFORE!!!"< temp_moduleID; + for(int i = 0 ; i < NRechits; i++){ + temp_moduleID.clear(); + int temp_layer = rechit_layer->at(i); + int temp_chip = rechit_chip->at(i); + int temp_channel = rechit_channel->at(i); + int en_chan = temp_chip*1000+temp_channel; + if(en_chan == 3022 || en_chan == 3028 || en_chan == 44) continue; + // if(rechit_amplitudeHigh->at(i) < 20) continue; + Nrechit_layer[temp_layer-1]++; + + temp_moduleID = getModuleLocation(rechit_module->at(i)); + if(!temp_moduleID.size() || temp_moduleID.size()<3) { + cout<<"ERROR: Could NOT locate MODULE location for module "<at(i)<Fill(rechit_x->at(i),track_x[temp_layer-1]); + // h_rechitY_vs_trackY_layer[temp_layer-1]->Fill(rechit_y->at(i),track_y[temp_layer-1]); + double recx = rechit_x->at(i); + double recy = rechit_y->at(i); + double trackx = track_x[temp_layer-1]; + double tracky = track_y[temp_layer-1]; + double temp = deltaR(recx,recy,-1*trackx,-1*tracky); + double dX = recx - (-1*trackx); + double dY = recy - (-1*tracky); + // cout<<"point A"<Fill(recx,recy); + h_trackX_vs_trackY_layer[temp_layer-1]->Fill(-1*trackx,-1*tracky); + h_rechitX_vs_trackX_layer[temp_layer-1]->Fill(recx,-1*trackx); + h_rechitY_vs_trackY_layer[temp_layer-1]->Fill(recy,-1*tracky); + h_dX_dY_layer[temp_layer-1]->Fill(dX,dY); + h_dR[temp_layer-1]->Fill(abs(temp)); + } + else if(module_position_ == 4) { + h_rechitX_vs_rechitY_FH_layer[temp_layer-EE_LAYER-1][module_position_-1]->Fill(recx,recy); + h_trackX_vs_trackY_FH_layer[temp_layer-EE_LAYER-1][module_position_-1]->Fill(-1*trackx,-1*tracky); + h_rechitX_vs_trackX_FH_layer[temp_layer-EE_LAYER-1][module_position_-1]->Fill(recx,-1*trackx); + h_rechitY_vs_trackY_FH_layer[temp_layer-EE_LAYER-1][module_position_-1]->Fill(recy,-1*tracky); + h_dX_dY_FH_layer[temp_layer-EE_LAYER-1][module_position_-1]->Fill(dX,dY); + h_dR_FH[temp_layer-EE_LAYER-1][module_position_-1]->Fill(abs(temp)); + } + else { + cout<<"ERROR: Something went wrong at Point Romeo Hotel!!!"<Fill(module_part_); + + if(module_part_ == 0) { + rechitEnergySum_EE+=rechit_energy->at(i); + NRechits_EE[module_layer_-1]++; + h_adcHG_EE[module_layer_-1][channel_bin]->Fill(rechit_amplitudeHigh->at(i)); + h_TS3_EE[module_layer_-1][channel_bin]->Fill(rechit_TS3High->at(i)); + } + if(module_part_ == 1) { + rechitEnergySum_FH+=rechit_energy->at(i); + // cout<<"BEFORE ====="<at(i)<Fill(rechit_amplitudeHigh->at(i)); + } + rechitEnergySum+=rechit_energy->at(i); + + } + + + + // cout<<"AFTER!!!"< 50) return; + + if(DEBUG) cout<<"DEBUG: Values Assigned!!!"< 9 ) continue; + Nrechit_FH+=NRechits_FH[iL-EE_LAYER][j]; + h_NRechits_FH[iL-EE_LAYER][j]->Fill(NRechits_FH[iL-EE_LAYER][j]); + // cout<<"LOOK HERE FH = "<Fill(10); + else if(!strcmp(conf_,"bravo")) h_configuration->Fill(20); + else if(!strcmp(conf_,"charlie")) h_configuration->Fill(30); + else { + cout<<"ERROR: Unknown configuration!!!!"< 28) + // cout<<"NRechits_FH["<at(dr_min_index[i]); + int temp_channel = rechit_channel->at(dr_min_index[i]); + int channel_bin = getBIN(temp_chip,temp_channel); + if (channel_bin < 0) { cout<<"INVALID CHANNEL!!!"<at(dr_min_index[i])); + if(!temp_moduleID.size() || temp_moduleID.size()<3) { + cout<<"ERROR: Could NOT locate MODULE location for module "<at(i)<at(i); + int temp_chip = rechit_chip->at(i); + int temp_channel = rechit_channel->at(i); + int channel_bin = getBIN(temp_chip,temp_channel); + if(!(temp_layer == 1 || temp_layer == 14)) continue; //For layer 1 and layer 14 + temp_moduleID.clear(); + module_position_ = -1; + module_layer_ = -1; + module_position_ = -1; + + // if((i == dr_min_index[0] && temp_layer == 1) || (i == dr_min_index[13] && temp_layer == 14)) continue; + if((i == dr_min_index[0]) || (i == dr_min_index[13])) continue; + // if(i == dr_min_index[13] && temp_layer == 14) continue; + if(dr_min[temp_layer-1] < 1.0) continue; + // cout<<"Passed!!"<at(i)); + if(!temp_moduleID.size() || temp_moduleID.size()<3) { + cout<<"ERROR: Could NOT locate MODULE location for module "<at(i)<Fill(pdgID); + h_beamEnergy->Fill(beamEnergy); + h_runNumber->Fill(run); + h_rechit_energy_all->Fill(rechitEnergySum); + h_rechit_energy_EE_only->Fill(rechitEnergySum_EE); + h_rechit_energy_FH_only->Fill(rechitEnergySum_FH); + h_rechit_energy_EE_vs_FH->Fill(rechitEnergySum_EE,rechitEnergySum_FH); + h_rechit_En_NRechits->Fill(NRechits,rechitEnergySum); + // h_Nrechit_EE_vs_FH->Fill(Nrechit_EE,Nrechit_FH); + // h_Nrechit_EE->Fill(Nrechit_EE); + // h_Nrechit_FH->Fill(Nrechit_FH); + + if(DEBUG) cout<<"DEBUG: End of Event = "<GetXaxis()->SetTitle("energy in EE(MIPs)"); + h_rechit_energy_EE_vs_FH->GetYaxis()->SetTitle("energy in FH(MIPs)"); + + h_Nrechit_EE = new TH1F("h_Nrechit_EE","NRechits in EE",500,0.0,1000.0); + h_Nrechit_FH = new TH1F("h_Nrechit_FH","NRechits in FH",500,0.0,1000.0); + h_Nrechit_EE_vs_FH = new TH2F("h_Nrechit_EE_vs_FH","NRechits EE vs FH",500,0.0,1000.0,500,0.0,1000.0); + h_Nrechit_EE_vs_FH->GetXaxis()->SetTitle("NRechits in EE"); + h_Nrechit_EE_vs_FH->GetYaxis()->SetTitle("NRechits in FH"); + + + + h_rechit_En_NRechits = new TH2F("h_rechit_En_NRechits","h_rechit_En_NRechits",100,0,1000,500,0.0,20000.0); + + d_adcHG = oFile->mkdir("ADC_distributions"); + d_adcHG->cd(); + for(int i = 0; i < 28; i++) { + if((!strcmp(conf,"charlie") || !strcmp(conf,"config3")) && (i+1 > 8)) break; + sprintf(dir_name,"EE_%d",i+1); + d_EE[i] = d_adcHG->mkdir(dir_name); + d_EE[i]->cd(); + sprintf(hname,"h_Nrechits_EE_L%d",i+1); + h_NRechits_EE[i] = new TH1F(hname, hname, 50, 0, 50); + sprintf(hname,"h_dR_layer_%d",i+1); + h_dR[i] = new TH1F(hname,hname,21.0,-1.0,20.0); + + sprintf(hname,"h_rechitX_rechitY_layer_%d",i+1); + h_rechitX_vs_rechitY_layer[i] = new TH2F(hname,hname,16,-8.0,8.0,16,-8.0,8.0); + sprintf(hname,"h_trackX_trackY_layer_%d",i+1); + h_trackX_vs_trackY_layer[i] = new TH2F(hname,hname,16,-8.0,8.0,16,-8.0,8.0); + + sprintf(hname,"h_rechitX_trackX_layer_%d",i+1); + h_rechitX_vs_trackX_layer[i] = new TH2F(hname,hname,16,-8.0,8.0,16,-8.0,8.0); + sprintf(hname,"h_rechitY_trackY_layer_%d",i+1); + h_rechitY_vs_trackY_layer[i] = new TH2F(hname,hname,16,-8.0,8.0,16,-8.0,8.0); + + + sprintf(hname,"h_dX_dY_layer_%d",i+1); + h_dX_dY_layer[i] = new TH2F(hname,hname,16,-8.0,8.0,16,-8.0,8.0); + + int chan = 0; + for(int chip = 0; chip < 4; chip++) { + for(int cc = 0; cc < 64; cc+=2,chan++) { + sprintf(hname,"h_adcHG_EE_L%d_P0_chip%d_chan%d",i+1,chip,cc); + h_adcHG_EE[i][chan] = new TH1F(hname, hname, 100, 0, 400); + sprintf(hname,"h_adcHG_EE_L%d_P0_chip%d_chan%d_inv_track",i+1,chip,cc); + h_adcHG_EE_inv_track[i][chan] = new TH1F(hname, hname, 100, 0, 400); + + } + } + } + for(int i = 0; i < 12; i++){ + for(int j = 0; j < 7; j++) { + /* if(!strcmp(conf,"alpha") && (i+1)>9 ) { */ + /* if((j+1) != 4) continue; */ + /* } */ + + sprintf(dir_name,"FH_L%d_P%d",i+1,j+1); + d_FH[i][j] = d_adcHG->mkdir(dir_name); + d_FH[i][j]->cd(); + + sprintf(hname,"h_Nrechits_FH_L%d_P%d",i+1,j+1); + h_NRechits_FH[i][j] = new TH1F(hname, hname, 50, 0, 50); + + sprintf(hname,"h_dR_FH_layer_L%d_P%d",i+1,j+1); + h_dR_FH[i][j] = new TH1F(hname,hname,21.0,-1.0,20.0); + + sprintf(hname,"h_rechitX_rechitY_FH_layer_L%d_P%d",i+1,j+1); + h_rechitX_vs_rechitY_FH_layer[i][j] = new TH2F(hname,hname,16,-8.0,8.0,16,-8.0,8.0); + sprintf(hname,"h_trackX_trackY_FH_layer_L%d_P%d",i+1,j+1); + h_trackX_vs_trackY_FH_layer[i][j] = new TH2F(hname,hname,16,-8.0,8.0,16,-8.0,8.0); + + sprintf(hname,"h_rechitX_trackX_FH_layer_L%d_P%d",i+1,j+1); + h_rechitX_vs_trackX_FH_layer[i][j] = new TH2F(hname,hname,16,-8.0,8.0,16,-8.0,8.0); + sprintf(hname,"h_rechitY_trackY_FH_layer_L%d_P%d",i+1,j+1); + h_rechitY_vs_trackY_FH_layer[i][j] = new TH2F(hname,hname,16,-8.0,8.0,16,-8.0,8.0); + + + sprintf(hname,"h_dX_dY_FH_layer_L%d_P%d",i+1,j+1); + h_dX_dY_FH_layer[i][j] = new TH2F(hname,hname,16,-8.0,8.0,16,-8.0,8.0); + + + int chan = 0; + for(int chip = 0; chip < 4; chip++) { + for(int cc = 0; cc < 64; cc+=2,chan++) { + sprintf(hname,"h_adcHG_FH_L%d_P%d_chip%d_chan%d",i+1,j+1,chip,cc); + h_adcHG_FH[i][j][chan] = new TH1F(hname, hname, 100, 0, 400); + sprintf(hname,"h_adcHG_FH_L%d_P%d_chip%d_chan%d_track",i+1,j+1,chip,cc); + h_adcHG_FH_inv_track[i][j][chan] = new TH1F(hname, hname, 100, 0, 400); + + + } + } + } + } + + + d_TS3 = oFile->mkdir("TS3_distributions"); + d_TS3->cd(); + for(int i = 0; i < 28; i++) { + if((!strcmp(conf,"charlie") || !strcmp(conf,"config3")) && (i+1 > 8)) break; + sprintf(dir_name,"EE_%d",i+1); + d_EE[i] = d_TS3->mkdir(dir_name); + d_EE[i]->cd(); + int chan = 0; + for(int chip = 0; chip < 4; chip++) { + for(int cc = 0; cc < 64; cc+=2,chan++) { + sprintf(hname,"h_TS3_EE_L%d_P0_chip%d_chan%d",i+1,chip,cc); + h_TS3_EE[i][chan] = new TH1F(hname, hname, 100, 0, 400); + sprintf(hname,"h_TS3_EE_L%d_P0_chip%d_chan%d_inv_track",i+1,chip,cc); + h_TS3_EE_inv_track[i][chan] = new TH1F(hname, hname, 100, 0, 400); + + } + } + } + + // sprintf(hname,"h_rechit_E_full_official"); + // h_ERechits_full_official_calib = new TH1F(hname,hname,375.0,0.0,25000.0); + + // sprintf(hname,"h_rechit_E_full_my"); + // h_ERechits_full_my_calib = new TH1F(hname,hname,375.0,0.0,25000.0); + + + // d_Nrechit_layer = oFile->mkdir("Nrechit_layer"); + // d_Nrechit_layer->cd(); + + // for (int i=0;i<28;i++) { + // sprintf(hname,"h_rechit_layer_%d",i+1); + // h_nRechits_layer[i] = new TH1F(hname,hname,3000,0.0,3000.0); + // } + + + + // d_rechit_en_layer = oFile->mkdir("rechit_energys"); + // d_rechit_en_layer->cd(); + + + // for (int i=0;i<28;i++) { + // sprintf(hname,"h_rechit_E_layer_%d",i); + // h_ERechits_layer[i] = new TH1F(hname,hname,250.0,0.0,5000.0); + // } + + + +} + + +void AnalyzeHGCOctTB::moduleMap_init(const char* config) { + char *f_name = new char[200]; + + if(strcmp(config,"alpha")==0 || strcmp(config,"config1")==0) { + sprintf(f_name,"../config_maps/moduleMAP_config1.txt"); + cout<<"\n\nINFO: Mapping module configuration ALPHA (oct10-oct17) "<>layer_>>module_>>chip_>>channel_>>adc_){ +// en_chan = chip_*1000+channel_; +// std::pair temp; +// temp = std::make_pair(layer_,en_chan); +// std::pair, float> temp1; +// temp1 = std::make_pair(temp, adc_); +// offical_calib_map.insert(temp1); +// } +// } + +// void AnalyzeHGCOctTB::my_calib_init() { +// char *f_name = new char[200]; +// sprintf(f_name,"/home/shubham/work/HGCAL/CERNTB/CERN_5_oct_2018/txt_files/ADC_MIP_v11.txt"); +// std::ifstream in(f_name); +// if(!in){ +// cout<<"Could not find "<>layer_>>chip_>>channel_>>adc_>>chi2>>mip_err>>entry){ +// en_chan = chip_*1000+channel_; +// std::pair temp; +// temp = std::make_pair(layer_+1,en_chan); +// std::pair, float> temp1; +// temp1 = std::make_pair(temp, adc_); +// my_calib_map.insert(temp1); +// } +// } + +AnalyzeHGCOctTB::AnalyzeHGCOctTB(const TString &inputFileList, const char *outFileName, const char* dataset, const char* config) { + + TChain *tree = new TChain("rechitntupler/hits"); + TChain *tree2 = new TChain("trackimpactntupler/impactPoints"); + + if( ! FillChain(tree, tree2, inputFileList) ) { + std::cerr << "Cannot get the tree " << std::endl; + } else { + std::cout << "Initiating analysis of dataset " << dataset << std::endl; + } + + /* if( ! FillChain(tree, inputFileList) ) { */ + /* std::cerr << "Cannot get the tree " << std::endl; */ + /* } else { */ + /* std::cout << "Initiating analysis of dataset " << dataset << std::endl; */ + /* } */ + + HGCNtupleVariables::Init(tree, tree2); + /* HGCNtupleVariables::Init(tree); */ + + BookHistogram(outFileName, config); + moduleMap_init(config); + // offical_calib_init(); + // my_calib_init(); + +} + +Bool_t AnalyzeHGCOctTB::FillChain(TChain *chain, TChain *chain2, const TString &inputFileList) { +/* Bool_t AnalyzeHGCOctTB::FillChain(TChain *chain, const TString &inputFileList) { */ + + ifstream infile(inputFileList, ifstream::in); + std::string buffer; + + if(!infile.is_open()) { + std::cerr << "** ERROR: Can't open '" << inputFileList << "' for input" << std::endl; + return kFALSE; + } + + std::cout << "TreeUtilities : FillChain " << std::endl; + while(1) { + infile >> buffer; + if(!infile.good()) break; + //std::cout << "Adding tree from " << buffer.c_str() << std::endl; + chain->Add(buffer.c_str()); + chain2->Add(buffer.c_str()); + } + std::cout << "No. of Entries in chain : " << chain->GetEntries() << std::endl; + std::cout << "No. of Entries in chain2 : " << chain2->GetEntries() << std::endl; + return kTRUE; +} + +Long64_t AnalyzeHGCOctTB::LoadTree(Long64_t entry) { + // Set the environment to read one entry + if (!fChain) return -5; + Long64_t centry = fChain->LoadTree(entry); + if (centry < 0) return centry; + if (!fChain->InheritsFrom(TChain::Class())) return centry; + TChain *chain = (TChain*)fChain; + if (chain->GetTreeNumber() != fCurrent) { + fCurrent = chain->GetTreeNumber(); + // Notify(); + } + + if (!fChain2) return -5; + Long64_t centry2 = fChain2->LoadTree(entry); + if (centry2 < 0) return centry2; + if (!fChain2->InheritsFrom(TChain::Class())) return centry2; + TChain *chain2 = (TChain*)fChain2; + if (chain2->GetTreeNumber() != fCurrent) { + fCurrent = chain->GetTreeNumber(); + // Notify(); + } + + + //if (centry==centry2) + return centry; + // cout<<"centry = "<0) + // return centry; + // else return -1; +} + +AnalyzeHGCOctTB::~AnalyzeHGCOctTB() { + + // if (!fChain || !fChain2) return; + // delete fChain->GetCurrentFile(); + // delete fChain2->GetCurrentFile(); + // oFile->cd(); + // oFile->Write(); + // oFile->Close(); + + + if (!fChain) return; + delete fChain->GetCurrentFile(); + oFile->cd(); + oFile->Write(); + oFile->Close(); + +} + +#endif diff --git a/inverted_tracking_cut/Data_muon_config1_one_File.txt b/inverted_tracking_cut/Data_muon_config1_one_File.txt new file mode 100644 index 0000000..ead5cb8 --- /dev/null +++ b/inverted_tracking_cut/Data_muon_config1_one_File.txt @@ -0,0 +1 @@ +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v2/ntuple_697.root diff --git a/inverted_tracking_cut/Data_muon_config1_one_File_v7.txt b/inverted_tracking_cut/Data_muon_config1_one_File_v7.txt new file mode 100644 index 0000000..7ef597b --- /dev/null +++ b/inverted_tracking_cut/Data_muon_config1_one_File_v7.txt @@ -0,0 +1 @@ +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v7/ntuple_697.root diff --git a/inverted_tracking_cut/Data_muon_config1_v1.txt b/inverted_tracking_cut/Data_muon_config1_v1.txt new file mode 100644 index 0000000..6d4b60f --- /dev/null +++ b/inverted_tracking_cut/Data_muon_config1_v1.txt @@ -0,0 +1,20 @@ +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v1/ntuple_697.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v1/ntuple_698.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v1/ntuple_699.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v1/ntuple_700.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v1/ntuple_701.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v1/ntuple_702.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v1/ntuple_704.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v1/ntuple_705.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v1/ntuple_708.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v1/ntuple_709.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v1/ntuple_710.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v1/ntuple_712.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v1/ntuple_713.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v1/ntuple_714.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v1/ntuple_715.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v1/ntuple_717.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v1/ntuple_718.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v1/ntuple_719.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v1/ntuple_721.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v1/ntuple_722.root diff --git a/inverted_tracking_cut/Data_muon_config1_v2.txt b/inverted_tracking_cut/Data_muon_config1_v2.txt new file mode 100644 index 0000000..e1c8a90 --- /dev/null +++ b/inverted_tracking_cut/Data_muon_config1_v2.txt @@ -0,0 +1,20 @@ +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v2/ntuple_697.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v2/ntuple_698.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v2/ntuple_699.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v2/ntuple_700.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v2/ntuple_701.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v2/ntuple_702.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v2/ntuple_704.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v2/ntuple_705.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v2/ntuple_708.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v2/ntuple_709.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v2/ntuple_710.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v2/ntuple_712.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v2/ntuple_713.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v2/ntuple_714.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v2/ntuple_715.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v2/ntuple_717.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v2/ntuple_718.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v2/ntuple_719.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v2/ntuple_721.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v2/ntuple_722.root diff --git a/inverted_tracking_cut/Data_muon_config1_v7.txt b/inverted_tracking_cut/Data_muon_config1_v7.txt new file mode 100644 index 0000000..834a3f8 --- /dev/null +++ b/inverted_tracking_cut/Data_muon_config1_v7.txt @@ -0,0 +1,20 @@ +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v7/ntuple_697.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v7/ntuple_698.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v7/ntuple_699.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v7/ntuple_700.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v7/ntuple_701.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v7/ntuple_702.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v7/ntuple_704.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v7/ntuple_705.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v7/ntuple_708.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v7/ntuple_709.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v7/ntuple_710.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v7/ntuple_712.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v7/ntuple_713.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v7/ntuple_714.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v7/ntuple_715.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v7/ntuple_717.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v7/ntuple_718.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v7/ntuple_719.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v7/ntuple_721.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v7/ntuple_722.root diff --git a/inverted_tracking_cut/Data_muon_config1_v7_no_697.txt b/inverted_tracking_cut/Data_muon_config1_v7_no_697.txt new file mode 100644 index 0000000..42dadfe --- /dev/null +++ b/inverted_tracking_cut/Data_muon_config1_v7_no_697.txt @@ -0,0 +1,19 @@ +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v7/ntuple_698.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v7/ntuple_699.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v7/ntuple_700.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v7/ntuple_701.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v7/ntuple_702.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v7/ntuple_704.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v7/ntuple_705.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v7/ntuple_708.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v7/ntuple_709.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v7/ntuple_710.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v7/ntuple_712.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v7/ntuple_713.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v7/ntuple_714.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v7/ntuple_715.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v7/ntuple_717.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v7/ntuple_718.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v7/ntuple_719.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v7/ntuple_721.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v7/ntuple_722.root diff --git a/inverted_tracking_cut/Data_muon_config1_v7_no_697_698_699_700.txt b/inverted_tracking_cut/Data_muon_config1_v7_no_697_698_699_700.txt new file mode 100644 index 0000000..00adba3 --- /dev/null +++ b/inverted_tracking_cut/Data_muon_config1_v7_no_697_698_699_700.txt @@ -0,0 +1,16 @@ +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v7/ntuple_701.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v7/ntuple_702.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v7/ntuple_704.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v7/ntuple_705.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v7/ntuple_708.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v7/ntuple_709.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v7/ntuple_710.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v7/ntuple_712.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v7/ntuple_713.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v7/ntuple_714.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v7/ntuple_715.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v7/ntuple_717.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v7/ntuple_718.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v7/ntuple_719.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v7/ntuple_721.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v7/ntuple_722.root diff --git a/inverted_tracking_cut/HGCNtupleVariables.cc b/inverted_tracking_cut/HGCNtupleVariables.cc new file mode 100644 index 0000000..cf7cd2f --- /dev/null +++ b/inverted_tracking_cut/HGCNtupleVariables.cc @@ -0,0 +1,73 @@ +#define HGCNtupleVariables_cxx +#include "HGCNtupleVariables.h" +#include +#include +#include +//#include + + + + +float HGCNtupleVariables::deltaR(float x1, float y1, float x2, float y2) { + float deltaR_ = sqrt(pow((x2-x1),2) + pow((y2-y1),2)); + return deltaR_; +} + + +int HGCNtupleVariables::getBIN(unsigned int skiroc,unsigned int channel) { + if (channel%2 != 0 || channel > 62 || skiroc > 3) return -1; + else return (skiroc*32 + (channel/2)); +} + + +std::vector HGCNtupleVariables::getModuleLocation(int moduleID) { + std::map>::iterator it = module_map.find(moduleID); + if(it != module_map.end()){ + return it->second; + } + else { + return std::vector(); + } +} + + + +//double HGCNtupleVariables::shower_comparisons(TProfile* shower, TH1F* hist) { +// TH1F* HGCNtupleVariables::shower_comparisons(TProfile* shower, TH1F* hist) { +// // TFile* file0 = TFile::Open("/home/shubham/work/HGCAL/CERNTB/niramay/niramay_github/forked_repo/E_Pi_Comparison/functions/Template_150_GeV.root"); +// // TH1F* ref_hist = (TH1F*)file0->Get("hist_ref_template"); +// //TH1F* hist = new TH1F("hist","hist",30,0,30); +// for(int i = 1; i <= shower->GetNbinsX(); i++){ +// hist->SetBinContent(i,shower->GetBinContent(i)); +// } +// return hist; +// //return (hist->Chi2Test(ref_h,"CHI2/NDF")); +// } + + +// float HGCNtupleVariables::find_official_calib(int layer, int en_chan){ +// std::pair temp_find; +// temp_find = std::make_pair(layer,en_chan); +// std::map, float >::iterator it = offical_calib_map.find(temp_find); +// if(it != offical_calib_map.end()){ +// return it->second; +// } +// else { +// return -1.0; +// } +// } + + +// float HGCNtupleVariables::find_my_calib(int layer, int en_chan){ +// std::pair temp_find; +// temp_find = std::make_pair(layer,en_chan); +// std::map, float >::iterator it = my_calib_map.find(temp_find); +// if(it != my_calib_map.end()){ +// return it->second; +// } +// else { +// return -1.0; +// } +// } + + diff --git a/inverted_tracking_cut/HGCNtupleVariables.h b/inverted_tracking_cut/HGCNtupleVariables.h new file mode 100644 index 0000000..2ad02fa --- /dev/null +++ b/inverted_tracking_cut/HGCNtupleVariables.h @@ -0,0 +1,511 @@ +////////////////////////////////////////////////////////// +// This class has been automatically generated on +// Thu Aug 16 18:22:34 2018 by ROOT version 6.06/01 +// from TTree hits/HGC rechits +// found on file: muon_v10.root +////////////////////////////////////////////////////////// + +#ifndef HGCNtupleVariables_h +#define HGCNtupleVariables_h + +#include +#include +#include +#include + +// Header file for the classes stored in the TTree if any. +#include "vector" + +using namespace std; + +class HGCNtupleVariables { +public : + + HGCNtupleVariables(TTree * /*tree*/ =0) : fChain(0) { } + ~HGCNtupleVariables() { } + /* void Init(TTree *tree); */ + void Init(TTree *tree, TTree *tree2); + Bool_t Notify(); + Int_t GetEntry(Long64_t entry, Int_t getall = 0) { return fChain ? fChain->GetTree()->GetEntry(entry, getall) : 0; } + std::vector getModuleLocation(int moduleID); + int getBIN(unsigned int skiroc,unsigned int channel); + float deltaR(float x1, float y1, float x2, float y2); + //double shower_comparisons(TProfile* shower, TH1F* hist); + //double shower_comparisons(TProfile* shower, TH1F* ref_h); + // TH1F* shower_comparisons(TProfile* shower, TH1F* hist); + // float find_my_calib(int layer, int en_chan); + // float find_official_calib(int layer, int en_chan); + std::map> module_map; + // std::map, float> offical_calib_map; + // std::map, float> my_calib_map; + + TTree *fChain; //!pointer to the analyzed TTree or TChain + TTree *fChain2; //!pointer to the analyzed TTree or TChain + Int_t fCurrent; //!current Tree number in a TChain + Int_t fCurrent2; //!current Tree number in a TChain + + // Fixed size dimensions of array or collections stored in the TTree if any. + + // Declaration of leaf types + UInt_t event; + UInt_t run; + Int_t pdgID; + Float_t beamEnergy; + Float_t trueBeamEnergy; + Int_t NRechits; + vector *rechit_detid; + vector *rechit_module; + vector *rechit_layer; + vector *rechit_chip; + vector *rechit_channel; + vector *rechit_type; + vector *rechit_x; + vector *rechit_y; + vector *rechit_z; + vector *rechit_iu; + vector *rechit_iv; + vector *rechit_energy; + vector *rechit_energy_noHG; + vector *rechit_amplitudeHigh; + vector *rechit_amplitudeLow; + vector *rechit_hg_goodFit; + vector *rechit_lg_goodFit; + vector *rechit_hg_saturated; + vector *rechit_lg_saturated; + vector *rechit_fully_calibrated; + vector *rechit_TS2High; + vector *rechit_TS2Low; + vector *rechit_TS3High; + vector *rechit_TS3Low; + vector *rechit_Tot; + vector *rechit_time; + vector *rechit_timeMaxHG; + vector *rechit_timeMaxLG; + vector *rechit_toaRise; + vector *rechit_toaFall; + + // List of branches + TBranch *b_event; //! + TBranch *b_run; //! + TBranch *b_pdgID; //! + TBranch *b_beamEnergy; //! + TBranch *b_trueBeamEnergy; //! + TBranch *b_NRechits; //! + TBranch *b_rechit_detid; //! + TBranch *b_rechit_module; //! + TBranch *b_rechit_layer; //! + TBranch *b_rechit_chip; //! + TBranch *b_rechit_channel; //! + TBranch *b_rechit_type; //! + TBranch *b_rechit_x; //! + TBranch *b_rechit_y; //! + TBranch *b_rechit_z; //! + TBranch *b_rechit_iu; //! + TBranch *b_rechit_iv; //! + TBranch *b_rechit_energy; //! + TBranch *b_rechit_energy_noHG; //! + TBranch *b_rechit_amplitudeHigh; //! + TBranch *b_rechit_amplitudeLow; //! + TBranch *b_rechit_hg_goodFit; //! + TBranch *b_rechit_lg_goodFit; //! + TBranch *b_rechit_hg_saturated; //! + TBranch *b_rechit_lg_saturated; //! + TBranch *b_rechit_fully_calibrated; //! + TBranch *b_rechit_TS2High; //! + TBranch *b_rechit_TS2Low; //! + TBranch *b_rechit_TS3High; //! + TBranch *b_rechit_TS3Low; //! + TBranch *b_rechit_Tot; //! + TBranch *b_rechit_time; //! + TBranch *b_rechit_timeMaxHG; //! + TBranch *b_rechit_timeMaxLG; //! + TBranch *b_rechit_toaRise; //! + TBranch *b_rechit_toaFall; //! + + // second tree + Int_t ntracks; + Float_t impactX_HGCal_layer_1; + Float_t impactY_HGCal_layer_1; + Float_t impactX_HGCal_layer_2; + Float_t impactY_HGCal_layer_2; + Float_t impactX_HGCal_layer_3; + Float_t impactY_HGCal_layer_3; + Float_t impactX_HGCal_layer_4; + Float_t impactY_HGCal_layer_4; + Float_t impactX_HGCal_layer_5; + Float_t impactY_HGCal_layer_5; + Float_t impactX_HGCal_layer_6; + Float_t impactY_HGCal_layer_6; + Float_t impactX_HGCal_layer_7; + Float_t impactY_HGCal_layer_7; + Float_t impactX_HGCal_layer_8; + Float_t impactY_HGCal_layer_8; + Float_t impactX_HGCal_layer_9; + Float_t impactY_HGCal_layer_9; + Float_t impactX_HGCal_layer_10; + Float_t impactY_HGCal_layer_10; + Float_t impactX_HGCal_layer_11; + Float_t impactY_HGCal_layer_11; + Float_t impactX_HGCal_layer_12; + Float_t impactY_HGCal_layer_12; + Float_t impactX_HGCal_layer_13; + Float_t impactY_HGCal_layer_13; + Float_t impactX_HGCal_layer_14; + Float_t impactY_HGCal_layer_14; + Float_t impactX_HGCal_layer_15; + Float_t impactY_HGCal_layer_15; + Float_t impactX_HGCal_layer_16; + Float_t impactY_HGCal_layer_16; + Float_t impactX_HGCal_layer_17; + Float_t impactY_HGCal_layer_17; + Float_t impactX_HGCal_layer_18; + Float_t impactY_HGCal_layer_18; + Float_t impactX_HGCal_layer_19; + Float_t impactY_HGCal_layer_19; + Float_t impactX_HGCal_layer_20; + Float_t impactY_HGCal_layer_20; + Float_t impactX_HGCal_layer_21; + Float_t impactY_HGCal_layer_21; + Float_t impactX_HGCal_layer_22; + Float_t impactY_HGCal_layer_22; + Float_t impactX_HGCal_layer_23; + Float_t impactY_HGCal_layer_23; + Float_t impactX_HGCal_layer_24; + Float_t impactY_HGCal_layer_24; + Float_t impactX_HGCal_layer_25; + Float_t impactY_HGCal_layer_25; + Float_t impactX_HGCal_layer_26; + Float_t impactY_HGCal_layer_26; + Float_t impactX_HGCal_layer_27; + Float_t impactY_HGCal_layer_27; + Float_t impactX_HGCal_layer_28; + Float_t impactY_HGCal_layer_28; + Float_t impactX_HGCal_layer_29; + Float_t impactY_HGCal_layer_29; + Float_t impactX_HGCal_layer_30; + Float_t impactY_HGCal_layer_30; + Float_t impactX_HGCal_layer_31; + Float_t impactY_HGCal_layer_31; + Float_t impactX_HGCal_layer_32; + Float_t impactY_HGCal_layer_32; + Float_t impactX_HGCal_layer_33; + Float_t impactY_HGCal_layer_33; + Float_t impactX_HGCal_layer_34; + Float_t impactY_HGCal_layer_34; + Float_t impactX_HGCal_layer_35; + Float_t impactY_HGCal_layer_35; + Float_t impactX_HGCal_layer_36; + Float_t impactY_HGCal_layer_36; + Float_t impactX_HGCal_layer_37; + Float_t impactY_HGCal_layer_37; + Float_t impactX_HGCal_layer_38; + Float_t impactY_HGCal_layer_38; + Float_t impactX_HGCal_layer_39; + Float_t impactY_HGCal_layer_39; + Float_t impactX_HGCal_layer_40; + Float_t impactY_HGCal_layer_40; + + + Float_t trackChi2_X; + Float_t trackChi2_Y; + Int_t dwcReferenceType; + Double_t m_x; + Double_t m_y; + Double_t b_x; + Double_t b_y; + + // List of branches + TBranch *b_ntracks; //! + TBranch *b_impactX_HGCal_layer_1; //! + TBranch *b_impactY_HGCal_layer_1; //! + TBranch *b_impactX_HGCal_layer_2; //! + TBranch *b_impactY_HGCal_layer_2; //! + TBranch *b_impactX_HGCal_layer_3; //! + TBranch *b_impactY_HGCal_layer_3; //! + TBranch *b_impactX_HGCal_layer_4; //! + TBranch *b_impactY_HGCal_layer_4; //! + TBranch *b_impactX_HGCal_layer_5; //! + TBranch *b_impactY_HGCal_layer_5; //! + TBranch *b_impactX_HGCal_layer_6; //! + TBranch *b_impactY_HGCal_layer_6; //! + TBranch *b_impactX_HGCal_layer_7; //! + TBranch *b_impactY_HGCal_layer_7; //! + TBranch *b_impactX_HGCal_layer_8; //! + TBranch *b_impactY_HGCal_layer_8; //! + TBranch *b_impactX_HGCal_layer_9; //! + TBranch *b_impactY_HGCal_layer_9; //! + TBranch *b_impactX_HGCal_layer_10; //! + TBranch *b_impactY_HGCal_layer_10; //! + TBranch *b_impactX_HGCal_layer_11; //! + TBranch *b_impactY_HGCal_layer_11; //! + TBranch *b_impactX_HGCal_layer_12; //! + TBranch *b_impactY_HGCal_layer_12; //! + TBranch *b_impactX_HGCal_layer_13; //! + TBranch *b_impactY_HGCal_layer_13; //! + TBranch *b_impactX_HGCal_layer_14; //! + TBranch *b_impactY_HGCal_layer_14; //! + TBranch *b_impactX_HGCal_layer_15; //! + TBranch *b_impactY_HGCal_layer_15; //! + TBranch *b_impactX_HGCal_layer_16; //! + TBranch *b_impactY_HGCal_layer_16; //! + TBranch *b_impactX_HGCal_layer_17; //! + TBranch *b_impactY_HGCal_layer_17; //! + TBranch *b_impactX_HGCal_layer_18; //! + TBranch *b_impactY_HGCal_layer_18; //! + TBranch *b_impactX_HGCal_layer_19; //! + TBranch *b_impactY_HGCal_layer_19; //! + TBranch *b_impactX_HGCal_layer_20; //! + TBranch *b_impactY_HGCal_layer_20; //! + TBranch *b_impactX_HGCal_layer_21; //! + TBranch *b_impactY_HGCal_layer_21; //! + TBranch *b_impactX_HGCal_layer_22; //! + TBranch *b_impactY_HGCal_layer_22; //! + TBranch *b_impactX_HGCal_layer_23; //! + TBranch *b_impactY_HGCal_layer_23; //! + TBranch *b_impactX_HGCal_layer_24; //! + TBranch *b_impactY_HGCal_layer_24; //! + TBranch *b_impactX_HGCal_layer_25; //! + TBranch *b_impactY_HGCal_layer_25; //! + TBranch *b_impactX_HGCal_layer_26; //! + TBranch *b_impactY_HGCal_layer_26; //! + TBranch *b_impactX_HGCal_layer_27; //! + TBranch *b_impactY_HGCal_layer_27; //! + TBranch *b_impactX_HGCal_layer_28; //! + TBranch *b_impactY_HGCal_layer_28; //! + TBranch *b_impactX_HGCal_layer_29; + TBranch *b_impactY_HGCal_layer_29; + TBranch *b_impactX_HGCal_layer_30; + TBranch *b_impactY_HGCal_layer_30; + TBranch *b_impactX_HGCal_layer_31; + TBranch *b_impactY_HGCal_layer_31; + TBranch *b_impactX_HGCal_layer_32; + TBranch *b_impactY_HGCal_layer_32; + TBranch *b_impactX_HGCal_layer_33; + TBranch *b_impactY_HGCal_layer_33; + TBranch *b_impactX_HGCal_layer_34; + TBranch *b_impactY_HGCal_layer_34; + TBranch *b_impactX_HGCal_layer_35; + TBranch *b_impactY_HGCal_layer_35; + TBranch *b_impactX_HGCal_layer_36; + TBranch *b_impactY_HGCal_layer_36; + TBranch *b_impactX_HGCal_layer_37; + TBranch *b_impactY_HGCal_layer_37; + TBranch *b_impactX_HGCal_layer_38; + TBranch *b_impactY_HGCal_layer_38; + TBranch *b_impactX_HGCal_layer_39; + TBranch *b_impactY_HGCal_layer_39; + TBranch *b_impactX_HGCal_layer_40; + TBranch *b_impactY_HGCal_layer_40; + + TBranch *b_trackChi2_X; //! + TBranch *b_trackChi2_Y; //! + TBranch *b_dwcReferenceType; //! + TBranch *b_m_x; //! + TBranch *b_m_y; //! + TBranch *b_b_x; //! + TBranch *b_b_y; //! + + + +}; + +#endif + +#ifdef HGCNtupleVariables_cxx + +void HGCNtupleVariables::Init(TTree *tree, TTree *tree2) +/* void HGCNtupleVariables::Init(TTree *tree) */ +{ + // The Init() function is called when the selector needs to initialize + // a new tree or chain. Typically here the branch addresses and branch + // pointers of the tree will be set. + // It is normally not necessary to make changes to the generated + // code, but the routine can be extended by the user if needed. + // Init() will be called many times when running on PROOF + // (once per file to be processed). + + // Set object pointer + rechit_detid = 0; + rechit_module = 0; + rechit_layer = 0; + rechit_chip = 0; + rechit_channel = 0; + rechit_type = 0; + rechit_x = 0; + rechit_y = 0; + rechit_z = 0; + rechit_iu = 0; + rechit_iv = 0; + rechit_energy = 0; + rechit_energy_noHG = 0; + rechit_amplitudeHigh = 0; + rechit_amplitudeLow = 0; + rechit_hg_goodFit = 0; + rechit_lg_goodFit = 0; + rechit_hg_saturated = 0; + rechit_lg_saturated = 0; + rechit_fully_calibrated = 0; + rechit_TS2High = 0; + rechit_TS2Low = 0; + rechit_TS3High = 0; + rechit_TS3Low = 0; + rechit_Tot = 0; + rechit_time = 0; + rechit_timeMaxHG = 0; + rechit_timeMaxLG = 0; + rechit_toaRise = 0; + rechit_toaFall = 0; + // Set branch addresses and branch pointers + if (!tree) return; + fChain = tree; + fCurrent = -1; + fChain->SetMakeClass(1); + + fChain->SetBranchAddress("event", &event, &b_event); + fChain->SetBranchAddress("run", &run, &b_run); + fChain->SetBranchAddress("pdgID", &pdgID, &b_pdgID); + fChain->SetBranchAddress("beamEnergy", &beamEnergy, &b_beamEnergy); + fChain->SetBranchAddress("trueBeamEnergy", &trueBeamEnergy, &b_trueBeamEnergy); + fChain->SetBranchAddress("NRechits", &NRechits, &b_NRechits); + fChain->SetBranchAddress("rechit_detid", &rechit_detid, &b_rechit_detid); + fChain->SetBranchAddress("rechit_module", &rechit_module, &b_rechit_module); + fChain->SetBranchAddress("rechit_layer", &rechit_layer, &b_rechit_layer); + fChain->SetBranchAddress("rechit_chip", &rechit_chip, &b_rechit_chip); + fChain->SetBranchAddress("rechit_channel", &rechit_channel, &b_rechit_channel); + fChain->SetBranchAddress("rechit_type", &rechit_type, &b_rechit_type); + fChain->SetBranchAddress("rechit_x", &rechit_x, &b_rechit_x); + fChain->SetBranchAddress("rechit_y", &rechit_y, &b_rechit_y); + fChain->SetBranchAddress("rechit_z", &rechit_z, &b_rechit_z); + fChain->SetBranchAddress("rechit_iu", &rechit_iu, &b_rechit_iu); + fChain->SetBranchAddress("rechit_iv", &rechit_iv, &b_rechit_iv); + fChain->SetBranchAddress("rechit_energy", &rechit_energy, &b_rechit_energy); + fChain->SetBranchAddress("rechit_energy_noHG", &rechit_energy_noHG, &b_rechit_energy_noHG); + fChain->SetBranchAddress("rechit_amplitudeHigh", &rechit_amplitudeHigh, &b_rechit_amplitudeHigh); + fChain->SetBranchAddress("rechit_amplitudeLow", &rechit_amplitudeLow, &b_rechit_amplitudeLow); + fChain->SetBranchAddress("rechit_hg_goodFit", &rechit_hg_goodFit, &b_rechit_hg_goodFit); + fChain->SetBranchAddress("rechit_lg_goodFit", &rechit_lg_goodFit, &b_rechit_lg_goodFit); + fChain->SetBranchAddress("rechit_hg_saturated", &rechit_hg_saturated, &b_rechit_hg_saturated); + fChain->SetBranchAddress("rechit_lg_saturated", &rechit_lg_saturated, &b_rechit_lg_saturated); + fChain->SetBranchAddress("rechit_fully_calibrated", &rechit_fully_calibrated, &b_rechit_fully_calibrated); + fChain->SetBranchAddress("rechit_TS2High", &rechit_TS2High, &b_rechit_TS2High); + fChain->SetBranchAddress("rechit_TS2Low", &rechit_TS2Low, &b_rechit_TS2Low); + fChain->SetBranchAddress("rechit_TS3High", &rechit_TS3High, &b_rechit_TS3High); + fChain->SetBranchAddress("rechit_TS3Low", &rechit_TS3Low, &b_rechit_TS3Low); + fChain->SetBranchAddress("rechit_Tot", &rechit_Tot, &b_rechit_Tot); + fChain->SetBranchAddress("rechit_time", &rechit_time, &b_rechit_time); + fChain->SetBranchAddress("rechit_timeMaxHG", &rechit_timeMaxHG, &b_rechit_timeMaxHG); + fChain->SetBranchAddress("rechit_timeMaxLG", &rechit_timeMaxLG, &b_rechit_timeMaxLG); + fChain->SetBranchAddress("rechit_toaRise", &rechit_toaRise, &b_rechit_toaRise); + fChain->SetBranchAddress("rechit_toaFall", &rechit_toaFall, &b_rechit_toaFall); + + // Set branch addresses and branch pointers + if (!tree2) return; + fChain2 = tree2; + fCurrent2 = -1; + fChain2->SetMakeClass(1); + + fChain2->SetBranchAddress("ntracks", &ntracks, &b_ntracks); + fChain2->SetBranchAddress("impactX_HGCal_layer_1", &impactX_HGCal_layer_1, &b_impactX_HGCal_layer_1); + fChain2->SetBranchAddress("impactY_HGCal_layer_1", &impactY_HGCal_layer_1, &b_impactY_HGCal_layer_1); + fChain2->SetBranchAddress("impactX_HGCal_layer_2", &impactX_HGCal_layer_2, &b_impactX_HGCal_layer_2); + fChain2->SetBranchAddress("impactY_HGCal_layer_2", &impactY_HGCal_layer_2, &b_impactY_HGCal_layer_2); + fChain2->SetBranchAddress("impactX_HGCal_layer_3", &impactX_HGCal_layer_3, &b_impactX_HGCal_layer_3); + fChain2->SetBranchAddress("impactY_HGCal_layer_3", &impactY_HGCal_layer_3, &b_impactY_HGCal_layer_3); + fChain2->SetBranchAddress("impactX_HGCal_layer_4", &impactX_HGCal_layer_4, &b_impactX_HGCal_layer_4); + fChain2->SetBranchAddress("impactY_HGCal_layer_4", &impactY_HGCal_layer_4, &b_impactY_HGCal_layer_4); + fChain2->SetBranchAddress("impactX_HGCal_layer_5", &impactX_HGCal_layer_5, &b_impactX_HGCal_layer_5); + fChain2->SetBranchAddress("impactY_HGCal_layer_5", &impactY_HGCal_layer_5, &b_impactY_HGCal_layer_5); + fChain2->SetBranchAddress("impactX_HGCal_layer_6", &impactX_HGCal_layer_6, &b_impactX_HGCal_layer_6); + fChain2->SetBranchAddress("impactY_HGCal_layer_6", &impactY_HGCal_layer_6, &b_impactY_HGCal_layer_6); + fChain2->SetBranchAddress("impactX_HGCal_layer_7", &impactX_HGCal_layer_7, &b_impactX_HGCal_layer_7); + fChain2->SetBranchAddress("impactY_HGCal_layer_7", &impactY_HGCal_layer_7, &b_impactY_HGCal_layer_7); + fChain2->SetBranchAddress("impactX_HGCal_layer_8", &impactX_HGCal_layer_8, &b_impactX_HGCal_layer_8); + fChain2->SetBranchAddress("impactY_HGCal_layer_8", &impactY_HGCal_layer_8, &b_impactY_HGCal_layer_8); + fChain2->SetBranchAddress("impactX_HGCal_layer_9", &impactX_HGCal_layer_9, &b_impactX_HGCal_layer_9); + fChain2->SetBranchAddress("impactY_HGCal_layer_9", &impactY_HGCal_layer_9, &b_impactY_HGCal_layer_9); + fChain2->SetBranchAddress("impactX_HGCal_layer_10", &impactX_HGCal_layer_10, &b_impactX_HGCal_layer_10); + fChain2->SetBranchAddress("impactY_HGCal_layer_10", &impactY_HGCal_layer_10, &b_impactY_HGCal_layer_10); + fChain2->SetBranchAddress("impactX_HGCal_layer_11", &impactX_HGCal_layer_11, &b_impactX_HGCal_layer_11); + fChain2->SetBranchAddress("impactY_HGCal_layer_11", &impactY_HGCal_layer_11, &b_impactY_HGCal_layer_11); + fChain2->SetBranchAddress("impactX_HGCal_layer_12", &impactX_HGCal_layer_12, &b_impactX_HGCal_layer_12); + fChain2->SetBranchAddress("impactY_HGCal_layer_12", &impactY_HGCal_layer_12, &b_impactY_HGCal_layer_12); + fChain2->SetBranchAddress("impactX_HGCal_layer_13", &impactX_HGCal_layer_13, &b_impactX_HGCal_layer_13); + fChain2->SetBranchAddress("impactY_HGCal_layer_13", &impactY_HGCal_layer_13, &b_impactY_HGCal_layer_13); + fChain2->SetBranchAddress("impactX_HGCal_layer_14", &impactX_HGCal_layer_14, &b_impactX_HGCal_layer_14); + fChain2->SetBranchAddress("impactY_HGCal_layer_14", &impactY_HGCal_layer_14, &b_impactY_HGCal_layer_14); + fChain2->SetBranchAddress("impactX_HGCal_layer_15", &impactX_HGCal_layer_15, &b_impactX_HGCal_layer_15); + fChain2->SetBranchAddress("impactY_HGCal_layer_15", &impactY_HGCal_layer_15, &b_impactY_HGCal_layer_15); + fChain2->SetBranchAddress("impactX_HGCal_layer_16", &impactX_HGCal_layer_16, &b_impactX_HGCal_layer_16); + fChain2->SetBranchAddress("impactY_HGCal_layer_16", &impactY_HGCal_layer_16, &b_impactY_HGCal_layer_16); + fChain2->SetBranchAddress("impactX_HGCal_layer_17", &impactX_HGCal_layer_17, &b_impactX_HGCal_layer_17); + fChain2->SetBranchAddress("impactY_HGCal_layer_17", &impactY_HGCal_layer_17, &b_impactY_HGCal_layer_17); + fChain2->SetBranchAddress("impactX_HGCal_layer_18", &impactX_HGCal_layer_18, &b_impactX_HGCal_layer_18); + fChain2->SetBranchAddress("impactY_HGCal_layer_18", &impactY_HGCal_layer_18, &b_impactY_HGCal_layer_18); + fChain2->SetBranchAddress("impactX_HGCal_layer_19", &impactX_HGCal_layer_19, &b_impactX_HGCal_layer_19); + fChain2->SetBranchAddress("impactY_HGCal_layer_19", &impactY_HGCal_layer_19, &b_impactY_HGCal_layer_19); + fChain2->SetBranchAddress("impactX_HGCal_layer_20", &impactX_HGCal_layer_20, &b_impactX_HGCal_layer_20); + fChain2->SetBranchAddress("impactY_HGCal_layer_20", &impactY_HGCal_layer_20, &b_impactY_HGCal_layer_20); + fChain2->SetBranchAddress("impactX_HGCal_layer_21", &impactX_HGCal_layer_21, &b_impactX_HGCal_layer_21); + fChain2->SetBranchAddress("impactY_HGCal_layer_21", &impactY_HGCal_layer_21, &b_impactY_HGCal_layer_21); + fChain2->SetBranchAddress("impactX_HGCal_layer_22", &impactX_HGCal_layer_22, &b_impactX_HGCal_layer_22); + fChain2->SetBranchAddress("impactY_HGCal_layer_22", &impactY_HGCal_layer_22, &b_impactY_HGCal_layer_22); + fChain2->SetBranchAddress("impactX_HGCal_layer_23", &impactX_HGCal_layer_23, &b_impactX_HGCal_layer_23); + fChain2->SetBranchAddress("impactY_HGCal_layer_23", &impactY_HGCal_layer_23, &b_impactY_HGCal_layer_23); + fChain2->SetBranchAddress("impactX_HGCal_layer_24", &impactX_HGCal_layer_24, &b_impactX_HGCal_layer_24); + fChain2->SetBranchAddress("impactY_HGCal_layer_24", &impactY_HGCal_layer_24, &b_impactY_HGCal_layer_24); + fChain2->SetBranchAddress("impactX_HGCal_layer_25", &impactX_HGCal_layer_25, &b_impactX_HGCal_layer_25); + fChain2->SetBranchAddress("impactY_HGCal_layer_25", &impactY_HGCal_layer_25, &b_impactY_HGCal_layer_25); + fChain2->SetBranchAddress("impactX_HGCal_layer_26", &impactX_HGCal_layer_26, &b_impactX_HGCal_layer_26); + fChain2->SetBranchAddress("impactY_HGCal_layer_26", &impactY_HGCal_layer_26, &b_impactY_HGCal_layer_26); + fChain2->SetBranchAddress("impactX_HGCal_layer_27", &impactX_HGCal_layer_27, &b_impactX_HGCal_layer_27); + fChain2->SetBranchAddress("impactY_HGCal_layer_27", &impactY_HGCal_layer_27, &b_impactY_HGCal_layer_27); + fChain2->SetBranchAddress("impactX_HGCal_layer_28", &impactX_HGCal_layer_28, &b_impactX_HGCal_layer_28); + fChain2->SetBranchAddress("impactY_HGCal_layer_28", &impactY_HGCal_layer_28, &b_impactY_HGCal_layer_28); + fChain2->SetBranchAddress("impactX_HGCal_layer_29", &impactX_HGCal_layer_29, &b_impactX_HGCal_layer_29); + fChain2->SetBranchAddress("impactY_HGCal_layer_29", &impactY_HGCal_layer_29, &b_impactY_HGCal_layer_29); + fChain2->SetBranchAddress("impactX_HGCal_layer_30", &impactX_HGCal_layer_30, &b_impactX_HGCal_layer_30); + fChain2->SetBranchAddress("impactY_HGCal_layer_30", &impactY_HGCal_layer_30, &b_impactY_HGCal_layer_30); + fChain2->SetBranchAddress("impactX_HGCal_layer_31", &impactX_HGCal_layer_31, &b_impactX_HGCal_layer_31); + fChain2->SetBranchAddress("impactY_HGCal_layer_31", &impactY_HGCal_layer_31, &b_impactY_HGCal_layer_31); + fChain2->SetBranchAddress("impactX_HGCal_layer_32", &impactX_HGCal_layer_32, &b_impactX_HGCal_layer_32); + fChain2->SetBranchAddress("impactY_HGCal_layer_32", &impactY_HGCal_layer_32, &b_impactY_HGCal_layer_32); + fChain2->SetBranchAddress("impactX_HGCal_layer_33", &impactX_HGCal_layer_33, &b_impactX_HGCal_layer_33); + fChain2->SetBranchAddress("impactY_HGCal_layer_33", &impactY_HGCal_layer_33, &b_impactY_HGCal_layer_33); + fChain2->SetBranchAddress("impactX_HGCal_layer_34", &impactX_HGCal_layer_34, &b_impactX_HGCal_layer_34); + fChain2->SetBranchAddress("impactY_HGCal_layer_34", &impactY_HGCal_layer_34, &b_impactY_HGCal_layer_34); + fChain2->SetBranchAddress("impactX_HGCal_layer_35", &impactX_HGCal_layer_35, &b_impactX_HGCal_layer_35); + fChain2->SetBranchAddress("impactY_HGCal_layer_35", &impactY_HGCal_layer_35, &b_impactY_HGCal_layer_35); + fChain2->SetBranchAddress("impactX_HGCal_layer_36", &impactX_HGCal_layer_36, &b_impactX_HGCal_layer_36); + fChain2->SetBranchAddress("impactY_HGCal_layer_36", &impactY_HGCal_layer_36, &b_impactY_HGCal_layer_36); + fChain2->SetBranchAddress("impactX_HGCal_layer_37", &impactX_HGCal_layer_37, &b_impactX_HGCal_layer_37); + fChain2->SetBranchAddress("impactY_HGCal_layer_37", &impactY_HGCal_layer_37, &b_impactY_HGCal_layer_37); + fChain2->SetBranchAddress("impactX_HGCal_layer_38", &impactX_HGCal_layer_38, &b_impactX_HGCal_layer_38); + fChain2->SetBranchAddress("impactY_HGCal_layer_38", &impactY_HGCal_layer_38, &b_impactY_HGCal_layer_38); + fChain2->SetBranchAddress("impactX_HGCal_layer_39", &impactX_HGCal_layer_39, &b_impactX_HGCal_layer_39); + fChain2->SetBranchAddress("impactY_HGCal_layer_39", &impactY_HGCal_layer_39, &b_impactY_HGCal_layer_39); + fChain2->SetBranchAddress("impactX_HGCal_layer_40", &impactX_HGCal_layer_40, &b_impactX_HGCal_layer_40); + fChain2->SetBranchAddress("impactY_HGCal_layer_40", &impactY_HGCal_layer_40, &b_impactY_HGCal_layer_40); + + fChain2->SetBranchAddress("trackChi2_X", &trackChi2_X, &b_trackChi2_X); + fChain2->SetBranchAddress("trackChi2_Y", &trackChi2_Y, &b_trackChi2_Y); + fChain2->SetBranchAddress("dwcReferenceType", &dwcReferenceType, &b_dwcReferenceType); + fChain2->SetBranchAddress("m_x", &m_x, &b_m_x); + fChain2->SetBranchAddress("m_y", &m_y, &b_m_y); + fChain2->SetBranchAddress("b_x", &b_x, &b_b_x); + fChain2->SetBranchAddress("b_y", &b_y, &b_b_y); + + Notify(); +} + +Bool_t HGCNtupleVariables::Notify() +{ + // The Notify() function is called when a new file is opened. This + // can be either for a new TTree in a TChain or when when a new TTree + // is started when using PROOF. It is normally not necessary to make changes + // to the generated code, but the routine can be extended by the + // user if needed. The return value is currently not used. + + return kTRUE; +} + +#endif // #ifdef HGCNtupleVariables_cxx diff --git a/inverted_tracking_cut/Makefile b/inverted_tracking_cut/Makefile new file mode 100644 index 0000000..0e04de3 --- /dev/null +++ b/inverted_tracking_cut/Makefile @@ -0,0 +1,37 @@ +CXX = g++ + +CXXFLAGS= $(shell root-config --cflags) +LIBS = $(shell root-config --libs) + + +SOURCES = HGCNtupleVariables.cc AnalyzeHGCOctTB.cc +HEADERS = HGCNtupleVariables.h AnalyzeHGCOctTB.h +OBJECTS = $(SOURCES:.cc=.o) + +EXECUTABLE = analyzeHGCOctTB + +all: $(SOURCES) $(EXECUTABLE) + +%.o: %.cc + @echo Compiling $<... + $(CXX) $(CXXFLAGS) -c -o $@ $< + + +$(EXECUTABLE): $(OBJECTS) + @echo "Linking $(PROGRAM) ..." + @echo "@$(CXX) $(LIBS) $(OBJECTS) -o $@" + @$(CXX) -o $@ $^ $(LIBS) + @echo "done" + + +# Specifying the object files as intermediates deletes them automatically after the build process. +.INTERMEDIATE: $(OBJECTS) + +# The default target, which gives instructions, can be called regardless of whether or not files need to be updated. +.PHONY : clean +clean: + rm -f $(OBJECTS) $(EXECUTABLE) + +### +HGCNtupleVariables.o: HGCNtupleVariables.h +AnalyzeHGCOctTB.o:HGCNtupleVariables.h AnalyzeHGCOctTB.h diff --git a/inverted_tracking_cut/analyzeHGCOctTB b/inverted_tracking_cut/analyzeHGCOctTB new file mode 100755 index 0000000000000000000000000000000000000000..530e8d3b95e1a5c2152a95c646bd0a09ce7101f2 GIT binary patch literal 140008 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 +#include +#include +#include "AnalyzeHGCOctTB.h" + +using namespace std; + + + +// chip 3022,44,3028 + + + + +int main(int argc, char* argv[]) +{ + + if (argc < 3) { + cerr << "Please give 4 arguments " << "runList " << " " << "outputFileName" << " " << "dataset" <<" " << "configuration" << endl; + return -1; + } + const char *inputFileList = argv[1]; + const char *outFileName = argv[2]; + const char *data = argv[3]; + const char *config = argv[4]; + + AnalyzeHGCOctTB hgcOctTB(inputFileList, outFileName, data, config); + cout << "dataset " << data << " " << endl; + cout << "congiguration " << config << " " << endl; + + hgcOctTB.EventLoop(data); + return 0; +} + +void AnalyzeHGCOctTB::EventLoop(const char *data) { + if (fChain == 0) return; + + Long64_t nentries = fChain->GetEntriesFast(); + cout << "nentries " << nentries << endl; + cout << "Analyzing dataset " << data << " " << endl; + + Long64_t nbytes = 0, nb = 0; + Long64_t nbytes2 = 0, nb2 = 0; + int decade = 0; + + float rechit_cut[28] = {0.02,0.039,0.019,0.02,0.037,0.076,0.10, + 0.14,0.18,0.24,0.28,0.33,0.48,0.52, + 0.56,0.6,0.64,0.70,0.74,0.78,0.82, + 0.86,0.90,0.92,0.94,0.95,0.98,1.0}; + + bool DEBUG = false; + Long64_t cut_count[28]; + Long64_t nEvents = 0; + Long64_t MIP_pions = 0; + int TOTAL_ACTIVE_LAYER = -1; + int EE_LAYER = -1; + int FH_LAYER = -1; + if(!strcmp(conf_,"alpha") || !strcmp(conf_,"config1")) { + TOTAL_ACTIVE_LAYER = 40; + EE_LAYER = 28; + FH_LAYER = 12; + } + else if(!strcmp(conf_,"bravo") || !strcmp(conf_,"config2")){ + TOTAL_ACTIVE_LAYER = 39; + EE_LAYER = 28; + FH_LAYER = 11; + } + else if(!strcmp(conf_,"charlie") || !strcmp(conf_,"config3")) { + TOTAL_ACTIVE_LAYER = 20; + EE_LAYER = 8; + FH_LAYER = 12; + } + else { + cout<<"ERROR: Unknown configuration!!!!"< decade) + cout << 10 * k << " %" << endl; + decade = k; + + // ===============read this entry == == == == == == == == == == == + + Long64_t ientry = LoadTree(jentry); + if (ientry < 0) { break; cout<<"Breaking"<GetEntry(jentry); nbytes += nb; + nb2 = fChain2->GetEntry(jentry); nbytes2 += nb2; + + if(NRechits == 0) continue; + // if(NRechits > 50 || NRechits < 20) continue; + h_nTracks->Fill(ntracks); + if(ntracks != 1) continue; + Float_t track_x[40]; + Float_t track_y[40]; + + track_x[0] = impactX_HGCal_layer_1; + track_y[0] = impactY_HGCal_layer_1; + track_x[1] = impactX_HGCal_layer_2; + track_y[1] = impactY_HGCal_layer_2; + track_x[2] = impactX_HGCal_layer_3; + track_y[2] = impactY_HGCal_layer_3; + track_x[3] = impactX_HGCal_layer_4; + track_y[3] = impactY_HGCal_layer_4; + track_x[4] = impactX_HGCal_layer_5; + track_y[4] = impactY_HGCal_layer_5; + track_x[5] = impactX_HGCal_layer_6; + track_y[5] = impactY_HGCal_layer_6; + track_x[6] = impactX_HGCal_layer_7; + track_y[6] = impactY_HGCal_layer_7; + track_x[7] = impactX_HGCal_layer_8; + track_y[7] = impactY_HGCal_layer_8; + track_x[8] = impactX_HGCal_layer_9; + track_y[8] = impactY_HGCal_layer_9; + track_x[9] = impactX_HGCal_layer_10; + track_y[9] = impactY_HGCal_layer_10; + track_x[10] = impactX_HGCal_layer_11; + track_y[10] = impactY_HGCal_layer_11; + track_x[11] = impactX_HGCal_layer_12; + track_y[11] = impactY_HGCal_layer_12; + track_x[12] = impactX_HGCal_layer_13; + track_y[12] = impactY_HGCal_layer_13; + track_x[13] = impactX_HGCal_layer_14; + track_y[13] = impactY_HGCal_layer_14; + track_x[14] = impactX_HGCal_layer_15; + track_y[14] = impactY_HGCal_layer_15; + track_x[15] = impactX_HGCal_layer_16; + track_y[15] = impactY_HGCal_layer_16; + track_x[16] = impactX_HGCal_layer_17; + track_y[16] = impactY_HGCal_layer_17; + track_x[17] = impactX_HGCal_layer_18; + track_y[17] = impactY_HGCal_layer_18; + track_x[18] = impactX_HGCal_layer_19; + track_y[18] = impactY_HGCal_layer_19; + track_x[19] = impactX_HGCal_layer_20; + track_y[19] = impactY_HGCal_layer_20; + track_x[20] = impactX_HGCal_layer_21; + track_y[20] = impactY_HGCal_layer_21; + track_x[21] = impactX_HGCal_layer_22; + track_y[21] = impactY_HGCal_layer_22; + track_x[22] = impactX_HGCal_layer_23; + track_y[22] = impactY_HGCal_layer_23; + track_x[23] = impactX_HGCal_layer_24; + track_y[23] = impactY_HGCal_layer_24; + track_x[24] = impactX_HGCal_layer_25; + track_y[24] = impactY_HGCal_layer_25; + track_x[25] = impactX_HGCal_layer_26; + track_y[25] = impactY_HGCal_layer_26; + track_x[26] = impactX_HGCal_layer_27; + track_y[26] = impactY_HGCal_layer_27; + track_x[27] = impactX_HGCal_layer_28; + track_y[27] = impactY_HGCal_layer_28; + track_x[28] = impactX_HGCal_layer_29; + track_y[28] = impactY_HGCal_layer_29; + track_x[29] = impactX_HGCal_layer_30; + track_y[29] = impactY_HGCal_layer_30; + track_x[30] = impactX_HGCal_layer_31; + track_y[30] = impactY_HGCal_layer_31; + track_x[31] = impactX_HGCal_layer_32; + track_y[31] = impactY_HGCal_layer_32; + track_x[32] = impactX_HGCal_layer_33; + track_y[32] = impactY_HGCal_layer_33; + track_x[33] = impactX_HGCal_layer_34; + track_y[33] = impactY_HGCal_layer_34; + track_x[34] = impactX_HGCal_layer_35; + track_y[34] = impactY_HGCal_layer_35; + track_x[35] = impactX_HGCal_layer_36; + track_y[35] = impactY_HGCal_layer_36; + track_x[36] = impactX_HGCal_layer_37; + track_y[36] = impactY_HGCal_layer_37; + track_x[37] = impactX_HGCal_layer_38; + track_y[37] = impactY_HGCal_layer_38; + track_x[38] = impactX_HGCal_layer_39; + track_y[38] = impactY_HGCal_layer_39; + track_x[39] = impactX_HGCal_layer_40; + track_y[39] = impactY_HGCal_layer_40; + + + Double_t rechitEnergySum = 0.0; + Double_t rechitEnergySum_EE = 0.0; + Double_t rechitEnergySum_FH = 0.0; + Double_t un_cali = 0.0; + Long_t Nrechit_layer[40]; + Long_t NRechits_EE[28]; + Long_t NRechits_FH[12][7]; + // long Nrechit_layer[40]; + // long NRechits_EE[28]; + // long NRechits_FH[12][7]; + + int module_part_ = -1; + int module_layer_ = -1; + int module_position_ = -1; + vector dR[40]; + double dr_min_index[40]; + double dr_min[40]; + + for(int ii=0;ii<40;ii++){ + if(ii<28) { + NRechits_EE[ii]=0; + // dR[ii].clear(); + // dr_min_index[ii] = -1.0; + // dr_min[ii] = 1.e10; + } + Nrechit_layer[ii]=0; + dR[ii].clear(); + dr_min_index[ii] = -1.0; + dr_min[ii] = 1.e10; + + } + for(int ii=0;ii<12;ii++){ + for(int jj=0;jj<7;jj++){ + NRechits_FH[ii][jj]=0; + } + } + + + // cout<<"BEFORE!!!"< temp_moduleID; + for(int i = 0 ; i < NRechits; i++){ + temp_moduleID.clear(); + int temp_layer = rechit_layer->at(i); + int temp_chip = rechit_chip->at(i); + int temp_channel = rechit_channel->at(i); + int en_chan = temp_chip*1000+temp_channel; + if(en_chan == 3022 || en_chan == 3028 || en_chan == 44) continue; + if(rechit_amplitudeHigh->at(i) < 20) continue; + Nrechit_layer[temp_layer-1]++; + + temp_moduleID = getModuleLocation(rechit_module->at(i)); + if(!temp_moduleID.size() || temp_moduleID.size()<3) { + cout<<"ERROR: Could NOT locate MODULE location for module "<at(i)<Fill(rechit_x->at(i),track_x[temp_layer-1]); + // h_rechitY_vs_trackY_layer[temp_layer-1]->Fill(rechit_y->at(i),track_y[temp_layer-1]); + double recx = rechit_x->at(i); + double recy = rechit_y->at(i); + double trackx = track_x[temp_layer-1]; + double tracky = track_y[temp_layer-1]; + double temp = deltaR(recx,recy,-1*trackx,-1*tracky); + double dX = recx - (-1*trackx); + double dY = recy - (-1*tracky); + // cout<<"point A"<Fill(recx,recy); + h_trackX_vs_trackY_layer[temp_layer-1]->Fill(-1*trackx,-1*tracky); + h_rechitX_vs_trackX_layer[temp_layer-1]->Fill(recx,-1*trackx); + h_rechitY_vs_trackY_layer[temp_layer-1]->Fill(recy,-1*tracky); + h_dX_dY_layer[temp_layer-1]->Fill(dX,dY); + h_dR[temp_layer-1]->Fill(abs(temp)); + } + else if(module_position_ == 4) { + h_rechitX_vs_rechitY_FH_layer[temp_layer-EE_LAYER-1][module_position_-1]->Fill(recx,recy); + h_trackX_vs_trackY_FH_layer[temp_layer-EE_LAYER-1][module_position_-1]->Fill(-1*trackx,-1*tracky); + h_rechitX_vs_trackX_FH_layer[temp_layer-EE_LAYER-1][module_position_-1]->Fill(recx,-1*trackx); + h_rechitY_vs_trackY_FH_layer[temp_layer-EE_LAYER-1][module_position_-1]->Fill(recy,-1*tracky); + h_dX_dY_FH_layer[temp_layer-EE_LAYER-1][module_position_-1]->Fill(dX,dY); + h_dR_FH[temp_layer-EE_LAYER-1][module_position_-1]->Fill(abs(temp)); + } + else { + cout<<"ERROR: Something went wrong at Point Romeo Hotel!!!"<Fill(module_part_); + + if(module_part_ == 0) { + rechitEnergySum_EE+=rechit_energy->at(i); + NRechits_EE[module_layer_-1]++; + h_adcHG_EE[module_layer_-1][channel_bin]->Fill(rechit_amplitudeHigh->at(i)); + } + if(module_part_ == 1) { + rechitEnergySum_FH+=rechit_energy->at(i); + // cout<<"BEFORE ====="<at(i)<Fill(rechit_amplitudeHigh->at(i)); + } + rechitEnergySum+=rechit_energy->at(i); + + } + + + + // cout<<"AFTER!!!"< 50) return; + + if(DEBUG) cout<<"DEBUG: Values Assigned!!!"< 9 ) continue; + Nrechit_FH+=NRechits_FH[iL-EE_LAYER][j]; + h_NRechits_FH[iL-EE_LAYER][j]->Fill(NRechits_FH[iL-EE_LAYER][j]); + // cout<<"LOOK HERE FH = "<Fill(10); + else if(!strcmp(conf_,"bravo")) h_configuration->Fill(20); + else if(!strcmp(conf_,"charlie")) h_configuration->Fill(30); + else { + cout<<"ERROR: Unknown configuration!!!!"< 28) + // cout<<"NRechits_FH["<at(dr_min_index[i]); + int temp_channel = rechit_channel->at(dr_min_index[i]); + int channel_bin = getBIN(temp_chip,temp_channel); + if (channel_bin < 0) { cout<<"INVALID CHANNEL!!!"<at(dr_min_index[i])); + if(!temp_moduleID.size() || temp_moduleID.size()<3) { + cout<<"ERROR: Could NOT locate MODULE location for module "<at(i)<Fill(pdgID); + h_beamEnergy->Fill(beamEnergy); + h_runNumber->Fill(run); + h_rechit_energy_all->Fill(rechitEnergySum); + h_rechit_energy_EE_only->Fill(rechitEnergySum_EE); + h_rechit_energy_FH_only->Fill(rechitEnergySum_FH); + h_rechit_energy_EE_vs_FH->Fill(rechitEnergySum_EE,rechitEnergySum_FH); + h_rechit_En_NRechits->Fill(NRechits,rechitEnergySum); + // h_Nrechit_EE_vs_FH->Fill(Nrechit_EE,Nrechit_FH); + // h_Nrechit_EE->Fill(Nrechit_EE); + // h_Nrechit_FH->Fill(Nrechit_FH); + + if(DEBUG) cout<<"DEBUG: End of Event = "<GetXaxis()->SetTitle("energy in EE(MIPs)"); + h_rechit_energy_EE_vs_FH->GetYaxis()->SetTitle("energy in FH(MIPs)"); + + h_Nrechit_EE = new TH1F("h_Nrechit_EE","NRechits in EE",500,0.0,1000.0); + h_Nrechit_FH = new TH1F("h_Nrechit_FH","NRechits in FH",500,0.0,1000.0); + h_Nrechit_EE_vs_FH = new TH2F("h_Nrechit_EE_vs_FH","NRechits EE vs FH",500,0.0,1000.0,500,0.0,1000.0); + h_Nrechit_EE_vs_FH->GetXaxis()->SetTitle("NRechits in EE"); + h_Nrechit_EE_vs_FH->GetYaxis()->SetTitle("NRechits in FH"); + + + + h_rechit_En_NRechits = new TH2F("h_rechit_En_NRechits","h_rechit_En_NRechits",100,0,1000,500,0.0,20000.0); + + d_adcHG = oFile->mkdir("ADC_distributions"); + d_adcHG->cd(); + for(int i = 0; i < 28; i++) { + if((!strcmp(conf,"charlie") || !strcmp(conf,"config3")) && (i+1 > 8)) break; + sprintf(dir_name,"EE_%d",i+1); + d_EE[i] = d_adcHG->mkdir(dir_name); + d_EE[i]->cd(); + sprintf(hname,"h_Nrechits_EE_L%d",i+1); + h_NRechits_EE[i] = new TH1F(hname, hname, 50, 0, 50); + sprintf(hname,"h_dR_layer_%d",i+1); + h_dR[i] = new TH1F(hname,hname,21.0,-1.0,20.0); + + sprintf(hname,"h_rechitX_rechitY_layer_%d",i+1); + h_rechitX_vs_rechitY_layer[i] = new TH2F(hname,hname,16,-8.0,8.0,16,-8.0,8.0); + sprintf(hname,"h_trackX_trackY_layer_%d",i+1); + h_trackX_vs_trackY_layer[i] = new TH2F(hname,hname,16,-8.0,8.0,16,-8.0,8.0); + + sprintf(hname,"h_rechitX_trackX_layer_%d",i+1); + h_rechitX_vs_trackX_layer[i] = new TH2F(hname,hname,16,-8.0,8.0,16,-8.0,8.0); + sprintf(hname,"h_rechitY_trackY_layer_%d",i+1); + h_rechitY_vs_trackY_layer[i] = new TH2F(hname,hname,16,-8.0,8.0,16,-8.0,8.0); + + + sprintf(hname,"h_dX_dY_layer_%d",i+1); + h_dX_dY_layer[i] = new TH2F(hname,hname,16,-8.0,8.0,16,-8.0,8.0); + + int chan = 0; + for(int chip = 0; chip < 4; chip++) { + for(int cc = 0; cc < 64; cc+=2,chan++) { + sprintf(hname,"h_adcHG_EE_L%d_P0_chip%d_chan%d",i+1,chip,cc); + h_adcHG_EE[i][chan] = new TH1F(hname, hname, 100, 0, 400); + sprintf(hname,"h_adcHG_EE_L%d_P0_chip%d_chan%d_track",i+1,chip,cc); + h_adcHG_EE_track[i][chan] = new TH1F(hname, hname, 100, 0, 400); + + } + } + } + for(int i = 0; i < 12; i++){ + for(int j = 0; j < 7; j++) { + /* if(!strcmp(conf,"alpha") && (i+1)>9 ) { */ + /* if((j+1) != 4) continue; */ + /* } */ + + sprintf(dir_name,"FH_L%d_P%d",i+1,j+1); + d_FH[i][j] = d_adcHG->mkdir(dir_name); + d_FH[i][j]->cd(); + + sprintf(hname,"h_Nrechits_FH_L%d_P%d",i+1,j+1); + h_NRechits_FH[i][j] = new TH1F(hname, hname, 50, 0, 50); + + sprintf(hname,"h_dR_FH_layer_L%d_P%d",i+1,j+1); + h_dR_FH[i][j] = new TH1F(hname,hname,21.0,-1.0,20.0); + + sprintf(hname,"h_rechitX_rechitY_FH_layer_L%d_P%d",i+1,j+1); + h_rechitX_vs_rechitY_FH_layer[i][j] = new TH2F(hname,hname,16,-8.0,8.0,16,-8.0,8.0); + sprintf(hname,"h_trackX_trackY_FH_layer_L%d_P%d",i+1,j+1); + h_trackX_vs_trackY_FH_layer[i][j] = new TH2F(hname,hname,16,-8.0,8.0,16,-8.0,8.0); + + sprintf(hname,"h_rechitX_trackX_FH_layer_L%d_P%d",i+1,j+1); + h_rechitX_vs_trackX_FH_layer[i][j] = new TH2F(hname,hname,16,-8.0,8.0,16,-8.0,8.0); + sprintf(hname,"h_rechitY_trackY_FH_layer_L%d_P%d",i+1,j+1); + h_rechitY_vs_trackY_FH_layer[i][j] = new TH2F(hname,hname,16,-8.0,8.0,16,-8.0,8.0); + + + sprintf(hname,"h_dX_dY_FH_layer_L%d_P%d",i+1,j+1); + h_dX_dY_FH_layer[i][j] = new TH2F(hname,hname,16,-8.0,8.0,16,-8.0,8.0); + + + int chan = 0; + for(int chip = 0; chip < 4; chip++) { + for(int cc = 0; cc < 64; cc+=2,chan++) { + sprintf(hname,"h_adcHG_FH_L%d_P%d_chip%d_chan%d",i+1,j+1,chip,cc); + h_adcHG_FH[i][j][chan] = new TH1F(hname, hname, 100, 0, 400); + sprintf(hname,"h_adcHG_FH_L%d_P%d_chip%d_chan%d_track",i+1,j+1,chip,cc); + h_adcHG_FH_track[i][j][chan] = new TH1F(hname, hname, 100, 0, 400); + + + } + } + } + } + // sprintf(hname,"h_rechit_E_full_official"); + // h_ERechits_full_official_calib = new TH1F(hname,hname,375.0,0.0,25000.0); + + // sprintf(hname,"h_rechit_E_full_my"); + // h_ERechits_full_my_calib = new TH1F(hname,hname,375.0,0.0,25000.0); + + + // d_Nrechit_layer = oFile->mkdir("Nrechit_layer"); + // d_Nrechit_layer->cd(); + + // for (int i=0;i<28;i++) { + // sprintf(hname,"h_rechit_layer_%d",i+1); + // h_nRechits_layer[i] = new TH1F(hname,hname,3000,0.0,3000.0); + // } + + + + // d_rechit_en_layer = oFile->mkdir("rechit_energys"); + // d_rechit_en_layer->cd(); + + + // for (int i=0;i<28;i++) { + // sprintf(hname,"h_rechit_E_layer_%d",i); + // h_ERechits_layer[i] = new TH1F(hname,hname,250.0,0.0,5000.0); + // } + + + +} + + +void AnalyzeHGCOctTB::moduleMap_init(const char* config) { + char *f_name = new char[200]; + + if(strcmp(config,"alpha")==0 || strcmp(config,"config1")==0) { + sprintf(f_name,"../config_maps/moduleMAP_config1.txt"); + cout<<"\n\nINFO: Mapping module configuration ALPHA (oct10-oct17) "<>layer_>>module_>>chip_>>channel_>>adc_){ +// en_chan = chip_*1000+channel_; +// std::pair temp; +// temp = std::make_pair(layer_,en_chan); +// std::pair, float> temp1; +// temp1 = std::make_pair(temp, adc_); +// offical_calib_map.insert(temp1); +// } +// } + +// void AnalyzeHGCOctTB::my_calib_init() { +// char *f_name = new char[200]; +// sprintf(f_name,"/home/shubham/work/HGCAL/CERNTB/CERN_5_oct_2018/txt_files/ADC_MIP_v11.txt"); +// std::ifstream in(f_name); +// if(!in){ +// cout<<"Could not find "<>layer_>>chip_>>channel_>>adc_>>chi2>>mip_err>>entry){ +// en_chan = chip_*1000+channel_; +// std::pair temp; +// temp = std::make_pair(layer_+1,en_chan); +// std::pair, float> temp1; +// temp1 = std::make_pair(temp, adc_); +// my_calib_map.insert(temp1); +// } +// } + +AnalyzeHGCOctTB::AnalyzeHGCOctTB(const TString &inputFileList, const char *outFileName, const char* dataset, const char* config) { + + TChain *tree = new TChain("rechitntupler/hits"); + TChain *tree2 = new TChain("trackimpactntupler/impactPoints"); + + if( ! FillChain(tree, tree2, inputFileList) ) { + std::cerr << "Cannot get the tree " << std::endl; + } else { + std::cout << "Initiating analysis of dataset " << dataset << std::endl; + } + + /* if( ! FillChain(tree, inputFileList) ) { */ + /* std::cerr << "Cannot get the tree " << std::endl; */ + /* } else { */ + /* std::cout << "Initiating analysis of dataset " << dataset << std::endl; */ + /* } */ + + HGCNtupleVariables::Init(tree, tree2); + /* HGCNtupleVariables::Init(tree); */ + + BookHistogram(outFileName, config); + moduleMap_init(config); + // offical_calib_init(); + // my_calib_init(); + +} + +Bool_t AnalyzeHGCOctTB::FillChain(TChain *chain, TChain *chain2, const TString &inputFileList) { +/* Bool_t AnalyzeHGCOctTB::FillChain(TChain *chain, const TString &inputFileList) { */ + + ifstream infile(inputFileList, ifstream::in); + std::string buffer; + + if(!infile.is_open()) { + std::cerr << "** ERROR: Can't open '" << inputFileList << "' for input" << std::endl; + return kFALSE; + } + + std::cout << "TreeUtilities : FillChain " << std::endl; + while(1) { + infile >> buffer; + if(!infile.good()) break; + //std::cout << "Adding tree from " << buffer.c_str() << std::endl; + chain->Add(buffer.c_str()); + chain2->Add(buffer.c_str()); + } + std::cout << "No. of Entries in chain : " << chain->GetEntries() << std::endl; + std::cout << "No. of Entries in chain2 : " << chain2->GetEntries() << std::endl; + return kTRUE; +} + +Long64_t AnalyzeHGCOctTB::LoadTree(Long64_t entry) { + // Set the environment to read one entry + if (!fChain) return -5; + Long64_t centry = fChain->LoadTree(entry); + if (centry < 0) return centry; + if (!fChain->InheritsFrom(TChain::Class())) return centry; + TChain *chain = (TChain*)fChain; + if (chain->GetTreeNumber() != fCurrent) { + fCurrent = chain->GetTreeNumber(); + // Notify(); + } + + if (!fChain2) return -5; + Long64_t centry2 = fChain2->LoadTree(entry); + if (centry2 < 0) return centry2; + if (!fChain2->InheritsFrom(TChain::Class())) return centry2; + TChain *chain2 = (TChain*)fChain2; + if (chain2->GetTreeNumber() != fCurrent) { + fCurrent = chain->GetTreeNumber(); + // Notify(); + } + + + //if (centry==centry2) + return centry; + // cout<<"centry = "<0) + // return centry; + // else return -1; +} + +AnalyzeHGCOctTB::~AnalyzeHGCOctTB() { + + // if (!fChain || !fChain2) return; + // delete fChain->GetCurrentFile(); + // delete fChain2->GetCurrentFile(); + // oFile->cd(); + // oFile->Write(); + // oFile->Close(); + + + if (!fChain) return; + delete fChain->GetCurrentFile(); + oFile->cd(); + oFile->Write(); + oFile->Close(); + +} + +#endif diff --git a/tracking_inclusion/Data_719_noise_v9.txt b/tracking_inclusion/Data_719_noise_v9.txt new file mode 100644 index 0000000..ad3f1b0 --- /dev/null +++ b/tracking_inclusion/Data_719_noise_v9.txt @@ -0,0 +1 @@ +/afs/cern.ch/work/s/spandey/public/hgcal/2018_TB/OctoberTB/rereco/gitlab/CMSSW_9_3_0/src/HGCal/runConfigurationsCERNOctober2018/rereco_file/tree/ntuple_719_noise.root diff --git a/tracking_inclusion/Data_719_official_v9.txt b/tracking_inclusion/Data_719_official_v9.txt new file mode 100644 index 0000000..ae2a0b0 --- /dev/null +++ b/tracking_inclusion/Data_719_official_v9.txt @@ -0,0 +1 @@ +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v9/ntuple_719.root diff --git a/tracking_inclusion/Data_muon_config1.txt b/tracking_inclusion/Data_muon_config1.txt new file mode 100644 index 0000000..e1c8a90 --- /dev/null +++ b/tracking_inclusion/Data_muon_config1.txt @@ -0,0 +1,20 @@ +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v2/ntuple_697.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v2/ntuple_698.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v2/ntuple_699.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v2/ntuple_700.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v2/ntuple_701.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v2/ntuple_702.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v2/ntuple_704.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v2/ntuple_705.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v2/ntuple_708.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v2/ntuple_709.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v2/ntuple_710.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v2/ntuple_712.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v2/ntuple_713.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v2/ntuple_714.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v2/ntuple_715.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v2/ntuple_717.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v2/ntuple_718.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v2/ntuple_719.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v2/ntuple_721.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v2/ntuple_722.root diff --git a/tracking_inclusion/Data_muon_config1_v7.txt b/tracking_inclusion/Data_muon_config1_v7.txt new file mode 100644 index 0000000..834a3f8 --- /dev/null +++ b/tracking_inclusion/Data_muon_config1_v7.txt @@ -0,0 +1,20 @@ +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v7/ntuple_697.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v7/ntuple_698.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v7/ntuple_699.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v7/ntuple_700.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v7/ntuple_701.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v7/ntuple_702.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v7/ntuple_704.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v7/ntuple_705.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v7/ntuple_708.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v7/ntuple_709.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v7/ntuple_710.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v7/ntuple_712.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v7/ntuple_713.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v7/ntuple_714.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v7/ntuple_715.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v7/ntuple_717.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v7/ntuple_718.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v7/ntuple_719.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v7/ntuple_721.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v7/ntuple_722.root diff --git a/tracking_inclusion/Data_muon_config1_v8.txt b/tracking_inclusion/Data_muon_config1_v8.txt new file mode 100644 index 0000000..03b2b55 --- /dev/null +++ b/tracking_inclusion/Data_muon_config1_v8.txt @@ -0,0 +1,19 @@ +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v8/ntuple_698.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v8/ntuple_699.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v8/ntuple_700.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v8/ntuple_701.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v8/ntuple_702.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v8/ntuple_704.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v8/ntuple_705.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v8/ntuple_708.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v8/ntuple_709.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v8/ntuple_710.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v8/ntuple_712.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v8/ntuple_713.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v8/ntuple_714.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v8/ntuple_715.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v8/ntuple_717.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v8/ntuple_718.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v8/ntuple_719.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v8/ntuple_721.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v8/ntuple_722.root diff --git a/tracking_inclusion/Data_muon_config1_v9.txt b/tracking_inclusion/Data_muon_config1_v9.txt new file mode 100644 index 0000000..29e6ca7 --- /dev/null +++ b/tracking_inclusion/Data_muon_config1_v9.txt @@ -0,0 +1,19 @@ +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v9/ntuple_698.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v9/ntuple_699.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v9/ntuple_700.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v9/ntuple_701.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v9/ntuple_702.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v9/ntuple_704.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v9/ntuple_705.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v9/ntuple_708.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v9/ntuple_709.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v9/ntuple_710.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v9/ntuple_712.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v9/ntuple_713.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v9/ntuple_714.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v9/ntuple_715.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v9/ntuple_717.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v9/ntuple_718.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v9/ntuple_719.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v9/ntuple_721.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v9/ntuple_722.root diff --git a/tracking_inclusion/Data_muon_config2_one_File.txt b/tracking_inclusion/Data_muon_config2_one_File.txt new file mode 100644 index 0000000..ead5cb8 --- /dev/null +++ b/tracking_inclusion/Data_muon_config2_one_File.txt @@ -0,0 +1 @@ +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v2/ntuple_697.root diff --git a/tracking_inclusion/Data_muon_config2_one_File_v7.txt b/tracking_inclusion/Data_muon_config2_one_File_v7.txt new file mode 100644 index 0000000..7ef597b --- /dev/null +++ b/tracking_inclusion/Data_muon_config2_one_File_v7.txt @@ -0,0 +1 @@ +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v7/ntuple_697.root diff --git a/tracking_inclusion/Data_muon_config2_v2.txt b/tracking_inclusion/Data_muon_config2_v2.txt new file mode 100644 index 0000000..6d4b60f --- /dev/null +++ b/tracking_inclusion/Data_muon_config2_v2.txt @@ -0,0 +1,20 @@ +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v1/ntuple_697.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v1/ntuple_698.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v1/ntuple_699.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v1/ntuple_700.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v1/ntuple_701.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v1/ntuple_702.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v1/ntuple_704.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v1/ntuple_705.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v1/ntuple_708.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v1/ntuple_709.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v1/ntuple_710.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v1/ntuple_712.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v1/ntuple_713.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v1/ntuple_714.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v1/ntuple_715.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v1/ntuple_717.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v1/ntuple_718.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v1/ntuple_719.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v1/ntuple_721.root +/eos/cms/store/group/dpg_hgcal/tb_hgcal/2018/cern_h2_october/offline_analysis/ntuples/v1/ntuple_722.root diff --git a/tracking_inclusion/HGCNtupleVariables.cc b/tracking_inclusion/HGCNtupleVariables.cc new file mode 100644 index 0000000..cf7cd2f --- /dev/null +++ b/tracking_inclusion/HGCNtupleVariables.cc @@ -0,0 +1,73 @@ +#define HGCNtupleVariables_cxx +#include "HGCNtupleVariables.h" +#include +#include +#include +//#include + + + + +float HGCNtupleVariables::deltaR(float x1, float y1, float x2, float y2) { + float deltaR_ = sqrt(pow((x2-x1),2) + pow((y2-y1),2)); + return deltaR_; +} + + +int HGCNtupleVariables::getBIN(unsigned int skiroc,unsigned int channel) { + if (channel%2 != 0 || channel > 62 || skiroc > 3) return -1; + else return (skiroc*32 + (channel/2)); +} + + +std::vector HGCNtupleVariables::getModuleLocation(int moduleID) { + std::map>::iterator it = module_map.find(moduleID); + if(it != module_map.end()){ + return it->second; + } + else { + return std::vector(); + } +} + + + +//double HGCNtupleVariables::shower_comparisons(TProfile* shower, TH1F* hist) { +// TH1F* HGCNtupleVariables::shower_comparisons(TProfile* shower, TH1F* hist) { +// // TFile* file0 = TFile::Open("/home/shubham/work/HGCAL/CERNTB/niramay/niramay_github/forked_repo/E_Pi_Comparison/functions/Template_150_GeV.root"); +// // TH1F* ref_hist = (TH1F*)file0->Get("hist_ref_template"); +// //TH1F* hist = new TH1F("hist","hist",30,0,30); +// for(int i = 1; i <= shower->GetNbinsX(); i++){ +// hist->SetBinContent(i,shower->GetBinContent(i)); +// } +// return hist; +// //return (hist->Chi2Test(ref_h,"CHI2/NDF")); +// } + + +// float HGCNtupleVariables::find_official_calib(int layer, int en_chan){ +// std::pair temp_find; +// temp_find = std::make_pair(layer,en_chan); +// std::map, float >::iterator it = offical_calib_map.find(temp_find); +// if(it != offical_calib_map.end()){ +// return it->second; +// } +// else { +// return -1.0; +// } +// } + + +// float HGCNtupleVariables::find_my_calib(int layer, int en_chan){ +// std::pair temp_find; +// temp_find = std::make_pair(layer,en_chan); +// std::map, float >::iterator it = my_calib_map.find(temp_find); +// if(it != my_calib_map.end()){ +// return it->second; +// } +// else { +// return -1.0; +// } +// } + + diff --git a/tracking_inclusion/HGCNtupleVariables.h b/tracking_inclusion/HGCNtupleVariables.h new file mode 100644 index 0000000..2ad02fa --- /dev/null +++ b/tracking_inclusion/HGCNtupleVariables.h @@ -0,0 +1,511 @@ +////////////////////////////////////////////////////////// +// This class has been automatically generated on +// Thu Aug 16 18:22:34 2018 by ROOT version 6.06/01 +// from TTree hits/HGC rechits +// found on file: muon_v10.root +////////////////////////////////////////////////////////// + +#ifndef HGCNtupleVariables_h +#define HGCNtupleVariables_h + +#include +#include +#include +#include + +// Header file for the classes stored in the TTree if any. +#include "vector" + +using namespace std; + +class HGCNtupleVariables { +public : + + HGCNtupleVariables(TTree * /*tree*/ =0) : fChain(0) { } + ~HGCNtupleVariables() { } + /* void Init(TTree *tree); */ + void Init(TTree *tree, TTree *tree2); + Bool_t Notify(); + Int_t GetEntry(Long64_t entry, Int_t getall = 0) { return fChain ? fChain->GetTree()->GetEntry(entry, getall) : 0; } + std::vector getModuleLocation(int moduleID); + int getBIN(unsigned int skiroc,unsigned int channel); + float deltaR(float x1, float y1, float x2, float y2); + //double shower_comparisons(TProfile* shower, TH1F* hist); + //double shower_comparisons(TProfile* shower, TH1F* ref_h); + // TH1F* shower_comparisons(TProfile* shower, TH1F* hist); + // float find_my_calib(int layer, int en_chan); + // float find_official_calib(int layer, int en_chan); + std::map> module_map; + // std::map, float> offical_calib_map; + // std::map, float> my_calib_map; + + TTree *fChain; //!pointer to the analyzed TTree or TChain + TTree *fChain2; //!pointer to the analyzed TTree or TChain + Int_t fCurrent; //!current Tree number in a TChain + Int_t fCurrent2; //!current Tree number in a TChain + + // Fixed size dimensions of array or collections stored in the TTree if any. + + // Declaration of leaf types + UInt_t event; + UInt_t run; + Int_t pdgID; + Float_t beamEnergy; + Float_t trueBeamEnergy; + Int_t NRechits; + vector *rechit_detid; + vector *rechit_module; + vector *rechit_layer; + vector *rechit_chip; + vector *rechit_channel; + vector *rechit_type; + vector *rechit_x; + vector *rechit_y; + vector *rechit_z; + vector *rechit_iu; + vector *rechit_iv; + vector *rechit_energy; + vector *rechit_energy_noHG; + vector *rechit_amplitudeHigh; + vector *rechit_amplitudeLow; + vector *rechit_hg_goodFit; + vector *rechit_lg_goodFit; + vector *rechit_hg_saturated; + vector *rechit_lg_saturated; + vector *rechit_fully_calibrated; + vector *rechit_TS2High; + vector *rechit_TS2Low; + vector *rechit_TS3High; + vector *rechit_TS3Low; + vector *rechit_Tot; + vector *rechit_time; + vector *rechit_timeMaxHG; + vector *rechit_timeMaxLG; + vector *rechit_toaRise; + vector *rechit_toaFall; + + // List of branches + TBranch *b_event; //! + TBranch *b_run; //! + TBranch *b_pdgID; //! + TBranch *b_beamEnergy; //! + TBranch *b_trueBeamEnergy; //! + TBranch *b_NRechits; //! + TBranch *b_rechit_detid; //! + TBranch *b_rechit_module; //! + TBranch *b_rechit_layer; //! + TBranch *b_rechit_chip; //! + TBranch *b_rechit_channel; //! + TBranch *b_rechit_type; //! + TBranch *b_rechit_x; //! + TBranch *b_rechit_y; //! + TBranch *b_rechit_z; //! + TBranch *b_rechit_iu; //! + TBranch *b_rechit_iv; //! + TBranch *b_rechit_energy; //! + TBranch *b_rechit_energy_noHG; //! + TBranch *b_rechit_amplitudeHigh; //! + TBranch *b_rechit_amplitudeLow; //! + TBranch *b_rechit_hg_goodFit; //! + TBranch *b_rechit_lg_goodFit; //! + TBranch *b_rechit_hg_saturated; //! + TBranch *b_rechit_lg_saturated; //! + TBranch *b_rechit_fully_calibrated; //! + TBranch *b_rechit_TS2High; //! + TBranch *b_rechit_TS2Low; //! + TBranch *b_rechit_TS3High; //! + TBranch *b_rechit_TS3Low; //! + TBranch *b_rechit_Tot; //! + TBranch *b_rechit_time; //! + TBranch *b_rechit_timeMaxHG; //! + TBranch *b_rechit_timeMaxLG; //! + TBranch *b_rechit_toaRise; //! + TBranch *b_rechit_toaFall; //! + + // second tree + Int_t ntracks; + Float_t impactX_HGCal_layer_1; + Float_t impactY_HGCal_layer_1; + Float_t impactX_HGCal_layer_2; + Float_t impactY_HGCal_layer_2; + Float_t impactX_HGCal_layer_3; + Float_t impactY_HGCal_layer_3; + Float_t impactX_HGCal_layer_4; + Float_t impactY_HGCal_layer_4; + Float_t impactX_HGCal_layer_5; + Float_t impactY_HGCal_layer_5; + Float_t impactX_HGCal_layer_6; + Float_t impactY_HGCal_layer_6; + Float_t impactX_HGCal_layer_7; + Float_t impactY_HGCal_layer_7; + Float_t impactX_HGCal_layer_8; + Float_t impactY_HGCal_layer_8; + Float_t impactX_HGCal_layer_9; + Float_t impactY_HGCal_layer_9; + Float_t impactX_HGCal_layer_10; + Float_t impactY_HGCal_layer_10; + Float_t impactX_HGCal_layer_11; + Float_t impactY_HGCal_layer_11; + Float_t impactX_HGCal_layer_12; + Float_t impactY_HGCal_layer_12; + Float_t impactX_HGCal_layer_13; + Float_t impactY_HGCal_layer_13; + Float_t impactX_HGCal_layer_14; + Float_t impactY_HGCal_layer_14; + Float_t impactX_HGCal_layer_15; + Float_t impactY_HGCal_layer_15; + Float_t impactX_HGCal_layer_16; + Float_t impactY_HGCal_layer_16; + Float_t impactX_HGCal_layer_17; + Float_t impactY_HGCal_layer_17; + Float_t impactX_HGCal_layer_18; + Float_t impactY_HGCal_layer_18; + Float_t impactX_HGCal_layer_19; + Float_t impactY_HGCal_layer_19; + Float_t impactX_HGCal_layer_20; + Float_t impactY_HGCal_layer_20; + Float_t impactX_HGCal_layer_21; + Float_t impactY_HGCal_layer_21; + Float_t impactX_HGCal_layer_22; + Float_t impactY_HGCal_layer_22; + Float_t impactX_HGCal_layer_23; + Float_t impactY_HGCal_layer_23; + Float_t impactX_HGCal_layer_24; + Float_t impactY_HGCal_layer_24; + Float_t impactX_HGCal_layer_25; + Float_t impactY_HGCal_layer_25; + Float_t impactX_HGCal_layer_26; + Float_t impactY_HGCal_layer_26; + Float_t impactX_HGCal_layer_27; + Float_t impactY_HGCal_layer_27; + Float_t impactX_HGCal_layer_28; + Float_t impactY_HGCal_layer_28; + Float_t impactX_HGCal_layer_29; + Float_t impactY_HGCal_layer_29; + Float_t impactX_HGCal_layer_30; + Float_t impactY_HGCal_layer_30; + Float_t impactX_HGCal_layer_31; + Float_t impactY_HGCal_layer_31; + Float_t impactX_HGCal_layer_32; + Float_t impactY_HGCal_layer_32; + Float_t impactX_HGCal_layer_33; + Float_t impactY_HGCal_layer_33; + Float_t impactX_HGCal_layer_34; + Float_t impactY_HGCal_layer_34; + Float_t impactX_HGCal_layer_35; + Float_t impactY_HGCal_layer_35; + Float_t impactX_HGCal_layer_36; + Float_t impactY_HGCal_layer_36; + Float_t impactX_HGCal_layer_37; + Float_t impactY_HGCal_layer_37; + Float_t impactX_HGCal_layer_38; + Float_t impactY_HGCal_layer_38; + Float_t impactX_HGCal_layer_39; + Float_t impactY_HGCal_layer_39; + Float_t impactX_HGCal_layer_40; + Float_t impactY_HGCal_layer_40; + + + Float_t trackChi2_X; + Float_t trackChi2_Y; + Int_t dwcReferenceType; + Double_t m_x; + Double_t m_y; + Double_t b_x; + Double_t b_y; + + // List of branches + TBranch *b_ntracks; //! + TBranch *b_impactX_HGCal_layer_1; //! + TBranch *b_impactY_HGCal_layer_1; //! + TBranch *b_impactX_HGCal_layer_2; //! + TBranch *b_impactY_HGCal_layer_2; //! + TBranch *b_impactX_HGCal_layer_3; //! + TBranch *b_impactY_HGCal_layer_3; //! + TBranch *b_impactX_HGCal_layer_4; //! + TBranch *b_impactY_HGCal_layer_4; //! + TBranch *b_impactX_HGCal_layer_5; //! + TBranch *b_impactY_HGCal_layer_5; //! + TBranch *b_impactX_HGCal_layer_6; //! + TBranch *b_impactY_HGCal_layer_6; //! + TBranch *b_impactX_HGCal_layer_7; //! + TBranch *b_impactY_HGCal_layer_7; //! + TBranch *b_impactX_HGCal_layer_8; //! + TBranch *b_impactY_HGCal_layer_8; //! + TBranch *b_impactX_HGCal_layer_9; //! + TBranch *b_impactY_HGCal_layer_9; //! + TBranch *b_impactX_HGCal_layer_10; //! + TBranch *b_impactY_HGCal_layer_10; //! + TBranch *b_impactX_HGCal_layer_11; //! + TBranch *b_impactY_HGCal_layer_11; //! + TBranch *b_impactX_HGCal_layer_12; //! + TBranch *b_impactY_HGCal_layer_12; //! + TBranch *b_impactX_HGCal_layer_13; //! + TBranch *b_impactY_HGCal_layer_13; //! + TBranch *b_impactX_HGCal_layer_14; //! + TBranch *b_impactY_HGCal_layer_14; //! + TBranch *b_impactX_HGCal_layer_15; //! + TBranch *b_impactY_HGCal_layer_15; //! + TBranch *b_impactX_HGCal_layer_16; //! + TBranch *b_impactY_HGCal_layer_16; //! + TBranch *b_impactX_HGCal_layer_17; //! + TBranch *b_impactY_HGCal_layer_17; //! + TBranch *b_impactX_HGCal_layer_18; //! + TBranch *b_impactY_HGCal_layer_18; //! + TBranch *b_impactX_HGCal_layer_19; //! + TBranch *b_impactY_HGCal_layer_19; //! + TBranch *b_impactX_HGCal_layer_20; //! + TBranch *b_impactY_HGCal_layer_20; //! + TBranch *b_impactX_HGCal_layer_21; //! + TBranch *b_impactY_HGCal_layer_21; //! + TBranch *b_impactX_HGCal_layer_22; //! + TBranch *b_impactY_HGCal_layer_22; //! + TBranch *b_impactX_HGCal_layer_23; //! + TBranch *b_impactY_HGCal_layer_23; //! + TBranch *b_impactX_HGCal_layer_24; //! + TBranch *b_impactY_HGCal_layer_24; //! + TBranch *b_impactX_HGCal_layer_25; //! + TBranch *b_impactY_HGCal_layer_25; //! + TBranch *b_impactX_HGCal_layer_26; //! + TBranch *b_impactY_HGCal_layer_26; //! + TBranch *b_impactX_HGCal_layer_27; //! + TBranch *b_impactY_HGCal_layer_27; //! + TBranch *b_impactX_HGCal_layer_28; //! + TBranch *b_impactY_HGCal_layer_28; //! + TBranch *b_impactX_HGCal_layer_29; + TBranch *b_impactY_HGCal_layer_29; + TBranch *b_impactX_HGCal_layer_30; + TBranch *b_impactY_HGCal_layer_30; + TBranch *b_impactX_HGCal_layer_31; + TBranch *b_impactY_HGCal_layer_31; + TBranch *b_impactX_HGCal_layer_32; + TBranch *b_impactY_HGCal_layer_32; + TBranch *b_impactX_HGCal_layer_33; + TBranch *b_impactY_HGCal_layer_33; + TBranch *b_impactX_HGCal_layer_34; + TBranch *b_impactY_HGCal_layer_34; + TBranch *b_impactX_HGCal_layer_35; + TBranch *b_impactY_HGCal_layer_35; + TBranch *b_impactX_HGCal_layer_36; + TBranch *b_impactY_HGCal_layer_36; + TBranch *b_impactX_HGCal_layer_37; + TBranch *b_impactY_HGCal_layer_37; + TBranch *b_impactX_HGCal_layer_38; + TBranch *b_impactY_HGCal_layer_38; + TBranch *b_impactX_HGCal_layer_39; + TBranch *b_impactY_HGCal_layer_39; + TBranch *b_impactX_HGCal_layer_40; + TBranch *b_impactY_HGCal_layer_40; + + TBranch *b_trackChi2_X; //! + TBranch *b_trackChi2_Y; //! + TBranch *b_dwcReferenceType; //! + TBranch *b_m_x; //! + TBranch *b_m_y; //! + TBranch *b_b_x; //! + TBranch *b_b_y; //! + + + +}; + +#endif + +#ifdef HGCNtupleVariables_cxx + +void HGCNtupleVariables::Init(TTree *tree, TTree *tree2) +/* void HGCNtupleVariables::Init(TTree *tree) */ +{ + // The Init() function is called when the selector needs to initialize + // a new tree or chain. Typically here the branch addresses and branch + // pointers of the tree will be set. + // It is normally not necessary to make changes to the generated + // code, but the routine can be extended by the user if needed. + // Init() will be called many times when running on PROOF + // (once per file to be processed). + + // Set object pointer + rechit_detid = 0; + rechit_module = 0; + rechit_layer = 0; + rechit_chip = 0; + rechit_channel = 0; + rechit_type = 0; + rechit_x = 0; + rechit_y = 0; + rechit_z = 0; + rechit_iu = 0; + rechit_iv = 0; + rechit_energy = 0; + rechit_energy_noHG = 0; + rechit_amplitudeHigh = 0; + rechit_amplitudeLow = 0; + rechit_hg_goodFit = 0; + rechit_lg_goodFit = 0; + rechit_hg_saturated = 0; + rechit_lg_saturated = 0; + rechit_fully_calibrated = 0; + rechit_TS2High = 0; + rechit_TS2Low = 0; + rechit_TS3High = 0; + rechit_TS3Low = 0; + rechit_Tot = 0; + rechit_time = 0; + rechit_timeMaxHG = 0; + rechit_timeMaxLG = 0; + rechit_toaRise = 0; + rechit_toaFall = 0; + // Set branch addresses and branch pointers + if (!tree) return; + fChain = tree; + fCurrent = -1; + fChain->SetMakeClass(1); + + fChain->SetBranchAddress("event", &event, &b_event); + fChain->SetBranchAddress("run", &run, &b_run); + fChain->SetBranchAddress("pdgID", &pdgID, &b_pdgID); + fChain->SetBranchAddress("beamEnergy", &beamEnergy, &b_beamEnergy); + fChain->SetBranchAddress("trueBeamEnergy", &trueBeamEnergy, &b_trueBeamEnergy); + fChain->SetBranchAddress("NRechits", &NRechits, &b_NRechits); + fChain->SetBranchAddress("rechit_detid", &rechit_detid, &b_rechit_detid); + fChain->SetBranchAddress("rechit_module", &rechit_module, &b_rechit_module); + fChain->SetBranchAddress("rechit_layer", &rechit_layer, &b_rechit_layer); + fChain->SetBranchAddress("rechit_chip", &rechit_chip, &b_rechit_chip); + fChain->SetBranchAddress("rechit_channel", &rechit_channel, &b_rechit_channel); + fChain->SetBranchAddress("rechit_type", &rechit_type, &b_rechit_type); + fChain->SetBranchAddress("rechit_x", &rechit_x, &b_rechit_x); + fChain->SetBranchAddress("rechit_y", &rechit_y, &b_rechit_y); + fChain->SetBranchAddress("rechit_z", &rechit_z, &b_rechit_z); + fChain->SetBranchAddress("rechit_iu", &rechit_iu, &b_rechit_iu); + fChain->SetBranchAddress("rechit_iv", &rechit_iv, &b_rechit_iv); + fChain->SetBranchAddress("rechit_energy", &rechit_energy, &b_rechit_energy); + fChain->SetBranchAddress("rechit_energy_noHG", &rechit_energy_noHG, &b_rechit_energy_noHG); + fChain->SetBranchAddress("rechit_amplitudeHigh", &rechit_amplitudeHigh, &b_rechit_amplitudeHigh); + fChain->SetBranchAddress("rechit_amplitudeLow", &rechit_amplitudeLow, &b_rechit_amplitudeLow); + fChain->SetBranchAddress("rechit_hg_goodFit", &rechit_hg_goodFit, &b_rechit_hg_goodFit); + fChain->SetBranchAddress("rechit_lg_goodFit", &rechit_lg_goodFit, &b_rechit_lg_goodFit); + fChain->SetBranchAddress("rechit_hg_saturated", &rechit_hg_saturated, &b_rechit_hg_saturated); + fChain->SetBranchAddress("rechit_lg_saturated", &rechit_lg_saturated, &b_rechit_lg_saturated); + fChain->SetBranchAddress("rechit_fully_calibrated", &rechit_fully_calibrated, &b_rechit_fully_calibrated); + fChain->SetBranchAddress("rechit_TS2High", &rechit_TS2High, &b_rechit_TS2High); + fChain->SetBranchAddress("rechit_TS2Low", &rechit_TS2Low, &b_rechit_TS2Low); + fChain->SetBranchAddress("rechit_TS3High", &rechit_TS3High, &b_rechit_TS3High); + fChain->SetBranchAddress("rechit_TS3Low", &rechit_TS3Low, &b_rechit_TS3Low); + fChain->SetBranchAddress("rechit_Tot", &rechit_Tot, &b_rechit_Tot); + fChain->SetBranchAddress("rechit_time", &rechit_time, &b_rechit_time); + fChain->SetBranchAddress("rechit_timeMaxHG", &rechit_timeMaxHG, &b_rechit_timeMaxHG); + fChain->SetBranchAddress("rechit_timeMaxLG", &rechit_timeMaxLG, &b_rechit_timeMaxLG); + fChain->SetBranchAddress("rechit_toaRise", &rechit_toaRise, &b_rechit_toaRise); + fChain->SetBranchAddress("rechit_toaFall", &rechit_toaFall, &b_rechit_toaFall); + + // Set branch addresses and branch pointers + if (!tree2) return; + fChain2 = tree2; + fCurrent2 = -1; + fChain2->SetMakeClass(1); + + fChain2->SetBranchAddress("ntracks", &ntracks, &b_ntracks); + fChain2->SetBranchAddress("impactX_HGCal_layer_1", &impactX_HGCal_layer_1, &b_impactX_HGCal_layer_1); + fChain2->SetBranchAddress("impactY_HGCal_layer_1", &impactY_HGCal_layer_1, &b_impactY_HGCal_layer_1); + fChain2->SetBranchAddress("impactX_HGCal_layer_2", &impactX_HGCal_layer_2, &b_impactX_HGCal_layer_2); + fChain2->SetBranchAddress("impactY_HGCal_layer_2", &impactY_HGCal_layer_2, &b_impactY_HGCal_layer_2); + fChain2->SetBranchAddress("impactX_HGCal_layer_3", &impactX_HGCal_layer_3, &b_impactX_HGCal_layer_3); + fChain2->SetBranchAddress("impactY_HGCal_layer_3", &impactY_HGCal_layer_3, &b_impactY_HGCal_layer_3); + fChain2->SetBranchAddress("impactX_HGCal_layer_4", &impactX_HGCal_layer_4, &b_impactX_HGCal_layer_4); + fChain2->SetBranchAddress("impactY_HGCal_layer_4", &impactY_HGCal_layer_4, &b_impactY_HGCal_layer_4); + fChain2->SetBranchAddress("impactX_HGCal_layer_5", &impactX_HGCal_layer_5, &b_impactX_HGCal_layer_5); + fChain2->SetBranchAddress("impactY_HGCal_layer_5", &impactY_HGCal_layer_5, &b_impactY_HGCal_layer_5); + fChain2->SetBranchAddress("impactX_HGCal_layer_6", &impactX_HGCal_layer_6, &b_impactX_HGCal_layer_6); + fChain2->SetBranchAddress("impactY_HGCal_layer_6", &impactY_HGCal_layer_6, &b_impactY_HGCal_layer_6); + fChain2->SetBranchAddress("impactX_HGCal_layer_7", &impactX_HGCal_layer_7, &b_impactX_HGCal_layer_7); + fChain2->SetBranchAddress("impactY_HGCal_layer_7", &impactY_HGCal_layer_7, &b_impactY_HGCal_layer_7); + fChain2->SetBranchAddress("impactX_HGCal_layer_8", &impactX_HGCal_layer_8, &b_impactX_HGCal_layer_8); + fChain2->SetBranchAddress("impactY_HGCal_layer_8", &impactY_HGCal_layer_8, &b_impactY_HGCal_layer_8); + fChain2->SetBranchAddress("impactX_HGCal_layer_9", &impactX_HGCal_layer_9, &b_impactX_HGCal_layer_9); + fChain2->SetBranchAddress("impactY_HGCal_layer_9", &impactY_HGCal_layer_9, &b_impactY_HGCal_layer_9); + fChain2->SetBranchAddress("impactX_HGCal_layer_10", &impactX_HGCal_layer_10, &b_impactX_HGCal_layer_10); + fChain2->SetBranchAddress("impactY_HGCal_layer_10", &impactY_HGCal_layer_10, &b_impactY_HGCal_layer_10); + fChain2->SetBranchAddress("impactX_HGCal_layer_11", &impactX_HGCal_layer_11, &b_impactX_HGCal_layer_11); + fChain2->SetBranchAddress("impactY_HGCal_layer_11", &impactY_HGCal_layer_11, &b_impactY_HGCal_layer_11); + fChain2->SetBranchAddress("impactX_HGCal_layer_12", &impactX_HGCal_layer_12, &b_impactX_HGCal_layer_12); + fChain2->SetBranchAddress("impactY_HGCal_layer_12", &impactY_HGCal_layer_12, &b_impactY_HGCal_layer_12); + fChain2->SetBranchAddress("impactX_HGCal_layer_13", &impactX_HGCal_layer_13, &b_impactX_HGCal_layer_13); + fChain2->SetBranchAddress("impactY_HGCal_layer_13", &impactY_HGCal_layer_13, &b_impactY_HGCal_layer_13); + fChain2->SetBranchAddress("impactX_HGCal_layer_14", &impactX_HGCal_layer_14, &b_impactX_HGCal_layer_14); + fChain2->SetBranchAddress("impactY_HGCal_layer_14", &impactY_HGCal_layer_14, &b_impactY_HGCal_layer_14); + fChain2->SetBranchAddress("impactX_HGCal_layer_15", &impactX_HGCal_layer_15, &b_impactX_HGCal_layer_15); + fChain2->SetBranchAddress("impactY_HGCal_layer_15", &impactY_HGCal_layer_15, &b_impactY_HGCal_layer_15); + fChain2->SetBranchAddress("impactX_HGCal_layer_16", &impactX_HGCal_layer_16, &b_impactX_HGCal_layer_16); + fChain2->SetBranchAddress("impactY_HGCal_layer_16", &impactY_HGCal_layer_16, &b_impactY_HGCal_layer_16); + fChain2->SetBranchAddress("impactX_HGCal_layer_17", &impactX_HGCal_layer_17, &b_impactX_HGCal_layer_17); + fChain2->SetBranchAddress("impactY_HGCal_layer_17", &impactY_HGCal_layer_17, &b_impactY_HGCal_layer_17); + fChain2->SetBranchAddress("impactX_HGCal_layer_18", &impactX_HGCal_layer_18, &b_impactX_HGCal_layer_18); + fChain2->SetBranchAddress("impactY_HGCal_layer_18", &impactY_HGCal_layer_18, &b_impactY_HGCal_layer_18); + fChain2->SetBranchAddress("impactX_HGCal_layer_19", &impactX_HGCal_layer_19, &b_impactX_HGCal_layer_19); + fChain2->SetBranchAddress("impactY_HGCal_layer_19", &impactY_HGCal_layer_19, &b_impactY_HGCal_layer_19); + fChain2->SetBranchAddress("impactX_HGCal_layer_20", &impactX_HGCal_layer_20, &b_impactX_HGCal_layer_20); + fChain2->SetBranchAddress("impactY_HGCal_layer_20", &impactY_HGCal_layer_20, &b_impactY_HGCal_layer_20); + fChain2->SetBranchAddress("impactX_HGCal_layer_21", &impactX_HGCal_layer_21, &b_impactX_HGCal_layer_21); + fChain2->SetBranchAddress("impactY_HGCal_layer_21", &impactY_HGCal_layer_21, &b_impactY_HGCal_layer_21); + fChain2->SetBranchAddress("impactX_HGCal_layer_22", &impactX_HGCal_layer_22, &b_impactX_HGCal_layer_22); + fChain2->SetBranchAddress("impactY_HGCal_layer_22", &impactY_HGCal_layer_22, &b_impactY_HGCal_layer_22); + fChain2->SetBranchAddress("impactX_HGCal_layer_23", &impactX_HGCal_layer_23, &b_impactX_HGCal_layer_23); + fChain2->SetBranchAddress("impactY_HGCal_layer_23", &impactY_HGCal_layer_23, &b_impactY_HGCal_layer_23); + fChain2->SetBranchAddress("impactX_HGCal_layer_24", &impactX_HGCal_layer_24, &b_impactX_HGCal_layer_24); + fChain2->SetBranchAddress("impactY_HGCal_layer_24", &impactY_HGCal_layer_24, &b_impactY_HGCal_layer_24); + fChain2->SetBranchAddress("impactX_HGCal_layer_25", &impactX_HGCal_layer_25, &b_impactX_HGCal_layer_25); + fChain2->SetBranchAddress("impactY_HGCal_layer_25", &impactY_HGCal_layer_25, &b_impactY_HGCal_layer_25); + fChain2->SetBranchAddress("impactX_HGCal_layer_26", &impactX_HGCal_layer_26, &b_impactX_HGCal_layer_26); + fChain2->SetBranchAddress("impactY_HGCal_layer_26", &impactY_HGCal_layer_26, &b_impactY_HGCal_layer_26); + fChain2->SetBranchAddress("impactX_HGCal_layer_27", &impactX_HGCal_layer_27, &b_impactX_HGCal_layer_27); + fChain2->SetBranchAddress("impactY_HGCal_layer_27", &impactY_HGCal_layer_27, &b_impactY_HGCal_layer_27); + fChain2->SetBranchAddress("impactX_HGCal_layer_28", &impactX_HGCal_layer_28, &b_impactX_HGCal_layer_28); + fChain2->SetBranchAddress("impactY_HGCal_layer_28", &impactY_HGCal_layer_28, &b_impactY_HGCal_layer_28); + fChain2->SetBranchAddress("impactX_HGCal_layer_29", &impactX_HGCal_layer_29, &b_impactX_HGCal_layer_29); + fChain2->SetBranchAddress("impactY_HGCal_layer_29", &impactY_HGCal_layer_29, &b_impactY_HGCal_layer_29); + fChain2->SetBranchAddress("impactX_HGCal_layer_30", &impactX_HGCal_layer_30, &b_impactX_HGCal_layer_30); + fChain2->SetBranchAddress("impactY_HGCal_layer_30", &impactY_HGCal_layer_30, &b_impactY_HGCal_layer_30); + fChain2->SetBranchAddress("impactX_HGCal_layer_31", &impactX_HGCal_layer_31, &b_impactX_HGCal_layer_31); + fChain2->SetBranchAddress("impactY_HGCal_layer_31", &impactY_HGCal_layer_31, &b_impactY_HGCal_layer_31); + fChain2->SetBranchAddress("impactX_HGCal_layer_32", &impactX_HGCal_layer_32, &b_impactX_HGCal_layer_32); + fChain2->SetBranchAddress("impactY_HGCal_layer_32", &impactY_HGCal_layer_32, &b_impactY_HGCal_layer_32); + fChain2->SetBranchAddress("impactX_HGCal_layer_33", &impactX_HGCal_layer_33, &b_impactX_HGCal_layer_33); + fChain2->SetBranchAddress("impactY_HGCal_layer_33", &impactY_HGCal_layer_33, &b_impactY_HGCal_layer_33); + fChain2->SetBranchAddress("impactX_HGCal_layer_34", &impactX_HGCal_layer_34, &b_impactX_HGCal_layer_34); + fChain2->SetBranchAddress("impactY_HGCal_layer_34", &impactY_HGCal_layer_34, &b_impactY_HGCal_layer_34); + fChain2->SetBranchAddress("impactX_HGCal_layer_35", &impactX_HGCal_layer_35, &b_impactX_HGCal_layer_35); + fChain2->SetBranchAddress("impactY_HGCal_layer_35", &impactY_HGCal_layer_35, &b_impactY_HGCal_layer_35); + fChain2->SetBranchAddress("impactX_HGCal_layer_36", &impactX_HGCal_layer_36, &b_impactX_HGCal_layer_36); + fChain2->SetBranchAddress("impactY_HGCal_layer_36", &impactY_HGCal_layer_36, &b_impactY_HGCal_layer_36); + fChain2->SetBranchAddress("impactX_HGCal_layer_37", &impactX_HGCal_layer_37, &b_impactX_HGCal_layer_37); + fChain2->SetBranchAddress("impactY_HGCal_layer_37", &impactY_HGCal_layer_37, &b_impactY_HGCal_layer_37); + fChain2->SetBranchAddress("impactX_HGCal_layer_38", &impactX_HGCal_layer_38, &b_impactX_HGCal_layer_38); + fChain2->SetBranchAddress("impactY_HGCal_layer_38", &impactY_HGCal_layer_38, &b_impactY_HGCal_layer_38); + fChain2->SetBranchAddress("impactX_HGCal_layer_39", &impactX_HGCal_layer_39, &b_impactX_HGCal_layer_39); + fChain2->SetBranchAddress("impactY_HGCal_layer_39", &impactY_HGCal_layer_39, &b_impactY_HGCal_layer_39); + fChain2->SetBranchAddress("impactX_HGCal_layer_40", &impactX_HGCal_layer_40, &b_impactX_HGCal_layer_40); + fChain2->SetBranchAddress("impactY_HGCal_layer_40", &impactY_HGCal_layer_40, &b_impactY_HGCal_layer_40); + + fChain2->SetBranchAddress("trackChi2_X", &trackChi2_X, &b_trackChi2_X); + fChain2->SetBranchAddress("trackChi2_Y", &trackChi2_Y, &b_trackChi2_Y); + fChain2->SetBranchAddress("dwcReferenceType", &dwcReferenceType, &b_dwcReferenceType); + fChain2->SetBranchAddress("m_x", &m_x, &b_m_x); + fChain2->SetBranchAddress("m_y", &m_y, &b_m_y); + fChain2->SetBranchAddress("b_x", &b_x, &b_b_x); + fChain2->SetBranchAddress("b_y", &b_y, &b_b_y); + + Notify(); +} + +Bool_t HGCNtupleVariables::Notify() +{ + // The Notify() function is called when a new file is opened. This + // can be either for a new TTree in a TChain or when when a new TTree + // is started when using PROOF. It is normally not necessary to make changes + // to the generated code, but the routine can be extended by the + // user if needed. The return value is currently not used. + + return kTRUE; +} + +#endif // #ifdef HGCNtupleVariables_cxx diff --git a/tracking_inclusion/Makefile b/tracking_inclusion/Makefile new file mode 100644 index 0000000..0e04de3 --- /dev/null +++ b/tracking_inclusion/Makefile @@ -0,0 +1,37 @@ +CXX = g++ + +CXXFLAGS= $(shell root-config --cflags) +LIBS = $(shell root-config --libs) + + +SOURCES = HGCNtupleVariables.cc AnalyzeHGCOctTB.cc +HEADERS = HGCNtupleVariables.h AnalyzeHGCOctTB.h +OBJECTS = $(SOURCES:.cc=.o) + +EXECUTABLE = analyzeHGCOctTB + +all: $(SOURCES) $(EXECUTABLE) + +%.o: %.cc + @echo Compiling $<... + $(CXX) $(CXXFLAGS) -c -o $@ $< + + +$(EXECUTABLE): $(OBJECTS) + @echo "Linking $(PROGRAM) ..." + @echo "@$(CXX) $(LIBS) $(OBJECTS) -o $@" + @$(CXX) -o $@ $^ $(LIBS) + @echo "done" + + +# Specifying the object files as intermediates deletes them automatically after the build process. +.INTERMEDIATE: $(OBJECTS) + +# The default target, which gives instructions, can be called regardless of whether or not files need to be updated. +.PHONY : clean +clean: + rm -f $(OBJECTS) $(EXECUTABLE) + +### +HGCNtupleVariables.o: HGCNtupleVariables.h +AnalyzeHGCOctTB.o:HGCNtupleVariables.h AnalyzeHGCOctTB.h diff --git a/tracking_inclusion/analyzeHGCOctTB b/tracking_inclusion/analyzeHGCOctTB new file mode 100755 index 0000000000000000000000000000000000000000..330f9eca9c46006c515f22a5c07e6084f2e8aeed GIT binary patch literal 140008 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 CWq$Pl literal 0 HcmV?d00001 diff --git a/tracking_inclusion/only_EE_layer_config2/AnalyzeHGCOctTB.cc b/tracking_inclusion/only_EE_layer_config2/AnalyzeHGCOctTB.cc new file mode 100644 index 0000000..51c681b --- /dev/null +++ b/tracking_inclusion/only_EE_layer_config2/AnalyzeHGCOctTB.cc @@ -0,0 +1,388 @@ +#define AnalyzeHGCOctTB_cxx + +#include +#include +#include +#include "AnalyzeHGCOctTB.h" + +using namespace std; + + + +// chip 3022,44,3028 + + + + +int main(int argc, char* argv[]) +{ + + if (argc < 3) { + cerr << "Please give 4 arguments " << "runList " << " " << "outputFileName" << " " << "dataset" <<" " << "configuration" << endl; + return -1; + } + const char *inputFileList = argv[1]; + const char *outFileName = argv[2]; + const char *data = argv[3]; + const char *config = argv[4]; + + AnalyzeHGCOctTB hgcOctTB(inputFileList, outFileName, data, config); + cout << "dataset " << data << " " << endl; + cout << "congiguration " << config << " " << endl; + + hgcOctTB.EventLoop(data); + return 0; +} + +void AnalyzeHGCOctTB::EventLoop(const char *data) { + if (fChain == 0) return; + + Long64_t nentries = fChain->GetEntriesFast(); + cout << "nentries " << nentries << endl; + cout << "Analyzing dataset " << data << " " << endl; + + Long64_t nbytes = 0, nb = 0; + Long64_t nbytes2 = 0, nb2 = 0; + int decade = 0; + + float rechit_cut[28] = {0.02,0.039,0.019,0.02,0.037,0.076,0.10, + 0.14,0.18,0.24,0.28,0.33,0.48,0.52, + 0.56,0.6,0.64,0.70,0.74,0.78,0.82, + 0.86,0.90,0.92,0.94,0.95,0.98,1.0}; + + bool DEBUG = false; + Long64_t cut_count[28]; + Long64_t nEvents = 0; + Long64_t MIP_pions = 0; + int TOTAL_ACTIVE_LAYER = -1; + int EE_LAYER = -1; + int FH_LAYER = -1; + if(!strcmp(conf_,"alpha") || !strcmp(conf_,"config1")) { + TOTAL_ACTIVE_LAYER = 40; + EE_LAYER = 28; + FH_LAYER = 12; + } + else if(!strcmp(conf_,"bravo") || !strcmp(conf_,"config2")){ + TOTAL_ACTIVE_LAYER = 39; + EE_LAYER = 28; + FH_LAYER = 11; + } + else if(!strcmp(conf_,"charlie") || !strcmp(conf_,"config3")) { + TOTAL_ACTIVE_LAYER = 20; + EE_LAYER = 8; + FH_LAYER = 12; + } + else { + cout<<"ERROR: Unknown configuration!!!!"< decade) + cout << 10 * k << " %" << endl; + decade = k; + + // ===============read this entry == == == == == == == == == == == + + Long64_t ientry = LoadTree(jentry); + if (ientry < 0) { break; cout<<"Breaking"<GetEntry(jentry); nbytes += nb; + nb2 = fChain2->GetEntry(jentry); nbytes2 += nb2; + + if(NRechits == 0) continue; + // if(NRechits > 50 || NRechits < 20) continue; + h_nTracks->Fill(ntracks); + if(ntracks != 1) continue; + Float_t track_x[28]; + Float_t track_y[28]; + + track_x[0] = impactX_HGCal_layer_1; + track_y[0] = impactY_HGCal_layer_1; + track_x[1] = impactX_HGCal_layer_2; + track_y[1] = impactY_HGCal_layer_2; + track_x[2] = impactX_HGCal_layer_3; + track_y[2] = impactY_HGCal_layer_3; + track_x[3] = impactX_HGCal_layer_4; + track_y[3] = impactY_HGCal_layer_4; + track_x[4] = impactX_HGCal_layer_5; + track_y[4] = impactY_HGCal_layer_5; + track_x[5] = impactX_HGCal_layer_6; + track_y[5] = impactY_HGCal_layer_6; + track_x[6] = impactX_HGCal_layer_7; + track_y[6] = impactY_HGCal_layer_7; + track_x[7] = impactX_HGCal_layer_8; + track_y[7] = impactY_HGCal_layer_8; + track_x[8] = impactX_HGCal_layer_9; + track_y[8] = impactY_HGCal_layer_9; + track_x[9] = impactX_HGCal_layer_10; + track_y[9] = impactY_HGCal_layer_10; + track_x[10] = impactX_HGCal_layer_11; + track_y[10] = impactY_HGCal_layer_11; + track_x[11] = impactX_HGCal_layer_12; + track_y[11] = impactY_HGCal_layer_12; + track_x[12] = impactX_HGCal_layer_13; + track_y[12] = impactY_HGCal_layer_13; + track_x[13] = impactX_HGCal_layer_14; + track_y[13] = impactY_HGCal_layer_14; + track_x[14] = impactX_HGCal_layer_15; + track_y[14] = impactY_HGCal_layer_15; + track_x[15] = impactX_HGCal_layer_16; + track_y[15] = impactY_HGCal_layer_16; + track_x[16] = impactX_HGCal_layer_17; + track_y[16] = impactY_HGCal_layer_17; + track_x[17] = impactX_HGCal_layer_18; + track_y[17] = impactY_HGCal_layer_18; + track_x[18] = impactX_HGCal_layer_19; + track_y[18] = impactY_HGCal_layer_19; + track_x[19] = impactX_HGCal_layer_20; + track_y[19] = impactY_HGCal_layer_20; + track_x[20] = impactX_HGCal_layer_21; + track_y[20] = impactY_HGCal_layer_21; + track_x[21] = impactX_HGCal_layer_22; + track_y[21] = impactY_HGCal_layer_22; + track_x[22] = impactX_HGCal_layer_23; + track_y[22] = impactY_HGCal_layer_23; + track_x[23] = impactX_HGCal_layer_24; + track_y[23] = impactY_HGCal_layer_24; + track_x[24] = impactX_HGCal_layer_25; + track_y[24] = impactY_HGCal_layer_25; + track_x[25] = impactX_HGCal_layer_26; + track_y[25] = impactY_HGCal_layer_26; + track_x[26] = impactX_HGCal_layer_27; + track_y[26] = impactY_HGCal_layer_27; + track_x[27] = impactX_HGCal_layer_28; + track_y[27] = impactY_HGCal_layer_28; + track_x[28] = impactX_HGCal_layer_29; + track_y[28] = impactY_HGCal_layer_29; + track_x[29] = impactX_HGCal_layer_30; + track_y[29] = impactY_HGCal_layer_30; + track_x[30] = impactX_HGCal_layer_31; + track_y[30] = impactY_HGCal_layer_31; + track_x[31] = impactX_HGCal_layer_32; + track_y[31] = impactY_HGCal_layer_32; + track_x[32] = impactX_HGCal_layer_33; + track_y[32] = impactY_HGCal_layer_33; + track_x[33] = impactX_HGCal_layer_34; + track_y[33] = impactY_HGCal_layer_34; + track_x[34] = impactX_HGCal_layer_35; + track_y[34] = impactY_HGCal_layer_35; + track_x[35] = impactX_HGCal_layer_36; + track_y[35] = impactY_HGCal_layer_36; + track_x[36] = impactX_HGCal_layer_37; + track_y[36] = impactY_HGCal_layer_37; + track_x[37] = impactX_HGCal_layer_38; + track_y[37] = impactY_HGCal_layer_38; + track_x[38] = impactX_HGCal_layer_39; + track_y[38] = impactY_HGCal_layer_39; + track_x[39] = impactX_HGCal_layer_40; + track_y[39] = impactY_HGCal_layer_40; + + + Double_t rechitEnergySum = 0.0; + Double_t rechitEnergySum_EE = 0.0; + Double_t rechitEnergySum_FH = 0.0; + Double_t un_cali = 0.0; + Long_t Nrechit_layer[40]; + Long_t NRechits_EE[28]; + Long_t NRechits_FH[12][7]; + int module_part_ = 0; + int module_layer_ = 0; + int module_position_ = 0; + vector dR[40]; + double dr_min_index[40]; + double dr_min[40]; + + for(int ii=0;ii<40;ii++){ + if(ii<28) { + NRechits_EE[ii]=0; + dR[ii].clear(); + dr_min_index[ii] = -1.0; + dr_min[ii] = 1.e10; + } + Nrechit_layer[ii]=0; + // dR[ii].clear(); + // dr_min_index[ii] = -1.0; + // dr_min[ii] = 1.e10; + + } + for(int ii=0;ii<12;ii++){ + for(int jj=0;jj<7;jj++){ + NRechits_FH[ii][jj]=0; + } + } + + if(DEBUG) cout<<"DEBUG: Start Analylizing RecHits!!"< temp_moduleID; + for(int i = 0 ; i < NRechits; i++){ + temp_moduleID.clear(); + int temp_layer = rechit_layer->at(i); + int temp_chip = rechit_chip->at(i); + int temp_channel = rechit_channel->at(i); + int en_chan = temp_chip*1000+temp_channel; + if(en_chan == 3022 || en_chan == 3028 || en_chan == 44) continue; + if(rechit_amplitudeHigh->at(i) < 20) continue; + Nrechit_layer[temp_layer-1]++; + + temp_moduleID = getModuleLocation(rechit_module->at(i)); + if(!temp_moduleID.size() || temp_moduleID.size()<3) { + cout<<"ERROR: Could NOT locate MODULE location for module "<at(i)<Fill(module_part_); + + if(module_part_ == 0) { + rechitEnergySum_EE+=rechit_energy->at(i); + NRechits_EE[module_layer_-1]++; + h_adcHG_EE[module_layer_-1][channel_bin]->Fill(rechit_amplitudeHigh->at(i)); + } + if(module_part_ == 1) { + rechitEnergySum_FH+=rechit_energy->at(i); + NRechits_FH[module_layer_-1][module_position_-1]++; + h_adcHG_FH[module_layer_-1][module_position_-1][channel_bin]->Fill(rechit_amplitudeHigh->at(i)); + } + rechitEnergySum+=rechit_energy->at(i); + + } + // cout<<"NEW EVENT "< 50) return; + + if(DEBUG) cout<<"DEBUG: Values Assigned!!!"< 9 ) continue; + Nrechit_FH+=NRechits_FH[iL-EE_LAYER][j]; + h_NRechits_FH[iL-EE_LAYER][j]->Fill(NRechits_FH[iL-EE_LAYER][j]); + + } + } + } + + if(DEBUG) cout<<"DEBUG: Assigned NRechits for each layer"<Fill(10); + else if(!strcmp(conf_,"bravo")) h_configuration->Fill(20); + else if(!strcmp(conf_,"charlie")) h_configuration->Fill(30); + else { + cout<<"ERROR: Unknown configuration!!!!"<at(dr_min_index[i]); + int temp_channel = rechit_channel->at(dr_min_index[i]); + int channel_bin = getBIN(temp_chip,temp_channel); + if (channel_bin < 0) { cout<<"INVALID CHANNEL!!!"<at(dr_min_index[i]); + h_adcHG_EE_track[i][channel_bin]->Fill(adcHG); + + } + + if(DEBUG) cout<<"DEBUG: Filling Histos!!!"<Fill(pdgID); + h_beamEnergy->Fill(beamEnergy); + h_runNumber->Fill(run); + h_rechit_energy_all->Fill(rechitEnergySum); + h_rechit_energy_EE_only->Fill(rechitEnergySum_EE); + h_rechit_energy_FH_only->Fill(rechitEnergySum_FH); + h_rechit_energy_EE_vs_FH->Fill(rechitEnergySum_EE,rechitEnergySum_FH); + h_rechit_En_NRechits->Fill(NRechits,rechitEnergySum); + // h_Nrechit_EE_vs_FH->Fill(Nrechit_EE,Nrechit_FH); + // h_Nrechit_EE->Fill(Nrechit_EE); + // h_Nrechit_FH->Fill(Nrechit_FH); + + if(DEBUG) cout<<"DEBUG: End of Event = "<GetXaxis()->SetTitle("energy in EE(MIPs)"); + h_rechit_energy_EE_vs_FH->GetYaxis()->SetTitle("energy in FH(MIPs)"); + + h_Nrechit_EE = new TH1F("h_Nrechit_EE","NRechits in EE",500,0.0,1000.0); + h_Nrechit_FH = new TH1F("h_Nrechit_FH","NRechits in FH",500,0.0,1000.0); + h_Nrechit_EE_vs_FH = new TH2F("h_Nrechit_EE_vs_FH","NRechits EE vs FH",500,0.0,1000.0,500,0.0,1000.0); + h_Nrechit_EE_vs_FH->GetXaxis()->SetTitle("NRechits in EE"); + h_Nrechit_EE_vs_FH->GetYaxis()->SetTitle("NRechits in FH"); + + + + h_rechit_En_NRechits = new TH2F("h_rechit_En_NRechits","h_rechit_En_NRechits",100,0,1000,500,0.0,20000.0); + + d_adcHG = oFile->mkdir("ADC_distributions"); + d_adcHG->cd(); + for(int i = 0; i < 28; i++) { + if((!strcmp(conf,"charlie") || !strcmp(conf,"config3")) && (i+1 > 8)) break; + sprintf(dir_name,"EE_%d",i+1); + d_EE[i] = d_adcHG->mkdir(dir_name); + d_EE[i]->cd(); + sprintf(hname,"h_Nrechits_EE_L%d",i+1); + h_NRechits_EE[i] = new TH1F(hname, hname, 50, 0, 50); + sprintf(hname,"h_dR_layer_%d",i+1); + h_dR[i] = new TH1F(hname,hname,21.0,-1.0,20.0); + + sprintf(hname,"h_rechitX_rechitY_layer_%d",i+1); + h_rechitX_vs_rechitY_layer[i] = new TH2F(hname,hname,16,-8.0,8.0,16,-8.0,8.0); + sprintf(hname,"h_trackX_trackY_layer_%d",i+1); + h_trackX_vs_trackY_layer[i] = new TH2F(hname,hname,16,-8.0,8.0,16,-8.0,8.0); + + sprintf(hname,"h_rechitX_trackX_layer_%d",i+1); + h_rechitX_vs_trackX_layer[i] = new TH2F(hname,hname,16,-8.0,8.0,16,-8.0,8.0); + sprintf(hname,"h_rechitY_trackY_layer_%d",i+1); + h_rechitY_vs_trackY_layer[i] = new TH2F(hname,hname,16,-8.0,8.0,16,-8.0,8.0); + + + sprintf(hname,"h_dX_dY_layer_%d",i+1); + h_dX_dY_layer[i] = new TH2F(hname,hname,16,-8.0,8.0,16,-8.0,8.0); + + int chan = 0; + for(int chip = 0; chip < 4; chip++) { + for(int cc = 0; cc < 64; cc+=2,chan++) { + sprintf(hname,"h_adcHG_EE_L%d_P0_chip%d_chan%d",i+1,chip,cc); + h_adcHG_EE[i][chan] = new TH1F(hname, hname, 100, 0, 400); + sprintf(hname,"h_adcHG_EE_L%d_P0_chip%d_chan%d_track",i+1,chip,cc); + h_adcHG_EE_track[i][chan] = new TH1F(hname, hname, 100, 0, 400); + + } + } + } + for(int i = 0; i < 12; i++){ + for(int j = 0; j < 7; j++) { + /* if(!strcmp(conf,"alpha") && (i+1)>9 ) { */ + /* if((j+1) != 4) continue; */ + /* } */ + + sprintf(dir_name,"FH_L%d_P%d",i+1,j+1); + d_FH[i][j] = d_adcHG->mkdir(dir_name); + d_FH[i][j]->cd(); + + sprintf(hname,"h_Nrechits_FH_L%d_P%d",i+1,j+1); + h_NRechits_FH[i][j] = new TH1F(hname, hname, 50, 0, 50); + + int chan = 0; + for(int chip = 0; chip < 4; chip++) { + for(int cc = 0; cc < 64; cc+=2,chan++) { + sprintf(hname,"h_adcHG_FH_L%d_P%d_chip%d_chan%d",i+1,j+1,chip,cc); + h_adcHG_FH[i][j][chan] = new TH1F(hname, hname, 100, 0, 400); + sprintf(hname,"h_adcHG_FH_L%d_P%d_chip%d_chan%d_track",i+1,j+1,chip,cc); + h_adcHG_FH_track[i][j][chan] = new TH1F(hname, hname, 100, 0, 400); + + + } + } + } + } + // sprintf(hname,"h_rechit_E_full_official"); + // h_ERechits_full_official_calib = new TH1F(hname,hname,375.0,0.0,25000.0); + + // sprintf(hname,"h_rechit_E_full_my"); + // h_ERechits_full_my_calib = new TH1F(hname,hname,375.0,0.0,25000.0); + + + // d_Nrechit_layer = oFile->mkdir("Nrechit_layer"); + // d_Nrechit_layer->cd(); + + // for (int i=0;i<28;i++) { + // sprintf(hname,"h_rechit_layer_%d",i+1); + // h_nRechits_layer[i] = new TH1F(hname,hname,3000,0.0,3000.0); + // } + + + + // d_rechit_en_layer = oFile->mkdir("rechit_energys"); + // d_rechit_en_layer->cd(); + + + // for (int i=0;i<28;i++) { + // sprintf(hname,"h_rechit_E_layer_%d",i); + // h_ERechits_layer[i] = new TH1F(hname,hname,250.0,0.0,5000.0); + // } + + + +} + + +void AnalyzeHGCOctTB::moduleMap_init(const char* config) { + char *f_name = new char[200]; + + if(strcmp(config,"alpha")==0 || strcmp(config,"config1")==0) { + sprintf(f_name,"../../config_maps/moduleMAP_config1.txt"); + cout<<"\n\nINFO: Mapping module configuration ALPHA (oct10-oct17) "<>layer_>>module_>>chip_>>channel_>>adc_){ +// en_chan = chip_*1000+channel_; +// std::pair temp; +// temp = std::make_pair(layer_,en_chan); +// std::pair, float> temp1; +// temp1 = std::make_pair(temp, adc_); +// offical_calib_map.insert(temp1); +// } +// } + +// void AnalyzeHGCOctTB::my_calib_init() { +// char *f_name = new char[200]; +// sprintf(f_name,"/home/shubham/work/HGCAL/CERNTB/CERN_5_oct_2018/txt_files/ADC_MIP_v11.txt"); +// std::ifstream in(f_name); +// if(!in){ +// cout<<"Could not find "<>layer_>>chip_>>channel_>>adc_>>chi2>>mip_err>>entry){ +// en_chan = chip_*1000+channel_; +// std::pair temp; +// temp = std::make_pair(layer_+1,en_chan); +// std::pair, float> temp1; +// temp1 = std::make_pair(temp, adc_); +// my_calib_map.insert(temp1); +// } +// } + +AnalyzeHGCOctTB::AnalyzeHGCOctTB(const TString &inputFileList, const char *outFileName, const char* dataset, const char* config) { + + TChain *tree = new TChain("rechitntupler/hits"); + TChain *tree2 = new TChain("trackimpactntupler/impactPoints"); + + if( ! FillChain(tree, tree2, inputFileList) ) { + std::cerr << "Cannot get the tree " << std::endl; + } else { + std::cout << "Initiating analysis of dataset " << dataset << std::endl; + } + + /* if( ! FillChain(tree, inputFileList) ) { */ + /* std::cerr << "Cannot get the tree " << std::endl; */ + /* } else { */ + /* std::cout << "Initiating analysis of dataset " << dataset << std::endl; */ + /* } */ + + HGCNtupleVariables::Init(tree, tree2); + /* HGCNtupleVariables::Init(tree); */ + + BookHistogram(outFileName, config); + moduleMap_init(config); + // offical_calib_init(); + // my_calib_init(); + +} + +Bool_t AnalyzeHGCOctTB::FillChain(TChain *chain, TChain *chain2, const TString &inputFileList) { +/* Bool_t AnalyzeHGCOctTB::FillChain(TChain *chain, const TString &inputFileList) { */ + + ifstream infile(inputFileList, ifstream::in); + std::string buffer; + + if(!infile.is_open()) { + std::cerr << "** ERROR: Can't open '" << inputFileList << "' for input" << std::endl; + return kFALSE; + } + + std::cout << "TreeUtilities : FillChain " << std::endl; + while(1) { + infile >> buffer; + if(!infile.good()) break; + //std::cout << "Adding tree from " << buffer.c_str() << std::endl; + chain->Add(buffer.c_str()); + chain2->Add(buffer.c_str()); + } + std::cout << "No. of Entries in chain : " << chain->GetEntries() << std::endl; + std::cout << "No. of Entries in chain2 : " << chain2->GetEntries() << std::endl; + return kTRUE; +} + +Long64_t AnalyzeHGCOctTB::LoadTree(Long64_t entry) { + // Set the environment to read one entry + if (!fChain) return -5; + Long64_t centry = fChain->LoadTree(entry); + if (centry < 0) return centry; + if (!fChain->InheritsFrom(TChain::Class())) return centry; + TChain *chain = (TChain*)fChain; + if (chain->GetTreeNumber() != fCurrent) { + fCurrent = chain->GetTreeNumber(); + // Notify(); + } + + if (!fChain2) return -5; + Long64_t centry2 = fChain2->LoadTree(entry); + if (centry2 < 0) return centry2; + if (!fChain2->InheritsFrom(TChain::Class())) return centry2; + TChain *chain2 = (TChain*)fChain2; + if (chain2->GetTreeNumber() != fCurrent) { + fCurrent = chain->GetTreeNumber(); + // Notify(); + } + + + //if (centry==centry2) + return centry; + // cout<<"centry = "<0) + // return centry; + // else return -1; +} + +AnalyzeHGCOctTB::~AnalyzeHGCOctTB() { + + // if (!fChain || !fChain2) return; + // delete fChain->GetCurrentFile(); + // delete fChain2->GetCurrentFile(); + // oFile->cd(); + // oFile->Write(); + // oFile->Close(); + + + if (!fChain) return; + delete fChain->GetCurrentFile(); + oFile->cd(); + oFile->Write(); + oFile->Close(); + +} + +#endif diff --git a/tracking_inclusion/only_EE_layer_config2/HGCNtupleVariables.cc b/tracking_inclusion/only_EE_layer_config2/HGCNtupleVariables.cc new file mode 100644 index 0000000..cf7cd2f --- /dev/null +++ b/tracking_inclusion/only_EE_layer_config2/HGCNtupleVariables.cc @@ -0,0 +1,73 @@ +#define HGCNtupleVariables_cxx +#include "HGCNtupleVariables.h" +#include +#include +#include +//#include + + + + +float HGCNtupleVariables::deltaR(float x1, float y1, float x2, float y2) { + float deltaR_ = sqrt(pow((x2-x1),2) + pow((y2-y1),2)); + return deltaR_; +} + + +int HGCNtupleVariables::getBIN(unsigned int skiroc,unsigned int channel) { + if (channel%2 != 0 || channel > 62 || skiroc > 3) return -1; + else return (skiroc*32 + (channel/2)); +} + + +std::vector HGCNtupleVariables::getModuleLocation(int moduleID) { + std::map>::iterator it = module_map.find(moduleID); + if(it != module_map.end()){ + return it->second; + } + else { + return std::vector(); + } +} + + + +//double HGCNtupleVariables::shower_comparisons(TProfile* shower, TH1F* hist) { +// TH1F* HGCNtupleVariables::shower_comparisons(TProfile* shower, TH1F* hist) { +// // TFile* file0 = TFile::Open("/home/shubham/work/HGCAL/CERNTB/niramay/niramay_github/forked_repo/E_Pi_Comparison/functions/Template_150_GeV.root"); +// // TH1F* ref_hist = (TH1F*)file0->Get("hist_ref_template"); +// //TH1F* hist = new TH1F("hist","hist",30,0,30); +// for(int i = 1; i <= shower->GetNbinsX(); i++){ +// hist->SetBinContent(i,shower->GetBinContent(i)); +// } +// return hist; +// //return (hist->Chi2Test(ref_h,"CHI2/NDF")); +// } + + +// float HGCNtupleVariables::find_official_calib(int layer, int en_chan){ +// std::pair temp_find; +// temp_find = std::make_pair(layer,en_chan); +// std::map, float >::iterator it = offical_calib_map.find(temp_find); +// if(it != offical_calib_map.end()){ +// return it->second; +// } +// else { +// return -1.0; +// } +// } + + +// float HGCNtupleVariables::find_my_calib(int layer, int en_chan){ +// std::pair temp_find; +// temp_find = std::make_pair(layer,en_chan); +// std::map, float >::iterator it = my_calib_map.find(temp_find); +// if(it != my_calib_map.end()){ +// return it->second; +// } +// else { +// return -1.0; +// } +// } + + diff --git a/tracking_inclusion/only_EE_layer_config2/HGCNtupleVariables.h b/tracking_inclusion/only_EE_layer_config2/HGCNtupleVariables.h new file mode 100644 index 0000000..2ad02fa --- /dev/null +++ b/tracking_inclusion/only_EE_layer_config2/HGCNtupleVariables.h @@ -0,0 +1,511 @@ +////////////////////////////////////////////////////////// +// This class has been automatically generated on +// Thu Aug 16 18:22:34 2018 by ROOT version 6.06/01 +// from TTree hits/HGC rechits +// found on file: muon_v10.root +////////////////////////////////////////////////////////// + +#ifndef HGCNtupleVariables_h +#define HGCNtupleVariables_h + +#include +#include +#include +#include + +// Header file for the classes stored in the TTree if any. +#include "vector" + +using namespace std; + +class HGCNtupleVariables { +public : + + HGCNtupleVariables(TTree * /*tree*/ =0) : fChain(0) { } + ~HGCNtupleVariables() { } + /* void Init(TTree *tree); */ + void Init(TTree *tree, TTree *tree2); + Bool_t Notify(); + Int_t GetEntry(Long64_t entry, Int_t getall = 0) { return fChain ? fChain->GetTree()->GetEntry(entry, getall) : 0; } + std::vector getModuleLocation(int moduleID); + int getBIN(unsigned int skiroc,unsigned int channel); + float deltaR(float x1, float y1, float x2, float y2); + //double shower_comparisons(TProfile* shower, TH1F* hist); + //double shower_comparisons(TProfile* shower, TH1F* ref_h); + // TH1F* shower_comparisons(TProfile* shower, TH1F* hist); + // float find_my_calib(int layer, int en_chan); + // float find_official_calib(int layer, int en_chan); + std::map> module_map; + // std::map, float> offical_calib_map; + // std::map, float> my_calib_map; + + TTree *fChain; //!pointer to the analyzed TTree or TChain + TTree *fChain2; //!pointer to the analyzed TTree or TChain + Int_t fCurrent; //!current Tree number in a TChain + Int_t fCurrent2; //!current Tree number in a TChain + + // Fixed size dimensions of array or collections stored in the TTree if any. + + // Declaration of leaf types + UInt_t event; + UInt_t run; + Int_t pdgID; + Float_t beamEnergy; + Float_t trueBeamEnergy; + Int_t NRechits; + vector *rechit_detid; + vector *rechit_module; + vector *rechit_layer; + vector *rechit_chip; + vector *rechit_channel; + vector *rechit_type; + vector *rechit_x; + vector *rechit_y; + vector *rechit_z; + vector *rechit_iu; + vector *rechit_iv; + vector *rechit_energy; + vector *rechit_energy_noHG; + vector *rechit_amplitudeHigh; + vector *rechit_amplitudeLow; + vector *rechit_hg_goodFit; + vector *rechit_lg_goodFit; + vector *rechit_hg_saturated; + vector *rechit_lg_saturated; + vector *rechit_fully_calibrated; + vector *rechit_TS2High; + vector *rechit_TS2Low; + vector *rechit_TS3High; + vector *rechit_TS3Low; + vector *rechit_Tot; + vector *rechit_time; + vector *rechit_timeMaxHG; + vector *rechit_timeMaxLG; + vector *rechit_toaRise; + vector *rechit_toaFall; + + // List of branches + TBranch *b_event; //! + TBranch *b_run; //! + TBranch *b_pdgID; //! + TBranch *b_beamEnergy; //! + TBranch *b_trueBeamEnergy; //! + TBranch *b_NRechits; //! + TBranch *b_rechit_detid; //! + TBranch *b_rechit_module; //! + TBranch *b_rechit_layer; //! + TBranch *b_rechit_chip; //! + TBranch *b_rechit_channel; //! + TBranch *b_rechit_type; //! + TBranch *b_rechit_x; //! + TBranch *b_rechit_y; //! + TBranch *b_rechit_z; //! + TBranch *b_rechit_iu; //! + TBranch *b_rechit_iv; //! + TBranch *b_rechit_energy; //! + TBranch *b_rechit_energy_noHG; //! + TBranch *b_rechit_amplitudeHigh; //! + TBranch *b_rechit_amplitudeLow; //! + TBranch *b_rechit_hg_goodFit; //! + TBranch *b_rechit_lg_goodFit; //! + TBranch *b_rechit_hg_saturated; //! + TBranch *b_rechit_lg_saturated; //! + TBranch *b_rechit_fully_calibrated; //! + TBranch *b_rechit_TS2High; //! + TBranch *b_rechit_TS2Low; //! + TBranch *b_rechit_TS3High; //! + TBranch *b_rechit_TS3Low; //! + TBranch *b_rechit_Tot; //! + TBranch *b_rechit_time; //! + TBranch *b_rechit_timeMaxHG; //! + TBranch *b_rechit_timeMaxLG; //! + TBranch *b_rechit_toaRise; //! + TBranch *b_rechit_toaFall; //! + + // second tree + Int_t ntracks; + Float_t impactX_HGCal_layer_1; + Float_t impactY_HGCal_layer_1; + Float_t impactX_HGCal_layer_2; + Float_t impactY_HGCal_layer_2; + Float_t impactX_HGCal_layer_3; + Float_t impactY_HGCal_layer_3; + Float_t impactX_HGCal_layer_4; + Float_t impactY_HGCal_layer_4; + Float_t impactX_HGCal_layer_5; + Float_t impactY_HGCal_layer_5; + Float_t impactX_HGCal_layer_6; + Float_t impactY_HGCal_layer_6; + Float_t impactX_HGCal_layer_7; + Float_t impactY_HGCal_layer_7; + Float_t impactX_HGCal_layer_8; + Float_t impactY_HGCal_layer_8; + Float_t impactX_HGCal_layer_9; + Float_t impactY_HGCal_layer_9; + Float_t impactX_HGCal_layer_10; + Float_t impactY_HGCal_layer_10; + Float_t impactX_HGCal_layer_11; + Float_t impactY_HGCal_layer_11; + Float_t impactX_HGCal_layer_12; + Float_t impactY_HGCal_layer_12; + Float_t impactX_HGCal_layer_13; + Float_t impactY_HGCal_layer_13; + Float_t impactX_HGCal_layer_14; + Float_t impactY_HGCal_layer_14; + Float_t impactX_HGCal_layer_15; + Float_t impactY_HGCal_layer_15; + Float_t impactX_HGCal_layer_16; + Float_t impactY_HGCal_layer_16; + Float_t impactX_HGCal_layer_17; + Float_t impactY_HGCal_layer_17; + Float_t impactX_HGCal_layer_18; + Float_t impactY_HGCal_layer_18; + Float_t impactX_HGCal_layer_19; + Float_t impactY_HGCal_layer_19; + Float_t impactX_HGCal_layer_20; + Float_t impactY_HGCal_layer_20; + Float_t impactX_HGCal_layer_21; + Float_t impactY_HGCal_layer_21; + Float_t impactX_HGCal_layer_22; + Float_t impactY_HGCal_layer_22; + Float_t impactX_HGCal_layer_23; + Float_t impactY_HGCal_layer_23; + Float_t impactX_HGCal_layer_24; + Float_t impactY_HGCal_layer_24; + Float_t impactX_HGCal_layer_25; + Float_t impactY_HGCal_layer_25; + Float_t impactX_HGCal_layer_26; + Float_t impactY_HGCal_layer_26; + Float_t impactX_HGCal_layer_27; + Float_t impactY_HGCal_layer_27; + Float_t impactX_HGCal_layer_28; + Float_t impactY_HGCal_layer_28; + Float_t impactX_HGCal_layer_29; + Float_t impactY_HGCal_layer_29; + Float_t impactX_HGCal_layer_30; + Float_t impactY_HGCal_layer_30; + Float_t impactX_HGCal_layer_31; + Float_t impactY_HGCal_layer_31; + Float_t impactX_HGCal_layer_32; + Float_t impactY_HGCal_layer_32; + Float_t impactX_HGCal_layer_33; + Float_t impactY_HGCal_layer_33; + Float_t impactX_HGCal_layer_34; + Float_t impactY_HGCal_layer_34; + Float_t impactX_HGCal_layer_35; + Float_t impactY_HGCal_layer_35; + Float_t impactX_HGCal_layer_36; + Float_t impactY_HGCal_layer_36; + Float_t impactX_HGCal_layer_37; + Float_t impactY_HGCal_layer_37; + Float_t impactX_HGCal_layer_38; + Float_t impactY_HGCal_layer_38; + Float_t impactX_HGCal_layer_39; + Float_t impactY_HGCal_layer_39; + Float_t impactX_HGCal_layer_40; + Float_t impactY_HGCal_layer_40; + + + Float_t trackChi2_X; + Float_t trackChi2_Y; + Int_t dwcReferenceType; + Double_t m_x; + Double_t m_y; + Double_t b_x; + Double_t b_y; + + // List of branches + TBranch *b_ntracks; //! + TBranch *b_impactX_HGCal_layer_1; //! + TBranch *b_impactY_HGCal_layer_1; //! + TBranch *b_impactX_HGCal_layer_2; //! + TBranch *b_impactY_HGCal_layer_2; //! + TBranch *b_impactX_HGCal_layer_3; //! + TBranch *b_impactY_HGCal_layer_3; //! + TBranch *b_impactX_HGCal_layer_4; //! + TBranch *b_impactY_HGCal_layer_4; //! + TBranch *b_impactX_HGCal_layer_5; //! + TBranch *b_impactY_HGCal_layer_5; //! + TBranch *b_impactX_HGCal_layer_6; //! + TBranch *b_impactY_HGCal_layer_6; //! + TBranch *b_impactX_HGCal_layer_7; //! + TBranch *b_impactY_HGCal_layer_7; //! + TBranch *b_impactX_HGCal_layer_8; //! + TBranch *b_impactY_HGCal_layer_8; //! + TBranch *b_impactX_HGCal_layer_9; //! + TBranch *b_impactY_HGCal_layer_9; //! + TBranch *b_impactX_HGCal_layer_10; //! + TBranch *b_impactY_HGCal_layer_10; //! + TBranch *b_impactX_HGCal_layer_11; //! + TBranch *b_impactY_HGCal_layer_11; //! + TBranch *b_impactX_HGCal_layer_12; //! + TBranch *b_impactY_HGCal_layer_12; //! + TBranch *b_impactX_HGCal_layer_13; //! + TBranch *b_impactY_HGCal_layer_13; //! + TBranch *b_impactX_HGCal_layer_14; //! + TBranch *b_impactY_HGCal_layer_14; //! + TBranch *b_impactX_HGCal_layer_15; //! + TBranch *b_impactY_HGCal_layer_15; //! + TBranch *b_impactX_HGCal_layer_16; //! + TBranch *b_impactY_HGCal_layer_16; //! + TBranch *b_impactX_HGCal_layer_17; //! + TBranch *b_impactY_HGCal_layer_17; //! + TBranch *b_impactX_HGCal_layer_18; //! + TBranch *b_impactY_HGCal_layer_18; //! + TBranch *b_impactX_HGCal_layer_19; //! + TBranch *b_impactY_HGCal_layer_19; //! + TBranch *b_impactX_HGCal_layer_20; //! + TBranch *b_impactY_HGCal_layer_20; //! + TBranch *b_impactX_HGCal_layer_21; //! + TBranch *b_impactY_HGCal_layer_21; //! + TBranch *b_impactX_HGCal_layer_22; //! + TBranch *b_impactY_HGCal_layer_22; //! + TBranch *b_impactX_HGCal_layer_23; //! + TBranch *b_impactY_HGCal_layer_23; //! + TBranch *b_impactX_HGCal_layer_24; //! + TBranch *b_impactY_HGCal_layer_24; //! + TBranch *b_impactX_HGCal_layer_25; //! + TBranch *b_impactY_HGCal_layer_25; //! + TBranch *b_impactX_HGCal_layer_26; //! + TBranch *b_impactY_HGCal_layer_26; //! + TBranch *b_impactX_HGCal_layer_27; //! + TBranch *b_impactY_HGCal_layer_27; //! + TBranch *b_impactX_HGCal_layer_28; //! + TBranch *b_impactY_HGCal_layer_28; //! + TBranch *b_impactX_HGCal_layer_29; + TBranch *b_impactY_HGCal_layer_29; + TBranch *b_impactX_HGCal_layer_30; + TBranch *b_impactY_HGCal_layer_30; + TBranch *b_impactX_HGCal_layer_31; + TBranch *b_impactY_HGCal_layer_31; + TBranch *b_impactX_HGCal_layer_32; + TBranch *b_impactY_HGCal_layer_32; + TBranch *b_impactX_HGCal_layer_33; + TBranch *b_impactY_HGCal_layer_33; + TBranch *b_impactX_HGCal_layer_34; + TBranch *b_impactY_HGCal_layer_34; + TBranch *b_impactX_HGCal_layer_35; + TBranch *b_impactY_HGCal_layer_35; + TBranch *b_impactX_HGCal_layer_36; + TBranch *b_impactY_HGCal_layer_36; + TBranch *b_impactX_HGCal_layer_37; + TBranch *b_impactY_HGCal_layer_37; + TBranch *b_impactX_HGCal_layer_38; + TBranch *b_impactY_HGCal_layer_38; + TBranch *b_impactX_HGCal_layer_39; + TBranch *b_impactY_HGCal_layer_39; + TBranch *b_impactX_HGCal_layer_40; + TBranch *b_impactY_HGCal_layer_40; + + TBranch *b_trackChi2_X; //! + TBranch *b_trackChi2_Y; //! + TBranch *b_dwcReferenceType; //! + TBranch *b_m_x; //! + TBranch *b_m_y; //! + TBranch *b_b_x; //! + TBranch *b_b_y; //! + + + +}; + +#endif + +#ifdef HGCNtupleVariables_cxx + +void HGCNtupleVariables::Init(TTree *tree, TTree *tree2) +/* void HGCNtupleVariables::Init(TTree *tree) */ +{ + // The Init() function is called when the selector needs to initialize + // a new tree or chain. Typically here the branch addresses and branch + // pointers of the tree will be set. + // It is normally not necessary to make changes to the generated + // code, but the routine can be extended by the user if needed. + // Init() will be called many times when running on PROOF + // (once per file to be processed). + + // Set object pointer + rechit_detid = 0; + rechit_module = 0; + rechit_layer = 0; + rechit_chip = 0; + rechit_channel = 0; + rechit_type = 0; + rechit_x = 0; + rechit_y = 0; + rechit_z = 0; + rechit_iu = 0; + rechit_iv = 0; + rechit_energy = 0; + rechit_energy_noHG = 0; + rechit_amplitudeHigh = 0; + rechit_amplitudeLow = 0; + rechit_hg_goodFit = 0; + rechit_lg_goodFit = 0; + rechit_hg_saturated = 0; + rechit_lg_saturated = 0; + rechit_fully_calibrated = 0; + rechit_TS2High = 0; + rechit_TS2Low = 0; + rechit_TS3High = 0; + rechit_TS3Low = 0; + rechit_Tot = 0; + rechit_time = 0; + rechit_timeMaxHG = 0; + rechit_timeMaxLG = 0; + rechit_toaRise = 0; + rechit_toaFall = 0; + // Set branch addresses and branch pointers + if (!tree) return; + fChain = tree; + fCurrent = -1; + fChain->SetMakeClass(1); + + fChain->SetBranchAddress("event", &event, &b_event); + fChain->SetBranchAddress("run", &run, &b_run); + fChain->SetBranchAddress("pdgID", &pdgID, &b_pdgID); + fChain->SetBranchAddress("beamEnergy", &beamEnergy, &b_beamEnergy); + fChain->SetBranchAddress("trueBeamEnergy", &trueBeamEnergy, &b_trueBeamEnergy); + fChain->SetBranchAddress("NRechits", &NRechits, &b_NRechits); + fChain->SetBranchAddress("rechit_detid", &rechit_detid, &b_rechit_detid); + fChain->SetBranchAddress("rechit_module", &rechit_module, &b_rechit_module); + fChain->SetBranchAddress("rechit_layer", &rechit_layer, &b_rechit_layer); + fChain->SetBranchAddress("rechit_chip", &rechit_chip, &b_rechit_chip); + fChain->SetBranchAddress("rechit_channel", &rechit_channel, &b_rechit_channel); + fChain->SetBranchAddress("rechit_type", &rechit_type, &b_rechit_type); + fChain->SetBranchAddress("rechit_x", &rechit_x, &b_rechit_x); + fChain->SetBranchAddress("rechit_y", &rechit_y, &b_rechit_y); + fChain->SetBranchAddress("rechit_z", &rechit_z, &b_rechit_z); + fChain->SetBranchAddress("rechit_iu", &rechit_iu, &b_rechit_iu); + fChain->SetBranchAddress("rechit_iv", &rechit_iv, &b_rechit_iv); + fChain->SetBranchAddress("rechit_energy", &rechit_energy, &b_rechit_energy); + fChain->SetBranchAddress("rechit_energy_noHG", &rechit_energy_noHG, &b_rechit_energy_noHG); + fChain->SetBranchAddress("rechit_amplitudeHigh", &rechit_amplitudeHigh, &b_rechit_amplitudeHigh); + fChain->SetBranchAddress("rechit_amplitudeLow", &rechit_amplitudeLow, &b_rechit_amplitudeLow); + fChain->SetBranchAddress("rechit_hg_goodFit", &rechit_hg_goodFit, &b_rechit_hg_goodFit); + fChain->SetBranchAddress("rechit_lg_goodFit", &rechit_lg_goodFit, &b_rechit_lg_goodFit); + fChain->SetBranchAddress("rechit_hg_saturated", &rechit_hg_saturated, &b_rechit_hg_saturated); + fChain->SetBranchAddress("rechit_lg_saturated", &rechit_lg_saturated, &b_rechit_lg_saturated); + fChain->SetBranchAddress("rechit_fully_calibrated", &rechit_fully_calibrated, &b_rechit_fully_calibrated); + fChain->SetBranchAddress("rechit_TS2High", &rechit_TS2High, &b_rechit_TS2High); + fChain->SetBranchAddress("rechit_TS2Low", &rechit_TS2Low, &b_rechit_TS2Low); + fChain->SetBranchAddress("rechit_TS3High", &rechit_TS3High, &b_rechit_TS3High); + fChain->SetBranchAddress("rechit_TS3Low", &rechit_TS3Low, &b_rechit_TS3Low); + fChain->SetBranchAddress("rechit_Tot", &rechit_Tot, &b_rechit_Tot); + fChain->SetBranchAddress("rechit_time", &rechit_time, &b_rechit_time); + fChain->SetBranchAddress("rechit_timeMaxHG", &rechit_timeMaxHG, &b_rechit_timeMaxHG); + fChain->SetBranchAddress("rechit_timeMaxLG", &rechit_timeMaxLG, &b_rechit_timeMaxLG); + fChain->SetBranchAddress("rechit_toaRise", &rechit_toaRise, &b_rechit_toaRise); + fChain->SetBranchAddress("rechit_toaFall", &rechit_toaFall, &b_rechit_toaFall); + + // Set branch addresses and branch pointers + if (!tree2) return; + fChain2 = tree2; + fCurrent2 = -1; + fChain2->SetMakeClass(1); + + fChain2->SetBranchAddress("ntracks", &ntracks, &b_ntracks); + fChain2->SetBranchAddress("impactX_HGCal_layer_1", &impactX_HGCal_layer_1, &b_impactX_HGCal_layer_1); + fChain2->SetBranchAddress("impactY_HGCal_layer_1", &impactY_HGCal_layer_1, &b_impactY_HGCal_layer_1); + fChain2->SetBranchAddress("impactX_HGCal_layer_2", &impactX_HGCal_layer_2, &b_impactX_HGCal_layer_2); + fChain2->SetBranchAddress("impactY_HGCal_layer_2", &impactY_HGCal_layer_2, &b_impactY_HGCal_layer_2); + fChain2->SetBranchAddress("impactX_HGCal_layer_3", &impactX_HGCal_layer_3, &b_impactX_HGCal_layer_3); + fChain2->SetBranchAddress("impactY_HGCal_layer_3", &impactY_HGCal_layer_3, &b_impactY_HGCal_layer_3); + fChain2->SetBranchAddress("impactX_HGCal_layer_4", &impactX_HGCal_layer_4, &b_impactX_HGCal_layer_4); + fChain2->SetBranchAddress("impactY_HGCal_layer_4", &impactY_HGCal_layer_4, &b_impactY_HGCal_layer_4); + fChain2->SetBranchAddress("impactX_HGCal_layer_5", &impactX_HGCal_layer_5, &b_impactX_HGCal_layer_5); + fChain2->SetBranchAddress("impactY_HGCal_layer_5", &impactY_HGCal_layer_5, &b_impactY_HGCal_layer_5); + fChain2->SetBranchAddress("impactX_HGCal_layer_6", &impactX_HGCal_layer_6, &b_impactX_HGCal_layer_6); + fChain2->SetBranchAddress("impactY_HGCal_layer_6", &impactY_HGCal_layer_6, &b_impactY_HGCal_layer_6); + fChain2->SetBranchAddress("impactX_HGCal_layer_7", &impactX_HGCal_layer_7, &b_impactX_HGCal_layer_7); + fChain2->SetBranchAddress("impactY_HGCal_layer_7", &impactY_HGCal_layer_7, &b_impactY_HGCal_layer_7); + fChain2->SetBranchAddress("impactX_HGCal_layer_8", &impactX_HGCal_layer_8, &b_impactX_HGCal_layer_8); + fChain2->SetBranchAddress("impactY_HGCal_layer_8", &impactY_HGCal_layer_8, &b_impactY_HGCal_layer_8); + fChain2->SetBranchAddress("impactX_HGCal_layer_9", &impactX_HGCal_layer_9, &b_impactX_HGCal_layer_9); + fChain2->SetBranchAddress("impactY_HGCal_layer_9", &impactY_HGCal_layer_9, &b_impactY_HGCal_layer_9); + fChain2->SetBranchAddress("impactX_HGCal_layer_10", &impactX_HGCal_layer_10, &b_impactX_HGCal_layer_10); + fChain2->SetBranchAddress("impactY_HGCal_layer_10", &impactY_HGCal_layer_10, &b_impactY_HGCal_layer_10); + fChain2->SetBranchAddress("impactX_HGCal_layer_11", &impactX_HGCal_layer_11, &b_impactX_HGCal_layer_11); + fChain2->SetBranchAddress("impactY_HGCal_layer_11", &impactY_HGCal_layer_11, &b_impactY_HGCal_layer_11); + fChain2->SetBranchAddress("impactX_HGCal_layer_12", &impactX_HGCal_layer_12, &b_impactX_HGCal_layer_12); + fChain2->SetBranchAddress("impactY_HGCal_layer_12", &impactY_HGCal_layer_12, &b_impactY_HGCal_layer_12); + fChain2->SetBranchAddress("impactX_HGCal_layer_13", &impactX_HGCal_layer_13, &b_impactX_HGCal_layer_13); + fChain2->SetBranchAddress("impactY_HGCal_layer_13", &impactY_HGCal_layer_13, &b_impactY_HGCal_layer_13); + fChain2->SetBranchAddress("impactX_HGCal_layer_14", &impactX_HGCal_layer_14, &b_impactX_HGCal_layer_14); + fChain2->SetBranchAddress("impactY_HGCal_layer_14", &impactY_HGCal_layer_14, &b_impactY_HGCal_layer_14); + fChain2->SetBranchAddress("impactX_HGCal_layer_15", &impactX_HGCal_layer_15, &b_impactX_HGCal_layer_15); + fChain2->SetBranchAddress("impactY_HGCal_layer_15", &impactY_HGCal_layer_15, &b_impactY_HGCal_layer_15); + fChain2->SetBranchAddress("impactX_HGCal_layer_16", &impactX_HGCal_layer_16, &b_impactX_HGCal_layer_16); + fChain2->SetBranchAddress("impactY_HGCal_layer_16", &impactY_HGCal_layer_16, &b_impactY_HGCal_layer_16); + fChain2->SetBranchAddress("impactX_HGCal_layer_17", &impactX_HGCal_layer_17, &b_impactX_HGCal_layer_17); + fChain2->SetBranchAddress("impactY_HGCal_layer_17", &impactY_HGCal_layer_17, &b_impactY_HGCal_layer_17); + fChain2->SetBranchAddress("impactX_HGCal_layer_18", &impactX_HGCal_layer_18, &b_impactX_HGCal_layer_18); + fChain2->SetBranchAddress("impactY_HGCal_layer_18", &impactY_HGCal_layer_18, &b_impactY_HGCal_layer_18); + fChain2->SetBranchAddress("impactX_HGCal_layer_19", &impactX_HGCal_layer_19, &b_impactX_HGCal_layer_19); + fChain2->SetBranchAddress("impactY_HGCal_layer_19", &impactY_HGCal_layer_19, &b_impactY_HGCal_layer_19); + fChain2->SetBranchAddress("impactX_HGCal_layer_20", &impactX_HGCal_layer_20, &b_impactX_HGCal_layer_20); + fChain2->SetBranchAddress("impactY_HGCal_layer_20", &impactY_HGCal_layer_20, &b_impactY_HGCal_layer_20); + fChain2->SetBranchAddress("impactX_HGCal_layer_21", &impactX_HGCal_layer_21, &b_impactX_HGCal_layer_21); + fChain2->SetBranchAddress("impactY_HGCal_layer_21", &impactY_HGCal_layer_21, &b_impactY_HGCal_layer_21); + fChain2->SetBranchAddress("impactX_HGCal_layer_22", &impactX_HGCal_layer_22, &b_impactX_HGCal_layer_22); + fChain2->SetBranchAddress("impactY_HGCal_layer_22", &impactY_HGCal_layer_22, &b_impactY_HGCal_layer_22); + fChain2->SetBranchAddress("impactX_HGCal_layer_23", &impactX_HGCal_layer_23, &b_impactX_HGCal_layer_23); + fChain2->SetBranchAddress("impactY_HGCal_layer_23", &impactY_HGCal_layer_23, &b_impactY_HGCal_layer_23); + fChain2->SetBranchAddress("impactX_HGCal_layer_24", &impactX_HGCal_layer_24, &b_impactX_HGCal_layer_24); + fChain2->SetBranchAddress("impactY_HGCal_layer_24", &impactY_HGCal_layer_24, &b_impactY_HGCal_layer_24); + fChain2->SetBranchAddress("impactX_HGCal_layer_25", &impactX_HGCal_layer_25, &b_impactX_HGCal_layer_25); + fChain2->SetBranchAddress("impactY_HGCal_layer_25", &impactY_HGCal_layer_25, &b_impactY_HGCal_layer_25); + fChain2->SetBranchAddress("impactX_HGCal_layer_26", &impactX_HGCal_layer_26, &b_impactX_HGCal_layer_26); + fChain2->SetBranchAddress("impactY_HGCal_layer_26", &impactY_HGCal_layer_26, &b_impactY_HGCal_layer_26); + fChain2->SetBranchAddress("impactX_HGCal_layer_27", &impactX_HGCal_layer_27, &b_impactX_HGCal_layer_27); + fChain2->SetBranchAddress("impactY_HGCal_layer_27", &impactY_HGCal_layer_27, &b_impactY_HGCal_layer_27); + fChain2->SetBranchAddress("impactX_HGCal_layer_28", &impactX_HGCal_layer_28, &b_impactX_HGCal_layer_28); + fChain2->SetBranchAddress("impactY_HGCal_layer_28", &impactY_HGCal_layer_28, &b_impactY_HGCal_layer_28); + fChain2->SetBranchAddress("impactX_HGCal_layer_29", &impactX_HGCal_layer_29, &b_impactX_HGCal_layer_29); + fChain2->SetBranchAddress("impactY_HGCal_layer_29", &impactY_HGCal_layer_29, &b_impactY_HGCal_layer_29); + fChain2->SetBranchAddress("impactX_HGCal_layer_30", &impactX_HGCal_layer_30, &b_impactX_HGCal_layer_30); + fChain2->SetBranchAddress("impactY_HGCal_layer_30", &impactY_HGCal_layer_30, &b_impactY_HGCal_layer_30); + fChain2->SetBranchAddress("impactX_HGCal_layer_31", &impactX_HGCal_layer_31, &b_impactX_HGCal_layer_31); + fChain2->SetBranchAddress("impactY_HGCal_layer_31", &impactY_HGCal_layer_31, &b_impactY_HGCal_layer_31); + fChain2->SetBranchAddress("impactX_HGCal_layer_32", &impactX_HGCal_layer_32, &b_impactX_HGCal_layer_32); + fChain2->SetBranchAddress("impactY_HGCal_layer_32", &impactY_HGCal_layer_32, &b_impactY_HGCal_layer_32); + fChain2->SetBranchAddress("impactX_HGCal_layer_33", &impactX_HGCal_layer_33, &b_impactX_HGCal_layer_33); + fChain2->SetBranchAddress("impactY_HGCal_layer_33", &impactY_HGCal_layer_33, &b_impactY_HGCal_layer_33); + fChain2->SetBranchAddress("impactX_HGCal_layer_34", &impactX_HGCal_layer_34, &b_impactX_HGCal_layer_34); + fChain2->SetBranchAddress("impactY_HGCal_layer_34", &impactY_HGCal_layer_34, &b_impactY_HGCal_layer_34); + fChain2->SetBranchAddress("impactX_HGCal_layer_35", &impactX_HGCal_layer_35, &b_impactX_HGCal_layer_35); + fChain2->SetBranchAddress("impactY_HGCal_layer_35", &impactY_HGCal_layer_35, &b_impactY_HGCal_layer_35); + fChain2->SetBranchAddress("impactX_HGCal_layer_36", &impactX_HGCal_layer_36, &b_impactX_HGCal_layer_36); + fChain2->SetBranchAddress("impactY_HGCal_layer_36", &impactY_HGCal_layer_36, &b_impactY_HGCal_layer_36); + fChain2->SetBranchAddress("impactX_HGCal_layer_37", &impactX_HGCal_layer_37, &b_impactX_HGCal_layer_37); + fChain2->SetBranchAddress("impactY_HGCal_layer_37", &impactY_HGCal_layer_37, &b_impactY_HGCal_layer_37); + fChain2->SetBranchAddress("impactX_HGCal_layer_38", &impactX_HGCal_layer_38, &b_impactX_HGCal_layer_38); + fChain2->SetBranchAddress("impactY_HGCal_layer_38", &impactY_HGCal_layer_38, &b_impactY_HGCal_layer_38); + fChain2->SetBranchAddress("impactX_HGCal_layer_39", &impactX_HGCal_layer_39, &b_impactX_HGCal_layer_39); + fChain2->SetBranchAddress("impactY_HGCal_layer_39", &impactY_HGCal_layer_39, &b_impactY_HGCal_layer_39); + fChain2->SetBranchAddress("impactX_HGCal_layer_40", &impactX_HGCal_layer_40, &b_impactX_HGCal_layer_40); + fChain2->SetBranchAddress("impactY_HGCal_layer_40", &impactY_HGCal_layer_40, &b_impactY_HGCal_layer_40); + + fChain2->SetBranchAddress("trackChi2_X", &trackChi2_X, &b_trackChi2_X); + fChain2->SetBranchAddress("trackChi2_Y", &trackChi2_Y, &b_trackChi2_Y); + fChain2->SetBranchAddress("dwcReferenceType", &dwcReferenceType, &b_dwcReferenceType); + fChain2->SetBranchAddress("m_x", &m_x, &b_m_x); + fChain2->SetBranchAddress("m_y", &m_y, &b_m_y); + fChain2->SetBranchAddress("b_x", &b_x, &b_b_x); + fChain2->SetBranchAddress("b_y", &b_y, &b_b_y); + + Notify(); +} + +Bool_t HGCNtupleVariables::Notify() +{ + // The Notify() function is called when a new file is opened. This + // can be either for a new TTree in a TChain or when when a new TTree + // is started when using PROOF. It is normally not necessary to make changes + // to the generated code, but the routine can be extended by the + // user if needed. The return value is currently not used. + + return kTRUE; +} + +#endif // #ifdef HGCNtupleVariables_cxx diff --git a/tracking_inclusion/only_EE_layer_config2/Makefile b/tracking_inclusion/only_EE_layer_config2/Makefile new file mode 100644 index 0000000..0e04de3 --- /dev/null +++ b/tracking_inclusion/only_EE_layer_config2/Makefile @@ -0,0 +1,37 @@ +CXX = g++ + +CXXFLAGS= $(shell root-config --cflags) +LIBS = $(shell root-config --libs) + + +SOURCES = HGCNtupleVariables.cc AnalyzeHGCOctTB.cc +HEADERS = HGCNtupleVariables.h AnalyzeHGCOctTB.h +OBJECTS = $(SOURCES:.cc=.o) + +EXECUTABLE = analyzeHGCOctTB + +all: $(SOURCES) $(EXECUTABLE) + +%.o: %.cc + @echo Compiling $<... + $(CXX) $(CXXFLAGS) -c -o $@ $< + + +$(EXECUTABLE): $(OBJECTS) + @echo "Linking $(PROGRAM) ..." + @echo "@$(CXX) $(LIBS) $(OBJECTS) -o $@" + @$(CXX) -o $@ $^ $(LIBS) + @echo "done" + + +# Specifying the object files as intermediates deletes them automatically after the build process. +.INTERMEDIATE: $(OBJECTS) + +# The default target, which gives instructions, can be called regardless of whether or not files need to be updated. +.PHONY : clean +clean: + rm -f $(OBJECTS) $(EXECUTABLE) + +### +HGCNtupleVariables.o: HGCNtupleVariables.h +AnalyzeHGCOctTB.o:HGCNtupleVariables.h AnalyzeHGCOctTB.h diff --git a/tracking_inclusion/only_EE_layer_config2/analyzeHGCOctTB b/tracking_inclusion/only_EE_layer_config2/analyzeHGCOctTB new file mode 100755 index 0000000000000000000000000000000000000000..c8ab43e5ebf4212685ac3fa836dd73927defad28 GIT binary patch literal 146544 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 literal 0 HcmV?d00001 From 161716fb158beeaae6f64e87c11236094a42da53 Mon Sep 17 00:00:00 2001 From: Shubham Date: Tue, 8 Jan 2019 08:09:15 +0100 Subject: [PATCH 2/8] MIP analysis code for OctTB --- config_maps/moduleMAP_config1.txt | 94 +++++++++++++++++++++++++++++++ config_maps/moduleMAP_config2.txt | 93 ++++++++++++++++++++++++++++++ config_maps/moduleMAP_config3.txt | 92 ++++++++++++++++++++++++++++++ 3 files changed, 279 insertions(+) create mode 100644 config_maps/moduleMAP_config1.txt create mode 100644 config_maps/moduleMAP_config2.txt create mode 100644 config_maps/moduleMAP_config3.txt diff --git a/config_maps/moduleMAP_config1.txt b/config_maps/moduleMAP_config1.txt new file mode 100644 index 0000000..aa326f0 --- /dev/null +++ b/config_maps/moduleMAP_config1.txt @@ -0,0 +1,94 @@ +78 0 1 0 +90 0 2 0 +89 0 3 0 +88 0 4 0 +77 0 5 0 +85 0 6 0 +84 0 7 0 +32 0 8 0 +69 0 9 0 +79 0 10 0 +76 0 11 0 +83 0 12 0 +70 0 13 0 +73 0 14 0 +86 0 15 0 +87 0 16 0 +82 0 17 0 +72 0 18 0 +67 0 19 0 +65 0 20 0 +35 0 21 0 +36 0 22 0 +44 0 23 0 +51 0 24 0 +142 0 25 0 +143 0 26 0 +145 0 27 0 +144 0 28 0 +115 1 1 1 +40 1 1 2 +101 1 1 3 +96 1 1 4 +98 1 1 5 +95 1 1 6 +105 1 1 7 +122 1 2 1 +104 1 2 2 +100 1 2 3 +106 1 2 4 +123 1 2 5 +34 1 2 6 +113 1 2 7 +99 1 3 1 +121 1 3 2 +114 1 3 3 +94 1 3 4 +97 1 3 5 +111 1 3 6 +37 1 3 7 +124 1 4 1 +108 1 4 2 +109 1 4 3 +102 1 4 4 +118 1 4 5 +107 1 4 6 +120 1 4 7 +141 1 5 1 +147 1 5 2 +137 1 5 3 +139 1 5 4 +136 1 5 5 +140 1 5 6 +138 1 5 7 +91 1 6 1 +130 1 6 2 +133 1 6 3 +131 1 6 4 +134 1 6 5 +132 1 6 6 +146 1 6 7 +125 1 7 1 +129 1 7 2 +128 1 7 3 +119 1 7 4 +127 1 7 5 +126 1 7 6 +135 1 7 7 +38 1 8 1 +39 1 8 2 +42 1 8 3 +45 1 8 4 +53 1 8 5 +46 1 8 6 +48 1 8 7 +75 1 9 1 +59 1 9 2 +71 1 9 3 +64 1 9 4 +55 1 9 5 +63 1 9 6 +66 1 9 7 +62 1 10 4 +54 1 11 4 +43 1 12 4 diff --git a/config_maps/moduleMAP_config2.txt b/config_maps/moduleMAP_config2.txt new file mode 100644 index 0000000..ccc49de --- /dev/null +++ b/config_maps/moduleMAP_config2.txt @@ -0,0 +1,93 @@ +78 0 1 0 +90 0 2 0 +89 0 3 0 +88 0 4 0 +77 0 5 0 +85 0 6 0 +84 0 7 0 +32 0 8 0 +69 0 9 0 +79 0 10 0 +76 0 11 0 +83 0 12 0 +70 0 13 0 +73 0 14 0 +86 0 15 0 +87 0 16 0 +82 0 17 0 +72 0 18 0 +67 0 19 0 +65 0 20 0 +35 0 21 0 +36 0 22 0 +44 0 23 0 +51 0 24 0 +142 0 25 0 +143 0 26 0 +145 0 27 0 +144 0 28 0 +62 1 1 4 +54 1 2 4 +38 1 3 1 +39 1 3 2 +43 1 3 3 +45 1 3 4 +53 1 3 5 +46 1 3 6 +48 1 3 7 +141 1 4 1 +147 1 4 2 +137 1 4 3 +139 1 4 4 +136 1 4 5 +140 1 4 6 +138 1 4 7 +91 1 5 1 +130 1 5 2 +133 1 5 3 +131 1 5 4 +134 1 5 5 +132 1 5 6 +146 1 5 7 +125 1 6 1 +129 1 6 2 +128 1 6 3 +119 1 6 4 +127 1 6 5 +126 1 6 6 +135 1 6 7 +115 1 7 1 +40 1 7 2 +101 1 7 3 +96 1 7 4 +98 1 7 5 +95 1 7 6 +105 1 7 7 +75 1 8 1 +59 1 8 4 +71 1 8 3 +64 1 8 2 +55 1 8 5 +63 1 8 6 +66 1 8 7 +122 1 9 1 +104 1 9 2 +100 1 9 3 +106 1 9 4 +123 1 9 5 +34 1 9 6 +113 1 9 7 +99 1 10 1 +121 1 10 2 +114 1 10 3 +94 1 10 4 +97 1 10 5 +111 1 10 6 +37 1 10 7 +124 1 11 1 +108 1 11 2 +109 1 11 3 +102 1 11 4 +118 1 11 5 +107 1 11 6 +120 1 11 7 diff --git a/config_maps/moduleMAP_config3.txt b/config_maps/moduleMAP_config3.txt new file mode 100644 index 0000000..01d9a7d --- /dev/null +++ b/config_maps/moduleMAP_config3.txt @@ -0,0 +1,92 @@ +62 0 1 0 +144 0 2 0 +145 0 3 0 +51 0 4 0 +143 0 5 0 +142 0 6 0 +76 0 7 0 +70 0 8 0 +72 1 1 1 +69 1 1 2 +86 1 1 3 +44 1 1 4 +79 1 1 5 +87 1 1 6 +82 1 1 7 +84 1 2 1 +78 1 2 2 +67 1 2 3 +54 1 2 4 +85 1 2 5 +77 1 2 6 +90 1 2 7 +88 1 3 1 +73 1 3 2 +83 1 3 3 +35 1 3 4 +89 1 3 5 +65 1 3 6 +32 1 3 7 +38 1 4 1 +39 1 4 2 +43 1 4 3 +45 1 4 4 +53 1 4 5 +46 1 4 6 +48 1 4 7 +141 1 5 1 +147 1 5 2 +137 1 5 3 +139 1 5 4 +136 1 5 5 +140 1 5 6 +138 1 5 7 +91 1 6 1 +130 1 6 2 +133 1 6 3 +131 1 6 4 +134 1 6 5 +132 1 6 6 +146 1 6 7 +125 1 7 1 +129 1 7 2 +128 1 7 3 +119 1 7 4 +127 1 7 5 +126 1 7 6 +135 1 7 7 +115 1 8 1 +40 1 8 2 +101 1 8 3 +96 1 8 4 +98 1 8 5 +95 1 8 6 +105 1 8 7 +75 1 9 1 +59 1 9 4 +71 1 9 3 +64 1 9 2 +55 1 9 5 +63 1 9 6 +66 1 9 7 +122 1 10 1 +104 1 10 2 +100 1 10 3 +106 1 10 4 +123 1 10 5 +34 1 10 6 +113 1 10 7 +99 1 11 1 +121 1 11 2 +114 1 11 3 +94 1 11 4 +97 1 11 5 +111 1 11 6 +37 1 11 7 +124 1 12 1 +108 1 12 2 +109 1 12 3 +102 1 12 4 +118 1 12 5 +107 1 12 6 +120 1 12 7 From 4a3ac40152a5618be344a495cd04a597398b1b33 Mon Sep 17 00:00:00 2001 From: Shubham Pandey Date: Fri, 7 Jun 2019 08:20:31 +0200 Subject: [PATCH 3/8] Update moduleMAP_config1.txt --- config_maps/moduleMAP_config1.txt | 116 +++++++++++++++--------------- 1 file changed, 58 insertions(+), 58 deletions(-) diff --git a/config_maps/moduleMAP_config1.txt b/config_maps/moduleMAP_config1.txt index aa326f0..68a3f6f 100644 --- a/config_maps/moduleMAP_config1.txt +++ b/config_maps/moduleMAP_config1.txt @@ -25,49 +25,49 @@ 142 0 25 0 143 0 26 0 145 0 27 0 -144 0 28 0 -115 1 1 1 -40 1 1 2 -101 1 1 3 -96 1 1 4 -98 1 1 5 -95 1 1 6 -105 1 1 7 -122 1 2 1 -104 1 2 2 -100 1 2 3 -106 1 2 4 -123 1 2 5 -34 1 2 6 -113 1 2 7 -99 1 3 1 -121 1 3 2 -114 1 3 3 -94 1 3 4 -97 1 3 5 -111 1 3 6 -37 1 3 7 -124 1 4 1 -108 1 4 2 -109 1 4 3 -102 1 4 4 -118 1 4 5 -107 1 4 6 -120 1 4 7 -141 1 5 1 -147 1 5 2 -137 1 5 3 -139 1 5 4 -136 1 5 5 -140 1 5 6 -138 1 5 7 -91 1 6 1 -130 1 6 2 -133 1 6 3 -131 1 6 4 -134 1 6 5 -132 1 6 6 -146 1 6 7 +144 0 28 0 +38 1 1 1 +39 1 1 2 +42 1 1 3 +45 1 1 4 +53 1 1 5 +46 1 1 6 +48 1 1 7 +75 1 2 1 +64 1 2 2 +71 1 2 3 +59 1 2 4 +55 1 2 5 +63 1 2 6 +66 1 2 7 +122 1 3 1 +104 1 3 2 +100 1 3 3 +106 1 3 4 +123 1 3 5 +34 1 3 6 +113 1 3 7 +99 1 4 1 +121 1 4 2 +114 1 4 3 +94 1 4 4 +97 1 4 5 +111 1 4 6 +37 1 4 7 +124 1 5 1 +108 1 5 2 +109 1 5 3 +102 1 5 4 +118 1 5 5 +107 1 5 6 +120 1 5 7 +115 1 6 1 +40 1 6 2 +101 1 6 3 +96 1 6 4 +98 1 6 5 +95 1 6 6 +105 1 6 7 125 1 7 1 129 1 7 2 128 1 7 3 @@ -75,20 +75,20 @@ 127 1 7 5 126 1 7 6 135 1 7 7 -38 1 8 1 -39 1 8 2 -42 1 8 3 -45 1 8 4 -53 1 8 5 -46 1 8 6 -48 1 8 7 -75 1 9 1 -59 1 9 2 -71 1 9 3 -64 1 9 4 -55 1 9 5 -63 1 9 6 -66 1 9 7 +141 1 8 1 +147 1 8 2 +137 1 8 3 +139 1 8 4 +136 1 8 5 +140 1 8 6 +138 1 8 7 +91 1 9 1 +130 1 9 2 +133 1 9 3 +131 1 9 4 +134 1 9 5 +132 1 9 6 +146 1 9 7 62 1 10 4 54 1 11 4 -43 1 12 4 +43 1 12 4 From a30093499f90f80081587fb87d70127bf6c7373c Mon Sep 17 00:00:00 2001 From: Shubham Pandey Date: Sat, 8 Jun 2019 12:54:58 +0200 Subject: [PATCH 4/8] Update config map1 --- config_maps/moduleMAP_config1.txt | 188 +++++++++++++++--------------- 1 file changed, 94 insertions(+), 94 deletions(-) diff --git a/config_maps/moduleMAP_config1.txt b/config_maps/moduleMAP_config1.txt index 68a3f6f..8929d1c 100644 --- a/config_maps/moduleMAP_config1.txt +++ b/config_maps/moduleMAP_config1.txt @@ -1,94 +1,94 @@ -78 0 1 0 -90 0 2 0 -89 0 3 0 -88 0 4 0 -77 0 5 0 -85 0 6 0 -84 0 7 0 -32 0 8 0 -69 0 9 0 -79 0 10 0 -76 0 11 0 -83 0 12 0 -70 0 13 0 -73 0 14 0 -86 0 15 0 -87 0 16 0 -82 0 17 0 -72 0 18 0 -67 0 19 0 -65 0 20 0 -35 0 21 0 -36 0 22 0 -44 0 23 0 -51 0 24 0 -142 0 25 0 -143 0 26 0 -145 0 27 0 -144 0 28 0 -38 1 1 1 -39 1 1 2 -42 1 1 3 -45 1 1 4 -53 1 1 5 -46 1 1 6 -48 1 1 7 -75 1 2 1 -64 1 2 2 -71 1 2 3 -59 1 2 4 -55 1 2 5 -63 1 2 6 -66 1 2 7 -122 1 3 1 -104 1 3 2 -100 1 3 3 -106 1 3 4 -123 1 3 5 -34 1 3 6 -113 1 3 7 -99 1 4 1 -121 1 4 2 -114 1 4 3 -94 1 4 4 -97 1 4 5 -111 1 4 6 -37 1 4 7 -124 1 5 1 -108 1 5 2 -109 1 5 3 -102 1 5 4 -118 1 5 5 -107 1 5 6 -120 1 5 7 -115 1 6 1 -40 1 6 2 -101 1 6 3 -96 1 6 4 -98 1 6 5 -95 1 6 6 -105 1 6 7 -125 1 7 1 -129 1 7 2 -128 1 7 3 -119 1 7 4 -127 1 7 5 -126 1 7 6 -135 1 7 7 -141 1 8 1 -147 1 8 2 -137 1 8 3 -139 1 8 4 -136 1 8 5 -140 1 8 6 -138 1 8 7 -91 1 9 1 -130 1 9 2 -133 1 9 3 -131 1 9 4 -134 1 9 5 -132 1 9 6 -146 1 9 7 -62 1 10 4 -54 1 11 4 -43 1 12 4 +78 0 1 0 +90 0 2 0 +89 0 3 0 +88 0 4 0 +77 0 5 0 +85 0 6 0 +84 0 7 0 +32 0 8 0 +69 0 9 0 +79 0 10 0 +76 0 11 0 +83 0 12 0 +70 0 13 0 +73 0 14 0 +86 0 15 0 +87 0 16 0 +82 0 17 0 +72 0 18 0 +67 0 19 0 +65 0 20 0 +35 0 21 0 +36 0 22 0 +44 0 23 0 +51 0 24 0 +142 0 25 0 +143 0 26 0 +145 0 27 0 +144 0 28 0 +115 1 1 1 +40 1 1 2 +101 1 1 3 +96 1 1 4 +98 1 1 5 +95 1 1 6 +105 1 1 7 +122 1 2 1 +104 1 2 2 +100 1 2 3 +106 1 2 4 +123 1 2 5 +34 1 2 6 +113 1 2 7 +99 1 3 1 +121 1 3 2 +114 1 3 3 +94 1 3 4 +97 1 3 5 +111 1 3 6 +37 1 3 7 +124 1 4 1 +108 1 4 2 +109 1 4 3 +102 1 4 4 +118 1 4 5 +107 1 4 6 +120 1 4 7 +141 1 5 1 +147 1 5 2 +137 1 5 3 +139 1 5 4 +136 1 5 5 +140 1 5 6 +138 1 5 7 +91 1 6 1 +130 1 6 2 +133 1 6 3 +131 1 6 4 +134 1 6 5 +132 1 6 6 +146 1 6 7 +125 1 7 1 +129 1 7 2 +128 1 7 3 +119 1 7 4 +127 1 7 5 +126 1 7 6 +135 1 7 7 +38 1 8 1 +39 1 8 2 +42 1 8 3 +45 1 8 4 +53 1 8 5 +46 1 8 6 +48 1 8 7 +75 1 9 1 +59 1 9 2 +71 1 9 3 +64 1 9 4 +55 1 9 5 +63 1 9 6 +66 1 9 7 +62 1 10 4 +54 1 11 4 +43 1 12 4 From 1235be71b205c5f07f3c127ef6f16b2446c1c8c5 Mon Sep 17 00:00:00 2001 From: Shubham Pandey Date: Sat, 22 Jan 2022 19:30:39 -0600 Subject: [PATCH 5/8] Create README.md --- README.md | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..9855ee2 --- /dev/null +++ b/README.md @@ -0,0 +1,27 @@ +# HGCAL_analysis_code + +## MIP analysis code for OctTB2018 + + +CMSSW version: CMSSW_9_3_0_pre3 (do `cmsenv`). + +### Downlaod scripts
+`git clone -b OctTB_MIP_analysis git@github.com:spandeyehep/HGCAL_analysis_code.git .`
+ +### How to run the script:
+ +`cd tracking_inclusion`
+`make`
+ +`./analyzeHGCOctTB outFileName.root data alpha`
+ + +`` : contains muon runs to be analyzed (see for example: `Data_muon_config1_v9.txt`)
+ +Example:
+`./analyzeHGCOctTB Data_muon_config1_v9.txt out.root data alpha` + +### Descrition of scripts:
+`AnalyzeHGCOctTB.cc` : Main analysis code
+`AnalyzeHGCOctTB.h` : Initialize histos here
+`HGCNtupleVariables.h`: Tree variable initialization
From 1dd85cc4a07b73ab3059273728adb3b75252417e Mon Sep 17 00:00:00 2001 From: Shubham Pandey Date: Sat, 22 Jan 2022 19:38:24 -0600 Subject: [PATCH 6/8] Update README.md --- README.md | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 56 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 9855ee2..0af46e6 100644 --- a/README.md +++ b/README.md @@ -1,18 +1,20 @@ # HGCAL_analysis_code -## MIP analysis code for OctTB2018 - - CMSSW version: CMSSW_9_3_0_pre3 (do `cmsenv`). ### Downlaod scripts
`git clone -b OctTB_MIP_analysis git@github.com:spandeyehep/HGCAL_analysis_code.git .`
+ +## MIP analysis code + + + ### How to run the script:
`cd tracking_inclusion`
`make`
- +
`./analyzeHGCOctTB outFileName.root data alpha`
@@ -25,3 +27,53 @@ Example:
`AnalyzeHGCOctTB.cc` : Main analysis code
`AnalyzeHGCOctTB.h` : Initialize histos here
`HGCNtupleVariables.h`: Tree variable initialization
+
+ +## MIP fitting and value extraction
+ +`cd MIP_fitter`
+use output file from previous step as input by specifying the path in `mipFitterTree.C`
+
+> To run the fit on a single channel:
+
+`root -l`
+`.L mipFitterTree.C+`
+`Loop(0,0,0)`
+
+
+### Loop(unsigned int layer,unsigned int skiroc,unsigned int channel)
+layer : 0 to 27
+skiroc : 0 to 3
+channel : 0 to 62
+
+
+ +> To run on one skiroc chip:
+ +`root -l`
+`.L mipFitterTree.C+`
+`runAllChannel(0, 0)`
+
+
+### runAllChannel(unsigned int layer,unsigned int skiroc)
+layer : 0 to 27
+skiroc : 0 to 3
+
+
+> To run on one layer:
+`root -l`
+`.L mipFitterTree.C+`
+`runAllSkiROC(0)`
+
+
+### runAllSkiROC(unsigned int layer)
+layer : 0 to 27
+
+
+> To run on ENTIRE layers:
+`root -l`
+`.L mipFitterTree.C+`
+`runAllLayers(0,27)`
+
+### runAllLayers(unsigned int layer_start, unsigned int layer_end)
+layer : 0 to 27
From c85c1eaa141c780b9920224c4ebd2f891becdd36 Mon Sep 17 00:00:00 2001 From: Shubham Pandey Date: Sat, 22 Jan 2022 19:38:42 -0600 Subject: [PATCH 7/8] Delete README.txt --- MIP_fitter/README.txt | 59 ------------------------------------------- 1 file changed, 59 deletions(-) delete mode 100644 MIP_fitter/README.txt diff --git a/MIP_fitter/README.txt b/MIP_fitter/README.txt deleted file mode 100644 index 6f7b65f..0000000 --- a/MIP_fitter/README.txt +++ /dev/null @@ -1,59 +0,0 @@ -How to run the code: - -Download v10 muon files from following path: -/afs/cern.ch/work/s/spandey/public/hgcal/samples/v10/muon_v10.root - - -cmsrel CMSSW_8_0_1 -cd CMSSW_8_0_1/src -cmsenv -git clone git@github.com:spandeyehep/HGCAL_analysis_code.git -cd HGCAL_analysis_code/MIP_fitter/ - -> update the file path in the mipFitterTree.C - -> To run the fit on a single channel: - -root -l -.L mipFitterTree.C+ -Loop(0,0,0) - - -### Loop(unsigned int layer,unsigned int skiroc,unsigned int channel) -layer : 0 to 27 -skiroc : 0 to 3 -channel : 0 to 62 - - -> To run on one skiroc chip: -root -l -.L mipFitterTree.C+ -runAllChannel(0, 0) - - -### runAllChannel(unsigned int layer,unsigned int skiroc) -layer : 0 to 27 -skiroc : 0 to 3 - - -> To run on one layer: -root -l -.L mipFitterTree.C+ -runAllSkiROC(0) - - -### runAllSkiROC(unsigned int layer) -layer : 0 to 27 - - - -> To run on ENTIRE layers: -root -l -.L mipFitterTree.C+ -runAllLayers(0,27) - -### runAllLayers(unsigned int layer_start, unsigned int layer_end) -layer : 0 to 27 - - - From 61f1c502e7f0e1e8e1b16466878c760589e52252 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20David?= Date: Wed, 1 Nov 2023 20:22:09 +0100 Subject: [PATCH 8/8] Fix 2MIP Landau sigma --- MIP_fitter/mipFitterTree.C | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/MIP_fitter/mipFitterTree.C b/MIP_fitter/mipFitterTree.C index 7cb1879..34a8b1e 100644 --- a/MIP_fitter/mipFitterTree.C +++ b/MIP_fitter/mipFitterTree.C @@ -129,8 +129,11 @@ void Loop(unsigned int layer,unsigned int skiroc,unsigned int channel) RooRealVar sl0("SigmaL","Landau sigma",5,0.,30) ; RooLandau landau1("l1","Single MIP distribution",x,ml0,sl0) ; + // If X~Landau(µ1, c1) and Y~Landau(µ2, c2), then X+Y~Landau(µ1+µ2, c1+c2) + // https://en.wikipedia.org/wiki/Landau_distribution#Properties RooFormulaVar ml1("MPV1","Laudau MPV for 2-MIP peak","2*@0",ml0) ; - RooLandau landau2("l2","Two-MIP distribution",x,ml1,sl0) ; + RooFormulaVar sl1("SigmaL1","Laudau sigma for 2-MIP peak","2*@0",sl0) ; + RooLandau landau2("l2","Two-MIP distribution",x,ml1,sl1) ; RooFFTConvPdf l1xg("l1xg","landau1 (X) gauss",x,landau1,mipG0) ; RooFFTConvPdf l2xg("l2xg","landau2 (X) gauss",x,landau2,mipG0) ;