]> git.uio.no Git - u/mrichter/AliRoot.git/blob - STEER/AliESD.cxx
Parameters of miscalibration in the head of the file (Marian)
[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   fEventNumber(0),
33   fRunNumber(0),
34   fTriggerMask(0),
35   fTriggerCluster(0),
36   fRecoVersion(0),
37   fMagneticField(0),
38   fZDCN1Energy(0),
39   fZDCP1Energy(0),
40   fZDCN2Energy(0),
41   fZDCP2Energy(0),
42   fZDCEMEnergy(0),
43   fZDCParticipants(0),
44   fT0zVertex(0),
45   fSPDVertex(),
46   fPrimaryVertex(),
47   fSPDMult(),
48   fT0timeStart(0),
49   fTracks("AliESDtrack",15000),
50   fHLTConfMapTracks("AliESDHLTtrack",25000),
51   fHLTHoughTracks("AliESDHLTtrack",15000),
52   fMuonTracks("AliESDMuonTrack",30),
53   fPmdTracks("AliESDPmdTrack",3000),
54   fTrdTracks("AliESDTrdTrack",300),
55   fV0s("AliESDv0",200),  
56   fCascades("AliESDcascade",20),
57   fKinks("AliESDkink",4000),
58   fV0MIs("AliESDV0MI",4000),
59   fCaloClusters("AliESDCaloCluster",10000),
60   fEMCALClusters(0), 
61   fFirstEMCALCluster(-1),
62   fPHOSClusters(0), 
63   fFirstPHOSCluster(-1),
64   fESDFMD(0x0)
65 {
66   for (Int_t i=0; i<24; i++) {
67     fT0time[i] = 0;
68     fT0amplitude[i] = 0;
69   }
70 }
71 //______________________________________________________________________________
72 AliESD::AliESD(const AliESD& esd):
73   TObject(esd),
74   fEventNumber(esd.fEventNumber),
75   fRunNumber(esd.fRunNumber),
76   fTriggerMask(esd.fTriggerMask),
77   fTriggerCluster(esd.fTriggerCluster),
78   fRecoVersion(esd.fRecoVersion),
79   fMagneticField(esd.fMagneticField),
80   fZDCN1Energy(esd.fZDCN1Energy),
81   fZDCP1Energy(esd.fZDCP1Energy),
82   fZDCN2Energy(esd.fZDCN2Energy),
83   fZDCP2Energy(esd.fZDCP2Energy),
84   fZDCEMEnergy(esd.fZDCEMEnergy),
85   fZDCParticipants(esd.fZDCParticipants),
86   fT0zVertex(esd.fT0zVertex),
87   fSPDVertex(esd.fSPDVertex),
88   fPrimaryVertex(esd.fPrimaryVertex),
89   fSPDMult(esd.fSPDMult),
90   fT0timeStart(esd.fT0timeStart),
91   fTracks(*((TClonesArray*)esd.fTracks.Clone())),
92   fHLTConfMapTracks(*((TClonesArray*)esd.fHLTConfMapTracks.Clone())),
93   fHLTHoughTracks(*((TClonesArray*)esd.fHLTHoughTracks.Clone())),
94   fMuonTracks(*((TClonesArray*)esd.fMuonTracks.Clone())),
95   fPmdTracks(*((TClonesArray*)esd.fPmdTracks.Clone())),
96   fTrdTracks(*((TClonesArray*)esd.fTrdTracks.Clone())),
97   fV0s(*((TClonesArray*)esd.fV0s.Clone())),  
98   fCascades(*((TClonesArray*)esd.fCascades.Clone())),
99   fKinks(*((TClonesArray*)esd.fKinks.Clone())),
100   fV0MIs(*((TClonesArray*)esd.fV0MIs.Clone())),
101   fCaloClusters(*((TClonesArray*)esd.fCaloClusters.Clone())),
102   fEMCALClusters(esd.fEMCALClusters), 
103   fFirstEMCALCluster(esd.fFirstEMCALCluster),
104   fPHOSClusters(esd.fPHOSClusters), 
105   fFirstPHOSCluster(esd.fFirstPHOSCluster),
106   fESDFMD(esd.fESDFMD)
107 {
108   for (Int_t i=0; i<24; i++) {
109     fT0time[i] = esd.fT0time[i];
110     fT0amplitude[i] = esd.fT0amplitude[i];
111   }
112 }
113
114 //______________________________________________________________________________
115 AliESD & AliESD::operator=(const AliESD& source) {
116
117   // Assignment operator
118
119   if(&source == this) return *this;
120
121   fEventNumber = source.fEventNumber;
122   fRunNumber = source.fRunNumber;
123   fTriggerMask = source.fTriggerMask;
124   fTriggerCluster = source.fTriggerCluster;
125   fRecoVersion = source.fRecoVersion;
126   fMagneticField = source.fMagneticField;
127   fZDCN1Energy = source.fZDCN1Energy;
128   fZDCP1Energy = source.fZDCP1Energy;
129   fZDCN2Energy = source.fZDCN2Energy;
130   fZDCP2Energy = source.fZDCP2Energy;
131   fZDCEMEnergy = source.fZDCEMEnergy;
132   fZDCParticipants = source.fZDCParticipants;
133   fT0zVertex = source.fT0zVertex;
134   fSPDVertex = source.fSPDVertex;
135   fPrimaryVertex = source.fPrimaryVertex;
136   fSPDMult = source.fSPDMult;
137   fT0timeStart = source.fT0timeStart;
138   fTracks = *((TClonesArray*)source.fTracks.Clone());
139   fHLTConfMapTracks = *((TClonesArray*)source.fHLTConfMapTracks.Clone());
140   fHLTHoughTracks = *((TClonesArray*)source.fHLTHoughTracks.Clone());
141   fMuonTracks = *((TClonesArray*)source.fMuonTracks.Clone());
142   fPmdTracks = *((TClonesArray*)source.fPmdTracks.Clone());
143   fTrdTracks = *((TClonesArray*)source.fTrdTracks.Clone());
144   fV0s = *((TClonesArray*)source.fV0s.Clone());
145   fCascades = *((TClonesArray*)source.fCascades.Clone());
146   fKinks = *((TClonesArray*)source.fKinks.Clone());
147   fV0MIs = *((TClonesArray*)source.fV0MIs.Clone());
148   fCaloClusters = *((TClonesArray*)source.fCaloClusters.Clone());
149   fEMCALClusters = source.fEMCALClusters;
150   fFirstEMCALCluster = source.fFirstEMCALCluster;
151   fPHOSClusters = source.fPHOSClusters;
152   fFirstPHOSCluster = source.fFirstPHOSCluster;
153   fESDFMD = source.fESDFMD;
154
155   for (Int_t i=0; i<24; i++) {
156     fT0time[i] = source.fT0time[i];
157     fT0amplitude[i] = source.fT0amplitude[i];
158   }
159
160   return *this;
161
162 }
163
164
165 //______________________________________________________________________________
166 AliESD::~AliESD()
167 {
168   //
169   // Standard destructor
170   //
171   fTracks.Delete();
172   fHLTConfMapTracks.Delete();
173   fHLTHoughTracks.Delete();
174   fMuonTracks.Delete();
175   fPmdTracks.Delete();
176   fTrdTracks.Delete();
177   fV0s.Delete();
178   fCascades.Delete();
179   fKinks.Delete();
180   fV0MIs.Delete();
181   fCaloClusters.Delete();
182   delete fESDFMD;
183 }
184
185 void AliESD::UpdateV0PIDs()
186 {
187   //
188   //
189   //
190   Int_t nV0 = GetNumberOfV0MIs();
191   for (Int_t i=0;i<nV0;i++){
192     AliESDV0MI * v0 = GetV0MI(i);
193     AliESDtrack* tp = GetTrack(v0->GetIndex(0));
194     AliESDtrack* tm = GetTrack(v0->GetIndex(1));
195     if (!tm || !tp){
196       printf("BBBUUUUUUUGGGG\n");
197     }
198     Double_t pp[5],pm[5];
199     tp->GetESDpid(pp);
200     tm->GetESDpid(pm);
201     v0->UpdatePID(pp,pm);    
202   }
203 }
204
205 //______________________________________________________________________________
206 void AliESD::Reset()
207 {
208   fEventNumber=0;
209   fRunNumber=0;
210   fTriggerMask=0;
211   fTriggerCluster=0;
212   fRecoVersion=0;
213   fMagneticField=0;
214   fZDCN1Energy=0;
215   fZDCP1Energy=0;
216   fZDCN2Energy=0;
217   fZDCP2Energy=0;
218   fZDCEMEnergy=0;
219   fZDCParticipants=0;
220   fT0zVertex=0;
221   fT0timeStart = 0;
222   new (&fSPDVertex) AliESDVertex();
223   new (&fPrimaryVertex) AliESDVertex();
224   new (&fSPDMult) AliMultiplicity();
225   fTracks.Clear();
226   fHLTConfMapTracks.Clear();
227   fHLTHoughTracks.Clear();
228   fMuonTracks.Clear();
229   fPmdTracks.Clear();
230   fTrdTracks.Clear();
231   fV0s.Clear();
232   fCascades.Clear();
233   fCaloClusters.Clear();
234   fEMCALClusters=0; 
235   fFirstEMCALCluster=-1; 
236   fPHOSClusters=0; 
237   fFirstPHOSCluster=-1; 
238   if (fESDFMD) fESDFMD->Clear();
239 }
240
241 //______________________________________________________________________________
242 void AliESD::Print(Option_t *) const 
243 {
244   //
245   // Print header information of the event
246   //
247   printf("ESD run information\n");
248   printf("Event # %d Run # %d Trigger %lld Magnetic field %f \n",
249          GetEventNumber(),
250          GetRunNumber(),
251          GetTriggerMask(),
252          GetMagneticField() );
253     printf("Vertex: (%.4f +- %.4f, %.4f +- %.4f, %.4f +- %.4f) cm\n",
254            fPrimaryVertex.GetXv(), fPrimaryVertex.GetXRes(),
255            fPrimaryVertex.GetYv(), fPrimaryVertex.GetYRes(),
256            fPrimaryVertex.GetZv(), fPrimaryVertex.GetZRes());
257     printf("SPD Multiplicity. Number of tracklets %d \n",
258            fSPDMult.GetNumberOfTracklets());
259   printf("Event from reconstruction version %d \n",fRecoVersion);
260   printf("Number of tracks: \n");
261   printf("                 charged   %d\n", GetNumberOfTracks());
262   printf("                 hlt CF    %d\n", GetNumberOfHLTConfMapTracks());
263   printf("                 hlt HT    %d\n", GetNumberOfHLTHoughTracks());
264   printf("                 muon      %d\n", GetNumberOfMuonTracks());
265   printf("                 pmd       %d\n", GetNumberOfPmdTracks());
266   printf("                 trd       %d\n", GetNumberOfTrdTracks());
267   printf("                 v0        %d\n", GetNumberOfV0s());
268   printf("                 cascades  %d\n", GetNumberOfCascades());
269   printf("                 kinks     %d\n", GetNumberOfKinks());
270   printf("                 V0MIs     %d\n", GetNumberOfV0MIs());
271   printf("                 CaloClusters %d\n", GetNumberOfCaloClusters());
272   printf("                 phos      %d\n", GetNumberOfPHOSClusters());
273   printf("                 emcal     %d\n", GetNumberOfEMCALClusters());
274   printf("                 FMD       %s\n", (fESDFMD ? "yes" : "no"));
275 }
276
277 void AliESD::SetESDfriend(const AliESDfriend *ev) {
278   //
279   // Attaches the complementary info to the ESD
280   //
281   if (!ev) return;
282
283   Int_t ntrk=ev->GetNumberOfTracks();
284
285   for (Int_t i=0; i<ntrk; i++) {
286     const AliESDfriendTrack *f=ev->GetTrack(i);
287     GetTrack(i)->SetFriendTrack(f);
288   }
289 }
290
291 void AliESD::GetESDfriend(AliESDfriend *ev) const {
292   //
293   // Extracts the complementary info from the ESD
294   //
295   if (!ev) return;
296
297   Int_t ntrk=GetNumberOfTracks();
298
299   for (Int_t i=0; i<ntrk; i++) {
300     const AliESDtrack *t=GetTrack(i);
301     const AliESDfriendTrack *f=t->GetFriendTrack();
302     ev->AddTrack(f);
303   }
304 }