]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG3/muon/AliEventPoolMuon.cxx
Adding centrality selection and additional muon track cuts for PbPb (Xiaoming)
[u/mrichter/AliRoot.git] / PWG3 / muon / AliEventPoolMuon.cxx
1 #include "AliEventPoolMuon.h"
2 #include "AliRunTagCuts.h"
3 #include "AliLHCTagCuts.h"
4 #include "AliDetectorTagCuts.h"
5 #include "AliEventTagCuts.h"
6 #include "AliTagAnalysis.h"
7
8 // Realisation of an AliVEventPool via
9 // on the flight generation of the bin using AliTagAnalysis.
10 // Created expanding AliEventPoolOTF functionalities
11 //
12 // Authors Alessandro De Falco and Antonio Uras, INFN Cagliari
13 // alessandro.de.falco@ca.infn.it  antonio.uras@ca.infn.it
14
15 #define AliEventPoolMuon_CXX
16
17 ClassImp(AliEventPoolMuon)
18
19 //=====================================================================================================
20
21 AliEventPoolMuon::AliEventPoolMuon():
22   AliVEventPool(),
23   fTagAnalysis(0),
24   fRunCuts(0),
25   fLHCCuts(0),
26   fDetectorCuts(0),
27   fEventCuts(0),
28   fTagDirectory(0),
29   fMultiplicityMin(0),
30   fMultiplicityMax(0),
31   fMultiplicityStep(0),
32   fMultiplicity(0),
33   fNFWMuonMin(0),
34   fNFWMuonMax(0),
35   fNFWMuonStep(0),
36   fNFWMuon(0),
37   fPrimaryVertexZMin(0),
38   fPrimaryVertexZMax(0),
39   fPrimaryVertexZStep(0),
40   fPrimaryVertexZ(0),
41   fBinNumber(0) {
42   
43   // Default constructor
44
45 }
46
47 //=====================================================================================================
48
49 AliEventPoolMuon::AliEventPoolMuon(const Char_t *name, const Char_t *title):
50   AliVEventPool(name, title),
51   fTagAnalysis(new AliTagAnalysis(title)),
52   fRunCuts(new AliRunTagCuts()),
53   fLHCCuts(new AliLHCTagCuts()),
54   fDetectorCuts(new AliDetectorTagCuts()),
55   fEventCuts(new AliEventTagCuts()),
56   fTagDirectory("."),
57   fMultiplicityMin(0),
58   fMultiplicityMax(0),
59   fMultiplicityStep(0),
60   fMultiplicity(0),
61   fNFWMuonMin(0),
62   fNFWMuonMax(0),
63   fNFWMuonStep(0),
64   fNFWMuon(0),
65   fPrimaryVertexZMin(0),
66   fPrimaryVertexZMax(0),
67   fPrimaryVertexZStep(0),
68   fPrimaryVertexZ(0),
69   fBinNumber(0) {
70
71   // Constructor
72
73 }
74
75 //=====================================================================================================
76
77 AliEventPoolMuon::AliEventPoolMuon(const AliEventPoolMuon& obj):
78   AliVEventPool(obj),
79   fTagAnalysis(0),
80   fRunCuts(0),
81   fLHCCuts(0),
82   fDetectorCuts(0),
83   fEventCuts(0),
84   fTagDirectory(0),
85   fMultiplicityMin(0),
86   fMultiplicityMax(0),
87   fMultiplicityStep(0),
88   fMultiplicity(0),
89   fNFWMuonMin(0),
90   fNFWMuonMax(0),
91   fNFWMuonStep(0),
92   fNFWMuon(0),
93   fPrimaryVertexZMin(0),
94   fPrimaryVertexZMax(0),
95   fPrimaryVertexZStep(0),
96   fPrimaryVertexZ(0),
97   fBinNumber(0) {
98
99   // Copy constructor
100
101 }
102
103 //=====================================================================================================
104
105 AliEventPoolMuon& AliEventPoolMuon::operator=(const AliEventPoolMuon& other) {
106
107   // Assignment operator
108   AliVEventPool::operator=(other);
109   return *this;
110
111 }
112
113 //=====================================================================================================
114
115 void AliEventPoolMuon::Init() {
116   
117   fTagAnalysis -> ChainLocalTags(fTagDirectory);
118
119   fMultiplicity   = fMultiplicityMin;
120   fNFWMuon        = fNFWMuonMin;
121   fPrimaryVertexZ = fPrimaryVertexZMin;
122
123 }
124
125 //=====================================================================================================
126
127 TChain* AliEventPoolMuon::GetNextChain() {
128   
129   TChain *chain = 0;
130   fBinNumber++;
131
132   // hierarchic order of variables: multiplicity -> nFWMuons -> primaryVertexZ
133   
134   Double_t primaryVertexZMax_TMP = fPrimaryVertexZ + fPrimaryVertexZStep;
135   if (primaryVertexZMax_TMP > fPrimaryVertexZMax) {
136     fPrimaryVertexZ = fPrimaryVertexZMin;
137     primaryVertexZMax_TMP = fPrimaryVertexZ + fPrimaryVertexZStep;
138     fNFWMuon += fNFWMuonStep;
139   }
140
141   Int_t nFWMuonMax_TMP = fNFWMuon + fNFWMuonStep - 1;
142   if (nFWMuonMax_TMP > fNFWMuonMax) {
143     fNFWMuon = fNFWMuonMin;
144     nFWMuonMax_TMP = fNFWMuon + fNFWMuonStep - 1;
145     fMultiplicity += fMultiplicityStep;
146   }
147
148   Int_t multiplicityMax_TMP = fMultiplicity + fMultiplicityStep - 1;
149   if (multiplicityMax_TMP > fMultiplicityMax) return 0;
150   else {
151     printf("\n");
152     printf("mixing events in pool #%02d:  multiplicity    %d -> %d\n",fBinNumber,fMultiplicity,multiplicityMax_TMP);
153     printf("                            nFWMuons        %d -> %d\n",fNFWMuon,nFWMuonMax_TMP);
154     printf("                            vertexZ         %f -> %f\n\n",fPrimaryVertexZ, primaryVertexZMax_TMP);
155     fEventCuts->SetPrimaryVertexZRange(fPrimaryVertexZ, primaryVertexZMax_TMP);
156     fEventCuts->SetNFWMuonRange(fNFWMuon, nFWMuonMax_TMP);
157     fEventCuts->SetMultiplicityRange(fMultiplicity, multiplicityMax_TMP);
158     chain = fTagAnalysis->QueryTags(fRunCuts, fLHCCuts, fDetectorCuts, fEventCuts);
159     fPrimaryVertexZ += fPrimaryVertexZStep;     // here the innermost bin-variable has to be increased
160     return chain;
161   }
162   
163 }
164
165 //=====================================================================================================
166
167 void  AliEventPoolMuon::GetCurrentBin(Float_t* /*bin*/) {
168
169   //
170
171 }
172
173 //=====================================================================================================
174
175 Int_t AliEventPoolMuon::GetDimension() {
176
177   return (1);
178
179 }
180
181 //=====================================================================================================