From 5b64069ddeb87a63117d4587919bf34547e0d681 Mon Sep 17 00:00:00 2001 From: Andrea Sofia Triolo Date: Mon, 16 Mar 2026 16:06:09 +0100 Subject: [PATCH 1/2] ALICE3-TRK: add noise to the digitization process --- .../TRKSimulation/ChipDigitsContainer.h | 4 ++ .../include/TRKSimulation/DPLDigitizerParam.h | 2 +- .../include/TRKSimulation/DigiParams.h | 2 +- .../simulation/src/ChipDigitsContainer.cxx | 47 +++++++++++++++++++ .../ALICE3/TRK/simulation/src/Digitizer.cxx | 2 +- 5 files changed, 54 insertions(+), 3 deletions(-) diff --git a/Detectors/Upgrades/ALICE3/TRK/simulation/include/TRKSimulation/ChipDigitsContainer.h b/Detectors/Upgrades/ALICE3/TRK/simulation/include/TRKSimulation/ChipDigitsContainer.h index 73c95b04c45e3..bf28ace0724bc 100644 --- a/Detectors/Upgrades/ALICE3/TRK/simulation/include/TRKSimulation/ChipDigitsContainer.h +++ b/Detectors/Upgrades/ALICE3/TRK/simulation/include/TRKSimulation/ChipDigitsContainer.h @@ -35,6 +35,10 @@ class ChipDigitsContainer : public o2::itsmft::ChipDigitsContainer return (static_cast(roframe) << (8 * sizeof(UInt_t))) + (static_cast(col) << (8 * sizeof(Short_t))) + row; } + /// Adds noise digits, deleted the one using the itsmft::DigiParams interface + void addNoise(UInt_t rofMin, UInt_t rofMax, const o2::itsmft::DigiParams* params, int maxRows = o2::itsmft::SegmentationAlpide::NRows, int maxCols = o2::itsmft::SegmentationAlpide::NCols) = delete; + void addNoise(UInt_t rofMin, UInt_t rofMax, const o2::trk::DigiParams* params, int subDetID, int layer); + ClassDefNV(ChipDigitsContainer, 1); }; diff --git a/Detectors/Upgrades/ALICE3/TRK/simulation/include/TRKSimulation/DPLDigitizerParam.h b/Detectors/Upgrades/ALICE3/TRK/simulation/include/TRKSimulation/DPLDigitizerParam.h index 15ed63e46e21f..168ae172f4b86 100644 --- a/Detectors/Upgrades/ALICE3/TRK/simulation/include/TRKSimulation/DPLDigitizerParam.h +++ b/Detectors/Upgrades/ALICE3/TRK/simulation/include/TRKSimulation/DPLDigitizerParam.h @@ -54,7 +54,7 @@ struct DPLDigitizerParam : public o2::conf::ConfigurableParamHelpergetNoisePerPixel() * maxRows * maxCols; + nel = static_cast(params->getChargeThreshold() * 1.1); + } else { // ML/OT + maxRows = constants::moduleMLOT::chip::nRows; + maxCols = constants::moduleMLOT::chip::nCols; + mean = params->getNoisePerPixel() * maxRows * maxCols; + nel = static_cast(params->getChargeThreshold() * 1.1); + } + + LOG(debug) << "Adding noise for chip " << mChipIndex << " with mean " << mean << " and charge " << nel; + + for (UInt_t rof = rofMin; rof <= rofMax; rof++) { + nhits = gRandom->Poisson(mean); + for (Int_t i = 0; i < nhits; ++i) { + row = gRandom->Integer(maxRows); + col = gRandom->Integer(maxCols); + LOG(debug) << "Generated noise hit at ROF " << rof << ", row " << row << ", col " << col; + if (mNoiseMap && mNoiseMap->isNoisy(mChipIndex, row, col)) { + continue; + } + if (mDeadChanMap && mDeadChanMap->isNoisy(mChipIndex, row, col)) { + continue; + } + auto key = getOrderingKey(rof, row, col); + if (!findDigit(key)) { + addDigit(key, rof, row, col, nel, o2::MCCompLabel(true)); + } + } + } +} diff --git a/Detectors/Upgrades/ALICE3/TRK/simulation/src/Digitizer.cxx b/Detectors/Upgrades/ALICE3/TRK/simulation/src/Digitizer.cxx index 52eaccfe045f7..31ef19a21cce9 100644 --- a/Detectors/Upgrades/ALICE3/TRK/simulation/src/Digitizer.cxx +++ b/Detectors/Upgrades/ALICE3/TRK/simulation/src/Digitizer.cxx @@ -215,7 +215,7 @@ void Digitizer::fillOutputContainer(uint32_t frameLast) if (chip.isDisabled()) { continue; } - // chip.addNoise(mROFrameMin, mROFrameMin, &mParams); /// TODO: add noise + chip.addNoise(mROFrameMin, mROFrameMin, &mParams, mGeometry->getSubDetID(chip.getChipIndex()), mGeometry->getLayer(chip.getChipIndex())); /// TODO: add noise auto& buffer = chip.getPreDigits(); if (buffer.empty()) { continue; From 7a4fe8a628602df64fc3879e0d30a5d5be27656b Mon Sep 17 00:00:00 2001 From: ALICE Action Bot Date: Mon, 16 Mar 2026 15:16:18 +0000 Subject: [PATCH 2/2] Please consider the following formatting changes --- .../Upgrades/ALICE3/TRK/simulation/src/ChipDigitsContainer.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Detectors/Upgrades/ALICE3/TRK/simulation/src/ChipDigitsContainer.cxx b/Detectors/Upgrades/ALICE3/TRK/simulation/src/ChipDigitsContainer.cxx index 32344c6470c56..d8e6df8b6099c 100644 --- a/Detectors/Upgrades/ALICE3/TRK/simulation/src/ChipDigitsContainer.cxx +++ b/Detectors/Upgrades/ALICE3/TRK/simulation/src/ChipDigitsContainer.cxx @@ -29,7 +29,7 @@ void ChipDigitsContainer::addNoise(UInt_t rofMin, UInt_t rofMax, const o2::trk:: int maxCols = 0; // TODO: set different noise and threshold for VD and MLOT - if (subDetID == 0) { // VD + if (subDetID == 0) { // VD maxRows = constants::VD::petal::layer::nRows[layer]; // TODO: get the layer from the geometry maxCols = constants::VD::petal::layer::nCols; mean = params->getNoisePerPixel() * maxRows * maxCols;