]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - FMD/AliFMDParameters.cxx
Adding EMCAL to EINCLUDE
[u/mrichter/AliRoot.git] / FMD / AliFMDParameters.cxx
index 8e0027009113d5566987ac5ce7d3200adedf288e..b5673afa8fd9d4daed3abc3357e7bcb26ad243b7 100644 (file)
@@ -89,17 +89,17 @@ AliFMDParameters::AliFMDParameters()
     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), 
@@ -108,7 +108,8 @@ AliFMDParameters::AliFMDParameters()
     fPulseGain(0), 
     fDeadMap(0), 
     fAltroMap(0), 
-    fStripRange(0)
+  fStripRange(0),
+  fRunNo(-1)
 {
   //
   // Default constructor 
@@ -123,11 +124,24 @@ AliFMDParameters::AliFMDParameters()
   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)
 {
   // 
@@ -139,18 +153,24 @@ 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)
 {
   // 
@@ -163,15 +183,21 @@ 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;
 }
 
 //__________________________________________________________________
@@ -202,7 +228,7 @@ AliFMDParameters::CheckFile(const char* prefix,
 }
 
 //__________________________________________________________________
-void
+UShort_t
 AliFMDParameters::Init(const char* path, Bool_t forceReInit, UInt_t what)
 {
   // 
@@ -228,7 +254,9 @@ 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;
@@ -265,7 +293,7 @@ AliFMDParameters::Init(const char* path, Bool_t forceReInit, UInt_t what)
   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);
@@ -273,6 +301,8 @@ AliFMDParameters::Init(const char* path, Bool_t forceReInit, UInt_t what)
   if (gains) SetGain(gains);
 
   fIsInit = kTRUE;
+
+  return ret;
 }
 
 //__________________________________________________________________
@@ -657,12 +687,18 @@ AliFMDParameters::GetEntry(const char* path, AliFMDPreprocessor* pp,
                               __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)
 {
   // 
@@ -672,14 +708,22 @@ 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)
 {
   //
@@ -689,15 +733,23 @@ 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)
 {
   //
@@ -707,15 +759,23 @@ 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)
 {
   //
@@ -725,15 +785,28 @@ 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)
 {
   //
@@ -743,14 +816,23 @@ 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)
 {
   //
@@ -764,18 +846,20 @@ 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)
 {
   //
@@ -785,10 +869,20 @@ 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;
 }
 
 
@@ -886,6 +980,11 @@ AliFMDParameters::GetZeroSuppression(UShort_t detector, Char_t ring,
   //    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,
@@ -1063,8 +1162,8 @@ AliFMDParameters::Hardware2Detector(UShort_t  ddl,       UShort_t addr,
 }
 //____________________________________________________________________
 Bool_t 
-AliFMDParameters::Hardware2Detector(UShort_t    ddl,       UShort_t   board,
-                                   UShort_t    chip,      UShort_t   chan,
+AliFMDParameters::Hardware2Detector(UShort_t  ddl,       UShort_t   board,
+                                   UShort_t  chip,      UShort_t   chan,
                                    UShort_t  timebin,   
                                    UShort_t& det,       Char_t&   ring, 
                                    UShort_t& sec,       Short_t& str,
@@ -1088,11 +1187,24 @@ AliFMDParameters::Hardware2Detector(UShort_t    ddl,       UShort_t   board,
   // Return:
   //    @c true on success, false otherwise 
   //
-  if (!fAltroMap) return kFALSE;
-  if (fAltroMap->DDL2Detector(ddl) < 0) return kFALSE;
+  if (!fAltroMap) {
+    AliFMDDebug(1, ("No ALTRO map available"));
+    return kFALSE;
+  }
+  if (fAltroMap->DDL2Detector(ddl) < 0) { 
+    AliFMDDebug(1, ("Invalid DDL number %d", ddl));
+    return kFALSE;
+  }
+  det = fAltroMap->DDL2Detector(ddl);
   Short_t stripBase = 0;
-  if (!fAltroMap->Channel2StripBase(board,chip,chan, ring, sec, stripBase)) 
+  if (!fAltroMap->Channel2StripBase(board,chip,chan, ring, sec, stripBase)) {
+    AliFMDDebug(1, ("Failed to translate  "
+                   "%d/0x%02x/0x%x/0x%x/%04d -> "
+                   "FMD%d%c[%2d,%3d] to detector", 
+                   ddl, board, chip, chan, timebin, 
+                   det, ring, sec, stripBase));
     return kFALSE;
+  }
   UShort_t preSamples = GetPreSamples(det, ring, sec, stripBase);
   UShort_t sampleRate = GetSampleRate(det, ring, sec, stripBase);
   Short_t stripOff = 0;
@@ -1133,7 +1245,10 @@ AliFMDParameters::Detector2Hardware(UShort_t  det,        Char_t    ring,
   // Return:
   //    @c true on success, false otherwise 
   //
-  if (!fAltroMap) return kFALSE;
+  if (!fAltroMap) { 
+    AliFMDDebug(1, ("No ALTRO map available"));
+    return kFALSE;
+  }
   UShort_t preSamples = GetPreSamples(det, ring, sec, str);
   UShort_t sampleRate = GetSampleRate(det, ring, sec, str);
   UShort_t strip      = str - GetMinStrip(det,ring,sec,str);