Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -325,6 +325,8 @@ jobs:
tar xzf clara.tar.gz
tar xzf coatjava.tar.gz
- run: ls
- name: run mutil
run: ./coatjava/bin/reco-mutil -y ./etc/services/data-ai.yaml -t 4 -o rec.hipo ./clas_018779.evio.00001
- name: run test
run: ./bin/run-clara -y ./etc/services/data-ai.yaml -t 4 -n 500 -c ./clara -o ./tmp ./clas_018779.evio.00001
- name: ls tmp
Expand Down
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -58,3 +58,6 @@ hs_err_pid*

bin/evio2hipotest
export.sh

*.txt

17 changes: 14 additions & 3 deletions .gitlab-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -175,13 +175,24 @@ clara:
- run-clara -v -c $CLARA_HOME -t 4 -y ./etc/services/data-ai.yaml -n 30 -o out $EVIOFILE
- mv out/rec_$EVIOFILE.hipo claroded.hipo

reco-mutil:
stage: test
needs: [build,download]
dependencies: [build,download]
script:
- tar -xzf coatjava.tar.gz
- reco-mutil -t 4 -y ./etc/services/data-ai.yaml -n 30 -o rec_$EVIOFILE.hipo $EVIOFILE

profile:
extends: .clon
allow_failure: true
script:
- ./clara/plugins/clas12/libexec/profile -e cpu -o _clara -- run-clara -c ./clara -y ./etc/services/data-ai.yaml -o tmp1 -t 16 -l $EVIOFILE
- ./clara/plugins/clas12/libexec/profile -e alloc -o _clara -- run-clara -c ./clara -y ./etc/services/data-ai.yaml -o tmp2 -t 16 -l $EVIOFILE
- ./clara/plugins/clas12/libexec/profile -e lock -o _clara -- run-clara -c ./clara -y ./etc/services/data-ai.yaml -o tmp3 -t 16 -l $EVIOFILE
- ./clara/plugins/clas12/libexec/profile -e cpu -o _clara -- run-clara -c ./clara -y ./etc/services/data-ai.yaml -o tmp1 -t 16 $EVIOFILE
- ./clara/plugins/clas12/libexec/profile -e alloc -o _clara -- run-clara -c ./clara -y ./etc/services/data-ai.yaml -o tmp2 -t 16 $EVIOFILE
- ./clara/plugins/clas12/libexec/profile -e lock -o _clara -- run-clara -c ./clara -y ./etc/services/data-ai.yaml -o tmp3 -t 16 $EVIOFILE
- ./clara/plugins/clas12/libexec/profile -e cpu -o _mutil -- reco-mutil -y ./etc/services/data-ai.yaml -o mutil1.hipo -t 16 $EVIOFILE
- ./clara/plugins/clas12/libexec/profile -e alloc -o _mutil -- reco-mutil -y ./etc/services/data-ai.yaml -o mutil2.hipo -t 16 $EVIOFILE
- ./clara/plugins/clas12/libexec/profile -e lock -o _mutil -- reco-mutil -y ./etc/services/data-ai.yaml -o mutil3.hipo -t 16 $EVIOFILE
artifacts:
when: always
expire_in: 1 week
Expand Down
18 changes: 18 additions & 0 deletions bin/reco-mutil
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
#!/bin/bash

. `dirname $0`/../libexec/env.sh

split_cli $@

export MALLOC_ARENA_MAX=1

#threads=$(get_threads)
#node=$(((RANDOM % 2)))
#cpus=$(get_all_numa_cpus $node)
#cpus=$(get_numa_cpus $node)
#taskset -c $cpus \

java ${JAVA_OPTS-} -XX:MaxRAMPercentage=40.0 -Xms10240m ${jvm_options[@]} \
-cp ${COATJAVA_CLASSPATH:-''} \
org.jlab.clas.reco.RecoMutil \
${class_options[@]}
2 changes: 1 addition & 1 deletion bin/recon-util
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

split_cli $@

export MALLOC_ARENA_MAX=1
export MALLOC_ARENA_MAX=12

java ${JAVA_OPTS-} -Xmx1536m -Xms1024m -XX:+UseSerialGC ${jvm_options[@]} \
-cp ${COATJAVA_CLASSPATH:-''} \
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,19 +5,16 @@
import org.jlab.detector.calib.utils.ConstantsManager;
import org.jlab.detector.serial.SerialHoncho;
import org.jlab.detector.serial.Occupancer;
import org.jlab.jnp.hipo4.data.Bank;
import org.jlab.io.utils.ParaTrigWriter;
import org.jlab.jnp.hipo4.data.Event;
import org.jlab.jnp.hipo4.data.SchemaFactory;
import org.jlab.jnp.hipo4.io.HipoWriterSorted;
import org.jlab.jnp.utils.file.FileUtils;
import org.json.JSONObject;

