This commit was generated by cvs2svn to compensate for changes in r18145,
[u/mrichter/AliRoot.git] / PWG2 / FEMTOSCOPY / AliFemto / Analysis / AliFemtoVertexAnalysis.cxx
CommitLineData
67427ff7 1/***************************************************************************
2 *
3 * $Id$
4 *
5 * Author: Frank Laue, Ohio State, laue@mps.ohio-state.edu
6 ***************************************************************************
7 *
8 * Description: part of STAR HBT Framework: AliFemtoMaker package
9 * This is the Class for Analysis objects. Each of the simultaneous
10 * Analyses running should have one of these instantiated. They link
11 * into the Manager in an Analysis Collection.
12 *
13 ***************************************************************************
14 *
15 * $Log$
16 * Revision 1.1.1.1 2007/03/07 10:14:49 mchojnacki
17 * First version on CVS
18 *
19 * Revision 1.5 2001/05/25 23:24:00 lisa
20 * Added in AliFemtoKink stuff
21 *
22 * Revision 1.4 2000/08/31 22:31:32 laue
23 * AliFemtoAnalysis: output changed (a little bit less)
24 * AliFemtoEvent: new version, members for reference mult added
25 * AliFemtoIOBinary: new IO for new AliFemtoEvent version
26 * AliFemtoTypes: TTree typedef to AliFemtoTTree added
27 * AliFemtoVertexAnalysis: overflow and underflow added
28 *
29 * Revision 1.1 2000/07/16 21:44:11 laue
30 * Collection and analysis for vertex dependent event mixing
31 *
32 *
33 **************************************************************************/
34
35#include "Analysis/AliFemtoVertexAnalysis.h"
36#include "Infrastructure/AliFemtoParticleCollection.h"
37#include "Base/AliFemtoTrackCut.h"
38#include "Base/AliFemtoV0Cut.h"
39#include "Base/AliFemtoKinkCut.h"
40#include "Infrastructure/AliFemtoPicoEventCollectionVector.h"
41#include "Infrastructure/AliFemtoPicoEventCollectionVectorHideAway.h"
42
43
44#ifdef __ROOT__
45ClassImp(AliFemtoVertexAnalysis)
46#endif
47
48extern void FillHbtParticleCollection(AliFemtoParticleCut* partCut,
49 AliFemtoEvent* hbtEvent,
50 AliFemtoParticleCollection* partCollection);
51
52
53//____________________________
54AliFemtoVertexAnalysis::AliFemtoVertexAnalysis(unsigned int bins, double min, double max){
55 // mControlSwitch = 0;
56 fEventCut = 0;
57 fFirstParticleCut = 0;
58 fSecondParticleCut = 0;
59 fPairCut = 0;
60 fCorrFctnCollection= 0;
61 fCorrFctnCollection = new AliFemtoCorrFctnCollection;
62 fVertexBins = bins;
63 fVertexZ[0] = min;
64 fVertexZ[1] = max;
65 fUnderFlow = 0;
66 fOverFlow = 0;
67 if (fMixingBuffer) delete fMixingBuffer;
68 fPicoEventCollectionVectorHideAway = new AliFemtoPicoEventCollectionVectorHideAway(fVertexBins,fVertexZ[0],fVertexZ[1]);
69};
70//____________________________
71
72AliFemtoVertexAnalysis::AliFemtoVertexAnalysis(const AliFemtoVertexAnalysis& a) : AliFemtoAnalysis() {
73 //AliFemtoVertexAnalysis();
74 fEventCut = 0;
75 fFirstParticleCut = 0;
76 fSecondParticleCut = 0;
77 fPairCut = 0;
78 fCorrFctnCollection= 0;
79 fCorrFctnCollection = new AliFemtoCorrFctnCollection;
80 fVertexBins = a.fVertexBins;
81 fVertexZ[0] = a.fVertexZ[0];
82 fVertexZ[1] = a.fVertexZ[1];
83 fUnderFlow = 0;
84 fOverFlow = 0;
85 if (fMixingBuffer) delete fMixingBuffer;
86 fPicoEventCollectionVectorHideAway = new AliFemtoPicoEventCollectionVectorHideAway(fVertexBins,fVertexZ[0],fVertexZ[1]);
87
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
95 else
96 fSecondParticleCut = a.fSecondParticleCut->Clone();
97
98 fPairCut = a.fPairCut->Clone();
99
100 if ( fEventCut ) {
101 SetEventCut(fEventCut); // this will set the myAnalysis pointer inside the cut
102 cout << " AliFemtoVertexAnalysis::AliFemtoVertexAnalysis(const AliFemtoVertexAnalysis& a) - event cut set " << endl;
103 }
104 if ( fFirstParticleCut ) {
105 SetFirstParticleCut(fFirstParticleCut); // this will set the myAnalysis pointer inside the cut
106 cout << " AliFemtoVertexAnalysis::AliFemtoVertexAnalysis(const AliFemtoVertexAnalysis& a) - first particle cut set " << endl;
107 }
108 if ( fSecondParticleCut ) {
109 SetSecondParticleCut(fSecondParticleCut); // this will set the myAnalysis pointer inside the cut
110 cout << " AliFemtoVertexAnalysis::AliFemtoVertexAnalysis(const AliFemtoVertexAnalysis& a) - second particle cut set " << endl;
111 } if ( fPairCut ) {
112 SetPairCut(fPairCut); // this will set the myAnalysis pointer inside the cut
113 cout << " AliFemtoVertexAnalysis::AliFemtoVertexAnalysis(const AliFemtoVertexAnalysis& a) - pair cut set " << endl;
114 }
115
116 AliFemtoCorrFctnIterator iter;
117 for (iter=a.fCorrFctnCollection->begin(); iter!=a.fCorrFctnCollection->end();iter++){
118 cout << " AliFemtoVertexAnalysis::AliFemtoVertexAnalysis(const AliFemtoVertexAnalysis& a) - looking for correlation functions " << endl;
119 AliFemtoCorrFctn* fctn = (*iter)->Clone();
120 if (fctn) AddCorrFctn(fctn);
121 else cout << " AliFemtoVertexAnalysis::AliFemtoVertexAnalysis(const AliFemtoVertexAnalysis& a) - correlation function not found " << endl;
122 }
123
124 fNumEventsToMix = a.fNumEventsToMix;
125
126 cout << " AliFemtoVertexAnalysis::AliFemtoVertexAnalysis(const AliFemtoVertexAnalysis& a) - analysis copied " << endl;
127
128}
129//____________________________
130AliFemtoVertexAnalysis::~AliFemtoVertexAnalysis(){
131 // now delete every PicoEvent in the EventMixingBuffer and then the Buffer itself
132 delete fPicoEventCollectionVectorHideAway;
133}
134
135//____________________________
136AliFemtoString AliFemtoVertexAnalysis::Report()
137{
138 cout << "AliFemtoVertexAnalysis - constructing Report..."<<endl;
139 char Ctemp[200];
140 AliFemtoString temp = "-----------\nHbt AliFemtoVertexAnalysis Report:\n";
141 sprintf(Ctemp,"Events are mixed in %d bins in the range %E cm to %E cm.\n",fVertexBins,fVertexZ[0],fVertexZ[1]);
142 temp += Ctemp;
143 sprintf(Ctemp,"Events underflowing: %d\n",fUnderFlow);
144 temp += Ctemp;
145 sprintf(Ctemp,"Events overflowing: %d\n",fOverFlow);
146 temp += Ctemp;
147 sprintf(Ctemp,"Now adding AliFemtoAnalysis(base) Report\n");
148 temp += Ctemp;
149 temp += AliFemtoAnalysis::Report();
150 AliFemtoString returnThis=temp;
151 return returnThis;
152}
153//_________________________
154void AliFemtoVertexAnalysis::ProcessEvent(const AliFemtoEvent* hbtEvent) {
155 cout << " AliFemtoVertexAnalysis::ProcessEvent(const AliFemtoEvent* hbtEvent) " << endl;
156 // get right mixing buffer
157 double vertexZ = hbtEvent->PrimVertPos().z();
158 fMixingBuffer = fPicoEventCollectionVectorHideAway->PicoEventCollection(vertexZ);
159 if (!fMixingBuffer) {
160 if ( vertexZ < fVertexZ[0] ) fUnderFlow++;
161 if ( vertexZ > fVertexZ[1] ) fOverFlow++;
162 return;
163 }
164 // call ProcessEvent() from AliFemtoAnalysis-base
165 AliFemtoAnalysis::ProcessEvent(hbtEvent);
166}