Removed all dynamic_cast calls to convert referenced track/event to one of the allowe...
authorpulvir <pulvir@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 22 Feb 2011 08:53:03 +0000 (08:53 +0000)
committerpulvir <pulvir@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 22 Feb 2011 08:53:03 +0000 (08:53 +0000)
Now all casts are static, in order to gain advantace in terms of execution time, and make a more affidable ROOT RTTI which check the exact match between an object and a specified class template.

PWG2/RESONANCES/AliRsnDaughter.h
PWG2/RESONANCES/AliRsnEvent.h

index f733b8e..5a16ae1 100644 (file)
@@ -81,16 +81,16 @@ public:
    Bool_t   IsKinkDaughter();
 
    // getters which automatically convert refs into allowed types
-   AliVTrack*        GetRefVtrack()     {return dynamic_cast<AliVTrack*>(fRef);}
-   AliESDtrack*      GetRefESDtrack()   {return dynamic_cast<AliESDtrack*>(fRef);}
-   AliESDv0*         GetRefESDv0()      {return dynamic_cast<AliESDv0*>(fRef);}
-   AliESDcascade*    GetRefESDcascade() {return dynamic_cast<AliESDcascade*>(fRef);}
-   AliAODTrack*      GetRefAODtrack()   {return dynamic_cast<AliAODTrack*>(fRef);}
-   AliAODv0*         GetRefAODv0()      {return dynamic_cast<AliAODv0*>(fRef);}
-   AliAODcascade*    GetRefAODcascade() {return dynamic_cast<AliAODcascade*>(fRef);}
-   AliMCParticle*    GetRefMCtrack()    {return dynamic_cast<AliMCParticle*>(fRef);}
-   AliMCParticle*    GetRefMCESD()      {return dynamic_cast<AliMCParticle*>(fRefMC);}
-   AliAODMCParticle* GetRefMCAOD()      {return dynamic_cast<AliAODMCParticle*>(fRefMC);}
+   AliVTrack*        GetRefVtrack()     {if (classMatchRef  (AliVTrack       ::Class())) return static_cast<AliVTrack*>       (fRef)  ; return 0x0;}
+   AliESDtrack*      GetRefESDtrack()   {if (classMatchRef  (AliESDtrack     ::Class())) return static_cast<AliESDtrack*>     (fRef)  ; return 0x0;}
+   AliESDv0*         GetRefESDv0()      {if (classMatchRef  (AliESDv0        ::Class())) return static_cast<AliESDv0*>        (fRef)  ; return 0x0;}
+   AliESDcascade*    GetRefESDcascade() {if (classMatchRef  (AliESDcascade   ::Class())) return static_cast<AliESDcascade*>   (fRef)  ; return 0x0;}
+   AliAODTrack*      GetRefAODtrack()   {if (classMatchRef  (AliAODTrack     ::Class())) return static_cast<AliAODTrack*>     (fRef)  ; return 0x0;}
+   AliAODv0*         GetRefAODv0()      {if (classMatchRef  (AliAODv0        ::Class())) return static_cast<AliAODv0*>        (fRef)  ; return 0x0;}
+   AliAODcascade*    GetRefAODcascade() {if (classMatchRef  (AliAODcascade   ::Class())) return static_cast<AliAODcascade*>   (fRef)  ; return 0x0;}
+   AliMCParticle*    GetRefMCtrack()    {if (classMatchRef  (AliMCParticle   ::Class())) return static_cast<AliMCParticle*>   (fRef)  ; return 0x0;}
+   AliMCParticle*    GetRefMCESD()      {if (classMatchRefMC(AliMCParticle   ::Class())) return static_cast<AliMCParticle*>   (fRefMC); return 0x0;}
+   AliAODMCParticle* GetRefMCAOD()      {if (classMatchRefMC(AliAODMCParticle::Class())) return static_cast<AliAODMCParticle*>(fRefMC); return 0x0;}
 
    // check the input type
    Bool_t    IsMC()      {if (GetRefMCtrack()) return kTRUE; return kFALSE;}
@@ -103,6 +103,9 @@ public:
 
 private:
 
+   Bool_t classMatchRef  (TClass *ref) {if (fRef  ) return (fRef  ->IsA() == ref); return kFALSE;}
+   Bool_t classMatchRefMC(TClass *ref) {if (fRefMC) return (fRefMC->IsA() == ref); return kFALSE;}
+
    Bool_t         fOK;          // internal utility flag which is kFALSE when this object should not be used
    Int_t          fLabel;       // GEANT label of corresponding MC
    Int_t          fMotherPDG;   // PDG code of mother (makes sense only if fRefMC is defined)
@@ -117,4 +120,6 @@ private:
    ClassDef(AliRsnDaughter, 9)
 };
 
+
+
 #endif
index bdd1fd1..de5cf42 100644 (file)
@@ -43,10 +43,10 @@ public:
    Int_t      GetLocalID() const           {return fLocalID;}
 
    // getters which convert into allowed input types
-   AliESDEvent* GetRefESD()   {if (fRef  ->IsA() == AliESDEvent::Class()) return static_cast<AliESDEvent*>(fRef)  ; else return 0x0;}
-   AliAODEvent* GetRefAOD()   {if (fRef  ->IsA() == AliAODEvent::Class()) return static_cast<AliAODEvent*>(fRef)  ; else return 0x0;}
-   AliMCEvent*  GetRefMCESD() {if (fRefMC->IsA() == AliMCEvent ::Class()) return static_cast<AliMCEvent*> (fRefMC); else return 0x0;}
-   AliAODEvent* GetRefMCAOD() {if (fRefMC->IsA() == AliAODEvent::Class()) return static_cast<AliAODEvent*>(fRefMC); else return 0x0;}
+   AliESDEvent* GetRefESD()   {if (classMatchRef  (AliESDEvent::Class())) return static_cast<AliESDEvent*>(fRef); return 0x0;}
+   AliAODEvent* GetRefAOD()   {if (classMatchRef  (AliAODEvent::Class())) return static_cast<AliAODEvent*>(fRef); return 0x0;}
+   AliMCEvent*  GetRefMCESD() {if (classMatchRefMC(AliMCEvent ::Class())) return static_cast<AliMCEvent *>(fRef); return 0x0;}
+   AliAODEvent* GetRefMCAOD() {if (classMatchRefMC(AliAODEvent::Class())) return static_cast<AliAODEvent*>(fRef); return 0x0;}
    Bool_t       IsESD()       {return (GetRefESD() != 0x0);}
    Bool_t       IsAOD()       {return (GetRefAOD() != 0x0);}
 
@@ -79,6 +79,9 @@ public:
    
 private:
 
+   Bool_t classMatchRef  (TClass *ref) {if (fRef  ) return (fRef  ->IsA() == ref); return kFALSE;}
+   Bool_t classMatchRefMC(TClass *ref) {if (fRefMC) return (fRefMC->IsA() == ref); return kFALSE;}
+
    Bool_t SetDaughterESDtrack(AliRsnDaughter &target, Int_t index);
    Bool_t SetDaughterAODtrack(AliRsnDaughter &target, Int_t index);
    Bool_t SetDaughterESDv0(AliRsnDaughter &target, Int_t index);