LCOV - code coverage report
Current view: top level - STEER/AOD - AliAODcascade.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 1 53 1.9 %
Date: 2016-06-14 17:26:59 Functions: 2 34 5.9 %

          Line data    Source code
       1             : #ifndef ALIAODCASCADE_H
       2             : #define ALIAODCASCADE_H
       3             : 
       4             : /* Copyright(c) 2004-2005, ALICE Experiment at CERN, All rights reserved. *
       5             :  * See cxx source for full Copyright notice                               */
       6             : 
       7             : //-------------------------------------------------------------------------
       8             : //     Implementation of the Analysis Oriented Data (AOD) Xi vertex class
       9             : //     Origin: A.Maire, IReS, antonin.maire@ires.in2p3.fr 
      10             : //             G.Van Buren, BNL,  gene@bnl.gov      (original STAR MuDsts)
      11             : //
      12             : //     Purpose: Having physics observables available for Xis
      13             : //-------------------------------------------------------------------------
      14             : 
      15             : 
      16             : #include "AliAODv0.h"
      17             : 
      18             : class AliAODTrack;
      19             : class AliAODVertex;
      20             : 
      21             : class AliAODcascade : public AliAODv0 {
      22             : 
      23             : public:
      24             :   AliAODcascade();
      25             :   
      26             :   AliAODcascade(const AliAODcascade& rSource);
      27             :   
      28             :   AliAODcascade( AliAODVertex* rAODVertexXi,  // No "const" param, constructor "TRef(const TObject*)" doesn't exist.
      29             :                       Int_t         rChargeXi,
      30             :                       Double_t      rDcaXiDaughters,
      31             :                       Double_t      rDcaXiToPrimVertex,
      32             :                       Double_t      rDcaBachToPrimVertex,
      33             :                 const Double_t*     rMomBach,
      34             :                 
      35             :                  AliAODVertex* rAODVertexV0,  // No "const" param, see above.
      36             :                       Double_t      rDcaV0Daughters,    
      37             :                       Double_t      rDcaV0ToPrimVertex, 
      38             :                 const Double_t*     rMomPos,            
      39             :                 const Double_t*     rMomNeg,
      40             :                       Double_t*     rDcaDaughterToPrimVertex ); // const? -> Need agreement at AliAODRecoDecay level
      41             : 
      42             :                 
      43             :   AliAODcascade( AliAODVertex* rAODVertexXi,  // No "const" param, see above.
      44             :                       Int_t         rChargeXi,
      45             :                       Double_t      rDcaXiDaughters,
      46             :                       Double_t      rDcaXiToPrimVertex,
      47             :                       Double_t      rDcaBachToPrimVertex,
      48             :                 const Double_t*     rMomBach,
      49             :                 const AliAODv0&     rAODv0 );
      50             :                 
      51             :                 
      52             :                 
      53             :   virtual ~AliAODcascade();
      54             : 
      55             :   AliAODcascade& operator=(const AliAODcascade& rSource);
      56             :   
      57             :   void  Fill(AliAODVertex* rAODVertexXi,  // No "const" param, see above.
      58             :                       Int_t     rChargeXi,
      59             :                       Double_t  rDcaXiDaughters,
      60             :                       Double_t  rDcaXiToPrimVertex,
      61             :                       Double_t  rDcaBachToPrimVertex,
      62             :                 const Double_t* rMomBach,
      63             :                         
      64             :                 AliAODVertex*   rAODVertexV0, // No "const" param, see above.
      65             :                       Double_t  rDcaV0Daughters,
      66             :                       Double_t  rDcaV0ToPrimVertex,
      67             :                 const Double_t* rMomPos,
      68             :                 const Double_t* rMomNeg,
      69             :                       Double_t* rDcaDaughterToPrimVertex ); // const? -> Need agreement at AliAODRecoDecay level
      70             :   
      71             : //   void  Fill(   AliAODVertex*   rAODVertexXi, 
      72             : //                       Int_t     rChargeXi,
      73             : //                    Double_t  rDcaXiDaughters,
      74             : //                    Double_t  rDcaXiToPrimVertex,
      75             : //                    Double_t  rDcaBachToPrimVertex,
      76             : //              const Double_t* rMomBach,
      77             : //              const AliAODv0& rAODv0  );          // -> To be implemented ...       
      78             :                       
      79             :                       
      80             :   void  ResetXi();                                       
      81             :   void  PrintXi(const Double_t& rPrimVtxX, 
      82             :                 const Double_t& rPrimVtxY, 
      83             :                 const Double_t& rPrimVtxZ) const; 
      84             : 
      85             : // ----
      86             :   Int_t    ChargeXi()                const;
      87             :   Int_t    GetBachID()               const;
      88           0 :   Int_t    GetLabel()                const {return -1;}
      89             :   
      90             :   AliAODVertex* GetDecayVertexXi()   const; 
      91             :   Double_t DecayVertexXiX()          const;
      92             :   Double_t DecayVertexXiY()          const;
      93             :   Double_t DecayVertexXiZ()          const;
      94             :   Double_t Chi2Xi()                  const;
      95             :     
      96             :   Double_t DcaBachToPrimVertex() const;
      97             :   Double_t DcaXiDaughters()          const;
      98             :   Double_t DcaXiToPrimVertex()       const;
      99             :   Double_t DcaXiToPrimVertex(const Double_t& rPrimVtxX, // hopefully, temporary method ...
     100             :                              const Double_t& rPrimVtxY, 
     101             :                              const Double_t& rPrimVtxZ) const;
     102             :   Double_t CosPointingAngleXi(const Double_t& rPrimVtxX, 
     103             :                               const Double_t& rPrimVtxY, 
     104             :                               const Double_t& rPrimVtxZ) const;  
     105             :   
     106             :   Double_t DecayLengthV0()           const;
     107             :   Double_t DecayLengthXi(const Double_t& rPrimVtxX, 
     108             :                          const Double_t& rPrimVtxY, 
     109             :                          const Double_t& rPrimVtxZ) const;
     110             :                         
     111             :   Double_t MomBachX()       const;
     112             :   Double_t MomBachY()       const;
     113             :   Double_t MomBachZ()       const;
     114             :   
     115             :   Double_t MomXiX()         const;
     116             :   Double_t MomXiY()         const;
     117             :   Double_t MomXiZ()         const;
     118             : 
     119             : // ---- 
     120             :   Double_t Ptot2Bach()      const;
     121             :   Double_t Ptot2Xi()        const;
     122             :   Double_t Pt2Xi()          const;
     123             :   Double_t MomBachAlongXi() const;
     124             :   Double_t MomV0AlongXi()   const;
     125             :   Double_t AlphaXi()        const;
     126             :   Double_t PtArmXi()        const;
     127             :   Double_t EBachPion()      const;
     128             :   Double_t EBachKaon()      const;
     129             :   Double_t EXi()            const;
     130             :   Double_t EOmega()         const;
     131             :   Double_t MassXi()         const;
     132             :   Double_t MassOmega()      const;
     133             :   Double_t RapXi()          const;
     134             :   Double_t RapOmega()       const;
     135             : 
     136             : protected:
     137             : 
     138             :   TRef          fDecayVertexXi;           // ref to decay vertex of the cascade (Xi vertex)
     139             :   Short_t       fChargeXi;                // charge of Xi
     140             :     
     141             :   Double32_t    fDcaXiDaughters;          // dca between Xi daughters
     142             :   Double32_t    fDcaXiToPrimVertex;       // dca of Xi to primary vertex 
     143             :   Double32_t    fDcaBachToPrimVertex; // dca of bachelor to primary vertex 
     144             :   
     145             :   Double32_t    fMomBachX;            // momemtum of bachelor along X
     146             :   Double32_t    fMomBachY;            // momemtum of bachelor along Y
     147             :   Double32_t    fMomBachZ;            // momemtum of bachelor along Z
     148             :   
     149         174 :   ClassDef(AliAODcascade,1)   
     150             : };
     151             : 
     152             : //-----------------------------------------------------------
     153             : 
     154           0 : inline Int_t    AliAODcascade::ChargeXi()   const     {return fChargeXi; }
     155             : 
     156           0 : inline AliAODVertex* AliAODcascade::GetDecayVertexXi() const { return  (AliAODVertex*)fDecayVertexXi.GetObject(); }
     157           0 : inline Double_t AliAODcascade::DecayVertexXiX() const {return GetDecayVertexXi()->GetX(); }
     158           0 : inline Double_t AliAODcascade::DecayVertexXiY() const {return GetDecayVertexXi()->GetY(); }
     159           0 : inline Double_t AliAODcascade::DecayVertexXiZ() const {return GetDecayVertexXi()->GetZ(); }
     160             : 
     161           0 : inline Double_t AliAODcascade::Chi2Xi()         const {return GetDecayVertexXi()->GetChi2(); }
     162             : 
     163           0 : inline Double_t AliAODcascade::DcaBachToPrimVertex() const {return fDcaBachToPrimVertex;}
     164           0 : inline Double_t AliAODcascade::DcaXiDaughters()          const {return fDcaXiDaughters;}
     165           0 : inline Double_t AliAODcascade::DcaXiToPrimVertex()       const {return fDcaXiToPrimVertex;}
     166             : 
     167             : inline Double_t AliAODcascade::DecayLengthV0() const {
     168           0 :     return ::sqrt(::pow(DecayVertexV0X() - DecayVertexXiX(),2) +
     169           0 :                   ::pow(DecayVertexV0Y() - DecayVertexXiY(),2) +
     170           0 :                   ::pow(DecayVertexV0Z() - DecayVertexXiZ(),2));
     171             : }
     172             : 
     173             : inline Double_t AliAODcascade::DecayLengthXi(const Double_t& rPrimVtxX, 
     174             :                                              const Double_t& rPrimVtxY, 
     175             :                                              const Double_t& rPrimVtxZ) const {
     176           0 :   return ::sqrt(::pow(DecayVertexXiX() - rPrimVtxX,2) +
     177           0 :                 ::pow(DecayVertexXiY() - rPrimVtxY,2) +
     178           0 :                 ::pow(DecayVertexXiZ() - rPrimVtxZ,2));
     179             : }
     180             : 
     181           0 : inline Double_t AliAODcascade::MomBachX() const {return fMomBachX;}
     182           0 : inline Double_t AliAODcascade::MomBachY() const {return fMomBachY;}
     183           0 : inline Double_t AliAODcascade::MomBachZ() const {return fMomBachZ;}
     184             : 
     185           0 : inline Double_t AliAODcascade::MomXiX() const {return MomV0X()+fMomBachX;}
     186           0 : inline Double_t AliAODcascade::MomXiY() const {return MomV0Y()+fMomBachY;}
     187           0 : inline Double_t AliAODcascade::MomXiZ() const {return MomV0Z()+fMomBachZ;}
     188             : 
     189             : inline Double_t AliAODcascade::Ptot2Bach() const {
     190           0 :   return (::pow(fMomBachX,2) + ::pow(fMomBachY,2) + ::pow(fMomBachZ,2) );
     191             : }
     192           0 : inline Double_t AliAODcascade::Ptot2Xi() const {return ( Pt2Xi() + ::pow(MomXiZ(),2) );}
     193             : inline Double_t AliAODcascade::Pt2Xi() const {
     194           0 :   return (::pow(MomXiX(),2) + ::pow(MomXiY(),2) );
     195             : }
     196             : 
     197             : inline Double_t AliAODcascade::MomBachAlongXi() const {
     198           0 :   Double_t rPtot2Xi = Ptot2Xi();
     199           0 :   if (rPtot2Xi)
     200           0 :     return (MomBachX()*MomXiX() +
     201           0 :             MomBachY()*MomXiY() +
     202           0 :             MomBachZ()*MomXiZ()) / ::sqrt(rPtot2Xi);
     203           0 :   else return 0.;
     204           0 : }
     205             : 
     206             : inline Double_t AliAODcascade::MomV0AlongXi() const {
     207           0 :   Double_t rPtot2Xi = Ptot2Xi();
     208           0 :   if (rPtot2Xi)
     209           0 :     return (MomV0X()*MomXiX() +
     210           0 :             MomV0Y()*MomXiY() +
     211           0 :             MomV0Z()*MomXiZ()) / ::sqrt(rPtot2Xi);
     212           0 :   return 0.;
     213           0 : }
     214             : 
     215             : inline Double_t AliAODcascade::AlphaXi() const {
     216           0 :   Double_t rMomV0AlongXi   = MomV0AlongXi();
     217           0 :   Double_t rMomBachAlongXi = MomBachAlongXi();
     218             : 
     219           0 :   return (((Float_t) ChargeXi()) * (rMomBachAlongXi - rMomV0AlongXi)/
     220           0 :                                    (rMomBachAlongXi + rMomV0AlongXi));
     221             : }
     222             : 
     223             : inline Double_t AliAODcascade::PtArmXi() const {
     224           0 :   return ::sqrt(Ptot2Bach()-MomBachAlongXi()*MomBachAlongXi());
     225             : }
     226             : 
     227             : inline Double_t AliAODcascade::MassXi() const {
     228           0 :   return ::sqrt(::pow(ELambda()+EBachPion(),2)-Ptot2Xi());
     229             : }
     230             : 
     231             : inline Double_t AliAODcascade::MassOmega() const {
     232           0 :   return ::sqrt(::pow(ELambda()+EBachKaon(),2)-Ptot2Xi());
     233             : }
     234             : 
     235             : inline Double_t AliAODcascade::RapXi() const {
     236           0 :   Double_t exi = EXi();
     237           0 :   Double_t rMomXiZ = MomXiZ();
     238           0 :   return 0.5*::log((exi+rMomXiZ)/(exi-rMomXiZ));
     239             : }
     240             : 
     241             : inline Double_t AliAODcascade::RapOmega() const {
     242           0 :   Double_t eom = EOmega();
     243           0 :   Double_t rMomXiZ = MomXiZ();
     244           0 :   return 0.5*::log((eom+rMomXiZ)/(eom-rMomXiZ));
     245             : }
     246             : 
     247             : #endif

Generated by: LCOV version 1.11