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():
32 fIsCollisionCandidate(kTRUE),
47 fReactionPlaneAngle(0)
49 // Default constructor
50 fPrimVertPos[0]=-999.0;
51 fPrimVertPos[1]=-999.0;
52 fPrimVertPos[2]=-999.0;
53 fPrimVertCov[0]=0.000000000001;
54 fPrimVertCov[1]=0.000000000001;
55 fPrimVertCov[2]=0.000000000001;
56 fPrimVertCov[3]=0.000000000001;
57 fPrimVertCov[4]=0.000000000001;
58 fPrimVertCov[5]=0.000000000001;
59 fTrackCollection = new AliFemtoTrackCollection;
60 fV0Collection = new AliFemtoV0Collection;
61 fXiCollection = new AliFemtoXiCollection;
62 fKinkCollection = new AliFemtoKinkCollection;
66 AliFemtoEvent::AliFemtoEvent(const AliFemtoEvent& ev, AliFemtoTrackCut* tCut, AliFemtoV0Cut* vCut, AliFemtoXiCut* xCut, AliFemtoKinkCut* kCut):
71 fIsCollisionCandidate(kTRUE),
86 fReactionPlaneAngle(0)
87 { // copy constructor with track and v0 cuts
88 //cout << "AliFemtoEvent::AliFemtoEvent(const AliFemtoEvent& ev, AliFemtoTrackCut* tCut, AliFemtoV0Cut* vCut, AliFemtoV0Cut* kCut)" << endl;
89 fEventNumber = ev.fEventNumber;
90 fRunNumber = ev.fRunNumber;
92 SetPrimVertCov(ev.PrimVertCov());
94 fZDCN1Energy=ev.fZDCN1Energy;
95 fZDCP1Energy=ev.fZDCP1Energy;
96 fZDCN2Energy=ev.fZDCN2Energy;
97 fZDCP2Energy=ev.fZDCP2Energy;
98 fZDCEMEnergy=ev.fZDCEMEnergy;
99 fZDCParticipants=ev.fZDCParticipants;
100 fNumberOfTracks = ev.fNumberOfTracks;
101 fMagneticField= ev.fMagneticField;
102 fIsCollisionCandidate = ev.fIsCollisionCandidate;
104 fTriggerMask=ev.fTriggerMask; // Trigger Type (mask)
105 fTriggerCluster=ev.fTriggerCluster;
106 fReactionPlaneAngle=ev.fReactionPlaneAngle;
108 // create collections
109 fTrackCollection = new AliFemtoTrackCollection;
110 fV0Collection = new AliFemtoV0Collection;
111 fXiCollection = new AliFemtoXiCollection;
112 fKinkCollection = new AliFemtoKinkCollection;
113 // copy track collection
114 for ( AliFemtoTrackIterator tIter=ev.fTrackCollection->begin(); tIter!=ev.fTrackCollection->end(); tIter++) {
115 if ( !tCut || tCut->Pass(*tIter) ) {
116 AliFemtoTrack* trackCopy = new AliFemtoTrack(**tIter);
117 fTrackCollection->push_back(trackCopy);
120 // copy v0 collection
121 for ( AliFemtoV0Iterator vIter=ev.fV0Collection->begin(); vIter!=ev.fV0Collection->end(); vIter++) {
122 if ( !vCut || vCut->Pass(*vIter) ) {
123 AliFemtoV0* v0Copy = new AliFemtoV0(**vIter);
124 fV0Collection->push_back(v0Copy);
127 // copy xi collection
128 for ( AliFemtoXiIterator xIter=ev.fXiCollection->begin(); xIter!=ev.fXiCollection->end(); xIter++) {
129 if ( !xCut || xCut->Pass(*xIter) ) {
130 AliFemtoXi* xiCopy = new AliFemtoXi(**xIter);
131 fXiCollection->push_back(xiCopy);
134 // copy kink collection
135 for ( AliFemtoKinkIterator kIter=ev.fKinkCollection->begin(); kIter!=ev.fKinkCollection->end(); kIter++) {
136 if ( !kCut || kCut->Pass(*kIter) ) {
137 //cout << " kinkCut passed " << endl;
138 AliFemtoKink* kinkCopy = new AliFemtoKink(**kIter);
139 fKinkCollection->push_back(kinkCopy);
143 //___________________
144 AliFemtoEvent::AliFemtoEvent(const AliFemtoEvent& ev):
149 fIsCollisionCandidate(kTRUE),
164 fReactionPlaneAngle(0)
167 fEventNumber = ev.fEventNumber;
168 fRunNumber = ev.fRunNumber;
170 SetPrimVertCov(ev.PrimVertCov());
172 fZDCN1Energy=ev.fZDCN1Energy;
173 fZDCP1Energy=ev.fZDCP1Energy;
174 fZDCN2Energy=ev.fZDCN2Energy;
175 fZDCP2Energy=ev.fZDCP2Energy;
176 fZDCEMEnergy=ev.fZDCEMEnergy;
177 fZDCParticipants=ev.fZDCParticipants;
178 fNumberOfTracks = ev.fNumberOfTracks;
179 fMagneticField= ev.fMagneticField;
180 fIsCollisionCandidate = ev.fIsCollisionCandidate;
181 fTriggerMask=ev.fTriggerMask; // Trigger Type (mask)
182 fTriggerCluster=ev.fTriggerCluster;
183 fReactionPlaneAngle=ev.fReactionPlaneAngle;
184 // create collections
185 fTrackCollection = new AliFemtoTrackCollection;
186 fV0Collection = new AliFemtoV0Collection;
187 fXiCollection = new AliFemtoXiCollection;
188 fKinkCollection = new AliFemtoKinkCollection;
189 // copy track collection
190 for ( AliFemtoTrackIterator tIter=ev.fTrackCollection->begin(); tIter!=ev.fTrackCollection->end(); tIter++) {
191 AliFemtoTrack* trackCopy = new AliFemtoTrack(**tIter);
192 fTrackCollection->push_back(trackCopy);
194 // copy v0 collection
195 for ( AliFemtoV0Iterator vIter=ev.fV0Collection->begin(); vIter!=ev.fV0Collection->end(); vIter++) {
196 AliFemtoV0* v0Copy = new AliFemtoV0(**vIter);
197 fV0Collection->push_back(v0Copy);
199 // copy xi collection
200 for ( AliFemtoXiIterator xIter=ev.fXiCollection->begin(); xIter!=ev.fXiCollection->end(); xIter++) {
201 AliFemtoXi* xiCopy = new AliFemtoXi(**xIter);
202 fXiCollection->push_back(xiCopy);
204 // copy kink collection
205 for ( AliFemtoKinkIterator kIter=ev.fKinkCollection->begin(); kIter!=ev.fKinkCollection->end(); kIter++) {
206 //cout << " kinkCut passed " << endl;
207 AliFemtoKink* kinkCopy = new AliFemtoKink(**kIter);
208 fKinkCollection->push_back(kinkCopy);
211 //______________________________
212 AliFemtoEvent& AliFemtoEvent::operator=(const AliFemtoEvent& aEvent)
214 // assignment operator
218 fEventNumber = aEvent.fEventNumber;
219 fRunNumber = aEvent.fRunNumber;
221 fZDCN1Energy=aEvent.fZDCN1Energy;
222 fZDCP1Energy=aEvent.fZDCP1Energy;
223 fZDCN2Energy=aEvent.fZDCN2Energy;
224 fZDCP2Energy=aEvent.fZDCP2Energy;
225 fZDCEMEnergy=aEvent.fZDCEMEnergy;
226 fZDCParticipants=aEvent.fZDCParticipants;
227 fNumberOfTracks = aEvent.fNumberOfTracks;
228 fMagneticField= aEvent.fMagneticField;
229 fIsCollisionCandidate = aEvent.fIsCollisionCandidate;
231 fTriggerMask=aEvent.fTriggerMask; // Trigger Type (mask)
232 fTriggerCluster=aEvent.fTriggerCluster;
233 fReactionPlaneAngle=aEvent.fReactionPlaneAngle;
234 // create collections
235 fTrackCollection = new AliFemtoTrackCollection;
236 fV0Collection = new AliFemtoV0Collection;
237 fXiCollection = new AliFemtoXiCollection;
238 fKinkCollection = new AliFemtoKinkCollection;
239 // copy track collection
240 for ( AliFemtoTrackIterator tIter=aEvent.fTrackCollection->begin(); tIter!=aEvent.fTrackCollection->end(); tIter++) {
241 AliFemtoTrack* trackCopy = new AliFemtoTrack(**tIter);
242 fTrackCollection->push_back(trackCopy);
244 // copy v0 collection
245 for ( AliFemtoV0Iterator vIter=aEvent.fV0Collection->begin(); vIter!=aEvent.fV0Collection->end(); vIter++) {
246 AliFemtoV0* v0Copy = new AliFemtoV0(**vIter);
247 fV0Collection->push_back(v0Copy);
249 // copy xi collection
250 for ( AliFemtoXiIterator xIter=aEvent.fXiCollection->begin(); xIter!=aEvent.fXiCollection->end(); xIter++) {
251 AliFemtoXi* xiCopy = new AliFemtoXi(**xIter);
252 fXiCollection->push_back(xiCopy);
254 // copy kink collection
255 for ( AliFemtoKinkIterator kIter=aEvent.fKinkCollection->begin(); kIter!=aEvent.fKinkCollection->end(); kIter++) {
256 AliFemtoKink* kinkCopy = new AliFemtoKink(**kIter);
257 fKinkCollection->push_back(kinkCopy);
263 //___________________
264 AliFemtoEvent::~AliFemtoEvent(){
267 cout << " AliFemtoEvent::~AliFemtoEvent() " << endl;
269 for (AliFemtoTrackIterator iter=fTrackCollection->begin();iter!=fTrackCollection->end();iter++){
272 fTrackCollection->clear();
273 delete fTrackCollection;
274 //must do the same for the V0 collection
275 for (AliFemtoV0Iterator tV0iter=fV0Collection->begin();tV0iter!=fV0Collection->end();tV0iter++){
277 }//added by M Chojnacki To avodid memory leak
278 fV0Collection->clear();
279 delete fV0Collection;
280 //must do the same for the Xi collection
281 for (AliFemtoXiIterator tXiIter=fXiCollection->begin();tXiIter!=fXiCollection->end();tXiIter++){
284 fXiCollection->clear();
285 delete fXiCollection;
286 //must do the same for the Kink collection
287 for (AliFemtoKinkIterator kinkIter=fKinkCollection->begin();kinkIter!=fKinkCollection->end();kinkIter++){
290 fKinkCollection->clear();
291 delete fKinkCollection;
293 //___________________
297 void AliFemtoEvent::SetEventNumber(const unsigned short& event){fEventNumber = event;}
298 void AliFemtoEvent::SetRunNumber(const int& runNum){fRunNumber = runNum;}
301 void AliFemtoEvent::SetZDCN1Energy(const float& aZDCN1Energy){fZDCN1Energy=aZDCN1Energy;}
302 void AliFemtoEvent::SetZDCP1Energy(const float& aZDCP1Energy){fZDCP1Energy=aZDCP1Energy;}
303 void AliFemtoEvent::SetZDCN2Energy(const float& aZDCN2Energy){fZDCN2Energy=aZDCN2Energy;}
304 void AliFemtoEvent::SetZDCP2Energy(const float& aZDCP2Energy){fZDCP2Energy=aZDCP2Energy;}
305 void AliFemtoEvent::SetZDCEMEnergy(const float& aZDCEMEnergy){fZDCEMEnergy=aZDCEMEnergy;}
306 void AliFemtoEvent::SetZDCParticipants(const unsigned int& aZDCParticipants){fZDCParticipants=aZDCParticipants;}
309 void AliFemtoEvent::SetNumberOfTracks(const unsigned short& tracks){fNumberOfTracks = tracks;}
313 void AliFemtoEvent::SetPrimVertPos(const AliFemtoThreeVector& vp){fPrimVertPos = vp;}
314 void AliFemtoEvent::SetPrimVertCov(const double* v){
315 fPrimVertCov[0] = v[0];
316 fPrimVertCov[1] = v[1];
317 fPrimVertCov[2] = v[2];
318 fPrimVertCov[3] = v[3];
319 fPrimVertCov[4] = v[4];
320 fPrimVertCov[5] = v[5];
322 void AliFemtoEvent::SetMagneticField(const double& magF){fMagneticField = magF;}
323 void AliFemtoEvent::SetIsCollisionCandidate(const bool& is){fIsCollisionCandidate = is;}
325 void AliFemtoEvent::SetTriggerMask(const unsigned long int& aTriggerMask) {fTriggerMask=aTriggerMask;}
326 void AliFemtoEvent::SetTriggerCluster(const unsigned char& aTriggerCluster) {fTriggerCluster=aTriggerCluster;}
329 unsigned short AliFemtoEvent::EventNumber() const {return fEventNumber;}
330 int AliFemtoEvent::RunNumber() const {return fRunNumber;}
334 unsigned short AliFemtoEvent::NumberOfTracks() const {return fNumberOfTracks;}
336 AliFemtoV0Collection* AliFemtoEvent::V0Collection() const {return fV0Collection;}
337 AliFemtoXiCollection* AliFemtoEvent::XiCollection() const {return fXiCollection;}
338 AliFemtoKinkCollection* AliFemtoEvent::KinkCollection() const {return fKinkCollection;}
339 AliFemtoTrackCollection* AliFemtoEvent::TrackCollection() const {return fTrackCollection;}
340 AliFemtoThreeVector AliFemtoEvent::PrimVertPos() const {return fPrimVertPos;}
341 const double* AliFemtoEvent::PrimVertCov() const {return fPrimVertCov;}
342 double AliFemtoEvent::MagneticField() const {return fMagneticField;}
343 unsigned long int AliFemtoEvent::TriggerMask() const {return fTriggerMask;}
344 unsigned char AliFemtoEvent::TriggerCluster() const {return fTriggerCluster;}
345 bool AliFemtoEvent::IsCollisionCandidate() const {return fIsCollisionCandidate;}
348 float AliFemtoEvent::ZDCN1Energy() const {return fZDCN1Energy;}
349 float AliFemtoEvent::ZDCP1Energy() const {return fZDCP1Energy;}
350 float AliFemtoEvent::ZDCN2Energy() const {return fZDCN2Energy;}
351 float AliFemtoEvent::ZDCP2Energy() const {return fZDCP2Energy;}
352 float AliFemtoEvent::ZDCEMEnergy() const {return fZDCEMEnergy;}
353 unsigned int AliFemtoEvent::ZDCParticipants() const {return fZDCParticipants;}
355 void AliFemtoEvent::SetReactionPlaneAngle(const float& a) { fReactionPlaneAngle = a;}
356 float AliFemtoEvent::ReactionPlaneAngle() const { return fReactionPlaneAngle; }
358 //----------------------------- below here is only for star
360 double AliFemtoEvent::UncorrectedNumberOfNegativePrimaries() const
362 return NumberOfTracks()/2;
365 double AliFemtoEvent::UncorrectedNumberOfPrimaries() const
367 // Count number of normalized charged tracks
368 Int_t tNormTrackCount = 0;
369 for (AliFemtoTrackIterator iter=fTrackCollection->begin();iter!=fTrackCollection->end();iter++){
370 if (!((*iter)->Flags()&(AliFemtoTrack::kTPCrefit))) continue;
371 if ((*iter)->TPCncls() < 50) continue;
372 if ((*iter)->TPCchi2()/(*iter)->TPCncls() > 60.0) continue;
373 if ((*iter)->ImpactD() > 6.0) continue;
374 if ((*iter)->ImpactZ() > 6.0) continue;
375 if (fabs((*iter)->P().pseudoRapidity()) > 0.9) continue;
380 return tNormTrackCount;
381 // return NumberOfTracks();