Update from Sandun
[u/mrichter/AliRoot.git] / JETAN / AliJetFillCalTrkTrack.cxx
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
16 /* $Id$ */
17
18 //--------------------------------------------------
19 // Filling of CalTrkTrack objects in the reader task
20 //
21 // Author: magali.estienne@subatech.in2p3.fr
22 //         alexandre.shabetai@cern.ch
23 //-------------------------------------------------
24
25 // --- AliRoot header files ---
26 #include "AliJetFillCalTrkTrack.h"
27 #include "AliJetReaderHeader.h"
28 #include "AliVEvent.h"
29 #include "AliESDtrack.h"
30 #include "AliAODTrack.h"
31
32 using std::cout;
33 using std::endl;
34 ClassImp(AliJetFillCalTrkTrack)
35
36 /////////////////////////////////////////////////////////////////////
37
38 AliJetFillCalTrkTrack::AliJetFillCalTrkTrack(): 
39   AliJetFillCalTrkEvent(),
40   fHadCorr(0),
41   fApplyMIPCorrection(kTRUE),
42   fVEvt(0x0)
43 {
44   // constructor
45 }
46
47 //-----------------------------------------------------------------------
48 AliJetFillCalTrkTrack::AliJetFillCalTrkTrack(AliVEvent* evt): 
49   AliJetFillCalTrkEvent(),
50   fHadCorr(0),
51   fApplyMIPCorrection(kTRUE),
52   fVEvt(evt)
53 {
54   // constructor
55 }
56
57 //-----------------------------------------------------------------------
58 AliJetFillCalTrkTrack::AliJetFillCalTrkTrack(const AliJetFillCalTrkTrack &det): 
59   AliJetFillCalTrkEvent(det),
60   fHadCorr(det.fHadCorr),
61   fApplyMIPCorrection(det.fApplyMIPCorrection),
62   fVEvt(det.fVEvt)
63 {
64   // Copy constructor
65 }
66
67 //-----------------------------------------------------------------------
68 AliJetFillCalTrkTrack& AliJetFillCalTrkTrack::operator=(const AliJetFillCalTrkTrack& other)
69 {
70   // Assignment
71   if (this != &other) {
72    fHadCorr = other.fHadCorr;
73    fApplyMIPCorrection = other.fApplyMIPCorrection;
74    fVEvt = other.fVEvt;
75  }
76
77   return (*this);
78
79 }
80
81 //-----------------------------------------------------------------------
82 AliJetFillCalTrkTrack::~AliJetFillCalTrkTrack()
83 {
84   // destructor
85 }
86
87 //-----------------------------------------------------------------------
88 void AliJetFillCalTrkTrack::Exec(Option_t const * /*option*/)
89 {
90   // Main method.
91   // Fill AliJetFillCalTrkTrack the with the charged particle information
92
93   fDebug = fReaderHeader->GetDebug();
94   fOpt = fReaderHeader->GetDetector();
95   TString datatype = fReaderHeader->GetDataType();
96   datatype.ToUpper();
97
98   Int_t type=0; 
99
100   if      (datatype.Contains("AODEXTRAONLY")) { type=kTrackAODextraonly;} 
101   else if (datatype.Contains("AODEXTRA")) { type=kTrackAODextra; }
102   else if (datatype.Contains("AOD")) { type=kTrackAOD; }
103   else if (datatype.Contains("ESD")) { type=kTrackESD; }
104   else { cout<< "Unknown Data type !" << endl; }
105
106   // temporary storage of signal and pt cut flag
107   Bool_t sflag = 0;
108   Bool_t cflag = 0;
109
110   // get cuts set by user
111   Float_t ptMin  = fReaderHeader->GetPtCut();
112   Float_t etaMin = fReaderHeader->GetFiducialEtaMin();
113   Float_t etaMax = fReaderHeader->GetFiducialEtaMax();
114   Float_t phiMin = fReaderHeader->GetFiducialPhiMin();
115   Float_t phiMax = fReaderHeader->GetFiducialPhiMax();
116   UInt_t filterMask = ((AliJetReaderHeader*)fReaderHeader)->GetTestFilterMask();
117   UInt_t filterType = ((AliJetReaderHeader*)fReaderHeader)->GetFilterType();
118
119   if(fDebug>2)Printf("%s:%d Selecting tracks with %d",(char*)__FILE__,__LINE__,type);
120
121   Int_t goodTrackStd = 0;
122   Int_t goodTrackNonStd = 0;
123   if(type==kTrackESD || type==kTrackAOD || type==kTrackAODextra || type==kTrackAODextraonly){
124     if(type!=kTrackAODextraonly) {
125       if(!fVEvt){
126         if(fDebug>2)Printf("%s:%d No AOD or ESD input event",(char*)__FILE__,__LINE__);
127         return;
128       }
129       for(int it = 0;it < fVEvt->GetNumberOfTracks();++it){
130         AliVTrack *tr = (AliVTrack*)fVEvt->GetTrack(it);
131         cflag=sflag=0;
132         if(fVEvt->InheritsFrom("AliESDEvent")){ 
133           // ESD case ....
134           if(tr->GetStatus()==0){ 
135             if(fDebug>10)Printf("%s:%d Not matching status %d/%d",(char*)__FILE__,__LINE__,it,fVEvt->GetNumberOfTracks());
136             continue;
137           }
138           if ((tr->GetStatus() & AliESDtrack::kTPCrefit) == 0)    continue;      // quality check
139           if ((tr->GetStatus() & AliESDtrack::kITSrefit) == 0)    continue;      // quality check
140           if (((AliJetReaderHeader*) fReaderHeader)->ReadSignalOnly() 
141               && TMath::Abs(tr->GetLabel()) > 10000)  continue;      // quality check
142           if (((AliJetReaderHeader*) fReaderHeader)->ReadBkgdOnly() 
143               && TMath::Abs(tr->GetLabel()) < 10000)  continue;      // quality check
144         }
145         if((fVEvt->InheritsFrom("AliAODEvent"))){
146           // AOD case ....
147           AliAODTrack *trAOD = dynamic_cast<AliAODTrack*> (tr);
148           if(!trAOD) continue;
149           Bool_t bGood = false;
150           if(filterType == 0)bGood = true;
151           else if(filterType == 1)bGood = trAOD->IsHybridTPCConstrainedGlobal();
152           else if(filterType == 2)bGood = trAOD->IsHybridGlobalConstrainedGlobal();
153           if((filterMask>0)&&((!trAOD->TestFilterBit(filterMask)||(!bGood)))){
154             if(fDebug>10)Printf("%s:%d Not matching filter %d/%d %d/%d",(char*)__FILE__,__LINE__,it,fVEvt->GetNumberOfTracks(),filterMask,trAOD->GetFilterMap());
155             continue;
156           }
157           // Should we also check the GetStatus ?
158         }
159         if((tr->Eta()> etaMax) || (tr->Eta() < etaMin)){
160           if(fDebug>10)Printf("%s:%d Not matching eta %d/%d",(char*)__FILE__,__LINE__,it,fVEvt->GetNumberOfTracks());
161           continue;
162         }
163         Float_t phi = ( (tr->Phi()) < 0) ? (tr->Phi()) + 2. * TMath::Pi() : (tr->Phi());
164         if((phi > phiMax) || (phi < phiMin)){
165           if(fDebug>10)Printf("%s:%d Not matching eta %d/%d",(char*)__FILE__,__LINE__,it,fVEvt->GetNumberOfTracks());
166           continue;
167         }
168         if(tr->Pt() <= ptMin){
169           if(fDebug>10)Printf("%s:%d Not matching pt %d/%d",(char*)__FILE__,__LINE__,it,fVEvt->GetNumberOfTracks());
170         }
171         else {cflag=1;}
172         sflag=(TMath::Abs(tr->GetLabel()) < 10000) ? 1 : 0;
173
174         if(fDebug>10)Printf("%s:%d MATCHED %d/%d",(char*)__FILE__,__LINE__,it,fVEvt->GetNumberOfTracks());
175
176         fCalTrkEvent->AddCalTrkTrack(tr,cflag,sflag); 
177         goodTrackStd++;
178       }
179     }
180     if(type==kTrackAODextra || type==kTrackAODextraonly) {
181       if(!fVEvt){
182         return;   
183       }
184       TClonesArray *aodExtraTracks = dynamic_cast<TClonesArray*>(fVEvt->FindListObject("aodExtraTracks"));
185       if(!aodExtraTracks) return; 
186       for(int it =0; it<aodExtraTracks->GetEntries(); it++) {
187         cflag=sflag=0;
188         AliVParticle *track = dynamic_cast<AliVParticle*> ((*aodExtraTracks)[it]);
189         if (!track) continue; 
190         AliAODTrack *trackAOD = dynamic_cast<AliAODTrack*> (track);
191         if(!trackAOD) continue;
192         if (trackAOD->GetStatus() == 0) continue; 
193         Bool_t bGood = false;
194         if(filterType == 0)bGood = true;
195         else if(filterType == 1)bGood = trackAOD->IsHybridTPCConstrainedGlobal();
196         else if(filterType == 2)bGood = trackAOD->IsHybridGlobalConstrainedGlobal();
197         if((filterMask>0)&&((!trackAOD->TestFilterBit(filterMask)||(!bGood))))continue;
198         if((trackAOD->Eta()> etaMax) || (trackAOD->Eta() < etaMin)){
199           if(fDebug>10)Printf("%s:%d Not matching eta %d/%d",(char*)__FILE__,__LINE__,it,fVEvt->GetNumberOfTracks());
200           continue;
201         }
202         Float_t phi = ( (trackAOD->Phi()) < 0) ? (trackAOD->Phi()) + 2. * TMath::Pi() : (trackAOD->Phi());
203         if((phi > phiMax) || (phi < phiMin)){
204           if(fDebug>10)Printf("%s:%d Not matching eta %d/%d",(char*)__FILE__,__LINE__,it,fVEvt->GetNumberOfTracks());
205           continue;
206         }
207         if(trackAOD->Pt() <= ptMin){
208           if(fDebug>10)Printf("%s:%d Not matching pt %d/%d",(char*)__FILE__,__LINE__,it,fVEvt->GetNumberOfTracks());
209         }
210         else {cflag=1;}
211         sflag=(TMath::Abs(trackAOD->GetLabel()) < 10000) ? 1 : 0; 
212         fCalTrkEvent->AddCalTrkTrack(trackAOD,cflag,sflag);
213         goodTrackNonStd++;
214       }
215     }
216   }
217
218   if(fDebug>0)printf("Number of good tracks selected: %5d \n", goodTrackStd+goodTrackNonStd);
219
220 }
221
222
223
224
225
226
227
228
229
230
231
232
233