]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG2/RESONANCES/AliRsnMother.h
fixed sig.segv
[u/mrichter/AliRoot.git] / PWG2 / RESONANCES / AliRsnMother.h
1 //
2 // Class AliRsnMother
3 //
4 // Implementation of a pair of tracks, for several purposes
5 // - computing the total 4-momentum & inv. mass for output histos filling
6 // - evaluating cut checks on the pair of particles
7 // - evaluating any kind of kinematic value over their sum
8 //
9 // authors: Martin Vala (martin.vala@cern.ch)
10 //          Alberto Pulvirenti (alberto.pulvirenti@ct.infn.it)
11 //
12
13 #ifndef ALIRSNMOTHER_H
14 #define ALIRSNMOTHER_H
15
16 #include <TLorentzVector.h>
17
18 #include "AliRsnEvent.h"
19 #include "AliRsnDaughter.h"
20
21 class AliRsnPairDef;
22
23 class AliRsnMother : public TObject
24 {
25   public:
26
27     AliRsnMother();
28     AliRsnMother(const AliRsnMother &obj);
29     AliRsnMother& operator=(const AliRsnMother &obj);
30     virtual ~AliRsnMother();
31     
32     void              SetDefaultMass(Double_t mass) {fDefaultMass = mass; fRef.SetXYZM(fSum.X(),fSum.Y(),fSum.Z(),mass); fRefMC.SetXYZM(fSumMC.X(),fSumMC.Y(),fSumMC.Z(),mass);}
33     TLorentzVector&   Sum()   {return fSum;}
34     TLorentzVector&   Ref()   {return fRef;}
35     TLorentzVector&   SumMC() {return fSumMC;}
36     TLorentzVector&   RefMC() {return fRefMC;}
37     Double_t          OpeningAngle(Bool_t mc = kFALSE) const {if (fDaughter[0] && fDaughter[1]) return fDaughter[0]->P(mc).Angle(fDaughter[1]->P(mc).Vect()); return 1E6;}
38     Double_t          AngleTo(AliRsnDaughter track, Bool_t mc = kFALSE) const {return fSum.Angle(track.P(mc).Vect());}
39     Double_t          CosThetaStar(Bool_t first = kTRUE, Bool_t useMC = kFALSE);
40
41     AliRsnDaughter*   GetDaughter   (const Int_t &index) const {if (index==0||index==1) return fDaughter[index]; return 0x0;}
42     AliRsnDaughter&   GetDaughterRef(const Int_t &index) const {if (index==1) return (*fDaughter[1]); return (*fDaughter[0]);}
43
44     Bool_t            IsLabelEqual() const {return abs(fDaughter[0]->GetLabel()) == abs(fDaughter[1]->GetLabel());}
45     Bool_t            IsIndexEqual() const {return (fDaughter[0]->GetID() == fDaughter[1]->GetID());}
46     Int_t             CommonMother(Int_t &m0, Int_t &m1) const;
47     Int_t             CommonMother() const {Int_t d0, d1; return CommonMother(d0,d1);}
48
49     void              SetDaughters(AliRsnDaughter * const daughter1, Double_t mass1, AliRsnDaughter * const daughter2, Double_t mass2);
50     void              ResetPair();
51     void              PrintInfo(const Option_t *option = "ALL") const;
52     Bool_t            CheckPair() const;
53     Bool_t            MatchesDef(AliRsnPairDef *pairDef);
54
55   private:
56
57     Bool_t           fUseMC;            // choose if momenta are taken from ESD/AOD or MC
58     Double_t         fDefaultMass;      // nominal resonance mass
59     AliRsnDaughter  *fDaughter[2];      // elements of the pair
60     TLorentzVector   fSum;              // sum computed from the two daughters
61     TLorentzVector   fSumMC;            // sum computed from the two daughters
62     TLorentzVector   fRef;              // a 4-vector with same momentum as the sum but the nominal mass of mother
63     TLorentzVector   fRefMC;            // a 4-vector with same momentum as the sum but the nominal mass of mother
64
65     ClassDef(AliRsnMother,1)
66 };
67
68 #endif