Update of the Xiaoming code for pp900 first muon analysis. Fixing wanirngs and violti...
[u/mrichter/AliRoot.git] / PWG3 / muon / AliMuonInfoStoreMC.h
1 #ifndef ALIMUONINFOSTOREMC_H
2 #define ALIMUONINFOSTOREMC_H
3
4 /* Copyright(c) 1998-2006, ALICE Experiment at CERN, All rights reserved. *
5  * See cxx source for full Copyright notice                               */
6
7 //***********************************************************
8 // Class AliMuonInfoStoreRD
9 // class used to extract and store info of MC particle
10 // Author: X-M. Zhang, zhang@clermont.in2p3.fr
11 //                     zhangxm@iopp.ccnu.edu.cn
12 //***********************************************************
13
14 #include <TString.h>
15 #include <TParticle.h>
16 #include <TLorentzVector.h>
17 #include <TClonesArray.h>
18
19 #include "AliMCEventHandler.h"
20 #include "AliStack.h"
21 #include "AliAODMCParticle.h"
22 #include "AliESDEvent.h"
23 #include "AliESDMuonTrack.h"
24 #include "AliAODTrack.h"
25 #include "AliMuonInfoStoreRD.h"
26
27 class AliMuonInfoStoreMC : public AliMuonInfoStoreRD {
28  public:
29
30   AliMuonInfoStoreMC();
31   AliMuonInfoStoreMC(AliAODTrack *trkAOD, TClonesArray *mcClArr, Bool_t full=kFALSE);
32   AliMuonInfoStoreMC(AliESDMuonTrack *trkESD, AliESDEvent *esd, AliMCEventHandler *mcH, Bool_t full=kFALSE);
33   AliMuonInfoStoreMC(AliESDMuonTrack *trkESD, AliMCEventHandler *mcH, Bool_t full=kFALSE);
34   AliMuonInfoStoreMC(AliESDMuonTrack *trkESD, AliStack *stack);
35   AliMuonInfoStoreMC(const AliMuonInfoStoreMC &src);
36   AliMuonInfoStoreMC& operator=(const AliMuonInfoStoreMC &src);
37   virtual ~AliMuonInfoStoreMC();
38
39   Int_t ParentFlavour(Int_t i=0) const;
40   Bool_t IsMotherAResonance(Int_t i) const;
41   Bool_t IsAMuon() const { return (fSource>=0 && fSource!=4); }
42
43   TLorentzVector LorentzP()      const { return fLorentzP; }
44   Int_t MuonSource()             const { return fSource; }
45   Int_t TrackIndex()             const { return fTrackIndex; }
46   Int_t TrackPDGCode()           const { return fTrackPDGCode; }
47   Int_t NParents()               const { return fNParents; }
48   Int_t ParentIndex(Int_t i=0)   const { return (i<fNParents ? fParentIndex[i] : -1); }
49   Int_t ParentPDGCode(Int_t i=0) const { return (i<fNParents ? fParentPDGCode[i] : 0); }
50   Int_t QuarkIndex(Int_t i=0)    const { return (i<4 ? fQuarkIndex[i] : -1); }
51   Int_t QuarkPDGCode(Int_t i=0)  const { return (i<4 ? fQuarkPDGCode[i] : 0); }
52   Bool_t IsOscillation()         const { return fOscillation; }
53   Double_t Weight()              const { return fWeight; }
54
55   static const char* StdBranchName() { return fgkStdBranchName.Data(); }
56   static const Int_t NSources()      { return fgkNSources;             }
57
58  private:
59
60   AliAODMCParticle* FindTrackRef(AliAODTrack*     const trkAOD, TClonesArray* const mcClArr);
61   TParticle*        FindTrackRef(AliESDMuonTrack* const trkESD, AliMCEventHandler* const mcH);
62   TParticle*        FindTrackRef(AliESDMuonTrack* const trkESD, AliESDEvent* const esd, AliMCEventHandler* const mcH);
63   void SetMCInfo(AliAODMCParticle *pMC, TClonesArray* const mcClArr);
64   void SetMCInfo(TParticle *pMC, AliMCEventHandler *mcH);
65   void FillHistoryParents(Int_t lineM, TClonesArray* const mcClArr);
66   void FillHistoryParents(Int_t lineM, AliStack* const stack);
67   void FillHistoryQuarks(Int_t lineM, TClonesArray *mcClArr);
68   void FillHistoryQuarks(Int_t lineM, AliStack *stack);
69   Int_t SelectHFMuon();
70
71   Bool_t IsDiquark(Int_t pdg);
72   void ResetQuarkInfo();
73
74   static const TString fgkStdBranchName;  // Standard branch name
75   static const Int_t   fgkNSources;       // num. of muon sources
76
77   Bool_t fIsFull;            // whether to use full mode (Pb-Pb)
78   TLorentzVector fLorentzP;  // lorentz momentum of particle
79   Int_t fTrackIndex;         // index of the MC particle
80   Int_t fTrackPDGCode;       // PDG code of the MC particle
81   Int_t fSource;  // = 0, mu<-b 
82                   // = 1, mu<-c 
83                   // = 2, primary mu
84                   // = 3, secondary mu
85                   // = 4, not mu
86                   // = 5, unidentified track
87
88   Int_t fParentIndex[5];    // index of parents
89   Int_t fParentPDGCode[5];  // PDG code of parents
90   Int_t fNParents;          // num. of parents
91   Bool_t fOscillation;      // flag of oscillation
92
93   Int_t fQuarkIndex[4];    // index of quarks
94   Int_t fQuarkPDGCode[4];  // PDG code of quarks
95
96   Double_t fWeight;  // for PbPb collisoions
97
98   ClassDef(AliMuonInfoStoreMC, 3);
99 };
100
101 #endif