13 #include <trg/cdc/modules/trgcdct3dUnpacker/TRGCDCT3DUnpackerModule.h>
17 using namespace TRGCDCT3DUNPACKERSPACE;
22 string TRGCDCT3DUnpackerModule::version()
const
24 return string(
"1.10");
27 TRGCDCT3DUnpackerModule::TRGCDCT3DUnpackerModule()
31 string desc =
"TRGCDCT3DUnpackerModule(" +
version() +
")";
37 B2DEBUG(20,
"TRGCDCT3DUnpacker: Constructor done.");
51 sprintf(c_name,
"TRGCDCT3DUnpackerStore%d",
m_T3DMOD);
52 m_store.registerInDataStore(c_name);
73 B2ERROR(
"trgcdct3dunpacker:cooper address is not set");
92 for (
int i = 0; i < raw_trgarray.
getEntries(); i++) {
93 for (
int j = 0; j < raw_trgarray[i]->GetNumEntries(); j++) {
97 int firm_id = (raw_trgarray[i]->GetDetectorBuffer(j,
m_copper_ab))[0];
98 if (firm_id == 0x32444620) {
116 const unsigned nword_header = 3;
118 long dataHeader = buf[nword_header] & 0xffff0000;
119 if (dataHeader != 0xdddd0000) {
125 for (
int clk = 0; clk < nClks; clk++) {
128 int ntups =
m_store.getEntries() - 1;
129 int* bitArray[nLeafs + nLeafsExtra];
130 setLeafPointersArray(
m_store[ntups], bitArray);
131 for (
int l = 0; l < nLeafs + nLeafsExtra; l++) *bitArray[l] = 0;
135 m_store[ntups]->m_firmid = buf[0];
136 m_store[ntups]->m_firmver = buf[1];
159 for (
unsigned _wd = 0; _wd < nBits_2k / 32; _wd++) {
160 unsigned wd = buf[clk * (nBits_2k / 32) + _wd + nword_header];
161 for (
int bb = 0; bb < 32; bb++) {
162 if ((wd >> (31 - bb)) & 1) {
163 int bitPosition = (nBits_2k - 1) - _wd * 32 - bb;
165 leaf < nLeafs; leaf++) {
166 int bitMaxOfTheLeaf = BitMap[leaf][0];
167 int bitWidOfTheLeaf = BitMap[leaf][1];
168 int bitMinOfTheLeaf = bitMaxOfTheLeaf - bitWidOfTheLeaf;
169 if (bitMinOfTheLeaf <= bitPosition && bitPosition <= bitMaxOfTheLeaf) {
170 *bitArray[leaf] |= (1 << (bitPosition - bitMinOfTheLeaf));
182 const unsigned nword_header = 3;
184 long dataHeader = buf[nword_header] & 0xffff0000;
185 if (dataHeader != 0xdddd0000) {
191 for (
int clk = 0; clk < nClks; clk++) {
194 int ntups =
m_store.getEntries() - 1;
195 int* bitArray[nLeafs_2dfitter + nLeafsExtra];
196 setLeafPointersArray_2dfitter(
m_store[ntups], bitArray);
197 for (
int l = 0; l < nLeafs_2dfitter + nLeafsExtra; l++) *bitArray[l] = 0;
201 m_store[ntups]->m_firmid = buf[0];
202 m_store[ntups]->m_firmver = buf[1];
225 for (
unsigned _wd = 0; _wd < nBits_2k / 32; _wd++) {
226 unsigned wd = buf[clk * (nBits_2k / 32) + _wd + nword_header];
227 for (
int bb = 0; bb < 32; bb++) {
228 if ((wd >> (31 - bb)) & 1) {
229 int bitPosition = (nBits_2k - 1) - _wd * 32 - bb;
231 leaf < nLeafs_2dfitter; leaf++) {
232 int bitMaxOfTheLeaf = BitMap_2dfitter[leaf][0];
233 int bitWidOfTheLeaf = BitMap_2dfitter[leaf][1];
234 int bitMinOfTheLeaf = bitMaxOfTheLeaf - bitWidOfTheLeaf;
235 if (bitMinOfTheLeaf <= bitPosition && bitPosition <= bitMaxOfTheLeaf) {
236 *bitArray[leaf] |= (1 << (bitPosition - bitMinOfTheLeaf));
249 const unsigned nword_header = 3;
251 long dataHeader = buf[nword_header] & 0xffff0000;
252 if (dataHeader != 0xdddd0000) {
258 for (
int clk = 0; clk < nClks; clk++) {
261 int ntups =
m_store.getEntries() - 1;
262 int* bitArray[nLeafs_2624 + nLeafsExtra];
263 setLeafPointersArray_2624(
m_store[ntups], bitArray);
264 for (
int l = 0; l < nLeafs_2624 + nLeafsExtra; l++) *bitArray[l] = 0;
268 m_store[ntups]->m_firmid = buf[0];
269 m_store[ntups]->m_firmver = buf[1];
292 for (
unsigned _wd = 0; _wd < nBits_2624 / 32; _wd++) {
293 unsigned wd = buf[clk * (nBits_2624 / 32) + _wd + nword_header];
294 for (
int bb = 0; bb < 32; bb++) {
295 if ((wd >> (31 - bb)) & 1) {
296 int bitPosition = (nBits_2624 - 1) - _wd * 32 - bb;
298 leaf < nLeafs_2624; leaf++) {
299 int bitMaxOfTheLeaf = BitMap_2624[leaf][0];
300 int bitWidOfTheLeaf = BitMap_2624[leaf][1];
301 int bitMinOfTheLeaf = bitMaxOfTheLeaf - bitWidOfTheLeaf;
302 if (bitMinOfTheLeaf <= bitPosition && bitPosition <= bitMaxOfTheLeaf) {
303 *bitArray[leaf] |= (1 << (bitPosition - bitMinOfTheLeaf));
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.
int getEntries() const
Get the number of objects in the array.
virtual void fillTreeTRGCDCT3DUnpacker_2624(int *buf, int evt)
Unpacker main function, 2.6k, 15 TS version.
virtual void fillTreeTRGCDCT3DUnpacker(int *buf, int evt)
Unpacker main function.
virtual ~TRGCDCT3DUnpackerModule()
Destructor.
virtual void fillTreeTRGCDCT3DUnpacker_2dfitter(int *buf, int evt)
Unpacker main function.
int m_T3DMOD
T3D module number.
virtual void initialize() override
Initilizes TRGCDCT3DUnpackerUnpackerModule.
int m_nword_2k
Number of words im raw data, 2k.
virtual void event() override
Called event by event.
virtual void endRun() override
Called when run ended.
virtual void terminate() override
Called when processing ended.
int m_nword_2624
Number of words im raw data, 2.6k, 15 TS version.
virtual void beginRun() override
Called when new run started.
unsigned int m_copper_address
address of copper module
StoreArray< TRGCDCT3DUnpackerStore > m_store
Output datastore for unpacker.
std::string version() const
returns version of TRGCDCT3DUnpackerModule.
unsigned int m_copper_ab
address of copper module
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.