fIsInit = kTRUE;
}
+//__________________________________________________________________
+Bool_t
+AliFMDParameters::CheckFile(const char* prefix,
+ const char* path,
+ int number,
+ TString& f) const
+{
+ f = (Form("%s%d.csv", prefix, number));
+ AliFMDDebug(5, ("Checking if %s exists in %s ...", f.Data(), path));
+ f = gSystem->Which(path, f.Data());
+ AliFMDDebug(5, ("Got back '%s'", f.Data()));
+ return !f.IsNull();
+}
+
+//__________________________________________________________________
+void
+AliFMDParameters::Init(const char* path, Bool_t forceReInit, UInt_t what)
+{
+ // Initialize the parameters manager. Pedestals, gains, strip
+ // range, and sample rate is read from local comma separated value
+ // files if available. Otherwise, the calibrations are obtained
+ // from OCDB.
+ if (forceReInit) fIsInit = kFALSE;
+ if (fIsInit) return;
+
+ AliFMDCalibStripRange* range = 0;
+ AliFMDCalibSampleRate* rate = 0;
+ AliFMDCalibPedestal* peds = 0;
+ AliFMDCalibGain* gains = 0;
+
+ for (Int_t i = 1; i <= 3; i++) {
+ TString f;
+ if (((what & kSampleRate) || (what & kStripRange)) &&
+ CheckFile("conditions", path, i, f)) {
+ if (!rate && (what & kSampleRate)) rate = new AliFMDCalibSampleRate;
+ if (!range && (what & kStripRange)) range = new AliFMDCalibStripRange;
+ std::ifstream in(f.Data());
+ if (range) range->ReadFromFile(in);
+ if (rate) rate->ReadFromFile(in);
+ in.close();
+ }
+ if ((what & kPedestal) && CheckFile("peds", path, i, f)) {
+ if (!peds) peds = new AliFMDCalibPedestal;
+ std::ifstream in(f.Data());
+ peds->ReadFromFile(in);
+ in.close();
+ }
+ if ((what & kPulseGain) && CheckFile("gains", path, i, f)) {
+ if (!gains) gains = new AliFMDCalibGain;
+ std::ifstream in(f.Data());
+ gains->ReadFromFile(in);
+ in.close();
+ }
+ }
+
+ if (range) what &= ~kStripRange;
+ if (rate) what &= ~kSampleRate;
+ if (peds) what &= ~kPedestal;
+ if (gains) what &= ~kPulseGain;
+
+ Init(kFALSE, what);
+
+ if (range) SetStripRange(range);
+ if (rate) SetSampleRate(rate);
+ if (peds) SetPedestal(peds);
+ if (gains) SetGain(gains);
+
+ fIsInit = kTRUE;
+}
+
+//__________________________________________________________________
+void
+AliFMDParameters::MakeDeadMap(Float_t maxNoise,
+ Float_t minGain,
+ Float_t maxGain)
+{
+ if (fPedestal)
+ fDeadMap = fPedestal->MakeDeadMap(maxNoise, fDeadMap);
+ if (fPulseGain)
+ fDeadMap = fPulseGain->MakeDeadMap(minGain, maxGain, fDeadMap);
+}
//__________________________________________________________________
#define DET2IDX(det,ring,sec,str) \
(det * 1000 + (ring == 'I' ? 0 : 512) + str)
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
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;
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)
//____________________________________________________________________
Bool_t
-AliFMDParameters::Hardware2Detector(UInt_t ddl, UInt_t addr,
+AliFMDParameters::Hardware2Detector(UShort_t ddl, UShort_t addr,
UShort_t timebin,
- UShort_t& det, Char_t& ring,
+ 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 (!Hardware2Detector(ddl, addr, det, ring, sec, str)) return kFALSE;
- UShort_t preSamples = GetPreSamples(det, ring, sec, str);
- UShort_t sampleRate = GetSampleRate(det, ring, sec, str);
- if (!fAltroMap->Hardware2Detector(ddl, addr, timebin,
- preSamples, sampleRate,
- det, ring, sec, str, sam)) return kFALSE;
- AliFMDDebug(50, ("%d/0x%02x/0x%x/0x%x/%04d -> FMD%d%c[%02d,%03d]-%d"
- " (pre=%2d, rate=%d)",
- ddl, ((addr >> 7) & 0x1F), ((addr >> 4) & 0x7), addr & 0xF,
- timebin, det, ring, sec, str, sam, preSamples, sampleRate));
- // str += GetMinStrip(det,ring,sec,str);
- return kTRUE;
-
+ 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(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 timebin,
UShort_t& det, Char_t& ring,
UShort_t& sec, Short_t& str,
// Translate a hardware address to detector coordinates.
//
// See also Hardware2Detector that accepts 4 inputs
- if (!Hardware2Detector(ddl,board,chip,chan,det,ring,sec,str)) return kFALSE;
- UShort_t preSamples = GetPreSamples(det, ring, sec, str);
- UShort_t sampleRate = GetSampleRate(det, ring, sec, str);
- if (!fAltroMap->Hardware2Detector(ddl, board, chip, chan, timebin,
- preSamples, sampleRate,
- det, ring, sec, str, sam)) return kFALSE;
- // str += GetMinStrip(det,ring,sec,str);
+ 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, Short_t& str) const
{
}
//__________________________________________________________________
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, Short_t& str) const
{
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,
- UInt_t& ddl, UInt_t& board,
- UInt_t& altro, UInt_t& channel,
+ UShort_t& ddl, UShort_t& board,
+ UShort_t& altro, UShort_t& channel,
UShort_t& timebin) const
{
if (!fAltroMap) return kFALSE;
-//__________________________________________________________________
-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
-{
- // Map detector index to hardware address
- if (!fAltroMap) return kFALSE;
- return fAltroMap->Detector2Hardware(det,ring,sec,str, ddl,board,chip,chan);
-}
-
//____________________________________________________________________
Bool_t
AliFMDParameters::Detector2Hardware(UShort_t det, Char_t ring,
UShort_t sec, UShort_t str,
UShort_t sam,
- UInt_t& ddl, UInt_t& addr,
+ UShort_t& ddl, UShort_t& addr,
UShort_t& timebin) const
{
if (!fAltroMap) return kFALSE;
ddl, addr, timebin);
}
+#if 0
+//__________________________________________________________________
+Bool_t
+AliFMDParameters::Detector2Hardware(UShort_t det, Char_t ring,
+ UShort_t sec, UShort_t str,
+ UShort_t& ddl, UShort_t& board,
+ UShort_t& chip, UShort_t& chan) const
+{
+ // Map detector index to hardware address
+ if (!fAltroMap) return kFALSE;
+ return fAltroMap->Detector2Hardware(det,ring,sec,str, ddl,board,chip,chan);
+}
+
//__________________________________________________________________
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
}
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