From c7074f67fdda19ac817d62cb2e3f6221fd8b081f Mon Sep 17 00:00:00 2001 From: Felix Schlepper Date: Mon, 26 May 2025 10:39:56 +0200 Subject: [PATCH 1/3] ITS3: fix loading APTS repsonse function --- .../include/ITSMFTSimulation/AlpideSimResponse.h | 4 ++-- .../include/ITS3Simulation/ChipSimResponse.h | 1 + .../include/ITS3Simulation/Digitizer.h | 2 ++ .../Upgrades/ITS3/simulation/src/Digitizer.cxx | 16 ++++++++++++++-- 4 files changed, 19 insertions(+), 4 deletions(-) diff --git a/Detectors/ITSMFT/common/simulation/include/ITSMFTSimulation/AlpideSimResponse.h b/Detectors/ITSMFT/common/simulation/include/ITSMFTSimulation/AlpideSimResponse.h index 5714b51d5aa45..d79d2f33c6062 100644 --- a/Detectors/ITSMFT/common/simulation/include/ITSMFTSimulation/AlpideSimResponse.h +++ b/Detectors/ITSMFT/common/simulation/include/ITSMFTSimulation/AlpideSimResponse.h @@ -114,7 +114,7 @@ class AlpideSimResponse public: AlpideSimResponse() = default; - ~AlpideSimResponse() = default; + virtual ~AlpideSimResponse() = default; void initData(int tableNumber, std::string dataPath, const bool quiet = true); @@ -145,7 +145,7 @@ class AlpideSimResponse const std::string& getColRowDataFmt() const { return mColRowDataFmt; } void print() const; - ClassDefNV(AlpideSimResponse, 2); + ClassDef(AlpideSimResponse, 2); }; //----------------------------------------------------- diff --git a/Detectors/Upgrades/ITS3/simulation/include/ITS3Simulation/ChipSimResponse.h b/Detectors/Upgrades/ITS3/simulation/include/ITS3Simulation/ChipSimResponse.h index f96fde9fb0d55..6bcaf8bc35557 100644 --- a/Detectors/Upgrades/ITS3/simulation/include/ITS3Simulation/ChipSimResponse.h +++ b/Detectors/Upgrades/ITS3/simulation/include/ITS3Simulation/ChipSimResponse.h @@ -24,6 +24,7 @@ class ChipSimResponse : public o2::itsmft::AlpideSimResponse public: ChipSimResponse() = default; ChipSimResponse(const ChipSimResponse& other) = default; + ChipSimResponse(const o2::itsmft::AlpideSimResponse* base) : o2::itsmft::AlpideSimResponse(*base) {} float getRespCentreDep() const { return mRespCentreDep; } void computeCentreFromData(); diff --git a/Detectors/Upgrades/ITS3/simulation/include/ITS3Simulation/Digitizer.h b/Detectors/Upgrades/ITS3/simulation/include/ITS3Simulation/Digitizer.h index edc5583c03d5a..a2dd1102091da 100644 --- a/Detectors/Upgrades/ITS3/simulation/include/ITS3Simulation/Digitizer.h +++ b/Detectors/Upgrades/ITS3/simulation/include/ITS3Simulation/Digitizer.h @@ -42,6 +42,8 @@ class Digitizer : public TObject using ExtraDig = std::vector; ///< container for extra contributions to PreDigits public: + ~Digitizer(); + void setDigits(std::vector* dig) { mDigits = dig; } void setMCLabels(o2::dataformats::MCTruthContainer* mclb) { mMCLabels = mclb; } void setROFRecords(std::vector* rec) { mROFRecords = rec; } diff --git a/Detectors/Upgrades/ITS3/simulation/src/Digitizer.cxx b/Detectors/Upgrades/ITS3/simulation/src/Digitizer.cxx index 1d1d15a91f89b..b91e17890a6d8 100644 --- a/Detectors/Upgrades/ITS3/simulation/src/Digitizer.cxx +++ b/Detectors/Upgrades/ITS3/simulation/src/Digitizer.cxx @@ -12,6 +12,7 @@ /// \file Digitizer.cxx /// \brief Implementation of the ITS3 digitizer +#include "ITS3Simulation/ChipSimResponse.h" #include "ITSMFTBase/SegmentationAlpide.h" #include "ITS3Simulation/Digitizer.h" #include "ITS3Base/ITS3Params.h" @@ -34,6 +35,11 @@ using o2::itsmft::PreDigit; using namespace o2::its3; +Digitizer::~Digitizer() +{ + delete mSimRespIB; +} + void Digitizer::init() { const int numOfChips = mGeometry->getNumberOfChips(); @@ -57,8 +63,14 @@ void Digitizer::init() if (!fOB || fOB->IsZombie() || !fOB->IsOpen()) { LOGP(fatal, "Cannot open file {}", fileOB); } - mParams.setIBSimResponse(mSimRespIB = fIB->Get(nameIB)); - mParams.setOBSimResponse(mSimRespOB = fOB->Get(nameOB)); + if ((mSimRespIB = new o2::its3::ChipSimResponse(fIB->Get(nameIB))) == nullptr) { + LOGP(fatal, "Cannot create response function for IB"); + } + if ((mSimRespOB = fOB->Get(nameOB)) == nullptr) { + LOGP(fatal, "Cannot create response function for OB"); + } + mParams.setIBSimResponse(mSimRespIB); + mParams.setOBSimResponse(mSimRespOB); fIB->Close(); fOB->Close(); }; From 7bf90101d5f06d2b2d6f145438b1804a18d7ca6f Mon Sep 17 00:00:00 2001 From: Felix Schlepper Date: Mon, 26 May 2025 11:43:56 +0200 Subject: [PATCH 2/3] ITS3: fix topologydict generation --- .../Upgrades/ITS3/macros/test/CreateDictionariesITS3.C | 9 +++++---- .../ITS3/reconstruction/src/BuildTopologyDictionary.cxx | 8 +++----- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/Detectors/Upgrades/ITS3/macros/test/CreateDictionariesITS3.C b/Detectors/Upgrades/ITS3/macros/test/CreateDictionariesITS3.C index 76d7bf09de77f..459e3c59d1e82 100644 --- a/Detectors/Upgrades/ITS3/macros/test/CreateDictionariesITS3.C +++ b/Detectors/Upgrades/ITS3/macros/test/CreateDictionariesITS3.C @@ -280,15 +280,16 @@ void CreateDictionariesITS3(bool saveDeltas = true, mMosaixSegmentations[layer].curvedToFlat(locC.X(), locC.Y(), xFlat, yFlat); locC.SetCoordinates(xFlat, yFlat, locC.Z()); } + + auto pitchX = (ib) ? o2::its3::SegmentationMosaix::PitchRow : o2::itsmft::SegmentationAlpide::PitchRow; + auto pitchZ = (ib) ? o2::its3::SegmentationMosaix::PitchCol : o2::itsmft::SegmentationAlpide::PitchCol; dX = xyzLocM.X() - locC.X(); dZ = xyzLocM.Z() - locC.Z(); - dX /= (ib) ? o2::its3::SegmentationMosaix::PitchRow : o2::itsmft::SegmentationAlpide::PitchRow; - dZ /= (ib) ? o2::its3::SegmentationMosaix::PitchCol : o2::itsmft::SegmentationAlpide::PitchCol; float outLimitDx{-1}, outLimitDz{-1}; if (checkOutliers > 0.) { - outLimitDx = topology.getRowSpan() * checkOutliers; - outLimitDz = topology.getColumnSpan() * checkOutliers; + outLimitDx = topology.getRowSpan() * checkOutliers * pitchX; + outLimitDz = topology.getColumnSpan() * checkOutliers * pitchZ; bool isOutDx = std::abs(dX) > outLimitDx; bool isOutDz = std::abs(dZ) > outLimitDz; if (isOutDx || isOutDz) { // ignore outlier diff --git a/Detectors/Upgrades/ITS3/reconstruction/src/BuildTopologyDictionary.cxx b/Detectors/Upgrades/ITS3/reconstruction/src/BuildTopologyDictionary.cxx index f7eec52f9434a..b7d1cda0d0c69 100644 --- a/Detectors/Upgrades/ITS3/reconstruction/src/BuildTopologyDictionary.cxx +++ b/Detectors/Upgrades/ITS3/reconstruction/src/BuildTopologyDictionary.cxx @@ -40,8 +40,6 @@ void BuildTopologyDictionary::accountTopologyImpl(const itsmft::ClusterTopology& ++tot; bool useDf = dX < IgnoreVal / 2; // we may need to account the frequency but to not update the centroid - // std::pair::iterator,bool> ret; - // auto ret = mTopologyMap.insert(std::make_pair(cluster.getHash(), std::make_pair(cluster, 1))); auto& topoStat = tstat[cluster.getHash()]; topoStat.countsTotal++; if (topoStat.countsTotal == 1) { // a new topology is inserted @@ -59,7 +57,7 @@ void BuildTopologyDictionary::accountTopologyImpl(const itsmft::ClusterTopology& topoStat.countsWithBias = 1; } else { // assign expected sigmas from the pixel X, Z sizes topInf.mXsigma2 = sigmaX * sigmaX / 12.f / (float)std::min(10, topInf.mSizeX); - topInf.mZsigma2 = sigmaZ * sigmaZ / (float)std::min(10, topInf.mSizeZ); + topInf.mZsigma2 = sigmaZ * sigmaZ / 12.f / (float)std::min(10, topInf.mSizeZ); } tinfo.emplace(cluster.getHash(), topInf); } else { @@ -128,7 +126,7 @@ void BuildTopologyDictionary::setThresholdImpl(double thr, TopoFreq& tfreq, Topo { setNCommonImpl(0, tfreq, tstat, ncommon, ntot); freqthres = thr; - for (auto& q : tfreq) { + for (const auto& q : tfreq) { if (((double)q.first) / ntot > thr) { ++ncommon; } else { @@ -205,7 +203,7 @@ void BuildTopologyDictionary::groupRareTopologiesImpl(TopoFreq& tfreq, TopoInfo& gr.mHash = tfreq[j].second; gr.mFrequency = ((double)(tfreq[j].first)) / ntot; totFreq += gr.mFrequency; - // rough estimation for the error considering a8 uniform distribution + // rough estimation for the error considering a uniform distribution const auto& topo = tinfo.find(gr.mHash)->second; gr.mErrX = std::sqrt(topo.mXsigma2); gr.mErrZ = std::sqrt(topo.mZsigma2); From 5ac57c1afb54dce22199e33fd5693bc7e2a9a0b3 Mon Sep 17 00:00:00 2001 From: Felix Schlepper Date: Mon, 2 Jun 2025 13:40:12 +0200 Subject: [PATCH 3/3] ITS3: add braces and some reordering in ChipDigitsContainer --- .../ITS3Simulation/ChipDigitsContainer.h | 22 +++++++++---------- .../simulation/src/ChipDigitsContainer.cxx | 18 +++++++-------- 2 files changed, 19 insertions(+), 21 deletions(-) diff --git a/Detectors/Upgrades/ITS3/simulation/include/ITS3Simulation/ChipDigitsContainer.h b/Detectors/Upgrades/ITS3/simulation/include/ITS3Simulation/ChipDigitsContainer.h index 0c9627fe412c3..2caa381b3c385 100644 --- a/Detectors/Upgrades/ITS3/simulation/include/ITS3Simulation/ChipDigitsContainer.h +++ b/Detectors/Upgrades/ITS3/simulation/include/ITS3Simulation/ChipDigitsContainer.h @@ -12,11 +12,11 @@ #ifndef ALICEO2_ITS3_CHIPDIGITSCONTAINER_ #define ALICEO2_ITS3_CHIPDIGITSCONTAINER_ -#include "ITSMFTBase/SegmentationAlpide.h" // Base class in o2::itsmft namespace -#include "ITSMFTSimulation/ChipDigitsContainer.h" // Base class in o2::itsmft namespace -#include "ITS3Base/SegmentationMosaix.h" // OB segmentation implementation -#include "ITS3Base/SpecsV2.h" // Provides SpecsV2::isDetITS3() interface -#include "ITS3Simulation/DigiParams.h" // ITS3-specific DigiParams interface +#include "ITSMFTBase/SegmentationAlpide.h" +#include "ITSMFTSimulation/ChipDigitsContainer.h" +#include "ITS3Base/SegmentationMosaix.h" +#include "ITS3Base/SpecsV2.h" +#include "ITS3Simulation/DigiParams.h" #include namespace o2::its3 @@ -24,11 +24,6 @@ namespace o2::its3 class ChipDigitsContainer : public o2::itsmft::ChipDigitsContainer { - private: - bool innerBarrel; ///< true if the chip belongs to the inner barrel (IB), false if outer barrel (OB) - int maxRows; ///< maximum number of rows - int maxCols; ///< maximum number of columns - public: explicit ChipDigitsContainer(UShort_t idx = 0); @@ -51,9 +46,14 @@ class ChipDigitsContainer : public o2::itsmft::ChipDigitsContainer 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::its3::DigiParams* params); + private: + bool innerBarrel{false}; ///< true if the chip belongs to the inner barrel (IB), false if outer barrel (OB) + int maxRows{-1}; ///< maximum number of rows + int maxCols{-1}; ///< maximum number of columns + ClassDefNV(ChipDigitsContainer, 1); }; } // namespace o2::its3 -#endif // ALICEO2_ITS3_CHIPDIGITSCONTAINER_ \ No newline at end of file +#endif // ALICEO2_ITS3_CHIPDIGITSCONTAINER_ diff --git a/Detectors/Upgrades/ITS3/simulation/src/ChipDigitsContainer.cxx b/Detectors/Upgrades/ITS3/simulation/src/ChipDigitsContainer.cxx index 0611f7002f160..102b15863683e 100644 --- a/Detectors/Upgrades/ITS3/simulation/src/ChipDigitsContainer.cxx +++ b/Detectors/Upgrades/ITS3/simulation/src/ChipDigitsContainer.cxx @@ -11,10 +11,7 @@ #include "ITS3Simulation/ChipDigitsContainer.h" -namespace o2 -{ -namespace its3 -{ +using namespace o2::its3; ChipDigitsContainer::ChipDigitsContainer(UShort_t idx) : o2::itsmft::ChipDigitsContainer(idx) {} @@ -48,16 +45,17 @@ void ChipDigitsContainer::addNoise(UInt_t rofMin, UInt_t rofMax, const o2::its3: for (Int_t i = 0; i < nhits; ++i) { row = gRandom->Integer(maxRows); col = gRandom->Integer(maxCols); - if (mNoiseMap && mNoiseMap->isNoisy(mChipIndex, row, col)) + if (mNoiseMap && mNoiseMap->isNoisy(mChipIndex, row, col)) { continue; - if (mDeadChanMap && mDeadChanMap->isNoisy(mChipIndex, row, col)) + } + if (mDeadChanMap && mDeadChanMap->isNoisy(mChipIndex, row, col)) { continue; + } auto key = getOrderingKey(rof, row, col); - if (!findDigit(key)) + if (!findDigit(key)) { addDigit(key, rof, row, col, nel, o2::MCCompLabel(true)); + } } } } - -} // namespace its3 -} // namespace o2 \ No newline at end of file +// namespace its3