* 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)
AliEMCALRawDigit::AliEMCALRawDigit() : TObject(),
fId(-1),
fNSamples(0),
-fSamples(0x0)
+fSamples(0x0),
+fAmplitude(0),
+fTime(0)
{
// default ctor
}
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
{
+ //
if (iSample > fNSamples || iSample < 0) return kFALSE;
amp = fSamples[iSample] & 0xFFF;
}
//____________________________________________________________________________
-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++)
+ //
+ if (fSamples)
{
- Int_t timeBin=-1, amp=0;
- GetTimeSample(i, timeBin, amp);
- printf("(%d,%d) ",timeBin,amp);
+ AliWarning("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
+{
+ //
+ if (!fNSamples)
+ {
+ AliError("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
-
- 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");
}