Skip to content

Commit 03741ae

Browse files
committed
add a EVIO/HIPO clara reader
1 parent 911e3e3 commit 03741ae

File tree

3 files changed

+106
-2
lines changed

3 files changed

+106
-2
lines changed
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
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+
EvioSource evio;
24+
HipoReader hipo;
25+
CLASDecoder4 decoder;
26+
private long maxEvents;
27+
private Double torus;
28+
private Double solenoid;
29+
30+
@Override
31+
protected Object createReader(Path path, JSONObject opts) throws EventReaderException {
32+
if (path.toString().endsWith(".hipo")) {
33+
evio = null;
34+
hipo = new HipoReader();
35+
hipo.open(path.toString());
36+
return hipo;
37+
}
38+
else {
39+
hipo = null;
40+
evio = new EvioSource();
41+
evio.open(path.toString());
42+
maxEvents = evio.getEventCount();
43+
decoder = new CLASDecoder4();
44+
torus = opts.has("torus") ? opts.getDouble("torus") : null;
45+
solenoid = opts.has("solenoid") ? opts.getDouble("solenoid") : null;
46+
if (opts.has("variation")) decoder.setVariation(opts.getString("variation"));
47+
if (opts.has("timestamp")) decoder.setTimestamp(opts.getString("timestamp"));
48+
return evio;
49+
}
50+
}
51+
52+
@Override
53+
protected void closeReader() {
54+
if (evio==null) ((HipoReader)reader).close();
55+
else ((EvioSource)reader).close();
56+
}
57+
58+
@Override
59+
protected int readEventCount() throws EventReaderException {
60+
if (evio==null) return ((HipoReader)reader).getEventCount();
61+
else return ((EvioSource)reader).getEventCount();
62+
}
63+
64+
@Override
65+
protected Object readEvent(int eventNumber) throws EventReaderException {
66+
try {
67+
if (evio==null) {
68+
return ((HipoReader)reader).getEvent(new Event(),eventNumber);
69+
}
70+
else {
71+
if (eventNumber++ >= maxEvents) return null;
72+
ByteBuffer bb = ((EvioSource)reader).getEventBuffer(eventNumber, true);
73+
EvioDataEvent evio = new EvioDataEvent(bb.array(), readByteOrder());
74+
Event hipo = decoder.getDecodedEvent(evio, -1, eventNumber, torus, solenoid);
75+
return hipo;
76+
}
77+
} catch (EvioException e) {
78+
throw new EventReaderException(e);
79+
}
80+
}
81+
82+
@Override
83+
public ByteOrder readByteOrder() throws EventReaderException {
84+
return ByteOrder.LITTLE_ENDIAN;
85+
}
86+
87+
@Override
88+
protected EngineDataType getDataType() {
89+
return Clas12Types.HIPO;
90+
}
91+
92+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
---
2+
name: CLAS12Reader
3+
engine: org.jlab.io.clara.CLAS12Reader
4+
type: java
5+
6+
author: Nathan Baltzell
7+
email: baltzell@jlab.org
8+
9+
version: 0.1
10+
description:
11+
Reads EVIO or HIPO events from a file, converting to HIPO via "decoding" if EVIO.
12+

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)