/**
*
* 1. Copies certain banks on-the-fly to new tag-1 events
* 2. Caches helicity states, scaler readouts, and unix time
* 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
Expand All @@ -26,20 +23,14 @@ public class Clas12Writer extends HipoToHipoWriter {

Occupancer occupancer;
SerialHoncho serial;
Bank runConfig;
ConstantsManager conman;
SchemaFactory fullSchema;
HipoWriterSorted paraWriter;
long paraCount;
ParaTrigWriter paraWriter;
long paraTriggerMask;
int paraTriggerPrescale;

private void init(JSONObject opts) {
occupancer = new Occupancer(opts.optLong("occTriggerMask",(long)1<<39),opts.optInt("occEvents",100));
fullSchema = new SchemaFactory();
fullSchema.initFromDirectory(FileUtils.getEnvironmentPath("CLAS12DIR","etc/bankdefs/hipo4"));
serial = new SerialHoncho(fullSchema);
runConfig = new Bank(fullSchema.getSchema("RUN::config"));
serial = new SerialHoncho();
conman = new ConstantsManager();
conman.init("/runcontrol/hwp","/runcontrol/helicity");
paraTriggerMask = opts.optLong("paraTriggerMask", 0);
Expand All @@ -58,8 +49,7 @@ protected HipoWriterSorted createWriter(Path file, JSONObject opts) throws Event
String basename = file.getFileName().toString();
if (!basename.endsWith(".hipo")) basename += ".hipo";
if (paraTriggerMask > 0) {
paraWriter = new HipoWriterSorted();
paraWriter.getSchemaFactory().copy(fullSchema);
paraWriter = new ParaTrigWriter(paraTriggerMask, paraTriggerPrescale);
paraWriter.open(dirname + "/tb" + basename.substring(basename.indexOf("_")));
}
w.open(dirname + "/" + basename);
Expand All @@ -75,16 +65,9 @@ protected void writeEvent(Object event) throws EventWriterException {
if (!t.isEmpty()) writer.addEvent(t, 1);
occupancer.process(((Event)event));
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());
paraWriter.addEvent((Event)event);
if (!t.isEmpty()) paraWriter.addEvent(t, t.getEventTag());
}
}

Expand All @@ -95,5 +78,5 @@ protected void closeWriter() {
serial.clear();
if (paraTriggerMask > 0) paraWriter.close();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import org.jlab.jnp.hipo4.data.Schema;
import org.jlab.jnp.hipo4.data.SchemaFactory;
import org.jlab.jnp.hipo4.io.HipoWriterSorted;
import org.jlab.utils.CLASResources;

/**
*
Expand All @@ -33,21 +34,27 @@ public class SerialHoncho {
Schema recEvent;
Schema helScaler;
Schema helicityAdc;
Schema runScaler;
Schema rawScaler;
Schema epics;
volatile ConstantsManager conman;
volatile TreeMap<Integer,Integer> eventUnix;
volatile HelicitySequence helicitySequence;
volatile TreeSet<HelicityState> helicities;
volatile DaqScalersSequence scalers;
int run = 0;

public SerialHoncho(SchemaFactory schema) {
this.schema = schema;
public SerialHoncho() {
schema = CLASResources.getFullSchema();
conman = new ConstantsManager();
conman.init("/runcontrol/hwp","/runcontrol/helicity");
runConfig = schema.getSchema("RUN::config");
recEvent = schema.getSchema("REC::Event");
helicityAdc = schema.getSchema("HEL::adc");
helScaler = schema.getSchema("HEL::scaler");
runScaler = schema.getSchema("RUN::scaler");
rawScaler = schema.getSchema("RAW::scaler");
epics = schema.getSchema("RAW::epics");
scalers = new DaqScalersSequence(schema);
helicities = new TreeSet<>();
eventUnix = new TreeMap<>();
Expand All @@ -56,6 +63,10 @@ public SerialHoncho(SchemaFactory schema) {
tag1banks[i] = schema.getSchema(TAG1BANKS[i]);
}

public boolean containsSerial(Event e) {
return e.isEmpty() ? false : e.hasBank(rawScaler) || e.hasBank(epics);
}

/**
* Register an event's serial data and return a (possibly empty) tag-1 event.
* @param event
Expand Down Expand Up @@ -182,16 +193,16 @@ void prune() {
* @param runConfig
* @return
*/
Event getUnixEvent(Bank config) {
Event getUnixEvent(Bank runConfig) {
Bank unix = new Bank(schema.getSchema("RUN::unix"), eventUnix.size());
int row = 0;
for (int evno : eventUnix.keySet()) {
unix.putInt("event", row, evno);
unix.putInt("unixtime",row, eventUnix.get(evno));
unix.putInt("unixtime", row, eventUnix.get(evno));
row++;
}
Event e = new Event();
e.write(config);
e.write(runConfig);
e.write(unix);
return e;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package org.jlab.io.utils;

import org.jlab.io.banks.RUN_config;
import org.jlab.jnp.hipo4.data.Bank;
import org.jlab.jnp.hipo4.data.Event;
import org.jlab.jnp.hipo4.data.Schema;
import org.jlab.jnp.hipo4.data.SchemaFactory;
import org.jlab.jnp.hipo4.io.HipoWriterSorted;
import org.jlab.utils.CLASResources;

/**
*
* @author baltzell
*/
public class ParaTrigWriter extends HipoWriterSorted {

SchemaFactory schema = CLASResources.getFullSchema();
Schema runConfig = schema.getSchema("RUN::config");

long count;
long mask;
int prescale;

public ParaTrigWriter(long mask, int prescale) {
super();
this.mask = mask;
this.prescale = prescale;
setCompressionType(2);
getSchemaFactory().copy(schema);
}

@Override
public void addEvent(Event e) {
Bank b = new Bank(runConfig,1);
e.read(b);
if (b.getRows() > 0) {
if (mask > 0 && 0 != (b.getLong(RUN_config.trigger,0) & mask)) {
if (prescale<=0 || (++count % prescale) == 0) {
super.addEvent(e);
}
}
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,7 @@ public void initDefault(){
String[] names = new String[]{
"MAGFIELDS",
"DCCR","DCHB","FTOFHB","EC","HTCC","EBHB",
"DCTB","FTOFTB","EBTB","VTX"
"DCTB","FTOFTB","EBTB","OCC"
};

String[] services = new String[]{
Expand All @@ -150,7 +150,7 @@ public void initDefault(){
"org.jlab.service.dc.DCTBEngine",
"org.jlab.service.ftof.FTOFTBEngine",
"org.jlab.service.eb.EBTBEngine",
"org.jlab.rec.service.vtx.VTXEngine"
"org.jlab.calibration.service.OccupanceEngine",
};

for(int i = 0; i < names.length; i++){
Expand All @@ -166,7 +166,7 @@ public void initAll(){
"CVTFP","CTOF","CND","BAND",
"HTCC","LTCC","EBHB",
"DCTB","FMT","FTOFTB","CVT","EBTB",
"RICHEB","RTPC","AHDC","ATOF","ALERT", "MC","VTX"
"RICHEB","RTPC","AHDC","ATOF","ALERT", "MC","VTX","OCC"
};

String[] services = new String[]{
Expand Down Expand Up @@ -199,7 +199,8 @@ public void initAll(){
"org.jlab.service.atof.ATOFEngine",
"org.jlab.service.alert.ALERTEngine",
"org.jlab.service.mc.TruthMatch",
"org.jlab.rec.service.vtx.VTXEngine"
"org.jlab.rec.service.vtx.VTXEngine",
"org.jlab.calibration.service.OccupanceEngine",
};
if(names.length!=services.length)
LOGGER.log(Level.SEVERE, "initAll : the list of services does not match the list of service names... ");
Expand Down Expand Up @@ -319,6 +320,7 @@ public void processEvent(DataEvent event, HipoDataSync writer) {
processEvent(event);
occupancer.process(((HipoDataEvent)event).getHipoEvent());
removeBanks(event);
occupancer.process(((HipoDataEvent)event).getHipoEvent());
writer.writeEvent(event);
}

Expand Down Expand Up @@ -393,24 +395,6 @@ public void show(){
}
}

protected static OptionParser getParser() {
OptionParser parser = new OptionParser("recon-util");
parser.addRequired("-o","output.hipo");
parser.addRequired("-i","input.evio/hipo");
parser.setRequiresInputList(false);
parser.addOption("-c","0","use default configuration [0 - no, 1 - yes/default, 2 - all services] ");
parser.addOption("-s","0","number of events to skip");
parser.addOption("-n","0","number of events to process");
parser.addOption("-y","0","yaml file");
parser.addOption("-u","true","update dictionary from writer ? ");
parser.addOption("-S",null,"schema directory");
parser.addOption("-B",null,"background file");
parser.addOption("-P",null,"preload file for post-processing");
parser.addOption("-R","0","rebuild scalers");
parser.addOption("-H","0","restream helicity");
return parser;
}

protected final void init(OptionParser p) {
p.syncLogLevel(LOGGER);

Expand Down Expand Up @@ -452,7 +436,20 @@ else if (p.getOption("-c").intValue() > 0) {
}

public static void main(String[] args) {
OptionParser parser = EngineProcessor.getParser();
OptionParser parser = new OptionParser("recon-util");
parser.addRequired("-o","output.hipo");
parser.addRequired("-i","input.evio/hipo");
parser.addOption("-c","0","use default configuration [0 - no, 1 - yes/default, 2 - all services] ");
parser.addOption("-s","0","number of events to skip");
parser.addOption("-n","0","number of events to process");
parser.addOption("-y","0","yaml file");
parser.addOption("-u","true","update dictionary from writer ? ");
parser.addOption("-S",null,"schema directory");
parser.addOption("-B",null,"background file");
parser.addOption("-P",null,"preload file for post-processing");
parser.addOption("-R","0","rebuild scalers");
parser.addOption("-H","0","restream helicity");
parser.setRequiresInputList(false);
parser.parse(args);
EngineProcessor proc = new EngineProcessor(parser);
proc.processFile(parser.getOption("-i").stringValue(),
Expand Down
Loading
Loading