diff --git a/src/controlhost.jl b/src/controlhost.jl index 0d55d006e5762ad40ba520222451d11f261431a7..a5f00c45daeb3b292ad7f285ddcf4dcff1ebefb7 100644 --- a/src/controlhost.jl +++ b/src/controlhost.jl @@ -100,6 +100,7 @@ struct CHClient{T} end CHTag(::Type{T}) where T = error("No controlhost tag defined for type '$(T)'") CHTag(::Type{DAQEvent}) = CHTag("IO_EVT") +CHTag(::Type{DAQSummaryslice}) = CHTag("IO_SUM") CHClient(ip::IPv4, port::Integer, tags::Vector{CHTag}) = CHClient{CHMessage}(ip, port, tags) CHClient{T}(ip::IPv4, port::Integer) where T = CHClient{T}(ip, port, [CHTag(T)]) Base.eltype(::CHClient{T}) where T = T diff --git a/src/daq.jl b/src/daq.jl index d2f9981fd1340b50c7fa8a2a1f81525cd45d449e..2b6f530d4a9fd291ed8cc2c5b1daf11ac98ab7b6 100644 --- a/src/daq.jl +++ b/src/daq.jl @@ -1,4 +1,5 @@ # Online DAQ readout +using StaticArrays function Base.read(s::IO, ::Type{T}; legacy=false) where T<:DAQEvent length = read(s, Int32) @@ -52,3 +53,39 @@ function Base.read(s::IO, ::Type{T}; legacy=false) where T<:DAQEvent T(header, snapshot_hits, triggered_hits) end + + +function Base.read(s::IO, ::Type{T}; legacy=false) where T<:DAQSummaryslice + length = read(s, Int32) + type = read(s, Int32) + version = Int16(0) + !legacy && (version = read(s, Int16)) + + detector_id = read(s, Int32) + run_id = read(s, Int32) + frame_index = read(s, Int32) + utc_seconds = read(s, UInt32) + utc_16nanosecondcycles = read(s, UInt32) # 16ns ticks + + header = SummarysliceHeader( + detector_id, + run_id, + frame_index, + UTCExtended(utc_seconds, utc_16nanosecondcycles) + ) + n_frames = read(s, Int32) + summary_frames = Vector{SummaryFrame}() + sizehint!(summary_frames, n_frames) + @inbounds for i ∈ 1:n_frames + dom_id = read(s, Int32) + daq = read(s, UInt32) + status = read(s,UInt32) + fifo = read(s,UInt32) + status3 = read(s,UInt32) + status4 = read(s,UInt32) + rates = @SVector [read(s,UInt8) for i ∈ 1:31] + push!(summary_frames, SummaryFrame(dom_id, daq, status, fifo, status3, status4, rates)) + end + + T(header, summary_frames) +end diff --git a/src/exports.jl b/src/exports.jl index a4b7b646278fa1f9e441dc847bdb665ac09124f7..dfd35e56a0bca437f29a058c5bc47a34bbcc793b 100644 --- a/src/exports.jl +++ b/src/exports.jl @@ -44,6 +44,7 @@ ROOTFile, # Online dataformat DAQEvent, +DAQSummaryslice, EventHeader, SnapshotHit, SummaryFrame, diff --git a/src/types.jl b/src/types.jl index 7cb51ff1065e96d5b18276c316a6e697d4299245..efb969cc157090eb315da5f2e71bceca679763f6 100644 --- a/src/types.jl +++ b/src/types.jl @@ -205,3 +205,13 @@ struct DAQEvent snapshot_hits::Vector{SnapshotHit} triggered_hits::Vector{TriggeredHit} end + +""" + +DAQSummaryslice from JLigier + +""" +struct DAQSummaryslice + header::SummarysliceHeader + summary_frames::Vector{SummaryFrame} +end