From 54920560726454c25fa098618ac0cad77ef28b02 Mon Sep 17 00:00:00 2001 From: maciacco Date: Fri, 16 Oct 2026 23:36:35 +0200 Subject: [PATCH 1/3] update readout: 4 tdcs + pixel masking --- .../simulation/include/IOTOFSimulation/Chip.h | 8 +++-- .../IOTOFSimulation/DPLDigitizerParam.h | 3 +- .../ALICE3/IOTOF/simulation/src/Digitizer.cxx | 36 ++++++++++++++----- 3 files changed, 35 insertions(+), 12 deletions(-) diff --git a/Detectors/Upgrades/ALICE3/IOTOF/simulation/include/IOTOFSimulation/Chip.h b/Detectors/Upgrades/ALICE3/IOTOF/simulation/include/IOTOFSimulation/Chip.h index 1849907d6e071..a692fa2a5b8bc 100644 --- a/Detectors/Upgrades/ALICE3/IOTOF/simulation/include/IOTOFSimulation/Chip.h +++ b/Detectors/Upgrades/ALICE3/IOTOF/simulation/include/IOTOFSimulation/Chip.h @@ -78,7 +78,10 @@ class Chip /// Resize the vector of tdc states void resizeTDCStates(int const size) { mTDCStates.resize(size); } - std::vector>& getTDCStates() { return mTDCStates; } + std::vector>& getTDCStates() { return mTDCStates; } + + void resizeMaskStates(int const size) { mMaskStates.resize(size); } + std::vector& getMaskStates() { return mMaskStates; } void addDigit(UShort_t row, UShort_t col, Int_t charge, double time, ULong64_t bc, Int_t tdc, o2::MCCompLabel label); @@ -86,7 +89,8 @@ class Chip Int_t mChipIndex = -1; ///< Chip ID bool mDisabled = false; ///< Flag to indicate if the chip is disabled (e.g. due to dead channels) std::map mDigits; ///< Map of fired digits, possibly in multiple frames - std::vector> mTDCStates; ///< Vector of the last times the TDC pairs went busy + std::vector> mTDCStates; ///< Vector of the last times the TDC pairs went busy + std::vector mMaskStates; ///< Vector of the last time the RO column was masked ClassDefNV(Chip, 1); }; diff --git a/Detectors/Upgrades/ALICE3/IOTOF/simulation/include/IOTOFSimulation/DPLDigitizerParam.h b/Detectors/Upgrades/ALICE3/IOTOF/simulation/include/IOTOFSimulation/DPLDigitizerParam.h index 48c873d86dc2f..520ac14265619 100644 --- a/Detectors/Upgrades/ALICE3/IOTOF/simulation/include/IOTOFSimulation/DPLDigitizerParam.h +++ b/Detectors/Upgrades/ALICE3/IOTOF/simulation/include/IOTOFSimulation/DPLDigitizerParam.h @@ -47,7 +47,8 @@ struct DPLDigitizerParam : public o2::conf::ConfigurableParamHelper digitizerParams.tdcBusyTime) { - tdcStates[colInGroup][0] = digitTime; - } else if (digitTime - tdcStates[colInGroup][1] > digitizerParams.tdcBusyTime) { - tdcStates[colInGroup][1] = digitTime; + + if (digitTime - maskStates[colInGroup] < digitizerParams.maskWindow) { + continue; // the RO column is still masked } + int available = -1; + for (int iT{0}; iT < 4; ++iT) { + if (digitTime - tdcStates[colInGroup][iT] > digitizerParams.tdcBusyTime) { + available = iT; + break; + } + } + + if (available == -1) { + continue; // all tdc pairs are busy + } + + tdcStates[colInGroup][available] = digitTime; + maskStates[colInGroup] = digitTime; + int digitID = mDigits->size(); mDigits->emplace_back(digit.getChipIndex(), digit.getRow(), digit.getColumn(), digit.getCharge(), digit.getTime(), digit.getBc(), digit.getTdc()); if (mMCLabels) { From 395964e9f799f7254e82daba5a02aadff316cfbc Mon Sep 17 00:00:00 2001 From: maciacco Date: Sat, 17 Oct 2026 00:18:45 +0200 Subject: [PATCH 2/3] fix tdc initialization --- .../ALICE3/IOTOF/simulation/src/Digitizer.cxx | 7 +- checks | 103 ++++++++++++++++++ 2 files changed, 107 insertions(+), 3 deletions(-) create mode 100644 checks diff --git a/Detectors/Upgrades/ALICE3/IOTOF/simulation/src/Digitizer.cxx b/Detectors/Upgrades/ALICE3/IOTOF/simulation/src/Digitizer.cxx index 38b9c2761199a..74ea308a7126f 100644 --- a/Detectors/Upgrades/ALICE3/IOTOF/simulation/src/Digitizer.cxx +++ b/Detectors/Upgrades/ALICE3/IOTOF/simulation/src/Digitizer.cxx @@ -20,6 +20,7 @@ #include "IOTOFSimulation/DPLDigitizerParam.h" #include "DetectorsRaw/HBFUtils.h" #include "CCDB/BasicCCDBManager.h" +#include "CommonConstants/MathConstants.h" #include #include @@ -63,14 +64,14 @@ void Digitizer::init() // initialize the vector of TDC states mChips[i].resizeTDCStates(nReadOutCols); for (auto& tdcStates : mChips[i].getTDCStates()) { - for (int iT{0}; iT < 4; ++iT) { - tdcStates[iT] = -999.f; + for (int iT = 0; iT < 4; ++iT) { + tdcStates[iT] = -o2::constants::math::VeryBig; } } // initialize the vector of mask states mChips[i].resizeMaskStates(nReadOutCols); for (auto& maskStates: mChips[i].getMaskStates()) { - maskStates = -999.f; + maskStates = -o2::constants::math::VeryBig; } } diff --git a/checks b/checks new file mode 100644 index 0000000000000..6d95b0100a778 --- /dev/null +++ b/checks @@ -0,0 +1,103 @@ +diff --git a/Detectors/Upgrades/ALICE3/IOTOF/simulation/include/IOTOFSimulation/Chip.h b/Detectors/Upgrades/ALICE3/IOTOF/simulation/include/IOTOFSimulation/Chip.h +index 1849907d6e..a692fa2a5b 100644 +--- a/Detectors/Upgrades/ALICE3/IOTOF/simulation/include/IOTOFSimulation/Chip.h ++++ b/Detectors/Upgrades/ALICE3/IOTOF/simulation/include/IOTOFSimulation/Chip.h +@@ -78,7 +78,10 @@ class Chip + + /// Resize the vector of tdc states + void resizeTDCStates(int const size) { mTDCStates.resize(size); } +- std::vector>& getTDCStates() { return mTDCStates; } ++ std::vector>& getTDCStates() { return mTDCStates; } ++ ++ void resizeMaskStates(int const size) { mMaskStates.resize(size); } ++ std::vector& getMaskStates() { return mMaskStates; } + + void addDigit(UShort_t row, UShort_t col, Int_t charge, double time, ULong64_t bc, Int_t tdc, o2::MCCompLabel label); + +@@ -86,7 +89,8 @@ class Chip + Int_t mChipIndex = -1; ///< Chip ID + bool mDisabled = false; ///< Flag to indicate if the chip is disabled (e.g. due to dead channels) + std::map mDigits; ///< Map of fired digits, possibly in multiple frames +- std::vector> mTDCStates; ///< Vector of the last times the TDC pairs went busy ++ std::vector> mTDCStates; ///< Vector of the last times the TDC pairs went busy ++ std::vector mMaskStates; ///< Vector of the last time the RO column was masked + + ClassDefNV(Chip, 1); + }; +diff --git a/Detectors/Upgrades/ALICE3/IOTOF/simulation/include/IOTOFSimulation/DPLDigitizerParam.h b/Detectors/Upgrades/ALICE3/IOTOF/simulation/include/IOTOFSimulation/DPLDigitizerParam.h +index 48c873d86d..520ac14265 100644 +--- a/Detectors/Upgrades/ALICE3/IOTOF/simulation/include/IOTOFSimulation/DPLDigitizerParam.h ++++ b/Detectors/Upgrades/ALICE3/IOTOF/simulation/include/IOTOFSimulation/DPLDigitizerParam.h +@@ -47,7 +47,8 @@ struct DPLDigitizerParam : public o2::conf::ConfigurableParamHelper digitizerParams.tdcBusyTime) { +- tdcStates[colInGroup][0] = digitTime; +- } else if (digitTime - tdcStates[colInGroup][1] > digitizerParams.tdcBusyTime) { +- tdcStates[colInGroup][1] = digitTime; ++ ++ if (digitTime - maskStates[colInGroup] < digitizerParams.maskWindow) { ++ continue; // the RO column is still masked + } + ++ int available = -1; ++ for (int iT{0}; iT < 4; ++iT) { ++ if (digitTime - tdcStates[colInGroup][iT] > digitizerParams.tdcBusyTime) { ++ available = iT; ++ break; ++ } ++ } ++ ++ if (available == -1) { ++ continue; // all tdc pairs are busy ++ } ++ ++ tdcStates[colInGroup][available] = digitTime; ++ maskStates[colInGroup] = digitTime; ++ + int digitID = mDigits->size(); + mDigits->emplace_back(digit.getChipIndex(), digit.getRow(), digit.getColumn(), digit.getCharge(), digit.getTime(), digit.getBc(), digit.getTdc()); + if (mMCLabels) { From 397294c5d1538482456d85a2124498e666a48014 Mon Sep 17 00:00:00 2001 From: maciacco Date: Sat, 17 Oct 2026 00:20:20 +0200 Subject: [PATCH 3/3] remove test log --- checks | 103 --------------------------------------------------------- 1 file changed, 103 deletions(-) delete mode 100644 checks diff --git a/checks b/checks deleted file mode 100644 index 6d95b0100a778..0000000000000 --- a/checks +++ /dev/null @@ -1,103 +0,0 @@ -diff --git a/Detectors/Upgrades/ALICE3/IOTOF/simulation/include/IOTOFSimulation/Chip.h b/Detectors/Upgrades/ALICE3/IOTOF/simulation/include/IOTOFSimulation/Chip.h -index 1849907d6e..a692fa2a5b 100644 ---- a/Detectors/Upgrades/ALICE3/IOTOF/simulation/include/IOTOFSimulation/Chip.h -+++ b/Detectors/Upgrades/ALICE3/IOTOF/simulation/include/IOTOFSimulation/Chip.h -@@ -78,7 +78,10 @@ class Chip - - /// Resize the vector of tdc states - void resizeTDCStates(int const size) { mTDCStates.resize(size); } -- std::vector>& getTDCStates() { return mTDCStates; } -+ std::vector>& getTDCStates() { return mTDCStates; } -+ -+ void resizeMaskStates(int const size) { mMaskStates.resize(size); } -+ std::vector& getMaskStates() { return mMaskStates; } - - void addDigit(UShort_t row, UShort_t col, Int_t charge, double time, ULong64_t bc, Int_t tdc, o2::MCCompLabel label); - -@@ -86,7 +89,8 @@ class Chip - Int_t mChipIndex = -1; ///< Chip ID - bool mDisabled = false; ///< Flag to indicate if the chip is disabled (e.g. due to dead channels) - std::map mDigits; ///< Map of fired digits, possibly in multiple frames -- std::vector> mTDCStates; ///< Vector of the last times the TDC pairs went busy -+ std::vector> mTDCStates; ///< Vector of the last times the TDC pairs went busy -+ std::vector mMaskStates; ///< Vector of the last time the RO column was masked - - ClassDefNV(Chip, 1); - }; -diff --git a/Detectors/Upgrades/ALICE3/IOTOF/simulation/include/IOTOFSimulation/DPLDigitizerParam.h b/Detectors/Upgrades/ALICE3/IOTOF/simulation/include/IOTOFSimulation/DPLDigitizerParam.h -index 48c873d86d..520ac14265 100644 ---- a/Detectors/Upgrades/ALICE3/IOTOF/simulation/include/IOTOFSimulation/DPLDigitizerParam.h -+++ b/Detectors/Upgrades/ALICE3/IOTOF/simulation/include/IOTOFSimulation/DPLDigitizerParam.h -@@ -47,7 +47,8 @@ struct DPLDigitizerParam : public o2::conf::ConfigurableParamHelper digitizerParams.tdcBusyTime) { -- tdcStates[colInGroup][0] = digitTime; -- } else if (digitTime - tdcStates[colInGroup][1] > digitizerParams.tdcBusyTime) { -- tdcStates[colInGroup][1] = digitTime; -+ -+ if (digitTime - maskStates[colInGroup] < digitizerParams.maskWindow) { -+ continue; // the RO column is still masked - } - -+ int available = -1; -+ for (int iT{0}; iT < 4; ++iT) { -+ if (digitTime - tdcStates[colInGroup][iT] > digitizerParams.tdcBusyTime) { -+ available = iT; -+ break; -+ } -+ } -+ -+ if (available == -1) { -+ continue; // all tdc pairs are busy -+ } -+ -+ tdcStates[colInGroup][available] = digitTime; -+ maskStates[colInGroup] = digitTime; -+ - int digitID = mDigits->size(); - mDigits->emplace_back(digit.getChipIndex(), digit.getRow(), digit.getColumn(), digit.getCharge(), digit.getTime(), digit.getBc(), digit.getTdc()); - if (mMCLabels) {