// of bunches in the signal.
//
// AliPHOSRawFitterv0 *fitterv0=new AliPHOSRawFitterv0();
-// fitterv0->SetSamples(sig,sigStart,sigLength);
-// fitterv0->SetNBunches(nBunches);
// fitterv0->SetChannelGeo(module,cellX,cellZ,caloFlag);
// fitterv0->SetCalibData(fgCalibData) ;
-// fitterv0->Eval();
+// fitterv0->Eval(sig,sigStart,sigLength);
// Double_t amplitude = fitterv0.GetEnergy();
// Double_t time = fitterv0.GetTime();
// Bool_t isLowGain = fitterv0.GetCaloFlag()==0;
//-----------------------------------------------------------------------------
AliPHOSRawFitterv0::AliPHOSRawFitterv0():
TObject(),
- fSignal(0),
fModule(0),
fCellX(0),
fCellZ(0),
fCaloFlag(0),
- fStart(0),
- fLength(0),
fNBunches(0),
fPedSubtract(kFALSE),
fEnergy(-111),
AliPHOSRawFitterv0::~AliPHOSRawFitterv0()
{
//Destructor
- delete [] fSignal;
}
//-----------------------------------------------------------------------------
AliPHOSRawFitterv0::AliPHOSRawFitterv0(const AliPHOSRawFitterv0 &phosFitter ):
TObject(),
- fSignal (phosFitter.fSignal),
fModule (phosFitter.fModule),
fCellX (phosFitter.fCellX),
fCellZ (phosFitter.fCellZ),
fCaloFlag (phosFitter.fCaloFlag),
- fStart (phosFitter.fStart),
- fLength (phosFitter.fLength),
fNBunches (phosFitter.fNBunches),
fPedSubtract (phosFitter.fPedSubtract),
fEnergy (phosFitter.fEnergy),
//Assignment operator.
if(this != &phosFitter) {
- fSignal = phosFitter.fSignal;
fModule = phosFitter.fModule;
fCellX = phosFitter.fCellX;
fCellZ = phosFitter.fCellZ;
fCaloFlag = phosFitter.fCaloFlag;
- fStart = phosFitter.fStart;
- fLength = phosFitter.fLength;
fNBunches = phosFitter.fNBunches;
fPedSubtract = phosFitter.fPedSubtract;
fEnergy = phosFitter.fEnergy;
//-----------------------------------------------------------------------------
-void AliPHOSRawFitterv0::SetSamples(const UShort_t *sig, Int_t sigStart, Int_t sigLength)
-{
- // Set the sample array, its start and length in time bin units
-
- fStart = sigStart;
- fLength = sigLength;
- fSignal = new UShort_t[fLength];
- for (Int_t i=0; i<fLength; i++) {
- fSignal[i] = sig[i];
- }
-}
-//-----------------------------------------------------------------------------
-
void AliPHOSRawFitterv0::SetChannelGeo(const Int_t module, const Int_t cellX,
const Int_t cellZ, const Int_t caloFlag)
{
}
//-----------------------------------------------------------------------------
-Bool_t AliPHOSRawFitterv0::Eval()
+Bool_t AliPHOSRawFitterv0::Eval(const UShort_t *signal, Int_t sigStart, Int_t sigLength)
{
// Calculate signal parameters (energy, time, quality) from array of samples
// Energy is a maximum sample minus pedestal 9
UShort_t maxSample = 0;
Int_t nMax = 0;
- for (Int_t i=0; i<fLength; i++) {
+ for (Int_t i=0; i<sigLength; i++) {
if (i<kPreSamples) {
nPed++;
- pedMean += fSignal[i];
- pedRMS += fSignal[i]*fSignal[i] ;
+ pedMean += signal[i];
+ pedRMS += signal[i]*signal[i] ;
+ }
+ if(signal[i] > maxSample) maxSample = signal[i];
+ if(signal[i] == maxSample) nMax++;
+
+ if(fPedSubtract) {
+ if( (signal[i]-(Float_t)(pedMean/nPed)) >kBaseLine ) fTime = (Double_t)i;
}
- if(fSignal[i] > maxSample) maxSample = fSignal[i];
- if(fSignal[i] == maxSample) nMax++;
+ else //ZS
+ if( (signal[i]-(Float_t)fAmpOffset ) >kBaseLine ) fTime = (Double_t)i;
}
+ fTime += sigStart;
+
fEnergy = (Double_t)maxSample;
if (maxSample > 900 && nMax > 2) fOverflow = kTRUE;