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 **************************************************************************/
16 // Class AliHFEV0taginfo
17 // Creates list of tracks with V0 information
20 // Jan Wagner <J.Wagner@gsi.de>
33 #include "AliAODEvent.h"
35 #include "AliESDEvent.h"
38 #include "AliHFEV0taginfo.h"
41 ClassImp(AliHFEV0taginfo)
42 ClassImp(AliHFEV0taginfo::AliHFEV0tag)
44 //___________________________________________________________________
45 AliHFEV0taginfo::AliHFEV0taginfo():
53 // default constructor
56 //___________________________________________________________________
57 AliHFEV0taginfo::AliHFEV0taginfo(const char* name):
68 fTaggedTracks = new TList();
70 fTaggedTracks->SetOwner();
72 fV0finder = new AliESDv0KineCuts();
73 fAODV0finder = new AliAODv0KineCuts();
76 //__________________________________________________________________
77 AliHFEV0taginfo::AliHFEV0taginfo(const AliHFEV0taginfo &ref):
79 fIsAODana(ref.fIsAODana),
81 fV0finder(ref.fV0finder),
82 fAODV0finder(ref.fAODV0finder)
86 // creates a new object with new (empty) containers
88 fTaggedTracks = new TList();
90 fTaggedTracks->SetOwner();
94 AliHFEV0tag *tmp = NULL;
95 for(Int_t ien = 0; ien < ref.fTaggedTracks->GetEntries(); ien++){
96 tmp = static_cast<AliHFEV0tag *>(ref.fTaggedTracks->At(ien));
97 fTaggedTracks->Add(new AliHFEV0tag(tmp->GetTrackID(),tmp->GetPinfo(),tmp->GetProdR()));
101 //__________________________________________________________________
102 AliHFEV0taginfo &AliHFEV0taginfo::operator=(const AliHFEV0taginfo &ref){
104 // Assignment operator
105 // Cleanup old object, create a new one with new containers inside
107 if(this == &ref) return *this;
108 this->~AliHFEV0taginfo();
109 TNamed::operator=(ref);
110 fIsAODana = ref.fIsAODana;
111 fTaggedTracks = new TList();
112 AliHFEV0tag *tmp = NULL;
113 for(Int_t ien = 0; ien < ref.fTaggedTracks->GetEntries(); ien++){
114 tmp = static_cast<AliHFEV0tag *>(ref.fTaggedTracks->At(ien));
115 fTaggedTracks->Add(new AliHFEV0tag(tmp->GetTrackID(),tmp->GetPinfo(),tmp->GetProdR()));
117 fV0finder=ref.fV0finder;
118 fAODV0finder=ref.fAODV0finder;
121 //___________________________________________________________________
122 AliHFEV0taginfo::~AliHFEV0taginfo(){
127 delete fTaggedTracks;
130 AliDebug(6, "DESTRUCTOR");
133 //________________________________________________________________________________
134 // loops over V0s in event and fills fTaggedTracks with V0 tracks
135 void AliHFEV0taginfo::TagV0Tracks(AliVEvent *fEvent){
139 const Int_t nTracks = fEvent->GetNumberOfTracks();
140 if(nTracks < 2) return;
142 const Int_t nV0s = fEvent->GetNumberOfV0s();
144 AliDebug(3,Form("%d V0s found!",nV0s));
146 if(fEvent->IsA() == AliESDEvent::Class()){
147 AliDebug(4, "ESD part");
148 AliESDEvent *esdevent = static_cast<AliESDEvent *>(fEvent);
149 fV0finder->SetEvent(esdevent);
151 for(Int_t i=0; i<nV0s; ++i){
154 AliESDv0 *fV0 = esdevent->GetV0(i);
156 if(fV0finder->ProcessV0(fV0,pdgP,pdgN)){
157 AliDebug(5,Form("V0 has: pos pdg: %d, neg pdg: %d",pdgP,pdgN));
158 AddTrack(fV0->GetPindex(),pdgP,TMath::Sqrt(fV0->Xv()*fV0->Xv()+fV0->Yv()*fV0->Yv()));
159 AddTrack(fV0->GetNindex(),pdgN,TMath::Sqrt(fV0->Xv()*fV0->Xv()+fV0->Yv()*fV0->Yv()));
162 } else if(fEvent->IsA() == AliAODEvent::Class()){
163 AliDebug(4,"AOD part");
164 AliAODEvent *aodevent = static_cast<AliAODEvent *>(fEvent);
165 fAODV0finder->SetEvent(aodevent);
167 for(Int_t i=0; i<nV0s; ++i){
170 AliAODv0 *fV0 = aodevent->GetV0(i);
172 if(fAODV0finder->ProcessV0(fV0,pdgP,pdgN)){
173 AliDebug(5,Form("V0 has: pos pdg: %d, neg pdg: %d",pdgP,pdgN));
174 AddTrack(fV0->GetPosID(),pdgP,fV0->RadiusV0());
175 AddTrack(fV0->GetNegID(),pdgN,fV0->RadiusV0());
181 //________________________________________________________________________________
182 //Translates the pdg code to AliPID enum and adds track to tagged list
183 void AliHFEV0taginfo::AddTrack(Int_t TrackID, Int_t pdgCode, Double_t prodR){
185 if(TrackID<0) return;
186 AliPID::EParticleType Pinfo;
187 switch (TMath::Abs(pdgCode)){
189 Pinfo = AliPID::kElectron;
192 Pinfo = AliPID::kPion;
195 Pinfo = AliPID::kProton;
200 fTaggedTracks->Add(new AliHFEV0tag(TrackID, Pinfo, prodR));
201 AliDebug(4,Form("Added new Track ID: %d with PID: %d, #entry: %d",TrackID, Pinfo, fTaggedTracks->GetEntries()));
205 //________________________________________________________________________________
206 //check for V0 information from track ID
207 //returns AliPID::kUnknown if track ID not found
208 AliPID::EParticleType AliHFEV0taginfo::GetV0Info(Int_t trackID){
210 AliHFEV0tag test(trackID, AliPID::kUnknown,0);
211 AliHFEV0tag *result = dynamic_cast<AliHFEV0tag *>(fTaggedTracks->FindObject(&test));
213 AliDebug(6, Form("Could not find track ID %d", trackID));
214 return AliPID::kUnknown;
216 return result->GetPinfo();
219 //________________________________________________________________________________
220 //check for V0 daughter production vertex from track ID
221 //returns -0.1 if track ID not found
222 Float_t AliHFEV0taginfo::GetV0ProdR(Int_t trackID){
224 AliHFEV0tag test(trackID, AliPID::kUnknown, 0);
225 AliHFEV0tag *result = dynamic_cast<AliHFEV0tag *>(fTaggedTracks->FindObject(&test));
227 AliDebug(6, Form("Could not find track ID %d", trackID));
230 return result->GetProdR();
233 //________________________________________________________________________________
234 //resets the fTaggedTracks TList
235 void AliHFEV0taginfo::Reset(){
236 fTaggedTracks->Delete();
240 //___________________________________________________________________
241 AliHFEV0taginfo::AliHFEV0tag::AliHFEV0tag():
244 fPinfo(AliPID::kUnknown),
247 // default constructor
249 //___________________________________________________________________
250 AliHFEV0taginfo::AliHFEV0tag::AliHFEV0tag(Int_t TrackID, AliPID::EParticleType Pinfo, Double_t ProdR):
258 //____________________________________________________________
259 AliHFEV0taginfo::AliHFEV0tag::AliHFEV0tag(const AliHFEV0tag &ref):
261 fTrackID(ref.fTrackID),
268 //____________________________________________________________
269 AliHFEV0taginfo::AliHFEV0tag &AliHFEV0taginfo::AliHFEV0tag::operator=(const AliHFEV0tag &ref){
270 // Assignment operator
272 TObject::operator=(ref);
274 fTrackID = ref.fTrackID;
281 //___________________________________________________________________
282 AliHFEV0taginfo::AliHFEV0tag::~AliHFEV0tag(){
286 AliDebug(6, "DESTRUCTOR");
289 //Set track ID and particle info
290 //___________________________________________________________________
291 void AliHFEV0taginfo::AliHFEV0tag::SetTrack(Int_t trackID, AliPID::EParticleType Pinfo){
296 //Set track ID and production verxtex
297 //___________________________________________________________________
298 void AliHFEV0taginfo::AliHFEV0tag::SetProdR(Int_t trackID, Double_t prodR){
303 //____________________________________________________________
304 Bool_t AliHFEV0taginfo::AliHFEV0tag::IsEqual(const TObject *ref) const {
306 // Check for equality of track ID
308 const AliHFEV0tag *refObj = dynamic_cast<const AliHFEV0tag *>(ref);
309 if(!refObj) return kFALSE;
310 return (fTrackID == refObj->GetTrackID());
312 //____________________________________________________________
313 Int_t AliHFEV0taginfo::AliHFEV0tag::Compare(const TObject *ref) const{
315 // Compares two objects
317 // First compare track ID then particle info
319 const AliHFEV0tag *refObj = static_cast<const AliHFEV0tag *>(ref);
320 if(fTrackID < refObj->GetTrackID()) return -1;
321 else if(fTrackID > refObj->GetTrackID()) return 1;
323 if(fPinfo < refObj->GetPinfo()) return -1;
324 else if(fPinfo > refObj->GetPinfo()) return 1;