From e127189cf0f0b8fa3b57672d3099ad0509ccedc4 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Tue, 29 Sep 2026 15:16:28 -0400 Subject: [PATCH 1/5] add schema prescaling --- .../org/jlab/io/clara/HipoToHipoWriter.java | 29 +++++++++++++++---- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/common-tools/clara-io/src/main/java/org/jlab/io/clara/HipoToHipoWriter.java b/common-tools/clara-io/src/main/java/org/jlab/io/clara/HipoToHipoWriter.java index df83b1c069..11a7d50231 100644 --- a/common-tools/clara-io/src/main/java/org/jlab/io/clara/HipoToHipoWriter.java +++ b/common-tools/clara-io/src/main/java/org/jlab/io/clara/HipoToHipoWriter.java @@ -35,6 +35,9 @@ public class HipoToHipoWriter extends AbstractEventWriterService schema) { int tag = e.getEventTag(); - if (tag==1 || schema.isEmpty()) { + if (tag==1 || schema == null || schema.isEmpty()) { w.addEvent(e,tag); } else { @@ -118,7 +134,10 @@ public static void writeEvent(HipoWriterSorted w, Event e, List schema) { @Override protected void writeEvent(Object event) throws EventWriterException { try { - writeEvent(writer, (Event)event, schemaBankList); + if (fullSchemaPrescale <= 0 || (++prescaleEvents % fullSchemaPrescale) == 0) + writeEvent(writer, (Event)event, schemaBankList); + else + writeEvent(writer, (Event)event, null); } catch (Exception e) { throw new EventWriterException(e); } From 6f0e038ddbb2b1b90dafe2d0b32c61b4bafbefb4 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Tue, 29 Sep 2026 15:27:03 -0400 Subject: [PATCH 2/5] bugfix --- .../src/main/java/org/jlab/io/clara/HipoToHipoWriter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common-tools/clara-io/src/main/java/org/jlab/io/clara/HipoToHipoWriter.java b/common-tools/clara-io/src/main/java/org/jlab/io/clara/HipoToHipoWriter.java index 11a7d50231..3791c81c34 100644 --- a/common-tools/clara-io/src/main/java/org/jlab/io/clara/HipoToHipoWriter.java +++ b/common-tools/clara-io/src/main/java/org/jlab/io/clara/HipoToHipoWriter.java @@ -134,7 +134,7 @@ public static void writeEvent(HipoWriterSorted w, Event e, List schema) { @Override protected void writeEvent(Object event) throws EventWriterException { try { - if (fullSchemaPrescale <= 0 || (++prescaleEvents % fullSchemaPrescale) == 0) + if (fullSchemaPrescale <= 0 || (++prescaleEvents % fullSchemaPrescale) != 0) writeEvent(writer, (Event)event, schemaBankList); else writeEvent(writer, (Event)event, null); From d47d737d5fee080dc64f3a85d2c6eb2d56ee519b Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Tue, 29 Sep 2026 19:03:06 -0400 Subject: [PATCH 3/5] add yaml parameter --- .../java/org/jlab/io/clara/HipoToHipoWriter.java | 12 +++++++++--- etc/services/rgd-clarode.yml | 1 + 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/common-tools/clara-io/src/main/java/org/jlab/io/clara/HipoToHipoWriter.java b/common-tools/clara-io/src/main/java/org/jlab/io/clara/HipoToHipoWriter.java index 3791c81c34..be45a22deb 100644 --- a/common-tools/clara-io/src/main/java/org/jlab/io/clara/HipoToHipoWriter.java +++ b/common-tools/clara-io/src/main/java/org/jlab/io/clara/HipoToHipoWriter.java @@ -28,6 +28,7 @@ public class HipoToHipoWriter extends AbstractEventWriterService schemaBankList = new ArrayList(); private final StringSubstitutor envSubstitutor = new StringSubstitutor(System.getenv()); @@ -35,8 +36,8 @@ public class HipoToHipoWriter extends AbstractEventWriterService schema) { @Override protected void writeEvent(Object event) throws EventWriterException { try { - if (fullSchemaPrescale <= 0 || (++prescaleEvents % fullSchemaPrescale) != 0) + if (schemaPrescale <= 0 || (++schemaPrescaleEvents % schemaPrescale) != 0) writeEvent(writer, (Event)event, schemaBankList); else writeEvent(writer, (Event)event, null); diff --git a/etc/services/rgd-clarode.yml b/etc/services/rgd-clarode.yml index e46daddc7e..5625ac0b2a 100644 --- a/etc/services/rgd-clarode.yml +++ b/etc/services/rgd-clarode.yml @@ -7,6 +7,7 @@ configuration: io-services: writer: schema_dir: dst + schema_prescale: 100 services: MAGFIELDS: magfieldSolenoidMap: Symm_solenoid_r601_phi1_z1201_13June2018.dat From faacea02feaf30edc1527eeac2cc85520f951cf1 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Wed, 30 Sep 2026 13:49:47 -0400 Subject: [PATCH 4/5] cleanup initialization --- .../org/jlab/io/clara/HipoToHipoWriter.java | 50 +++++++------------ 1 file changed, 18 insertions(+), 32 deletions(-) diff --git a/common-tools/clara-io/src/main/java/org/jlab/io/clara/HipoToHipoWriter.java b/common-tools/clara-io/src/main/java/org/jlab/io/clara/HipoToHipoWriter.java index be45a22deb..be84857f2d 100644 --- a/common-tools/clara-io/src/main/java/org/jlab/io/clara/HipoToHipoWriter.java +++ b/common-tools/clara-io/src/main/java/org/jlab/io/clara/HipoToHipoWriter.java @@ -30,10 +30,9 @@ public class HipoToHipoWriter extends AbstractEventWriterService schemaBankList = new ArrayList(); + protected final List schemaBankList = new ArrayList<>(); private final StringSubstitutor envSubstitutor = new StringSubstitutor(System.getenv()); - private int compression = 2; protected String filename; private long schemaPrescaleEvents = 0; @@ -54,22 +53,18 @@ protected HipoWriterSorted createWriter(Path file, JSONObject opts) throws Event protected void configure(HipoWriterSorted writer, JSONObject opts) { - // set prescale: - if (opts.has(CONF_SCHEMA_PRESCALE)) { - schemaPrescale = opts.getInt(CONF_SCHEMA_PRESCALE); - } - - // set compression: - if (opts.has(CONF_COMPRESSION)) { - compression = opts.getInt(CONF_COMPRESSION); - } - writer.setCompressionType(compression); + // set schema prescale factor: + schemaPrescale = opts.optInt(CONF_SCHEMA_PRESCALE, 0); // create full schema: SchemaFactory fullSchema = new SchemaFactory(); fullSchema.initFromDirectory(FileUtils.getEnvironmentPath("CLAS12DIR","etc/bankdefs/hipo4")); - // choose user schema directory: + // set writer compression and schema: + writer.setCompressionType(opts.optInt(CONF_COMPRESSION, 2)); + writer.getSchemaFactory().copy(fullSchema); + + // choose schema directory: String schemaDir = FileUtils.getEnvironmentPath("CLAS12DIR", "etc/bankdefs/hipo4"); if (opts.has(CONF_SCHEMA_DIR)) { // Run YAML values throuh env-substitor: @@ -81,37 +76,28 @@ protected void configure(HipoWriterSorted writer, JSONObject opts) { System.out.printf("%s service: schema directory = %s%n", getName(), schemaDir); } - // create user schemaa: + // create schema from chosen directory: SchemaFactory factory = new SchemaFactory(); factory.initFromDirectory(schemaDir); - // set the writer's schema factory: - if(opts.has(CONF_SCHEMA_WILDCARD)==true){ - // apply a wildcard reduction on the user's schema: - String wildcard = opts.getString("wildcard"); - SchemaFactory f2 = factory.reduce(wildcard); - writer.getSchemaFactory().copy(f2); - } else { - writer.getSchemaFactory().copy(factory); + // filter schema by wildcard: + if (opts.has(CONF_SCHEMA_WILDCARD)) { + factory = factory.reduce(opts.getString(CONF_SCHEMA_WILDCARD)); } - + // set the bank list for filtering: schemaBankList.clear(); - if (opts.has(CONF_SCHEMA_DIR)==true||opts.has(CONF_SCHEMA_WILDCARD)==true) { + if (opts.has(CONF_SCHEMA_DIR) || opts.has(CONF_SCHEMA_WILDCARD)) { boolean useFilter = opts.optBoolean(CONF_SCHEMA_FILTER, true); System.out.printf("%s service: schema filter = %b%n", getName(), useFilter); - if(useFilter==true){ - int schemaSize = writer.getSchemaFactory().getSchemaList().size(); - for(int i = 0; i < schemaSize; i++){ - Bank dataBank = new Bank(writer.getSchemaFactory().getSchemaList().get(i)); - schemaBankList.add(dataBank); + if (useFilter) { + int schemaSize = factory.getSchemaList().size(); + for (int i = 0; i < schemaSize; i++) { + schemaBankList.add(new Bank(factory.getSchemaList().get(i))); } } } - // set the writer's schema factory: - writer.getSchemaFactory().copy(fullSchema); - System.out.printf("SERVICE WRITER :: [filter] %s\n",opts.has(HipoToHipoWriter.CONF_SCHEMA_FILTER)); System.out.printf("SERVICE WRITER :: [dir] %s\n",opts.has(HipoToHipoWriter.CONF_SCHEMA_DIR)); System.out.printf("SERVICE WRITER :: [wildcard] %s\n",opts.has(HipoToHipoWriter.CONF_SCHEMA_WILDCARD)); From 78d8b8022466f5a977c4cc935eaf34e2db58e66f Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Wed, 30 Sep 2026 15:07:10 -0400 Subject: [PATCH 5/5] cleanup --- .../org/jlab/io/clara/HipoToHipoWriter.java | 42 ++++++++----------- 1 file changed, 18 insertions(+), 24 deletions(-) diff --git a/common-tools/clara-io/src/main/java/org/jlab/io/clara/HipoToHipoWriter.java b/common-tools/clara-io/src/main/java/org/jlab/io/clara/HipoToHipoWriter.java index be84857f2d..cda04c0232 100644 --- a/common-tools/clara-io/src/main/java/org/jlab/io/clara/HipoToHipoWriter.java +++ b/common-tools/clara-io/src/main/java/org/jlab/io/clara/HipoToHipoWriter.java @@ -31,7 +31,7 @@ public class HipoToHipoWriter extends AbstractEventWriterService schemaBankList = new ArrayList<>(); - private final StringSubstitutor envSubstitutor = new StringSubstitutor(System.getenv()); + private static final StringSubstitutor envSubstitutor = new StringSubstitutor(System.getenv()); protected String filename; @@ -51,6 +51,19 @@ protected HipoWriterSorted createWriter(Path file, JSONObject opts) throws Event } } + static String chooseSchemaDirectory(JSONObject opts) { + String schemaDir = FileUtils.getEnvironmentPath("CLAS12DIR", "etc/bankdefs/hipo4"); + if (opts.has(CONF_SCHEMA_DIR)) { + // Run YAML values throuh env-substitor: + schemaDir = opts.getString(CONF_SCHEMA_DIR).trim(); + schemaDir = envSubstitutor.replace(schemaDir); + // If it's not already an absolute path, assume it's the name of a + // stock schema that comes with COATJAVA and get the full path to it: + if (!schemaDir.startsWith("/")) schemaDir = ClaraYaml.getStockSchemaDirectory(schemaDir); + } + return schemaDir; + } + protected void configure(HipoWriterSorted writer, JSONObject opts) { // set schema prescale factor: @@ -64,33 +77,18 @@ protected void configure(HipoWriterSorted writer, JSONObject opts) { writer.setCompressionType(opts.optInt(CONF_COMPRESSION, 2)); writer.getSchemaFactory().copy(fullSchema); - // choose schema directory: - String schemaDir = FileUtils.getEnvironmentPath("CLAS12DIR", "etc/bankdefs/hipo4"); - if (opts.has(CONF_SCHEMA_DIR)) { - // Run YAML values throuh env-substitor: - schemaDir = opts.getString(CONF_SCHEMA_DIR).trim(); - schemaDir = envSubstitutor.replace(schemaDir); - // If it's not already an absolute path, assume it's the name of a - // stock schema that comes with COATJAVA and get the full path to it: - if (!schemaDir.startsWith("/")) schemaDir = ClaraYaml.getStockSchemaDirectory(schemaDir); - System.out.printf("%s service: schema directory = %s%n", getName(), schemaDir); - } - - // create schema from chosen directory: + // create schema from chosen directory and wildcard reduce: + String schemaDir = chooseSchemaDirectory(opts); SchemaFactory factory = new SchemaFactory(); factory.initFromDirectory(schemaDir); - - // filter schema by wildcard: if (opts.has(CONF_SCHEMA_WILDCARD)) { factory = factory.reduce(opts.getString(CONF_SCHEMA_WILDCARD)); } - // set the bank list for filtering: + // set the resulting bank list for filtering: schemaBankList.clear(); if (opts.has(CONF_SCHEMA_DIR) || opts.has(CONF_SCHEMA_WILDCARD)) { - boolean useFilter = opts.optBoolean(CONF_SCHEMA_FILTER, true); - System.out.printf("%s service: schema filter = %b%n", getName(), useFilter); - if (useFilter) { + if (opts.optBoolean(CONF_SCHEMA_FILTER, true)) { int schemaSize = factory.getSchemaList().size(); for (int i = 0; i < schemaSize; i++) { schemaBankList.add(new Bank(factory.getSchemaList().get(i))); @@ -103,10 +101,6 @@ protected void configure(HipoWriterSorted writer, JSONObject opts) { System.out.printf("SERVICE WRITER :: [wildcard] %s\n",opts.has(HipoToHipoWriter.CONF_SCHEMA_WILDCARD)); } - private Method getSchemaFilterSetter() throws NoSuchMethodException, SecurityException { - return HipoWriter.class.getMethod("setSchemaFilter", boolean.class); - } - @Override protected void closeWriter() { writer.close();