From 2c733e0e549b33bc91760a7cd668479b12b0e83b Mon Sep 17 00:00:00 2001 From: Alvaro Ezquerro Date: Tue, 9 Sep 2025 11:11:05 +0200 Subject: [PATCH 1/3] Add secondary spatial observable for generation of gain map --- .../framework/analysis/inc/TRestDataSetGainMap.h | 12 +++++++++++- .../analysis/src/TRestDataSetGainMap.cxx | 16 ++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/source/framework/analysis/inc/TRestDataSetGainMap.h b/source/framework/analysis/inc/TRestDataSetGainMap.h index 11b2d0d07..d87352bdb 100644 --- a/source/framework/analysis/inc/TRestDataSetGainMap.h +++ b/source/framework/analysis/inc/TRestDataSetGainMap.h @@ -52,6 +52,12 @@ class TRestDataSetGainMap : public TRestMetadata { /// Observable that will be used to segmentize the gain map in the y direction std::string fSpatialObservableY = ""; //< + /// Secondary observable that will be used to segmentize the gain map in the x direction (if needed) + std::string fSpatialObservableXSecondary = ""; //< + + /// Secondary observable that will be used to segmentize the gain map in the y direction (if needed) + std::string fSpatialObservableYSecondary = ""; //< + /// List of modules std::vector fModulesCal = {}; //< @@ -83,6 +89,8 @@ class TRestDataSetGainMap : public TRestMetadata { std::string GetObservable() const { return fObservable; } std::string GetSpatialObservableX() const { return fSpatialObservableX; } std::string GetSpatialObservableY() const { return fSpatialObservableY; } + std::string GetSpatialObservableXSecondary() const { return fSpatialObservableXSecondary; } + std::string GetSpatialObservableYSecondary() const { return fSpatialObservableYSecondary; } TRestCut* GetCut() const { return fCut; } Module* GetModule(const size_t index = 0); @@ -119,7 +127,7 @@ class TRestDataSetGainMap : public TRestMetadata { TRestDataSetGainMap(const char* configFilename, std::string name = ""); ~TRestDataSetGainMap(); - ClassDefOverride(TRestDataSetGainMap, 2); + ClassDefOverride(TRestDataSetGainMap, 3); class Module { private: @@ -223,6 +231,8 @@ class TRestDataSetGainMap : public TRestMetadata { std::string GetObservable() const { return p->fObservable; } std::string GetSpatialObservableX() const { return p->fSpatialObservableX; } std::string GetSpatialObservableY() const { return p->fSpatialObservableY; } + std::string GetSpatialObservableXSecondary() const { return p->fSpatialObservableXSecondary; } + std::string GetSpatialObservableYSecondary() const { return p->fSpatialObservableYSecondary; } inline std::string GetModuleDefinitionCut() const { return fDefinitionCut; } Int_t GetNumberOfSegmentsX() const { return fNumberOfSegmentsX; } Int_t GetNumberOfSegmentsY() const { return fNumberOfSegmentsY; } diff --git a/source/framework/analysis/src/TRestDataSetGainMap.cxx b/source/framework/analysis/src/TRestDataSetGainMap.cxx index 499199cdc..9ffd2ce4b 100644 --- a/source/framework/analysis/src/TRestDataSetGainMap.cxx +++ b/source/framework/analysis/src/TRestDataSetGainMap.cxx @@ -430,6 +430,8 @@ TRestDataSetGainMap& TRestDataSetGainMap::operator=(TRestDataSetGainMap& src) { fObservable = src.GetObservable(); fSpatialObservableX = src.GetSpatialObservableX(); fSpatialObservableY = src.GetSpatialObservableY(); + fSpatialObservableXSecondary = src.GetSpatialObservableXSecondary(); + fSpatialObservableYSecondary = src.GetSpatialObservableYSecondary(); fCut = src.GetCut(); fModulesCal.clear(); for (auto pID : src.GetPlaneIDs()) @@ -531,6 +533,10 @@ void TRestDataSetGainMap::PrintMetadata() { RESTMetadata << " Calibration observable: " << fObservable << RESTendl; RESTMetadata << " Spatial observable X: " << fSpatialObservableX << RESTendl; RESTMetadata << " Spatial observable Y: " << fSpatialObservableY << RESTendl; + if (!fSpatialObservableXSecondary.empty()) + RESTMetadata << " Secondary spatial observable X: " << fSpatialObservableXSecondary << RESTendl; + if (!fSpatialObservableYSecondary.empty()) + RESTMetadata << " Secondary spatial observable Y: " << fSpatialObservableYSecondary << RESTendl; RESTMetadata << "-----------------------------------------------" << RESTendl; for (auto& i : fModulesCal) i.Print(); RESTMetadata << "***********************************************" << RESTendl; @@ -729,6 +735,10 @@ void TRestDataSetGainMap::Module::GenerateGainMap() { obsList.push_back(p->GetObservable()); obsList.push_back(p->GetSpatialObservableX()); obsList.push_back(p->GetSpatialObservableY()); + if (!p->GetSpatialObservableXSecondary().empty()) + obsList.push_back(p->GetSpatialObservableXSecondary()); + if (!p->GetSpatialObservableYSecondary().empty()) + obsList.push_back(p->GetSpatialObservableYSecondary()); // look for observables (characterized by having a _ in the name) in the definition cut auto modDefCutObs = TRestTools::GetObservablesInString(fDefinitionCut, true); @@ -831,6 +841,12 @@ void TRestDataSetGainMap::Module::GenerateGainMap() { if (!GetSpatialObservableY().empty()) segment_cut += "&&" + GetSpatialObservableY() + ">=" + std::to_string(yLower) + "&&" + GetSpatialObservableY() + "<" + std::to_string(yUpper); + if (!GetSpatialObservableXSecondary().empty()) + segment_cut += "&&" + GetSpatialObservableXSecondary() + ">=" + std::to_string(xLower) + + "&&" + GetSpatialObservableXSecondary() + "<" + std::to_string(xUpper); + if (!GetSpatialObservableYSecondary().empty()) + segment_cut += "&&" + GetSpatialObservableYSecondary() + ">=" + std::to_string(yLower) + + "&&" + GetSpatialObservableYSecondary() + "<" + std::to_string(yUpper); if (!fDefinitionCut.empty()) segment_cut += "&&" + fDefinitionCut; if (segment_cut.empty()) segment_cut = "1"; RESTExtreme << "Segment[" << i << "][" << j << "] cut: " << segment_cut << p->RESTendl; From 08af633ef03f8c429d03aa8cfc874e3efc395de4 Mon Sep 17 00:00:00 2001 From: AlvaroEzq Date: Tue, 30 Sep 2025 14:45:00 +0200 Subject: [PATCH 2/3] add option to show/hide gain number in DrawGainMap --- source/framework/analysis/inc/TRestDataSetGainMap.h | 2 +- source/framework/analysis/src/TRestDataSetGainMap.cxx | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/source/framework/analysis/inc/TRestDataSetGainMap.h b/source/framework/analysis/inc/TRestDataSetGainMap.h index d87352bdb..97e93520e 100644 --- a/source/framework/analysis/inc/TRestDataSetGainMap.h +++ b/source/framework/analysis/inc/TRestDataSetGainMap.h @@ -253,7 +253,7 @@ class TRestDataSetGainMap : public TRestMetadata { void DrawLinearFit(const TVector2& position, TCanvas* c = nullptr); void DrawLinearFit(const int index_x, const int index_y, TCanvas* c = nullptr); - void DrawGainMap(const int peakNumber = 0, const bool fullModuleAsRef = true); + void DrawGainMap(const int peakNumber = 0, const bool fullModuleAsRef = true, const bool showText = true); void Refit(const TVector2& position, const double energy, const TVector2& range); void Refit(const size_t x, const size_t y, const size_t peakNumber, const TVector2& range); diff --git a/source/framework/analysis/src/TRestDataSetGainMap.cxx b/source/framework/analysis/src/TRestDataSetGainMap.cxx index 9ffd2ce4b..7f7c26eae 100644 --- a/source/framework/analysis/src/TRestDataSetGainMap.cxx +++ b/source/framework/analysis/src/TRestDataSetGainMap.cxx @@ -1456,8 +1456,9 @@ void TRestDataSetGainMap::Module::DrawLinearFit(TCanvas* c) { /// \param fullModuleAsRef If true, it will use the peak position at the full module spectrum /// as reference for the gain map. If false, it will use the centered segment of the module /// as reference. +/// \param showText If true, it will show the gain value in each segment. /// -void TRestDataSetGainMap::Module::DrawGainMap(const int peakNumber, bool fullModuleAsRef) { +void TRestDataSetGainMap::Module::DrawGainMap(const int peakNumber, const bool fullModuleAsRef, const bool showText) { if (peakNumber < 0 || peakNumber >= (int)fEnergyPeaks.size()) { RESTError << "Peak number out of range (peakNumber should be between 0 and " << fEnergyPeaks.size() - 1 << " )" << p->RESTendl; @@ -1509,7 +1510,9 @@ void TRestDataSetGainMap::Module::DrawGainMap(const int peakNumber, bool fullMod hGainMap->SetStats(0); hGainMap->Draw("colz"); hGainMap->SetBarOffset(0.2); - hGainMap->Draw("TEXT SAME"); + if (showText) { + hGainMap->Draw("TEXT SAME"); + } } ///////////////////////////////////////////// From 378db13d736e5c8505c9d92ff9aa09a23fbde369 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 30 Sep 2025 12:45:27 +0000 Subject: [PATCH 3/3] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- source/framework/analysis/inc/TRestDataSetGainMap.h | 3 ++- source/framework/analysis/src/TRestDataSetGainMap.cxx | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/source/framework/analysis/inc/TRestDataSetGainMap.h b/source/framework/analysis/inc/TRestDataSetGainMap.h index 97e93520e..c291fdc2a 100644 --- a/source/framework/analysis/inc/TRestDataSetGainMap.h +++ b/source/framework/analysis/inc/TRestDataSetGainMap.h @@ -253,7 +253,8 @@ class TRestDataSetGainMap : public TRestMetadata { void DrawLinearFit(const TVector2& position, TCanvas* c = nullptr); void DrawLinearFit(const int index_x, const int index_y, TCanvas* c = nullptr); - void DrawGainMap(const int peakNumber = 0, const bool fullModuleAsRef = true, const bool showText = true); + void DrawGainMap(const int peakNumber = 0, const bool fullModuleAsRef = true, + const bool showText = true); void Refit(const TVector2& position, const double energy, const TVector2& range); void Refit(const size_t x, const size_t y, const size_t peakNumber, const TVector2& range); diff --git a/source/framework/analysis/src/TRestDataSetGainMap.cxx b/source/framework/analysis/src/TRestDataSetGainMap.cxx index 7f7c26eae..f05a09168 100644 --- a/source/framework/analysis/src/TRestDataSetGainMap.cxx +++ b/source/framework/analysis/src/TRestDataSetGainMap.cxx @@ -1458,7 +1458,8 @@ void TRestDataSetGainMap::Module::DrawLinearFit(TCanvas* c) { /// as reference. /// \param showText If true, it will show the gain value in each segment. /// -void TRestDataSetGainMap::Module::DrawGainMap(const int peakNumber, const bool fullModuleAsRef, const bool showText) { +void TRestDataSetGainMap::Module::DrawGainMap(const int peakNumber, const bool fullModuleAsRef, + const bool showText) { if (peakNumber < 0 || peakNumber >= (int)fEnergyPeaks.size()) { RESTError << "Peak number out of range (peakNumber should be between 0 and " << fEnergyPeaks.size() - 1 << " )" << p->RESTendl;