]> git.uio.no Git - u/mrichter/AliRoot.git/blame_incremental - STEER/AliAODCaloCluster.cxx
0. Adding correction for edge effects
[u/mrichter/AliRoot.git] / STEER / AliAODCaloCluster.cxx
... / ...
CommitLineData
1/**************************************************************************
2 * Copyright(c) 1998-2007, 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// AOD calorimeter cluster class (for PHOS and EMCAL)
20// Author: Markus Oldenburg, CERN
21//-------------------------------------------------------------------------
22
23#include <TLorentzVector.h>
24#include "AliAODCaloCluster.h"
25
26ClassImp(AliAODCaloCluster)
27
28//______________________________________________________________________________
29AliAODCaloCluster::AliAODCaloCluster() :
30 AliAODCluster(),
31 fDistToBadChannel(-999.),
32 fDispersion(-1),
33 fM20(0.),
34 fM02(0.),
35 fEmcCpvDistance(-999.),
36 fNExMax(0),
37 fTOF(0.),
38 fTracksMatched(),
39 fNCells(0),
40 fCellsAbsId(),
41 fCellsAmpFraction()
42{
43 // default constructor
44
45}
46
47//______________________________________________________________________________
48AliAODCaloCluster::AliAODCaloCluster(Int_t id,
49 UInt_t nLabel,
50 Int_t *label,
51 Double_t energy,
52 Double_t x[3],
53 Double_t pid[9],
54 Char_t ttype,
55 UInt_t selectInfo) :
56 AliAODCluster(id, nLabel, label, energy, x, pid, ttype, selectInfo),
57 fDistToBadChannel(-999.),
58 fDispersion(-1),
59 fM20(0.),
60 fM02(0.),
61 fEmcCpvDistance(-999.),
62 fNExMax(0),
63 fTOF(0.),
64 fTracksMatched(),
65 fNCells(0),
66 fCellsAbsId(),
67 fCellsAmpFraction()
68{
69 // constructor
70
71}
72
73//______________________________________________________________________________
74AliAODCaloCluster::AliAODCaloCluster(Int_t id,
75 UInt_t nLabel,
76 Int_t *label,
77 Float_t energy,
78 Float_t x[3],
79 Float_t pid[9],
80 Char_t ttype,
81 UInt_t selectInfo) :
82 AliAODCluster(id, nLabel, label, energy, x, pid, ttype, selectInfo),
83 fDistToBadChannel(-999.),
84 fDispersion(-1),
85 fM20(0.),
86 fM02(0.),
87 fEmcCpvDistance(-999.),
88 fNExMax(0),
89 fTOF(0.),
90 fTracksMatched(),
91 fNCells(0),
92 fCellsAbsId(),
93 fCellsAmpFraction()
94{
95 // constructor
96}
97
98
99//______________________________________________________________________________
100AliAODCaloCluster::~AliAODCaloCluster()
101{
102 // destructor
103 if(fCellsAmpFraction) delete[] fCellsAmpFraction; fCellsAmpFraction=0;
104 if(fCellsAbsId) delete[] fCellsAbsId; fCellsAbsId = 0;
105}
106
107
108//______________________________________________________________________________
109AliAODCaloCluster::AliAODCaloCluster(const AliAODCaloCluster& clus) :
110 AliAODCluster(clus),
111 fDistToBadChannel(clus.fDistToBadChannel),
112 fDispersion(clus.fDispersion),
113 fM20(clus.fM20),
114 fM02(clus.fM02),
115 fEmcCpvDistance(clus.fEmcCpvDistance),
116 fNExMax(clus.fNExMax),
117 fTOF(clus.fTOF),
118 fTracksMatched(clus.fTracksMatched),
119 fNCells(clus.fNCells),
120 fCellsAbsId(),
121 fCellsAmpFraction()
122{
123 // Copy constructor
124
125 if (clus.fNCells > 0) {
126
127 if(clus.fCellsAbsId){
128 fCellsAbsId = new UShort_t[clus.fNCells];
129 for (Int_t i=0; i<clus.fNCells; i++)
130 fCellsAbsId[i]=clus.fCellsAbsId[i];
131 }
132
133 if(clus.fCellsAmpFraction){
134 fCellsAmpFraction = new Double32_t[clus.fNCells];
135 for (Int_t i=0; i<clus.fNCells; i++)
136 fCellsAmpFraction[i]=clus.fCellsAmpFraction[i];
137 }
138
139 }
140
141}
142
143//______________________________________________________________________________
144AliAODCaloCluster& AliAODCaloCluster::operator=(const AliAODCaloCluster& clus)
145{
146 // Assignment operator
147 if(this!=&clus) {
148
149 AliAODCluster::operator=(clus);
150
151 fDistToBadChannel = clus.fDistToBadChannel;
152 fDispersion = clus.fDispersion;
153 fM20 = clus.fM20;
154 fM02 = clus.fM02;
155 fEmcCpvDistance = clus.fEmcCpvDistance;
156 fNExMax = clus.fNExMax;
157 fTOF = clus.fTOF;
158 fTracksMatched = clus.fTracksMatched;
159
160 fNCells= clus. fNCells;
161 if (clus.fNCells > 0) {
162
163 if(clus.fCellsAbsId){
164 fCellsAbsId = new UShort_t[clus.fNCells];
165 for (Int_t i=0; i<clus.fNCells; i++)
166 fCellsAbsId[i]=clus.fCellsAbsId[i];
167 }
168
169 if(clus.fCellsAmpFraction){
170 fCellsAmpFraction = new Double32_t[clus.fNCells];
171 for (Int_t i=0; i<clus.fNCells; i++)
172 fCellsAmpFraction[i]=clus.fCellsAmpFraction[i];
173 }
174
175 }
176
177 }
178
179 return *this;
180}
181
182//_______________________________________________________________________
183Bool_t AliAODCaloCluster::HasTrackMatched(TObject *trk) const
184{
185 // Checks if the given track contributed to this cluster.
186
187 TRefArrayIter iter(&fTracksMatched);
188 while (TObject *track = iter.Next()) {
189 if (trk == track) return kTRUE;
190 }
191 return kFALSE;
192}
193
194//_______________________________________________________________________
195void AliAODCaloCluster::GetMomentum(TLorentzVector& p, Double_t *vertex ) {
196 // Returns TLorentzVector with momentum of the cluster. Only valid for clusters
197 // identified as photons or pi0 (overlapped gamma) produced on the vertex
198 //Vertex can be recovered with esd pointer doing:
199 //" Double_t vertex[3] ; esd->GetVertex()->GetXYZ(vertex) ; "
200
201 Double32_t energy = E();
202 Double32_t pos[3];
203 GetPosition(pos);
204
205 if(vertex){//calculate direction from vertex
206 pos[0]-=vertex[0];
207 pos[1]-=vertex[1];
208 pos[2]-=vertex[2];
209 }
210
211 Double_t r = TMath::Sqrt(pos[0]*pos[0]+
212 pos[1]*pos[1]+
213 pos[2]*pos[2] ) ;
214
215 p.SetPxPyPzE( energy*pos[0]/r, energy*pos[1]/r, energy*pos[2]/r, energy) ;
216
217}