Changed scripts for new TrainSetup
[u/mrichter/AliRoot.git] / PWGLF / RESONANCES / AliRsnMother.h
1 #ifndef ALIRSNMOTHER_H
2 #define ALIRSNMOTHER_H
3
4 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
5  * See cxx source for full Copyright notice                               */
6
7 ////////////////////////////////////////////////////////////////////////////////
8 //
9 //  Interface to candidate resonance decaying into 2 bodies.
10 //
11 ////////////////////////////////////////////////////////////////////////////////
12
13 #include <TMath.h>
14 #include <TLorentzVector.h>
15
16 #include "AliRsnDaughter.h"
17
18 class AliRsnEvent;
19
20 class AliRsnMother : public TObject {
21 public:
22
23    AliRsnMother() : fRefEvent(0), fSum(), fSumMC(), fRef(), fRefMC() {fDaughter[0] = fDaughter[1] = 0;}
24    AliRsnMother(const AliRsnMother &obj);
25    AliRsnMother &operator=(const AliRsnMother &obj);
26    virtual ~AliRsnMother();
27
28    // setters (4-vectors cannot be set)
29    void  Reset();
30    void  SetDaughter(Int_t i, AliRsnDaughter *d) {fDaughter[CkID(i)] = d;}
31    void  SetRefEvent(AliRsnEvent *event)         {fRefEvent = event;}
32
33    // getters
34    AliRsnEvent      *GetRefEvent()               {return fRefEvent;}
35    AliRsnDaughter   *GetDaughter(const Int_t &i) {return fDaughter[CkID(i)];}
36    TLorentzVector   &Sum(Bool_t mc)              {return (mc ? fSumMC : fSum);}
37    TLorentzVector   &Ref(Bool_t mc)              {return (mc ? fRefMC : fRef);}
38    Bool_t            GetResolution(Double_t &value);
39    Double_t          Rapidity(Bool_t mc)         {if (mc) return fRefMC.Rapidity(); else return fRef.Rapidity();}
40
41    // checks
42    Bool_t    IsLabelEqual()  const {return TMath::Abs(fDaughter[0]->GetLabel()) == TMath::Abs(fDaughter[1]->GetLabel());}
43    Bool_t    IsIndexEqual()  const {return (fDaughter[0]->GetID() == fDaughter[1]->GetID());}
44    Bool_t    IsOwnerEqual()  const {return (fDaughter[0]->GetOwnerEvent() == fDaughter[1]->GetOwnerEvent());}
45    Int_t     CommonMother()  const;
46
47    // angles
48    Double_t  AngleTo(AliRsnDaughter *track, Bool_t mc = kFALSE) {return track->P(mc).Angle(Sum(mc).Vect());}
49    Double_t  AngleToLeading(Bool_t &success);
50
51    // computations
52    void      ComputeSum(Double_t mass1, Double_t mass2, Double_t motherMass);
53    Double_t  CosThetaStar(Bool_t first = kTRUE, Bool_t useMC = kFALSE);
54    void      PrintInfo(const Option_t *option = "ALL") const;
55    Bool_t    CheckPair(Bool_t checkMC = kFALSE) const;
56
57 private:
58
59    Int_t CkID(Int_t i) const {if (i < 1) return 0; else return 1;}
60
61    AliRsnDaughter  *fDaughter[2];      // elements of the pair
62    AliRsnEvent     *fRefEvent;         // reference event
63    TLorentzVector   fSum;              // sum computed from the two daughters (rec)
64    TLorentzVector   fSumMC;            // sum computed from the two daughters (sim)
65    TLorentzVector   fRef;              // same to sum, but with fixed mass hypothesis (rec)
66    TLorentzVector   fRefMC;            // same to sum, but with fixed mass hypothesis (sim)
67
68    ClassDef(AliRsnMother, 1)
69 };
70
71 #endif