From 926790d78b3c05a6dd85e30d62141f0851da6426 Mon Sep 17 00:00:00 2001 From: cmargalejo Date: Thu, 11 Jun 2026 22:45:12 +0200 Subject: [PATCH 1/3] Add schema evolution rules for vector to vector change fSignalTime and fSignalCharge changed from vector to vector in ClassDef version 4 (PR#109) without schema evolution rules. Reading older files misinterprets the 4-byte float payload as 8-byte doubles, which leads to huge bogus allocations (detectorlib#125). These #pragma read rules give ROOT an explicit conversion for on-disk versions <= 3. They can only take effect when the input file contains the StreamerInfo of the on-disk class version. Co-Authored-By: Claude Opus 4.8 --- inc/TRestDetectorSignal.h | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/inc/TRestDetectorSignal.h b/inc/TRestDetectorSignal.h index c72ee08b..08f0fb47 100644 --- a/inc/TRestDetectorSignal.h +++ b/inc/TRestDetectorSignal.h @@ -166,4 +166,22 @@ class TRestDetectorSignal { ClassDef(TRestDetectorSignal, 4); }; + +// Schema evolution: fSignalTime and fSignalCharge changed from vector to +// vector in ClassDef v4 (PR#109, March 2024). Files written with ClassDef +// version <= 3 store the float layout; these rules tell ROOT how to convert on read. +// Note: the rules can only fire when the input file contains the StreamerInfo of the +// on-disk version of this class. See rest-for-physics/detectorlib#125. +#pragma read \ + sourceClass="TRestDetectorSignal" version="[-3]" \ + source="std::vector fSignalTime" \ + targetClass="TRestDetectorSignal" target="fSignalTime" \ + code="{ fSignalTime.assign(onfile.fSignalTime.begin(), onfile.fSignalTime.end()); }" + +#pragma read \ + sourceClass="TRestDetectorSignal" version="[-3]" \ + source="std::vector fSignalCharge" \ + targetClass="TRestDetectorSignal" target="fSignalCharge" \ + code="{ fSignalCharge.assign(onfile.fSignalCharge.begin(), onfile.fSignalCharge.end()); }" + #endif From afefb809755c6cababa5b610ecb604745876012a Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 12 Jun 2026 09:55:09 +0000 Subject: [PATCH 2/3] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- inc/TRestDetectorSignal.h | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/inc/TRestDetectorSignal.h b/inc/TRestDetectorSignal.h index 08f0fb47..afb87c6d 100644 --- a/inc/TRestDetectorSignal.h +++ b/inc/TRestDetectorSignal.h @@ -172,16 +172,12 @@ class TRestDetectorSignal { // version <= 3 store the float layout; these rules tell ROOT how to convert on read. // Note: the rules can only fire when the input file contains the StreamerInfo of the // on-disk version of this class. See rest-for-physics/detectorlib#125. -#pragma read \ - sourceClass="TRestDetectorSignal" version="[-3]" \ - source="std::vector fSignalTime" \ - targetClass="TRestDetectorSignal" target="fSignalTime" \ - code="{ fSignalTime.assign(onfile.fSignalTime.begin(), onfile.fSignalTime.end()); }" - -#pragma read \ - sourceClass="TRestDetectorSignal" version="[-3]" \ - source="std::vector fSignalCharge" \ - targetClass="TRestDetectorSignal" target="fSignalCharge" \ - code="{ fSignalCharge.assign(onfile.fSignalCharge.begin(), onfile.fSignalCharge.end()); }" +#pragma read sourceClass = "TRestDetectorSignal" version = "[-3]" source = \ + "std::vector fSignalTime" targetClass = "TRestDetectorSignal" target = "fSignalTime" code = \ + "{ fSignalTime.assign(onfile.fSignalTime.begin(), onfile.fSignalTime.end()); }" + +#pragma read sourceClass = "TRestDetectorSignal" version = "[-3]" source = \ + "std::vector fSignalCharge" targetClass = "TRestDetectorSignal" target = "fSignalCharge" code = \ + "{ fSignalCharge.assign(onfile.fSignalCharge.begin(), onfile.fSignalCharge.end()); }" #endif From 674a9049010790b2486541b1c5f7435e5dacfc7e Mon Sep 17 00:00:00 2001 From: cmargalejo Date: Fri, 12 Jun 2026 15:43:13 +0200 Subject: [PATCH 3/3] Trigger CI: pick up restG4 validation reference fix The validation workflows cache the build with key BRANCH_NAME-sha, so a re-run cannot pick up the restG4 fix (rest-for-physics/restG4#148); only a new commit invalidates the cache.