11package 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 ;
93import java .util .List ;
10- import java .util .Map ;
114import java .util .TreeMap ;
125
136import org .jlab .jnp .hipo4 .data .Bank ;
2316import org .jlab .detector .scalers .DaqScalersSequence ;
2417import org .jlab .detector .helicity .HelicityBit ;
2518import 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