Belle II Software  release-05-01-25
TRGCDCT3DUnpackerModule.cc
1 //---------------------------------------------------------------
2 // $Id$
3 //---------------------------------------------------------------
4 // Filename : TRGCDCT3DUnpackerModule.cc
5 // Section :
6 // Owner : JB Kim, physjg
7 // Email : physjg@hep1.phys.ntu.edu.tw
8 //---------------------------------------------------------------
9 // Description : TRGCDCT3DUnpacker Module
10 //---------------------------------------------------------------
11 // $Log$
12 //---------------------------------------------------------------
13 
14 #include <trg/cdc/modules/trgcdct3dUnpacker/TRGCDCT3DUnpackerModule.h>
15 
16 using namespace std;
17 using namespace Belle2;
18 using namespace TRGCDCT3DUNPACKERSPACE;
19 
21 REG_MODULE(TRGCDCT3DUnpacker);
22 
23 string TRGCDCT3DUnpackerModule::version() const
24 {
25  return string("1.10");
26 }
27 
28 TRGCDCT3DUnpackerModule::TRGCDCT3DUnpackerModule()
29  : Module::Module()
30 {
31 
32  string desc = "TRGCDCT3DUnpackerModule(" + version() + ")";
33  setDescription(desc);
35  addParam("T3DMOD", m_T3DMOD,
36  "T3D module number",
37  0);
38  B2DEBUG(20, "TRGCDCT3DUnpacker: Constructor done.");
39 }
40 
42 {
43 }
44 
46 {
47 }
48 
50 {
51  char c_name[100];
52  sprintf(c_name, "TRGCDCT3DUnpackerStore%d", m_T3DMOD);
53  m_store.registerInDataStore(c_name);
54  //StoreArray<TRGCDCT3DUnpackerStore>::registerPersistent();
55 
56  //set copper address
57  if (m_T3DMOD == 0) {
58  m_copper_address = 0x11000003;
59  m_copper_ab = 0;
60 // m_nword = 3075;
61  } else if (m_T3DMOD == 1) {
62  m_copper_address = 0x11000003;
63  m_copper_ab = 1;
64 // m_nword = 3075;
65  } else if (m_T3DMOD == 2) {
66  m_copper_address = 0x11000004;
67  m_copper_ab = 0;
68 // m_nword = 3075;
69  } else if (m_T3DMOD == 3) {
70  m_copper_address = 0x11000004;
71  m_copper_ab = 1;
72 // m_nword = 3075;
73  } else {
74  B2ERROR("trgcdct3dunpacker:cooper address is not set");
75  m_copper_address = 0;
76  m_copper_ab = 0;
77 // m_nword = 3075;
78  }
79 
80 }
81 
83 {
84 }
85 
87 {
88 }
89 
91 {
92  StoreArray<RawTRG> raw_trgarray;
93  for (int i = 0; i < raw_trgarray.getEntries(); i++) {
94  for (int j = 0; j < raw_trgarray[i]->GetNumEntries(); j++) {
95  if (raw_trgarray[i]->GetNodeID(j) == m_copper_address) {
96 
97  if (raw_trgarray[i]->GetDetectorNwords(j, m_copper_ab) == m_nword_2k) {
98  int firm_id = (raw_trgarray[i]->GetDetectorBuffer(j, m_copper_ab))[0];
99  if (firm_id == 0x32444620) { // 2D fitter
100  fillTreeTRGCDCT3DUnpacker_2dfitter(raw_trgarray[i]->GetDetectorBuffer(j, m_copper_ab), raw_trgarray[i]->GetEveNo(j));
101  } else {
102  fillTreeTRGCDCT3DUnpacker(raw_trgarray[i]->GetDetectorBuffer(j, m_copper_ab), raw_trgarray[i]->GetEveNo(j));
103  }
104  }
105  // 2.6k, 15 TS version
106  else if (raw_trgarray[i]->GetDetectorNwords(j, m_copper_ab) == m_nword_2624) {
107  fillTreeTRGCDCT3DUnpacker_2624(raw_trgarray[i]->GetDetectorBuffer(j, m_copper_ab), raw_trgarray[i]->GetEveNo(j));
108  }
109  }
110  }
111  }
112 }
113 
115 {
116 
117  const unsigned nword_header = 3; // updated from 2 to 3
118 
119  long dataHeader = buf[nword_header] & 0xffff0000;
120  if (dataHeader != 0xdddd0000) {
121  // wrong data block header
122  return ;
123  }
124 
125  //StoreArray<TRGCDCT3DUnpackerStore> storeAry;
126  for (int clk = 0; clk < nClks; clk++) { // 0..47
127 
128  m_store.appendNew();
129  int ntups = m_store.getEntries() - 1;
130  int* bitArray[nLeafs + nLeafsExtra];
131  setLeafPointersArray(m_store[ntups], bitArray);
132  for (int l = 0; l < nLeafs + nLeafsExtra; l++) *bitArray[l] = 0;
133 
134  m_store[ntups]->m_evt = evt;
135  m_store[ntups]->m_clk = clk;
136  m_store[ntups]->m_firmid = buf[0];
137  m_store[ntups]->m_firmver = buf[1];
138 
140  //cout<<"nClks: "<<nClks<<endl;
141  //cout<<"Up,Left is MSB, Down,Right is LSB"<<endl;
142  //for (unsigned _wd = 0; _wd < nBits / 32 + nword_header; _wd++)
143  //{
144  // bitset<32> buf_b(buf[clk * (nBits / 32) + _wd]);
145  // stringstream wd_s;
146  // wd_s << setfill('0') << setw(2) << _wd;
147  // stringstream wd_s_d;
148  // wd_s_d << setfill('0') << setw(2) << _wd-nword_header;
149  // if (_wd < nword_header) cout<<"clk["<<clk<<"] hd["<<wd_s.str()<<"] "<<buf_b<<endl;
150  // else cout<<"clk["<<clk<<"] wd["<<wd_s_d.str()<<"] "<<buf_b<<endl;
151  //}
152 
153  //cout<<"nClks: "<<nClks<<endl;
154  //for (int _wd = 0; _wd < nBits / 32; _wd++)
155  //{
156  // bitset<32> buf_b(buf[clk * (nBits / 32) + _wd + nword_header]);
157  // cout<<"clk["<<clk<<"] wd["<<_wd<<"] "<<buf_b<<endl;
158  //}
159 
160  for (unsigned _wd = 0; _wd < nBits_2k / 32; _wd++) { // 0..19
161  int wd = buf[clk * (nBits_2k / 32) + _wd + nword_header];
162  for (int bb = 0; bb < 32; bb++) { // bit by bit
163  if ((wd >> (31 - bb)) & 1) { /* MSB to LSB */
164  int bitPosition = (nBits_2k - 1) - _wd * 32 - bb;
165  for (int leaf = 0; // Find a leaf that covers the bit.
166  leaf < nLeafs; leaf++) {
167  int bitMaxOfTheLeaf = BitMap[leaf][0];
168  int bitWidOfTheLeaf = BitMap[leaf][1];
169  int bitMinOfTheLeaf = bitMaxOfTheLeaf - bitWidOfTheLeaf;
170  if (bitMinOfTheLeaf <= bitPosition && bitPosition <= bitMaxOfTheLeaf) {
171  *bitArray[leaf] |= (1 << (bitPosition - bitMinOfTheLeaf));
172  }
173  }
174  }
175  }
176  }
177  }
178 }
179 
181 {
182 
183  const unsigned nword_header = 3; // updated from 2 to 3
184 
185  long dataHeader = buf[nword_header] & 0xffff0000;
186  if (dataHeader != 0xdddd0000) {
187  // wrong data block header
188  return ;
189  }
190 
191  //StoreArray<TRGCDCT3DUnpackerStore> storeAry;
192  for (int clk = 0; clk < nClks; clk++) { // 0..47
193 
194  m_store.appendNew();
195  int ntups = m_store.getEntries() - 1;
196  int* bitArray[nLeafs_2dfitter + nLeafsExtra];
197  setLeafPointersArray_2dfitter(m_store[ntups], bitArray);
198  for (int l = 0; l < nLeafs_2dfitter + nLeafsExtra; l++) *bitArray[l] = 0;
199 
200  m_store[ntups]->m_evt = evt;
201  m_store[ntups]->m_clk = clk;
202  m_store[ntups]->m_firmid = buf[0];
203  m_store[ntups]->m_firmver = buf[1];
204 
206  //cout<<"nClks: "<<nClks<<endl;
207  //cout<<"Up,Left is MSB, Down,Right is LSB"<<endl;
208  //for (unsigned _wd = 0; _wd < nBits / 32 + nword_header; _wd++)
209  //{
210  // bitset<32> buf_b(buf[clk * (nBits / 32) + _wd]);
211  // stringstream wd_s;
212  // wd_s << setfill('0') << setw(2) << _wd;
213  // stringstream wd_s_d;
214  // wd_s_d << setfill('0') << setw(2) << _wd-nword_header;
215  // if (_wd < nword_header) cout<<"clk["<<clk<<"] hd["<<wd_s.str()<<"] "<<buf_b<<endl;
216  // else cout<<"clk["<<clk<<"] wd["<<wd_s_d.str()<<"] "<<buf_b<<endl;
217  //}
218 
219  //cout<<"nClks: "<<nClks<<endl;
220  //for (int _wd = 0; _wd < nBits / 32; _wd++)
221  //{
222  // bitset<32> buf_b(buf[clk * (nBits / 32) + _wd + nword_header]);
223  // cout<<"clk["<<clk<<"] wd["<<_wd<<"] "<<buf_b<<endl;
224  //}
225 
226  for (unsigned _wd = 0; _wd < nBits_2k / 32; _wd++) { // 0..19
227  int wd = buf[clk * (nBits_2k / 32) + _wd + nword_header];
228  for (int bb = 0; bb < 32; bb++) { // bit by bit
229  if ((wd >> (31 - bb)) & 1) { /* MSB to LSB */
230  int bitPosition = (nBits_2k - 1) - _wd * 32 - bb;
231  for (int leaf = 0; // Find a leaf that covers the bit.
232  leaf < nLeafs_2dfitter; leaf++) {
233  int bitMaxOfTheLeaf = BitMap_2dfitter[leaf][0];
234  int bitWidOfTheLeaf = BitMap_2dfitter[leaf][1];
235  int bitMinOfTheLeaf = bitMaxOfTheLeaf - bitWidOfTheLeaf;
236  if (bitMinOfTheLeaf <= bitPosition && bitPosition <= bitMaxOfTheLeaf) {
237  *bitArray[leaf] |= (1 << (bitPosition - bitMinOfTheLeaf));
238  }
239  }
240  }
241  }
242  }
243  }
244 }
245 
246 
248 {
249 
250  const unsigned nword_header = 3; // updated from 2 to 3
251 
252  long dataHeader = buf[nword_header] & 0xffff0000;
253  if (dataHeader != 0xdddd0000) {
254  // wrong data block header
255  return ;
256  }
257 
258  //StoreArray<TRGCDCT3DUnpackerStore> storeAry;
259  for (int clk = 0; clk < nClks; clk++) { // 0..47
260 
261  m_store.appendNew();
262  int ntups = m_store.getEntries() - 1;
263  int* bitArray[nLeafs_2624 + nLeafsExtra];
264  setLeafPointersArray_2624(m_store[ntups], bitArray);
265  for (int l = 0; l < nLeafs_2624 + nLeafsExtra; l++) *bitArray[l] = 0;
266 
267  m_store[ntups]->m_evt = evt;
268  m_store[ntups]->m_clk = clk;
269  m_store[ntups]->m_firmid = buf[0];
270  m_store[ntups]->m_firmver = buf[1];
271 
273  //cout<<"nClks: "<<nClks<<endl;
274  //cout<<"Up,Left is MSB, Down,Right is LSB"<<endl;
275  //for (unsigned _wd = 0; _wd < nBits / 32 + nword_header; _wd++)
276  //{
277  // bitset<32> buf_b(buf[clk * (nBits / 32) + _wd]);
278  // stringstream wd_s;
279  // wd_s << setfill('0') << setw(2) << _wd;
280  // stringstream wd_s_d;
281  // wd_s_d << setfill('0') << setw(2) << _wd-nword_header;
282  // if (_wd < nword_header) cout<<"clk["<<clk<<"] hd["<<wd_s.str()<<"] "<<buf_b<<endl;
283  // else cout<<"clk["<<clk<<"] wd["<<wd_s_d.str()<<"] "<<buf_b<<endl;
284  //}
285 
286  //cout<<"nClks: "<<nClks<<endl;
287  //for (int _wd = 0; _wd < nBits / 32; _wd++)
288  //{
289  // bitset<32> buf_b(buf[clk * (nBits / 32) + _wd + nword_header]);
290  // cout<<"clk["<<clk<<"] wd["<<_wd<<"] "<<buf_b<<endl;
291  //}
292 
293  for (unsigned _wd = 0; _wd < nBits_2624 / 32; _wd++) { // 0..19
294  int wd = buf[clk * (nBits_2624 / 32) + _wd + nword_header];
295  for (int bb = 0; bb < 32; bb++) { // bit by bit
296  if ((wd >> (31 - bb)) & 1) { /* MSB to LSB */
297  int bitPosition = (nBits_2624 - 1) - _wd * 32 - bb;
298  for (int leaf = 0; // Find a leaf that covers the bit.
299  leaf < nLeafs_2624; leaf++) {
300  int bitMaxOfTheLeaf = BitMap_2624[leaf][0];
301  int bitWidOfTheLeaf = BitMap_2624[leaf][1];
302  int bitMinOfTheLeaf = bitMaxOfTheLeaf - bitWidOfTheLeaf;
303  if (bitMinOfTheLeaf <= bitPosition && bitPosition <= bitMaxOfTheLeaf) {
304  *bitArray[leaf] |= (1 << (bitPosition - bitMinOfTheLeaf));
305  }
306  }
307  }
308  }
309  }
310  }
311 }
Belle2::TRGCDCT3DUNPACKERSPACE::TRGCDCT3DUnpackerModule::event
virtual void event() override
Called event by event.
Definition: TRGCDCT3DUnpackerModule.cc:90
Belle2::TRGCDCT3DUNPACKERSPACE::TRGCDCT3DUnpackerModule::endRun
virtual void endRun() override
Called when run ended.
Definition: TRGCDCT3DUnpackerModule.cc:86
Belle2::Module::setDescription
void setDescription(const std::string &description)
Sets the description of the module.
Definition: Module.cc:216
REG_MODULE
#define REG_MODULE(moduleName)
Register the given module (without 'Module' suffix) with the framework.
Definition: Module.h:652
Belle2::Module::c_ParallelProcessingCertified
@ c_ParallelProcessingCertified
This module can be run in parallel processing mode safely (All I/O must be done through the data stor...
Definition: Module.h:82
Belle2::TRGCDCT3DUNPACKERSPACE::TRGCDCT3DUnpackerModule::m_T3DMOD
int m_T3DMOD
T3D module number.
Definition: TRGCDCT3DUnpackerModule.h:3563
Belle2::TRGCDCT3DUNPACKERSPACE::TRGCDCT3DUnpackerModule::m_store
StoreArray< TRGCDCT3DUnpackerStore > m_store
Output datastore for unpacker.
Definition: TRGCDCT3DUnpackerModule.h:3551
Belle2::TRGCDCT3DUNPACKERSPACE::TRGCDCT3DUnpackerModule::m_copper_ab
unsigned int m_copper_ab
address of copper module
Definition: TRGCDCT3DUnpackerModule.h:3556
Belle2::TRGCDCT3DUNPACKERSPACE::TRGCDCT3DUnpackerModule::m_nword_2624
int m_nword_2624
Number of words im raw data, 2.6k, 15 TS version.
Definition: TRGCDCT3DUnpackerModule.h:3560
Belle2::TRGCDCT3DUNPACKERSPACE::TRGCDCT3DUnpackerModule::m_nword_2k
int m_nword_2k
Number of words im raw data, 2k.
Definition: TRGCDCT3DUnpackerModule.h:3558
Belle2::TRGCDCT3DUNPACKERSPACE::TRGCDCT3DUnpackerModule::fillTreeTRGCDCT3DUnpacker_2624
virtual void fillTreeTRGCDCT3DUnpacker_2624(int *buf, int evt)
Unpacker main function, 2.6k, 15 TS version.
Definition: TRGCDCT3DUnpackerModule.cc:247
Belle2::Module
Base class for Modules.
Definition: Module.h:74
Belle2::Module::setPropertyFlags
void setPropertyFlags(unsigned int propertyFlags)
Sets the flags for the module properties.
Definition: Module.cc:210
Belle2::TRGCDCT3DUNPACKERSPACE::TRGCDCT3DUnpackerModule::version
std::string version() const
returns version of TRGCDCT3DUnpackerModule.
Definition: TRGCDCT3DUnpackerModule.cc:23
Belle2::TRGCDCT3DUNPACKERSPACE::TRGCDCT3DUnpackerModule::fillTreeTRGCDCT3DUnpacker_2dfitter
virtual void fillTreeTRGCDCT3DUnpacker_2dfitter(int *buf, int evt)
Unpacker main function.
Definition: TRGCDCT3DUnpackerModule.cc:180
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::TRGCDCT3DUNPACKERSPACE::TRGCDCT3DUnpackerModule::fillTreeTRGCDCT3DUnpacker
virtual void fillTreeTRGCDCT3DUnpacker(int *buf, int evt)
Unpacker main function.
Definition: TRGCDCT3DUnpackerModule.cc:114
Belle2::TRGCDCT3DUNPACKERSPACE::TRGCDCT3DUnpackerModule::~TRGCDCT3DUnpackerModule
virtual ~TRGCDCT3DUnpackerModule()
Destructor.
Definition: TRGCDCT3DUnpackerModule.cc:41
Belle2::TRGCDCT3DUNPACKERSPACE::TRGCDCT3DUnpackerModule::m_copper_address
unsigned int m_copper_address
address of copper module
Definition: TRGCDCT3DUnpackerModule.h:3554
Belle2::Module::addParam
void addParam(const std::string &name, T &paramVariable, const std::string &description, const T &defaultValue)
Adds a new parameter to the module.
Definition: Module.h:562
Belle2::TRGCDCT3DUNPACKERSPACE::TRGCDCT3DUnpackerModule::beginRun
virtual void beginRun() override
Called when new run started.
Definition: TRGCDCT3DUnpackerModule.cc:82
Belle2::StoreArray
Accessor to arrays stored in the data store.
Definition: ECLMatchingPerformanceExpertModule.h:33
Belle2::TRGCDCT3DUNPACKERSPACE::TRGCDCT3DUnpackerModule::terminate
virtual void terminate() override
Called when processing ended.
Definition: TRGCDCT3DUnpackerModule.cc:45
Belle2::StoreArray::getEntries
int getEntries() const
Get the number of objects in the array.
Definition: StoreArray.h:226
Belle2::TRGCDCT3DUNPACKERSPACE::TRGCDCT3DUnpackerModule::initialize
virtual void initialize() override
Initilizes TRGCDCT3DUnpackerUnpackerModule.
Definition: TRGCDCT3DUnpackerModule.cc:49