]> git.uio.no Git - u/mrichter/AliRoot.git/blame - STEER/AliESDCaloCluster.cxx
Update task for ITS tracking check and new macro for plots
[u/mrichter/AliRoot.git] / STEER / AliESDCaloCluster.cxx
CommitLineData
85c60a8e 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/* $Log $ */
18
19//-----------------------------------------------------------------
20// Implementation of the ESD Calorimeter cluster class
21// ESD = Event Summary Data
22// This is the class to deal with during the phisics analysis of data
23//
24// J.L. Klay (LLNL)
25//-----------------------------------------------------------------
26
bab0b5f0 27#include <TLorentzVector.h>
85c60a8e 28#include "AliESDCaloCluster.h"
29
30ClassImp(AliESDCaloCluster)
31
32//_______________________________________________________________________
33AliESDCaloCluster::AliESDCaloCluster() :
8ada0ffe 34 TObject(),
5efdec54 35 fTracksMatched(0x0),
36 fLabels(0x0),
e649177a 37 fNCells(0),
38 fCellsAbsId(0x0),
39 fCellsAmpFraction(0x0),
40 fDigitAmplitude(0x0),//not in use
41 fDigitTime(0x0),//not in use
42 fDigitIndex(0x0),//not in use
8ada0ffe 43 fEnergy(0),
44 fDispersion(0),
45 fChi2(0),
46 fM20(0),
47 fM02(0),
8ada0ffe 48 fEmcCpvDistance(1024),
49 fDistToBadChannel(1024),
50 fID(0),
51 fNExMax(0),
78902954 52 fClusterType(kUndef), fTOF(0.)
85c60a8e 53{
54 //
55 // The default ESD constructor
56 //
57 fGlobalPos[0] = fGlobalPos[1] = fGlobalPos[2] = 0.;
58 for(Int_t i=0; i<AliPID::kSPECIESN; i++) fPID[i] = 0.;
59}
60
61//_______________________________________________________________________
62AliESDCaloCluster::AliESDCaloCluster(const AliESDCaloCluster& clus) :
63 TObject(clus),
4dd59c4a 64 fTracksMatched(clus.fTracksMatched?new TArrayI(*clus.fTracksMatched):0x0),
65 fLabels(clus.fLabels?new TArrayI(*clus.fLabels):0x0),
e649177a 66 fNCells(clus.fNCells),
67 fCellsAbsId(),
68 fCellsAmpFraction(),
69 fDigitAmplitude(clus.fDigitAmplitude?new TArrayS(*clus.fDigitAmplitude):0x0),//not in use
70 fDigitTime(clus.fDigitTime?new TArrayS(*clus.fDigitTime):0x0),//not in use
71 fDigitIndex(clus.fDigitIndex?new TArrayS(*clus.fDigitIndex):0x0),//not in use
85c60a8e 72 fEnergy(clus.fEnergy),
73 fDispersion(clus.fDispersion),
74 fChi2(clus.fChi2),
e3e93796 75 fM20(clus.fM20),
76 fM02(clus.fM02),
e3e93796 77 fEmcCpvDistance(clus.fEmcCpvDistance),
45636e1b 78 fDistToBadChannel(clus.fDistToBadChannel),
8ada0ffe 79 fID(clus.fID),
80 fNExMax(clus.fNExMax),
78902954 81 fClusterType(clus.fClusterType),
82 fTOF(clus.fTOF)
85c60a8e 83{
84 //
85 // The copy constructor
86 //
87 fGlobalPos[0] = clus.fGlobalPos[0];
88 fGlobalPos[1] = clus.fGlobalPos[1];
89 fGlobalPos[2] = clus.fGlobalPos[2];
90
91 for(Int_t i=0; i<AliPID::kSPECIESN; i++) fPID[i] = clus.fPID[i];
92
e649177a 93 if (clus.fNCells > 0) {
94
95 if(clus.fCellsAbsId){
96 fCellsAbsId = new UShort_t[clus.fNCells];
97 for (Int_t i=0; i<clus.fNCells; i++)
98 fCellsAbsId[i]=clus.fCellsAbsId[i];
99 }
100
101 if(clus.fCellsAmpFraction){
102 fCellsAmpFraction = new Double32_t[clus.fNCells];
103 for (Int_t i=0; i<clus.fNCells; i++)
104 fCellsAmpFraction[i]=clus.fCellsAmpFraction[i];
105 }
106
107 }
108
85c60a8e 109}
110
fe12e09c 111//_______________________________________________________________________
112AliESDCaloCluster &AliESDCaloCluster::operator=(const AliESDCaloCluster& source)
113{
114 // assignment operator
115
116 if(&source == this) return *this;
8ada0ffe 117 TObject::operator=(source);
8ada0ffe 118 fGlobalPos[0] = source.fGlobalPos[0];
119 fGlobalPos[1] = source.fGlobalPos[1];
120 fGlobalPos[2] = source.fGlobalPos[2];
121
fe12e09c 122 fEnergy = source.fEnergy;
123 fDispersion = source.fDispersion;
124 fChi2 = source.fChi2;
fe12e09c 125 fM20 = source.fM20;
126 fM02 = source.fM02;
fe12e09c 127 fEmcCpvDistance = source.fEmcCpvDistance;
45636e1b 128 fDistToBadChannel = source.fDistToBadChannel ;
fe12e09c 129 for(Int_t i=0; i<AliPID::kSPECIESN; i++) fPID[i] = source.fPID[i];
8ada0ffe 130 fID = source.fID;
fe12e09c 131
732a24fe 132 fNCells= source.fNCells;
133
e649177a 134 if (source.fNCells > 0) {
e649177a 135 if(source.fCellsAbsId){
85005d58 136 if(fNCells != source.fNCells||!fCellsAbsId){
137 if(fCellsAbsId)delete [] fCellsAbsId;
732a24fe 138 fCellsAbsId = new UShort_t[source.fNCells];
139 }
85005d58 140 for (Int_t i=0; i<source.fNCells; i++){
e649177a 141 fCellsAbsId[i]=source.fCellsAbsId[i];
85005d58 142 }
e649177a 143 }
144
145 if(source.fCellsAmpFraction){
85005d58 146 if(fNCells != source.fNCells||!fCellsAmpFraction){
147 if(fCellsAmpFraction) delete [] fCellsAmpFraction;
732a24fe 148 fCellsAmpFraction = new Double32_t[source.fNCells];
149 }
e649177a 150 for (Int_t i=0; i<source.fNCells; i++)
151 fCellsAmpFraction[i]=source.fCellsAmpFraction[i];
732a24fe 152 }
e649177a 153 }
154
155 fNExMax = source.fNExMax;
156 fClusterType = source.fClusterType;
78902954 157 fTOF = source.fTOF;
e649177a 158
159 //not in use
732a24fe 160 if(source.fTracksMatched){
161 // assign or copy construct
85005d58 162 if(fTracksMatched){
163 *fTracksMatched = *source.fTracksMatched;
164 }
732a24fe 165 else fTracksMatched = new TArrayI(*source.fTracksMatched);
166 }
167 else{
85005d58 168 if(fTracksMatched)delete fTracksMatched;
732a24fe 169 fTracksMatched = 0;
170 }
171
172 if(source.fLabels){
173 // assign or copy construct
85005d58 174 if(fLabels){
175 *fLabels = *source.fLabels;
176 }
732a24fe 177 else fLabels = new TArrayI(*source.fLabels);
178 }
179 else{
85005d58 180 if(fLabels)delete fLabels;
732a24fe 181 fLabels = 0;
182 }
183
184
185 if(source.fDigitAmplitude){
186 // assign or copy construct
187 if(fDigitAmplitude) *fDigitAmplitude = *source.fDigitAmplitude;
188 else fDigitAmplitude = new TArrayS(*source.fDigitAmplitude);
85005d58 189 }
732a24fe 190 else{
191 delete fDigitAmplitude;
192 fDigitAmplitude = 0;
193 }
194
195
196
197 if(source.fDigitTime){
198 // assign or copy construct
199 if(fDigitTime) *fDigitTime = *source.fDigitTime;
200 else fDigitTime = new TArrayS(*source.fDigitTime);
201 }
202 else{
203 delete fDigitTime;
204 fDigitTime = 0;
205 }
206
207
208
209 if(source.fDigitIndex){
210 // assign or copy construct
211 if(fDigitIndex) *fDigitIndex = *source.fDigitIndex;
212 else fDigitIndex = new TArrayS(*source.fDigitIndex);
213 }
214 else{
215 delete fDigitIndex;
216 fDigitIndex = 0;
217 }
e649177a 218
fe12e09c 219 return *this;
220
221}
222
732a24fe 223void AliESDCaloCluster::Copy(TObject &obj) const {
224
225 // this overwrites the virtual TOBject::Copy()
226 // to allow run time copying without casting
227 // in AliESDEvent
228
229 if(this==&obj)return;
230 AliESDCaloCluster *robj = dynamic_cast<AliESDCaloCluster*>(&obj);
231 if(!robj)return; // not an AliESDCluster
232 *robj = *this;
233
234}
85c60a8e 235
236//_______________________________________________________________________
237AliESDCaloCluster::~AliESDCaloCluster(){
238 //
5efdec54 239 // This is destructor according Coding Conventions
85c60a8e 240 //
85005d58 241 if(fTracksMatched)delete fTracksMatched;fTracksMatched = 0;
242 if(fLabels) delete fLabels; fLabels = 0;
e649177a 243 delete fDigitAmplitude; //not in use
244 delete fDigitTime; //not in use
245 delete fDigitIndex; //not in use
85005d58 246 if(fCellsAmpFraction){ delete[] fCellsAmpFraction; fCellsAmpFraction=0;}
247 if(fCellsAbsId){ delete[] fCellsAbsId; fCellsAbsId = 0;}
85c60a8e 248}
249
250//_______________________________________________________________________
251void AliESDCaloCluster::SetPid(const Float_t *p) {
252 // Sets the probability of each particle type
253 // Copied from AliESDtrack SetPIDValues
254 // This function copies "n" PID weights from "scr" to "dest"
255 // and normalizes their sum to 1 thus producing conditional
256 // probabilities.
257 // The negative weights are set to 0.
258 // In case all the weights are non-positive they are replaced by
259 // uniform probabilities
260
261 Int_t n = AliPID::kSPECIESN;
262
263 Float_t uniform = 1./(Float_t)n;
264
265 Float_t sum = 0;
266 for (Int_t i=0; i<n; i++)
267 if (p[i]>=0) {
268 sum+=p[i];
269 fPID[i] = p[i];
270 }
271 else {
272 fPID[i] = 0;
273 }
274
275 if(sum>0)
276 for (Int_t i=0; i<n; i++) fPID[i] /= sum;
277 else
278 for (Int_t i=0; i<n; i++) fPID[i] = uniform;
279
280}
bab0b5f0 281
282//_______________________________________________________________________
5efdec54 283void AliESDCaloCluster::GetMomentum(TLorentzVector& p, Double_t *vertex ) {
bab0b5f0 284 // Returns TLorentzVector with momentum of the cluster. Only valid for clusters
285 // identified as photons or pi0 (overlapped gamma) produced on the vertex
5efdec54 286 //Vertex can be recovered with esd pointer doing:
287 //" Double_t vertex[3] ; esd->GetVertex()->GetXYZ(vertex) ; "
288
289 if(vertex){//calculate direction from vertex
290 fGlobalPos[0]-=vertex[0];
291 fGlobalPos[1]-=vertex[1];
292 fGlobalPos[2]-=vertex[2];
293 }
bab0b5f0 294
295 Double_t r = TMath::Sqrt(fGlobalPos[0]*fGlobalPos[0]+
296 fGlobalPos[1]*fGlobalPos[1]+
297 fGlobalPos[2]*fGlobalPos[2] ) ;
298
299 p.SetPxPyPzE( fEnergy*fGlobalPos[0]/r, fEnergy*fGlobalPos[1]/r, fEnergy*fGlobalPos[2]/r, fEnergy) ;
300
301}
ed712271 302
303//_______________________________________________________________________
304void AliESDCaloCluster::SetCellsAbsId(UShort_t *array)
305{
306 // Set the array of cell absId numbers
307 if (fNCells) {
308 fCellsAbsId = new UShort_t[fNCells];
309 for (Int_t i = 0; i < fNCells; i++) fCellsAbsId[i] = array[i];
310 }
311}
312
313//_______________________________________________________________________
314void AliESDCaloCluster::SetCellsAmplitudeFraction(Double32_t *array)
315{
316 // Set the array of cell amplitude fraction
317 if (fNCells) {
318 fCellsAmpFraction = new Double32_t[fNCells];
319 for (Int_t i = 0; i < fNCells; i++) fCellsAmpFraction[i] = array[i];
320 }
321}