fAltroChannelSize(0),
fChannelsPerAltro(0),
fPedestalFactor(0),
- fZSPre(0),
- fZSPost(0),
- fZSPedSubtract(kFALSE),
- fFixedPedestal(0),
- fFixedPedestalWidth(0),
- fFixedZeroSuppression(0),
- fFixedSampleRate(0),
+ fZSPre(1),
+ fZSPost(1),
+ fZSPedSubtract(kTRUE),
+ fFixedPedestal(100),
+ fFixedPedestalWidth(2),
+ fFixedZeroSuppression(1),
+ fFixedSampleRate(2),
fFixedThreshold(0),
fFixedMinStrip(0),
- fFixedMaxStrip(0),
- fFixedPulseGain(0),
+ fFixedMaxStrip(127),
+ fFixedPulseGain(2),
fEdepMip(0),
fHasCompleteHeader(kTRUE),
fZeroSuppression(0),
fPulseGain(0),
fDeadMap(0),
fAltroMap(0),
- fStripRange(0)
+ fStripRange(0),
+ fRunNo(-1)
{
//
// Default constructor
SetPedestalFactor();
SetThreshold();
SetStripRange();
+ SetGain();
fAltroMap = new AliFMDAltroMapping;
}
//__________________________________________________________________
-void
+Bool_t
+AliFMDParameters::CheckForNewRun()
+{
+ Int_t run = AliCDBManager::Instance()->GetRun();
+ if (run != fRunNo) {
+ fIsInit = false;
+ fRunNo = run;
+ }
+ return run != fRunNo;
+}
+
+//__________________________________________________________________
+UShort_t
AliFMDParameters::Init(Bool_t forceReInit, UInt_t what)
{
//
// what What to initialize
//
if (forceReInit) fIsInit = kFALSE;
- if (fIsInit) return;
- if (what & kPulseGain) InitPulseGain();
- if (what & kPedestal) InitPedestal();
- if (what & kDeadMap) InitDeadMap();
- if (what & kSampleRate) InitSampleRate();
- if (what & kZeroSuppression) InitZeroSuppression();
- if (what & kAltroMap) InitAltroMap();
- if (what & kStripRange) InitStripRange();
+ CheckForNewRun();
+
+ if (fIsInit) return 0;
+
+ UShort_t errMask = 0;
+ if (what & kPulseGain) errMask |= InitPulseGain();
+ if (what & kPedestal) errMask |= InitPedestal();
+ if (what & kDeadMap) errMask |= InitDeadMap();
+ if (what & kSampleRate) errMask |= InitSampleRate();
+ if (what & kZeroSuppression) errMask |= InitZeroSuppression();
+ if (what & kAltroMap) errMask |= InitAltroMap();
+ if (what & kStripRange) errMask |= InitStripRange();
fIsInit = kTRUE;
+
+ return errMask;
}
//__________________________________________________________________
-void
+UShort_t
AliFMDParameters::Init(AliFMDPreprocessor* pp, Bool_t forceReInit, UInt_t what)
{
//
// what What to initialize
//
if (forceReInit) fIsInit = kFALSE;
- if (fIsInit) return;
- if (what & kPulseGain) InitPulseGain(pp);
- if (what & kPedestal) InitPedestal(pp);
- if (what & kDeadMap) InitDeadMap(pp);
- if (what & kSampleRate) InitSampleRate(pp);
- if (what & kZeroSuppression) InitZeroSuppression(pp);
- if (what & kAltroMap) InitAltroMap(pp);
- if (what & kStripRange) InitStripRange(pp);
+ CheckForNewRun();
+
+ if (fIsInit) return 0;
+
+ UShort_t errMask = 0;
+ if (what & kPulseGain) errMask |= InitPulseGain(pp);
+ if (what & kPedestal) errMask |= InitPedestal(pp);
+ if (what & kDeadMap) errMask |= InitDeadMap(pp);
+ if (what & kSampleRate) errMask |= InitSampleRate(pp);
+ if (what & kZeroSuppression) errMask |= InitZeroSuppression(pp);
+ if (what & kAltroMap) errMask |= InitAltroMap(pp);
+ if (what & kStripRange) errMask |= InitStripRange(pp);
fIsInit = kTRUE;
+
+ return errMask;
}
//__________________________________________________________________
}
//__________________________________________________________________
-void
+UShort_t
AliFMDParameters::Init(const char* path, Bool_t forceReInit, UInt_t what)
{
//
// what What calibrations to load.
//
if (forceReInit) fIsInit = kFALSE;
- if (fIsInit) return;
+ CheckForNewRun();
+
+ if (fIsInit) return 0;
AliFMDCalibStripRange* range = 0;
AliFMDCalibSampleRate* rate = 0;
if (peds) what &= ~kPedestal;
if (gains) what &= ~kPulseGain;
- Init(kFALSE, what);
+ UShort_t ret = Init(kFALSE, what);
if (range) SetStripRange(range);
if (rate) SetSampleRate(rate);
if (gains) SetGain(gains);
fIsInit = kTRUE;
+
+ return ret;
}
//__________________________________________________________________
__LINE__);
return 0;
}
+ if (entry && AliLog::GetDebugLevel("FMD", "") > 0) {
+ AliInfoF("Got entry %p for %s", entry, path);
+ entry->PrintId();
+ entry->PrintMetaData();
+ entry->Print();
+ }
return entry;
}
//__________________________________________________________________
-void
+UShort_t
AliFMDParameters::InitPulseGain(AliFMDPreprocessor* pp)
{
//
// pp Pre-processor if called from shuttle
//
AliCDBEntry* gain = GetEntry(fgkPulseGain, pp);
- if (!gain) return;
+ if (!gain) return kPulseGain;
AliFMDDebug(5, ("Got gain from CDB"));
fPulseGain = dynamic_cast<AliFMDCalibGain*>(gain->GetObject());
- if (!fPulseGain) AliFatal("Invalid pulser gain object from CDB");
+ if (!fPulseGain) {
+ AliError("Invalid pulser gain object from CDB");
+ return kPulseGain;
+ }
+ if (!fPulseGain->Values().Ptr()) {
+ AliError("Empty pulser gain object from CDB");
+ return kPulseGain;
+ }
+ return 0;
}
//__________________________________________________________________
-void
+UShort_t
AliFMDParameters::InitPedestal(AliFMDPreprocessor* pp)
{
//
// pp Pre-processor if called from shuttle
//
AliCDBEntry* pedestal = GetEntry(fgkPedestal, pp);
- if (!pedestal) return;
+ if (!pedestal) return kPedestal;
AliFMDDebug(5, ("Got pedestal from CDB"));
fPedestal = dynamic_cast<AliFMDCalibPedestal*>(pedestal->GetObject());
- if (!fPedestal) AliFatal("Invalid pedestal object from CDB");
+ if (!fPedestal) {
+ AliError("Invalid pedestal object from CDB");
+ return kPedestal;
+ }
+ if (!fPedestal->Values().Ptr()) {
+ AliError("Empty pedestal object from CDB");
+ return kPedestal;
+ }
+ return 0;
}
//__________________________________________________________________
-void
+UShort_t
AliFMDParameters::InitDeadMap(AliFMDPreprocessor* pp)
{
//
// pp Pre-processor if called from shuttle
//
AliCDBEntry* deadMap = GetEntry(fgkDead, pp);
- if (!deadMap) return;
+ if (!deadMap) return kDeadMap;
AliFMDDebug(5, ("Got dead map from CDB"));
fDeadMap = dynamic_cast<AliFMDCalibDeadMap*>(deadMap->GetObject());
- if (!fDeadMap) AliFatal("Invalid dead map object from CDB");
+ if (!fDeadMap) {
+ AliError("Invalid dead map object from CDB");
+ return kDeadMap;
+ }
+ if (!fDeadMap->Ptr()) {
+ AliError("Empty dead map object from CDB");
+ return kDeadMap;
+ }
+ return 0;
}
//__________________________________________________________________
-void
+UShort_t
AliFMDParameters::InitZeroSuppression(AliFMDPreprocessor* pp)
{
//
// pp Pre-processor if called from shuttle
//
AliCDBEntry* zeroSup = GetEntry(fgkZeroSuppression, pp);
- if (!zeroSup) return;
+ if (!zeroSup) return kZeroSuppression;
+
AliFMDDebug(5, ("Got zero suppression from CDB"));
fZeroSuppression =
dynamic_cast<AliFMDCalibZeroSuppression*>(zeroSup->GetObject());
- if (!fZeroSuppression)AliFatal("Invalid zero suppression object from CDB");
+ if (!fZeroSuppression) {
+ AliError("Invalid zero suppression object from CDB");
+ return kZeroSuppression;
+ }
+ if (!fZeroSuppression->Ptr()) {
+ AliWarningF("Empty zero suppression object from CDB, assuming %d",
+ fFixedZeroSuppression);
+ AliCDBManager* cdbMan = AliCDBManager::Instance();
+ if(!cdbMan || !cdbMan->GetCacheFlag())
+ delete fZeroSuppression;
+ fZeroSuppression = 0;
+ }
+ return 0;
}
//__________________________________________________________________
-void
+UShort_t
AliFMDParameters::InitSampleRate(AliFMDPreprocessor* pp)
{
//
// pp Pre-processor if called from shuttle
//
AliCDBEntry* sampRat = GetEntry(fgkSampleRate, pp);
- if (!sampRat) return;
+ if (!sampRat) return kSampleRate;
+
AliFMDDebug(5, ("Got zero suppression from CDB"));
fSampleRate = dynamic_cast<AliFMDCalibSampleRate*>(sampRat->GetObject());
- if (!fSampleRate) AliFatal("Invalid zero suppression object from CDB");
+ if (!fSampleRate) {
+ AliError("Invalid sample rate object from CDB");
+ return kSampleRate;
+ }
+ if (!fSampleRate->Rates().Ptr()) {
+ AliError("empty sample rate object from CDB");
+ return kSampleRate;
+ }
+ return 0;
}
//__________________________________________________________________
-void
+UShort_t
AliFMDParameters::InitAltroMap(AliFMDPreprocessor* pp)
{
//
fAltroMap = 0;
}
AliCDBEntry* hwMap = GetEntry(fgkAltroMap, pp, kFALSE);
- if (!hwMap) return;
-
- AliFMDDebug(5, ("Got ALTRO map from CDB"));
- fAltroMap = dynamic_cast<AliFMDAltroMapping*>(hwMap->GetObject());
+ if (hwMap) {
+ AliFMDDebug(5, ("Got ALTRO map from CDB"));
+ fAltroMap = dynamic_cast<AliFMDAltroMapping*>(hwMap->GetObject());
+ }
if (!fAltroMap) {
- AliFatal("Invalid ALTRO map object from CDB");
+ AliError("Invalid ALTRO map object from CDB");
fAltroMap = new AliFMDAltroMapping;
+ // return kAltroMap;
}
+ return 0;
}
//__________________________________________________________________
-void
+UShort_t
AliFMDParameters::InitStripRange(AliFMDPreprocessor* pp)
{
//
// pp Pre-processor if called from shuttle
//
AliCDBEntry* range = GetEntry(fgkStripRange, pp);
- if (!range) return;
+ if (!range) return kStripRange;
+
AliFMDDebug(5, ("Got strip range from CDB"));
fStripRange = dynamic_cast<AliFMDCalibStripRange*>(range->GetObject());
- if (!fStripRange) AliFatal("Invalid strip range object from CDB");
+
+ if (!fStripRange) {
+ AliError("Invalid strip range object from CDB");
+ return kStripRange;
+ }
+ if (!fStripRange->Ranges().Ptr()) {
+ AliError("Empty strip range object from CDB");
+ return kStripRange;
+ }
+ return 0;
}
// zero suppression threshold (in ADC counts)
//
if (!fZeroSuppression) return fFixedZeroSuppression;
+
+ // In case of empty zero suppression objects.
+ if (!fZeroSuppression->Ptr() ||
+ fZeroSuppression->MaxIndex() <= 0) return fFixedZeroSuppression;
+
// Need to map strip to ALTRO chip.
AliFMDDebug(50, ("zero sup. for FMD%d%c[%2d,%3d]=%d",
detector, ring, sector, strip,