DDAS Format  1.1.1
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 
31 namespace ddasfmt {
32 
66  public:
74  std::tuple<DDASHit, const uint32_t*> unpack(
75  const uint32_t* beg, const uint32_t* sentinel
76  );
90  const uint32_t* unpack(
91  const uint32_t* beg, const uint32_t* sentinel, DDASHit& hit
92  );
93 
94  protected:
104  const uint32_t* parseBodySize(
105  const uint32_t* beg, const uint32_t* sentinel
106  );
115  const uint32_t* parseModuleInfo(DDASHit& hit, const uint32_t* beg);
123  const uint32_t* parseHeaderWord0(DDASHit& hit, const uint32_t* beg);
130  const uint32_t* parseHeaderWords1And2(
131  DDASHit& hit, const uint32_t* beg
132  );
139  const uint32_t* parseHeaderWord3(DDASHit& hit, const uint32_t* beg);
147  const uint32_t* parseTraceData(DDASHit& hit, const uint32_t* beg);
156  std::tuple<double, uint32_t, uint32_t, uint32_t>
157  parseAndComputeCFD(uint32_t ModMSPS, uint32_t data);
165  double parseAndComputeCFD(DDASHit& hit, uint32_t data);
176  uint64_t computeCoarseTime(
177  uint32_t adcFrequency, uint32_t timeLow, uint32_t timeHigh
178  );
186  const uint32_t* extractEnergySums(
187  const uint32_t* data, DDASHit& hit
188  );
196  const uint32_t* extractQDC(
197  const uint32_t* data, DDASHit& hit
198  );
206  const uint32_t* extractExternalTimestamp(
207  const uint32_t* data, DDASHit& hit
208  );
209  };
210 
213 } // namespace ddasfmt
214 
215 #endif
216 
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:446
const uint32_t * parseHeaderWord3(DDASHit &hit, const uint32_t *beg)
Parse word 3 of the Pixie-16 data header.
Definition: DDASHitUnpacker.cpp:275
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:317
const uint32_t * parseModuleInfo(DDASHit &hit, const uint32_t *beg)
Parse the module identifying information encoded in the hit.
Definition: DDASHitUnpacker.cpp:186
const uint32_t * parseBodySize(const uint32_t *beg, const uint32_t *sentinel)
Ensure there is enough data to parse.
Definition: DDASHitUnpacker.cpp:162
const uint32_t * extractQDC(const uint32_t *data, DDASHit &hit)
Unpack QDC values.
Definition: DDASHitUnpacker.cpp:464
const uint32_t * parseTraceData(DDASHit &hit, const uint32_t *beg)
Unpack the trace data.
Definition: DDASHitUnpacker.cpp:294
const uint32_t * parseHeaderWord0(DDASHit &hit, const uint32_t *beg)
Parse the word 0 of the Pixie-16 data header.
Definition: DDASHitUnpacker.cpp:212
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:415
const uint32_t * parseHeaderWords1And2(DDASHit &hit, const uint32_t *beg)
Parse words 1 and 2 of the Pixie-16 data header.
Definition: DDASHitUnpacker.cpp:243
std::tuple< DDASHit, const uint32_t * > unpack(const uint32_t *beg, const uint32_t *sentinel)
Unpack data into a DDASHit.
Definition: DDASHitUnpacker.cpp:147
const uint32_t * extractExternalTimestamp(const uint32_t *data, DDASHit &hit)
Unpack the external timestamp data.
Definition: DDASHitUnpacker.cpp:481
Encapsulation of a generic DDAS event.
Definition: DDASHit.h:76