Modified macros for phi analysis: improved pseudorapidity cut flexibility (A.Knospe)
[u/mrichter/AliRoot.git] / PWGLF / RESONANCES / AliRsnMiniPair.h
1 #ifndef ALIRSNMINIPAIR_H
2 #define ALIRSNMINIPAIR_H
3
4 //
5 // This object is used as lightweight temporary container
6 // of all information needed from any input object and
7 // useful for resonance analysis.
8 //
9
10 #include <TObject.h>
11 #include <TLorentzVector.h>
12
13 class AliRsnMiniParticle;
14
15 class AliRsnMiniPair : public TObject {
16 public:
17
18    AliRsnMiniPair() : fMother(-1), fMotherPDG(0) { }
19
20    Int_t          &Mother()    {return fMother;}
21    Int_t          &MotherPDG() {return fMotherPDG;}
22    void            Fill(AliRsnMiniParticle *p1, AliRsnMiniParticle *p2, Double_t m1, Double_t m2, Double_t refMass);
23    void            FillRef(Double_t mass);
24    void            InvertP(Bool_t first);
25
26    Int_t           ID(Bool_t mc) const {if (mc) return 1; else return 0;}
27
28    TLorentzVector &P1 (Bool_t mc) {return fP1 [ID(mc)];}
29    TLorentzVector &P2 (Bool_t mc) {return fP2 [ID(mc)];}
30    TLorentzVector &Sum(Bool_t mc) {return fSum[ID(mc)];}
31    TLorentzVector &Ref(Bool_t mc) {return fRef[ID(mc)];}
32
33    Double_t        Pt(Bool_t mc)             const  {return fSum[ID(mc)].Pt();}
34    Double_t        Pz(Bool_t mc)             const  {return fSum[ID(mc)].Pz();}
35    Double_t        Eta(Bool_t mc)            const  {return fSum[ID(mc)].Eta();}
36    Double_t        InvMass(Bool_t mc)        const  {return fSum[ID(mc)].M();}
37    Double_t        InvMassRes()              const;
38    Double_t        InvMassDiff()             const;
39    Double_t        Mt(Bool_t mc)             const  {return fRef[ID(mc)].Mt();}
40    Double_t        Y(Bool_t mc)              const  {return fRef[ID(mc)].Rapidity();}
41    Double_t        PtRatio(Bool_t mc)        const;
42    Double_t        DipAngle(Bool_t mc)       const;
43    Double_t        CosThetaStar(Bool_t mc);
44
45 private:
46
47    TLorentzVector fP1 [2];    // 1st daughter momentum
48    TLorentzVector fP2 [2];    // 2nd daughter momentum
49    TLorentzVector fSum[2];    // sum of momenta
50    TLorentzVector fRef[2];    // same as 'fSum' but with nominal resonance mass
51
52    Int_t          fMother;    // label of mothers (when common)
53    Int_t          fMotherPDG; // PDG code of mother (when common)
54
55    ClassDef(AliRsnMiniPair,1)
56 };
57
58 inline void AliRsnMiniPair::FillRef(Double_t mass)
59 {
60 //
61 // Fill ref 4-vectors using the passed mass and the values in 'sum'
62 //
63
64    Int_t i;
65    for (i = 0; i < 2; i++) {
66       fRef[i].SetXYZM(fSum[i].X(), fSum[i].Y(), fSum[i].Z(), mass);
67    }
68 }
69
70 inline Double_t AliRsnMiniPair::InvMassRes() const
71 {
72 //
73 // Return invariant mass resolution
74 //
75
76    if (fSum[1].M() <= 0.0) return 1E20;
77
78    return (fSum[0].M() - fSum[1].M()) / fSum[1].M();
79 }
80
81 inline Double_t AliRsnMiniPair::InvMassDiff() const
82 {
83 //
84 // Return invariant mass resolution
85 //
86
87    if (fSum[1].M() <= 0.0) return 1E20;
88
89    return (fSum[0].M() - fSum[1].M());
90 }
91
92 inline Double_t AliRsnMiniPair::PtRatio(Bool_t mc) const
93 {
94 //
95 // Return ratio of transverse momenta of daughters
96 //
97
98    Double_t num = TMath::Abs(fP1[ID(mc)].Perp() - fP2[ID(mc)].Perp());
99    Double_t den = TMath::Abs(fP1[ID(mc)].Perp() + fP2[ID(mc)].Perp());
100
101    if (den <= 0.0) return 1E20;
102
103    return num / den;
104 }
105
106 inline Double_t AliRsnMiniPair::DipAngle(Bool_t mc) const
107 {
108 //
109 // Opening angle in a Z-T space
110 //
111
112    const TLorentzVector &p1 = fP1[ID(mc)];
113    const TLorentzVector &p2 = fP2[ID(mc)];
114
115    return ((p1.Perp() * p2.Perp() + p1.Z() * p2.Z()) / p1.Mag() / p2.Mag());
116 }
117
118 #endif