]> git.uio.no Git - u/mrichter/AliRoot.git/blob - STEER/AliESD.cxx
Return null pointer if no tracks were found
[u/mrichter/AliRoot.git] / STEER / AliESD.cxx
1 /**************************************************************************
2  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3  *                                                                        *
4  * Author: The ALICE Off-line Project.                                    *
5  * Contributors are mentioned in the code where appropriate.              *
6  *                                                                        *
7  * Permission to use, copy, modify and distribute this software and its   *
8  * documentation strictly for non-commercial purposes is hereby granted   *
9  * without fee, provided that the above copyright notice appears in all   *
10  * copies and that both the copyright notice and this permission notice   *
11  * appear in the supporting documentation. The authors make no claims     *
12  * about the suitability of this software for any purpose. It is          *
13  * provided "as is" without express or implied warranty.                  *
14  **************************************************************************/
15
16 /* $Id$ */
17
18 //-----------------------------------------------------------------
19 //           Implementation of the ESD class
20 //   This is the class to deal with during the phisical analysis of data
21 //   This class is generated directly by the reconstruction methods
22 //      Origin: Iouri Belikov, CERN, Jouri.Belikov@cern.ch
23 //-----------------------------------------------------------------
24
25 #include "AliESD.h"
26 #include "AliESDfriend.h"
27
28 ClassImp(AliESD)
29
30 //______________________________________________________________________________
31 AliESD::AliESD():
32   fEventNumberInFile(0),
33   fBunchCrossNumber(0),
34   fOrbitNumber(0),
35   fRunNumber(0),
36   fTimeStamp(0),
37   fEventType(0),
38   fTriggerMask(0),
39   fTriggerCluster(0),
40   fRecoVersion(0),
41   fMagneticField(0),
42   fZDCN1Energy(0),
43   fZDCP1Energy(0),
44   fZDCN2Energy(0),
45   fZDCP2Energy(0),
46   fZDCEMEnergy(0),
47   fZDCParticipants(0),
48   fT0zVertex(0),
49   fSPDVertex(),
50   fPrimaryVertex(),
51   fSPDMult(),
52   fT0timeStart(0),
53   fTracks("AliESDtrack",15000),
54   fHLTConfMapTracks("AliESDHLTtrack",25000),
55   fHLTHoughTracks("AliESDHLTtrack",15000),
56   fMuonTracks("AliESDMuonTrack",30),
57   fPmdTracks("AliESDPmdTrack",3000),
58   fTrdTracks("AliESDTrdTrack",300),
59   fV0s("AliESDv0",200),  
60   fCascades("AliESDcascade",20),
61   fKinks("AliESDkink",4000),
62   fCaloClusters("AliESDCaloCluster",10000),
63   fEMCALClusters(0), 
64   fFirstEMCALCluster(-1),
65   fEMCALTriggerPosition(0x0),
66   fEMCALTriggerAmplitudes(0x0),
67   fPHOSClusters(0), 
68   fFirstPHOSCluster(-1),
69   fPHOSTriggerPosition(0x0),
70   fPHOSTriggerAmplitudes(0x0),
71   fESDFMD(0x0),
72   fESDVZERO(0x0)
73
74 {
75   for (Int_t i=0; i<24; i++) {
76     fT0time[i] = 0;
77     fT0amplitude[i] = 0;
78   }
79 }
80 //______________________________________________________________________________
81 AliESD::AliESD(const AliESD& esd):
82   TObject(esd),
83   fEventNumberInFile(esd.fEventNumberInFile),
84   fBunchCrossNumber(esd.fBunchCrossNumber),
85   fOrbitNumber(esd.fOrbitNumber),
86   fRunNumber(esd.fRunNumber),
87   fTimeStamp(esd.fTimeStamp),
88   fEventType(esd.fEventType),
89   fTriggerMask(esd.fTriggerMask),
90   fTriggerCluster(esd.fTriggerCluster),
91   fRecoVersion(esd.fRecoVersion),
92   fMagneticField(esd.fMagneticField),
93   fZDCN1Energy(esd.fZDCN1Energy),
94   fZDCP1Energy(esd.fZDCP1Energy),
95   fZDCN2Energy(esd.fZDCN2Energy),
96   fZDCP2Energy(esd.fZDCP2Energy),
97   fZDCEMEnergy(esd.fZDCEMEnergy),
98   fZDCParticipants(esd.fZDCParticipants),
99   fT0zVertex(esd.fT0zVertex),
100   fSPDVertex(esd.fSPDVertex),
101   fPrimaryVertex(esd.fPrimaryVertex),
102   fSPDMult(esd.fSPDMult),
103   fT0timeStart(esd.fT0timeStart),
104   fTracks(*((TClonesArray*)esd.fTracks.Clone())),
105   fHLTConfMapTracks(*((TClonesArray*)esd.fHLTConfMapTracks.Clone())),
106   fHLTHoughTracks(*((TClonesArray*)esd.fHLTHoughTracks.Clone())),
107   fMuonTracks(*((TClonesArray*)esd.fMuonTracks.Clone())),
108   fPmdTracks(*((TClonesArray*)esd.fPmdTracks.Clone())),
109   fTrdTracks(*((TClonesArray*)esd.fTrdTracks.Clone())),
110   fV0s(*((TClonesArray*)esd.fV0s.Clone())),  
111   fCascades(*((TClonesArray*)esd.fCascades.Clone())),
112   fKinks(*((TClonesArray*)esd.fKinks.Clone())),
113   fCaloClusters(*((TClonesArray*)esd.fCaloClusters.Clone())),
114   fEMCALClusters(esd.fEMCALClusters), 
115   fFirstEMCALCluster(esd.fFirstEMCALCluster),
116   fEMCALTriggerPosition(esd. fEMCALTriggerPosition),
117   fEMCALTriggerAmplitudes(esd.fEMCALTriggerAmplitudes),
118   fPHOSClusters(esd.fPHOSClusters), 
119   fFirstPHOSCluster(esd.fFirstPHOSCluster),
120   fPHOSTriggerPosition(esd.fPHOSTriggerPosition),
121   fPHOSTriggerAmplitudes(esd.fPHOSTriggerAmplitudes),
122   fESDFMD(esd.fESDFMD),
123   fESDVZERO(esd.fESDVZERO)
124 {
125   for (Int_t i=0; i<24; i++) {
126     fT0time[i] = esd.fT0time[i];
127     fT0amplitude[i] = esd.fT0amplitude[i];
128   }
129 }
130
131 //______________________________________________________________________________
132 AliESD & AliESD::operator=(const AliESD& source) {
133
134   // Assignment operator
135
136   if(&source == this) return *this;
137
138   fEventNumberInFile = source.fEventNumberInFile;
139   fBunchCrossNumber = source.fBunchCrossNumber;
140   fOrbitNumber = source.fOrbitNumber;
141   fRunNumber = source.fRunNumber;
142   fTimeStamp   = source.fTimeStamp;
143   fEventType   = source.fEventType;
144   fTriggerMask = source.fTriggerMask;
145   fTriggerCluster = source.fTriggerCluster;
146   fRecoVersion = source.fRecoVersion;
147   fMagneticField = source.fMagneticField;
148   fZDCN1Energy = source.fZDCN1Energy;
149   fZDCP1Energy = source.fZDCP1Energy;
150   fZDCN2Energy = source.fZDCN2Energy;
151   fZDCP2Energy = source.fZDCP2Energy;
152   fZDCEMEnergy = source.fZDCEMEnergy;
153   fZDCParticipants = source.fZDCParticipants;
154   fT0zVertex = source.fT0zVertex;
155   fSPDVertex = source.fSPDVertex;
156   fPrimaryVertex = source.fPrimaryVertex;
157   fSPDMult = source.fSPDMult;
158   fT0timeStart = source.fT0timeStart;
159   fTracks = *((TClonesArray*)source.fTracks.Clone());
160   fHLTConfMapTracks = *((TClonesArray*)source.fHLTConfMapTracks.Clone());
161   fHLTHoughTracks = *((TClonesArray*)source.fHLTHoughTracks.Clone());
162   fMuonTracks = *((TClonesArray*)source.fMuonTracks.Clone());
163   fPmdTracks = *((TClonesArray*)source.fPmdTracks.Clone());
164   fTrdTracks = *((TClonesArray*)source.fTrdTracks.Clone());
165   fV0s = *((TClonesArray*)source.fV0s.Clone());
166   fCascades = *((TClonesArray*)source.fCascades.Clone());
167   fKinks = *((TClonesArray*)source.fKinks.Clone());
168   fCaloClusters = *((TClonesArray*)source.fCaloClusters.Clone());
169   fEMCALClusters = source.fEMCALClusters;
170   fFirstEMCALCluster = source.fFirstEMCALCluster;
171   fPHOSClusters = source.fPHOSClusters;
172   fFirstPHOSCluster = source.fFirstPHOSCluster;
173   fESDFMD = source.fESDFMD;
174   fESDVZERO = source.fESDVZERO;
175   fEMCALTriggerPosition=source. fEMCALTriggerPosition;
176   fEMCALTriggerAmplitudes=source.fEMCALTriggerAmplitudes;
177   fPHOSTriggerPosition=source.fPHOSTriggerPosition;
178   fPHOSTriggerAmplitudes=source.fPHOSTriggerAmplitudes;
179   
180   for (Int_t i=0; i<24; i++) {
181     fT0time[i] = source.fT0time[i];
182     fT0amplitude[i] = source.fT0amplitude[i];
183   }
184
185   return *this;
186
187 }
188
189
190 //______________________________________________________________________________
191 AliESD::~AliESD()
192 {
193   //
194   // Standard destructor
195   //
196   fTracks.Delete();
197   fHLTConfMapTracks.Delete();
198   fHLTHoughTracks.Delete();
199   fMuonTracks.Delete();
200   fPmdTracks.Delete();
201   fTrdTracks.Delete();
202   fV0s.Delete();
203   fCascades.Delete();
204   fKinks.Delete();
205   fCaloClusters.Delete();
206   delete fESDFMD;
207   delete fESDVZERO;
208 //   fEMCALTriggerPosition->Delete();
209 //   fEMCALTriggerAmplitudes->Delete();
210 //   fPHOSTriggerPosition->Delete();
211 //   fPHOSTriggerAmplitudes->Delete();
212 //   delete fEMCALTriggerPosition;
213 //   delete fEMCALTriggerAmplitudes;
214 //   delete fPHOSTriggerPosition;
215 //   delete fPHOSTriggerAmplitudes;
216
217 }
218
219 //______________________________________________________________________________
220 void AliESD::Reset()
221 {
222   fEventNumberInFile=0;
223   fBunchCrossNumber=0;
224   fOrbitNumber=0;
225   fRunNumber=0;
226   fTimeStamp = 0;
227   fEventType = 0;
228   fTriggerMask=0;
229   fTriggerCluster=0;
230   fRecoVersion=0;
231   fMagneticField=0;
232   fZDCN1Energy=0;
233   fZDCP1Energy=0;
234   fZDCN2Energy=0;
235   fZDCP2Energy=0;
236   fZDCEMEnergy=0;
237   fZDCParticipants=0;
238   fT0zVertex=0;
239   fT0timeStart = 0;
240   new (&fSPDVertex) AliESDVertex();
241   new (&fPrimaryVertex) AliESDVertex();
242   new (&fSPDMult) AliMultiplicity();
243   fTracks.Clear();
244   fHLTConfMapTracks.Clear();
245   fHLTHoughTracks.Clear();
246   fMuonTracks.Clear();
247   fPmdTracks.Clear();
248   fTrdTracks.Clear();
249   fV0s.Clear();
250   fCascades.Clear();
251   fCaloClusters.Clear();
252   fEMCALClusters=0; 
253   fFirstEMCALCluster=-1; 
254   fPHOSClusters=0; 
255   fFirstPHOSCluster=-1; 
256   if (fESDFMD) fESDFMD->Clear();
257 //   fEMCALTriggerPosition->Clear();
258 //   fEMCALTriggerAmplitudes->Clear();
259 //   fPHOSTriggerPosition->Clear();
260 //   fPHOSTriggerAmplitudes->Clear();
261 }
262
263 Int_t AliESD::AddV0(const AliESDv0 *v) {
264   //
265   // Add V0
266   //
267     Int_t idx=fV0s.GetEntriesFast();
268     new(fV0s[idx]) AliESDv0(*v);
269     return idx;
270 }  
271
272 //______________________________________________________________________________
273 void AliESD::Print(Option_t *) const 
274 {
275   //
276   // Print header information of the event
277   //
278   printf("ESD run information\n");
279   printf("Event # in file %d Bunch crossing # %d Orbit # %d Run # %d Trigger %lld Magnetic field %f \n",
280          GetEventNumberInFile(),
281          GetBunchCrossNumber(),
282          GetOrbitNumber(),
283          GetRunNumber(),
284          GetTriggerMask(),
285          GetMagneticField() );
286     printf("Vertex: (%.4f +- %.4f, %.4f +- %.4f, %.4f +- %.4f) cm\n",
287            fPrimaryVertex.GetXv(), fPrimaryVertex.GetXRes(),
288            fPrimaryVertex.GetYv(), fPrimaryVertex.GetYRes(),
289            fPrimaryVertex.GetZv(), fPrimaryVertex.GetZRes());
290     printf("SPD Multiplicity. Number of tracklets %d \n",
291            fSPDMult.GetNumberOfTracklets());
292   printf("Event from reconstruction version %d \n",fRecoVersion);
293   printf("Number of tracks: \n");
294   printf("                 charged   %d\n", GetNumberOfTracks());
295   printf("                 hlt CF    %d\n", GetNumberOfHLTConfMapTracks());
296   printf("                 hlt HT    %d\n", GetNumberOfHLTHoughTracks());
297   printf("                 muon      %d\n", GetNumberOfMuonTracks());
298   printf("                 pmd       %d\n", GetNumberOfPmdTracks());
299   printf("                 trd       %d\n", GetNumberOfTrdTracks());
300   printf("                 v0        %d\n", GetNumberOfV0s());
301   printf("                 cascades  %d\n", GetNumberOfCascades());
302   printf("                 kinks     %d\n", GetNumberOfKinks());
303   printf("                 CaloClusters %d\n", GetNumberOfCaloClusters());
304   printf("                 phos      %d\n", GetNumberOfPHOSClusters());
305   printf("                 emcal     %d\n", GetNumberOfEMCALClusters());
306   printf("                 FMD       %s\n", (fESDFMD ? "yes" : "no"));
307   printf("                 VZERO     %s\n", (fESDVZERO ? "yes" : "no"));
308 }
309
310 void AliESD::SetESDfriend(const AliESDfriend *ev) {
311   //
312   // Attaches the complementary info to the ESD
313   //
314   if (!ev) return;
315
316   Int_t ntrk=ev->GetNumberOfTracks();
317
318   for (Int_t i=0; i<ntrk; i++) {
319     const AliESDfriendTrack *f=ev->GetTrack(i);
320     GetTrack(i)->SetFriendTrack(f);
321   }
322 }
323
324 void AliESD::GetESDfriend(AliESDfriend *ev) const {
325   //
326   // Extracts the complementary info from the ESD
327   //
328   if (!ev) return;
329
330   Int_t ntrk=GetNumberOfTracks();
331
332   for (Int_t i=0; i<ntrk; i++) {
333     const AliESDtrack *t=GetTrack(i);
334     const AliESDfriendTrack *f=t->GetFriendTrack();
335     ev->AddTrack(f);
336   }
337 }