From e4af603c4068ebcde8aafab0acddaa9fe9abe563 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Wed, 22 Apr 2026 18:01:54 -0400 Subject: [PATCH 01/36] add convenience method --- .../src/main/java/org/jlab/detector/decode/CLASDecoder.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/CLASDecoder.java b/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/CLASDecoder.java index 667d8ab586..19374cfac3 100644 --- a/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/CLASDecoder.java +++ b/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/CLASDecoder.java @@ -792,4 +792,8 @@ public Event getDecodedEvent(EvioDataEvent rawEvent, int run, int counter, Doubl return decodedEvent; } + + public Event getDecodedEvent(EvioDataEvent rawEvent) { + return getDecodedEvent(rawEvent, -1, -1, null, null); + } } From f8b341f4454014697381c924664afe79be737179 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Wed, 22 Apr 2026 18:06:05 -0400 Subject: [PATCH 02/36] remove unused stuff --- .../main/java/org/jlab/detector/decode/CLASDecoder.java | 8 -------- 1 file changed, 8 deletions(-) diff --git a/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/CLASDecoder.java b/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/CLASDecoder.java index 19374cfac3..4a89b73a91 100644 --- a/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/CLASDecoder.java +++ b/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/CLASDecoder.java @@ -15,8 +15,6 @@ import org.jlab.io.base.DataEvent; import org.jlab.io.evio.EvioDataEvent; -import org.jlab.io.hipo.HipoDataEvent; -import org.jlab.io.hipo.HipoDataSync; import org.jlab.jnp.hipo4.data.Bank; import org.jlab.jnp.hipo4.data.Event; @@ -38,8 +36,6 @@ public class CLASDecoder { protected SchemaFactory schemaFactory = new SchemaFactory(); private CodaEventDecoder codaDecoder = null; private List dataList = new ArrayList<>(); - private HipoDataSync writer = null; - private HipoDataEvent hipoEvent = null; private boolean isRunNumberFixed = false; private int decoderDebugMode = 0; private ModeAHDC ahdcExtractor = new ModeAHDC(); @@ -48,8 +44,6 @@ public class CLASDecoder { public CLASDecoder(boolean development){ codaDecoder = new CodaEventDecoder(); detectorDecoder = new DetectorEventDecoder(development); - writer = new HipoDataSync(); - hipoEvent = (HipoDataEvent) writer.createEvent(); String dir = ClasUtilsFile.getResourceDir("CLAS12DIR", "etc/bankdefs/hipo4"); schemaFactory.initFromDirectory(dir); } @@ -57,8 +51,6 @@ public CLASDecoder(boolean development){ public CLASDecoder(){ codaDecoder = new CodaEventDecoder(); detectorDecoder = new DetectorEventDecoder(); - writer = new HipoDataSync(); - hipoEvent = (HipoDataEvent) writer.createEvent(); String dir = ClasUtilsFile.getResourceDir("CLAS12DIR", "etc/bankdefs/hipo4"); schemaFactory.initFromDirectory(dir); } From 719598570e4a2856105e0b8cab0b7286b953d3f7 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Wed, 22 Apr 2026 19:37:28 -0400 Subject: [PATCH 03/36] add decoding engine --- .../org/jlab/clas/reco/DecodingEngine.java | 91 +++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 common-tools/clas-reco/src/main/java/org/jlab/clas/reco/DecodingEngine.java diff --git a/common-tools/clas-reco/src/main/java/org/jlab/clas/reco/DecodingEngine.java b/common-tools/clas-reco/src/main/java/org/jlab/clas/reco/DecodingEngine.java new file mode 100644 index 0000000000..cf19e00b14 --- /dev/null +++ b/common-tools/clas-reco/src/main/java/org/jlab/clas/reco/DecodingEngine.java @@ -0,0 +1,91 @@ +package org.jlab.clas.reco; + +import java.util.Set; +import java.util.HashSet; +import java.nio.ByteBuffer; +import org.jlab.clara.base.ClaraUtil; +import org.jlab.clara.engine.Engine; +import org.jlab.clara.engine.EngineData; +import org.jlab.clara.engine.EngineDataType; +import org.jlab.clara.engine.EngineStatus; +import org.jlab.detector.decode.CLASDecoder; +import org.jlab.io.evio.EvioDataEvent; +import org.jlab.io.hipo.HipoDataEvent; +import org.jlab.jnp.hipo4.data.SchemaFactory; +import org.json.JSONObject; + +/** + * + * @author baltzell + */ +public class DecodingEngine implements Engine { + + SchemaFactory schema; + CLASDecoder decoder; + + public DecodingEngine() { + schema = new SchemaFactory(); + schema.initFromDirectory(System.getenv("CLAS12DIR") + "/etc/bankdefs/hipo4"); + } + + @Override + public EngineData executeGroup(Set set) { return null; } + @Override + public Set getStates() { return new HashSet<>(); } + @Override + public String getDescription() { return "decoder engine"; } + @Override + public String getVersion() { return "1.0"; } + @Override + public String getAuthor() { return "baltzell"; } + @Override + public void reset() {} + @Override + public void destroy() {} + + @Override + public Set getInputDataTypes() { + return ClaraUtil.buildDataTypes(Clas12Types.EVIO); + } + + @Override + public Set getOutputDataTypes() { + return ClaraUtil.buildDataTypes(Clas12Types.HIPO); + } + + @Override + public EngineData configure(EngineData ed) { + JSONObject j = new JSONObject(ed.getData()); + if (j.has("variation")) decoder.setVariation(j.getString("variation")); + if (j.has("timestamp")) decoder.setVariation(j.getString("timestamp")); + return ed; + } + + @Override + public EngineData execute(EngineData input) { + EngineData output = input; + EvioDataEvent evio; + HipoDataEvent hipo; + try { + ByteBuffer bb = (ByteBuffer) input.getData(); + evio = new EvioDataEvent(bb.array(), bb.order()); + } catch (Exception e) { + String msg = String.format("Error reading input event%n%n%s", ClaraUtil.reportException(e)); + output.setStatus(EngineStatus.ERROR); + output.setDescription(msg); + return output; + } + + try { + hipo = new HipoDataEvent(decoder.getDecodedEvent(evio),schema); + output.setData("binary/data-hipo", hipo.getHipoEvent()); + } catch (Exception e) { + String msg = String.format("Error processing input event%n%n%s", ClaraUtil.reportException(e)); + output.setStatus(EngineStatus.ERROR); + output.setDescription(msg); + return output; + } + return output; + } + +} From 98bb7ea997bb19dbb1b13ecbea1e9070f14b1196 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Wed, 22 Apr 2026 19:40:54 -0400 Subject: [PATCH 04/36] add it to the clara yaml --- etc/services/rgd-clarode.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/etc/services/rgd-clarode.yml b/etc/services/rgd-clarode.yml index b3612af29d..d70e0ec901 100644 --- a/etc/services/rgd-clarode.yml +++ b/etc/services/rgd-clarode.yml @@ -19,12 +19,14 @@ configuration: outputBankPrefix: "HB" io-services: reader: - class: org.jlab.io.clara.DecoderReader - name: DecoderReader + class: org.jlab.io.clara.EvioToEvioReader + name: EvioReader writer: class: org.jlab.io.clara.DecoderWriter name: DecoderWriter services: + - class: org.jlab.clas.reco.DecodingEngine + name: DECO - class: org.jlab.service.ai.DCDenoiseEngine name: DCDN - class: org.jlab.clas.swimtools.MagFieldsEngine From 2fbcf2eca2b8b41aec9e2057d699cc5dd2225128 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Wed, 22 Apr 2026 20:03:25 -0400 Subject: [PATCH 05/36] use a pool --- .../org/jlab/clas/reco/DecodingEngine.java | 22 ++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/common-tools/clas-reco/src/main/java/org/jlab/clas/reco/DecodingEngine.java b/common-tools/clas-reco/src/main/java/org/jlab/clas/reco/DecodingEngine.java index cf19e00b14..31dab691fd 100644 --- a/common-tools/clas-reco/src/main/java/org/jlab/clas/reco/DecodingEngine.java +++ b/common-tools/clas-reco/src/main/java/org/jlab/clas/reco/DecodingEngine.java @@ -3,6 +3,9 @@ import java.util.Set; import java.util.HashSet; import java.nio.ByteBuffer; +import java.nio.ByteOrder; +import java.util.concurrent.ArrayBlockingQueue; +import java.util.concurrent.BlockingQueue; import org.jlab.clara.base.ClaraUtil; import org.jlab.clara.engine.Engine; import org.jlab.clara.engine.EngineData; @@ -21,7 +24,8 @@ public class DecodingEngine implements Engine { SchemaFactory schema; - CLASDecoder decoder; + + BlockingQueue pool; public DecodingEngine() { schema = new SchemaFactory(); @@ -56,8 +60,13 @@ public Set getOutputDataTypes() { @Override public EngineData configure(EngineData ed) { JSONObject j = new JSONObject(ed.getData()); - if (j.has("variation")) decoder.setVariation(j.getString("variation")); - if (j.has("timestamp")) decoder.setVariation(j.getString("timestamp")); + pool = new ArrayBlockingQueue<>(64); + for (int i=0; i<64; i++) { + CLASDecoder d = new CLASDecoder(); + if (j.has("variation")) d.setVariation(j.getString("variation")); + if (j.has("timestamp")) d.setVariation(j.getString("timestamp")); + pool.add(d); + } return ed; } @@ -68,7 +77,8 @@ public EngineData execute(EngineData input) { HipoDataEvent hipo; try { ByteBuffer bb = (ByteBuffer) input.getData(); - evio = new EvioDataEvent(bb.array(), bb.order()); + //evio = new EvioDataEvent(bb.array(), bb.order()); + evio = new EvioDataEvent(bb.array(), ByteOrder.LITTLE_ENDIAN); } catch (Exception e) { String msg = String.format("Error reading input event%n%n%s", ClaraUtil.reportException(e)); output.setStatus(EngineStatus.ERROR); @@ -77,7 +87,9 @@ public EngineData execute(EngineData input) { } try { - hipo = new HipoDataEvent(decoder.getDecodedEvent(evio),schema); + CLASDecoder d = pool.take(); + hipo = new HipoDataEvent(d.getDecodedEvent(evio),schema); + pool.put(d); output.setData("binary/data-hipo", hipo.getHipoEvent()); } catch (Exception e) { String msg = String.format("Error processing input event%n%n%s", ClaraUtil.reportException(e)); From 3e55ec2998b019121798f1230633c64e65abe27f Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Wed, 22 Apr 2026 20:10:29 -0400 Subject: [PATCH 06/36] hmm --- .../src/main/java/org/jlab/io/clara/EvioToEvioReader.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common-tools/clara-io/src/main/java/org/jlab/io/clara/EvioToEvioReader.java b/common-tools/clara-io/src/main/java/org/jlab/io/clara/EvioToEvioReader.java index fb8303719a..372bd423a7 100644 --- a/common-tools/clara-io/src/main/java/org/jlab/io/clara/EvioToEvioReader.java +++ b/common-tools/clara-io/src/main/java/org/jlab/io/clara/EvioToEvioReader.java @@ -39,7 +39,7 @@ public int readEventCount() throws EventReaderException { @Override public ByteOrder readByteOrder() throws EventReaderException { - return reader.getFileByteOrder(); + return ByteOrder.LITTLE_ENDIAN; //reader.getFileByteOrder(); } @Override From 409dfe73680d71f97b3ae36c76688da8307d31e1 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Wed, 22 Apr 2026 20:20:03 -0400 Subject: [PATCH 07/36] allow decoder instances to share ConstantsManagers --- .../src/main/java/org/jlab/detector/decode/CLASDecoder.java | 4 ++++ .../java/org/jlab/detector/decode/DetectorEventDecoder.java | 6 ++++++ 2 files changed, 10 insertions(+) diff --git a/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/CLASDecoder.java b/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/CLASDecoder.java index 4a89b73a91..d537c5ae00 100644 --- a/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/CLASDecoder.java +++ b/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/CLASDecoder.java @@ -59,6 +59,10 @@ public SchemaFactory getSchemaFactory(){ return schemaFactory; } + public void shareManagers(CLASDecoder d) { + detectorDecoder.shareManagers(d.detectorDecoder); + } + public void setVariation(String variation) { detectorDecoder.setVariation(variation); } diff --git a/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/DetectorEventDecoder.java b/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/DetectorEventDecoder.java index 84ec0a6cf4..b689c0f854 100644 --- a/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/DetectorEventDecoder.java +++ b/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/DetectorEventDecoder.java @@ -80,6 +80,12 @@ public float getRcdbSolenoidScale() { getValue()).floatValue(); } + public void shareManagers(DetectorEventDecoder d) { + translationManager = d.translationManager; + fitterManager = d.fitterManager; + scalerManager = d.scalerManager; + } + public DetectorEventDecoder(){ this.initDecoder(); } From 891476b4d1b317dec2b9da708c98e2a3b7b27de4 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Wed, 22 Apr 2026 20:20:22 -0400 Subject: [PATCH 08/36] share ConstantsManagers --- .../src/main/java/org/jlab/clas/reco/DecodingEngine.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/common-tools/clas-reco/src/main/java/org/jlab/clas/reco/DecodingEngine.java b/common-tools/clas-reco/src/main/java/org/jlab/clas/reco/DecodingEngine.java index 31dab691fd..a66b1dc164 100644 --- a/common-tools/clas-reco/src/main/java/org/jlab/clas/reco/DecodingEngine.java +++ b/common-tools/clas-reco/src/main/java/org/jlab/clas/reco/DecodingEngine.java @@ -61,10 +61,12 @@ public Set getOutputDataTypes() { public EngineData configure(EngineData ed) { JSONObject j = new JSONObject(ed.getData()); pool = new ArrayBlockingQueue<>(64); + CLASDecoder d0 = new CLASDecoder(); for (int i=0; i<64; i++) { - CLASDecoder d = new CLASDecoder(); + CLASDecoder d = i==0 ? d0 : new CLASDecoder(); if (j.has("variation")) d.setVariation(j.getString("variation")); if (j.has("timestamp")) d.setVariation(j.getString("timestamp")); + if (i > 0) d.shareManagers(d0); pool.add(d); } return ed; From ff30fd3a23036c081f77e477e3d3e01fab49fad8 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Wed, 22 Apr 2026 20:23:38 -0400 Subject: [PATCH 09/36] kludge test --- .../src/main/java/org/jlab/io/clara/EvioToEvioReader.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common-tools/clara-io/src/main/java/org/jlab/io/clara/EvioToEvioReader.java b/common-tools/clara-io/src/main/java/org/jlab/io/clara/EvioToEvioReader.java index 372bd423a7..e4ae442101 100644 --- a/common-tools/clara-io/src/main/java/org/jlab/io/clara/EvioToEvioReader.java +++ b/common-tools/clara-io/src/main/java/org/jlab/io/clara/EvioToEvioReader.java @@ -53,6 +53,6 @@ public Object readEvent(int eventNumber) throws EventReaderException { @Override protected EngineDataType getDataType() { - return Clas12Types.EVIO; + return Clas12Types.HIPO; } } From 312afc8d409a538539ed7ecfa857a1ae98136bbf Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Wed, 22 Apr 2026 21:04:48 -0400 Subject: [PATCH 10/36] cleanup --- .../src/main/java/org/jlab/clas/reco/DecodingEngine.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/common-tools/clas-reco/src/main/java/org/jlab/clas/reco/DecodingEngine.java b/common-tools/clas-reco/src/main/java/org/jlab/clas/reco/DecodingEngine.java index a66b1dc164..2f018aafb0 100644 --- a/common-tools/clas-reco/src/main/java/org/jlab/clas/reco/DecodingEngine.java +++ b/common-tools/clas-reco/src/main/java/org/jlab/clas/reco/DecodingEngine.java @@ -62,10 +62,10 @@ public EngineData configure(EngineData ed) { JSONObject j = new JSONObject(ed.getData()); pool = new ArrayBlockingQueue<>(64); CLASDecoder d0 = new CLASDecoder(); + if (j.has("variation")) d0.setVariation(j.getString("variation")); + if (j.has("timestamp")) d0.setVariation(j.getString("timestamp")); for (int i=0; i<64; i++) { CLASDecoder d = i==0 ? d0 : new CLASDecoder(); - if (j.has("variation")) d.setVariation(j.getString("variation")); - if (j.has("timestamp")) d.setVariation(j.getString("timestamp")); if (i > 0) d.shareManagers(d0); pool.add(d); } From 2fa9257cf5646f67988f3ec85397c51ba08b3f58 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Thu, 23 Apr 2026 13:53:22 -0400 Subject: [PATCH 11/36] try this --- .../org/jlab/clas/reco/DecodingEngine.java | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/common-tools/clas-reco/src/main/java/org/jlab/clas/reco/DecodingEngine.java b/common-tools/clas-reco/src/main/java/org/jlab/clas/reco/DecodingEngine.java index 2f018aafb0..f263b1be15 100644 --- a/common-tools/clas-reco/src/main/java/org/jlab/clas/reco/DecodingEngine.java +++ b/common-tools/clas-reco/src/main/java/org/jlab/clas/reco/DecodingEngine.java @@ -24,14 +24,19 @@ public class DecodingEngine implements Engine { SchemaFactory schema; - BlockingQueue pool; + static Set edtypes = ClaraUtil.buildDataTypes( + Clas12Types.EVIO,Clas12Types.HIPO,EngineDataType.JSON,EngineDataType.STRING); public DecodingEngine() { schema = new SchemaFactory(); schema.initFromDirectory(System.getenv("CLAS12DIR") + "/etc/bankdefs/hipo4"); } - + + @Override + public Set getInputDataTypes() { return edtypes; } + @Override + public Set getOutputDataTypes() { return edtypes; } @Override public EngineData executeGroup(Set set) { return null; } @Override @@ -47,16 +52,6 @@ public void reset() {} @Override public void destroy() {} - @Override - public Set getInputDataTypes() { - return ClaraUtil.buildDataTypes(Clas12Types.EVIO); - } - - @Override - public Set getOutputDataTypes() { - return ClaraUtil.buildDataTypes(Clas12Types.HIPO); - } - @Override public EngineData configure(EngineData ed) { JSONObject j = new JSONObject(ed.getData()); From 7cc0094ef9cd029fe0feaf28dc0b96bc7ee7ab14 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Thu, 23 Apr 2026 14:38:25 -0400 Subject: [PATCH 12/36] inherit ConstantsManagers --- .../org/jlab/detector/decode/CLASDecoder.java | 11 ++++--- .../detector/decode/DetectorEventDecoder.java | 33 +++++++++++-------- .../org/jlab/clas/reco/DecodingEngine.java | 21 ++++++------ 3 files changed, 37 insertions(+), 28 deletions(-) diff --git a/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/CLASDecoder.java b/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/CLASDecoder.java index d537c5ae00..8f1e5c47c3 100644 --- a/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/CLASDecoder.java +++ b/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/CLASDecoder.java @@ -55,12 +55,15 @@ public CLASDecoder(){ schemaFactory.initFromDirectory(dir); } - public SchemaFactory getSchemaFactory(){ - return schemaFactory; + public CLASDecoder(CLASDecoder d) { + codaDecoder = new CodaEventDecoder(); + detectorDecoder = new DetectorEventDecoder(d.detectorDecoder); + String dir = ClasUtilsFile.getResourceDir("CLAS12DIR", "etc/bankdefs/hipo4"); + schemaFactory.initFromDirectory(dir); } - public void shareManagers(CLASDecoder d) { - detectorDecoder.shareManagers(d.detectorDecoder); + public SchemaFactory getSchemaFactory(){ + return schemaFactory; } public void setVariation(String variation) { diff --git a/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/DetectorEventDecoder.java b/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/DetectorEventDecoder.java index b689c0f854..f23295a459 100644 --- a/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/DetectorEventDecoder.java +++ b/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/DetectorEventDecoder.java @@ -18,6 +18,7 @@ */ public class DetectorEventDecoder { + boolean sharedManagers = false; ConstantsManager translationManager = new ConstantsManager(); ConstantsManager fitterManager = new ConstantsManager(); ConstantsManager scalerManager = new ConstantsManager(); @@ -45,6 +46,18 @@ public DetectorEventDecoder(boolean development){ } } + public DetectorEventDecoder(){ + this.initDecoder(); + } + + public DetectorEventDecoder(DetectorEventDecoder d) { + translationManager = d.translationManager; + fitterManager = d.fitterManager; + scalerManager = d.scalerManager; + sharedManagers = true; + initDecoder(); + } + public void setTimestamp(String timestamp) { translationManager.setTimeStamp(timestamp); fitterManager.setTimeStamp(timestamp); @@ -80,16 +93,6 @@ public float getRcdbSolenoidScale() { getValue()).floatValue(); } - public void shareManagers(DetectorEventDecoder d) { - translationManager = d.translationManager; - fitterManager = d.fitterManager; - scalerManager = d.scalerManager; - } - - public DetectorEventDecoder(){ - this.initDecoder(); - } - public final void initDecoderDev(){ keysTrans = Arrays.asList(new DetectorType[]{ DetectorType.HTCC,DetectorType.BST,DetectorType.RTPC} ); tablesTrans = Arrays.asList(new String[]{ "/daq/tt/clasdev/htcc","/daq/tt/clasdev/svt","/daq/tt/clasdev/rtpc" }); @@ -115,7 +118,6 @@ public final void initDecoder(){ "/daq/tt/rf","/daq/tt/bmt","/daq/tt/fmt","/daq/tt/rich2","/daq/tt/hel","/daq/tt/band","/daq/tt/rtpc", "/daq/tt/raster","/daq/tt/atof","/daq/tt/ahdc" }); - translationManager.init(tablesTrans); // ADC waveform fitter translation table keysFitter = Arrays.asList(new DetectorType[]{DetectorType.FTCAL,DetectorType.FTHODO,DetectorType.FTTRK,DetectorType.FTOF,DetectorType.LTCC, @@ -128,13 +130,16 @@ public final void initDecoder(){ "/daq/config/fmt","/daq/fadc/hel","/daq/fadc/rf","/daq/fadc/band","/daq/fadc/raster", "/daq/config/ahdc" }); - fitterManager.init(tablesFitter); // Data filter list keysFilter = Arrays.asList(new DetectorType[]{DetectorType.DC}); - scalerManager.init(Arrays.asList(new String[]{"/runcontrol/fcup","/runcontrol/slm","/runcontrol/hwp", - "/runcontrol/helicity","/daq/config/scalers/dsc1"})); + if (!sharedManagers) { + translationManager.init(tablesTrans); + fitterManager.init(tablesFitter); + scalerManager.init(Arrays.asList(new String[]{"/runcontrol/fcup","/runcontrol/slm","/runcontrol/hwp", + "/runcontrol/helicity","/daq/config/scalers/dsc1"})); + } keysMicromega = Arrays.asList(new DetectorType[]{DetectorType.BMT,DetectorType.FMT,DetectorType.FTTRK}); diff --git a/common-tools/clas-reco/src/main/java/org/jlab/clas/reco/DecodingEngine.java b/common-tools/clas-reco/src/main/java/org/jlab/clas/reco/DecodingEngine.java index f263b1be15..f5cfa9fd7a 100644 --- a/common-tools/clas-reco/src/main/java/org/jlab/clas/reco/DecodingEngine.java +++ b/common-tools/clas-reco/src/main/java/org/jlab/clas/reco/DecodingEngine.java @@ -23,10 +23,12 @@ */ public class DecodingEngine implements Engine { + static final int POOL_SIZE = 64; + static final Set ED_TYPES = ClaraUtil.buildDataTypes( + Clas12Types.EVIO,Clas12Types.HIPO,EngineDataType.JSON,EngineDataType.STRING); + SchemaFactory schema; BlockingQueue pool; - static Set edtypes = ClaraUtil.buildDataTypes( - Clas12Types.EVIO,Clas12Types.HIPO,EngineDataType.JSON,EngineDataType.STRING); public DecodingEngine() { schema = new SchemaFactory(); @@ -34,9 +36,9 @@ public DecodingEngine() { } @Override - public Set getInputDataTypes() { return edtypes; } + public Set getInputDataTypes() { return ED_TYPES; } @Override - public Set getOutputDataTypes() { return edtypes; } + public Set getOutputDataTypes() { return ED_TYPES; } @Override public EngineData executeGroup(Set set) { return null; } @Override @@ -55,20 +57,19 @@ public void destroy() {} @Override public EngineData configure(EngineData ed) { JSONObject j = new JSONObject(ed.getData()); - pool = new ArrayBlockingQueue<>(64); + pool = new ArrayBlockingQueue<>(POOL_SIZE); CLASDecoder d0 = new CLASDecoder(); if (j.has("variation")) d0.setVariation(j.getString("variation")); if (j.has("timestamp")) d0.setVariation(j.getString("timestamp")); - for (int i=0; i<64; i++) { - CLASDecoder d = i==0 ? d0 : new CLASDecoder(); - if (i > 0) d.shareManagers(d0); - pool.add(d); + for (int i=0; i Date: Thu, 23 Apr 2026 14:49:35 -0400 Subject: [PATCH 13/36] cleanup --- .../src/main/java/org/jlab/clas/reco/DecodingEngine.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/common-tools/clas-reco/src/main/java/org/jlab/clas/reco/DecodingEngine.java b/common-tools/clas-reco/src/main/java/org/jlab/clas/reco/DecodingEngine.java index f5cfa9fd7a..9bde5a9219 100644 --- a/common-tools/clas-reco/src/main/java/org/jlab/clas/reco/DecodingEngine.java +++ b/common-tools/clas-reco/src/main/java/org/jlab/clas/reco/DecodingEngine.java @@ -69,7 +69,6 @@ public EngineData configure(EngineData ed) { @Override public EngineData execute(EngineData input) { - EngineData output = input; EvioDataEvent evio; HipoDataEvent hipo; @@ -83,7 +82,6 @@ public EngineData execute(EngineData input) { output.setDescription(msg); return output; } - try { CLASDecoder d = pool.take(); hipo = new HipoDataEvent(d.getDecodedEvent(evio),schema); From 32bf136f51dfa2aa829423c4538e4249d4dbd341 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Thu, 23 Apr 2026 14:49:45 -0400 Subject: [PATCH 14/36] only check tables if not shared --- .../java/org/jlab/detector/decode/DetectorEventDecoder.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/DetectorEventDecoder.java b/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/DetectorEventDecoder.java index f23295a459..6a6ee5e309 100644 --- a/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/DetectorEventDecoder.java +++ b/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/DetectorEventDecoder.java @@ -133,17 +133,17 @@ public final void initDecoder(){ // Data filter list keysFilter = Arrays.asList(new DetectorType[]{DetectorType.DC}); + + keysMicromega = Arrays.asList(new DetectorType[]{DetectorType.BMT,DetectorType.FMT,DetectorType.FTTRK}); if (!sharedManagers) { translationManager.init(tablesTrans); fitterManager.init(tablesFitter); scalerManager.init(Arrays.asList(new String[]{"/runcontrol/fcup","/runcontrol/slm","/runcontrol/hwp", "/runcontrol/helicity","/daq/config/scalers/dsc1"})); + checkTables(); } - keysMicromega = Arrays.asList(new DetectorType[]{DetectorType.BMT,DetectorType.FMT,DetectorType.FTTRK}); - - checkTables(); } public void checkTables() { From 01c21581541895c6ecaa1761a8355f45a0d5d463 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Thu, 23 Apr 2026 18:02:20 -0400 Subject: [PATCH 15/36] higher ports on macos, cleanup process dpe process --- bin/run-clara | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bin/run-clara b/bin/run-clara index 05c0b6b148..aba818e9d2 100755 --- a/bin/run-clara +++ b/bin/run-clara @@ -152,6 +152,8 @@ then --session recon --max-cores $threads \ --max-sockets 5120 --report 5 \ 2>&1 | tee $CLARA_USER_DATA/log/dpe.log & + pid=$! + trap "kill -9 $pid; exit" EXIT set +v sleep 1 unset JAVA_OPTS From b7723206802c0e1292726fde02374c8396b1e178 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Thu, 23 Apr 2026 18:42:20 -0400 Subject: [PATCH 16/36] remove ineffective pid trap --- bin/run-clara | 2 -- 1 file changed, 2 deletions(-) diff --git a/bin/run-clara b/bin/run-clara index aba818e9d2..05c0b6b148 100755 --- a/bin/run-clara +++ b/bin/run-clara @@ -152,8 +152,6 @@ then --session recon --max-cores $threads \ --max-sockets 5120 --report 5 \ 2>&1 | tee $CLARA_USER_DATA/log/dpe.log & - pid=$! - trap "kill -9 $pid; exit" EXIT set +v sleep 1 unset JAVA_OPTS From f68d8b9b6e80e0e2df579ecd67012d6d994370da Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Thu, 23 Apr 2026 20:38:31 -0400 Subject: [PATCH 17/36] Revert "higher ports on macos, cleanup process dpe process" This reverts commit 3c0135ea67de5252184ebe50556acd775a3b7c72. --- bin/run-clara | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/run-clara b/bin/run-clara index 05c0b6b148..8e8e2f742e 100755 --- a/bin/run-clara +++ b/bin/run-clara @@ -153,7 +153,7 @@ then --max-sockets 5120 --report 5 \ 2>&1 | tee $CLARA_USER_DATA/log/dpe.log & set +v - sleep 1 + #echo "Sleeping 7 ......." && sleep 7 unset JAVA_OPTS set -v $CLARA_HOME/bin/clara-orchestrator \ From 7587bf8dece12d0fe3b0371183d517b51e7d3300 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Thu, 23 Apr 2026 21:07:17 -0400 Subject: [PATCH 18/36] Revert "fix job name" This reverts commit a5512a9c531aa723ab5b0a087d71a2ed9f75d9f8. --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 453bd9dd84..d22645d294 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -61,7 +61,7 @@ jobs: # build ############################################################################# - build_macos: + build-macos: strategy: fail-fast: true runs-on: macos-latest From 2aced8e7e17a36264c8547dd2fc729fb3c62e7e2 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Thu, 23 Apr 2026 21:07:27 -0400 Subject: [PATCH 19/36] Revert "decouple ubuntu/macos builds to reduce wait" This reverts commit 446a6a538e9839b52077796d84c78b73ceb5c88e. --- .github/workflows/ci.yml | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d22645d294..a81003d60c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -61,7 +61,7 @@ jobs: # build ############################################################################# - build-macos: + build_macos: strategy: fail-fast: true runs-on: macos-latest @@ -100,7 +100,11 @@ jobs: build: strategy: fail-fast: true - runs-on: ubuntu-latest + matrix: + runner: + - ubuntu-latest + - macos-latest + runs-on: ${{ matrix.runner }} steps: - uses: actions/checkout@v6 - uses: actions/setup-java@v5 @@ -127,7 +131,7 @@ jobs: tar czvf clara.tar.gz clara - uses: actions/upload-artifact@v7 with: - name: build_ubuntu-latest + name: build_${{ matrix.runner }} retention-days: 1 path: | coatjava.tar.gz From 3ddee53829e3081ebb2aac3403f2dbe66aa0d20f Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Thu, 23 Apr 2026 21:23:44 -0400 Subject: [PATCH 20/36] Revert "remove unnecessary reader class" This reverts commit 45e96c88ddebfb12a92cbd0a07313f8a85a1eda4. --- .../java/org/jlab/io/clara/Clas12Reader.java | 91 +++++++++++++++++++ .../org/jlab/io/clara/Clas12Reader.yaml | 11 +++ 2 files changed, 102 insertions(+) create mode 100644 common-tools/clara-io/src/main/java/org/jlab/io/clara/Clas12Reader.java create mode 100644 common-tools/clara-io/src/main/resources/org/jlab/io/clara/Clas12Reader.yaml diff --git a/common-tools/clara-io/src/main/java/org/jlab/io/clara/Clas12Reader.java b/common-tools/clara-io/src/main/java/org/jlab/io/clara/Clas12Reader.java new file mode 100644 index 0000000000..cd1f39dc95 --- /dev/null +++ b/common-tools/clara-io/src/main/java/org/jlab/io/clara/Clas12Reader.java @@ -0,0 +1,91 @@ +package org.jlab.io.clara; + +import java.nio.ByteBuffer; +import java.nio.ByteOrder; +import java.nio.file.Path; +import org.jlab.clara.engine.EngineDataType; +import org.jlab.clara.std.services.AbstractEventReaderService; +import org.jlab.clara.std.services.EventReaderException; +import org.jlab.coda.jevio.EvioException; +import org.jlab.detector.decode.CLASDecoder4; +import org.jlab.io.evio.EvioDataEvent; +import org.jlab.io.evio.EvioSource; +import org.jlab.jnp.hipo4.data.Event; +import org.jlab.jnp.hipo4.io.HipoReader; +import org.json.JSONObject; + +/** + * Emulate DecoderReader for EVIO files, or HipoToHipoReader for HIPO files. + * + * @author baltzell + */ +public class Clas12Reader extends AbstractEventReaderService { + + boolean evio; + CLASDecoder4 decoder; + private long maxEvents; + private Double torus; + private Double solenoid; + + @Override + protected Object createReader(Path path, JSONObject opts) throws EventReaderException { + if (path.toString().endsWith(".hipo")) { + evio = false; + HipoReader r = new HipoReader(); + r.open(path.toString()); + return r; + } + else { + evio = true; + EvioSource r = new EvioSource(); + r.open(path.toString()); + maxEvents = r.getEventCount(); + decoder = new CLASDecoder4(); + torus = opts.has("torus") ? opts.getDouble("torus") : null; + solenoid = opts.has("solenoid") ? opts.getDouble("solenoid") : null; + if (opts.has("variation")) decoder.setVariation(opts.getString("variation")); + if (opts.has("timestamp")) decoder.setTimestamp(opts.getString("timestamp")); + return r; + } + } + + @Override + protected void closeReader() { + if (evio) ((EvioSource)reader).close(); + else ((HipoReader)reader).close(); + } + + @Override + protected int readEventCount() throws EventReaderException { + if (evio) return ((EvioSource)reader).getEventCount(); + else return ((HipoReader)reader).getEventCount(); + } + + @Override + protected Object readEvent(int eventNumber) throws EventReaderException { + try { + if (evio) { + if (eventNumber++ >= maxEvents) return null; + ByteBuffer b = ((EvioSource)reader).getEventBuffer(eventNumber, true); + EvioDataEvent e = new EvioDataEvent(b.array(), readByteOrder()); + return decoder.getDecodedEvent(e, -1, eventNumber, torus, solenoid); + } + else { + return ((HipoReader)reader).getEvent(new Event(),eventNumber); + } + } catch (EvioException e) { + throw new EventReaderException(e); + } + } + + @Override + public ByteOrder readByteOrder() throws EventReaderException { + return ByteOrder.LITTLE_ENDIAN; + } + + @Override + protected EngineDataType getDataType() { + return Clas12Types.HIPO; + } + +} diff --git a/common-tools/clara-io/src/main/resources/org/jlab/io/clara/Clas12Reader.yaml b/common-tools/clara-io/src/main/resources/org/jlab/io/clara/Clas12Reader.yaml new file mode 100644 index 0000000000..30c6e00495 --- /dev/null +++ b/common-tools/clara-io/src/main/resources/org/jlab/io/clara/Clas12Reader.yaml @@ -0,0 +1,11 @@ +--- +name: Clas12Reader +engine: org.jlab.io.clara.Clas12Reader +type: java + +author: Nathan Baltzell +email: baltzell@jlab.org + +version: 0.1 +description: + Reads EVIO or HIPO events from a file, converting to HIPO via "decoding" if EVIO. From 80d4e857932662cd92ed64a3deb8030910163579 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Thu, 23 Apr 2026 21:43:59 -0400 Subject: [PATCH 21/36] Revert "remove example engine" This reverts commit d1dce3be33733e1d6d5b33e5274759f9eb43f9c0. --- .../clas/service/PulseExtractorEngine.java | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 common-tools/clas-reco/src/main/java/org/jlab/clas/service/PulseExtractorEngine.java diff --git a/common-tools/clas-reco/src/main/java/org/jlab/clas/service/PulseExtractorEngine.java b/common-tools/clas-reco/src/main/java/org/jlab/clas/service/PulseExtractorEngine.java new file mode 100644 index 0000000000..3f2dc5254e --- /dev/null +++ b/common-tools/clas-reco/src/main/java/org/jlab/clas/service/PulseExtractorEngine.java @@ -0,0 +1,53 @@ +package org.jlab.clas.service; + +import org.jlab.clas.reco.ReconstructionEngine; +import org.jlab.detector.pulse.Mode3; +import org.jlab.detector.pulse.Mode7; +import org.jlab.detector.pulse.ModeAHDC; +import org.jlab.io.base.DataEvent; + +/** + * An example of using a {@link org.jlab.detector.pulse.HipoExtractor} from a + * {@link org.jlab.clas.reco.ReconstructionEngine}. + * + * @author baltzell + */ +public class PulseExtractorEngine extends ReconstructionEngine { + + Mode3 mode3 = new Mode3(); + Mode3 mode7 = new Mode7(); + ModeAHDC mode_ahdc = new ModeAHDC(); + + public PulseExtractorEngine() { + super("PULSE", "baltzell", "0.0"); + } + + @Override + public boolean init() { + // If using a CCDB table, must register it here: + //requireConstants("/daq/config/ahdc"); + return true; + } + + @Override + public boolean processDataEvent(DataEvent event) { + + // No CCDB table, hardcoded parameters in the extractor: + //mode3.update(6, null, event, "BMT::wf", "BMT::adc"); + //mode7.update(80, null, event, "AHDC::wf", "AHDC::adc"); + mode_ahdc.update(30, null, event, "AHDC::wf", "AHDC::adc"); + + /* + // Requiring a CCDB table: + DataBank runConfig = event.getBank("RUN::config"); + if (runConfig.rows()>0) { + IndexedTable it = getConstantsManager().getConstants( + runConfig.getInt("run", 0), "/daq/config/ahdc"); + basic.update(136, it, event, "AHDC::wf", "AHDC::adc"); + } + */ + + return true; + } + +} From 6fd4a8f06aca3d77b7b00752756cc49f8ba5b685 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Fri, 24 Apr 2026 20:37:50 -0400 Subject: [PATCH 22/36] restore reported data type --- .../src/main/java/org/jlab/io/clara/EvioToEvioReader.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common-tools/clara-io/src/main/java/org/jlab/io/clara/EvioToEvioReader.java b/common-tools/clara-io/src/main/java/org/jlab/io/clara/EvioToEvioReader.java index e4ae442101..372bd423a7 100644 --- a/common-tools/clara-io/src/main/java/org/jlab/io/clara/EvioToEvioReader.java +++ b/common-tools/clara-io/src/main/java/org/jlab/io/clara/EvioToEvioReader.java @@ -53,6 +53,6 @@ public Object readEvent(int eventNumber) throws EventReaderException { @Override protected EngineDataType getDataType() { - return Clas12Types.HIPO; + return Clas12Types.EVIO; } } From 5d094fc3ae703d8df520d8af8b8bd3ab137cde80 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Mon, 27 Apr 2026 16:49:39 -0400 Subject: [PATCH 23/36] rename class --- .../clas/reco/{DecodingEngine.java => DecoderEngine.java} | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename common-tools/clas-reco/src/main/java/org/jlab/clas/reco/{DecodingEngine.java => DecoderEngine.java} (97%) diff --git a/common-tools/clas-reco/src/main/java/org/jlab/clas/reco/DecodingEngine.java b/common-tools/clas-reco/src/main/java/org/jlab/clas/reco/DecoderEngine.java similarity index 97% rename from common-tools/clas-reco/src/main/java/org/jlab/clas/reco/DecodingEngine.java rename to common-tools/clas-reco/src/main/java/org/jlab/clas/reco/DecoderEngine.java index 9bde5a9219..f95412d1bc 100644 --- a/common-tools/clas-reco/src/main/java/org/jlab/clas/reco/DecodingEngine.java +++ b/common-tools/clas-reco/src/main/java/org/jlab/clas/reco/DecoderEngine.java @@ -21,7 +21,7 @@ * * @author baltzell */ -public class DecodingEngine implements Engine { +public class DecoderEngine implements Engine { static final int POOL_SIZE = 64; static final Set ED_TYPES = ClaraUtil.buildDataTypes( @@ -30,7 +30,7 @@ public class DecodingEngine implements Engine { SchemaFactory schema; BlockingQueue pool; - public DecodingEngine() { + public DecoderEngine() { schema = new SchemaFactory(); schema.initFromDirectory(System.getenv("CLAS12DIR") + "/etc/bankdefs/hipo4"); } From 42708d32b9b93e8e1040dfbbf42b30c2b03f9b46 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Mon, 27 Apr 2026 16:53:08 -0400 Subject: [PATCH 24/36] undo --- bin/run-clara | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/run-clara b/bin/run-clara index 8e8e2f742e..05c0b6b148 100755 --- a/bin/run-clara +++ b/bin/run-clara @@ -153,7 +153,7 @@ then --max-sockets 5120 --report 5 \ 2>&1 | tee $CLARA_USER_DATA/log/dpe.log & set +v - #echo "Sleeping 7 ......." && sleep 7 + sleep 1 unset JAVA_OPTS set -v $CLARA_HOME/bin/clara-orchestrator \ From 80133f9c31aa2eb386fa06a5e65bda014bb16236 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Mon, 27 Apr 2026 16:53:46 -0400 Subject: [PATCH 25/36] fix rebase oops --- .github/workflows/ci.yml | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a81003d60c..b7f7bc2582 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -100,11 +100,7 @@ jobs: build: strategy: fail-fast: true - matrix: - runner: - - ubuntu-latest - - macos-latest - runs-on: ${{ matrix.runner }} + runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 - uses: actions/setup-java@v5 @@ -131,7 +127,7 @@ jobs: tar czvf clara.tar.gz clara - uses: actions/upload-artifact@v7 with: - name: build_${{ matrix.runner }} + name: build retention-days: 1 path: | coatjava.tar.gz From 176158a0d55fe03a2709393f13cff9d1ce09c653 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Mon, 27 Apr 2026 16:54:01 -0400 Subject: [PATCH 26/36] rename class --- etc/services/rgd-clarode.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/etc/services/rgd-clarode.yml b/etc/services/rgd-clarode.yml index d70e0ec901..e00a0b0395 100644 --- a/etc/services/rgd-clarode.yml +++ b/etc/services/rgd-clarode.yml @@ -25,7 +25,7 @@ io-services: class: org.jlab.io.clara.DecoderWriter name: DecoderWriter services: - - class: org.jlab.clas.reco.DecodingEngine + - class: org.jlab.clas.reco.DecoderEngine name: DECO - class: org.jlab.service.ai.DCDenoiseEngine name: DCDN From 74d5849ca90a631a109873bd50a3d0c52a2c3161 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Mon, 27 Apr 2026 16:55:14 -0400 Subject: [PATCH 27/36] fix rebase oops --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b7f7bc2582..453bd9dd84 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -127,7 +127,7 @@ jobs: tar czvf clara.tar.gz clara - uses: actions/upload-artifact@v7 with: - name: build + name: build_ubuntu-latest retention-days: 1 path: | coatjava.tar.gz From 87203c6a37698e04d9ec0ada53388c1526f7638f Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Mon, 27 Apr 2026 17:03:14 -0400 Subject: [PATCH 28/36] cleanup --- .../resources/org/jlab/io/clara/Clas12Reader.yaml | 11 ----------- 1 file changed, 11 deletions(-) delete mode 100644 common-tools/clara-io/src/main/resources/org/jlab/io/clara/Clas12Reader.yaml diff --git a/common-tools/clara-io/src/main/resources/org/jlab/io/clara/Clas12Reader.yaml b/common-tools/clara-io/src/main/resources/org/jlab/io/clara/Clas12Reader.yaml deleted file mode 100644 index 30c6e00495..0000000000 --- a/common-tools/clara-io/src/main/resources/org/jlab/io/clara/Clas12Reader.yaml +++ /dev/null @@ -1,11 +0,0 @@ ---- -name: Clas12Reader -engine: org.jlab.io.clara.Clas12Reader -type: java - -author: Nathan Baltzell -email: baltzell@jlab.org - -version: 0.1 -description: - Reads EVIO or HIPO events from a file, converting to HIPO via "decoding" if EVIO. From 281f62180fcb95b078255f23d74528ba2af21a93 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Mon, 27 Apr 2026 17:04:18 -0400 Subject: [PATCH 29/36] cleanup --- .../java/org/jlab/io/clara/Clas12Reader.java | 91 ------------------- 1 file changed, 91 deletions(-) delete mode 100644 common-tools/clara-io/src/main/java/org/jlab/io/clara/Clas12Reader.java diff --git a/common-tools/clara-io/src/main/java/org/jlab/io/clara/Clas12Reader.java b/common-tools/clara-io/src/main/java/org/jlab/io/clara/Clas12Reader.java deleted file mode 100644 index cd1f39dc95..0000000000 --- a/common-tools/clara-io/src/main/java/org/jlab/io/clara/Clas12Reader.java +++ /dev/null @@ -1,91 +0,0 @@ -package org.jlab.io.clara; - -import java.nio.ByteBuffer; -import java.nio.ByteOrder; -import java.nio.file.Path; -import org.jlab.clara.engine.EngineDataType; -import org.jlab.clara.std.services.AbstractEventReaderService; -import org.jlab.clara.std.services.EventReaderException; -import org.jlab.coda.jevio.EvioException; -import org.jlab.detector.decode.CLASDecoder4; -import org.jlab.io.evio.EvioDataEvent; -import org.jlab.io.evio.EvioSource; -import org.jlab.jnp.hipo4.data.Event; -import org.jlab.jnp.hipo4.io.HipoReader; -import org.json.JSONObject; - -/** - * Emulate DecoderReader for EVIO files, or HipoToHipoReader for HIPO files. - * - * @author baltzell - */ -public class Clas12Reader extends AbstractEventReaderService { - - boolean evio; - CLASDecoder4 decoder; - private long maxEvents; - private Double torus; - private Double solenoid; - - @Override - protected Object createReader(Path path, JSONObject opts) throws EventReaderException { - if (path.toString().endsWith(".hipo")) { - evio = false; - HipoReader r = new HipoReader(); - r.open(path.toString()); - return r; - } - else { - evio = true; - EvioSource r = new EvioSource(); - r.open(path.toString()); - maxEvents = r.getEventCount(); - decoder = new CLASDecoder4(); - torus = opts.has("torus") ? opts.getDouble("torus") : null; - solenoid = opts.has("solenoid") ? opts.getDouble("solenoid") : null; - if (opts.has("variation")) decoder.setVariation(opts.getString("variation")); - if (opts.has("timestamp")) decoder.setTimestamp(opts.getString("timestamp")); - return r; - } - } - - @Override - protected void closeReader() { - if (evio) ((EvioSource)reader).close(); - else ((HipoReader)reader).close(); - } - - @Override - protected int readEventCount() throws EventReaderException { - if (evio) return ((EvioSource)reader).getEventCount(); - else return ((HipoReader)reader).getEventCount(); - } - - @Override - protected Object readEvent(int eventNumber) throws EventReaderException { - try { - if (evio) { - if (eventNumber++ >= maxEvents) return null; - ByteBuffer b = ((EvioSource)reader).getEventBuffer(eventNumber, true); - EvioDataEvent e = new EvioDataEvent(b.array(), readByteOrder()); - return decoder.getDecodedEvent(e, -1, eventNumber, torus, solenoid); - } - else { - return ((HipoReader)reader).getEvent(new Event(),eventNumber); - } - } catch (EvioException e) { - throw new EventReaderException(e); - } - } - - @Override - public ByteOrder readByteOrder() throws EventReaderException { - return ByteOrder.LITTLE_ENDIAN; - } - - @Override - protected EngineDataType getDataType() { - return Clas12Types.HIPO; - } - -} From 467a72991ddd657060cafe15284fac5bbcf4f36e Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Mon, 27 Apr 2026 17:04:44 -0400 Subject: [PATCH 30/36] stf --- .../clas/service/PulseExtractorEngine.java | 53 ------------------- 1 file changed, 53 deletions(-) delete mode 100644 common-tools/clas-reco/src/main/java/org/jlab/clas/service/PulseExtractorEngine.java diff --git a/common-tools/clas-reco/src/main/java/org/jlab/clas/service/PulseExtractorEngine.java b/common-tools/clas-reco/src/main/java/org/jlab/clas/service/PulseExtractorEngine.java deleted file mode 100644 index 3f2dc5254e..0000000000 --- a/common-tools/clas-reco/src/main/java/org/jlab/clas/service/PulseExtractorEngine.java +++ /dev/null @@ -1,53 +0,0 @@ -package org.jlab.clas.service; - -import org.jlab.clas.reco.ReconstructionEngine; -import org.jlab.detector.pulse.Mode3; -import org.jlab.detector.pulse.Mode7; -import org.jlab.detector.pulse.ModeAHDC; -import org.jlab.io.base.DataEvent; - -/** - * An example of using a {@link org.jlab.detector.pulse.HipoExtractor} from a - * {@link org.jlab.clas.reco.ReconstructionEngine}. - * - * @author baltzell - */ -public class PulseExtractorEngine extends ReconstructionEngine { - - Mode3 mode3 = new Mode3(); - Mode3 mode7 = new Mode7(); - ModeAHDC mode_ahdc = new ModeAHDC(); - - public PulseExtractorEngine() { - super("PULSE", "baltzell", "0.0"); - } - - @Override - public boolean init() { - // If using a CCDB table, must register it here: - //requireConstants("/daq/config/ahdc"); - return true; - } - - @Override - public boolean processDataEvent(DataEvent event) { - - // No CCDB table, hardcoded parameters in the extractor: - //mode3.update(6, null, event, "BMT::wf", "BMT::adc"); - //mode7.update(80, null, event, "AHDC::wf", "AHDC::adc"); - mode_ahdc.update(30, null, event, "AHDC::wf", "AHDC::adc"); - - /* - // Requiring a CCDB table: - DataBank runConfig = event.getBank("RUN::config"); - if (runConfig.rows()>0) { - IndexedTable it = getConstantsManager().getConstants( - runConfig.getInt("run", 0), "/daq/config/ahdc"); - basic.update(136, it, event, "AHDC::wf", "AHDC::adc"); - } - */ - - return true; - } - -} From b5301a23e20858b8756a59e6364582abd2c29923 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Tue, 28 Apr 2026 15:29:29 -0400 Subject: [PATCH 31/36] just events, not per thread --- libexec/scaling | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libexec/scaling b/libexec/scaling index b5fb0c9412..63897a4fc6 100755 --- a/libexec/scaling +++ b/libexec/scaling @@ -6,7 +6,7 @@ def cli(): cli.add_argument('-y','--yaml', metavar='YAML',help='path to YAML file',required=True) cli.add_argument('-c','--clara', metavar='DIR',help='CLARA_HOME path (default=$CLARA_HOME)',default=os.getenv('CLARA_HOME',None)) cli.add_argument('-t','--threads',metavar='#',help='threads (default=4,8)',default='4,8') - cli.add_argument('-e','--events', metavar='#',help='events per thread (default=555)',default=555,type=int) + cli.add_argument('-e','--events', metavar='#',help='events per threads (default=2550)',default=555,type=int) cli.add_argument('-N','--numa', metavar='#',help='NUMA socket (default=None, choices=[0,1])',default=None,type=int,choices=[0,1]) cli.add_argument('datafile', help='input EVIO/HIPO data file') cfg = cli.parse_args() @@ -58,7 +58,7 @@ def benchmark(cfg, threads, log): # add the run-clara command: cmd.extend([cfg.run_clara, '-c',cfg.clara, - '-n',str(cfg.events*int(threads)), + '-n',str(cfg.events), '-t',str(threads), '-l', '-y',cfg.yaml, From 57cf6cef78d9ae235d4ba3900aeeea58807936a9 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Tue, 28 Apr 2026 15:54:07 -0400 Subject: [PATCH 32/36] reduce constants sharing --- .../java/org/jlab/clas/reco/DecoderEngine.java | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/common-tools/clas-reco/src/main/java/org/jlab/clas/reco/DecoderEngine.java b/common-tools/clas-reco/src/main/java/org/jlab/clas/reco/DecoderEngine.java index f95412d1bc..ccbbd17f9f 100644 --- a/common-tools/clas-reco/src/main/java/org/jlab/clas/reco/DecoderEngine.java +++ b/common-tools/clas-reco/src/main/java/org/jlab/clas/reco/DecoderEngine.java @@ -29,6 +29,7 @@ public class DecoderEngine implements Engine { SchemaFactory schema; BlockingQueue pool; + int constantsShared = 16; public DecoderEngine() { schema = new SchemaFactory(); @@ -56,13 +57,19 @@ public void destroy() {} @Override public EngineData configure(EngineData ed) { - JSONObject j = new JSONObject(ed.getData()); + JSONObject json = new JSONObject(ed.getData()); pool = new ArrayBlockingQueue<>(POOL_SIZE); - CLASDecoder d0 = new CLASDecoder(); - if (j.has("variation")) d0.setVariation(j.getString("variation")); - if (j.has("timestamp")) d0.setVariation(j.getString("timestamp")); + CLASDecoder d0 = null; for (int i=0; i Date: Tue, 28 Apr 2026 15:58:56 -0400 Subject: [PATCH 33/36] bugfix --- .../src/main/java/org/jlab/clas/reco/DecoderEngine.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common-tools/clas-reco/src/main/java/org/jlab/clas/reco/DecoderEngine.java b/common-tools/clas-reco/src/main/java/org/jlab/clas/reco/DecoderEngine.java index ccbbd17f9f..e080a2ad12 100644 --- a/common-tools/clas-reco/src/main/java/org/jlab/clas/reco/DecoderEngine.java +++ b/common-tools/clas-reco/src/main/java/org/jlab/clas/reco/DecoderEngine.java @@ -61,7 +61,7 @@ public EngineData configure(EngineData ed) { pool = new ArrayBlockingQueue<>(POOL_SIZE); CLASDecoder d0 = null; for (int i=0; i Date: Tue, 28 Apr 2026 18:21:26 -0400 Subject: [PATCH 34/36] share one RCDBManager --- .../src/main/java/org/jlab/detector/decode/CLASDecoder.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/CLASDecoder.java b/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/CLASDecoder.java index 8f1e5c47c3..663444dc63 100644 --- a/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/CLASDecoder.java +++ b/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/CLASDecoder.java @@ -39,7 +39,7 @@ public class CLASDecoder { private boolean isRunNumberFixed = false; private int decoderDebugMode = 0; private ModeAHDC ahdcExtractor = new ModeAHDC(); - private RCDBManager rcdbManager = new RCDBManager(); + private static RCDBManager rcdbManager = new RCDBManager(); public CLASDecoder(boolean development){ codaDecoder = new CodaEventDecoder(); From 0ce3f4a406c0c78d80fc243eee2174787ef22b71 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Tue, 28 Apr 2026 18:28:54 -0400 Subject: [PATCH 35/36] bugfix --- .../src/main/java/org/jlab/clas/reco/DecoderEngine.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/common-tools/clas-reco/src/main/java/org/jlab/clas/reco/DecoderEngine.java b/common-tools/clas-reco/src/main/java/org/jlab/clas/reco/DecoderEngine.java index e080a2ad12..a1c4d3e5a5 100644 --- a/common-tools/clas-reco/src/main/java/org/jlab/clas/reco/DecoderEngine.java +++ b/common-tools/clas-reco/src/main/java/org/jlab/clas/reco/DecoderEngine.java @@ -61,15 +61,17 @@ public EngineData configure(EngineData ed) { pool = new ArrayBlockingQueue<>(POOL_SIZE); CLASDecoder d0 = null; for (int i=0; i Date: Tue, 28 Apr 2026 18:32:15 -0400 Subject: [PATCH 36/36] disable gnuplot logfile --- libexec/scaling.gpl | 1 + 1 file changed, 1 insertion(+) diff --git a/libexec/scaling.gpl b/libexec/scaling.gpl index 1589761971..c53ca381af 100644 --- a/libexec/scaling.gpl +++ b/libexec/scaling.gpl @@ -67,6 +67,7 @@ set key nobox inside top left f(x) = m*x m = 2 +set fit nolog fit [0:24] f(x) datafile using 1:(1/$2*1e3) via m rate = sprintf('%.1f Hz/CPU',m) plot datafile using 1:(1/$2*1e3) pt 7 notitle, f(x) title rate