From f790fd5a15e0cb6a63ffe801966aa12c028b8372 Mon Sep 17 00:00:00 2001 From: ChunzhengLab Date: Tue, 17 Jun 2025 17:34:15 +0200 Subject: [PATCH 1/5] move the energy deposition wrt. centre of response --- Detectors/Upgrades/ITS3/simulation/src/Digitizer.cxx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Detectors/Upgrades/ITS3/simulation/src/Digitizer.cxx b/Detectors/Upgrades/ITS3/simulation/src/Digitizer.cxx index b91e17890a6d8..70425a1b4139f 100644 --- a/Detectors/Upgrades/ITS3/simulation/src/Digitizer.cxx +++ b/Detectors/Upgrades/ITS3/simulation/src/Digitizer.cxx @@ -90,7 +90,8 @@ void Digitizer::init() } else { LOGP(fatal, "ResponseFunction '{}' not implemented!", func); } - mSimRespIBShift = mSimRespIB->getDepthMax() - constants::silicon::thickness / 2.f; + mSimRespIB->computeCentreFromData(); + mSimRespIBShift = mSimRespIB->getDepthMax() - constants::silicon::thickness / 2.f - mSimRespIB->getRespCentreDep(); mSimRespOBShift = mSimRespOB->getDepthMax() - SegmentationOB::SensorLayerThickness / 2.f; } From 6c8c9047a49f5f834331f5ae9ddfd76d4e74de22 Mon Sep 17 00:00:00 2001 From: ChunzhengLab Date: Tue, 17 Jun 2025 19:22:26 +0200 Subject: [PATCH 2/5] fix the order of IB/OB for noise seeding --- .../Upgrades/ITS3/simulation/src/ChipDigitsContainer.cxx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Detectors/Upgrades/ITS3/simulation/src/ChipDigitsContainer.cxx b/Detectors/Upgrades/ITS3/simulation/src/ChipDigitsContainer.cxx index 102b15863683e..efe878536687d 100644 --- a/Detectors/Upgrades/ITS3/simulation/src/ChipDigitsContainer.cxx +++ b/Detectors/Upgrades/ITS3/simulation/src/ChipDigitsContainer.cxx @@ -31,12 +31,12 @@ void ChipDigitsContainer::addNoise(UInt_t rofMin, UInt_t rofMax, const o2::its3: int nel = 0; if (isIB()) { - // Inner barrel: use ITS3-specific noise interface with OB segmentation. - mean = params->getIBNoisePerPixel() * SegmentationOB::NPixels; + // Inner barrel: use ITS3-specific noise interface with IB segmentation. + mean = params->getIBNoisePerPixel() * SegmentationIB::NPixels; nel = static_cast(params->getIBChargeThreshold() * 1.1); } else { - // Outer barrel: use base class noise interface with IB segmentation. - mean = params->getNoisePerPixel() * SegmentationIB::NPixels; + // Outer barrel: use base class noise interface with OB segmentation. + mean = params->getNoisePerPixel() * SegmentationOB::NPixels; nel = static_cast(params->getChargeThreshold() * 1.1); } From ccd75ae5c05c8e86e6f11f27c18ec77d11e47202 Mon Sep 17 00:00:00 2001 From: ChunzhengLab Date: Tue, 17 Jun 2025 20:57:16 +0200 Subject: [PATCH 3/5] print out the resp centre in the CheckChipResponseFile --- .../ITS3/macros/test/CheckChipResponseFile.C | 51 +++++++++++-------- 1 file changed, 31 insertions(+), 20 deletions(-) diff --git a/Detectors/Upgrades/ITS3/macros/test/CheckChipResponseFile.C b/Detectors/Upgrades/ITS3/macros/test/CheckChipResponseFile.C index 996a99d87ecbc..5cacf2eab9900 100644 --- a/Detectors/Upgrades/ITS3/macros/test/CheckChipResponseFile.C +++ b/Detectors/Upgrades/ITS3/macros/test/CheckChipResponseFile.C @@ -24,6 +24,7 @@ #define ENABLE_UPGRADES #include "ITSMFTSimulation/AlpideSimResponse.h" +#include "ITS3Simulation/ChipSimResponse.h" #include "ITS3Base/SegmentationMosaix.h" #include "fairlogger/Logger.h" @@ -34,21 +35,21 @@ using SegmentationMosaix = o2::its3::SegmentationMosaix; double um2cm(double um) { return um * 1e-4; } double cm2um(double cm) { return cm * 1e+4; } -o2::itsmft::AlpideSimResponse *mAlpSimResp0 = nullptr, - *mAlpSimResp1 = nullptr, - *mAptSimResp1 = nullptr; +std::unique_ptr mAlpSimResp0, mAlpSimResp1, mAptSimResp1; -o2::itsmft::AlpideSimResponse* loadResponse(const std::string& fileName, const std::string& respName) +std::unique_ptr loadResponse(const std::string& fileName, const std::string& respName) { TFile* f = TFile::Open(fileName.data()); if (!f) { std::cerr << fileName << " not found" << std::endl; return nullptr; } - auto resp = (o2::itsmft::AlpideSimResponse*)f->Get(respName.data()); - if (!resp) + auto base = f->Get(respName.c_str()); + if (!base) { std::cerr << respName << " not found in " << fileName << std::endl; - return resp; + return nullptr; + } + return std::make_unique(base); } void LoadRespFunc() @@ -56,18 +57,28 @@ void LoadRespFunc() std::string AptsFile = "$(O2_ROOT)/share/Detectors/Upgrades/ITS3/data/ITS3ChipResponseData/APTSResponseData.root"; std::string AlpideFile = "$(O2_ROOT)/share/Detectors/ITSMFT/data/AlpideResponseData/AlpideResponseData.root"; + std::cout<<"=====================\n"; + LOGP(info, "ALPIDE Vbb=0V response"); mAlpSimResp0 = loadResponse(AlpideFile, "response0"); // Vbb=0V - LOG(info) << "ALPIDE Vbb=0V response" << std::endl; + mAlpSimResp0->computeCentreFromData(); mAlpSimResp0->print(); + LOGP(info, "Response Centre {}", mAlpSimResp0->getRespCentreDep()); + std::cout<<"=====================\n"; + LOGP(info, "ALPIDE Vbb=-3V response"); mAlpSimResp1 = loadResponse(AlpideFile, "response1"); // Vbb=-3V - LOG(info) << "ALPIDE Vbb=-3V response" << std::endl; + mAlpSimResp1->computeCentreFromData(); mAlpSimResp1->print(); + LOGP(info, "Response Centre {}", mAlpSimResp1->getRespCentreDep()); + std::cout<<"=====================\n"; + LOGP(info, "APTS response"); mAptSimResp1 = loadResponse(AptsFile, "response1"); // APTS - LOG(info) << "APTS response" << std::endl; + mAptSimResp1->computeCentreFromData(); mAptSimResp1->print(); + LOGP(info, "Response Centre {}", mAptSimResp1->getRespCentreDep()); + std::cout<<"=====================\n"; } -std::vector getCollectionSeediciencies(o2::itsmft::AlpideSimResponse* resp, +std::vector getCollectionSeediciencies(o2::its3::ChipSimResponse* resp, const std::vector& depths) { std::vector seed; @@ -81,7 +92,7 @@ std::vector getCollectionSeediciencies(o2::itsmft::AlpideSimResponse* res return seed; } -std::vector getShareValues(o2::itsmft::AlpideSimResponse* resp, +std::vector getShareValues(o2::its3::ChipSimResponse* resp, const std::vector& depths) { std::vector share; @@ -103,7 +114,7 @@ std::vector getShareValues(o2::itsmft::AlpideSimResponse* resp, return share; } -std::vector getEffValues(o2::itsmft::AlpideSimResponse* resp, +std::vector getEffValues(o2::its3::ChipSimResponse* resp, const std::vector& depths) { std::vector all; @@ -135,7 +146,7 @@ void CheckChipResponseFile() int colors[] = {kOrange + 7, kRed + 1, kAzure + 4}; struct RespInfo { - o2::itsmft::AlpideSimResponse* resp; + std::unique_ptr& resp; std::string title; int color; }; @@ -154,11 +165,11 @@ void CheckChipResponseFile() for (auto& r : responses) { if (!r.resp) continue; - auto seed = getCollectionSeediciencies(r.resp, vecDepth); - auto shr = getShareValues(r.resp, vecDepth); - auto all = getEffValues(r.resp, vecDepth); + auto seed = getCollectionSeediciencies(r.resp.get(), vecDepth); + auto shr = getShareValues(r.resp.get(), vecDepth); + auto all = getEffValues(r.resp.get(), vecDepth); - TGraph* grSeed = new TGraph(vecDepth.size(), vecDepth.data(), seed.data()); + auto grSeed = new TGraph(vecDepth.size(), vecDepth.data(), seed.data()); grSeed->SetTitle(Form("%s seed", r.title.c_str())); grSeed->SetLineColor(r.color); grSeed->SetLineWidth(2); @@ -168,7 +179,7 @@ void CheckChipResponseFile() grSeed->Draw("SAME LP"); leg->AddEntry(grSeed, Form("%s seed", r.title.c_str()), "lp"); - TGraph* grShare = new TGraph(vecDepth.size(), vecDepth.data(), shr.data()); + auto grShare = new TGraph(vecDepth.size(), vecDepth.data(), shr.data()); grShare->SetLineColor(r.color); grShare->SetLineWidth(2); grShare->SetMarkerColor(r.color); @@ -177,7 +188,7 @@ void CheckChipResponseFile() grShare->Draw("SAME LP"); leg->AddEntry(grShare, Form("%s share", r.title.c_str()), "p"); - TGraph* grEff = new TGraph(vecDepth.size(), vecDepth.data(), all.data()); + auto grEff = new TGraph(vecDepth.size(), vecDepth.data(), all.data()); grEff->SetLineColor(r.color); grEff->SetLineWidth(2); grEff->SetMarkerColor(r.color); From fb4c608e42380577d3fdde6dfbaa32ef1e80c536 Mon Sep 17 00:00:00 2001 From: ChunzhengLab Date: Thu, 19 Jun 2025 20:48:27 +0200 Subject: [PATCH 4/5] find the real centre --- ChipResponse.pdf | Bin 0 -> 23047 bytes .../ITS3/simulation/src/ChipSimResponse.cxx | 31 +++++++++++++++--- .../ITS3/simulation/src/Digitizer.cxx | 3 +- core_dump_74974 | 0 4 files changed, 28 insertions(+), 6 deletions(-) create mode 100644 ChipResponse.pdf create mode 100644 core_dump_74974 diff --git a/ChipResponse.pdf b/ChipResponse.pdf new file mode 100644 index 0000000000000000000000000000000000000000..0351c0af364bc2e7f77ff71398f4fe0524877b0f GIT binary patch literal 23047 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 htQ bins; + float totQ = 0.f; for (size_t i = 0; i + 1 < zVec.size(); ++i) { float z0 = zVec[i], z1 = zVec[i + 1]; float q0 = qVec[i], q1 = qVec[i + 1]; float dz = z1 - z0; - intQ += 0.5f * (q0 + q1) * dz; - intZQ += 0.5f * (z0 * q0 + z1 * q1) * dz; + float dq = 0.5f * (q0 + q1) * dz; + bins.push_back({z0, z1, q0, q1, dq}); + totQ += dq; } + if (totQ <= 0.f) { mRespCentreDep = 0.f; return; } - mRespCentreDep = (intQ > 0.f) ? intZQ / intQ : 0.f; + float halfQ = 0.5f * totQ; + float cumQ = 0.f; + for (const auto& b : bins) { + if (cumQ + b.dq < halfQ) { cumQ += b.dq; continue; } + float qSlope = (b.q1 - b.q0) / (b.z1 - b.z0); + float dz = b.z1 - b.z0; + float A = qSlope * 0.5f; + float B = b.q0; + float C = cumQ - halfQ; + float disc = B * B - 4.f * A * C; + float x; + if (disc >= 0.f && std::abs(A) > 1.e-12f) + x = (-B + std::sqrt(disc)) / (2.f * A); + else + x = (halfQ - cumQ) / b.q0; + x = std::clamp(x, 0.f, dz); + mRespCentreDep = b.z0 + x; + return; + } + mRespCentreDep = mDptMax; } diff --git a/Detectors/Upgrades/ITS3/simulation/src/Digitizer.cxx b/Detectors/Upgrades/ITS3/simulation/src/Digitizer.cxx index 70425a1b4139f..b91e17890a6d8 100644 --- a/Detectors/Upgrades/ITS3/simulation/src/Digitizer.cxx +++ b/Detectors/Upgrades/ITS3/simulation/src/Digitizer.cxx @@ -90,8 +90,7 @@ void Digitizer::init() } else { LOGP(fatal, "ResponseFunction '{}' not implemented!", func); } - mSimRespIB->computeCentreFromData(); - mSimRespIBShift = mSimRespIB->getDepthMax() - constants::silicon::thickness / 2.f - mSimRespIB->getRespCentreDep(); + mSimRespIBShift = mSimRespIB->getDepthMax() - constants::silicon::thickness / 2.f; mSimRespOBShift = mSimRespOB->getDepthMax() - SegmentationOB::SensorLayerThickness / 2.f; } diff --git a/core_dump_74974 b/core_dump_74974 new file mode 100644 index 0000000000000..e69de29bb2d1d From 5d41f7639b2d653fd2ba37a9e55b7be4907befa8 Mon Sep 17 00:00:00 2001 From: ChunzhengLab Date: Thu, 19 Jun 2025 22:33:42 +0200 Subject: [PATCH 5/5] should use the total eff but not only seed --- ChipResponse.pdf | Bin 23047 -> 0 bytes .../ITS3/macros/test/CheckChipResponseFile.C | 25 +++--- .../ITS3/simulation/src/ChipSimResponse.cxx | 73 ++++++++++-------- core_dump_74974 | 0 4 files changed, 53 insertions(+), 45 deletions(-) delete mode 100644 ChipResponse.pdf delete mode 100644 core_dump_74974 diff --git a/ChipResponse.pdf b/ChipResponse.pdf deleted file mode 100644 index 0351c0af364bc2e7f77ff71398f4fe0524877b0f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23047 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 htQcomputeCentreFromData(); mAlpSimResp0->print(); LOGP(info, "Response Centre {}", mAlpSimResp0->getRespCentreDep()); - std::cout<<"=====================\n"; + std::cout << "=====================\n"; LOGP(info, "ALPIDE Vbb=-3V response"); mAlpSimResp1 = loadResponse(AlpideFile, "response1"); // Vbb=-3V mAlpSimResp1->computeCentreFromData(); mAlpSimResp1->print(); LOGP(info, "Response Centre {}", mAlpSimResp1->getRespCentreDep()); - std::cout<<"=====================\n"; + std::cout << "=====================\n"; LOGP(info, "APTS response"); mAptSimResp1 = loadResponse(AptsFile, "response1"); // APTS mAptSimResp1->computeCentreFromData(); mAptSimResp1->print(); LOGP(info, "Response Centre {}", mAptSimResp1->getRespCentreDep()); - std::cout<<"=====================\n"; + std::cout << "=====================\n"; } std::vector getCollectionSeediciencies(o2::its3::ChipSimResponse* resp, @@ -85,7 +85,7 @@ std::vector getCollectionSeediciencies(o2::its3::ChipSimResponse* resp, bool flipRow = false, flipCol = false; for (auto depth : depths) { auto rspmat = resp->getResponse(0.0, 0.0, - um2cm(depth) + resp->getDepthMin() + 1.e-9, + um2cm(depth) + 1.e-9, flipRow, flipCol); seed.push_back(rspmat ? rspmat->getValue(2, 2) : 0.f); } @@ -99,7 +99,7 @@ std::vector getShareValues(o2::its3::ChipSimResponse* resp, bool flipRow = false, flipCol = false; for (auto depth : depths) { auto rspmat = resp->getResponse(0.0, 0.0, - um2cm(depth) + resp->getDepthMin() + 1.e-9, + um2cm(depth) + 1.e-9, flipRow, flipCol); float s = 0; int npix = resp->getNPix(); @@ -121,7 +121,7 @@ std::vector getEffValues(o2::its3::ChipSimResponse* resp, bool flipRow = false, flipCol = false; for (auto depth : depths) { auto rspmat = resp->getResponse(0.0, 0.0, - um2cm(depth) + resp->getDepthMin() + 1.e-9, + um2cm(depth) + 1.e-9, flipRow, flipCol); float s = 0; int npix = resp->getNPix(); @@ -140,9 +140,12 @@ void CheckChipResponseFile() LoadRespFunc(); LOG(info) << "Response function loaded" << std::endl; - std::vector vecDepth(50); - for (int i = 0; i < 50; ++i) - vecDepth[i] = i; + std::vector vecDepth; + int numPoints = 100; + for (int i = 0; i < numPoints; ++i) { + float value = -50 + i * (100.0f / (numPoints - 1)); + vecDepth.push_back(value); + } int colors[] = {kOrange + 7, kRed + 1, kAzure + 4}; struct RespInfo { @@ -156,7 +159,7 @@ void CheckChipResponseFile() {mAlpSimResp1, "ALPIDE Vbb=-3V", colors[2]}}; TCanvas* c1 = new TCanvas("c1", "c1", 800, 600); - TH1* frame = c1->DrawFrame(-1, -0.049, 50, 1.049); + TH1* frame = c1->DrawFrame(-50, -0.049, 50, 1.049); frame->SetTitle(";Depth(um);Charge Collection Seed / Share / Eff"); TLegend* leg = new TLegend(0.15, 0.5, 0.4, 0.85); leg->SetFillStyle(0); diff --git a/Detectors/Upgrades/ITS3/simulation/src/ChipSimResponse.cxx b/Detectors/Upgrades/ITS3/simulation/src/ChipSimResponse.cxx index 1c4f08438d4f2..72b291fb0d653 100644 --- a/Detectors/Upgrades/ITS3/simulation/src/ChipSimResponse.cxx +++ b/Detectors/Upgrades/ITS3/simulation/src/ChipSimResponse.cxx @@ -25,61 +25,66 @@ void ChipSimResponse::initData(int tableNumber, std::string dataPath, const bool void ChipSimResponse::computeCentreFromData() { - std::vector zVec, qVec; const int npix = o2::itsmft::AlpideRespSimMat::getNPix(); + std::vector zVec, effVec; + zVec.reserve(mNBinDpt); + effVec.reserve(mNBinDpt); for (int iz = 0; iz < mNBinDpt; ++iz) { - size_t bin = iz + mNBinDpt * (0 + mNBinRow * 0); - const auto& mat = mData[bin]; - float val = mat.getValue(npix / 2, npix / 2); - float gz = mDptMin + iz / mStepInvDpt; - zVec.push_back(gz); - qVec.push_back(val); + int rev = mNBinDpt - 1 - iz; + float z = mDptMin + iz / mStepInvDpt; + float sum = 0.f; + const auto& mat = mData[rev]; + for (int ix = 0; ix < npix; ++ix) { + for (int iy = 0; iy < npix; ++iy) { + sum += mat.getValue(ix, iy); + } + } + zVec.push_back(z); + effVec.push_back(sum); } - std::vector> zqPairs; - for (size_t i = 0; i < zVec.size(); ++i) { - zqPairs.emplace_back(zVec[i], qVec[i]); - } - std::sort(zqPairs.begin(), zqPairs.end()); - zVec.clear(); - qVec.clear(); - for (auto& p : zqPairs) { - zVec.push_back(p.first); - qVec.push_back(p.second); - } + struct Bin { + float z0, z1, q0, q1, dq; + }; + std::vector bins; + bins.reserve(zVec.size() - 1); - struct BinInfo { float z0, z1, q0, q1, dq; }; - std::vector bins; float totQ = 0.f; for (size_t i = 0; i + 1 < zVec.size(); ++i) { float z0 = zVec[i], z1 = zVec[i + 1]; - float q0 = qVec[i], q1 = qVec[i + 1]; - float dz = z1 - z0; - float dq = 0.5f * (q0 + q1) * dz; + float q0 = effVec[i], q1 = effVec[i + 1]; + float dq = 0.5f * (q0 + q1) * (z1 - z0); bins.push_back({z0, z1, q0, q1, dq}); totQ += dq; } - if (totQ <= 0.f) { mRespCentreDep = 0.f; return; } + + if (totQ <= 0.f) { + mRespCentreDep = mDptMin; + return; + } float halfQ = 0.5f * totQ; float cumQ = 0.f; - for (const auto& b : bins) { - if (cumQ + b.dq < halfQ) { cumQ += b.dq; continue; } - float qSlope = (b.q1 - b.q0) / (b.z1 - b.z0); + for (auto& b : bins) { + if (cumQ + b.dq < halfQ) { + cumQ += b.dq; + continue; + } float dz = b.z1 - b.z0; - float A = qSlope * 0.5f; - float B = b.q0; - float C = cumQ - halfQ; - float disc = B * B - 4.f * A * C; + float slope = (b.q1 - b.q0) / dz; + float disc = b.q0 * b.q0 - 2.f * slope * (cumQ - halfQ); + float x; - if (disc >= 0.f && std::abs(A) > 1.e-12f) - x = (-B + std::sqrt(disc)) / (2.f * A); - else + if (disc >= 0.f && std::abs(slope) > 1e-6f) { + x = (-b.q0 + std::sqrt(disc)) / slope; + } else { x = (halfQ - cumQ) / b.q0; + } x = std::clamp(x, 0.f, dz); mRespCentreDep = b.z0 + x; return; } + mRespCentreDep = mDptMax; } diff --git a/core_dump_74974 b/core_dump_74974 deleted file mode 100644 index e69de29bb2d1d..0000000000000