]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG4/PartCorrBase/AliCaloTrackAODReader.cxx
Set default ntimebis = 30 in simulation and check for -1 in OCDB
[u/mrichter/AliRoot.git] / PWG4 / PartCorrBase / AliCaloTrackAODReader.cxx
CommitLineData
1c5acb87 1
2/**************************************************************************
3 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * *
5 * Author: The ALICE Off-line Project. *
6 * Contributors are mentioned in the code where appropriate. *
7 * *
8 * Permission to use, copy, modify and distribute this software and its *
9 * documentation strictly for non-commercial purposes is hereby granted *
10 * without fee, provided that the above copyright notice appears in all *
11 * copies and that both the copyright notice and this permission notice *
12 * appear in the supporting documentation. The authors make no claims *
13 * about the suitability of this software for any purpose. It is *
14 * provided "as is" without express or implied warranty. *
15 **************************************************************************/
16/* $Id: $ */
17
18//_________________________________________________________________________
19// Class for reading data (AODs) in order to do prompt gamma
591cc579 20// or other particle identification and correlations.
21// Mixing analysis can be done, input AOD with events
22// is opened in the AliCaloTrackReader::Init()
1c5acb87 23//
24//
25//*-- Author: Gustavo Conesa (LNF-INFN)
26//////////////////////////////////////////////////////////////////////////////
27
28
29// --- ROOT system ---
30//#include "Riostream.h"
31
32//---- ANALYSIS system ----
33#include "AliCaloTrackAODReader.h"
34#include "AliAODEvent.h"
1c5acb87 35#include "AliAODCaloCluster.h"
36#include "AliAODTrack.h"
591cc579 37#include "AliESDtrack.h"
477d6cee 38#include "AliFidutialCut.h"
8a587055 39#include "AliAODInputHandler.h"
40#include "AliAnalysisManager.h"
1c5acb87 41
42ClassImp(AliCaloTrackAODReader)
43
44//____________________________________________________________________________
45AliCaloTrackAODReader::AliCaloTrackAODReader() :
42dc8e7d 46 AliCaloTrackReader()
1c5acb87 47{
48 //Default Ctor
49
50 //Initialize parameters
51 fDataType=kAOD;
591cc579 52 fReadStack = kTRUE;
53 fReadAODMCParticles = kFALSE;
54 //We want tracks fitted in the detectors:
55 fTrackStatus=AliESDtrack::kTPCrefit;
56 fTrackStatus|=AliESDtrack::kITSrefit;
57
1c5acb87 58}
59
60//____________________________________________________________________________
a8a55c9d 61AliCaloTrackAODReader::AliCaloTrackAODReader(const AliCaloTrackAODReader & aodr) :
42dc8e7d 62 AliCaloTrackReader(aodr)
1c5acb87 63{
64 // cpy ctor
65}
66
67//_________________________________________________________________________
68//AliCaloTrackAODReader & AliCaloTrackAODReader::operator = (const AliCaloTrackAODReader & source)
69//{
70// // assignment operator
71//
72// if(&source == this) return *this;
73//
74// return *this;
75//
76//}
77
78//____________________________________________________________________________
79void AliCaloTrackAODReader::FillInputCTS() {
591cc579 80 //Return array with Central Tracking System (CTS) tracks
1c5acb87 81
477d6cee 82 Int_t nTracks = fInputEvent->GetNumberOfTracks() ;
a8a55c9d 83 Int_t naod = 0;
1c5acb87 84 Double_t p[3];
1c5acb87 85 for (Int_t itrack = 0; itrack < nTracks; itrack++) {////////////// track loop
477d6cee 86 AliAODTrack * track = ((AliAODEvent*)fInputEvent)->GetTrack(itrack) ; // retrieve track from esd
591cc579 87
88 //Select tracks under certain conditions, TPCrefit, ITSrefit ... check the set bits
89 if (fTrackStatus && !((track->GetStatus() & fTrackStatus) == fTrackStatus)) continue ;
1c5acb87 90
91 track->GetPxPyPz(p) ;
92 TLorentzVector momentum(p[0],p[1],p[2],0);
93
94 if(fCTSPtMin < momentum.Pt() && fFidutialCut->IsInFidutialCut(momentum,"CTS")){
95
a3aebfff 96 if(fDebug > 2 && momentum.Pt() > 0.1) printf("AliCaloTrackAODReader::FillInputCTS() - Selected tracks E %3.2f, pt %3.2f, phi %3.2f, eta %3.2f\n",
1c5acb87 97 momentum.E(),momentum.Pt(),momentum.Phi()*TMath::RadToDeg(),momentum.Eta());
a8a55c9d 98
42dc8e7d 99 if(fWriteOutputStdAOD){
a8a55c9d 100 AliAODTrack* newtrack = new((*(fOutputEvent->GetTracks()))[naod++]) AliAODTrack(*track);
101 fAODCTS->Add(newtrack); //Use AOD stored in output for references.
102 }
103 else fAODCTS->Add(track);
1c5acb87 104 }//Pt and Fidutial cut passed.
1c5acb87 105 }// track loop
591cc579 106
107 fAODCTSNormalInputEntries = fAODCTS->GetEntriesFast();
108 if(fDebug > 1) printf("AliCaloTrackAODReader::FillInputCTS() - aod entries %d\n", fAODCTSNormalInputEntries);
109
110 //If second input event available, add the clusters.
111 if(fSecondInputAODTree && fSecondInputAODEvent){
112 nTracks = fSecondInputAODEvent->GetNumberOfTracks() ;
113 if(fDebug > 1) printf("AliCaloTrackAODReader::FillInputCTS() - Add second input tracks, entries %d\n", nTracks) ;
114 for (Int_t itrack = 0; itrack < nTracks; itrack++) {////////////// track loop
115 AliAODTrack * track = ((AliAODEvent*)fSecondInputAODEvent)->GetTrack(itrack) ; // retrieve track from esd
116
117 //Select tracks under certain conditions, TPCrefit, ITSrefit ... check the set bits
118 if (fTrackStatus && !((track->GetStatus() & fTrackStatus) == fTrackStatus)) continue ;
119
120 track->GetPxPyPz(p) ;
121 TLorentzVector momentum(p[0],p[1],p[2],0);
122
123 if(fCTSPtMin < momentum.Pt() && fFidutialCut->IsInFidutialCut(momentum,"CTS")){
124
125 if(fDebug > 2 && momentum.Pt() > 0.1) printf("AliCaloTrackAODReader::FillInputCTS() - Selected tracks E %3.2f, pt %3.2f, phi %3.2f, eta %3.2f\n",
126 momentum.E(),momentum.Pt(),momentum.Phi()*TMath::RadToDeg(),momentum.Eta());
127
42dc8e7d 128 if(fWriteOutputStdAOD){
a8a55c9d 129 AliAODTrack* newtrack = new((*(fOutputEvent->GetTracks()))[naod++]) AliAODTrack(*track);
130 fAODCTS->Add(newtrack); //Use AOD stored in output for references.
131 }
132 else fAODCTS->Add(track);
591cc579 133
134 }//Pt and Fidutial cut passed.
135 }// track loop
136
137 if(fDebug > 1) printf("AliCaloTrackAODReader::FillInputCTS() - aod normal entries %d, after second input %d\n", fAODCTSNormalInputEntries, fAODCTS->GetEntriesFast());
138 } //second input loop
139
1c5acb87 140}
141
142//____________________________________________________________________________
143void AliCaloTrackAODReader::FillInputEMCAL() {
144 //Return array with EMCAL clusters in aod format
477d6cee 145
1c5acb87 146 //Get vertex for momentum calculation
147 Double_t v[3] ; //vertex ;
148 GetVertex(v);
a8a55c9d 149
150 Int_t naod = (fOutputEvent->GetCaloClusters())->GetEntriesFast();
1c5acb87 151 //Loop to select clusters in fidutial cut and fill container with aodClusters
591cc579 152 Int_t nclusters = ((AliAODEvent*)fInputEvent)->GetNCaloClusters();
153 for (Int_t iclus = 0; iclus < nclusters; iclus++) {
477d6cee 154 AliAODCaloCluster * clus = 0;
155 if ( (clus = ((AliAODEvent*)fInputEvent)->GetCaloCluster(iclus)) ) {
156 if (clus->IsEMCALCluster()){
157 TLorentzVector momentum ;
158 clus->GetMomentum(momentum, v);
159
160 if(fEMCALPtMin < momentum.Pt() && fFidutialCut->IsInFidutialCut(momentum,"EMCAL")){
1c5acb87 161
a3aebfff 162 if(fDebug > 2 && momentum.E() > 0.1) printf("AliCaloTrackAODReader::FillInputEMCAL() - Selected clusters E %3.2f, pt %3.2f, phi %3.2f, eta %3.2f\n",
477d6cee 163 momentum.E(),momentum.Pt(),momentum.Phi()*TMath::RadToDeg(),momentum.Eta());
164
42dc8e7d 165 if(fWriteOutputStdAOD){
a8a55c9d 166 AliAODCaloCluster * newclus = new((*(fOutputEvent->GetCaloClusters()))[naod++])AliAODCaloCluster(*clus);
167 fAODEMCAL->Add(newclus);
168 }
169 else fAODEMCAL->Add(clus);
477d6cee 170 }//Pt and Fidutial cut passed.
171 }//EMCAL cluster
172 }// cluster exists
591cc579 173 }// cluster loop
174
175 fAODEMCALNormalInputEntries = fAODEMCAL->GetEntriesFast();
176 if(fDebug > 1) printf("AliCaloTrackAODReader::FillInputEMCAL() - aod entries %d\n", fAODEMCALNormalInputEntries);
177
178 //If second input event available, add the clusters.
179 if(fSecondInputAODTree && fSecondInputAODEvent){
233e0df8 180 GetSecondInputAODVertex(v);
591cc579 181 nclusters = ((AliAODEvent*)fSecondInputAODEvent)->GetNCaloClusters();
182 if(fDebug > 1) printf("AliCaloTrackAODReader::FillInputEMCAL() - Add second input clusters, entries %d\n", nclusters) ;
183 for (Int_t iclus = 0; iclus < nclusters; iclus++) {
184 AliAODCaloCluster * clus = 0;
185 if ( (clus = ((AliAODEvent*)fSecondInputAODEvent)->GetCaloCluster(iclus)) ) {
186 if (clus->IsEMCALCluster()){
187 TLorentzVector momentum ;
188 clus->GetMomentum(momentum, v);
189
190 if(fEMCALPtMin < momentum.Pt() && fFidutialCut->IsInFidutialCut(momentum,"EMCAL")){
191
192 if(fDebug > 2 && momentum.E() > 0.1) printf("AliCaloTrackAODReader::FillInputEMCAL() - Selected clusters E %3.2f, pt %3.2f, phi %3.2f, eta %3.2f\n",
193 momentum.E(),momentum.Pt(),momentum.Phi()*TMath::RadToDeg(),momentum.Eta());
42dc8e7d 194 if(fWriteOutputStdAOD){
a8a55c9d 195 AliAODCaloCluster * newclus = new((*(fOutputEvent->GetCaloClusters()))[naod++])AliAODCaloCluster(*clus);
196 fAODEMCAL->Add(newclus);
197 }
198 else fAODEMCAL->Add(clus);
591cc579 199 }//Pt and Fidutial cut passed.
200 }//EMCAL cluster
201 }// cluster exists
202 }// cluster loop
203
204 if(fDebug > 1) printf("AliCaloTrackAODReader::FillInputEMCAL() - aod normal entries %d, after second input %d\n", fAODEMCALNormalInputEntries, fAODEMCAL->GetEntriesFast());
1c5acb87 205
591cc579 206 } //second input loop
1c5acb87 207}
208
209//____________________________________________________________________________
210void AliCaloTrackAODReader::FillInputPHOS() {
211 //Return array with PHOS clusters in aod format
477d6cee 212
1c5acb87 213 //Get vertex for momentum calculation
214 Double_t v[3] ; //vertex ;
215 GetVertex(v);
a8a55c9d 216
217 Int_t naod = (fOutputEvent->GetCaloClusters())->GetEntriesFast();
1c5acb87 218 //Loop to select clusters in fidutial cut and fill container with aodClusters
591cc579 219 Int_t nclusters = ((AliAODEvent*)fInputEvent)->GetNCaloClusters();
220 for (Int_t iclus = 0; iclus < nclusters; iclus++) {
477d6cee 221 AliAODCaloCluster * clus = 0;
222 if ( (clus = ((AliAODEvent*)fInputEvent)->GetCaloCluster(iclus)) ) {
223 if (clus->IsPHOSCluster()){
224 TLorentzVector momentum ;
225 clus->GetMomentum(momentum, v);
226
227 if(fPHOSPtMin < momentum.Pt() && fFidutialCut->IsInFidutialCut(momentum,"PHOS")){
228
a3aebfff 229 if(fDebug > 2 && momentum.E() > 0.1) printf("AliCaloTrackAODReader::FillInputPHOS() - Selected clusters E %3.2f, pt %3.2f, phi %3.2f, eta %3.2f\n",
477d6cee 230 momentum.E(),momentum.Pt(),momentum.Phi()*TMath::RadToDeg(),momentum.Eta());
591cc579 231
42dc8e7d 232 if(fWriteOutputStdAOD){
a8a55c9d 233 AliAODCaloCluster * newclus = new((*(fOutputEvent->GetCaloClusters()))[naod++])AliAODCaloCluster(*clus);
234 fAODPHOS->Add(newclus);
235 }
236 else fAODPHOS->Add(clus);
477d6cee 237 }//Pt and Fidutial cut passed.
238 }//PHOS cluster
239 }//cluster exists
1c5acb87 240 }//esd cluster loop
591cc579 241
242 fAODPHOSNormalInputEntries = fAODPHOS->GetEntriesFast() ;
243 if(fDebug > 1) printf("AliCaloTrackAODReader::FillInputPHOS() - aod entries %d\n", fAODPHOSNormalInputEntries);
1c5acb87 244
591cc579 245 //If second input event available, add the clusters.
233e0df8 246 if(fSecondInputAODTree && fSecondInputAODEvent){
247 GetSecondInputAODVertex(v);
591cc579 248 nclusters = ((AliAODEvent*)fSecondInputAODEvent)->GetNCaloClusters();
249 if(fDebug > 1) printf("AliCaloTrackAODReader::FillInputPHOS() - Add second input clusters, entries %d\n", nclusters);
250 for (Int_t iclus = 0; iclus < nclusters; iclus++) {
251 AliAODCaloCluster * clus = 0;
252 if ( (clus = ((AliAODEvent*)fSecondInputAODEvent)->GetCaloCluster(iclus)) ) {
253 if (clus->IsPHOSCluster()){
254 TLorentzVector momentum ;
255 clus->GetMomentum(momentum, v);
256
257 if(fPHOSPtMin < momentum.Pt() && fFidutialCut->IsInFidutialCut(momentum,"PHOS")){
258
259 if(fDebug > 2 && momentum.E() > 0.1) printf("AliCaloTrackAODReader::FillInputPHOS() - Selected clusters E %3.2f, pt %3.2f, phi %3.2f, eta %3.2f\n",
260 momentum.E(),momentum.Pt(),momentum.Phi()*TMath::RadToDeg(),momentum.Eta());
42dc8e7d 261 if(fWriteOutputStdAOD){
a8a55c9d 262 AliAODCaloCluster * newclus = new((*(fOutputEvent->GetCaloClusters()))[naod++])AliAODCaloCluster(*clus);
263 fAODPHOS->Add(newclus);
264 }
265 else fAODPHOS->Add(clus);
591cc579 266 }//Pt and Fidutial cut passed.
267 }//PHOS cluster
268 }// cluster exists
269 }// cluster loop
270 if(fDebug > 1) printf("AliCaloTrackAODReader::FillInputPHOS() - aod normal entries %d, after second input %d\n", fAODPHOSNormalInputEntries, fAODPHOS->GetEntriesFast());
271 } //second input loop
1c5acb87 272
273}
274
275//____________________________________________________________________________
276void AliCaloTrackAODReader::FillInputEMCALCells() {
277 //Return array with EMCAL cells in aod format
278
477d6cee 279 fEMCALCells = (TNamed*) ((AliAODEvent*)fInputEvent)->GetEMCALCells();
1c5acb87 280
281}
282
283//____________________________________________________________________________
284void AliCaloTrackAODReader::FillInputPHOSCells() {
285 //Return array with PHOS cells in aod format
286
477d6cee 287 fPHOSCells = (TNamed*) ((AliAODEvent*)fInputEvent)->GetPHOSCells();
1c5acb87 288
289}
290
291//____________________________________________________________________________
292void AliCaloTrackAODReader::GetVertex(Double_t v[3]) const {
293 //Return vertex position
294
8a587055 295 ((AliAODEvent*)fInputEvent)->GetPrimaryVertex()->GetXYZ(v);
296
1c5acb87 297}
298
233e0df8 299//____________________________________________________________________________
300void AliCaloTrackAODReader::GetSecondInputAODVertex(Double_t v[3]) const {
301 //Return vertex position of second AOD input
302
8a587055 303 fSecondInputAODEvent->GetPrimaryVertex()->GetXYZ(v);
304
233e0df8 305}
306
8dacfd76 307//____________________________________________________________________________
308Double_t AliCaloTrackAODReader::GetBField() const {
309 //Return magnetic field
310
311 Double_t bfield = ((AliAODEvent*)fInputEvent)->GetMagneticField();
312
313 return bfield;
314
315}
1c5acb87 316
317//____________________________________________________________________________
477d6cee 318void AliCaloTrackAODReader::SetInputOutputMCEvent(AliVEvent* input, AliAODEvent* aod, AliMCEvent* mc) {
1c5acb87 319 // Connect the data pointers
477d6cee 320 // If input is AOD, do analysis with input, if not, do analysis with the output aod.
8a587055 321
477d6cee 322 if(!strcmp(input->GetName(),"AliESDEvent")) {
323 SetInputEvent(aod);
324 SetOutputEvent(aod);
325 }
326 else if(!strcmp(input->GetName(),"AliAODEvent")){
8a587055 327
328 AliAODInputHandler* aodIH = static_cast<AliAODInputHandler*>((AliAnalysisManager::GetAnalysisManager())->GetInputEventHandler());
329 //printf("AODInputHandler %p, MergeEvents %d \n",aodIH, aodIH->GetMergeEvents());
330 if (aodIH && aodIH->GetMergeEvents()) {
331 //Merged events, use output AOD.
332 SetInputEvent(aod);
333 SetOutputEvent(aod);
334 }
335 else{
336 SetInputEvent(input);
337 SetOutputEvent(aod);
338 }
477d6cee 339 }
340 else{
591cc579 341 printf("AliCaloTrackAODReader::SetInputOutputMCEvent() - STOP : Wrong data format: %s\n",input->GetName());
477d6cee 342 abort();
343 }
344
345 SetMC(mc);
1c5acb87 346
1c5acb87 347}