]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG/muon/AliMuonInfoStoreMC.h
Updates to run with deltas (L. Cunqueiro)
[u/mrichter/AliRoot.git] / PWG / 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 /* $Id$ */ 
8
9 //***********************************************************
10 // Class AliMuonInfoStoreRD
11 // class used to extract and store info of MC particle
12 // Author: X-M. Zhang, zhang@clermont.in2p3.fr
13 //                     zhangxm@iopp.ccnu.edu.cn
14 //***********************************************************
15
16 #include <TString.h>
17 #include <TParticle.h>
18 #include <TLorentzVector.h>
19 #include <TClonesArray.h>
20
21 #include "AliMCEventHandler.h"
22 #include "AliStack.h"
23 #include "AliAODMCParticle.h"
24 #include "AliESDEvent.h"
25 #include "AliESDMuonTrack.h"
26 #include "AliAODTrack.h"
27 #include "AliMuonInfoStoreRD.h"
28 #include "AliMCEvent.h"
29
30 class AliMuonInfoStoreMC : public AliMuonInfoStoreRD {
31  public:
32
33   AliMuonInfoStoreMC();
34   AliMuonInfoStoreMC(AliAODTrack     *trkAOD, AliMCEvent *mcEvent, Bool_t full=kFALSE);
35   AliMuonInfoStoreMC(AliESDMuonTrack *trkESD, AliMCEvent *mcEvent, Bool_t full=kFALSE);
36   AliMuonInfoStoreMC(const AliMuonInfoStoreMC &src);
37   AliMuonInfoStoreMC& operator=(const AliMuonInfoStoreMC &src);
38   virtual ~AliMuonInfoStoreMC();
39
40   Int_t  ParentFlavour(Int_t i=0)    const;
41   Bool_t IsMotherAResonance(Int_t i) const;
42
43   TLorentzVector LorentzP()         const { return fLorentzP; }
44   Int_t    Source()                 const { return fSource; }
45   Int_t    TrackIndex()             const { return fTrackIndex; }
46   Int_t    TrackPDGCode()           const { return fTrackPDGCode; }
47   Int_t    ParentsN()               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 Int_t SourcesN()            { return fgkSourcesN;             }
57
58  private:
59
60   void SetMCInfoAOD(AliMCEvent *mcEvent, Int_t label);
61   void SetMCInfoESD(AliMCEvent *mcEvent, Int_t label);
62   void FillHistoryQuarksAOD(AliMCEvent *mcEvent, Int_t lineM);
63   void FillHistoryQuarksESD(AliMCEvent *mcEvent, Int_t lineM);
64   Int_t SelectHFMuon();
65
66   Bool_t IsDiquark(Int_t pdg);
67   void ResetQuarkInfo();
68
69   static const TString fgkStdBranchName;  // Standard branch name
70   static const Int_t   fgkSourcesN;       // num. of muon sources
71
72   Bool_t fIsFull;            // whether to use full mode (Pb-Pb)
73   TLorentzVector fLorentzP;  // lorentz momentum of particle
74   Int_t fTrackIndex;         // index of the MC particle
75   Int_t fTrackPDGCode;       // PDG code of the MC particle
76   Int_t fSource;  // = 0, mu<-b 
77                   // = 1, mu<-c 
78                   // = 2, primary mu
79                   // = 3, secondary mu
80                   // = 4, not mu
81                   // = 5, unidentified track
82
83   Int_t fParentIndex[5];    // index of parents
84   Int_t fParentPDGCode[5];  // PDG code of parents
85   Int_t fNParents;          // num. of parents
86   Bool_t fOscillation;      // flag of oscillation
87
88   Int_t fQuarkIndex[4];    // index of quarks
89   Int_t fQuarkPDGCode[4];  // PDG code of quarks
90
91   Double_t fWeight;  // for PbPb collisoions
92
93   ClassDef(AliMuonInfoStoreMC, 5);
94 };
95
96 #endif