DDAS Format 2.1.0
A self-contained, lightweight format library and unpacker for DDAS data
DDASHitUnpacker.h
Go to the documentation of this file.
1/*
2 This software is Copyright by the Board of Trustees of Michigan
3 State University (c) Copyright 2016.
4
5 You may use this software under the terms of the GNU public license
6 (GPL). The terms of this license are described at:
7
8 http://www.gnu.org/licenses/gpl.txt
9
10 Author:
11 Jeromy Tompkins
12 Aaron Chester
13 Facility for Rare Isotope Beams
14 Michigan State University
15 East Lansing, MI 48824-1321
16*/
17
23#ifndef DDASHITUNPACKER_H
24#define DDASHITUNPACKER_H
25
26#include "DDASHit.h"
27
28#include <tuple>
29
31namespace ddasfmt {
32
66public:
76 std::tuple<DDASHit, const uint32_t *> unpack(const uint32_t *beg,
77 const uint32_t *sentinel);
89 const uint32_t *unpack(const uint32_t *beg, const uint32_t *sentinel,
90 DDASHit &hit);
91
92protected:
101 const uint32_t *parseBodySize(const uint32_t *data, const uint32_t *sentinel);
109 const uint32_t *parseModuleInfo(DDASHit &hit, const uint32_t *data);
116 const uint32_t *parseHeaderWord0(DDASHit &hit, const uint32_t *data);
123 const uint32_t *parseHeaderWords1And2(DDASHit &hit, const uint32_t *data);
130 const uint32_t *parseHeaderWord3(DDASHit &hit, const uint32_t *data);
137 const uint32_t *parseTraceData(DDASHit &hit, const uint32_t *data);
147 std::tuple<double, uint32_t, uint32_t, uint32_t>
148 parseAndComputeCFD(uint32_t ModMSPS, uint32_t data);
157 double parseAndComputeCFD(DDASHit &hit, uint32_t data);
167 uint64_t computeCoarseTime(uint32_t adcFrequency, uint32_t timeLow,
168 uint32_t timeHigh);
176 const uint32_t *extractEnergySums(const uint32_t *data, DDASHit &hit);
183 const uint32_t *extractQDC(const uint32_t *data, DDASHit &hit);
191 const uint32_t *extractExternalTimestamp(const uint32_t *data, DDASHit &hit);
192};
193
196} // namespace ddasfmt
197
198#endif
DDASHit class definition.
Unpacker for DDAS data recorded by NSCLDAQ.
Definition: DDASHitUnpacker.h:65
const uint32_t * extractEnergySums(const uint32_t *data, DDASHit &hit)
Unpack energy sums.
Definition: DDASHitUnpacker.cpp:422
const uint32_t * parseHeaderWords1And2(DDASHit &hit, const uint32_t *data)
Parse words 1 and 2 of the Pixie-16 data header.
Definition: DDASHitUnpacker.cpp:243
std::tuple< double, uint32_t, uint32_t, uint32_t > parseAndComputeCFD(uint32_t ModMSPS, uint32_t data)
Determine the CFD correction to the leading-edge time in nanoseconds from the CFD word.
Definition: DDASHitUnpacker.cpp:313
const uint32_t * parseTraceData(DDASHit &hit, const uint32_t *data)
Unpack the trace data.
Definition: DDASHitUnpacker.cpp:289
const uint32_t * extractQDC(const uint32_t *data, DDASHit &hit)
Unpack QDC values.
Definition: DDASHitUnpacker.cpp:434
const uint32_t * parseModuleInfo(DDASHit &hit, const uint32_t *data)
Parse the module identifying information encoded in the hit.
Definition: DDASHitUnpacker.cpp:178
uint64_t computeCoarseTime(uint32_t adcFrequency, uint32_t timeLow, uint32_t timeHigh)
Compute time in nanoseconds from raw data (no CFD correction).
Definition: DDASHitUnpacker.cpp:388
const uint32_t * parseBodySize(const uint32_t *data, const uint32_t *sentinel)
Ensure there is enough data to parse.
Definition: DDASHitUnpacker.cpp:159
const uint32_t * parseHeaderWord3(DDASHit &hit, const uint32_t *data)
Parse word 3 of the Pixie-16 data header.
Definition: DDASHitUnpacker.cpp:274
std::tuple< DDASHit, const uint32_t * > unpack(const uint32_t *beg, const uint32_t *sentinel)
Unpack data into a DDASHit.
Definition: DDASHitUnpacker.cpp:146
const uint32_t * extractExternalTimestamp(const uint32_t *data, DDASHit &hit)
Unpack the external timestamp data.
Definition: DDASHitUnpacker.cpp:452
const uint32_t * parseHeaderWord0(DDASHit &hit, const uint32_t *data)
Parse the word 0 of the Pixie-16 data header.
Definition: DDASHitUnpacker.cpp:206
Encapsulation of a generic DDAS event.
Definition: DDASHit.h:76