LDMX Software
HgcrocTrigDigi.cxx
1#include "Recon/Event/HgcrocTrigDigi.h"
2
3#include <iostream>
4
6
7namespace ldmx {
8HgcrocTrigDigi::HgcrocTrigDigi(uint32_t tid, uint8_t tp) : tid_(tid), tp_{tp} {}
9
10uint8_t HgcrocTrigDigi::linear2Compressed(uint32_t lin) {
11 if (lin >= 0x40000) return 0x7F; // saturation
12 if (lin >= 0x20000) return 0x78 | ((lin >> 14) & 0x7);
13 if (lin >= 0x10000) return 0x70 | ((lin >> 13) & 0x7);
14 if (lin >= 0x8000) return 0x68 | ((lin >> 12) & 0x7);
15 if (lin >= 0x4000) return 0x60 | ((lin >> 11) & 0x7);
16 if (lin >= 0x2000) return 0x58 | ((lin >> 10) & 0x7);
17 if (lin >= 0x1000) return 0x50 | ((lin >> 9) & 0x7);
18 if (lin >= 0x800) return 0x48 | ((lin >> 8) & 0x7);
19 if (lin >= 0x400) return 0x40 | ((lin >> 7) & 0x7);
20 if (lin >= 0x200) return 0x38 | ((lin >> 6) & 0x7);
21 if (lin >= 0x100) return 0x30 | ((lin >> 5) & 0x7);
22 if (lin >= 0x80) return 0x28 | ((lin >> 4) & 0x7);
23 if (lin >= 0x40) return 0x20 | ((lin >> 3) & 0x7);
24 if (lin >= 0x20) return 0x18 | ((lin >> 2) & 0x7);
25 if (lin >= 0x10) return 0x10 | ((lin >> 1) & 0x7);
26 if (lin >= 0x08)
27 return 0x08 | ((lin >> 0) & 0x7);
28 else
29 return lin & 0x7;
30}
31
32uint32_t HgcrocTrigDigi::compressed2Linear(uint8_t comp) {
33 uint32_t v1 = ((comp & 0x78) == 0)
34 ? (comp)
35 : ((0x8 | (comp & 0x7)) << ((comp >> 3) - 1));
36 uint8_t comp2 = comp + 1;
37 uint32_t v2 = ((comp2 & 0x78) == 0)
38 ? (comp2)
39 : ((0x8 | (comp2 & 0x7)) << ((comp2 >> 3) - 1));
40 return (v1 + v2) / 2;
41}
42
43std::ostream &operator<<(std::ostream &s, const ldmx::HgcrocTrigDigi &digi) {
44 s << "HgcrocTrigDigi { " << "(id : 0x" << std::hex << digi.getId() << std::dec
45 << ") ";
46 s << "0x" << std::hex << int(digi.getPrimitive()) << " (" << std::dec
47 << digi.linearPrimitive() << ") } ";
48 return s;
49}
50
51std::ostream &operator<<(std::ostream &s,
52 const ldmx::HgcrocTrigDigiCollection &digis) {
53 s << "HgcrocTrigDigiCollection { " << std::endl;
54 for (auto digi : digis) s << " " << digi << std::endl;
55 s << "}";
56 return s;
57}
58
59} // namespace ldmx
Contains the trigger output for a single trigger hgcroc channel.
uint32_t linearPrimitive() const
Get the linearized value of the trigger primitive.
HgcrocTrigDigi()=default
Default Constructor.
static uint32_t compressed2Linear(uint8_t comp)
Static conversion from compressed -> linear 18b.
uint8_t getPrimitive() const
Get the trigger primitive (7 bits) for the given link on a channel.
static uint8_t linear2Compressed(uint32_t lin)
Static conversion from 18b linear -> compressed.
uint32_t getId() const
Get the id of the digi.