From 4df2b534103d6f7c94f1b33aad9d8820ea92ea16 Mon Sep 17 00:00:00 2001 From: Alla Maevskaya Date: Sat, 8 May 2021 11:35:13 +0300 Subject: [PATCH 1/3] channel offsets in reconstruction --- .../FIT/FT0/reconstruction/CMakeLists.txt | 5 +++- .../FT0Reconstruction/CollisionTimeRecoTask.h | 24 +++++++++++++++-- .../src/CollisionTimeRecoTask.cxx | 9 ++++--- .../FITCalibration/FITCalibrationApi.h | 26 ++++++++++++------- .../include/FITCalibration/FITCalibrator.h | 4 +-- 5 files changed, 51 insertions(+), 17 deletions(-) diff --git a/Detectors/FIT/FT0/reconstruction/CMakeLists.txt b/Detectors/FIT/FT0/reconstruction/CMakeLists.txt index 568ccbb3587a0..60c1c6e9b8328 100644 --- a/Detectors/FIT/FT0/reconstruction/CMakeLists.txt +++ b/Detectors/FIT/FT0/reconstruction/CMakeLists.txt @@ -17,6 +17,9 @@ o2_add_library(FT0Reconstruction PUBLIC_LINK_LIBRARIES O2::SimulationDataFormat O2::Framework O2::FT0Base O2::FT0Simulation + O2::FT0Calibration + O2::FITCalibration + O2::DetectorsCalibration O2::DataFormatsFT0 O2::DetectorsRaw O2::CommonDataFormat @@ -42,4 +45,4 @@ o2_add_executable( test-raw2digit COMPONENT_NAME ft0 SOURCES src/test-raw2digit.cxx - PUBLIC_LINK_LIBRARIES O2::FT0Reconstruction) \ No newline at end of file + PUBLIC_LINK_LIBRARIES O2::FT0Reconstruction) diff --git a/Detectors/FIT/FT0/reconstruction/include/FT0Reconstruction/CollisionTimeRecoTask.h b/Detectors/FIT/FT0/reconstruction/include/FT0Reconstruction/CollisionTimeRecoTask.h index bfa7a3a704566..9d80bce8a0787 100644 --- a/Detectors/FIT/FT0/reconstruction/include/FT0Reconstruction/CollisionTimeRecoTask.h +++ b/Detectors/FIT/FT0/reconstruction/include/FT0Reconstruction/CollisionTimeRecoTask.h @@ -19,6 +19,9 @@ #include "DataFormatsFT0/RecPoints.h" #include "CommonDataFormat/InteractionRecord.h" #include "CommonDataFormat/TimeStamp.h" +#include "FT0Calibration/FT0ChannelTimeCalibrationObject.h" +#include "FITCalibration/FITCalibrationApi.h" +#include "CCDB/BasicCCDBManager.h" #include #include @@ -28,6 +31,8 @@ namespace ft0 { class CollisionTimeRecoTask { + using offsetCalib = o2::ft0::FT0ChannelTimeCalibrationObject; + using CalibApi = o2::fit::FITCalibrationApi; public: enum : int { TimeMean, @@ -40,10 +45,25 @@ class CollisionTimeRecoTask gsl::span inChData, gsl::span outChData); void FinishTask(); - // DigitizationParameters const &mParameters; - // o2::ft0::Geometry mGeometry; + o2::ft0::FT0ChannelTimeCalibrationObject calibrateTimeOffset(uint32_t orbit, uint16_t bc) + { + auto& mgr = o2::ccdb::BasicCCDBManager::instance(); + mgr.setURL("http://ccdb-test.cern.ch:8080"); + // getProcessingTimestamp() + // double calib = mCalibApi->getTimeCalibration(dig->getChannel(), dig->getTOT() * Geo::TOTBIN_NS); + auto timeStamp = o2::InteractionRecord::bc2ns(bc, orbit); + // mgr.setTimestamp(timeStamp); + auto caliboffsets = mgr.get("FT0/Calibration/ChannelTimeOffset"); + return *caliboffsets; + } + void setCalibApi(CalibApi* calibApi) + { + mCalibApi = calibApi; + } private: + CalibApi* mCalibApi = nullptr; //! calib api to handle the FIT calibration + ClassDefNV(CollisionTimeRecoTask, 1); }; } // namespace ft0 diff --git a/Detectors/FIT/FT0/reconstruction/src/CollisionTimeRecoTask.cxx b/Detectors/FIT/FT0/reconstruction/src/CollisionTimeRecoTask.cxx index 57a79c1e18412..95200b2ed5236 100644 --- a/Detectors/FIT/FT0/reconstruction/src/CollisionTimeRecoTask.cxx +++ b/Detectors/FIT/FT0/reconstruction/src/CollisionTimeRecoTask.cxx @@ -41,15 +41,18 @@ o2::ft0::RecPoints CollisionTimeRecoTask::process(o2::ft0::Digit const& bcd, Float_t sideAtime = 0, sideCtime = 0; - auto timeStamp = o2::InteractionRecord::bc2ns(bcd.mIntRecord.bc, bcd.mIntRecord.orbit); + // auto timeStamp = o2::InteractionRecord::bc2ns(bcd.mIntRecord.bc, bcd.mIntRecord.orbit); - LOG(DEBUG) << " event time " << timeStamp << " orbit " << bcd.mIntRecord.orbit << " bc " << bcd.mIntRecord.bc; + // LOG(DEBUG) << " event time " << timeStamp << " orbit " << bcd.mIntRecord.orbit << " bc " << bcd.mIntRecord.bc; int nch = inChData.size(); const auto parInv = DigitizationParameters::Instance().mMV_2_NchannelsInverse; + + o2::ft0::FT0ChannelTimeCalibrationObject timeOffsets = calibrateTimeOffset(bcd.mIntRecord.orbit, bcd.mIntRecord.bc); for (int ich = 0; ich < nch; ich++) { + int offsetChannel = timeOffsets.mTimeOffsets.at(inChData[ich].ChId); outChData[ich] = o2::ft0::ChannelDataFloat{inChData[ich].ChId, - inChData[ich].CFDTime * Geometry::ChannelWidth, + (inChData[ich].CFDTime - offsetChannel) * Geometry::ChannelWidth, (double)inChData[ich].QTCAmpl * parInv, inChData[ich].ChainQTC}; diff --git a/Detectors/FIT/common/calibration/include/FITCalibration/FITCalibrationApi.h b/Detectors/FIT/common/calibration/include/FITCalibration/FITCalibrationApi.h index add5fc0cb2e9a..bdd930cc821eb 100644 --- a/Detectors/FIT/common/calibration/include/FITCalibration/FITCalibrationApi.h +++ b/Detectors/FIT/common/calibration/include/FITCalibration/FITCalibrationApi.h @@ -33,8 +33,16 @@ class FITCalibrationApi FITCalibrationApi(FITCalibrationApi&&) = delete; static void init(); - static void setProcessingTimestamp(unsigned long tf) { mProcessingTimestamp = tf; } - [[nodiscard]] static unsigned long getProcessingTimestamp() { return mProcessingTimestamp; } + static void setProcessingTimestamp(unsigned long tf) + { + LOG(INFO) << "@@@ setProcessingTimestamp " << tf; + mProcessingTimestamp = tf; + } + [[nodiscard]] static unsigned long getProcessingTimestamp() + { + LOG(INFO) << " @@@ getProcessingTimestamp " << mProcessingTimestamp; + return mProcessingTimestamp; + } template [[nodiscard]] static const char* getObjectPath(); @@ -56,7 +64,7 @@ class FITCalibrationApi [[nodiscard]] static CalibObjWithInfoType doSerializationAndPrepareObjectInfo(const CalibrationObjectType& calibrationObject); }; -void FITCalibrationApi::init() +inline void FITCalibrationApi::init() { //caching in basicCCDBManager enabled by default o2::ccdb::BasicCCDBManager::instance().setURL(DEFAULT_CCDB_URL); @@ -118,13 +126,13 @@ const char* FITCalibrationApi::getObjectPath() /////////////////////////////////////////////////////////////////////////////////////////////////////////////// template <> -const char* FITCalibrationApi::getObjectPath() +inline const char* FITCalibrationApi::getObjectPath() { return "FT0/Calibration/ChannelTimeOffset"; } template <> -std::vector FITCalibrationApi::prepareCalibrationObjectToSend(const o2::ft0::FT0ChannelTimeCalibrationObject& calibrationObject) +inline std::vector FITCalibrationApi::prepareCalibrationObjectToSend(const o2::ft0::FT0ChannelTimeCalibrationObject& calibrationObject) { std::vector result; result.emplace_back(doSerializationAndPrepareObjectInfo(calibrationObject)); @@ -135,25 +143,25 @@ std::vector FITCalibrationApi::prepareC // DUMMY STUFF DELETE IT WHEN EXAMPLE NOT NEEDED ANYMORE template <> -const char* FITCalibrationApi::getObjectPath() +inline const char* FITCalibrationApi::getObjectPath() { return "FT0/Calibration/DummyTime"; } template <> -const char* FITCalibrationApi::getObjectPath() +inline const char* FITCalibrationApi::getObjectPath() { return "FT0/Calibration/DummyCharge"; } template <> -const char* FITCalibrationApi::getObjectPath() +inline const char* FITCalibrationApi::getObjectPath() { return "FT0/Calibration/DummyNeeded"; } template <> -std::vector FITCalibrationApi::prepareCalibrationObjectToSend(const o2::ft0::FT0DummyCalibrationObject& calibrationObject) +inline std::vector FITCalibrationApi::prepareCalibrationObjectToSend(const o2::ft0::FT0DummyCalibrationObject& calibrationObject) { std::vector result; result.emplace_back(doSerializationAndPrepareObjectInfo(calibrationObject.mChargeCalibrationObject)); diff --git a/Detectors/FIT/common/calibration/include/FITCalibration/FITCalibrator.h b/Detectors/FIT/common/calibration/include/FITCalibration/FITCalibrator.h index ebf8dacf58b5d..f4130b2ac4dff 100644 --- a/Detectors/FIT/common/calibration/include/FITCalibration/FITCalibrator.h +++ b/Detectors/FIT/common/calibration/include/FITCalibration/FITCalibrator.h @@ -33,7 +33,7 @@ class FITCalibrator final : public o2::calibration::TimeSlotCalibration Date: Tue, 11 May 2021 11:49:46 +0300 Subject: [PATCH 2/3] move set-up CCDB to workflow --- .../FT0Reconstruction/CollisionTimeRecoTask.h | 25 +++---------------- .../src/CollisionTimeRecoTask.cxx | 4 +-- .../include/FT0Workflow/ReconstructionSpec.h | 3 ++- .../FT0/workflow/src/ReconstructionSpec.cxx | 6 ++++- 4 files changed, 12 insertions(+), 26 deletions(-) diff --git a/Detectors/FIT/FT0/reconstruction/include/FT0Reconstruction/CollisionTimeRecoTask.h b/Detectors/FIT/FT0/reconstruction/include/FT0Reconstruction/CollisionTimeRecoTask.h index 9d80bce8a0787..2518c1aeaf4d8 100644 --- a/Detectors/FIT/FT0/reconstruction/include/FT0Reconstruction/CollisionTimeRecoTask.h +++ b/Detectors/FIT/FT0/reconstruction/include/FT0Reconstruction/CollisionTimeRecoTask.h @@ -20,8 +20,6 @@ #include "CommonDataFormat/InteractionRecord.h" #include "CommonDataFormat/TimeStamp.h" #include "FT0Calibration/FT0ChannelTimeCalibrationObject.h" -#include "FITCalibration/FITCalibrationApi.h" -#include "CCDB/BasicCCDBManager.h" #include #include @@ -32,7 +30,6 @@ namespace ft0 class CollisionTimeRecoTask { using offsetCalib = o2::ft0::FT0ChannelTimeCalibrationObject; - using CalibApi = o2::fit::FITCalibrationApi; public: enum : int { TimeMean, @@ -45,26 +42,12 @@ class CollisionTimeRecoTask gsl::span inChData, gsl::span outChData); void FinishTask(); - o2::ft0::FT0ChannelTimeCalibrationObject calibrateTimeOffset(uint32_t orbit, uint16_t bc) - { - auto& mgr = o2::ccdb::BasicCCDBManager::instance(); - mgr.setURL("http://ccdb-test.cern.ch:8080"); - // getProcessingTimestamp() - // double calib = mCalibApi->getTimeCalibration(dig->getChannel(), dig->getTOT() * Geo::TOTBIN_NS); - auto timeStamp = o2::InteractionRecord::bc2ns(bc, orbit); - // mgr.setTimestamp(timeStamp); - auto caliboffsets = mgr.get("FT0/Calibration/ChannelTimeOffset"); - return *caliboffsets; - } - void setCalibApi(CalibApi* calibApi) - { - mCalibApi = calibApi; - } + void SetChannelOffset( o2::ft0::FT0ChannelTimeCalibrationObject *caliboffsets) { mCalibOffset = caliboffsets;}; - private: - CalibApi* mCalibApi = nullptr; //! calib api to handle the FIT calibration + private: + o2::ft0::FT0ChannelTimeCalibrationObject *mCalibOffset; - ClassDefNV(CollisionTimeRecoTask, 1); + ClassDefNV(CollisionTimeRecoTask, 2); }; } // namespace ft0 } // namespace o2 diff --git a/Detectors/FIT/FT0/reconstruction/src/CollisionTimeRecoTask.cxx b/Detectors/FIT/FT0/reconstruction/src/CollisionTimeRecoTask.cxx index 95200b2ed5236..4c76452eb025d 100644 --- a/Detectors/FIT/FT0/reconstruction/src/CollisionTimeRecoTask.cxx +++ b/Detectors/FIT/FT0/reconstruction/src/CollisionTimeRecoTask.cxx @@ -47,10 +47,8 @@ o2::ft0::RecPoints CollisionTimeRecoTask::process(o2::ft0::Digit const& bcd, int nch = inChData.size(); const auto parInv = DigitizationParameters::Instance().mMV_2_NchannelsInverse; - - o2::ft0::FT0ChannelTimeCalibrationObject timeOffsets = calibrateTimeOffset(bcd.mIntRecord.orbit, bcd.mIntRecord.bc); for (int ich = 0; ich < nch; ich++) { - int offsetChannel = timeOffsets.mTimeOffsets.at(inChData[ich].ChId); + int offsetChannel = mCalibOffset->mTimeOffsets.at(inChData[ich].ChId); outChData[ich] = o2::ft0::ChannelDataFloat{inChData[ich].ChId, (inChData[ich].CFDTime - offsetChannel) * Geometry::ChannelWidth, (double)inChData[ich].QTCAmpl * parInv, diff --git a/Detectors/FIT/FT0/workflow/include/FT0Workflow/ReconstructionSpec.h b/Detectors/FIT/FT0/workflow/include/FT0Workflow/ReconstructionSpec.h index fd4af7581eae3..c52765f08f200 100644 --- a/Detectors/FIT/FT0/workflow/include/FT0Workflow/ReconstructionSpec.h +++ b/Detectors/FIT/FT0/workflow/include/FT0Workflow/ReconstructionSpec.h @@ -17,6 +17,7 @@ #include "Framework/Task.h" #include "FT0Reconstruction/CollisionTimeRecoTask.h" #include "DataFormatsFT0/RecPoints.h" +#include "CCDB/BasicCCDBManager.h" #include "TStopwatch.h" using namespace o2::framework; @@ -42,7 +43,7 @@ class ReconstructionDPL : public Task o2::ft0::CollisionTimeRecoTask mReco; o2::header::DataOrigin mOrigin = o2::header::gDataOriginFT0; TStopwatch mTimer; -}; + }; /// create a processor spec framework::DataProcessorSpec getReconstructionSpec(bool useMC = true); diff --git a/Detectors/FIT/FT0/workflow/src/ReconstructionSpec.cxx b/Detectors/FIT/FT0/workflow/src/ReconstructionSpec.cxx index b659938e87585..875b006485da3 100644 --- a/Detectors/FIT/FT0/workflow/src/ReconstructionSpec.cxx +++ b/Detectors/FIT/FT0/workflow/src/ReconstructionSpec.cxx @@ -18,6 +18,7 @@ #include "DataFormatsFT0/Digit.h" #include "DataFormatsFT0/ChannelData.h" #include "DataFormatsFT0/MCLabel.h" +#include "FT0Calibration/FT0ChannelTimeCalibrationObject.h" using namespace o2::framework; @@ -35,10 +36,11 @@ void ReconstructionDPL::init(InitContext& ic) void ReconstructionDPL::run(ProcessingContext& pc) { + auto& mCCDBManager = o2::ccdb::BasicCCDBManager::instance(); + mCCDBManager.setURL("http://ccdb-test.cern.ch:8080"); mTimer.Start(false); mRecPoints.clear(); auto digits = pc.inputs().get>("digits"); - //auto digits = pc.inputs().get>("digits"); auto digch = pc.inputs().get>("digch"); // RS: if we need to process MC truth, uncomment lines below //std::unique_ptr> labels; @@ -48,6 +50,8 @@ void ReconstructionDPL::run(ProcessingContext& pc) // lblPtr = labels.get(); LOG(INFO) << "Ignoring MC info"; } + auto caliboffsets = mCCDBManager.get("FT0/Calibration/ChannelTimeOffset"); + mReco.SetChannelOffset(caliboffsets); int nDig = digits.size(); LOG(DEBUG) << " nDig " << nDig; mRecPoints.reserve(nDig); From 33ce4e751a02afdb524851a678ea63662983e6b8 Mon Sep 17 00:00:00 2001 From: Alla Maevskaya Date: Tue, 11 May 2021 11:58:29 +0300 Subject: [PATCH 3/3] move set-up CCDB to workflow --- .../include/FT0Reconstruction/CollisionTimeRecoTask.h | 6 +++--- .../FIT/FT0/reconstruction/src/CollisionTimeRecoTask.cxx | 2 +- .../FT0/workflow/include/FT0Workflow/ReconstructionSpec.h | 2 +- Detectors/FIT/FT0/workflow/src/ReconstructionSpec.cxx | 1 + .../calibration/include/FITCalibration/FITCalibrator.h | 4 ++-- 5 files changed, 8 insertions(+), 7 deletions(-) diff --git a/Detectors/FIT/FT0/reconstruction/include/FT0Reconstruction/CollisionTimeRecoTask.h b/Detectors/FIT/FT0/reconstruction/include/FT0Reconstruction/CollisionTimeRecoTask.h index 2518c1aeaf4d8..38f34237bc93e 100644 --- a/Detectors/FIT/FT0/reconstruction/include/FT0Reconstruction/CollisionTimeRecoTask.h +++ b/Detectors/FIT/FT0/reconstruction/include/FT0Reconstruction/CollisionTimeRecoTask.h @@ -42,10 +42,10 @@ class CollisionTimeRecoTask gsl::span inChData, gsl::span outChData); void FinishTask(); - void SetChannelOffset( o2::ft0::FT0ChannelTimeCalibrationObject *caliboffsets) { mCalibOffset = caliboffsets;}; + void SetChannelOffset(o2::ft0::FT0ChannelTimeCalibrationObject* caliboffsets) { mCalibOffset = caliboffsets; }; - private: - o2::ft0::FT0ChannelTimeCalibrationObject *mCalibOffset; + private: + o2::ft0::FT0ChannelTimeCalibrationObject* mCalibOffset; ClassDefNV(CollisionTimeRecoTask, 2); }; diff --git a/Detectors/FIT/FT0/reconstruction/src/CollisionTimeRecoTask.cxx b/Detectors/FIT/FT0/reconstruction/src/CollisionTimeRecoTask.cxx index 4c76452eb025d..b75499cf3f60f 100644 --- a/Detectors/FIT/FT0/reconstruction/src/CollisionTimeRecoTask.cxx +++ b/Detectors/FIT/FT0/reconstruction/src/CollisionTimeRecoTask.cxx @@ -48,7 +48,7 @@ o2::ft0::RecPoints CollisionTimeRecoTask::process(o2::ft0::Digit const& bcd, int nch = inChData.size(); const auto parInv = DigitizationParameters::Instance().mMV_2_NchannelsInverse; for (int ich = 0; ich < nch; ich++) { - int offsetChannel = mCalibOffset->mTimeOffsets.at(inChData[ich].ChId); + int offsetChannel = mCalibOffset->mTimeOffsets[inChData[ich].ChId]; outChData[ich] = o2::ft0::ChannelDataFloat{inChData[ich].ChId, (inChData[ich].CFDTime - offsetChannel) * Geometry::ChannelWidth, (double)inChData[ich].QTCAmpl * parInv, diff --git a/Detectors/FIT/FT0/workflow/include/FT0Workflow/ReconstructionSpec.h b/Detectors/FIT/FT0/workflow/include/FT0Workflow/ReconstructionSpec.h index c52765f08f200..78ee71cf4b42e 100644 --- a/Detectors/FIT/FT0/workflow/include/FT0Workflow/ReconstructionSpec.h +++ b/Detectors/FIT/FT0/workflow/include/FT0Workflow/ReconstructionSpec.h @@ -43,7 +43,7 @@ class ReconstructionDPL : public Task o2::ft0::CollisionTimeRecoTask mReco; o2::header::DataOrigin mOrigin = o2::header::gDataOriginFT0; TStopwatch mTimer; - }; +}; /// create a processor spec framework::DataProcessorSpec getReconstructionSpec(bool useMC = true); diff --git a/Detectors/FIT/FT0/workflow/src/ReconstructionSpec.cxx b/Detectors/FIT/FT0/workflow/src/ReconstructionSpec.cxx index 875b006485da3..b5bd7445157e4 100644 --- a/Detectors/FIT/FT0/workflow/src/ReconstructionSpec.cxx +++ b/Detectors/FIT/FT0/workflow/src/ReconstructionSpec.cxx @@ -38,6 +38,7 @@ void ReconstructionDPL::run(ProcessingContext& pc) { auto& mCCDBManager = o2::ccdb::BasicCCDBManager::instance(); mCCDBManager.setURL("http://ccdb-test.cern.ch:8080"); + LOG(INFO) << " set-up CCDB"; mTimer.Start(false); mRecPoints.clear(); auto digits = pc.inputs().get>("digits"); diff --git a/Detectors/FIT/common/calibration/include/FITCalibration/FITCalibrator.h b/Detectors/FIT/common/calibration/include/FITCalibration/FITCalibrator.h index f4130b2ac4dff..5ba500bba5152 100644 --- a/Detectors/FIT/common/calibration/include/FITCalibration/FITCalibrator.h +++ b/Detectors/FIT/common/calibration/include/FITCalibration/FITCalibrator.h @@ -33,7 +33,7 @@ class FITCalibrator final : public o2::calibration::TimeSlotCalibration