AliPhysics  ff07904 (ff07904)
AliAnalysisTaskClusterQA.cxx
Go to the documentation of this file.
1 /**************************************************************************
2  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3  * *
4  * Authors: Nicolas Schmidt *
5  * Version 1.0 *
6  * *
7  * Permission to use, copy, modify and distribute this software and its *
8  * documentation strictly for non-commercial purposes is hereby granted *
9  * without fee, provided that the above copyright notice appears in all *
10  * copies and that both the copyright notice and this permission notice *
11  * appear in the supporting documentation. The authors make no claims *
12  * about the suitability of this software for any purpose. It is *
13  * provided "as is" without express or implied warranty. *
14  **************************************************************************/
15 
17 //---------------------------------------------
18 // Class used to create a tree for QA of clusters
19 //---------------------------------------------
21 
23 #include "TChain.h"
24 #include "TRandom.h"
25 #include "AliAnalysisManager.h"
26 #include "TParticle.h"
27 #include "TVectorF.h"
28 #include "AliPIDResponse.h"
29 #include "TFile.h"
30 #include "AliESDtrackCuts.h"
31 #include "AliAODMCParticle.h"
32 #include "AliAODMCHeader.h"
33 #include "AliAODEvent.h"
34 
35 class iostream;
36 
37 using namespace std;
38 
40 
41 //________________________________________________________________________
43  fV0Reader(NULL),
44  fV0ReaderName("V0ReaderV1"),
45  fCorrTaskSetting(""),
46  fConversionCuts(NULL),
47  fEventCuts(NULL),
48  fClusterCutsEMC(NULL),
49  fClusterCutsDMC(NULL),
50  fMesonCuts(NULL),
51  fMinNLMCut(1),
52  fMaxNLMCut(1),
53  fInputEvent(NULL),
54  fMCEvent(NULL),
55  fWeightJetJetMC(1),
56  fGeomEMCAL(NULL),
57  fClusterTree(NULL),
58  fIsHeavyIon(kFALSE),
59  ffillTree(-100),
60  ffillHistograms(kFALSE),
61  fOutputList(NULL),
62  fIsMC(kFALSE),
63  fCorrectForNonlinearity(kFALSE),
64  fSaveEventProperties(0),
65  fSaveCells(0),
66  fSaveSurroundingCells(0),
67  fSaveTracks(0),
68  fConeRadius(0),
69  fMinTrackPt(0),
70  fMinClusterEnergy(0),
71  fSaveMCInformation(0),
72  fExtractionPercentages(),
73  fExtractionPercentagePtBins(),
74  fBuffer_ClusterE(0),
75  fBuffer_ClusterPhi(0),
76  fBuffer_ClusterEta(0),
77  fBuffer_ClusterIsEMCAL(kFALSE),
78  fBuffer_MC_Cluster_Flag(0),
79  fBuffer_ClusterNumCells(0),
80  fBuffer_LeadingCell_ID(0),
81  fBuffer_LeadingCell_E(0),
82  fBuffer_LeadingCell_Eta(0),
83  fBuffer_LeadingCell_Phi(0),
84  fBuffer_ClusterM02(0),
85  fBuffer_ClusterM20(0),
86  fBuffer_Event_Vertex_X(0),
87  fBuffer_Event_Vertex_Y(0),
88  fBuffer_Event_Vertex_Z(0),
89  fBuffer_Event_Multiplicity(0),
90  fBuffer_Event_NumActiveCells(0),
91  fBuffer_Cells_ID(0),
92  fBuffer_Cells_E(0),
93  fBuffer_Cells_RelativeEta(0),
94  fBuffer_Cells_RelativePhi(0),
95  fBuffer_Surrounding_NCells(0),
96  fBuffer_Surrounding_Cells_ID(0),
97  fBuffer_Surrounding_Cells_R(0),
98  fBuffer_Surrounding_Cells_E(0),
99  fBuffer_Surrounding_Cells_RelativeEta(0),
100  fBuffer_Surrounding_Cells_RelativePhi(0),
101  fBuffer_Surrounding_NTracks(10),
102  fBuffer_Surrounding_Tracks_R(0),
103  fBuffer_Surrounding_Tracks_Pt(0),
104  fBuffer_Surrounding_Tracks_RelativeEta(0),
105  fBuffer_Surrounding_Tracks_RelativePhi(0),
106  fBuffer_Cluster_MC_Label(-10)
107 {
108  fBuffer_Cells_ID = new Int_t[kMaxActiveCells];
109  fBuffer_Cells_E = new Float_t[kMaxActiveCells];
110  fBuffer_Cells_RelativeEta = new Float_t[kMaxActiveCells];
111  fBuffer_Cells_RelativePhi = new Float_t[kMaxActiveCells];
112  fBuffer_Surrounding_Cells_ID = new Int_t[kMaxActiveCells];
113  fBuffer_Surrounding_Cells_R = new Float_t[kMaxActiveCells];
114  fBuffer_Surrounding_Cells_E = new Float_t[kMaxActiveCells];
115  fBuffer_Surrounding_Cells_RelativeEta = new Float_t[kMaxActiveCells];
116  fBuffer_Surrounding_Cells_RelativePhi = new Float_t[kMaxActiveCells];
117  fBuffer_Surrounding_Tracks_R = new Float_t[kMaxNTracks];
118  fBuffer_Surrounding_Tracks_Pt = new Float_t[kMaxNTracks];
119  fBuffer_Surrounding_Tracks_RelativeEta = new Float_t[kMaxNTracks];
120  fBuffer_Surrounding_Tracks_RelativePhi = new Float_t[kMaxNTracks];
121 }
122 
124  fV0Reader(NULL),
125  fV0ReaderName("V0ReaderV1"),
126  fCorrTaskSetting(""),
127  fConversionCuts(NULL),
128  fEventCuts(NULL),
129  fClusterCutsEMC(NULL),
130  fClusterCutsDMC(NULL),
131  fMesonCuts(NULL),
132  fMinNLMCut(1),
133  fMaxNLMCut(1),
134  fInputEvent(NULL),
135  fMCEvent(NULL),
136  fWeightJetJetMC(1),
137  fGeomEMCAL(NULL),
138  fClusterTree(NULL),
139  fIsHeavyIon(kFALSE),
140  ffillTree(-100),
141  ffillHistograms(kFALSE),
142  fOutputList(NULL),
143  fIsMC(kFALSE),
144  fCorrectForNonlinearity(kFALSE),
145  fSaveEventProperties(0),
146  fSaveCells(0),
147  fSaveSurroundingCells(0),
148  fSaveTracks(0),
149  fConeRadius(0),
150  fMinTrackPt(0),
151  fMinClusterEnergy(0),
152  fSaveMCInformation(0),
153  fExtractionPercentages(),
154  fExtractionPercentagePtBins(),
155  fBuffer_ClusterE(0),
156  fBuffer_ClusterPhi(0),
157  fBuffer_ClusterEta(0),
158  fBuffer_ClusterIsEMCAL(kFALSE),
159  fBuffer_MC_Cluster_Flag(0),
160  fBuffer_ClusterNumCells(0),
161  fBuffer_LeadingCell_ID(0),
162  fBuffer_LeadingCell_E(0),
163  fBuffer_LeadingCell_Eta(0),
164  fBuffer_LeadingCell_Phi(0),
165  fBuffer_ClusterM02(0),
166  fBuffer_ClusterM20(0),
167  fBuffer_Event_Vertex_X(0),
168  fBuffer_Event_Vertex_Y(0),
169  fBuffer_Event_Vertex_Z(0),
170  fBuffer_Event_Multiplicity(0),
171  fBuffer_Event_NumActiveCells(0),
172  fBuffer_Cells_ID(0),
173  fBuffer_Cells_E(0),
174  fBuffer_Cells_RelativeEta(0),
175  fBuffer_Cells_RelativePhi(0),
176  fBuffer_Surrounding_NCells(0),
177  fBuffer_Surrounding_Cells_ID(0),
178  fBuffer_Surrounding_Cells_R(0),
179  fBuffer_Surrounding_Cells_E(0),
180  fBuffer_Surrounding_Cells_RelativeEta(0),
181  fBuffer_Surrounding_Cells_RelativePhi(0),
182  fBuffer_Surrounding_NTracks(10),
183  fBuffer_Surrounding_Tracks_R(0),
184  fBuffer_Surrounding_Tracks_Pt(0),
185  fBuffer_Surrounding_Tracks_RelativeEta(0),
186  fBuffer_Surrounding_Tracks_RelativePhi(0),
187  fBuffer_Cluster_MC_Label(-10)
188 {
202  // Default constructor
203 
204  DefineInput(0, TChain::Class());
205  DefineOutput(1, TList::Class());
206  DefineOutput(2, TTree::Class());
207 }
208 
209 //________________________________________________________________________
211 {
212  // default deconstructor
213 
214 }
215 //________________________________________________________________________
217 {
218  // Create User Output Objects
219 
220  if(fOutputList != NULL){
221  delete fOutputList;
222  fOutputList = NULL;
223  }
224  if(fOutputList == NULL){
225  fOutputList = new TList();
226  fOutputList->SetOwner(kTRUE);
227  }
228 
229  if(ffillHistograms){
230 
231  if(((AliConvEventCuts*)fEventCuts)->GetCutHistograms()){
232  fOutputList->Add(((AliConvEventCuts*)fEventCuts)->GetCutHistograms());
233  }
234 
235  if(((AliCaloPhotonCuts*)fClusterCutsEMC)->GetCutHistograms()){
236  fOutputList->Add(((AliCaloPhotonCuts*)fClusterCutsEMC)->GetCutHistograms());
237  }
238  if(((AliCaloPhotonCuts*)fClusterCutsDMC)->GetCutHistograms()){
239  fOutputList->Add(((AliCaloPhotonCuts*)fClusterCutsDMC)->GetCutHistograms());
240  }
241  if(((AliConversionMesonCuts*)fMesonCuts)->GetCutHistograms()){
242  fOutputList->Add(((AliConversionMesonCuts*)fMesonCuts)->GetCutHistograms());
243  }
244  PostData(1, fOutputList);
245  }
246 
247  fClusterTree = new TTree("ClusterQA","ClusterQA");
248 
249  fClusterTree->Branch("Cluster_E", &fBuffer_ClusterE, "Cluster_E/F");
250  fClusterTree->Branch("Cluster_Eta", &fBuffer_ClusterEta, "Cluster_Eta/F");
251  fClusterTree->Branch("Cluster_Phi", &fBuffer_ClusterPhi, "Cluster_Phi/F");
252  fClusterTree->Branch("Cluster_IsEMCAL", &fBuffer_ClusterIsEMCAL, "Cluster_IsEMCAL/O");
253  fClusterTree->Branch("Cluster_NumCells", &fBuffer_ClusterNumCells, "Cluster_NumCells/I");
254  fClusterTree->Branch("Cluster_LeadingCell_ID", &fBuffer_LeadingCell_ID, "Cluster_LeadingCell_ID/I");
255  fClusterTree->Branch("Cluster_LeadingCell_E", &fBuffer_LeadingCell_E, "Cluster_LeadingCell_E/F");
256  fClusterTree->Branch("Cluster_LeadingCell_Eta", &fBuffer_LeadingCell_Eta, "Cluster_LeadingCell_Eta/F");
257  fClusterTree->Branch("Cluster_LeadingCell_Phi", &fBuffer_LeadingCell_Phi, "Cluster_LeadingCell_Phi/F");
258  fClusterTree->Branch("Cluster_M02", &fBuffer_ClusterM02, "Cluster_M02/F");
259  fClusterTree->Branch("Cluster_M20", &fBuffer_ClusterM20, "Cluster_M20/F");
261  {
262  fClusterTree->Branch("Event_Vertex_X", &fBuffer_Event_Vertex_X, "Event_Vertex_X/F");
263  fClusterTree->Branch("Event_Vertex_Y", &fBuffer_Event_Vertex_Y, "Event_Vertex_Y/F");
264  fClusterTree->Branch("Event_Vertex_Z", &fBuffer_Event_Vertex_Z, "Event_Vertex_Z/F");
265  fClusterTree->Branch("Event_Multiplicity", &fBuffer_Event_Multiplicity, "Event_Multiplicity/F");
266  fClusterTree->Branch("Event_NumActiveCells", &fBuffer_Event_NumActiveCells, "Event_NumActiveCells/I");
267  }
268 
269  if(fSaveCells)
270  {
271  fClusterTree->Branch("Cluster_Cells_ID", fBuffer_Cells_ID, "Cluster_Cells_ID[Cluster_NumCells]/I");
272  fClusterTree->Branch("Cluster_Cells_E", fBuffer_Cells_E, "Cluster_Cells_E[Cluster_NumCells]/F");
273  fClusterTree->Branch("Cluster_Cells_RelativeEta", fBuffer_Cells_RelativeEta, "Cluster_Cells_RelativeEta[Cluster_NumCells]/F");
274  fClusterTree->Branch("Cluster_Cells_RelativePhi", fBuffer_Cells_RelativePhi, "Cluster_Cells_RelativePhi[Cluster_NumCells]/F");
275  }
276 
278  {
279  fClusterTree->Branch("Surrounding_NCells", &fBuffer_Surrounding_NCells, "Surrounding_NCells/I");
280  fClusterTree->Branch("Surrounding_Cells_ID", fBuffer_Surrounding_Cells_ID, "Surrounding_Cells_ID[Surrounding_NCells]/I");
281  fClusterTree->Branch("Surrounding_Cells_R", fBuffer_Surrounding_Cells_R, "Surrounding_Cells_R[Surrounding_NCells]/F");
282  fClusterTree->Branch("Surrounding_Cells_E", fBuffer_Surrounding_Cells_E, "Surrounding_Cells_E[Surrounding_NCells]/F");
283  fClusterTree->Branch("Surrounding_Cells_RelativeEta", fBuffer_Surrounding_Cells_RelativeEta, "Surrounding_Cells_RelativeEta[Surrounding_NCells]/F");
284  fClusterTree->Branch("Surrounding_Cells_RelativePhi", fBuffer_Surrounding_Cells_RelativePhi, "Surrounding_Cells_RelativePhi[Surrounding_NCells]/F");
285  }
286  if(fSaveTracks)
287  {
288  fClusterTree->Branch("Surrounding_NTracks", &fBuffer_Surrounding_NTracks, "Surrounding_NTracks/I");
289  fClusterTree->Branch("Surrounding_Tracks_R", fBuffer_Surrounding_Tracks_R, "Surrounding_Tracks_R[Surrounding_NTracks]/F");
290  fClusterTree->Branch("Surrounding_Tracks_Pt", fBuffer_Surrounding_Tracks_Pt, "Surrounding_Tracks_Pt[Surrounding_NTracks]/F");
291  fClusterTree->Branch("Surrounding_Tracks_RelativeEta", fBuffer_Surrounding_Tracks_RelativeEta, "Surrounding_Tracks_RelativeEta[Surrounding_NTracks]/F");
292  fClusterTree->Branch("Surrounding_Tracks_RelativePhi", fBuffer_Surrounding_Tracks_RelativePhi, "Surrounding_Tracks_RelativePhi[Surrounding_NTracks]/F");
293  }
294 
296  {
297  fClusterTree->Branch("Cluster_MC_Label", &fBuffer_Cluster_MC_Label, "Cluster_MC_Label/I");
298  }
299 
300  fV0Reader=(AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()->GetTask(fV0ReaderName.Data());
301  OpenFile(2);
302  PostData(2, fClusterTree);
303 }
304 //_____________________________________________________________________________
306 {
311  }
312 
313  return kTRUE;
314 }
315 //________________________________________________________________________
317 
318  Int_t eventQuality = ((AliConvEventCuts*)fV0Reader->GetEventCuts())->GetEventQuality();
319  if(eventQuality != 0){// Event Not Accepted
320  return;
321  }
322  fInputEvent = InputEvent();
323  if(fIsMC) fMCEvent = MCEvent();
324 
326  if(eventNotAccepted) return; // Check Centrality, PileUp, SDD and V0AND --> Not Accepted => eventQuality = 1
327 
328  fGeomEMCAL = AliEMCALGeometry::GetInstance();
329  if(!fGeomEMCAL){ AliFatal("EMCal geometry not initialized!");}
330 
331  Int_t nclus = 0;
332  TClonesArray * arrClustersProcess = NULL;
333  // fNCurrentClusterBasic = 0;
334  if(!fCorrTaskSetting.CompareTo("")){
335  nclus = fInputEvent->GetNumberOfCaloClusters();
336  } else {
337  arrClustersProcess = dynamic_cast<TClonesArray*>(fInputEvent->FindListObject(Form("%sClustersBranch",fCorrTaskSetting.Data())));
338  if(!arrClustersProcess)
339  AliFatal(Form("%sClustersBranch was not found in AliAnalysisTaskGammaCalo! Check the correction framework settings!",fCorrTaskSetting.Data()));
340  nclus = arrClustersProcess->GetEntries();
341  }
342 
343  if(nclus == 0) return;
344 
345  ((AliCaloPhotonCuts*)fClusterCutsEMC)->FillHistogramsExtendedQA(fInputEvent,fIsMC);
346  // ((AliCaloPhotonCuts*)fClusterCutsDMC)->FillHistogramsExtendedQA(fInputEvent,fIsMC);
347 
348  // match tracks to clusters
349  ((AliCaloPhotonCuts*)fClusterCutsEMC)->MatchTracksToClusters(fInputEvent,fWeightJetJetMC,kTRUE, fMCEvent);
350  // ((AliCaloPhotonCuts*)fClusterCutsDMC)->MatchTracksToClusters(fInputEvent,fWeightJetJetMC,kTRUE, fMCEvent);
351 
352  // vertex
353  Double_t vertex[3] = {0};
354  InputEvent()->GetPrimaryVertex()->GetXYZ(vertex);
355 
356  map<Long_t,Int_t> mapIsClusterAccepted;
357  map<Long_t,Int_t> mapIsClusterAcceptedWithoutTrackMatch;
358  // Loop over EMCal clusters
359  for(Long_t i = 0; i < nclus; i++){
360  Double_t tempClusterWeight = fWeightJetJetMC;
361  AliVCluster* clus = NULL;
362  if(fInputEvent->IsA()==AliESDEvent::Class()){
363  if(arrClustersProcess)
364  clus = new AliESDCaloCluster(*(AliESDCaloCluster*)arrClustersProcess->At(i));
365  else
366  clus = new AliESDCaloCluster(*(AliESDCaloCluster*)fInputEvent->GetCaloCluster(i));
367  } else if(fInputEvent->IsA()==AliAODEvent::Class()){
368  if(arrClustersProcess)
369  clus = new AliAODCaloCluster(*(AliAODCaloCluster*)arrClustersProcess->At(i));
370  else
371  clus = new AliAODCaloCluster(*(AliAODCaloCluster*)fInputEvent->GetCaloCluster(i));
372  }
373  if(!clus) continue;
374 
375 
376  if ( !clus->IsEMCAL()){ // for PHOS: cluster->GetType() == AliVCluster::kPHOSNeutral
377  delete clus;
378  continue;
379  }
380  if ( clus->E() < fMinClusterEnergy){
381  delete clus;
382  continue;
383  }
384 
385  if(!((AliCaloPhotonCuts*)fClusterCutsEMC)->ClusterIsSelected(clus,fInputEvent,fMCEvent,fIsMC, tempClusterWeight,i) && !((AliCaloPhotonCuts*)fClusterCutsDMC)->ClusterIsSelected(clus,fInputEvent,fMCEvent,fIsMC, tempClusterWeight,i)){
386  delete clus;
387  continue;
388  }
390  }
391  PostData(1, fOutputList);
392 }
393 
395 void AliAnalysisTaskClusterQA::ProcessQATreeCluster(AliVEvent *event, AliVCluster* cluster, Long_t indexCluster){
396 
397  Float_t clusPos[3] = { 0,0,0 };
398  cluster->GetPosition(clusPos);
399  TVector3 clusterVector(clusPos[0],clusPos[1],clusPos[2]);
400  Double_t etaCluster = clusterVector.Eta();
401  Double_t phiCluster = clusterVector.Phi();
402  if (phiCluster < 0) phiCluster += 2*TMath::Pi();
403 
404  // Vertex position x, y, z
405  fBuffer_Event_Vertex_X = fInputEvent->GetPrimaryVertex()->GetX();
406  fBuffer_Event_Vertex_Y = fInputEvent->GetPrimaryVertex()->GetY();
407  fBuffer_Event_Vertex_Z = fInputEvent->GetPrimaryVertex()->GetZ();
408 
409  // V0-based multiplicity of the event
410  fBuffer_Event_Multiplicity = fInputEvent->GetVZEROData()->GetMTotV0A()+fInputEvent->GetVZEROData()->GetMTotV0C();
411 
412  // Properties of the current cluster
413  fBuffer_ClusterE = cluster->E();
414 
415  if(etaCluster < 0.67 && etaCluster > -0.67){
416  if(phiCluster < 3.2 && phiCluster > 1.4){
417  fBuffer_ClusterIsEMCAL = kTRUE;
418  }
419  }
420  if(etaCluster < 0.67 && etaCluster > -0.67){
421  if(etaCluster > 0.23 || etaCluster < -0.23){
422  if(phiCluster < 5.6 && phiCluster > 4.6){
423  fBuffer_ClusterIsEMCAL = kFALSE;
424  }
425  }
426  }
427 
428  fBuffer_ClusterPhi = phiCluster;
429  fBuffer_ClusterEta = etaCluster;
430  fBuffer_ClusterM02 = cluster->GetM02();
431  fBuffer_ClusterM20 = cluster->GetM20();
432 
433  // Get all cells from the event
434  AliVCaloCells* cells = NULL;
435  if(cluster->IsEMCAL())
436  cells = event->GetEMCALCells();
437  else
438  return;
439 
440  // Determine all cells in the event
441  fBuffer_Event_NumActiveCells = cells->GetNumberOfCells();
442 
443  // Get the number of cells from the current cluster
444  Int_t nCellCluster = cluster->GetNCells();
445  fBuffer_ClusterNumCells = nCellCluster;
446 
447  // Find the leading cell in the cluster and its position
449  fBuffer_LeadingCell_E = cells->GetCellAmplitude(fBuffer_LeadingCell_ID);
450  Float_t leadcelleta = 0.;
451  Float_t leadcellphi = 0.;
452  fGeomEMCAL->EtaPhiFromIndex(fBuffer_LeadingCell_ID, leadcelleta, leadcellphi);
453  if ( leadcellphi < 0 ) leadcellphi+=TMath::TwoPi();
454  fBuffer_LeadingCell_Eta = leadcelleta;
455  fBuffer_LeadingCell_Phi = leadcellphi;
456  // Treat the remaining cells of the cluster and get their relative position compared to the leading cell
457  for(Int_t iCell=0;iCell<nCellCluster;iCell++){
458  if(iCell<100){ // maximum number of cells for a cluster is set to 100
459  fBuffer_Cells_ID[iCell] = cluster->GetCellAbsId(iCell);
460  fBuffer_Cells_E[iCell] = cells->GetCellAmplitude(cluster->GetCellAbsId(iCell));
461  Float_t celleta = 0.;
462  Float_t cellphi = 0.;
463  fGeomEMCAL->EtaPhiFromIndex(fBuffer_Cells_ID[iCell], celleta, cellphi);
464  if ( cellphi < 0 ) cellphi+=TMath::TwoPi();
465  fBuffer_Cells_RelativeEta[iCell] = leadcelleta-celleta;
466  fBuffer_Cells_RelativePhi[iCell] = leadcellphi-cellphi;
467  }
468  }
469  Int_t nActiveCellsSurroundingInR = 0;
470  // fill surrounding cell buffer
471  for(Int_t aCell=0;aCell<cells->GetNumberOfCells();aCell++){
472  // Define necessary variables
473  Short_t cellNumber = 0;
474  Double_t cellAmplitude = 0, cellTime = 0, cellEFrac = 0;
475  Int_t cellMCLabel = 0;
476  Float_t surrcelleta = 0.;
477  Float_t surrcellphi = 0.;
478  // Get Cell ID
479  cells->GetCell(aCell,cellNumber,cellAmplitude,cellTime,cellMCLabel,cellEFrac);
480 
481  // Get eta and phi for the surounding cells
482  fGeomEMCAL->EtaPhiFromIndex(cellNumber, surrcelleta, surrcellphi);
483  if ( surrcellphi < 0 ) surrcellphi+=TMath::TwoPi();
484  Double_t dR2 = pow(leadcelleta-surrcelleta,2) + pow(leadcellphi-surrcellphi,2);
485  // Select those cells that are within fConeRadius of the leading cluster cell
486  if( dR2 < fConeRadius){
487  fBuffer_Surrounding_Cells_E[aCell] = cells->GetCellAmplitude(cellNumber);
488  fBuffer_Surrounding_Cells_ID[aCell] = cellNumber;
489  fBuffer_Surrounding_Cells_R[aCell] = dR2;
490  fBuffer_Surrounding_Cells_RelativeEta[aCell] = leadcelleta-surrcelleta;
491  fBuffer_Surrounding_Cells_RelativePhi[aCell] = leadcellphi-surrcellphi;
492  nActiveCellsSurroundingInR+=1;
493  }
494  }
495  fBuffer_Surrounding_NCells = nActiveCellsSurroundingInR;
496  if(fIsMC) fBuffer_Cluster_MC_Label = MakePhotonCandidates(cluster, cells,indexCluster);
497 
498  ProcessTracksAndMatching(cluster,indexCluster);
499  // Add everything to the tree
500  if (fClusterTree) fClusterTree->Fill();
501 }
502 
503 //________________________________________________________________________
505 
506 }
507 
508 //________________________________________________________________________
509 Int_t AliAnalysisTaskClusterQA::FindLargestCellInCluster(AliVCluster* cluster, AliVEvent* event){
510 
511  const Int_t nCells = cluster->GetNCells();
512  AliVCaloCells* cells = NULL;
513 
514  if(cluster->IsEMCAL())
515  cells = event->GetEMCALCells();
516  else if(cluster->IsPHOS())
517  cells = event->GetPHOSCells();
518 
519  Float_t eMax = 0.;
520  Int_t idMax = -1;
521 
522  if (nCells < 1) return idMax;
523  for (Int_t iCell = 0;iCell < nCells;iCell++){
524  Int_t cellAbsID = cluster->GetCellsAbsId()[iCell];
525  if (cells->GetCellAmplitude(cellAbsID)> eMax){
526  eMax = cells->GetCellAmplitude(cellAbsID);
527  idMax = cellAbsID;
528  }
529  }
530  return idMax;
531 }
532 
533 //________________________________________________________________________
535  Int_t nSupMod=0, nModule=0, nIphi=0, nIeta=0;
536  row=0;
537  column=0;
538  // Get SM number and relative row/column for SM
539  fGeomEMCAL->GetCellIndex(cellIndex, nSupMod,nModule,nIphi,nIeta);
540  fGeomEMCAL->GetCellPhiEtaIndexInSModule(nSupMod,nModule,nIphi,nIeta, row,column);
541  row += nSupMod/2 * 24;
542  column += nSupMod%2 * 48;
543 }
544 
545 //________________________________________________________________________
546 Int_t AliAnalysisTaskClusterQA::MakePhotonCandidates(AliVCluster* clus, AliVCaloCells* cells, Long_t indexCluster){
547 
548  Double_t vertex[3] = {0};
549  InputEvent()->GetPrimaryVertex()->GetXYZ(vertex);
550 
551  TLorentzVector clusterVector;
552  clus->GetMomentum(clusterVector,vertex);
553 
554  TLorentzVector* tmpvec = new TLorentzVector();
555  tmpvec->SetPxPyPzE(clusterVector.Px(),clusterVector.Py(),clusterVector.Pz(),clusterVector.E());
556 
557  // convert to AODConversionPhoton
558  AliAODConversionPhoton *PhotonCandidate=new AliAODConversionPhoton(tmpvec);
559  if(!PhotonCandidate){
560  delete clus;
561  delete tmpvec;
562  if (PhotonCandidate) delete PhotonCandidate;
563  return -9;
564  }
565  // Flag Photon as CaloPhoton
566  PhotonCandidate->SetIsCaloPhoton();
567  PhotonCandidate->SetCaloClusterRef(indexCluster);
568 
569  // get MC label
570  if(fIsMC> 0){
571  Int_t* mclabelsCluster = clus->GetLabels();
572  Int_t nValidClusters = 0;
573  if (clus->GetNLabels()>0){
574  for (Int_t k =0; k< (Int_t)clus->GetNLabels(); k++){
575  if (mclabelsCluster[k]>0){
576  if (nValidClusters< 50)PhotonCandidate->SetCaloPhotonMCLabel(nValidClusters,mclabelsCluster[k]);
577  nValidClusters++;
578  }
579  }
580  }
581  PhotonCandidate->SetNCaloPhotonMCLabels(nValidClusters);
582  }
583 
584  AliAODCaloCluster* clusSub1 = new AliAODCaloCluster();
585  AliAODCaloCluster* clusSub2 = new AliAODCaloCluster();
586 
587 
588  // split clusters according to their shares in the cluster (NLM == 1) needs to be treated differently
589  if (fMinNLMCut == 1 && fMaxNLMCut == 1 ){
590  Int_t absCellIdFirst = ((AliCaloPhotonCuts*)fClusterCutsEMC)->FindLargestCellInCluster(clus, fInputEvent);
591  Int_t absCellIdSecond = ((AliCaloPhotonCuts*)fClusterCutsEMC)->FindSecondLargestCellInCluster(clus, fInputEvent);
592 
593  ((AliCaloPhotonCuts*)fClusterCutsEMC)->SplitEnergy(absCellIdFirst, absCellIdSecond, clus, fInputEvent, fIsMC, clusSub1, clusSub2);
594  } else if (fMinNLMCut > 1 ){
595  const Int_t nc = clus->GetNCells();
596  Int_t absCellIdList[nc];
597 
598  ((AliCaloPhotonCuts*)fClusterCutsEMC)->SplitEnergy(absCellIdList[0], absCellIdList[1], clus, fInputEvent, fIsMC, clusSub1, clusSub2);
599  }
600 
601  // TLorentzvector with sub cluster 1
602  TLorentzVector clusterVector1;
603  clusSub1->GetMomentum(clusterVector1,vertex);
604  TLorentzVector* tmpvec1 = new TLorentzVector();
605  tmpvec1->SetPxPyPzE(clusterVector1.Px(),clusterVector1.Py(),clusterVector1.Pz(),clusterVector1.E());
606  // convert to AODConversionPhoton
607  AliAODConversionPhoton *PhotonCandidate1=new AliAODConversionPhoton(tmpvec1);
608  if(!PhotonCandidate1){
609  delete clusSub1;
610  delete tmpvec1;
611  return -9;
612  }
613  // Flag Photon as CaloPhoton
614  PhotonCandidate1->SetIsCaloPhoton();
615  // TLorentzvector with sub cluster 2
616  TLorentzVector clusterVector2;
617  clusSub2->GetMomentum(clusterVector2,vertex);
618  TLorentzVector* tmpvec2 = new TLorentzVector();
619  tmpvec2->SetPxPyPzE(clusterVector2.Px(),clusterVector2.Py(),clusterVector2.Pz(),clusterVector2.E());
620  // convert to AODConversionPhoton
621  AliAODConversionPhoton *PhotonCandidate2=new AliAODConversionPhoton(tmpvec2);
622  if(!PhotonCandidate2){
623  delete clusSub2;
624  delete tmpvec2;
625  return -9;
626  }
627  // Flag Photon as CaloPhoton
628  PhotonCandidate2->SetIsCaloPhoton();
629  Int_t mclabel = -3;
630  // create pi0 candidate
631  AliAODConversionMother *pi0cand = new AliAODConversionMother(PhotonCandidate1,PhotonCandidate2);
632  if((((AliConversionMesonCuts*)fMesonCuts)->MesonIsSelected(pi0cand,kTRUE,fEventCuts->GetEtaShift()))){
633  if(fIsMC> 0 && PhotonCandidate && PhotonCandidate1 && PhotonCandidate2 && fSaveMCInformation){
634  // if(fInputEvent->IsA()==AliESDEvent::Class())
635  mclabel = ProcessTrueClusterCandidates(PhotonCandidate, clus->GetM02(), PhotonCandidate1, PhotonCandidate2);
636  // if(fInputEvent->IsA()==AliAODEvent::Class())
637  // ProcessTrueClusterCandidatesAOD(PhotonCandidate, clus->GetM02(), PhotonCandidate1, PhotonCandidate2);
638  return mclabel;
639  }
640  } else {
641  return -7;
642  }
643  return -1;
644 }
645 
646 //________________________________________________________________________
647 void AliAnalysisTaskClusterQA::ProcessTracksAndMatching(AliVCluster* clus, Long_t indexCluster){
648 
649 
650  Int_t nTracksInR = 0;
651  Int_t nModules = fGeomEMCAL->GetNumberOfSuperModules();
652 
653  AliESDEvent *esdev = dynamic_cast<AliESDEvent*>(fInputEvent);
654  AliESDtrackCuts *EsdTrackCuts = 0x0;
655  // Using standard function for setting Cuts
656  static int prevRun = -1;
657  // Using standard function for setting Cuts
658  if (esdev){
659  Int_t runNumber = fInputEvent->GetRunNumber();
660  if (prevRun!=runNumber) {
661  delete EsdTrackCuts;
662  EsdTrackCuts = 0;
663  prevRun = runNumber;
664  }
665  // if LHC11a or earlier or if LHC13g or if LHC12a-i -> use 2010 cuts
666  if( (runNumber<=146860) || (runNumber>=197470 && runNumber<=197692) || (runNumber>=172440 && runNumber<=193766) ){
667  EsdTrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010();
668  // else if run2 data use 2015 PbPb cuts
669  }else if (runNumber>=209122){
670  // hard coded track cuts for the moment, because AliESDtrackCuts::GetStandardITSTPCTrackCuts2015PbPb() gives spams warnings
671  EsdTrackCuts = new AliESDtrackCuts();
672  EsdTrackCuts->AliESDtrackCuts::SetMinNCrossedRowsTPC(70);
673  EsdTrackCuts->AliESDtrackCuts::SetMinRatioCrossedRowsOverFindableClustersTPC(0.8);
674  EsdTrackCuts->AliESDtrackCuts::SetMaxChi2PerClusterTPC(4);
675  EsdTrackCuts->AliESDtrackCuts::SetAcceptKinkDaughters(kFALSE);
676  EsdTrackCuts->AliESDtrackCuts::SetRequireTPCRefit(kTRUE);
677  // ITS
678  EsdTrackCuts->AliESDtrackCuts::SetRequireITSRefit(kTRUE);
679  EsdTrackCuts->AliESDtrackCuts::SetClusterRequirementITS(AliESDtrackCuts::kSPD,
680  AliESDtrackCuts::kAny);
681  EsdTrackCuts->AliESDtrackCuts::SetMaxDCAToVertexXYPtDep("0.0105+0.0350/pt^1.1");
682  EsdTrackCuts->AliESDtrackCuts::SetMaxChi2TPCConstrainedGlobal(36);
683  EsdTrackCuts->AliESDtrackCuts::SetMaxDCAToVertexZ(2);
684  EsdTrackCuts->AliESDtrackCuts::SetDCAToVertex2D(kFALSE);
685  EsdTrackCuts->AliESDtrackCuts::SetRequireSigmaToVertex(kFALSE);
686  EsdTrackCuts->AliESDtrackCuts::SetMaxChi2PerClusterITS(36);
687  // else use 2011 version of track cuts
688  }else{
689  EsdTrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011();
690  }
691  EsdTrackCuts->SetMaxDCAToVertexZ(2);
692  EsdTrackCuts->SetEtaRange(-0.8, 0.8);
693  EsdTrackCuts->SetPtRange(0.15);
694  }
695 
696  for (Int_t itr=0;itr<fInputEvent->GetNumberOfTracks();itr++){
697  AliVTrack *inTrack = esdev->GetTrack(itr);
698  if(!inTrack) continue;
699  if(inTrack->Pt()<fMinTrackPt) continue;
700  AliESDtrack *esdt = dynamic_cast<AliESDtrack*>(inTrack);
701  // check track cuts
702  if(!EsdTrackCuts->AcceptTrack(esdt)) continue;
703  const AliExternalTrackParam *in = esdt->GetInnerParam();
704  if (!in){AliError("Could not get InnerParam of Track, continue");continue;}
705  AliExternalTrackParam *trackParam =new AliExternalTrackParam(*in);
706  AliExternalTrackParam emcParam(*trackParam);
707  Float_t eta, phi, pt;
708 
709  //propagate tracks to emc surfaces
710  if (!AliEMCALRecoUtils::ExtrapolateTrackToEMCalSurface(&emcParam, 440., 0.139, 20., eta, phi, pt)) {
711  delete trackParam;
712  continue;
713  }
714  if( TMath::Abs(eta) > 0.75 ) {
715  delete trackParam;
716  continue;
717  }
718  // Save some time and memory in case of no DCal present
719  if( nModules < 13 && ( phi < 70*TMath::DegToRad() || phi > 190*TMath::DegToRad())){
720  delete trackParam;
721  continue;
722  }
723  // Save some time and memory in case of run2
724  if( nModules > 12 ){
725  if (( phi < 70*TMath::DegToRad() || phi > 190*TMath::DegToRad()) && ( phi < 250*TMath::DegToRad() || phi > 340*TMath::DegToRad())){
726  delete trackParam;
727  continue;
728  }
729  }
730  Float_t dEta=-999, dPhi=-999;
731  Double_t trkPos[3] = {0.,0.,0.};
732  if (!emcParam.GetXYZ(trkPos)){
733  delete trackParam;
734  continue;
735  }
736 
737  AliExternalTrackParam trackParamTmp(emcParam);//Retrieve the starting point every time before the extrapolation
738  if(!AliEMCALRecoUtils::ExtrapolateTrackToCluster(&trackParamTmp, clus, 0.139, 5., dEta, dPhi)) continue;
739 
740  Float_t dR2 = dPhi*dPhi + dEta*dEta;
741  if(dR2 < fConeRadius){
742  fBuffer_Surrounding_Tracks_R[nTracksInR]=dR2;
743  fBuffer_Surrounding_Tracks_Pt[nTracksInR]=inTrack->Pt();
746  nTracksInR+=1;
747  }
748  }
749  fBuffer_Surrounding_NTracks = nTracksInR;
750  if(nTracksInR==0){
751  fBuffer_Surrounding_Tracks_R[nTracksInR]=-1;
752  fBuffer_Surrounding_Tracks_Pt[nTracksInR]=-1;
755  }
756 
757  if(EsdTrackCuts){
758  delete EsdTrackCuts;
759  EsdTrackCuts=0x0;
760  }
761 }
762 
763 //________________________________________________________________________
765  AliAODConversionPhoton *TrueSubClusterCandidate1,
766  AliAODConversionPhoton *TrueSubClusterCandidate2)
767 {
768  Int_t mcLabelCluster = -5;
769  const AliVVertex* primVtxMC = fMCEvent->GetPrimaryVertex();
770  Double_t mcProdVtxX = primVtxMC->GetX();
771  Double_t mcProdVtxY = primVtxMC->GetY();
772  Double_t mcProdVtxZ = primVtxMC->GetZ();
773 
774  TParticle *Photon = NULL;
775  if (!TrueClusterCandidate->GetIsCaloPhoton()) AliFatal("CaloPhotonFlag has not been set task will abort");
776  if (TrueClusterCandidate->GetCaloPhotonMCLabel(0) < 0) return mcLabelCluster;
777  if (TrueClusterCandidate->GetNCaloPhotonMCLabels()>0) Photon = fMCEvent->Particle(TrueClusterCandidate->GetCaloPhotonMCLabel(0));
778  else return mcLabelCluster;
779 
780  if(Photon == NULL){
781  return mcLabelCluster;
782  }
783  AliAODConversionMother *mesoncand = new AliAODConversionMother(TrueSubClusterCandidate1,TrueSubClusterCandidate2);
784  Bool_t mesonIsSelected = (((AliConversionMesonCuts*)fMesonCuts)->MesonIsSelected(mesoncand,kTRUE,fEventCuts->GetEtaShift()));
785  if (!mesonIsSelected){
786  delete mesoncand;
787  return mcLabelCluster;
788  }
789 
790  TrueClusterCandidate->SetCaloPhotonMCFlags(fMCEvent, kFALSE);
791 
792  Int_t clusterClass = 0;
793  Bool_t isPrimary = fEventCuts->IsConversionPrimaryESD( fMCEvent, TrueClusterCandidate->GetCaloPhotonMCLabel(0), mcProdVtxX, mcProdVtxY, mcProdVtxZ);
794 
795  // cluster classification:
796  // 1 - nice merged cluster (2 gamma | contributions from 2 gamma) from pi0/eta
797  // 2 - contribution from only 1 partner (1 gamma, 1 fully coverted gamma) from pi0/eta
798  // 3 - contribution from part of 1 partner (1 electron) from pi0/eta
799  Long_t motherLab = -1;
800  if (TrueClusterCandidate->IsMerged() || TrueClusterCandidate->IsMergedPartConv()){
801  clusterClass = 1;
802  motherLab = TrueClusterCandidate->GetCaloPhotonMotherMCLabel(0);
803  } else if (TrueClusterCandidate->GetNCaloPhotonMotherMCLabels()> 0){
804  if (TrueClusterCandidate->IsLargestComponentElectron() || TrueClusterCandidate->IsLargestComponentPhoton()){
805  if (TrueClusterCandidate->GetCaloPhotonMotherMCLabel(0) > -1 && (fMCEvent->Particle(TrueClusterCandidate->GetCaloPhotonMotherMCLabel(0))->GetPdgCode() == 111 || fMCEvent->Particle(TrueClusterCandidate->GetCaloPhotonMotherMCLabel(0))->GetPdgCode() == 221) ){
806  if ( TrueClusterCandidate->IsConversion() && !TrueClusterCandidate->IsConversionFullyContained() ){
807  clusterClass = 3;
808  motherLab = TrueClusterCandidate->GetCaloPhotonMotherMCLabel(0);
809  } else {
810  clusterClass = 2;
811  motherLab = TrueClusterCandidate->GetCaloPhotonMotherMCLabel(0);
812  }
813  }
814  } else if (TrueClusterCandidate->IsSubLeadingEM()){
815  if (TrueClusterCandidate->GetNCaloPhotonMotherMCLabels()> 1){
816  if ( TrueClusterCandidate->GetCaloPhotonMotherMCLabel(1) > -1){
817  if (fMCEvent->Particle(TrueClusterCandidate->GetCaloPhotonMotherMCLabel(1))->GetPdgCode() == 111 || fMCEvent->Particle(TrueClusterCandidate->GetCaloPhotonMotherMCLabel(1))->GetPdgCode() == 221 ){
818  clusterClass = 2;
819  motherLab = TrueClusterCandidate->GetCaloPhotonMotherMCLabel(1);
820  }
821  }
822  }
823  } else {
824  motherLab = TrueClusterCandidate->GetCaloPhotonMotherMCLabel(0);
825  }
826  }
827 
828  // Get Mother particle
829  TParticle *mother = NULL;
830  Int_t motherPDG = -1;
831  if (motherLab > -1)
832  mother = fMCEvent->Particle(motherLab);
833  if (mother)
834  motherPDG = TMath::Abs(mother->GetPdgCode());
835 
836  //
837  if (clusterClass == 1 || clusterClass == 2 || clusterClass == 3 ){
838  // separate different components
839  if (clusterClass == 1 && TrueClusterCandidate->IsMerged()){
840  if (motherPDG == 111){
841  mcLabelCluster = 10; // NOTE merged pi0
842  if (!isPrimary && m02 >= 0 && m02 <= 4.8 )
843  mcLabelCluster = 11; // NOTE secondary merged pi0
844  }
845  if (motherPDG == 221)
846  mcLabelCluster = 12; // NOTE merged eta
847  } else if (clusterClass == 1 && TrueClusterCandidate->IsMergedPartConv()){
848  if (motherPDG == 111){
849  mcLabelCluster = 13; // NOTE merged pi0 with one converted gamma
850  if (!isPrimary && m02 >= 0 && m02 <= 4.8 )
851  mcLabelCluster = 14; // NOTE merged secondary pi0 with one converted gamma
852  }
853  if (motherPDG == 221)
854  mcLabelCluster = 15; // NOTE merged eta with one converted gamma
855  } else if (clusterClass == 2){
856  if (motherPDG == 111){
857  mcLabelCluster = 20; // NOTE decay photon from pi0
858  if (!isPrimary && m02 >= 0 && m02 <= 4.8 )
859  mcLabelCluster = 21; // NOTE decay photon from secondary pi0
860  }
861  if (motherPDG == 221)
862  mcLabelCluster = 22; // NOTE decay photon from eta
863  } else if (clusterClass == 3){
864  if (motherPDG == 111) {
865  mcLabelCluster = 30; // NOTE electron from decayed pi0
866  if (!isPrimary && m02 >= 0 && m02 <= 4.8 )
867  mcLabelCluster = 31; // NOTE electron from decayed secondary pi0
868  }
869  if (motherPDG == 221)
870  mcLabelCluster = 32; // NOTE electron from decayed eta
871  }
872  // leading particle is a photon or the conversion is fully contained and its not from pi0 || eta
873  } else if (TrueClusterCandidate->IsLargestComponentPhoton() || TrueClusterCandidate->IsConversionFullyContained()
874  || TrueClusterCandidate->IsElectronFromFragPhoton()){
875  if (motherLab == -1)
876  mcLabelCluster = 40; // NOTE direct photon
877  else
878  mcLabelCluster = 41;
879  // leading particle is an electron and its not from pi0 || eta and no electron from fragmentation photon conversion
880  } else if (TrueClusterCandidate->IsLargestComponentElectron() && !TrueClusterCandidate->IsElectronFromFragPhoton()){
881  mcLabelCluster = 50; // NOTE cluster from hadron
882  } else {
883  mcLabelCluster = 60; // NOTE BG cluster
884  }
885 
886  delete mesoncand;
887  return mcLabelCluster;
888 }
void SetPeriodEnum(TString periodName)
Int_t fBuffer_Surrounding_NTracks
! array buffer
void SetCaloClusterRef(Long_t ref)
double Double_t
Definition: External.C:58
Float_t fBuffer_ClusterPhi
! array buffer
virtual void UserExec(Option_t *option)
void SetCaloPhotonMCFlags(AliMCEvent *mcEvent, Bool_t enableSort)
Float_t fBuffer_Event_Vertex_Y
! array buffer
Int_t MakePhotonCandidates(AliVCluster *clus, AliVCaloCells *cells, Long_t indexCluster)
PeriodVar GetPeriodEnum()
Bool_t fSaveMCInformation
save MC information
void SetPeriodEnumExplicit(PeriodVar periodEnum)
const Int_t kMaxNTracks
Float_t fBuffer_ClusterE
! array buffer
Float_t * fBuffer_Cells_RelativeEta
! array buffer
Double_t GetEtaShift()
Bool_t fSaveEventProperties
save general event properties (centrality etc.)
Float_t fConeRadius
save arrays of all cells in event
TString GetPeriodName()
void SetCaloPhotonMCLabel(Int_t i, Int_t labelCaloPhoton)
Float_t * fBuffer_Surrounding_Tracks_R
! array buffer
Float_t fBuffer_Event_Vertex_Z
! array buffer
Int_t GetCaloPhotonMotherMCLabel(Int_t i)
Bool_t fBuffer_ClusterIsEMCAL
! array buffer
Float_t fBuffer_Event_Vertex_X
! array buffer
Int_t fBuffer_LeadingCell_ID
! array buffer
void GetRowAndColumnFromAbsCellID(Int_t cellIndex, Int_t &row, Int_t &column)
void ProcessTracksAndMatching(AliVCluster *clus, Long_t indexCluster)
Float_t fBuffer_Event_Multiplicity
! array buffer
Int_t * fBuffer_Surrounding_Cells_ID
! array buffer
Int_t FindLargestCellInCluster(AliVCluster *cluster, AliVEvent *event)
Float_t * fBuffer_Surrounding_Cells_E
! array buffer
Float_t fBuffer_LeadingCell_Phi
! array buffer
Int_t IsEventAcceptedByCut(AliConvEventCuts *ReaderCuts, AliVEvent *event, AliMCEvent *mcEvent, Int_t isHeavyIon, Bool_t isEMCALAnalysis)
int Int_t
Definition: External.C:63
Float_t * fBuffer_Surrounding_Cells_R
! array buffer
Class handling all kinds of selection cuts for Gamma Calo analysis.
void ProcessQATreeCluster(AliVEvent *event, AliVCluster *cluster, Long_t indexCluster)
Float_t * fBuffer_Cells_RelativePhi
! array buffer
Float_t * fBuffer_Surrounding_Tracks_RelativeEta
! array buffer
float Float_t
Definition: External.C:68
Float_t * fBuffer_Surrounding_Tracks_Pt
! array buffer
Bool_t IsConversionPrimaryESD(AliMCEvent *mcEvent, Long_t eventpos, Double_t prodVtxX, Double_t prodVtxY, Double_t prodVtxZ)
Int_t fBuffer_Cluster_MC_Label
! array buffer
Bool_t fSaveSurroundingCells
save arrays of all cells in event
Float_t fBuffer_ClusterM20
! array buffer
Float_t fMinClusterEnergy
save arrays of all cells in event
Int_t * fBuffer_Cells_ID
! array buffer
Int_t fMaxNLMCut
save MC information
short Short_t
Definition: External.C:23
Float_t fBuffer_ClusterM02
! array buffer
virtual void Terminate(Option_t *)
Int_t fBuffer_Event_NumActiveCells
! array buffer
Float_t fBuffer_ClusterEta
! array buffer
Bool_t fSaveCells
save arrays of cluster cells
static Bool_t ExtrapolateTrackToCluster(AliExternalTrackParam *trkParam, const AliVCluster *cluster, Double_t mass, Double_t step, Float_t &tmpEta, Float_t &tmpPhi)
Float_t * fBuffer_Surrounding_Cells_RelativePhi
! array buffer
Class handling all kinds of selection cuts for Gamma Conversion analysis.
Int_t fBuffer_ClusterNumCells
! array buffer
void SetNCaloPhotonMCLabels(Int_t nLabels)
Float_t fBuffer_LeadingCell_Eta
! array buffer
const Int_t kMaxActiveCells
Class handling all kinds of selection cuts for Gamma Conversion analysis.
Float_t * fBuffer_Surrounding_Cells_RelativeEta
! array buffer
AliConversionMesonCuts * fMesonCuts
Float_t fBuffer_LeadingCell_E
! array buffer
AliConvEventCuts * GetEventCuts()
Definition: AliV0ReaderV1.h:90
const char Option_t
Definition: External.C:48
bool Bool_t
Definition: External.C:53
Float_t * fBuffer_Surrounding_Tracks_RelativePhi
! array buffer
Float_t * fBuffer_Cells_E
! array buffer
Int_t fMinNLMCut
save MC information
Int_t fBuffer_Surrounding_NCells
! array buffer
Bool_t fSaveTracks
save arrays of all cells in event
Int_t ProcessTrueClusterCandidates(AliAODConversionPhoton *TrueClusterCandidate, Float_t m02, AliAODConversionPhoton *TrueSubClusterCandidate1, AliAODConversionPhoton *TrueSubClusterCandidate2)
TList * OpenFile(const char *fname)
Definition: DrawAnaELoss.C:65
Float_t fMinTrackPt
save arrays of all cells in event