]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG4/PartCorrBase/AliAnaPartCorrBaseClass.cxx
Handling of Terminate in frame corrected
[u/mrichter/AliRoot.git] / PWG4 / PartCorrBase / AliAnaPartCorrBaseClass.cxx
CommitLineData
1c5acb87 1/**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3 * *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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/* $Id: $ */
16
17//_________________________________________________________________________
18// Base class for analysis algorithms
19//-- Author: Gustavo Conesa (LNF-INFN)
20//_________________________________________________________________________
21
22
23// --- ROOT system ---
24#include <TClonesArray.h>
477d6cee 25//#include <Riostream.h>
1c5acb87 26
27//---- AliRoot system ----
1c5acb87 28#include "AliAnaPartCorrBaseClass.h"
29#include "AliCaloTrackReader.h"
30#include "AliCaloPID.h"
31#include "AliFidutialCut.h"
32#include "AliIsolationCut.h"
6639984f 33#include "AliMCAnalysisUtils.h"
1c5acb87 34#include "AliNeutralMesonSelection.h"
477d6cee 35#include "AliAODCaloCells.h"
36#include "AliAODEvent.h"
1c5acb87 37
38ClassImp(AliAnaPartCorrBaseClass)
39
40
41//_______________________________________________
42 AliAnaPartCorrBaseClass::AliAnaPartCorrBaseClass() :
43 TObject(), fDataMC(0), fDebug(0), fCheckFidCut(0),
44 fCheckCaloPID(0), fRecalculateCaloPID(0), fMinPt(0), fMaxPt(0),
3c769bf6 45 fReader(0x0), fInputAODBranch(0x0), fInputAODName(""),
46 fOutputAODBranch(0x0), fNewAOD(kFALSE),
47 fOutputAODName(""), fOutputAODClassName(""),
a3aebfff 48 fAODRefArrayName(""), fAddToHistogramsName(""),
477d6cee 49 fAODCaloCells(0x0),//fAODCaloClusters(0x0),
3c769bf6 50 fCaloPID(0x0), fFidCut(0x0), fIC(0x0),fMCUtils(0x0), fNMS(0x0),
51 fHistoNPtBins(0), fHistoPtMax(0.), fHistoPtMin(0.),
52 fHistoNPhiBins(0), fHistoPhiMax(0.), fHistoPhiMin(0.),
53 fHistoNEtaBins(0), fHistoEtaMax(0.), fHistoEtaMin(0.)
1c5acb87 54{
55 //Default Ctor
56
57 fReader = new AliCaloTrackReader();
58 fCaloPID = new AliCaloPID();
59 fFidCut = new AliFidutialCut();
60 fIC = new AliIsolationCut();
6639984f 61 fMCUtils = new AliMCAnalysisUtils();
1c5acb87 62
63 //Initialize parameters
64 InitParameters();
65}
66
67//___________________________________________________________
68AliAnaPartCorrBaseClass::AliAnaPartCorrBaseClass(const AliAnaPartCorrBaseClass & abc) :
69 TObject(), fDataMC(abc.fDataMC), fDebug(abc.fDebug),
70 fCheckFidCut(abc.fCheckFidCut), fCheckCaloPID(abc. fCheckCaloPID),
71 fRecalculateCaloPID(abc.fRecalculateCaloPID),
72 fMinPt(abc.fMinPt), fMaxPt(abc.fMaxPt), fReader(abc.fReader),
73 fInputAODBranch(new TClonesArray(*abc.fInputAODBranch)), fInputAODName(abc.fInputAODName),
74 fOutputAODBranch(new TClonesArray(*abc.fOutputAODBranch)),fNewAOD(abc.fNewAOD),
75 fOutputAODName(abc.fOutputAODName), fOutputAODClassName(abc.fOutputAODClassName),
a3aebfff 76 fAODRefArrayName(abc.fAODRefArrayName),
77 fAddToHistogramsName(abc.fAddToHistogramsName),
477d6cee 78 //fAODCaloClusters(new TClonesArray(*abc.fAODCaloClusters)),
1c5acb87 79 fAODCaloCells(new AliAODCaloCells(*abc.fAODCaloCells)),
6639984f 80 fCaloPID(abc.fCaloPID), fFidCut(abc.fFidCut), fIC(abc.fIC),fMCUtils(abc.fMCUtils), fNMS(abc.fNMS),
1c5acb87 81 fHistoNPtBins(abc.fHistoNPtBins), fHistoPtMax(abc.fHistoPtMax), fHistoPtMin(abc.fHistoPtMin),
82 fHistoNPhiBins(abc.fHistoNPhiBins), fHistoPhiMax(abc.fHistoPhiMax), fHistoPhiMin(abc.fHistoPhiMin),
83 fHistoNEtaBins(abc.fHistoNEtaBins), fHistoEtaMax(abc.fHistoEtaMax), fHistoEtaMin(abc.fHistoEtaMin)
84{
85 // cpy ctor
86
87}
88
89//_________________________________________________________________________
90AliAnaPartCorrBaseClass & AliAnaPartCorrBaseClass::operator = (const AliAnaPartCorrBaseClass & abc)
91{
477d6cee 92 // assignment operator
93
94 if(this == &abc) return *this;
95 ((TObject *)this)->operator=(abc);
96
97 fDataMC = abc.fDataMC;
98 fDebug = abc.fDebug ;
99 fRecalculateCaloPID = abc.fRecalculateCaloPID ;
100 fCheckCaloPID = abc.fCheckCaloPID ;
101 fCheckFidCut = abc.fCheckFidCut ;
1c5acb87 102
477d6cee 103 fReader = abc.fReader ;
104 //fAODCaloClusters = new TClonesArray(*abc.fAODCaloClusters) ;
105 fAODCaloCells = new AliAODCaloCells(*abc.fAODCaloCells) ;
106
107 fMinPt = abc.fMinPt;
108 fMaxPt = abc.fMaxPt;
109 fCaloPID = abc.fCaloPID;
110 fFidCut = abc.fFidCut;
111 fIC = abc.fIC;
112 fMCUtils = abc.fMCUtils;
113 fNMS = abc.fNMS;
114
a3aebfff 115 fInputAODBranch = new TClonesArray(*abc.fInputAODBranch) ;
116 fInputAODName = abc.fInputAODName;
117 fOutputAODBranch = new TClonesArray(*abc.fOutputAODBranch) ;
118 fNewAOD = abc.fNewAOD ;
119 fOutputAODName = abc.fOutputAODName;
120 fOutputAODClassName = abc.fOutputAODClassName;
121 fAddToHistogramsName = abc.fAddToHistogramsName;
122 fAODRefArrayName = abc.fAODRefArrayName;
123
477d6cee 124 fHistoNPtBins = abc.fHistoNPtBins; fHistoPtMax = abc.fHistoPtMax; fHistoPtMin = abc.fHistoPtMin;
125 fHistoNPhiBins = abc.fHistoNPhiBins; fHistoPhiMax = abc.fHistoPhiMax; fHistoPhiMin = abc.fHistoPhiMin;
126 fHistoNEtaBins = abc.fHistoNEtaBins; fHistoEtaMax = abc.fHistoEtaMax; fHistoEtaMin = abc.fHistoEtaMin;
127
128 return *this;
129
1c5acb87 130}
131
132//____________________________________________________________________________
133AliAnaPartCorrBaseClass::~AliAnaPartCorrBaseClass()
134{
135 // Remove all pointers except analysis output pointers.
136
477d6cee 137 if(fOutputAODBranch){
138 fOutputAODBranch->Clear() ;
139 delete fOutputAODBranch ;
140 }
141
142 if(fInputAODBranch){
143 fInputAODBranch->Clear() ;
144 delete fInputAODBranch ;
145 }
146
147// if(fAODCaloClusters){
148// fAODCaloClusters->Clear() ;
149// delete fAODCaloClusters ;
150// }
1c5acb87 151
477d6cee 152 if(fAODCaloCells){
153 fAODCaloCells->Clear() ;
154 delete fAODCaloCells ;
155 }
156
157 if(fReader) delete fReader ;
158 if(fCaloPID) delete fCaloPID ;
159 if(fFidCut) delete fFidCut ;
160 if(fIC) delete fIC ;
161 if(fMCUtils) delete fMCUtils ;
162 if(fNMS) delete fNMS ;
163
1c5acb87 164}
165
477d6cee 166////____________________________________________________________________________
167//void AliAnaPartCorrBaseClass::AddAODCaloCluster(AliAODCaloCluster calo) {
168// //Put AOD calo cluster in the CaloClusters array
169//
170// Int_t i = fAODCaloClusters->GetEntriesFast();
171// new((*fAODCaloClusters)[i]) AliAODCaloCluster(calo);
172//
173//}
1c5acb87 174
175
176//____________________________________________________________________________
177void AliAnaPartCorrBaseClass::AddAODParticle(AliAODPWG4Particle pc) {
178 //Put AOD calo cluster in the AODParticleCorrelation array
179
477d6cee 180 if(fOutputAODBranch){
181
182 Int_t i = fOutputAODBranch->GetEntriesFast();
183 //new((*fOutputAODBranch)[i]) AliAODPWG4Particle(pc);
184 if(strcmp(fOutputAODBranch->GetClass()->GetName(),"AliAODPWG4Particle")==0)
185 new((*fOutputAODBranch)[i]) AliAODPWG4Particle(pc);
186 else if(strcmp(fOutputAODBranch->GetClass()->GetName(),"AliAODPWG4ParticleCorrelation")==0)
187 new((*fOutputAODBranch)[i]) AliAODPWG4ParticleCorrelation(pc);
188 else {
189 printf("AliAnaPartCorrBaseClass::AddAODParticle() - Cannot add an object of type < %s >, to the AOD TClonesArray \n",
190 fOutputAODBranch->GetClass()->GetName());
191 abort();
192 }
193 }
194 else {
195 printf(" AliAnaPartCorrBaseClass::AddAODParticle() - No AOD branch available!!!\n");
196 abort();
197 }
198
1c5acb87 199}
200
201
202//___________________________________________________
477d6cee 203//void AliAnaPartCorrBaseClass::ConnectAODCaloClusters() {
204// //Recover the list of AODCaloClusters
205//
206// fAODCaloClusters = fReader->GetOutputEvent()->GetCaloClusters();
207//
208//}
209//
1c5acb87 210//___________________________________________________
211void AliAnaPartCorrBaseClass::ConnectAODPHOSCells() {
212 //Recover the list of PHOS AODCaloCells
213
477d6cee 214 fAODCaloCells = fReader->GetOutputEvent()->GetPHOSCells();
1c5acb87 215
216}
217
218//___________________________________________________
219void AliAnaPartCorrBaseClass::ConnectAODEMCALCells() {
220 //Recover the list of EMCAL AODCaloCells
221
477d6cee 222 fAODCaloCells = fReader->GetOutputEvent()->GetEMCALCells();
1c5acb87 223
224}
225
226//___________________________________________________
227void AliAnaPartCorrBaseClass::ConnectInputOutputAODBranches() {
477d6cee 228 //Recover ouput and input AOD pointers for each event in the maker
229
230 fOutputAODBranch = (TClonesArray *) fReader->GetOutputEvent()->FindListObject(fOutputAODName);
231 fInputAODBranch = (TClonesArray *) fReader->GetOutputEvent()->FindListObject(fInputAODName);
232
1c5acb87 233}
234
235//__________________________________________________
477d6cee 236TRefArray * AliAnaPartCorrBaseClass::GetAODCTS() const {
237 //Get list of referenced tracks from reader
1c5acb87 238
239 return fReader->GetAODCTS();
240
241}
242
243//__________________________________________________
477d6cee 244TRefArray * AliAnaPartCorrBaseClass::GetAODPHOS() const {
245 //Get list of PHOS reference caloclusters from reader
1c5acb87 246
247 return fReader->GetAODPHOS();
248
249}
250
1c5acb87 251//__________________________________________________
477d6cee 252TRefArray * AliAnaPartCorrBaseClass::GetAODEMCAL() const {
253 //Get list of emcal referenced caloclusters from reader
1c5acb87 254
255 return fReader->GetAODEMCAL();
256
257}
258
477d6cee 259//__________________________________________________
260TClonesArray * AliAnaPartCorrBaseClass::GetAODCaloClusters() const {
261 //Get list of all caloclusters in AOD output file
262
263 return fReader->GetOutputEvent()->GetCaloClusters();
264
265}
266
267//__________________________________________________
268TClonesArray * AliAnaPartCorrBaseClass::GetAODTracks() const {
269 //Get list of all tracks in AOD output file
270
271 return fReader->GetOutputEvent()->GetTracks();
272
273}
274
1c5acb87 275//__________________________________________________
276TString AliAnaPartCorrBaseClass::GetBaseParametersList() {
277 //Put data member values in string to keep in output container
278
477d6cee 279 TString parList ; //this will be list of parameters used for this analysis.
280 char onePar[255] ;
281 sprintf(onePar,"--- AliAnaPartCorrBaseClass ---\n") ;
282 parList+=onePar ;
283 sprintf(onePar,"Minimal P_t: %2.2f ; Max\n", fMinPt) ;
284 parList+=onePar ;
285 sprintf(onePar,"Minimal P_t: %2.2f ; Max\n", fMaxPt) ;
286 parList+=onePar ;
287 sprintf(onePar,"fDataMC =%d (Check MC information, on/off) \n",fDataMC) ;
288 parList+=onePar ;
289 sprintf(onePar,"fCheckFidCut=%d (Check Fidutial cut selection on/off) \n",fCheckFidCut) ;
290 parList+=onePar ;
a3aebfff 291 sprintf(onePar,"fCheckCaloPID =%d (Use Bayesian PID in calorimetes, on/off) \n",fCheckCaloPID) ;
477d6cee 292 parList+=onePar ;
293 sprintf(onePar,"fRecalculateCaloPID =%d (Calculate PID from shower/tof/tracking parameters, on/off) \n",fRecalculateCaloPID) ;
294 parList+=onePar ;
a3aebfff 295 sprintf(onePar,"fInputAODName =%s Input AOD name \n",fInputAODName.Data()) ;
296 parList+=onePar ;
297 if(fNewAOD){
298 sprintf(onePar,"fOutputAODName =%s Output AOD name \n",fOutputAODName.Data()) ;
299 parList+=onePar ;
300 sprintf(onePar,"fOutputAODClassName =%s Output AOD class name \n",fOutputAODClassName.Data()) ;
301 parList+=onePar ;
302 }
303 sprintf(onePar,"fAODRefArrayName =%s Reference arrays in AOD name \n",fAODRefArrayName.Data()) ;
304 parList+=onePar ;
305 sprintf(onePar,"fAddToHistogramsName =%s String added to beginning of histograms name \n",fAddToHistogramsName.Data()) ;
306 parList+=onePar ;
307
1c5acb87 308 return parList;
309
310}
311
312//__________________________________________________
313 TClonesArray * AliAnaPartCorrBaseClass::GetCreateOutputAODBranch() {
477d6cee 314 //Create AOD branch filled in the analysis
315
316 printf("Create AOD branch of %s objects and with name < %s >\n",
317 fOutputAODClassName.Data(),fOutputAODName.Data()) ;
318
319 TClonesArray * aodBranch = new TClonesArray(fOutputAODClassName, 0);
320 aodBranch->SetName(fOutputAODName);
321 return aodBranch ;
322
1c5acb87 323 }
324
325//__________________________________________________
326TNamed * AliAnaPartCorrBaseClass::GetPHOSCells() const {
327 //Get list of PHOS calo cells (ESD or AOD) from reader
328
329 return fReader->GetPHOSCells();
330
331}
332
333
334//__________________________________________________
335TNamed * AliAnaPartCorrBaseClass::GetEMCALCells() const {
336 //Get list of emcal calo cells (ESD or AOD) from reader
337
338 return fReader->GetEMCALCells();
339
340}
341
6639984f 342//__________________________________________________
343Int_t AliAnaPartCorrBaseClass::GetEventNumber() const {
344 //Get current event number
345
346 return fReader->GetEventNumber() ;
347}
348
1c5acb87 349//__________________________________________________
350AliStack * AliAnaPartCorrBaseClass::GetMCStack() const {
351 //Get stack pointer from reader
352
353 return fReader->GetStack();
354
355}
356//__________________________________________________
357AliHeader * AliAnaPartCorrBaseClass::GetMCHeader() const {
358 //Get header pointer from reader
359
360 return fReader->GetHeader();
361
362}
363
364//__________________________________________________
365AliGenEventHeader * AliAnaPartCorrBaseClass::GetMCGenEventHeader() const {
366 //Get GenEventHeader pointer from reader
367
368 return fReader->GetGenEventHeader();
369
370}
371
372//__________________________________________________
373void AliAnaPartCorrBaseClass::InitParameters()
374{
375 //Initialize the parameters of the analysis.
376 fDataMC = kFALSE;
377 fDebug = -1;
378 fCheckCaloPID = kTRUE ;
379 fCheckFidCut = kFALSE ;
380 fRecalculateCaloPID = kFALSE ;
381 fMinPt = 0.2 ; //Min pt in particle analysis
382 fMaxPt = 300. ; //Max pt in particle analysis
383
384 fCaloPID = new AliCaloPID ;
385 fFidCut = new AliFidutialCut;
386 fIC = new AliIsolationCut;
387 fNMS = new AliNeutralMesonSelection;
388 fNewAOD = kFALSE ;
389 fOutputAODName = "PartCorr";
390 fOutputAODClassName = "AliAODPWG4Particle";
391 fInputAODName = "PartCorr";
a3aebfff 392 fAddToHistogramsName = "";
393 fAODRefArrayName="Ref";
394
1c5acb87 395 //Histogrammes settings
396 fHistoNPtBins = 240 ;
397 fHistoPtMax = 120 ;
398 fHistoPtMin = 0. ;
399
400 fHistoNPhiBins = 120 ;
401 fHistoPhiMax = TMath::TwoPi();
402 fHistoPhiMin = 0. ;
403
404 fHistoNEtaBins = 100 ;
405 fHistoEtaMax = 1 ;
406 fHistoEtaMin = -1 ;
407
408}
409
410//__________________________________________________________________
411void AliAnaPartCorrBaseClass::Print(const Option_t * opt) const
412{
477d6cee 413 //Print some relevant parameters set for the analysis
414
415 if(! opt)
416 return;
a3aebfff 417
477d6cee 418 printf("New AOD: = %d\n",fNewAOD);
419 printf("Input AOD name: = %s\n",fInputAODName.Data());
420 printf("Output AOD name: = %s\n",fOutputAODName.Data());
421 printf("Output AOD Class name: = %s\n",fOutputAODClassName.Data());
422 printf("Min Photon pT = %2.2f\n", fMinPt) ;
423 printf("Max Photon pT = %3.2f\n", fMaxPt) ;
424 printf("Check PID = %d\n", fCheckCaloPID) ;
425 printf("Recalculate PID = %d\n", fRecalculateCaloPID) ;
426 printf("Check Fidutial cut = %d\n", fCheckFidCut) ;
427 printf("Check MC labels = %d\n", fDataMC);
428 printf("Debug Level = %d\n", fDebug);
429 printf("Histograms: %3.1f < pT < %3.1f, Nbin = %d\n", fHistoPtMin, fHistoPtMax, fHistoNPtBins);
430 printf("Histograms: %3.1f < phi < %3.1f, Nbin = %d\n", fHistoPhiMin, fHistoPhiMax, fHistoNPhiBins);
431 printf("Histograms: %3.1f < eta < %3.1f, Nbin = %d\n", fHistoEtaMin, fHistoEtaMax, fHistoNEtaBins);
a3aebfff 432 printf("Name of reference array : %s\n", fAODRefArrayName.Data());
433 printf("String added histograms name : %s\n",fAddToHistogramsName.Data());
434
477d6cee 435 printf(" \n") ;
436
1c5acb87 437}