]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG2/FEMTOSCOPY/AliFemto/AliFemtoEvent.cxx
Update runBatch.C for the new AddTask.C macro
[u/mrichter/AliRoot.git] / PWG2 / FEMTOSCOPY / AliFemto / AliFemtoEvent.cxx
1 ///////////////////////////////////////////////////////////////////////////
2 //                                                                       //
3 //  AliFemtoEvent: hold the information specific to the event and a      //
4 //  track list                                                           //
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.                            //
8 //                                                                       //
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"
21
22 // Mike removed all of the AliFemtoTTree stuff here 21apr2006 - it was not used for a long time.
23
24
25
26 //___________________
27 AliFemtoEvent::AliFemtoEvent():
28   fEventNumber(0),
29   fRunNumber(0),
30   fNumberOfTracks(0),
31   fMagneticField(0),
32   fPrimVertPos(0,0,0),
33   fPrimVertCov(),
34   fTrackCollection(0),
35   fV0Collection(0),
36   fXiCollection(0),
37   fKinkCollection(0),
38   fZDCN1Energy(0),   
39   fZDCP1Energy(0),   
40   fZDCN2Energy(0),   
41   fZDCP2Energy(0),   
42   fZDCEMEnergy(0),   
43   fZDCParticipants(0),
44   fTriggerMask(0),  
45   fTriggerCluster(0)
46 {
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;
61   fMagneticField=0.0;
62 }
63 //___________________
64 AliFemtoEvent::AliFemtoEvent(const AliFemtoEvent& ev, AliFemtoTrackCut* tCut, AliFemtoV0Cut* vCut, AliFemtoXiCut* xCut, AliFemtoKinkCut* kCut):
65   fEventNumber(0),
66   fRunNumber(0),
67   fNumberOfTracks(0),
68   fMagneticField(0),
69   fPrimVertPos(0,0,0),
70   fPrimVertCov(),
71   fTrackCollection(0),
72   fV0Collection(0),
73   fXiCollection(0),
74   fKinkCollection(0),
75   fZDCN1Energy(0),   
76   fZDCP1Energy(0),   
77   fZDCN2Energy(0),   
78   fZDCP2Energy(0),   
79   fZDCEMEnergy(0),   
80   fZDCParticipants(0),
81   fTriggerMask(0),  
82   fTriggerCluster(0)
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;
87   
88   SetPrimVertCov(ev.PrimVertCov());
89
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;
98   
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);
111     }
112   }
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);
118     }
119   }
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);
125     }
126   }
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);
133     }
134   }
135 }
136 //___________________
137 AliFemtoEvent::AliFemtoEvent(const AliFemtoEvent& ev):
138   fEventNumber(0),
139   fRunNumber(0),
140   fNumberOfTracks(0),
141   fMagneticField(0),
142   fPrimVertPos(0,0,0),
143   fPrimVertCov(),
144   fTrackCollection(0),
145   fV0Collection(0),
146   fXiCollection(0),
147   fKinkCollection(0),
148   fZDCN1Energy(0),   
149   fZDCP1Energy(0),   
150   fZDCN2Energy(0),   
151   fZDCP2Energy(0),   
152   fZDCEMEnergy(0),   
153   fZDCParticipants(0),
154   fTriggerMask(0),  
155   fTriggerCluster(0)
156
157   // copy constructor 
158   fEventNumber = ev.fEventNumber;
159   fRunNumber = ev.fRunNumber;
160   
161   SetPrimVertCov(ev.PrimVertCov());
162
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;
171   
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);
183   }
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);
188   }
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);
193   }
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);
199   }
200 }
201 //______________________________
202 AliFemtoEvent& AliFemtoEvent::operator=(const AliFemtoEvent& aEvent)
203 {
204   // assignment operator
205   if (this == &aEvent)
206     return *this;
207
208   fEventNumber = aEvent.fEventNumber;
209   fRunNumber = aEvent.fRunNumber;
210   
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;
219   
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);
231   }
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);
236   }
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);
241   }
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);
246   }
247
248   return *this;
249 }
250
251 //___________________
252 AliFemtoEvent::~AliFemtoEvent(){
253   // destructor
254 #ifdef STHBTDEBUG
255   cout << " AliFemtoEvent::~AliFemtoEvent() " << endl;
256 #endif
257   for (AliFemtoTrackIterator iter=fTrackCollection->begin();iter!=fTrackCollection->end();iter++){
258     delete *iter;
259   }
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++){
264     delete *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++){
270     delete *tXiIter;
271   }
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++){
276     delete *kinkIter;
277   }
278   fKinkCollection->clear();
279   delete fKinkCollection;
280 }
281 //___________________
282
283
284
285 void AliFemtoEvent::SetEventNumber(const unsigned short& event){fEventNumber = event;}
286 void AliFemtoEvent::SetRunNumber(const int& runNum){fRunNumber = runNum;}
287
288
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;}
295     
296
297 void AliFemtoEvent::SetNumberOfTracks(const unsigned short& tracks){fNumberOfTracks = tracks;}
298
299
300
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];
309 }
310 void AliFemtoEvent::SetMagneticField(const double& magF){fMagneticField = magF;}
311
312 void AliFemtoEvent::SetTriggerMask(const unsigned long int& aTriggerMask) {fTriggerMask=aTriggerMask;}
313 void AliFemtoEvent::SetTriggerCluster(const unsigned char& aTriggerCluster) {fTriggerCluster=aTriggerCluster;}
314
315
316 unsigned short AliFemtoEvent::EventNumber() const {return fEventNumber;}
317 int            AliFemtoEvent::RunNumber() const {return fRunNumber;}
318
319
320
321 unsigned short AliFemtoEvent::NumberOfTracks() const {return fNumberOfTracks;}
322
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;}
332
333
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;}
340
341 //----------------------------- below here is only for star
342
343 double AliFemtoEvent::UncorrectedNumberOfNegativePrimaries() const
344 {
345   return NumberOfTracks()/2;
346 }
347
348 double AliFemtoEvent::UncorrectedNumberOfPrimaries() const
349 {
350   return NumberOfTracks();
351 }
352
353