7 #include "pxardllexport.h"
10 #if ((defined WIN32) && (defined __CINT__))
12 typedef short int int16_t;
13 typedef unsigned int uint32_t;
14 typedef unsigned short int uint16_t;
15 typedef unsigned char uint8_t;
35 pixel() : _roc_id(0), _column(0), _row(0), _mean(0), _variance(0) {}
39 pixel(uint8_t roc_id, uint8_t column, uint8_t row,
double value) : _roc_id(roc_id), _column(column), _row(row), _variance(0) { setValue(value); }
43 pixel(uint32_t rawdata, uint8_t rocid,
bool invertAddress =
false) : _roc_id(rocid) { decodeRaw(rawdata,invertAddress); }
47 uint8_t
roc()
const {
return _roc_id; };
51 void setRoc(uint8_t roc) { _roc_id = roc; };
55 uint8_t
column()
const {
return _column; };
59 void setColumn(uint8_t column) { _column = column; };
63 uint8_t
row()
const {
return _row; };
67 void setRow(uint8_t row) { _row = row; };
71 double variance() {
return expandFloat(_variance); };
75 void setVariance(
double var) { _variance = compactFloat(var); };
80 return static_cast<double>(_mean);
86 _mean =
static_cast<int16_t
>(val);
91 bool operator == (
const pixel& px) {
92 return ((px.
roc() == _roc_id )
93 && (px.
column() == _column)
94 && (px.
row() == _row));
99 bool operator < (
const pixel& px)
const {
100 if(_roc_id == px.
roc()) {
101 if(_column == px.
column()) {
102 return _row < px.
row();
104 return _column < px.
column();
106 return _roc_id < px.
roc();
139 void decodeRaw(uint32_t raw,
bool invert);
144 uint16_t compactFloat(
double input) {
145 return static_cast<uint16_t
>(round(input*std::numeric_limits<uint16_t>::max()));
151 double expandFloat(uint16_t input) {
152 return static_cast<double>(input)/std::numeric_limits<uint16_t>::max();
158 out <<
"ROC " <<
static_cast<int>(px.
roc())
159 <<
" [" << static_cast<int>(px.
column()) <<
"," << static_cast<int>(px.
row())
160 <<
"," << static_cast<double>(px.
value()) <<
"]";
169 Event() : header(0), trailer(0), pixels() {}
170 void Clear() { header = 0; trailer = 0; pixels.clear();}
173 std::vector<pixel> pixels;
178 out <<
"====== " << std::hex << static_cast<uint16_t>(evt.header) << std::dec <<
" ====== ";
179 for (std::vector<pixel>::iterator it = evt.pixels.begin(); it != evt.pixels.end(); ++it)
193 void SetStartError() { flags |= 1; }
194 void SetEndError() { flags |= 2; }
195 void SetOverflow() { flags |= 4; }
196 void ResetStartError() { flags &=
static_cast<unsigned int>(~1); }
197 void ResetEndError() { flags &=
static_cast<unsigned int>(~2); }
198 void ResetOverflow() { flags &=
static_cast<unsigned int>(~4); }
199 void Clear() { flags = 0; data.clear(); }
200 bool IsStartError() {
return (flags & 1) != 0; }
201 bool IsEndError() {
return (flags & 2) != 0; }
202 bool IsOverflow() {
return (flags & 4) != 0; }
204 size_t GetSize() {
return data.size(); }
205 void Add(uint16_t value) { data.push_back(value); }
206 uint16_t operator[](
size_t index) {
return data.at(index); }
208 std::vector<uint16_t> data;
221 out <<
"====== " << std::hex << static_cast<uint16_t>(record.flags) << std::dec <<
" ====== ";
222 for (std::vector<uint16_t>::iterator it = record.data.begin(); it != record.data.end(); ++it)
223 out << std::hex << (*it) << std::dec <<
" ";
236 _trim(15), _mask(
true), _enable(
false) {}
237 pixelConfig(uint8_t column, uint8_t row, uint8_t trim,
bool mask =
true,
bool enable =
false) :
238 _column(column), _row(row), _trim(trim),
239 _mask(mask), _enable(enable) {}
240 uint8_t column()
const {
return _column; }
241 void setColumn(uint8_t column) { _column = column; }
242 uint8_t row()
const {
return _row; }
243 void setRow(uint8_t row) { _row = row; }
244 uint8_t roc()
const {
return _roc_id; }
245 void setRoc(uint8_t roc) { _roc_id = roc; }
246 uint8_t trim()
const {
return _trim; }
247 void setTrim(uint8_t trim) { _trim = trim; }
248 bool mask()
const {
return _mask; }
249 void setMask(
bool mask) { _mask = mask; }
250 bool enable()
const {
return _enable; }
251 void setEnable(
bool enable) { _enable = enable; }
268 rocConfig() : pixels(), dacs(), type(0), _enable(
true) {}
269 std::vector< pixelConfig > pixels;
270 std::map< uint8_t,uint8_t > dacs;
273 bool enable()
const {
return _enable; }
274 void setEnable(
bool enable) { _enable = enable; }
285 tbmConfig() : dacs(), type(0), enable(
true) {}
286 std::map< uint8_t,uint8_t > dacs;
296 friend class dtbEventDecoder;
300 m_errors_event_start(0),
301 m_errors_event_stop(0),
302 m_errors_event_overflow(0),
303 m_errors_event_invalid_words(0),
304 m_errors_event_invalid_xor(0),
305 m_errors_tbm_header(0),
306 m_errors_tbm_trailer(0),
307 m_errors_tbm_eventid_mismatch(0),
308 m_errors_roc_missing(0),
309 m_errors_roc_readback(0),
310 m_errors_pixel_address(0),
311 m_errors_pixel_pulseheight(0),
312 m_errors_pixel_buffer_corrupt(0)
318 uint32_t info_words_read() {
return m_info_words_read; }
319 uint32_t info_pixels_valid() {
return m_info_pixels_valid; }
322 return (errors_pixel() + errors_tbm() + errors_roc() + errors_event());
324 uint32_t errors_event() {
325 return (errors_event_start()
326 + errors_event_stop()
327 + errors_event_overflow()
328 + errors_event_invalid_words()
329 + errors_event_invalid_xor());
331 uint32_t errors_tbm() {
332 return (errors_tbm_header()
333 + errors_tbm_trailer()
334 + errors_tbm_eventid_mismatch());
336 uint32_t errors_roc() {
337 return (errors_roc_missing()
338 + errors_roc_readback());
340 uint32_t errors_pixel() {
341 return (errors_pixel_incomplete()
342 + errors_pixel_address()
343 + errors_pixel_pulseheight()
344 + errors_pixel_buffer_corrupt());
346 uint32_t errors_event_start() {
return m_errors_event_start; }
347 uint32_t errors_event_stop() {
return m_errors_event_stop; }
348 uint32_t errors_event_overflow() {
return m_errors_event_overflow; }
349 uint32_t errors_event_invalid_words() {
return m_errors_event_invalid_words; }
350 uint32_t errors_event_invalid_xor() {
return m_errors_event_invalid_xor; }
351 uint32_t errors_tbm_header() {
return m_errors_tbm_header; }
352 uint32_t errors_tbm_eventid_mismatch() {
return m_errors_tbm_eventid_mismatch; }
353 uint32_t errors_tbm_trailer() {
return m_errors_tbm_trailer; }
354 uint32_t errors_roc_missing() {
return m_errors_roc_missing; }
355 uint32_t errors_roc_readback() {
return m_errors_roc_readback; }
356 uint32_t errors_pixel_incomplete() {
return m_errors_pixel_incomplete; }
357 uint32_t errors_pixel_address() {
return m_errors_pixel_address; };
358 uint32_t errors_pixel_pulseheight() {
return m_errors_pixel_pulseheight; };
359 uint32_t errors_pixel_buffer_corrupt() {
return m_errors_pixel_buffer_corrupt; };
365 uint32_t m_info_words_read;
371 uint32_t m_info_pixels_valid;
374 uint32_t m_errors_event_start;
376 uint32_t m_errors_event_stop;
378 uint32_t m_errors_event_overflow;
380 uint32_t m_errors_event_invalid_words;
382 uint32_t m_errors_event_invalid_xor;
385 uint32_t m_errors_tbm_header;
387 uint32_t m_errors_tbm_trailer;
389 uint32_t m_errors_tbm_eventid_mismatch;
392 uint32_t m_errors_roc_missing;
394 uint32_t m_errors_roc_readback;
397 uint32_t m_errors_pixel_incomplete;
399 uint32_t m_errors_pixel_address;
401 uint32_t m_errors_pixel_pulseheight;
403 uint32_t m_errors_pixel_buffer_corrupt;
pixel(uint32_t rawdata, uint8_t rocid, bool invertAddress=false)
void setValue(double val)
friend std::ostream & operator<<(std::ostream &out, pixel &px)
void setVariance(double var)
void setColumn(uint8_t column)
friend std::ostream & operator<<(std::ostream &out, Event &evt)
friend std::ostream & operator<<(std::ostream &out, rawEvent &record)
pixel(uint8_t roc_id, uint8_t column, uint8_t row, double value)