Keep e+e- from pair production of primary gammas.
[u/mrichter/AliRoot.git] / PWG3 / muon / AliMCMuonTrack.h
1 #ifndef ALIMCMUONTRACK_H
2 #define ALIMCMUONTRACK_H
3
4 #include <TParticle.h>
5 #include <TLorentzVector.h>
6 #include <TClonesArray.h>
7
8 #include "AliMCEventHandler.h"
9 #include "AliStack.h"
10 #include "AliAODMCParticle.h"
11 #include "AliESDEvent.h"
12 #include "AliESDMuonTrack.h"
13 #include "AliAODTrack.h"
14 #include "AliAODMuonTrack.h"
15
16 class AliMCMuonTrack : public AliAODMuonTrack {
17  public:
18
19   AliMCMuonTrack();
20   AliMCMuonTrack(AliAODTrack *trkAOD, TClonesArray *mcClArr, Bool_t full=kFALSE);
21   AliMCMuonTrack(AliESDMuonTrack *trkESD, AliESDEvent *esd, AliMCEventHandler *mcH, Bool_t full=kFALSE);
22   AliMCMuonTrack(AliESDMuonTrack *trkESD, AliStack *stack);
23   virtual ~AliMCMuonTrack();
24
25   Int_t GetParentFlavour(Int_t i=0) const;
26   Bool_t IsMotherAResonance(Int_t i) const;
27   Bool_t IsAMuon() const { return (fSource>=0 && fSource!=4); }
28
29   TLorentzVector GetPGen() const { return fPGen; }
30   Int_t GetSource() const { return fSource; }
31   Int_t GetTrackIndex() const { return fTrackIndex; }
32   Int_t GetTrackPDGCode() const { return fTrackPDGCode; }
33   Int_t GetNParents() const { return fNParents; }
34   Int_t GetParentIndex(Int_t i=0) const { return (i<fNParents ? fParentIndex[i] : -1); }
35   Int_t GetParentPDGCode(Int_t i=0) const { return (i<fNParents ? fParentPDGCode[i] : 0); }
36   Int_t GetQuarkIndex(Int_t i=0) const { return (i<4 ? fQuarkIndex[i] : -1); }
37   Int_t GetQuarkPDGCode(Int_t i=0) const { return (i<4 ? fQuarkPDGCode[i] : 0); }
38   Bool_t IsOscillation() const { return fOscillation; }
39   Double_t GetWeight() const { return fWeight; }
40
41  private:
42
43   AliAODMCParticle* FindTrackRef(AliAODTrack *trkAOD, TClonesArray *mcClArr);
44   TParticle* FindTrackRef(AliESDMuonTrack *trkESD, AliESDEvent *esd, AliMCEventHandler *mcH);  // do not implement on official train
45   void SetMCInfo(AliAODMCParticle *pMC, TClonesArray *mcClArr);
46   void SetMCInfo(TParticle *pMC, AliMCEventHandler *mcH);
47   void FillHistoryParents(Int_t lineM, TClonesArray *mcClArr);
48   void FillHistoryParents(Int_t lineM, AliStack *stack);
49   void FillHistoryQuarks(Int_t lineM, TClonesArray *mcClArr);
50   void FillHistoryQuarks(Int_t lineM, AliStack *stack);
51   //AliMUONTrack* CovESDtoMuonTrack(AliESDMuonTrack &trkESD);  // do not implement on official train
52   Int_t SelectHFMuon();
53
54   Bool_t IsDiquark(Int_t pdg);
55   void ResetQuarkInfo();
56
57   static const Double_t fgkSigmaCut;
58
59   Bool_t fIsFull;
60   static const Int_t fgkNParentsMax = 5;
61   TLorentzVector fPGen;
62   Int_t fTrackIndex;
63   Int_t fTrackPDGCode;
64   Int_t fSource;  // = 0, mu<-b 
65                   // = 1, mu<-c 
66                   // = 2, primary mu
67                   // = 3, secondary mu
68                   // = 4, not mu
69
70   Int_t fParentIndex[fgkNParentsMax];
71   Int_t fParentPDGCode[fgkNParentsMax];
72   Int_t fNParents;
73   Bool_t fOscillation;
74
75   Int_t fQuarkIndex[4];
76   Int_t fQuarkPDGCode[4];
77
78   Double_t fWeight;  // for PbPb collisoions
79
80   ClassDef(AliMCMuonTrack, 2);
81 };
82
83 #endif