]> git.uio.no Git - u/mrichter/AliRoot.git/blob - STEER/AliESDCaloCluster.cxx
- Names of methods GetClusterEnergy(), GetGlobalPosition(), GetPrimaryIndex(),...
[u/mrichter/AliRoot.git] / STEER / AliESDCaloCluster.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 /* $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
27 #include <TLorentzVector.h>
28 #include "AliESDCaloCluster.h"
29
30 ClassImp(AliESDCaloCluster)
31
32 //_______________________________________________________________________
33 AliESDCaloCluster::AliESDCaloCluster() : 
34   fID(0),
35   fClusterType(-1),
36   fEMCALCluster(kFALSE),
37   fPHOSCluster(kFALSE),
38   fEnergy(-1),
39   fDispersion(-1),
40   fChi2(-1),
41   fM20(0),
42   fM02(0),
43   fM11(0),
44   fNExMax(0),
45   fEmcCpvDistance(9999),
46   fDistToBadChannel(9999),
47   fTracksMatched(0x0),
48   fLabels(0x0),
49   fDigitAmplitude(0x0),
50   fDigitTime(0x0),
51   fDigitIndex(0x0)
52 {
53   //
54   // The default ESD constructor 
55   //
56   fGlobalPos[0] = fGlobalPos[1] = fGlobalPos[2] = 0.;
57   for(Int_t i=0; i<AliPID::kSPECIESN; i++) fPID[i] = 0.;
58 }
59
60 //_______________________________________________________________________
61 AliESDCaloCluster::AliESDCaloCluster(const AliESDCaloCluster& clus) : 
62   TObject(clus),
63   fID(clus.fID),
64   fClusterType(clus.fClusterType),
65   fEMCALCluster(clus.fEMCALCluster),
66   fPHOSCluster(clus.fPHOSCluster),
67   fEnergy(clus.fEnergy),
68   fDispersion(clus.fDispersion),
69   fChi2(clus.fChi2),
70   fM20(clus.fM20),
71   fM02(clus.fM02),
72   fM11(clus.fM11),
73   fNExMax(clus.fNExMax),
74   fEmcCpvDistance(clus.fEmcCpvDistance),
75   fDistToBadChannel(clus.fDistToBadChannel),
76   fTracksMatched(clus.fTracksMatched),
77   fLabels(clus.fLabels),
78   fDigitAmplitude(clus.fDigitAmplitude),
79   fDigitTime(clus.fDigitTime),
80   fDigitIndex(clus.fDigitIndex)
81 {
82   //
83   // The copy constructor 
84   //
85   fGlobalPos[0] = clus.fGlobalPos[0];
86   fGlobalPos[1] = clus.fGlobalPos[1];
87   fGlobalPos[2] = clus.fGlobalPos[2];
88
89   for(Int_t i=0; i<AliPID::kSPECIESN; i++) fPID[i] = clus.fPID[i];
90
91 }
92
93 //_______________________________________________________________________
94 AliESDCaloCluster &AliESDCaloCluster::operator=(const AliESDCaloCluster& source)
95 {
96   // assignment operator
97
98   if(&source == this) return *this;
99
100   fID = source.fID;
101   fClusterType = source.fClusterType;
102   fEMCALCluster = source.fEMCALCluster;
103   fPHOSCluster = source.fPHOSCluster;
104   fEnergy = source.fEnergy;
105   fDispersion = source.fDispersion;
106   fChi2 = source.fChi2;
107   fM20 = source.fM20;
108   fM02 = source.fM02;
109   fM11 = source.fM11;
110   fNExMax = source.fNExMax;
111   fEmcCpvDistance = source.fEmcCpvDistance;
112   fDistToBadChannel = source.fDistToBadChannel ;
113
114   fGlobalPos[0] = source.fGlobalPos[0];
115   fGlobalPos[1] = source.fGlobalPos[1];
116   fGlobalPos[2] = source.fGlobalPos[2];
117
118   for(Int_t i=0; i<AliPID::kSPECIESN; i++) fPID[i] = source.fPID[i];
119
120   fTracksMatched = source.fTracksMatched;
121   fLabels = source.fLabels;
122   fDigitAmplitude = source.fDigitAmplitude;
123   fDigitTime = source.fDigitTime;
124   fDigitIndex = source.fDigitIndex;
125
126
127   return *this;
128
129 }
130
131
132 //_______________________________________________________________________
133 AliESDCaloCluster::~AliESDCaloCluster(){ 
134   //
135   // This is destructor according Coding Conventions 
136   //
137   delete fTracksMatched;
138   delete fLabels;
139   delete fDigitAmplitude;
140   delete fDigitTime;
141   delete fDigitIndex;
142
143 }
144
145 //_______________________________________________________________________
146 void AliESDCaloCluster::SetPid(const Float_t *p) {
147   // Sets the probability of each particle type
148   // Copied from AliESDtrack SetPIDValues
149   // This function copies "n" PID weights from "scr" to "dest"
150   // and normalizes their sum to 1 thus producing conditional
151   // probabilities.
152   // The negative weights are set to 0.
153   // In case all the weights are non-positive they are replaced by
154   // uniform probabilities
155
156   Int_t n = AliPID::kSPECIESN;
157
158   Float_t uniform = 1./(Float_t)n;
159
160   Float_t sum = 0;
161   for (Int_t i=0; i<n; i++)
162     if (p[i]>=0) {
163       sum+=p[i];
164       fPID[i] = p[i];
165     }
166     else {
167       fPID[i] = 0;
168     }
169
170   if(sum>0)
171     for (Int_t i=0; i<n; i++) fPID[i] /= sum;
172   else
173     for (Int_t i=0; i<n; i++) fPID[i] = uniform;
174
175 }
176
177 //_______________________________________________________________________
178 void AliESDCaloCluster::GetMomentum(TLorentzVector& p, Double_t *vertex ) {
179   // Returns TLorentzVector with momentum of the cluster. Only valid for clusters 
180   // identified as photons or pi0 (overlapped gamma) produced on the vertex
181   //Vertex can be recovered with esd pointer doing:  
182   //" Double_t vertex[3] ; esd->GetVertex()->GetXYZ(vertex) ; "
183
184   if(vertex){//calculate direction from vertex
185     fGlobalPos[0]-=vertex[0];
186     fGlobalPos[1]-=vertex[1];
187     fGlobalPos[2]-=vertex[2];
188   }
189   
190   Double_t r = TMath::Sqrt(fGlobalPos[0]*fGlobalPos[0]+
191                             fGlobalPos[1]*fGlobalPos[1]+
192                             fGlobalPos[2]*fGlobalPos[2]   ) ; 
193
194   p.SetPxPyPzE( fEnergy*fGlobalPos[0]/r,  fEnergy*fGlobalPos[1]/r,  fEnergy*fGlobalPos[2]/r,  fEnergy) ; 
195   
196 }