// AliRawReader* rf = new AliRawReaderDate("2006run2211.raw");
// AliPHOSRawDecoder dc(rf);
// while (rf->NextEvent()) {
-// dc.SetOldRCUFormat(kTRUE);
// dc.SubtractPedestals(kTRUE);
// while ( dc.NextDigit() ) {
// Int_t module = dc.GetModule();
// --- AliRoot header files ---
#include "AliPHOSRawDecoder.h"
-#include "AliPHOSPulseGenerator.h"
+#include "AliRawReader.h"
ClassImp(AliPHOSRawDecoder)
//-----------------------------------------------------------------------------
AliPHOSRawDecoder::AliPHOSRawDecoder():
- fRawReader(0),fCaloStream(0),fPedSubtract(kFALSE),fEnergy(-111),fTime(-111),fModule(-1),fColumn(-1),fRow(-1),fLowGainFlag(kFALSE),fSamples(0),fPulseGenerator(0)
+ fRawReader(0),fCaloStream(0),fPedSubtract(kFALSE),fEnergy(-111),fTime(-111),fQuality(0.),
+ fModule(-1),fColumn(-1),fRow(-1),fNewModule(-1),fNewColumn(-1),fNewRow(-1),fNewAmp(0),fNewTime(0),
+ fLowGainFlag(kFALSE),fNewLowGainFlag(kFALSE),fOverflow(kFALSE),fSamples(0),fTimes(0)
{
//Default constructor.
}
//-----------------------------------------------------------------------------
AliPHOSRawDecoder::AliPHOSRawDecoder(AliRawReader* rawReader, AliAltroMapping **mapping):
- fRawReader(0),fCaloStream(0),fPedSubtract(kFALSE),fEnergy(-111),fTime(-111),fModule(-1),fColumn(-1),fRow(-1),fLowGainFlag(kFALSE),fSamples(0),fPulseGenerator(0)
+ fRawReader(0),fCaloStream(0),fPedSubtract(kFALSE),fEnergy(-111),fTime(-111),fQuality(0.),
+ fModule(-1),fColumn(-1),fRow(-1),fNewModule(-1),fNewColumn(-1),fNewRow(-1),fNewAmp(0),fNewTime(0),
+ fLowGainFlag(kFALSE),fNewLowGainFlag(kFALSE),fOverflow(kFALSE),fSamples(0),fTimes(0)
{
//Construct a decoder object.
//Is is user responsibility to provide next raw event
fRawReader = rawReader;
fCaloStream = new AliCaloRawStream(rawReader,"PHOS",mapping);
- fCaloStream->SetOldRCUFormat(kFALSE);
fSamples = new TArrayI(100);
- fPulseGenerator = new AliPHOSPulseGenerator();
+ fTimes = new TArrayI(100);
}
//-----------------------------------------------------------------------------
{
//Destructor.
- if(fCaloStream) delete fCaloStream;
- if(fSamples) delete fSamples;
- if(fPulseGenerator) delete fPulseGenerator;
+ if(fCaloStream){ delete fCaloStream; fCaloStream=0;}
+ if(fSamples){ delete fSamples; fSamples=0 ;}
+ if(fTimes){ delete fTimes; fTimes=0 ;}
}
//-----------------------------------------------------------------------------
AliPHOSRawDecoder::AliPHOSRawDecoder(const AliPHOSRawDecoder &phosDecoder ):
fRawReader(phosDecoder.fRawReader),fCaloStream(phosDecoder.fCaloStream),
fPedSubtract(phosDecoder.fPedSubtract),
- fEnergy(phosDecoder.fEnergy),fTime(phosDecoder.fTime),
+ fEnergy(phosDecoder.fEnergy),fTime(phosDecoder.fTime),fQuality(phosDecoder.fQuality),
fModule(phosDecoder.fModule),fColumn(phosDecoder.fColumn),
- fRow(phosDecoder.fRow),fLowGainFlag(phosDecoder.fLowGainFlag),
- fSamples(phosDecoder.fSamples),
- fPulseGenerator(phosDecoder.fPulseGenerator)
+ fRow(phosDecoder.fRow),fNewModule(phosDecoder.fNewModule),fNewColumn(phosDecoder.fNewColumn),
+ fNewRow(phosDecoder.fNewRow),fNewAmp(phosDecoder.fNewAmp),fNewTime(phosDecoder.fNewTime),
+ fLowGainFlag(phosDecoder.fLowGainFlag),fNewLowGainFlag(phosDecoder.fNewLowGainFlag),
+ fOverflow(phosDecoder.fOverflow),fSamples(phosDecoder.fSamples),
+ fTimes(phosDecoder.fTimes)
{
//Copy constructor.
}
fEnergy = phosDecode.fEnergy;
fTime = phosDecode.fTime;
+ fQuality = phosDecode.fQuality ;
fModule = phosDecode.fModule;
fColumn = phosDecode.fColumn;
fRow = phosDecode.fRow;
+ fNewModule = phosDecode.fNewModule;
+ fNewColumn = phosDecode.fNewColumn;
+ fNewRow = phosDecode.fNewRow;
+ fNewAmp = phosDecode.fNewAmp ;
+ fNewTime= phosDecode.fNewTime ;
fLowGainFlag = phosDecode.fLowGainFlag;
+ fNewLowGainFlag = phosDecode.fNewLowGainFlag;
+ fOverflow = phosDecode.fOverflow ;
if(fSamples) delete fSamples;
fSamples = phosDecode.fSamples;
- if(fPulseGenerator) delete fPulseGenerator;
- fPulseGenerator = phosDecode.fPulseGenerator;
+ if(fTimes) delete fTimes;
+ fTimes = phosDecode.fTimes;
}
return *this;
Float_t pedMean = 0;
Int_t nPed = 0;
Float_t baseLine = 1.0;
- const Float_t nPreSamples = 10;
+ const Int_t kPreSamples = 10;
fSamples->Reset();
- while ( in->Next() ) {
+ while ( in->Next() ) {
if(!tLength) {
tLength = in->GetTimeLength();
if(in->IsNewHWAddress() && iBin>0) {
iBin=0;
+ //First remember new sample
+ fNewLowGainFlag = in->IsLowGain();
+ fNewModule = in->GetModule()+1;
+ fNewRow = in->GetRow() +1;
+ fNewColumn = in->GetColumn()+1;
+ fNewAmp = in->GetSignal() ;
+ fNewTime=in->GetTime() ;
// Temporarily we take the energy as a maximum amplitude
// and the pedestal from the 0th point (30 Aug 2006).
// Take is as a first time bin multiplied by the sample tick time
if(fPedSubtract)
- fEnergy -= (Double_t)(pedMean/nPed); // "pedestal subtraction"
-
- if(fLowGainFlag)
- fEnergy *= fPulseGenerator->GetRawFormatHighLowGainFactor(); // *16
-
+ if (nPed > 0)
+ fEnergy -= (Double_t)(pedMean/nPed); // pedestal subtraction
+ else
+ return kFALSE;
if (fEnergy < baseLine) fEnergy = 0;
pedMean = 0;
}
fLowGainFlag = in->IsLowGain();
- fTime = fPulseGenerator->GetRawFormatTimeTrigger() * in->GetTime();
+// fTime = in->GetTime();
fModule = in->GetModule()+1;
fRow = in->GetRow() +1;
fColumn = in->GetColumn()+1;
- // Fill array with samples
- iBin++;
- if(tLength-iBin < nPreSamples) {
+ if(fLowGainFlag==fNewLowGainFlag && fModule==fNewModule &&
+ fRow==fNewRow && fColumn==fNewColumn ){
+ if(fNewAmp>fEnergy) fEnergy = (Double_t)fNewAmp ;
+ fNewModule=-1 ;
+ }
+
+ //Calculate pedestal if necessary
+ if(fPedSubtract && in->GetTime() < kPreSamples) {
pedMean += in->GetSignal();
nPed++;
}
- fSamples->AddAt(in->GetSignal(),tLength-iBin);
if((Double_t)in->GetSignal() > fEnergy) fEnergy = (Double_t)in->GetSignal();
+ iBin++ ;
} // in.Next()