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 "AliESDEvent.h"
36 #include "AliHFEV0taginfo.h"
39 ClassImp(AliHFEV0taginfo)
40 ClassImp(AliHFEV0taginfo::AliHFEV0tag)
42 //___________________________________________________________________
43 AliHFEV0taginfo::AliHFEV0taginfo():
49 // default constructor
52 //___________________________________________________________________
53 AliHFEV0taginfo::AliHFEV0taginfo(const char* name):
62 fTaggedTracks = new TList();
64 fTaggedTracks->SetOwner();
66 fV0finder = new AliESDv0KineCuts();
68 //___________________________________________________________________
69 AliHFEV0taginfo::~AliHFEV0taginfo(){
76 AliDebug(6, "DESTRUCTOR");
79 //________________________________________________________________________________
80 // loops over V0s in event and fills fTaggedTracks with V0 tracks
81 void AliHFEV0taginfo::TagV0Tracks(AliESDEvent *fEvent){
85 const Int_t nTracks = fEvent->GetNumberOfTracks();
86 if(nTracks < 2) return;
88 const Int_t nV0s = fEvent->GetNumberOfV0s();
90 AliDebug(3,Form("%d V0s found!",nV0s));
92 fV0finder->SetEvent(fEvent);
94 for(Int_t i=0; i<nV0s; ++i){
97 AliESDv0 *fV0 = fEvent->GetV0(i);
99 if(fV0finder->ProcessV0(fV0,pdgP,pdgN)){
100 AliDebug(5,Form("V0 has: pos pdg: %d, neg pdg: %d",pdgP,pdgN));
101 AddTrack(fV0->GetPindex(),pdgP);
102 AddTrack(fV0->GetNindex(),pdgN);
107 //________________________________________________________________________________
108 //Translates the pdg code to AliPID enum and adds track to tagged list
109 void AliHFEV0taginfo::AddTrack(Int_t TrackID, Int_t pdgCode){
111 if(TrackID<0) return;
112 AliPID::EParticleType Pinfo;
113 switch (TMath::Abs(pdgCode)){
115 Pinfo = AliPID::kElectron;
118 Pinfo = AliPID::kPion;
121 Pinfo = AliPID::kProton;
126 fTaggedTracks->Add(new AliHFEV0tag(TrackID, Pinfo));
127 AliDebug(4,Form("Added new Track ID: %d with PID: %d, #entry: %d",TrackID, Pinfo, fTaggedTracks->GetEntries()));
131 //________________________________________________________________________________
132 //check for V0 information from track ID
133 //returns AliPID::kUnknown if track ID not found
134 AliPID::EParticleType AliHFEV0taginfo::GetV0Info(Int_t trackID){
136 AliHFEV0tag test(trackID, AliPID::kUnknown);
137 AliHFEV0tag *result = dynamic_cast<AliHFEV0tag *>(fTaggedTracks->FindObject(&test));
139 AliDebug(6, Form("Could not find track ID %d", trackID));
140 return AliPID::kUnknown;
142 return result->GetPinfo();
145 //________________________________________________________________________________
146 //resets the fTaggedTracks TList
147 void AliHFEV0taginfo::Reset(){
148 fTaggedTracks->Delete();
152 //___________________________________________________________________
153 AliHFEV0taginfo::AliHFEV0tag::AliHFEV0tag():
156 fPinfo(AliPID::kUnknown)
158 // default constructor
160 //___________________________________________________________________
161 AliHFEV0taginfo::AliHFEV0tag::AliHFEV0tag(Int_t TrackID, AliPID::EParticleType Pinfo):
168 //____________________________________________________________
169 AliHFEV0taginfo::AliHFEV0tag::AliHFEV0tag(const AliHFEV0tag &ref):
171 fTrackID(ref.fTrackID),
177 //____________________________________________________________
178 AliHFEV0taginfo::AliHFEV0tag &AliHFEV0taginfo::AliHFEV0tag::operator=(const AliHFEV0tag &ref){
179 // Assignment operator
181 TObject::operator=(ref);
183 fTrackID = ref.fTrackID;
189 //___________________________________________________________________
190 AliHFEV0taginfo::AliHFEV0tag::~AliHFEV0tag(){
194 AliDebug(6, "DESTRUCTOR");
197 //Set track ID and particle info
198 //___________________________________________________________________
199 void AliHFEV0taginfo::AliHFEV0tag::SetTrack(const Int_t trackID, const AliPID::EParticleType Pinfo){
203 //____________________________________________________________
204 Bool_t AliHFEV0taginfo::AliHFEV0tag::IsEqual(const TObject *ref) const {
206 // Check for equality of track ID
208 const AliHFEV0tag *refObj = dynamic_cast<const AliHFEV0tag *>(ref);
209 if(!refObj) return kFALSE;
210 return (fTrackID == refObj->GetTrackID());
212 //____________________________________________________________
213 Int_t AliHFEV0taginfo::AliHFEV0tag::Compare(const TObject *ref) const{
215 // Compares two objects
217 // First compare track ID then particle info
219 const AliHFEV0tag *refObj = dynamic_cast<const AliHFEV0tag *>(ref);
220 if(fTrackID < refObj->GetTrackID()) return -1;
221 else if(fTrackID > refObj->GetTrackID()) return 1;
223 if(fPinfo < refObj->GetPinfo()) return -1;
224 else if(fPinfo > refObj->GetPinfo()) return 1;