Skip to content

Commit 09941e3

Browse files
authored
feat: add Clas12Reader clara IO service, for EVIO/HIPO (#1025)
* add Clas12Reader * switch to Clas12Reader
1 parent 429dbf4 commit 09941e3

File tree

4 files changed

+104
-3
lines changed

4 files changed

+104
-3
lines changed
Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
package org.jlab.io.clara;
2+
3+
import java.nio.ByteBuffer;
4+
import java.nio.ByteOrder;
5+
import java.nio.file.Path;
6+
import org.jlab.clara.engine.EngineDataType;
7+
import org.jlab.clara.std.services.AbstractEventReaderService;
8+
import org.jlab.clara.std.services.EventReaderException;
9+
import org.jlab.coda.jevio.EvioException;
10+
import org.jlab.detector.decode.CLASDecoder4;
11+
import org.jlab.io.evio.EvioDataEvent;
12+
import org.jlab.io.evio.EvioSource;
13+
import org.jlab.jnp.hipo4.data.Event;
14+
import org.jlab.jnp.hipo4.io.HipoReader;
15+
import org.json.JSONObject;
16+
17+
/**
18+
*
19+
* @author baltzell
20+
*/
21+
public class Clas12Reader extends AbstractEventReaderService<Object> {
22+
23+
boolean evio;
24+
CLASDecoder4 decoder;
25+
private long maxEvents;
26+
private Double torus;
27+
private Double solenoid;
28+
29+
@Override
30+
protected Object createReader(Path path, JSONObject opts) throws EventReaderException {
31+
if (path.toString().endsWith(".hipo")) {
32+
evio = false;
33+
HipoReader r = new HipoReader();
34+
r.open(path.toString());
35+
return r;
36+
}
37+
else {
38+
evio = true;
39+
EvioSource r = new EvioSource();
40+
r.open(path.toString());
41+
maxEvents = r.getEventCount();
42+
decoder = new CLASDecoder4();
43+
torus = opts.has("torus") ? opts.getDouble("torus") : null;
44+
solenoid = opts.has("solenoid") ? opts.getDouble("solenoid") : null;
45+
if (opts.has("variation")) decoder.setVariation(opts.getString("variation"));
46+
if (opts.has("timestamp")) decoder.setTimestamp(opts.getString("timestamp"));
47+
return r;
48+
}
49+
}
50+
51+
@Override
52+
protected void closeReader() {
53+
if (evio) ((EvioSource)reader).close();
54+
else ((HipoReader)reader).close();
55+
}
56+
57+
@Override
58+
protected int readEventCount() throws EventReaderException {
59+
if (evio) return ((EvioSource)reader).getEventCount();
60+
else return ((HipoReader)reader).getEventCount();
61+
}
62+
63+
@Override
64+
protected Object readEvent(int eventNumber) throws EventReaderException {
65+
try {
66+
if (evio) {
67+
if (eventNumber++ >= maxEvents) return null;
68+
ByteBuffer b = ((EvioSource)reader).getEventBuffer(eventNumber, true);
69+
EvioDataEvent e = new EvioDataEvent(b.array(), readByteOrder());
70+
return decoder.getDecodedEvent(e, -1, eventNumber, torus, solenoid);
71+
}
72+
else {
73+
return ((HipoReader)reader).getEvent(new Event(),eventNumber);
74+
}
75+
} catch (EvioException e) {
76+
throw new EventReaderException(e);
77+
}
78+
}
79+
80+
@Override
81+
public ByteOrder readByteOrder() throws EventReaderException {
82+
return ByteOrder.LITTLE_ENDIAN;
83+
}
84+
85+
@Override
86+
protected EngineDataType getDataType() {
87+
return Clas12Types.HIPO;
88+
}
89+
90+
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ protected HipoWriterSorted createWriter(Path file, JSONObject opts) throws Event
6666
init(opts);
6767
HipoWriterSorted w = new HipoWriterSorted();
6868
super.configure(w, opts);
69-
w.open(file.toString());
69+
w.open(file.toString().endsWith(".hipo") ? file.toString() : file.toString()+".hipo");
7070
return w;
7171
} catch (Exception e) {
7272
throw new EventWriterException(e);
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
---
2+
name: Clas12Reader
3+
engine: org.jlab.io.clara.Clas12Reader
4+
type: java
5+
6+
author: Nathan Baltzell
7+
8+
9+
version: 0.1
10+
description:
11+
Reads EVIO or HIPO events from a file, converting to HIPO via "decoding" if EVIO.

etc/services/rgd-clarode.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ configuration:
1919
outputBankPrefix: "HB"
2020
io-services:
2121
reader:
22-
class: org.jlab.io.clara.DecoderReader
23-
name: DecoderReader
22+
class: org.jlab.io.clara.Clas12Reader
23+
name: Clas12Reader
2424
writer:
2525
class: org.jlab.io.clara.DecoderWriter
2626
name: DecoderWriter

0 commit comments

Comments
 (0)