Skip to content

Commit

Permalink
Implement usage of CCDB Redirect
Browse files Browse the repository at this point in the history
  • Loading branch information
wiechula committed Jan 31, 2025
1 parent 71a5dd8 commit ddcd019
Show file tree
Hide file tree
Showing 10 changed files with 50 additions and 35 deletions.
2 changes: 1 addition & 1 deletion Detectors/TPC/base/include/TPCBase/CDBTypes.h
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ const std::unordered_map<CDBType, const std::string> CDBTypeMap{
//
{CDBType::ConfigFEEPad, "TPC/Config/FEEPad"},
{CDBType::ConfigFEE, "TPC/Config/FEE"},
{CDBType::ConfigRunInfo, "TPC/Config/RunInfo"},
{CDBType::ConfigRunInfo, "TPC/Config/RunInfoV2"},
//
{CDBType::ParDetector, "TPC/Parameter/Detector"},
{CDBType::ParElectronics, "TPC/Parameter/Electronics"},
Expand Down
3 changes: 2 additions & 1 deletion Detectors/TPC/base/include/TPCBase/DeadChannelMapCreator.h
Original file line number Diff line number Diff line change
Expand Up @@ -58,10 +58,11 @@ class DeadChannelMapCreator
void load(long timeStampOrRun);
void loadFEEConfigViaRunInfoTS(long timeStamp);
void loadFEEConfigViaRunInfo(long timeStampOrRun);
void loadFEEConfig(long tag, long createdNotAfter = -1);
void loadFEEConfig(long timeStamp = -1);
void loadIDCPadFlags(long timeStampOrRun);

void setDeadChannelMapIDCPadStatus(const CalDetFlag_t& padStatusMap, PadFlags mask = PadFlags::flagAllNoneGood);
void setDeadChannelMapFEEConfig(const FEEConfig& feeConfig) { mDeadChannelMapFEE = feeConfig.getDeadChannelMap(); }

const CalDet<bool>& getDeadChannelMapIDC() const { return mDeadChannelMapIDC; }
const CalDet<bool>& getDeadChannelMapFEE() const { return mDeadChannelMapFEE; }
Expand Down
23 changes: 13 additions & 10 deletions Detectors/TPC/base/include/TPCBase/FEEConfig.h
Original file line number Diff line number Diff line change
Expand Up @@ -48,16 +48,19 @@ struct CRUConfig {
struct FEEConfig {
/// Tag definitions for TPC/Config/FEE
enum class Tags : uint8_t {
Unspecified = 0, ///< Unspecified
TestWithZS = 1, ///< Test configuration with ZS
Pedestals = 2, ///< Configuration for Pedestal data taking
Pulser = 3, ///< Configuration for Pulser data taking
Laser = 4, ///< Configuration for Laser data taking
Cosmics = 5, ///< Configuration for Cosmics data taking
Physics35sigma = 6, ///< Physics configuration with 3.5 sigma thresholds
Physics30sigma = 7, ///< Physics configuration with 3.0 sigma thresholds
Physics25sigma = 8, ///< Physics configuration with 2.5 sigma thresholds
Laser10ADCoff = 9, ///< Configuration for Laser data taking with 10ADC offset for special studies
Unspecified = 0, ///< Unspecified
TestWithZS = 1, ///< Test configuration with ZS
Pedestals = 2, ///< Configuration for Pedestal data taking
Pulser = 3, ///< Configuration for Pulser data taking
Laser = 4, ///< Configuration for Laser data taking
Cosmics = 5, ///< Configuration for Cosmics data taking
Physics35sigma = 6, ///< Physics configuration with 3.5 sigma thresholds
Physics30sigma = 7, ///< Physics configuration with 3.0 sigma thresholds
Physics25sigma = 8, ///< Physics configuration with 2.5 sigma thresholds
Laser10ADCoff = 9, ///< Configuration for Laser data taking with 10ADC offset for special studies
TestNoFilters = 10, ///< Test configuration without filters
Physics2025sigma = 11, ///< Physics configuration with 2.0/2.5 sigma thresholds (IROC/OROC)
Physics30sigmaPbPb = 12, ///< Physics configuration with 3.0 sigma thresholds for PbPb (using differnet CMC settings wrt. pp config 7)
};

enum class PadConfig {
Expand Down
2 changes: 1 addition & 1 deletion Detectors/TPC/base/src/CDBInterface.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -556,7 +556,7 @@ void CDBInterface::createFEEConfig()

if (!mUseDefaults) {
LOGP(info, "trying to load default FEEConfig");
mDeadChannelMapCreator.loadFEEConfig(7, 1680525888290); // load oldest physics configuration
mDeadChannelMapCreator.loadFEEConfig(1680525888290); // load oldest physics configuration
if (mFEEConfig) {
return;
}
Expand Down
18 changes: 6 additions & 12 deletions Detectors/TPC/base/src/DeadChannelMapCreator.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -43,13 +43,7 @@ void DeadChannelMapCreator::loadFEEConfigViaRunInfoTS(long timeStamp)
if (mObjectValidity[CDBType::ConfigRunInfo].isValid(timeStamp)) {
return;
}
const auto meta = mCCDBApi.retrieveHeaders(CDBTypeMap.at(CDBType::ConfigRunInfo), {}, timeStamp);
mObjectValidity[CDBType::ConfigRunInfo].startvalidity = std::stol(meta.at("Valid-From"));
mObjectValidity[CDBType::ConfigRunInfo].endvalidity = std::stol(meta.at("Valid-Until"));
const long tag = std::stol(meta.at("Tag"));
LOGP(info, "Loading FEE config for time stamp {}, via RunInfo with Tag {}, RunType {}, runNumber {}, validity: {} - {}",
timeStamp, tag, meta.at("RunType"), meta.at("runNumber"), meta.at("Valid-From"), meta.at("Valid-Until"));
loadFEEConfig(tag, timeStamp);
loadFEEConfig(timeStamp);
}

//______________________________________________________________________________
Expand All @@ -59,13 +53,13 @@ void DeadChannelMapCreator::loadFEEConfigViaRunInfo(long timeStampOrRun)
}

//______________________________________________________________________________
void DeadChannelMapCreator::loadFEEConfig(long tag, long createdNotAfter)
void DeadChannelMapCreator::loadFEEConfig(long timeStamp)
{
std::map<std::string, std::string> mm, meta;
const std::string createdNotAfterS = (createdNotAfter < 0) ? "" : std::to_string(createdNotAfter);
mFEEConfig.reset(mCCDBApi.retrieveFromTFileAny<o2::tpc::FEEConfig>(CDBTypeMap.at(CDBType::ConfigFEE), mm, tag, &meta, "", createdNotAfterS));
std::map<std::string, std::string> meta;
mFEEConfig.reset(mCCDBApi.retrieveFromTFileAny<o2::tpc::FEEConfig>(CDBTypeMap.at(CDBType::ConfigRunInfo), {}, timeStamp, &meta));
const long tag = std::stol(meta.at("Tag"));
if (!mFEEConfig) {
LOGP(error, "Could not load {}/{}, createdNotAfter: {}", CDBTypeMap.at(CDBType::ConfigFEE), tag, createdNotAfterS);
LOGP(error, "Could not load {}/{}, createdNotAfter: {}", CDBTypeMap.at(CDBType::ConfigFEE), tag, timeStamp);
return;
}
LOGP(info, "Using FEE config for Tag {}, ETag {}, Last-Modified {}", meta.at("Valid-From"), meta.at("ETag"), meta.at("Last-Modified"));
Expand Down
3 changes: 3 additions & 0 deletions Detectors/TPC/base/src/FEEConfig.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,9 @@ const std::unordered_map<FEEConfig::Tags, const std::string> FEEConfig::TagNames
{Tags::Physics30sigma, "Physics30sigma"},
{Tags::Physics25sigma, "Physics25sigma"},
{Tags::Laser10ADCoff, "Laser10ADCoff"},
{Tags::TestNoFilters, "TestNoFilter"},
{Tags::Physics2025sigma, "Physics2025sigma"},
{Tags::Physics30sigmaPbPb, "Physics30sigmaPbPb"},
};

const std::unordered_map<FEEConfig::PadConfig, const std::string> FEEConfig::PadConfigNames{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ static constexpr int NZ2XBins = 5; ///< number of bins in z/x
static constexpr float MaxResid = 20.f; ///< max residual in y and z
static constexpr float MaxY = 50.f; ///< max value for y position (sector coordinates)
static constexpr float MaxZ = 300.f; ///< max value for z position
static constexpr float MaxTgSlp = 1.f; ///< max value for phi and lambda angles
static constexpr float MaxTgSlp = 1.f; ///< max value for phi (from snp)

// miscellaneous
static constexpr float sEps = 1e-6f; ///< small number for float comparisons
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ class TrackResiduals
LocalResid(short dyIn, short dzIn, short tgSlpIn, std::array<unsigned char, VoxDim> bvoxIn) : dy(dyIn), dz(dzIn), tgSlp(tgSlpIn), bvox(bvoxIn) {}
short dy{0}; ///< residual in y, ranges from -param::sMaxResid to +param::sMaxResid
short dz{0}; ///< residual in z, ranges from -param::sMaxResid to +param::sMaxResid
short tgSlp{0}; ///< tangens of the phi angle between padrow and track, ranges from -param::sMaxAngle to +param::sMaxAngle
short tgSlp{0}; ///< tangens of the phi angle between padrow and track, ranges from -param::MaxTgSlp to +param::MaxTgSlp
std::array<unsigned char, VoxDim> bvox{}; ///< voxel identifier: VoxZ, VoxF, VoxX
ClassDefNV(LocalResid, 1);
};
Expand Down
18 changes: 14 additions & 4 deletions Detectors/TPC/dcs/src/DCSConfigSpec.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -189,18 +189,28 @@ void DCSConfigDevice::updateRunInfo(gsl::span<const char> configBuff)
LOGP(error, "{} has wrong format: {}, expected: {}, not writing RunInformation to CCDB", RunInfoFileName, line, runInfoConf);
return;
}
const auto tagString = data[2];
//
// retrieve ETag from FEEConfig to set up Redirect
const auto headers = mCCDBApi.retrieveHeaders(CDBTypeMap.at(CDBType::ConfigFEE), {}, std::stol(tagString));

std::map<std::string, std::string> md;
md[o2::base::NameConf::CCDBRunTag.data()] = data[0];
md["Tag"] = data[2];
md["RunType"] = data[3];
md[o2::ccdb::CcdbObjectInfo::AdjustableEOV] = "true";
char tempChar{static_cast<char>(std::stoi(md["Tag"]))};
if (headers.find("ETag") != headers.end()) {
auto etag = headers.at("ETag");
etag.erase(std::remove(etag.begin(), etag.end(), '"'), etag.end());
md["Redirect"] = fmt::format("/{}/{}/{}", CDBTypeMap.at(CDBType::ConfigFEE), tagString, etag);
} else {
LOGP(error, "No ETag found for Tag {}, not setting Redirect in RunInfo", tagString);
}

const long startValRCT = std::stol(data[1]);
const long endValRCT = startValRCT + 48l * 60l * 60l * 1000l;
if (!mDontWriteRunInfo) {
o2::ccdb::CcdbObjectInfo w(CDBTypeMap.at(CDBType::ConfigRunInfo), "", "", md, startValRCT, endValRCT);
mCCDBApi.storeAsBinaryFile(&tempChar, sizeof(tempChar), "tmp.dat", "char", CDBTypeMap.at(CDBType::ConfigRunInfo), md, startValRCT, endValRCT);
mCCDBApi.storeAsBinaryFile(nullptr, 0, "ignored", "", CDBTypeMap.at(CDBType::ConfigRunInfo), md, startValRCT, endValRCT);
if (!mCCDBApi.isSnapshotMode()) {
o2::ccdb::adjustOverriddenEOV(mCCDBApi, w);
}
Expand Down Expand Up @@ -255,7 +265,7 @@ void DCSConfigDevice::fillFEEPad(std::string_view configFileName, gsl::span<cons
nLines = cru_calib_helpers::fillCalPad<2>(calPad, configBuff);
mFEEPadDataReceived.set(3);
} else if (configFileName == "CMkValues") {
nLines = cru_calib_helpers::fillCalPad<6>(calPad, configBuff);
nLines = cru_calib_helpers::fillCalPad<0>(calPad, configBuff);
mFEEPadDataReceived.set(4);
}

Expand Down
12 changes: 8 additions & 4 deletions GPU/Workflow/src/GPUWorkflowTPC.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -281,11 +281,15 @@ void GPURecoWorkflowSpec::finaliseCCDBTPC(ConcreteDataMatcher& matcher, void* ob
mTPCDeadChannelMapCreator->getDeadChannelMapIDC().getSum<int32_t>(), mTPCDeadChannelMapCreator->getDeadChannelMap().getSum<int32_t>());
} else if (matcher == ConcreteDataMatcher(gDataOriginTPC, "TPCRUNINFO", 0)) {
copyCalibsToBuffer();
mTPCDeadChannelMapCreator->loadFEEConfigViaRunInfoTS(mCreationForCalib);
const auto* fee = static_cast<o2::tpc::FEEConfig*>(obj);
mTPCDeadChannelMapCreator->setDeadChannelMapFEEConfig(*fee);
mTPCDeadChannelMapCreator->finalizeDeadChannelMap();
mdEdxCalibContainerBufferNew.get()->setDeadChannelMap(mTPCDeadChannelMapCreator->getDeadChannelMap());
LOGP(info, "Updating dead channel map with the FEE info loaded via TPCRUNINFO for creation time {}: {} / {} dead pads from FEE info / total",
mCreationForCalib, mTPCDeadChannelMapCreator->getDeadChannelMapFEE().getSum<int32_t>(), mTPCDeadChannelMapCreator->getDeadChannelMap().getSum<int32_t>());
LOGP(info,
"Updating dead channel map with the FEE info (tag {}) loaded via TPCRUNINFO"
" for creation time {}: {} / {} dead pads from FEE info / total, with",
std::underlying_type_t<o2::tpc::FEEConfig::Tags>(fee->tag), mCreationForCalib,
mTPCDeadChannelMapCreator->getDeadChannelMapFEE().getSum<int32_t>(), mTPCDeadChannelMapCreator->getDeadChannelMap().getSum<int32_t>());
} else if (mTPCVDriftHelper->accountCCDBInputs(matcher, obj)) {
} else if (mCalibObjects.mFastTransformHelper->accountCCDBInputs(matcher, obj)) {
}
Expand Down Expand Up @@ -321,7 +325,7 @@ bool GPURecoWorkflowSpec::fetchCalibsCCDBTPC<GPUCalibObjectsConst>(ProcessingCon
}

if (mTPCDeadChannelMapCreator->useSource(tpc::SourcesDeadMap::FEEConfig)) {
pc.inputs().get<char*>("tpcruninfo");
pc.inputs().get<o2::tpc::FEEConfig*>("tpcruninfo");
}

if (dEdxCalibContainer->isCorrectionCCDB(o2::tpc::CalibsdEdx::CalResidualGainMap)) {
Expand Down

0 comments on commit ddcd019

Please sign in to comment.