From ec30a77e3e7ec336cf987f7574d21ff2397fcdb8 Mon Sep 17 00:00:00 2001 From: Raffaella De Vita Date: Thu, 11 Sep 2025 10:27:19 -0400 Subject: [PATCH] propagate DSC2 rollover fix to RUN::scaler.fcup and RUN::scaler.fcupgated --- .../analysis/postprocess/RebuildScalers.java | 11 +++++----- .../org/jlab/detector/scalers/DaqScalers.java | 21 +++++++++++++++++++ 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/common-tools/clas-analysis/src/main/java/org/jlab/analysis/postprocess/RebuildScalers.java b/common-tools/clas-analysis/src/main/java/org/jlab/analysis/postprocess/RebuildScalers.java index df2234ffbd..9dfa8785b6 100644 --- a/common-tools/clas-analysis/src/main/java/org/jlab/analysis/postprocess/RebuildScalers.java +++ b/common-tools/clas-analysis/src/main/java/org/jlab/analysis/postprocess/RebuildScalers.java @@ -108,6 +108,12 @@ public static void main(String[] args) { if (ccdb_dsc.getIntValue("frequency", 0,0,0) < 2e5) { ds = DaqScalers.create(rawScalerBank, ccdb_fcup, ccdb_slm, ccdb_hel, ccdb_dsc); } + else if (seq != null) { + // Use rollover-corrected clock if available and clock's freq > 200 kHz + long ut = seq.get(event).dsc2.getClock(); + long gt = seq.get(event).dsc2.getGatedClock(); + ds = DaqScalers.create(rawScalerBank, ccdb_fcup, ccdb_slm, ccdb_hel, ccdb_dsc, ut, gt); + } else { // Inputs for calculation run duration in seconds, since for // some run periods the DSC2 clock rolls over during a run. @@ -116,11 +122,6 @@ public static void main(String[] args) { ds = DaqScalers.create(rawScalerBank, ccdb_fcup, ccdb_slm, ccdb_hel, rst, uet); } - if (seq != null) { - ds.dsc2.setClock(seq.get(event).dsc2.getClock()); - ds.dsc2.setGatedClock(seq.get(event).dsc2.getClock()); - } - runScalerBank = ds.createRunBank(writer.getSchemaFactory()); helScalerBank = ds.createHelicityBank(writer.getSchemaFactory()); diff --git a/common-tools/clas-detector/src/main/java/org/jlab/detector/scalers/DaqScalers.java b/common-tools/clas-detector/src/main/java/org/jlab/detector/scalers/DaqScalers.java index 539839ae29..abb2793e0c 100644 --- a/common-tools/clas-detector/src/main/java/org/jlab/detector/scalers/DaqScalers.java +++ b/common-tools/clas-detector/src/main/java/org/jlab/detector/scalers/DaqScalers.java @@ -146,6 +146,27 @@ public static DaqScalers create(Bank rawScalerBank,IndexedTable fcupTable,Indexe return DaqScalers.create(rawScalerBank,fcupTable,slmTable,helTable,dsc2.getGatedClockSeconds()); } + /** + * Same as create(Bank,IndexedTable,IndexedTable,IndexedTable), except + * relies on clock, gatedClock values. Used with clock rollover correction + * + * @param rawScalerBank HIPO RAW::scaler bank + * @param fcupTable /runcontrol/fcup from CCDB + * @param slmTable /runcontrol/slm from CCDB + * @param helTable /runcontrol/helicity from CCDB + * @param dscTable /daq/config/scalers/dsc1 from CCDB + * @param clock (rollover-corrected) DSC2 clock's count + * @param gatedClock (rollover-corrected) DSC2 gated clock's count + * @return + */ + public static DaqScalers create(Bank rawScalerBank,IndexedTable fcupTable,IndexedTable slmTable,IndexedTable helTable,IndexedTable dscTable,long clock,long gatedClock) { + DaqScalers ds = DaqScalers.create(rawScalerBank,fcupTable,slmTable,helTable,dscTable); + ds.dsc2.setClock(clock); + ds.dsc2.setGatedClock(gatedClock); + ds.dsc2.calibrate(fcupTable, slmTable); + return ds; + } + /** * * @param conman