1 ////////////////////////////////////////////////////////////////////////////
3 // AliFemtoAnalysisReactionPlane - Femtoscopic analysis which mixes event //
4 // with respect to the z position of the primary vertex and event total //
5 // multiplicity and uses only events in certain reaction plane angle bin //
7 ////////////////////////////////////////////////////////////////////////////
10 #include "AliFemtoAnalysisReactionPlane.h"
11 #include "AliFemtoParticleCollection.h"
12 #include "AliFemtoTrackCut.h"
13 #include "AliFemtoV0Cut.h"
14 #include "AliFemtoKinkCut.h"
15 #include "AliFemtoPicoEventCollectionVector.h"
16 #include "AliFemtoPicoEventCollectionVectorHideAway.h"
19 ClassImp(AliFemtoAnalysisReactionPlane)
22 //____________________________
23 AliFemtoAnalysisReactionPlane::AliFemtoAnalysisReactionPlane(unsigned int binsVertex, double minVertex, double maxVertex,
24 unsigned int binsMult, double minMult, double maxMult, unsigned short binsRP)
26 fVertexZBins(binsVertex),
35 // mControlSwitch = 0;
37 fFirstParticleCut = 0;
38 fSecondParticleCut = 0;
40 fCorrFctnCollection= 0;
41 fCorrFctnCollection = new AliFemtoCorrFctnCollection;
42 fVertexZ[0] = minVertex;
43 fVertexZ[1] = maxVertex;
44 fUnderFlowVertexZ = 0;
50 if (fMixingBuffer) delete fMixingBuffer;
51 fPicoEventCollectionVectorHideAway = new AliFemtoPicoEventCollectionVectorHideAway(fVertexZBins,fVertexZ[0],fVertexZ[1],
52 fMultBins,fMult[0],fMult[1],
53 fRPBins,0.0,TMath::Pi());
55 //____________________________
57 AliFemtoAnalysisReactionPlane::AliFemtoAnalysisReactionPlane(const AliFemtoAnalysisReactionPlane& a) :
58 AliFemtoSimpleAnalysis(),
59 fVertexZBins(a.fVertexZBins),
62 fMultBins(a.fMultBins) ,
68 //AliFemtoAnalysisReactionPlane();
70 fFirstParticleCut = 0;
71 fSecondParticleCut = 0;
73 fCorrFctnCollection= 0;
74 fCorrFctnCollection = new AliFemtoCorrFctnCollection;
75 fVertexZ[0] = a.fVertexZ[0];
76 fVertexZ[1] = a.fVertexZ[1];
77 fUnderFlowVertexZ = 0;
79 fMult[0] = a.fMult[0];
80 fMult[1] = a.fMult[1];
83 if (fMixingBuffer) delete fMixingBuffer;
84 fPicoEventCollectionVectorHideAway = new AliFemtoPicoEventCollectionVectorHideAway(fVertexZBins,fVertexZ[0],fVertexZ[1],
85 fMultBins,fMult[0],fMult[1],
86 fRPBins,0.0,TMath::Pi());
88 // find the right event cut
89 fEventCut = a.fEventCut->Clone();
90 // find the right first particle cut
91 fFirstParticleCut = a.fFirstParticleCut->Clone();
92 // find the right second particle cut
93 if (a.fFirstParticleCut==a.fSecondParticleCut)
94 SetSecondParticleCut(fFirstParticleCut); // identical particle hbt
96 fSecondParticleCut = a.fSecondParticleCut->Clone();
98 fPairCut = a.fPairCut->Clone();
101 SetEventCut(fEventCut); // this will set the myAnalysis pointer inside the cut
102 cout << " AliFemtoAnalysisReactionPlane::AliFemtoAnalysisReactionPlane(const AliFemtoAnalysisReactionPlane& a) - event cut set " << endl;
104 if ( fFirstParticleCut ) {
105 SetFirstParticleCut(fFirstParticleCut); // this will set the myAnalysis pointer inside the cut
106 cout << " AliFemtoAnalysisReactionPlane::AliFemtoAnalysisReactionPlane(const AliFemtoAnalysisReactionPlane& a) - first particle cut set " << endl;
108 if ( fSecondParticleCut ) {
109 SetSecondParticleCut(fSecondParticleCut); // this will set the myAnalysis pointer inside the cut
110 cout << " AliFemtoAnalysisReactionPlane::AliFemtoAnalysisReactionPlane(const AliFemtoAnalysisReactionPlane& a) - second particle cut set " << endl;
112 SetPairCut(fPairCut); // this will set the myAnalysis pointer inside the cut
113 cout << " AliFemtoAnalysisReactionPlane::AliFemtoAnalysisReactionPlane(const AliFemtoAnalysisReactionPlane& a) - pair cut set " << endl;
116 AliFemtoCorrFctnIterator iter;
117 for (iter=a.fCorrFctnCollection->begin(); iter!=a.fCorrFctnCollection->end();iter++){
118 cout << " AliFemtoAnalysisReactionPlane::AliFemtoAnalysisReactionPlane(const AliFemtoAnalysisReactionPlane& a) - looking for correlation functions " << endl;
119 AliFemtoCorrFctn* fctn = (*iter)->Clone();
120 if (fctn) AddCorrFctn(fctn);
121 else cout << " AliFemtoAnalysisReactionPlane::AliFemtoAnalysisReactionPlane(const AliFemtoAnalysisReactionPlane& a) - correlation function not found " << endl;
124 fNumEventsToMix = a.fNumEventsToMix;
126 cout << " AliFemtoAnalysisReactionPlane::AliFemtoAnalysisReactionPlane(const AliFemtoAnalysisReactionPlane& a) - analysis copied " << endl;
129 AliFemtoAnalysisReactionPlane& AliFemtoAnalysisReactionPlane::operator=(const AliFemtoAnalysisReactionPlane& TheOriginalAnalysis)
131 if (this != &TheOriginalAnalysis) {
133 //AliFemtoAnalysisReactionPlane();
134 fVertexZ[0] = TheOriginalAnalysis.fVertexZ[0];
135 fVertexZ[1] = TheOriginalAnalysis.fVertexZ[1];
136 fUnderFlowVertexZ = 0;
137 fOverFlowVertexZ = 0;
138 fMult[0] = TheOriginalAnalysis.fMult[0];
139 fMult[1] = TheOriginalAnalysis.fMult[1];
142 if (fMixingBuffer) delete fMixingBuffer;
143 fVertexZBins = TheOriginalAnalysis.fVertexZBins;
144 fMultBins = TheOriginalAnalysis.fMultBins;
145 fRPBins = TheOriginalAnalysis.fRPBins;
148 if (fEventCut) delete fEventCut;
149 fEventCut = TheOriginalAnalysis.fEventCut->Clone();
151 if (fFirstParticleCut) delete fFirstParticleCut;
152 fFirstParticleCut = TheOriginalAnalysis.fFirstParticleCut->Clone();
154 if (fSecondParticleCut) delete fSecondParticleCut;
155 if (TheOriginalAnalysis.fFirstParticleCut==TheOriginalAnalysis.fSecondParticleCut)
156 SetSecondParticleCut(fFirstParticleCut); // identical particle hbt
158 fSecondParticleCut = TheOriginalAnalysis.fSecondParticleCut->Clone();
160 if (fPairCut) delete fPairCut;
161 fPairCut = TheOriginalAnalysis.fPairCut->Clone();
164 SetEventCut(fEventCut); // this will set the myAnalysis pointer inside the cut
166 if ( fFirstParticleCut ) {
167 SetFirstParticleCut(fFirstParticleCut); // this will set the myAnalysis pointer inside the cut
169 if ( fSecondParticleCut ) {
170 SetSecondParticleCut(fSecondParticleCut); // this will set the myAnalysis pointer inside the cut
172 SetPairCut(fPairCut); // this will set the myAnalysis pointer inside the cut
175 if (fPicoEventCollectionVectorHideAway) delete fPicoEventCollectionVectorHideAway;
176 fPicoEventCollectionVectorHideAway = new AliFemtoPicoEventCollectionVectorHideAway(fVertexZBins,fVertexZ[0],fVertexZ[1],
177 fMultBins,fMult[0],fMult[1],
178 fRPBins,0.0,TMath::Pi());
180 AliFemtoCorrFctnIterator iter;
181 for (iter=TheOriginalAnalysis.fCorrFctnCollection->begin(); iter!=TheOriginalAnalysis.fCorrFctnCollection->end();iter++){
182 AliFemtoCorrFctn* fctn = (*iter)->Clone();
183 if (fctn) AddCorrFctn(fctn);
186 fNumEventsToMix = TheOriginalAnalysis.fNumEventsToMix;
193 //____________________________
194 AliFemtoAnalysisReactionPlane::~AliFemtoAnalysisReactionPlane(){
195 // now delete every PicoEvent in the EventMixingBuffer and then the Buffer itself
196 delete fPicoEventCollectionVectorHideAway;
199 //____________________________
200 AliFemtoString AliFemtoAnalysisReactionPlane::Report()
202 // Prepare a report of the execution
203 cout << "AliFemtoAnalysisReactionPlane - constructing Report..."<<endl;
205 AliFemtoString temp = "-----------\nHbt AliFemtoAnalysisReactionPlane Report:\n";
206 snprintf(ctemp , 200, "Events are mixed in %d VertexZ bins in the range %E cm to %E cm.\n",fVertexZBins,fVertexZ[0],fVertexZ[1]);
208 snprintf(ctemp , 200, "Events underflowing: %d\n",fUnderFlowVertexZ);
210 snprintf(ctemp , 200, "Events overflowing: %d\n",fOverFlowVertexZ);
212 snprintf(ctemp , 200, "Events are mixed in %d Mult bins in the range %E cm to %E cm.\n",fMultBins,fMult[0],fMult[1]);
214 snprintf(ctemp , 200, "Events underflowing: %d\n",fUnderFlowMult);
216 snprintf(ctemp , 200, "Events overflowing: %d\n",fOverFlowMult);
218 snprintf(ctemp , 200, "Now adding AliFemtoSimpleAnalysis(base) Report\n");
220 temp += AliFemtoSimpleAnalysis::Report();
221 AliFemtoString returnThis=temp;
224 //_________________________
225 void AliFemtoAnalysisReactionPlane::ProcessEvent(const AliFemtoEvent* hbtEvent) {
226 // Perform event processing
227 // in bins of z vertex and multiplicity
229 // cout << " AliFemtoAnalysisReactionPlane::ProcessEvent(const AliFemtoEvent* hbtEvent) " << endl;
230 // get right mixing buffer
231 double vertexZ = hbtEvent->PrimVertPos().z();
232 double mult = hbtEvent->UncorrectedNumberOfPrimaries();
233 fCurrentRP = hbtEvent->ReactionPlaneAngle();
235 fMixingBuffer = fPicoEventCollectionVectorHideAway->PicoEventCollection(vertexZ,mult,fCurrentRP);
236 if (!fMixingBuffer) {
237 if ( vertexZ < fVertexZ[0] ) fUnderFlowVertexZ++;
238 if ( vertexZ > fVertexZ[1] ) fOverFlowVertexZ++;
239 if ( mult < fMult[0] ) fUnderFlowMult++;
240 if ( mult > fMult[1] ) fOverFlowMult++;
243 // call ProcessEvent() from AliFemtoSimpleAnalysis-base
244 AliFemtoSimpleAnalysis::ProcessEvent(hbtEvent);
247 double AliFemtoAnalysisReactionPlane::GetCurrentReactionPlane()