]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - STEER/AliESDCaloCluster.cxx
Obsolete TrackReferences related code removed.
[u/mrichter/AliRoot.git] / STEER / AliESDCaloCluster.cxx
index 55d938f2c9a03d9a40fea42f521e60fa1a51fb0b..78f6efa5ea3dbc6ccf6f9f55cf556bc97921cec0 100644 (file)
 //   J.L. Klay (LLNL)
 //-----------------------------------------------------------------
 
+#include <TLorentzVector.h>
 #include "AliESDCaloCluster.h"
 
 ClassImp(AliESDCaloCluster)
 
 //_______________________________________________________________________
 AliESDCaloCluster::AliESDCaloCluster() : 
-  fID(0),
-  fClusterType(-1),
-  fEMCALCluster(kFALSE),
-  fEnergy(-1),
-  fDispersion(-1),
-  fChi2(-1),
-  fPrimaryIndex(-1),
+  TObject(),
+  fTracksMatched(0x0),
+  fLabels(0x0),
+  fNCells(0),
+  fCellsAbsId(0x0),
+  fCellsAmpFraction(0x0),
+  fDigitAmplitude(0x0),//not in use
+  fDigitTime(0x0),//not in use
+  fDigitIndex(0x0),//not in use
+  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(0),
-  fDigitTime(0),
-  fDigitIndex(0)
+  fClusterType(kUndef)
 {
   //
   // The default ESD constructor 
@@ -57,19 +62,25 @@ AliESDCaloCluster::AliESDCaloCluster() :
 //_______________________________________________________________________
 AliESDCaloCluster::AliESDCaloCluster(const AliESDCaloCluster& clus) : 
   TObject(clus),
-  fID(clus.fID),
-  fClusterType(clus.fClusterType),
-  fEMCALCluster(clus.fEMCALCluster),
+  fTracksMatched(clus.fTracksMatched?new TArrayI(*clus.fTracksMatched):0x0),
+  fLabels(clus.fLabels?new TArrayI(*clus.fLabels):0x0),
+  fNCells(clus.fNCells),
+  fCellsAbsId(),
+  fCellsAmpFraction(),
+  fDigitAmplitude(clus.fDigitAmplitude?new TArrayS(*clus.fDigitAmplitude):0x0),//not in use
+  fDigitTime(clus.fDigitTime?new TArrayS(*clus.fDigitTime):0x0),//not in use
+  fDigitIndex(clus.fDigitIndex?new TArrayS(*clus.fDigitIndex):0x0),//not in use
   fEnergy(clus.fEnergy),
   fDispersion(clus.fDispersion),
   fChi2(clus.fChi2),
-  fPrimaryIndex(clus.fPrimaryIndex),
   fM20(clus.fM20),
   fM02(clus.fM02),
-  fM11(clus.fNExMax),
-  fNExMax(clus.fNExMax),
+  fM11(clus.fM11),
   fEmcCpvDistance(clus.fEmcCpvDistance),
-  fNumberOfDigits(clus.fNumberOfDigits)
+  fDistToBadChannel(clus.fDistToBadChannel),
+  fID(clus.fID),
+  fNExMax(clus.fNExMax),
+  fClusterType(clus.fClusterType)
 {
   //
   // The copy constructor 
@@ -80,9 +91,84 @@ AliESDCaloCluster::AliESDCaloCluster(const AliESDCaloCluster& clus) :
 
   for(Int_t i=0; i<AliPID::kSPECIESN; i++) fPID[i] = clus.fPID[i];
 
-  fDigitAmplitude = clus.fDigitAmplitude;
-  fDigitTime = clus.fDigitTime;
-  fDigitIndex = clus.fDigitIndex;
+  if (clus.fNCells > 0) {
+
+    if(clus.fCellsAbsId){
+      fCellsAbsId = new UShort_t[clus.fNCells];
+      for (Int_t i=0; i<clus.fNCells; i++)
+       fCellsAbsId[i]=clus.fCellsAbsId[i];
+    }
+    
+    if(clus.fCellsAmpFraction){
+      fCellsAmpFraction = new Double32_t[clus.fNCells];
+      for (Int_t i=0; i<clus.fNCells; i++)
+       fCellsAmpFraction[i]=clus.fCellsAmpFraction[i];
+    }
+    
+  }
+
+}
+
+//_______________________________________________________________________
+AliESDCaloCluster &AliESDCaloCluster::operator=(const AliESDCaloCluster& source)
+{
+  // 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];
+
+
+  fEnergy = source.fEnergy;
+  fDispersion = source.fDispersion;
+  fChi2 = source.fChi2;
+  fM20 = source.fM20;
+  fM02 = source.fM02;
+  fM11 = source.fM11;
+  fEmcCpvDistance = source.fEmcCpvDistance;
+  fDistToBadChannel = source.fDistToBadChannel ;
+  for(Int_t i=0; i<AliPID::kSPECIESN; i++) fPID[i] = source.fPID[i];
+  fID = source.fID;
+
+  fNCells= source. fNCells;
+  if (source.fNCells > 0) {
+    
+    if(source.fCellsAbsId){
+      fCellsAbsId = new UShort_t[source.fNCells];
+      for (Int_t i=0; i<source.fNCells; i++)
+       fCellsAbsId[i]=source.fCellsAbsId[i];
+    }
+    
+    if(source.fCellsAmpFraction){
+      fCellsAmpFraction = new Double32_t[source.fNCells];
+      for (Int_t i=0; i<source.fNCells; i++)
+       fCellsAmpFraction[i]=source.fCellsAmpFraction[i];
+    }
+    
+  }
+
+  fNExMax = source.fNExMax;
+  fClusterType = source.fClusterType;
+
+  //not in use
+  delete fTracksMatched;
+  fTracksMatched = source.fTracksMatched?new TArrayI(*source.fTracksMatched):0x0;
+  delete fLabels;
+  fLabels = source.fLabels?new TArrayI(*source.fLabels):0x0;
+  
+  delete fDigitAmplitude;
+  fDigitAmplitude = source.fDigitAmplitude?new TArrayS(*source.fDigitAmplitude):0x0;
+  
+  delete fDigitTime;
+  fDigitTime = source.fDigitTime?new TArrayS(*source.fDigitTime):0x0;
+  
+  delete fDigitIndex;
+  fDigitIndex = source.fDigitIndex?new TArrayS(*source.fDigitIndex):0x0;
+  
+  return *this;
 
 }
 
@@ -90,22 +176,15 @@ AliESDCaloCluster::AliESDCaloCluster(const AliESDCaloCluster& clus) :
 //_______________________________________________________________________
 AliESDCaloCluster::~AliESDCaloCluster(){ 
   //
-  // This is destructor according Coding Conventrions 
+  // This is destructor according Coding Conventions 
   //
-  //printf("Delete cluster\n");
-
-  //Not sure why but it won't let me delete these in the dtor here.
-  //The Reconstruction gives me the error
-  //*** glibc detected *** double free or corruption (!prev):
-  //0x0c1550b0 ***
-  /*
-  if(fDigitAmplitude)
-    delete[] fDigitAmplitude;
-  if(fDigitTime)
-    delete[] fDigitTime;
-  if(fDigitIndex)
-    delete[] fDigitIndex;
-  */
+  delete fTracksMatched;
+  delete fLabels;
+  delete fDigitAmplitude;  //not in use
+  delete fDigitTime;  //not in use
+  delete fDigitIndex;  //not in use
+  if(fCellsAmpFraction) delete[] fCellsAmpFraction; fCellsAmpFraction=0;
+  if(fCellsAbsId) delete[] fCellsAbsId;  fCellsAbsId = 0;
 }
 
 //_______________________________________________________________________
@@ -139,3 +218,24 @@ void AliESDCaloCluster::SetPid(const Float_t *p) {
     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) ; 
+  
+}