// J.L. Klay (LLNL)
//-----------------------------------------------------------------
+#include <TLorentzVector.h>
#include "AliESDCaloCluster.h"
ClassImp(AliESDCaloCluster)
//_______________________________________________________________________
AliESDCaloCluster::AliESDCaloCluster() :
- fID(0),
- fClusterType(-1),
- fEMCALCluster(kFALSE),
- fPHOSCluster(kFALSE),
- fEnergy(-1),
- fDispersion(-1),
- fChi2(-1),
- fPrimaryIndex(-1),
+ TObject(),
+ fTracksMatched(0x0),
+ fLabels(0x0),
+ fDigitAmplitude(0x0),
+ fDigitTime(0x0),
+ fDigitIndex(0x0),
+ fEnergy(0),
+ fDispersion(0),
+ fChi2(0),
fM20(0),
fM02(0),
fM11(0),
+ fEmcCpvDistance(1024),
+ fDistToBadChannel(1024),
+ fID(0),
fNExMax(0),
- fEmcCpvDistance(9999),
- fNumberOfDigits(0),
- fDigitAmplitude(0x0),
- fDigitTime(0x0),
- fDigitIndex(0x0)
+ fClusterType(kUndef)
{
//
// The default ESD constructor
//_______________________________________________________________________
AliESDCaloCluster::AliESDCaloCluster(const AliESDCaloCluster& clus) :
TObject(clus),
- fID(clus.fID),
- fClusterType(clus.fClusterType),
- fEMCALCluster(clus.fEMCALCluster),
- fPHOSCluster(clus.fPHOSCluster),
+ fTracksMatched(clus.fTracksMatched?new TArrayS(*clus.fTracksMatched):0x0),
+ fLabels(clus.fLabels?new TArrayS(*clus.fLabels):0x0),
+ fDigitAmplitude(clus.fDigitAmplitude?new TArrayS(*clus.fDigitAmplitude):0x0),
+ fDigitTime(clus.fDigitTime?new TArrayS(*clus.fDigitTime):0x0),
+ fDigitIndex(clus.fDigitIndex?new TArrayS(*clus.fDigitIndex):0x0),
fEnergy(clus.fEnergy),
fDispersion(clus.fDispersion),
fChi2(clus.fChi2),
- fPrimaryIndex(clus.fPrimaryIndex),
fM20(clus.fM20),
fM02(clus.fM02),
fM11(clus.fM11),
- fNExMax(clus.fNExMax),
fEmcCpvDistance(clus.fEmcCpvDistance),
- fNumberOfDigits(clus.fNumberOfDigits),
- fDigitAmplitude(0x0),
- fDigitTime(0x0),
- fDigitIndex(0x0)
+ fDistToBadChannel(clus.fDistToBadChannel),
+ fID(clus.fID),
+ fNExMax(clus.fNExMax),
+ fClusterType(clus.fClusterType)
{
//
// The copy constructor
for(Int_t i=0; i<AliPID::kSPECIESN; i++) fPID[i] = clus.fPID[i];
- if (clus.fNumberOfDigits > 0) {
- if (clus.fDigitAmplitude) {
- fDigitAmplitude = new UShort_t[clus.fNumberOfDigits];
- for (Int_t i=0; i<clus.fNumberOfDigits; i++)
- fDigitAmplitude[i]=clus.fDigitAmplitude[i];
- }
- if (clus.fDigitTime) {
- fDigitTime = new UShort_t[clus.fNumberOfDigits];
- for (Int_t i=0; i<clus.fNumberOfDigits; i++)
- fDigitTime[i]=clus.fDigitTime[i];
- }
- if (clus.fDigitIndex) {
- fDigitIndex = new UShort_t[clus.fNumberOfDigits];
- for (Int_t i=0; i<clus.fNumberOfDigits; i++)
- fDigitIndex[i]=clus.fDigitIndex[i];
- }
- }
}
//_______________________________________________________________________
// assignment operator
if(&source == this) return *this;
+ TObject::operator=(source);
+
+ fGlobalPos[0] = source.fGlobalPos[0];
+ fGlobalPos[1] = source.fGlobalPos[1];
+ fGlobalPos[2] = source.fGlobalPos[2];
+
- fID = source.fID;
- fClusterType = source.fClusterType;
- fEMCALCluster = source.fEMCALCluster;
- fPHOSCluster = source.fPHOSCluster;
fEnergy = source.fEnergy;
fDispersion = source.fDispersion;
fChi2 = source.fChi2;
- fPrimaryIndex = source.fPrimaryIndex;
fM20 = source.fM20;
fM02 = source.fM02;
fM11 = source.fM11;
- fNExMax = source.fNExMax;
fEmcCpvDistance = source.fEmcCpvDistance;
- fNumberOfDigits = source.fNumberOfDigits;
- delete fDigitAmplitude; fDigitAmplitude=0x0;
- delete fDigitTime; fDigitTime = 0x0;
- delete fDigitIndex; fDigitIndex = 0x0;
+ fDistToBadChannel = source.fDistToBadChannel ;
+ for(Int_t i=0; i<AliPID::kSPECIESN; i++) fPID[i] = source.fPID[i];
+ fID = source.fID;
- fGlobalPos[0] = source.fGlobalPos[0];
- fGlobalPos[1] = source.fGlobalPos[1];
- fGlobalPos[2] = source.fGlobalPos[2];
+ delete fTracksMatched;
+ fTracksMatched = source.fTracksMatched?new TArrayS(*source.fTracksMatched):0x0;
+ delete fLabels;
+ fLabels = source.fLabels?new TArrayS(*source.fLabels):0x0;
- for(Int_t i=0; i<AliPID::kSPECIESN; i++) fPID[i] = source.fPID[i];
+ delete fDigitAmplitude;
+ fDigitAmplitude = source.fDigitAmplitude?new TArrayS(*source.fDigitAmplitude):0x0;
- if (source.fNumberOfDigits > 0) {
- if (source.fDigitAmplitude) {
- fDigitAmplitude = new UShort_t[source.fNumberOfDigits];
- for (Int_t i=0; i<source.fNumberOfDigits; i++)
- fDigitAmplitude[i]=source.fDigitAmplitude[i];
- }
- if (source.fDigitTime) {
- fDigitTime = new UShort_t[source.fNumberOfDigits];
- for (Int_t i=0; i<source.fNumberOfDigits; i++)
- fDigitTime[i]=source.fDigitTime[i];
- }
- if (source.fDigitIndex) {
- fDigitIndex = new UShort_t[source.fNumberOfDigits];
- for (Int_t i=0; i<source.fNumberOfDigits; i++)
- fDigitIndex[i]=source.fDigitIndex[i];
- }
- }
+ delete fDigitTime;
+ fDigitTime = source.fDigitTime?new TArrayS(*source.fDigitTime):0x0;
+
+ delete fDigitIndex;
+ fDigitIndex = source.fDigitIndex?new TArrayS(*source.fDigitIndex):0x0;
+
+ fNExMax = source.fNExMax;
+ fClusterType = source.fClusterType;
return *this;
//_______________________________________________________________________
AliESDCaloCluster::~AliESDCaloCluster(){
//
- // This is destructor according Coding Conventrions
+ // This is destructor according Coding Conventions
//
- // AliESDCaloCluster is the owner of the arrays
- // even if they are created outside
-
- delete[] fDigitAmplitude;
- delete[] fDigitTime;
- delete[] fDigitIndex;
-
+ delete fTracksMatched;
+ delete fLabels;
+ delete fDigitAmplitude;
+ delete fDigitTime;
+ delete fDigitIndex;
}
//_______________________________________________________________________
for (Int_t i=0; i<n; i++) fPID[i] = uniform;
}
+
+//_______________________________________________________________________
+void AliESDCaloCluster::GetMomentum(TLorentzVector& p, Double_t *vertex ) {
+ // Returns TLorentzVector with momentum of the cluster. Only valid for clusters
+ // identified as photons or pi0 (overlapped gamma) produced on the vertex
+ //Vertex can be recovered with esd pointer doing:
+ //" Double_t vertex[3] ; esd->GetVertex()->GetXYZ(vertex) ; "
+
+ if(vertex){//calculate direction from vertex
+ fGlobalPos[0]-=vertex[0];
+ fGlobalPos[1]-=vertex[1];
+ fGlobalPos[2]-=vertex[2];
+ }
+
+ Double_t r = TMath::Sqrt(fGlobalPos[0]*fGlobalPos[0]+
+ fGlobalPos[1]*fGlobalPos[1]+
+ fGlobalPos[2]*fGlobalPos[2] ) ;
+
+ p.SetPxPyPzE( fEnergy*fGlobalPos[0]/r, fEnergy*fGlobalPos[1]/r, fEnergy*fGlobalPos[2]/r, fEnergy) ;
+
+}
+// Sep 7, 2007
+Int_t AliESDCaloCluster::GetTrueDigitAmplitude(Int_t i, Double_t cc)
+{
+ static Int_t amp=0; // amp is integer now
+ amp = 0;
+ if(i>=0 && i<fDigitAmplitude->GetSize() && cc>0.0) {
+ // true formula
+ amp = Int_t(Double_t(fDigitAmplitude->At(i))/500./cc+0.5);
+ }
+ return amp;
+}
+
+Double_t AliESDCaloCluster::GetTrueDigitEnergy(Int_t i, Double_t cc)
+{
+ return Double_t(GetTrueDigitAmplitude(i,cc)) * cc;
+}
+
+Double_t AliESDCaloCluster::GetRecalibratedDigitEnergy(Int_t i, Double_t ccOld, Double_t ccNew)
+{
+ return Double_t(GetTrueDigitAmplitude(i,ccOld)) * ccNew;
+}