]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - FMD/AliFMDParameters.cxx
Changes in STEER:
[u/mrichter/AliRoot.git] / FMD / AliFMDParameters.cxx
index 025a745869f6c1526dbd69026d529971fa742bdb..6911a62eb651e6892a58732cd4d441fbe7e9de4c 100644 (file)
@@ -86,6 +86,9 @@ AliFMDParameters::AliFMDParameters()
     fAltroChannelSize(0),
     fChannelsPerAltro(0),
     fPedestalFactor(0),
+    fZSPre(0),
+    fZSPost(0),
+    fZSPedSubtract(kFALSE),
     fFixedPedestal(0),
     fFixedPedestalWidth(0),
     fFixedZeroSuppression(0),
@@ -248,7 +251,7 @@ AliFMDParameters::Draw(Option_t* option)
       for (UShort_t sec = 0; sec < nSector; sec++) {
        for (UShort_t str = 0; str < nStrip; str++) {
          Int_t idx = DET2IDX(det, ring, sec, str);
-         UInt_t ddl, addr;
+         UShort_t ddl, addr, time, sam=0;
          Double_t val = 0;
          switch (what) {
          case kLocalPulseGain:       // Path to PulseGain calib object
@@ -264,7 +267,7 @@ AliFMDParameters::Draw(Option_t* option)
          case kLocalSampleRate:      // Path to SampleRate calib object
             val = GetSampleRate(det,ring,sec,str); break;
          case kLocalAltroMap:        // Path to AltroMap calib object
-           Detector2Hardware(det,ring,sec,str, ddl, addr); 
+           Detector2Hardware(det,ring,sec,str,sam,ddl,addr,time); 
             val = addr; break;
          case kLocalZeroSuppression: // Path to ZeroSuppression cal object
             val = GetZeroSuppression(det,ring,sec,str); break;
@@ -307,9 +310,12 @@ AliFMDParameters::Print(Option_t* option) const
   
   
   if (opt.Contains("fmd",TString::kIgnoreCase)) {
-    showStrips    = kTRUE;
-    size_t   i    = opt.Index("fmd",TString::kIgnoreCase);
-    size_t   j    = opt.Index("]",TString::kIgnoreCase);
+    Int_t   i    = opt.Index("fmd",TString::kIgnoreCase);
+    Int_t   j    = opt.Index("]",TString::kIgnoreCase);
+    if (j != kNPOS)
+      showStrips    = kTRUE;
+    else 
+      j = opt.Length();
     enum {
       kReadDet, 
       kReadRing, 
@@ -403,17 +409,20 @@ AliFMDParameters::Print(Option_t* option) const
       if (det == 1 && ring == 'O') continue;
       UShort_t min  = GetMinStrip(det, ring, 0, 0);
       UShort_t max  = GetMaxStrip(det, ring, 0, 0);
-      UShort_t rate = GetSampleRate(det, ring, 0, 0);
       std::cout << "FMD" << det << ring 
                << "  Strip range: " 
                << std::setw(3) << min << "," 
-               << std::setw(3) << max << "  Rate: " 
-               << std::setw(2) << rate << std::endl;
+               << std::setw(3) << max << std::endl;
 
-      if (!showStrips) continue;
       UShort_t nSec = ( ring == 'I' ? 20  :  40 );
       UShort_t nStr = ( ring == 'I' ? 512 : 256 );
       for (UShort_t sec = minSector; sec < maxSector && sec < nSec; sec++) {
+
+       UShort_t rate = GetSampleRate(det, ring, sec, 0);
+       std::cout << "FMD" << det << ring << "[" << std::setw(2) << sec 
+                 << "] sample rate: " << rate << std::endl;
+
+       if (!showStrips) continue;
        std::cout 
          << "  Strip |     Pedestal      |    Gain    | ZS thr. | Address\n" 
          << "--------+-------------------+------------+---------+---------" 
@@ -426,8 +435,8 @@ AliFMDParameters::Print(Option_t* option) const
            std::cout << "dead" << std::endl;
            continue;
          }
-         UInt_t ddl, addr;
-         Detector2Hardware(det, ring, sec, str, ddl, addr);
+         UShort_t ddl, addr, time, sam=0;
+         Detector2Hardware(det, ring, sec, str, sam, ddl, addr, time);
          std::cout << std::setw(7) << GetPedestal(det, ring, sec, str) 
                    << "+/-" << std::setw(7) 
                    << GetPedestalWidth(det, ring, sec, str) 
@@ -494,7 +503,7 @@ AliFMDParameters::InitPulseGain(AliFMDPreprocessor* pp)
   AliCDBEntry*   gain     = GetEntry(fgkPulseGain, pp);
   if (!gain) return;
   
-  AliFMDDebug(1, ("Got gain from CDB"));
+  AliFMDDebug(5, ("Got gain from CDB"));
   fPulseGain = dynamic_cast<AliFMDCalibGain*>(gain->GetObject());
   if (!fPulseGain) AliFatal("Invalid pulser gain object from CDB");
 }
@@ -506,7 +515,7 @@ AliFMDParameters::InitPedestal(AliFMDPreprocessor* pp)
   AliCDBEntry*   pedestal = GetEntry(fgkPedestal, pp);
   if (!pedestal) return;
 
-  AliFMDDebug(1, ("Got pedestal from CDB"));
+  AliFMDDebug(5, ("Got pedestal from CDB"));
   fPedestal = dynamic_cast<AliFMDCalibPedestal*>(pedestal->GetObject());
   if (!fPedestal) AliFatal("Invalid pedestal object from CDB");
 }
@@ -519,7 +528,7 @@ AliFMDParameters::InitDeadMap(AliFMDPreprocessor* pp)
   AliCDBEntry*   deadMap  = GetEntry(fgkDead, pp);
   if (!deadMap) return;
   
-  AliFMDDebug(1, ("Got dead map from CDB"));
+  AliFMDDebug(5, ("Got dead map from CDB"));
   fDeadMap = dynamic_cast<AliFMDCalibDeadMap*>(deadMap->GetObject());
   if (!fDeadMap) AliFatal("Invalid dead map object from CDB");
 }
@@ -531,7 +540,7 @@ AliFMDParameters::InitZeroSuppression(AliFMDPreprocessor* pp)
   // Get 0-suppression from CDB 
   AliCDBEntry*   zeroSup  = GetEntry(fgkZeroSuppression, pp);
   if (!zeroSup) return;
-  AliFMDDebug(1, ("Got zero suppression from CDB"));
+  AliFMDDebug(5, ("Got zero suppression from CDB"));
   fZeroSuppression = 
     dynamic_cast<AliFMDCalibZeroSuppression*>(zeroSup->GetObject());
   if (!fZeroSuppression)AliFatal("Invalid zero suppression object from CDB");
@@ -544,7 +553,7 @@ AliFMDParameters::InitSampleRate(AliFMDPreprocessor* pp)
   // get Sample rate from CDB
   AliCDBEntry*   sampRat  = GetEntry(fgkSampleRate, pp);
   if (!sampRat) return;
-  AliFMDDebug(1, ("Got zero suppression from CDB"));
+  AliFMDDebug(5, ("Got zero suppression from CDB"));
   fSampleRate = dynamic_cast<AliFMDCalibSampleRate*>(sampRat->GetObject());
   if (!fSampleRate) AliFatal("Invalid zero suppression object from CDB");
 }
@@ -561,7 +570,7 @@ AliFMDParameters::InitAltroMap(AliFMDPreprocessor* pp)
   AliCDBEntry*   hwMap    = GetEntry(fgkAltroMap, pp, kFALSE);       
   if (!hwMap) return;
 
-  AliFMDDebug(1, ("Got ALTRO map from CDB"));
+  AliFMDDebug(5, ("Got ALTRO map from CDB"));
   fAltroMap = dynamic_cast<AliFMDAltroMapping*>(hwMap->GetObject());
   if (!fAltroMap) {
     AliFatal("Invalid ALTRO map object from CDB");
@@ -576,7 +585,7 @@ AliFMDParameters::InitStripRange(AliFMDPreprocessor* pp)
   // Get strips read-out from CDB
   AliCDBEntry*   range    = GetEntry(fgkStripRange, pp);
   if (!range) return;
-  AliFMDDebug(1, ("Got strip range from CDB"));
+  AliFMDDebug(5, ("Got strip range from CDB"));
   fStripRange = dynamic_cast<AliFMDCalibStripRange*>(range->GetObject());
   if (!fStripRange) AliFatal("Invalid strip range object from CDB");
 }
@@ -722,12 +731,58 @@ AliFMDParameters::GetAltroMap() const
 }
 
 
