Update from Alberica. Addition of VZERO equalized signals and ZNC.
[u/mrichter/AliRoot.git] / MUON / AliMUONTrackLight.h
1 #ifndef ALIMUONTRACKLIGHT_H
2 #define ALIMUONTRACKLIGHT_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice                               */
5
6 /* $Id$ */
7 // Revision of includes 06/09/2006
8
9 /// \ingroup evaluation
10 /// \class AliMUONTrackLight
11 /// \brief Compact information for the muon generated tracks
12 /// 
13 /// Compact information for the muon generated tracks in the MUON arm 
14 /// useful at the last stage of the analysis chain
15 /// provides a link between the reconstructed track and the generated particle 
16 /// stores kinematical information at gen. and rec. level and 
17 /// the decay history of the muon, allowing the identification of the 
18 /// mother process 
19 /// 
20 /// To be used together with AliMUONPairLight
21 ///
22 /// \author This class was prepared by INFN Cagliari, July 2006
23 /// (authors: H.Woehri, A.de Falco)
24
25 // ROOT classes
26 #include "TLorentzVector.h"
27
28 class AliMUONTrack;
29 class AliESDMuonTrack;
30 class AliStack;
31 class TParticle;
32 class AliMUONVTrackStore;
33
34 class AliMUONTrackLight : public TObject {
35  public: 
36   AliMUONTrackLight(); 
37   AliMUONTrackLight(AliESDMuonTrack* muonTrack); 
38   AliMUONTrackLight(const AliMUONTrackLight &muonCopy);
39   AliMUONTrackLight& operator=(const AliMUONTrackLight&);
40   virtual ~AliMUONTrackLight(); 
41   
42   /// Set 4-momentum of the generated particle
43   void SetPGen(TLorentzVector pgen) {fPgen = pgen;}
44   /// Return 4-momentum of the generated particle  
45   TLorentzVector GetPGen() const {return fPgen;}
46   /// Set reconstructed 4-momentum
47   void SetPRec(TLorentzVector prec) {fPrec = prec;}
48   /// Return reconstructed 4-momentum 
49   TLorentzVector GetPRec() const {return fPrec;}
50   /// Set primary vertex position from the ITS
51   void SetVertex(Double_t *xyz) {for (Int_t i=0; i<3; i++) fXYZ[i]=xyz[i];}
52   /// Return primary vertex x position from the ITS 
53   Double_t GetX() const { return fXYZ[0]; } 
54   /// Return primary vertex y position from the ITS 
55   Double_t GetY() const { return fXYZ[1]; } 
56   /// Return primary vertex z position from the ITS 
57   Double_t GetZ() const { return fXYZ[2]; } 
58   /// Return  primary vertex position from the ITS
59   Double_t* GetVertex() { return fXYZ; } 
60   /// Set chi2 / ndf in the MUON track fit
61   void SetChi2(Double_t chi2) {fChi2=chi2;}
62   /// Return chi2 / ndf in the MUON track fit 
63   Double_t GetChi2() const { return fChi2; } 
64   /// Set weight assigned to the muon
65   void SetWeight(Double_t w) {fWeight=w;}
66   /// Return weight assigned to the muon 
67   Double_t GetWeight() const { return fWeight; } 
68   
69   /// Set muon charge 
70   void SetCharge(Int_t charge) {fCharge = charge;}
71   /// Return muon charge 
72   Int_t GetCharge() const {return fCharge;}
73   /// Return hadronised parents and grandparents 
74   Int_t GetParentPDGCode(Int_t index = 0) const { return fParentPDGCode[index]; } 
75   /// Return line of Pythia output for hadronised parents & grandparents 
76   Int_t GetParentPythiaLine(Int_t index = 0) const { return fParentPythiaLine[index]; } 
77   /// Return pdg of the string [0], quarks/gluons [1,2], sometimes proton [3] 
78   Int_t GetQuarkPDGCode(Int_t index = 0) const { return fQuarkPDGCode[index]; } 
79   /// Return line of Pythia output for string [0] and quarks [1,2], sometimes proton [3] 
80   Int_t GetQuarkPythiaLine(Int_t index = 0) const { return fQuarkPythiaLine[index]; } 
81   /// Return line of Pythia output for string [0] and quarks [1,2], sometimes proton [3] 
82   Int_t GetTrackPythiaLine() const {return fTrackPythiaLine;}
83   /// Return pdg code of the rec. track (in general will be a muon) 
84   Int_t GetTrackPDGCode() const {return fTrackPDGCode;}
85   /// Set line of kin. stack where rec. track (in general, the muon) is stored
86   void SetTrackPythiaLine(Int_t trackLine) {fTrackPythiaLine = trackLine;}
87   /// Set pdg code of the rec. track (in general will be a muon)
88   void SetTrackPDGCode(Int_t trackPdg) {fTrackPDGCode = trackPdg;}
89   void FillFromESD(AliESDMuonTrack* muonTrack, Double_t zvert=-9999);
90   void FillFromAliMUONTrack(AliMUONTrack *trackReco,Double_t zvert=-9999);
91   /// Return info if is a muon 
92   Bool_t IsAMuon() const { return (TMath::Abs(fTrackPDGCode)==13); }
93   Bool_t IsParentPionOrKaon(Int_t idParent = 0);
94   void SetPxPyPz(Double_t px, Double_t py, Double_t pz); 
95   /// Set flag for trigger 
96   void SetTriggered(Bool_t isTriggered) { fIsTriggered = isTriggered; } 
97   /// Return flag for trigger  
98   Bool_t IsTriggered() const { return fIsTriggered; } 
99   /// Return acually filled no. of *fragmented* parents 
100   Int_t GetNParents() const {return fNParents;}
101   void FillMuonHistory(AliStack *stack, TParticle *part);
102   Bool_t IsB0(Int_t intTest) const;//checks if the provided PDG code corresponds to a neutral B meson
103   Bool_t IsMotherAResonance(Int_t index=0) const;
104   /// Return flag for oscillation 
105   Bool_t GetOscillation() const {return fOscillation;}
106   virtual void PrintInfo(const Option_t* opt); //"H" muon's decay history
107   //"K" muon kinematics
108   //"A" all variables
109   Int_t GetParentFlavour(Int_t idParent=0) const;
110   Bool_t IsDiquark(Int_t pdg) const;
111 protected:
112   static const Int_t fgkNParentsMax = 5;   ///< maximum number of parents
113   TLorentzVector fPrec; ///< reconstructed 4-momentum
114   Double_t fXYZ[3];     ///< primary vertex position from the ITS 
115   Bool_t fIsTriggered;  ///< flag for trigger 
116   Int_t fCharge;        ///< muon charge 
117   Double_t fChi2;       ///< chi2 / ndf in the MUON track fit 
118   Float_t fCentr;       ///< centrality 
119   TLorentzVector fPgen;   ///< 4-momentum of the generated particle
120   Int_t fTrackPythiaLine; ///< line of kin. stack where rec. track (in general, the muon) is stored
121   Int_t fTrackPDGCode; ///< pdg code of the rec. track (in general will be a muon)
122   Int_t fParentPDGCode[fgkNParentsMax]; ///< hadronised parents and grandparents 
123   Int_t fParentPythiaLine[fgkNParentsMax];///< line of Pythia output for hadronised parents & grandparents
124   Int_t fQuarkPDGCode[4]; ///< pdg of the string [0], quarks/gluons [1,2], sometimes proton [3] 
125   Int_t fQuarkPythiaLine[4]; ///< line of Pythia output for string [0] and quarks [1,2], sometimes proton [3]
126   Bool_t fOscillation; ///< flag for oscillation
127   Int_t fNParents; ///< acually filled no. of *fragmented* parents
128   Double_t fWeight; ///< weight assigned to the muon
129   /// Set flag for oscillation
130   void SetOscillation(Bool_t oscillation) { fOscillation = oscillation; }
131   /// Set hadronised parents and grandparents 
132   void SetParentPDGCode(Int_t index, Int_t pdg) { fParentPDGCode[index] = pdg; } 
133   /// Set line of Pythia output for hadronised parents & grandparents
134   void SetParentPythiaLine(Int_t index, Int_t line) { fParentPythiaLine[index] = line; } 
135   /// Set pdg of the string [0], quarks/gluons [1,2], sometimes proton [3] 
136   void SetQuarkPDGCode(Int_t index, Int_t pdg){ fQuarkPDGCode[index] = pdg; }
137   /// Set line of Pythia output for string [0] and quarks [1,2], sometimes proton [3]
138   void SetQuarkPythiaLine(Int_t index, Int_t line){ fQuarkPythiaLine[index] = line; }
139   void ResetQuarkInfo();
140
141   ClassDef(AliMUONTrackLight,1)  /// Muon Track for analysis
142 }; 
143
144 #endif