Skip to content

Commit e5dd491

Browse files
authored
feat: finish old, new post-processing (#1292)
* finish the old new postprocessor * add new postprocessor * remove constructor * cleanup constructors * process all events * cleanup/bugfix
1 parent 18cac58 commit e5dd491

3 files changed

Lines changed: 75 additions & 95 deletions

File tree

bin/postprocess2

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
#!/bin/bash
2+
3+
. `dirname $0`/../libexec/env.sh
4+
5+
export MALLOC_ARENA_MAX=1
6+
7+
java ${JAVA_OPTS-} -Xmx768m -Xms768m -XX:+UseSerialGC \
8+
-cp ${COATJAVA_CLASSPATH:-''} \
9+
org.jlab.analysis.postprocess.Processor \
10+
$*

common-tools/clara-io/src/main/java/org/jlab/io/clara/Clas12Writer.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import java.io.File;
44
import java.nio.file.Path;
5+
import java.util.List;
56
import java.util.TreeMap;
67
import java.util.TreeSet;
78
import org.jlab.analysis.postprocess.Processor;
@@ -145,9 +146,9 @@ private Event getUnixEvent(Bank config) {
145146
*/
146147
private void postprocess() {
147148
int d = conman.getConstants(getRunNumber(), "/runcontrol/helicity").getIntValue("delay",0,0,0);
148-
HelicitySequenceDelayed h = new HelicitySequenceDelayed(d);
149-
h.addStream(helicities);
150-
Processor p = new Processor(fullSchema, h, scalers);
149+
HelicitySequenceDelayed helicity = new HelicitySequenceDelayed(d);
150+
helicity.addStream(helicities);
151+
Processor p = new Processor(List.of(filename), fullSchema, helicity, scalers);
151152
HipoReader r = new HipoReader();
152153
r.open(filename);
153154
Event e = new Event();

common-tools/clas-analysis/src/main/java/org/jlab/analysis/postprocess/Processor.java

Lines changed: 61 additions & 92 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,6 @@
11
package org.jlab.analysis.postprocess;
22

3-
import java.io.File;
4-
import java.nio.file.FileSystems;
5-
import java.nio.file.PathMatcher;
6-
import java.util.ArrayList;
7-
import java.util.Arrays;
8-
import java.util.HashMap;
93
import java.util.List;
10-
import java.util.Map;
114
import java.util.TreeMap;
125

136
import org.jlab.jnp.hipo4.data.Bank;
@@ -23,6 +16,9 @@
2316
import org.jlab.detector.scalers.DaqScalersSequence;
2417
import org.jlab.detector.helicity.HelicityBit;
2518
import org.jlab.detector.helicity.HelicitySequenceDelayed;
19+
import org.jlab.jnp.hipo4.io.HipoWriterSorted;
20+
import org.jlab.utils.options.OptionParser;
21+
import org.jlab.utils.system.ClasUtilsFile;
2622

2723
/**
2824
*
@@ -32,9 +28,6 @@ public class Processor {
3228

3329
public static final String CCDB_TABLES[] = {"/runcontrol/fcup","/runcontrol/slm",
3430
"/runcontrol/helicity","/daq/config/scalers/dsc1","/runcontrol/hwp"};
35-
public static final String DEF_PRELOAD_GLOB = "*.{hipo,h5}";
36-
37-
private final String outputPrefix = "tmp_";
3831

3932
private Bank runConfig = null;
4033
private Bank recEvent = null;
@@ -44,61 +37,30 @@ public class Processor {
4437
private HelicitySequenceDelayed helicitySequence = null;
4538
private TreeMap<Integer,Integer> eventUnix = null;
4639

47-
public Processor(File file, boolean restream, boolean rebuild) {
48-
configure(Arrays.asList(file.getAbsolutePath()), restream, rebuild);
49-
}
50-
51-
public Processor(String dir, boolean restream, boolean rebuild) {
52-
configure(findPreloadFiles(dir,DEF_PRELOAD_GLOB), restream, rebuild);
53-
}
54-
55-
public Processor(String dir, String glob, boolean restream, boolean rebuild) {
56-
configure(findPreloadFiles(dir,glob), restream, rebuild);
57-
}
58-
59-
public Processor(SchemaFactory schema, HelicitySequenceDelayed h, DaqScalersSequence s) {
40+
public Processor(List<String> files, boolean restream, boolean rebuild) {
41+
HipoReader r = new HipoReader();
42+
r.open(files.get(0));
43+
schemaFactory = r.getSchemaFactory();
44+
r.close();
45+
runConfig = new Bank(schemaFactory.getSchema("RUN::config"));
46+
recEvent = new Bank(schemaFactory.getSchema("REC::Event"));
6047
conman = new ConstantsManager();
6148
conman.init(CCDB_TABLES);
49+
helicitySequence = Util.getHelicity(files, schemaFactory, restream, conman);
50+
if (rebuild) chargeSequence = DaqScalersSequence.rebuildSequence(1, conman, files);
51+
else chargeSequence = DaqScalersSequence.readSequence(files);
52+
eventUnix = getEventUnixMap(schemaFactory, files);
53+
}
54+
55+
public Processor(List<String> files, SchemaFactory schema, HelicitySequenceDelayed h, DaqScalersSequence s) {
6256
schemaFactory = schema;
6357
helicitySequence = h;
6458
chargeSequence = s;
6559
runConfig = new Bank(schemaFactory.getSchema("RUN::config"));
6660
recEvent = new Bank(schemaFactory.getSchema("REC::Event"));
67-
}
68-
69-
private void configure(List<String> preloadFiles, boolean restream, boolean rebuild) {
70-
if (!preloadFiles.isEmpty()) {
71-
HipoReader r = new HipoReader();
72-
r.open(preloadFiles.get(0));
73-
schemaFactory = r.getSchemaFactory();
74-
r.close();
75-
runConfig = new Bank(schemaFactory.getSchema("RUN::config"));
76-
recEvent = new Bank(schemaFactory.getSchema("REC::Event"));
77-
conman = new ConstantsManager();
78-
conman.init(CCDB_TABLES);
79-
helicitySequence = Util.getHelicity(preloadFiles, schemaFactory, restream, conman);
80-
if (rebuild) chargeSequence = DaqScalersSequence.rebuildSequence(1, conman, preloadFiles);
81-
else chargeSequence = DaqScalersSequence.readSequence(preloadFiles);
82-
eventUnix = getEventUnixMap(schemaFactory, preloadFiles);
83-
}
84-
}
85-
86-
/**
87-
* Get a list of files to preload, from one directory and a glob.
88-
* @param dir
89-
* @param glob
90-
* @return list of preload files
91-
*/
92-
private static List<String> findPreloadFiles(String dir, String glob) {
93-
List<String> ret = new ArrayList<>();
94-
if (dir != null) {
95-
PathMatcher matcher = FileSystems.getDefault().getPathMatcher("glob:"+dir+"/"+glob);
96-
for (File f : (new File(dir)).listFiles()) {
97-
if (matcher.matches(f.toPath()))
98-
ret.add(f.getPath());
99-
}
100-
}
101-
return ret;
61+
conman = new ConstantsManager();
62+
conman.init(CCDB_TABLES);
63+
eventUnix = getEventUnixMap(schemaFactory, files);
10264
}
10365

10466
/**
@@ -108,20 +70,18 @@ private static List<String> findPreloadFiles(String dir, String glob) {
10870
* @return map
10971
*/
11072
public static TreeMap<Integer,Integer> getEventUnixMap(SchemaFactory schema, List<String> files) {
111-
Bank unix = new Bank(schema.getSchema("RUN::unix"));
11273
TreeMap<Integer,Integer> m = new TreeMap<>();
11374
Event e = new Event();
75+
Bank b = schema.getBank("RUN::unix");//new Bank(schema.getSchema("RUN::unix"));
11476
for (String f : files) {
11577
HipoReader r = new HipoReader();
11678
r.setTags(1);
11779
r.open(f);
11880
while (r.hasNext()) {
11981
r.nextEvent(e);
120-
e.read(unix);
121-
int size = unix.getRows();
122-
for (int i=0; i<size; i++) {
123-
m.put(unix.getInt("event",i), unix.getInt("unixtime",i));
124-
}
82+
e.read(b);
83+
int size = b.getRows();
84+
for (int i=0; i<size; i++) m.put(b.getInt("event",i), b.getInt("unixtime",i));
12585
}
12686
r.close();
12787
}
@@ -156,8 +116,8 @@ private void processEventHelicity(DataEvent event, DataBank runcfg, DataBank rec
156116
private void processEventHelicity(Event event, Bank runcfg, Bank recevt) {
157117
HelicityBit hb = helicitySequence.search(runcfg.getLong("timestamp", 0));
158118
HelicityBit hbraw = helicitySequence.getHalfWavePlate() ? HelicityBit.getFlipped(hb) : hb;
159-
recevt.setByte("helicity",0,hb.value());
160-
recevt.setByte("helicityRaw",0,hbraw.value());
119+
recevt.putByte("helicity",0,hb.value());
120+
recevt.putByte("helicityRaw",0,hbraw.value());
161121
Bank helScaler = new Bank(schemaFactory.getSchema("HEL::scaler"));
162122
event.read(helScaler);
163123
if (helScaler.getRows()>0) {
@@ -272,37 +232,46 @@ public void processEvent(Event event) {
272232
}
273233

274234
/**
275-
* Create rebuilt files from preload files.
276-
* @param files
277-
* @return map of rebuilt:preload files
235+
* The "postprocess" program.
236+
* @param args
278237
*/
279-
private Map<String,String> rebuild(String dir, List<String> files) {
280-
File d = new File(dir);
281-
if (!d.canWrite()) {
282-
throw new RuntimeException("No write permissions on "+dir);
283-
}
284-
Map<String,String> rebuiltFiles = new HashMap<>();
285-
for (String preloadFile : files) {
286-
String rebuiltFile = dir+"/"+outputPrefix+preloadFile.replace(dir+"/","");
287-
Util.rebuildScalers(conman, preloadFile, rebuiltFile);
288-
rebuiltFiles.put(rebuiltFile,preloadFile);
238+
public static void main(String args[]) {
239+
240+
OptionParser o = new OptionParser("postprocess");
241+
o.addOption("-f","0","reflip: rebuild the HEL::flip bank");
242+
o.addOption("-c","0","recharge: rebuild the RUN/HEL::scaler banks");
243+
o.addOption("-o",null,"merged output file path");
244+
o.setRequiresInputList(true);
245+
o.parse(args);
246+
247+
boolean restream = !o.getOption("-f").isDefault();
248+
boolean rebuild = !o.getOption("-c").isDefault();
249+
250+
Processor post = new Processor(o.getInputList(), restream, rebuild);
251+
252+
HipoWriterSorted writer = null;
253+
254+
if (!o.getOption("-o").isDefault()) {
255+
writer = new HipoWriterSorted();
256+
SchemaFactory schema = writer.getSchemaFactory();
257+
schema.initFromDirectory(ClasUtilsFile.getResourceDir("CLAS12DIR", "etc/bankdefs/hipo4"));
258+
writer.setCompressionType(2);
259+
writer.open(o.getOption("-o").stringValue());
289260
}
290-
return rebuiltFiles;
291-
}
292261

293-
/**
294-
* Replace files with new ones.
295-
* @param files map of new:old filenames
296-
*/
297-
private static void replace(Map<String,String> files) {
298-
for (String rebuiltFile : files.keySet()) {
299-
new File(files.get(rebuiltFile)).delete();
300-
new File(rebuiltFile).renameTo(new File(files.get(rebuiltFile)));
262+
for (String f : o.getInputList()) {
263+
HipoReader reader = new HipoReader();
264+
reader.open(f);
265+
Event event = new Event();
266+
while (reader.hasNext()) {
267+
reader.nextEvent(event);
268+
post.processEvent(event);
269+
if (writer != null) writer.addEvent(event);
270+
}
271+
reader.close();
301272
}
302-
}
303273

304-
public static void main(String args[]) {
305-
Processor p = new Processor(System.getenv("HOME")+"/tmp","r*.hipo",false,false);
274+
if (writer != null) writer.close();
306275
}
307276

308277
}

0 commit comments

Comments
 (0)