1 #include "AliEventPoolMuon.h"
2 #include "AliRunTagCuts.h"
3 #include "AliLHCTagCuts.h"
4 #include "AliDetectorTagCuts.h"
5 #include "AliEventTagCuts.h"
6 #include "AliTagAnalysis.h"
8 // Realisation of an AliVEventPool via
9 // on the flight generation of the bin using AliTagAnalysis.
10 // Created expanding AliEventPoolOTF functionalities
12 // Authors Alessandro De Falco and Antonio Uras, INFN Cagliari
13 // alessandro.de.falco@ca.infn.it antonio.uras@ca.infn.it
15 #define AliEventPoolMuon_CXX
17 ClassImp(AliEventPoolMuon)
19 //=====================================================================================================
21 AliEventPoolMuon::AliEventPoolMuon():
37 fPrimaryVertexZMin(0),
38 fPrimaryVertexZMax(0),
39 fPrimaryVertexZStep(0),
43 // Default constructor
47 //=====================================================================================================
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()),
65 fPrimaryVertexZMin(0),
66 fPrimaryVertexZMax(0),
67 fPrimaryVertexZStep(0),
75 //=====================================================================================================
77 AliEventPoolMuon::AliEventPoolMuon(const AliEventPoolMuon& obj):
93 fPrimaryVertexZMin(0),
94 fPrimaryVertexZMax(0),
95 fPrimaryVertexZStep(0),
103 //=====================================================================================================
105 AliEventPoolMuon& AliEventPoolMuon::operator=(const AliEventPoolMuon& other) {
107 // Assignment operator
108 AliVEventPool::operator=(other);
113 //=====================================================================================================
115 void AliEventPoolMuon::Init() {
117 fTagAnalysis -> ChainLocalTags(fTagDirectory);
119 fMultiplicity = fMultiplicityMin;
120 fNFWMuon = fNFWMuonMin;
121 fPrimaryVertexZ = fPrimaryVertexZMin;
125 //=====================================================================================================
127 TChain* AliEventPoolMuon::GetNextChain() {
132 // hierarchic order of variables: multiplicity -> nFWMuons -> primaryVertexZ
134 Double_t primaryVertexZMax_TMP = fPrimaryVertexZ + fPrimaryVertexZStep;
135 if (primaryVertexZMax_TMP > fPrimaryVertexZMax) {
136 fPrimaryVertexZ = fPrimaryVertexZMin;
137 primaryVertexZMax_TMP = fPrimaryVertexZ + fPrimaryVertexZStep;
138 fNFWMuon += fNFWMuonStep;
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;
148 Int_t multiplicityMax_TMP = fMultiplicity + fMultiplicityStep - 1;
149 if (multiplicityMax_TMP > fMultiplicityMax) return 0;
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
165 //=====================================================================================================
167 void AliEventPoolMuon::GetCurrentBin(Float_t* /*bin*/) {
173 //=====================================================================================================
175 Int_t AliEventPoolMuon::GetDimension() {
181 //=====================================================================================================