]>
Commit | Line | Data |
---|---|---|
03d23846 | 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); | |
6aaeb33c | 24 | void InvertP(Bool_t first); |
03d23846 | 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 Mt(Bool_t mc) const {return fRef[ID(mc)].Mt();} | |
39 | Double_t Y(Bool_t mc) const {return fRef[ID(mc)].Rapidity();} | |
40 | Double_t PtRatio(Bool_t mc) const; | |
41 | Double_t DipAngle(Bool_t mc) const; | |
42 | Double_t CosThetaStar(Bool_t mc); | |
43 | ||
44 | private: | |
45 | ||
46 | TLorentzVector fP1 [2]; // 1st daughter momentum | |
47 | TLorentzVector fP2 [2]; // 2nd daughter momentum | |
48 | TLorentzVector fSum[2]; // sum of momenta | |
49 | TLorentzVector fRef[2]; // same as 'fSum' but with nominal resonance mass | |
50 | ||
51 | Int_t fMother; // label of mothers (when common) | |
52 | Int_t fMotherPDG; // PDG code of mother (when common) | |
53 | ||
54 | ClassDef(AliRsnMiniPair,1) | |
55 | }; | |
56 | ||
57 | inline void AliRsnMiniPair::FillRef(Double_t mass) | |
58 | { | |
59 | // | |
60 | // Fill ref 4-vectors using the passed mass and the values in 'sum' | |
61 | // | |
62 | ||
63 | Int_t i; | |
64 | for (i = 0; i < 2; i++) { | |
65 | fRef[i].SetXYZM(fSum[i].X(), fSum[i].Y(), fSum[i].Z(), mass); | |
66 | } | |
67 | } | |
68 | ||
69 | inline Double_t AliRsnMiniPair::InvMassRes() const | |
70 | { | |
71 | // | |
72 | // Return invariant mass resolution | |
73 | // | |
74 | ||
75 | if (fSum[1].M() <= 0.0) return 1E20; | |
76 | ||
77 | return (fSum[0].M() - fSum[1].M()) / fSum[1].M(); | |
78 | } | |
79 | ||
80 | inline Double_t AliRsnMiniPair::PtRatio(Bool_t mc) const | |
81 | { | |
82 | // | |
83 | // Return ratio of transverse momenta of daughters | |
84 | // | |
85 | ||
86 | Double_t num = TMath::Abs(fP1[ID(mc)].Perp() - fP2[ID(mc)].Perp()); | |
87 | Double_t den = TMath::Abs(fP1[ID(mc)].Perp() + fP2[ID(mc)].Perp()); | |
88 | ||
89 | if (den <= 0.0) return 1E20; | |
90 | ||
91 | return num / den; | |
92 | } | |
93 | ||
94 | inline Double_t AliRsnMiniPair::DipAngle(Bool_t mc) const | |
95 | { | |
96 | // | |
97 | // Opening angle in a Z-T space | |
98 | // | |
99 | ||
100 | const TLorentzVector &p1 = fP1[ID(mc)]; | |
101 | const TLorentzVector &p2 = fP2[ID(mc)]; | |
102 | ||
103 | return ((p1.Perp() * p2.Perp() + p1.Z() * p2.Z()) / p1.Mag() / p2.Mag()); | |
104 | } | |
105 | ||
106 | #endif |