]>
Commit | Line | Data |
---|---|---|
04c118da | 1 | #include "TChain.h" |
2 | #include "TTree.h" | |
3 | #include "TObjArray.h" | |
4 | #include "TF1.h" | |
5 | #include "TFile.h" | |
6 | #include "TH1F.h" | |
7 | #include "TH2F.h" | |
8 | #include "TH2I.h" | |
9 | #include "TH3F.h" | |
10 | #include "TParticle.h" | |
11 | #include "TCanvas.h" | |
12 | #include "TStyle.h" | |
13 | #include "TRandom.h" | |
14 | #include "TROOT.h" | |
15 | #include "THashList.h" | |
16 | ||
17 | #include "AliAnalysisManager.h" | |
18 | #include "AliMCEventHandler.h" | |
19 | #include "AliMCEvent.h" | |
20 | #include "AliStack.h" | |
21 | #include "AliAnalysisTaskSE.h" | |
22 | #include "AliPHOSHijingEfficiency.h" | |
23 | #include "AliCaloPhoton.h" | |
24 | #include "AliPHOSGeometry.h" | |
25 | #include "AliPHOSEsdCluster.h" | |
26 | #include "AliPHOSCalibData.h" | |
27 | #include "AliESDEvent.h" | |
28 | #include "AliESDCaloCells.h" | |
29 | #include "AliESDVertex.h" | |
30 | #include "AliESDtrackCuts.h" | |
31 | #include "AliLog.h" | |
32 | #include "AliPID.h" | |
33 | #include "AliCDBManager.h" | |
34 | #include "AliCentrality.h" | |
35 | #include "AliESDtrackCuts.h" | |
36 | #include "AliEventplane.h" | |
37 | #include "TProfile.h" | |
38 | #include "AliOADBContainer.h" | |
39 | ||
40 | // Calculates pi0 and photon efficiencies using Hijing events | |
41 | // Also calculates pi0 contamination: non-vertex pi0s | |
42 | // And photon contamination: | |
43 | // - off-vertex photons | |
44 | // - misidentified photons | |
45 | // Authors: Dmitri Peressounko | |
46 | // Date : 05.02.2013 | |
47 | ||
48 | ClassImp(AliPHOSHijingEfficiency) | |
49 | ||
50 | //________________________________________________________________________ | |
51 | Double_t rnlin(Double_t x) | |
52 | { | |
53 | //This is standard PHOS non-linearity used in reconstruction | |
54 | //and re-calibration by 2.2% | |
55 | return 1.022*(0.0241+1.0504*x+0.000249*x*x) ; | |
56 | ||
57 | } | |
58 | ||
59 | //________________________________________________________________________ | |
60 | AliPHOSHijingEfficiency::AliPHOSHijingEfficiency(const char *name) | |
61 | : AliAnalysisTaskSE(name), | |
62 | fStack(0x0), | |
63 | fOutputContainer(0x0), | |
64 | fPHOSEvent(0x0), | |
65 | fPHOSCalibData(0x0), | |
66 | fRP(0.),fRPV0A(0.),fRPV0C(0.),fHaveTPCRP(0), | |
67 | fRunNumber(0), | |
68 | fCentrality(0.), | |
69 | fCenBin(0), | |
70 | fPHOSGeo(0), | |
71 | fEventCounter(0) | |
72 | { | |
73 | // Constructor | |
74 | for(Int_t i=0;i<1;i++){ | |
75 | for(Int_t j=0;j<10;j++) | |
76 | for(Int_t k=0;k<11;k++) | |
77 | fPHOSEvents[i][j][k]=0 ; | |
78 | } | |
79 | ||
80 | // Output slots #0 write into a TH1 container | |
81 | DefineOutput(1,TList::Class()); | |
82 | ||
83 | // Set bad channel map | |
84 | char key[55] ; | |
85 | for(Int_t i=0; i<6; i++){ | |
86 | sprintf(key,"PHOS_BadMap_mod%d",i) ; | |
87 | fPHOSBadMap[i]=new TH2I(key,"Bad Modules map",64,0.,64.,56,0.,56.) ; | |
88 | } | |
89 | ||
90 | ||
91 | } | |
92 | ||
93 | //________________________________________________________________________ | |
94 | void AliPHOSHijingEfficiency::UserCreateOutputObjects() | |
95 | { | |
96 | ||
97 | ||
98 | // Create histograms | |
99 | // Called once | |
100 | const Int_t nRuns=200 ; | |
101 | ||
102 | // ESD histograms | |
103 | if(fOutputContainer != NULL){ | |
104 | delete fOutputContainer; | |
105 | } | |
106 | fOutputContainer = new THashList(); | |
107 | fOutputContainer->SetOwner(kTRUE); | |
108 | PostData(1, fOutputContainer); | |
109 | ||
110 | //========QA histograms======= | |
111 | ||
112 | //Event selection | |
113 | fOutputContainer->Add(new TH2F("hSelEvents","Event selection", 10,0.,10.,nRuns,0.,float(nRuns))) ; | |
114 | fOutputContainer->Add(new TH1F("hTotSelEvents","Event selection", 10,0.,10.)) ; | |
115 | ||
116 | //vertex distribution | |
117 | fOutputContainer->Add(new TH2F("hZvertex","Z vertex position", 50,-25.,25.,nRuns,0.,float(nRuns))) ; | |
118 | ||
119 | //Centrality | |
120 | fOutputContainer->Add(new TH2F("hCentrality","Event centrality", 100,0.,100.,nRuns,0.,float(nRuns))) ; | |
121 | fOutputContainer->Add(new TH2F("hCenPHOS","Centrality vs PHOSclusters", 100,0.,100.,200,0.,200.)) ; | |
122 | fOutputContainer->Add(new TH2F("hCenPHOSCells","Centrality vs PHOS cells", 100,0.,100.,100,0.,1000.)) ; | |
123 | fOutputContainer->Add(new TH2F("hCenTrack","Centrality vs tracks", 100,0.,100.,100,0.,15000.)) ; | |
124 | fOutputContainer->Add(new TH2F("hCluEvsClu","ClusterMult vs E",200,0.,20.,100,0.,100.)) ; | |
125 | fOutputContainer->Add(new TH2F("hCluEvsCluM","ClusterMult vs E",200,0.,20.,100,0.,20.)) ; | |
126 | ||
127 | fOutputContainer->Add(new TH3F("hCPVr","CPV radius",100,0.,20.,100,0.,20.,10,0.,100.)); | |
128 | ||
129 | //Bad Map | |
130 | fOutputContainer->Add(new TH2F("hCluLowM1","Cell (X,Z), M1" ,64,0.5,64.5, 56,0.5,56.5)); | |
131 | fOutputContainer->Add(new TH2F("hCluLowM2","Cell (X,Z), M2" ,64,0.5,64.5, 56,0.5,56.5)); | |
132 | fOutputContainer->Add(new TH2F("hCluLowM3","Cell (X,Z), M3" ,64,0.5,64.5, 56,0.5,56.5)); | |
133 | ||
134 | fOutputContainer->Add(new TH2F("hCluHighM1","Cell (X,Z), M1" ,64,0.5,64.5, 56,0.5,56.5)); | |
135 | fOutputContainer->Add(new TH2F("hCluHighM2","Cell (X,Z), M2" ,64,0.5,64.5, 56,0.5,56.5)); | |
136 | fOutputContainer->Add(new TH2F("hCluHighM3","Cell (X,Z), M3" ,64,0.5,64.5, 56,0.5,56.5)); | |
137 | ||
138 | fOutputContainer->Add(new TH2F("hCluVetoM1","Cell (X,Z), M1" ,64,0.5,64.5, 56,0.5,56.5)); | |
139 | fOutputContainer->Add(new TH2F("hCluVetoM2","Cell (X,Z), M2" ,64,0.5,64.5, 56,0.5,56.5)); | |
140 | fOutputContainer->Add(new TH2F("hCluVetoM3","Cell (X,Z), M3" ,64,0.5,64.5, 56,0.5,56.5)); | |
141 | ||
142 | fOutputContainer->Add(new TH2F("hCluDispM1","Cell (X,Z), M1" ,64,0.5,64.5, 56,0.5,56.5)); | |
143 | fOutputContainer->Add(new TH2F("hCluDispM2","Cell (X,Z), M2" ,64,0.5,64.5, 56,0.5,56.5)); | |
144 | fOutputContainer->Add(new TH2F("hCluDispM3","Cell (X,Z), M3" ,64,0.5,64.5, 56,0.5,56.5)); | |
145 | ||
146 | //Single photon and pi0 spectrum | |
147 | Int_t nPtPhot = 300 ; | |
148 | Double_t ptPhotMax = 30 ; | |
149 | Int_t nM = 500; | |
150 | Double_t mMin = 0.0; | |
151 | Double_t mMax = 1.0; | |
152 | ||
153 | //PHOS calibration QA | |
154 | fOutputContainer->Add(new TH2F("hPi0M11","Pairs in modules",nM,mMin,mMax,nPtPhot,0.,ptPhotMax)); | |
155 | fOutputContainer->Add(new TH2F("hPi0M12","Pairs in modules",nM,mMin,mMax,nPtPhot,0.,ptPhotMax)); | |
156 | fOutputContainer->Add(new TH2F("hPi0M13","Pairs in modules",nM,mMin,mMax,nPtPhot,0.,ptPhotMax)); | |
157 | fOutputContainer->Add(new TH2F("hPi0M22","Pairs in modules",nM,mMin,mMax,nPtPhot,0.,ptPhotMax)); | |
158 | fOutputContainer->Add(new TH2F("hPi0M23","Pairs in modules",nM,mMin,mMax,nPtPhot,0.,ptPhotMax)); | |
159 | fOutputContainer->Add(new TH2F("hPi0M33","Pairs in modules",nM,mMin,mMax,nPtPhot,0.,ptPhotMax)); | |
160 | ||
161 | char key[55] ; | |
162 | for(Int_t cent=0; cent<6; cent++){ | |
163 | ||
164 | fOutputContainer->Add(new TH1F(Form("hPhotAll_DistBad2_cen%d",cent),"All clusters",nPtPhot,0.,ptPhotMax)); | |
165 | fOutputContainer->Add(new TH1F(Form("hPhotAll_DistBad4_cen%d",cent),"All clusters",nPtPhot,0.,ptPhotMax)); | |
166 | fOutputContainer->Add(new TH1F(Form("hPhotAll_DistBad6_cen%d",cent),"All clusters",nPtPhot,0.,ptPhotMax)); | |
167 | ||
168 | fOutputContainer->Add(new TH1F(Form("hPhotAll_cen%d",cent),"All clusters",nPtPhot,0.,ptPhotMax)); | |
169 | fOutputContainer->Add(new TH1F(Form("hPhotAllcore_cen%d",cent),"All clusters",nPtPhot,0.,ptPhotMax)); | |
170 | fOutputContainer->Add(new TH1F(Form("hPhotAllwou_cen%d",cent),"All clusters",nPtPhot,0.,ptPhotMax)); | |
171 | fOutputContainer->Add(new TH1F(Form("hPhotDisp_cen%d",cent),"Disp clusters",nPtPhot,0.,ptPhotMax)); | |
172 | fOutputContainer->Add(new TH1F(Form("hPhotDisp2_cen%d",cent),"Disp clusters",nPtPhot,0.,ptPhotMax)); | |
173 | fOutputContainer->Add(new TH1F(Form("hPhotDispcore_cen%d",cent),"Disp clusters",nPtPhot,0.,ptPhotMax)); | |
174 | fOutputContainer->Add(new TH1F(Form("hPhotDisp2core_cen%d",cent),"Disp clusters",nPtPhot,0.,ptPhotMax)); | |
175 | fOutputContainer->Add(new TH1F(Form("hPhotDispwou_cen%d",cent),"Disp clusters",nPtPhot,0.,ptPhotMax)); | |
176 | fOutputContainer->Add(new TH1F(Form("hPhotCPV_cen%d",cent),"CPV clusters",nPtPhot,0.,ptPhotMax)); | |
177 | fOutputContainer->Add(new TH1F(Form("hPhotCPVcore_cen%d",cent),"CPV clusters",nPtPhot,0.,ptPhotMax)); | |
178 | fOutputContainer->Add(new TH1F(Form("hPhotCPV2_cen%d",cent),"CPV clusters",nPtPhot,0.,ptPhotMax)); | |
179 | fOutputContainer->Add(new TH1F(Form("hPhotBoth_cen%d",cent),"Both clusters",nPtPhot,0.,ptPhotMax)); | |
180 | fOutputContainer->Add(new TH1F(Form("hPhotBothcore_cen%d",cent),"Both clusters",nPtPhot,0.,ptPhotMax)); | |
181 | fOutputContainer->Add(new TH1F(Form("hPhotBoth2_cen%d",cent),"Both2 clusters",nPtPhot,0.,ptPhotMax)); | |
182 | fOutputContainer->Add(new TH1F(Form("hPhotBoth2core_cen%d",cent),"Both2 clusters",nPtPhot,0.,ptPhotMax)); | |
183 | ||
184 | ||
185 | fOutputContainer->Add(new TH2F(Form("hPi0All_cen%d",cent),"All clusters",nM,mMin,mMax,nPtPhot,0.,ptPhotMax)); | |
186 | fOutputContainer->Add(new TH2F(Form("hPi0Allcore_cen%d",cent),"All clusters",nM,mMin,mMax,nPtPhot,0.,ptPhotMax)); | |
187 | fOutputContainer->Add(new TH2F(Form("hPi0Allwou_cen%d",cent),"All clusters",nM,mMin,mMax,nPtPhot,0.,ptPhotMax)); | |
188 | fOutputContainer->Add(new TH2F(Form("hPi0Disp_cen%d",cent),"Disp clusters",nM,mMin,mMax,nPtPhot,0.,ptPhotMax)); | |
189 | fOutputContainer->Add(new TH2F(Form("hPi0Disp2_cen%d",cent),"Disp clusters",nM,mMin,mMax,nPtPhot,0.,ptPhotMax)); | |
190 | fOutputContainer->Add(new TH2F(Form("hPi0Dispcore_cen%d",cent),"Disp clusters",nM,mMin,mMax,nPtPhot,0.,ptPhotMax)); | |
191 | fOutputContainer->Add(new TH2F(Form("hPi0Disp2core_cen%d",cent),"Disp clusters",nM,mMin,mMax,nPtPhot,0.,ptPhotMax)); | |
192 | fOutputContainer->Add(new TH2F(Form("hPi0Dispwou_cen%d",cent),"Disp clusters",nM,mMin,mMax,nPtPhot,0.,ptPhotMax)); | |
193 | fOutputContainer->Add(new TH2F(Form("hPi0CPV_cen%d",cent),"CPV clusters",nM,mMin,mMax,nPtPhot,0.,ptPhotMax)); | |
194 | fOutputContainer->Add(new TH2F(Form("hPi0CPVcore_cen%d",cent),"CPV clusters",nM,mMin,mMax,nPtPhot,0.,ptPhotMax)); | |
195 | fOutputContainer->Add(new TH2F(Form("hPi0CPV2_cen%d",cent),"CPV clusters",nM,mMin,mMax,nPtPhot,0.,ptPhotMax)); | |
196 | fOutputContainer->Add(new TH2F(Form("hPi0Both_cen%d",cent),"Both clusters",nM,mMin,mMax,nPtPhot,0.,ptPhotMax)); | |
197 | fOutputContainer->Add(new TH2F(Form("hPi0Bothcore_cen%d",cent),"Both clusters",nM,mMin,mMax,nPtPhot,0.,ptPhotMax)); | |
198 | fOutputContainer->Add(new TH2F(Form("hPi0Both2_cen%d",cent),"Both2 clusters",nM,mMin,mMax,nPtPhot,0.,ptPhotMax)); | |
199 | fOutputContainer->Add(new TH2F(Form("hPi0Both2core_cen%d",cent),"Both2 clusters",nM,mMin,mMax,nPtPhot,0.,ptPhotMax)); | |
200 | ||
201 | ||
202 | snprintf(key,55,"hPi0All_a07_cen%d",cent) ; | |
203 | fOutputContainer->Add(new TH2F(key,"All clusters",nM,mMin,mMax,nPtPhot,0.,ptPhotMax)); | |
204 | snprintf(key,55,"hPi0Disp_a07_cen%d",cent) ; | |
205 | fOutputContainer->Add(new TH2F(key,"Disp clusters",nM,mMin,mMax,nPtPhot,0.,ptPhotMax)); | |
206 | snprintf(key,55,"hPi0CPV_a07_cen%d",cent) ; | |
207 | fOutputContainer->Add(new TH2F(key,"CPV clusters",nM,mMin,mMax,nPtPhot,0.,ptPhotMax)); | |
208 | snprintf(key,55,"hPi0CPV2_a07_cen%d",cent) ; | |
209 | fOutputContainer->Add(new TH2F(key,"CPV clusters",nM,mMin,mMax,nPtPhot,0.,ptPhotMax)); | |
210 | snprintf(key,55,"hPi0Both_a07_cen%d",cent) ; | |
211 | fOutputContainer->Add(new TH2F(key,"Both clusters",nM,mMin,mMax,nPtPhot,0.,ptPhotMax)); | |
212 | snprintf(key,55,"hPi0Both2_a07_cen%d",cent) ; | |
213 | fOutputContainer->Add(new TH2F(key,"Both2 clusters",nM,mMin,mMax,nPtPhot,0.,ptPhotMax)); | |
214 | ||
215 | snprintf(key,55,"hSingleAll_cen%d",cent) ; | |
216 | fOutputContainer->Add(new TH2F(key,"All clusters",nM,mMin,mMax,nPtPhot,0.,ptPhotMax)); | |
217 | snprintf(key,55,"hSingleAllcore_cen%d",cent) ; | |
218 | fOutputContainer->Add(new TH2F(key,"All clusters",nM,mMin,mMax,nPtPhot,0.,ptPhotMax)); | |
219 | snprintf(key,55,"hSingleAllwou_cen%d",cent) ; | |
220 | fOutputContainer->Add(new TH2F(key,"All clusters",nM,mMin,mMax,nPtPhot,0.,ptPhotMax)); | |
221 | snprintf(key,55,"hSingleDisp_cen%d",cent) ; | |
222 | fOutputContainer->Add(new TH2F(key,"Disp clusters",nM,mMin,mMax,nPtPhot,0.,ptPhotMax)); | |
223 | snprintf(key,55,"hSingleDisp2_cen%d",cent) ; | |
224 | fOutputContainer->Add(new TH2F(key,"Disp clusters",nM,mMin,mMax,nPtPhot,0.,ptPhotMax)); | |
225 | snprintf(key,55,"hSingleDispcore_cen%d",cent) ; | |
226 | fOutputContainer->Add(new TH2F(key,"Disp clusters",nM,mMin,mMax,nPtPhot,0.,ptPhotMax)); | |
227 | snprintf(key,55,"hSingleDisp2core_cen%d",cent) ; | |
228 | fOutputContainer->Add(new TH2F(key,"Disp clusters",nM,mMin,mMax,nPtPhot,0.,ptPhotMax)); | |
229 | snprintf(key,55,"hSingleDispwou_cen%d",cent) ; | |
230 | fOutputContainer->Add(new TH2F(key,"Disp clusters",nM,mMin,mMax,nPtPhot,0.,ptPhotMax)); | |
231 | snprintf(key,55,"hSingleCPV_cen%d",cent) ; | |
232 | fOutputContainer->Add(new TH2F(key,"CPV clusters",nM,mMin,mMax,nPtPhot,0.,ptPhotMax)); | |
233 | snprintf(key,55,"hSingleCPVcore_cen%d",cent) ; | |
234 | fOutputContainer->Add(new TH2F(key,"CPV clusters",nM,mMin,mMax,nPtPhot,0.,ptPhotMax)); | |
235 | snprintf(key,55,"hSingleCPV2_cen%d",cent) ; | |
236 | fOutputContainer->Add(new TH2F(key,"CPV clusters",nM,mMin,mMax,nPtPhot,0.,ptPhotMax)); | |
237 | snprintf(key,55,"hSingleBoth_cen%d",cent) ; | |
238 | fOutputContainer->Add(new TH2F(key,"Both clusters",nM,mMin,mMax,nPtPhot,0.,ptPhotMax)); | |
239 | snprintf(key,55,"hSingleBothcore_cen%d",cent) ; | |
240 | fOutputContainer->Add(new TH2F(key,"Both clusters",nM,mMin,mMax,nPtPhot,0.,ptPhotMax)); | |
241 | snprintf(key,55,"hSingleBoth2_cen%d",cent) ; | |
242 | fOutputContainer->Add(new TH2F(key,"Both2 clusters",nM,mMin,mMax,nPtPhot,0.,ptPhotMax)); | |
243 | snprintf(key,55,"hSingleBoth2core_cen%d",cent) ; | |
244 | fOutputContainer->Add(new TH2F(key,"Both2 clusters",nM,mMin,mMax,nPtPhot,0.,ptPhotMax)); | |
245 | ||
246 | ||
247 | snprintf(key,55,"hMiPi0All_cen%d",cent) ; | |
248 | fOutputContainer->Add(new TH2F(key,"All clusters",nM,mMin,mMax,nPtPhot,0.,ptPhotMax)); | |
249 | snprintf(key,55,"hMiPi0Allcore_cen%d",cent) ; | |
250 | fOutputContainer->Add(new TH2F(key,"All clusters",nM,mMin,mMax,nPtPhot,0.,ptPhotMax)); | |
251 | snprintf(key,55,"hMiPi0Allwou_cen%d",cent) ; | |
252 | fOutputContainer->Add(new TH2F(key,"All clusters",nM,mMin,mMax,nPtPhot,0.,ptPhotMax)); | |
253 | snprintf(key,55,"hMiPi0Disp_cen%d",cent) ; | |
254 | fOutputContainer->Add(new TH2F(key,"Disp clusters",nM,mMin,mMax,nPtPhot,0.,ptPhotMax)); | |
255 | snprintf(key,55,"hMiPi0Disp2_cen%d",cent) ; | |
256 | fOutputContainer->Add(new TH2F(key,"Disp clusters",nM,mMin,mMax,nPtPhot,0.,ptPhotMax)); | |
257 | snprintf(key,55,"hMiPi0Dispwou_cen%d",cent) ; | |
258 | fOutputContainer->Add(new TH2F(key,"Disp clusters",nM,mMin,mMax,nPtPhot,0.,ptPhotMax)); | |
259 | snprintf(key,55,"hMiPi0Dispcore_cen%d",cent) ; | |
260 | fOutputContainer->Add(new TH2F(key,"Disp clusters",nM,mMin,mMax,nPtPhot,0.,ptPhotMax)); | |
261 | snprintf(key,55,"hMiPi0Disp2core_cen%d",cent) ; | |
262 | fOutputContainer->Add(new TH2F(key,"Disp clusters",nM,mMin,mMax,nPtPhot,0.,ptPhotMax)); | |
263 | snprintf(key,55,"hMiPi0CPV_cen%d",cent) ; | |
264 | fOutputContainer->Add(new TH2F(key,"CPV clusters",nM,mMin,mMax,nPtPhot,0.,ptPhotMax)); | |
265 | snprintf(key,55,"hMiPi0CPVcore_cen%d",cent) ; | |
266 | fOutputContainer->Add(new TH2F(key,"CPV clusters",nM,mMin,mMax,nPtPhot,0.,ptPhotMax)); | |
267 | snprintf(key,55,"hMiPi0CPV2_cen%d",cent) ; | |
268 | fOutputContainer->Add(new TH2F(key,"CPV clusters",nM,mMin,mMax,nPtPhot,0.,ptPhotMax)); | |
269 | snprintf(key,55,"hMiPi0Both_cen%d",cent) ; | |
270 | fOutputContainer->Add(new TH2F(key,"Both clusters",nM,mMin,mMax,nPtPhot,0.,ptPhotMax)); | |
271 | snprintf(key,55,"hMiPi0Bothcore_cen%d",cent) ; | |
272 | fOutputContainer->Add(new TH2F(key,"Both clusters",nM,mMin,mMax,nPtPhot,0.,ptPhotMax)); | |
273 | snprintf(key,55,"hMiPi0Both2_cen%d",cent) ; | |
274 | fOutputContainer->Add(new TH2F(key,"Both2 clusters",nM,mMin,mMax,nPtPhot,0.,ptPhotMax)); | |
275 | snprintf(key,55,"hMiPi0Both2core_cen%d",cent) ; | |
276 | fOutputContainer->Add(new TH2F(key,"Both2 clusters",nM,mMin,mMax,nPtPhot,0.,ptPhotMax)); | |
277 | ||
278 | snprintf(key,55,"hMiPi0All_a07_cen%d",cent) ; | |
279 | fOutputContainer->Add(new TH2F(key,"All clusters",nM,mMin,mMax,nPtPhot,0.,ptPhotMax)); | |
280 | snprintf(key,55,"hMiPi0Disp_a07_cen%d",cent) ; | |
281 | fOutputContainer->Add(new TH2F(key,"Disp clusters",nM,mMin,mMax,nPtPhot,0.,ptPhotMax)); | |
282 | snprintf(key,55,"hMiPi0CPV_a07_cen%d",cent) ; | |
283 | fOutputContainer->Add(new TH2F(key,"CPV clusters",nM,mMin,mMax,nPtPhot,0.,ptPhotMax)); | |
284 | snprintf(key,55,"hMiPi0CPV2_a07_cen%d",cent) ; | |
285 | fOutputContainer->Add(new TH2F(key,"CPV clusters",nM,mMin,mMax,nPtPhot,0.,ptPhotMax)); | |
286 | snprintf(key,55,"hMiPi0Both_a07_cen%d",cent) ; | |
287 | fOutputContainer->Add(new TH2F(key,"Both clusters",nM,mMin,mMax,nPtPhot,0.,ptPhotMax)); | |
288 | snprintf(key,55,"hMiPi0Both2_a07_cen%d",cent) ; | |
289 | fOutputContainer->Add(new TH2F(key,"Both2 clusters",nM,mMin,mMax,nPtPhot,0.,ptPhotMax)); | |
290 | ||
291 | snprintf(key,55,"hMiSingleAll_cen%d",cent) ; | |
292 | fOutputContainer->Add(new TH2F(key,"All clusters",nM,mMin,mMax,nPtPhot,0.,ptPhotMax)); | |
293 | snprintf(key,55,"hMiSingleAllwou_cen%d",cent) ; | |
294 | fOutputContainer->Add(new TH2F(key,"All clusters",nM,mMin,mMax,nPtPhot,0.,ptPhotMax)); | |
295 | snprintf(key,55,"hMiSingleAllcore_cen%d",cent) ; | |
296 | fOutputContainer->Add(new TH2F(key,"All clusters",nM,mMin,mMax,nPtPhot,0.,ptPhotMax)); | |
297 | snprintf(key,55,"hMiSingleDisp_cen%d",cent) ; | |
298 | fOutputContainer->Add(new TH2F(key,"Disp clusters",nM,mMin,mMax,nPtPhot,0.,ptPhotMax)); | |
299 | snprintf(key,55,"hMiSingleDisp2_cen%d",cent) ; | |
300 | fOutputContainer->Add(new TH2F(key,"Disp clusters",nM,mMin,mMax,nPtPhot,0.,ptPhotMax)); | |
301 | snprintf(key,55,"hMiSingleDispwou_cen%d",cent) ; | |
302 | fOutputContainer->Add(new TH2F(key,"Disp clusters",nM,mMin,mMax,nPtPhot,0.,ptPhotMax)); | |
303 | snprintf(key,55,"hMiSingleDispcore_cen%d",cent) ; | |
304 | fOutputContainer->Add(new TH2F(key,"Disp clusters",nM,mMin,mMax,nPtPhot,0.,ptPhotMax)); | |
305 | snprintf(key,55,"hMiSingleDisp2core_cen%d",cent) ; | |
306 | fOutputContainer->Add(new TH2F(key,"Disp clusters",nM,mMin,mMax,nPtPhot,0.,ptPhotMax)); | |
307 | snprintf(key,55,"hMiSingleCPV_cen%d",cent) ; | |
308 | fOutputContainer->Add(new TH2F(key,"CPV clusters",nM,mMin,mMax,nPtPhot,0.,ptPhotMax)); | |
309 | snprintf(key,55,"hMiSingleCPVcore_cen%d",cent) ; | |
310 | fOutputContainer->Add(new TH2F(key,"CPV clusters",nM,mMin,mMax,nPtPhot,0.,ptPhotMax)); | |
311 | snprintf(key,55,"hMiSingleCPV2_cen%d",cent) ; | |
312 | fOutputContainer->Add(new TH2F(key,"CPV clusters",nM,mMin,mMax,nPtPhot,0.,ptPhotMax)); | |
313 | snprintf(key,55,"hMiSingleBoth_cen%d",cent) ; | |
314 | fOutputContainer->Add(new TH2F(key,"Both clusters",nM,mMin,mMax,nPtPhot,0.,ptPhotMax)); | |
315 | snprintf(key,55,"hMiSingleBothcore_cen%d",cent) ; | |
316 | fOutputContainer->Add(new TH2F(key,"Both clusters",nM,mMin,mMax,nPtPhot,0.,ptPhotMax)); | |
317 | snprintf(key,55,"hMiSingleBoth2_cen%d",cent) ; | |
318 | fOutputContainer->Add(new TH2F(key,"Both2 clusters",nM,mMin,mMax,nPtPhot,0.,ptPhotMax)); | |
319 | snprintf(key,55,"hMiSingleBoth2core_cen%d",cent) ; | |
320 | fOutputContainer->Add(new TH2F(key,"Both2 clusters",nM,mMin,mMax,nPtPhot,0.,ptPhotMax)); | |
321 | } | |
322 | ||
323 | ||
324 | //MC | |
325 | for(Int_t cent=0; cent<6; cent++){ | |
326 | snprintf(key,55,"hMC_rap_gamma_cen%d",cent) ; | |
327 | fOutputContainer->Add(new TH1F(key,"Rapidity pi0",200,-1.,1.)) ; | |
328 | snprintf(key,55,"hMC_rap_pi0_cen%d",cent) ; | |
329 | fOutputContainer->Add(new TH1F(key,"Rapidity pi0",200,-1.,1.)) ; | |
330 | snprintf(key,55,"hMC_rap_eta_cen%d",cent) ; | |
331 | fOutputContainer->Add(new TH1F(key,"Rapidity eta",200,-1.,1.)) ; | |
332 | snprintf(key,55,"hMC_phi_gamma_cen%d",cent) ; | |
333 | fOutputContainer->Add(new TH1F(key,"Phi pi0",200,0.,TMath::TwoPi())) ; | |
334 | snprintf(key,55,"hMC_phi_pi0_cen%d",cent) ; | |
335 | fOutputContainer->Add(new TH1F(key,"Phi pi0",200,0.,TMath::TwoPi())) ; | |
336 | snprintf(key,55,"hMC_phi_eta_cen%d",cent) ; | |
337 | fOutputContainer->Add(new TH1F(key,"Phi eta",200,0.,TMath::TwoPi())) ; | |
338 | snprintf(key,55,"hMC_all_gamma_cen%d",cent) ; | |
339 | fOutputContainer->Add(new TH1F(key,"Rapidity photon",250,0.,25.)) ; | |
340 | snprintf(key,55,"hMC_all_pi0_cen%d",cent) ; | |
341 | fOutputContainer->Add(new TH1F(key,"Rapidity pi0",250,0.,25.)) ; | |
342 | snprintf(key,55,"hMC_all_eta_cen%d",cent) ; | |
343 | fOutputContainer->Add(new TH1F(key,"Rapidity eta",250,0.,25.)) ; | |
344 | snprintf(key,55,"hMC_unitEta_gamma_cen%d",cent) ; | |
345 | fOutputContainer->Add(new TH1F(key,"Pt photon",250,0.,25.)) ; | |
346 | snprintf(key,55,"hMC_unitEta_pi0_cen%d",cent) ; | |
347 | fOutputContainer->Add(new TH1F(key,"Rapidity eta",250,0.,25.)) ; | |
348 | snprintf(key,55,"hMC_unitEta_eta_cen%d",cent) ; | |
349 | fOutputContainer->Add(new TH1F(key,"Rapidity eta",250,0.,25.)) ; | |
350 | } | |
351 | fOutputContainer->Add(new TH2F("hMC_gamma_vertex","Creation vertex",25,0.,25.,1000,0.,500.)) ; | |
352 | fOutputContainer->Add(new TH2F("hMC_pi0_vertex","Creation vertex",25,0.,25.,1000,0.,500.)) ; | |
353 | fOutputContainer->Add(new TH2F("hMC_eta_vertex","Creation vertex",25,0.,25.,1000,0.,500.)) ; | |
354 | ||
355 | ||
356 | Int_t nPt = 200; | |
357 | Double_t ptMin = 0; | |
358 | Double_t ptMax = 20; | |
359 | fOutputContainer->Add(new TH2F("Vertex","Pi0 creation vertex",nPt,ptMin,ptMax,5000,0.,500.)); | |
360 | fOutputContainer->Add(new TH3F("hSecondPi0RphiZ","Secondary pi0 vertex",450,0.,450.,100,0.,TMath::TwoPi(),200,-100.,100.)); | |
361 | fOutputContainer->Add(new TH2F("hSecondPi0RE","Secondary pi0 vertex",450,0.,450.,200,0.,20.)); | |
362 | fOutputContainer->Add(new TH3F("hMass_R","Mass vs radius any parent",50,0.,0.25,100,0.,10.,300,0.,600.)); | |
363 | fOutputContainer->Add(new TH3F("Real_pi_R","All clusters",50,0.,0.25,100,0.,10.,250,0.,500.)); | |
364 | fOutputContainer->Add(new TH3F("Real_pi_Z","All clusters",50,0.,0.25,100,0.,10.,100,-100.,100.)); | |
365 | // fOutputContainer->Add(new TH2F(Form("Real_npnp_RZ"),"All clusters",250,0.,500.,100,-100.,100.)); | |
366 | // fOutputContainer->Add(new TH3F(Form("Real_mass_R"),"All clusters",50,0.,0.25,100,0.,10.,300,0.,600.)); | |
367 | ||
368 | for(Int_t cen=0; cen<6; cen++){ | |
369 | fOutputContainer->Add(new TH1F(Form("hPrimPhot_cen%d",cen),"Primary spetrum",nPt,ptMin,ptMax)); | |
370 | fOutputContainer->Add(new TH1F(Form("hPrimEl_cen%d",cen),"Primary spetrum",nPt,ptMin,ptMax)); | |
371 | fOutputContainer->Add(new TH1F(Form("hPrimPi0_cen%d",cen),"Primary spetrum",nPt,ptMin,ptMax)); | |
372 | fOutputContainer->Add(new TH1F(Form("hPrimEta_cen%d",cen),"Primary spetrum",nPt,ptMin,ptMax)); | |
373 | fOutputContainer->Add(new TH1F(Form("hPrimPipm_cen%d",cen),"Primary spetrum",nPt,ptMin,ptMax)); | |
374 | fOutputContainer->Add(new TH1F(Form("hPrimP_cen%d",cen),"Primary spetrum",nPt,ptMin,ptMax)); | |
375 | fOutputContainer->Add(new TH1F(Form("hPrimPbar_cen%d",cen),"Primary spetrum",nPt,ptMin,ptMax)); | |
376 | fOutputContainer->Add(new TH1F(Form("hPrimN_cen%d",cen),"Primary spetrum",nPt,ptMin,ptMax)); | |
377 | fOutputContainer->Add(new TH1F(Form("hPrimNbar_cen%d",cen),"Primary spetrum",nPt,ptMin,ptMax)); | |
378 | fOutputContainer->Add(new TH1F(Form("hPrimK0S_cen%d",cen),"Primary spetrum",nPt,ptMin,ptMax)); | |
379 | fOutputContainer->Add(new TH1F(Form("hPrimK0L_cen%d",cen),"Primary spetrum",nPt,ptMin,ptMax)); | |
380 | fOutputContainer->Add(new TH1F(Form("hPrimKpm_cen%d",cen),"Primary spetrum",nPt,ptMin,ptMax)); | |
381 | fOutputContainer->Add(new TH1F(Form("hPrimOther_cen%d",cen),"Primary spetrum",nPt,ptMin,ptMax)); | |
382 | ||
383 | //pairs from common parents | |
384 | fOutputContainer->Add(new TH2F(Form("hParentAll_cen%d",cen),"All clusters",nM,mMin,mMax,nPt,ptMin,ptMax)); | |
385 | fOutputContainer->Add(new TH2F(Form("hParentK0s_cen%d",cen),"All clusters",nM,mMin,mMax,nPt,ptMin,ptMax)); | |
386 | fOutputContainer->Add(new TH2F(Form("hParentGamma_cen%d",cen),"All clusters",nM,mMin,mMax,nPt,ptMin,ptMax)); | |
387 | fOutputContainer->Add(new TH2F(Form("hParentEl_cen%d",cen),"All clusters",nM,mMin,mMax,nPt,ptMin,ptMax)); | |
388 | fOutputContainer->Add(new TH2F(Form("hParentOther_cen%d",cen),"All clusters",nM,mMin,mMax,nPt,ptMin,ptMax)); | |
389 | fOutputContainer->Add(new TH2F(Form("hParentPi0_cen%d",cen),"All clusters",nM,mMin,mMax,nPt,ptMin,ptMax)); | |
390 | fOutputContainer->Add(new TH2F(Form("hParentDirPi0_cen%d",cen),"All clusters",nM,mMin,mMax,nPt,ptMin,ptMax)); | |
391 | ||
392 | //common parent - pi0 | |
393 | fOutputContainer->Add(new TH2F(Form("hParentPi0NoPrim_cen%d",cen),"All clusters",nM,mMin,mMax,nPt,ptMin,ptMax)); | |
394 | fOutputContainer->Add(new TH2F(Form("hParentPi0Eta_cen%d",cen),"All clusters",nM,mMin,mMax,nPt,ptMin,ptMax)); | |
395 | fOutputContainer->Add(new TH2F(Form("hParentPi0Omega_cen%d",cen),"All clusters",nM,mMin,mMax,nPt,ptMin,ptMax)); | |
396 | fOutputContainer->Add(new TH2F(Form("hParentPi0Pipm_cen%d",cen),"All clusters",nM,mMin,mMax,nPt,ptMin,ptMax)); | |
397 | fOutputContainer->Add(new TH2F(Form("hParentPi0Kpm_cen%d",cen),"All clusters",nM,mMin,mMax,nPt,ptMin,ptMax)); | |
398 | fOutputContainer->Add(new TH2F(Form("hParentPi0Ks_cen%d",cen),"All clusters",nM,mMin,mMax,nPt,ptMin,ptMax)); | |
399 | fOutputContainer->Add(new TH2F(Form("hParentPi0Kl_cen%d",cen),"All clusters",nM,mMin,mMax,nPt,ptMin,ptMax)); | |
400 | fOutputContainer->Add(new TH2F(Form("hParentPi0pn_cen%d",cen),"All clusters",nM,mMin,mMax,nPt,ptMin,ptMax)); | |
401 | fOutputContainer->Add(new TH2F(Form("hParentPi0antipn_cen%d",cen),"All clusters",nM,mMin,mMax,nPt,ptMin,ptMax)); | |
402 | ||
403 | } | |
404 | ||
405 | ||
406 | //Photon contaminations | |
407 | fOutputContainer->Add(new TH2F("hPipmGammaConvR","Conversion radius" ,200,0.,20.,1000,0.,500.)); | |
408 | fOutputContainer->Add(new TH2F("hPipmElConvR","Conversion radius" ,200,0.,20.,1000,0.,500.)); | |
409 | fOutputContainer->Add(new TH2F("hPipmNConvR","Conversion radius" ,200,0.,20.,1000,0.,500.)); | |
410 | fOutputContainer->Add(new TH2F("hPipmOtherConvR","Conversion radius" ,200,0.,20.,1000,0.,500.)); | |
411 | fOutputContainer->Add(new TH2F("hPipmGammaConvRZ","Conversion radius" ,400,-200.,200.,1000,0.,500.)); | |
412 | ||
413 | const Int_t nTypes=24 ; | |
414 | char partTypes[nTypes][55] ; | |
415 | snprintf(partTypes[0],55,"hGammaNoPrim") ; // | |
416 | snprintf(partTypes[1],55,"hGammaPhot") ; // | |
417 | snprintf(partTypes[2],55,"hGammaEl") ; // | |
418 | snprintf(partTypes[3],55,"hGammaPi0") ; // | |
419 | snprintf(partTypes[4],55,"hGammaEta") ; // | |
420 | snprintf(partTypes[5],55,"hhGammaOmega") ; // | |
421 | snprintf(partTypes[6],55,"hGammaPipm") ; // | |
422 | snprintf(partTypes[7],55,"hGammaP") ; // | |
423 | snprintf(partTypes[8],55,"hGammaPbar") ; // | |
424 | snprintf(partTypes[9],55,"hGammaN") ; // | |
425 | snprintf(partTypes[10],55,"hGammaNbar") ; // | |
426 | snprintf(partTypes[11],55,"hGammaK0S") ; // | |
427 | snprintf(partTypes[12],55,"hGammaK0L") ; // | |
428 | snprintf(partTypes[13],55,"hGammaKpm") ; // | |
429 | snprintf(partTypes[14],55,"hGammaKstar") ; // | |
430 | snprintf(partTypes[15],55,"hGammaDelta") ; // | |
431 | snprintf(partTypes[16],55,"hGammaOtherCharged") ; // | |
432 | snprintf(partTypes[17],55,"hGammaOtherNeutral") ; // | |
433 | snprintf(partTypes[18],55,"hGammaPipmGamma") ; // | |
434 | snprintf(partTypes[19],55,"hGammaPipmEl") ; // | |
435 | snprintf(partTypes[20],55,"hGammaPipmOther") ; // | |
436 | snprintf(partTypes[21],55,"hGammaPipmDirect") ; // | |
437 | snprintf(partTypes[22],55,"hGammaPipmp") ; // | |
438 | snprintf(partTypes[23],55,"hGammaPipmn") ; // | |
439 | ||
440 | const Int_t nPID=12 ; | |
441 | char cPID[25][12] ; | |
442 | snprintf(cPID[0],25,"All") ; | |
443 | snprintf(cPID[1],25,"Allcore") ; | |
444 | snprintf(cPID[2],25,"CPV") ; | |
445 | snprintf(cPID[3],25,"CPVcore") ; | |
446 | snprintf(cPID[4],25,"CPV2") ; | |
447 | snprintf(cPID[5],25,"CPV2core") ; | |
448 | snprintf(cPID[6],25,"Disp") ; | |
449 | snprintf(cPID[7],25,"Dispcore") ; | |
450 | snprintf(cPID[8],25,"Disp2") ; | |
451 | snprintf(cPID[9],25,"Disp2core") ; | |
452 | snprintf(cPID[10],25,"Both") ; | |
453 | snprintf(cPID[11],25,"Bothcore") ; | |
454 | ||
455 | for(Int_t itype=0; itype<nTypes; itype++){ | |
456 | for(Int_t iPID=0; iPID<nPID; iPID++){ | |
457 | for(Int_t cen=0; cen<5; cen++){ | |
458 | fOutputContainer->Add(new TH1F(Form("%s_%s_cen%d",partTypes[itype],cPID[iPID],cen),"Cluster parents",nPt,ptMin,ptMax)); | |
459 | } | |
460 | } | |
461 | } | |
462 | ||
463 | ||
464 | ||
465 | PostData(1, fOutputContainer); | |
466 | ||
467 | printf("Init done \n") ; | |
468 | ||
469 | } | |
470 | ||
471 | //________________________________________________________________________ | |
472 | void AliPHOSHijingEfficiency::UserExec(Option_t *) | |
473 | { | |
474 | // Main loop, called for each event | |
475 | // Analyze ESD/AOD | |
476 | fStack=0 ; | |
477 | if(AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler()){ | |
478 | if(static_cast<AliMCEventHandler*>(AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler())->MCEvent()) | |
479 | fStack = static_cast<AliMCEventHandler*>(AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler())->MCEvent()->Stack(); | |
480 | } | |
481 | ||
482 | ||
483 | AliESDEvent *event = dynamic_cast<AliESDEvent*>(InputEvent()); | |
484 | if (!event) { | |
485 | Printf("ERROR: Could not retrieve event"); | |
486 | PostData(1, fOutputContainer); | |
487 | return; | |
488 | } | |
489 | ||
490 | fRunNumber=ConvertRunNumber(event->GetRunNumber()) ; | |
491 | FillHistogram("hSelEvents",0.5,fRunNumber-0.5) ; | |
492 | FillHistogram("hTotSelEvents",0.5) ; | |
493 | ||
494 | // Get PHOS rotation matrices from ESD and set them to the PHOS geometry | |
495 | char skey[55] ; | |
496 | if(fEventCounter == 0) { | |
497 | // Initialize the PHOS geometry | |
498 | fPHOSGeo = AliPHOSGeometry::GetInstance("IHEP") ; | |
499 | ||
500 | //We have to apply re-calibration for pass1 LCH10h | |
501 | // Initialize decalibration factors in the form of the OCDB object | |
502 | const Float_t wDecalib = 0.055; | |
503 | ||
504 | fPHOSCalibData = new AliPHOSCalibData(); | |
505 | fPHOSCalibData->SetName("PhosCalibData"); | |
506 | ||
507 | for(Int_t module=1; module<=5; module++) { | |
508 | for(Int_t column=1; column<=56; column++) { | |
509 | for(Int_t row=1; row<=64; row++) { | |
510 | Float_t adcChannelEmc = gRandom->Gaus(1.,wDecalib); | |
511 | fPHOSCalibData->SetADCchannelEmc(module,column,row,adcChannelEmc); | |
512 | } | |
513 | } | |
514 | } | |
515 | for(Int_t mod=0; mod<5; mod++) { | |
516 | if(!event->GetPHOSMatrix(mod)) continue; | |
517 | fPHOSGeo->SetMisalMatrix(event->GetPHOSMatrix(mod),mod) ; | |
518 | Printf("PHOS geo matrix %p for module # %d is set\n", event->GetPHOSMatrix(mod), mod); | |
519 | } | |
520 | ||
521 | fEventCounter++ ; | |
522 | } | |
523 | ||
524 | ||
525 | // Checks if we have a primary vertex | |
526 | // Get primary vertices form ESD | |
527 | const AliESDVertex *esdVertex5 = event->GetPrimaryVertex(); | |
528 | ||
529 | Double_t vtx0[3] = {0,0,0}; // don't rely on ESD vertex, assume (0,0,0) | |
530 | Double_t vtx5[3] ={0.,0.,0.}; | |
531 | ||
532 | vtx5[0] = esdVertex5->GetX(); | |
533 | vtx5[1] = esdVertex5->GetY(); | |
534 | vtx5[2] = esdVertex5->GetZ(); | |
535 | ||
536 | ||
537 | FillHistogram("hZvertex",esdVertex5->GetZ(),fRunNumber-0.5); | |
538 | if (TMath::Abs(esdVertex5->GetZ()) > 10. ){ | |
539 | PostData(1, fOutputContainer); | |
540 | return; | |
541 | } | |
542 | FillHistogram("hSelEvents",1.5,fRunNumber-0.5) ; | |
543 | FillHistogram("hTotSelEvents",1.5) ; | |
544 | ||
545 | /* | |
546 | if(event->IsPileupFromSPD()){ | |
547 | PostData(1, fOutputContainer); | |
548 | return; | |
549 | } | |
550 | */ | |
551 | FillHistogram("hSelEvents",2.5,fRunNumber-0.5) ; | |
552 | FillHistogram("hTotSelEvents",2.5) ; | |
553 | ||
554 | ||
555 | /* | |
556 | //Vtx class z-bin | |
557 | Int_t zvtx = (Int_t)((vtx5[2]+10.)/2.) ; | |
558 | if(zvtx<0)zvtx=0 ; | |
559 | if(zvtx>9)zvtx=9 ; | |
560 | */ | |
561 | //No dependence on zVtx observed, save memory | |
562 | Int_t zvtx=0 ; | |
563 | ||
564 | AliCentrality *centrality = event->GetCentrality(); | |
565 | fCentrality=centrality->GetCentralityPercentile("V0M"); | |
566 | ||
567 | if( fCentrality <= 0. || fCentrality>80. ){ | |
568 | PostData(1, fOutputContainer); | |
569 | return; | |
570 | } | |
571 | ||
572 | FillHistogram("hSelEvents",3.5,fRunNumber-0.5) ; | |
573 | FillHistogram("hTotSelEvents",3.5) ; | |
574 | ||
575 | if(fCentrality<5.) | |
576 | fCenBin=0 ; | |
577 | else if(fCentrality<10.) | |
578 | fCenBin=1 ; | |
579 | else if(fCentrality<20.) | |
580 | fCenBin=2 ; | |
581 | else if(fCentrality<40.) | |
582 | fCenBin=3 ; | |
583 | else if(fCentrality<60.) | |
584 | fCenBin=4 ; | |
585 | else if(fCentrality<80.) | |
586 | fCenBin=5 ; | |
587 | else{ | |
588 | PostData(1, fOutputContainer); | |
589 | return; | |
590 | } | |
591 | ||
592 | fRP=0. ; | |
593 | ||
594 | FillHistogram("hSelEvents",4.5,fRunNumber-0.5) ; | |
595 | FillHistogram("hTotSelEvents",4.5) ; | |
596 | //All event selections done | |
597 | FillHistogram("hCentrality",fCentrality,fRunNumber-0.5) ; | |
598 | //Reaction plane is defined in the range (0;pi) | |
599 | //We have 10 bins | |
600 | Double_t averageRP = 0.;//fRPV0A+fRPV0C+fRP ; | |
601 | Int_t irp=Int_t(10.*(averageRP)/TMath::Pi()); | |
602 | if(irp>9)irp=9 ; | |
603 | ||
604 | if(!fPHOSEvents[zvtx][fCenBin][irp]) | |
605 | fPHOSEvents[zvtx][fCenBin][irp]=new TList() ; | |
606 | TList * prevPHOS = fPHOSEvents[zvtx][fCenBin][irp] ; | |
607 | ||
608 | ProcessMC() ; | |
609 | ||
610 | if(fPHOSEvent) | |
611 | fPHOSEvent->Clear() ; | |
612 | else | |
613 | fPHOSEvent = new TClonesArray("AliCaloPhoton",200) ; | |
614 | ||
615 | //For re-calibration | |
616 | const Double_t logWeight=4.5 ; | |
617 | ||
618 | TVector3 vertex(vtx5); | |
619 | ||
620 | Int_t multClust = event->GetNumberOfCaloClusters(); | |
621 | Int_t inPHOS=0,inMod1=0, inMod2=0, inMod3=0 ; | |
622 | Double_t avrgEm1=0,avrgEm2=0,avrgEm3=0; //average cluster energy | |
623 | ||
624 | AliESDCaloCells * cells = event->GetPHOSCells() ; | |
625 | FillHistogram("hCenPHOSCells",fCentrality,cells->GetNumberOfCells()) ; | |
626 | FillHistogram("hCenTrack",fCentrality,event->GetNumberOfTracks()) ; | |
627 | ||
628 | ||
629 | TVector3 localPos ; | |
630 | for (Int_t i=0; i<multClust; i++) { | |
631 | AliESDCaloCluster *clu = event->GetCaloCluster(i); | |
632 | if ( !clu->IsPHOS() || clu->E()<0.3) continue; | |
633 | ||
634 | Float_t position[3]; | |
635 | clu->GetPosition(position); | |
636 | TVector3 global(position) ; | |
637 | Int_t relId[4] ; | |
638 | fPHOSGeo->GlobalPos2RelId(global,relId) ; | |
639 | Int_t mod = relId[0] ; | |
640 | Int_t cellX = relId[2]; | |
641 | Int_t cellZ = relId[3] ; | |
642 | if ( !IsGoodChannel("PHOS",mod,cellX,cellZ) ) | |
643 | continue ; | |
644 | ||
645 | ||
646 | FillHistogram("hCluEvsClu",clu->E(),clu->GetNCells()) ; | |
647 | FillHistogram("hCluEvsCluM",clu->E(),clu->GetM02()) ; | |
648 | ||
649 | //Apply re-Calibreation | |
650 | AliPHOSEsdCluster cluPHOS1(*clu); | |
651 | cluPHOS1.Recalibrate(fPHOSCalibData,cells); // modify the cell energies | |
652 | Reclusterize(&cluPHOS1) ; | |
653 | cluPHOS1.EvalAll(logWeight,vertex); // recalculate the cluster parameters | |
654 | cluPHOS1.SetE(rnlin(cluPHOS1.E()));// Users's nonlinearity | |
655 | if(cluPHOS1.E()<0.3) continue; | |
656 | if(clu->GetNCells()<3) continue ; | |
657 | if(clu->GetM02()<0.2) continue ; | |
658 | ||
659 | ||
660 | if(mod==1){ | |
661 | avrgEm1+=cluPHOS1.E() ; | |
662 | inMod1++ ; | |
663 | } | |
664 | if(mod==2){ | |
665 | avrgEm2+=cluPHOS1.E() ; | |
666 | inMod2++ ; | |
667 | } | |
668 | if(mod==3){ | |
669 | avrgEm3+=cluPHOS1.E() ; | |
670 | inMod3++ ; | |
671 | } | |
672 | ||
673 | TLorentzVector pv1 ; | |
674 | cluPHOS1.GetMomentum(pv1 ,vtx0); | |
675 | ||
676 | Double_t ecore=CoreEnergy(&cluPHOS1) ; | |
677 | ||
678 | sprintf(skey,"hCluLowM%d",mod) ; | |
679 | FillHistogram(skey,cellX,cellZ,1.); | |
680 | if(cluPHOS1.E()>1.5){ | |
681 | sprintf(skey,"hCluHighM%d",mod) ; | |
682 | FillHistogram(skey,cellX,cellZ,1.); | |
683 | } | |
684 | ||
685 | if(inPHOS>=fPHOSEvent->GetSize()){ | |
686 | fPHOSEvent->Expand(inPHOS+50) ; | |
687 | } | |
688 | new((*fPHOSEvent)[inPHOS]) AliCaloPhoton(pv1.X(),pv1.Py(),pv1.Z(),pv1.E()) ; | |
689 | AliCaloPhoton * ph = (AliCaloPhoton*)fPHOSEvent->At(inPHOS) ; | |
690 | ph->SetModule(mod) ; | |
691 | pv1*= ecore/pv1.E() ; | |
692 | ph->SetMomV2(&pv1) ; | |
693 | ph->SetNCells(clu->GetNCells()); | |
694 | Double_t m02=0.,m20=0.; | |
695 | EvalLambdas(&cluPHOS1,0,m02, m20); | |
696 | ph->SetDispBit(TestLambda(clu->E(),m20,m02)) ; | |
697 | EvalLambdas(&cluPHOS1,1,m02, m20); | |
698 | ph->SetDisp2Bit(TestLambda2(clu->E(),m20,m02)) ; | |
699 | ||
700 | Double_t distBC=clu->GetDistanceToBadChannel(); | |
701 | if(distBC>2.) | |
702 | FillHistogram(Form("hPhotAll_DistBad2_cen%d",fCenBin),ph->Pt()) ; | |
703 | if(distBC>4.) | |
704 | FillHistogram(Form("hPhotAll_DistBad4_cen%d",fCenBin),ph->Pt()) ; | |
705 | if(distBC>6.) | |
706 | FillHistogram(Form("hPhotAll_DistBad6_cen%d",fCenBin),ph->Pt()) ; | |
707 | ||
708 | if(ph->IsDispOK()){ | |
709 | sprintf(skey,"hCluDispM%d",mod) ; | |
710 | FillHistogram(skey,cellX,cellZ,1.); | |
711 | } | |
712 | //Track matching | |
713 | Double_t dx=clu->GetTrackDx() ; | |
714 | Double_t dz=clu->GetTrackDz() ; | |
715 | ||
716 | Bool_t cpvBit=kTRUE ; //No track matched by default | |
717 | Bool_t cpvBit2=kTRUE ; //More Strict criterion | |
718 | TArrayI * itracks = clu->GetTracksMatched() ; | |
719 | if(itracks->GetSize()>0){ | |
720 | Int_t iTr = itracks->At(0); | |
721 | if(iTr>=0 && iTr<event->GetNumberOfTracks()){ | |
722 | AliESDtrack *track = event->GetTrack(iTr) ; | |
723 | Double_t pt = track->Pt() ; | |
724 | Short_t charge = track->Charge() ; | |
725 | Double_t r=TestCPV(dx, dz, pt,charge) ; | |
726 | cpvBit=(r>2.) ; | |
727 | cpvBit2=(r>4.) ; | |
728 | FillHistogram("hCPVr",r,pv1.E(),fCentrality); | |
729 | } | |
730 | } | |
731 | ph->SetCPVBit(cpvBit) ; | |
732 | ph->SetCPV2Bit(cpvBit2) ; | |
733 | if(cpvBit){ | |
734 | sprintf(skey,"hCluVetoM%d",mod) ; | |
735 | FillHistogram(skey,cellX,cellZ,1.); | |
736 | } | |
737 | ph->SetEMCx(float(cellX)) ; | |
738 | ph->SetEMCz(float(cellZ)) ; | |
739 | ph->SetLambdas(cluPHOS1.GetM20(),cluPHOS1.GetM02()) ; | |
740 | ph->SetUnfolded(clu->GetNExMax()<2); // Remember, if it is unfolded | |
741 | Bool_t sure= kTRUE; | |
742 | Int_t primary=FindPrimary(clu,sure) ; //номер праймари частицы в стеке | |
743 | ph->SetPrimary(primary) ; | |
744 | ph->SetWeight(PrimaryWeight(primary)) ; | |
745 | inPHOS++ ; | |
746 | } | |
747 | ||
748 | FillHistogram("hCenPHOS",fCentrality,inPHOS) ; | |
749 | if(inPHOS==0){ | |
750 | PostData(1, fOutputContainer); | |
751 | fEventCounter++; | |
752 | return ; | |
753 | } | |
754 | ||
755 | ||
756 | for (Int_t i1=0; i1<inPHOS; i1++) { | |
757 | AliCaloPhoton * ph1=(AliCaloPhoton*)fPHOSEvent->At(i1) ; | |
758 | Double_t w=ph1->GetWeight() ; | |
759 | Double_t pt = ph1->Pt() ; | |
760 | Double_t ptv =ph1->GetMomV2()->Pt() ; | |
761 | ||
762 | FillHistogram(Form("hPhotAll_cen%d",fCenBin),pt,w) ; | |
763 | FillHistogram(Form("hPhotAllcore_cen%d",fCenBin),ptv,w) ; | |
764 | if(ph1->IsntUnfolded()){ | |
765 | FillHistogram(Form("hPhotAllwou_cen%d",fCenBin),pt,w) ; | |
766 | } | |
767 | if(ph1->IsCPVOK()){ | |
768 | FillHistogram(Form("hPhotCPV_cen%d",fCenBin),pt,w) ; | |
769 | FillHistogram(Form("hPhotCPVcore_cen%d",fCenBin),ptv,w) ; | |
770 | } | |
771 | if(ph1->IsCPV2OK()){ | |
772 | FillHistogram(Form("hPhotCPV2_cen%d",fCenBin),pt,w) ; | |
773 | } | |
774 | if(ph1->IsDispOK()){ | |
775 | FillHistogram(Form("hPhotDisp_cen%d",fCenBin),pt,w) ; | |
776 | ||
777 | FillHistogram(Form("hPhotDispcore_cen%d",fCenBin),ptv,w) ; | |
778 | if(ph1->IsntUnfolded()){ | |
779 | FillHistogram(Form("hPhotDispwou_cen%d",fCenBin),pt,w) ; | |
780 | } | |
781 | if(ph1->IsCPVOK()){ | |
782 | FillHistogram(Form("hPhotBoth_cen%d",fCenBin),pt,w) ; | |
783 | FillHistogram(Form("hPhotBothcore_cen%d",fCenBin),ptv,w) ; | |
784 | } | |
785 | } | |
786 | if(ph1->IsDisp2OK()){ | |
787 | FillHistogram(Form("hPhotDisp2_cen%d",fCenBin),pt,w) ; | |
788 | FillHistogram(Form("hPhotDisp2core_cen%d",fCenBin),ptv,w) ; | |
789 | if(ph1->IsCPVOK()){ | |
790 | FillHistogram(Form("hPhotBoth2_cen%d",fCenBin),pt,w) ; | |
791 | FillHistogram(Form("hPhotBoth2core_cen%d",fCenBin),ptv,w) ; | |
792 | } | |
793 | } | |
794 | } | |
795 | ||
796 | ||
797 | const Double_t alphaCut=0.7 ; | |
798 | //pi0 | |
799 | for (Int_t i1=0; i1<inPHOS-1; i1++) { | |
800 | AliCaloPhoton * ph1=(AliCaloPhoton*)fPHOSEvent->At(i1) ; | |
801 | Double_t w1=ph1->GetWeight() ; | |
802 | for (Int_t i2=i1+1; i2<inPHOS; i2++) { | |
803 | AliCaloPhoton * ph2=(AliCaloPhoton*)fPHOSEvent->At(i2) ; | |
804 | Double_t w2=ph2->GetWeight() ; | |
805 | Double_t w = TMath::Sqrt(w1*w2) ; | |
806 | TLorentzVector p12 = *ph1 + *ph2; | |
807 | TLorentzVector pv12 = *(ph1->GetMomV2()) + *(ph2->GetMomV2()); | |
808 | ||
809 | Double_t a=TMath::Abs((ph1->E()-ph2->E())/(ph1->E()+ph2->E())) ; | |
810 | Double_t m = p12.M() ; | |
811 | Double_t pt = p12.Pt() ; | |
812 | Double_t mv = p12.M() ; | |
813 | Double_t ptv = p12.Pt() ; | |
814 | ||
815 | FillHistogram(Form("hPi0All_cen%d",fCenBin),pt,m,w) ; | |
816 | FillHistogram(Form("hPi0Allcore_cen%d",fCenBin),ptv,mv,w) ; | |
817 | if(ph1->IsntUnfolded() && ph2->IsntUnfolded()){ | |
818 | FillHistogram(Form("hPi0Allwou_cen%d",fCenBin),pt,m,w) ; | |
819 | } | |
820 | ||
821 | ||
822 | Double_t pt1 = ph1->Pt() ; | |
823 | Double_t ptv1 = ph1->GetMomV2()->Pt() ; | |
824 | Double_t pt2 = ph2->Pt() ; | |
825 | Double_t ptv2 = ph2->GetMomV2()->Pt() ; | |
826 | FillHistogram(Form("hSingleAll_cen%d",fCenBin),m,pt1,w1) ; | |
827 | FillHistogram(Form("hSingleAll_cen%d",fCenBin),m,pt2,w2) ; | |
828 | FillHistogram(Form("hSingleAllcore_cen%d",fCenBin),mv,ptv1,w1) ; | |
829 | FillHistogram(Form("hSingleAllcore_cen%d",fCenBin),mv,ptv2,w2) ; | |
830 | if(ph1->IsntUnfolded()) | |
831 | FillHistogram(Form("hSingleAllwou_cen%d",fCenBin),m,pt1,w1) ; | |
832 | if(ph2->IsntUnfolded()) | |
833 | FillHistogram(Form("hSingleAllwou_cen%d",fCenBin),m,pt2,w2) ; | |
834 | if(ph1->IsCPVOK()){ | |
835 | FillHistogram(Form("hSingleCPV_cen%d",fCenBin),m,pt1,w1) ; | |
836 | FillHistogram(Form("hSingleCPVcore_cen%d",fCenBin),mv,ptv1,w1) ; | |
837 | } | |
838 | if(ph2->IsCPVOK()){ | |
839 | FillHistogram(Form("hSingleCPV_cen%d",fCenBin),m,pt2,w2) ; | |
840 | FillHistogram(Form("hSingleCPVcore_cen%d",fCenBin),mv,ptv2,w2) ; | |
841 | } | |
842 | if(ph1->IsCPV2OK()){ | |
843 | FillHistogram(Form("hSingleCPV2_cen%d",fCenBin),m,pt1,w1) ; | |
844 | } | |
845 | if(ph2->IsCPV2OK()){ | |
846 | FillHistogram(Form("hSingleCPV2_cen%d",fCenBin),m,pt2,w2) ; | |
847 | } | |
848 | if(ph1->IsDispOK()){ | |
849 | FillHistogram(Form("hSingleDisp_cen%d",fCenBin),m,pt1,w1) ; | |
850 | if(ph1->IsntUnfolded()){ | |
851 | FillHistogram(Form("hSingleDispwou_cen%d",fCenBin),m,pt1,w1) ; | |
852 | } | |
853 | FillHistogram(Form("hSingleDispcore_cen%d",fCenBin),mv,ptv1,w1) ; | |
854 | } | |
855 | if(ph2->IsDispOK()){ | |
856 | FillHistogram(Form("hSingleDisp_cen%d",fCenBin),m,pt2,w2) ; | |
857 | if(ph1->IsntUnfolded()){ | |
858 | FillHistogram(Form("hSingleDispwou_cen%d",fCenBin),m,pt2,w2) ; | |
859 | } | |
860 | FillHistogram(Form("hSingleDispcore_cen%d",fCenBin),mv,ptv2,w2) ; | |
861 | } | |
862 | if(ph1->IsDisp2OK()){ | |
863 | FillHistogram(Form("hSingleDisp2_cen%d",fCenBin),m,pt1,w1) ; | |
864 | FillHistogram(Form("hSingleDisp2core_cen%d",fCenBin),mv,ptv1,w1) ; | |
865 | } | |
866 | if(ph2->IsDisp2OK()){ | |
867 | FillHistogram(Form("hSingleDisp2_cen%d",fCenBin),m,pt2,w2) ; | |
868 | FillHistogram(Form("hSingleDisp2core_cen%d",fCenBin),mv,ptv2,w2) ; | |
869 | } | |
870 | if(ph1->IsDispOK() && ph1->IsCPVOK()){ | |
871 | FillHistogram(Form("hSingleBoth_cen%d",fCenBin),m,pt1,w1) ; | |
872 | FillHistogram(Form("hSingleBothcore_cen%d",fCenBin),mv,ptv1,w1) ; | |
873 | } | |
874 | if(ph2->IsDispOK() && ph2->IsCPVOK()){ | |
875 | FillHistogram(Form("hSingleBoth_cen%d",fCenBin),m,pt2,w2) ; | |
876 | FillHistogram(Form("hSingleBothcore_cen%d",fCenBin),mv,ptv2,w2) ; | |
877 | } | |
878 | if(ph1->IsDisp2OK() && ph1->IsCPVOK()){ | |
879 | FillHistogram(Form("hSingleBoth2_cen%d",fCenBin),m,pt1,w1) ; | |
880 | FillHistogram(Form("hSingleBoth2core_cen%d",fCenBin),mv,ptv1,w1) ; | |
881 | } | |
882 | if(ph2->IsDisp2OK() && ph2->IsCPVOK()){ | |
883 | FillHistogram(Form("hSingleBoth2_cen%d",fCenBin),m,pt2,w2) ; | |
884 | FillHistogram(Form("hSingleBoth2core_cen%d",fCenBin),mv,ptv2,w2) ; | |
885 | } | |
886 | ||
887 | ||
888 | if(a<alphaCut){ | |
889 | FillHistogram(Form("hPi0All_a07_cen%d",fCenBin),pt,m,w) ; | |
890 | } | |
891 | ||
892 | if(ph1->IsCPVOK() && ph2->IsCPVOK()){ //pi0 CPV | |
893 | FillHistogram(Form("hPi0CPV_cen%d",fCenBin),pt,m,w) ; | |
894 | FillHistogram(Form("hPi0CPVcore_cen%d",fCenBin),ptv,mv,w) ; | |
895 | ||
896 | if(a<alphaCut){ | |
897 | FillHistogram(Form("hPi0CPV_a07_cen%d",fCenBin),pt,m,w) ; | |
898 | } | |
899 | } | |
900 | if(ph1->IsCPV2OK() && ph2->IsCPV2OK()){ | |
901 | FillHistogram(Form("hPi0CPV2_cen%d",fCenBin),p12.M(),p12.Pt(),w) ; | |
902 | if(a<alphaCut){ | |
903 | FillHistogram(Form("hPi0CPV2_a07_cen%d",fCenBin),pt,m,w) ; | |
904 | } | |
905 | } | |
906 | if(ph1->IsDisp2OK() && ph2->IsDisp2OK()){ | |
907 | FillHistogram(Form("hPi0Disp2_cen%d",fCenBin),pt,m,w) ; | |
908 | FillHistogram(Form("hPi0Disp2core_cen%d",fCenBin),ptv,mv,w) ; | |
909 | if(ph1->IsCPVOK() && ph2->IsCPVOK()){ //pi0 Both | |
910 | FillHistogram(Form("hPi0Both2_cen%d",fCenBin),pt,m,w) ; | |
911 | FillHistogram(Form("hPi0Both2core_cen%d",fCenBin),ptv,mv,w) ; | |
912 | if(a<alphaCut){ | |
913 | FillHistogram(Form("hPi0Both2_a07_cen%d",fCenBin),pt,m,w) ; | |
914 | } | |
915 | } | |
916 | } | |
917 | ||
918 | ||
919 | if(ph1->IsDispOK() && ph2->IsDispOK()){ //pi0 Disp | |
920 | FillHistogram(Form("hPi0Disp_cen%d",fCenBin),pt,m,w) ; | |
921 | FillHistogram(Form("hPi0Dispcore_cen%d",fCenBin),ptv,mv,w) ; | |
922 | if(a<alphaCut){ | |
923 | FillHistogram(Form("hPi0Disp_a07_cen%d",fCenBin),pt,m,w) ; | |
924 | } | |
925 | ||
926 | if(ph1->IsCPVOK() && ph2->IsCPVOK()){ //pi0 Both | |
927 | FillHistogram(Form("hPi0Both_cen%d",fCenBin),pt,m,w) ; | |
928 | FillHistogram(Form("hPi0Bothcore_cen%d",fCenBin),ptv,mv,w) ; | |
929 | ||
930 | if(a<alphaCut){ | |
931 | FillHistogram(Form("hPi0Both_a07_cen%d",fCenBin),pt,m,w) ; | |
932 | } | |
933 | } | |
934 | } | |
935 | } // end of loop i2 | |
936 | } // end of loop i1 | |
937 | ||
938 | //now mixed | |
939 | for (Int_t i1=0; i1<inPHOS; i1++) { | |
940 | AliCaloPhoton * ph1=(AliCaloPhoton*)fPHOSEvent->At(i1) ; | |
941 | for(Int_t ev=0; ev<prevPHOS->GetSize();ev++){ | |
942 | TClonesArray * mixPHOS = static_cast<TClonesArray*>(prevPHOS->At(ev)) ; | |
943 | for(Int_t i2=0; i2<mixPHOS->GetEntriesFast();i2++){ | |
944 | AliCaloPhoton * ph2=(AliCaloPhoton*)mixPHOS->At(i2) ; | |
945 | TLorentzVector p12 = *ph1 + *ph2; | |
946 | TLorentzVector pv12 = *(ph1->GetMomV2()) + *(ph2->GetMomV2()); | |
947 | ||
948 | Double_t a=TMath::Abs((ph1->E()-ph2->E())/(ph1->E()+ph2->E())) ; | |
949 | Double_t m = p12.M() ; | |
950 | Double_t pt = p12.Pt() ; | |
951 | Double_t mv = p12.M() ; | |
952 | Double_t ptv = p12.Pt() ; | |
953 | ||
954 | FillHistogram(Form("hMiPi0All_cen%d",fCenBin),pt,m) ; | |
955 | FillHistogram(Form("hMiPi0Allcore_cen%d",fCenBin),ptv,mv) ; | |
956 | if(ph1->IsntUnfolded() && ph2->IsntUnfolded()){ | |
957 | FillHistogram(Form("hMiPi0Allwou_cen%d",fCenBin),pt,m) ; | |
958 | } | |
959 | ||
960 | Double_t pt1 = ph1->Pt() ; | |
961 | Double_t ptv1 = ph1->GetMomV2()->Pt() ; | |
962 | Double_t pt2 = ph2->Pt() ; | |
963 | Double_t ptv2 = ph2->GetMomV2()->Pt() ; | |
964 | FillHistogram(Form("hMiSingleAll_cen%d",fCenBin),m,pt1) ; | |
965 | FillHistogram(Form("hMiSingleAll_cen%d",fCenBin),m,pt2) ; | |
966 | FillHistogram(Form("hMiSingleAllcore_cen%d",fCenBin),mv,ptv1) ; | |
967 | FillHistogram(Form("hMiSingleAllcore_cen%d",fCenBin),mv,ptv2) ; | |
968 | if(ph1->IsntUnfolded()) | |
969 | FillHistogram(Form("hMiSingleAllwou_cen%d",fCenBin),m,pt1) ; | |
970 | if(ph2->IsntUnfolded()) | |
971 | FillHistogram(Form("hMiSingleAllwou_cen%d",fCenBin),m,pt2) ; | |
972 | if(ph1->IsCPVOK()){ | |
973 | FillHistogram(Form("hMiSingleCPV_cen%d",fCenBin),m,pt1) ; | |
974 | FillHistogram(Form("hMiSingleCPVcore_cen%d",fCenBin),mv,ptv1) ; | |
975 | } | |
976 | if(ph2->IsCPVOK()){ | |
977 | FillHistogram(Form("hMiSingleCPV_cen%d",fCenBin),m,pt2) ; | |
978 | FillHistogram(Form("hMiSingleCPVcore_cen%d",fCenBin),mv,ptv2) ; | |
979 | } | |
980 | if(ph1->IsCPV2OK()){ | |
981 | FillHistogram(Form("hMiSingleCPV2_cen%d",fCenBin),m,pt1) ; | |
982 | } | |
983 | if(ph2->IsCPV2OK()){ | |
984 | FillHistogram(Form("hMiSingleCPV2_cen%d",fCenBin),m,pt2) ; | |
985 | } | |
986 | if(ph1->IsDispOK()){ | |
987 | FillHistogram(Form("hMiSingleDisp_cen%d",fCenBin),m,pt1) ; | |
988 | if(ph1->IsntUnfolded()){ | |
989 | FillHistogram(Form("hMiSingleDispwou_cen%d",fCenBin),m,pt1) ; | |
990 | } | |
991 | FillHistogram(Form("hMiSingleDispcore_cen%d",fCenBin),mv,ptv1) ; | |
992 | } | |
993 | if(ph2->IsDispOK()){ | |
994 | FillHistogram(Form("hMiSingleDisp_cen%d",fCenBin),m,pt2) ; | |
995 | if(ph1->IsntUnfolded()){ | |
996 | FillHistogram(Form("hMiSingleDispwou_cen%d",fCenBin),m,pt2) ; | |
997 | } | |
998 | FillHistogram(Form("hMiSingleDispcore_cen%d",fCenBin),mv,ptv2) ; | |
999 | } | |
1000 | if(ph1->IsDisp2OK()){ | |
1001 | FillHistogram(Form("hMiSingleDisp2_cen%d",fCenBin),m,pt1) ; | |
1002 | FillHistogram(Form("hMiSingleDisp2core_cen%d",fCenBin),mv,ptv1) ; | |
1003 | } | |
1004 | if(ph2->IsDisp2OK()){ | |
1005 | FillHistogram(Form("hMiSingleDisp2_cen%d",fCenBin),m,pt2) ; | |
1006 | FillHistogram(Form("hMiSingleDisp2core_cen%d",fCenBin),mv,ptv2) ; | |
1007 | } | |
1008 | if(ph1->IsDispOK() && ph1->IsCPVOK()){ | |
1009 | FillHistogram(Form("hMiSingleBoth_cen%d",fCenBin),m,pt1) ; | |
1010 | FillHistogram(Form("hMiSingleBothcore_cen%d",fCenBin),mv,ptv1) ; | |
1011 | } | |
1012 | if(ph2->IsDispOK() && ph2->IsCPVOK()){ | |
1013 | FillHistogram(Form("hMiSingleBoth_cen%d",fCenBin),m,pt2) ; | |
1014 | FillHistogram(Form("hMiSingleBothcore_cen%d",fCenBin),mv,ptv2) ; | |
1015 | } | |
1016 | if(ph1->IsDisp2OK() && ph1->IsCPVOK()){ | |
1017 | FillHistogram(Form("hMiSingleBoth2_cen%d",fCenBin),m,pt1) ; | |
1018 | FillHistogram(Form("hMiSingleBoth2core_cen%d",fCenBin),mv,ptv1) ; | |
1019 | } | |
1020 | if(ph2->IsDisp2OK() && ph2->IsCPVOK()){ | |
1021 | FillHistogram(Form("hMiSingleBoth2_cen%d",fCenBin),m,pt2) ; | |
1022 | FillHistogram(Form("hMiSingleBoth2core_cen%d",fCenBin),mv,ptv2) ; | |
1023 | } | |
1024 | ||
1025 | ||
1026 | ||
1027 | if(a<alphaCut){ | |
1028 | FillHistogram(Form("hMiPi0All_a07_cen%d",fCenBin),pt,m) ; | |
1029 | } | |
1030 | if(ph1->IsCPVOK() && ph2->IsCPVOK()){ | |
1031 | FillHistogram(Form("hMiPi0CPV_cen%d",fCenBin),p12.M(), p12.Pt()) ; | |
1032 | FillHistogram(Form("hMiPi0CPVcore_cen%d",fCenBin),ptv,mv) ; | |
1033 | ||
1034 | if(a<alphaCut){ | |
1035 | FillHistogram(Form("hMiPi0CPV_a07_cen%d",fCenBin),pt,m) ; | |
1036 | } | |
1037 | } | |
1038 | if(ph1->IsCPV2OK() && ph2->IsCPV2OK()){ | |
1039 | FillHistogram(Form("hMiPi0CPV2_cen%d",fCenBin),pt,m) ; | |
1040 | ||
1041 | if(a<alphaCut){ | |
1042 | FillHistogram(Form("hMiPi0CPV2_a07_cen%d",fCenBin),pt,m) ; | |
1043 | } | |
1044 | } | |
1045 | if(ph1->IsDisp2OK() && ph2->IsDisp2OK()){ | |
1046 | FillHistogram(Form("hMiPi0Disp2_cen%d",fCenBin),pt,m) ; | |
1047 | FillHistogram(Form("hMiPi0Disp2core_cen%d",fCenBin),ptv,mv) ; | |
1048 | if(ph1->IsCPVOK() && ph2->IsCPVOK()){ | |
1049 | FillHistogram(Form("hMiPi0Both2_cen%d",fCenBin),pt,m) ; | |
1050 | FillHistogram(Form("hMiPi0Both2core_cen%d",fCenBin),pv12.M(),pv12.Pt()) ; | |
1051 | } | |
1052 | } | |
1053 | if(ph1->IsDispOK() && ph2->IsDispOK()){ | |
1054 | ||
1055 | FillHistogram(Form("hMiPi0Disp_cen%d",fCenBin),pt,m) ; | |
1056 | FillHistogram(Form("hMiPi0Dispcore_cen%d",fCenBin),pv12.M(),pv12.Pt()) ; | |
1057 | if(ph1->IsntUnfolded() && ph2->IsntUnfolded()){ | |
1058 | FillHistogram(Form("hMiPi0Dispwou_cen%d",fCenBin),p12.M(),p12.Pt()) ; | |
1059 | } | |
1060 | ||
1061 | if(a<alphaCut){ | |
1062 | FillHistogram(Form("hMiPi0Disp_a07_cen%d",fCenBin),pt,m) ; | |
1063 | } | |
1064 | if(ph1->IsCPVOK() && ph2->IsCPVOK()){ | |
1065 | FillHistogram(Form("hMiPi0Both_cen%d",fCenBin),pt,m) ; | |
1066 | FillHistogram(Form("hMiPi0Bothcore_cen%d",fCenBin),pv12.M(),pv12.Pt()) ; | |
1067 | ||
1068 | if(a<alphaCut){ | |
1069 | FillHistogram(Form("hMiPi0Both_a07_cen%d",fCenBin),pt,m) ; | |
1070 | } | |
1071 | } | |
1072 | } | |
1073 | } // end of loop i2 | |
1074 | } | |
1075 | } // end of loop i1 | |
1076 | ||
1077 | ||
1078 | FillSecondaries() ; | |
1079 | ||
1080 | ||
1081 | //Now we either add current events to stack or remove | |
1082 | //If no photons in current event - no need to add it to mixed | |
1083 | const Int_t kMixEvents[6]={5,5,5,10,10,30} ; | |
1084 | if(fPHOSEvent->GetEntriesFast()>0){ | |
1085 | prevPHOS->AddFirst(fPHOSEvent) ; | |
1086 | fPHOSEvent=0; | |
1087 | if(prevPHOS->GetSize()>kMixEvents[fCenBin]){//Remove redundant events | |
1088 | TClonesArray * tmp = static_cast<TClonesArray*>(prevPHOS->Last()) ; | |
1089 | prevPHOS->RemoveLast() ; | |
1090 | delete tmp ; | |
1091 | } | |
1092 | } | |
1093 | // Post output data. | |
1094 | PostData(1, fOutputContainer); | |
1095 | fEventCounter++; | |
1096 | } | |
1097 | //________________________________________________________________________ | |
1098 | void AliPHOSHijingEfficiency::FillSecondaries(){ | |
1099 | //Sort secondaires | |
1100 | ||
1101 | const Double_t rcut = 1. ; | |
1102 | //Fill spectra of primary particles | |
1103 | //with proper weight | |
1104 | for(Int_t i=0; i<fStack->GetNtrack(); i++){ | |
1105 | TParticle * p = fStack->Particle(i) ; | |
1106 | if(p->R()>rcut) | |
1107 | continue ; | |
1108 | if(TMath::Abs(p->Y())>0.5) | |
1109 | continue ; | |
1110 | Double_t w = PrimaryParticleWeight(p) ; | |
1111 | Int_t primPdgCode=p->GetPdgCode() ; | |
1112 | switch(primPdgCode){ | |
1113 | case 22: FillHistogram(Form("hPrimPhot_cen%d",fCenBin),p->Pt(),w); | |
1114 | break ; | |
1115 | case 11: | |
1116 | case -11: | |
1117 | FillHistogram(Form("hPrimEl_cen%d",fCenBin),p->Pt(),w); | |
1118 | break ; | |
1119 | case 111: | |
1120 | FillHistogram(Form("hPrimPi0_cen%d",fCenBin),p->Pt(),w); | |
1121 | break ; | |
1122 | case 221: | |
1123 | FillHistogram(Form("hPrimEta_cen%d",fCenBin),p->Pt(),w); | |
1124 | break ; | |
1125 | case 211: | |
1126 | case -211: | |
1127 | FillHistogram(Form("hPrimPipm_cen%d",fCenBin),p->Pt(),w); | |
1128 | break ; | |
1129 | case 2212: //p | |
1130 | FillHistogram(Form("hPrimP_cen%d",fCenBin),p->Pt(),w); | |
1131 | break ; | |
1132 | case -2212: //pbar | |
1133 | FillHistogram(Form("hPrimPbar_cen%d",fCenBin),p->Pt(),w); | |
1134 | break ; | |
1135 | case 2112: //n | |
1136 | FillHistogram(Form("hPrimN_cen%d",fCenBin),p->Pt(),w); | |
1137 | break ; | |
1138 | case -2112: //nbar | |
1139 | FillHistogram(Form("hPrimNbar_cen%d",fCenBin),p->Pt(),w); | |
1140 | break ; | |
1141 | case 310: //nbar | |
1142 | FillHistogram(Form("hPrimK0S_cen%d",fCenBin),p->Pt(),w); | |
1143 | break ; | |
1144 | case 130: //nbar | |
1145 | FillHistogram(Form("hPrimK0L_cen%d",fCenBin),p->Pt(),w); | |
1146 | break ; | |
1147 | case 321: //K+ | |
1148 | case -321: //K- | |
1149 | FillHistogram(Form("hPrimKpm_cen%d",fCenBin),p->Pt(),w); | |
1150 | break ; | |
1151 | default: //other | |
1152 | FillHistogram(Form("hPrimOther_cen%d",fCenBin),p->Pt(),w); | |
1153 | } | |
1154 | } | |
1155 | ||
1156 | //Origins of secondary pi0s | |
1157 | for(Int_t i=0; i<fStack->GetNtrack(); i++){ | |
1158 | TParticle * p = fStack->Particle(i) ; | |
1159 | if(p->GetPdgCode()!=111) | |
1160 | continue ; | |
1161 | FillHistogram("Vertex",p->Pt(),p->R()); | |
1162 | if(p->R()<rcut) | |
1163 | continue ; | |
1164 | Double_t phi=p->Phi() ; | |
1165 | while(phi<0.)phi+=TMath::TwoPi() ; | |
1166 | while(phi>TMath::TwoPi())phi-=TMath::TwoPi() ; | |
1167 | FillHistogram("hSecondPi0RphiZ",p->R(),phi,p->Vz()) ; | |
1168 | Double_t w = PrimaryParticleWeight(p) ; | |
1169 | FillHistogram("hSecondPi0RE",p->R(),p->Pt(),w) ; | |
1170 | } | |
1171 | ||
1172 | TLorentzVector p1; | |
1173 | ||
1174 | Int_t inPHOS=fPHOSEvent->GetEntries() ; | |
1175 | for (Int_t i1=0; i1<inPHOS-1; i1++) { | |
1176 | AliCaloPhoton * ph1=(AliCaloPhoton*)fPHOSEvent->At(i1) ; | |
1177 | Double_t w1=ph1->GetWeight() ; | |
1178 | for (Int_t i2=i1+1; i2<inPHOS; i2++) { | |
1179 | AliCaloPhoton * ph2=(AliCaloPhoton*)fPHOSEvent->At(i2) ; | |
1180 | TLorentzVector p12 = *ph1 + *ph2; | |
1181 | Double_t w2=ph2->GetWeight() ; | |
1182 | Double_t w = TMath::Sqrt(w1*w2) ; | |
1183 | FillHistogram(Form("hParentAll_cen%d",fCenBin),p12.M(),p12.Pt(),w) ; | |
1184 | Int_t prim=FindCommonParent(ph1->GetPrimary(),ph2->GetPrimary()) ; | |
1185 | if(prim>-1){ | |
1186 | TParticle * particle = (TParticle *)fStack->Particle(prim); | |
1187 | FillHistogram("hMass_R",p12.M(),p12.Pt(),TMath::Sqrt(particle->R()*particle->R()+particle->Vz()*particle->Vz())) ; | |
1188 | ||
1189 | ||
1190 | Int_t pdgCode=particle->GetPdgCode() ; | |
1191 | if(pdgCode!=111){ //common parent - not pi0 | |
1192 | if(pdgCode==22) | |
1193 | FillHistogram(Form("hParentGamma_cen%d",fCenBin),p12.M(),p12.Pt(),w) ; | |
1194 | else{ | |
1195 | if(pdgCode==11 || pdgCode==-11){ | |
1196 | FillHistogram(Form("hParentEl_cen%d",fCenBin),p12.M(),p12.Pt(),w) ; | |
1197 | } | |
1198 | else{ | |
1199 | if(InPi0mass(p12.M() ,p12.Pt())){ | |
1200 | printf("Common parent: %d \n",pdgCode) ; | |
1201 | } | |
1202 | FillHistogram(Form("hParentOther_cen%d",fCenBin),p12.M(),p12.Pt(),w) ; | |
1203 | } | |
1204 | }//Not photons | |
1205 | }//Common parent not pi0 | |
1206 | else{ //common parent - pi0 | |
1207 | FillHistogram(Form("hParentPi0_cen%d",fCenBin),p12.M(),p12.Pt(),w) ; | |
1208 | FillHistogram(Form("Real_pi_R"),p12.M(),p12.Pt(),particle->R(),w) ; | |
1209 | FillHistogram(Form("Real_pi_Z"),p12.M(),p12.Pt(),particle->Vz(),w) ; | |
1210 | if(particle->R()<rcut && TMath::Abs(particle->Vz())<10.){ | |
1211 | FillHistogram(Form("hParentDirPi0_cen%d",fCenBin),p12.M(),p12.Pt(),w) ; | |
1212 | continue ; | |
1213 | } | |
1214 | //Common particle pi0, created off-vertex | |
1215 | Int_t primPi0=particle->GetFirstMother(); | |
1216 | if(primPi0==-1){ | |
1217 | FillHistogram(Form("hParentPi0NoPrim_cen%d",fCenBin),p12.M(),p12.Pt(),w) ; | |
1218 | } | |
1219 | else{ | |
1220 | Int_t primPdgCode=fStack->Particle(primPi0)->GetPdgCode() ; | |
1221 | switch(primPdgCode){ | |
1222 | case 221: FillHistogram(Form("hParentPi0Eta_cen%d",fCenBin),p12.M(),p12.Pt(),w) ; //eta | |
1223 | break ; | |
1224 | case 223: FillHistogram(Form("hParentPi0Omega_cen%d",fCenBin),p12.M(),p12.Pt(),w) ; //omega | |
1225 | break ; | |
1226 | case 211: //pi+- | |
1227 | case -211: FillHistogram(Form("hParentPi0Pipm_cen%d",fCenBin),p12.M(),p12.Pt(),w) ; // | |
1228 | break ; | |
1229 | case 321: //K+- | |
1230 | case -321: FillHistogram(Form("hParentPi0Kpm_cen%d",fCenBin),p12.M(),p12.Pt(),w) ; // | |
1231 | break ; | |
1232 | case 310: FillHistogram(Form("hParentPi0Ks_cen%d",fCenBin),p12.M(),p12.Pt(),w) ; // K0S | |
1233 | break ; | |
1234 | case 130: FillHistogram(Form("hParentPi0Kl_cen%d",fCenBin),p12.M(),p12.Pt(),w) ; // K0L | |
1235 | break ; | |
1236 | case 2212: //p | |
1237 | case 2112: //n | |
1238 | FillHistogram(Form("hParentPi0pn_cen%d",fCenBin),p12.M(),p12.Pt(),w) ; // pn | |
1239 | break ; | |
1240 | case -2212: //pbar | |
1241 | case -2112: //nbar | |
1242 | FillHistogram(Form("hParentPi0antipn_cen%d",fCenBin),p12.M(),p12.Pt(),w) ; // pn | |
1243 | break ; | |
1244 | default: //other | |
1245 | FillHistogram(Form("hParentPi0Other_cen%d",fCenBin),p12.M(),p12.Pt(),w) ; // | |
1246 | }//switch | |
1247 | }//pi0 with primary | |
1248 | }//common parent - pi0 | |
1249 | }//there is common primary | |
1250 | }//seond photon loop | |
1251 | }//first photon loop | |
1252 | ||
1253 | ||
1254 | //Now look at photon contaiminations | |
1255 | for (Int_t i1=0; i1<inPHOS-1; i1++) { | |
1256 | AliCaloPhoton * ph1=(AliCaloPhoton*)fPHOSEvent->At(i1) ; | |
1257 | Int_t iprim = ph1->GetPrimary() ; | |
1258 | if(iprim<0) | |
1259 | FillAllHistograms(Form("hGammaNoPrim_cen%d",fCenBin),ph1) ; // | |
1260 | else{ | |
1261 | //Find primary at vertex | |
1262 | TParticle * primPHOS = fStack->Particle(iprim) ; | |
1263 | Int_t iprimV=primPHOS->GetFirstMother(); | |
1264 | TParticle * primVtx = primPHOS ; | |
1265 | while((iprimV>-1) && primVtx->R()>rcut){ | |
1266 | primVtx = fStack->Particle(iprimV) ; | |
1267 | iprimV=primVtx->GetFirstMother(); | |
1268 | } | |
1269 | ||
1270 | //photon | |
1271 | Int_t primPdgCode=primVtx->GetPdgCode() ; | |
1272 | switch(primPdgCode){ | |
1273 | case 22: FillAllHistograms("hGammaPhot",ph1); | |
1274 | break ; | |
1275 | case 11: | |
1276 | case -11: | |
1277 | FillAllHistograms("hGammaEl",ph1); | |
1278 | break ; | |
1279 | case 111: | |
1280 | FillAllHistograms("hGammaPi0",ph1); | |
1281 | break ; | |
1282 | case 221: | |
1283 | FillAllHistograms("hGammaEta",ph1); | |
1284 | break ; | |
1285 | case 223: FillAllHistograms("hGammaOmega",ph1) ; //omega | |
1286 | break ; | |
1287 | case 211: | |
1288 | case -211: | |
1289 | FillAllHistograms("hGammaPipm",ph1); | |
1290 | //Find particle entered PHOS | |
1291 | if(primVtx == primPHOS) | |
1292 | FillAllHistograms("hGammaPipmDirect",ph1); | |
1293 | else{ | |
1294 | Int_t primPdgPHOS=primPHOS->GetPdgCode() ; | |
1295 | if(primPdgPHOS==22){ | |
1296 | FillAllHistograms("hGammaPipmGamma",ph1); | |
1297 | FillHistogram("hPipmGammaConvR",ph1->Pt(),primPHOS->R()); | |
1298 | FillHistogram("hPipmGammaConvRZ",primPHOS->Vz(),primPHOS->R()); | |
1299 | break ; | |
1300 | } | |
1301 | if(TMath::Abs(primPdgPHOS)==11){ | |
1302 | FillAllHistograms("hGammaPipmEl",ph1); | |
1303 | FillHistogram("hPipmElConvR",ph1->Pt(),primPHOS->R()); | |
1304 | break ; | |
1305 | } | |
1306 | if(TMath::Abs(primPdgPHOS)==2212){ | |
1307 | FillAllHistograms("hGammaPipmp",ph1); | |
1308 | FillHistogram("hPipmNConvR",ph1->Pt(),primPHOS->R()); | |
1309 | break ; | |
1310 | } | |
1311 | if(TMath::Abs(primPdgPHOS)==2112){ | |
1312 | FillAllHistograms("hGammaPipmn",ph1); | |
1313 | FillHistogram("hPipmNConvR",ph1->Pt(),primPHOS->R()); | |
1314 | break ; | |
1315 | } | |
1316 | FillAllHistograms("hGammaPipmOther",ph1); | |
1317 | FillHistogram("hPipmOtherConvR",ph1->Pt(),primPHOS->R()); | |
1318 | } | |
1319 | break ; | |
1320 | case 2212: //p | |
1321 | FillAllHistograms("hGammaP",ph1); | |
1322 | break ; | |
1323 | case -2212: //pbar | |
1324 | FillAllHistograms("hGammaPbar",ph1); | |
1325 | break ; | |
1326 | case 2112: //n | |
1327 | FillAllHistograms("hGammaN",ph1); | |
1328 | break ; | |
1329 | case -2112: //nbar | |
1330 | FillAllHistograms("hGammaNbar",ph1) ; // pn | |
1331 | break ; | |
1332 | case 310: //nbar | |
1333 | FillAllHistograms("hGammaK0S",ph1) ; // pn | |
1334 | break ; | |
1335 | case 130: //nbar | |
1336 | FillAllHistograms("hGammaK0L",ph1) ; // pn | |
1337 | break ; | |
1338 | case 321: //K+ | |
1339 | case -321: //K- | |
1340 | FillAllHistograms("hGammaKpm",ph1) ; // pn | |
1341 | break ; | |
1342 | case -323: | |
1343 | case 323: | |
1344 | case -313: | |
1345 | case 313: FillAllHistograms("hGammaKstar",ph1) ; // K*(892) | |
1346 | break ; | |
1347 | ||
1348 | case -2224 : //Deltas | |
1349 | case 2224 : //Deltas | |
1350 | case -2214 : //Deltas | |
1351 | case 2214 : //Deltas | |
1352 | case -2114 : //Deltas | |
1353 | case 2114 : //Deltas | |
1354 | case -1114 : //Deltas | |
1355 | case 1114 : //Deltas | |
1356 | FillAllHistograms("hGammaDelta",ph1) ; // pn | |
1357 | break ; | |
1358 | default: //other | |
1359 | if(primVtx->GetPDG()->Charge()) | |
1360 | FillAllHistograms("hGammaOtherCharged",ph1) ; // | |
1361 | else | |
1362 | FillAllHistograms("hGammaOtherNeutral",ph1) ; // | |
1363 | } | |
1364 | } | |
1365 | ||
1366 | }//single photons | |
1367 | ||
1368 | } | |
1369 | //________________________________________________________________________ | |
1370 | void AliPHOSHijingEfficiency::Terminate(Option_t *) | |
1371 | { | |
1372 | // Draw result to the screen | |
1373 | // Called once at the end of the query | |
1374 | ||
1375 | } | |
1376 | ||
1377 | //________________________________________________________________________ | |
1378 | Bool_t AliPHOSHijingEfficiency::IsGoodChannel(const char * det, Int_t mod, Int_t ix, Int_t iz) | |
1379 | { | |
1380 | //Check if this channel belogs to the good ones | |
1381 | ||
1382 | if(strcmp(det,"PHOS")==0){ | |
1383 | if(mod>5 || mod<1){ | |
1384 | AliError(Form("No bad map for PHOS module %d ",mod)) ; | |
1385 | return kTRUE ; | |
1386 | } | |
1387 | if(!fPHOSBadMap[mod]){ | |
1388 | AliError(Form("No Bad map for PHOS module %d",mod)) ; | |
1389 | return kTRUE ; | |
1390 | } | |
1391 | if(fPHOSBadMap[mod]->GetBinContent(ix,iz)>0) | |
1392 | return kFALSE ; | |
1393 | else | |
1394 | return kTRUE ; | |
1395 | } | |
1396 | else{ | |
1397 | AliError(Form("Can not find bad channels for detector %s ",det)) ; | |
1398 | } | |
1399 | return kTRUE ; | |
1400 | } | |
1401 | //_____________________________________________________________________________ | |
1402 | void AliPHOSHijingEfficiency::FillAllHistograms(const char * key,AliCaloPhoton * ph)const{ | |
1403 | //Fill All PID histograms | |
1404 | ||
1405 | Double_t w=ph->GetWeight() ; | |
1406 | Double_t pt = ph->Pt() ; | |
1407 | Double_t ptC=ph->GetMomV2()->Pt() ; | |
1408 | FillHistogram(Form("%s_All_cen%d",key,fCenBin),pt,w) ; | |
1409 | FillHistogram(Form("%s_Allcore_cen%d",key,fCenBin),ptC,w) ; | |
1410 | if(ph->IsCPVOK()){ | |
1411 | FillHistogram(Form("%s_CPV_cen%d",key,fCenBin),pt,w) ; | |
1412 | FillHistogram(Form("%s_CPVcore_cen%d",key,fCenBin),ptC,w) ; | |
1413 | } | |
1414 | if(ph->IsCPV2OK()){ | |
1415 | FillHistogram(Form("%s_CPV2_cen%d",key,fCenBin),pt,w) ; | |
1416 | FillHistogram(Form("%s_CPV2core_cen%d",key,fCenBin),ptC,w) ; | |
1417 | } | |
1418 | if(ph->IsDispOK()){ | |
1419 | FillHistogram(Form("%s_Disp_cen%d",key,fCenBin),pt,w) ; | |
1420 | FillHistogram(Form("%s_Dispcore_cen%d",key,fCenBin),ptC,w) ; | |
1421 | if(ph->IsDisp2OK()){ | |
1422 | FillHistogram(Form("%s_Disp2_cen%d",key,fCenBin),pt,w) ; | |
1423 | FillHistogram(Form("%s_Disp2core_cen%d",key,fCenBin),ptC,w) ; | |
1424 | } | |
1425 | if(ph->IsCPVOK()){ | |
1426 | FillHistogram(Form("%s_Both_cen%d",key,fCenBin),pt,w) ; | |
1427 | FillHistogram(Form("%s_Bothcore_cen%d",key,fCenBin),ptC,w) ; | |
1428 | } | |
1429 | } | |
1430 | } | |
1431 | //_____________________________________________________________________________ | |
1432 | void AliPHOSHijingEfficiency::FillHistogram(const char * key,Double_t x)const{ | |
1433 | //FillHistogram | |
1434 | TObject * tmp = fOutputContainer->FindObject(key) ; | |
1435 | if(!tmp){ | |
1436 | AliInfo(Form("can not find histogram <%s> ",key)) ; | |
1437 | return ; | |
1438 | } | |
1439 | if(tmp->IsA() == TClass::GetClass("TH1I")){ | |
1440 | ((TH1I*)tmp)->Fill(x) ; | |
1441 | return ; | |
1442 | } | |
1443 | if(tmp->IsA() == TClass::GetClass("TH1F")){ | |
1444 | ((TH1F*)tmp)->Fill(x) ; | |
1445 | return ; | |
1446 | } | |
1447 | if(tmp->IsA() == TClass::GetClass("TH1D")){ | |
1448 | ((TH1D*)tmp)->Fill(x) ; | |
1449 | return ; | |
1450 | } | |
1451 | AliInfo(Form("can not find 1D histogram <%s> ",key)) ; | |
1452 | } | |
1453 | //_____________________________________________________________________________ | |
1454 | void AliPHOSHijingEfficiency::FillHistogram(const char * key,Double_t x,Double_t y)const{ | |
1455 | //FillHistogram | |
1456 | TObject * tmp = fOutputContainer->FindObject(key) ; | |
1457 | if(!tmp){ | |
1458 | AliInfo(Form("can not find histogram <%s> ",key)) ; | |
1459 | return ; | |
1460 | } | |
1461 | if(tmp->IsA() == TClass::GetClass("TH1F")){ | |
1462 | ((TH1F*)tmp)->Fill(x,y) ; | |
1463 | return ; | |
1464 | } | |
1465 | if(tmp->IsA() == TClass::GetClass("TH2F")){ | |
1466 | ((TH2F*)tmp)->Fill(x,y) ; | |
1467 | return ; | |
1468 | } | |
1469 | AliError(Form("Calling FillHistogram with 2 parameters for histo <%s> of type %s",key,tmp->IsA()->GetName())) ; | |
1470 | } | |
1471 | ||
1472 | //_____________________________________________________________________________ | |
1473 | void AliPHOSHijingEfficiency::FillHistogram(const char * key,Double_t x,Double_t y, Double_t z) const{ | |
1474 | //Fills 1D histograms with key | |
1475 | TObject * tmp = fOutputContainer->FindObject(key) ; | |
1476 | if(!tmp){ | |
1477 | AliInfo(Form("can not find histogram <%s> ",key)) ; | |
1478 | return ; | |
1479 | } | |
1480 | if(tmp->IsA() == TClass::GetClass("TH2F")){ | |
1481 | ((TH2F*)tmp)->Fill(x,y,z) ; | |
1482 | return ; | |
1483 | } | |
1484 | if(tmp->IsA() == TClass::GetClass("TH3F")){ | |
1485 | ((TH3F*)tmp)->Fill(x,y,z) ; | |
1486 | return ; | |
1487 | } | |
1488 | } | |
1489 | //_____________________________________________________________________________ | |
1490 | void AliPHOSHijingEfficiency::FillHistogram(const char * key,Double_t x,Double_t y, Double_t z, Double_t w) const{ | |
1491 | //Fills 1D histograms with key | |
1492 | TObject * tmp = fOutputContainer->FindObject(key) ; | |
1493 | if(!tmp){ | |
1494 | AliInfo(Form("can not find histogram <%s> ",key)) ; | |
1495 | return ; | |
1496 | } | |
1497 | if(tmp->IsA() == TClass::GetClass("TH3F")){ | |
1498 | ((TH3F*)tmp)->Fill(x,y,z,w) ; | |
1499 | return ; | |
1500 | } | |
1501 | } | |
1502 | ||
1503 | //___________________________________________________________________________ | |
1504 | Int_t AliPHOSHijingEfficiency::ConvertRunNumber(Int_t run){ | |
1505 | ||
1506 | switch(run){ | |
1507 | case 139517 : return 137; | |
1508 | case 139514 : return 136; | |
1509 | case 139513 : return 135; | |
1510 | case 139511 : return 134; | |
1511 | case 139510 : return 133; | |
1512 | case 139507 : return 132; | |
1513 | case 139505 : return 131; | |
1514 | case 139504 : return 130; | |
1515 | case 139503 : return 129; | |
1516 | case 139470 : return 128; | |
1517 | case 139467 : return 127; | |
1518 | case 139466 : return 126; | |
1519 | case 139465 : return 125; | |
1520 | case 139440 : return 124; | |
1521 | case 139439 : return 123; | |
1522 | case 139438 : return 122; | |
1523 | case 139437 : return 121; | |
1524 | case 139360 : return 120; | |
1525 | case 139329 : return 119; | |
1526 | case 139328 : return 118; | |
1527 | case 139314 : return 117; | |
1528 | case 139311 : return 116; | |
1529 | case 139310 : return 115; | |
1530 | case 139309 : return 114; | |
1531 | case 139308 : return 113; | |
1532 | case 139173 : return 112; | |
1533 | case 139172 : return 111; | |
1534 | case 139110 : return 110; | |
1535 | case 139107 : return 109; | |
1536 | case 139105 : return 108; | |
1537 | case 139104 : return 107; | |
1538 | case 139042 : return 106; | |
1539 | case 139038 : return 105; | |
1540 | case 139037 : return 104; | |
1541 | case 139036 : return 103; | |
1542 | case 139029 : return 102; | |
1543 | case 139028 : return 101; | |
1544 | case 138983 : return 100; | |
1545 | case 138982 : return 99; | |
1546 | case 138980 : return 98; | |
1547 | case 138979 : return 97; | |
1548 | case 138978 : return 96; | |
1549 | case 138977 : return 95; | |
1550 | case 138976 : return 94; | |
1551 | case 138973 : return 93; | |
1552 | case 138972 : return 92; | |
1553 | case 138965 : return 91; | |
1554 | case 138924 : return 90; | |
1555 | case 138872 : return 89; | |
1556 | case 138871 : return 88; | |
1557 | case 138870 : return 87; | |
1558 | case 138837 : return 86; | |
1559 | case 138830 : return 85; | |
1560 | case 138828 : return 84; | |
1561 | case 138826 : return 83; | |
1562 | case 138796 : return 82; | |
1563 | case 138795 : return 81; | |
1564 | case 138742 : return 80; | |
1565 | case 138732 : return 79; | |
1566 | case 138730 : return 78; | |
1567 | case 138666 : return 77; | |
1568 | case 138662 : return 76; | |
1569 | case 138653 : return 75; | |
1570 | case 138652 : return 74; | |
1571 | case 138638 : return 73; | |
1572 | case 138624 : return 72; | |
1573 | case 138621 : return 71; | |
1574 | case 138583 : return 70; | |
1575 | case 138582 : return 69; | |
1576 | case 138579 : return 68; | |
1577 | case 138578 : return 67; | |
1578 | case 138534 : return 66; | |
1579 | case 138469 : return 65; | |
1580 | case 138442 : return 64; | |
1581 | case 138439 : return 63; | |
1582 | case 138438 : return 62; | |
1583 | case 138396 : return 61; | |
1584 | case 138364 : return 60; | |
1585 | case 138359 : return 59; | |
1586 | case 138275 : return 58; | |
1587 | case 138225 : return 57; | |
1588 | case 138201 : return 56; | |
1589 | case 138200 : return 55; | |
1590 | case 138197 : return 54; | |
1591 | case 138192 : return 53; | |
1592 | case 138190 : return 52; | |
1593 | case 138154 : return 51; | |
1594 | case 138153 : return 50; | |
1595 | case 138151 : return 49; | |
1596 | case 138150 : return 48; | |
1597 | case 138126 : return 47; | |
1598 | case 138125 : return 46; | |
1599 | case 137848 : return 45; | |
1600 | case 137847 : return 44; | |
1601 | case 137844 : return 43; | |
1602 | case 137843 : return 42; | |
1603 | case 137752 : return 41; | |
1604 | case 137751 : return 40; | |
1605 | case 137748 : return 39; | |
1606 | case 137724 : return 38; | |
1607 | case 137722 : return 37; | |
1608 | case 137718 : return 36; | |
1609 | case 137704 : return 35; | |
1610 | case 137693 : return 34; | |
1611 | case 137692 : return 33; | |
1612 | case 137691 : return 32; | |
1613 | case 137689 : return 31; | |
1614 | case 137686 : return 30; | |
1615 | case 137685 : return 29; | |
1616 | case 137639 : return 28; | |
1617 | case 137638 : return 27; | |
1618 | case 137608 : return 26; | |
1619 | case 137595 : return 25; | |
1620 | case 137549 : return 24; | |
1621 | case 137546 : return 23; | |
1622 | case 137544 : return 22; | |
1623 | case 137541 : return 21; | |
1624 | case 137539 : return 20; | |
1625 | case 137531 : return 19; | |
1626 | case 137530 : return 18; | |
1627 | case 137443 : return 17; | |
1628 | case 137441 : return 16; | |
1629 | case 137440 : return 15; | |
1630 | case 137439 : return 14; | |
1631 | case 137434 : return 13; | |
1632 | case 137432 : return 12; | |
1633 | case 137431 : return 11; | |
1634 | case 137430 : return 10; | |
1635 | case 137366 : return 9; | |
1636 | case 137243 : return 8; | |
1637 | case 137236 : return 7; | |
1638 | case 137235 : return 6; | |
1639 | case 137232 : return 5; | |
1640 | case 137231 : return 4; | |
1641 | case 137165 : return 3; | |
1642 | case 137162 : return 2; | |
1643 | case 137161 : return 1; | |
1644 | default : return 199; | |
1645 | } | |
1646 | ||
1647 | } | |
1648 | //_____________________________________________________________________________ | |
1649 | Bool_t AliPHOSHijingEfficiency::TestLambda(Double_t pt,Double_t l1,Double_t l2){ | |
1650 | ||
1651 | //For R=3.5 | |
1652 | Double_t l1Mean = 1.170014 -0.059465/(1.+0.019343*pt+0.147544*pt*pt) ; | |
1653 | Double_t l2Mean = 1.626270 + 0.761554*exp(-1.213839*pt)-0.020027*pt ; | |
1654 | Double_t l1Sigma = 0.133409 + 0.261307*exp(-0.636874*pt)-0.002849*pt ; | |
1655 | Double_t l2Sigma = 0.289698 + 0.459400*exp(-1.214242*pt)-0.012578*pt ; | |
1656 | Double_t c=-0.124103 ; | |
1657 | /* | |
1658 | Double_t l2Mean = 1.53126+9.50835e+06/(1.+1.08728e+07*pt+1.73420e+06*pt*pt) ; | |
1659 | Double_t l1Mean = 1.12365+0.123770*TMath::Exp(-pt*0.246551)+5.30000e-03*pt ; | |
1660 | Double_t l2Sigma = 6.48260e-02+7.60261e+10/(1.+1.53012e+11*pt+5.01265e+05*pt*pt)+9.00000e-03*pt; | |
1661 | Double_t l1Sigma = 4.44719e-04+6.99839e-01/(1.+1.22497e+00*pt+6.78604e-07*pt*pt)+9.00000e-03*pt; | |
1662 | Double_t c=-0.35-0.550*TMath::Exp(-0.390730*pt) ; | |
1663 | */ | |
1664 | Double_t R2=0.5*(l1-l1Mean)*(l1-l1Mean)/l1Sigma/l1Sigma + | |
1665 | 0.5*(l2-l2Mean)*(l2-l2Mean)/l2Sigma/l2Sigma + | |
1666 | 0.5*c*(l1-l1Mean)*(l2-l2Mean)/l1Sigma/l2Sigma ; | |
1667 | return (R2<2.5*2.5) ; | |
1668 | ||
1669 | } | |
1670 | //_____________________________________________________________________________ | |
1671 | Bool_t AliPHOSHijingEfficiency::TestLambda2(Double_t pt,Double_t l1,Double_t l2){ | |
1672 | ||
1673 | //For R=4.5 | |
1674 | Double_t l1Mean = 1.150200 + 0.097886/(1.+1.486645*pt+0.000038*pt*pt) ; | |
1675 | Double_t l2Mean = 1.574706 + 0.997966*exp(-0.895075*pt)-0.010666*pt ; | |
1676 | Double_t l1Sigma = 0.100255 + 0.337177*exp(-0.517684*pt)+0.001170*pt ; | |
1677 | Double_t l2Sigma = 0.232580 + 0.573401*exp(-0.735903*pt)-0.002325*pt ; | |
1678 | Double_t c = -0.110983 -0.017353/(1.-1.836995*pt+0.934517*pt*pt) ; | |
1679 | ||
1680 | /* | |
1681 | Double_t l2Mean = 1.53126+9.50835e+06/(1.+1.08728e+07*pt+1.73420e+06*pt*pt) ; | |
1682 | Double_t l1Mean = 1.12365+0.123770*TMath::Exp(-pt*0.246551)+5.30000e-03*pt ; | |
1683 | Double_t l2Sigma = 6.48260e-02+7.60261e+10/(1.+1.53012e+11*pt+5.01265e+05*pt*pt)+9.00000e-03*pt; | |
1684 | Double_t l1Sigma = 4.44719e-04+6.99839e-01/(1.+1.22497e+00*pt+6.78604e-07*pt*pt)+9.00000e-03*pt; | |
1685 | Double_t c=-0.35-0.550*TMath::Exp(-0.390730*pt) ; | |
1686 | */ | |
1687 | Double_t R2=0.5*(l1-l1Mean)*(l1-l1Mean)/l1Sigma/l1Sigma + | |
1688 | 0.5*(l2-l2Mean)*(l2-l2Mean)/l2Sigma/l2Sigma + | |
1689 | 0.5*c*(l1-l1Mean)*(l2-l2Mean)/l1Sigma/l2Sigma ; | |
1690 | return (R2<2.5*2.5) ; | |
1691 | ||
1692 | } | |
1693 | //____________________________________________________________________________ | |
1694 | Double_t AliPHOSHijingEfficiency::TestCPV(Double_t dx, Double_t dz, Double_t pt, Int_t charge){ | |
1695 | //Parameterization of LHC10h period | |
1696 | //_true if neutral_ | |
1697 | ||
1698 | Double_t meanX=0; | |
1699 | Double_t meanZ=0.; | |
1700 | Double_t sx=TMath::Min(5.4,2.59719e+02*TMath::Exp(-pt/1.02053e-01)+ | |
1701 | 6.58365e-01*5.91917e-01*5.91917e-01/((pt-9.61306e-01)*(pt-9.61306e-01)+5.91917e-01*5.91917e-01)+1.59219); | |
1702 | Double_t sz=TMath::Min(2.75,4.90341e+02*1.91456e-02*1.91456e-02/(pt*pt+1.91456e-02*1.91456e-02)+1.60) ; | |
1703 | AliESDEvent *event = dynamic_cast<AliESDEvent*>(InputEvent()); | |
1704 | Double_t mf = event->GetMagneticField(); //Positive for ++ and negative for -- | |
1705 | ||
1706 | if(mf<0.){ //field -- | |
1707 | meanZ = -0.468318 ; | |
1708 | if(charge>0) | |
1709 | meanX=TMath::Min(7.3, 3.89994*1.20679*1.20679/(pt*pt+1.20679*1.20679)+0.249029+2.49088e+07*TMath::Exp(-pt*3.33650e+01)) ; | |
1710 | else | |
1711 | meanX=-TMath::Min(7.7,3.86040*0.912499*0.912499/(pt*pt+0.912499*0.912499)+1.23114+4.48277e+05*TMath::Exp(-pt*2.57070e+01)) ; | |
1712 | } | |
1713 | else{ //Field ++ | |
1714 | meanZ= -0.468318; | |
1715 | if(charge>0) | |
1716 | meanX=-TMath::Min(8.0,3.86040*1.31357*1.31357/(pt*pt+1.31357*1.31357)+0.880579+7.56199e+06*TMath::Exp(-pt*3.08451e+01)) ; | |
1717 | else | |
1718 | meanX= TMath::Min(6.85, 3.89994*1.16240*1.16240/(pt*pt+1.16240*1.16240)-0.120787+2.20275e+05*TMath::Exp(-pt*2.40913e+01)) ; | |
1719 | } | |
1720 | ||
1721 | Double_t rz=(dz-meanZ)/sz ; | |
1722 | Double_t rx=(dx-meanX)/sx ; | |
1723 | return TMath::Sqrt(rx*rx+rz*rz) ; | |
1724 | } | |
1725 | //____________________________________________________________________________ | |
1726 | Bool_t AliPHOSHijingEfficiency::TestTOF(Double_t t, Double_t e){ | |
1727 | ||
1728 | Double_t sigma = TMath::Sqrt(2.23183e-09*2.23183e-09 | |
1729 | +2.24611e-09*2.24611e-09/e | |
1730 | +5.65054e-09*5.65054e-09/e/e) ; | |
1731 | sigma=TMath::Min(20.e-9,sigma) ; //for the soft (<400 MeV) part | |
1732 | Double_t mean=1.1e-9 ; | |
1733 | if(TMath::Abs(t-mean)<2.*sigma) | |
1734 | return kTRUE ; | |
1735 | else | |
1736 | if(TMath::Abs(t-mean+100.e-9)<2.*sigma) | |
1737 | return kTRUE ; | |
1738 | ||
1739 | return kFALSE ; | |
1740 | } | |
1741 | //____________________________________________________________________________ | |
1742 | Double_t AliPHOSHijingEfficiency::CoreEnergy(AliESDCaloCluster * clu){ | |
1743 | //calculate energy of the cluster in the circle with radius distanceCut around the maximum | |
1744 | ||
1745 | //Can not use already calculated coordinates? | |
1746 | //They have incidence correction... | |
1747 | const Double_t distanceCut =3.5 ; | |
1748 | const Double_t logWeight=4.5 ; | |
1749 | ||
1750 | Double32_t * elist = clu->GetCellsAmplitudeFraction() ; | |
1751 | // Calculates the center of gravity in the local PHOS-module coordinates | |
1752 | Float_t wtot = 0; | |
1753 | Double_t xc[100]={0} ; | |
1754 | Double_t zc[100]={0} ; | |
1755 | Double_t x = 0 ; | |
1756 | Double_t z = 0 ; | |
1757 | Int_t mulDigit=TMath::Min(100,clu->GetNCells()) ; | |
1758 | for(Int_t iDigit=0; iDigit<mulDigit; iDigit++) { | |
1759 | Int_t relid[4] ; | |
1760 | Float_t xi ; | |
1761 | Float_t zi ; | |
1762 | fPHOSGeo->AbsToRelNumbering(clu->GetCellAbsId(iDigit), relid) ; | |
1763 | fPHOSGeo->RelPosInModule(relid, xi, zi); | |
1764 | xc[iDigit]=xi ; | |
1765 | zc[iDigit]=zi ; | |
1766 | if (clu->E()>0 && elist[iDigit]>0) { | |
1767 | Float_t w = TMath::Max( 0., logWeight + TMath::Log( elist[iDigit] / clu->E() ) ) ; | |
1768 | x += xc[iDigit] * w ; | |
1769 | z += zc[iDigit] * w ; | |
1770 | wtot += w ; | |
1771 | } | |
1772 | } | |
1773 | if (wtot>0) { | |
1774 | x /= wtot ; | |
1775 | z /= wtot ; | |
1776 | } | |
1777 | Double_t coreE=0. ; | |
1778 | for(Int_t iDigit=0; iDigit < mulDigit; iDigit++) { | |
1779 | Double_t distance = TMath::Sqrt((xc[iDigit]-x)*(xc[iDigit]-x)+(zc[iDigit]-z)*(zc[iDigit]-z)) ; | |
1780 | if(distance < distanceCut) | |
1781 | coreE += elist[iDigit] ; | |
1782 | } | |
1783 | //Apply non-linearity correction | |
1784 | return rnlin(coreE) ; | |
1785 | } | |
1786 | //____________________________________________________________________________ | |
1787 | Bool_t AliPHOSHijingEfficiency::AreNeibors(Int_t id1,Int_t id2){ | |
1788 | ||
1789 | Int_t relid1[4] ; | |
1790 | fPHOSGeo->AbsToRelNumbering(id1, relid1) ; | |
1791 | ||
1792 | Int_t relid2[4] ; | |
1793 | fPHOSGeo->AbsToRelNumbering(id2, relid2) ; | |
1794 | ||
1795 | if ( (relid1[0] == relid2[0]) && (relid1[1]==relid2[1]) ) { // inside the same PHOS module | |
1796 | Int_t rowdiff = TMath::Abs( relid1[2] - relid2[2] ) ; | |
1797 | Int_t coldiff = TMath::Abs( relid1[3] - relid2[3] ) ; | |
1798 | ||
1799 | if (( coldiff <= 1 ) && ( rowdiff <= 1 )){ //At least common vertex | |
1800 | // if (( relid1[2]==relid2[2] && coldiff <= 1 ) || ( relid1[3]==relid2[3] && rowdiff <= 1 )){ //common side | |
1801 | return 1 ; | |
1802 | } | |
1803 | else { | |
1804 | if((relid2[2] > relid1[2]) && (relid2[3] > relid1[3]+1)) | |
1805 | return 0; // Difference in row numbers is too large to look further | |
1806 | } | |
1807 | return 0 ; | |
1808 | ||
1809 | } | |
1810 | ||
1811 | return 0 ; | |
1812 | } | |
1813 | //____________________________________________________________________________ | |
1814 | void AliPHOSHijingEfficiency::Reclusterize(AliESDCaloCluster * clu){ | |
1815 | //Re-clusterize to make continues cluster | |
1816 | ||
1817 | const Int_t oldMulDigit=clu->GetNCells() ; | |
1818 | Double32_t * elist = clu->GetCellsAmplitudeFraction() ; | |
1819 | UShort_t * dlist = clu->GetCellsAbsId(); | |
1820 | ||
1821 | Int_t index[oldMulDigit] ; | |
1822 | Bool_t used[oldMulDigit] ; | |
1823 | for(Int_t i=0; i<oldMulDigit; i++) used[i]=0 ; | |
1824 | Int_t inClu=0 ; | |
1825 | Double_t eMax=0. ; | |
1826 | //find maximum | |
1827 | for(Int_t iDigit=0; iDigit<oldMulDigit; iDigit++) { | |
1828 | if(eMax<elist[iDigit]){ | |
1829 | eMax=elist[iDigit]; | |
1830 | index[0]=iDigit ; | |
1831 | inClu=1 ; | |
1832 | } | |
1833 | } | |
1834 | if(inClu==0){ //empty cluster | |
1835 | return ; | |
1836 | } | |
1837 | used[index[0]]=kTRUE ; //mark as used | |
1838 | for(Int_t i=0; i<inClu; i++){ | |
1839 | for(Int_t iDigit=0 ;iDigit<oldMulDigit; iDigit++){ | |
1840 | if(used[iDigit]) //already used | |
1841 | continue ; | |
1842 | if(AreNeibors(dlist[index[i]],dlist[iDigit])){ | |
1843 | index[inClu]= iDigit ; | |
1844 | inClu++ ; | |
1845 | used[iDigit]=kTRUE ; | |
1846 | } | |
1847 | } | |
1848 | } | |
1849 | ||
1850 | if(inClu==oldMulDigit) //no need to modify | |
1851 | return ; | |
1852 | ||
1853 | clu->SetNCells(inClu); | |
1854 | //copy | |
1855 | UShort_t tmpD[oldMulDigit] ; | |
1856 | Double_t tmpE[oldMulDigit] ; | |
1857 | for(Int_t i=0; i<oldMulDigit; i++){ | |
1858 | tmpD[i]=dlist[i] ; | |
1859 | tmpE[i]=elist[i] ; | |
1860 | } | |
1861 | //change order of digits in list so that | |
1862 | //first inClu cells were true ones | |
1863 | for(Int_t i=0; i<inClu; i++){ | |
1864 | dlist[i]=tmpD[index[i]] ; | |
1865 | elist[i]=tmpE[index[i]] ; | |
1866 | } | |
1867 | ||
1868 | ||
1869 | } | |
1870 | ||
1871 | //____________________________________________________________________________ | |
1872 | void AliPHOSHijingEfficiency::EvalLambdas(AliESDCaloCluster * clu, Int_t iR,Double_t &m02, Double_t &m20){ | |
1873 | //calculate dispecrsion of the cluster in the circle with radius distanceCut around the maximum | |
1874 | ||
1875 | Double_t rCut=0. ; | |
1876 | if(iR==0) | |
1877 | rCut=3.5 ; | |
1878 | else | |
1879 | rCut=4.5 ; | |
1880 | ||
1881 | ||
1882 | Double32_t * elist = clu->GetCellsAmplitudeFraction() ; | |
1883 | // Calculates the center of gravity in the local PHOS-module coordinates | |
1884 | Float_t wtot = 0; | |
1885 | Double_t xc[100]={0} ; | |
1886 | Double_t zc[100]={0} ; | |
1887 | Double_t x = 0 ; | |
1888 | Double_t z = 0 ; | |
1889 | Int_t mulDigit=TMath::Min(100,clu->GetNCells()) ; | |
1890 | const Double_t logWeight=4.5 ; | |
1891 | for(Int_t iDigit=0; iDigit<mulDigit; iDigit++) { | |
1892 | Int_t relid[4] ; | |
1893 | Float_t xi ; | |
1894 | Float_t zi ; | |
1895 | fPHOSGeo->AbsToRelNumbering(clu->GetCellAbsId(iDigit), relid) ; | |
1896 | fPHOSGeo->RelPosInModule(relid, xi, zi); | |
1897 | xc[iDigit]=xi ; | |
1898 | zc[iDigit]=zi ; | |
1899 | if (clu->E()>0 && elist[iDigit]>0) { | |
1900 | Float_t w = TMath::Max( 0., logWeight + TMath::Log( elist[iDigit] / clu->E() ) ) ; | |
1901 | x += xc[iDigit] * w ; | |
1902 | z += zc[iDigit] * w ; | |
1903 | wtot += w ; | |
1904 | } | |
1905 | } | |
1906 | if (wtot>0) { | |
1907 | x /= wtot ; | |
1908 | z /= wtot ; | |
1909 | } | |
1910 | ||
1911 | wtot = 0. ; | |
1912 | Double_t dxx = 0.; | |
1913 | Double_t dzz = 0.; | |
1914 | Double_t dxz = 0.; | |
1915 | Double_t xCut = 0. ; | |
1916 | Double_t zCut = 0. ; | |
1917 | for(Int_t iDigit=0; iDigit<mulDigit; iDigit++) { | |
1918 | if (clu->E()>0 && elist[iDigit]>0.) { | |
1919 | Double_t w = TMath::Max( 0., logWeight + TMath::Log( elist[iDigit] / clu->E() ) ) ; | |
1920 | Double_t xi= xc[iDigit] ; | |
1921 | Double_t zi= zc[iDigit] ; | |
1922 | if((xi-x)*(xi-x)+(zi-z)*(zi-z) < rCut*rCut){ | |
1923 | xCut += w * xi ; | |
1924 | zCut += w * zi ; | |
1925 | dxx += w * xi * xi ; | |
1926 | dzz += w * zi * zi ; | |
1927 | dxz += w * xi * zi ; | |
1928 | wtot += w ; | |
1929 | } | |
1930 | } | |
1931 | ||
1932 | } | |
1933 | if (wtot>0) { | |
1934 | xCut/= wtot ; | |
1935 | zCut/= wtot ; | |
1936 | dxx /= wtot ; | |
1937 | dzz /= wtot ; | |
1938 | dxz /= wtot ; | |
1939 | dxx -= xCut * xCut ; | |
1940 | dzz -= zCut * zCut ; | |
1941 | dxz -= xCut * zCut ; | |
1942 | ||
1943 | m02 = 0.5 * (dxx + dzz) + TMath::Sqrt( 0.25 * (dxx - dzz) * (dxx - dzz) + dxz * dxz ) ; | |
1944 | m20 = 0.5 * (dxx + dzz) - TMath::Sqrt( 0.25 * (dxx - dzz) * (dxx - dzz) + dxz * dxz ) ; | |
1945 | } | |
1946 | else { | |
1947 | m20=m02=0.; | |
1948 | } | |
1949 | ||
1950 | } | |
1951 | //___________________________________________________________________________ | |
1952 | void AliPHOSHijingEfficiency::ProcessMC(){ | |
1953 | //fill histograms for efficiensy etc. calculation | |
1954 | const Double_t rcut = 1. ; //cut for primary particles | |
1955 | //---------First pi0/eta----------------------------- | |
1956 | char partName[10] ; | |
1957 | char hkey[55] ; | |
1958 | ||
1959 | if(!fStack) return ; | |
1960 | for(Int_t i=0;i<fStack->GetNtrack();i++){ | |
1961 | TParticle* particle = fStack->Particle(i); | |
1962 | if(particle->GetPdgCode() == 111) | |
1963 | snprintf(partName,10,"pi0") ; | |
1964 | else | |
1965 | if(particle->GetPdgCode() == 221) | |
1966 | snprintf(partName,10,"eta") ; | |
1967 | else | |
1968 | if(particle->GetPdgCode() == 22) | |
1969 | snprintf(partName,10,"gamma") ; | |
1970 | else | |
1971 | continue ; | |
1972 | ||
1973 | //Primary particle | |
1974 | Double_t r=particle->R() ; | |
1975 | Double_t pt = particle->Pt() ; | |
1976 | //Distribution over vertex | |
1977 | FillHistogram(Form("hMC_%s_vertex",partName),pt,r) ; | |
1978 | ||
1979 | if(r >rcut) | |
1980 | continue ; | |
1981 | ||
1982 | //Total number of pi0 with creation radius <1 cm | |
1983 | Double_t w = PrimaryParticleWeight(particle) ; | |
1984 | snprintf(hkey,55,"hMC_all_%s_cen%d",partName,fCenBin) ; | |
1985 | FillHistogram(hkey,pt,w) ; | |
1986 | if(TMath::Abs(particle->Y())<0.12){ | |
1987 | snprintf(hkey,55,"hMC_unitEta_%s_cen%d",partName,fCenBin) ; | |
1988 | FillHistogram(hkey,pt,w) ; | |
1989 | } | |
1990 | ||
1991 | snprintf(hkey,55,"hMC_rap_%s_cen%d",partName,fCenBin) ; | |
1992 | FillHistogram(hkey,particle->Y(),w) ; | |
1993 | ||
1994 | Double_t phi=particle->Phi() ; | |
1995 | while(phi<0.)phi+=TMath::TwoPi() ; | |
1996 | while(phi>TMath::TwoPi())phi-=TMath::TwoPi() ; | |
1997 | snprintf(hkey,55,"hMC_phi_%s_cen%d",partName,fCenBin) ; | |
1998 | FillHistogram(hkey,phi,w) ; | |
1999 | } | |
2000 | } | |
2001 | //___________________________________________________________________________ | |
2002 | Int_t AliPHOSHijingEfficiency::FindPrimary(AliESDCaloCluster*clu, Bool_t&sure){ | |
2003 | //Finds primary and estimates if it unique one? | |
3c77bbdf | 2004 | //First check can it be photon/electron |
2005 | const Double_t emFraction=0.9; //part of energy of cluster to be assigned to EM particle | |
04c118da | 2006 | Int_t n=clu->GetNLabels() ; |
3c77bbdf | 2007 | for(Int_t i=0; i<n; i++){ |
2008 | TParticle* p= fStack->Particle(clu->GetLabelAt(i)) ; | |
2009 | Int_t pdg = p->GetPdgCode() ; | |
2010 | if(pdg==22 || pdg==11 || pdg == -11){ | |
2011 | if(p->Energy()>emFraction*clu->E()){ | |
2012 | sure=kTRUE ; | |
2013 | return clu->GetLabelAt(i); | |
2014 | } | |
2015 | } | |
2016 | } | |
2017 | ||
04c118da | 2018 | Double_t* Ekin= new Double_t[n] ; |
2019 | for(Int_t i=0; i<n; i++){ | |
2020 | TParticle* p= fStack->Particle(clu->GetLabelAt(i)) ; | |
2021 | Ekin[i]=p->P() ; // estimate of kinetic energy | |
2022 | if(p->GetPdgCode()==-2212 || p->GetPdgCode()==-2112){ | |
2023 | Ekin[i]+=1.8 ; //due to annihilation | |
2024 | } | |
2025 | } | |
2026 | Int_t iMax=0; | |
2027 | Double_t eMax=0.,eSubMax=0. ; | |
2028 | for(Int_t i=0; i<n; i++){ | |
2029 | if(Ekin[i]>eMax){ | |
2030 | eSubMax=eMax; | |
2031 | eMax=Ekin[i]; | |
2032 | iMax=i; | |
2033 | } | |
2034 | } | |
2035 | if(eSubMax>0.8*eMax)//not obvious primary | |
2036 | sure=kFALSE; | |
2037 | else | |
2038 | sure=kTRUE; | |
2039 | delete Ekin; | |
2040 | return clu->GetLabelAt(iMax) ; | |
2041 | } | |
2042 | //___________________________________________________________________________ | |
2043 | Double_t AliPHOSHijingEfficiency::PrimaryWeight(Int_t primary){ | |
2044 | //Check who is the primary and introduce weight to correct primary spectrum | |
2045 | ||
2046 | if(primary<0 || primary>=fStack->GetNtrack()) | |
2047 | return 1 ; | |
2048 | //trace primaries up to IP | |
2049 | TParticle* particle = fStack->Particle(primary); | |
2050 | Double_t r=particle->R() ; | |
2051 | Int_t mother = particle->GetFirstMother() ; | |
2052 | while(mother>-1){ | |
2053 | if(r<1. && particle->GetPdgCode()==111) | |
2054 | break ; | |
2055 | particle = fStack->Particle(mother); | |
2056 | mother = particle->GetFirstMother() ; | |
2057 | r=particle->R() ; | |
2058 | } | |
2059 | ||
2060 | return TMath::Max(0.,PrimaryParticleWeight(particle)) ; | |
2061 | } | |
2062 | //________________________________________________________________________ | |
2063 | Double_t AliPHOSHijingEfficiency::PrimaryParticleWeight(TParticle * particle){ | |
2064 | ||
2065 | Int_t pdg = particle->GetPdgCode() ; | |
2066 | Int_t type=0 ; | |
2067 | if(pdg == 111 || TMath::Abs(pdg)==211){ | |
2068 | type =1 ; | |
2069 | } | |
2070 | else{ | |
2071 | if(TMath::Abs(pdg)<1000){ //Kaon-like | |
2072 | type =2 ; | |
2073 | } | |
2074 | else | |
2075 | type = 3; //baryons | |
2076 | } | |
2077 | ||
2078 | Double_t x = particle->Pt() ; | |
2079 | if(type==1){ | |
2080 | if(fCenBin==0) //0-5 | |
2081 | return (1.662990+1.140890*x-0.192088*x*x)/(1.-0.806630*x+0.304771*x*x)+0.141690*x ; | |
2082 | if(fCenBin==1) //5-10 | |
2083 | return (1.474351+0.791492*x-0.066369*x*x)/(1.-0.839338*x+0.317312*x*x)+0.093289*x ; | |
2084 | if(fCenBin==2) //10-20 | |
2085 | return (1.174728+0.959681*x-0.137695*x*x)/(1.-0.788873*x+0.299538*x*x)+0.128759*x ; | |
2086 | if(fCenBin==3) //20-40 | |
2087 | return (0.927335+0.475349*x+0.004364*x*x)/(1.-0.817966*x+0.309787*x*x)+0.086899*x ; | |
2088 | if(fCenBin==4) //40-60 | |
2089 | return (0.676878+0.190680*x+0.077031*x*x)/(1.-0.790623*x+0.305183*x*x)+0.064510*x ; | |
2090 | if(fCenBin==5) //60-80 | |
2091 | return (0.684726-0.606262*x+0.409963*x*x)/(1.-1.080061*x+0.456933*x*x)+0.005151*x ; | |
2092 | } | |
2093 | if(type==2){ | |
2094 | if(fCenBin==0) //0-5 | |
2095 | return (-0.417131+2.253936*x-0.337731*x*x)/(1.-0.909892*x+0.316820*x*x)+0.157312*x ; | |
2096 | if(fCenBin==1) //5-10 | |
2097 | return (-0.352275+1.844466*x-0.248598*x*x)/(1.-0.897048*x+0.316462*x*x)+0.132461*x ; | |
2098 | if(fCenBin==2) //10-20 | |
2099 | return (-0.475481+1.975108*x-0.336013*x*x)/(1.-0.801028*x+0.276705*x*x)+0.188164*x ; | |
2100 | if(fCenBin==3) //20-40 | |
2101 | return (-0.198954+1.068789*x-0.103540*x*x)/(1.-0.848354*x+0.299209*x*x)+0.112939*x ; | |
2102 | if(fCenBin==4) //40-60 | |
2103 | return (-0.111052+0.664041*x-0.019717*x*x)/(1.-0.804916*x+0.300779*x*x)+0.095784*x ; | |
2104 | if(fCenBin==5) //0-5 | |
2105 | return (0.202788-0.439832*x+0.564585*x*x)/(1.-1.254029*x+0.679444*x*x)+0.016235*x ; | |
2106 | } | |
2107 | if(type==3){ | |
2108 | if(fCenBin==0) //0-5 | |
2109 | return (-1.312732+2.743568*x-0.375775*x*x)/(1.-0.717533*x+0.164694*x*x)+0.164445*x ; | |
2110 | if(fCenBin==1) //5-10 | |
2111 | return (-1.229425+2.585889*x-0.330164*x*x)/(1.-0.715892*x+0.167386*x*x)+0.133085*x ; | |
2112 | if(fCenBin==2) //10-20 | |
2113 | return (-1.135677+2.397489*x-0.320355*x*x)/(1.-0.709312*x+0.164350*x*x)+0.146095*x ; | |
2114 | if(fCenBin==3) //20-40 | |
2115 | return (-0.889993+1.928263*x-0.220785*x*x)/(1.-0.715991*x+0.174729*x*x)+0.095098*x ; | |
2116 | if(fCenBin==4) //40-60 | |
2117 | return (-0.539237+1.329118*x-0.115439*x*x)/(1.-0.722906*x+0.186832*x*x)+0.059267*x ; | |
2118 | if(fCenBin==5) //60-80 | |
2119 | return (-0.518126+1.327628*x-0.130881*x*x)/(1.-0.665649*x+0.184300*x*x)+0.081701*x ; | |
2120 | } | |
2121 | return 1. ; | |
2122 | } | |
2123 | //________________________________________________________________________ | |
2124 | Int_t AliPHOSHijingEfficiency::FindCommonParent(Int_t iPart, Int_t jPart){ | |
2125 | //check if there is a common parent for particles i and j | |
2126 | // -1: no common parent or wrong iPart/jPart | |
2127 | ||
2128 | if(iPart==-1 || iPart>=fStack->GetNtrack() || | |
2129 | jPart==-1 || jPart>=fStack->GetNtrack()) return -1; | |
2130 | ||
2131 | Int_t iprim1=iPart; | |
2132 | while(iprim1>-1){ | |
2133 | Int_t iprim2=jPart; | |
2134 | while(iprim2>-1){ | |
2135 | if(iprim1==iprim2) | |
2136 | return iprim1 ; | |
2137 | iprim2=((TParticle *)fStack->Particle(iprim2))->GetFirstMother(); | |
2138 | } | |
2139 | iprim1=((TParticle *)fStack->Particle(iprim1))->GetFirstMother(); | |
2140 | } | |
2141 | return -1; | |
2142 | } | |
2143 | //________________________________________________________________________ | |
2144 | Bool_t AliPHOSHijingEfficiency::HaveParent(Int_t iPart, Int_t pdgParent){ | |
2145 | //check if there is a common parent for particles i and j | |
2146 | // -1: no common parent or wrong iPart/jPart | |
2147 | ||
2148 | if(iPart==-1 || iPart>=fStack->GetNtrack()) return -1; | |
2149 | ||
2150 | Int_t iprim1=iPart; | |
2151 | while(iprim1>-1){ | |
2152 | TParticle * tmp = fStack->Particle(iprim1) ; | |
2153 | if(tmp->GetPdgCode()==pdgParent) | |
2154 | return kTRUE ; | |
2155 | iprim1=tmp->GetFirstMother(); | |
2156 | } | |
2157 | return kFALSE; | |
2158 | } | |
2159 | //________________________________________________________________________ | |
2160 | Bool_t AliPHOSHijingEfficiency::InPi0mass(Double_t m, Double_t /*pt*/){ | |
2161 | ||
2162 | return TMath::Abs(m-0.135)<0.007*2.5 ; | |
2163 | } |