Changed AliAODEvent::GetTrack to return AliVTrack* (and not AliAODTrack)
authormfloris <michele.floris@cern.ch>
Thu, 4 Sep 2014 07:09:45 +0000 (09:09 +0200)
committerhristov <Peter.Hristov@cern.ch>
Mon, 27 Oct 2014 12:45:50 +0000 (13:45 +0100)
This change is needed for the NanoAOD developement.
In this commit, AliAODEvent has been patched so that the track type is
explicitly checked when needed.
This commit does not compile (tasks still to be patched).

STEER/AOD/AliAODEvent.cxx
STEER/AOD/AliAODEvent.h

index 93a397f..36fcf0f 100644 (file)
@@ -621,7 +621,8 @@ Int_t AliAODEvent::GetMuonTracks(TRefArray *muonTracks) const
 
   AliAODTrack *track = 0;
   for (Int_t iTrack = 0; iTrack < GetNumberOfTracks(); iTrack++) {
-    track = GetTrack(iTrack);
+    track = dynamic_cast<AliAODTrack*>(GetTrack(iTrack));
+    if(!track) AliFatal("Not a standard AOD");
     if (track->IsMuonTrack()) {
       muonTracks->Add(track);
     }
@@ -636,8 +637,14 @@ Int_t AliAODEvent::GetNumberOfMuonTracks() const
 {
   // get number of muon tracks
   Int_t nMuonTracks=0;
+   
+  if(!dynamic_cast<AliAODTrack*>(GetTrack(0))) {
+    AliError("Not a standard AOD");
+    return 0;
+  }
+
   for (Int_t iTrack = 0; iTrack < GetNumberOfTracks(); iTrack++) {
-    if ((GetTrack(iTrack))->IsMuonTrack()) {
+    if (((AliAODTrack*)GetTrack(iTrack))->IsMuonTrack()) {
        nMuonTracks++;
     }
   }
@@ -654,7 +661,8 @@ Int_t AliAODEvent::GetMuonGlobalTracks(TRefArray *muonGlobalTracks) const
 
   AliAODTrack *track = 0;
   for (Int_t iTrack = 0; iTrack < GetNumberOfTracks(); iTrack++) {
-    track = GetTrack(iTrack);
+    track = dynamic_cast<AliAODTrack*>(GetTrack(iTrack));
+    if(!track) AliFatal("Not a standard AOD");
     if (track->IsMuonGlobalTrack()) {
       muonGlobalTracks->Add(track);
     }
@@ -669,8 +677,12 @@ Int_t AliAODEvent::GetNumberOfMuonGlobalTracks() const
 {
   // get number of muon global tracks
   Int_t nMuonGlobalTracks=0;
+  if(!dynamic_cast<AliAODTrack*>(GetTrack(0))) {
+    AliError("Not a standard AOD");
+    return 0;
+  }
   for (Int_t iTrack = 0; iTrack < GetNumberOfTracks(); iTrack++) {
-    if ((GetTrack(iTrack))->IsMuonGlobalTrack()) {
+    if (((AliAODTrack*)GetTrack(iTrack))->IsMuonGlobalTrack()) {
        nMuonGlobalTracks++;
     }
   }
@@ -1077,11 +1089,13 @@ AliAODTrdTrack& AliAODEvent::AddTrdTrack(const AliVTrdTrack *track) {
 void AliAODEvent::ConnectTracks() {
 // Connect tracks to this event
   if (fTracksConnected || !fTracks || !fTracks->GetEntriesFast()) return;
-  if(!GetTrack(0)->InheritsFrom("AliAODTrack")) { // FIXME: consider using a dynamic_cast instead of InheritsFrom
+  AliAODTrack *track = 0;
+  track = dynamic_cast<AliAODTrack*>(GetTrack(0));
+  if(!track) {
     AliWarning("Not an AliAODTrack, this is not a standard AOD"); 
     return;
   }
-  AliAODTrack *track;
+
   TIter next(fTracks);
   while ((track=(AliAODTrack*)next())) track->SetAODEvent(this);
   fTracksConnected = kTRUE;
index aec39d8..8643acf 100644 (file)
@@ -152,7 +152,7 @@ class AliAODEvent : public AliVEvent {
   TClonesArray *GetTracks()              const { return fTracks; }
   void          ConnectTracks();
   Int_t         GetNumberOfTracks()      const { return fTracks? fTracks->GetEntriesFast() : 0; }
-  AliAODTrack  *GetTrack(Int_t nTrack)   const { return fTracks ? (AliAODTrack*)fTracks->UncheckedAt(nTrack):0; }
+  AliVTrack    *GetTrack(Int_t nTrack)   const { return fTracks ? (AliVTrack*)fTracks->UncheckedAt(nTrack):0; }
   Int_t         AddTrack(const AliAODTrack* trk);
   Int_t         GetMuonTracks(TRefArray *muonTracks) const;
   Int_t         GetNumberOfMuonTracks() const;