File indexing completed on 2025-07-01 07:56:16
0001
0002
0003 void NhitsvsEta_ePIC(TString filePath="", TString label="", TString output_prefix=".")
0004 {
0005
0006 gStyle->SetPalette(1);
0007 gStyle->SetOptTitle(1);
0008 gStyle->SetTitleOffset(.85,"X");gStyle->SetTitleOffset(1.0,"Y");
0009 gStyle->SetTitleSize(.05,"X");gStyle->SetTitleSize(.05,"Y");
0010 gStyle->SetLabelSize(.04,"X");gStyle->SetLabelSize(.04,"Y");
0011 gStyle->SetHistLineWidth(2);
0012 gStyle->SetTitleAlign(23);
0013 gStyle->SetOptFit(1);
0014 gStyle->SetOptStat(0);
0015
0016
0017 TFile* file = new TFile(Form("%s",filePath.Data()));
0018 TTreeReader myReader("events", file);
0019
0020 Int_t lastSlashPos = filePath.Last('/');
0021
0022 TTreeReaderArray<Float_t> charge(myReader, "MCParticles.charge");
0023 TTreeReaderArray<Double_t> vx_mc(myReader, "MCParticles.vertex.x");
0024 TTreeReaderArray<Double_t> vy_mc(myReader, "MCParticles.vertex.y");
0025 TTreeReaderArray<Double_t> vz_mc(myReader, "MCParticles.vertex.z");
0026 TTreeReaderArray<Double_t> px_mc(myReader, "MCParticles.momentum.x");
0027 TTreeReaderArray<Double_t> py_mc(myReader, "MCParticles.momentum.y");
0028 TTreeReaderArray<Double_t> pz_mc(myReader, "MCParticles.momentum.z");
0029 TTreeReaderArray<Int_t> status(myReader, "MCParticles.generatorStatus");
0030 TTreeReaderArray<Int_t> pdg(myReader, "MCParticles.PDG");
0031
0032 TTreeReaderArray<Double_t> *vtx_si_x, *vtx_si_y, *vtx_si_z;
0033 TTreeReaderArray<Double_t> *barrel_si_x, *barrel_si_y, *barrel_si_z;
0034 TTreeReaderArray<Double_t> *disks_si_x, *disks_si_y, *disks_si_z;
0035 TTreeReaderArray<Double_t> *endcap_etof_x, *endcap_etof_y, *endcap_etof_z;
0036 TTreeReaderArray<Double_t> *barrel_mm_x, *barrel_mm_y, *barrel_mm_z;
0037 TTreeReaderArray<Double_t> *barrel_tof_x, *barrel_tof_y, *barrel_tof_z;
0038 TTreeReaderArray<Double_t> *out_mm_x, *out_mm_y, *out_mm_z;
0039 TTreeReaderArray<Double_t> *endcap_fmm_x, *endcap_fmm_y, *endcap_fmm_z;
0040 TTreeReaderArray<Double_t> *endcap_bmm_x, *endcap_bmm_y, *endcap_bmm_z;
0041
0042
0043 TTreeReaderArray<Int_t> *vtx_si_quality, *barrel_si_quality, *disks_si_quality, *endcap_etof_quality, *barrel_mm_quality, *barrel_tof_quality, *out_mm_quality, *endcap_fmm_quality, *endcap_bmm_quality;
0044
0045
0046
0047
0048 vtx_si_x = new TTreeReaderArray<Double_t>(myReader, "VertexBarrelHits.position.x");
0049 vtx_si_y = new TTreeReaderArray<Double_t>(myReader, "VertexBarrelHits.position.y");
0050 vtx_si_z = new TTreeReaderArray<Double_t>(myReader, "VertexBarrelHits.position.z");
0051 vtx_si_quality = new TTreeReaderArray<Int_t>(myReader, "VertexBarrelHits.quality");
0052
0053
0054 barrel_si_x = new TTreeReaderArray<Double_t>(myReader, "SiBarrelHits.position.x");
0055 barrel_si_y = new TTreeReaderArray<Double_t>(myReader, "SiBarrelHits.position.y");
0056 barrel_si_z = new TTreeReaderArray<Double_t>(myReader, "SiBarrelHits.position.z");
0057 barrel_si_quality = new TTreeReaderArray<Int_t>(myReader, "SiBarrelHits.quality");
0058
0059
0060 disks_si_x = new TTreeReaderArray<Double_t>(myReader, "TrackerEndcapHits.position.x");
0061 disks_si_y = new TTreeReaderArray<Double_t>(myReader, "TrackerEndcapHits.position.y");
0062 disks_si_z = new TTreeReaderArray<Double_t>(myReader, "TrackerEndcapHits.position.z");
0063 disks_si_quality = new TTreeReaderArray<Int_t>(myReader, "TrackerEndcapHits.quality");
0064
0065
0066 endcap_etof_x = new TTreeReaderArray<Double_t>(myReader, "TOFEndcapHits.position.x");
0067 endcap_etof_y = new TTreeReaderArray<Double_t>(myReader, "TOFEndcapHits.position.y");
0068 endcap_etof_z = new TTreeReaderArray<Double_t>(myReader, "TOFEndcapHits.position.z");
0069 endcap_etof_quality = new TTreeReaderArray<Int_t>(myReader, "TOFEndcapHits.quality");
0070
0071
0072 barrel_mm_x = new TTreeReaderArray<Double_t>(myReader, "MPGDBarrelHits.position.x");
0073 barrel_mm_y = new TTreeReaderArray<Double_t>(myReader, "MPGDBarrelHits.position.y");
0074 barrel_mm_z = new TTreeReaderArray<Double_t>(myReader, "MPGDBarrelHits.position.z");
0075 barrel_mm_quality = new TTreeReaderArray<Int_t>(myReader, "MPGDBarrelHits.quality");
0076
0077
0078 barrel_tof_x = new TTreeReaderArray<Double_t>(myReader, "TOFBarrelHits.position.x");
0079 barrel_tof_y = new TTreeReaderArray<Double_t>(myReader, "TOFBarrelHits.position.y");
0080 barrel_tof_z = new TTreeReaderArray<Double_t>(myReader, "TOFBarrelHits.position.z");
0081 barrel_tof_quality = new TTreeReaderArray<Int_t>(myReader, "TOFBarrelHits.quality");
0082
0083
0084 out_mm_x = new TTreeReaderArray<Double_t>(myReader, "OuterMPGDBarrelHits.position.x");
0085 out_mm_y = new TTreeReaderArray<Double_t>(myReader, "OuterMPGDBarrelHits.position.y");
0086 out_mm_z = new TTreeReaderArray<Double_t>(myReader, "OuterMPGDBarrelHits.position.z");
0087 out_mm_quality = new TTreeReaderArray<Int_t>(myReader, "OuterMPGDBarrelHits.quality");
0088
0089
0090 endcap_fmm_x = new TTreeReaderArray<Double_t>(myReader, "ForwardMPGDEndcapHits.position.x");
0091 endcap_fmm_y = new TTreeReaderArray<Double_t>(myReader, "ForwardMPGDEndcapHits.position.y");
0092 endcap_fmm_z = new TTreeReaderArray<Double_t>(myReader, "ForwardMPGDEndcapHits.position.z");
0093 endcap_fmm_quality = new TTreeReaderArray<Int_t>(myReader, "ForwardMPGDEndcapHits.quality");
0094
0095
0096 endcap_bmm_x = new TTreeReaderArray<Double_t>(myReader, "BackwardMPGDEndcapHits.position.x");
0097 endcap_bmm_y = new TTreeReaderArray<Double_t>(myReader, "BackwardMPGDEndcapHits.position.y");
0098 endcap_bmm_z = new TTreeReaderArray<Double_t>(myReader, "BackwardMPGDEndcapHits.position.z");
0099 endcap_bmm_quality = new TTreeReaderArray<Int_t>(myReader, "BackwardMPGDEndcapHits.quality");
0100
0101
0102 Double_t etamc = 0.;
0103 int iEvent=-1;
0104
0105 TCanvas * c1 = new TCanvas("c1","coutput",1400,1000);
0106 c1->SetMargin(0.10, 0.05 ,0.1,0.08);
0107 c1->SetGridx();
0108 c1->SetGridy();
0109
0110 TProfile* hits = new TProfile("hits","Nhits (#theta)",70,-3.5,3.5);
0111 hits->GetXaxis()->CenterTitle();
0112 hits->GetYaxis()->CenterTitle();
0113 hits->SetMinimum(0.);
0114
0115 std::vector<TVector3> hitPos;
0116 double epsilon = 1.0e-5;
0117 Double_t pmc = 0.;
0118 bool debug = false;
0119 int nhits_SVTIB, nhits_SVTOB, nhits_InMPGD, nhits_BTOF, nhits_OutMPGD, nhits_SVTDisks, nhits_FwdMPGDDisks, nhits_BwdMPGDDisks, nhits_ETOF;
0120
0121 while (myReader.Next())
0122 {
0123 hitPos.clear(); debug = false;
0124 if (iEvent<10) debug = true;
0125 iEvent++;
0126 if (debug) printf("<--------------------Event No. %d---------------------> \n",iEvent);
0127
0128 if (charge.GetSize()>1) continue;
0129 Double_t eta_Track = 100.;
0130 for (int j = 0; j < charge.GetSize(); ++j){
0131
0132 if (status[j] !=1) continue;
0133 pmc = sqrt(px_mc[j]*px_mc[j]+py_mc[j]*py_mc[j]+pz_mc[j]*pz_mc[j]);
0134 Double_t pzmc = pz_mc[j];
0135 Double_t etamc = -1.0*TMath::Log(TMath::Tan((TMath::ACos(pzmc/pmc))/2));
0136 eta_Track = etamc;
0137 Double_t particle = pdg[j];
0138 }
0139 if (fabs(eta_Track)>3.5) continue;
0140
0141
0142
0143 if (debug) printf("Eta of the generated track: %f, Momentum (GeV/c): %f \n",eta_Track,pmc);
0144
0145 for (int j = 0; j < vtx_si_x->GetSize(); ++j){
0146 Double_t xhit = vtx_si_x->At(j); Double_t yhit = vtx_si_y->At(j); Double_t zhit = vtx_si_z->At(j);
0147 Int_t quality = vtx_si_quality->At(j);
0148 if (quality==0) hitPos.push_back(TVector3(xhit,yhit,zhit));
0149 }
0150 nhits_SVTIB = hitPos.size(); hitPos.clear();
0151 if (debug) printf("SVT IB Associated hits: %d \n",nhits_SVTIB);
0152
0153
0154 for (int j = 0; j < barrel_si_x->GetSize(); ++j){
0155 Double_t xhit = barrel_si_x->At(j); Double_t yhit = barrel_si_y->At(j); Double_t zhit = barrel_si_z->At(j);
0156 Int_t quality = barrel_si_quality->At(j);
0157 if (quality==0) hitPos.push_back(TVector3(xhit,yhit,zhit));
0158 }
0159 nhits_SVTOB = hitPos.size(); hitPos.clear();
0160 if (debug) printf("SVT OB Associated hits: %d \n",nhits_SVTOB);
0161
0162
0163 for (int j = 0; j < barrel_mm_x->GetSize(); ++j){
0164 Double_t xhit = barrel_mm_x->At(j); Double_t yhit = barrel_mm_y->At(j); Double_t zhit = barrel_mm_z->At(j);
0165 Int_t quality = barrel_mm_quality->At(j);
0166 if (quality==0) hitPos.push_back(TVector3(xhit,yhit,zhit));
0167 }
0168 nhits_InMPGD = hitPos.size(); hitPos.clear();
0169 if (debug) printf("Inner MPGD Associated hits: %d \n",nhits_InMPGD);
0170
0171
0172 for (int j = 0; j < out_mm_x->GetSize(); ++j){
0173 Double_t xhit = out_mm_x->At(j); Double_t yhit = out_mm_y->At(j); Double_t zhit = out_mm_z->At(j);
0174 Int_t quality = out_mm_quality->At(j);
0175 if (quality==0) hitPos.push_back(TVector3(xhit,yhit,zhit));
0176 }
0177 nhits_OutMPGD = hitPos.size(); hitPos.clear();
0178 if (debug) printf("Outer MPGD Associated hits: %d \n",nhits_OutMPGD);
0179
0180
0181 for (int j = 0; j < barrel_tof_x->GetSize(); ++j){
0182 Double_t xhit = barrel_tof_x->At(j); Double_t yhit = barrel_tof_y->At(j); Double_t zhit = barrel_tof_z->At(j);
0183 Int_t quality = barrel_tof_quality->At(j);
0184 if (quality==0) hitPos.push_back(TVector3(xhit,yhit,zhit));
0185 }
0186
0187 nhits_BTOF = hitPos.size(); hitPos.clear();
0188 if (debug) printf("BTOF Associated hits: %d \n",nhits_BTOF);
0189
0190
0191 for (int j = 0; j < disks_si_x->GetSize(); ++j){
0192 Int_t quality = disks_si_quality->At(j);
0193 Double_t xhit = disks_si_x->At(j); Double_t yhit = disks_si_y->At(j); Double_t zhit = disks_si_z->At(j);
0194 if (quality==0 && zhit>0) hitPos.push_back(TVector3(xhit,yhit,zhit));
0195 else if (quality==0 && zhit<0) hitPos.push_back(TVector3(xhit,yhit,zhit));
0196 }
0197
0198 nhits_SVTDisks = hitPos.size(); hitPos.clear();
0199 if (debug) printf("SVT Disks Associated hits: %d \n",nhits_SVTDisks);
0200
0201
0202 for (int j = 0; j < endcap_etof_x->GetSize(); ++j){
0203 Double_t xhit = endcap_etof_x->At(j); Double_t yhit = endcap_etof_y->At(j); Double_t zhit = endcap_etof_z->At(j);
0204 Int_t quality = endcap_etof_quality->At(j);
0205 if (quality==0) hitPos.push_back(TVector3(xhit,yhit,zhit));
0206 }
0207
0208 nhits_ETOF = hitPos.size(); hitPos.clear();
0209 if (debug) printf("ETOF Associated hits: %d \n",nhits_ETOF);
0210
0211
0212 for (int j = 0; j < endcap_fmm_x->GetSize(); ++j){
0213 Double_t xhit = endcap_fmm_x->At(j); Double_t yhit = endcap_fmm_y->At(j); Double_t zhit = endcap_fmm_z->At(j);
0214 Int_t quality = endcap_fmm_quality->At(j);
0215 if (quality==0) hitPos.push_back(TVector3(xhit,yhit,zhit));
0216 }
0217 nhits_FwdMPGDDisks = hitPos.size(); hitPos.clear();
0218 if (debug) printf("Forward MPGD Associated hits: %d \n",nhits_FwdMPGDDisks);
0219
0220
0221 for (int j = 0; j < endcap_bmm_x->GetSize(); ++j){
0222 Double_t xhit = endcap_bmm_x->At(j); Double_t yhit = endcap_bmm_y->At(j); Double_t zhit = endcap_bmm_z->At(j);
0223 Int_t quality = endcap_bmm_quality->At(j);
0224 if (quality==0) hitPos.push_back(TVector3(xhit,yhit,zhit));
0225 }
0226
0227 nhits_BwdMPGDDisks = hitPos.size(); hitPos.clear();
0228 if (debug) printf("Backward MPGD Associated hits: %d \n",nhits_BwdMPGDDisks);
0229
0230 int nhits = nhits_SVTIB + nhits_SVTOB + nhits_InMPGD + nhits_BTOF + nhits_OutMPGD + nhits_SVTDisks + nhits_FwdMPGDDisks + nhits_BwdMPGDDisks + nhits_ETOF;
0231 if (nhits>0) hits->Fill(eta_Track,nhits);
0232
0233 }
0234
0235 c1->cd();
0236 gPad->SetTicks(1,1);
0237 hits->SetTitle(";#eta_{mc};Nhits");
0238 hits->SetLineWidth(2);
0239 hits->Draw("hist");
0240 TPaveText *pt = new TPaveText(0.1, 0.95, 0.9, 1.0, "NDC");
0241 pt->AddText(Form("p_{mc} = %1.1f GeV/c",pmc));
0242 pt->SetBorderSize(0);
0243 pt->SetFillStyle(0);
0244 pt->SetTextAlign(23);
0245 pt->Draw();
0246
0247 c1->SaveAs(Form("%s/Nhits_vs_eta.png", output_prefix.Data()));
0248 c1->SaveAs(Form("%s/Nhits_vs_eta.root", output_prefix.Data()));
0249 }