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()));
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()));
117 fV0finder=ref.fV0finder;
118 fAODV0finder=ref.fAODV0finder;
121 //___________________________________________________________________
122 AliHFEV0taginfo::~AliHFEV0taginfo(){
127 delete fTaggedTracks;
129 AliDebug(6, "DESTRUCTOR");
132 //________________________________________________________________________________
133 // loops over V0s in event and fills fTaggedTracks with V0 tracks
134 void AliHFEV0taginfo::TagV0Tracks(AliVEvent *fEvent){
138 const Int_t nTracks = fEvent->GetNumberOfTracks();
139 if(nTracks < 2) return;
141 const Int_t nV0s = fEvent->GetNumberOfV0s();
143 AliDebug(3,Form("%d V0s found!",nV0s));
145 if(fEvent->IsA() == AliESDEvent::Class()){
146 AliDebug(4, "ESD part");
147 AliESDEvent *esdevent = static_cast<AliESDEvent *>(fEvent);
148 fV0finder->SetEvent(esdevent);
150 for(Int_t i=0; i<nV0s; ++i){
153 AliESDv0 *fV0 = esdevent->GetV0(i);
155 if(fV0finder->ProcessV0(fV0,pdgP,pdgN)){
156 AliDebug(5,Form("V0 has: pos pdg: %d, neg pdg: %d",pdgP,pdgN));
157 AddTrack(fV0->GetPindex(),pdgP);
158 AddTrack(fV0->GetNindex(),pdgN);
161 } else if(fEvent->IsA() == AliAODEvent::Class()){
162 AliDebug(4,"AOD part");
163 AliAODEvent *aodevent = static_cast<AliAODEvent *>(fEvent);
164 fAODV0finder->SetEvent(aodevent);
166 for(Int_t i=0; i<nV0s; ++i){
169 AliAODv0 *fV0 = aodevent->GetV0(i);
171 if(fAODV0finder->ProcessV0(fV0,pdgP,pdgN)){
172 AliDebug(5,Form("V0 has: pos pdg: %d, neg pdg: %d",pdgP,pdgN));
173 AddTrack(fV0->GetPosID(),pdgP);
174 AddTrack(fV0->GetNegID(),pdgN);
180 //________________________________________________________________________________
181 //Translates the pdg code to AliPID enum and adds track to tagged list
182 void AliHFEV0taginfo::AddTrack(Int_t TrackID, Int_t pdgCode){
184 if(TrackID<0) return;
185 AliPID::EParticleType Pinfo;
186 switch (TMath::Abs(pdgCode)){
188 Pinfo = AliPID::kElectron;
191 Pinfo = AliPID::kPion;
194 Pinfo = AliPID::kProton;
199 fTaggedTracks->Add(new AliHFEV0tag(TrackID, Pinfo));
200 AliDebug(4,Form("Added new Track ID: %d with PID: %d, #entry: %d",TrackID, Pinfo, fTaggedTracks->GetEntries()));
204 //________________________________________________________________________________
205 //check for V0 information from track ID
206 //returns AliPID::kUnknown if track ID not found
207 AliPID::EParticleType AliHFEV0taginfo::GetV0Info(Int_t trackID){
209 AliHFEV0tag test(trackID, AliPID::kUnknown);
210 AliHFEV0tag *result = dynamic_cast<AliHFEV0tag *>(fTaggedTracks->FindObject(&test));
212 AliDebug(6, Form("Could not find track ID %d", trackID));
213 return AliPID::kUnknown;
215 return result->GetPinfo();
218 //________________________________________________________________________________
219 //resets the fTaggedTracks TList
220 void AliHFEV0taginfo::Reset(){
221 fTaggedTracks->Delete();
225 //___________________________________________________________________
226 AliHFEV0taginfo::AliHFEV0tag::AliHFEV0tag():
229 fPinfo(AliPID::kUnknown)
231 // default constructor
233 //___________________________________________________________________
234 AliHFEV0taginfo::AliHFEV0tag::AliHFEV0tag(Int_t TrackID, AliPID::EParticleType Pinfo):
241 //____________________________________________________________
242 AliHFEV0taginfo::AliHFEV0tag::AliHFEV0tag(const AliHFEV0tag &ref):
244 fTrackID(ref.fTrackID),
250 //____________________________________________________________
251 AliHFEV0taginfo::AliHFEV0tag &AliHFEV0taginfo::AliHFEV0tag::operator=(const AliHFEV0tag &ref){
252 // Assignment operator
254 TObject::operator=(ref);
256 fTrackID = ref.fTrackID;
262 //___________________________________________________________________
263 AliHFEV0taginfo::AliHFEV0tag::~AliHFEV0tag(){
267 AliDebug(6, "DESTRUCTOR");
270 //Set track ID and particle info
271 //___________________________________________________________________
272 void AliHFEV0taginfo::AliHFEV0tag::SetTrack(const Int_t trackID, const AliPID::EParticleType Pinfo){
276 //____________________________________________________________
277 Bool_t AliHFEV0taginfo::AliHFEV0tag::IsEqual(const TObject *ref) const {
279 // Check for equality of track ID
281 const AliHFEV0tag *refObj = dynamic_cast<const AliHFEV0tag *>(ref);
282 if(!refObj) return kFALSE;
283 return (fTrackID == refObj->GetTrackID());
285 //____________________________________________________________
286 Int_t AliHFEV0taginfo::AliHFEV0tag::Compare(const TObject *ref) const{
288 // Compares two objects
290 // First compare track ID then particle info
292 const AliHFEV0tag *refObj = static_cast<const AliHFEV0tag *>(ref);
293 if(fTrackID < refObj->GetTrackID()) return -1;
294 else if(fTrackID > refObj->GetTrackID()) return 1;
296 if(fPinfo < refObj->GetPinfo()) return -1;
297 else if(fPinfo > refObj->GetPinfo()) return 1;