]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGDQ/dielectron/TakuAlberica/pair/ana_sgl.C
Merge branch 'master' of https://git.cern.ch/reps/AliRoot
[u/mrichter/AliRoot.git] / PWGDQ / dielectron / TakuAlberica / pair / ana_sgl.C
CommitLineData
06f630bb 1#define ana_sgl_cxx
2#include "ana_sgl.h"
3#include <TH2.h>
4#include <TStyle.h>
5#include <TCanvas.h>
6#include <TMath.h>
7#include <vector>
8#include <deque>
9#include <cstdlib>
10#include <TRandom.h>
11
12using namespace std;
13
14using std::vector;
15
16class etrk;
17
18//Buffer for event mixing
19static const int NBUF=100; //depth of buffer
20static const int NMix=10; //# of events mixed (for +-)
21//static const int NMix=2; //# of events mixed (for +-)
22
23
24static const int NZBIN=10;
25static const int NCENT=10;
26int d_ibuf[NZBIN][NCENT];
27vector<etrk> d_vep[NBUF][NZBIN][NCENT];
28vector<etrk> d_vem[NBUF][NZBIN][NCENT];
29
30static const unsigned int MAXPOOL=150;
31//static const unsigned int MAXPOOL=50;
32static const int MAX_TRY=3;
33deque<etrk> d_poolp[NZBIN][NCENT];
34deque<etrk> d_poolm[NZBIN][NCENT];
35
36void reshuffle_buffer(vector<etrk> &ve,
37 deque<etrk> &pool){
38 //If there is not enough electron in the pool, give up
39 unsigned int ne = ve.size();
40 unsigned int poolsize = pool.size();
41 if(poolsize < ne) {
42 cout <<" pool size="<<poolsize<<" ne"<<ne<<endl;
43 return;
44 }
45 for(unsigned int ie=0; ie < ne; ie++) {
46 int j = rand()%poolsize;
47 ve[ie] = pool[j];
48 }
49}
50
51void ana_sgl::Loop()
52{
53// In a ROOT session, you can do:
54// Root > .L ana_sgl.C
55// Root > ana_sgl t
56// Root > t.GetEntry(12); // Fill t data members with entry number 12
57// Root > t.Show(); // Show values of entry 12
58// Root > t.Show(16); // Read and show values of entry 16
59// Root > t.Loop(); // Loop on all entries
60//
61
62// This is the loop skeleton where:
63// jentry is the global entry number in the chain
64// ientry is the entry number in the current Tree
65// Note that the argument to GetEntry must be:
66// jentry for TChain::GetEntry
67// ientry for TTree::GetEntry and TBranch::GetEntry
68//
69// To read only selected branches, Insert statements like:
70// METHOD1:
71// fChain->SetBranchStatus("*",0); // disable all branches
72// fChain->SetBranchStatus("branchname",1); // activate branchname
73// METHOD2: replace line
74// fChain->GetEntry(jentry); //read all branches
75//by b_branchname->GetEntry(ientry); //read only this branch
76 if (fChain == 0) return;
77
78 Long64_t nentries = fChain->GetEntriesFast();
79
80 Long64_t nbytes = 0, nb = 0;
81 for (Long64_t jentry=0; jentry<nentries;jentry++) {
82 Long64_t ientry = LoadTree(jentry);
83 if (ientry < 0) break;
84 nb = fChain->GetEntry(jentry); nbytes += nb;
85 ana_event(ientry, jentry);
86 // if (Cut(ientry) < 0) continue;
87 }
88}
89
90//___________________________________________
91 void ana_sgl::ana_init(char *outname){
92 fout = new TFile(outname,"recreate");
93 char name[100];
94
95 hdedx_pt = new TH2D("hdedx_pt","dedx vs. pT",100,0, 10, 100, 0, 200);
96 hdedx_tof_elec_pt = new TH2D("hdedx_tof_elec_pt","dedx vs. pT with tof veto",100,0, 10, 100, 0, 200);
97 hdedx_tof_all_pt = new TH2D("hdedx_tof_all_pt","dedx vs. pT with tof veto",100,0, 10, 100, 0, 200);
98 hdedx_tof_elec_emc_pt = new TH2D("hdedx_tof_elec_emc_pt","dedx vs. pT with tof veto and EMC",100,0, 10, 100, 0, 200);
99 hdedx_tof_all_emc_pt = new TH2D("hdedx_tof_all_emc_pt","dedx vs. pT with tof veto and EMC",100,0, 10, 100, 0, 200);
100 hdedx_emc_pt = new TH2D("hdedx_emc_pt","dedx vs. pT with EMC",100,0, 10, 100, 0, 200);
101
102
103 hbetatof_pt = new TH2D("hbetatof_pt","beta vs. pT",100,0, 10, 100, 0, 1);
104 hbetatof_tof_elec_pt = new TH2D("hbetatof_tof_elec_pt","beta vs. pT with tof cut",100,0, 10, 100, 0, 1);
105 hbetatof_tof_all_pt = new TH2D("hbetatof_tof_all_pt","beta vs. pT with tof cut",100,0, 10, 100, 0, 1);
106 hbetatof_tof_elec_emc_pt = new TH2D("hbetatof_tof_elec_emc_pt","beta vs. pT with tof cut",100,0, 10, 100, 0, 1);
107 hbetatof_tof_all_emc_pt = new TH2D("hbetatof_tof_all_emc_pt","beta vs. pT with tof cut and emc E/p",100,0, 10, 100, 0, 1);
108 hbetatof_emc_pt = new TH2D("hbetatof_emc_pt","dedx vs. pT with EMC",100,0, 10, 100, 0, 200);
109
110 hCentrality = new TH1F("hCentrality","hCentrality",100,0,100);
111 hV0AC = new TH2F("hV0AC","V0AC",5000,0,15000,5000,0,15000);
112 hV0AC_Ntrk = new TH2F("hV0AC_Ntrk","V0AC vs. Ntrk",5000,0,30000,5000,0,15000);
113 hV0AC_NaccTrcklts = new TH2F("hV0AC_NaccTrcklts","V0AC vs. Ntrklets",5000,0,30000,2500,0,5000);
114
115
116
117 fBinWidth = 0.05;
118
119 nHistos = (int)(10/fBinWidth);
120
121 for(int i=0;i<nHistos;i++){
122 sprintf(name,"hdedx_p%d",i);
123 hdedx[i] = new TH1D(name, name, 200,0,200);
124
125 sprintf(name,"hdedx_tof_elec_p%d",i);
126 hdedx_tof_elec[i] = new TH1D(name, name, 200,0,200);
127
128 sprintf(name,"hdedx_tof_all_p%d",i);
129 hdedx_tof_all[i] = new TH1D(name, name, 200,0,200);
130
131
132 sprintf(name,"hdedx_tof_elec_emc_p%d",i);
133 hdedx_tof_elec_emc[i] = new TH1D(name, name, 200,0,200);
134
135 sprintf(name,"hdedx_tof_all_emc_p%d",i);
136 hdedx_tof_all_emc[i] = new TH1D(name, name, 200,0,200);
137
138 sprintf(name,"hdedx_emc_p%d",i);
139 hdedx_emc[i] = new TH1D(name, name, 200,0,200);
140
141 }
142
143
144 int nbinx=400;
145 float max_x=20;
146 float min_x=0.2;
147 float binw = (TMath::Log(max_x)-TMath::Log(min_x))/nbinx;
148 double xbin[401];
149 for(int ii=0;ii<nbinx+1;ii++){
150 xbin[ii] = TMath::Exp(TMath::Log(min_x) + 0.5*binw+binw*ii);
151 }
152
153
154 //// my histo
155 fEventStat = new TH1D("EventStat ","EventStat ",7,0,7);
156 fEvent = new TH1D("Event","Number of Events", 60,0,60);
157 fdEdXvsPt = new TH2D("dEdXvsPt","dE/dX vs. PT of TPC", nbinx, xbin, 2000,0,200);
158 fdEdXnSigmaElecvsPt = new TH2D("fdEdXnSigmaElecvsPt","dE/dX normalized to electron vs. pT of TPC",
159 nbinx, xbin, 2000, -10, 10);
160 fTOFbetavsPt = new TH2D("fTOFbetavsPt","TOF beta vs. p", 400, 0, 20, 1200, 0, 1.2);
161 fTOFnSigmaElecvsPt = new TH2D("fTOFnSigmaElecvsPt","TOF nsigma for electron", 400, 0, 20, 2000, -10, 10);
162
163 fdEdXvsPtWithCut = new TH2D("dEdXvsPtWithCuts","dE/dX vs. PT of TPC", nbinx, xbin, 2000,0,200);
164
165
166 fPtElec[0] = new TH1D("hPtElec0","elctron pt",250,0,5);
167 fPtElec[1] = new TH1D("hPtElec1","elctron pt",250,0,5);
168
169
170 fNelc_pos = new TH2D("hNelc_pos","# of electrons and positrons",40, -0.5, 39.5, 40, -0.5, 39.5);
171 fNelc_all = new TH1D("hNelc_all","# of electrons and positrons",50, -0.5, 49.5);
172 fNelc_all_pT = new TH2D("hNelc_all_pT","# of electrons and positrons in each pT bin",10, 0, 5, 50, -0.5, 49.5);
173
174 for(int ic=0;ic<10;ic++){
175 sprintf(name,"hNelc_pos_cent%d",ic);
176 fNelc_pos_cent[ic] = new TH2D(name, name, 40, -0.5, 39.5, 40, -0.5, 39.5);
177 sprintf(name,"hNelc_all_cent%d",ic);
178 fNelc_all_cent[ic] = new TH1D(name, name, 50, -0.5, 49.5);
179 }
180
181
182 //// tree branch
183 d_tree = new TTree("d_tree","single tree");
184 d_tree->Branch("evt", &d_evt, "evt/I");
185 d_tree->Branch("cent", &d_cent, "cent/D");
186 d_tree->Branch("ntrk", &d_ntrk, "ntrk/D");
187 d_tree->Branch("xvprim", &d_xvprim, "xvprim/D");
188 d_tree->Branch("yvprim", &d_yvprim, "yvprim/D");
189 d_tree->Branch("zvprim", &d_zvprim, "zvprim/D");
190 d_tree->Branch("nacctrklets", &d_nacctrklets, "nacctrklets/D");
191 d_tree->Branch("xres", &d_xres, "xres/D");
192 d_tree->Branch("yres", &d_yres, "yres/D");
193 d_tree->Branch("zres", &d_zres, "zres/D");
194 d_tree->Branch("nelc", &d_nelc, "nelc/I");
195 d_tree->Branch("px", d_px, "px[nelc]/D");
196 d_tree->Branch("py", d_py, "py[nelc]/D");
197 d_tree->Branch("pz", d_pz, "pz[nelc]/D");
198 d_tree->Branch("p", d_p, "p[nelc]/D");
199 d_tree->Branch("pt", d_pt, "pt[nelc]/D");
200 d_tree->Branch("xv", d_xv, "xv[nelc]/D");
201 d_tree->Branch("yv", d_yv, "yv[nelc]/D");
202 d_tree->Branch("zv", d_zv, "zv[nelc]/D");
203 d_tree->Branch("phi", d_phi, "phi[nelc]/D");
204 d_tree->Branch("theta", d_theta, "theta[nelc]/D");
205 d_tree->Branch("eta", d_eta, "eta[nelc]/D");
206 d_tree->Branch("c", d_c, "c[nelc]/D");
207 d_tree->Branch("nclusITS", d_nclusITS, "nclusITS[nelc]/D");
208 d_tree->Branch("nclusTPC", d_nclusTPC, "nclusTPC[nelc]/D");
209 d_tree->Branch("nclusTPCiter", d_nclusTPCiter, "nclusTPCiter[nelc]/D");
210 d_tree->Branch("nfclusTPC", d_nfclusTPC, "nfclusTPC[nelc]/D");
211 d_tree->Branch("nfclusTPCr", d_nfclusTPCr, "nfclusTPCr[nelc]/D");
212 d_tree->Branch("nfclusTPCrFrac", d_nfclusTPCrFrac, "nfclusTPCrFrac[nelc]/D");
213 d_tree->Branch("TPCsignalN", d_TPCsignalN, "TPCsignalN[nelc]/D");
214 d_tree->Branch("TPCsignalNfrac", d_TPCsignalNfrac, "TPCsignalNfrac[nelc]/D");
215 d_tree->Branch("TPCchi2cl", d_TPCchi2cl, "TPCchi2cl[nelc]/D");
216 d_tree->Branch("trkstat", d_trkstat, "trkstat[nelc]/D");
217 d_tree->Branch("nclsTRD", d_nclsTRD, "nclsTRD[nelc]/D");
218 d_tree->Branch("TRDntracklets", d_TRDntracklets, "TRDntracklets[nelc]/D");
219 d_tree->Branch("TRDpidquality", d_TRDpidquality, "TRDpidquality[nelc]/D");
220 d_tree->Branch("TRDprobEle", d_TRDprobEle, "TRDprobEle[nelc]/D");
221 d_tree->Branch("TRDprobPio", d_TRDprobPio, "TRDprobPio[nelc]/D");
222 d_tree->Branch("impactXY", d_impactXY, "impactXY[nelc]/D");
223 d_tree->Branch("impactZ", d_impactZ, "impactZ[nelc]/D");
224 d_tree->Branch("tracklength", d_tracklength, "tracklength[nelc]/D");
225 d_tree->Branch("ITSsignal", d_ITSsignal, "ITSsignal[nelc]/D");
226 d_tree->Branch("ITSnsigmaEle", d_ITSnsigmaEle, "ITSnsigmaEle[nelc]/D");
227 d_tree->Branch("ITSnsigmaPio", d_ITSnsigmaPio, "ITSnsigmaPio[nelc]/D");
228 d_tree->Branch("ITSnsigmaMuo", d_ITSnsigmaMuo, "ITSnsigmaMuo[nelc]/D");
229 d_tree->Branch("ITSnsigmaKao", d_ITSnsigmaKao, "ITSnsigmaKao[nelc]/D");
230 d_tree->Branch("ITSnsigmaPro", d_ITSnsigmaPro, "ITSnsigmaPro[nelc]/D");
231 d_tree->Branch("PIn", d_PIn, "PIn[nelc]/D");
232 d_tree->Branch("TPCsignal", d_TPCsignal, "TPCsignal[nelc]/D");
233 d_tree->Branch("TOFsignal", d_TOFsignal, "TOFsignal[nelc]/D");
234 d_tree->Branch("TOFbeta", d_TOFbeta, "TOFbeta[nelc]/D");
235 d_tree->Branch("TPCnSigmaEle", d_TPCnSigmaEle, "TPCnSigmaEle[nelc]/D");
236 d_tree->Branch("TPCnSigmaPio", d_TPCnSigmaPio, "TPCnSigmaPio[nelc]/D");
237 d_tree->Branch("TPCnSigmaMuo", d_TPCnSigmaMuo, "TPCnSigmaMuo[nelc]/D");
238 d_tree->Branch("TPCnSigmaKao", d_TPCnSigmaKao, "TPCnSigmaKao[nelc]/D");
239 d_tree->Branch("TPCnSigmaPro", d_TPCnSigmaPro, "TPCnSigmaPro[nelc]/D");
240 d_tree->Branch("TOFnSigmaEle", d_TOFnSigmaEle, "TOFnSigmaEle[nelc]/D");
241 d_tree->Branch("TOFnSigmaPio", d_TOFnSigmaPio, "TOFnSigmaPio[nelc]/D");
242 d_tree->Branch("TOFnSigmaMuo", d_TOFnSigmaMuo, "TOFnSigmaMuo[nelc]/D");
243 d_tree->Branch("TOFnSigmaKao", d_TOFnSigmaKao, "TOFnSigmaKao[nelc]/D");
244 d_tree->Branch("TOFnSigmaPro", d_TOFnSigmaPro, "TOFnSigmaPro[nelc]/D");
245 d_tree->Branch("E", d_E, "E[nelc]/D");
246 d_tree->Branch("dphi", d_phi, "dphi[nelc]/D");
247 d_tree->Branch("deta", d_eta, "deta[nelc]/D");
248
249 d_tree->Branch("chi2ndf", d_chi2ndf, "chi2ndf[nelc]/D");
250
251 cout<<"aaaaaaaaaaa"<<endl;
252 d_ntpair = new TTree("ntpair","pair");
253 d_ntpair->Branch("run", &d_run, "run/D");
254 d_ntpair->Branch("event", &d_event, "event/I");
255 d_ntpair->Branch("centrality",&d_centrality,"centrality/D");
256 d_ntpair->Branch("prim_xv",&d_prim_xv,"prim_xv/D");
257 d_ntpair->Branch("prim_yv",&d_prim_yv,"prim_yv/D");
258 d_ntpair->Branch("prim_zv",&d_prim_zv,"prim_zv/D");
259 d_ntpair->Branch("mass",&d_mass,"mass/D");
260 d_ntpair->Branch("pxpair",&d_pxpair,"pxpair/D");
261 d_ntpair->Branch("pypair",&d_pypair,"pypair/D");
262 d_ntpair->Branch("pzpair",&d_pzpair,"pzpair/D");
263 d_ntpair->Branch("ptpair",&d_ptpair,"ptpair/D");
264 d_ntpair->Branch("epair",&d_epair,"epair/D");
265 d_ntpair->Branch("eta",&d_etapair,"eta/D");
266 d_ntpair->Branch("phi",&d_phipair,"phi/D");
267 d_ntpair->Branch("cos",&d_cos,"cos/D");
268 d_ntpair->Branch("phiv",&d_phiv,"phiv/D");
269 d_ntpair->Branch("psi",&d_psi,"psi/D");
270 d_ntpair->Branch("pairtype",&d_pairtype,"pairtype/I");
271 d_ntpair->Branch("cent1",&d_cent1,"cent1/D");
272 d_ntpair->Branch("xv1",&d_xv1,"xv1/D");
273 d_ntpair->Branch("yv1",&d_yv1,"yv1/D");
274 d_ntpair->Branch("zv1",&d_zv1,"zv1/D");
275 d_ntpair->Branch("px1",&d_px1,"px1/D");
276 d_ntpair->Branch("py1",&d_py1,"py1/D");
277 d_ntpair->Branch("pz1",&d_pz1,"pz1/D");
278 d_ntpair->Branch("pt1",&d_pt1,"pt1/D");
279 d_ntpair->Branch("eta1",&d_eta1,"eta1/D");
280 d_ntpair->Branch("phi1",&d_phi1,"phi1/D");
281 d_ntpair->Branch("theta1",&d_theta1,"theta1/D");
282 d_ntpair->Branch("tpc1",&d_tpc1,"tpc1/D");
283 d_ntpair->Branch("ntpc_ele1",&d_ntpc_ele1,"ntpc_ele1/D");
284 d_ntpair->Branch("ntpc_pio1",&d_ntpc_pio1,"ntpc_pio1/D");
285 d_ntpair->Branch("ntpc_kao1",&d_ntpc_kao1,"ntpc_kao1/D");
286 d_ntpair->Branch("ntpc_pro1",&d_ntpc_pro1,"ntpc_pro1/D");
287 d_ntpair->Branch("beta1",&d_beta1,"beta1/D");
288 d_ntpair->Branch("ntof_ele1",&d_ntof_ele1,"ntof_ele1/D");
289 d_ntpair->Branch("ntof_pio1",&d_ntof_pio1,"ntof_pio1/D");
290 d_ntpair->Branch("ntof_kao1",&d_ntof_kao1,"ntof_kao1/D");
291 d_ntpair->Branch("ntof_pro1",&d_ntof_pro1,"ntof_pro1/D");
292 d_ntpair->Branch("its1",&d_its1,"its1/D");
293 d_ntpair->Branch("nits1",&d_nits1,"nits1/D");
294 d_ntpair->Branch("ntpc1",&d_ntpc1,"ntpc1/D");
295 d_ntpair->Branch("e1",&d_e1,"e1/D");
296 d_ntpair->Branch("dphi1",&d_dphi1,"dphi1/D");
297 d_ntpair->Branch("deta1",&d_deta1,"deta1/D");
298 d_ntpair->Branch("dcaxy1",&d_dcaxy1,"dcaxy1/D");
299 d_ntpair->Branch("dcaz1",&d_dcaz1,"dcaz1/D");
300 d_ntpair->Branch("conv1",&d_conv1,"conv1/I");
301
302
303
304
305 d_ntpair->Branch("cent2",&d_cent2,"cent2/D");
306 d_ntpair->Branch("xv2",&d_xv2,"xv2/D");
307 d_ntpair->Branch("yv2",&d_yv2,"yv2/D");
308 d_ntpair->Branch("zv2",&d_zv2,"zv2/D");
309 d_ntpair->Branch("px2",&d_px2,"px2/D");
310 d_ntpair->Branch("py2",&d_py2,"py2/D");
311 d_ntpair->Branch("pz2",&d_pz2,"pz2/D");
312 d_ntpair->Branch("pt2",&d_pt2,"pt2/D");
313 d_ntpair->Branch("eta2",&d_eta2,"eta2/D");
314 d_ntpair->Branch("phi2",&d_phi2,"phi2/D");
315 d_ntpair->Branch("theta2",&d_theta2,"theta2/D");
316 d_ntpair->Branch("tpc2",&d_tpc2,"tpc2/D");
317 d_ntpair->Branch("ntpc_ele2",&d_ntpc_ele2,"ntpc_ele2/D");
318 d_ntpair->Branch("ntpc_pio2",&d_ntpc_pio2,"ntpc_pio2/D");
319 d_ntpair->Branch("ntpc_kao2",&d_ntpc_kao2,"ntpc_kao2/D");
320 d_ntpair->Branch("ntpc_pro2",&d_ntpc_pro2,"ntpc_pro2/D");
321 d_ntpair->Branch("beta2",&d_beta2,"beta2/D");
322 d_ntpair->Branch("ntof_ele2",&d_ntof_ele2,"ntof_ele2/D");
323 d_ntpair->Branch("ntof_pio2",&d_ntof_pio2,"ntof_pio2/D");
324 d_ntpair->Branch("ntof_kao2",&d_ntof_kao2,"ntof_kao2/D");
325 d_ntpair->Branch("ntof_pro2",&d_ntof_pro2,"ntof_pro2/D");
326 d_ntpair->Branch("its2",&d_its2,"its2/D");
327 d_ntpair->Branch("nits2",&d_nits2,"nits2/D");
328 d_ntpair->Branch("ntpc2",&d_ntpc2,"ntpc2/D");
329 d_ntpair->Branch("e2",&d_e2,"e2/D");
330 d_ntpair->Branch("dphi2",&d_dphi2,"dphi2/D");
331 d_ntpair->Branch("deta2",&d_deta2,"deta2/D");
332 d_ntpair->Branch("dcaxy2",&d_dcaxy2,"dcaxy2/D");
333 d_ntpair->Branch("dcaz2",&d_dcaz2,"dcaz2/D");
334 d_ntpair->Branch("conv2",&d_conv2,"conv2/I");
335
336 cout<<"aaaaaaaaaaa"<<endl;
337 for(int i=0;i<7;i++){
338 for(int j=0;j<11;j++){
339 sprintf(name,"hmasspt_cent%d_pair%d",j,i);
340 hmasspt[i][j] = new TH2D(name, name, 500, 0, 5, 500, 0, 5);
341 sprintf(name,"hmasspt_weight_cent%d_pair%d",j,i);
342 hmasspt_weight[i][j] = new TH2D(name, name, 500, 0, 5, 500, 0, 5);
343 }
344 }
345
346 vep.clear();
347 vem.clear();
348 vep_tmp.clear();
349 vem_tmp.clear();
350
351 d_evt = 0;
352 d_event = 0;
353
354 simflag = false;
355 d_conv_flag = false;
356
357 for(int i=0;i<10;i++){
358 nelec_pos[i] = 0;
359 }
360
361 magnetic_field_mm = true;
362
363 d_flag_tof_cut = false;
364 d_flag_emc_cut =false;
365 d_flag_phiv = false;
366 d_tpc_dedx_low = 75;
367 d_tpc_dedx_high = 90;
368 d_tof_low = -3;
369 d_tof_high = 3;
370 d_emc_low = 0.7;
371 d_emc_high = 1.3;
372 d_phiv_cut = 0.6;
373
374 d_flag_kaon_veto = false;
375 d_flag_proton_veto = false;
376 d_dedx_kaon_veto_low = -2;
377 d_dedx_kaon_veto_high = 2;
378 d_dedx_proton_veto_low = -2;
379 d_dedx_proton_veto_high = 2;
380
381
382 cout<<"ana_init end:"<<endl;
383}
384
385//___________________________________________
386void ana_sgl::ana_end(void){
387
388 fout->cd();
389 /*
390 hdedx_pt->Write();
391 hdedx_tof_elec_pt->Write();
392 hdedx_tof_all_pt->Write();
393 hdedx_tof_elec_emc_pt->Write();
394 hdedx_tof_all_emc_pt->Write();
395 hdedx_emc_pt->Write();
396
397 hbetatof_pt->Write();
398 hbetatof_tof_elec_pt->Write();
399 hbetatof_tof_all_pt->Write();
400 hbetatof_tof_elec_emc_pt->Write();
401 hbetatof_tof_all_emc_pt->Write();
402 hbetatof_emc_pt->Write();
403
404 for(int i=0;i<nHistos;i++){
405 hdedx[i]->Write();
406 hdedx_tof_elec[i]->Write();
407 hdedx_tof_all[i]->Write();
408 hdedx_tof_elec_emc[i]->Write();
409 hdedx_tof_all_emc[i]->Write();
410 hdedx_emc[i]->Write();
411 }
412
413 */
414
415 if(simflag==false){
416 fEventStat->Write();
417 fEvent->Write();
418 fdEdXvsPt->Write();
419 fdEdXnSigmaElecvsPt->Write();
420 fTOFbetavsPt->Write();
421 fTOFnSigmaElecvsPt->Write();
422 fdEdXvsPtWithCut->Write();
423 fPtElec[0]->Write();
424 fPtElec[1]->Write();
425 }
426 fNelc_pos->Write();
427 fNelc_all->Write();
428 for(int i=0;i<10;i++){
429 fNelc_pos_cent[i]->Write();
430 fNelc_all_cent[i]->Write();
431 }
432 fNelc_all_pT->Write();
433 //d_tree->Write();
434 hCentrality->Write();
435 hV0AC->Write();
436 hV0AC_Ntrk->Write();
437 hV0AC_NaccTrcklts->Write();
438 for(int j=0;j<11;j++){
439 for(int i=0;i<7;i++){
440 hmasspt[i][j]->Write();
441 hmasspt_weight[i][j]->Write();
442 }
443 }
444
445 //d_ntpair->Write();
446 fout->Close();
447}
448
449//____________________________________________
450void ana_sgl::loop_a_file(char *file){
451
452 TFile *treefile = TFile::Open(file);
453 TDirectory *d = (TDirectory*)treefile->Get("PWG3_dielectron");
454 if(d==0){
455 cout<<" PWG3_dielectron is not found "<<endl;
456 return ;
457 }
458
459 //TTree *tree = (TTree*)d->Get("t");
460 TTree *tree = (TTree*)d->Get("tree_MultiDie_CENT1");
461 if(tree == 0) {
462 cout <<"tree is not found in "<<file<<endl;
463 treefile->Close();
464 return;
465 }
466 cout << file <<" is opened"<<endl;
467 if(simflag==false){
468 //add_histograms(treefile);
469 }
470 Init(tree);
471 Loop();
472 tree->Clear();
473 d->Clear();
474 tree->Delete();
475 d->Delete();
476 delete d;
477 treefile->Close();
478 delete treefile;
479
480
481
482 cout <<"one file processed"<<endl;
483}
484
485//____________________________________________
486void ana_sgl::ana_event(int ientry, int jentry){
487
488 //select trigger class:
489 if(sel_trigger==2){
490 if(kTriggerCent<100){
491 return ;
492 }
493 }else if(sel_trigger==1){
494 if(kTriggerCent%100<10){
495 return ;
496 }
497 }else if(sel_trigger==0){
498 if(kTriggerCent%10!=1){
499 return ;
500 }
501 }
502
503 // if(fkRunNumber>138350){
504 /*
505 if(kMag>0){
506 magnetic_field_mm = false;
507 }else{
508 magnetic_field_mm = true;
509 }
510 */
511 if(fkRunNumber>169591){
512 magnetic_field_mm = false;
513 }else{
514 magnetic_field_mm = true;
515 }
516
517 if(ientry%1000==0){
518 cout<<" event processing "<<ientry<<" / "<<d_evt<<" / "<<d_event<<" : trigger "<<kTriggerCent<<endl;
519 }
520
521 d_nelc = 0;
522 for(int i=0;i<10;i++){
523 nelec_pos[i] = 0;
524 }
525
526 hCentrality->Fill(fkCentrality);
527 hV0AC->Fill(fkV0C, fkV0A);
528 hV0AC_Ntrk->Fill(fkNTrk, fkV0C+fkV0A);
529 hV0AC_NaccTrcklts->Fill(fkNaccTrcklts, fkV0C+fkV0A);
530 fill_to_tree_variables();
531
532 for(int i=0;i<fkNPar;i++){
533
534 if(simflag==false){
535
536 //fdEdXvsPtWithCut->Fill(kPIn[i], kTPCsignal[i]);
537
538 if(GlobalTrackcut(i)==false){
539 continue;
540 }
541 fill_histograms(i);
542 }
543
544
545 fill_to_tree_track_variables(i);
546
547 //if(PairTrackcut(i)==false){
548 //continue;
549 //}
550
551 if(fkCentrality>0 && fkCentrality<10){
552 int iptbin = (int)(kP[i]/0.5);
553 if(iptbin>=10){
554 iptbin=9;
555 }
556 nelec_pos[iptbin]++;
557 }
558
559 if(kCharge[i]>0){
560 etrk e = etrk(
561 fkCentrality, fkXvPrim, fkYvPrim, fkZvPrim,
562 kXv[i], kYv[i], kZv[i],
563 kPx[i], kPy[i], kPz[i], kPt[i],
564 kEta[i], kPhi[i], kTheta[i],
565 kTPCsignal[i], kTOFbeta[i],
566 kE[i], kDeltaPhi[i], kDeltaEta[i],
567 kTPCnSigmaEle[i], kTPCnSigmaPio[i], kTPCnSigmaKao[i], kTPCnSigmaPro[i],
568 kTOFnSigmaEle[i], kTOFnSigmaPio[i], kTOFnSigmaKao[i], kTOFnSigmaPro[i],
569 kITSsignal[i], kNclsITS[i], kNclsTPC[i], kLegDistXY[i], kLegDist[i]
570 );
571 vep_tmp.push_back(e);
572 }else{
573 etrk e = etrk(
574 fkCentrality, fkXvPrim, fkYvPrim, fkZvPrim,
575 kXv[i], kYv[i], kZv[i],
576 kPx[i], kPy[i], kPz[i], kPt[i],
577 kEta[i], kPhi[i], kTheta[i],
578 kTPCsignal[i], kTOFbeta[i],
579 kE[i], kDeltaPhi[i], kDeltaEta[i],
580 kTPCnSigmaEle[i], kTPCnSigmaPio[i], kTPCnSigmaKao[i], kTPCnSigmaPro[i],
581 kTOFnSigmaEle[i], kTOFnSigmaPio[i], kTOFnSigmaKao[i], kTOFnSigmaPro[i],
582 kITSsignal[i], kNclsITS[i], kNclsTPC[i], kLegDistXY[i], kLegDist[i]
583 );
584 vem_tmp.push_back(e);
585 }
586 }
587
588 //////// fill to the tree //////////////////
589 //d_tree->Fill();
590
591
592
593 if(d_conv_flag==true){
594 check_conversion_pairs(vep_tmp, vem_tmp);
595 }
596
597 check_ghost_pairs(vep_tmp);
598 check_ghost_pairs(vem_tmp);
599 randomize_pool(vep_tmp, vem_tmp);
600 if(d_conv_flag==false){
601 check_conversion_pairs(vep, vem);
602 }
603
604 fNelc_pos->Fill(vep.size(), vem.size());
605 fNelc_all->Fill(vep.size()+vem.size());
606
607 if(fkCentrality>0 && fkCentrality<10){
608 for(int i=0;i<10;i++){
609 fNelc_all_pT->Fill(0.25+0.5*i, nelec_pos[i]);
610 }
611 }
612
613
614 calc_pair(vep, vem);
615
616 int icent = (int)(fkCentrality/10.0);
617 int izbin = (int)((fkZvPrim+10)/2.0);
618 if(icent<0) icent=0;
619 if(icent>=NCENT) icent=NCENT-1;
620 if(izbin<0) izbin=0;
621 if(izbin>=NZBIN) izbin=NZBIN-1;
622
623 fNelc_pos_cent[icent]->Fill(vep.size(), vem.size());
624 fNelc_all_cent[icent]->Fill(vep.size()+vem.size());
625
626
627
628 d_vep[d_ibuf[izbin][icent]][izbin][icent].clear();
629 vector<etrk>::iterator iep;
630 for(iep = vep.begin();iep != vep.end();++iep) {
631 d_vep[d_ibuf[izbin][icent]][izbin][icent].push_back(*iep);
632 d_poolp[izbin][icent].push_back(*iep);
633 if(d_poolp[izbin][icent].size()>MAXPOOL) {
634 d_poolp[izbin][icent].pop_front();
635 }
636 }
637 d_vem[d_ibuf[izbin][icent]][izbin][icent].clear();
638 vector<etrk>::iterator iem;
639 for(iem = vem.begin();iem != vem.end();++iem) {
640 d_vem[d_ibuf[izbin][icent]][izbin][icent].push_back(*iem);
641 d_poolm[izbin][icent].push_back(*iem);
642 if(d_poolm[izbin][icent].size()>MAXPOOL) {
643 d_poolm[izbin][icent].pop_front();
644 }
645 }
646 // Update the buffer pointer
647 d_ibuf[izbin][icent]++;
648 if(d_ibuf[izbin][icent]>= NBUF) d_ibuf[izbin][icent]=0;
649
650 ///////////////////////////////////////////
651 vem.clear();
652 vep.clear();
653 vem_tmp.clear();
654 vep_tmp.clear();
655 d_evt ++;
656 d_event ++;
657
658}
659
660
661//____________________________________________
662bool ana_sgl::kTOFcut(int itrk){
663
664 if(kTOFsignal[itrk]!=9999 && kTOFbeta[itrk]>0.3 &&
665 (kTOFnSigmaEle[itrk]<3 && kTOFnSigmaEle[itrk]>-3)
666 /*
667 (kTOFnSigmaKao>3 || kTOFnSigmaKao<-3) &&
668 (kTOFnSigmaPro>3 || kTOFnSigmaPro<-3)
669 */
670
671 ){
672
673 return true;
674 }else{
675 return false;
676 }
677}
678
679//____________________________________________
680bool ana_sgl::GlobalTrackcut(int itrk){
681
682
683 if((
684 (d_flag_kaon_veto == true && (kTPCnSigmaKao[itrk]<d_dedx_kaon_veto_low || kTPCnSigmaKao[itrk]>d_dedx_kaon_veto_high)) ||
685 (d_flag_kaon_veto == false)
686 )
687 && (
688 (d_flag_proton_veto == true && (kTPCnSigmaPro[itrk]<d_dedx_proton_veto_low || kTPCnSigmaPro[itrk]>d_dedx_proton_veto_high)) ||
689 (d_flag_proton_veto == false)
690 )
691 ){
692 fdEdXvsPtWithCut->Fill(kPIn[itrk], kTPCsignal[itrk]);
693 }
694
695 if( kNclsTPC[itrk]>120
696 && kTPCsignal[itrk]>d_tpc_dedx_low && kTPCsignal[itrk]<d_tpc_dedx_high
697 && (
698 (d_flag_tof_cut==true && kTOFnSigmaEle[itrk]>d_tof_low && kTOFnSigmaEle[itrk]<d_tof_high) ||
699 (d_flag_tof_cut==false)
700 )
701 && (
702 (d_flag_pt_cut == true && kPt[itrk]>d_pt_cut_low && kPt[itrk]<d_pt_cut_high) ||
703 (d_flag_pt_cut == false)
704 )
705 && (
706 (d_flag_kaon_veto == true && (kTPCnSigmaKao[itrk]<d_dedx_kaon_veto_low || kTPCnSigmaKao[itrk]>d_dedx_kaon_veto_high)) ||
707 (d_flag_kaon_veto == false)
708 )
709 && (
710 (d_flag_proton_veto == true && (kTPCnSigmaPro[itrk]<d_dedx_proton_veto_low || kTPCnSigmaPro[itrk]>d_dedx_proton_veto_high)) ||
711 (d_flag_proton_veto == false)
712 )
713 ){
714 return true;
715 }else{
716 return false;
717 }
718}
719
720/*
721//____________________________________________
722bool ana_sgl::PairTrackcut(int itrk){
723
724 if( (kTOFnSigmaEle[itrk]<3 && kTOFnSigmaEle[itrk]>-3) &&
725 (kTOFnSigmaKao[itrk]>3||kTOFnSigmaKao[itrk]<-3) &&
726 (kTOFnSigmaPro[itrk]>3||kTOFnSigmaPro[itrk]<-3) //&&
727 //(kTPCnSigmaEle[itrk]-1.65226*exp(-kPIn[itrk]*kPIn[itrk]*1.60890)+0.838)<1 &&
728 //(kTPCnSigmaEle[itrk]-1.65226*exp(-kPIn[itrk]*kPIn[itrk]*1.60890)+0.838)>-1
729 ){
730 return true;
731 }else{
732 return false;
733 }
734
735
736// if(
737// !(kTPCsignal>75-210*(kPIn-0.5) &&
738// kTPCsignal<100-190*(kPIn-0.5)) &&
739// !(kTPCsignal>130-120*(kPIn-0.5) &&
740// kTPCsignal<135-80*(kPIn-0.5)) &&
741// (kTPCnSigmaEle-1.65226*exp(-kPIn*kPIn*1.60890)+0.838)<1 &&
742// (kTPCnSigmaEle-1.65226*exp(-kPIn*kPIn*1.60890)+0.838)>-1
743// ){
744// return true;
745// }else{
746// return false;
747// }
748
749
750}
751*/
752
753//____________________________________________
754void ana_sgl::fill_histograms(int itrk){
755 /*
756 hdedx_pt->Fill(kPIn[itrk], kTPCsignal[itrk]);
757 hbetatof_pt->Fill(kPIn[itrk], kTOFbeta[itrk]);
758
759 if(kTOFcut(itrk)==true){
760 hdedx_tof_pt->Fill(kPIn[itrk], kTPCsignal[itrk]);
761 hbetatof_tof_pt->Fill(kPIn[itrk], kTOFbeta[itrk]);
762 }
763
764 int iptbin = (int)((kPIn[itrk])/fBinWidth);
765 if(iptbin>=0 && iptbin<nHistos){
766 hdedx[iptbin]->Fill(kTPCsignal[itrk]);
767 if(kTOFcut(itrk)==true)hdedx_tof[iptbin]->Fill(kTPCsignal[itrk]);
768 }
769 */
770
771 if(kCharge[itrk]>0){
772 fPtElec[1]->Fill(kPIn[itrk]);
773 }else{
774 fPtElec[0]->Fill(kPIn[itrk]);
775 }
776
777 hdedx_pt->Fill(kPIn[itrk], kTPCsignal[itrk]);
778 hbetatof_pt->Fill(kPIn[itrk], kTOFbeta[itrk]);
779
780 if(kTOFnSigmaEle[itrk]>-3 && kTOFnSigmaEle[itrk]<3){
781 hdedx_tof_elec_pt->Fill(kPIn[itrk], kTPCsignal[itrk]);
782 hbetatof_tof_elec_pt->Fill(kPIn[itrk], kTOFbeta[itrk]);
783
784 if(kE[itrk]/kPIn[itrk]>0.7 && kE[itrk]/kPIn[itrk]<1.3){
785 hdedx_tof_elec_emc_pt->Fill(kPIn[itrk], kTPCsignal[itrk]);
786 hbetatof_emc_pt->Fill(kPIn[itrk], kTOFbeta[itrk]);
787 }
788
789 if( (kTOFnSigmaKao[itrk]>3 || kTOFnSigmaKao[itrk]<-3) &&
790 (kTOFnSigmaPro[itrk]>3 || kTOFnSigmaPro[itrk]<-3)
791 ){
792 hdedx_tof_all_pt->Fill(kPIn[itrk], kTPCsignal[itrk]);
793 hbetatof_tof_all_pt->Fill(kPIn[itrk], kTPCsignal[itrk]);
794 if(kE[itrk]/kPIn[itrk]>0.7 && kE[itrk]/kPIn[itrk]<1.3){
795 hdedx_tof_all_emc_pt->Fill(kPIn[itrk], kTPCsignal[itrk]);
796 hbetatof_tof_all_emc_pt->Fill(kPIn[itrk], kTPCsignal[itrk]);
797 }
798 }
799 }
800
801 if(kE[itrk]/kPIn[itrk]>0.7 && kE[itrk]/kPIn[itrk]<1.3){
802 hdedx_emc_pt->Fill(kPIn[itrk], kTPCsignal[itrk]);
803 hbetatof_emc_pt->Fill(kPIn[itrk], kTPCsignal[itrk]);
804 }
805
806
807
808
809 int iptbin = (int)((kPIn[itrk])/fBinWidth);
810 if(iptbin>=0 && iptbin<nHistos){
811 hdedx[iptbin]->Fill(kTPCsignal[itrk]);
812 //if(kTOFcut(itrk)==true)hdedx_tof[iptbin]->Fill(kTPCsignal[itrk]);
813
814 if(kTOFnSigmaEle[itrk]>-3 && kTOFnSigmaEle[itrk]<3){
815 hdedx_tof_elec[iptbin]->Fill(kTPCsignal[itrk]);
816
817 if(kE[itrk]/kPIn[itrk]>0.7 && kE[itrk]/kPIn[itrk]<1.3){
818 hdedx_tof_elec_emc[iptbin]->Fill(kTPCsignal[itrk]);
819 }
820 if( (kTOFnSigmaKao[itrk]>3 || kTOFnSigmaKao[itrk]<-3) &&
821 (kTOFnSigmaPro[itrk]>3 || kTOFnSigmaPro[itrk]<-3)
822 ){
823 hdedx_tof_all[iptbin]->Fill(kTPCsignal[itrk]);
824 if(kE[itrk]/kPIn[itrk]>0.7 && kE[itrk]/kPIn[itrk]<1.3){
825 hdedx_tof_all_emc[iptbin]->Fill(kTPCsignal[itrk]);
826 }
827 }
828 }
829 if(kE[itrk]/kPIn[itrk]>0.7 && kE[itrk]/kPIn[itrk]<1.3){
830 hdedx_emc[iptbin]->Fill(kTPCsignal[itrk]);
831 }
832 }
833
834}
835
836//____________________________________________
837void ana_sgl::add_histograms(TFile *fin){
838
839 TDirectory *d = (TDirectory*)fin->Get("PWG3_dielectron");
840 if(d==0){
841 cout<<" PWG3_dielectron is not found "<<endl;
842 return ;
843 }
844 fEventStat->Add((TH1D*)d->Get("hEventStat_MultiDie_CENT1"));
845 TList *list = (TList*)d->Get("jpsi_QA_CENT1");
846 TList *listQA = (TList*)list->FindObject("QAElectron");
847 fEvent->Add((TH1D*)listQA->FindObject("Event"));
848 fdEdXvsPt->Add((TH1D*)listQA->FindObject("dEdXvsPt"));
849 fdEdXnSigmaElecvsPt->Add((TH1D*)listQA->FindObject("fdEdXnSigmaElecvsPt"));
850 fTOFbetavsPt->Add((TH1D*)listQA->FindObject("fTOFbetavsPt"));
851 fTOFnSigmaElecvsPt->Add((TH1D*)listQA->FindObject("fTOFnSigmaElecvsPt"));
852
853 cout<<" ana_sgl::add_histograms "<<fin->GetName()<<" done "<<endl;
854
855}
856
857//_____________________________________________
858void ana_sgl::fill_to_tree_variables(void){
859
860 d_cent = fkCentrality;
861 d_ntrk= fkNTrk;
862 d_xvprim= fkXvPrim;
863 d_yvprim= fkYvPrim;
864 d_zvprim= fkZvPrim;
865 d_nacctrklets= fkNaccTrcklts;
866 d_xres= fkXRes;
867 d_yres= fkYRes;
868 d_zres= fkZRes;
869
870}
871//_____________________________________________
872void ana_sgl::fill_to_tree_track_variables(int itrk){
873
874
875 d_px[d_nelc]= kPx[itrk];
876 d_py[d_nelc]= kPy[itrk];
877 d_pz[d_nelc]= kPz[itrk];
878 d_p[d_nelc]= kP[itrk];
879 d_pt[d_nelc]= kPt[itrk];
880 d_xv[d_nelc]= kXv[itrk];
881 d_yv[d_nelc]= kYv[itrk];
882 d_zv[d_nelc]= kZv[itrk];
883 d_phi[d_nelc]= kPhi[itrk];
884 d_theta[d_nelc]= kTheta[itrk];
885 d_eta[d_nelc]= kEta[itrk];
886 d_c[d_nelc]= kCharge[itrk];
887 d_nclusITS[d_nelc]= kNclsITS[itrk];
888 d_nclusTPC[d_nelc]= kNclsTPC[itrk];
889 d_nclusTPCiter[d_nelc]= kNclsTPCiter1[itrk];
890 d_nfclusTPC[d_nelc]= kNFclsTPC[itrk];
891 d_nfclusTPCr[d_nelc]= kNFclsTPCr[itrk];
892 d_nfclusTPCrFrac[d_nelc]= kNFclsTPCrFrac[itrk];
893 d_TPCsignalN[d_nelc]= kTPCsignalN[itrk];
894 d_TPCsignalNfrac[d_nelc]= kTPCsignalNfrac[itrk];
895 d_TPCchi2cl[d_nelc]= kTPCchi2Cl[itrk];
896 d_trkstat[d_nelc]= kTrackStatus[itrk];
897 d_nclsTRD[d_nelc]= kNclsTRD[itrk];
898 d_TRDntracklets[d_nelc]= kTRDntracklets[itrk];
899 d_TRDpidquality[d_nelc]= kTRDpidQuality[itrk];
900 d_TRDprobEle[d_nelc]= kTRDprobEle[itrk];
901 d_TRDprobPio[d_nelc]= kTRDprobPio[itrk];
902 d_impactXY[d_nelc]= kImpactParXY[itrk];
903 d_impactZ[d_nelc]= kImpactParZ[itrk];
904 d_tracklength[d_nelc]= kTrackLength[itrk];
905 d_ITSsignal[d_nelc]= kITSsignal[itrk];
906 d_ITSnsigmaEle[d_nelc]= kITSnSigmaEle[itrk];
907 d_ITSnsigmaPio[d_nelc]= kITSnSigmaPio[itrk];
908 d_ITSnsigmaMuo[d_nelc]= kITSnSigmaMuo[itrk];
909 d_ITSnsigmaKao[d_nelc]= kITSnSigmaKao[itrk];
910 d_ITSnsigmaPro[d_nelc]= kITSnSigmaPro[itrk];
911 d_PIn[d_nelc]= kPIn[itrk];
912 d_TPCsignal[d_nelc]= kTPCsignal[itrk];
913 d_TOFsignal[d_nelc]= kTOFsignal[itrk];
914 d_TOFbeta[d_nelc]= kTOFbeta[itrk];
915 d_TPCnSigmaEle[d_nelc]= kTPCnSigmaEle[itrk];
916 d_TPCnSigmaPio[d_nelc]= kTPCnSigmaPio[itrk];
917 d_TPCnSigmaMuo[d_nelc]= kTPCnSigmaMuo[itrk];
918 d_TPCnSigmaKao[d_nelc]= kTPCnSigmaKao[itrk];
919 d_TPCnSigmaPro[d_nelc]= kTPCnSigmaPro[itrk];
920 d_TOFnSigmaEle[d_nelc]= kTOFnSigmaEle[itrk];
921 d_TOFnSigmaPio[d_nelc]= kTOFnSigmaPio[itrk];
922 d_TOFnSigmaMuo[d_nelc]= kTOFnSigmaMuo[itrk];
923 d_TOFnSigmaKao[d_nelc]= kTOFnSigmaKao[itrk];
924 d_TOFnSigmaPro[d_nelc]= kTOFnSigmaPro[itrk];
925
926 d_chi2ndf[d_nelc]= kChi2NDF[itrk];
927 d_E[d_nelc] = kE[itrk];
928 d_dphi[d_nelc] = kDeltaPhi[itrk];
929 d_deta[d_nelc] = kDeltaEta[itrk];
930
931 d_nelc++;
932
933}
934
935//____________________________________________________________________
936void ana_sgl::randomize_pool(vector<etrk> e1, vector<etrk> e2){
937
938 int size1 = e1.size();
939 int used_index[1000];
940 for(int i=0;i<1000;i++){
941 used_index[i] = -1;
942 }
943 for(int i=0;i<size1;i++){
944 used_index[i] = 0;
945 }
946
947 for(unsigned int i=0;i<size1;i++){
948 int j = (int)(gRandom->Uniform(0,size1));
949 while(used_index[j]==1){
950 j = (int)(gRandom->Uniform(0,size1));
951 }
952 if( (e1[j].ghost_flag==1) &&
953 (
954 (d_conv_flag==true && e1[j].conv_flag==1) ||
955 (d_conv_flag==false)
956 )
957 ){
958 vep.push_back(e1[j]);
959 }
960 used_index[j] = 1;
961 }
962
963
964 int size2 = e2.size();
965 for(int i=0;i<1000;i++){
966 used_index[i] = -1;
967 }
968 for(int i=0;i<size2;i++){
969 used_index[i] = 0;
970 }
971
972 for(unsigned int i=0;i<size2;i++){
973 int j = (int)(gRandom->Uniform(0,size2));
974 while(used_index[j]==1){
975 j = (int)(gRandom->Uniform(0,size2));
976 }
977 if( (e2[j].ghost_flag==1) &&
978 (
979 (d_conv_flag==true && e2[j].conv_flag==1) ||
980 (d_conv_flag==false)
981 )
982 ){
983 vem.push_back(e2[j]);
984 }
985 used_index[j] = 1;
986 }
987}
988
989//____________________________________________________________________
990void ana_sgl::calc_pair(vector<etrk> vep, vector<etrk> vem){
991
992 //vector<etrk>::iterator iep, iem;
993
994 vector<etrk>::iterator iep;
995 vector<etrk>::iterator iem;
996
997 //cout<<vep.size()<<" "<<vem.size()<<endl;
998
999 ///unlike pairs
1000 for(iep=vep.begin(); iep!=vep.end(); ++iep){
1001 for(iem=vem.begin(); iem!=vem.end(); ++iem){
1002 if(PairTrackcut(iep, iem)==false) continue;
1003 fill_pair(iep, iem, 0);
1004 }
1005 }
1006 for(iep=vep.begin(); iep!=vep.end(); ++iep){
1007 vector<etrk>::iterator iep2=iep;
1008 ++iep2;
1009 for(iem=iep2; iem!=vep.end(); ++iem){
1010 if(PairTrackcut(iep, iem)==false) continue;
1011 fill_pair(iep, iem, 1);
1012 }
1013 }
1014
1015 for(iep=vem.begin(); iep!=vem.end(); ++iep){
1016 vector<etrk>::iterator iep2=iep;
1017 ++iep2;
1018 for(iem=iep2; iem!=vem.end(); ++iem){
1019 if(PairTrackcut(iep, iem)==false) continue;
1020 fill_pair(iep, iem, 2);
1021 }
1022 }
1023
1024 int icent = (int)(fkCentrality/10.0);
1025 int izbin = (int)((fkZvPrim+10)/2.0);
1026 if(icent<0) icent=0;
1027 if(icent>=NCENT) icent=NCENT-1;
1028 if(izbin<0) izbin=0;
1029 if(izbin>=NZBIN) izbin=NZBIN-1;
1030
1031
1032 int nmixed;
1033 if(vep.size()>0) {
1034 //
1035 // Now mixed event for +- pairs
1036 //
1037 nmixed = 0;
1038 for(int ibuf=0;(nmixed<NMix);ibuf++) {
1039 int ntry = 0;
1040 while(ntry<MAX_TRY) {
1041 reshuffle_buffer(d_vem[ibuf][izbin][icent],d_poolm[izbin][icent]);
1042 ntry++;
1043 }
1044 for(iep=vep.begin(); iep!=vep.end(); ++iep){
1045 for(iem=d_vem[ibuf][izbin][icent].begin();
1046 iem!=d_vem[ibuf][izbin][icent].end(); ++iem){
1047 if(PairTrackcut(iep, iem)==false) continue;
1048 fill_pair(iep,iem,3);
1049 }
1050 }
1051 ++nmixed;
1052 }//for(ibuf)
1053 }
1054
1055 if(vem.size()>0) {
1056 //
1057 // Now mixed event for +- pairs
1058 //
1059 nmixed = 0;
1060 for(int ibuf=0;(nmixed<NMix);ibuf++) {
1061 int ntry = 0;
1062 while(ntry<MAX_TRY) {
1063 reshuffle_buffer(d_vep[ibuf][izbin][icent],d_poolp[izbin][icent]);
1064 ntry++;
1065 }
1066 for(iem=vem.begin(); iem!=vem.end(); ++iem){
1067 for(iep=d_vep[ibuf][izbin][icent].begin();
1068 iep!=d_vep[ibuf][izbin][icent].end(); ++iep){
1069 if(PairTrackcut(iep, iem)==false) continue;
1070 fill_pair(iep,iem,4);
1071 }
1072 }
1073 ++nmixed;
1074 }//for(ibuf)
1075 }
1076
1077
1078 if(vep.size()>0) {
1079 //
1080 // Now mixed event for ++ pairs
1081 //
1082 nmixed = 0;
1083 for(int ibuf=0;(nmixed<NMix);ibuf++) {
1084 int ntry = 0;
1085 while(ntry<MAX_TRY) {
1086 reshuffle_buffer(d_vep[ibuf][izbin][icent],d_poolp[izbin][icent]);
1087 ntry++;
1088 }
1089 for(iep=vep.begin(); iep!=vep.end(); ++iep){
1090 for(iem=d_vep[ibuf][izbin][icent].begin();
1091 iem!=d_vep[ibuf][izbin][icent].end(); ++iem){
1092 if(PairTrackcut(iep, iem)==false) continue;
1093 fill_pair(iep,iem,5);
1094 }
1095 }
1096 ++nmixed;
1097 }//for(ibuf)
1098 }
1099
1100 if(vem.size()>0) {
1101 //
1102 // Now mixed event for +- pairs
1103 //
1104 nmixed = 0;
1105 for(int ibuf=0;(nmixed<NMix);ibuf++) {
1106 int ntry = 0;
1107 while(ntry<MAX_TRY) {
1108 reshuffle_buffer(d_vem[ibuf][izbin][icent],d_poolm[izbin][icent]);
1109 ntry++;
1110 }
1111 for(iem=vem.begin(); iem!=vem.end(); ++iem){
1112 for(iep=d_vem[ibuf][izbin][icent].begin();
1113 iep!=d_vem[ibuf][izbin][icent].end(); ++iep){
1114 if(PairTrackcut(iep, iem)==false) continue;
1115 fill_pair(iep,iem,6);
1116 }
1117 }
1118 ++nmixed;
1119 }//for(ibuf)
1120 }
1121}
1122
1123
1124//___________________________________________________________________________
1125//void ana_sgl::fill_pair(etrk* iep, etrk* iem, int type){
1126//void ana_sgl::fill_pair(etrk iep, etrk iem, int type){
1127void ana_sgl::fill_pair(vector<etrk>::iterator iep, vector<etrk>::iterator iem, int type){
1128
1129
1130 d_pairtype = type;
1131
1132 calc_vars(iep, iem, d_mass, d_phiv, d_pxpair, d_pypair, d_pzpair,
1133 d_ptpair, d_epair, d_phipair, d_etapair, d_cos, d_psi);
1134
1135 if(type==0||type==1||type==2||type==3||type==5){
1136 d_centrality = iep->cent;
1137 d_prim_xv = iep->pxv;
1138 d_prim_yv = iep->pyv;
1139 d_prim_zv = iep->pzv;
1140 }else if(type==4 || type==6){
1141 d_centrality = iem->cent;
1142 d_prim_xv = iem->pxv;
1143 d_prim_yv = iem->pyv;
1144 d_prim_zv = iem->pzv;
1145
1146 }
1147
1148
1149 //cout<<iep->px<<" "<<iem->px<<" "<<d_centrality<<endl;
1150
1151 d_cent1 = iep->cent;
1152 d_xv1 = iep->xv;
1153 d_yv1 = iep->yv;
1154 d_zv1 = iep->zv;
1155 d_px1 = iep->px;
1156 d_py1 = iep->py;
1157 d_pz1 = iep->pz;
1158 d_pt1 = iep->pt;
1159 d_eta1 = iep->eta;
1160 d_phi1 = iep->phi;
1161 d_theta1 = iep->theta;
1162 d_tpc1 = iep->tpc;
1163 d_ntpc_ele1 = iep->ntpc_ele;
1164 d_ntpc_pio1 = iep->ntpc_pio;
1165 d_ntpc_kao1 = iep->ntpc_kao;
1166 d_ntpc_pro1 = iep->ntpc_pro;
1167 d_ntof_ele1 = iep->ntof_ele;
1168 d_ntof_pio1 = iep->ntof_pio;
1169 d_ntof_kao1 = iep->ntof_kao;
1170 d_ntof_pro1 = iep->ntof_pro;
1171 d_its1 = iep->its;
1172 d_nits1 = iep->nits;
1173 d_ntpc1 = iep->ntpc;
1174 d_e1 = iep->e;
1175 d_dphi1 = iep->dphi;
1176 d_deta1 = iep->deta;
1177 d_dcaxy1 = iep->dcaxy;
1178 d_dcaz1 = iep->dcaz;
1179 d_conv1 = iep->conv_flag;
1180
1181 d_cent2 = iem->cent;
1182 d_xv2 = iem->xv;
1183 d_yv2 = iem->yv;
1184 d_zv2 = iem->zv;
1185 d_px2 = iem->px;
1186 d_py2 = iem->py;
1187 d_pz2 = iem->pz;
1188 d_pt2 = iem->pt;
1189 d_eta2 = iem->eta;
1190 d_phi2 = iem->phi;
1191 d_theta2 = iem->theta;
1192 d_tpc2 = iem->tpc;
1193 d_ntpc_ele2 = iem->ntpc_ele;
1194 d_ntpc_pio2 = iem->ntpc_pio;
1195 d_ntpc_kao2 = iem->ntpc_kao;
1196 d_ntpc_pro2 = iem->ntpc_pro;
1197 d_ntof_ele2 = iem->ntof_ele;
1198 d_ntof_pio2 = iem->ntof_pio;
1199 d_ntof_kao2 = iem->ntof_kao;
1200 d_ntof_pro2 = iem->ntof_pro;
1201 d_its2 = iem->its;
1202 d_nits2 = iem->nits;
1203 d_ntpc2 = iem->ntpc;
1204 d_e2 = iem->e;
1205 d_dphi2 = iem->dphi;
1206 d_deta2 = iem->deta;
1207 d_dcaxy2 = iem->dcaxy;
1208 d_dcaz2 = iem->dcaz;
1209 d_conv2 = iem->conv_flag;
1210
1211 d_run = fkRunNumber;
1212 // d_event = d_evt;
1213
1214
1215 int icent = (int)(fkCentrality/10.0);
1216 if(icent<0) icent=0;
1217 if(icent>=NCENT) icent=NCENT-1;
1218 if(pair_cut()==true){
1219 hmasspt[type][icent]->Fill(d_mass, d_ptpair);
1220 hmasspt[type][10]->Fill(d_mass, d_ptpair);
1221 }
1222
1223 ////////////// pt weighting for mixed event
1224 float weight = 1;
1225 float k = 10000;
1226 if(type==0 || type==1 || type==2){
1227 weight = 1;
1228 }else if(type==3 || type==5 || type==6){
1229 k = 18.7*exp(-2.4*d_pt2)+1.24;
1230 weight = 1+1/k;
1231 }else if(type==4){
1232 k = 18.7*exp(-2.4*d_pt1)+1.24;
1233 weight = 1+1/k;
1234 }
1235 if(pair_cut()==true){
1236 hmasspt_weight[type][icent]->Fill(d_mass, d_ptpair, weight);
1237 hmasspt_weight[type][10]->Fill(d_mass, d_ptpair, weight);
1238 }
1239
1240
1241 //d_ntpair->Fill();
1242
1243}
1244
1245//____________________________________________
1246bool ana_sgl::PairTrackcut(vector<etrk>::iterator e1, vector<etrk>::iterator e2){
1247 /*
1248 double p1 = sqrt(pow(e1.px,2)+
1249 pow(e1.py,2)+
1250 pow(e1.pz,2));
1251
1252 double p2 = sqrt(pow(e2.px,2)+
1253 pow(e2.py,2)+
1254 pow(e2.pz,2));
1255
1256 if(
1257 (e1.e/p1>0.7 && e1.e/p1<1.3) ||
1258 (e2.e/p1>0.7 && e2.e/p2<1.3)
1259 ){
1260 return true;
1261 }else{
1262 return false;
1263 }
1264o */
1265 return true;
1266
1267}
1268
1269//____________________________________________
1270void ana_sgl::check_conversion_pairs(vector<etrk> &e1, vector<etrk> &e2){
1271 vector<etrk>::iterator iep;
1272 vector<etrk>::iterator iem;
1273 bool reject = false;
1274 if(e1.size()>0 && e2.size()>0){
1275 for(iep = e1.begin(); iep != e1.end(); ++iep){
1276 reject = false;
1277 for(iem = e2.begin(); iem != e2.end(); ++iem){
1278 double mass, phiv, px, py, pz, pt, e, phi, eta, cos, psi;
1279 calc_vars(iep, iem, mass, phiv, px, py, pz, pt, e, phi, eta, cos, psi);
1280 if(magnetic_field_mm==true){ //pp
1281 if(phiv<0.6 && iep->phi-iem->phi<0){ // this depends on the magntic field
1282 reject = true;
1283 iem->conv_flag = 0;
1284 }
1285 }else{
1286 if(phiv>acos(-1.0)-0.6 && iep->phi-iem->phi>0){ // this depends on the magntic field
1287 reject = true;
1288 iem->conv_flag = 0;
1289 }
1290 }
1291 }
1292 if(reject==true) iep->conv_flag=0;
1293 }
1294 }
1295}
1296
1297//____________________________________________
1298void ana_sgl::check_ghost_pairs(vector<etrk> &e1){
1299 vector<etrk>::iterator iep;
1300 vector<etrk>::iterator iem;
1301 bool reject = false;
1302 if(e1.size()>1){
1303 for(iep = e1.begin(); iep != e1.end(); ++iep){
1304 reject = false;
1305 vector<etrk>::iterator iep2=iep;
1306 ++iep2;
1307 for(iem = iep2; iem != e1.end(); ++iem){
1308 double mass, phiv, px, py, pz, pt, e, phi, eta, cos, psi;
1309 calc_vars(iep, iem, mass, phiv, px, py, pz, pt, e, phi, eta, cos, psi);
1310 if(mass<0.01){
1311 reject = true;
1312 iem->ghost_flag = 0;
1313 }
1314 }
1315 if(reject==true) iep->ghost_flag=0;
1316 }
1317 }
1318}
1319
1320//____________________________________________
1321//void ana_sgl::calc_vars(etrk iep, etrk iem, double &mass, double &phiv, double &px, double &py, double&pz,
1322void ana_sgl::calc_vars(vector<etrk>::iterator iep, vector<etrk>::iterator iem, double &mass, double &phiv, double &px, double &py, double&pz,
1323 double &pt, double &e, double &phi, double &eta, double &cos, double &psi){
1324
1325 px = iep->px+iem->px;
1326 py = iep->py+iem->py;
1327 pz = iep->pz+iem->pz;
1328 pt = sqrt(px*px+py*py);
1329 double d_ppair = sqrt(pt*pt+pz*pz);
1330 static const double me=0.0005109989;
1331 e = sqrt(me*me+iep->px*iep->px+iep->py*iep->py+iep->pz*iep->pz)
1332 + sqrt(me*me+iem->px*iem->px+iem->py*iem->py+iem->pz*iem->pz);
1333
1334 mass = e*e-px*px-py*py-pz*pz;
1335 if(mass<0){
1336 mass = mass;
1337 }else{
1338 mass = sqrt(mass);
1339 }
1340
1341
1342
1343 phi = atan2(py, px);
1344 eta = -0.5*TMath::Log((d_ppair+pz)/(d_ppair-pz));
1345 double p1 = sqrt(pow(iep->px,2)+pow(iep->py,2)+pow(iep->pz,2));
1346 double p2 = sqrt(pow(iem->px,2)+pow(iem->py,2)+pow(iem->pz,2));
1347 cos = acos((iep->px*iem->px+iep->py*iem->py+iep->pz*iem->pz)/(p1*p2));
1348
1349
1350 double dtheta = iep->theta-iem->theta;
1351 psi = asin(dtheta/cos);
1352
1353
1354 //unit vector of (pep+pem)
1355 float pl = d_ppair;
1356 float ux = px/pl;
1357 float uy = py/pl;
1358 float uz = pz/pl;
1359 float ax = uy/sqrt(ux*ux+uy*uy);
1360 float ay = -ux/sqrt(ux*ux+uy*uy);
1361
1362 //momentum of e+ and e- in (ax,ay,az) axis. Note that az=0 by
1363 //definition.
1364 float ptep = iep->px*ax + iep->py*ay;
1365 float ptem = iem->px*ax + iem->py*ay;
1366
1367 float pxep = iep->px;
1368 float pyep = iep->py;
1369 float pzep = iep->pz;
1370 float pxem = iem->px;
1371 float pyem = iem->py;
1372 float pzem = iem->pz;
1373
1374
1375 //vector product of pep X pem
1376 float vpx = pyep*pzem - pzep*pyem;
1377 float vpy = pzep*pxem - pxep*pzem;
1378 float vpz = pxep*pyem - pyep*pxem;
1379 float vp = sqrt(vpx*vpx+vpy*vpy+vpz*vpz);
1380 float thev = acos(vpz/vp);
1381
1382 //unit vector of pep X pem
1383 float vx = vpx/vp;
1384 float vy = vpy/vp;
1385 float vz = vpz/vp;
1386
1387 //The third axis defined by vector product (ux,uy,uz)X(vx,vy,vz)
1388 float wx = uy*vz - uz*vy;
1389 float wy = uz*vx - ux*vz;
1390 float wz = ux*vy - uy*vx;
1391 float wl = sqrt(wx*wx+wy*wy+wz*wz);
1392 // by construction, (wx,wy,wz) must be a unit vector.
1393 if(fabs(wl - 1.0) > 0.00001) cout << "Calculation error in W vector"<<endl;
1394 // measure angle between (wx,wy,wz) and (ax,ay,0). The angle between them
1395 // should be small if the pair is conversion
1396 //
1397 float cosPhiV = wx*ax + wy*ay;
1398 phiv = acos(cosPhiV);
1399
1400}
1401
1402//____________________________________________
1403bool ana_sgl::pair_cut(void){
1404 bool ret = true;
1405
1406
1407 if(d_flag_phiv==true){
1408 if(d_run>169591 && d_phiv>acos(-1.0)-d_phiv_cut){
1409 ret = false;
1410 }
1411 if(d_run<169591 && d_phiv<d_phiv_cut){
1412 ret = false;
1413 }
1414 }
1415
1416
1417 if(d_flag_emc_cut==true){
1418 if( !(
1419 (d_e1/d_pt1>d_emc_low && d_e1/d_pt1<d_emc_high) ||
1420 (d_e2/d_pt2>d_emc_low && d_e2/d_pt2<d_emc_high)
1421 )
1422 ){
1423 ret = false;
1424 }
1425 }
1426
1427
1428 if(d_flag_pt_cut==true){
1429 if(!(d_pt1>d_pt_cut_low && d_pt2>d_pt_cut_low &&
1430 d_pt1<d_pt_cut_high && d_pt2<d_pt_cut_high)
1431 ){
1432 ret = false;
1433 }
1434 }
1435
1436 return ret;
1437
1438}
1439
1440//____________________________________________
1441void ana_sgl::print_cuts(void){
1442
1443 cout<<" ********** lists of cuts ********** "<<endl;
1444 cout<<d_tpc_dedx_low<<" < TPC dE/dx < "<<d_tpc_dedx_high<<endl;
1445
1446
1447 if(d_flag_kaon_veto==true){
1448 cout<<d_dedx_kaon_veto_low<<" < TPC veto for Kaon < "<<d_dedx_kaon_veto_high<<endl;
1449 }else{
1450 cout<<" No TPC Kaon Veto "<<endl;
1451 }
1452
1453 if(d_flag_proton_veto==true){
1454 cout<<d_dedx_proton_veto_low<<" < TPC veto for proton < "<<d_dedx_proton_veto_high<<endl;
1455 }else{
1456 cout<<" No TPC Proton Veto "<<endl;
1457 }
1458
1459 if(d_flag_tof_cut==true){
1460 cout<<d_tof_low<<" < kTOFnSigmaEle < "<<d_tof_high<<endl;
1461 }else{
1462 cout<<" No TOF cuts "<<endl;
1463 }
1464 if(d_flag_emc_cut==true){
1465 cout<<d_emc_low<<" < EMC E/p (or for pairs) < "<<d_emc_high<<endl;
1466 }else{
1467 cout<<" No EMC cuts "<<endl;
1468 }
1469 if(d_flag_phiv==true){
1470 cout<<" Phiv cuts "<<d_phiv_cut<<endl;
1471 }else{
1472 cout<<" No phiv cuts "<<endl;
1473 }
1474
1475 if(d_flag_pt_cut==true){
1476 cout<<d_pt_cut_low<<" < pT of electrons < "<<d_pt_cut_high<<endl;
1477 }else{
1478 cout<<" No electron pt cuts "<<endl;
1479 }
1480
1481 if(d_conv_flag==true){
1482 cout<<" remove converson pairs from electron/positron lists "<<endl;
1483 }else{
1484 cout<<" conversion candidates are in the pool."<<endl;
1485 }
1486 cout<<" ********** end of lists of cuts ********** "<<endl;
1487
1488 if(sel_trigger==0){
1489 cout<<" MB "<<endl;
1490 }else if(sel_trigger==1){
1491 cout<<" SemiCentral "<<endl;
1492 }else if(sel_trigger==2){
1493 cout<<" Central "<<endl;
1494 }
1495
1496}
1497
1498