]>
Commit | Line | Data |
---|---|---|
36f902bc | 1 | #ifndef ALIAODMCNUCLEXREPLICATOR_H |
2 | #define ALIAODMCNUCLEXREPLICATOR_H | |
3 | ||
4 | /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * | |
5 | * See cxx source for full Copyright notice */ | |
6 | ||
7 | #ifndef ALIDAODBRANCHREPLICATOR_H | |
8 | # include "AliAODBranchReplicator.h" | |
9 | #endif | |
10 | #ifndef ROOT_TExMap | |
11 | # include "TExMap.h" | |
12 | #endif | |
13 | ||
14 | ||
15 | // | |
16 | // Implementation of a branch replicator | |
17 | // to produce aods with only few branches. | |
18 | // | |
19 | // Authors: S. Bufalino (stefania.bufalino@cern.ch) | |
20 | // R. Lea (ramona.lea@cern.ch) | |
21 | // | |
22 | // Based on AliAODMuonReplicator.h (L. Aphecetche (Subatech)) | |
23 | ||
24 | //class AliAnalysisCuts; | |
25 | class TClonesArray; | |
26 | class AliAODMCHeader; | |
27 | class AliAODVZERO; | |
28 | class AliAODTZERO; | |
29 | //class AliPIDResponse; | |
30 | class AliESDv0; | |
31 | class TArrayI; | |
32 | class AliAODv0; | |
33 | class TRefArray; | |
34 | class AliAODRecoDecay; | |
35 | class AliAODRecoDecayLF; | |
36 | class AliAODRecoDecayLF2Prong; | |
37 | class AliVertexerTracks; | |
38 | class AliAODHeader; | |
39 | ||
40 | class AliESDVertex; | |
41 | class AliESDtrack; | |
42 | class AliVEvent; | |
43 | class AliAODVertex; | |
44 | class AliVertexerTracks; | |
45 | class AliESDv0; | |
46 | class AliAODv0; | |
47 | ||
48 | class TH1F; | |
49 | ||
50 | // TODO add new constructor for the 3 prong case (it will write an AliAODRecoDecayLF3Prong | |
51 | ||
52 | class AliAODMCNuclExReplicator : public AliAODBranchReplicator | |
53 | { | |
54 | public: | |
55 | ||
56 | AliAODMCNuclExReplicator(const char* name="AliAODMCNuclExReplicator", | |
57 | const char* title="Branch Replicator for muon related branches", | |
58 | /* AliAnalysisCuts* trackCut=0x0, */ | |
59 | /* AliAnalysisCuts* vertexCut=0x0, */ | |
60 | Int_t mcMode=0, | |
61 | Int_t nsigmaTrk1=3, Int_t partType1 = 2, | |
62 | Int_t nsigmaTrk2=3, Int_t partType2 = 7 | |
63 | ); | |
64 | // Int_t partType; // 0 = e; 1 = mu; 2 = pi; 3 = K; 4= p; 5 = d; 6 =t ; 7 = 3He; 8=4He; | |
65 | ||
66 | virtual ~AliAODMCNuclExReplicator(); | |
67 | ||
68 | virtual TList* GetList() const; | |
69 | ||
70 | virtual void ReplicateAndFilter(const AliAODEvent& source); | |
71 | ||
72 | virtual void Terminate(); | |
73 | ||
74 | private: | |
75 | ||
76 | // TO DO : Implemet MC | |
77 | // void FilterMC(const AliAODEvent& source); | |
78 | void SelectParticle(Int_t i); | |
79 | Bool_t IsParticleSelected(Int_t i); | |
80 | void CreateLabelMap(const AliAODEvent& source); | |
81 | Int_t GetNewLabel(Int_t i); | |
82 | ||
83 | ||
84 | Double_t fBzkG; // z componenent of field in kG | |
85 | ||
86 | Double_t fCosMin ; | |
87 | Double_t fDCAtracksMin ; | |
88 | Double_t fRmax ; | |
89 | Double_t fRmin ; | |
90 | Double_t fDNmin ; | |
91 | Double_t fDPmin ; | |
92 | ||
93 | private: | |
94 | ||
95 | mutable AliAODHeader* fHeader; //! internal header object | |
96 | ||
97 | // AliAnalysisCuts* fVertexCut; // decides which vertices to keep | |
98 | mutable TClonesArray* fVertices; //! internal array of vertices | |
99 | ||
100 | mutable TClonesArray* fNuclei; //! internal array of nuclei tracks | |
101 | ||
102 | // AliAnalysisCuts* fTrackCut; // decides which tracks to keep | |
103 | mutable TClonesArray* fSecondaryVerices; //! internal array of secondary vertices canditates | |
104 | ||
105 | mutable TClonesArray* fDaughterTracks; //! internal SV daughter tracks | |
106 | ||
107 | ||
108 | ||
109 | mutable TList* fList; //! internal list of managed objects (fVertices and fTracks) | |
110 | ||
111 | mutable TClonesArray* fMCParticles; //! internal array of MC particles | |
112 | mutable AliAODMCHeader* fMCHeader; //! internal array of MC header | |
113 | Int_t fMCMode; // MC filtering switch (0=none=no mc information,1=normal=simple copy,>=2=aggressive=filter out) | |
114 | ||
115 | TExMap fLabelMap; //! for MC label remapping (in case of aggressive filtering) | |
116 | TExMap fParticleSelected; //! List of selected MC particles | |
117 | ||
118 | Bool_t fReplicateHeader; //! whether or not the replicate the AOD Header | |
119 | ||
120 | Int_t fnSigmaTrk1; | |
121 | Int_t fnSigmaTrk2; | |
122 | Int_t fpartType1; | |
123 | Int_t fpartType2; | |
124 | ||
125 | ||
126 | ||
127 | Bool_t fSecVtxWithKF; // if kTRUE use KF vertexer, else AliVertexerTracks | |
128 | AliVertexerTracks* fVertexerTracks; // vertexer, to compute secondary vertices | |
129 | AliESDVertex *fV1; // primary vertex | |
130 | ||
131 | Int_t fAODMapSize; // size of fAODMap | |
132 | Int_t *fAODMap; //[fAODMapSize] map between index and ID for AOD tracks | |
133 | ||
134 | AliAODVertex* ReconstructSecondaryVertex(TObjArray *trkArray,Double_t &dispersion,Bool_t useTRefArray=kTRUE) const; | |
135 | ||
136 | AliAODRecoDecayLF2Prong* Make2Prong(TObjArray *twoTrackArray,const AliAODEvent &evento, | |
137 | AliAODVertex *secVert,Double_t dca); | |
138 | ||
139 | /* AliAODRecoDecayLF2Prong* Make2Prong(TObjArray *twoTrackArray,AliAODEvent *evento, */ | |
140 | /* AliAODVertex *secVert,Double_t dca); */ | |
141 | ||
142 | ||
143 | void AddDaughterRefs(AliAODVertex *v, const AliAODEvent &event, const TObjArray *trkArray) const; | |
144 | /* void AddDaughterRefs(AliAODVertex *v, AliAODEvent *event, const TObjArray *trkArray) const; */ | |
145 | void AddRefs(AliAODVertex *v,AliAODRecoDecayLF *rd, const AliAODEvent &event, const TObjArray *trkArray) const; | |
146 | /* void AddRefs(AliAODVertex *v,AliAODRecoDecayLF *rd, AliAODEvent *event, const TObjArray *trkArray) const; */ | |
147 | ||
148 | private: | |
149 | ||
150 | // AliPIDResponse *fPIDResponse; //! PID response object | |
151 | ||
152 | AliAODMCNuclExReplicator(const AliAODMCNuclExReplicator&); | |
153 | AliAODMCNuclExReplicator& operator=(const AliAODMCNuclExReplicator&); | |
154 | ||
155 | ClassDef(AliAODMCNuclExReplicator,5) // Branch replicator for ESD to muon AOD. | |
156 | }; | |
157 | ||
158 | #endif |