Skip to content

Commit bc83325

Browse files
authored
Add ansto ev44 alternative (#105)
* added an44 * updated readme
1 parent 598f7d8 commit bc83325

File tree

7 files changed

+544
-5
lines changed

7 files changed

+544
-5
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ https://github.com/ess-dmsc/streaming-data-types
1818
| ev42 | Event data (deprecated in favour of ev44) |
1919
| ev43 | Event data from multiple pulses |
2020
| ev44 | Event data with signed data types |
21+
| an44 | ev44 with ANSTO specific changes |
2122
| x5f2 | Status messages |
2223
| tdct | Timestamps |
2324
| ep00 | EPICS connection info (deprecated in favour of ep01) |

streaming_data_types/__init__.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,18 +11,19 @@
1111
deserialise_ep00,
1212
serialise_ep00,
1313
)
14+
from streaming_data_types.eventdata_an44 import deserialise_an44, serialise_an44
1415
from streaming_data_types.eventdata_ev42 import deserialise_ev42, serialise_ev42
1516
from streaming_data_types.eventdata_ev43 import deserialise_ev43, serialise_ev43
1617
from streaming_data_types.eventdata_ev44 import deserialise_ev44, serialise_ev44
1718
from streaming_data_types.finished_writing_wrdn import deserialise_wrdn, serialise_wrdn
18-
from streaming_data_types.forwarder_config_update_rf5k import (
19-
deserialise_rf5k,
20-
serialise_rf5k,
21-
)
2219
from streaming_data_types.forwarder_config_update_fc00 import (
2320
deserialise_fc00,
2421
serialise_fc00,
2522
)
23+
from streaming_data_types.forwarder_config_update_rf5k import (
24+
deserialise_rf5k,
25+
serialise_rf5k,
26+
)
2627
from streaming_data_types.histogram_hs00 import deserialise_hs00, serialise_hs00
2728
from streaming_data_types.histogram_hs01 import deserialise_hs01, serialise_hs01
2829
from streaming_data_types.json_json import deserialise_json, serialise_json
@@ -41,6 +42,7 @@
4142
__version__ = version
4243

4344
SERIALISERS = {
45+
"an44": serialise_an44,
4446
"ev42": serialise_ev42,
4547
"ev43": serialise_ev43,
4648
"ev44": serialise_ev44,
@@ -71,6 +73,7 @@
7173

7274

7375
DESERIALISERS = {
76+
"an44": deserialise_an44,
7477
"ev42": deserialise_ev42,
7578
"ev43": deserialise_ev43,
7679
"ev44": deserialise_ev44,

streaming_data_types/_version.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
# Version is not directly defined in __init__ because that causes all
22
# run time dependencies to become build-time dependencies when it is
33
# imported in setup.py
4-
version = "0.26.1"
4+
version = "0.27.0"
Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
from collections import namedtuple
2+
3+
import flatbuffers
4+
import numpy as np
5+
6+
import streaming_data_types.fbschemas.eventdata_an44.AN44EventMessage as AN44EventMessage
7+
from streaming_data_types.utils import check_schema_identifier
8+
9+
FILE_IDENTIFIER = b"an44"
10+
11+
12+
EventData = namedtuple(
13+
"EventData",
14+
(
15+
"source_name",
16+
"message_id",
17+
"reference_time",
18+
"reference_time_index",
19+
"time_of_flight",
20+
"pixel_id",
21+
"weight",
22+
),
23+
)
24+
25+
26+
def deserialise_an44(buffer):
27+
"""
28+
Deserialise FlatBuffer an44.
29+
30+
:param buffer: The FlatBuffers buffer.
31+
:return: The deserialised data.
32+
"""
33+
check_schema_identifier(buffer, FILE_IDENTIFIER)
34+
35+
event = AN44EventMessage.AN44EventMessage.GetRootAs(buffer, 0)
36+
37+
return EventData(
38+
event.SourceName().decode("utf-8"),
39+
event.MessageId(),
40+
event.ReferenceTimeAsNumpy(),
41+
event.ReferenceTimeIndexAsNumpy(),
42+
event.TimeOfFlightAsNumpy(),
43+
event.PixelIdAsNumpy(),
44+
event.WeightAsNumpy(),
45+
)
46+
47+
48+
def serialise_an44(
49+
source_name,
50+
message_id,
51+
reference_time,
52+
reference_time_index,
53+
time_of_flight,
54+
pixel_id,
55+
weight,
56+
):
57+
"""
58+
Serialise event data as an an44 FlatBuffers message.
59+
60+
:param source_name:
61+
:param message_id:
62+
:param reference_time:
63+
:param reference_time_index:
64+
:param time_of_flight:
65+
:param pixel_id:
66+
:param weight:
67+
:return:
68+
"""
69+
builder = flatbuffers.Builder(1024)
70+
builder.ForceDefaults(True)
71+
72+
source = builder.CreateString(source_name)
73+
ref_time_data = builder.CreateNumpyVector(
74+
np.asarray(reference_time).astype(np.int64)
75+
)
76+
ref_time_index_data = builder.CreateNumpyVector(
77+
np.asarray(reference_time_index).astype(np.int32)
78+
)
79+
tof_data = builder.CreateNumpyVector(np.asarray(time_of_flight).astype(np.int32))
80+
pixel_id_data = builder.CreateNumpyVector(np.asarray(pixel_id).astype(np.int32))
81+
weight_data = builder.CreateNumpyVector(np.asarray(weight).astype(np.int16))
82+
83+
AN44EventMessage.AN44EventMessageStart(builder)
84+
AN44EventMessage.AN44EventMessageAddReferenceTime(builder, ref_time_data)
85+
AN44EventMessage.AN44EventMessageAddReferenceTimeIndex(builder, ref_time_index_data)
86+
AN44EventMessage.AN44EventMessageAddTimeOfFlight(builder, tof_data)
87+
AN44EventMessage.AN44EventMessageAddPixelId(builder, pixel_id_data)
88+
AN44EventMessage.AN44EventMessageAddWeight(builder, weight_data)
89+
AN44EventMessage.AN44EventMessageAddMessageId(builder, message_id)
90+
AN44EventMessage.AN44EventMessageAddSourceName(builder, source)
91+
92+
data = AN44EventMessage.AN44EventMessageEnd(builder)
93+
builder.Finish(data, file_identifier=FILE_IDENTIFIER)
94+
95+
return bytes(builder.Output())

0 commit comments

Comments
 (0)