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