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>
25 //#include <Riostream.h>
27 //---- AliRoot system ----
28 #include "AliAnaPartCorrBaseClass.h"
29 #include "AliCaloTrackReader.h"
30 #include "AliCaloPID.h"
31 #include "AliFidutialCut.h"
32 #include "AliIsolationCut.h"
33 #include "AliMCAnalysisUtils.h"
34 #include "AliNeutralMesonSelection.h"
35 #include "AliAODCaloCells.h"
36 #include "AliAODEvent.h"
37 #include "AliAODHandler.h"
38 #include "AliAnalysisManager.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),
47 fReader(0x0), fInputAODBranch(0x0), fInputAODName(""),
48 fOutputAODBranch(0x0), fNewAOD(kFALSE),
49 fOutputAODName(""), fOutputAODClassName(""),
50 fAODObjArrayName(""), fAddToHistogramsName(""),
51 fAODCaloCells(0x0),//fAODCaloClusters(0x0),
52 fCaloPID(0x0), fFidCut(0x0), fIC(0x0),fMCUtils(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();
63 fMCUtils = new AliMCAnalysisUtils();
65 //Initialize parameters
69 //___________________________________________________________
70 AliAnaPartCorrBaseClass::AliAnaPartCorrBaseClass(const AliAnaPartCorrBaseClass & abc) :
71 TObject(), fDataMC(abc.fDataMC), fDebug(abc.fDebug),
72 fCheckFidCut(abc.fCheckFidCut), fCheckCaloPID(abc. fCheckCaloPID),
73 fRecalculateCaloPID(abc.fRecalculateCaloPID),
74 fMinPt(abc.fMinPt), fMaxPt(abc.fMaxPt), fReader(abc.fReader),
75 fInputAODBranch(new TClonesArray(*abc.fInputAODBranch)), fInputAODName(abc.fInputAODName),
76 fOutputAODBranch(new TClonesArray(*abc.fOutputAODBranch)),fNewAOD(abc.fNewAOD),
77 fOutputAODName(abc.fOutputAODName), fOutputAODClassName(abc.fOutputAODClassName),
78 fAODObjArrayName(abc.fAODObjArrayName),
79 fAddToHistogramsName(abc.fAddToHistogramsName),
80 //fAODCaloClusters(new TClonesArray(*abc.fAODCaloClusters)),
81 fAODCaloCells(new AliAODCaloCells(*abc.fAODCaloCells)),
82 fCaloPID(abc.fCaloPID), fFidCut(abc.fFidCut), fIC(abc.fIC),fMCUtils(abc.fMCUtils), fNMS(abc.fNMS),
83 fHistoNPtBins(abc.fHistoNPtBins), fHistoPtMax(abc.fHistoPtMax), fHistoPtMin(abc.fHistoPtMin),
84 fHistoNPhiBins(abc.fHistoNPhiBins), fHistoPhiMax(abc.fHistoPhiMax), fHistoPhiMin(abc.fHistoPhiMin),
85 fHistoNEtaBins(abc.fHistoNEtaBins), fHistoEtaMax(abc.fHistoEtaMax), fHistoEtaMin(abc.fHistoEtaMin)
91 //_________________________________________________________________________
92 AliAnaPartCorrBaseClass & AliAnaPartCorrBaseClass::operator = (const AliAnaPartCorrBaseClass & abc)
94 // assignment operator
96 if(this == &abc) return *this;
97 ((TObject *)this)->operator=(abc);
99 fDataMC = abc.fDataMC;
100 fDebug = abc.fDebug ;
101 fRecalculateCaloPID = abc.fRecalculateCaloPID ;
102 fCheckCaloPID = abc.fCheckCaloPID ;
103 fCheckFidCut = abc.fCheckFidCut ;
105 fReader = abc.fReader ;
106 //fAODCaloClusters = new TClonesArray(*abc.fAODCaloClusters) ;
107 fAODCaloCells = new AliAODCaloCells(*abc.fAODCaloCells) ;
111 fCaloPID = abc.fCaloPID;
112 fFidCut = abc.fFidCut;
114 fMCUtils = abc.fMCUtils;
117 fInputAODBranch = new TClonesArray(*abc.fInputAODBranch) ;
118 fInputAODName = abc.fInputAODName;
119 fOutputAODBranch = new TClonesArray(*abc.fOutputAODBranch) ;
120 fNewAOD = abc.fNewAOD ;
121 fOutputAODName = abc.fOutputAODName;
122 fOutputAODClassName = abc.fOutputAODClassName;
123 fAddToHistogramsName = abc.fAddToHistogramsName;
124 fAODObjArrayName = abc.fAODObjArrayName;
126 fHistoNPtBins = abc.fHistoNPtBins; fHistoPtMax = abc.fHistoPtMax; fHistoPtMin = abc.fHistoPtMin;
127 fHistoNPhiBins = abc.fHistoNPhiBins; fHistoPhiMax = abc.fHistoPhiMax; fHistoPhiMin = abc.fHistoPhiMin;
128 fHistoNEtaBins = abc.fHistoNEtaBins; fHistoEtaMax = abc.fHistoEtaMax; fHistoEtaMin = abc.fHistoEtaMin;
134 //____________________________________________________________________________
135 AliAnaPartCorrBaseClass::~AliAnaPartCorrBaseClass()
137 // Remove all pointers except analysis output pointers.
139 if(fOutputAODBranch){
140 fOutputAODBranch->Clear() ;
141 delete fOutputAODBranch ;
145 fInputAODBranch->Clear() ;
146 delete fInputAODBranch ;
149 // if(fAODCaloClusters){
150 // fAODCaloClusters->Clear() ;
151 // delete fAODCaloClusters ;
155 fAODCaloCells->Clear() ;
156 delete fAODCaloCells ;
159 if(fReader) delete fReader ;
160 if(fCaloPID) delete fCaloPID ;
161 if(fFidCut) delete fFidCut ;
163 if(fMCUtils) delete fMCUtils ;
164 if(fNMS) delete fNMS ;
168 ////____________________________________________________________________________
169 //void AliAnaPartCorrBaseClass::AddAODCaloCluster(AliAODCaloCluster calo) {
170 // //Put AOD calo cluster in the CaloClusters array
172 // Int_t i = fAODCaloClusters->GetEntriesFast();
173 // new((*fAODCaloClusters)[i]) AliAODCaloCluster(calo);
178 //____________________________________________________________________________
179 void AliAnaPartCorrBaseClass::AddAODParticle(AliAODPWG4Particle pc) {
180 //Put AOD calo cluster in the AODParticleCorrelation array
182 if(fOutputAODBranch){
184 Int_t i = fOutputAODBranch->GetEntriesFast();
185 //new((*fOutputAODBranch)[i]) AliAODPWG4Particle(pc);
186 if(strcmp(fOutputAODBranch->GetClass()->GetName(),"AliAODPWG4Particle")==0)
187 new((*fOutputAODBranch)[i]) AliAODPWG4Particle(pc);
188 else if(strcmp(fOutputAODBranch->GetClass()->GetName(),"AliAODPWG4ParticleCorrelation")==0)
189 new((*fOutputAODBranch)[i]) AliAODPWG4ParticleCorrelation(pc);
191 printf("AliAnaPartCorrBaseClass::AddAODParticle() - Cannot add an object of type < %s >, to the AOD TClonesArray \n",
192 fOutputAODBranch->GetClass()->GetName());
197 printf(" AliAnaPartCorrBaseClass::AddAODParticle() - No AOD branch available!!!\n");
204 //___________________________________________________
205 //void AliAnaPartCorrBaseClass::ConnectAODCaloClusters() {
206 // //Recover the list of AODCaloClusters
208 // fAODCaloClusters = fReader->GetOutputEvent()->GetCaloClusters();
212 //___________________________________________________
213 void AliAnaPartCorrBaseClass::ConnectAODPHOSCells() {
214 //Recover the list of PHOS AODCaloCells
216 fAODCaloCells = fReader->GetOutputEvent()->GetPHOSCells();
220 //___________________________________________________
221 void AliAnaPartCorrBaseClass::ConnectAODEMCALCells() {
222 //Recover the list of EMCAL AODCaloCells
224 fAODCaloCells = fReader->GetOutputEvent()->GetEMCALCells();
228 //___________________________________________________
229 TClonesArray * AliAnaPartCorrBaseClass::GetAODBranch(TString aodName) const {
230 //Recover ouput and input AOD pointers for each event in the maker
233 AliAODHandler* aodHandler = (AliAODHandler*)
234 ((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler());
235 if (aodHandler->GetExtensions()) {
236 AliAODExtension *ext = (AliAODExtension*)aodHandler->GetExtensions()->FindObject(GetReader()->GetDeltaAODFileName());
238 AliAODEvent *aodEvent = ext->GetAOD();
239 TClonesArray * aodbranch = (TClonesArray*) aodEvent->FindListObject(aodName);
240 if(aodbranch) return aodbranch;
241 else return (TClonesArray *) fReader->GetOutputEvent()->FindListObject(aodName);
243 else{//If no Delta AODs, kept in standard branch, to revise.
244 return (TClonesArray *) fReader->GetOutputEvent()->FindListObject(aodName);
247 else{ //If no Delta AODs, kept in standard branch, to revise.
248 return (TClonesArray *) fReader->GetOutputEvent()->FindListObject(aodName);
253 //___________________________________________________
254 void AliAnaPartCorrBaseClass::ConnectInputOutputAODBranches() {
255 //Recover ouput and input AOD pointers for each event in the maker
258 AliAODHandler* aodHandler = (AliAODHandler*)
259 ((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler());
260 if (aodHandler->GetExtensions()) {
261 AliAODExtension *ext = (AliAODExtension*)aodHandler->GetExtensions()->FindObject(GetReader()->GetDeltaAODFileName());
263 AliAODEvent *aodEvent = ext->GetAOD();
264 fOutputAODBranch = (TClonesArray*) aodEvent->FindListObject(fOutputAODName);
265 fInputAODBranch = (TClonesArray*) aodEvent->FindListObject(fInputAODName);
266 if(!fOutputAODBranch) fOutputAODBranch = (TClonesArray *) fReader->GetOutputEvent()->FindListObject(fOutputAODName);
267 if(!fInputAODBranch) fInputAODBranch = (TClonesArray *) fReader->GetOutputEvent()->FindListObject(fInputAODName);
269 else{//If no Delta AODs, kept in standard branch, to revise.
270 fOutputAODBranch = (TClonesArray *) fReader->GetOutputEvent()->FindListObject(fOutputAODName);
271 fInputAODBranch = (TClonesArray *) fReader->GetOutputEvent()->FindListObject(fInputAODName);
274 else{ //If no Delta AODs, kept in standard branch, to revise.
275 fOutputAODBranch = (TClonesArray *) fReader->GetOutputEvent()->FindListObject(fOutputAODName);
276 fInputAODBranch = (TClonesArray *) fReader->GetOutputEvent()->FindListObject(fInputAODName);
280 //__________________________________________________
281 TObjArray * AliAnaPartCorrBaseClass::GetAODCTS() const {
282 //Get list of referenced tracks from reader
284 return fReader->GetAODCTS();
288 //__________________________________________________
289 TObjArray * AliAnaPartCorrBaseClass::GetAODPHOS() const {
290 //Get list of PHOS reference caloclusters from reader
292 return fReader->GetAODPHOS();
296 //__________________________________________________
297 TObjArray * AliAnaPartCorrBaseClass::GetAODEMCAL() const {
298 //Get list of emcal referenced caloclusters from reader
300 return fReader->GetAODEMCAL();
304 //__________________________________________________
305 TClonesArray * AliAnaPartCorrBaseClass::GetAODCaloClusters() const {
306 //Get list of all caloclusters in AOD output file
308 return fReader->GetOutputEvent()->GetCaloClusters();
312 //__________________________________________________
313 TClonesArray * AliAnaPartCorrBaseClass::GetAODTracks() const {
314 //Get list of all tracks in AOD output file
316 return fReader->GetOutputEvent()->GetTracks();
320 //__________________________________________________
321 TString AliAnaPartCorrBaseClass::GetBaseParametersList() {
322 //Put data member values in string to keep in output container
324 TString parList ; //this will be list of parameters used for this analysis.
326 sprintf(onePar,"--- AliAnaPartCorrBaseClass ---\n") ;
328 sprintf(onePar,"Minimal P_t: %2.2f ; Max\n", fMinPt) ;
330 sprintf(onePar,"Minimal P_t: %2.2f ; Max\n", fMaxPt) ;
332 sprintf(onePar,"fDataMC =%d (Check MC information, on/off) \n",fDataMC) ;
334 sprintf(onePar,"fCheckFidCut=%d (Check Fidutial cut selection on/off) \n",fCheckFidCut) ;
336 sprintf(onePar,"fCheckCaloPID =%d (Use Bayesian PID in calorimetes, on/off) \n",fCheckCaloPID) ;
338 sprintf(onePar,"fRecalculateCaloPID =%d (Calculate PID from shower/tof/tracking parameters, on/off) \n",fRecalculateCaloPID) ;
340 sprintf(onePar,"fInputAODName =%s Input AOD name \n",fInputAODName.Data()) ;
343 sprintf(onePar,"fOutputAODName =%s Output AOD name \n",fOutputAODName.Data()) ;
345 sprintf(onePar,"fOutputAODClassName =%s Output AOD class name \n",fOutputAODClassName.Data()) ;
348 sprintf(onePar,"fAODObjArrayName =%s Reference arrays in AOD name \n",fAODObjArrayName.Data()) ;
350 sprintf(onePar,"fAddToHistogramsName =%s String added to beginning of histograms name \n",fAddToHistogramsName.Data()) ;
357 //__________________________________________________
358 TClonesArray * AliAnaPartCorrBaseClass::GetCreateOutputAODBranch() {
359 //Create AOD branch filled in the analysis
361 printf("Create AOD branch of %s objects and with name < %s >\n",
362 fOutputAODClassName.Data(),fOutputAODName.Data()) ;
364 TClonesArray * aodBranch = new TClonesArray(fOutputAODClassName, 0);
365 aodBranch->SetName(fOutputAODName);
370 //__________________________________________________
371 TNamed * AliAnaPartCorrBaseClass::GetPHOSCells() const {
372 //Get list of PHOS calo cells (ESD or AOD) from reader
374 return fReader->GetPHOSCells();
379 //__________________________________________________
380 TNamed * AliAnaPartCorrBaseClass::GetEMCALCells() const {
381 //Get list of emcal calo cells (ESD or AOD) from reader
383 return fReader->GetEMCALCells();
387 //__________________________________________________
388 Int_t AliAnaPartCorrBaseClass::GetEventNumber() const {
389 //Get current event number
391 return fReader->GetEventNumber() ;
394 //__________________________________________________
395 AliStack * AliAnaPartCorrBaseClass::GetMCStack() const {
396 //Get stack pointer from reader
398 return fReader->GetStack();
401 //__________________________________________________
402 AliHeader * AliAnaPartCorrBaseClass::GetMCHeader() const {
403 //Get header pointer from reader
405 return fReader->GetHeader();
409 //__________________________________________________
410 AliGenEventHeader * AliAnaPartCorrBaseClass::GetMCGenEventHeader() const {
411 //Get GenEventHeader pointer from reader
413 return fReader->GetGenEventHeader();
417 //__________________________________________________
418 void AliAnaPartCorrBaseClass::InitParameters()
420 //Initialize the parameters of the analysis.
423 fCheckCaloPID = kTRUE ;
424 fCheckFidCut = kFALSE ;
425 fRecalculateCaloPID = kFALSE ;
426 fMinPt = 0.2 ; //Min pt in particle analysis
427 fMaxPt = 300. ; //Max pt in particle analysis
429 fCaloPID = new AliCaloPID ;
430 fFidCut = new AliFidutialCut;
431 fIC = new AliIsolationCut;
432 fNMS = new AliNeutralMesonSelection;
434 fOutputAODName = "PartCorr";
435 fOutputAODClassName = "AliAODPWG4Particle";
436 fInputAODName = "PartCorr";
437 fAddToHistogramsName = "";
438 fAODObjArrayName="Ref";
440 //Histogrammes settings
441 fHistoNPtBins = 240 ;
445 fHistoNPhiBins = 120 ;
446 fHistoPhiMax = TMath::TwoPi();
449 fHistoNEtaBins = 100 ;
455 //__________________________________________________________________
456 void AliAnaPartCorrBaseClass::Print(const Option_t * opt) const
458 //Print some relevant parameters set for the analysis
463 printf("New AOD: = %d\n",fNewAOD);
464 printf("Input AOD name: = %s\n",fInputAODName.Data());
465 printf("Output AOD name: = %s\n",fOutputAODName.Data());
466 printf("Output AOD Class name: = %s\n",fOutputAODClassName.Data());
467 printf("Min Photon pT = %2.2f\n", fMinPt) ;
468 printf("Max Photon pT = %3.2f\n", fMaxPt) ;
469 printf("Check PID = %d\n", fCheckCaloPID) ;
470 printf("Recalculate PID = %d\n", fRecalculateCaloPID) ;
471 printf("Check Fidutial cut = %d\n", fCheckFidCut) ;
472 printf("Check MC labels = %d\n", fDataMC);
473 printf("Debug Level = %d\n", fDebug);
474 printf("Histograms: %3.1f < pT < %3.1f, Nbin = %d\n", fHistoPtMin, fHistoPtMax, fHistoNPtBins);
475 printf("Histograms: %3.1f < phi < %3.1f, Nbin = %d\n", fHistoPhiMin, fHistoPhiMax, fHistoNPhiBins);
476 printf("Histograms: %3.1f < eta < %3.1f, Nbin = %d\n", fHistoEtaMin, fHistoEtaMax, fHistoNEtaBins);
477 printf("Name of reference array : %s\n", fAODObjArrayName.Data());
478 printf("String added histograms name : %s\n",fAddToHistogramsName.Data());