X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=STEER%2FAliAODRecoDecay.h;h=c7ca7e219d974d497aa3228824532c896589b239;hb=2639cc20edd6a8d2ac15a26a13fbcb8283d206e6;hp=644434652e8d67638f32e620c0c47b1181c9abc4;hpb=7de7497b7f637f37300ffe3be51c51f6f60578fa;p=u%2Fmrichter%2FAliRoot.git diff --git a/STEER/AliAODRecoDecay.h b/STEER/AliAODRecoDecay.h index 644434652e8..c7ca7e219d9 100644 --- a/STEER/AliAODRecoDecay.h +++ b/STEER/AliAODRecoDecay.h @@ -10,10 +10,13 @@ //*********************************************************** #include +#include +#include #include "AliAODVertex.h" -#include "AliVirtualParticle.h" +#include "AliAODTrack.h" +#include "AliVTrack.h" -class AliAODRecoDecay : public AliVirtualParticle { +class AliAODRecoDecay : public AliVTrack { public: @@ -30,18 +33,27 @@ class AliAODRecoDecay : public AliVirtualParticle { // decay vertex - Double_t GetSecVtxX() const {return fSecondaryVtx->GetX();} - Double_t GetSecVtxY() const {return fSecondaryVtx->GetY();} - Double_t GetSecVtxZ() const {return fSecondaryVtx->GetZ();} + Double_t GetSecVtxX() const {return GetSecondaryVtx()->GetX();} + Double_t GetSecVtxY() const {return GetSecondaryVtx()->GetY();} + Double_t GetSecVtxZ() const {return GetSecondaryVtx()->GetZ();} Double_t RadiusSecVtx() const; void SetSecondaryVtx(AliAODVertex *vtx2) {fSecondaryVtx=vtx2;} - AliAODVertex* GetSecondaryVtx() const {return fSecondaryVtx;} + 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 fSecondaryVtx->GetChi2perNDF();} + Double_t GetReducedChi2() const {return GetSecondaryVtx()->GetChi2perNDF();} Short_t Charge() const {return fCharge;} Short_t GetCharge() const {return fCharge;} void SetCharge(Short_t charge=0) {fCharge=charge;} + // Match to MC signal: + // check if this candidate is matched to a MC signal + // If no, return -1 + // If yes, return label (>=0) of the AliAODMCParticle + // if ndgCk>0, checks also daughters PDGs + Int_t MatchToMC(Int_t pdgabs,TClonesArray *mcArray,Int_t ndgCk=0,Int_t *pdgDg=0) const; + // PID void SetPID(Int_t nprongs,Double_t *pid); Double_t *GetPID() const { return fPID; } @@ -49,9 +61,9 @@ class AliAODRecoDecay : public AliVirtualParticle { virtual const Double_t *PID() const { return fPID; } // prong-to-prong DCAs - void SetDCAs(Int_t nDCA,Float_t *dca); - void SetDCA(Float_t dca); // 2 prong - Float_t GetDCA(Int_t i=0) const {return fDCA[i];} + void SetDCAs(Int_t nDCA,Double_t *dca); + void SetDCA(Double_t dca); // 2 prong + Double_t GetDCA(Int_t i=0) const {return fDCA[i];} //event and run number void SetEventRunNumbers(Int_t en,Int_t rn) @@ -59,6 +71,13 @@ class AliAODRecoDecay : public AliVirtualParticle { Int_t GetEventNumber() const { return fEventNumber; } Int_t GetRunNumber() const { return fRunNumber; } + // methods of AliVTrack + virtual Int_t GetID() const { return -1; } + virtual UChar_t GetITSClusterMap() const; + virtual ULong_t GetStatus() const; + virtual Bool_t GetXYZ(Double_t *p) const { return XvYvZv(p); } + virtual Bool_t GetCovarianceXYZPxPyPz(Double_t cv[21]) const; + // kinematics & topology Double_t Px() const; Double_t Py() const; @@ -66,23 +85,28 @@ class AliAODRecoDecay : public AliVirtualParticle { 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.);} - Double_t Phi() const {return TMath::ATan2(Py(),Px());} + 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; Double_t DecayLength(AliAODVertex *vtx1) const - {return fSecondaryVtx->DistanceToVertex(vtx1);} + {return GetSecondaryVtx()->DistanceToVertex(vtx1);} Double_t DecayLengthError(AliAODVertex *vtx1) const - {return fSecondaryVtx->ErrorDistanceToVertex(vtx1);} + {return GetSecondaryVtx()->ErrorDistanceToVertex(vtx1);} Double_t NormalizedDecayLength(AliAODVertex *vtx1) const {return DecayLength(vtx1)/DecayLengthError(vtx1);} Double_t DecayLengthXY(Double_t point[3]) const; Double_t DecayLengthXY(AliAODVertex *vtx1) const - {return fSecondaryVtx->DistanceXYToVertex(vtx1);} + {return GetSecondaryVtx()->DistanceXYToVertex(vtx1);} Double_t DecayLengthXYError(AliAODVertex *vtx1) const - {return fSecondaryVtx->ErrorDistanceXYToVertex(vtx1);} + {return GetSecondaryVtx()->ErrorDistanceXYToVertex(vtx1);} Double_t NormalizedDecayLengthXY(AliAODVertex *vtx1) const {return DecayLengthXY(vtx1)/DecayLengthXYError(vtx1);} Double_t Ct(UInt_t pdg,Double_t point[3]) const; @@ -97,10 +121,11 @@ class AliAODRecoDecay : public AliVirtualParticle { Double_t ImpParXY(AliAODVertex *vtx1) const; // prongs - //Int_t GetNProngs() const {return fSecondaryVtx->GetNDaughters();} - Int_t GetNProngs() const {return fNProngs;} + Int_t GetNProngs() const {return fNProngs;} + Int_t GetNDaughters() const {return GetSecondaryVtx()->GetNDaughters();} + TObject *GetDaughter(Int_t i) const {return (GetNDaughters()>i ? GetSecondaryVtx()->GetDaughter(i) : 0x0);} - Short_t ChargeProng(Int_t ip) const; + Short_t ChargeProng(Int_t ip) const; Double_t Getd0Prong(Int_t ip) const {return fd0[ip];} Double_t Prodd0d0(Int_t ip1=0,Int_t ip2=0) const {return fd0[ip1]*fd0[ip2];} Double_t PxProng(Int_t ip) const {return fPx[ip];} @@ -134,53 +159,56 @@ class AliAODRecoDecay : public AliVirtualParticle { // print void Print(Option_t* option = "") const; - //void PrintIndices() const {fSecondaryVtx->PrintIndices();} + //void PrintIndices() const {GetSecondaryVtx()->PrintIndices();} - // dummy functions for inheritance from AliVirtualParticle + // dummy functions for inheritance from AliVParticle Double_t E() const {printf("Dummy function; use AliAODRecoDecay::E(UInt_t pdg) instead"); return (Double_t)-999.;} Double_t Y() const {printf("Dummy function; use AliAODRecoDecay::Y(UInt_t pdg) instead"); return (Double_t)-999.;} Double_t M() const {printf("Dummy function"); return (Double_t)-999.;} - + Int_t GetLabel() const {return -1;} protected: - AliAODVertex *fSecondaryVtx; // decay vertex - Short_t fCharge; // charge, use this convention for prongs charges: - // if(charge== 0) even-index prongs are + - // odd-index prongs are - - // if(charge==+1) even-index prongs are + - // odd-index prongs are - - // if(charge==-1) even-index prongs are - - // odd-index prongs are + + Int_t MatchToMC(Int_t pdgabs,TClonesArray *mcArray,Int_t dgLabels[10],Int_t ndg,Int_t ndgCk=0,Int_t *pdgDg=0) const; + Int_t MatchToMC(Int_t pdgabs,TClonesArray *mcArray,Int_t dgLabels[10]) const { return MatchToMC(pdgabs,mcArray,dgLabels,GetNDaughters()); } + + 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 - + // if(charge==+1) even-index prongs are + + // odd-index prongs are - + // if(charge==-1) even-index prongs are - + // odd-index prongs are + // TEMPORARY, to be removed when we do analysis on AliAODEvent - Int_t fNProngs; // number of prongs - Int_t fNDCA; // number of dca's - Int_t fNPID; // number of PID probabilities - Double_t *fPx; //[fNProngs] px of tracks at the vertex [GeV/c] - Double_t *fPy; //[fNProngs] py of tracks at the vertex [GeV/c] - Double_t *fPz; //[fNProngs] pz of tracks at the vertex [GeV/c] - Double_t *fd0; //[fNProngs] rphi impact params w.r.t. Primary Vtx [cm] - Float_t *fDCA; //[fNDCA] prong-to-prong DCA [cm] - // convention:fDCA[0]=p0p1,fDCA[1]=p0p2,fDCA[2]=p1p2,... - Double_t *fPID; //[fNPID] combined pid - // (combined detector response probabilities) + Int_t fNProngs; // number of prongs + Int_t fNDCA; // number of dca's + Int_t fNPID; // number of PID probabilities + Double32_t *fPx; //[fNProngs] px of tracks at the vertex [GeV/c] + Double32_t *fPy; //[fNProngs] py of tracks at the vertex [GeV/c] + Double32_t *fPz; //[fNProngs] pz of tracks at the vertex [GeV/c] + Double32_t *fd0; //[fNProngs] rphi impact params w.r.t. Primary Vtx [cm] + Double32_t *fDCA; //[fNDCA] prong-to-prong DCA [cm] + // convention:fDCA[0]=p0p1,fDCA[1]=p0p2,fDCA[2]=p1p2,... + Double32_t *fPID; //[fNPID] combined pid + // (combined detector response probabilities) // TEMPORARY, to be removed when we do analysis on AliAODEvent Int_t fEventNumber; 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,4) // base class for AOD reconstructed decays }; @@ -208,7 +236,7 @@ inline Double_t AliAODRecoDecay::RadiusSecVtx() const inline void AliAODRecoDecay::GetSecondaryVtx(Double_t vtx[3]) const { - fSecondaryVtx->GetPosition(vtx); + GetSecondaryVtx()->GetPosition(vtx); return; } @@ -285,22 +313,23 @@ inline Double_t AliAODRecoDecay::QtProngFlightLine(Int_t ip,AliAODVertex *vtx1) return QtProngFlightLine(ip,v); } -inline void AliAODRecoDecay::SetDCAs(Int_t nDCA,Float_t *dca) +inline void AliAODRecoDecay::SetDCAs(Int_t nDCA,Double_t *dca) { if(nDCA!=(GetNProngs()*(GetNProngs()-1)/2)) { printf("Wrong number of DCAs, must be nProngs*(nProngs-1)/2"); return; } if(fDCA) delete [] fDCA; - fDCA = new Float_t[nDCA]; + fNDCA = nDCA; + fDCA = new Double32_t[nDCA]; for(Int_t i=0;i