]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - STEER/AliAODRecoDecay.h
Revision of V0A by Lizardo Valencia and Andreas
[u/mrichter/AliRoot.git] / STEER / AliAODRecoDecay.h
index 381564db78eed4e09dbf05cf952209e8fe140011..381851fe3ec97d64eb84bc8b2514b3582443dd68 100644 (file)
@@ -36,7 +36,9 @@ class AliAODRecoDecay : public AliVParticle {
   Double_t GetSecVtxZ() const {return GetSecondaryVtx()->GetZ();}
   Double_t RadiusSecVtx() const;
   void     SetSecondaryVtx(AliAODVertex *vtx2) {fSecondaryVtx=vtx2;}
-  AliAODVertex* GetSecondaryVtx() const {return (AliAODVertex*)fSecondaryVtx.GetObject();}
+  AliAODVertex* GetSecondaryVtx() const { return (((AliAODVertex*)fSecondaryVtx.GetObject()) ? (AliAODVertex*)fSecondaryVtx.GetObject() : GetOwnSecondaryVtx()); }
+  void     SetOwnSecondaryVtx(AliAODVertex *vtx2) {fOwnSecondaryVtx=vtx2;}
+  AliAODVertex* GetOwnSecondaryVtx() const {return fOwnSecondaryVtx;}
   void     GetSecondaryVtx(Double_t vtx[3]) const;
   Double_t GetReducedChi2() const {return GetSecondaryVtx()->GetChi2perNDF();}
   Short_t  Charge() const {return fCharge;}
@@ -67,9 +69,14 @@ class AliAODRecoDecay : public AliVParticle {
   Double_t P() const {return TMath::Sqrt(Px()*Px()+Py()*Py()+Pz()*Pz());}
   Double_t Pt() const {return TMath::Sqrt(Px()*Px()+Py()*Py());}
   Double_t OneOverPt() const {return (Pt() ? 1./Pt() : 0.);}
+  Bool_t   PxPyPz(Double_t p[3]) const { p[0] = Px(); p[1] = Py(); p[2] = Pz(); return kTRUE; }
   Double_t Phi() const {return TMath::Pi()+TMath::ATan2(-Py(),-Px());}
   Double_t Theta() const {return 0.5*TMath::Pi()-TMath::ATan(Pz()/(Pt()+1.e-13));}
   Double_t Eta() const {return 0.5*TMath::Log((P()+Pz())/(P()-Pz()+1.e-13));}
+  Double_t Xv() const { return GetSecVtxX(); }
+  Double_t Yv() const { return GetSecVtxY(); }
+  Double_t Zv() const { return GetSecVtxZ(); }
+  virtual Bool_t   XvYvZv(Double_t x[3]) const { x[0] = Xv(); x[1] = Yv(); x[2] = Zv(); return kTRUE; }
   Double_t E(UInt_t pdg) const;
   Double_t Y(UInt_t pdg) const {return 0.5*TMath::Log((E(pdg)+Pz())/(E(pdg)-Pz()+1.e-13));}
   Double_t DecayLength(Double_t point[3]) const;
@@ -148,6 +155,7 @@ class AliAODRecoDecay : public AliVParticle {
  protected:
 
   TRef     fSecondaryVtx;  // decay vertex
+  AliAODVertex *fOwnSecondaryVtx;  // temporary solution (to work outside AliAODEvent)
   Short_t  fCharge;  // charge, use this convention for prongs charges:
                      // if(charge== 0) even-index prongs are +
                      //                odd-index prongs are -
@@ -174,14 +182,13 @@ class AliAODRecoDecay : public AliVParticle {
   Int_t fRunNumber;
   // TO BE PUT IN SPECIAL MC CLASS
   //Bool_t   fSignal; // TRUE if signal, FALSE if background (for simulation)
-  //Int_t    fEvent;  // number of the event this candidate comes from
   //Int_t  fTrkNum[2]; // numbers of the two decay tracks  
   //Int_t fPdg[2];  // PDG codes of the two tracks (for sim.)
   //Int_t fMum[2];  // PDG codes of the mothers    (for sim.)
 
   //
 
-  ClassDef(AliAODRecoDecay,1)  // base class for AOD reconstructed decays
+  ClassDef(AliAODRecoDecay,3)  // base class for AOD reconstructed decays
 };
 
 
@@ -293,6 +300,7 @@ inline void AliAODRecoDecay::SetDCAs(Int_t nDCA,Double_t *dca)
     return;
   }
   if(fDCA) delete [] fDCA;
+  fNDCA = nDCA;
   fDCA = new Double32_t[nDCA];
   for(Int_t i=0;i<nDCA;i++) 
     fDCA[i] = dca[i]; 
@@ -313,6 +321,7 @@ inline void AliAODRecoDecay::SetPID(Int_t nprongs,Double_t *pid)
     return;
   }
   if(fPID) delete [] fPID;
+  fNPID = nprongs;
   fPID = new Double32_t[nprongs*5];
   for(Int_t i=0;i<nprongs;i++) 
     for(Int_t j=0;j<5;j++)