From 71a5dd8374923cdc27cc271b1b2527bfac9783ca Mon Sep 17 00:00:00 2001 From: wiechula Date: Mon, 13 Jan 2025 12:34:28 +0100 Subject: [PATCH 1/2] Add line indicating selected time bin --- Detectors/TPC/monitor/src/SimpleEventDisplayGUI.cxx | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/Detectors/TPC/monitor/src/SimpleEventDisplayGUI.cxx b/Detectors/TPC/monitor/src/SimpleEventDisplayGUI.cxx index 20da28eefe364..9f5f826dfe7e1 100644 --- a/Detectors/TPC/monitor/src/SimpleEventDisplayGUI.cxx +++ b/Detectors/TPC/monitor/src/SimpleEventDisplayGUI.cxx @@ -774,6 +774,19 @@ void SimpleEventDisplayGUI::drawPadSignal(int event, int x, int y, TObject* o) if (mCheckShowClusters->IsDown()) { showClusters(roc, row); } + const auto padTimeValsName = fmt::format("PadTimeVals{}", type[type.Length() - 1]); + TCanvas* cPadTimeVals = (TCanvas*)gROOT->GetListOfCanvases()->FindObject(padTimeValsName.data()); + if (cPadTimeVals) { + h = (TH1D*)gROOT->FindObject(("h" + padTimeValsName).data()); + if (h) { + cPadTimeVals->cd(); + delete cPadTimeVals->GetListOfPrimitives()->FindObject("TLine"); + TLine l; + l.SetLineColor(kRed); + const auto timeBin = mSelTimeBin->GetNumberEntry()->GetIntNumber(); + l.DrawLine(timeBin + 0.5, h->GetYaxis()->GetXmin(), timeBin + 0.5, h->GetYaxis()->GetXmax()); + } + } update(Form("%s;%sFFT;PadTimeVals%s;SingleTB", type.Data(), type.Data(), rocType.Data())); } // printf("bin=%03d.%03d(%03d)[%05d], name=%s, ROC=%02d content=%.1f, ev: %d\n",row,pad,cpad,chn,h->GetName(), roc, h->GetBinContent(binx,biny), event); From ddcd0198bff2dabd830090173c1d875651544566 Mon Sep 17 00:00:00 2001 From: wiechula Date: Fri, 31 Jan 2025 15:43:52 +0100 Subject: [PATCH 2/2] Implement usage of CCDB Redirect --- Detectors/TPC/base/include/TPCBase/CDBTypes.h | 2 +- .../include/TPCBase/DeadChannelMapCreator.h | 3 ++- .../TPC/base/include/TPCBase/FEEConfig.h | 23 +++++++++++-------- Detectors/TPC/base/src/CDBInterface.cxx | 2 +- .../TPC/base/src/DeadChannelMapCreator.cxx | 18 +++++---------- Detectors/TPC/base/src/FEEConfig.cxx | 3 +++ .../SpacePoints/SpacePointsCalibParam.h | 2 +- .../include/SpacePoints/TrackResiduals.h | 2 +- Detectors/TPC/dcs/src/DCSConfigSpec.cxx | 18 +++++++++++---- GPU/Workflow/src/GPUWorkflowTPC.cxx | 12 ++++++---- 10 files changed, 50 insertions(+), 35 deletions(-) diff --git a/Detectors/TPC/base/include/TPCBase/CDBTypes.h b/Detectors/TPC/base/include/TPCBase/CDBTypes.h index 75278f2a76902..a3c52ecd0928b 100644 --- a/Detectors/TPC/base/include/TPCBase/CDBTypes.h +++ b/Detectors/TPC/base/include/TPCBase/CDBTypes.h @@ -110,7 +110,7 @@ const std::unordered_map 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"}, diff --git a/Detectors/TPC/base/include/TPCBase/DeadChannelMapCreator.h b/Detectors/TPC/base/include/TPCBase/DeadChannelMapCreator.h index dbdefb4ef0f37..9d4317380f4bc 100644 --- a/Detectors/TPC/base/include/TPCBase/DeadChannelMapCreator.h +++ b/Detectors/TPC/base/include/TPCBase/DeadChannelMapCreator.h @@ -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& getDeadChannelMapIDC() const { return mDeadChannelMapIDC; } const CalDet& getDeadChannelMapFEE() const { return mDeadChannelMapFEE; } diff --git a/Detectors/TPC/base/include/TPCBase/FEEConfig.h b/Detectors/TPC/base/include/TPCBase/FEEConfig.h index 2065970c42ef5..80962f72e6056 100644 --- a/Detectors/TPC/base/include/TPCBase/FEEConfig.h +++ b/Detectors/TPC/base/include/TPCBase/FEEConfig.h @@ -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 { diff --git a/Detectors/TPC/base/src/CDBInterface.cxx b/Detectors/TPC/base/src/CDBInterface.cxx index 357399f98fcf8..605413b205c2a 100644 --- a/Detectors/TPC/base/src/CDBInterface.cxx +++ b/Detectors/TPC/base/src/CDBInterface.cxx @@ -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; } diff --git a/Detectors/TPC/base/src/DeadChannelMapCreator.cxx b/Detectors/TPC/base/src/DeadChannelMapCreator.cxx index 2b16abd676d31..5fd9b59c85282 100644 --- a/Detectors/TPC/base/src/DeadChannelMapCreator.cxx +++ b/Detectors/TPC/base/src/DeadChannelMapCreator.cxx @@ -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); } //______________________________________________________________________________ @@ -59,13 +53,13 @@ void DeadChannelMapCreator::loadFEEConfigViaRunInfo(long timeStampOrRun) } //______________________________________________________________________________ -void DeadChannelMapCreator::loadFEEConfig(long tag, long createdNotAfter) +void DeadChannelMapCreator::loadFEEConfig(long timeStamp) { - std::map mm, meta; - const std::string createdNotAfterS = (createdNotAfter < 0) ? "" : std::to_string(createdNotAfter); - mFEEConfig.reset(mCCDBApi.retrieveFromTFileAny(CDBTypeMap.at(CDBType::ConfigFEE), mm, tag, &meta, "", createdNotAfterS)); + std::map meta; + mFEEConfig.reset(mCCDBApi.retrieveFromTFileAny(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")); diff --git a/Detectors/TPC/base/src/FEEConfig.cxx b/Detectors/TPC/base/src/FEEConfig.cxx index 8a4a45ecfa6a4..5a2420b93c2d8 100644 --- a/Detectors/TPC/base/src/FEEConfig.cxx +++ b/Detectors/TPC/base/src/FEEConfig.cxx @@ -57,6 +57,9 @@ const std::unordered_map 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::PadConfigNames{ diff --git a/Detectors/TPC/calibration/SpacePoints/include/SpacePoints/SpacePointsCalibParam.h b/Detectors/TPC/calibration/SpacePoints/include/SpacePoints/SpacePointsCalibParam.h index 94485642cc425..67226d108bae3 100644 --- a/Detectors/TPC/calibration/SpacePoints/include/SpacePoints/SpacePointsCalibParam.h +++ b/Detectors/TPC/calibration/SpacePoints/include/SpacePoints/SpacePointsCalibParam.h @@ -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 diff --git a/Detectors/TPC/calibration/SpacePoints/include/SpacePoints/TrackResiduals.h b/Detectors/TPC/calibration/SpacePoints/include/SpacePoints/TrackResiduals.h index 7d82a9e483215..e4d0a3a053728 100644 --- a/Detectors/TPC/calibration/SpacePoints/include/SpacePoints/TrackResiduals.h +++ b/Detectors/TPC/calibration/SpacePoints/include/SpacePoints/TrackResiduals.h @@ -100,7 +100,7 @@ class TrackResiduals LocalResid(short dyIn, short dzIn, short tgSlpIn, std::array 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 bvox{}; ///< voxel identifier: VoxZ, VoxF, VoxX ClassDefNV(LocalResid, 1); }; diff --git a/Detectors/TPC/dcs/src/DCSConfigSpec.cxx b/Detectors/TPC/dcs/src/DCSConfigSpec.cxx index 7f08ee9179c77..dc13d4ed83081 100644 --- a/Detectors/TPC/dcs/src/DCSConfigSpec.cxx +++ b/Detectors/TPC/dcs/src/DCSConfigSpec.cxx @@ -189,18 +189,28 @@ void DCSConfigDevice::updateRunInfo(gsl::span 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 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(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); } @@ -255,7 +265,7 @@ void DCSConfigDevice::fillFEEPad(std::string_view configFileName, gsl::span(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); } diff --git a/GPU/Workflow/src/GPUWorkflowTPC.cxx b/GPU/Workflow/src/GPUWorkflowTPC.cxx index f895587b8b020..319d084cbcc6a 100644 --- a/GPU/Workflow/src/GPUWorkflowTPC.cxx +++ b/GPU/Workflow/src/GPUWorkflowTPC.cxx @@ -281,11 +281,15 @@ void GPURecoWorkflowSpec::finaliseCCDBTPC(ConcreteDataMatcher& matcher, void* ob mTPCDeadChannelMapCreator->getDeadChannelMapIDC().getSum(), mTPCDeadChannelMapCreator->getDeadChannelMap().getSum()); } else if (matcher == ConcreteDataMatcher(gDataOriginTPC, "TPCRUNINFO", 0)) { copyCalibsToBuffer(); - mTPCDeadChannelMapCreator->loadFEEConfigViaRunInfoTS(mCreationForCalib); + const auto* fee = static_cast(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(), mTPCDeadChannelMapCreator->getDeadChannelMap().getSum()); + 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(fee->tag), mCreationForCalib, + mTPCDeadChannelMapCreator->getDeadChannelMapFEE().getSum(), mTPCDeadChannelMapCreator->getDeadChannelMap().getSum()); } else if (mTPCVDriftHelper->accountCCDBInputs(matcher, obj)) { } else if (mCalibObjects.mFastTransformHelper->accountCCDBInputs(matcher, obj)) { } @@ -321,7 +325,7 @@ bool GPURecoWorkflowSpec::fetchCalibsCCDBTPC(ProcessingCon } if (mTPCDeadChannelMapCreator->useSource(tpc::SourcesDeadMap::FEEConfig)) { - pc.inputs().get("tpcruninfo"); + pc.inputs().get("tpcruninfo"); } if (dEdxCalibContainer->isCorrectionCCDB(o2::tpc::CalibsdEdx::CalResidualGainMap)) {