From ead327bf5771ee7cd0b5bc47690d7cb85c79eac8 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 4b6974cb3cb0258c502fccca057a0934f44c9607 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 0cb4084c762de83b9a10c754c042cc9f481220b8 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 a535e28ac29494722985191892b5c79523f37e5a 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 8335cdab98ce733c701ce3e81164f1e4e9cf9f17 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 cae3cefcf935e8c7b62fa5dd85930f0ebce2f973 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 f50de615d7fec5cc36395c492e4f5dbc1c0c3b26 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 a145e2d048a59a54c50198ba549aa563a25a544b 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 59c3f306d6604abd4adaae6b5cf6893ad33f2232 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 092bbe0b3f4c40b83db1b3e94fa932abc35d247c 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 5314395a18bc17cf1d58437f50d49c22194a4571 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 48418206f7c665f6cbd58bfb87ec09ca5a385721 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 88686620c9f0b075d0b2078a817b01d3a6ec1e51 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 f2cc6f6516d41037396796a90633472c22d8946e 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 5b6c1a434f3877b5c39e22c8e43a90a29a15a0c4 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 d44666d1a302e628b45af19eb0f7b4add956ad5d 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 faf89d8cc1b071eb8189a99fe12ad62417ec204e 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 11ffbbb1728cc16b22b8d4850344da7b61de60fc 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 62d027cad62888c988de71719b6fbedf728ea771 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 da3b2c0e4ea9c26435990b013b9fdcf2ba034254 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 70c32447d4ea6bc7857f2cb257a15154bfed7d8d 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 155a417b80cacbad155a32efe24a5e50b5e49bc1 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 40996b6a3da21bc86078e4d07df84481dd993270 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 f62d261bfdd32f75da46ba761cd8ed3282c451ad 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 3556d898ae7a5c3ace39c6e7cfecc45b72e9537e 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 0d4e617d5d9f5cbf8ec4988f3037178dae0b628c 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 d68b0a28c0a1e6e22a62319b41fc24340ef2d584 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 66323ae3cc3da2bc05b94ab3e7510d6cb90ee3f6 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 e1a0e883a6cd442ab9827afe30b241111ca3655d 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 0bd9a3c7d675ee99e795e5bf259107937b848946 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 | 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 74e01b8f0fb3021ced5228a77b2f1179fe34c293 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 4b57f29b2964b2846c1f8b724c99442b9444a48b 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: Fri, 8 May 2026 21:31:09 -0400 Subject: [PATCH 36/36] 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,