4 #include "AliEventPoolMuon.h"
5 #include "AliRunTagCuts.h"
6 #include "AliLHCTagCuts.h"
7 #include "AliDetectorTagCuts.h"
8 #include "AliEventTagCuts.h"
9 #include "AliTagAnalysis.h"
11 // Realisation of an AliVEventPool via
12 // on the flight generation of the bin using AliTagAnalysis.
13 // Created expanding AliEventPoolOTF functionalities
15 // Authors Alessandro De Falco and Antonio Uras, INFN Cagliari
16 // alessandro.de.falco@ca.infn.it antonio.uras@ca.infn.it
18 #define AliEventPoolMuon_CXX
20 ClassImp(AliEventPoolMuon)
22 //=====================================================================================================
24 AliEventPoolMuon::AliEventPoolMuon():
40 fPrimaryVertexZMin(0),
41 fPrimaryVertexZMax(0),
42 fPrimaryVertexZStep(0),
46 // Default constructor
50 //=====================================================================================================
52 AliEventPoolMuon::AliEventPoolMuon(const Char_t *name, const Char_t *title):
53 AliVEventPool(name, title),
54 fTagAnalysis(new AliTagAnalysis(title)),
55 fRunCuts(new AliRunTagCuts()),
56 fLHCCuts(new AliLHCTagCuts()),
57 fDetectorCuts(new AliDetectorTagCuts()),
58 fEventCuts(new AliEventTagCuts()),
68 fPrimaryVertexZMin(0),
69 fPrimaryVertexZMax(0),
70 fPrimaryVertexZStep(0),
78 //=====================================================================================================
80 AliEventPoolMuon::AliEventPoolMuon(const AliEventPoolMuon& obj):
96 fPrimaryVertexZMin(0),
97 fPrimaryVertexZMax(0),
98 fPrimaryVertexZStep(0),
106 //=====================================================================================================
108 AliEventPoolMuon& AliEventPoolMuon::operator=(const AliEventPoolMuon& other) {
110 // Assignment operator
111 AliVEventPool::operator=(other);
116 //=====================================================================================================
118 void AliEventPoolMuon::Init() {
120 fTagAnalysis -> ChainLocalTags(fTagDirectory);
122 fMultiplicity = fMultiplicityMin;
123 fNFWMuon = fNFWMuonMin;
124 fPrimaryVertexZ = fPrimaryVertexZMin;
128 //=====================================================================================================
130 TChain* AliEventPoolMuon::GetNextChain() {
135 // hierarchic order of variables: multiplicity -> nFWMuons -> primaryVertexZ
137 Double_t primaryVertexZMax_TMP = fPrimaryVertexZ + fPrimaryVertexZStep;
138 if (primaryVertexZMax_TMP > fPrimaryVertexZMax) {
139 fPrimaryVertexZ = fPrimaryVertexZMin;
140 primaryVertexZMax_TMP = fPrimaryVertexZ + fPrimaryVertexZStep;
141 fNFWMuon += fNFWMuonStep;
144 Int_t nFWMuonMax_TMP = fNFWMuon + fNFWMuonStep - 1;
145 if (nFWMuonMax_TMP > fNFWMuonMax) {
146 fNFWMuon = fNFWMuonMin;
147 nFWMuonMax_TMP = fNFWMuon + fNFWMuonStep - 1;
148 fMultiplicity += fMultiplicityStep;
151 Int_t multiplicityMax_TMP = fMultiplicity + fMultiplicityStep - 1;
152 if (multiplicityMax_TMP > fMultiplicityMax) return 0;
155 printf("mixing events in pool #%02d: multiplicity %d -> %d\n",fBinNumber,fMultiplicity,multiplicityMax_TMP);
156 printf(" nFWMuons %d -> %d\n",fNFWMuon,nFWMuonMax_TMP);
157 printf(" vertexZ %f -> %f\n\n",fPrimaryVertexZ, primaryVertexZMax_TMP);
158 fEventCuts->SetPrimaryVertexZRange(fPrimaryVertexZ, primaryVertexZMax_TMP);
159 fEventCuts->SetNFWMuonRange(fNFWMuon, nFWMuonMax_TMP);
160 fEventCuts->SetMultiplicityRange(fMultiplicity, multiplicityMax_TMP);
161 chain = fTagAnalysis->QueryTags(fRunCuts, fLHCCuts, fDetectorCuts, fEventCuts);
162 fPrimaryVertexZ += fPrimaryVertexZStep; // here the innermost bin-variable has to be increased
168 //=====================================================================================================
170 void AliEventPoolMuon::GetCurrentBin(Float_t* /*bin*/) {
176 //=====================================================================================================
178 Int_t AliEventPoolMuon::GetDimension() {
184 //=====================================================================================================