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..8b5b2af3b3 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 { @@ -32,16 +32,26 @@ public class Clas12Writer extends HipoToHipoWriter { Bank runConfig; ConstantsManager conman; SchemaFactory fullSchema; + SchemaFactory rawSchema; boolean postprocess; + HipoWriterSorted rawWriter; + long rawTriggerMask; + long rawTriggerCount; + int rawTriggerPrescale; + private void init(JSONObject opts) { fullSchema = new SchemaFactory(); fullSchema.initFromDirectory(FileUtils.getEnvironmentPath("CLAS12DIR","etc/bankdefs/hipo4")); + rawSchema = new SchemaFactory(); + rawSchema.initFromDirectory(FileUtils.getEnvironmentPath("CLAS12DIR","etc/bankdefs/hipo4/singles/raw")); serial = new SerialHoncho(fullSchema); runConfig = new Bank(fullSchema.getSchema("RUN::config")); conman = new ConstantsManager(); conman.init("/runcontrol/hwp","/runcontrol/helicity"); postprocess = opts.optBoolean("postprocess", false); + rawTriggerMask = opts.optLong("rawTriggerMask", 0); + rawTriggerPrescale = opts.optInt("rawTriggerPrescale", 0); if (opts.has("variation")) conman.setVariation(opts.getString("variation")); if (opts.has("timestamp")) conman.setTimeStamp(opts.getString("timestamp")); } @@ -52,7 +62,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 (rawTriggerMask > 0) { + rawWriter = new HipoWriterSorted(); + rawWriter.getSchemaFactory().copy(rawSchema); + rawWriter.open(dirname + "/tb" + basename.substring(basename.indexOf("_"))); + } + w.open(dirname + "/" + basename); return w; } catch (Exception e) { throw new EventWriterException(e); @@ -64,6 +82,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 (rawTriggerMask > 0) { + physics.read(runConfig); + if (runConfig.getRows()>0 && (runConfig.getLong("trigger",0) & rawTriggerMask) != 0) + if (rawTriggerPrescale<=0 || (++rawTriggerCount % rawTriggerPrescale) == 0) + rawWriter.addEvent(physics); + if (!tagged.isEmpty()) rawWriter.addEvent(tagged, tagged.getEventTag()); + } } @Override @@ -72,6 +101,7 @@ protected void closeWriter() { super.closeWriter(); if (postprocess) postprocess(); serial.clear(); + if (rawTriggerMask > 0) rawWriter.close(); } /** diff --git a/etc/bankdefs/util/bankSplit.py b/etc/bankdefs/util/bankSplit.py index 52b134174c..52f7aae902 100755 --- a/etc/bankdefs/util/bankSplit.py +++ b/etc/bankdefs/util/bankSplit.py @@ -114,6 +114,12 @@ def create(dirname, banklist): import glob +data = glob.glob('./singles/data/*.json') +data.extend(glob.glob('./singles/header/*.json')) +data.extend(glob.glob('./singles/tag1/*.json')) +data = [os.path.basename(x)[:-5] for x in data] +create("raw/", set(data)) + rgl = glob.glob('./singles/full/ALERT*.json') rgl.extend(glob.glob('./singles/full/AHDC*.json')) rgl.extend(glob.glob('./singles/full/ATOF*.json')) diff --git a/etc/services/rgd-clarode.yml b/etc/services/rgd-clarode.yml index e46daddc7e..a4b967d689 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: 0x1f + rawTriggerPrescale: 0 services: MAGFIELDS: magfieldSolenoidMap: Symm_solenoid_r601_phi1_z1201_13June2018.dat