1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
17 //_________________________________________________________________________
18 // Base class for analysis algorithms
19 //-- Author: Gustavo Conesa (LNF-INFN)
20 //_________________________________________________________________________
23 // --- ROOT system ---
24 #include <TClonesArray.h>
26 //---- AliRoot system ----
27 #include "AliAODPWG4Particle.h"
28 #include "AliAODCaloCluster.h"
29 #include "AliAODCaloCells.h"
30 #include "AliAODTrack.h"
31 #include "AliAnaPartCorrBaseClass.h"
32 #include "AliCaloTrackReader.h"
33 #include "AliCaloPID.h"
34 #include "AliFidutialCut.h"
35 #include "AliIsolationCut.h"
36 #include "AliNeutralMesonSelection.h"
38 #include "AliAODPWG4ParticleCorrelation.h"
40 ClassImp(AliAnaPartCorrBaseClass)
43 //_______________________________________________
44 AliAnaPartCorrBaseClass::AliAnaPartCorrBaseClass() :
45 TObject(), fDataMC(0), fDebug(0), fCheckFidCut(0),
46 fCheckCaloPID(0), fRecalculateCaloPID(0), fMinPt(0), fMaxPt(0),
48 fInputAODBranch(0x0), fInputAODName(""),
49 fOutputAODBranch(0x0), fNewAOD(kFALSE),
50 fOutputAODName(""), fOutputAODClassName(""),
51 fAODCaloClusters(0x0), fAODCaloCells(0x0),
52 fCaloPID(0x0), fFidCut(0x0), fIC(0x0),fNMS(0x0),
53 fHistoNPtBins(0), fHistoPtMax(0.), fHistoPtMin(0.),
54 fHistoNPhiBins(0), fHistoPhiMax(0.), fHistoPhiMin(0.),
55 fHistoNEtaBins(0), fHistoEtaMax(0.), fHistoEtaMin(0.)
59 fReader = new AliCaloTrackReader();
60 fCaloPID = new AliCaloPID();
61 fFidCut = new AliFidutialCut();
62 fIC = new AliIsolationCut();
64 //Initialize parameters
68 //___________________________________________________________
69 AliAnaPartCorrBaseClass::AliAnaPartCorrBaseClass(const AliAnaPartCorrBaseClass & abc) :
70 TObject(), fDataMC(abc.fDataMC), fDebug(abc.fDebug),
71 fCheckFidCut(abc.fCheckFidCut), fCheckCaloPID(abc. fCheckCaloPID),
72 fRecalculateCaloPID(abc.fRecalculateCaloPID),
73 fMinPt(abc.fMinPt), fMaxPt(abc.fMaxPt), fReader(abc.fReader),
74 fInputAODBranch(new TClonesArray(*abc.fInputAODBranch)), fInputAODName(abc.fInputAODName),
75 fOutputAODBranch(new TClonesArray(*abc.fOutputAODBranch)),fNewAOD(abc.fNewAOD),
76 fOutputAODName(abc.fOutputAODName), fOutputAODClassName(abc.fOutputAODClassName),
77 fAODCaloClusters(new TClonesArray(*abc.fAODCaloClusters)),
78 fAODCaloCells(new AliAODCaloCells(*abc.fAODCaloCells)),
79 fCaloPID(abc.fCaloPID), fFidCut(abc.fFidCut), fIC(abc.fIC),fNMS(abc.fNMS),
80 fHistoNPtBins(abc.fHistoNPtBins), fHistoPtMax(abc.fHistoPtMax), fHistoPtMin(abc.fHistoPtMin),
81 fHistoNPhiBins(abc.fHistoNPhiBins), fHistoPhiMax(abc.fHistoPhiMax), fHistoPhiMin(abc.fHistoPhiMin),
82 fHistoNEtaBins(abc.fHistoNEtaBins), fHistoEtaMax(abc.fHistoEtaMax), fHistoEtaMin(abc.fHistoEtaMin)
88 //_________________________________________________________________________
89 AliAnaPartCorrBaseClass & AliAnaPartCorrBaseClass::operator = (const AliAnaPartCorrBaseClass & abc)
91 // assignment operator
93 if(this == &abc) return *this;
94 ((TObject *)this)->operator=(abc);
96 fDataMC = abc.fDataMC;
98 fRecalculateCaloPID = abc.fRecalculateCaloPID ;
99 fCheckCaloPID = abc.fCheckCaloPID ;
100 fCheckFidCut = abc.fCheckFidCut ;
102 fReader = abc.fReader ;
103 fAODCaloClusters = new TClonesArray(*abc.fAODCaloClusters) ;
104 fAODCaloCells = new AliAODCaloCells(*abc.fAODCaloCells) ;
108 fCaloPID = abc.fCaloPID;
109 fFidCut = abc.fFidCut;
113 fInputAODBranch = new TClonesArray(*abc.fInputAODBranch) ;
114 fInputAODName = abc.fInputAODName;
115 fOutputAODBranch = new TClonesArray(*abc.fOutputAODBranch) ;
116 fNewAOD = abc.fNewAOD ;
117 fOutputAODName = abc.fOutputAODName;
118 fOutputAODClassName = abc.fOutputAODClassName;
121 fHistoNPtBins = abc.fHistoNPtBins; fHistoPtMax = abc.fHistoPtMax; fHistoPtMin = abc.fHistoPtMin;
122 fHistoNPhiBins = abc.fHistoNPhiBins; fHistoPhiMax = abc.fHistoPhiMax; fHistoPhiMin = abc.fHistoPhiMin;
123 fHistoNEtaBins = abc.fHistoNEtaBins; fHistoEtaMax = abc.fHistoEtaMax; fHistoEtaMin = abc.fHistoEtaMin;
129 //____________________________________________________________________________
130 AliAnaPartCorrBaseClass::~AliAnaPartCorrBaseClass()
132 // Remove all pointers except analysis output pointers.
134 if(fOutputAODBranch){
135 fOutputAODBranch->Clear() ;
136 delete fOutputAODBranch ;
140 fInputAODBranch->Clear() ;
141 delete fInputAODBranch ;
144 if(fAODCaloClusters){
145 fAODCaloClusters->Clear() ;
146 delete fAODCaloClusters ;
150 fAODCaloCells->Clear() ;
151 delete fAODCaloCells ;
154 if(fReader) delete fReader ;
155 if(fCaloPID) delete fCaloPID ;
156 if(fFidCut) delete fFidCut ;
158 if(fNMS) delete fNMS ;
162 //____________________________________________________________________________
163 void AliAnaPartCorrBaseClass::AddAODCaloCluster(AliAODCaloCluster calo) {
164 //Put AOD calo cluster in the CaloClusters array
166 Int_t i = fAODCaloClusters->GetEntriesFast();
167 new((*fAODCaloClusters)[i]) AliAODCaloCluster(calo);
172 //____________________________________________________________________________
173 void AliAnaPartCorrBaseClass::AddAODParticle(AliAODPWG4Particle pc) {
174 //Put AOD calo cluster in the AODParticleCorrelation array
176 if(fOutputAODBranch){
178 Int_t i = fOutputAODBranch->GetEntriesFast();
179 //new((*fOutputAODBranch)[i]) AliAODPWG4Particle(pc);
180 if(strcmp(fOutputAODBranch->GetClass()->GetName(),"AliAODPWG4Particle")==0)
181 new((*fOutputAODBranch)[i]) AliAODPWG4Particle(pc);
182 else if(strcmp(fOutputAODBranch->GetClass()->GetName(),"AliAODPWG4ParticleCorrelation")==0)
183 new((*fOutputAODBranch)[i]) AliAODPWG4ParticleCorrelation(pc);
185 AliFatal(Form(">>> Cannot add an object of type < %s >, to the AOD TClonesArray \n",
186 fOutputAODBranch->GetClass()->GetName()));
188 else AliFatal("AddAODParticle: No AOD branch available!!!");
193 //___________________________________________________
194 void AliAnaPartCorrBaseClass::ConnectAODCaloClusters() {
195 //Recover the list of AODCaloClusters
197 fAODCaloClusters = fReader->GetAOD()->GetCaloClusters();
201 //___________________________________________________
202 void AliAnaPartCorrBaseClass::ConnectAODPHOSCells() {
203 //Recover the list of PHOS AODCaloCells
205 fAODCaloCells = fReader->GetAOD()->GetPHOSCells();
209 //___________________________________________________
210 void AliAnaPartCorrBaseClass::ConnectAODEMCALCells() {
211 //Recover the list of EMCAL AODCaloCells
213 fAODCaloCells = fReader->GetAOD()->GetEMCALCells();
217 //___________________________________________________
218 void AliAnaPartCorrBaseClass::ConnectInputOutputAODBranches() {
219 //Recover ouput and input AOD pointers for each event in the maker
220 fOutputAODBranch = (TClonesArray *) fReader->GetAOD()->FindListObject(fOutputAODName);
221 fInputAODBranch = (TClonesArray *) fReader->GetAOD()->FindListObject(fInputAODName);
224 //__________________________________________________
225 TClonesArray * AliAnaPartCorrBaseClass::GetAODCTS() const {
226 //Get list of tracks from reader
228 return fReader->GetAODCTS();
232 //__________________________________________________
233 TClonesArray * AliAnaPartCorrBaseClass::GetAODPHOS() const {
234 //Get list of PHOS calo clusters from reader
236 return fReader->GetAODPHOS();
241 //__________________________________________________
242 TClonesArray * AliAnaPartCorrBaseClass::GetAODEMCAL() const {
243 //Get list of emcal caloclusters from reader
245 return fReader->GetAODEMCAL();
249 //__________________________________________________
250 TString AliAnaPartCorrBaseClass::GetBaseParametersList() {
251 //Put data member values in string to keep in output container
253 TString parList ; //this will be list of parameters used for this analysis.
255 sprintf(onePar,"--- AliAnaPartCorrBaseClass ---\n") ;
257 sprintf(onePar,"Minimal P_t: %2.2f ; Max\n", fMinPt) ;
259 sprintf(onePar,"Minimal P_t: %2.2f ; Max\n", fMaxPt) ;
261 sprintf(onePar,"fDataMC =%d (Check MC information, on/off) \n",fDataMC) ;
263 sprintf(onePar,"fCheckFidCut=%d (Check Fidutial cut selection on/off) \n",fCheckFidCut) ;
265 sprintf(onePar,"fCheckCaloPIC =%d (Use Bayesian PID in calorimetes, on/off) \n",fCheckCaloPID) ;
267 sprintf(onePar,"fRecalculateCaloPID =%d (Calculate PID from shower/tof/tracking parameters, on/off) \n",fRecalculateCaloPID) ;
274 //__________________________________________________
275 TClonesArray * AliAnaPartCorrBaseClass::GetCreateOutputAODBranch() {
276 //Create AOD branch filled in the analysis
279 printf("Create AOD branch of %s objects and with name < %s >\n",
280 fOutputAODClassName.Data(),fOutputAODName.Data()) ;
282 TClonesArray * aodBranch = new TClonesArray(fOutputAODClassName, 0);
283 aodBranch->SetName(fOutputAODName);
289 //__________________________________________________
290 TNamed * AliAnaPartCorrBaseClass::GetPHOSCells() const {
291 //Get list of PHOS calo cells (ESD or AOD) from reader
293 return fReader->GetPHOSCells();
298 //__________________________________________________
299 TNamed * AliAnaPartCorrBaseClass::GetEMCALCells() const {
300 //Get list of emcal calo cells (ESD or AOD) from reader
302 return fReader->GetEMCALCells();
306 //__________________________________________________
307 AliStack * AliAnaPartCorrBaseClass::GetMCStack() const {
308 //Get stack pointer from reader
310 return fReader->GetStack();
313 //__________________________________________________
314 AliHeader * AliAnaPartCorrBaseClass::GetMCHeader() const {
315 //Get header pointer from reader
317 return fReader->GetHeader();
321 //__________________________________________________
322 AliGenEventHeader * AliAnaPartCorrBaseClass::GetMCGenEventHeader() const {
323 //Get GenEventHeader pointer from reader
325 return fReader->GetGenEventHeader();
329 //__________________________________________________
330 void AliAnaPartCorrBaseClass::InitParameters()
332 //Initialize the parameters of the analysis.
335 fCheckCaloPID = kTRUE ;
336 fCheckFidCut = kFALSE ;
337 fRecalculateCaloPID = kFALSE ;
338 fMinPt = 0.2 ; //Min pt in particle analysis
339 fMaxPt = 300. ; //Max pt in particle analysis
341 fCaloPID = new AliCaloPID ;
342 fFidCut = new AliFidutialCut;
343 fIC = new AliIsolationCut;
344 fNMS = new AliNeutralMesonSelection;
346 fOutputAODName = "PartCorr";
347 fOutputAODClassName = "AliAODPWG4Particle";
348 fInputAODName = "PartCorr";
350 //Histogrammes settings
351 fHistoNPtBins = 240 ;
355 fHistoNPhiBins = 120 ;
356 fHistoPhiMax = TMath::TwoPi();
359 fHistoNEtaBins = 100 ;
365 //__________________________________________________________________
366 void AliAnaPartCorrBaseClass::Print(const Option_t * opt) const
368 //Print some relevant parameters set for the analysis
372 printf("New AOD: = %d\n",fNewAOD);
373 printf("Input AOD name: = %s\n",fInputAODName.Data());
374 printf("Output AOD name: = %s\n",fOutputAODName.Data());
375 printf("Output AOD Class name: = %s\n",fOutputAODClassName.Data());
376 printf("Min Photon pT = %2.2f\n", fMinPt) ;
377 printf("Max Photon pT = %3.2f\n", fMaxPt) ;
378 printf("Check PID = %d\n", fCheckCaloPID) ;
379 printf("Recalculate PID = %d\n", fRecalculateCaloPID) ;
380 printf("Check Fidutial cut = %d\n", fCheckFidCut) ;
381 printf("Check MC labels = %d\n", fDataMC);
382 printf("Debug Level = %d\n", fDebug);
383 printf("Histograms: %3.1f < pT < %3.1f, Nbin = %d\n", fHistoPtMin, fHistoPtMax, fHistoNPtBins);
384 printf("Histograms: %3.1f < phi < %3.1f, Nbin = %d\n", fHistoPhiMin, fHistoPhiMax, fHistoNPhiBins);
385 printf("Histograms: %3.1f < eta < %3.1f, Nbin = %d\n", fHistoEtaMin, fHistoEtaMax, fHistoNEtaBins);