20 #include "AliCDBEntry.h"
21 #include "AliCDBManager.h"
81 AliCDBEntry* e = AliCDBManager::Instance()->Get(
"MUON/Calib/RecoParam",
runNumber);
84 TObject* o = e->GetObject();
85 if ( o->IsA() == TObjArray::Class() )
91 while ( ( p = static_cast<AliMUONRecoParam*>(next()) ))
93 if ( p->IsDefault()) recoParam = p;
103 AliError(
"Cannot get the recoParam. Failing");
111 Ctor(calib,recoParam,kFALSE);
120 fStatusMapMaker(0x0),
129 Ctor(calib,recoParams);
137 fStatusMapMaker(0x0),
153 Bool_t deferredInitialization)
159 AliFatal(
"Could not access manu store from OCDB !");
205 AliInfo(
"Summary of messages:");
209 AliInfo(Form(
"We have seen %g pads, and rejected %g (%7.2f %%)",
231 AliDebug(1,Form(
"# of digits = %d",digitStore.
GetSize()));
233 while ( ( digit = static_cast<AliMUONVDigit*>(next() ) ) )
235 if ( digit->IsCalibrated() )
237 fLogger->
Log(
"ERROR : trying to calibrate a digit twice");
241 digit->Calibrated(
kTRUE);
242 digit->ChargeInFC(
kTRUE);
246 Bool_t isSaturated(kFALSE);
250 Bool_t ok =
IsValidDigit(digit->DetElemId(),digit->ManuId(),digit->ManuChannel(),&statusMap);
252 digit->SetStatusMap(statusMap);
256 charge =
CalibrateDigit(digit->DetElemId(),digit->ManuId(),digit->ManuChannel(),
264 digit->SetCharge(charge);
265 digit->Saturated(isSaturated);
273 Float_t adc, Float_t nsigmas,
274 Bool_t* isSaturated)
const
285 fLogger->
Log(Form(
"ChargeSigmaCut used = %e",nsigmas));
293 fLogger->
Log(Form(
"Got a null pedestal object for DE,manu=%d,%d",detElemId,manuId));
297 Float_t padc = adc-pedestal->
ValueAsFloat(manuChannel,0);
307 if ( padc > nsigmas*pedestal->
ValueAsFloat(manuChannel,1) )
309 charge = a0*padc*capa*adc2mv;
314 const Int_t saturation(3000);
316 if ( padc >= saturation )
318 *isSaturated =
kTRUE;
322 *isSaturated = kFALSE;
326 return ( charge > 0.0 ? charge : 0.0 );
332 Int_t* statusMap)
const
342 if (!de)
return kFALSE;
358 Int_t sm =
StatusMap(detElemId,manuId,manuChannel);
360 if (statusMap) *statusMap = sm;
Convert a pad status container into a pad status map container.
UInt_t fMask
! mask used to cut bad channels
virtual ~AliMUONDigitCalibrator()
AliMUONDigitCalibrator(Int_t runNumber)
Interface for a digit container.
void Print(Option_t *opt="") const
virtual Float_t ValueAsFloat(Int_t i, Int_t j=0) const =0
Double_t ChargeSigmaCut() const
Number of sigma cut we must apply when cutting on adc-ped.
Double_t fNumberOfBadPads
! # of times we've rejected a bad pad
Double_t fChargeSigmaCut
! number of sigmas to cut on
Int_t Log(const char *message)
Int_t StatusMap(Int_t detElemId, Int_t manuId, Int_t manuChannel) const
AliMUONPadStatusMapMaker * fStatusMapMaker
! to build status map
Class with MUON reconstruction parameters.
AliMpDetElement * GetDetElement(Int_t detElemId, Bool_t warn=true) const
AliMUONPadStatusMaker * fStatusMaker
! to build pad statuses
static Bool_t LoadManuStore(Bool_t warn=false)
The class defines the electronics properties of detection element.
static Float_t DefaultA0()
virtual Int_t GetSize() const =0
Number of digits we store.
void Ctor(const AliMUONCalibrationData &calib, const AliMUONRecoParam *recoParams, Bool_t deferredInitialization=kTRUE)
A logger that keeps track of the number of times a message appeared.
Container of calibration values for a given number of channels.
static AliMpDDLStore * Instance(Bool_t warn=true)
AliMUONVStore * StatusMap() const
AliMUONVCalibParam * PadStatus(Int_t detElemId, Int_t manuId) const
Float_t CalibrateDigit(Int_t detElemId, Int_t manuId, Int_t manuChannel, Float_t adc, Float_t nsigmas=-1, Bool_t *isSaturated=0x0) const
void RefreshRejectProbabilities()
AliMUONLogger * fLogger
! to log repeated messages
Class to calibrate the digits.
static Float_t DefaultCapa()
static Float_t DefaultADC2MV()
virtual TIterator * CreateTrackerIterator() const =0
Create an iterator to loop over tracker digits only.
Double_t fNumberOfPads
! # of pads we've seen
AliMUONVStore * Pedestals() const
Get the pedestal store.
static Int_t SelfDeadMask()
Return status bit map to tell a pad is bad.
Int_t PadStatus(Int_t detElemId, Int_t manuId, Int_t manuChannel) const
Single entry point to access MUON calibration data.
UInt_t PadGoodnessMask() const
Get the goodness mask.
Bool_t IsConnectedChannel(Int_t manuId, Int_t manuChannel) const
Bool_t IsValidDigit(Int_t detElemId, Int_t manuId, Int_t manuChannel, Int_t *statusMap=0x0) const
Bool_t IsExistingChannel(Int_t manuId, Int_t manuChannel) const
AliMUONVStore * fPedestals
! pedestal values
Make a 2DStore of pad statuses, using different sources of information.
virtual TObject * FindObject(const char *name) const
Find an object by name.
virtual void Calibrate(AliMUONVDigitStore &digitStore)
void SetLimits(const AliMUONRecoParam &recoParams)