diff --git a/common-tools/clara-io/src/main/java/org/jlab/io/clara/Clas12Writer.java b/common-tools/clara-io/src/main/java/org/jlab/io/clara/Clas12Writer.java index dabcdb132c..315864d136 100644 --- a/common-tools/clara-io/src/main/java/org/jlab/io/clara/Clas12Writer.java +++ b/common-tools/clara-io/src/main/java/org/jlab/io/clara/Clas12Writer.java @@ -23,7 +23,7 @@ * 3. Writes HEL::flip, RUN/HEL::scaler, and RUN::unix to new tag-1 events * 4. Runs post-processing, writing tag-1 information to all events * 5. Adds .hipo to the output filename, if necessary - * + * 6. Outputs a parallel file of select trigger bits with a raw schema * @author baltzell */ public class Clas12Writer extends HipoToHipoWriter { @@ -34,6 +34,11 @@ public class Clas12Writer extends HipoToHipoWriter { SchemaFactory fullSchema; boolean postprocess; + HipoWriterSorted paraWriter; + long paraCount; + long paraTriggerMask; + int paraTriggerPrescale; + private void init(JSONObject opts) { fullSchema = new SchemaFactory(); fullSchema.initFromDirectory(FileUtils.getEnvironmentPath("CLAS12DIR","etc/bankdefs/hipo4")); @@ -42,6 +47,8 @@ private void init(JSONObject opts) { conman = new ConstantsManager(); conman.init("/runcontrol/hwp","/runcontrol/helicity"); postprocess = opts.optBoolean("postprocess", false); + paraTriggerMask = opts.optLong("paraTriggerMask", 0); + paraTriggerPrescale = opts.optInt("paraTriggerPrescale", 0); if (opts.has("variation")) conman.setVariation(opts.getString("variation")); if (opts.has("timestamp")) conman.setTimeStamp(opts.getString("timestamp")); } @@ -52,7 +59,15 @@ protected HipoWriterSorted createWriter(Path file, JSONObject opts) throws Event init(opts); HipoWriterSorted w = new HipoWriterSorted(); super.configure(w, opts); - w.open(file.toString().endsWith(".hipo") ? file.toString() : file.toString()+".hipo"); + String dirname = file.getParent().toString(); + String basename = file.getFileName().toString(); + if (!basename.endsWith(".hipo")) basename += ".hipo"; + if (paraTriggerMask > 0) { + paraWriter = new HipoWriterSorted(); + paraWriter.getSchemaFactory().copy(fullSchema); + paraWriter.open(dirname + "/tb" + basename.substring(basename.indexOf("_"))); + } + w.open(dirname + "/" + basename); return w; } catch (Exception e) { throw new EventWriterException(e); @@ -64,6 +79,17 @@ protected void writeEvent(Object event) throws EventWriterException { Event t = serial.read((Event)event); if (!t.isEmpty()) writer.addEvent(t, 1); super.writeEvent(event); + writeRaw((Event)event, t); + } + + void writeRaw(Event physics, Event tagged) { + if (paraTriggerMask > 0) { + physics.read(runConfig); + if (runConfig.getRows()>0 && (runConfig.getLong("trigger",0) & paraTriggerMask) != 0) + if (paraTriggerPrescale<=0 || (++paraCount % paraTriggerPrescale) == 0) + paraWriter.addEvent(physics); + if (!tagged.isEmpty()) paraWriter.addEvent(tagged, tagged.getEventTag()); + } } @Override @@ -72,6 +98,7 @@ protected void closeWriter() { super.closeWriter(); if (postprocess) postprocess(); serial.clear(); + if (paraTriggerMask > 0) paraWriter.close(); } /** diff --git a/etc/services/rgd-clarode.yml b/etc/services/rgd-clarode.yml index e46daddc7e..26d9d96ffd 100644 --- a/etc/services/rgd-clarode.yml +++ b/etc/services/rgd-clarode.yml @@ -7,6 +7,8 @@ configuration: io-services: writer: schema_dir: dst + rawTriggerMask: 0x8000000000 + rawTriggerPrescale: 0 services: MAGFIELDS: magfieldSolenoidMap: Symm_solenoid_r601_phi1_z1201_13June2018.dat