21 #include <trg/gdl/modules/trggdlUnpacker/trggdlUnpackerModule.h>
32 string TRGGDLUnpackerModule::version()
const
34 return string(
"1.00");
37 TRGGDLUnpackerModule::TRGGDLUnpackerModule()
40 string desc =
"TRGGDLUnpackerModule(" +
version() +
")";
44 "Print trigger readout board included in the data.",
47 B2DEBUG(20,
"trggdlunpacker: Constructor done.");
52 store.registerInDataStore();
57 bad_flag = m_dbbadrun->getflag();
65 B2INFO(
"no database of gdl unpacker");
68 nword_header = m_dbunpacker->get_nword_header();
69 n_clocks = m_dbunpacker->getnClks();
70 nBits = m_dbunpacker->getnBits();
71 n_leafs = m_dbunpacker->getnLeafs();
72 n_leafsExtra = m_dbunpacker->getnLeafsExtra();
73 conf = m_dbunpacker->getconf();
74 for (
int i = 0; i < 320; i++) {
75 LeafBitMap[i] = m_dbunpacker->getLeafMap(i);
77 for (
int i = 0; i < 320; i++) {
78 strcpy(LeafNames[i], m_dbunpacker->getLeafnames(i));
83 for (
int i = 0; i < 320; i++) {
84 if (strcmp(LeafNames[i],
"conf") == 0)conf_map = i;
85 if (strcmp(LeafNames[i],
"evt") == 0) evt_map = i;
86 if (strcmp(LeafNames[i],
"clk") == 0) clk_map = i;
89 BitMap = vector<vector<int>>(n_leafs, vector<int>(2, 0));
90 for (
int i = 0; i < n_leafs; i++) {
91 BitMap[i][0] = m_dbunpacker->getBitMap(i, 0);
92 BitMap[i][1] = m_dbunpacker->getBitMap(i, 1);
94 BitMap_extra = vector<vector<int>>(n_leafsExtra, vector<int>(3, 0));
95 for (
int i = 0; i < n_leafsExtra; i++) {
96 BitMap_extra[i][0] = m_dbunpacker->getBitMap_extra(i, 0);
97 BitMap_extra[i][1] = m_dbunpacker->getBitMap_extra(i, 1);
98 BitMap_extra[i][2] = m_dbunpacker->getBitMap_extra(i, 2);
103 int aBitMap[320][2] = {0};
104 int aBitMap_extra[100][3] = { -1};
105 for (
int i = 0; i < n_leafsExtra; i++) {
106 aBitMap_extra[i][0] = m_dbunpacker->getBitMap_extra(i, 0);
107 aBitMap_extra[i][1] = m_dbunpacker->getBitMap_extra(i, 1);
108 aBitMap_extra[i][2] = m_dbunpacker->getBitMap_extra(i, 2);
111 for (
int i = 0; i < 200; i++) {
112 LeafBitMap[i] = m_dbunpacker->getLeafMap(i);
113 std::cout <<
"LeafBitMap[" << i <<
"] = " << m_dbunpacker->getLeafMap(i) << std::endl;
114 strcpy(LeafNames[i], m_dbunpacker->getLeafnames(i));
115 std::cout <<
"LeafNames[" << i <<
"] = " << m_dbunpacker->getLeafnames(i) << std::endl;
117 for (
int i = 0; i < n_leafs; i++) {
118 aBitMap[i][0] = m_dbunpacker->getBitMap(i, 0);
119 aBitMap[i][1] = m_dbunpacker->getBitMap(i, 1);
121 for (
int i = 0; i < 320; i++) {
122 int bin = m_dbunpacker->getLeafMap(i) + 1;
123 if (0 < bin && bin <= n_leafs) {
124 std::cout <<
"leaf(" << i
126 <<
"), LeafNames[leaf](" << LeafNames[i]
127 <<
"), BitMap[bin-1][0](" << aBitMap[bin - 1][0]
128 <<
"), BitMap[bin-1][1](" << aBitMap[bin - 1][1]
133 for (
int i = 0; i < 320; i++) {
134 int bin = m_dbunpacker->getLeafMap(i) + 1;
135 int j = bin - n_leafs - 1;
136 if (n_leafs < bin && bin <= n_leafs + n_leafsExtra) {
137 std::cout <<
"i(" << i
139 <<
"), LeafNames[leaf](" << LeafNames[i]
140 <<
"), BitMap_extra[j][0](buf[" << aBitMap_extra[j][0]
141 <<
"]), BitMap_extra[j][1](downto " << aBitMap_extra[j][1]
142 <<
"), BitMap_extra[j][2](" << aBitMap_extra[j][2]
143 <<
" bit length)" << std::endl;
155 if (unpack_flag == 1) {
157 for (
int i = 0; i < raw_trgarray.
getEntries(); i++) {
160 if (raw_trgarray[i]->GetMaxNumOfCh(0) == 48) {
m_pciedata =
true; }
161 else if (raw_trgarray[i]->GetMaxNumOfCh(0) == 4) {
m_pciedata =
false; }
162 else { B2FATAL(
"TRGGRLUnpackerModule: Invalid value of GetMaxNumOfCh from raw data: " <<
LogVar(
"Number of ch: ", raw_trgarray[i]->GetMaxNumOfCh(0))); }
164 unsigned int node_id = 0;
165 unsigned int ch_id = 0;
167 node_id = 0x10000001;
170 node_id = 0x15000001;
175 for (
int j = 0; j < raw_trgarray[i]->GetNumEntries(); j++) {
177 if (raw_trgarray[i]->GetNodeID(j) == node_id) {
178 int nword = raw_trgarray[i]->GetDetectorNwords(j, ch_id);
180 fillTreeGDLDB(raw_trgarray[i]->GetDetectorBuffer(j, ch_id),
181 raw_trgarray[i]->GetEveNo(j));
186 unsigned cprid = raw_trgarray[i]->GetNodeID(j);
187 if ((0x15000001 <= cprid && cprid <= 0x15000002) ||
188 (0x11000001 <= cprid && cprid <= 0x11000010)) {
189 int _exp = raw_trgarray[i]->GetExpNo(j);
190 int _run = raw_trgarray[i]->GetRunNo(j);
191 for (
int hslb = 0; hslb < 2; hslb++) {
192 int nword = raw_trgarray[i]->GetDetectorNwords(j, hslb);
193 int* buf = raw_trgarray[i]->GetDetectorBuffer(j, hslb);
194 printf(
"0x%x%c exp(%d), run(%d), nword(%d)",
195 cprid,
'a' + hslb, _exp, _run, nword);
197 printf(
", 0x%x 0x%x 0x%x",
198 buf[0], buf[1], buf[2]);
206 unsigned pcie40id = raw_trgarray[i]->GetNodeID(j);
207 if (pcie40id == 0x10000001) {
208 int _exp = raw_trgarray[i]->GetExpNo(j);
209 int _run = raw_trgarray[i]->GetRunNo(j);
210 for (
int hslb = 0; hslb < 48; hslb++) {
211 int nword = raw_trgarray[i]->GetDetectorNwords(j, hslb);
212 int* buf = raw_trgarray[i]->GetDetectorBuffer(j, hslb);
213 printf(
"0x%x ch%c exp(%d), run(%d), nword(%d)",
214 pcie40id, hslb, _exp, _run, nword);
216 printf(
", 0x%x 0x%x 0x%x",
217 buf[0], buf[1], buf[2]);
231 void TRGGDLUnpackerModule::fillTreeGDLDB(
int* buf,
int evt)
237 for (
int clk = 0; clk < n_clocks; clk++) {
241 vector<int*> Bits(n_leafs + n_leafsExtra);
243 for (
int i = 0; i < 320; i++) {
244 if (LeafBitMap[i] != -1) {
245 Bits[LeafBitMap[i]] = &(storeAry[ntups]->m_unpacker[i]);
246 strcpy(storeAry[ntups]->m_unpackername[i], LeafNames[i]);
251 for (
int l = 0; l < n_leafs + n_leafsExtra; l++) *Bits[l] = 0;
253 if (conf_map >= 0) storeAry[ntups]->m_unpacker[conf_map] = conf;
254 if (evt_map >= 0) storeAry[ntups]->m_unpacker[evt_map] = evt;
255 if (clk_map >= 0) storeAry[ntups]->m_unpacker[clk_map] = clk;
257 for (
int i = 0; i < n_leafsExtra; i++) {
258 if (BitMap_extra[i][0] != -1) {
259 if (BitMap_extra[i][1] == -1) *Bits[i + n_leafs] = buf[BitMap_extra[i][0]];
260 else *Bits[i + n_leafs] = (buf[BitMap_extra[i][0]] >> BitMap_extra[i][1]) & ((
261 1 << BitMap_extra[i][2]) - 1);
266 for (
int _wd = 0; _wd < nBits / 32; _wd++) {
267 unsigned wd = buf[clk * (nBits / 32) + _wd + nword_header];
268 for (
int bb = 0; bb < 32; bb++) {
269 if ((wd >> (31 - bb)) & 1) {
270 int bitIn640 = (nBits - 1) - _wd * 32 - bb;
272 leaf < n_leafs; leaf++) {
273 int bitMaxOfTheLeaf = BitMap[leaf][0];
274 int bitWidOfTheLeaf = BitMap[leaf][1];
275 int bitMinOfTheLeaf = bitMaxOfTheLeaf - bitWidOfTheLeaf;
276 if (bitMinOfTheLeaf <= bitIn640 && bitIn640 <= bitMaxOfTheLeaf) {
277 *Bits[leaf] |= (1 << (bitIn640 - bitMinOfTheLeaf));
bool m_pciedata
PCIe40 data or copper data.
virtual void initialize() override
Initilizes TRGGDLUnpackerModuel.
virtual void event() override
Called event by event.
bool m_trgReadoutBoardSearch
flag to select board search mode
bool m_print_dbmap
flag to dump data base map
std::string version() const
returns version of TRGGDLUnpackerModule.
void setDescription(const std::string &description)
Sets the description of the module.
void setPropertyFlags(unsigned int propertyFlags)
Sets the flags for the module properties.
@ c_ParallelProcessingCertified
This module can be run in parallel processing mode safely (All I/O must be done through the data stor...
Accessor to arrays stored in the data store.
T * appendNew()
Construct a new T object at the end of the array.
bool isValid() const
Check wether the array was registered.
int getEntries() const
Get the number of objects in the array.
void clear() override
Delete all entries in this array.
Class to store variables with their name which were sent to the logging service.
void addParam(const std::string &name, T ¶mVariable, const std::string &description, const T &defaultValue)
Adds a new parameter to the module.
#define REG_MODULE(moduleName)
Register the given module (without 'Module' suffix) with the framework.
Abstract base class for different kinds of events.