From 42545e137cd1a8a16bd351cdb65de18c63b91c47 Mon Sep 17 00:00:00 2001 From: lietava Date: Sun, 5 Jan 2025 12:46:55 +0100 Subject: [PATCH 1/3] irframes --- .../CTP/workflowIO/src/DigitReaderSpec.cxx | 76 ++++++++++++++++--- 1 file changed, 65 insertions(+), 11 deletions(-) diff --git a/Detectors/CTP/workflowIO/src/DigitReaderSpec.cxx b/Detectors/CTP/workflowIO/src/DigitReaderSpec.cxx index ecf1c2e19b660..4dff821065e0f 100644 --- a/Detectors/CTP/workflowIO/src/DigitReaderSpec.cxx +++ b/Detectors/CTP/workflowIO/src/DigitReaderSpec.cxx @@ -17,7 +17,10 @@ #include "DataFormatsCTP/LumiInfo.h" #include "Headers/DataHeader.h" #include "DetectorsCommonDataFormats/DetID.h" +#include "SimulationDataFormat/MCCompLabel.h" +#include "SimulationDataFormat/ConstMCTruthContainer.h" #include "CommonUtils/NameConf.h" +#include "CommonUtils/IRFrameSelector.h" #include "Framework/DataProcessorSpec.h" #include "Framework/Task.h" #include "Framework/ControlService.h" @@ -50,6 +53,7 @@ class DigitReader : public Task std::unique_ptr mTree; bool mUseMC = false; // use MC truth + bool mUseIRFrames = false; // selected IRFrames mode std::string mDigTreeName = "o2sim"; std::string mDigitBranchName = "CTPDigits"; std::string mLumiBranchName = "CTPLumi"; @@ -58,7 +62,7 @@ class DigitReader : public Task DigitReader::DigitReader(bool useMC) { if (useMC) { - LOG(info) << "CTP does not support MC truth at the moment"; + LOG(info) << "CTP : truth = data as CTP inputs are already digital"; } } @@ -66,21 +70,71 @@ void DigitReader::init(InitContext& ic) { auto filename = o2::utils::Str::concat_string(o2::utils::Str::rectifyDirectory(ic.options().get("input-dir")), ic.options().get("ctp-digit-infile")); + LOG(info) << "init: " << ic.options().hasOption("ignore-irframes") << " " << ic.options().get("ignore-irframes"); + if (ic.options().hasOption("ignore-irframes") && !ic.options().get("ignore-irframes")) { + mUseIRFrames = true; + } connectTree(filename); } void DigitReader::run(ProcessingContext& pc) { - auto ent = mTree->GetReadEntry() + 1; - assert(ent < mTree->GetEntries()); // this should not happen - - mTree->GetEntry(ent); - LOG(info) << "DigitReader pushes " << mDigits.size() << " digits at entry " << ent; - pc.outputs().snapshot(Output{"CTP", "DIGITS", 0}, mDigits); - pc.outputs().snapshot(Output{"CTP", "LUMI", 0}, mLumi); - if (mTree->GetReadEntry() + 1 >= mTree->GetEntries()) { - pc.services().get().endOfStream(); - pc.services().get().readyToQuit(QuitRequest::Me); + gsl::span irFrames{}; + //LOG(info) << "Using IRs:" << mUseIRFrames; + if (mUseIRFrames) { + irFrames = pc.inputs().get>("driverInfo"); + } + auto ent = mTree->GetReadEntry(); + if(!mUseIRFrames) { + ent++; + assert(ent < mTree->GetEntries()); // this should not happen + mTree->GetEntry(ent); + LOG(info) << "DigitReader pushes " << mDigits.size() << " digits at entry " << ent; + pc.outputs().snapshot(Output{"CTP", "DIGITS", 0}, mDigits); + pc.outputs().snapshot(Output{"CTP", "LUMI", 0}, mLumi); + if (mTree->GetReadEntry() + 1 >= mTree->GetEntries()) { + pc.services().get().endOfStream(); + pc.services().get().readyToQuit(QuitRequest::Me); + } + } else { + std::vector digitSel; + if (irFrames.size()) { // we assume the IRFrames are in the increasing order + if (ent < 0) { + ent++; + } + o2::utils::IRFrameSelector irfSel; + long biasInBC = 0; // depends if digits are already aligned + irfSel.setSelectedIRFrames(irFrames, 0, 0, -biasInBC, true); + const auto irMin = irfSel.getIRFrames().front().getMin(); // use processed IRframes for rough comparisons (possible shift!) + const auto irMax = irfSel.getIRFrames().back().getMax(); + LOGP(info, "Selecting IRFrame {}-{}", irMin.asString(), irMax.asString()); + while (ent < mTree->GetEntries()) { + if( ent > mTree->GetReadEntry()){ + mTree->GetEntry(ent); + } + if( mDigits.front().intRecord <= irMax && mDigits.back().intRecord >= irMin) { // THere is overlap + for(int i = 0; i < (int)mDigits.size(); i++) { + const auto& dig = mDigits[i]; + //if(irfSel.check(dig.intRecord)) { // adding selected digit + if(dig.intRecord >= irMin && dig.intRecord <= irMax) { + digitSel.push_back(dig); + LOG(info) << "adding:" << dig.intRecord << " ent:" << ent; + } + } + } + if (mDigits.back().intRecord < irMax) { // need to check the next entry + ent++; + continue; + } + break; // push collected data + } + } + pc.outputs().snapshot(Output{"CTP", "DIGITS", 0}, digitSel); + pc.outputs().snapshot(Output{"CTP", "LUMI", 0}, mLumi); // add full lumi for this TF + if (!irFrames.size() || irFrames.back().isLast()) { + pc.services().get().endOfStream(); + pc.services().get().readyToQuit(QuitRequest::Me); + } } } From 919541f7be05e88107d40e0fa1fd1343c8034a10 Mon Sep 17 00:00:00 2001 From: lietava Date: Sun, 5 Jan 2025 12:47:57 +0100 Subject: [PATCH 2/3] clang --- .../CTP/workflowIO/src/DigitReaderSpec.cxx | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/Detectors/CTP/workflowIO/src/DigitReaderSpec.cxx b/Detectors/CTP/workflowIO/src/DigitReaderSpec.cxx index 4dff821065e0f..c9d5c3a2e9299 100644 --- a/Detectors/CTP/workflowIO/src/DigitReaderSpec.cxx +++ b/Detectors/CTP/workflowIO/src/DigitReaderSpec.cxx @@ -80,12 +80,12 @@ void DigitReader::init(InitContext& ic) void DigitReader::run(ProcessingContext& pc) { gsl::span irFrames{}; - //LOG(info) << "Using IRs:" << mUseIRFrames; + // LOG(info) << "Using IRs:" << mUseIRFrames; if (mUseIRFrames) { irFrames = pc.inputs().get>("driverInfo"); } auto ent = mTree->GetReadEntry(); - if(!mUseIRFrames) { + if (!mUseIRFrames) { ent++; assert(ent < mTree->GetEntries()); // this should not happen mTree->GetEntry(ent); @@ -109,14 +109,14 @@ void DigitReader::run(ProcessingContext& pc) const auto irMax = irfSel.getIRFrames().back().getMax(); LOGP(info, "Selecting IRFrame {}-{}", irMin.asString(), irMax.asString()); while (ent < mTree->GetEntries()) { - if( ent > mTree->GetReadEntry()){ + if (ent > mTree->GetReadEntry()) { mTree->GetEntry(ent); } - if( mDigits.front().intRecord <= irMax && mDigits.back().intRecord >= irMin) { // THere is overlap - for(int i = 0; i < (int)mDigits.size(); i++) { + if (mDigits.front().intRecord <= irMax && mDigits.back().intRecord >= irMin) { // THere is overlap + for (int i = 0; i < (int)mDigits.size(); i++) { const auto& dig = mDigits[i]; - //if(irfSel.check(dig.intRecord)) { // adding selected digit - if(dig.intRecord >= irMin && dig.intRecord <= irMax) { + // if(irfSel.check(dig.intRecord)) { // adding selected digit + if (dig.intRecord >= irMin && dig.intRecord <= irMax) { digitSel.push_back(dig); LOG(info) << "adding:" << dig.intRecord << " ent:" << ent; } @@ -126,11 +126,11 @@ void DigitReader::run(ProcessingContext& pc) ent++; continue; } - break; // push collected data + break; // push collected data } } pc.outputs().snapshot(Output{"CTP", "DIGITS", 0}, digitSel); - pc.outputs().snapshot(Output{"CTP", "LUMI", 0}, mLumi); // add full lumi for this TF + pc.outputs().snapshot(Output{"CTP", "LUMI", 0}, mLumi); // add full lumi for this TF if (!irFrames.size() || irFrames.back().isLast()) { pc.services().get().endOfStream(); pc.services().get().readyToQuit(QuitRequest::Me); From e202908a7327fca6721a18b546204e7a86a3e092 Mon Sep 17 00:00:00 2001 From: lietava Date: Mon, 6 Jan 2025 17:12:21 +0100 Subject: [PATCH 3/3] fixes --- Detectors/CTP/workflowIO/src/DigitReaderSpec.cxx | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/Detectors/CTP/workflowIO/src/DigitReaderSpec.cxx b/Detectors/CTP/workflowIO/src/DigitReaderSpec.cxx index c9d5c3a2e9299..81e6f53f42dcc 100644 --- a/Detectors/CTP/workflowIO/src/DigitReaderSpec.cxx +++ b/Detectors/CTP/workflowIO/src/DigitReaderSpec.cxx @@ -70,7 +70,6 @@ void DigitReader::init(InitContext& ic) { auto filename = o2::utils::Str::concat_string(o2::utils::Str::rectifyDirectory(ic.options().get("input-dir")), ic.options().get("ctp-digit-infile")); - LOG(info) << "init: " << ic.options().hasOption("ignore-irframes") << " " << ic.options().get("ignore-irframes"); if (ic.options().hasOption("ignore-irframes") && !ic.options().get("ignore-irframes")) { mUseIRFrames = true; } @@ -103,8 +102,8 @@ void DigitReader::run(ProcessingContext& pc) ent++; } o2::utils::IRFrameSelector irfSel; - long biasInBC = 0; // depends if digits are already aligned - irfSel.setSelectedIRFrames(irFrames, 0, 0, -biasInBC, true); + // MC digits are already aligned + irfSel.setSelectedIRFrames(irFrames, 0, 0, 0, true); const auto irMin = irfSel.getIRFrames().front().getMin(); // use processed IRframes for rough comparisons (possible shift!) const auto irMax = irfSel.getIRFrames().back().getMax(); LOGP(info, "Selecting IRFrame {}-{}", irMin.asString(), irMax.asString());