+//____________________________________________________________________
+Bool_t 
+AliFMDParameters::Hardware2Detector(UShort_t  ddl,       UShort_t addr,
+                                   UShort_t  timebin,   
+                                   UShort_t& det,       Char_t&  ring, 
+                                   UShort_t& sec,       Short_t& str,
+                                   UShort_t& sam) const
+{
+  // Translate a hardware address to detector coordinates. 
+  // 
+  // See also Hardware2Detector that accepts 4 inputs 
+  if (!fAltroMap) return kFALSE;
+  UShort_t board, chip, chan;
+  fAltroMap->ChannelAddress(addr, board, chip, chan);
+  return Hardware2Detector(ddl,board,chip,chan,timebin,det,ring,sec,str,sam);
+}
+//____________________________________________________________________
+Bool_t 
+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,
+                                   UShort_t& sam) const
+{
+  // Translate a hardware address to detector coordinates. 
+  // 
+  // See also Hardware2Detector that accepts 4 inputs 
+  if (!fAltroMap) return kFALSE;
+  if (fAltroMap->DDL2Detector(ddl) < 0) return kFALSE;
+  Short_t stripBase = 0;
+  if (!fAltroMap->Channel2StripBase(board,chip,chan, 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;
+  fAltroMap->Timebin2Strip(sec, timebin, preSamples, sampleRate, stripOff, sam);
+  str = stripBase + stripOff;
+  AliFMDDebug(50, ("%d/0x%02x/0x%x/0x%x/%04d -> FMD%d%c[%02d,%03d]-%d"
+                 " (pre=%2d, rate=%d)", 
+                  ddl, board, chip, chan, timebin, 
+                  det, ring, sec, str, sam, preSamples, sampleRate));
+  return kTRUE;
+}
+
+#if 0
 //__________________________________________________________________
 Bool_t
-AliFMDParameters::Hardware2Detector(UInt_t    ddl,  UInt_t    board, 
-                                   UInt_t    chip, UInt_t    chan,
+AliFMDParameters::Hardware2Detector(UShort_t    ddl,  UShort_t    board, 
+                                   UShort_t    chip, UShort_t    chan,
                                    UShort_t& det,  Char_t&   ring, 
-                                   UShort_t& sec,  UShort_t& str) const
+                                   UShort_t& sec,  Short_t& str) const
 {
   // Map hardware address to detector index
   if (!fAltroMap) return kFALSE;
@@ -735,21 +790,60 @@ AliFMDParameters::Hardware2Detector(UInt_t    ddl,  UInt_t    board,
 }
 //__________________________________________________________________
 Bool_t
-AliFMDParameters::Hardware2Detector(UInt_t    ddl,  UInt_t    addr, 
+AliFMDParameters::Hardware2Detector(UShort_t    ddl,  UShort_t    addr, 
                                    UShort_t& det,  Char_t&   ring, 
-                                   UShort_t& sec,  UShort_t& str) const
+                                   UShort_t& sec,  Short_t& str) const
 {
   // Map hardware address to detector index
   if (!fAltroMap) return kFALSE;
   return fAltroMap->Hardware2Detector(ddl, addr, det, ring, sec, str);
 }
+#endif
+
+//____________________________________________________________________
+Bool_t 
+AliFMDParameters::Detector2Hardware(UShort_t  det,        Char_t    ring, 
+                                   UShort_t  sec,        UShort_t  str,
+                                   UShort_t  sam, 
+                                   UShort_t& ddl,        UShort_t& board, 
+                                   UShort_t& altro,      UShort_t& channel, 
+                                   UShort_t& timebin) const
+{
+  if (!fAltroMap) 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);
+  return fAltroMap->Detector2Hardware(det, ring, sec, strip, sam,
+                                     preSamples, sampleRate,
+                                     ddl, board, altro, channel, timebin);
+}
+
+  
+
+//____________________________________________________________________
+Bool_t 
+AliFMDParameters::Detector2Hardware(UShort_t  det,        Char_t    ring, 
+                                   UShort_t  sec,        UShort_t  str,
+                                   UShort_t  sam, 
+                                   UShort_t&   ddl,        UShort_t&   addr,
+                                   UShort_t& timebin) const
+{
+  if (!fAltroMap) 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);
+  return fAltroMap->Detector2Hardware(det, ring, sec, strip, sam,
+                                     preSamples, sampleRate,
+                                     ddl, addr, timebin);
+}
 
+#if 0
 //__________________________________________________________________
 Bool_t
 AliFMDParameters::Detector2Hardware(UShort_t det,  Char_t   ring, 
                                    UShort_t sec,  UShort_t str, 
-                                   UInt_t&  ddl,  UInt_t&  board, 
-                                   UInt_t&  chip, UInt_t&  chan) const
+                                   UShort_t&  ddl,  UShort_t&  board, 
+                                   UShort_t&  chip, UShort_t&  chan) const
 {
   // Map detector index to hardware address
   if (!fAltroMap) return kFALSE;
@@ -760,13 +854,13 @@ AliFMDParameters::Detector2Hardware(UShort_t det,  Char_t   ring,
 Bool_t
 AliFMDParameters::Detector2Hardware(UShort_t det, Char_t   ring, 
                                    UShort_t sec, UShort_t str, 
-                                   UInt_t&  ddl, UInt_t&  addr) const
+                                   UShort_t&  ddl, UShort_t&  addr) const
 {
   // Map detector index to hardware address
   if (!fAltroMap) return kFALSE;
   return fAltroMap->Detector2Hardware(det, ring, sec, str, ddl, addr);
 }
-
+#endif
 
 //__________________________________________________________________
 Float_t
@@ -781,11 +875,18 @@ AliFMDParameters::GetEdepMip() const
   }
   return fEdepMip;
 }
-
-
-  
+//____________________________________________________________________
+Float_t  
+AliFMDParameters::GetDACPerMIP() const
+{
+  //This is the conversion from the Digital-to-Analog-Converter setting
+  // to the number of MIPs. The number was measured in the NBI lab during
+  // August 2008.
   
+  return 29.67;
   
+}
 //____________________________________________________________________
 //
 // EOF