3c538586 |
1 | /**************************************************************************\r |
2 | * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *\r |
3 | * *\r |
4 | * Author: Ana Marin, Kathrin Koch, Kenneth Aamodt *\r |
a19c3402 |
5 | * Version 1.1 *\r |
3c538586 |
6 | * *\r |
7 | * Permission to use, copy, modify and distribute this software and its *\r |
8 | * documentation strictly for non-commercial purposes is hereby granted *\r |
9 | * without fee, provided that the above copyright notice appears in all *\r |
10 | * copies and that both the copyright notice and this permission notice *\r |
11 | * appear in the supporting documentation. The authors make no claims *\r |
12 | * about the suitability of this software for any purpose. It is *\r |
13 | * provided "as is" without express or implied warranty. *\r |
14 | **************************************************************************/\r |
15 | \r |
16 | ////////////////////////////////////////////////\r |
17 | //--------------------------------------------- \r |
18 | // Class used to do analysis on conversion pairs\r |
19 | //---------------------------------------------\r |
20 | ////////////////////////////////////////////////\r |
21 | \r |
22 | // root\r |
23 | #include <TChain.h>\r |
24 | \r |
25 | // analysis\r |
26 | #include "AliAnalysisTaskGammaConversion.h"\r |
27 | #include "AliStack.h"\r |
28 | #include "AliLog.h"\r |
29 | #include <vector>\r |
30 | \r |
31 | class AliKFVertex;\r |
32 | class AliAODHandler;\r |
33 | class AliAODEvent;\r |
34 | class ALiESDEvent;\r |
35 | class AliMCEvent;\r |
36 | class AliMCEventHandler;\r |
37 | class AliESDInputHandler;\r |
38 | class AliAnalysisManager;\r |
39 | class Riostream;\r |
40 | class TFile;\r |
41 | class TInterpreter;\r |
42 | class TSystem;\r |
43 | class TROOT;\r |
44 | \r |
45 | ClassImp(AliAnalysisTaskGammaConversion)\r |
46 | \r |
47 | \r |
48 | AliAnalysisTaskGammaConversion::AliAnalysisTaskGammaConversion():\r |
32a6d407 |
49 | AliAnalysisTaskSE(),\r |
3c538586 |
50 | fV0Reader(NULL),\r |
51 | fStack(NULL),\r |
52 | fOutputContainer(NULL),\r |
53 | fHistograms(NULL),\r |
54 | fDoMCTruth(kFALSE),\r |
55 | fMCAllGammas(),\r |
56 | fMCPi0s(),\r |
57 | fMCEtas(),\r |
58 | fMCGammaChic(),\r |
59 | fKFReconstructedGammas(),\r |
32a6d407 |
60 | fIsTrueReconstructedGammas(),\r |
61 | electronv1(),\r |
62 | electronv2(),\r |
3c538586 |
63 | fElectronMass(-1),\r |
64 | fGammaMass(-1),\r |
65 | fPi0Mass(-1),\r |
66 | fEtaMass(-1),\r |
67 | fGammaWidth(-1),\r |
68 | fPi0Width(-1),\r |
69 | fEtaWidth(-1),\r |
32a6d407 |
70 | fMinOpeningAngleGhostCut(0.),\r |
a19c3402 |
71 | fCalculateBackground(kFALSE),\r |
72 | fWriteNtuple(kFALSE),\r |
73 | fGammaNtuple(NULL),\r |
74 | fNeutralMesonNtuple(NULL),\r |
75 | fTotalNumberOfAddedNtupleEntries(0)\r |
3c538586 |
76 | {\r |
77 | // Default constructor\r |
78 | // Common I/O in slot 0\r |
79 | DefineInput (0, TChain::Class());\r |
80 | DefineOutput(0, TTree::Class());\r |
32a6d407 |
81 | \r |
3c538586 |
82 | // Your private output\r |
83 | DefineOutput(1, TList::Class());\r |
84 | }\r |
85 | \r |
86 | AliAnalysisTaskGammaConversion::AliAnalysisTaskGammaConversion(const char* name):\r |
87 | AliAnalysisTaskSE(name),\r |
88 | fV0Reader(NULL),\r |
89 | fStack(NULL),\r |
90 | fOutputContainer(0x0),\r |
91 | fHistograms(NULL),\r |
92 | fDoMCTruth(kFALSE),\r |
93 | fMCAllGammas(),\r |
94 | fMCPi0s(),\r |
95 | fMCEtas(),\r |
96 | fMCGammaChic(),\r |
97 | fKFReconstructedGammas(),\r |
32a6d407 |
98 | fIsTrueReconstructedGammas(),\r |
99 | electronv1(),\r |
100 | electronv2(),\r |
3c538586 |
101 | fElectronMass(-1),\r |
102 | fGammaMass(-1),\r |
103 | fPi0Mass(-1),\r |
104 | fEtaMass(-1),\r |
105 | fGammaWidth(-1),\r |
106 | fPi0Width(-1),\r |
107 | fEtaWidth(-1),\r |
32a6d407 |
108 | fMinOpeningAngleGhostCut(0.),\r |
a19c3402 |
109 | fCalculateBackground(kFALSE),\r |
110 | fWriteNtuple(kFALSE),\r |
111 | fGammaNtuple(NULL),\r |
112 | fNeutralMesonNtuple(NULL),\r |
113 | fTotalNumberOfAddedNtupleEntries(0)\r |
3c538586 |
114 | {\r |
115 | // Common I/O in slot 0\r |
116 | DefineInput (0, TChain::Class());\r |
117 | DefineOutput(0, TTree::Class());\r |
32a6d407 |
118 | \r |
3c538586 |
119 | // Your private output\r |
120 | DefineOutput(1, TList::Class());\r |
121 | }\r |
122 | \r |
123 | AliAnalysisTaskGammaConversion::~AliAnalysisTaskGammaConversion() \r |
124 | {\r |
125 | // Remove all pointers\r |
32a6d407 |
126 | \r |
3c538586 |
127 | if(fOutputContainer){\r |
128 | fOutputContainer->Clear() ; \r |
129 | delete fOutputContainer ;\r |
130 | }\r |
131 | if(fHistograms){\r |
132 | delete fHistograms;\r |
133 | }\r |
134 | if(fV0Reader){\r |
135 | delete fV0Reader;\r |
136 | }\r |
137 | }\r |
138 | \r |
139 | \r |
140 | void AliAnalysisTaskGammaConversion::Init()\r |
141 | {\r |
142 | // Initialization\r |
143 | AliLog::SetGlobalLogLevel(AliLog::kError);\r |
144 | }\r |
145 | \r |
146 | \r |
147 | void AliAnalysisTaskGammaConversion::Exec(Option_t */*option*/)\r |
148 | {\r |
149 | // Execute analysis for current event\r |
32a6d407 |
150 | \r |
3c538586 |
151 | ConnectInputData("");\r |
32a6d407 |
152 | \r |
3c538586 |
153 | //clear vectors\r |
154 | fMCAllGammas.clear();\r |
155 | fMCPi0s.clear();\r |
156 | fMCEtas.clear();\r |
157 | fMCGammaChic.clear();\r |
32a6d407 |
158 | \r |
3c538586 |
159 | fKFReconstructedGammas.clear();\r |
32a6d407 |
160 | fIsTrueReconstructedGammas.clear();\r |
161 | electronv1.clear();\r |
162 | electronv2.clear();\r |
163 | \r |
3c538586 |
164 | //Clear the data in the v0Reader\r |
165 | fV0Reader->UpdateEventByEventData();\r |
166 | \r |
32a6d407 |
167 | \r |
3c538586 |
168 | // Process the MC information\r |
169 | if(fDoMCTruth){\r |
170 | ProcessMCData();\r |
171 | }\r |
32a6d407 |
172 | \r |
173 | //Process the v0 information with no cuts\r |
174 | ProcessV0sNoCut();\r |
175 | \r |
3c538586 |
176 | // Process the v0 information\r |
177 | ProcessV0s();\r |
32a6d407 |
178 | \r |
3c538586 |
179 | //calculate background if flag is set\r |
180 | if(fCalculateBackground){\r |
181 | CalculateBackground();\r |
182 | }\r |
32a6d407 |
183 | \r |
3c538586 |
184 | // Process reconstructed gammas\r |
185 | ProcessGammasForNeutralMesonAnalysis();\r |
3c538586 |
186 | \r |
32a6d407 |
187 | PostData(1, fOutputContainer);\r |
188 | \r |
3c538586 |
189 | }\r |
190 | \r |
191 | void AliAnalysisTaskGammaConversion::ConnectInputData(Option_t */*option*/){\r |
192 | // see header file for documentation\r |
32a6d407 |
193 | \r |
3c538586 |
194 | if(fV0Reader == NULL){\r |
195 | // Write warning here cuts and so on are default if this ever happens\r |
196 | }\r |
197 | fV0Reader->Initialize();\r |
198 | }\r |
199 | \r |
32a6d407 |
200 | \r |
201 | \r |
3c538586 |
202 | void AliAnalysisTaskGammaConversion::ProcessMCData(){\r |
203 | // see header file for documentation\r |
32a6d407 |
204 | \r |
3c538586 |
205 | fStack = fV0Reader->GetMCStack();\r |
206 | \r |
32a6d407 |
207 | if(fV0Reader->CheckForPrimaryVertex() == kFALSE){\r |
208 | return; // aborts if the primary vertex does not have contributors.\r |
209 | }\r |
210 | \r |
3c538586 |
211 | for (Int_t iTracks = 0; iTracks < fStack->GetNtrack(); iTracks++) {\r |
212 | TParticle* particle = (TParticle *)fStack->Particle(iTracks);\r |
32a6d407 |
213 | \r |
3c538586 |
214 | if (!particle) {\r |
215 | //print warning here\r |
216 | continue;\r |
217 | }\r |
3c538586 |
218 | \r |
32a6d407 |
219 | if(TMath::Abs(particle->Eta())> fV0Reader->GetEtaCut() ) continue;\r |
220 | \r |
221 | if(particle->R()>fV0Reader->GetMaxRCut()) continue; // cuts on distance from collision point\r |
222 | \r |
3c538586 |
223 | Double_t tmpPhi=particle->Phi();\r |
32a6d407 |
224 | \r |
3c538586 |
225 | if(particle->Phi()> TMath::Pi()){\r |
226 | tmpPhi = particle->Phi()-(2*TMath::Pi());\r |
227 | }\r |
32a6d407 |
228 | \r |
229 | Double_t rapidity;\r |
230 | if(particle->Energy() - particle->Pz() == 0 || particle->Energy() + particle->Pz() == 0){\r |
231 | rapidity=0;\r |
232 | }\r |
233 | else{\r |
234 | rapidity = 0.5*(TMath::Log((particle->Energy()+particle->Pz()) / (particle->Energy()-particle->Pz())));\r |
235 | } \r |
236 | \r |
3c538586 |
237 | //process the gammas\r |
32a6d407 |
238 | if (particle->GetPdgCode() == 22){\r |
239 | \r |
240 | if(particle->GetMother(0) >-1 && fStack->Particle(particle->GetMother(0))->GetPdgCode() == 22){\r |
241 | continue; // no photon as mothers!\r |
242 | }\r |
3c538586 |
243 | \r |
32a6d407 |
244 | if(particle->GetMother(0) >= fStack->GetNprimary()){\r |
245 | continue; // the gamma has a mother, and it is not a primary particle\r |
246 | }\r |
3c538586 |
247 | \r |
32a6d407 |
248 | fMCAllGammas.push_back(particle);\r |
249 | \r |
250 | fHistograms->FillHistogram("MC_allGamma_Energy", particle->Energy());\r |
251 | fHistograms->FillHistogram("MC_allGamma_Pt", particle->Pt());\r |
252 | fHistograms->FillHistogram("MC_allGamma_Eta", particle->Eta());\r |
253 | fHistograms->FillHistogram("MC_allGamma_Phi", tmpPhi);\r |
254 | fHistograms->FillHistogram("MC_allGamma_Rapid", rapidity);\r |
255 | \r |
256 | \r |
257 | if(particle->GetMother(0) < 0){ // direct gamma\r |
258 | fHistograms->FillHistogram("MC_allDirectGamma_Energy",particle->Energy());\r |
259 | fHistograms->FillHistogram("MC_allDirectGamma_Pt", particle->Pt());\r |
260 | fHistograms->FillHistogram("MC_allDirectGamma_Eta", particle->Eta());\r |
261 | fHistograms->FillHistogram("MC_allDirectGamma_Phi", tmpPhi);\r |
262 | fHistograms->FillHistogram("MC_allDirectGamma_Rapid", rapidity); \r |
263 | }\r |
264 | \r |
265 | \r |
266 | // looking for conversion (electron + positron from pairbuilding (= 5) )\r |
267 | TParticle* ePos = NULL;\r |
268 | TParticle* eNeg = NULL;\r |
269 | \r |
270 | if(particle->GetNDaughters() >= 2){\r |
271 | for(Int_t daughterIndex=particle->GetFirstDaughter();daughterIndex<=particle->GetLastDaughter();daughterIndex++){\r |
272 | TParticle *tmpDaughter = fStack->Particle(daughterIndex);\r |
273 | if(tmpDaughter->GetUniqueID() == 5){\r |
274 | if(tmpDaughter->GetPdgCode() == 11){\r |
275 | eNeg = tmpDaughter;\r |
276 | }\r |
277 | else if(tmpDaughter->GetPdgCode() == -11){\r |
278 | ePos = tmpDaughter;\r |
3c538586 |
279 | }\r |
32a6d407 |
280 | }\r |
281 | }\r |
282 | }\r |
283 | \r |
284 | \r |
285 | if(ePos == NULL || eNeg == NULL){ // means we do not have two daughters from pair production\r |
286 | continue;\r |
287 | }\r |
288 | \r |
289 | \r |
290 | Double_t ePosPhi = ePos->Phi();\r |
291 | if(ePos->Phi()> TMath::Pi()) ePosPhi = ePos->Phi()-(2*TMath::Pi());\r |
292 | \r |
293 | Double_t eNegPhi = eNeg->Phi();\r |
294 | if(eNeg->Phi()> TMath::Pi()) eNegPhi = eNeg->Phi()-(2*TMath::Pi());\r |
295 | \r |
296 | \r |
297 | if(ePos->Pt()<fV0Reader->GetPtCut() || eNeg->Pt()<fV0Reader->GetPtCut()){\r |
298 | continue; // no reconstruction below the Pt cut\r |
299 | }\r |
300 | \r |
301 | if(TMath::Abs(ePos->Eta())> fV0Reader->GetEtaCut() || TMath::Abs(eNeg->Eta())> fV0Reader->GetEtaCut()){\r |
302 | continue;\r |
303 | } \r |
304 | \r |
305 | if(ePos->R()>fV0Reader->GetMaxRCut()){\r |
306 | continue; // cuts on distance from collision point\r |
307 | }\r |
308 | \r |
309 | \r |
310 | if((TMath::Abs(ePos->Vz()) * fV0Reader->GetLineCutZRSlope()) - fV0Reader->GetLineCutZValue() > ePos->R()){\r |
311 | continue; // line cut to exclude regions where we do not reconstruct\r |
312 | } \r |
313 | \r |
314 | fHistograms->FillHistogram("MC_ConvGamma_Energy", particle->Energy());\r |
315 | fHistograms->FillHistogram("MC_ConvGamma_Pt", particle->Pt());\r |
316 | fHistograms->FillHistogram("MC_ConvGamma_Eta", particle->Eta());\r |
317 | fHistograms->FillHistogram("MC_ConvGamma_Phi", tmpPhi);\r |
318 | fHistograms->FillHistogram("MC_ConvGamma_Rapid", rapidity);\r |
319 | fHistograms->FillHistogram("MC_ConvGamma_Pt_Eta", particle->Pt(),particle->Eta());\r |
320 | \r |
321 | fHistograms->FillHistogram("MC_E_Energy", eNeg->Energy());\r |
322 | fHistograms->FillHistogram("MC_E_Pt", eNeg->Pt());\r |
323 | fHistograms->FillHistogram("MC_E_Eta", eNeg->Eta());\r |
324 | fHistograms->FillHistogram("MC_E_Phi", eNegPhi);\r |
325 | \r |
326 | fHistograms->FillHistogram("MC_P_Energy", ePos->Energy());\r |
327 | fHistograms->FillHistogram("MC_P_Pt", ePos->Pt());\r |
328 | fHistograms->FillHistogram("MC_P_Eta", ePos->Eta());\r |
329 | fHistograms->FillHistogram("MC_P_Phi", ePosPhi);\r |
330 | \r |
331 | \r |
332 | \r |
333 | //cout << "filled histos for converted gamma, ePos, eNeg" << endl;\r |
334 | \r |
335 | // begin Mapping \r |
336 | Int_t rBin = fHistograms->GetRBin(ePos->R());\r |
337 | Int_t phiBin = fHistograms->GetPhiBin(particle->Phi());\r |
338 | \r |
339 | TString nameMCMappingPhiR="";\r |
340 | nameMCMappingPhiR.Form("MC_Conversion_Mapping-Phi%02d-R%02d",phiBin,rBin);\r |
341 | fHistograms->FillHistogram(nameMCMappingPhiR, ePos->Vz(), particle->Eta());\r |
342 | \r |
343 | TString nameMCMappingPhi="";\r |
344 | nameMCMappingPhi.Form("MC_Conversion_Mapping-Phi%02d",phiBin);\r |
345 | fHistograms->FillHistogram(nameMCMappingPhi, particle->Eta());\r |
346 | \r |
347 | TString nameMCMappingR="";\r |
348 | nameMCMappingR.Form("MC_Conversion_Mapping-R%02d",rBin);\r |
349 | fHistograms->FillHistogram(nameMCMappingR, particle->Eta());\r |
350 | \r |
351 | TString nameMCMappingPhiInR="";\r |
352 | nameMCMappingPhiInR.Form("MC_Conversion_Mapping_Phi_R-%02d",rBin);\r |
353 | fHistograms->FillHistogram(nameMCMappingPhiInR, tmpPhi);\r |
354 | //end mapping\r |
355 | \r |
356 | fHistograms->FillHistogram("MC_Conversion_R",ePos->R());\r |
357 | fHistograms->FillHistogram("MC_Conversion_ZR",ePos->Vz(),ePos->R());\r |
358 | fHistograms->FillHistogram("MC_Conversion_XY",ePos->Vx(),ePos->Vy());\r |
359 | fHistograms->FillHistogram("MC_Conversion_OpeningAngle",GetMCOpeningAngle(ePos, eNeg));\r |
360 | \r |
361 | //cout << "mapping is done" << endl;\r |
362 | \r |
363 | \r |
364 | if(particle->GetMother(0) < 0){ // no mother = direct gamma, still inside converted\r |
365 | fHistograms->FillHistogram("MC_ConvDirectGamma_Energy",particle->Energy());\r |
366 | fHistograms->FillHistogram("MC_ConvDirectGamma_Pt", particle->Pt());\r |
367 | fHistograms->FillHistogram("MC_ConvDirectGamma_Eta", particle->Eta());\r |
368 | fHistograms->FillHistogram("MC_ConvDirectGamma_Phi", tmpPhi);\r |
369 | fHistograms->FillHistogram("MC_ConvDirectGamma_Rapid", rapidity);\r |
370 | \r |
371 | } // end direct gamma\r |
372 | else{ // mother exits \r |
3c538586 |
373 | if( fStack->Particle(particle->GetMother(0))->GetPdgCode()==10441 ||//chic0 \r |
374 | fStack->Particle(particle->GetMother(0))->GetPdgCode()==20443 ||//psi2S\r |
375 | fStack->Particle(particle->GetMother(0))->GetPdgCode()==445 //chic2\r |
376 | ){ \r |
377 | fMCGammaChic.push_back(particle);\r |
378 | }\r |
32a6d407 |
379 | } // end if mother exits\r |
380 | } // end if particle is a photon\r |
381 | \r |
382 | if(particle->GetNDaughters() == 2){\r |
383 | \r |
384 | TParticle* daughter0 = (TParticle*)fStack->Particle(particle->GetFirstDaughter());\r |
385 | TParticle* daughter1 = (TParticle*)fStack->Particle(particle->GetLastDaughter());\r |
386 | \r |
387 | if(daughter0->GetPdgCode() != 22 || daughter1->GetPdgCode() != 22) continue; //check for gamma gamma daughters\r |
388 | \r |
389 | \r |
390 | \r |
391 | // check for conversions now -> have to pass eta and line cut!\r |
392 | Bool_t daughter0Electron = kFALSE;\r |
393 | Bool_t daughter0Positron = kFALSE;\r |
394 | Bool_t daughter1Electron = kFALSE;\r |
395 | Bool_t daughter1Positron = kFALSE;\r |
396 | \r |
397 | \r |
398 | \r |
399 | if(daughter0->GetNDaughters() >= 2){\r |
400 | for(Int_t TrackIndex=daughter0->GetFirstDaughter();TrackIndex<=daughter0->GetLastDaughter();TrackIndex++){\r |
401 | TParticle *tmpDaughter = fStack->Particle(TrackIndex);\r |
402 | if(tmpDaughter->GetUniqueID() == 5){\r |
403 | if(tmpDaughter->GetPdgCode() == 11){\r |
404 | if( TMath::Abs(tmpDaughter->Eta()) <= fV0Reader->GetEtaCut() ){\r |
405 | if( ( TMath::Abs(tmpDaughter->Vz()) * fV0Reader->GetLineCutZRSlope()) - fV0Reader->GetLineCutZValue() < tmpDaughter->R() ){\r |
406 | daughter0Electron = kTRUE;\r |
407 | }\r |
408 | \r |
409 | }\r |
410 | }\r |
411 | else if(tmpDaughter->GetPdgCode() == -11){\r |
412 | if( TMath::Abs(tmpDaughter->Eta()) <= fV0Reader->GetEtaCut() ){\r |
413 | if( ( TMath::Abs(tmpDaughter->Vz()) * fV0Reader->GetLineCutZRSlope()) - fV0Reader->GetLineCutZValue() < tmpDaughter->R() ){\r |
414 | daughter0Positron = kTRUE;\r |
415 | }\r |
416 | \r |
417 | }\r |
418 | \r |
419 | }\r |
3c538586 |
420 | }\r |
421 | }\r |
32a6d407 |
422 | }\r |
423 | \r |
424 | \r |
425 | \r |
426 | if(daughter1->GetNDaughters() >= 2){\r |
427 | for(Int_t TrackIndex=daughter1->GetFirstDaughter();TrackIndex<=daughter1->GetLastDaughter();TrackIndex++){\r |
428 | TParticle *tmpDaughter = fStack->Particle(TrackIndex);\r |
429 | if(tmpDaughter->GetUniqueID() == 5){\r |
430 | if(tmpDaughter->GetPdgCode() == 11){\r |
431 | if( TMath::Abs(tmpDaughter->Eta()) <= fV0Reader->GetEtaCut() ){\r |
432 | if( ( TMath::Abs(tmpDaughter->Vz()) * fV0Reader->GetLineCutZRSlope()) - fV0Reader->GetLineCutZValue() < tmpDaughter->R() ){\r |
433 | daughter1Electron = kTRUE;\r |
434 | }\r |
435 | \r |
436 | }\r |
437 | }\r |
438 | else if(tmpDaughter->GetPdgCode() == -11){\r |
439 | if( TMath::Abs(tmpDaughter->Eta()) <= fV0Reader->GetEtaCut() ){\r |
440 | if( ( TMath::Abs(tmpDaughter->Vz()) * fV0Reader->GetLineCutZRSlope()) - fV0Reader->GetLineCutZValue() < tmpDaughter->R() ){\r |
441 | daughter1Positron = kTRUE;\r |
442 | }\r |
443 | \r |
444 | }\r |
445 | \r |
446 | }\r |
3c538586 |
447 | }\r |
448 | }\r |
449 | }\r |
32a6d407 |
450 | \r |
451 | \r |
452 | \r |
453 | \r |
454 | if(particle->GetPdgCode()==111){ //Pi0\r |
455 | if( iTracks >= fStack->GetNprimary()){\r |
456 | fHistograms->FillHistogram("MC_Pi0_Secondaries_Eta", particle->Eta());\r |
457 | fHistograms->FillHistogram("MC_Pi0_Secondaries_Rapid", rapidity);\r |
3c538586 |
458 | fHistograms->FillHistogram("MC_Pi0_Secondaries_Phi", tmpPhi);\r |
32a6d407 |
459 | fHistograms->FillHistogram("MC_Pi0_Secondaries_Pt", particle->Pt());\r |
460 | fHistograms->FillHistogram("MC_Pi0_Secondaries_Energy", particle->Energy());\r |
461 | fHistograms->FillHistogram("MC_Pi0_Secondaries_R", particle->R());\r |
462 | fHistograms->FillHistogram("MC_Pi0_Secondaries_ZR", particle->Vz(),particle->R());\r |
463 | fHistograms->FillHistogram("MC_Pi0_Secondaries_GammaDaughter_OpeningAngle", GetMCOpeningAngle(daughter0,daughter1));\r |
464 | fHistograms->FillHistogram("MC_Pi0_Secondaries_XY", particle->Vx(),particle->Vy());//only fill from one daughter to avoid multiple filling\r |
465 | \r |
466 | if(TMath::Abs(daughter0->Eta()) <= fV0Reader->GetEtaCut() && TMath::Abs(daughter1->Eta()) <= fV0Reader->GetEtaCut() ){\r |
467 | fHistograms->FillHistogram("MC_Pi0_Secondaries_Pt_Eta_withinAcceptance", particle->Pt(),particle->Eta());\r |
468 | fHistograms->FillHistogram("MC_Pi0_Secondaries_Pt_Rapid_withinAcceptance", particle->Pt(),rapidity);\r |
469 | if(daughter0Electron && daughter0Positron && daughter1Electron && daughter1Positron){\r |
470 | fHistograms->FillHistogram("MC_Pi0_Secondaries_Pt_Eta_ConvGamma_withinAcceptance", particle->Pt(),particle->Eta());\r |
471 | fHistograms->FillHistogram("MC_Pi0_Secondaries_Pt_Rapid_ConvGamma_withinAcceptance", particle->Pt(),rapidity);\r |
472 | }\r |
3c538586 |
473 | }\r |
32a6d407 |
474 | }\r |
475 | else{\r |
476 | fHistograms->FillHistogram("MC_Pi0_Eta", particle->Eta()); \r |
477 | fHistograms->FillHistogram("MC_Pi0_Rapid", rapidity);\r |
478 | fHistograms->FillHistogram("MC_Pi0_Phi", tmpPhi);\r |
479 | fHistograms->FillHistogram("MC_Pi0_Pt", particle->Pt());\r |
480 | fHistograms->FillHistogram("MC_Pi0_Energy", particle->Energy());\r |
481 | fHistograms->FillHistogram("MC_Pi0_R", particle->R());\r |
482 | fHistograms->FillHistogram("MC_Pi0_ZR", particle->Vz(),particle->R());\r |
483 | fHistograms->FillHistogram("MC_Pi0_GammaDaughter_OpeningAngle", GetMCOpeningAngle(daughter0,daughter1));\r |
484 | fHistograms->FillHistogram("MC_Pi0_XY", particle->Vx(), particle->Vy());//only fill from one daughter to avoid multiple filling\r |
485 | \r |
486 | if(TMath::Abs(daughter0->Eta()) <= fV0Reader->GetEtaCut() && TMath::Abs(daughter1->Eta()) <= fV0Reader->GetEtaCut() ){\r |
487 | fHistograms->FillHistogram("MC_Pi0_Pt_Eta_withinAcceptance", particle->Pt(),particle->Eta());\r |
488 | fHistograms->FillHistogram("MC_Pi0_Pt_Rapid_withinAcceptance", particle->Pt(),rapidity);\r |
489 | if(daughter0Electron && daughter0Positron && daughter1Electron && daughter1Positron){\r |
490 | fHistograms->FillHistogram("MC_Pi0_Pt_Eta_ConvGamma_withinAcceptance", particle->Pt(),particle->Eta());\r |
491 | fHistograms->FillHistogram("MC_Pi0_Pt_Rapid_ConvGamma_withinAcceptance", particle->Pt(),rapidity);\r |
492 | }\r |
3c538586 |
493 | }\r |
494 | }\r |
32a6d407 |
495 | }\r |
496 | \r |
497 | if(particle->GetPdgCode()==221){ //Eta\r |
498 | fHistograms->FillHistogram("MC_Eta_Eta", particle->Eta());\r |
499 | fHistograms->FillHistogram("MC_Eta_Rapid", rapidity);\r |
500 | fHistograms->FillHistogram("MC_Eta_Phi",tmpPhi);\r |
501 | fHistograms->FillHistogram("MC_Eta_Pt", particle->Pt());\r |
502 | fHistograms->FillHistogram("MC_Eta_Energy", particle->Energy());\r |
503 | fHistograms->FillHistogram("MC_Eta_R", particle->R());\r |
504 | fHistograms->FillHistogram("MC_Eta_ZR", particle->Vz(),particle->R());\r |
505 | fHistograms->FillHistogram("MC_Eta_GammaDaughter_OpeningAngle", GetMCOpeningAngle(daughter0,daughter1));\r |
506 | fHistograms->FillHistogram("MC_Eta_XY", particle->Vx(), particle->Vy());//only fill from one daughter to avoid multiple filling\r |
507 | \r |
508 | if(TMath::Abs(daughter0->Eta()) <= fV0Reader->GetEtaCut() && TMath::Abs(daughter1->Eta()) <= fV0Reader->GetEtaCut() ){\r |
509 | fHistograms->FillHistogram("MC_Eta_Pt_Eta_withinAcceptance", particle->Pt(),particle->Eta());\r |
510 | fHistograms->FillHistogram("MC_Eta_Pt_Rapid_withinAcceptance", particle->Pt(),rapidity);\r |
511 | if(daughter0Electron && daughter0Positron && daughter1Electron && daughter1Positron){\r |
512 | fHistograms->FillHistogram("MC_Eta_Pt_Eta_ConvGamma_withinAcceptance", particle->Pt(),particle->Eta());\r |
513 | fHistograms->FillHistogram("MC_Eta_Pt_Rapid_ConvGamma_withinAcceptance", particle->Pt(),rapidity);\r |
514 | }\r |
515 | \r |
3c538586 |
516 | }\r |
32a6d407 |
517 | \r |
518 | }\r |
519 | \r |
520 | // all motherparticles with 2 gammas as daughters\r |
521 | fHistograms->FillHistogram("MC_Mother_R", particle->R());\r |
522 | fHistograms->FillHistogram("MC_Mother_ZR", particle->Vz(),particle->R());\r |
523 | fHistograms->FillHistogram("MC_Mother_XY", particle->Vx(),particle->Vy());\r |
524 | fHistograms->FillHistogram("MC_Mother_Mass", particle->GetCalcMass());\r |
525 | fHistograms->FillHistogram("MC_Mother_GammaDaughter_OpeningAngle", GetMCOpeningAngle(daughter0,daughter1));\r |
526 | fHistograms->FillHistogram("MC_Mother_Energy", particle->Energy());\r |
527 | fHistograms->FillHistogram("MC_Mother_Pt", particle->Pt());\r |
528 | fHistograms->FillHistogram("MC_Mother_Eta", particle->Eta());\r |
529 | fHistograms->FillHistogram("MC_Mother_Rapid", rapidity);\r |
530 | fHistograms->FillHistogram("MC_Mother_Phi",tmpPhi);\r |
531 | fHistograms->FillHistogram("MC_Mother_InvMass_vs_Pt",particle->GetMass(),particle->Pt()); \r |
532 | if(TMath::Abs(daughter0->Eta()) <= fV0Reader->GetEtaCut() && TMath::Abs(daughter1->Eta()) <= fV0Reader->GetEtaCut() ){\r |
533 | fHistograms->FillHistogram("MC_Mother_Pt_Eta_withinAcceptance", particle->Pt(),particle->Eta());\r |
534 | fHistograms->FillHistogram("MC_Mother_Pt_Rapid_withinAcceptance", particle->Pt(),rapidity);\r |
535 | fHistograms->FillHistogram("MC_Mother_InvMass_vs_Pt_withinAcceptance",particle->GetMass(),particle->Pt()); \r |
536 | if(daughter0Electron && daughter0Positron && daughter1Electron && daughter1Positron){\r |
537 | fHistograms->FillHistogram("MC_Mother_Pt_Eta_ConvGamma_withinAcceptance", particle->Pt(),particle->Eta());\r |
538 | fHistograms->FillHistogram("MC_Mother_Pt_Rapid_ConvGamma_withinAcceptance", particle->Pt(),rapidity);\r |
539 | fHistograms->FillHistogram("MC_Mother_InvMass_vs_Pt_ConvGamma_withinAcceptance",particle->GetMass(),particle->Pt()); \r |
540 | \r |
541 | }\r |
542 | \r |
543 | \r |
3c538586 |
544 | }\r |
32a6d407 |
545 | \r |
546 | //cout << "mother histos are filled" << endl;\r |
547 | \r |
548 | } // end if(particle->GetNDaughters() == 2)\r |
549 | \r |
3c538586 |
550 | }// end for (Int_t iTracks = 0; iTracks < fStack->GetNtrack(); iTracks++)\r |
32a6d407 |
551 | \r |
552 | //cout << "right before the end of processMCdata" << endl;\r |
553 | \r |
3c538586 |
554 | } // end ProcessMCData\r |
555 | \r |
a19c3402 |
556 | \r |
32a6d407 |
557 | \r |
558 | void AliAnalysisTaskGammaConversion::FillNtuple(){\r |
559 | \r |
a19c3402 |
560 | if(fGammaNtuple == NULL){\r |
561 | return;\r |
562 | }\r |
563 | Int_t numberOfV0s = fV0Reader->GetNumberOfV0s();\r |
564 | for(Int_t i=0;i<numberOfV0s;i++){\r |
565 | Float_t values[27] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};\r |
566 | AliESDv0 * cV0 = fV0Reader->GetV0(i);\r |
567 | Double_t negPID=0;\r |
568 | Double_t posPID=0;\r |
569 | fV0Reader->GetPIDProbability(negPID,posPID);\r |
570 | values[0]=cV0->GetOnFlyStatus();\r |
571 | values[1]=fV0Reader->CheckForPrimaryVertex();\r |
572 | values[2]=negPID;\r |
573 | values[3]=posPID;\r |
574 | values[4]=fV0Reader->GetX();\r |
575 | values[5]=fV0Reader->GetY();\r |
576 | values[6]=fV0Reader->GetZ();\r |
577 | values[7]=fV0Reader->GetXYRadius();\r |
578 | values[8]=fV0Reader->GetMotherCandidateNDF();\r |
579 | values[9]=fV0Reader->GetMotherCandidateChi2();\r |
580 | values[10]=fV0Reader->GetMotherCandidateEnergy();\r |
581 | values[11]=fV0Reader->GetMotherCandidateEta();\r |
582 | values[12]=fV0Reader->GetMotherCandidatePt();\r |
583 | values[13]=fV0Reader->GetMotherCandidateMass();\r |
584 | values[14]=fV0Reader->GetMotherCandidateWidth();\r |
585 | // values[15]=fV0Reader->GetMotherMCParticle()->Pt(); MOVED TO THE END, HAS TO BE CALLED AFTER HasSameMother NB: still has the same entry in the array\r |
586 | values[16]=fV0Reader->GetOpeningAngle();\r |
587 | values[17]=fV0Reader->GetNegativeTrackEnergy();\r |
588 | values[18]=fV0Reader->GetNegativeTrackPt();\r |
589 | values[19]=fV0Reader->GetNegativeTrackEta();\r |
590 | values[20]=fV0Reader->GetNegativeTrackPhi();\r |
591 | values[21]=fV0Reader->GetPositiveTrackEnergy();\r |
592 | values[22]=fV0Reader->GetPositiveTrackPt();\r |
593 | values[23]=fV0Reader->GetPositiveTrackEta();\r |
594 | values[24]=fV0Reader->GetPositiveTrackPhi();\r |
595 | values[25]=fV0Reader->HasSameMCMother();\r |
596 | if(values[25] != 0){\r |
597 | values[26]=fV0Reader->GetMotherMCParticlePDGCode();\r |
598 | values[15]=fV0Reader->GetMotherMCParticle()->Pt();\r |
599 | }\r |
600 | fTotalNumberOfAddedNtupleEntries++;\r |
601 | fGammaNtuple->Fill(values);\r |
602 | }\r |
603 | fV0Reader->ResetV0IndexNumber();\r |
32a6d407 |
604 | \r |
605 | }\r |
606 | \r |
607 | void AliAnalysisTaskGammaConversion::ProcessV0sNoCut(){\r |
608 | \r |
609 | Int_t numberOfV0s = fV0Reader->GetNumberOfV0s();\r |
610 | for(Int_t i=0;i<numberOfV0s;i++){\r |
611 | /*AliESDv0 * cV0 = */fV0Reader->GetV0(i);\r |
612 | \r |
613 | if(fV0Reader->CheckForPrimaryVertex() == kFALSE){\r |
614 | return;\r |
615 | }\r |
616 | \r |
617 | if(fDoMCTruth){\r |
618 | \r |
619 | if(fV0Reader->HasSameMCMother() == kFALSE){\r |
620 | continue;\r |
621 | }\r |
622 | \r |
623 | TParticle * negativeMC = (TParticle*)fV0Reader->GetNegativeMCParticle();\r |
624 | TParticle * positiveMC = (TParticle*)fV0Reader->GetPositiveMCParticle();\r |
625 | \r |
626 | if(TMath::Abs(negativeMC->GetPdgCode())!=11 || TMath::Abs(positiveMC->GetPdgCode())!=11){\r |
627 | continue;\r |
628 | }\r |
629 | if(negativeMC->GetPdgCode()==positiveMC->GetPdgCode()){\r |
630 | continue;\r |
631 | }\r |
632 | \r |
633 | if(fV0Reader->GetMotherMCParticle()->GetPdgCode() == 22){\r |
634 | \r |
635 | fHistograms->FillHistogram("ESD_NoCutConvGamma_Pt", fV0Reader->GetMotherCandidatePt());\r |
636 | fHistograms->FillHistogram("ESD_NoCutConvGamma_Energy", fV0Reader->GetMotherCandidateEnergy());\r |
637 | fHistograms->FillHistogram("ESD_NoCutConvGamma_Eta", fV0Reader->GetMotherCandidateEta()); \r |
638 | fHistograms->FillHistogram("ESD_NoCutConvGamma_Phi", fV0Reader->GetMotherCandidatePhi());\r |
639 | fHistograms->FillHistogram("ESD_NoCutConvGamma_Mass", fV0Reader->GetMotherCandidateMass());\r |
640 | fHistograms->FillHistogram("ESD_NoCutConvGamma_Width", fV0Reader->GetMotherCandidateWidth());\r |
641 | fHistograms->FillHistogram("ESD_NoCutConvGamma_Chi2", fV0Reader->GetMotherCandidateChi2());\r |
642 | fHistograms->FillHistogram("ESD_NoCutConvGamma_NDF", fV0Reader->GetMotherCandidateNDF());\r |
643 | fHistograms->FillHistogram("ESD_NoCutConvGamma_Rapid", fV0Reader->GetMotherCandidateRapidity());\r |
644 | fHistograms->FillHistogram("ESD_NoCutConvGamma_Pt_Eta", fV0Reader->GetMotherCandidatePt(),fV0Reader->GetMotherCandidateEta());\r |
645 | \r |
646 | fHistograms->FillHistogram("ESD_NoCutConversion_XY", fV0Reader->GetX(),fV0Reader->GetY());\r |
647 | fHistograms->FillHistogram("ESD_NoCutConversion_R", fV0Reader->GetXYRadius());\r |
648 | fHistograms->FillHistogram("ESD_NoCutConversion_ZR", fV0Reader->GetZ(),fV0Reader->GetXYRadius());\r |
649 | fHistograms->FillHistogram("ESD_NoCutConversion_OpeningAngle", fV0Reader->GetOpeningAngle());\r |
650 | \r |
651 | /*\r |
652 | ESD_NoCutConvGamma_Pt\r |
653 | ESD_NoCutConvGamma_Energy\r |
654 | ESD_NoCutConvGamma_Eta\r |
655 | ESD_NoCutConvGamma_Phi\r |
656 | ESD_NoCutConvGamma_Mass\r |
657 | ESD_NoCutConvGamma_Width\r |
658 | ESD_NoCutConvGamma_Chi2\r |
659 | ESD_NoCutConvGamma_NDF\r |
660 | ESD_NoCutConvGamma_PtvsEta\r |
661 | ESD_NoCutConversion_XY\r |
662 | ESD_NoCutConversion_R\r |
663 | ESD_NoCutConversion_ZR\r |
664 | ESD_NoCutConversion_OpeningAngle\r |
665 | */\r |
666 | }\r |
667 | }\r |
668 | }\r |
669 | fV0Reader->ResetV0IndexNumber();\r |
a19c3402 |
670 | }\r |
671 | \r |
3c538586 |
672 | void AliAnalysisTaskGammaConversion::ProcessV0s(){\r |
673 | // see header file for documentation\r |
32a6d407 |
674 | \r |
a19c3402 |
675 | if(fWriteNtuple == kTRUE){\r |
676 | FillNtuple();\r |
677 | }\r |
32a6d407 |
678 | \r |
3c538586 |
679 | Int_t nSurvivingV0s=0;\r |
680 | while(fV0Reader->NextV0()){\r |
681 | nSurvivingV0s++;\r |
32a6d407 |
682 | \r |
683 | \r |
3c538586 |
684 | //-------------------------- filling v0 information -------------------------------------\r |
32a6d407 |
685 | fHistograms->FillHistogram("ESD_Conversion_R", fV0Reader->GetXYRadius());\r |
686 | fHistograms->FillHistogram("ESD_Conversion_ZR", fV0Reader->GetZ(),fV0Reader->GetXYRadius());\r |
687 | fHistograms->FillHistogram("ESD_Conversion_XY", fV0Reader->GetX(),fV0Reader->GetY());\r |
688 | fHistograms->FillHistogram("ESD_Conversion_OpeningAngle", fV0Reader->GetOpeningAngle()); \r |
689 | \r |
3c538586 |
690 | fHistograms->FillHistogram("ESD_E_Energy", fV0Reader->GetNegativeTrackEnergy());\r |
691 | fHistograms->FillHistogram("ESD_E_Pt", fV0Reader->GetNegativeTrackPt());\r |
692 | fHistograms->FillHistogram("ESD_E_Eta", fV0Reader->GetNegativeTrackEta());\r |
693 | fHistograms->FillHistogram("ESD_E_Phi", fV0Reader->GetNegativeTrackPhi());\r |
32a6d407 |
694 | \r |
3c538586 |
695 | fHistograms->FillHistogram("ESD_P_Energy", fV0Reader->GetPositiveTrackEnergy());\r |
696 | fHistograms->FillHistogram("ESD_P_Pt", fV0Reader->GetPositiveTrackPt());\r |
697 | fHistograms->FillHistogram("ESD_P_Eta", fV0Reader->GetPositiveTrackEta());\r |
698 | fHistograms->FillHistogram("ESD_P_Phi", fV0Reader->GetPositiveTrackPhi());\r |
32a6d407 |
699 | \r |
700 | fHistograms->FillHistogram("ESD_ConvGamma_Energy", fV0Reader->GetMotherCandidateEnergy());\r |
701 | fHistograms->FillHistogram("ESD_ConvGamma_Pt", fV0Reader->GetMotherCandidatePt());\r |
702 | fHistograms->FillHistogram("ESD_ConvGamma_Eta", fV0Reader->GetMotherCandidateEta());\r |
703 | fHistograms->FillHistogram("ESD_ConvGamma_Phi", fV0Reader->GetMotherCandidatePhi());\r |
704 | fHistograms->FillHistogram("ESD_ConvGamma_Mass", fV0Reader->GetMotherCandidateMass());\r |
705 | fHistograms->FillHistogram("ESD_ConvGamma_Width", fV0Reader->GetMotherCandidateWidth());\r |
706 | fHistograms->FillHistogram("ESD_ConvGamma_Chi2", fV0Reader->GetMotherCandidateChi2());\r |
707 | fHistograms->FillHistogram("ESD_ConvGamma_NDF", fV0Reader->GetMotherCandidateNDF());\r |
708 | fHistograms->FillHistogram("ESD_ConvGamma_Rapid", fV0Reader->GetMotherCandidateRapidity());\r |
709 | fHistograms->FillHistogram("ESD_ConvGamma_Pt_Eta", fV0Reader->GetMotherCandidatePt(),fV0Reader->GetMotherCandidateEta());\r |
710 | \r |
711 | \r |
3c538586 |
712 | // begin mapping\r |
713 | Int_t rBin = fHistograms->GetRBin(fV0Reader->GetXYRadius());\r |
714 | Int_t phiBin = fHistograms->GetPhiBin(fV0Reader->GetNegativeTrackPhi());\r |
715 | Double_t motherCandidateEta= fV0Reader->GetMotherCandidateEta();\r |
32a6d407 |
716 | \r |
3c538586 |
717 | TString nameESDMappingPhiR="";\r |
32a6d407 |
718 | nameESDMappingPhiR.Form("ESD_Conversion_Mapping-Phi%02d-R%02d",phiBin,rBin);\r |
3c538586 |
719 | fHistograms->FillHistogram(nameESDMappingPhiR, fV0Reader->GetZ(), motherCandidateEta);\r |
32a6d407 |
720 | \r |
3c538586 |
721 | TString nameESDMappingPhi="";\r |
32a6d407 |
722 | nameESDMappingPhi.Form("ESD_Conversion_Mapping-Phi%02d",phiBin);\r |
3c538586 |
723 | fHistograms->FillHistogram(nameESDMappingPhi, fV0Reader->GetZ(), motherCandidateEta);\r |
32a6d407 |
724 | \r |
3c538586 |
725 | TString nameESDMappingR="";\r |
32a6d407 |
726 | nameESDMappingR.Form("ESD_Conversion_Mapping-R%02d",rBin);\r |
3c538586 |
727 | fHistograms->FillHistogram(nameESDMappingR, fV0Reader->GetZ(), motherCandidateEta); \r |
32a6d407 |
728 | \r |
3c538586 |
729 | TString nameESDMappingPhiInR="";\r |
32a6d407 |
730 | nameESDMappingPhiInR.Form("ESD_Conversion_Mapping_Phi_R-%02d",rBin);\r |
3c538586 |
731 | fHistograms->FillHistogram(nameESDMappingPhiInR, fV0Reader->GetMotherCandidatePhi());\r |
732 | // end mapping\r |
32a6d407 |
733 | \r |
3c538586 |
734 | fKFReconstructedGammas.push_back(*fV0Reader->GetMotherCandidateKFCombination());\r |
32a6d407 |
735 | electronv1.push_back(fV0Reader->GetCurrentV0()->GetPindex());\r |
736 | electronv2.push_back(fV0Reader->GetCurrentV0()->GetNindex());\r |
3c538586 |
737 | \r |
32a6d407 |
738 | \r |
3c538586 |
739 | //----------------------------------- checking for "real" conversions (MC match) --------------------------------------\r |
740 | if(fDoMCTruth){\r |
32a6d407 |
741 | \r |
3c538586 |
742 | if(fV0Reader->HasSameMCMother() == kFALSE){\r |
32a6d407 |
743 | fIsTrueReconstructedGammas.push_back(kFALSE);\r |
3c538586 |
744 | continue;\r |
745 | }\r |
32a6d407 |
746 | \r |
747 | \r |
3c538586 |
748 | TParticle * negativeMC = (TParticle*)fV0Reader->GetNegativeMCParticle();\r |
749 | TParticle * positiveMC = (TParticle*)fV0Reader->GetPositiveMCParticle();\r |
750 | \r |
32a6d407 |
751 | if(TMath::Abs(negativeMC->GetPdgCode())!=11 || TMath::Abs(positiveMC->GetPdgCode())!=11){\r |
752 | fIsTrueReconstructedGammas.push_back(kFALSE);\r |
3c538586 |
753 | continue;\r |
754 | }\r |
32a6d407 |
755 | if(negativeMC->GetPdgCode()==positiveMC->GetPdgCode()){\r |
756 | fIsTrueReconstructedGammas.push_back(kFALSE);\r |
757 | continue;\r |
758 | }\r |
759 | \r |
3c538586 |
760 | if(fV0Reader->GetMotherMCParticle()->GetPdgCode() == 22){\r |
32a6d407 |
761 | fIsTrueReconstructedGammas.push_back(kTRUE);\r |
762 | \r |
763 | fHistograms->FillHistogram("ESD_TrueConvGamma_Pt", fV0Reader->GetMotherCandidatePt());\r |
764 | fHistograms->FillHistogram("ESD_TrueConvGamma_Energy", fV0Reader->GetMotherCandidateEnergy());\r |
765 | fHistograms->FillHistogram("ESD_TrueConvGamma_Eta", fV0Reader->GetMotherCandidateEta()); \r |
766 | fHistograms->FillHistogram("ESD_TrueConvGamma_Phi", fV0Reader->GetMotherCandidatePhi());\r |
767 | fHistograms->FillHistogram("ESD_TrueConvGamma_Mass", fV0Reader->GetMotherCandidateMass());\r |
768 | fHistograms->FillHistogram("ESD_TrueConvGamma_Width", fV0Reader->GetMotherCandidateWidth());\r |
769 | fHistograms->FillHistogram("ESD_TrueConvGamma_Chi2", fV0Reader->GetMotherCandidateChi2());\r |
770 | fHistograms->FillHistogram("ESD_TrueConvGamma_NDF", fV0Reader->GetMotherCandidateNDF());\r |
771 | fHistograms->FillHistogram("ESD_TrueConvGamma_Pt_Eta", fV0Reader->GetMotherCandidatePt(),fV0Reader->GetMotherCandidateEta());\r |
772 | fHistograms->FillHistogram("ESD_TrueConvGamma_Rapid", fV0Reader->GetMotherCandidateRapidity());\r |
773 | fHistograms->FillHistogram("ESD_TrueConvGamma_TrackLength", /*fV0Reader->GetNegativeTrackLength()*/fV0Reader->GetNegativeNTPCClusters());\r |
774 | fHistograms->FillHistogram("ESD_TrueConvGamma_TrackLength", /*fV0Reader->GetPositiveTrackLength()*/fV0Reader->GetPositiveNTPCClusters());\r |
775 | fHistograms->FillHistogram("ESD_TrueConvGamma_TrackLengthVSInvMass",/*fV0Reader->GetNegativeTrackLength()*/fV0Reader->GetNegativeNTPCClusters(),fV0Reader->GetMotherCandidateMass());\r |
776 | fHistograms->FillHistogram("ESD_TrueConvGamma_TrackLengthVSInvMass",/*fV0Reader->GetPositiveTrackLength()*/fV0Reader->GetPositiveNTPCClusters(),fV0Reader->GetMotherCandidateMass());\r |
777 | \r |
778 | fHistograms->FillHistogram("ESD_TrueConversion_XY", fV0Reader->GetX(),fV0Reader->GetY());\r |
779 | fHistograms->FillHistogram("ESD_TrueConversion_R", fV0Reader->GetXYRadius());\r |
780 | fHistograms->FillHistogram("ESD_TrueConversion_ZR", fV0Reader->GetZ(),fV0Reader->GetXYRadius());\r |
781 | fHistograms->FillHistogram("ESD_TrueConversion_OpeningAngle", fV0Reader->GetOpeningAngle());\r |
782 | \r |
783 | \r |
784 | /*\r |
785 | fHistograms->FillHistogram("ESD_TrueConversion_XY", fV0Reader->GetX(),fV0Reader->GetY());\r |
786 | fHistograms->FillHistogram("ESD_TrueConversion_R", fV0Reader->GetXYRadius());\r |
787 | fHistograms->FillHistogram("ESD_TrueConversion_ZR", fV0Reader->GetZ(),fV0Reader->GetXYRadius());\r |
788 | fHistograms->FillHistogram("ESD_TrueConversion_OpeningAngle", fV0Reader->GetOpeningAngle());\r |
789 | */\r |
790 | \r |
791 | \r |
3c538586 |
792 | \r |
793 | //resolution\r |
794 | Double_t mcpt = fV0Reader->GetMotherMCParticle()->Pt();\r |
795 | Double_t esdpt = fV0Reader->GetMotherCandidatePt();\r |
796 | Double_t resdPt = 0;\r |
797 | if(mcpt != 0){\r |
798 | resdPt = ((esdpt - mcpt)/mcpt)*100;\r |
799 | }\r |
32a6d407 |
800 | \r |
3c538586 |
801 | fHistograms->FillHistogram("Resolution_dPt", mcpt, resdPt);\r |
802 | fHistograms->FillHistogram("Resolution_MC_Pt", mcpt);\r |
803 | fHistograms->FillHistogram("Resolution_ESD_Pt", esdpt);\r |
32a6d407 |
804 | \r |
3c538586 |
805 | Double_t resdZ = 0;\r |
806 | if(fV0Reader->GetNegativeMCParticle()->Vz() != 0){\r |
807 | resdZ = ((fV0Reader->GetZ() -fV0Reader->GetNegativeMCParticle()->Vz())/fV0Reader->GetNegativeMCParticle()->Vz())*100;\r |
808 | }\r |
32a6d407 |
809 | \r |
3c538586 |
810 | fHistograms->FillHistogram("Resolution_dZ", fV0Reader->GetNegativeMCParticle()->Vz(), resdZ);\r |
811 | fHistograms->FillHistogram("Resolution_MC_Z", fV0Reader->GetNegativeMCParticle()->Vz());\r |
812 | fHistograms->FillHistogram("Resolution_ESD_Z", fV0Reader->GetZ());\r |
32a6d407 |
813 | \r |
3c538586 |
814 | Double_t resdR = 0;\r |
815 | if(fV0Reader->GetNegativeMCParticle()->R() != 0){\r |
816 | resdR = ((fV0Reader->GetXYRadius() - fV0Reader->GetNegativeMCParticle()->R())/fV0Reader->GetNegativeMCParticle()->R())*100;\r |
817 | }\r |
32a6d407 |
818 | \r |
3c538586 |
819 | fHistograms->FillHistogram("Resolution_dR", fV0Reader->GetNegativeMCParticle()->R(), resdR);\r |
820 | fHistograms->FillHistogram("Resolution_MC_R", fV0Reader->GetNegativeMCParticle()->R());\r |
821 | fHistograms->FillHistogram("Resolution_ESD_R", fV0Reader->GetXYRadius());\r |
822 | fHistograms->FillHistogram("Resolution_dR_dPt", resdR, resdPt);\r |
32a6d407 |
823 | }//if(fV0Reader->GetMotherMCParticle()->GetPdgCode() == 22)\r |
824 | else{\r |
825 | fIsTrueReconstructedGammas.push_back(kFALSE);\r |
3c538586 |
826 | }\r |
32a6d407 |
827 | }//if(fDoMCTruth)\r |
828 | }//while(fV0Reader->NextV0)\r |
829 | fHistograms->FillHistogram("ESD_NumberOfSurvivingV0s", nSurvivingV0s);\r |
830 | fHistograms->FillHistogram("ESD_NumberOfV0s", fV0Reader->GetNumberOfV0s());\r |
831 | \r |
832 | //cout << "nearly at the end of doMCTruth" << endl;\r |
833 | \r |
3c538586 |
834 | }\r |
835 | \r |
836 | void AliAnalysisTaskGammaConversion::ProcessGammasForNeutralMesonAnalysis(){\r |
837 | // see header file for documentation\r |
32a6d407 |
838 | \r |
3c538586 |
839 | for(UInt_t firstGammaIndex=0;firstGammaIndex<fKFReconstructedGammas.size();firstGammaIndex++){\r |
840 | for(UInt_t secondGammaIndex=firstGammaIndex+1;secondGammaIndex<fKFReconstructedGammas.size();secondGammaIndex++){\r |
32a6d407 |
841 | \r |
3c538586 |
842 | AliKFParticle * twoGammaDecayCandidateDaughter0 = &fKFReconstructedGammas[firstGammaIndex];\r |
843 | AliKFParticle * twoGammaDecayCandidateDaughter1 = &fKFReconstructedGammas[secondGammaIndex];\r |
3c538586 |
844 | \r |
32a6d407 |
845 | if(electronv1[firstGammaIndex]==electronv1[secondGammaIndex] || electronv1[firstGammaIndex]==electronv2[secondGammaIndex]){\r |
846 | continue;\r |
847 | }\r |
848 | if(electronv2[firstGammaIndex]==electronv1[secondGammaIndex] || electronv2[firstGammaIndex]==electronv2[secondGammaIndex]){\r |
849 | continue;\r |
850 | }\r |
851 | \r |
852 | /*\r |
853 | if(fIsTrueReconstructedGammas[firstGammaIndex] == kFALSE || fIsTrueReconstructedGammas[secondGammaIndex] == kFALSE){\r |
854 | continue;\r |
855 | }\r |
856 | */\r |
3c538586 |
857 | \r |
32a6d407 |
858 | AliKFParticle *twoGammaCandidate = new AliKFParticle(*twoGammaDecayCandidateDaughter0,*twoGammaDecayCandidateDaughter1);\r |
859 | \r |
860 | Double_t massTwoGammaCandidate = 0.;\r |
3c538586 |
861 | Double_t widthTwoGammaCandidate = 0.;\r |
862 | Double_t chi2TwoGammaCandidate =10000.; \r |
863 | twoGammaCandidate->GetMass(massTwoGammaCandidate,widthTwoGammaCandidate);\r |
864 | if(twoGammaCandidate->GetNDF()>0){\r |
865 | chi2TwoGammaCandidate = twoGammaCandidate->GetChi2()/twoGammaCandidate->GetNDF();\r |
32a6d407 |
866 | \r |
867 | if(chi2TwoGammaCandidate>0 && chi2TwoGammaCandidate<fV0Reader->GetChi2CutMeson()){ \r |
868 | \r |
869 | TVector3 MomentumVectorTwoGammaCandidate(twoGammaCandidate->GetPx(),twoGammaCandidate->GetPy(),twoGammaCandidate->GetPz());\r |
870 | TVector3 SpaceVectorTwoGammaCandidate(twoGammaCandidate->GetX(),twoGammaCandidate->GetY(),twoGammaCandidate->GetZ());\r |
871 | \r |
872 | Double_t openingAngleTwoGammaCandidate = twoGammaDecayCandidateDaughter0->GetAngle(*twoGammaDecayCandidateDaughter1); \r |
873 | Double_t rapidity;\r |
874 | if(twoGammaCandidate->GetE() - twoGammaCandidate->GetPz() == 0 || twoGammaCandidate->GetE() + twoGammaCandidate->GetPz() == 0){\r |
875 | rapidity=0;\r |
876 | }\r |
877 | else{\r |
878 | rapidity = 0.5*(TMath::Log((twoGammaCandidate->GetE() +twoGammaCandidate->GetPz()) / (twoGammaCandidate->GetE()-twoGammaCandidate->GetPz())));\r |
879 | }\r |
880 | \r |
881 | if(openingAngleTwoGammaCandidate < fMinOpeningAngleGhostCut) continue; // minimum opening angle to avoid using ghosttracks\r |
882 | \r |
883 | fHistograms->FillHistogram("ESD_Mother_GammaDaughter_OpeningAngle", openingAngleTwoGammaCandidate);\r |
884 | fHistograms->FillHistogram("ESD_Mother_Energy", twoGammaCandidate->GetE());\r |
885 | fHistograms->FillHistogram("ESD_Mother_Pt", MomentumVectorTwoGammaCandidate.Pt());\r |
886 | fHistograms->FillHistogram("ESD_Mother_Eta", MomentumVectorTwoGammaCandidate.Eta());\r |
887 | fHistograms->FillHistogram("ESD_Mother_Rapid", rapidity); \r |
888 | fHistograms->FillHistogram("ESD_Mother_Phi", SpaceVectorTwoGammaCandidate.Phi());\r |
889 | fHistograms->FillHistogram("ESD_Mother_Mass", massTwoGammaCandidate);\r |
890 | fHistograms->FillHistogram("ESD_Mother_R", SpaceVectorTwoGammaCandidate.Pt()); // Pt in Space == R!!!\r |
891 | fHistograms->FillHistogram("ESD_Mother_ZR", twoGammaCandidate->GetZ(), SpaceVectorTwoGammaCandidate.Pt());\r |
892 | fHistograms->FillHistogram("ESD_Mother_XY", twoGammaCandidate->GetX(), twoGammaCandidate->GetY());\r |
893 | fHistograms->FillHistogram("ESD_Mother_InvMass_vs_Pt",massTwoGammaCandidate ,MomentumVectorTwoGammaCandidate.Pt());\r |
3c538586 |
894 | }\r |
895 | }\r |
896 | delete twoGammaCandidate;\r |
32a6d407 |
897 | \r |
898 | //cout << "nearly at the end of processgamma for neutral meson ..." << endl;\r |
899 | \r |
900 | \r |
3c538586 |
901 | }\r |
902 | }\r |
903 | }\r |
904 | \r |
905 | void AliAnalysisTaskGammaConversion::CalculateBackground(){\r |
906 | // see header file for documentation\r |
32a6d407 |
907 | \r |
3c538586 |
908 | vector<AliKFParticle> vectorCurrentEventGoodV0s = fV0Reader->GetCurrentEventGoodV0s();\r |
909 | vector<AliKFParticle> vectorPreviousEventGoodV0s = fV0Reader->GetPreviousEventGoodV0s();\r |
910 | for(UInt_t iCurrent=0;iCurrent<vectorCurrentEventGoodV0s.size();iCurrent++){\r |
911 | AliKFParticle * currentEventGoodV0 = &vectorCurrentEventGoodV0s.at(iCurrent);\r |
912 | for(UInt_t iPrevious=0;iPrevious<vectorPreviousEventGoodV0s.size();iPrevious++){\r |
913 | AliKFParticle * previousGoodV0 = &vectorPreviousEventGoodV0s.at(iPrevious);\r |
914 | \r |
915 | AliKFParticle *backgroundCandidate = new AliKFParticle(*currentEventGoodV0,*previousGoodV0);\r |
32a6d407 |
916 | \r |
3c538586 |
917 | Double_t massBG =0.;\r |
918 | Double_t widthBG = 0.;\r |
919 | Double_t chi2BG =10000.; \r |
920 | backgroundCandidate->GetMass(massBG,widthBG);\r |
921 | if(backgroundCandidate->GetNDF()>0){\r |
922 | chi2BG = backgroundCandidate->GetChi2()/backgroundCandidate->GetNDF();\r |
923 | if(chi2BG>0 && chi2BG<fV0Reader->GetChi2CutMeson()){\r |
32a6d407 |
924 | \r |
925 | TVector3 MomentumVectorbackgroundCandidate(backgroundCandidate->GetPx(),backgroundCandidate->GetPy(),backgroundCandidate->GetPz());\r |
926 | TVector3 SpaceVectorbackgroundCandidate(backgroundCandidate->GetX(),backgroundCandidate->GetY(),backgroundCandidate->GetZ());\r |
927 | \r |
3c538586 |
928 | Double_t openingAngleBG = currentEventGoodV0->GetAngle(*previousGoodV0);\r |
929 | \r |
32a6d407 |
930 | Double_t rapidity;\r |
931 | if(backgroundCandidate->GetE() - backgroundCandidate->GetPz() == 0 || backgroundCandidate->GetE() + backgroundCandidate->GetPz() == 0) rapidity=0;\r |
932 | else rapidity = 0.5*(TMath::Log((backgroundCandidate->GetE() +backgroundCandidate->GetPz()) / (backgroundCandidate->GetE()-backgroundCandidate->GetPz())));\r |
3c538586 |
933 | \r |
32a6d407 |
934 | \r |
935 | \r |
936 | \r |
937 | if(openingAngleBG < fMinOpeningAngleGhostCut ) continue; // minimum opening angle to avoid using ghosttracks\r |
938 | \r |
939 | \r |
3c538586 |
940 | fHistograms->FillHistogram("ESD_Background_GammaDaughter_OpeningAngle", openingAngleBG);\r |
941 | fHistograms->FillHistogram("ESD_Background_Energy", backgroundCandidate->GetE());\r |
32a6d407 |
942 | fHistograms->FillHistogram("ESD_Background_Pt", MomentumVectorbackgroundCandidate.Pt());\r |
943 | fHistograms->FillHistogram("ESD_Background_Eta", MomentumVectorbackgroundCandidate.Eta());\r |
944 | fHistograms->FillHistogram("ESD_Background_Rapidity", rapidity);\r |
945 | fHistograms->FillHistogram("ESD_Background_Phi", SpaceVectorbackgroundCandidate.Phi());\r |
3c538586 |
946 | fHistograms->FillHistogram("ESD_Background_Mass", massBG);\r |
32a6d407 |
947 | fHistograms->FillHistogram("ESD_Background_R", SpaceVectorbackgroundCandidate.Pt()); // Pt in Space == R!!!!\r |
948 | fHistograms->FillHistogram("ESD_Background_ZR", backgroundCandidate->GetZ(), SpaceVectorbackgroundCandidate.Pt());\r |
949 | fHistograms->FillHistogram("ESD_Background_XY", backgroundCandidate->GetX(), backgroundCandidate->GetY());\r |
950 | fHistograms->FillHistogram("ESD_Background_InvMass_vs_Pt",massBG,MomentumVectorbackgroundCandidate.Pt());\r |
3c538586 |
951 | }\r |
952 | }\r |
953 | delete backgroundCandidate; \r |
32a6d407 |
954 | //cout << "nearly at the end of background" << endl;\r |
955 | \r |
3c538586 |
956 | }\r |
957 | }\r |
958 | }\r |
959 | \r |
960 | void AliAnalysisTaskGammaConversion::Terminate(Option_t */*option*/)\r |
961 | {\r |
962 | // Terminate analysis\r |
963 | //\r |
964 | AliDebug(1,"Do nothing in Terminate");\r |
965 | }\r |
966 | \r |
967 | void AliAnalysisTaskGammaConversion::UserCreateOutputObjects()\r |
968 | {\r |
969 | // Create the output container\r |
970 | if(fOutputContainer != NULL){\r |
971 | delete fOutputContainer;\r |
972 | fOutputContainer = NULL;\r |
973 | }\r |
974 | if(fOutputContainer == NULL){\r |
975 | fOutputContainer = new TList();\r |
976 | }\r |
32a6d407 |
977 | \r |
a19c3402 |
978 | //Adding the histograms to the output container\r |
3c538586 |
979 | fHistograms->GetOutputContainer(fOutputContainer);\r |
32a6d407 |
980 | \r |
981 | \r |
a19c3402 |
982 | if(fWriteNtuple){\r |
983 | if(fGammaNtuple == NULL){\r |
984 | fGammaNtuple = new TNtuple("V0ntuple","V0ntuple","OnTheFly:HasVertex:NegPIDProb:PosPIDProb:X:Y:Z:R:MotherCandidateNDF:MotherCandidateChi2:MotherCandidateEnergy:MotherCandidateEta:MotherCandidatePt:MotherCandidateMass:MotherCandidateWidth:MCMotherCandidatePT:EPOpeningAngle:ElectronEnergy:ElectronPt:ElectronEta:ElectronPhi:PositronEnergy:PositronPt:PositronEta:PositronPhi:HasSameMCMother:MotherMCParticlePIDCode",50000);\r |
985 | }\r |
986 | if(fNeutralMesonNtuple == NULL){\r |
987 | fNeutralMesonNtuple = new TNtuple("NeutralMesonNtuple","NeutralMesonNtuple","test");\r |
988 | }\r |
989 | TList * ntupleTList = new TList();\r |
990 | ntupleTList->SetName("Ntuple");\r |
991 | ntupleTList->Add((TNtuple*)fGammaNtuple);\r |
992 | fOutputContainer->Add(ntupleTList);\r |
993 | }\r |
32a6d407 |
994 | \r |
3c538586 |
995 | fOutputContainer->SetName(GetName());\r |
996 | }\r |
997 | \r |
998 | Double_t AliAnalysisTaskGammaConversion::GetMCOpeningAngle(TParticle* daughter0, TParticle* daughter1) const{\r |
999 | //helper function\r |
1000 | TVector3 v3D0(daughter0->Px(),daughter0->Py(),daughter0->Pz());\r |
1001 | TVector3 v3D1(daughter1->Px(),daughter1->Py(),daughter1->Pz());\r |
1002 | return v3D0.Angle(v3D1);\r |
1003 | }\r |