]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - EMCAL/AliEMCALDigit.cxx
1. fPrimary and fParent are created by ctor
[u/mrichter/AliRoot.git] / EMCAL / AliEMCALDigit.cxx
index 49ecc78f3cb4bef985a27306aa8649492f5e811c..f90e10f152a88d8fd763a5e1c362ffec54a35c17 100644 (file)
  * provided "as is" without express or implied warranty.                  *
  **************************************************************************/
 
-/* $Id$ */
+/* $Id */
 
 //_________________________________________________________________________
-//  EMCAL digit: Id
-//              energy
-//              3 identifiers for the primary particle(s) at the origine of the digit
-//  The digits are made in FinishEvent() by summing all the hits in a single EMCAL crystal or PPSD gas cell
-//  It would be nice to replace the 3 identifiers by an array, but, because digits are kept in a TClonesQArray,
-//   it is not possible to stream such an array... (beyond my understqnding!)
+//  EMCAL digit: 
+//      A Digit is the sum of the energy lost in an EMCAL Tower
+//      It also stores information on Primary, and enterring particle
+//      tracknumbers Digits are created using AliEMCALSDigitizer, followed
+//      by AliEMCALDigitizer 
 //
-//*-- Author: Laurent Aphecetche & Yves Schutz (SUBATECH)
-
+//*-- Author: Sahal Yacoob (LBL)
+// based on : AliPHOSDigit
+//__________________________________________________________________________
 
 // --- ROOT system ---
 
@@ -35,6 +35,8 @@
 // --- AliRoot header files ---
 
 #include "AliEMCALDigit.h"
+#include "AliEMCALGeometry.h"
+#include "AliEMCALGetter.h"
 
 
 ClassImp(AliEMCALDigit)
@@ -49,16 +51,21 @@ ClassImp(AliEMCALDigit)
   fNMaxPrimary = 5 ; 
   fNiparent     = 0 ;
   fNMaxiparent = fNMaxPrimary*10;
+  fPrimary = new Int_t[fNMaxPrimary] ;
+  fIparent = new Int_t[fNMaxiparent] ; 
 }
 
 //____________________________________________________________________________
-AliEMCALDigit::AliEMCALDigit(Int_t primary, Int_t iparent, Int_t id, Int_t DigEnergy, Int_t index) 
+AliEMCALDigit::AliEMCALDigit(Int_t primary, Int_t iparent, Int_t id, Int_t DigEnergy, Float_t time, Int_t index) 
 {  
   // ctor with all data 
 
   fNMaxPrimary = 5 ; 
   fNMaxiparent = fNMaxPrimary*10;
+  fPrimary = new Int_t[fNMaxPrimary] ;
+  fIparent = new Int_t[fNMaxiparent] ; 
   fAmp         = DigEnergy ;
+  fTime        = time ;
   fId          = id ;
   fIndexInList = index ; 
   if( primary != -1){
@@ -91,6 +98,8 @@ AliEMCALDigit::AliEMCALDigit(const AliEMCALDigit & digit)
 
   fNMaxPrimary = digit.fNMaxPrimary ;  
   fNMaxiparent = digit.fNMaxiparent ;
+  fPrimary = new Int_t[fNMaxPrimary] ;
+  fIparent = new Int_t[fNMaxiparent] ; 
   Int_t i ;
   for ( i = 0; i < fNMaxPrimary ; i++)
   fPrimary[i]  = digit.fPrimary[i] ;
@@ -98,6 +107,7 @@ AliEMCALDigit::AliEMCALDigit(const AliEMCALDigit & digit)
   for (j = 0; j< fNMaxiparent ; j++)
   fIparent[j]  = digit.fIparent[j] ;
   fAmp         = digit.fAmp ;
+  fTime        = digit.fTime ;
   fId          = digit.fId;
   fIndexInList = digit.fIndexInList ; 
   fNprimary    = digit.fNprimary ;
@@ -108,7 +118,8 @@ AliEMCALDigit::AliEMCALDigit(const AliEMCALDigit & digit)
 AliEMCALDigit::~AliEMCALDigit() 
 {
   // Delete array of primiries if any
-  
+    delete [] fPrimary ;
+    delete [] fIparent ; 
 }
 
 //____________________________________________________________________________
@@ -134,12 +145,28 @@ Int_t AliEMCALDigit::Compare(const TObject * obj) const
 
 }
 
+//____________________________________________________________________________
+const Float_t AliEMCALDigit::GetEta() const
+{
+  Float_t eta=-10., phi=-10.;
+  AliEMCALGeometry::GetInstance()->EtaPhiFromIndex(fId,eta,phi);
+  return eta ;
+}
+
+//____________________________________________________________________________
+const Float_t AliEMCALDigit::GetPhi() const
+{
+  Float_t eta=-10., phi=-10.;
+  AliEMCALGeometry::GetInstance()->EtaPhiFromIndex(fId,eta,phi);
+  return phi ;
+}
+
 //____________________________________________________________________________
 Int_t AliEMCALDigit::GetPrimary(Int_t index) const
 {
   // retrieves the primary particle number given its index in the list 
   Int_t rv = -1 ;
-  if ( index <= fNprimary ){
+  if ( index <= fNprimary && index > 0){
     rv = fPrimary[index-1] ;
   } 
 
@@ -160,6 +187,15 @@ Int_t AliEMCALDigit::GetIparent(Int_t index) const
   
 }
 
+//______________________________________________________________________
+const Bool_t AliEMCALDigit::IsInPreShower() const 
+{
+  Bool_t rv = kFALSE ;
+  const AliEMCALGeometry * geom = AliEMCALGetter::GetInstance()->EMCALGeometry() ;
+  if( GetId() > (geom->GetNZ() * geom->GetNPhi() )) 
+    rv = kTRUE; 
+  return rv; 
+} 
 
 //____________________________________________________________________________
 void AliEMCALDigit::ShiftPrimary(Int_t shift){
@@ -188,6 +224,8 @@ AliEMCALDigit& AliEMCALDigit::operator+(AliEMCALDigit const & digit)
   // if amplitude is larger than 
   
   fAmp += digit.fAmp ;
+  if(fTime > digit.fTime)
+    fTime = digit.fTime ;
   
   Int_t max1 = fNprimary ; 
   Int_t max2 = fNiparent ;  
@@ -234,7 +272,7 @@ ostream& operator << ( ostream& out , const AliEMCALDigit & digit)
 {
   // Prints the data of the digit
   
-  out << "ID " << digit.fId << " Energy = " << digit.fAmp << endl ; 
+  out << "ID " << digit.fId << " Energy = " << digit.fAmp <<  " Time = " << digit.fTime << endl ; 
   Int_t i,j ;
   for(i=0;i<digit.fNprimary;i++)
     out << "Primary " << i+1 << " = " << digit.fPrimary[i] << endl ;