From b625208ab3e554011dee55090759c6284ddc7b4c Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Wed, 22 Apr 2026 18:01:54 -0400 Subject: [PATCH 01/45] 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 9ddeb04e15b10ee590bd4df1d531902f4e7126d1 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Wed, 22 Apr 2026 18:06:05 -0400 Subject: [PATCH 02/45] 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 8abc9f9975cc9cdc4f83c73f43d14aa211ae6489 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Wed, 22 Apr 2026 19:37:28 -0400 Subject: [PATCH 03/45] 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 7fc741b21acd2345d2b9061c6ccd61178838205b Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Wed, 22 Apr 2026 19:40:54 -0400 Subject: [PATCH 04/45] 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 d28d11258b96a766d1cab9e62506d1fc180cb37e Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Wed, 22 Apr 2026 20:03:25 -0400 Subject: [PATCH 05/45] 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 c483a65854425569078d360cec140b6cc3b81f44 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Wed, 22 Apr 2026 20:10:29 -0400 Subject: [PATCH 06/45] 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 086a9fea4d34196d6c49a84a78485acc6dea4a25 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Wed, 22 Apr 2026 20:20:03 -0400 Subject: [PATCH 07/45] 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 68e6b2f92dd15238ef01b8741dff4ed618fc6767 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Wed, 22 Apr 2026 20:20:22 -0400 Subject: [PATCH 08/45] 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 2fa3ad748f3483ce1e6e62c7aa4c3f7f26cb4864 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Wed, 22 Apr 2026 20:23:38 -0400 Subject: [PATCH 09/45] 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 adfab5c2e479768e32d8591112c0f21d82328269 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Wed, 22 Apr 2026 21:04:48 -0400 Subject: [PATCH 10/45] 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 fa212988c3860e761d1debc2983f7429d4341e0f Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Thu, 23 Apr 2026 13:53:22 -0400 Subject: [PATCH 11/45] 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 dd5ea348965c2b714d8718cef3c5041a7e277c40 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Thu, 23 Apr 2026 14:38:25 -0400 Subject: [PATCH 12/45] 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/45] 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 dfdff95079facf79bc0de62032b71f35df7a7c86 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Thu, 23 Apr 2026 14:49:45 -0400 Subject: [PATCH 14/45] 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 2e24c777fb6814ab14d3a036afb7251cd13a0157 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Thu, 23 Apr 2026 18:02:20 -0400 Subject: [PATCH 15/45] 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 7c4d726e532ed981296213f3f1fa0a69c15a5768 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Thu, 23 Apr 2026 18:42:20 -0400 Subject: [PATCH 16/45] 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 5bfeb49b87e0b4123e290418cf4145cad4eac34e Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Thu, 23 Apr 2026 20:38:31 -0400 Subject: [PATCH 17/45] 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 74d70ff458c9ded5dfc01321e1672347ef5582d2 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Thu, 23 Apr 2026 21:07:17 -0400 Subject: [PATCH 18/45] 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 3789826b854abed28c5a57695608067f1353db22 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Thu, 23 Apr 2026 21:07:27 -0400 Subject: [PATCH 19/45] 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 8c939a19d551dbd56936969e1de032e76fdb2875 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Thu, 23 Apr 2026 21:23:44 -0400 Subject: [PATCH 20/45] 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 64a202c0aa5430cda05d26fcafc26bee21e33283 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Thu, 23 Apr 2026 21:43:59 -0400 Subject: [PATCH 21/45] 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 03fdb87346b83aafa6b8d31cbf0ab310fae4465f Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Fri, 24 Apr 2026 20:37:50 -0400 Subject: [PATCH 22/45] 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 c89a8cce8b96dbb2d413695251ac9d0579ea54c0 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Mon, 27 Apr 2026 16:49:39 -0400 Subject: [PATCH 23/45] 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 04cb650141927081cdf881617d4a9e139b1f16d7 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Mon, 27 Apr 2026 16:53:08 -0400 Subject: [PATCH 24/45] 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 9f5708b37db52aba2511aaa4df87a5e4ea6b5d8c Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Mon, 27 Apr 2026 16:53:46 -0400 Subject: [PATCH 25/45] 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 1aa6e0a7463d60b6cf1cdb92479c6f96af355f81 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Mon, 27 Apr 2026 16:54:01 -0400 Subject: [PATCH 26/45] 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 e62ab27d7d467b67744d93f6fcccbc1622639417 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Mon, 27 Apr 2026 16:55:14 -0400 Subject: [PATCH 27/45] 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 17c659db41e2a18f9283d4b2799b668fe4349e81 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Mon, 27 Apr 2026 17:03:14 -0400 Subject: [PATCH 28/45] 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 731ffc223e9c5eafbcef30408b14ff715cadc510 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Mon, 27 Apr 2026 17:04:18 -0400 Subject: [PATCH 29/45] 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 0793a158ceefc35c9ceffb075f1679613f532390 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Mon, 27 Apr 2026 17:04:44 -0400 Subject: [PATCH 30/45] 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 2aacbc183bc2fd80c1f9d3ed4b4d0e05bf7ad3ca Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Tue, 28 Apr 2026 15:29:29 -0400 Subject: [PATCH 31/45] just events, not per thread --- libexec/scaling | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libexec/scaling b/libexec/scaling index 6cad8e3450..02d7f30d5d 100755 --- a/libexec/scaling +++ b/libexec/scaling @@ -61,7 +61,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 af5e72f4aa1138e2c33a021cbb9199d7d0ed8ad9 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Tue, 28 Apr 2026 15:54:07 -0400 Subject: [PATCH 32/45] 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/45] 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/45] 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 137d3f82b58b5f7055efa52df1f3848f5a7292bb Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Tue, 28 Apr 2026 18:28:54 -0400 Subject: [PATCH 35/45] 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: Fri, 8 May 2026 21:31:09 -0400 Subject: [PATCH 36/45] restore Adjust the number of events based on the number of threads. --- libexec/scaling | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libexec/scaling b/libexec/scaling index 02d7f30d5d..6cad8e3450 100755 --- a/libexec/scaling +++ b/libexec/scaling @@ -61,7 +61,7 @@ def benchmark(cfg, threads, log): # add the run-clara command: cmd.extend([cfg.run_clara, '-c',cfg.clara, - '-n',str(cfg.events), + '-n',str(cfg.events*int(threads)), '-t',str(threads), '-l', '-y',cfg.yaml, From 236ce28317b43f3c3b39c7eeeabd4c31c0e2e5db Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Mon, 11 May 2026 18:41:46 -0400 Subject: [PATCH 37/45] DecoderEngine: just pass along HIPO events --- .../org/jlab/clas/reco/DecoderEngine.java | 50 +++++++++++-------- 1 file changed, 28 insertions(+), 22 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 a1c4d3e5a5..fb7b83bfb7 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 @@ -78,30 +78,36 @@ public EngineData configure(EngineData 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()); - 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); - output.setDescription(msg); - return output; - } - try { - 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)); - output.setStatus(EngineStatus.ERROR); - output.setDescription(msg); - return output; + + // if it's EVIO, decode it, otherwise just pass it along + if (input.getMimeType().equals("binary/data-evio")) { + EvioDataEvent evio; + try { + ByteBuffer bb = (ByteBuffer) input.getData(); + //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); + output.setDescription(msg); + return output; + } + HipoDataEvent hipo; + try { + 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)); + output.setStatus(EngineStatus.ERROR); + output.setDescription(msg); + return output; + } } + return output; } } From 4bd0a9dbfeea625747314cd30548acf41d3648f4 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Mon, 11 May 2026 18:42:21 -0400 Subject: [PATCH 38/45] add Clas12Reader, no decoding --- .../java/org/jlab/io/clara/Clas12Reader.java | 89 +++++++++++++++++++ .../org/jlab/io/clara/Clas12Reader.yaml | 11 +++ etc/services/rgd-clarode.yml | 4 +- 3 files changed, 102 insertions(+), 2 deletions(-) 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..0f05e43dd0 --- /dev/null +++ b/common-tools/clara-io/src/main/java/org/jlab/io/clara/Clas12Reader.java @@ -0,0 +1,89 @@ +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.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; + +/** + * Just reads EVIO or HIPO, and passes it along. + * + * @author baltzell + */ +public class Clas12Reader extends AbstractEventReaderService { + + EngineDataType type; + private long maxEvents; + + @Override + protected Object createReader(Path path, JSONObject opts) throws EventReaderException { + if (path.toString().endsWith(".hipo")) { + type = Clas12Types.HIPO; + HipoReader r = new HipoReader(); + r.open(path.toString()); + return r; + } + else { + type = Clas12Types.EVIO; + EvioSource r = new EvioSource(); + r.open(path.toString()); + maxEvents = r.getEventCount(); + return r; + } + } + + @Override + protected void closeReader() { + if (type == Clas12Types.EVIO) { + ((EvioSource)reader).close(); + } + else { + ((HipoReader)reader).close(); + } + } + + @Override + protected int readEventCount() throws EventReaderException { + if (type == Clas12Types.EVIO) { + return ((EvioSource)reader).getEventCount(); + } + else { + return ((HipoReader)reader).getEventCount(); + } + } + + @Override + protected Object readEvent(int eventNumber) throws EventReaderException { + try { + if (type == Clas12Types.EVIO) { + if (eventNumber++ >= maxEvents) return null; + ByteBuffer b = ((EvioSource)reader).getEventBuffer(eventNumber, true); + return new EvioDataEvent(b.array(), readByteOrder()); + } + 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 type; + } + +} \ No newline at end of file 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..f499fccd2b --- /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 and passes them along unchanged. diff --git a/etc/services/rgd-clarode.yml b/etc/services/rgd-clarode.yml index e00a0b0395..75f68d1dd8 100644 --- a/etc/services/rgd-clarode.yml +++ b/etc/services/rgd-clarode.yml @@ -19,8 +19,8 @@ configuration: outputBankPrefix: "HB" io-services: reader: - class: org.jlab.io.clara.EvioToEvioReader - name: EvioReader + class: org.jlab.io.clara.Clas12Reader + name: Clas12Reader writer: class: org.jlab.io.clara.DecoderWriter name: DecoderWriter From bea8f321f754350a0e9e688f5f122e3b2fceb1e3 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Mon, 11 May 2026 18:54:12 -0400 Subject: [PATCH 39/45] dummy initialization value --- .../clara-io/src/main/java/org/jlab/io/clara/Clas12Reader.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 index 0f05e43dd0..65b0e40a34 100644 --- 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 @@ -20,7 +20,7 @@ */ public class Clas12Reader extends AbstractEventReaderService { - EngineDataType type; + EngineDataType type = Clas12Types.HIPO; private long maxEvents; @Override From 1e3e06269f45d549172be155e4bc545226e2750a Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Mon, 11 May 2026 19:22:04 -0400 Subject: [PATCH 40/45] bugfix --- .../src/main/java/org/jlab/io/clara/Clas12Reader.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 index 65b0e40a34..25b9478a64 100644 --- 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 @@ -65,8 +65,8 @@ protected Object readEvent(int eventNumber) throws EventReaderException { try { if (type == Clas12Types.EVIO) { if (eventNumber++ >= maxEvents) return null; - ByteBuffer b = ((EvioSource)reader).getEventBuffer(eventNumber, true); - return new EvioDataEvent(b.array(), readByteOrder()); + return ((EvioSource)reader).getEventBuffer(eventNumber, true); + //return new EvioDataEvent(b.array(), readByteOrder()); } else { return ((HipoReader)reader).getEvent(new Event(),eventNumber); From dda612e6a65a45ff8a7922f3c207519dff657c40 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Mon, 11 May 2026 21:07:30 -0400 Subject: [PATCH 41/45] split I/O service into separate PR --- .../java/org/jlab/io/clara/Clas12Reader.java | 89 ------------------- .../org/jlab/io/clara/Clas12Reader.yaml | 11 --- 2 files changed, 100 deletions(-) delete mode 100644 common-tools/clara-io/src/main/java/org/jlab/io/clara/Clas12Reader.java 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/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 25b9478a64..0000000000 --- a/common-tools/clara-io/src/main/java/org/jlab/io/clara/Clas12Reader.java +++ /dev/null @@ -1,89 +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.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; - -/** - * Just reads EVIO or HIPO, and passes it along. - * - * @author baltzell - */ -public class Clas12Reader extends AbstractEventReaderService { - - EngineDataType type = Clas12Types.HIPO; - private long maxEvents; - - @Override - protected Object createReader(Path path, JSONObject opts) throws EventReaderException { - if (path.toString().endsWith(".hipo")) { - type = Clas12Types.HIPO; - HipoReader r = new HipoReader(); - r.open(path.toString()); - return r; - } - else { - type = Clas12Types.EVIO; - EvioSource r = new EvioSource(); - r.open(path.toString()); - maxEvents = r.getEventCount(); - return r; - } - } - - @Override - protected void closeReader() { - if (type == Clas12Types.EVIO) { - ((EvioSource)reader).close(); - } - else { - ((HipoReader)reader).close(); - } - } - - @Override - protected int readEventCount() throws EventReaderException { - if (type == Clas12Types.EVIO) { - return ((EvioSource)reader).getEventCount(); - } - else { - return ((HipoReader)reader).getEventCount(); - } - } - - @Override - protected Object readEvent(int eventNumber) throws EventReaderException { - try { - if (type == Clas12Types.EVIO) { - if (eventNumber++ >= maxEvents) return null; - return ((EvioSource)reader).getEventBuffer(eventNumber, true); - //return new EvioDataEvent(b.array(), readByteOrder()); - } - 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 type; - } - -} \ No newline at end of file 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 f499fccd2b..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 and passes them along unchanged. From f93d36a6a9b2fef0d8451ebbda6074d18e7c0c0c Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Mon, 11 May 2026 21:14:17 -0400 Subject: [PATCH 42/45] split pull requests --- etc/services/rgd-clarode.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/etc/services/rgd-clarode.yml b/etc/services/rgd-clarode.yml index 75f68d1dd8..7997c9204c 100644 --- a/etc/services/rgd-clarode.yml +++ b/etc/services/rgd-clarode.yml @@ -19,8 +19,8 @@ configuration: outputBankPrefix: "HB" io-services: reader: - class: org.jlab.io.clara.Clas12Reader - name: Clas12Reader + class: org.jlab.io.clara.EvioToEvioReader + name: EvioToEvioReader writer: class: org.jlab.io.clara.DecoderWriter name: DecoderWriter From 7e03830dceff69b21e390e2203b2760af721bda2 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Tue, 12 May 2026 15:03:30 -0400 Subject: [PATCH 43/45] cleanup, avoid class variable --- .../jlab/detector/decode/DetectorEventDecoder.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 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 6a6ee5e309..ff8df013c1 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,7 +18,6 @@ */ public class DetectorEventDecoder { - boolean sharedManagers = false; ConstantsManager translationManager = new ConstantsManager(); ConstantsManager fitterManager = new ConstantsManager(); ConstantsManager scalerManager = new ConstantsManager(); @@ -54,8 +53,7 @@ public DetectorEventDecoder(DetectorEventDecoder d) { translationManager = d.translationManager; fitterManager = d.fitterManager; scalerManager = d.scalerManager; - sharedManagers = true; - initDecoder(); + initDecoder(false); } public void setTimestamp(String timestamp) { @@ -104,7 +102,11 @@ public final void initDecoderDev(){ "/runcontrol/helicity","/daq/config/scalers/dsc1"})); } - public final void initDecoder(){ + public final void initDecoder() { + initDecoder(true); + } + + public final void initDecoder(boolean initializeManagers){ // Detector translation table keysTrans = Arrays.asList(new DetectorType[]{DetectorType.FTCAL,DetectorType.FTHODO,DetectorType.FTTRK,DetectorType.LTCC,DetectorType.ECAL,DetectorType.FTOF, @@ -136,7 +138,7 @@ public final void initDecoder(){ keysMicromega = Arrays.asList(new DetectorType[]{DetectorType.BMT,DetectorType.FMT,DetectorType.FTTRK}); - if (!sharedManagers) { + if (initializeManagers) { translationManager.init(tablesTrans); fitterManager.init(tablesFitter); scalerManager.init(Arrays.asList(new String[]{"/runcontrol/fcup","/runcontrol/slm","/runcontrol/hwp", From bc73d3fd820ef79232177176d2f1941be3ed8005 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Tue, 12 May 2026 19:10:48 -0400 Subject: [PATCH 44/45] remove debugging leftover Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- .../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..fb8303719a 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 ByteOrder.LITTLE_ENDIAN; //reader.getFileByteOrder(); + return reader.getFileByteOrder(); } @Override From 4f5da7a527ef8655ac5279927fc37f23a2dff6fb Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Tue, 12 May 2026 22:08:24 -0400 Subject: [PATCH 45/45] revert to hard-coded byte order Changed byte order reading to always return LITTLE_ENDIAN. --- .../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