#include "AliPHOSPulseGenerator.h"
#include "AliRunLoader.h"
#include "AliStack.h"
-#include "AliCaloRawStream.h"
+#include "AliPHOSRawDecoder.h"
#include "AliRawReaderFile.h"
#include "AliLog.h"
#include "AliCDBLocal.h"
#include "AliCDBStorage.h"
#include "AliCDBManager.h"
+#include "AliPHOSRawDigiProducer.h"
ClassImp(AliPHOSGetter)
}
}
else {
- AliRunLoader * rl = AliRunLoader::GetRunLoader(fgPhosLoader->GetTitle()) ;
+ rl = AliRunLoader::GetRunLoader(fgPhosLoader->GetTitle()) ;
if ( strstr(version, AliConfig::GetDefaultEventFolderName()) ) // false in case of merging
delete rl ;
fgObjGetter = new AliPHOSGetter(alirunFileName, version, openingOption) ;
// Reimplemented by Boris Polichtchouk (Jul 2006)
// to make it working with the Jul-Aug 2006 beam test data.
- AliCaloRawStream in(rawReader,"PHOS");
- in.SetOldRCUFormat(isOldRCUFormat);
-
- // Create a shaper pulse object
- AliPHOSPulseGenerator pulse;
- TF1 * signalF = new TF1("signal", AliPHOSPulseGenerator::RawResponseFunction, 0, pulse.GetRawFormatTimeMax(), 4);
- signalF->SetParNames("Charge", "Gain", "Amplitude", "TimeZero") ;
+ //Create raw decoder.
- Int_t relId[4], absId =0;
- Bool_t lowGainFlag = kFALSE ;
+ AliPHOSRawDecoder dc(rawReader);
+ dc.SetOldRCUFormat(isOldRCUFormat);
+ dc.SubtractPedestals(kTRUE);
TClonesArray * digits = Digits() ;
- digits->Clear() ;
-
- Int_t iBin = 0;
- Int_t iDigit = 0 ;
- Double_t energyHG = 0. ;
- Double_t energyLG = 0. ;
- Double_t time = 0. ;
- Int_t iOldDigit;
- Bool_t seen;
- TH1F* hLowGain = 0;
- TH1F* hHighGain = 0;
-
- while ( in.Next() ) { // PHOS entries loop
-
- lowGainFlag = in.IsLowGain();
-
- // (Re)create histograms to store samples
-
- if (lowGainFlag) {
- if(!hLowGain)
- hLowGain = new TH1F("hLowGain","Low gain",in.GetTimeLength(),0,in.GetTimeLength());
- else
- if(hLowGain->GetNbinsX() != in.GetTimeLength()) {
- delete hLowGain;
- hLowGain = new TH1F("hLowGain","Low gain",in.GetTimeLength(),0,in.GetTimeLength());
- }
- } else {
- if(!hHighGain)
- hHighGain = new TH1F("hHighGain","High gain",in.GetTimeLength(),0,in.GetTimeLength());
- else
- if(hHighGain->GetNbinsX() != in.GetTimeLength()) {
- delete hHighGain;
- hHighGain = new TH1F("hHighGain","High gain",in.GetTimeLength(),0,in.GetTimeLength());
- }
- }
-
- // Fill histograms with samples
- if(lowGainFlag)
- hLowGain ->SetBinContent(in.GetTimeLength()-iBin-1,in.GetSignal());
- else {
- hHighGain->SetBinContent(in.GetTimeLength()-iBin-1,in.GetSignal());
- }
-
- iBin++;
-
- // Fit the full sample
- if(iBin==in.GetTimeLength()) {
- iBin=0;
-
- // Temporarily we do not fit the sample graph, but
- // take the energy from the graph maximum, and the pedestal from the 0th point
- // 30 Aug 2006
-
- //FitRaw(lowGainFlag, hLowGain, hHighGain, signalF, energy, time);
-
- if(lowGainFlag) {
- energyLG = hLowGain ->GetMaximum(); // "digit amplitude"
-// energyLG -= hLowGain ->GetBinContent(0); // "pedestal subtraction"
- energyLG *= pulse.GetRawFormatHighLowGainFactor(); // *16
- if(AliLog::GetGlobalDebugLevel()>3) {
- AliDebug(4,Form("----Printing hLowGain: ----\n")) ;
- hLowGain ->Print("all");
- }
- if(AliLog::GetGlobalDebugLevel()>2)
- AliDebug(2,Form("(mod,col,row)=(%d,%d,%d), low gain energy=%f\n\n",
- in.GetModule(),in.GetColumn(),in.GetRow(),energyLG));
- }
-
- else {
- energyHG = hHighGain->GetMaximum(); // "digit amplitude"
-// energyHG -= hHighGain->GetBinContent(0); // "pedestal subtraction"
- if(AliLog::GetGlobalDebugLevel()>3) {
- AliDebug(4,Form("----Printing hHighGain: ----\n"));
- hHighGain->Print("all");
- }
- if(AliLog::GetGlobalDebugLevel()>2)
- AliDebug(2,Form("(mod,col,row)=(%d,%d,%d), high gain energy=%f\n\n",
- in.GetModule(),in.GetColumn(),in.GetRow(),energyHG));
- }
-
- // Time is not evaluated for the moment (12.01.2007). To be implemented later.
- time = -1;
-
- relId[0] = in.GetModule()+1;
- relId[1] = 0;
- relId[2] = in.GetRow() +1;
- relId[3] = in.GetColumn()+1;
- if(!PHOSGeometry()) AliFatal("Couldn't find PHOSGeometry!");
- PHOSGeometry()->RelToAbsNumbering(relId, absId);
-
- AliDebug(2,Form("relId=(mod,row,col)=(%d,%d,%d), absId=%d\n\n",
- relId[0],relId[2],relId[3],absId));
-
- // Add low gain digit only if the high gain digit does not exist in the digits array
- seen = kFALSE;
- if(lowGainFlag) {
- for (iOldDigit=iDigit-1; iOldDigit==0; iOldDigit--) {
- if ((dynamic_cast<AliPHOSDigit*>(digits->At(iOldDigit)))->GetId() == absId) {
- seen = kTRUE;
- break;
- }
- }
- if (!seen)
- new((*digits)[iDigit]) AliPHOSDigit(-1,absId,(Float_t)energyLG,time);
- energyLG = 0. ;
- }
- // Add high gain digit only if it is not saturated;
- // replace low gain digit by a high gain one
- else {
- if (energyHG >= 1023) continue;
- for (iOldDigit=iDigit-1; iOldDigit==0; iOldDigit--) {
- if ((dynamic_cast<AliPHOSDigit*>(digits->At(iOldDigit)))->GetId() == absId) {
- digits->RemoveAt(iOldDigit);
- new((*digits)[iDigit]) AliPHOSDigit(-1,absId,(Float_t)energyHG,time);
- seen = kTRUE;
- break;
- }
- }
- if (!seen)
- new((*digits)[iDigit]) AliPHOSDigit(-1,absId,(Float_t)energyHG,time);
- energyHG = 0. ;
- }
- AliPHOSDigit *dig = dynamic_cast<AliPHOSDigit*>(digits->At(iDigit));
- dig->Print();
- iDigit++;
- }
- }
-
- // PHOS entries loop
-
- digits->Sort() ;
- digits->Print();
+ AliPHOSRawDigiProducer pr;
+ pr.MakeDigits(digits,&dc);
//!!!!for debug!!!
Int_t modMax=-111;
Float_t eMax=-333;
//!!!for debug!!!
- for(iDigit=0; iDigit<digits->GetEntries(); iDigit++) {
+ Int_t relId[4];
+ for(Int_t iDigit=0; iDigit<digits->GetEntries(); iDigit++) {
AliPHOSDigit* digit = (AliPHOSDigit*)digits->At(iDigit);
if(digit->GetEnergy()>eMax) {
PHOSGeometry()->AbsToRelNumbering(digit->GetId(),relId);
AliDebug(1,Form("Digit with max. energy: modMax %d colMax %d rowMax %d eMax %f\n\n",
modMax,colMax,rowMax,eMax));
- delete signalF ;
- delete hHighGain;
- delete hLowGain;
-
return digits->GetEntriesFast() ;
}