X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=FMD%2FAliFMDParameters.cxx;h=a6632a4bc679c24706a519a54bd085604c33225e;hb=e8f4b841df7c610f28d63af23059f7194d99f012;hp=e637a159fb83a660ccc0dc84bc5c560ed6b06e7f;hpb=b5ee4425c93874c0ce306795eec31f8c0a87308d;p=u%2Fmrichter%2FAliRoot.git diff --git a/FMD/AliFMDParameters.cxx b/FMD/AliFMDParameters.cxx index e637a159fb8..a6632a4bc67 100644 --- a/FMD/AliFMDParameters.cxx +++ b/FMD/AliFMDParameters.cxx @@ -29,7 +29,7 @@ // `Init'. Optionally, the class can serve hard-coded constants, if // no CDB is available. // -#include "AliLog.h" // ALILOG_H +#include "AliFMDDebug.h" // ALILOG_H #include "AliFMDParameters.h" // ALIFMDPARAMETERS_H #include "AliFMDGeometry.h" // ALIFMDGEOMETRY_H #include "AliFMDRing.h" // ALIFMDRING_H @@ -40,8 +40,11 @@ #include "AliFMDAltroMapping.h" // ALIFMDALTROMAPPING_H #include // ALICDBMANAGER_H #include // ALICDBMANAGER_H +#include +#include #include #include +#include #include #include @@ -55,14 +58,16 @@ ClassImp(AliFMDParameters) AliFMDParameters* AliFMDParameters::fgInstance = 0; //____________________________________________________________________ -const char* AliFMDParameters::fgkPulseGain = "FMD/Calib/PulseGain"; -const char* AliFMDParameters::fgkPedestal = "FMD/Calib/Pedestal"; -const char* AliFMDParameters::fgkDead = "FMD/Calib/Dead"; -const char* AliFMDParameters::fgkSampleRate = "FMD/Calib/SampleRate"; -const char* AliFMDParameters::fgkAltroMap = "FMD/Calib/AltroMap"; -const char* AliFMDParameters::fgkZeroSuppression = "FMD/Calib/ZeroSuppression"; -const char* AliFMDParameters::fgkStripRange = "FMD/Calib/StripRange"; - +const char* AliFMDParameters::fgkPulseGain = "FMD/Calib/PulseGain"; +const char* AliFMDParameters::fgkPedestal = "FMD/Calib/Pedestal"; +const char* AliFMDParameters::fgkDead = "FMD/Calib/Dead"; +const char* AliFMDParameters::fgkSampleRate = "FMD/Calib/SampleRate"; +const char* AliFMDParameters::fgkAltroMap = "FMD/Calib/AltroMap"; +const char* AliFMDParameters::fgkZeroSuppression = "FMD/Calib/ZeroSuppression"; +const char* AliFMDParameters::fgkStripRange = "FMD/Calib/StripRange"; +const char* AliFMDParameters::fkPedestalShuttleID = "pedestals"; +const char* AliFMDParameters::fkGainShuttleID = "gains"; +const char* AliFMDParameters::fkConditionsShuttleID = "conditions"; //____________________________________________________________________ AliFMDParameters* @@ -90,6 +95,7 @@ AliFMDParameters::AliFMDParameters() fFixedMaxStrip(0), fFixedPulseGain(0), fEdepMip(0), + fHasCompleteHeader(kTRUE), fZeroSuppression(0), fSampleRate(0), fPedestal(0), @@ -109,28 +115,45 @@ AliFMDParameters::AliFMDParameters() SetPedestalFactor(); SetThreshold(); SetStripRange(); + fAltroMap = new AliFMDAltroMapping; } //__________________________________________________________________ void -AliFMDParameters::Init() +AliFMDParameters::Init(Bool_t forceReInit, UInt_t what) { // Initialize the parameters manager. We need to get stuff from the // CDB here. + if (forceReInit) fIsInit = kFALSE; if (fIsInit) return; - InitPulseGain(); - InitPedestal(); - InitDeadMap(); - InitSampleRate(); - InitZeroSuppression(); - InitAltroMap(); + if (what & kPulseGain) InitPulseGain(); + if (what & kPedestal) InitPedestal(); + if (what & kDeadMap) InitDeadMap(); + if (what & kSampleRate) InitSampleRate(); + if (what & kZeroSuppression) InitZeroSuppression(); + if (what & kAltroMap) InitAltroMap(); + fIsInit = kTRUE; +} +//__________________________________________________________________ +void +AliFMDParameters::Init(AliFMDPreprocessor* pp, Bool_t forceReInit, UInt_t what) +{ + // Initialize the parameters manager. We need to get stuff from the + // CDB here. + 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); fIsInit = kTRUE; - } //__________________________________________________________________ #define DET2IDX(det,ring,sec,str) \ - (det * 10000 + (ring == 'I' ? 0 : 1000) + str) + (det * 1000 + (ring == 'I' ? 0 : 512) + str) //__________________________________________________________________ void @@ -138,39 +161,38 @@ AliFMDParameters::Draw(Option_t* option) { TString opt(option); enum { - kPulseGain, // Path to PulseGain calib object - kThreshold, // Path to PulseGain calib object - kPedestal, // Path to Pedestal calib object - kPedestalWidth, // Path to Pedestal calib object - kDead, // Path to Dead calib object - kSampleRate, // Path to SampleRate calib object - kAltroMap, // Path to AltroMap calib object - kZeroSuppression, // Path to ZeroSuppression cal object - kMinStripRange, // Path to strip range cal object - kMaxStripRange // Path to strip range cal object + kLocalPulseGain, // Path to PulseGain calib object + kLocalThreshold, // Path to PulseGain calib object + kLocalPedestal, // Path to Pedestal calib object + kLocalPedestalWidth, // Path to Pedestal calib object + kLocalDead, // Path to Dead calib object + kLocalSampleRate, // Path to SampleRate calib object + kLocalAltroMap, // Path to AltroMap calib object + kLocalZeroSuppression, // Path to ZeroSuppression cal object + kLocalMinStripRange, // Path to strip range cal object + kLocalMaxStripRange // Path to strip range cal object } what; - if (opt.Contains("dead", TString::kIgnoreCase)) - what = kDead; + what = kLocalDead; else if (opt.Contains("threshold",TString::kIgnoreCase)) - what = kThreshold; + what = kLocalThreshold; else if (opt.Contains("gain",TString::kIgnoreCase)) - what = kPulseGain; + what = kLocalPulseGain; else if (opt.Contains("pedestal",TString::kIgnoreCase)) - what = kPedestal; + what = kLocalPedestal; else if (opt.Contains("noise",TString::kIgnoreCase)) - what = kPedestalWidth; + what = kLocalPedestalWidth; else if (opt.Contains("zero",TString::kIgnoreCase)) - what = kZeroSuppression; + what = kLocalZeroSuppression; else if (opt.Contains("rate",TString::kIgnoreCase)) - what = kSampleRate; + what = kLocalSampleRate; else if (opt.Contains("min",TString::kIgnoreCase)) - what = kMinStripRange; + what = kLocalMinStripRange; else if (opt.Contains("max",TString::kIgnoreCase)) - what = kMaxStripRange; + what = kLocalMaxStripRange; else if (opt.Contains("map",TString::kIgnoreCase)) - what = kAltroMap; + what = kLocalAltroMap; else { Warning("Draw", "unknown parameter: %s\n\tShould be one of\n\t" "dead, threshold, gain, pedestal, noise, zero, rate, " @@ -188,7 +210,11 @@ AliFMDParameters::Draw(Option_t* option) UShort_t nStrip = (iring == 0 ? 512 : 256); Char_t ring = (iring == 0 ? 'I' : 'O'); for (UShort_t str = 0; str < nStrip; str++) { + // UShort_t nSec = (iring == 0 ? 20 : 40); + // Char_t ring = (iring == 0 ? 'I' : 'O'); + // for (UShort_t sec = 0; sec < nSec; sec++) { Int_t idx = DET2IDX(det, ring, 0, str); + // Int_t idx = DET2IDX(det, ring, sec, 0); if (skip) { xbins[i-1] = idx - .5; skip = kFALSE; @@ -201,11 +227,13 @@ AliFMDParameters::Draw(Option_t* option) } } TArrayD ybins(41); - for (Int_t i = 0; i < 41; i++) ybins[i] = Float_t(i - .5); + for (/*Int_t*/ i = 0; i < ybins.fN; i++) ybins[i] = Float_t(i - .5); TH2D* hist = new TH2D("calib", Form("Calibration %s", option), xbins.fN-1, xbins.fArray, ybins.fN-1, ybins.fArray); - + hist->GetXaxis()->SetTitle("1000 #times detector + 512 #times ring + strip"); + hist->GetYaxis()->SetTitle("sector"); + // hist->Draw("Lego"); // return; @@ -221,29 +249,30 @@ AliFMDParameters::Draw(Option_t* option) UInt_t ddl, addr; Double_t val = 0; switch (what) { - case kPulseGain: // Path to PulseGain calib object + case kLocalPulseGain: // Path to PulseGain calib object val = GetPulseGain(det,ring,sec,str); break; - case kThreshold: // Path to PulseGain calib object + case kLocalThreshold: // Path to PulseGain calib object val = GetThreshold(); break; - case kPedestal: // Path to Pedestal calib object + case kLocalPedestal: // Path to Pedestal calib object val = GetPedestal(det,ring,sec,str); break; - case kPedestalWidth: // Path to Pedestal calib object + case kLocalPedestalWidth: // Path to Pedestal calib object val = GetPedestalWidth(det,ring,sec,str); break; - case kDead: // Path to Dead calib object + case kLocalDead: // Path to Dead calib object val = IsDead(det,ring,sec,str); break; - case kSampleRate: // Path to SampleRate calib object + case kLocalSampleRate: // Path to SampleRate calib object val = GetSampleRate(det,ring,sec,str); break; - case kAltroMap: // Path to AltroMap calib object + case kLocalAltroMap: // Path to AltroMap calib object Detector2Hardware(det,ring,sec,str, ddl, addr); val = addr; break; - case kZeroSuppression: // Path to ZeroSuppression cal object + case kLocalZeroSuppression: // Path to ZeroSuppression cal object val = GetZeroSuppression(det,ring,sec,str); break; - case kMinStripRange: // Path to strip range cal object + case kLocalMinStripRange: // Path to strip range cal object val = GetMinStrip(det,ring,sec,str); break; - case kMaxStripRange: // Path to strip range cal object + case kLocalMaxStripRange: // Path to strip range cal object val = GetMaxStrip(det,ring,sec,str); break; } hist->Fill(idx,sec,val); + // hist->Fill(idx,str,val); } } } @@ -257,76 +286,164 @@ AliFMDParameters::Print(Option_t* option) const { // Print information. // If option contains an 'A' then everything is printed. + // If the option contains the string "FMD" the function will search + // for detector, ring, sector, and strip numbers to print, in the + // format + // + // FMD[,] + // + // The wild card '*' means all of , , , or + // . TString opt(option); - Bool_t showStrips = opt.Contains("a", TString::kIgnoreCase); + Bool_t showStrips = opt.Contains("a", TString::kIgnoreCase); + UShort_t ds[] = { 1, 2, 3, 0 }; + Char_t rs[] = { 'I', 'O', '\0' }; + UShort_t minStrip = 0; + UShort_t maxStrip = 512; + UShort_t minSector = 0; + UShort_t maxSector = 40; + + if (opt.Contains("fmd",TString::kIgnoreCase)) { - size_t i = opt.Index("fmd",TString::kIgnoreCase); - size_t j = opt.Index("]",TString::kIgnoreCase); - UShort_t det, sec, str; - Char_t ring, lbrack, rbrack, comma; - UInt_t ddl, addr; + showStrips = kTRUE; + size_t i = opt.Index("fmd",TString::kIgnoreCase); + size_t j = opt.Index("]",TString::kIgnoreCase); + enum { + kReadDet, + kReadRing, + kReadLbrack, + kReadSector, + kReadComma, + kReadStrip, + kReadRbrack, + kEnd + } state = kReadDet; std::stringstream s(opt(i+4, j-i-3).Data()); - s >> det >> ring >> lbrack >> sec >> comma >> str >> rbrack; - Detector2Hardware(det, ring, sec, str, ddl, addr); - std::cout - << " Strip | Pedestal | Gain | ZS thr. | Address\n" - << "--------------+-------------------+------------+---------+---------" - << "\nFMD" << det << ring << "[" << std::setw(2) << sec << "," - << std::setw(3) << str << "] | " - << std::setw(7) << GetPedestal(det, ring, sec, str) - << "+/-" << std::setw(7) - << GetPedestalWidth(det, ring, sec, str) - << " | " << std::setw(10) - << GetPulseGain(det, ring, sec, str) - << " | " << std::setw(7) - << GetZeroSuppression(det, ring, sec, str) - << " | 0x" << std::hex << std::setw(4) - << std::setfill('0') << ddl << ",0x" << std::setw(3) - << addr << std::dec << std::setfill(' ') << std::endl; - return; + while (state != kEnd) { + Char_t tmp = s.peek(); + if (tmp == ' ' || tmp == '\t') { + s.get(); + continue; + } + switch (state) { + case kReadDet: { // First, try to kRead the detector + if (tmp == '*') s.get(); + else { + UShort_t det; + s >> det; + if (!s.bad()) { + ds[0] = det; + ds[1] = 0; + } + } + state = (s.bad() ? kEnd : kReadRing); + } break; + case kReadRing: { // Then try to read the ring; + Char_t ring; + s >> ring; + if (ring != '*' && !s.bad()) { + rs[0] = ring; + rs[1] = '\0'; + } + state = (s.bad() ? kEnd : kReadLbrack); + } break; + case kReadLbrack: { // Try to read a left bracket + Char_t lbrack; + s >> lbrack; + state = (s.bad() ? kEnd : kReadSector); + } break; + case kReadSector: { // Try to read a sector + if (tmp == '*') s.get(); + else { + UShort_t sec; + s >> sec; + if (!s.bad()) { + minSector = sec; + maxSector = sec + 1; + } + } + state = (s.bad() ? kEnd : kReadComma); + } break; + case kReadComma: { // Try to read a left bracket + Char_t comma; + s >> comma; + state = (s.bad() ? kEnd : kReadStrip); + } break; + case kReadStrip: { // Try to read a strip + if (tmp == '*') s.get(); + else { + UShort_t str; + s >> str; + if (!s.bad()) { + minStrip = str; + maxStrip = str + 1; + } + } + state = (s.bad() ? kEnd : kReadRbrack); + } break; + case kReadRbrack: { // Try to read a left bracket + Char_t rbrack; + s >> rbrack; + state = kEnd; + } break; + case kEnd: + break; + } + } } - for (UShort_t det=1 ; det <= 3; det++) { - std::cout << "FMD" << det << std::endl; - Char_t rings[] = { 'I', (det == 1 ? '\0' : 'O'), '\0' }; - for (Char_t* ring = rings; *ring != '\0'; ring++) { - std::cout << " Ring " << *ring << std::endl; - UShort_t nSec = ( *ring == 'I' ? 20 : 40 ); - UShort_t nStr = ( *ring == 'I' ? 512 : 256 ); - for (UShort_t sec = 0; sec < nSec; sec++) { - UShort_t min = GetMinStrip(det, *ring, sec, 0); - UShort_t max = GetMaxStrip(det, *ring, sec, 0); - UShort_t rate = GetSampleRate(det, *ring, sec, 0); - std::cout << " Sector " << std::setw(2) << sec - << " Strip range: " << std::setw(3) << min << "," - << std::setw(3) << max << " Rate: " << std::setw(2) - << rate << std::endl; - if (!showStrips) continue; + UShort_t* dp = ds; + UShort_t det; + while ((det = *(dp++))) { + + Char_t* rp = rs; + Char_t ring; + while ((ring = *(rp++))) { + 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; + + 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++) { std::cout << " Strip | Pedestal | Gain | ZS thr. | Address\n" << "--------+-------------------+------------+---------+---------" << std::endl; - for (UShort_t str = 0; str < nStr; str++) { - std::cout << " " << std::setw(3) << str << " | "; - if (IsDead(det, *ring, sec, str)) { + for (UShort_t str = minStrip; str < nStr && str < maxStrip; str++) { + if (str == minStrip) std::cout << std::setw(3) << sec << ","; + else std::cout << " "; + std::cout << std::setw(3) << str << " | "; + if (IsDead(det, ring, sec, str)) { std::cout << "dead" << std::endl; continue; } UInt_t ddl, addr; - Detector2Hardware(det, *ring, sec, str, ddl, addr); - std::cout << std::setw(7) << GetPedestal(det, *ring, sec, str) + Detector2Hardware(det, ring, sec, str, ddl, addr); + std::cout << std::setw(7) << GetPedestal(det, ring, sec, str) << "+/-" << std::setw(7) - << GetPedestalWidth(det, *ring, sec, str) + << GetPedestalWidth(det, ring, sec, str) << " | " << std::setw(10) - << GetPulseGain(det, *ring, sec, str) - << " | " << std::setw(5) - << GetZeroSuppression(det, *ring, sec, str) + << GetPulseGain(det, ring, sec, str) + << " | " << std::setw(7) + << GetZeroSuppression(det, ring, sec, str) << " | 0x" << std::hex << std::setw(4) << std::setfill('0') << ddl << ",0x" << std::setw(3) << addr << std::dec << std::setfill(' ') << std::endl; - } - } - } - } + } // for (strip) + } // for (sector) + std::cout + << "=============================================================" + << std::endl; + } // while (ring) + } // while (det) + } //__________________________________________________________________ @@ -338,128 +455,128 @@ AliFMDParameters::SetStripRange(UShort_t min, UShort_t max) fFixedMaxStrip = max; } +//__________________________________________________________________ +AliCDBEntry* +AliFMDParameters::GetEntry(const char* path, AliFMDPreprocessor* pp, + Bool_t fatal) const +{ + // Get an entry from the CDB or via preprocessor + AliCDBEntry* entry = 0; + if (!pp) { + AliCDBManager* cdb = AliCDBManager::Instance(); + entry = cdb->Get(path); + } + else { + const char* third = gSystem->BaseName(path); + const char* second = gSystem->BaseName(gSystem->DirName(path)); + entry = pp->GetFromCDB(second, third); + } + if (!entry) { + TString msg(Form("No %s found in CDB, perhaps you need to " + "use AliFMDCalibFaker?", path)); + if (fatal) { AliFatal(msg.Data()); } + else AliLog::Message(AliLog::kWarning, msg.Data(), "FMD", + "AliFMDParameters", "GetEntry", __FILE__, + __LINE__); + return 0; + } + return entry; +} + + //__________________________________________________________________ void -AliFMDParameters::InitPulseGain() +AliFMDParameters::InitPulseGain(AliFMDPreprocessor* pp) { // Get pulse gain from CDB or used fixed - AliCDBManager* cdb = AliCDBManager::Instance(); - AliCDBEntry* gain = cdb->Get(fgkPulseGain); - if (!gain) { - AliWarning(Form("No %s found in CDB, perhaps you need to " - "use AliFMDCalibFaker?", fgkPulseGain)); - return; - } + AliCDBEntry* gain = GetEntry(fgkPulseGain, pp); + if (!gain) return; - AliDebug(1, Form("Got gain from CDB")); + AliFMDDebug(1, ("Got gain from CDB")); fPulseGain = dynamic_cast(gain->GetObject()); - if (!fPulseGain) AliWarning("Invalid pulser gain object from CDB"); + if (!fPulseGain) AliFatal("Invalid pulser gain object from CDB"); } //__________________________________________________________________ void -AliFMDParameters::InitPedestal() +AliFMDParameters::InitPedestal(AliFMDPreprocessor* pp) { // Initialize the pedestals from CDB - AliCDBManager* cdb = AliCDBManager::Instance(); - AliCDBEntry* pedestal = cdb->Get(fgkPedestal); - if (!pedestal) { - AliWarning(Form("No %s found in CDB, perhaps you need to " - "use AliFMDCalibFaker?", fgkPedestal)); - return; - } - AliDebug(1, Form("Got pedestal from CDB")); + AliCDBEntry* pedestal = GetEntry(fgkPedestal, pp); + if (!pedestal) return; + + AliFMDDebug(1, ("Got pedestal from CDB")); fPedestal = dynamic_cast(pedestal->GetObject()); - if (!fPedestal) AliWarning("Invalid pedestal object from CDB"); + if (!fPedestal) AliFatal("Invalid pedestal object from CDB"); } //__________________________________________________________________ void -AliFMDParameters::InitDeadMap() +AliFMDParameters::InitDeadMap(AliFMDPreprocessor* pp) { // Get Dead-channel-map from CDB - AliCDBManager* cdb = AliCDBManager::Instance(); - AliCDBEntry* deadMap = cdb->Get(fgkDead); - if (!deadMap) { - AliWarning(Form("No %s found in CDB, perhaps you need to " - "use AliFMDCalibFaker?", fgkDead)); - return; - } - AliDebug(1, Form("Got dead map from CDB")); + AliCDBEntry* deadMap = GetEntry(fgkDead, pp); + if (!deadMap) return; + + AliFMDDebug(1, ("Got dead map from CDB")); fDeadMap = dynamic_cast(deadMap->GetObject()); - if (!fDeadMap) AliWarning("Invalid dead map object from CDB"); + if (!fDeadMap) AliFatal("Invalid dead map object from CDB"); } //__________________________________________________________________ void -AliFMDParameters::InitZeroSuppression() +AliFMDParameters::InitZeroSuppression(AliFMDPreprocessor* pp) { // Get 0-suppression from CDB - AliCDBManager* cdb = AliCDBManager::Instance(); - AliCDBEntry* zeroSup = cdb->Get(fgkZeroSuppression); - if (!zeroSup) { - AliWarning(Form("No %s found in CDB, perhaps you need to " - "use AliFMDCalibFaker?", fgkZeroSuppression)); - return; - } - AliDebug(1, Form("Got zero suppression from CDB")); + AliCDBEntry* zeroSup = GetEntry(fgkZeroSuppression, pp); + if (!zeroSup) return; + AliFMDDebug(1, ("Got zero suppression from CDB")); fZeroSuppression = dynamic_cast(zeroSup->GetObject()); - if (!fZeroSuppression)AliWarning("Invalid zero suppression object from CDB"); + if (!fZeroSuppression)AliFatal("Invalid zero suppression object from CDB"); } //__________________________________________________________________ void -AliFMDParameters::InitSampleRate() +AliFMDParameters::InitSampleRate(AliFMDPreprocessor* pp) { // get Sample rate from CDB - AliCDBManager* cdb = AliCDBManager::Instance(); - AliCDBEntry* sampRat = cdb->Get(fgkSampleRate); - if (!sampRat) { - AliWarning(Form("No %s found in CDB, perhaps you need to " - "use AliFMDCalibFaker?", fgkSampleRate)); - return; - } - AliDebug(1, Form("Got zero suppression from CDB")); + AliCDBEntry* sampRat = GetEntry(fgkSampleRate, pp); + if (!sampRat) return; + AliFMDDebug(1, ("Got zero suppression from CDB")); fSampleRate = dynamic_cast(sampRat->GetObject()); - if (!fSampleRate) AliWarning("Invalid zero suppression object from CDB"); + if (!fSampleRate) AliFatal("Invalid zero suppression object from CDB"); } //__________________________________________________________________ void -AliFMDParameters::InitAltroMap() +AliFMDParameters::InitAltroMap(AliFMDPreprocessor* pp) { // Get hardware mapping from CDB - AliCDBManager* cdb = AliCDBManager::Instance(); - AliCDBEntry* hwMap = cdb->Get(fgkAltroMap); - if (!hwMap) { - AliWarning(Form("No %s found in CDB, perhaps you need to " - "use AliFMDCalibFaker?", fgkAltroMap)); - fAltroMap = new AliFMDAltroMapping; - return; + if (fAltroMap) { + delete fAltroMap; + fAltroMap = 0; } - AliDebug(1, Form("Got ALTRO map from CDB")); + AliCDBEntry* hwMap = GetEntry(fgkAltroMap, pp, kFALSE); + if (!hwMap) return; + + AliFMDDebug(1, ("Got ALTRO map from CDB")); fAltroMap = dynamic_cast(hwMap->GetObject()); if (!fAltroMap) { - AliWarning("Invalid ALTRO map object from CDB"); + AliFatal("Invalid ALTRO map object from CDB"); fAltroMap = new AliFMDAltroMapping; } } //__________________________________________________________________ void -AliFMDParameters::InitStripRange() +AliFMDParameters::InitStripRange(AliFMDPreprocessor* pp) { // Get strips read-out from CDB - AliCDBManager* cdb = AliCDBManager::Instance(); - AliCDBEntry* range = cdb->Get(fgkStripRange); - if (!range) { - AliWarning(Form("No %s found in CDB, perhaps you need to " - "use AliFMDCalibFaker?", fgkStripRange)); - return; - } - AliDebug(1, Form("Got strip range from CDB")); + AliCDBEntry* range = GetEntry(fgkStripRange, pp); + if (!range) return; + AliFMDDebug(1, ("Got strip range from CDB")); fStripRange = dynamic_cast(range->GetObject()); - if (!fStripRange) AliWarning("Invalid strip range object from CDB"); + if (!fStripRange) AliFatal("Invalid strip range object from CDB"); } @@ -491,7 +608,7 @@ AliFMDParameters::GetPulseGain(UShort_t detector, Char_t ring, fFixedPulseGain = fVA1MipRange * GetEdepMip() / fAltroChannelSize; return fFixedPulseGain; } - AliDebug(50, Form("pulse gain for FMD%d%c[%2d,%3d]=%f", + AliFMDDebug(50, ("pulse gain for FMD%d%c[%2d,%3d]=%f", detector, ring, sector, strip, fPulseGain->Value(detector, ring, sector, strip))); return fPulseGain->Value(detector, ring, sector, strip); @@ -504,7 +621,7 @@ AliFMDParameters::IsDead(UShort_t detector, Char_t ring, { // Check if the channel is dead if (!fDeadMap) return kFALSE; - AliDebug(50, Form("Dead for FMD%d%c[%2d,%3d]=%s", + AliFMDDebug(50, ("Dead for FMD%d%c[%2d,%3d]=%s", detector, ring, sector, strip, fDeadMap->operator()(detector, ring, sector, strip) ? "no" : "yes")); @@ -519,7 +636,7 @@ AliFMDParameters::GetZeroSuppression(UShort_t detector, Char_t ring, // Get zero suppression threshold if (!fZeroSuppression) return fFixedZeroSuppression; // Need to map strip to ALTRO chip. - AliDebug(50, Form("zero sup. for FMD%d%c[%2d,%3d]=%f", + AliFMDDebug(50, ("zero sup. for FMD%d%c[%2d,%3d]=%f", detector, ring, sector, strip, fZeroSuppression->operator()(detector, ring, sector, strip))); @@ -535,7 +652,7 @@ AliFMDParameters::GetSampleRate(UShort_t det, Char_t ring, UShort_t sector, if (!fSampleRate) return fFixedSampleRate; // Need to map sector to digitizier card. UInt_t ret = fSampleRate->Rate(det, ring, sector, str); - AliDebug(50, Form("Sample rate for FMD%d%c[%2d,%3d]=%d", + AliFMDDebug(50, ("Sample rate for FMD%d%c[%2d,%3d]=%d", det, ring, sector, str, ret)); return ret; } @@ -549,7 +666,7 @@ AliFMDParameters::GetMinStrip(UShort_t det, Char_t ring, UShort_t sector, if (!fStripRange) return fFixedMinStrip; // Need to map sector to digitizier card. UInt_t ret = fStripRange->Min(det, ring, sector, str); - AliDebug(50, Form("Min strip # for FMD%d%c[%2d,%3d]=%d", + AliFMDDebug(50, ("Min strip # for FMD%d%c[%2d,%3d]=%d", det, ring, sector, str, ret)); return ret; } @@ -563,7 +680,7 @@ AliFMDParameters::GetMaxStrip(UShort_t det, Char_t ring, UShort_t sector, if (!fStripRange) return fFixedMaxStrip; // Need to map sector to digitizier card. UInt_t ret = fStripRange->Max(det, ring, sector, str); - AliDebug(50, Form("Max strip # for FMD%d%c[%2d,%3d]=%d", + AliFMDDebug(50, ("Max strip # for FMD%d%c[%2d,%3d]=%d", det, ring, sector, str, ret)); return ret; } @@ -575,7 +692,7 @@ AliFMDParameters::GetPedestal(UShort_t detector, Char_t ring, { // Get the pedesal if (!fPedestal) return fFixedPedestal; - AliDebug(50, Form("pedestal for FMD%d%c[%2d,%3d]=%f", + AliFMDDebug(50, ("pedestal for FMD%d%c[%2d,%3d]=%f", detector, ring, sector, strip, fPedestal->Value(detector, ring, sector, strip))); return fPedestal->Value(detector, ring, sector, strip); @@ -588,7 +705,7 @@ AliFMDParameters::GetPedestalWidth(UShort_t detector, Char_t ring, { // Get the pedesal if (!fPedestal) return fFixedPedestalWidth; - AliDebug(50, Form("pedetal width for FMD%d%c[%2d,%3d]=%f", + AliFMDDebug(50, ("pedetal width for FMD%d%c[%2d,%3d]=%f", detector, ring, sector, strip, fPedestal->Width(detector, ring, sector, strip))); return fPedestal->Width(detector, ring, sector, strip); @@ -605,9 +722,20 @@ AliFMDParameters::GetAltroMap() const //__________________________________________________________________ Bool_t -AliFMDParameters::Hardware2Detector(UInt_t ddl, UInt_t addr, UShort_t& det, - Char_t& ring, UShort_t& sec, - UShort_t& str) const +AliFMDParameters::Hardware2Detector(UInt_t ddl, UInt_t board, + UInt_t chip, UInt_t chan, + UShort_t& det, Char_t& ring, + UShort_t& sec, UShort_t& str) const +{ + // Map hardware address to detector index + if (!fAltroMap) return kFALSE; + return fAltroMap->Hardware2Detector(ddl,board,chip,chan, det,ring,sec,str); +} +//__________________________________________________________________ +Bool_t +AliFMDParameters::Hardware2Detector(UInt_t ddl, UInt_t addr, + UShort_t& det, Char_t& ring, + UShort_t& sec, UShort_t& str) const { // Map hardware address to detector index if (!fAltroMap) return kFALSE; @@ -616,9 +744,21 @@ AliFMDParameters::Hardware2Detector(UInt_t ddl, UInt_t addr, UShort_t& det, //__________________________________________________________________ Bool_t -AliFMDParameters::Detector2Hardware(UShort_t det, Char_t ring, UShort_t sec, - UShort_t str, UInt_t& ddl, - UInt_t& addr) const +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, + UInt_t& ddl, UInt_t& addr) const { // Map detector index to hardware address if (!fAltroMap) return kFALSE;