1 ///////////////////////////////////////////////////////////////////////////
3 // AliFemtoEvent: hold the information specific to the event and a //
5 // AliFemtoEvent is the "transient microDST" Objects of this class are //
6 // generated from the input data by a Reader, and then presented to //
7 // the Cuts of the various active Analyses. //
9 ///////////////////////////////////////////////////////////////////////////
10 #include "AliFemtoEvent.h"
11 #include "AliFemtoTrack.h"
12 #include "AliFemtoV0.h"
13 #include "AliFemtoXi.h"
14 #include "AliFemtoKink.h"
15 #include "AliFemtoTrackCut.h"
16 #include "AliFemtoV0Cut.h"
17 #include "AliFemtoXiCut.h"
18 #include "AliFemtoKinkCut.h"
19 #include "PhysicalConstants.h"
20 #include "SystemOfUnits.h"
22 // Mike removed all of the AliFemtoTTree stuff here 21apr2006 - it was not used for a long time.
27 AliFemtoEvent::AliFemtoEvent():
47 // Default constructor
48 fPrimVertPos[0]=-999.0;
49 fPrimVertPos[1]=-999.0;
50 fPrimVertPos[2]=-999.0;
51 fPrimVertCov[0]=0.000000000001;
52 fPrimVertCov[1]=0.000000000001;
53 fPrimVertCov[2]=0.000000000001;
54 fPrimVertCov[3]=0.000000000001;
55 fPrimVertCov[4]=0.000000000001;
56 fPrimVertCov[5]=0.000000000001;
57 fTrackCollection = new AliFemtoTrackCollection;
58 fV0Collection = new AliFemtoV0Collection;
59 fXiCollection = new AliFemtoXiCollection;
60 fKinkCollection = new AliFemtoKinkCollection;
64 AliFemtoEvent::AliFemtoEvent(const AliFemtoEvent& ev, AliFemtoTrackCut* tCut, AliFemtoV0Cut* vCut, AliFemtoXiCut* xCut, AliFemtoKinkCut* kCut):
83 { // copy constructor with track and v0 cuts
84 //cout << "AliFemtoEvent::AliFemtoEvent(const AliFemtoEvent& ev, AliFemtoTrackCut* tCut, AliFemtoV0Cut* vCut, AliFemtoV0Cut* kCut)" << endl;
85 fEventNumber = ev.fEventNumber;
86 fRunNumber = ev.fRunNumber;
88 SetPrimVertCov(ev.PrimVertCov());
90 fZDCN1Energy=ev.fZDCN1Energy;
91 fZDCP1Energy=ev.fZDCP1Energy;
92 fZDCN2Energy=ev.fZDCN2Energy;
93 fZDCP2Energy=ev.fZDCP2Energy;
94 fZDCEMEnergy=ev.fZDCEMEnergy;
95 fZDCParticipants=ev.fZDCParticipants;
96 fNumberOfTracks = ev.fNumberOfTracks;
97 fMagneticField= ev.fMagneticField;
99 fTriggerMask=ev.fTriggerMask; // Trigger Type (mask)
100 fTriggerCluster=ev.fTriggerCluster;
101 // create collections
102 fTrackCollection = new AliFemtoTrackCollection;
103 fV0Collection = new AliFemtoV0Collection;
104 fXiCollection = new AliFemtoXiCollection;
105 fKinkCollection = new AliFemtoKinkCollection;
106 // copy track collection
107 for ( AliFemtoTrackIterator tIter=ev.fTrackCollection->begin(); tIter!=ev.fTrackCollection->end(); tIter++) {
108 if ( !tCut || tCut->Pass(*tIter) ) {
109 AliFemtoTrack* trackCopy = new AliFemtoTrack(**tIter);
110 fTrackCollection->push_back(trackCopy);
113 // copy v0 collection
114 for ( AliFemtoV0Iterator vIter=ev.fV0Collection->begin(); vIter!=ev.fV0Collection->end(); vIter++) {
115 if ( !vCut || vCut->Pass(*vIter) ) {
116 AliFemtoV0* v0Copy = new AliFemtoV0(**vIter);
117 fV0Collection->push_back(v0Copy);
120 // copy xi collection
121 for ( AliFemtoXiIterator xIter=ev.fXiCollection->begin(); xIter!=ev.fXiCollection->end(); xIter++) {
122 if ( !xCut || xCut->Pass(*xIter) ) {
123 AliFemtoXi* xiCopy = new AliFemtoXi(**xIter);
124 fXiCollection->push_back(xiCopy);
127 // copy kink collection
128 for ( AliFemtoKinkIterator kIter=ev.fKinkCollection->begin(); kIter!=ev.fKinkCollection->end(); kIter++) {
129 if ( !kCut || kCut->Pass(*kIter) ) {
130 //cout << " kinkCut passed " << endl;
131 AliFemtoKink* kinkCopy = new AliFemtoKink(**kIter);
132 fKinkCollection->push_back(kinkCopy);
136 //___________________
137 AliFemtoEvent::AliFemtoEvent(const AliFemtoEvent& ev):
158 fEventNumber = ev.fEventNumber;
159 fRunNumber = ev.fRunNumber;
161 SetPrimVertCov(ev.PrimVertCov());
163 fZDCN1Energy=ev.fZDCN1Energy;
164 fZDCP1Energy=ev.fZDCP1Energy;
165 fZDCN2Energy=ev.fZDCN2Energy;
166 fZDCP2Energy=ev.fZDCP2Energy;
167 fZDCEMEnergy=ev.fZDCEMEnergy;
168 fZDCParticipants=ev.fZDCParticipants;
169 fNumberOfTracks = ev.fNumberOfTracks;
170 fMagneticField= ev.fMagneticField;
172 fTriggerMask=ev.fTriggerMask; // Trigger Type (mask)
173 fTriggerCluster=ev.fTriggerCluster;
174 // create collections
175 fTrackCollection = new AliFemtoTrackCollection;
176 fV0Collection = new AliFemtoV0Collection;
177 fXiCollection = new AliFemtoXiCollection;
178 fKinkCollection = new AliFemtoKinkCollection;
179 // copy track collection
180 for ( AliFemtoTrackIterator tIter=ev.fTrackCollection->begin(); tIter!=ev.fTrackCollection->end(); tIter++) {
181 AliFemtoTrack* trackCopy = new AliFemtoTrack(**tIter);
182 fTrackCollection->push_back(trackCopy);
184 // copy v0 collection
185 for ( AliFemtoV0Iterator vIter=ev.fV0Collection->begin(); vIter!=ev.fV0Collection->end(); vIter++) {
186 AliFemtoV0* v0Copy = new AliFemtoV0(**vIter);
187 fV0Collection->push_back(v0Copy);
189 // copy xi collection
190 for ( AliFemtoXiIterator xIter=ev.fXiCollection->begin(); xIter!=ev.fXiCollection->end(); xIter++) {
191 AliFemtoXi* xiCopy = new AliFemtoXi(**xIter);
192 fXiCollection->push_back(xiCopy);
194 // copy kink collection
195 for ( AliFemtoKinkIterator kIter=ev.fKinkCollection->begin(); kIter!=ev.fKinkCollection->end(); kIter++) {
196 //cout << " kinkCut passed " << endl;
197 AliFemtoKink* kinkCopy = new AliFemtoKink(**kIter);
198 fKinkCollection->push_back(kinkCopy);
201 //______________________________
202 AliFemtoEvent& AliFemtoEvent::operator=(const AliFemtoEvent& aEvent)
204 // assignment operator
208 fEventNumber = aEvent.fEventNumber;
209 fRunNumber = aEvent.fRunNumber;
211 fZDCN1Energy=aEvent.fZDCN1Energy;
212 fZDCP1Energy=aEvent.fZDCP1Energy;
213 fZDCN2Energy=aEvent.fZDCN2Energy;
214 fZDCP2Energy=aEvent.fZDCP2Energy;
215 fZDCEMEnergy=aEvent.fZDCEMEnergy;
216 fZDCParticipants=aEvent.fZDCParticipants;
217 fNumberOfTracks = aEvent.fNumberOfTracks;
218 fMagneticField= aEvent.fMagneticField;
220 fTriggerMask=aEvent.fTriggerMask; // Trigger Type (mask)
221 fTriggerCluster=aEvent.fTriggerCluster;
222 // create collections
223 fTrackCollection = new AliFemtoTrackCollection;
224 fV0Collection = new AliFemtoV0Collection;
225 fXiCollection = new AliFemtoXiCollection;
226 fKinkCollection = new AliFemtoKinkCollection;
227 // copy track collection
228 for ( AliFemtoTrackIterator tIter=aEvent.fTrackCollection->begin(); tIter!=aEvent.fTrackCollection->end(); tIter++) {
229 AliFemtoTrack* trackCopy = new AliFemtoTrack(**tIter);
230 fTrackCollection->push_back(trackCopy);
232 // copy v0 collection
233 for ( AliFemtoV0Iterator vIter=aEvent.fV0Collection->begin(); vIter!=aEvent.fV0Collection->end(); vIter++) {
234 AliFemtoV0* v0Copy = new AliFemtoV0(**vIter);
235 fV0Collection->push_back(v0Copy);
237 // copy xi collection
238 for ( AliFemtoXiIterator xIter=aEvent.fXiCollection->begin(); xIter!=aEvent.fXiCollection->end(); xIter++) {
239 AliFemtoXi* xiCopy = new AliFemtoXi(**xIter);
240 fXiCollection->push_back(xiCopy);
242 // copy kink collection
243 for ( AliFemtoKinkIterator kIter=aEvent.fKinkCollection->begin(); kIter!=aEvent.fKinkCollection->end(); kIter++) {
244 AliFemtoKink* kinkCopy = new AliFemtoKink(**kIter);
245 fKinkCollection->push_back(kinkCopy);
251 //___________________
252 AliFemtoEvent::~AliFemtoEvent(){
255 cout << " AliFemtoEvent::~AliFemtoEvent() " << endl;
257 for (AliFemtoTrackIterator iter=fTrackCollection->begin();iter!=fTrackCollection->end();iter++){
260 fTrackCollection->clear();
261 delete fTrackCollection;
262 //must do the same for the V0 collection
263 for (AliFemtoV0Iterator tV0iter=fV0Collection->begin();tV0iter!=fV0Collection->end();tV0iter++){
265 }//added by M Chojnacki To avodid memory leak
266 fV0Collection->clear();
267 delete fV0Collection;
268 //must do the same for the Xi collection
269 for (AliFemtoXiIterator tXiIter=fXiCollection->begin();tXiIter!=fXiCollection->end();tXiIter++){
272 fXiCollection->clear();
273 delete fXiCollection;
274 //must do the same for the Kink collection
275 for (AliFemtoKinkIterator kinkIter=fKinkCollection->begin();kinkIter!=fKinkCollection->end();kinkIter++){
278 fKinkCollection->clear();
279 delete fKinkCollection;
281 //___________________
285 void AliFemtoEvent::SetEventNumber(const unsigned short& event){fEventNumber = event;}
286 void AliFemtoEvent::SetRunNumber(const int& runNum){fRunNumber = runNum;}
289 void AliFemtoEvent::SetZDCN1Energy(const float& aZDCN1Energy){fZDCN1Energy=aZDCN1Energy;}
290 void AliFemtoEvent::SetZDCP1Energy(const float& aZDCP1Energy){fZDCP1Energy=aZDCP1Energy;}
291 void AliFemtoEvent::SetZDCN2Energy(const float& aZDCN2Energy){fZDCN2Energy=aZDCN2Energy;}
292 void AliFemtoEvent::SetZDCP2Energy(const float& aZDCP2Energy){fZDCP2Energy=aZDCP2Energy;}
293 void AliFemtoEvent::SetZDCEMEnergy(const float& aZDCEMEnergy){fZDCEMEnergy=aZDCEMEnergy;}
294 void AliFemtoEvent::SetZDCParticipants(const unsigned int& aZDCParticipants){fZDCParticipants=aZDCParticipants;}
297 void AliFemtoEvent::SetNumberOfTracks(const unsigned short& tracks){fNumberOfTracks = tracks;}
301 void AliFemtoEvent::SetPrimVertPos(const AliFemtoThreeVector& vp){fPrimVertPos = vp;}
302 void AliFemtoEvent::SetPrimVertCov(const double* v){
303 fPrimVertCov[0] = v[0];
304 fPrimVertCov[1] = v[1];
305 fPrimVertCov[2] = v[2];
306 fPrimVertCov[3] = v[3];
307 fPrimVertCov[4] = v[4];
308 fPrimVertCov[5] = v[5];
310 void AliFemtoEvent::SetMagneticField(const double& magF){fMagneticField = magF;}
312 void AliFemtoEvent::SetTriggerMask(const unsigned long int& aTriggerMask) {fTriggerMask=aTriggerMask;}
313 void AliFemtoEvent::SetTriggerCluster(const unsigned char& aTriggerCluster) {fTriggerCluster=aTriggerCluster;}
316 unsigned short AliFemtoEvent::EventNumber() const {return fEventNumber;}
317 int AliFemtoEvent::RunNumber() const {return fRunNumber;}
321 unsigned short AliFemtoEvent::NumberOfTracks() const {return fNumberOfTracks;}
323 AliFemtoV0Collection* AliFemtoEvent::V0Collection() const {return fV0Collection;}
324 AliFemtoXiCollection* AliFemtoEvent::XiCollection() const {return fXiCollection;}
325 AliFemtoKinkCollection* AliFemtoEvent::KinkCollection() const {return fKinkCollection;}
326 AliFemtoTrackCollection* AliFemtoEvent::TrackCollection() const {return fTrackCollection;}
327 AliFemtoThreeVector AliFemtoEvent::PrimVertPos() const {return fPrimVertPos;}
328 const double* AliFemtoEvent::PrimVertCov() const {return fPrimVertCov;}
329 double AliFemtoEvent::MagneticField() const {return fMagneticField;}
330 unsigned long int AliFemtoEvent::TriggerMask() const {return fTriggerMask;}
331 unsigned char AliFemtoEvent::TriggerCluster() const {return fTriggerCluster;}
334 float AliFemtoEvent::ZDCN1Energy() const {return fZDCN1Energy;}
335 float AliFemtoEvent::ZDCP1Energy() const {return fZDCP1Energy;}
336 float AliFemtoEvent::ZDCN2Energy() const {return fZDCN2Energy;}
337 float AliFemtoEvent::ZDCP2Energy() const {return fZDCP2Energy;}
338 float AliFemtoEvent::ZDCEMEnergy() const {return fZDCEMEnergy;}
339 unsigned int AliFemtoEvent::ZDCParticipants() const {return fZDCParticipants;}
341 //----------------------------- below here is only for star
343 double AliFemtoEvent::UncorrectedNumberOfNegativePrimaries() const
345 return NumberOfTracks()/2;
348 double AliFemtoEvent::UncorrectedNumberOfPrimaries() const
350 return NumberOfTracks();