Adding include path to allow compilation of CleanGeom task
[u/mrichter/AliRoot.git] / EMCAL / AliEMCALRawDigit.cxx
index 49d583d..a602298 100644 (file)
  * about the suitability of this software for any purpose. It is          *
  * provided "as is" without express or implied warranty.                  *
  **************************************************************************/
+/*
+
+ Author: R. GUERNANE LPSC Grenoble CNRS/IN2P3
+*/
 
 // --- ROOT system ---
 #include <Riostream.h>
 #include <TMath.h>
 
-// --- Standard library ---
-
 // --- AliRoot header files ---
-
 #include "AliEMCALRawDigit.h"
+#include "AliLog.h"
 
 ClassImp(AliEMCALRawDigit)
 
@@ -29,7 +34,9 @@ ClassImp(AliEMCALRawDigit)
 AliEMCALRawDigit::AliEMCALRawDigit() : TObject(),
 fId(-1),
 fNSamples(0),
-fSamples(0x0)
+fSamples(0x0),
+fAmplitude(0),
+fTime(0)
 {
        // default ctor 
 }
@@ -38,98 +45,122 @@ fSamples(0x0)
 AliEMCALRawDigit::AliEMCALRawDigit(Int_t id, Int_t timeSamples[], Int_t nSamples) : TObject(),
 fId(id),
 fNSamples(nSamples),
-fSamples(0x0)
+fSamples(0x0),
+fAmplitude(0),
+fTime(0)
 {
        //
-       fSamples = new Int_t[fNSamples] ;
-       for (Int_t i=0; i < fNSamples; i++) fSamples[i] = timeSamples[i];
-}
-
-//____________________________________________________________________________
-AliEMCALRawDigit::AliEMCALRawDigit(const AliEMCALRawDigit& digit) : TObject(),//AliDigitNew(digit),
-fId(digit.fId),
-fNSamples(digit.fNSamples),
-fSamples(0x0)
-
-{
-       // Copy ctor
-       // Data members of the base class (AliNewDigit)
-       
-//     fAmp         = digit.fAmp;
-//     fIndexInList = digit.fIndexInList;
-       fSamples     = new Int_t[fNSamples]; 
-       for (Int_t i=0; i < digit.fNSamples; i++) fSamples[i] = digit.fSamples[i];
+       fSamples = new Int_t[fNSamples];
+       for (Int_t i = 0; i < fNSamples; i++) fSamples[i] = timeSamples[i];
 }
 
 //____________________________________________________________________________
 AliEMCALRawDigit::~AliEMCALRawDigit() 
 {
-  // Delete array of time samples
-  delete [] fSamples;
+  //dtor, delete array of time samples
+  if(fSamples) delete [] fSamples;
 }
 
 //____________________________________________________________________________
 void AliEMCALRawDigit::Clear(Option_t *) 
 {
-  // Delete array of time samples
-  delete [] fSamples;
+  // clear, delete array of time samples
+  if(fSamples) delete [] fSamples;
 }
 
 
 //____________________________________________________________________________
 Bool_t AliEMCALRawDigit::GetTimeSample(const Int_t iSample, Int_t& timeBin, Int_t& amp) const
 {
+       // returns the time and amplitude of a given time sample and if the sample was ok
+  
        if (iSample > fNSamples || iSample < 0) return kFALSE;
        
-       amp     =  fSamples[iSample] & 0xFFF;
-       timeBin = (fSamples[iSample] >> 12) & 0xFF;
+  amp     = (Short_t)(fSamples[iSample] & 0xFFFF);
+  timeBin = (Short_t)(fSamples[iSample] >> 16 );
 
        return kTRUE;
 }
 
 //____________________________________________________________________________
-void AliEMCALRawDigit::Print(const Option_t* /*opt*/) const
+void AliEMCALRawDigit::SetTimeSamples(const Int_t timeSamples[], const Int_t nSamples) 
 {
-       printf("===\nDigit id: %4d / %d Time Samples: \n",fId,fNSamples);
-       for (Int_t i=0; i < fNSamples; i++) 
+  // Sets the time samples
+  
+       if (fSamples) 
        {
-               Int_t timeBin=-1, amp=0;
-               GetTimeSample(i, timeBin, amp);
-               printf("(%d,%d) ",timeBin,amp);
+               AliDebug(1,"Samples already filled: delete first!");
+               fNSamples = 0;
+               delete [] fSamples;
        }
        
-       printf("\n");
+       fNSamples = nSamples;
+       fSamples = new Int_t[fNSamples];
+       for (Int_t i = 0; i < fNSamples; i++) fSamples[i] = timeSamples[i];
 }
 
 //____________________________________________________________________________
-Int_t AliEMCALRawDigit::Compare(const TObject* obj) const
+Bool_t AliEMCALRawDigit::GetMaximum(Int_t& amplitude, Int_t& time) const
+{
+       // Checks the maximum amplitude in the time sample
+  
+       if (!fNSamples)
+       {
+               AliDebug(1,"Digit has no time sample");
+               return kFALSE;
+       }
+               
+       amplitude = 0;
+       for (Int_t i = 0; i < fNSamples; i++)
+       {
+               Int_t t, a;
+               if (GetTimeSample(i, t, a))
+               {
+                       if (a > amplitude)
+                       {
+                               amplitude = a;
+                               time      = t;
+                       }
+               }
+       }
+       
+       return kTRUE;
+}
+
+//____________________________________________________________________________
+Int_t AliEMCALRawDigit::Compare(const TObject * obj) const
 {
        // Compares two digits with respect to its Id
        // to sort according increasing Id
-
-       Int_t rv=2;
-
-       AliEMCALRawDigit* digit = (AliEMCALRawDigit *)obj; 
-
-       Int_t iddiff = fId - digit->GetId(); 
-
-       if ( iddiff > 0 ) 
-               rv = 1;
-       else if ( iddiff < 0 )
+       
+       Int_t rv=0;
+       
+       AliEMCALRawDigit* digit = (AliEMCALRawDigit*)obj; 
+       
+       Int_t iddiff = fId - digit->GetId();
+       
+       if (iddiff > 0) 
+               rv =  1;
+       else if (iddiff < 0)
                rv = -1; 
        else
-               rv = 0;
-  
+               rv =  0;
+       
        return rv; 
 }
 
 //____________________________________________________________________________
-Bool_t AliEMCALRawDigit::operator==(AliEMCALRawDigit const & digit) const 
+void AliEMCALRawDigit::Print(const Option_t* /*opt*/) const
 {
-       // Two digits are equal if they have the same Id
+       // print
   
-       if(fId == digit.fId) 
-               return kTRUE;
-       else 
-               return kFALSE;
+       printf("===\n| Digit id: %4d / %d Time Samples: \n",fId,fNSamples);
+       for (Int_t i=0; i < fNSamples; i++) 
+       {
+               Int_t timeBin=-1, amp=0;
+               GetTimeSample(i, timeBin, amp);
+               printf("| (%d,%d) ",timeBin,amp);
+       }
+       
+       printf("\n");
 }