Belle II Software  release-05-01-25
TRGCDCT3DConverterModule.cc
1 //---------------------------------------------------------------
2 // $Id$
3 //---------------------------------------------------------------
4 // Filename : TRGCDCT3DConverterModule.cc
5 // Section :
6 // Owner :
7 // Email :
8 //---------------------------------------------------------------
9 // Description : TRGCDCT3DConverter Module
10 //---------------------------------------------------------------
11 // $Log$
12 //---------------------------------------------------------------
13 
14 #include <trg/cdc/modules/trgcdct3dConverter/TRGCDCT3DConverterModule.h>
15 #include <bitset>
16 #include "trg/cdc/Fitter3D.h"
17 #include "trg/cdc/Fitter3DUtility.h"
18 #include "trg/cdc/JSignal.h"
19 #include "trg/cdc/JSignalData.h"
20 
21 using namespace std;
22 using namespace Belle2;
23 using namespace TRGCDCT3DCONVERTERSPACE;
24 
26 REG_MODULE(TRGCDCT3DConverter);
27 
28 string TRGCDCT3DConverterModule::version() const
29 {
30  return string("1.00");
31 }
32 
33 TRGCDCT3DConverterModule::TRGCDCT3DConverterModule()
34  : Module::Module()
35 {
37  string desc = "TRGCDCT3DConverterModule(" + version() + ")";
38  setDescription(desc);
39  addParam("hitCollectionName", m_hitCollectionName,
40  "Name of the input StoreArray of CDCTriggerSegmentHits.",
41  string("CDCTriggerSegmentHits0"));
42  addParam("addTSToDatastore", m_addTSToDatastore,
43  "If true, adds TS to datastore",
44  true);
45  addParam("EventTimeName", m_EventTimeName,
46  "Name of the event time object.",
47  string("BinnedEventT00"));
48  addParam("addEventTimeToDatastore", m_addEventTimeToDatastore,
49  "If true, adds event time to datastore",
50  true);
51  addParam("inputCollectionName", m_inputCollectionName,
52  "Name of the StoreArray holding the input tracks from the 2D finder.",
53  string("TRGCDC2DFinderTracks0"));
54  addParam("add2DFinderToDatastore", m_add2DFinderToDatastore,
55  "If true, adds 2D Finder results to datastore",
56  true);
57  addParam("outputCollectionName", m_outputCollectionName,
58  "Name of the StoreArray holding the 3D output tracks.",
59  string("TRGCDC3DFitterTracks0"));
60  addParam("add3DToDatastore", m_add3DToDatastore,
61  "If true, adds 3D results to datastore",
62  true);
63  addParam("fit3DWithTSIM", m_fit3DWithTSIM,
64  "0: use firmware results. 1: Fits with fast TSIM. 2: Fits with firm TSIM",
65  unsigned(0));
66  addParam("firmwareResultCollectionName", m_firmwareResultCollectionName,
67  "Name of the StoreArray holding the firmware results.",
68  string("TRGCDCT3DUnpackerStores0"));
69  addParam("isVerbose", m_isVerbose,
70  "If not zero, prints detail information.",
71  unsigned(0));
72  B2INFO("TRGCDCT3DConverter: Constructor done.");
73 }
74 
76 {
77 }
78 
80 {
81 }
82 
84 {
86  if (m_add3DToDatastore) m_tracks3D.registerInDataStore(m_outputCollectionName);
88  if (m_addTSToDatastore) m_hits.registerInDataStore(m_hitCollectionName);
89  if (m_addEventTimeToDatastore) m_eventTime.registerInDataStore(m_EventTimeName);
90 
92 
94 }
95 
97 {
98 }
99 
101 {
102 }
103 
105 {
106  //cout<<"Event"<<endl;
107 
108  if (m_addTSToDatastore) {
109  // Process firmware stereo TS
110  // stTsfFirmwareInfo[stSL][tsIndex][iClk][id, rt, lr, pr, foundTime]
111  vector<vector<vector<vector<double> > > > stTsfFirmwareInfo;
112  storeTSFirmwareData(stTsfFirmwareInfo);
113  // stTsfInfo[stSL][iTS][id, rt, lr, pr, foundTime]
114  vector<vector<vector<double> > > stTsfInfo;
115  filterTSData(stTsfFirmwareInfo, stTsfInfo);
116  // Add to TS datastore
117  addTSDatastore(stTsfInfo, 1);
118  }
119 
121  // Process firmware 2D
122  // t2DFirmwareInfo[tIndex][iClk][valid, isOld, charge, rho, phi0]
123  vector<vector<vector< double> > > t2DFirmwareInfo;
124  // t2DTsfFirmwareInfo[tIndex][iClk][axSL][id, rt, lr, pr]
125  vector<vector<vector<vector<double> > > > t2DTsfFirmwareInfo;
126  store2DFirmwareData(t2DFirmwareInfo, t2DTsfFirmwareInfo);
127  // t2DInfo[tIndex][charge, rho, phi0]
128  vector<vector<double> > t2DInfo;
129  // t2DTsfInfo[tIndex][axSL][id, rt, lr, pr, -9999]
130  vector<vector<vector<double> > > t2DTsfInfo;
131  filter2DData(t2DFirmwareInfo, t2DTsfFirmwareInfo, t2DInfo, t2DTsfInfo);
132  add2DDatastore(t2DInfo, t2DTsfInfo);
133  }
134 
136  if (!m_eventTime.isValid()) m_eventTime.create();
137  // add eventTime
138  bool validEventTime = 0;
139  int eventTime = 0;
140  for (int iClk = 0; iClk < m_firmwareResults.getEntries() - 11 - 1; iClk++) {
142  if (result->m_t3dtrk0_evtTimeValid_delay) {
143  validEventTime = 1;
144  eventTime = result->m_t3dtrk0_evtTime_delay;
145  }
146  }
147  if (validEventTime) {
148  m_eventTime->addBinnedEventT0(eventTime, Const::CDC);
149  }
150  if (m_isVerbose) {
151  if (validEventTime) cout << "[ET] valid: 1 eventTime:" << eventTime << endl;
152  else cout << "[ET] valid: 0" << endl;
153  }
154  }
155 
156  if (m_add3DToDatastore) {
157  // t3DFirmwareInfo[tIndex][iClk][2DValid, 2DisOld, TSFValid, EventTimeValid, eventTime, charge, rho, phi0, z0, cot, zchi]
158  vector<vector<vector< double> > > t3DFirmwareInfo;
159 
160  // m_fit3DWithTSIM 0:firmware 1:fastSim 2:firmSim
161  // Use Firmware results
162  if (m_fit3DWithTSIM == 0) store3DFirmwareData(t3DFirmwareInfo);
163  // Use fast sim with debug
164  if (m_fit3DWithTSIM == 1) store3DFastSimData(t3DFirmwareInfo);
165  // Use firm sim with debug
166  if (m_fit3DWithTSIM == 2) store3DFirmSimData(t3DFirmwareInfo);
167 
168  vector<vector<double> > t3DInfo;
169  // t3DInfo[eventTime, charge, rho, phi0, z0, cot, zchi]
170  filter3DData(t3DFirmwareInfo, t3DInfo);
171 
172  if (m_fit3DWithTSIM == 0) add3DDatastore(t3DInfo);
173  else add3DDatastore(t3DInfo, 0);
174  }
175 
176  if (m_isVerbose > 1) {
177  debug3DFirmware();
178  }
179 
180 
181 
182  //vector<int> t2DClks;
183  //vector<int> t2DTrackId;
184  //filter2DData(t2DFirmwareInfo, t2DTsfFirmwareInfo, t2DInfo, t2DTsfInfo, t2DClks, t2DTrackId);
185 
188  //for(unsigned iTrack = 0; iTrack < t2DInfo.size(); iTrack++)
189  //{
190  // cout<<"[2D] iClk: "<<t2DClks[iTrack]<<" trackid: "<<t2DTrackId[iTrack]<<" charge:"<<t2DInfo[iTrack][0]<<endl;
191  // int rho_s = t2DInfo[iTrack][1];
192  // int rho_2Dint = toSigned(rho_s, 7);
193  // double rho = 0.3*34/30/1.5e-4/abs(rho_2Dint);
194  // int rho_3Dint = rho*(pow(2,11)-0.5)/2500;
195  // cout<<" rho_s "<<rho_s<<" rho_int: "<<rho_2Dint<<" rho: "<<rho<<" rho_3Dint: "<<rho_3Dint<<endl;;
196  // //cout<<" phi0: "<<t2DInfo[iTrack][2]<<" s: "<<toSigned(t2DInfo[iTrack][2],13)<<" convert: "<<endl;
197  // //for(unsigned iAx = 0; iAx < t2DTsfInfo[iTrack].size(); iAx++)
198  // //{
199  // // cout<<" iAx: "<<iAx<<" id: "<<t2DTsfInfo[iTrack][iAx][0]<<" lr: "<<t2DTsfInfo[iTrack][iAx][2]<<endl;
200  // //}
201  //}
203  //for (unsigned iTrack = 0; iTrack < t3DInfo.size(); iTrack++)
204  //{
205  // cout<<"iClk: "<<t3DClks[iTrack]<<" trackid: "<<t3DTrackId[iTrack]<<" validTS: "<<bitset<4>(t3DInfo[iTrack][0])<<" z0: "<<t3DInfo[iTrack][1]<<" cot: "<<t3DInfo[iTrack][2]<<" zchi: "<<t3DInfo[iTrack][3]<<endl;
206  //}
207 
208 
209 }
210 
211 int TRGCDCT3DConverterModule::toTSID(int iSL, int iWire)
212 {
213  vector<int> nWires = {160, 160, 192, 224, 256, 288, 320, 352, 384};
214  int id = 0;
215  for (int i = 0; i < (int)iSL; i++) {
216  id += nWires[i];
217  }
218  id += iWire;
219  //cout<<"toID: iSL"<<iSL<<" iWire:"<<iWire<<" id:"<<id<<endl;
220  return id;
221 }
222 
223 int TRGCDCT3DConverterModule::toSigned(int value, int nBits)
224 {
225  int signMask = 1 << (nBits - 1);
226  if (value & signMask) {
227  int mask = (1 << nBits) - 1;
228  value |= ~mask;
229  }
230  return value;
231 }
232 
233 int TRGCDCT3DConverterModule::t2DRhoTot3DRho(int value, bool isSigned)
234 {
235  if (value == 0) return 2047;
236  if (value == 125) {
237  B2WARNING("Bug in 2D parser.");
238  return 451;
239  }
240  if (isSigned) return int(0.3 * 34 / 30 / 1.5e-4 / abs(toSigned(value, 7)) * (pow(2, 11) - 0.5) / 2500);
241  else return int(0.3 * 34 / 30 / 1.5e-4 / abs(value) * (pow(2, 11) - 0.5) / 2500);
242 }
243 
245 {
246  double phiReal = 45 + 90. / 80 * (1 + phi);
247  if (toSigned(rho, 7) >= 0) phiReal -= 90;
248  else phiReal += 90;
249  if (phiReal > 180) phiReal -= 360;
250  int phiInt = phiReal * (pow(2, 12) - 0.5) / 180;
251  return phiInt;
252 }
253 
254 void TRGCDCT3DConverterModule::filterTSData(vector<vector<vector<vector<double> > > >& tsfFirmwareInfo,
255  vector<vector<vector<double> > >& tsfInfo)
256 {
257  tsfInfo.resize(4);
258  // iSl is stereo SL index
259  for (unsigned iSL = 0; iSL < tsfFirmwareInfo.size(); iSL++) {
260  for (unsigned iTS = 0; iTS < tsfFirmwareInfo[iSL].size(); iTS++) {
261  for (unsigned iClk = 0; iClk < tsfFirmwareInfo[iSL][iTS].size(); iClk++) {
262  double id = tsfFirmwareInfo[iSL][iTS][iClk][0];
263  double rt = tsfFirmwareInfo[iSL][iTS][iClk][1];
264  double lr = tsfFirmwareInfo[iSL][iTS][iClk][2];
265  double pr = tsfFirmwareInfo[iSL][iTS][iClk][3];
266  double ft = tsfFirmwareInfo[iSL][iTS][iClk][4];
267  if (pr != 0) {
268  vector<double> ts = {id, rt, lr, pr, ft};
269  tsfInfo[iSL].push_back(ts);
270  }
271  }
272  }
273  }
274 }
275 
278 //void TRGCDCT3DConverterModule::filter3DData(std::vector<std::vector<std::vector<double> > > & t3DFirmwareInfo, std::vector<std::vector<double> > & t3DInfo, std::vector<int> & t3DClks, std::vector<int> & t3DTrackId)
279 //{
280 // for (unsigned iTrack = 0; iTrack < t3DFirmwareInfo.size(); iTrack++)
281 // {
282 // for (unsigned iClk = 0; iClk < t3DFirmwareInfo[iTrack].size(); iClk++)
283 // {
284 // double valid2D = t3DFirmwareInfo[iTrack][iClk][0];
285 // double validTS = t3DFirmwareInfo[iTrack][iClk][1];
286 // bitset<4> tsf_fnf(validTS);
287 // int nStHits = int(tsf_fnf[0]) + int(tsf_fnf[1]) + int(tsf_fnf[2]) + int(tsf_fnf[3]);
288 // if (valid2D != 1 || nStHits < 2) continue;
289 // double z0 = t3DFirmwareInfo[iTrack][iClk][2];
290 // double cot = t3DFirmwareInfo[iTrack][iClk][3];
291 // double zchi = t3DFirmwareInfo[iTrack][iClk][4];
292 // //cout<<"valid2D:"<<valid2D<<" tsf_fnf: "<<tsf_fnf<<" nSt: "<<nStHits<<endl;
293 // vector<double> track = {validTS, z0, cot, zchi};
294 // t3DInfo.push_back(track);
295 // t3DClks.push_back(iClk);
296 // t3DTrackId.push_back(iTrack);
297 // }
298 // }
299 //}
300 
301 
302 // t2DFirmwareInfo[tIndex][iClk][valid, isOld, charge, rho, phi0]
303 // t2DTsfFirmwareInfo[tIndex][iClk][axSL][id, rt, lr, pr]
304 // t2DInfo[tIndex][charge, rho, phi0]
305 // t2DTsfInfo[tIndex][axSL][id, rt, lr, pr, -9999]
306 void TRGCDCT3DConverterModule::filter2DData(std::vector<std::vector<std::vector<double> > >& t2DFirmwareInfo,
307  std::vector<std::vector<std::vector<std::vector<double> > > >& t2DTsfFirmwareInfo, std::vector<std::vector<double> >& t2DInfo,
308  std::vector<std::vector<std::vector<double> > >& t2DTsfInfo)
309 {
310  for (unsigned iTrack = 0; iTrack < t2DFirmwareInfo.size(); iTrack++) {
311  for (unsigned iClk = 0; iClk < t2DFirmwareInfo[iTrack].size(); iClk++) {
312  if (t2DFirmwareInfo[iTrack][iClk][0] == 0) continue;
313  // TODO make an algorithm to follow the track.
314  if (t2DInfo.size() != 0 && t2DFirmwareInfo[iTrack][iClk][1] == 1) continue;
315 
316  vector<double> track = {t2DFirmwareInfo[iTrack][iClk][2], t2DFirmwareInfo[iTrack][iClk][3], t2DFirmwareInfo[iTrack][iClk][4]};
317  t2DInfo.push_back(track);
318 
319  vector<vector< double> > axTSInfo(5, vector<double> (5));
320  for (unsigned iAx = 0; iAx < t2DTsfFirmwareInfo[iTrack][iClk].size(); iAx++) {
321  double id = t2DTsfFirmwareInfo[iTrack][iClk][iAx][0];
322  double rt = t2DTsfFirmwareInfo[iTrack][iClk][iAx][1];
323  double lr = t2DTsfFirmwareInfo[iTrack][iClk][iAx][2];
324  double pr = t2DTsfFirmwareInfo[iTrack][iClk][iAx][3];
325 
326  axTSInfo[iAx][0] = id;
327  axTSInfo[iAx][1] = rt;
328  axTSInfo[iAx][2] = lr;
329  axTSInfo[iAx][3] = pr;
330  axTSInfo[iAx][4] = -9999;
331  }
332  t2DTsfInfo.push_back(axTSInfo);
333  }
334  }
335  //for(unsigned iTrack = 0; iTrack < t2DInfo.size(); iTrack++)
336  //{
337  // cout<<"iTrack: "<<iTrack<<" charge:"<<t2DInfo[iTrack][0]<<" rho: "<<t2DInfo[iTrack][1]<<" phi0: "<<t2DInfo[iTrack][2]<<endl;
338  // for(unsigned iAx = 0; iAx < t2DTsfInfo[iTrack].size(); iAx++)
339  // {
340  // cout<<" iAx: "<<iAx<<" id: "<<t2DTsfInfo[iTrack][iAx][0]<<" lr: "<<t2DTsfInfo[iTrack][iAx][2]<<endl;
341  // }
342  //}
343 }
344 
349 //void TRGCDCT3DConverterModule::filter2DData(std::vector<std::vector<std::vector<double> > > & t2DFirmwareInfo, std::vector<std::vector<std::vector<std::vector<double> > > > & t2DTsfFirmwareInfo, std::vector<std::vector<double> > & t2DInfo, std::vector<std::vector<std::vector<double> > > & t2DTsfInfo, std::vector<int> & t2DClks, std::vector<int> & t2DTrackId)
350 //{
351 // for (unsigned iTrack = 0; iTrack < t2DFirmwareInfo.size(); iTrack++)
352 // {
353 // for (unsigned iClk = 0; iClk < t2DFirmwareInfo[iTrack].size(); iClk++)
354 // {
355 // if (t2DFirmwareInfo[iTrack][iClk][0] == 0) continue;
356 //
357 // vector<double> track = {t2DFirmwareInfo[iTrack][iClk][1], t2DFirmwareInfo[iTrack][iClk][2], t2DFirmwareInfo[iTrack][iClk][3]};
358 // t2DInfo.push_back(track);
359 //
360 // vector<vector< double> > axTSInfo (5, vector<double> (5));
361 // for (unsigned iAx = 0; iAx < t2DTsfFirmwareInfo[iTrack][iClk].size(); iAx++)
362 // {
363 // double id = t2DTsfFirmwareInfo[iTrack][iClk][iAx][0];
364 // double rt = t2DTsfFirmwareInfo[iTrack][iClk][iAx][1];
365 // double lr = t2DTsfFirmwareInfo[iTrack][iClk][iAx][2];
366 // double pr = t2DTsfFirmwareInfo[iTrack][iClk][iAx][3];
367 //
368 // axTSInfo[iAx][0] = id;
369 // axTSInfo[iAx][1] = rt;
370 // axTSInfo[iAx][2] = lr;
371 // axTSInfo[iAx][3] = pr;
372 // axTSInfo[iAx][4] = -9999;
373 // }
374 // t2DTsfInfo.push_back(axTSInfo);
375 //
376 // t2DClks.push_back(iClk);
377 // t2DTrackId.push_back(iTrack);
378 // }
379 // }
380 // //for(unsigned iTrack = 0; iTrack < t2DInfo.size(); iTrack++)
381 // //{
382 // // cout<<"iTrack: "<<iTrack<<" charge:"<<t2DInfo[iTrack][0]<<" rho: "<<t2DInfo[iTrack][1]<<" phi0: "<<t2DInfo[iTrack][2]<<endl;
383 // // for(unsigned iAx = 0; iAx < t2DTsfInfo[iTrack].size(); iAx++)
384 // // {
385 // // cout<<" iAx: "<<iAx<<" id: "<<t2DTsfInfo[iTrack][iAx][0]<<" lr: "<<t2DTsfInfo[iTrack][iAx][2]<<endl;
386 // // }
387 // // cout<<" iClk: "<<t2DClks[iTrack]<<" trackid: "<<t2DTrackId[iTrack]<<endl;
388 // //}
389 //}
390 
393 void TRGCDCT3DConverterModule::add2DDatastore(std::vector<std::vector<double> >& t2DInfo,
394  std::vector<std::vector<std::vector<double> > >& t2DTsfInfo)
395 {
396  // Add 2D track
397  for (unsigned iTrack = 0; iTrack < t2DInfo.size(); ++iTrack) {
398  double charge = 0, phi0_i = 0, omega = 0, chi2D = 0;
399  //double phi0_c = 0;
400  //Convert
401  charge = t2DInfo[iTrack][0] == 2 ? -1 : 1;
402  //phi0_c = t2DPhiTot3DPhi(t2DInfo[iTrack][2], t2DInfo[iTrack][1]) / (pow(2, 12) - 0.5) * M_PI;
403  //phi0_i = phi0_c + charge * M_PI_2;
404  //cout<<phi0_i<<" "<<(45 + 90./80 * (1+ t2DInfo[iTrack][2]))/180*M_PI<<endl;
405  phi0_i = (45 + 90. / 80 * (1 + t2DInfo[iTrack][2])) / 180 * M_PI;
406  //omega = charge / t2DRhoTot3DRho(t2DInfo[iTrack][1])/(pow(2,11)-0.5)*2500;
407  //cout<<omega<<" "<<toSigned(t2DInfo[iTrack][1],7)*1.5e-4*30/0.3/34<<endl;
408  omega = toSigned(t2DInfo[iTrack][1], 7) * 1.5e-4 * 30 / 0.3 / 34;
409  //cout<<"iTrack: "<<iTrack<<" charge:"<<t2DInfo[iTrack][0]<<" "<<charge<<" rho: "<<t2DInfo[iTrack][1]<<" "<<omega<<" phi0_i: "<<t2DInfo[iTrack][2]<<" "<<phi0_i<<endl;
410 
411  CDCTriggerTrack* track = m_tracks2D.appendNew(phi0_i, omega, chi2D, 0, 0, 0);
412 
413  if (m_isVerbose) cout << "[2D] iTrack:" << iTrack << " charge:" << charge << " phi0_i:" << phi0_i << " " << phi0_i * 180 / M_PI <<
414  " omega:" << omega << " pt:" << charge / omega * 0.3 * 1.5 * 0.01 << endl;
415 
416  for (unsigned iAx = 0; iAx < t2DTsfInfo[iTrack].size(); ++iAx) {
417  double rawId = t2DTsfInfo[iTrack][iAx][0];
418  double id = -1;
419  if (iAx != 4) id = rawId;
420  else {
421  id = rawId - 16;
422  if (id < 0) id += 384;
423  }
424  double rt = t2DTsfInfo[iTrack][iAx][1];
425  double lr = t2DTsfInfo[iTrack][iAx][2];
426  double pr = t2DTsfInfo[iTrack][iAx][3];
427  double ft = t2DTsfInfo[iTrack][iAx][4];
428  if (pr == 0) continue;
429  CDCHit prHit(rt, 0, iAx * 2, pr == 3 ? 2 : 3, id);
430  m_hits.appendNew(prHit, toTSID(int(iAx * 2), id), pr, lr, rt, 0, ft);
431  track->addRelationTo(m_hits[m_hits.getEntries() - 1]);
432  if (m_isVerbose) cout << "[2D] iTrack: " << iTrack << " iAx:" << iAx << " id:" << id << " rt:" << rt << " lr:" << lr << " pr:" << pr
433  << " ft:" << ft << endl;
434  }
435 
436 
437  }
438 }
439 
440 void TRGCDCT3DConverterModule::addTSDatastore(vector<vector<vector<double> > >& tsfInfo, int isSt)
441 {
442  for (unsigned iSL = 0; iSL < tsfInfo.size(); iSL++) {
443  for (unsigned iTS = 0; iTS < tsfInfo[iSL].size(); iTS++) {
444  double id = tsfInfo[iSL][iTS][0];
445  double rt = tsfInfo[iSL][iTS][1];
446  double lr = tsfInfo[iSL][iTS][2];
447  double pr = tsfInfo[iSL][iTS][3];
448  double ft = tsfInfo[iSL][iTS][4];
449  if (m_isVerbose) cout << "[TSF] iSL:" << iSL << " iTS:" << iTS << " id:" << id << " rt:" << rt << " lr:" << lr << " pr:" << pr <<
450  " ft:" << ft << endl;
451  CDCHit prHit(rt, 0, iSL * 2 + isSt, pr == 3 ? 2 : 3, id);
452  m_hits.appendNew(prHit, toTSID(int(iSL * 2 + isSt), id), pr, lr, rt, 0, ft);
453  }
454  }
455 }
456 
457 void TRGCDCT3DConverterModule::storeTSFirmwareData(vector<vector<vector<vector<double> > > >& tsfInfo)
458 {
459  tsfInfo.resize(4, vector<vector<vector<double> > > (15, vector<vector<double> > (48, vector<double> (4))));
460  for (int iClk = 0; iClk < m_firmwareResults.getEntries(); iClk++) {
462  //cout<<"iClk:"<<iClk<<" tsf1_cc:"<<result->m_tsf1_cc<<" tsf1ts0_id:"<<result->m_tsf1ts0_id<<" tsf1ts0_rt:"<<result->m_tsf1ts0_rt<<" tsf1ts0_lr:"<<result->m_tsf1ts0_lr<<" tsf1ts0_pr:"<<result->m_tsf1ts0_pr<<endl;
463  tsfInfo[0][0][iClk][0] = result->m_tsf1ts0_id;
464  tsfInfo[0][0][iClk][1] = result->m_tsf1ts0_rt;
465  tsfInfo[0][0][iClk][2] = result->m_tsf1ts0_lr;
466  tsfInfo[0][0][iClk][3] = result->m_tsf1ts0_pr;
467  tsfInfo[0][0][iClk][4] = result->m_tsf1_cc;
468  tsfInfo[0][1][iClk][0] = result->m_tsf1ts1_id;
469  tsfInfo[0][1][iClk][1] = result->m_tsf1ts1_rt;
470  tsfInfo[0][1][iClk][2] = result->m_tsf1ts1_lr;
471  tsfInfo[0][1][iClk][3] = result->m_tsf1ts1_pr;
472  tsfInfo[0][1][iClk][4] = result->m_tsf1_cc;
473  tsfInfo[0][2][iClk][0] = result->m_tsf1ts2_id;
474  tsfInfo[0][2][iClk][1] = result->m_tsf1ts2_rt;
475  tsfInfo[0][2][iClk][2] = result->m_tsf1ts2_lr;
476  tsfInfo[0][2][iClk][3] = result->m_tsf1ts2_pr;
477  tsfInfo[0][2][iClk][4] = result->m_tsf1_cc;
478  tsfInfo[0][3][iClk][0] = result->m_tsf1ts3_id;
479  tsfInfo[0][3][iClk][1] = result->m_tsf1ts3_rt;
480  tsfInfo[0][3][iClk][2] = result->m_tsf1ts3_lr;
481  tsfInfo[0][3][iClk][3] = result->m_tsf1ts3_pr;
482  tsfInfo[0][3][iClk][4] = result->m_tsf1_cc;
483  tsfInfo[0][4][iClk][0] = result->m_tsf1ts4_id;
484  tsfInfo[0][4][iClk][1] = result->m_tsf1ts4_rt;
485  tsfInfo[0][4][iClk][2] = result->m_tsf1ts4_lr;
486  tsfInfo[0][4][iClk][3] = result->m_tsf1ts4_pr;
487  tsfInfo[0][4][iClk][4] = result->m_tsf1_cc;
488  tsfInfo[0][5][iClk][0] = result->m_tsf1ts5_id;
489  tsfInfo[0][5][iClk][1] = result->m_tsf1ts5_rt;
490  tsfInfo[0][5][iClk][2] = result->m_tsf1ts5_lr;
491  tsfInfo[0][5][iClk][3] = result->m_tsf1ts5_pr;
492  tsfInfo[0][5][iClk][4] = result->m_tsf1_cc;
493  tsfInfo[0][6][iClk][0] = result->m_tsf1ts6_id;
494  tsfInfo[0][6][iClk][1] = result->m_tsf1ts6_rt;
495  tsfInfo[0][6][iClk][2] = result->m_tsf1ts6_lr;
496  tsfInfo[0][6][iClk][3] = result->m_tsf1ts6_pr;
497  tsfInfo[0][6][iClk][4] = result->m_tsf1_cc;
498  tsfInfo[0][7][iClk][0] = result->m_tsf1ts7_id;
499  tsfInfo[0][7][iClk][1] = result->m_tsf1ts7_rt;
500  tsfInfo[0][7][iClk][2] = result->m_tsf1ts7_lr;
501  tsfInfo[0][7][iClk][3] = result->m_tsf1ts7_pr;
502  tsfInfo[0][7][iClk][4] = result->m_tsf1_cc;
503  tsfInfo[0][8][iClk][0] = result->m_tsf1ts8_id;
504  tsfInfo[0][8][iClk][1] = result->m_tsf1ts8_rt;
505  tsfInfo[0][8][iClk][2] = result->m_tsf1ts8_lr;
506  tsfInfo[0][8][iClk][3] = result->m_tsf1ts8_pr;
507  tsfInfo[0][8][iClk][4] = result->m_tsf1_cc;
508  tsfInfo[0][9][iClk][0] = result->m_tsf1ts9_id;
509  tsfInfo[0][9][iClk][1] = result->m_tsf1ts9_rt;
510  tsfInfo[0][9][iClk][2] = result->m_tsf1ts9_lr;
511  tsfInfo[0][9][iClk][3] = result->m_tsf1ts9_pr;
512  tsfInfo[0][9][iClk][4] = result->m_tsf1_cc;
513  tsfInfo[0][10][iClk][0] = result->m_tsf1ts10_id;
514  tsfInfo[0][10][iClk][1] = result->m_tsf1ts10_rt;
515  tsfInfo[0][10][iClk][2] = result->m_tsf1ts10_lr;
516  tsfInfo[0][10][iClk][3] = result->m_tsf1ts10_pr;
517  tsfInfo[0][10][iClk][4] = result->m_tsf1_cc;
518  tsfInfo[0][11][iClk][0] = result->m_tsf1ts11_id;
519  tsfInfo[0][11][iClk][1] = result->m_tsf1ts11_rt;
520  tsfInfo[0][11][iClk][2] = result->m_tsf1ts11_lr;
521  tsfInfo[0][11][iClk][3] = result->m_tsf1ts11_pr;
522  tsfInfo[0][11][iClk][4] = result->m_tsf1_cc;
523  tsfInfo[0][12][iClk][0] = result->m_tsf1ts12_id;
524  tsfInfo[0][12][iClk][1] = result->m_tsf1ts12_rt;
525  tsfInfo[0][12][iClk][2] = result->m_tsf1ts12_lr;
526  tsfInfo[0][12][iClk][3] = result->m_tsf1ts12_pr;
527  tsfInfo[0][12][iClk][4] = result->m_tsf1_cc;
528  tsfInfo[0][13][iClk][0] = result->m_tsf1ts13_id;
529  tsfInfo[0][13][iClk][1] = result->m_tsf1ts13_rt;
530  tsfInfo[0][13][iClk][2] = result->m_tsf1ts13_lr;
531  tsfInfo[0][13][iClk][3] = result->m_tsf1ts13_pr;
532  tsfInfo[0][13][iClk][4] = result->m_tsf1_cc;
533  tsfInfo[0][14][iClk][0] = result->m_tsf1ts14_id;
534  tsfInfo[0][14][iClk][1] = result->m_tsf1ts14_rt;
535  tsfInfo[0][14][iClk][2] = result->m_tsf1ts14_lr;
536  tsfInfo[0][14][iClk][3] = result->m_tsf1ts14_pr;
537  tsfInfo[0][14][iClk][4] = result->m_tsf1_cc;
538 
539  tsfInfo[1][0][iClk][0] = result->m_tsf3ts0_id;
540  tsfInfo[1][0][iClk][1] = result->m_tsf3ts0_rt;
541  tsfInfo[1][0][iClk][2] = result->m_tsf3ts0_lr;
542  tsfInfo[1][0][iClk][3] = result->m_tsf3ts0_pr;
543  tsfInfo[1][0][iClk][4] = result->m_tsf3_cc;
544  tsfInfo[1][1][iClk][0] = result->m_tsf3ts1_id;
545  tsfInfo[1][1][iClk][1] = result->m_tsf3ts1_rt;
546  tsfInfo[1][1][iClk][2] = result->m_tsf3ts1_lr;
547  tsfInfo[1][1][iClk][3] = result->m_tsf3ts1_pr;
548  tsfInfo[1][1][iClk][4] = result->m_tsf3_cc;
549  tsfInfo[1][2][iClk][0] = result->m_tsf3ts2_id;
550  tsfInfo[1][2][iClk][1] = result->m_tsf3ts2_rt;
551  tsfInfo[1][2][iClk][2] = result->m_tsf3ts2_lr;
552  tsfInfo[1][2][iClk][3] = result->m_tsf3ts2_pr;
553  tsfInfo[1][2][iClk][4] = result->m_tsf3_cc;
554  tsfInfo[1][3][iClk][0] = result->m_tsf3ts3_id;
555  tsfInfo[1][3][iClk][1] = result->m_tsf3ts3_rt;
556  tsfInfo[1][3][iClk][2] = result->m_tsf3ts3_lr;
557  tsfInfo[1][3][iClk][3] = result->m_tsf3ts3_pr;
558  tsfInfo[1][3][iClk][4] = result->m_tsf3_cc;
559  tsfInfo[1][4][iClk][0] = result->m_tsf3ts4_id;
560  tsfInfo[1][4][iClk][1] = result->m_tsf3ts4_rt;
561  tsfInfo[1][4][iClk][2] = result->m_tsf3ts4_lr;
562  tsfInfo[1][4][iClk][3] = result->m_tsf3ts4_pr;
563  tsfInfo[1][4][iClk][4] = result->m_tsf3_cc;
564  tsfInfo[1][5][iClk][0] = result->m_tsf3ts5_id;
565  tsfInfo[1][5][iClk][1] = result->m_tsf3ts5_rt;
566  tsfInfo[1][5][iClk][2] = result->m_tsf3ts5_lr;
567  tsfInfo[1][5][iClk][3] = result->m_tsf3ts5_pr;
568  tsfInfo[1][5][iClk][4] = result->m_tsf3_cc;
569  tsfInfo[1][6][iClk][0] = result->m_tsf3ts6_id;
570  tsfInfo[1][6][iClk][1] = result->m_tsf3ts6_rt;
571  tsfInfo[1][6][iClk][2] = result->m_tsf3ts6_lr;
572  tsfInfo[1][6][iClk][3] = result->m_tsf3ts6_pr;
573  tsfInfo[1][6][iClk][4] = result->m_tsf3_cc;
574  tsfInfo[1][7][iClk][0] = result->m_tsf3ts7_id;
575  tsfInfo[1][7][iClk][1] = result->m_tsf3ts7_rt;
576  tsfInfo[1][7][iClk][2] = result->m_tsf3ts7_lr;
577  tsfInfo[1][7][iClk][3] = result->m_tsf3ts7_pr;
578  tsfInfo[1][7][iClk][4] = result->m_tsf3_cc;
579  tsfInfo[1][8][iClk][0] = result->m_tsf3ts8_id;
580  tsfInfo[1][8][iClk][1] = result->m_tsf3ts8_rt;
581  tsfInfo[1][8][iClk][2] = result->m_tsf3ts8_lr;
582  tsfInfo[1][8][iClk][3] = result->m_tsf3ts8_pr;
583  tsfInfo[1][8][iClk][4] = result->m_tsf3_cc;
584  tsfInfo[1][9][iClk][0] = result->m_tsf3ts9_id;
585  tsfInfo[1][9][iClk][1] = result->m_tsf3ts9_rt;
586  tsfInfo[1][9][iClk][2] = result->m_tsf3ts9_lr;
587  tsfInfo[1][9][iClk][3] = result->m_tsf3ts9_pr;
588  tsfInfo[1][9][iClk][4] = result->m_tsf3_cc;
589  tsfInfo[1][10][iClk][0] = result->m_tsf3ts10_id;
590  tsfInfo[1][10][iClk][1] = result->m_tsf3ts10_rt;
591  tsfInfo[1][10][iClk][2] = result->m_tsf3ts10_lr;
592  tsfInfo[1][10][iClk][3] = result->m_tsf3ts10_pr;
593  tsfInfo[1][10][iClk][4] = result->m_tsf3_cc;
594  tsfInfo[1][11][iClk][0] = result->m_tsf3ts11_id;
595  tsfInfo[1][11][iClk][1] = result->m_tsf3ts11_rt;
596  tsfInfo[1][11][iClk][2] = result->m_tsf3ts11_lr;
597  tsfInfo[1][11][iClk][3] = result->m_tsf3ts11_pr;
598  tsfInfo[1][11][iClk][4] = result->m_tsf3_cc;
599  tsfInfo[1][12][iClk][0] = result->m_tsf3ts12_id;
600  tsfInfo[1][12][iClk][1] = result->m_tsf3ts12_rt;
601  tsfInfo[1][12][iClk][2] = result->m_tsf3ts12_lr;
602  tsfInfo[1][12][iClk][3] = result->m_tsf3ts12_pr;
603  tsfInfo[1][12][iClk][4] = result->m_tsf3_cc;
604  tsfInfo[1][13][iClk][0] = result->m_tsf3ts13_id;
605  tsfInfo[1][13][iClk][1] = result->m_tsf3ts13_rt;
606  tsfInfo[1][13][iClk][2] = result->m_tsf3ts13_lr;
607  tsfInfo[1][13][iClk][3] = result->m_tsf3ts13_pr;
608  tsfInfo[1][13][iClk][4] = result->m_tsf3_cc;
609  tsfInfo[1][14][iClk][0] = result->m_tsf3ts14_id;
610  tsfInfo[1][14][iClk][1] = result->m_tsf3ts14_rt;
611  tsfInfo[1][14][iClk][2] = result->m_tsf3ts14_lr;
612  tsfInfo[1][14][iClk][3] = result->m_tsf3ts14_pr;
613  tsfInfo[1][14][iClk][4] = result->m_tsf3_cc;
614 
615  tsfInfo[2][0][iClk][0] = result->m_tsf5ts0_id;
616  tsfInfo[2][0][iClk][1] = result->m_tsf5ts0_rt;
617  tsfInfo[2][0][iClk][2] = result->m_tsf5ts0_lr;
618  tsfInfo[2][0][iClk][3] = result->m_tsf5ts0_pr;
619  tsfInfo[2][0][iClk][4] = result->m_tsf5_cc;
620  tsfInfo[2][1][iClk][0] = result->m_tsf5ts1_id;
621  tsfInfo[2][1][iClk][1] = result->m_tsf5ts1_rt;
622  tsfInfo[2][1][iClk][2] = result->m_tsf5ts1_lr;
623  tsfInfo[2][1][iClk][3] = result->m_tsf5ts1_pr;
624  tsfInfo[2][1][iClk][4] = result->m_tsf5_cc;
625  tsfInfo[2][2][iClk][0] = result->m_tsf5ts2_id;
626  tsfInfo[2][2][iClk][1] = result->m_tsf5ts2_rt;
627  tsfInfo[2][2][iClk][2] = result->m_tsf5ts2_lr;
628  tsfInfo[2][2][iClk][3] = result->m_tsf5ts2_pr;
629  tsfInfo[2][2][iClk][4] = result->m_tsf5_cc;
630  tsfInfo[2][3][iClk][0] = result->m_tsf5ts3_id;
631  tsfInfo[2][3][iClk][1] = result->m_tsf5ts3_rt;
632  tsfInfo[2][3][iClk][2] = result->m_tsf5ts3_lr;
633  tsfInfo[2][3][iClk][3] = result->m_tsf5ts3_pr;
634  tsfInfo[2][3][iClk][4] = result->m_tsf5_cc;
635  tsfInfo[2][4][iClk][0] = result->m_tsf5ts4_id;
636  tsfInfo[2][4][iClk][1] = result->m_tsf5ts4_rt;
637  tsfInfo[2][4][iClk][2] = result->m_tsf5ts4_lr;
638  tsfInfo[2][4][iClk][3] = result->m_tsf5ts4_pr;
639  tsfInfo[2][4][iClk][4] = result->m_tsf5_cc;
640  tsfInfo[2][5][iClk][0] = result->m_tsf5ts5_id;
641  tsfInfo[2][5][iClk][1] = result->m_tsf5ts5_rt;
642  tsfInfo[2][5][iClk][2] = result->m_tsf5ts5_lr;
643  tsfInfo[2][5][iClk][3] = result->m_tsf5ts5_pr;
644  tsfInfo[2][5][iClk][4] = result->m_tsf5_cc;
645  tsfInfo[2][6][iClk][0] = result->m_tsf5ts6_id;
646  tsfInfo[2][6][iClk][1] = result->m_tsf5ts6_rt;
647  tsfInfo[2][6][iClk][2] = result->m_tsf5ts6_lr;
648  tsfInfo[2][6][iClk][3] = result->m_tsf5ts6_pr;
649  tsfInfo[2][6][iClk][4] = result->m_tsf5_cc;
650  tsfInfo[2][7][iClk][0] = result->m_tsf5ts7_id;
651  tsfInfo[2][7][iClk][1] = result->m_tsf5ts7_rt;
652  tsfInfo[2][7][iClk][2] = result->m_tsf5ts7_lr;
653  tsfInfo[2][7][iClk][3] = result->m_tsf5ts7_pr;
654  tsfInfo[2][7][iClk][4] = result->m_tsf5_cc;
655  tsfInfo[2][8][iClk][0] = result->m_tsf5ts8_id;
656  tsfInfo[2][8][iClk][1] = result->m_tsf5ts8_rt;
657  tsfInfo[2][8][iClk][2] = result->m_tsf5ts8_lr;
658  tsfInfo[2][8][iClk][3] = result->m_tsf5ts8_pr;
659  tsfInfo[2][8][iClk][4] = result->m_tsf5_cc;
660  tsfInfo[2][9][iClk][0] = result->m_tsf5ts9_id;
661  tsfInfo[2][9][iClk][1] = result->m_tsf5ts9_rt;
662  tsfInfo[2][9][iClk][2] = result->m_tsf5ts9_lr;
663  tsfInfo[2][9][iClk][3] = result->m_tsf5ts9_pr;
664  tsfInfo[2][9][iClk][4] = result->m_tsf5_cc;
665  tsfInfo[2][10][iClk][0] = result->m_tsf5ts10_id;
666  tsfInfo[2][10][iClk][1] = result->m_tsf5ts10_rt;
667  tsfInfo[2][10][iClk][2] = result->m_tsf5ts10_lr;
668  tsfInfo[2][10][iClk][3] = result->m_tsf5ts10_pr;
669  tsfInfo[2][10][iClk][4] = result->m_tsf5_cc;
670  tsfInfo[2][11][iClk][0] = result->m_tsf5ts11_id;
671  tsfInfo[2][11][iClk][1] = result->m_tsf5ts11_rt;
672  tsfInfo[2][11][iClk][2] = result->m_tsf5ts11_lr;
673  tsfInfo[2][11][iClk][3] = result->m_tsf5ts11_pr;
674  tsfInfo[2][11][iClk][4] = result->m_tsf5_cc;
675  tsfInfo[2][12][iClk][0] = result->m_tsf5ts12_id;
676  tsfInfo[2][12][iClk][1] = result->m_tsf5ts12_rt;
677  tsfInfo[2][12][iClk][2] = result->m_tsf5ts12_lr;
678  tsfInfo[2][12][iClk][3] = result->m_tsf5ts12_pr;
679  tsfInfo[2][12][iClk][4] = result->m_tsf5_cc;
680  tsfInfo[2][13][iClk][0] = result->m_tsf5ts13_id;
681  tsfInfo[2][13][iClk][1] = result->m_tsf5ts13_rt;
682  tsfInfo[2][13][iClk][2] = result->m_tsf5ts13_lr;
683  tsfInfo[2][13][iClk][3] = result->m_tsf5ts13_pr;
684  tsfInfo[2][13][iClk][4] = result->m_tsf5_cc;
685  tsfInfo[2][14][iClk][0] = result->m_tsf5ts14_id;
686  tsfInfo[2][14][iClk][1] = result->m_tsf5ts14_rt;
687  tsfInfo[2][14][iClk][2] = result->m_tsf5ts14_lr;
688  tsfInfo[2][14][iClk][3] = result->m_tsf5ts14_pr;
689  tsfInfo[2][14][iClk][4] = result->m_tsf5_cc;
690 
691  tsfInfo[3][0][iClk][0] = result->m_tsf7ts0_id;
692  tsfInfo[3][0][iClk][1] = result->m_tsf7ts0_rt;
693  tsfInfo[3][0][iClk][2] = result->m_tsf7ts0_lr;
694  tsfInfo[3][0][iClk][3] = result->m_tsf7ts0_pr;
695  tsfInfo[3][0][iClk][4] = result->m_tsf7_cc;
696  tsfInfo[3][1][iClk][0] = result->m_tsf7ts1_id;
697  tsfInfo[3][1][iClk][1] = result->m_tsf7ts1_rt;
698  tsfInfo[3][1][iClk][2] = result->m_tsf7ts1_lr;
699  tsfInfo[3][1][iClk][3] = result->m_tsf7ts1_pr;
700  tsfInfo[3][1][iClk][4] = result->m_tsf7_cc;
701  tsfInfo[3][2][iClk][0] = result->m_tsf7ts2_id;
702  tsfInfo[3][2][iClk][1] = result->m_tsf7ts2_rt;
703  tsfInfo[3][2][iClk][2] = result->m_tsf7ts2_lr;
704  tsfInfo[3][2][iClk][3] = result->m_tsf7ts2_pr;
705  tsfInfo[3][2][iClk][4] = result->m_tsf7_cc;
706  tsfInfo[3][3][iClk][0] = result->m_tsf7ts3_id;
707  tsfInfo[3][3][iClk][1] = result->m_tsf7ts3_rt;
708  tsfInfo[3][3][iClk][2] = result->m_tsf7ts3_lr;
709  tsfInfo[3][3][iClk][3] = result->m_tsf7ts3_pr;
710  tsfInfo[3][3][iClk][4] = result->m_tsf7_cc;
711  tsfInfo[3][4][iClk][0] = result->m_tsf7ts4_id;
712  tsfInfo[3][4][iClk][1] = result->m_tsf7ts4_rt;
713  tsfInfo[3][4][iClk][2] = result->m_tsf7ts4_lr;
714  tsfInfo[3][4][iClk][3] = result->m_tsf7ts4_pr;
715  tsfInfo[3][4][iClk][4] = result->m_tsf7_cc;
716  tsfInfo[3][5][iClk][0] = result->m_tsf7ts5_id;
717  tsfInfo[3][5][iClk][1] = result->m_tsf7ts5_rt;
718  tsfInfo[3][5][iClk][2] = result->m_tsf7ts5_lr;
719  tsfInfo[3][5][iClk][3] = result->m_tsf7ts5_pr;
720  tsfInfo[3][5][iClk][4] = result->m_tsf7_cc;
721  tsfInfo[3][6][iClk][0] = result->m_tsf7ts6_id;
722  tsfInfo[3][6][iClk][1] = result->m_tsf7ts6_rt;
723  tsfInfo[3][6][iClk][2] = result->m_tsf7ts6_lr;
724  tsfInfo[3][6][iClk][3] = result->m_tsf7ts6_pr;
725  tsfInfo[3][6][iClk][4] = result->m_tsf7_cc;
726  tsfInfo[3][7][iClk][0] = result->m_tsf7ts7_id;
727  tsfInfo[3][7][iClk][1] = result->m_tsf7ts7_rt;
728  tsfInfo[3][7][iClk][2] = result->m_tsf7ts7_lr;
729  tsfInfo[3][7][iClk][3] = result->m_tsf7ts7_pr;
730  tsfInfo[3][7][iClk][4] = result->m_tsf7_cc;
731  tsfInfo[3][8][iClk][0] = result->m_tsf7ts8_id;
732  tsfInfo[3][8][iClk][1] = result->m_tsf7ts8_rt;
733  tsfInfo[3][8][iClk][2] = result->m_tsf7ts8_lr;
734  tsfInfo[3][8][iClk][3] = result->m_tsf7ts8_pr;
735  tsfInfo[3][8][iClk][4] = result->m_tsf7_cc;
736  tsfInfo[3][9][iClk][0] = result->m_tsf7ts9_id;
737  tsfInfo[3][9][iClk][1] = result->m_tsf7ts9_rt;
738  tsfInfo[3][9][iClk][2] = result->m_tsf7ts9_lr;
739  tsfInfo[3][9][iClk][3] = result->m_tsf7ts9_pr;
740  tsfInfo[3][9][iClk][4] = result->m_tsf7_cc;
741  tsfInfo[3][10][iClk][0] = result->m_tsf7ts10_id;
742  tsfInfo[3][10][iClk][1] = result->m_tsf7ts10_rt;
743  tsfInfo[3][10][iClk][2] = result->m_tsf7ts10_lr;
744  tsfInfo[3][10][iClk][3] = result->m_tsf7ts10_pr;
745  tsfInfo[3][10][iClk][4] = result->m_tsf7_cc;
746  tsfInfo[3][11][iClk][0] = result->m_tsf7ts11_id;
747  tsfInfo[3][11][iClk][1] = result->m_tsf7ts11_rt;
748  tsfInfo[3][11][iClk][2] = result->m_tsf7ts11_lr;
749  tsfInfo[3][11][iClk][3] = result->m_tsf7ts11_pr;
750  tsfInfo[3][11][iClk][4] = result->m_tsf7_cc;
751  tsfInfo[3][12][iClk][0] = result->m_tsf7ts12_id;
752  tsfInfo[3][12][iClk][1] = result->m_tsf7ts12_rt;
753  tsfInfo[3][12][iClk][2] = result->m_tsf7ts12_lr;
754  tsfInfo[3][12][iClk][3] = result->m_tsf7ts12_pr;
755  tsfInfo[3][12][iClk][4] = result->m_tsf7_cc;
756  tsfInfo[3][13][iClk][0] = result->m_tsf7ts13_id;
757  tsfInfo[3][13][iClk][1] = result->m_tsf7ts13_rt;
758  tsfInfo[3][13][iClk][2] = result->m_tsf7ts13_lr;
759  tsfInfo[3][13][iClk][3] = result->m_tsf7ts13_pr;
760  tsfInfo[3][13][iClk][4] = result->m_tsf7_cc;
761  tsfInfo[3][14][iClk][0] = result->m_tsf7ts14_id;
762  tsfInfo[3][14][iClk][1] = result->m_tsf7ts14_rt;
763  tsfInfo[3][14][iClk][2] = result->m_tsf7ts14_lr;
764  tsfInfo[3][14][iClk][3] = result->m_tsf7ts14_pr;
765  tsfInfo[3][14][iClk][4] = result->m_tsf7_cc;
766 
767  }
768 }
769 
770 // t2DFirmwareInfo[tIndex][iClk][valid, isOld charge, rho, phi0]
771 // t2DTsfFirmwareInfo[tIndex][iClk][axSL][id, rt, lr, pr]
772 void TRGCDCT3DConverterModule::store2DFirmwareData(vector<vector<vector<double> > >& t2DFirmwareInfo,
773  vector<vector<vector<vector<double> > > >& t2DTsfFirmwareInfo)
774 {
775  t2DFirmwareInfo.resize(4, vector<vector<double> > (48, vector<double> (5)));
776  t2DTsfFirmwareInfo.resize(4, vector<vector<vector<double> > > (48, vector<vector<double> > (5, vector<double> (4))));
777  for (int iClk = 0; iClk < m_firmwareResults.getEntries(); iClk++) {
779  bitset<6> t2d_fnf(int(result->m_t2d_fnf));
780  bitset<6> t2d_oldfnf(int(result->m_t3d_2doldtrk));
781  //cout<<"iclk:"<<iClk<<" fnf:"<<result->m_t2d_fnf<<" "<<t2d_fnf<<" "<<t2d_fnf[5]<<endl;
782  //cout<<"iClk:"<<iClk<<" t2d_fnf:"<<m_firmwareResults[iClk]->m_t2d_fnf<<endl;
783 
784  t2DFirmwareInfo[0][iClk][0] = t2d_fnf[5];
785  t2DFirmwareInfo[0][iClk][1] = t2d_oldfnf[5];;
786  t2DFirmwareInfo[0][iClk][2] = result->m_t2d0_charge;
787  t2DFirmwareInfo[0][iClk][3] = result->m_t2d0_rho_s;
788  t2DFirmwareInfo[0][iClk][4] = result->m_t2d0_phi;
789 
790  t2DFirmwareInfo[1][iClk][0] = t2d_fnf[4];
791  t2DFirmwareInfo[0][iClk][1] = t2d_oldfnf[4];;
792  t2DFirmwareInfo[1][iClk][2] = result->m_t2d1_charge;
793  t2DFirmwareInfo[1][iClk][3] = result->m_t2d1_rho_s;
794  t2DFirmwareInfo[1][iClk][4] = result->m_t2d1_phi;
795 
796  t2DFirmwareInfo[2][iClk][0] = t2d_fnf[3];
797  t2DFirmwareInfo[0][iClk][1] = t2d_oldfnf[3];;
798  t2DFirmwareInfo[2][iClk][2] = result->m_t2d2_charge;
799  t2DFirmwareInfo[2][iClk][3] = result->m_t2d2_rho_s;
800  t2DFirmwareInfo[2][iClk][4] = result->m_t2d2_phi;
801 
802  t2DFirmwareInfo[3][iClk][0] = t2d_fnf[2];
803  t2DFirmwareInfo[0][iClk][1] = t2d_oldfnf[2];;
804  t2DFirmwareInfo[3][iClk][2] = result->m_t2d3_charge;
805  t2DFirmwareInfo[3][iClk][3] = result->m_t2d3_rho_s;
806  t2DFirmwareInfo[3][iClk][4] = result->m_t2d3_phi;
807 
808  t2DTsfFirmwareInfo[0][iClk][0][0] = result->m_t2d0ts0_id;
809  t2DTsfFirmwareInfo[0][iClk][0][1] = result->m_t2d0ts0_rt;
810  t2DTsfFirmwareInfo[0][iClk][0][2] = result->m_t2d0ts0_lr;
811  t2DTsfFirmwareInfo[0][iClk][0][3] = result->m_t2d0ts0_pr;
812  t2DTsfFirmwareInfo[0][iClk][1][0] = result->m_t2d0ts2_id;
813  t2DTsfFirmwareInfo[0][iClk][1][1] = result->m_t2d0ts2_rt;
814  t2DTsfFirmwareInfo[0][iClk][1][2] = result->m_t2d0ts2_lr;
815  t2DTsfFirmwareInfo[0][iClk][1][3] = result->m_t2d0ts2_pr;
816  t2DTsfFirmwareInfo[0][iClk][2][0] = result->m_t2d0ts4_id;
817  t2DTsfFirmwareInfo[0][iClk][2][1] = result->m_t2d0ts4_rt;
818  t2DTsfFirmwareInfo[0][iClk][2][2] = result->m_t2d0ts4_lr;
819  t2DTsfFirmwareInfo[0][iClk][2][3] = result->m_t2d0ts4_pr;
820  t2DTsfFirmwareInfo[0][iClk][3][0] = result->m_t2d0ts6_id;
821  t2DTsfFirmwareInfo[0][iClk][3][1] = result->m_t2d0ts6_rt;
822  t2DTsfFirmwareInfo[0][iClk][3][2] = result->m_t2d0ts6_lr;
823  t2DTsfFirmwareInfo[0][iClk][3][3] = result->m_t2d0ts6_pr;
824  t2DTsfFirmwareInfo[0][iClk][4][0] = result->m_t2d0ts8_id;
825  t2DTsfFirmwareInfo[0][iClk][4][1] = result->m_t2d0ts8_rt;
826  t2DTsfFirmwareInfo[0][iClk][4][2] = result->m_t2d0ts8_lr;
827  t2DTsfFirmwareInfo[0][iClk][4][3] = result->m_t2d0ts8_pr;
828 
829  t2DTsfFirmwareInfo[1][iClk][0][0] = result->m_t2d1ts0_id;
830  t2DTsfFirmwareInfo[1][iClk][0][1] = result->m_t2d1ts0_rt;
831  t2DTsfFirmwareInfo[1][iClk][0][2] = result->m_t2d1ts0_lr;
832  t2DTsfFirmwareInfo[1][iClk][0][3] = result->m_t2d1ts0_pr;
833  t2DTsfFirmwareInfo[1][iClk][1][0] = result->m_t2d1ts2_id;
834  t2DTsfFirmwareInfo[1][iClk][1][1] = result->m_t2d1ts2_rt;
835  t2DTsfFirmwareInfo[1][iClk][1][2] = result->m_t2d1ts2_lr;
836  t2DTsfFirmwareInfo[1][iClk][1][3] = result->m_t2d1ts2_pr;
837  t2DTsfFirmwareInfo[1][iClk][2][0] = result->m_t2d1ts4_id;
838  t2DTsfFirmwareInfo[1][iClk][2][1] = result->m_t2d1ts4_rt;
839  t2DTsfFirmwareInfo[1][iClk][2][2] = result->m_t2d1ts4_lr;
840  t2DTsfFirmwareInfo[1][iClk][2][3] = result->m_t2d1ts4_pr;
841  t2DTsfFirmwareInfo[1][iClk][3][0] = result->m_t2d1ts6_id;
842  t2DTsfFirmwareInfo[1][iClk][3][1] = result->m_t2d1ts6_rt;
843  t2DTsfFirmwareInfo[1][iClk][3][2] = result->m_t2d1ts6_lr;
844  t2DTsfFirmwareInfo[1][iClk][3][3] = result->m_t2d1ts6_pr;
845  t2DTsfFirmwareInfo[1][iClk][4][0] = result->m_t2d1ts8_id;
846  t2DTsfFirmwareInfo[1][iClk][4][1] = result->m_t2d1ts8_rt;
847  t2DTsfFirmwareInfo[1][iClk][4][2] = result->m_t2d1ts8_lr;
848  t2DTsfFirmwareInfo[1][iClk][4][3] = result->m_t2d1ts8_pr;
849 
850  t2DTsfFirmwareInfo[2][iClk][0][0] = result->m_t2d2ts0_id;
851  t2DTsfFirmwareInfo[2][iClk][0][1] = result->m_t2d2ts0_rt;
852  t2DTsfFirmwareInfo[2][iClk][0][2] = result->m_t2d2ts0_lr;
853  t2DTsfFirmwareInfo[2][iClk][0][3] = result->m_t2d2ts0_pr;
854  t2DTsfFirmwareInfo[2][iClk][1][0] = result->m_t2d2ts2_id;
855  t2DTsfFirmwareInfo[2][iClk][1][1] = result->m_t2d2ts2_rt;
856  t2DTsfFirmwareInfo[2][iClk][1][2] = result->m_t2d2ts2_lr;
857  t2DTsfFirmwareInfo[2][iClk][1][3] = result->m_t2d2ts2_pr;
858  t2DTsfFirmwareInfo[2][iClk][2][0] = result->m_t2d2ts4_id;
859  t2DTsfFirmwareInfo[2][iClk][2][1] = result->m_t2d2ts4_rt;
860  t2DTsfFirmwareInfo[2][iClk][2][2] = result->m_t2d2ts4_lr;
861  t2DTsfFirmwareInfo[2][iClk][2][3] = result->m_t2d2ts4_pr;
862  t2DTsfFirmwareInfo[2][iClk][3][0] = result->m_t2d2ts6_id;
863  t2DTsfFirmwareInfo[2][iClk][3][1] = result->m_t2d2ts6_rt;
864  t2DTsfFirmwareInfo[2][iClk][3][2] = result->m_t2d2ts6_lr;
865  t2DTsfFirmwareInfo[2][iClk][3][3] = result->m_t2d2ts6_pr;
866  t2DTsfFirmwareInfo[2][iClk][4][0] = result->m_t2d2ts8_id;
867  t2DTsfFirmwareInfo[2][iClk][4][1] = result->m_t2d2ts8_rt;
868  t2DTsfFirmwareInfo[2][iClk][4][2] = result->m_t2d2ts8_lr;
869  t2DTsfFirmwareInfo[2][iClk][4][3] = result->m_t2d2ts8_pr;
870 
871  t2DTsfFirmwareInfo[3][iClk][0][0] = result->m_t2d3ts0_id;
872  t2DTsfFirmwareInfo[3][iClk][0][1] = result->m_t2d3ts0_rt;
873  t2DTsfFirmwareInfo[3][iClk][0][2] = result->m_t2d3ts0_lr;
874  t2DTsfFirmwareInfo[3][iClk][0][3] = result->m_t2d3ts0_pr;
875  t2DTsfFirmwareInfo[3][iClk][1][0] = result->m_t2d3ts2_id;
876  t2DTsfFirmwareInfo[3][iClk][1][1] = result->m_t2d3ts2_rt;
877  t2DTsfFirmwareInfo[3][iClk][1][2] = result->m_t2d3ts2_lr;
878  t2DTsfFirmwareInfo[3][iClk][1][3] = result->m_t2d3ts2_pr;
879  t2DTsfFirmwareInfo[3][iClk][2][0] = result->m_t2d3ts4_id;
880  t2DTsfFirmwareInfo[3][iClk][2][1] = result->m_t2d3ts4_rt;
881  t2DTsfFirmwareInfo[3][iClk][2][2] = result->m_t2d3ts4_lr;
882  t2DTsfFirmwareInfo[3][iClk][2][3] = result->m_t2d3ts4_pr;
883  t2DTsfFirmwareInfo[3][iClk][3][0] = result->m_t2d3ts6_id;
884  t2DTsfFirmwareInfo[3][iClk][3][1] = result->m_t2d3ts6_rt;
885  t2DTsfFirmwareInfo[3][iClk][3][2] = result->m_t2d3ts6_lr;
886  t2DTsfFirmwareInfo[3][iClk][3][3] = result->m_t2d3ts6_pr;
887  t2DTsfFirmwareInfo[3][iClk][4][0] = result->m_t2d3ts8_id;
888  // Due to 32 bit problem
889  //t2DTsfFirmwareInfo[3][iClk][4][1] = result->m_t2d3ts8_rt;
890  //t2DTsfFirmwareInfo[3][iClk][4][2] = result->m_t2d3ts8_lr;
891  //t2DTsfFirmwareInfo[3][iClk][4][3] = result->m_t2d3ts8_pr;
892  }
893 }
894 
895 
896 // t3DFirmwareInfo[tIndex][iClk][2DValid, 2DisOld, TSFValid, EventTimeValid, eventTime, charge, rho, phi0, z0, cot, zchi]
897 void TRGCDCT3DConverterModule::store3DFirmwareData(vector<vector<vector<double> > >& t3DFirmwareInfo)
898 {
899  t3DFirmwareInfo.resize(4, vector<vector<double> > (48, vector<double> (11)));
900 
901  for (int iClk = 0; iClk < m_firmwareResults.getEntries() - 11 - 1; iClk++) {
903  TRGCDCT3DUnpackerStore* result3D = m_firmwareResults[iClk + 11];
904 
905  bitset<6> t2d_fnf(int(result3D->m_t3d_2dfnf));
906  bitset<4> tsf_fnf(int(result3D->m_t3d_validTS));
907  bitset<6> t2d_oldfnf(int(result->m_t3d_2doldtrk));
908 
909  //cout<<iClk<<" "<<t2d_fnf<<" "<<t2d_oldfnf<<endl;
910 
911  t3DFirmwareInfo[0][iClk][0] = t2d_fnf[5];
912  t3DFirmwareInfo[0][iClk][1] = t2d_oldfnf[5];
913  t3DFirmwareInfo[0][iClk][2] = tsf_fnf[3];
914  t3DFirmwareInfo[0][iClk][3] = result3D->m_t3dtrk0_evtTimeValid_delay;
915  t3DFirmwareInfo[0][iClk][4] = result3D->m_t3dtrk0_evtTime_delay;
916  t3DFirmwareInfo[0][iClk][5] = result->m_t2d0_charge;
917  t3DFirmwareInfo[0][iClk][6] = result->m_t2d0_rho_s;
918  t3DFirmwareInfo[0][iClk][7] = result->m_t2d0_phi;
919  t3DFirmwareInfo[0][iClk][8] = result3D->m_t3dtrk0_z0_s;
920  t3DFirmwareInfo[0][iClk][9] = result3D->m_t3dtrk0_cot_s;
921  t3DFirmwareInfo[0][iClk][10] = result3D->m_t3dtrk0_zchisq;
922 
923  // [TODO] I am not sure of the sequence for the below information
924  //t3DFirmwareInfo[1][iClk][0] = t2d_fnf[4];
925  //t3DFirmwareInfo[1][iClk][1] = tsf_fnf[0];
926  //t3DFirmwareInfo[1][iClk][2] = result->m_t3dtrk1_z0_s;
927  //t3DFirmwareInfo[1][iClk][3] = result->m_t3dtrk1_cot_s;
928  //t3DFirmwareInfo[1][iClk][4] = result->m_t3dtrk1_zchisq;
929 
930  //t3DFirmwareInfo[2][iClk][0] = t2d_fnf[3];
931  //t3DFirmwareInfo[2][iClk][1] = tsf_fnf[1];
932  //t3DFirmwareInfo[2][iClk][2] = result->m_t3dtrk2_z0_s;
933  //t3DFirmwareInfo[2][iClk][3] = result->m_t3dtrk2_cot_s;
934  //t3DFirmwareInfo[2][iClk][4] = result->m_t3dtrk2_zchisq;
935 
936  //t3DFirmwareInfo[3][iClk][0] = t2d_fnf[2];
937  //t3DFirmwareInfo[3][iClk][1] = tsf_fnf[2];
938  //t3DFirmwareInfo[3][iClk][2] = result->m_t3dtrk3_z0_s;
939  //t3DFirmwareInfo[3][iClk][3] = result->m_t3dtrk3_cot_s;
940  //t3DFirmwareInfo[3][iClk][4] = result->m_t3dtrk3_zchisq;
941  }
942 
943 }
944 
945 // t3DFirmwareInfo[tIndex][iClk][2DValid, 2DisOld, TSFValid, EventTimeValid, eventTime, charge, rho, phi0, z0, cot, zchi]
946 void TRGCDCT3DConverterModule::store3DFastSimData(vector<vector<vector<double> > >& t3DFirmwareInfo)
947 {
948  t3DFirmwareInfo.resize(4, vector<vector<double> > (48, vector<double> (11)));
949 
950  for (int iClk = 0; iClk < m_firmwareResults.getEntries() - 11 - 1; iClk++) {
951 
953  TRGCDCT3DUnpackerStore* result3D = m_firmwareResults[iClk + 11];
954  TRGCDCT3DUnpackerStore* resultDebug = m_firmwareResults[iClk + 4];
955 
956  if (bitset<6> (result->m_t2d_fnf)[5] == 0) continue;
957 
958  // Store information(charge, radius(cm), phi_c(rad), eventTime, eventTimeValid, [TS ID, TS LR, TS driftTime])
959  // [TODO] Is evtTime clock correct?
960  int charge = resultDebug->m_t3dtrk0_charge == 2 ? -1 : 1;
961  double radius = resultDebug->m_t3dtrk0_rho * 2500 / (pow(2, 11) - 0.5);
962  double phi_c = toSigned(resultDebug->m_t3dtrk0_phi0, 13) * M_PI / (pow(2, 12) - 0.5);
963  int eventTime = result3D->m_t3dtrk0_evtTime_delay;
964  int eventTimeValid = result3D->m_t3dtrk0_evtTimeValid_delay;
965  // rawStTSs[iSt] = [TS ID, TS LR, TS driftTime]
966  vector<vector<int> > rawStTSs(4, vector<int> (3));
967  rawStTSs[0][0] = resultDebug->m_t3dtrk0ts0_id;
968  rawStTSs[0][1] = resultDebug->m_t3dtrk0ts0_lr;
969  rawStTSs[0][2] = resultDebug->m_t3dtrk0ts0_rt;
970  rawStTSs[1][0] = resultDebug->m_t3dtrk0ts1_id;
971  rawStTSs[1][1] = resultDebug->m_t3dtrk0ts1_lr;
972  rawStTSs[1][2] = resultDebug->m_t3dtrk0ts1_rt;
973  rawStTSs[2][0] = resultDebug->m_t3dtrk0ts2_id;
974  rawStTSs[2][1] = resultDebug->m_t3dtrk0ts2_lr;
975  rawStTSs[2][2] = resultDebug->m_t3dtrk0ts2_rt;
976  rawStTSs[3][0] = resultDebug->m_t3dtrk0ts3_id;
977  rawStTSs[3][1] = resultDebug->m_t3dtrk0ts3_lr;
978  rawStTSs[3][2] = resultDebug->m_t3dtrk0ts3_rt;
979 
980  // Get geometry
981  map<string, vector<double> > stGeometry;
982  vector<vector<double> > stXts;
984  TRGCDCFitter3D::getStereoXt(stGeometry["priorityLayer"], stXts);
985 
986  double z0 = 0, cot = 0, chi2 = 0;
987  Fitter3DUtility::fitter3D(stGeometry, stXts, eventTimeValid, eventTime, rawStTSs, charge, radius, phi_c, z0, cot, chi2);
988 
989  bitset<6> t2d_fnf(int(result3D->m_t3d_2dfnf));
990  bitset<4> tsf_fnf(int(result3D->m_t3d_validTS));
991  bitset<6> t2d_oldfnf(int(result->m_t3d_2doldtrk));
992 
993  //cout<<iClk<<" "<<t2d_fnf<<" "<<t2d_oldfnf<<endl;
994 
995  t3DFirmwareInfo[0][iClk][0] = t2d_fnf[5];
996  t3DFirmwareInfo[0][iClk][1] = t2d_oldfnf[5];
997  t3DFirmwareInfo[0][iClk][2] = tsf_fnf[3];
998 
999  t3DFirmwareInfo[0][iClk][3] = result3D->m_t3dtrk0_evtTimeValid_delay;
1000  t3DFirmwareInfo[0][iClk][4] = result3D->m_t3dtrk0_evtTime_delay;
1001  t3DFirmwareInfo[0][iClk][5] = charge;
1002  t3DFirmwareInfo[0][iClk][6] = radius;
1003  t3DFirmwareInfo[0][iClk][7] = phi_c;
1004  t3DFirmwareInfo[0][iClk][8] = z0;
1005  t3DFirmwareInfo[0][iClk][9] = cot;
1006  t3DFirmwareInfo[0][iClk][10] = chi2;
1007  }
1008 }
1009 
1010 // t3DFirmwareInfo[tIndex][iClk][2DValid, 2DisOld, TSFValid, EventTimeValid, eventTime, charge, rho, phi0, z0, cot, zchi]
1011 void TRGCDCT3DConverterModule::store3DFirmSimData(vector<vector<vector<double> > >& t3DFirmwareInfo)
1012 {
1013  t3DFirmwareInfo.resize(4, vector<vector<double> > (48, vector<double> (11)));
1014 
1015  for (int iClk = 0; iClk < m_firmwareResults.getEntries() - 11 - 1; iClk++) {
1016 
1017  TRGCDCT3DUnpackerStore* result = m_firmwareResults[iClk];
1018  TRGCDCT3DUnpackerStore* result3D = m_firmwareResults[iClk + 11];
1019  TRGCDCT3DUnpackerStore* resultDebug = m_firmwareResults[iClk + 4];
1020 
1021  if (bitset<6> (result->m_t2d_fnf)[5] == 0) continue;
1022 
1023  // Store information(charge, radius(cm), phi_c(rad), eventTime, eventTimeValid, [TS ID, TS LR, TS driftTime])
1024  // [TODO] Is evtTime clock correct?
1025  int charge = resultDebug->m_t3dtrk0_charge == 2 ? -1 : 1;
1026  double radius = resultDebug->m_t3dtrk0_rho * 2500 / (pow(2, 11) - 0.5);
1027  double phi_c = toSigned(resultDebug->m_t3dtrk0_phi0, 13) * M_PI / (pow(2, 12) - 0.5);
1028  int eventTime = result3D->m_t3dtrk0_evtTime_delay;
1029  int eventTimeValid = result3D->m_t3dtrk0_evtTimeValid_delay;
1030  // rawStTSs[iSt] = [TS ID, TS LR, TS driftTime]
1031  vector<vector<int> > rawStTSs(4, vector<int> (3));
1032  rawStTSs[0][0] = resultDebug->m_t3dtrk0ts0_id;
1033  rawStTSs[0][1] = resultDebug->m_t3dtrk0ts0_lr;
1034  rawStTSs[0][2] = resultDebug->m_t3dtrk0ts0_rt;
1035  rawStTSs[1][0] = resultDebug->m_t3dtrk0ts1_id;
1036  rawStTSs[1][1] = resultDebug->m_t3dtrk0ts1_lr;
1037  rawStTSs[1][2] = resultDebug->m_t3dtrk0ts1_rt;
1038  rawStTSs[2][0] = resultDebug->m_t3dtrk0ts2_id;
1039  rawStTSs[2][1] = resultDebug->m_t3dtrk0ts2_lr;
1040  rawStTSs[2][2] = resultDebug->m_t3dtrk0ts2_rt;
1041  rawStTSs[3][0] = resultDebug->m_t3dtrk0ts3_id;
1042  rawStTSs[3][1] = resultDebug->m_t3dtrk0ts3_lr;
1043  rawStTSs[3][2] = resultDebug->m_t3dtrk0ts3_rt;
1044 
1045  // Get geometry
1046  map<string, vector<double> > stGeometry;
1047  vector<vector<double> > stXts;
1049  TRGCDCFitter3D::getStereoXt(stGeometry["priorityLayer"], stXts);
1050 
1051  // Prepare complex fit3D
1052  map<string, vector<double> > mConstV;
1053  map<string, double> mConstD;
1054  TRGCDCFitter3D::getConstants(mConstD, mConstV);
1055  Fitter3DUtility::fitter3DFirm(mConstD, mConstV, eventTimeValid, eventTime, rawStTSs, charge, radius, phi_c, m_commonData,
1057  double z0 = m_mSignalStorage["z0_r"].getRealInt();
1058  double cot = m_mSignalStorage["cot_r"].getRealInt();
1059  double chi2 = m_mSignalStorage["zChi2_r"].getRealInt();
1060 
1061  bitset<6> t2d_fnf(int(result3D->m_t3d_2dfnf));
1062  bitset<4> tsf_fnf(int(result3D->m_t3d_validTS));
1063  bitset<6> t2d_oldfnf(int(result->m_t3d_2doldtrk));
1064 
1065  //cout<<iClk<<" "<<t2d_fnf<<" "<<t2d_oldfnf<<endl;
1066 
1067  t3DFirmwareInfo[0][iClk][0] = t2d_fnf[5];
1068  t3DFirmwareInfo[0][iClk][1] = t2d_oldfnf[5];
1069  t3DFirmwareInfo[0][iClk][2] = tsf_fnf[3];
1070 
1071  t3DFirmwareInfo[0][iClk][3] = result3D->m_t3dtrk0_evtTimeValid_delay;
1072  t3DFirmwareInfo[0][iClk][4] = result3D->m_t3dtrk0_evtTime_delay;
1073  t3DFirmwareInfo[0][iClk][5] = charge;
1074  t3DFirmwareInfo[0][iClk][6] = radius;
1075  t3DFirmwareInfo[0][iClk][7] = phi_c;
1076  t3DFirmwareInfo[0][iClk][8] = z0;
1077  t3DFirmwareInfo[0][iClk][9] = cot;
1078  t3DFirmwareInfo[0][iClk][10] = chi2;
1079  }
1080 }
1081 
1083 {
1084  bool doPrint = (m_isVerbose > 1);
1085 
1086  for (int iClk = 0; iClk < m_firmwareResults.getEntries(); iClk++) {
1087  TRGCDCT3DUnpackerStore* result = m_firmwareResults[iClk];
1088  //bitset<6> t2d_fnf (int(result->m_t3d_2dfnf));
1089  //bitset<4> tsf_fnf (int(result->m_t3d_validTS));
1090 
1091  //cout<<"iClk:"<<iClk<<endl;
1092  //cout<<" [2D] fnf:"<<result->m_t2d_fnf<<" "<<bitset<6> (result->m_t2d_fnf)<<endl;
1093  //cout<<" [0] rho: "<<result->m_t2d0_rho_s<<" "<<toSigned(result->m_t2d0_rho_s, 7)<<" "<<int(0.3*34/30/1.5e-4/abs(toSigned(result->m_t2d0_rho_s, 7))*(pow(2,11)-0.5)/2500)<<" phi0: "<<result->m_t2d0_phi<<endl;
1094  //cout<<" [1] rho: "<<result->m_t2d1_rho_s<<" "<<toSigned(result->m_t2d1_rho_s, 7)<<" "<<int(0.3*34/30/1.5e-4/abs(toSigned(result->m_t2d1_rho_s, 7))*(pow(2,11)-0.5)/2500)<<" phi0: "<<result->m_t2d1_phi<<endl;
1095  //cout<<" [2] rho: "<<result->m_t2d2_rho_s<<" "<<toSigned(result->m_t2d2_rho_s, 7)<<" "<<int(0.3*34/30/1.5e-4/abs(toSigned(result->m_t2d2_rho_s, 7))*(pow(2,11)-0.5)/2500)<<" phi0: "<<result->m_t2d2_phi<<endl;
1096  //cout<<" [3] rho: "<<result->m_t2d3_rho_s<<" "<<toSigned(result->m_t2d3_rho_s, 7)<<" "<<int(0.3*34/30/1.5e-4/abs(toSigned(result->m_t2d3_rho_s, 7))*(pow(2,11)-0.5)/2500)<<" phi0: "<<result->m_t2d3_phi<<endl;
1097  //cout<<" [3D] fnf:"<<result->m_t3d_2dfnf<<" "<<t2d_fnf<<" "<<t2d_fnf[5]<<" tsValid: "<<result->m_t3d_validTS<<" "<<tsf_fnf<<endl;;
1098  //cout<<" [0] z0: "<<result->m_t3dtrk0_z0_s<<" cot: "<<result->m_t3dtrk0_cot_s<<" chi2: "<<result->m_t3dtrk0_zchisq<<endl;
1099  //cout<<" [1] z0: "<<result->m_t3dtrk1_z0_s<<" cot: "<<result->m_t3dtrk1_cot_s<<" chi2: "<<result->m_t3dtrk1_zchisq<<endl;
1100  //cout<<" [2] z0: "<<result->m_t3dtrk2_z0_s<<" cot: "<<result->m_t3dtrk2_cot_s<<" chi2: "<<result->m_t3dtrk2_zchisq<<endl;
1101  //cout<<" [3] z0: "<<result->m_t3dtrk3_z0_s<<" cot: "<<result->m_t3dtrk3_cot_s<<" chi2: "<<result->m_t3dtrk3_zchisq<<endl;
1102  //cout<<" [debug] MSB"<<endl;
1103  //cout<<" evtTime: "<<result->m_t3dtrk0_evtTime_delay<<" evtTimeValid: "<<result->m_t3dtrk0_evtTimeValid_delay<<endl;
1104  //cout<<" charge: "<<result->m_t3dtrk0_charge<<" rho: "<<result->m_t3dtrk0_rho<<" phi0: "<<result->m_t3dtrk0_phi0<<endl;;
1105  //cout<<" ts0 id: "<<result->m_t3dtrk0ts0_id<<" lr: "<<result->m_t3dtrk0ts0_lr<<" rt: "<<result->m_t3dtrk0ts0_rt<<endl;
1106  //cout<<" ts1 id: "<<result->m_t3dtrk0ts1_id<<" lr: "<<result->m_t3dtrk0ts1_lr<<" rt: "<<result->m_t3dtrk0ts1_rt<<endl;
1107  //cout<<" ts2 id: "<<result->m_t3dtrk0ts2_id<<" lr: "<<result->m_t3dtrk0ts2_lr<<" rt: "<<result->m_t3dtrk0ts2_rt<<endl;
1108  //cout<<" ts3 id: "<<result->m_t3dtrk0ts3_id<<" lr: "<<result->m_t3dtrk0ts3_lr<<" rt: "<<result->m_t3dtrk0ts3_rt<<endl;
1109  //cout<<" [debug] LSB"<<endl;
1110  //cout<<" evtTime: "<<result->m_t3dtrk1_evtTime_delay<<" evtTimeValid: "<<result->m_t3dtrk1_evtTimeValid_delay<<endl;
1111  //cout<<" charge: "<<result->m_t3dtrk1_charge<<" rho: "<<result->m_t3dtrk1_rho<<" phi0: "<<result->m_t3dtrk1_phi0<<endl;;
1112  //cout<<" ts0 id: "<<result->m_t3dtrk1ts0_id<<" lr: "<<result->m_t3dtrk1ts0_lr<<" rt: "<<result->m_t3dtrk1ts0_rt<<endl;
1113  //cout<<" ts1 id: "<<result->m_t3dtrk1ts1_id<<" lr: "<<result->m_t3dtrk1ts1_lr<<" rt: "<<result->m_t3dtrk1ts1_rt<<endl;
1114  //cout<<" ts2 id: "<<result->m_t3dtrk1ts2_id<<" lr: "<<result->m_t3dtrk1ts2_lr<<" rt: "<<result->m_t3dtrk1ts2_rt<<endl;
1115  //cout<<" ts3 id: "<<result->m_t3dtrk1ts3_id<<" lr: "<<result->m_t3dtrk1ts3_lr<<" rt: "<<result->m_t3dtrk1ts3_rt<<endl;
1116 
1118  //if (result->m_t2d_fnf && iClk < 48-4-1 && bitset<6> (result->m_t2d_fnf)[5])
1119  //{
1120  // TRGCDCT3DUnpackerStore * resultDebug = m_firmwareResults[iClk+4];
1121  // if(t2DRhoTot3DRho(result->m_t2d0_rho_s) == resultDebug->m_t3dtrk0_rho)
1122  // {
1123  // cout<<"Matched 2D0 and debug0"<<endl;
1124  // } else {
1125  // cout<<"iClk:"<<iClk<<endl;
1126  // cout<<" [2D] fnf:"<<result->m_t2d_fnf<<" "<<bitset<6> (result->m_t2d_fnf)<<endl;
1127  // cout<<" [0] rho: "<<result->m_t2d0_rho_s<<" "<<toSigned(result->m_t2d0_rho_s, 7)<<" "<<t2DRhoTot3DRho(result->m_t2d0_rho_s)<<" phi0: "<<result->m_t2d0_phi<<endl;
1128  // cout<<" [1] rho: "<<result->m_t2d1_rho_s<<" "<<toSigned(result->m_t2d1_rho_s, 7)<<" "<<t2DRhoTot3DRho(result->m_t2d1_rho_s)<<" phi0: "<<result->m_t2d1_phi<<endl;
1129  // cout<<" [2] rho: "<<result->m_t2d2_rho_s<<" "<<toSigned(result->m_t2d2_rho_s, 7)<<" "<<t2DRhoTot3DRho(result->m_t2d2_rho_s)<<" phi0: "<<result->m_t2d2_phi<<endl;
1130  // cout<<" [3] rho: "<<result->m_t2d3_rho_s<<" "<<toSigned(result->m_t2d3_rho_s, 7)<<" "<<t2DRhoTot3DRho(result->m_t2d3_rho_s)<<" phi0: "<<result->m_t2d3_phi<<endl;
1131  // cout<<" [3DDebug] MSB"<<endl;
1132  // cout<<" charge: "<<resultDebug->m_t3dtrk0_charge<<" rho: "<<resultDebug->m_t3dtrk0_rho<<" phi0: "<<resultDebug->m_t3dtrk0_phi0<<endl;;
1133  // cout<<" ts0 id: "<<resultDebug->m_t3dtrk0ts0_id<<" lr: "<<resultDebug->m_t3dtrk0ts0_lr<<" rt: "<<resultDebug->m_t3dtrk0ts0_rt<<endl;
1134  // cout<<" ts1 id: "<<resultDebug->m_t3dtrk0ts1_id<<" lr: "<<resultDebug->m_t3dtrk0ts1_lr<<" rt: "<<resultDebug->m_t3dtrk0ts1_rt<<endl;
1135  // cout<<" ts2 id: "<<resultDebug->m_t3dtrk0ts2_id<<" lr: "<<resultDebug->m_t3dtrk0ts2_lr<<" rt: "<<resultDebug->m_t3dtrk0ts2_rt<<endl;
1136  // cout<<" ts3 id: "<<resultDebug->m_t3dtrk0ts3_id<<" lr: "<<resultDebug->m_t3dtrk0ts3_lr<<" rt: "<<resultDebug->m_t3dtrk0ts3_rt<<endl;
1137  // }
1138  //}
1139 
1141  //if (iClk < 48-4-1 && bitset<6> (result->m_t2d_fnf)[2])
1142  //{
1143  // TRGCDCT3DUnpackerStore * resultDebug = m_firmwareResults[iClk+4];
1144  // if(t2DRhoTot3DRho(result->m_t2d3_rho_s) == resultDebug->m_t3dtrk1_rho)
1145  // {
1146  // cout<<"Matched 2D3 and debug1"<<endl;
1147  // } else {
1148  // cout<<"iClk:"<<iClk<<endl;
1149  // cout<<" [2D] fnf:"<<result->m_t2d_fnf<<" "<<bitset<6> (result->m_t2d_fnf)<<endl;
1150  // cout<<" [0] rho: "<<result->m_t2d0_rho_s<<" "<<toSigned(result->m_t2d0_rho_s, 7)<<" "<<t2DRhoTot3DRho(result->m_t2d0_rho_s)<<" phi0: "<<result->m_t2d0_phi<<endl;
1151  // cout<<" [1] rho: "<<result->m_t2d1_rho_s<<" "<<toSigned(result->m_t2d1_rho_s, 7)<<" "<<t2DRhoTot3DRho(result->m_t2d1_rho_s)<<" phi0: "<<result->m_t2d1_phi<<endl;
1152  // cout<<" [2] rho: "<<result->m_t2d2_rho_s<<" "<<toSigned(result->m_t2d2_rho_s, 7)<<" "<<t2DRhoTot3DRho(result->m_t2d2_rho_s)<<" phi0: "<<result->m_t2d2_phi<<endl;
1153  // cout<<" [3] rho: "<<result->m_t2d3_rho_s<<" "<<toSigned(result->m_t2d3_rho_s, 7)<<" "<<t2DRhoTot3DRho(result->m_t2d3_rho_s)<<" phi0: "<<result->m_t2d3_phi<<endl;
1154  // cout<<" [3DDebug] LSB"<<endl;
1155  // cout<<" evtTime: "<<resultDebug->m_t3dtrk1_evtTime_delay<<" evtTimeValid: "<<resultDebug->m_t3dtrk1_evtTimeValid_delay<<endl;
1156  // cout<<" charge: "<<resultDebug->m_t3dtrk1_charge<<" rho: "<<resultDebug->m_t3dtrk1_rho<<" phi0: "<<resultDebug->m_t3dtrk1_phi0<<endl;;
1157  // cout<<" ts0 id: "<<resultDebug->m_t3dtrk1ts0_id<<" lr: "<<resultDebug->m_t3dtrk1ts0_lr<<" rt: "<<resultDebug->m_t3dtrk1ts0_rt<<endl;
1158  // cout<<" ts1 id: "<<resultDebug->m_t3dtrk1ts1_id<<" lr: "<<resultDebug->m_t3dtrk1ts1_lr<<" rt: "<<resultDebug->m_t3dtrk1ts1_rt<<endl;
1159  // cout<<" ts2 id: "<<resultDebug->m_t3dtrk1ts2_id<<" lr: "<<resultDebug->m_t3dtrk1ts2_lr<<" rt: "<<resultDebug->m_t3dtrk1ts2_rt<<endl;
1160  // cout<<" ts3 id: "<<resultDebug->m_t3dtrk1ts3_id<<" lr: "<<resultDebug->m_t3dtrk1ts3_lr<<" rt: "<<resultDebug->m_t3dtrk1ts3_rt<<endl;
1161  // }
1162  //}
1163 
1165  //int countTrk0 = int(result->m_t3dtrk0ts0_lr!=0)+int(result->m_t3dtrk0ts1_lr!=0)+int(result->m_t3dtrk0ts2_lr!=0)+int(result->m_t3dtrk0ts3_lr!=0);
1166  //if ( iClk < 48 - 7 - 1)
1167  //{
1168  // TRGCDCT3DUnpackerStore * resultDebug = m_firmwareResults[iClk];
1169  // TRGCDCT3DUnpackerStore * result = m_firmwareResults[iClk+7];
1170 
1171  // if (int(countTrk0 > 1) == bitset<4> (int(result->m_t3d_validTS))[3])
1172  // {
1173  // cout<<"debug TSF matches with TSFValid0"<<endl;
1174  // } else {
1175  // cout<<"iClk:"<<iClk+7<<endl;
1176  // cout<<" [3D] fnf:"<<result->m_t3d_2dfnf<<" "<<bitset<6> (int(result->m_t3d_2dfnf))<<" tsValid: "<<result->m_t3d_validTS<<" "<<bitset<4> (int(result->m_t3d_validTS))<<endl;;
1177  // cout<<" [3DDebug] MSB"<<endl;
1178  // cout<<" charge: "<<resultDebug->m_t3dtrk0_charge<<" rho: "<<resultDebug->m_t3dtrk0_rho<<" phi0: "<<resultDebug->m_t3dtrk0_phi0<<endl;;
1179  // cout<<" ts0 id: "<<resultDebug->m_t3dtrk0ts0_id<<" lr: "<<resultDebug->m_t3dtrk0ts0_lr<<" rt: "<<resultDebug->m_t3dtrk0ts0_rt<<endl;
1180  // cout<<" ts1 id: "<<resultDebug->m_t3dtrk0ts1_id<<" lr: "<<resultDebug->m_t3dtrk0ts1_lr<<" rt: "<<resultDebug->m_t3dtrk0ts1_rt<<endl;
1181  // cout<<" ts2 id: "<<resultDebug->m_t3dtrk0ts2_id<<" lr: "<<resultDebug->m_t3dtrk0ts2_lr<<" rt: "<<resultDebug->m_t3dtrk0ts2_rt<<endl;
1182  // cout<<" ts3 id: "<<resultDebug->m_t3dtrk0ts3_id<<" lr: "<<resultDebug->m_t3dtrk0ts3_lr<<" rt: "<<resultDebug->m_t3dtrk0ts3_rt<<endl;
1183  // cout<<" count: "<<countTrk0<<endl;
1184  // }
1185  //}
1186 
1188  //int countTrk3 = int(result->m_t3dtrk1ts0_lr!=0)+int(result->m_t3dtrk1ts1_lr!=0)+int(result->m_t3dtrk1ts2_lr!=0)+int(result->m_t3dtrk1ts3_lr!=0);
1189  //if ( iClk < 48 - 7 - 1)
1190  //{
1191  // TRGCDCT3DUnpackerStore * resultDebug = m_firmwareResults[iClk];
1192  // TRGCDCT3DUnpackerStore * result = m_firmwareResults[iClk+7];
1193 
1194  // if (int(countTrk3 > 1) == bitset<4> (int(result->m_t3d_validTS))[2])
1195  // {
1196  // cout<<"debug TSF matches with TSFValid3"<<endl;
1197  // } else {
1198  // cout<<"iClk:"<<iClk+7<<endl;
1199  // cout<<" [3D] fnf:"<<result->m_t3d_2dfnf<<" "<<bitset<6> (int(result->m_t3d_2dfnf))<<" tsValid: "<<result->m_t3d_validTS<<" "<<bitset<4> (int(result->m_t3d_validTS))<<endl;;
1200  // cout<<" [3DDebug] LSB"<<endl;
1201  // cout<<" charge: "<<resultDebug->m_t3dtrk1_charge<<" rho: "<<resultDebug->m_t3dtrk1_rho<<" phi0: "<<resultDebug->m_t3dtrk1_phi0<<endl;;
1202  // cout<<" ts0 id: "<<resultDebug->m_t3dtrk1ts0_id<<" lr: "<<resultDebug->m_t3dtrk1ts0_lr<<" rt: "<<resultDebug->m_t3dtrk1ts0_rt<<endl;
1203  // cout<<" ts1 id: "<<resultDebug->m_t3dtrk1ts1_id<<" lr: "<<resultDebug->m_t3dtrk1ts1_lr<<" rt: "<<resultDebug->m_t3dtrk1ts1_rt<<endl;
1204  // cout<<" ts2 id: "<<resultDebug->m_t3dtrk1ts2_id<<" lr: "<<resultDebug->m_t3dtrk1ts2_lr<<" rt: "<<resultDebug->m_t3dtrk1ts2_rt<<endl;
1205  // cout<<" ts3 id: "<<resultDebug->m_t3dtrk1ts3_id<<" lr: "<<resultDebug->m_t3dtrk1ts3_lr<<" rt: "<<resultDebug->m_t3dtrk1ts3_rt<<endl;
1206  // cout<<" count: "<<countTrk3<<endl;
1207  // }
1208  //}
1209 
1210  // Compare 2D with debug and 3D after 4 clks and 11 clks
1211  if (result->m_t2d_fnf && iClk < 48 - 11 - 1 && bitset<6> (result->m_t2d_fnf)[5]) {
1212  TRGCDCT3DUnpackerStore* resultDebug = m_firmwareResults[iClk + 4];
1213  TRGCDCT3DUnpackerStore* result3D = m_firmwareResults[iClk + 11];
1214 
1215  // Store information(charge, radius(cm), phi_c(rad), eventTime, eventTimeValid, [TS ID, TS LR, TS driftTime])
1216  // [TODO] Is evtTime clock correct?
1217  int charge = resultDebug->m_t3dtrk0_charge;
1218  double radius = resultDebug->m_t3dtrk0_rho * 2500 / (pow(2, 11) - 0.5);
1219  double phi_c = toSigned(resultDebug->m_t3dtrk0_phi0, 13) * M_PI / (pow(2, 12) - 0.5);
1220  int eventTime = result3D->m_t3dtrk0_evtTime_delay;
1221  int eventTimeValid = result3D->m_t3dtrk0_evtTimeValid_delay;
1222  // rawStTSs[iSt] = [TS ID, TS LR, TS driftTime]
1223  vector<vector<int> > rawStTSs(4, vector<int> (3));
1224  rawStTSs[0][0] = resultDebug->m_t3dtrk0ts0_id;
1225  rawStTSs[0][1] = resultDebug->m_t3dtrk0ts0_lr;
1226  rawStTSs[0][2] = resultDebug->m_t3dtrk0ts0_rt;
1227  rawStTSs[1][0] = resultDebug->m_t3dtrk0ts1_id;
1228  rawStTSs[1][1] = resultDebug->m_t3dtrk0ts1_lr;
1229  rawStTSs[1][2] = resultDebug->m_t3dtrk0ts1_rt;
1230  rawStTSs[2][0] = resultDebug->m_t3dtrk0ts2_id;
1231  rawStTSs[2][1] = resultDebug->m_t3dtrk0ts2_lr;
1232  rawStTSs[2][2] = resultDebug->m_t3dtrk0ts2_rt;
1233  rawStTSs[3][0] = resultDebug->m_t3dtrk0ts3_id;
1234  rawStTSs[3][1] = resultDebug->m_t3dtrk0ts3_lr;
1235  rawStTSs[3][2] = resultDebug->m_t3dtrk0ts3_rt;
1236 
1237  // Get geometry
1238  map<string, vector<double> > stGeometry;
1239  vector<vector<double> > stXts;
1241  TRGCDCFitter3D::getStereoXt(stGeometry["priorityLayer"], stXts);
1242  //Fitter3DUtility::loadStereoXt("TODOdata/stereoXt",4,stXts);
1243 
1245  //vector<double> stTSs(4);
1246  //Fitter3DUtility::calPhiFast(stGeometry, stXts, eventTimeValid, eventTime, rawStTSs, stTSs);
1247  //cout<<" [calPhi] "<<stTSs[0]<<" "<<stTSs[1]<<" "<<stTSs[2]<<" "<<stTSs[3]<<endl;
1249  //vector<double> invZError2;
1250  //Fitter3DUtility::setErrorFast(rawStTSs, eventTimeValid, invZError2);
1251  //cout<<" [invZError2] "<<invZError2[0]<<" "<<invZError2[1]<<" "<<invZError2[2]<<" "<<invZError2[3]<<endl;
1254  //vector<double> zz(4, 0);
1255  //vector<double> arcS(4, 0);
1256  //for (unsigned iSt = 0; iSt < 4; iSt++) {
1257  // if (rawStTSs[iSt][1] != 0) {
1258  // zz[iSt] = Fitter3DUtility::calZ(charge, stGeometry["angleSt"][iSt], stGeometry["zToStraw"][iSt],
1259  // stGeometry["cdcRadius"][iSt], stTSs[iSt], radius, phi_c);
1260  // arcS[iSt] = Fitter3DUtility::calS(radius, stGeometry["cdcRadius"][iSt]);
1261  // }
1262  //}
1263  //cout<<" [zz] "<<zz[0]<<" "<<zz[1]<<" "<<zz[2]<<" "<<zz[3]<<endl;
1264  //cout<<" [arcS] "<<arcS[0]<<" "<<arcS[1]<<" "<<arcS[2]<<" "<<arcS[3]<<endl;
1266  //double z0 = 0;
1267  //double cot = 0;
1268  //double chi2 = 0;
1269  //Fitter3DUtility::rSFit(&invZError2[0], &arcS[0], &zz[0], z0, cot, chi2);
1270  double z0 = 0;
1271  double cot = 0;
1272  double chi2 = 0;
1273  Fitter3DUtility::fitter3D(stGeometry, stXts, eventTimeValid, eventTime, rawStTSs, charge, radius, phi_c, z0, cot, chi2);
1274 
1275  // Prepare complex fit3D
1276  map<string, vector<double> > mConstV;
1277  map<string, double> mConstD;
1278  TRGCDCFitter3D::getConstants(mConstD, mConstV);
1279  //Belle2::TRGCDCJSignalData commonData;
1280  //map<string, TRGCDCJSignal> mSignalStorage;
1281  //map<string, TRGCDCJLUT*> mLutStorage;
1282  Fitter3DUtility::fitter3DFirm(mConstD, mConstV, eventTimeValid, eventTime, rawStTSs, charge, radius, phi_c, m_commonData,
1284 
1287  //vector<tuple<string, double, int, double, double, int> > t_values = {
1288  // make_tuple("phi0", phi_c, mConstD["phiBitSize"], mConstD["phiMin"], mConstD["phiMax"], 0),
1289  // make_tuple("rho", radius, mConstD["rhoBitSize"], mConstD["rhoMin"], mConstD["rhoMax"], 0),
1290  // //make_tuple("charge",(int) (m_mDouble["charge"]==1 ? 1 : 0), 1, 0, 1.5, 0),
1291  // make_tuple("charge", (int)(charge == 1 ? 1 : 0), 1, 0, 1.5, 0),
1292  // make_tuple("lr_0", rawStTSs[0][1], 2, 0, 3.5, 0),
1293  // make_tuple("lr_1", rawStTSs[1][1], 2, 0, 3.5, 0),
1294  // make_tuple("lr_2", rawStTSs[2][1], 2, 0, 3.5, 0),
1295  // make_tuple("lr_3", rawStTSs[3][1], 2, 0, 3.5, 0),
1296  // make_tuple("tsId_0", rawStTSs[0][0], ceil(log(mConstV["nTSs"][1]) / log(2)), 0, pow(2, ceil(log(mConstV["nTSs"][1]) / log(2))) - 0.5, 0),
1297  // make_tuple("tsId_1", rawStTSs[1][0], ceil(log(mConstV["nTSs"][3]) / log(2)), 0, pow(2, ceil(log(mConstV["nTSs"][3]) / log(2))) - 0.5, 0),
1298  // make_tuple("tsId_2", rawStTSs[2][0], ceil(log(mConstV["nTSs"][5]) / log(2)), 0, pow(2, ceil(log(mConstV["nTSs"][5]) / log(2))) - 0.5, 0),
1299  // make_tuple("tsId_3", rawStTSs[3][0], ceil(log(mConstV["nTSs"][7]) / log(2)), 0, pow(2, ceil(log(mConstV["nTSs"][7]) / log(2))) - 0.5, 0),
1300  // make_tuple("tdc_0", rawStTSs[0][2], mConstD["tdcBitSize"], 0, pow(2, mConstD["tdcBitSize"]) - 0.5, 0),
1301  // make_tuple("tdc_1", rawStTSs[1][2], mConstD["tdcBitSize"], 0, pow(2, mConstD["tdcBitSize"]) - 0.5, 0),
1302  // make_tuple("tdc_2", rawStTSs[2][2], mConstD["tdcBitSize"], 0, pow(2, mConstD["tdcBitSize"]) - 0.5, 0),
1303  // make_tuple("tdc_3", rawStTSs[3][2], mConstD["tdcBitSize"], 0, pow(2, mConstD["tdcBitSize"]) - 0.5, 0),
1304  // make_tuple("eventTime", eventTime, mConstD["tdcBitSize"], 0, pow(2, mConstD["tdcBitSize"]) - 0.5, 0),
1305  // make_tuple("eventTimeValid", eventTimeValid, 1, 0, 1.5, 0),
1306  //};
1307  //TRGCDCJSignal::valuesToMapSignals(t_values, m_commonData, m_mSignalStorage);
1309  //Fitter3DUtility::setError(mConstD, mConstV, m_mSignalStorage);
1310  //Fitter3DUtility::calPhi(mConstD, mConstV, m_mSignalStorage, m_mLutStorage);
1311  //Fitter3DUtility::constrainRPerStSl(mConstV, m_mSignalStorage);
1312  //Fitter3DUtility::calZ(mConstD, mConstV, m_mSignalStorage, m_mLutStorage);
1313  //Fitter3DUtility::calS(mConstD, mConstV, m_mSignalStorage, m_mLutStorage);
1314  //Fitter3DUtility::rSFit(mConstD, mConstV, m_mSignalStorage, m_mLutStorage);
1317  //if ((*m_mSignalStorage.begin()).second.getName() == "") {
1318  // for (auto it = m_mSignalStorage.begin(); it != m_mSignalStorage.end(); ++it) {
1319  // (*it).second.setName((*it).first);
1320  // }
1321  //}
1322 
1323  if (toSigned(result3D->m_t3dtrk0_z0_s, 11) != m_mSignalStorage["z0_r"].getInt()
1324  || toSigned(result3D->m_t3dtrk0_cot_s, 11) != m_mSignalStorage["cot_r"].getInt()) {
1325  bitset<6> t2d_oldfnf(int(result->m_t3d_2doldtrk));
1326  cout << "iClk:" << iClk << endl;
1327  cout << " [2D] fnf:" << result->m_t2d_fnf << " " << bitset<6> (result->m_t2d_fnf) << " oldfnf: " << t2d_oldfnf << endl;
1328  cout << " [0] rho: " << result->m_t2d0_rho_s << " " << t2DRhoTot3DRho(result->m_t2d0_rho_s) << " phi0: " << result->m_t2d0_phi <<
1329  " " << t2DPhiTot3DPhi(result->m_t2d0_phi, result->m_t2d0_rho_s) << endl;
1330  cout << " [debug] MSB" << endl;
1331  cout << " charge: " << resultDebug->m_t3dtrk0_charge << " rho: " << resultDebug->m_t3dtrk0_rho << " phi0: " << toSigned(
1332  resultDebug->m_t3dtrk0_phi0, 13) << endl;;
1333  cout << " ts0 id: " << resultDebug->m_t3dtrk0ts0_id << " lr: " << resultDebug->m_t3dtrk0ts0_lr << " rt: " <<
1334  resultDebug->m_t3dtrk0ts0_rt << endl;
1335  cout << " ts1 id: " << resultDebug->m_t3dtrk0ts1_id << " lr: " << resultDebug->m_t3dtrk0ts1_lr << " rt: " <<
1336  resultDebug->m_t3dtrk0ts1_rt << endl;
1337  cout << " ts2 id: " << resultDebug->m_t3dtrk0ts2_id << " lr: " << resultDebug->m_t3dtrk0ts2_lr << " rt: " <<
1338  resultDebug->m_t3dtrk0ts2_rt << endl;
1339  cout << " ts3 id: " << resultDebug->m_t3dtrk0ts3_id << " lr: " << resultDebug->m_t3dtrk0ts3_lr << " rt: " <<
1340  resultDebug->m_t3dtrk0ts3_rt << endl;
1341  cout << " [3D] fnf:" << result3D->m_t3d_2dfnf << " " << bitset<6> (result3D->m_t3d_2dfnf) << " tsValid: " <<
1342  result3D->m_t3d_validTS << " " << bitset<4> (result3D->m_t3d_validTS) << endl;;
1343  cout << " [0] z0: " << result3D->m_t3dtrk0_z0_s << " " << toSigned(result3D->m_t3dtrk0_z0_s,
1344  11) << " " << toSigned(result3D->m_t3dtrk0_z0_s,
1345  11) * 0.0382 << " cot: " << result3D->m_t3dtrk0_cot_s << " " << toSigned(result3D->m_t3dtrk0_cot_s,
1346  11) << " " << toSigned(result3D->m_t3dtrk0_cot_s, 11) * 0.00195 << " chi2: " << result3D->m_t3dtrk0_zchisq << endl;
1347  cout << " [1] z0: " << result3D->m_t3dtrk1_z0_s << " " << toSigned(result3D->m_t3dtrk1_z0_s,
1348  11) << " " << toSigned(result3D->m_t3dtrk1_z0_s,
1349  11) * 0.0382 << " cot: " << result3D->m_t3dtrk1_cot_s << " " << toSigned(result3D->m_t3dtrk1_cot_s,
1350  11) << " " << toSigned(result3D->m_t3dtrk1_cot_s, 11) * 0.00195 << " chi2: " << result3D->m_t3dtrk1_zchisq << endl;
1351  cout << " [2] z0: " << result3D->m_t3dtrk2_z0_s << " " << toSigned(result3D->m_t3dtrk2_z0_s,
1352  11) << " " << toSigned(result3D->m_t3dtrk2_z0_s,
1353  11) * 0.0382 << " cot: " << result3D->m_t3dtrk2_cot_s << " " << toSigned(result3D->m_t3dtrk2_cot_s,
1354  11) << " " << toSigned(result3D->m_t3dtrk2_cot_s, 11) * 0.00195 << " chi2: " << result3D->m_t3dtrk2_zchisq << endl;
1355  cout << " [3] z0: " << result3D->m_t3dtrk3_z0_s << " " << toSigned(result3D->m_t3dtrk3_z0_s,
1356  11) << " " << toSigned(result3D->m_t3dtrk3_z0_s,
1357  11) * 0.0382 << " cot: " << result3D->m_t3dtrk3_cot_s << " " << toSigned(result3D->m_t3dtrk3_cot_s,
1358  11) << " " << toSigned(result3D->m_t3dtrk3_cot_s, 11) * 0.00195 << " chi2: " << result3D->m_t3dtrk3_zchisq << endl;
1359  cout << " evtTime: " << result3D->m_t3dtrk0_evtTime_delay << " evtTimeValid: " << result3D->m_t3dtrk0_evtTimeValid_delay << endl;
1360 
1361  cout << " [Store information]" << endl;
1362  cout << " charge: " << charge << " radius(cm): " << radius << " phi_c(rad): " << phi_c << endl;
1363  cout << " eventTime: " << eventTime << " valid: " << eventTimeValid << endl;
1364  cout << " rawStTSs[0] id:" << rawStTSs[0][0] << " lr: " << rawStTSs[0][1] << " rt: " << rawStTSs[0][2] << endl;
1365  cout << " rawStTSs[1] id:" << rawStTSs[1][0] << " lr: " << rawStTSs[1][1] << " rt: " << rawStTSs[1][2] << endl;
1366  cout << " rawStTSs[2] id:" << rawStTSs[2][0] << " lr: " << rawStTSs[2][1] << " rt: " << rawStTSs[2][2] << endl;
1367  cout << " rawStTSs[3] id:" << rawStTSs[3][0] << " lr: " << rawStTSs[3][1] << " rt: " << rawStTSs[3][2] << endl;
1368 
1369  cout << " [Calculate fast]" << endl;
1370  cout << " [z0] " << z0 << " [cot] " << cot << " [chi2] " << chi2 << endl;
1371 
1372  cout << " [Calculate firm]" << endl;
1373  cout << " z0: " << m_mSignalStorage["z0_r"].getInt() << " " << m_mSignalStorage["z0_r"].getRealInt() << " " <<
1374  m_mSignalStorage["z0_r"].getToReal() << " cot: " << m_mSignalStorage["cot_r"].getInt() << " " <<
1375  m_mSignalStorage["cot_r"].getRealInt() << " " << m_mSignalStorage["cot_r"].getToReal() << " zchi: " <<
1376  m_mSignalStorage["zChi2_r"].getInt() << " " << m_mSignalStorage["zChi2_r"].getRealInt() << " " <<
1377  m_mSignalStorage["zChi2_r"].getToReal() << endl;
1378  //doPrint = 1;
1379  }
1380  //else
1381  //{
1382  // cout<<"same"<<endl;
1383  //}
1384 
1385  }
1386 
1387  }
1388 
1389  if (doPrint) {
1390  for (int iClk = 0; iClk < m_firmwareResults.getEntries(); iClk++) {
1391  TRGCDCT3DUnpackerStore* result = m_firmwareResults[iClk];
1392  bitset<6> t2d_fnf(int(result->m_t3d_2dfnf));
1393  bitset<4> tsf_fnf(int(result->m_t3d_validTS));
1394  bitset<6> t2d_oldfnf(int(result->m_t3d_2doldtrk));
1395  cout << "iClk:" << iClk << endl;
1396  cout << " [2D] fnf:" << result->m_t2d_fnf << " " << bitset<6> (result->m_t2d_fnf) << " oldfnf: " << t2d_oldfnf << endl;
1397  cout << " [0] rho: " << result->m_t2d0_rho_s << " " << toSigned(result->m_t2d0_rho_s,
1398  7) << " " << int(0.3 * 34 / 30 / 1.5e-4 / abs(toSigned(result->m_t2d0_rho_s, 7)) * (pow(2,
1399  11) - 0.5) / 2500) << " phi0: " << result->m_t2d0_phi << endl;
1400  cout << " [1] rho: " << result->m_t2d1_rho_s << " " << toSigned(result->m_t2d1_rho_s,
1401  7) << " " << int(0.3 * 34 / 30 / 1.5e-4 / abs(toSigned(result->m_t2d1_rho_s, 7)) * (pow(2,
1402  11) - 0.5) / 2500) << " phi0: " << result->m_t2d1_phi << endl;
1403  cout << " [2] rho: " << result->m_t2d2_rho_s << " " << toSigned(result->m_t2d2_rho_s,
1404  7) << " " << int(0.3 * 34 / 30 / 1.5e-4 / abs(toSigned(result->m_t2d2_rho_s, 7)) * (pow(2,
1405  11) - 0.5) / 2500) << " phi0: " << result->m_t2d2_phi << endl;
1406  cout << " [3] rho: " << result->m_t2d3_rho_s << " " << toSigned(result->m_t2d3_rho_s,
1407  7) << " " << int(0.3 * 34 / 30 / 1.5e-4 / abs(toSigned(result->m_t2d3_rho_s, 7)) * (pow(2,
1408  11) - 0.5) / 2500) << " phi0: " << result->m_t2d3_phi << endl;
1409  cout << " [3D] fnf:" << result->m_t3d_2dfnf << " " << t2d_fnf << " " << t2d_fnf[5] << " tsValid: " << result->m_t3d_validTS << " "
1410  << tsf_fnf << endl;;
1411  cout << " [0] z0: " << result->m_t3dtrk0_z0_s << " cot: " << result->m_t3dtrk0_cot_s << " chi2: " << result->m_t3dtrk0_zchisq
1412  << endl;
1413  cout << " [1] z0: " << result->m_t3dtrk1_z0_s << " cot: " << result->m_t3dtrk1_cot_s << " chi2: " << result->m_t3dtrk1_zchisq
1414  << endl;
1415  cout << " [2] z0: " << result->m_t3dtrk2_z0_s << " cot: " << result->m_t3dtrk2_cot_s << " chi2: " << result->m_t3dtrk2_zchisq
1416  << endl;
1417  cout << " [3] z0: " << result->m_t3dtrk3_z0_s << " cot: " << result->m_t3dtrk3_cot_s << " chi2: " << result->m_t3dtrk3_zchisq
1418  << endl;
1419  cout << " [debug] MSB" << endl;
1420  cout << " evtTime: " << result->m_t3dtrk0_evtTime_delay << " evtTimeValid: " << result->m_t3dtrk0_evtTimeValid_delay <<
1421  endl;
1422  cout << " charge: " << result->m_t3dtrk0_charge << " rho: " << result->m_t3dtrk0_rho << " phi0: " << result->m_t3dtrk0_phi0
1423  << endl;;
1424  cout << " ts0 id: " << result->m_t3dtrk0ts0_id << " lr: " << result->m_t3dtrk0ts0_lr << " rt: " << result->m_t3dtrk0ts0_rt
1425  << endl;
1426  cout << " ts1 id: " << result->m_t3dtrk0ts1_id << " lr: " << result->m_t3dtrk0ts1_lr << " rt: " << result->m_t3dtrk0ts1_rt
1427  << endl;
1428  cout << " ts2 id: " << result->m_t3dtrk0ts2_id << " lr: " << result->m_t3dtrk0ts2_lr << " rt: " << result->m_t3dtrk0ts2_rt
1429  << endl;
1430  cout << " ts3 id: " << result->m_t3dtrk0ts3_id << " lr: " << result->m_t3dtrk0ts3_lr << " rt: " << result->m_t3dtrk0ts3_rt
1431  << endl;
1432  cout << " [debug] LSB" << endl;
1433  cout << " evtTime: " << result->m_t3dtrk1_evtTime_delay << " evtTimeValid: " << result->m_t3dtrk1_evtTimeValid_delay <<
1434  endl;
1435  cout << " charge: " << result->m_t3dtrk1_charge << " rho: " << result->m_t3dtrk1_rho << " phi0: " << result->m_t3dtrk1_phi0
1436  << endl;;
1437  cout << " ts0 id: " << result->m_t3dtrk1ts0_id << " lr: " << result->m_t3dtrk1ts0_lr << " rt: " << result->m_t3dtrk1ts0_rt
1438  << endl;
1439  cout << " ts1 id: " << result->m_t3dtrk1ts1_id << " lr: " << result->m_t3dtrk1ts1_lr << " rt: " << result->m_t3dtrk1ts1_rt
1440  << endl;
1441  cout << " ts2 id: " << result->m_t3dtrk1ts2_id << " lr: " << result->m_t3dtrk1ts2_lr << " rt: " << result->m_t3dtrk1ts2_rt
1442  << endl;
1443  cout << " ts3 id: " << result->m_t3dtrk1ts3_id << " lr: " << result->m_t3dtrk1ts3_lr << " rt: " << result->m_t3dtrk1ts3_rt
1444  << endl;
1445  }
1446  }
1447 }
1448 
1449 
1450 // t3DFirmwareInfo[tIndex][iClk][2DValid, 2DisOld, TSFValid, EventTimeValid, eventTime, charge, rho, phi0, z0, cot, zchi]
1451 // t3DInfo[eventTime, charge, rho, phi0, z0, cot, zchi]
1452 void TRGCDCT3DConverterModule::filter3DData(std::vector<std::vector<std::vector<double> > >& t3DFirmwareInfo,
1453  std::vector<std::vector<double> >& t3DInfo)
1454 {
1455  for (unsigned iTrack = 0; iTrack < t3DFirmwareInfo.size(); iTrack++) {
1456  for (unsigned iClk = 0; iClk < t3DFirmwareInfo[iTrack].size(); iClk++) {
1457  //cout<<iClk<<" 2d: "<<t3DFirmwareInfo[iTrack][iClk][0]<<" tsf: "<<t3DFirmwareInfo[iTrack][iClk][2]<<" evt: "<<t3DFirmwareInfo[iTrack][iClk][3]<<" isOld: "<<t3DFirmwareInfo[iTrack][iClk][1]<<endl;
1458  // 2DValid
1459  if (t3DFirmwareInfo[iTrack][iClk][0] == 0) continue;
1460  //cout<<iClk<<" 2d: "<<t3DFirmwareInfo[iTrack][iClk][0]<<" tsf: "<<t3DFirmwareInfo[iTrack][iClk][2]<<" evt: "<<t3DFirmwareInfo[iTrack][iClk][3]<<" isOld: "<<t3DFirmwareInfo[iTrack][iClk][1]<<endl;
1461  // TSFValid
1462  if (t3DFirmwareInfo[iTrack][iClk][2] == 0) continue;
1463  // EventTimeValid
1464  if (t3DFirmwareInfo[iTrack][iClk][3] == 0) continue;
1465  // TODO make an algorithm to follow the track.
1466  // Start follow status of track.
1467  if (t3DInfo.size() != 0 && t3DFirmwareInfo[iTrack][iClk][1] == 1) continue;
1468  //if (t3DFirmwareInfo[iTrack][iClk][1] == 1) continue;
1469  vector<double> track3D = {t3DFirmwareInfo[iTrack][iClk][4], t3DFirmwareInfo[iTrack][iClk][5], t3DFirmwareInfo[iTrack][iClk][6], t3DFirmwareInfo[iTrack][iClk][7], t3DFirmwareInfo[iTrack][iClk][8], t3DFirmwareInfo[iTrack][iClk][9], t3DFirmwareInfo[iTrack][iClk][10]};
1470  t3DInfo.push_back(track3D);
1471  }
1472  }
1473 }
1474 
1475 // t3DInfo[eventTime, charge, rho, phi0, z0, cot, zchi]
1476 void TRGCDCT3DConverterModule::add3DDatastore(std::vector<std::vector<double> >& t3DInfo, bool doConvert)
1477 {
1478  for (unsigned iTrack = 0; iTrack < t3DInfo.size(); ++iTrack) {
1479  double charge = 0, phi0_i = 0, omega = 0, chi2D = 0, z0 = 0, cot = 0, zchi2 = 0;
1480  double phi0_c = 0;
1481  if (doConvert) {
1482  charge = t3DInfo[iTrack][1] == 2 ? -1 : 1;
1483  phi0_c = t2DPhiTot3DPhi(t3DInfo[iTrack][3], t3DInfo[iTrack][2]) / (pow(2, 12) - 0.5) * M_PI;
1484  phi0_i = phi0_c + charge * M_PI_2;
1485  omega = charge / t2DRhoTot3DRho(t3DInfo[iTrack][2]) / (pow(2, 11) - 0.5) * 2500;
1486  z0 = toSigned(t3DInfo[iTrack][4], 11) * 0.0382;
1487  cot = toSigned(t3DInfo[iTrack][5], 11) * 0.00195;
1488  zchi2 = t3DInfo[iTrack][6];
1489  } else {
1490  charge = t3DInfo[iTrack][1] == 1 ? 1 : -1;
1491  phi0_c = t3DInfo[iTrack][3];
1492  phi0_i = phi0_c + charge * M_PI_2;
1493  omega = charge / t3DInfo[iTrack][2];
1494  z0 = t3DInfo[iTrack][4];
1495  cot = t3DInfo[iTrack][5];
1496  zchi2 = t3DInfo[iTrack][6];
1497  }
1498  if (phi0_i > M_PI) phi0_i -= 2 * M_PI;
1499  //cout<<"iTrack: "<<iTrack<<" eventTime:"<<t3DInfo[iTrack][0]<<" charge:"<<charge<<" omega: "<<omega<<" rho: "<<charge/omega<<" pt: "<<charge/omega*0.3*1.5*0.01<<" phi0_i: "<<phi0_i<<" "<<phi0_i*180/M_PI<<" phi0_c: "<<phi0_c<<" "<<phi0_c*180/M_PI<<" z0:"<<z0<<" cot:"<<cot<<" theta: "<<M_PI/2-atan(cot)<<" zchi:"<<zchi2<<endl;
1500  if (m_isVerbose) cout << "[3D] iTrack:" << iTrack << " charge: " << charge << " phi0_i:" << phi0_i << " " << phi0_i * 180 / M_PI <<
1501  " omega:" << omega << " pt:" << charge / omega * 0.3 * 1.5 * 0.01 << " z0:" << z0 << " cot:" << cot << " zchi2:" << zchi2 << endl;
1502  m_tracks3D.appendNew(phi0_i, omega, chi2D, z0, cot, zchi2);
1503  }
1504 }
Belle2::TRGCDCT3DCONVERTERSPACE::TRGCDCT3DConverterModule::version
std::string version() const
returns version of TRGCDCT3DConverterModule.
Definition: TRGCDCT3DConverterModule.cc:28
Belle2::TRGCDCT3DUnpackerStore::m_t3d_2dfnf
int m_t3d_2dfnf
m_t3d_2dfnf leaf
Definition: TRGCDCT3DUnpackerStore.h:103
Fitter3DUtility::fitter3DFirm
static void fitter3DFirm(std::map< std::string, double > &mConstD, std::map< std::string, std::vector< double > > &mConstV, int eventTimeValid, int eventTime, std::vector< std::vector< int > > const &rawStTSs, int charge, double radius, double phi_c, Belle2::TRGCDCJSignalData *commonData, std::map< std::string, Belle2::TRGCDCJSignal > &mSignalStorage, std::map< std::string, Belle2::TRGCDCJLUT * > &mLutStorage)
Combines several functions for fitter3D firmware.
Definition: Fitter3DUtility.cc:1879
Belle2::TRGCDCT3DUnpackerStore::m_t3dtrk0ts1_id
int m_t3dtrk0ts1_id
m_t3dtrk0ts1_id leaf
Definition: TRGCDCT3DUnpackerStore.h:47
Belle2::TRGCDCT3DCONVERTERSPACE::TRGCDCT3DConverterModule::m_EventTimeName
std::string m_EventTimeName
name of the event time StoreObjPtr
Definition: TRGCDCT3DConverterModule.h:145
Belle2::TRGCDCT3DCONVERTERSPACE::TRGCDCT3DConverterModule::add2DDatastore
void add2DDatastore(std::vector< std::vector< double > > &t2DInfo, std::vector< std::vector< std::vector< double > > > &t2DTsfInfo)
adds t2DInfo to track data store
Definition: TRGCDCT3DConverterModule.cc:393
Belle2::TRGCDCT3DCONVERTERSPACE::TRGCDCT3DConverterModule::m_fit3DWithTSIM
unsigned m_fit3DWithTSIM
Mode for fitting with TSIM.
Definition: TRGCDCT3DConverterModule.h:143
Belle2::TRGCDCT3DUnpackerStore::m_t3dtrk1_cot_s
int m_t3dtrk1_cot_s
m_t3dtrk1_cot_s leaf
Definition: TRGCDCT3DUnpackerStore.h:113
Belle2::TRGCDCFitter3D::getStereoGeometry
static void getStereoGeometry(std::map< std::string, std::vector< double > > &stGeometry)
Get stereo geometry.
Definition: Fitter3D.cc:1556
Belle2::TRGCDCT3DCONVERTERSPACE::TRGCDCT3DConverterModule::m_add3DToDatastore
bool m_add3DToDatastore
Flag for adding 3D to datastore.
Definition: TRGCDCT3DConverterModule.h:141
Belle2::Module::setDescription
void setDescription(const std::string &description)
Sets the description of the module.
Definition: Module.cc:216
Belle2::TRGCDCT3DCONVERTERSPACE::TRGCDCT3DConverterModule::t2DRhoTot3DRho
int t2DRhoTot3DRho(int value, bool isSigned=1)
converts to 2D rho to 3D rho value
Definition: TRGCDCT3DConverterModule.cc:233
Belle2::TRGCDCT3DCONVERTERSPACE::TRGCDCT3DConverterModule::m_addTSToDatastore
bool m_addTSToDatastore
Flag for adding TS to datastore.
Definition: TRGCDCT3DConverterModule.h:133
Belle2::TRGCDCT3DCONVERTERSPACE::TRGCDCT3DConverterModule::store3DFirmSimData
void store3DFirmSimData(std::vector< std::vector< std::vector< double > > > &t3DFirmwareInfo)
uses firm sim with debug
Definition: TRGCDCT3DConverterModule.cc:1011
Belle2::TRGCDCT3DCONVERTERSPACE::TRGCDCT3DConverterModule::t2DPhiTot3DPhi
int t2DPhiTot3DPhi(int phi, int rho)
converts to 2D phi to 3D phi value
Definition: TRGCDCT3DConverterModule.cc:244
Fitter3DUtility::fitter3D
static void fitter3D(std::map< std::string, std::vector< double > > &stGeometry, std::vector< std::vector< double > > const &stXts, int eventTimeValid, int eventTime, std::vector< std::vector< int > > const &rawStTSs, int charge, double radius, double phi_c, double &z0, double &cot, double &chi2)
Combines several functions for fitter3D.
Definition: Fitter3DUtility.cc:1845
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::CDCHit
Class containing the result of the unpacker in raw data and the result of the digitizer in simulation...
Definition: CDCHit.h:51
Belle2::TRGCDCT3DCONVERTERSPACE::TRGCDCT3DConverterModule::~TRGCDCT3DConverterModule
virtual ~TRGCDCT3DConverterModule()
Destructor.
Definition: TRGCDCT3DConverterModule.cc:75
Belle2::TRGCDCT3DUnpackerStore::m_t3dtrk0_phi0
int m_t3dtrk0_phi0
m_t3dtrk0_phi0 leaf
Definition: TRGCDCT3DUnpackerStore.h:39
Belle2::TRGCDCFitter3D::getConstants
static void getConstants(std::map< std::string, double > &mConstD, std::map< std::string, std::vector< double > > &mConstV, bool isXtSimple=0)
Get constants for firmwareFit.
Definition: Fitter3D.cc:1594
Belle2::TRGCDCT3DUnpackerStore::m_t3dtrk0ts0_lr
int m_t3dtrk0ts0_lr
m_t3dtrk0ts0_lr leaf
Definition: TRGCDCT3DUnpackerStore.h:43
Belle2::TRGCDCT3DCONVERTERSPACE::TRGCDCT3DConverterModule::m_add2DFinderToDatastore
bool m_add2DFinderToDatastore
Flag for adding 2D finder to datastore.
Definition: TRGCDCT3DConverterModule.h:137
Belle2::CDCTriggerTrack
Track created by the CDC trigger.
Definition: CDCTriggerTrack.h:15
Belle2::TRGCDCT3DCONVERTERSPACE::TRGCDCT3DConverterModule::beginRun
virtual void beginRun() override
Called when new run started.
Definition: TRGCDCT3DConverterModule.cc:96
Belle2::TRGCDCT3DUnpackerStore::m_t3dtrk0ts3_id
int m_t3dtrk0ts3_id
m_t3dtrk0ts3_id leaf
Definition: TRGCDCT3DUnpackerStore.h:59
Belle2::TRGCDCT3DUnpackerStore::m_t3dtrk3_cot_s
int m_t3dtrk3_cot_s
m_t3dtrk3_cot_s leaf
Definition: TRGCDCT3DUnpackerStore.h:125
Belle2::TRGCDCT3DUnpackerStore::m_t3dtrk0_cot_s
int m_t3dtrk0_cot_s
m_t3dtrk0_cot_s leaf
Definition: TRGCDCT3DUnpackerStore.h:107
Belle2::TRGCDCT3DCONVERTERSPACE::TRGCDCT3DConverterModule::endRun
virtual void endRun() override
Called when run ended.
Definition: TRGCDCT3DConverterModule.cc:100
Belle2::TRGCDCT3DCONVERTERSPACE::TRGCDCT3DConverterModule::m_commonData
Belle2::TRGCDCJSignalData * m_commonData
TRGCDCJSignalData for VHDL generation (jbkim's class)
Definition: TRGCDCT3DConverterModule.h:166
Belle2::TRGCDCT3DCONVERTERSPACE::TRGCDCT3DConverterModule::m_addEventTimeToDatastore
bool m_addEventTimeToDatastore
Flag for adding event time to datastore.
Definition: TRGCDCT3DConverterModule.h:147
Belle2::TRGCDCT3DUnpackerStore
Example Detector.
Definition: TRGCDCT3DUnpackerStore.h:25
Belle2::TRGCDCT3DCONVERTERSPACE::TRGCDCT3DConverterModule::toTSID
int toTSID(int iSL, int iWire)
converts sl, iWire to continuous TS ID [0,2335]
Definition: TRGCDCT3DConverterModule.cc:211
Belle2::TRGCDCFitter3D::getStereoXt
static void getStereoXt(std::vector< double > const &stPriorityLayer, std::vector< std::vector< double > > &stXts, bool isSimple=0)
Get stereo Xt.
Definition: Fitter3D.cc:1576
Belle2::TRGCDCT3DCONVERTERSPACE::TRGCDCT3DConverterModule::event
virtual void event() override
Called event by event.
Definition: TRGCDCT3DConverterModule.cc:104
Belle2::TRGCDCT3DCONVERTERSPACE::TRGCDCT3DConverterModule::filter2DData
void filter2DData(std::vector< std::vector< std::vector< double > > > &t2DFirmwareInfo, std::vector< std::vector< std::vector< std::vector< double > > > > &t2DTsfFirmwareInfo, std::vector< std::vector< double > > &t2DInfo, std::vector< std::vector< std::vector< double > > > &t2DTsfInfo)
‍** filters t2DFirmwareInfo to t2DInfo*‍/
Definition: TRGCDCT3DConverterModule.cc:306
Belle2::TRGCDCT3DUnpackerStore::m_t3dtrk0_rho
int m_t3dtrk0_rho
m_t3dtrk0_rho leaf
Definition: TRGCDCT3DUnpackerStore.h:37
Belle2::TRGCDCT3DUnpackerStore::m_t3d_validTS
int m_t3d_validTS
m_t3d_validTS leaf
Definition: TRGCDCT3DUnpackerStore.h:101
Belle2::TRGCDCT3DCONVERTERSPACE::TRGCDCT3DConverterModule::m_firmwareResultCollectionName
std::string m_firmwareResultCollectionName
Name of the StoreArray containing the input firmware results.
Definition: TRGCDCT3DConverterModule.h:129
Belle2::TRGCDCT3DCONVERTERSPACE::TRGCDCT3DConverterModule::m_hitCollectionName
std::string m_hitCollectionName
Name of the StoreArray containing the input track segment hits.
Definition: TRGCDCT3DConverterModule.h:131
Belle2::TRGCDCT3DUnpackerStore::m_t3dtrk0_charge
int m_t3dtrk0_charge
m_t3dtrk0_charge leaf
Definition: TRGCDCT3DUnpackerStore.h:35
Belle2::TRGCDCT3DCONVERTERSPACE::TRGCDCT3DConverterModule::terminate
virtual void terminate() override
Called when processing ended.
Definition: TRGCDCT3DConverterModule.cc:79
Belle2::TRGCDCT3DUnpackerStore::m_t3dtrk0ts0_rt
int m_t3dtrk0ts0_rt
m_t3dtrk0ts0_rt leaf
Definition: TRGCDCT3DUnpackerStore.h:45
Belle2::Module
Base class for Modules.
Definition: Module.h:74
Belle2::TRGCDCJSignalData
A class to hold common data for JSignals.
Definition: JSignalData.h:34
Belle2::Module::setPropertyFlags
void setPropertyFlags(unsigned int propertyFlags)
Sets the flags for the module properties.
Definition: Module.cc:210
Belle2::TRGCDCT3DCONVERTERSPACE::TRGCDCT3DConverterModule::toSigned
int toSigned(int value, int nBits)
converts to signed value
Definition: TRGCDCT3DConverterModule.cc:223
Belle2::TRGCDCT3DUnpackerStore::m_t3dtrk0ts3_lr
int m_t3dtrk0ts3_lr
m_t3dtrk0ts3_lr leaf
Definition: TRGCDCT3DUnpackerStore.h:61
Belle2::TRGCDCT3DCONVERTERSPACE::TRGCDCT3DConverterModule::store2DFirmwareData
void store2DFirmwareData(std::vector< std::vector< std::vector< double > > > &t2DFirmwareInfo, std::vector< std::vector< std::vector< std::vector< double > > > > &axTsfFirmwareInfo)
converts firmwareResults of 2D to a vector
Definition: TRGCDCT3DConverterModule.cc:772
Belle2::TRGCDCT3DCONVERTERSPACE::TRGCDCT3DConverterModule::m_tracks3D
StoreArray< CDCTriggerTrack > m_tracks3D
list of 3D output tracks
Definition: TRGCDCT3DConverterModule.h:161
Belle2::TRGCDCT3DCONVERTERSPACE::TRGCDCT3DConverterModule::debug3DFirmware
void debug3DFirmware()
Used for debugging 3D firmware.
Definition: TRGCDCT3DConverterModule.cc:1082
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::TRGCDCT3DUnpackerStore::m_t3dtrk0_z0_s
int m_t3dtrk0_z0_s
m_t3dtrk0_z0_s leaf
Definition: TRGCDCT3DUnpackerStore.h:105
Belle2::TRGCDCT3DUnpackerStore::m_t3dtrk2_zchisq
int m_t3dtrk2_zchisq
m_t3dtrk2_zchisq leaf
Definition: TRGCDCT3DUnpackerStore.h:121
Belle2::TRGCDCT3DCONVERTERSPACE::TRGCDCT3DConverterModule::m_eventTime
StoreObjPtr< BinnedEventT0 > m_eventTime
StoreObjPtr containing the event time.
Definition: TRGCDCT3DConverterModule.h:163
Belle2::TRGCDCT3DUnpackerStore::m_t3dtrk0ts1_rt
int m_t3dtrk0ts1_rt
m_t3dtrk0ts1_rt leaf
Definition: TRGCDCT3DUnpackerStore.h:51
Belle2::TRGCDCT3DCONVERTERSPACE::TRGCDCT3DConverterModule::add3DDatastore
void add3DDatastore(std::vector< std::vector< double > > &t3DInfo, bool doConvert=1)
adds t3DInfo to track data store
Definition: TRGCDCT3DConverterModule.cc:1476
Belle2::TRGCDCT3DCONVERTERSPACE::TRGCDCT3DConverterModule::m_mSignalStorage
std::map< std::string, TRGCDCJSignal > m_mSignalStorage
TRGCDCJSignal for VHDL generation (jbkim's class)
Definition: TRGCDCT3DConverterModule.h:168
Belle2::TRGCDCT3DCONVERTERSPACE::TRGCDCT3DConverterModule::store3DFastSimData
void store3DFastSimData(std::vector< std::vector< std::vector< double > > > &t3DFirmwareInfo)
uses fast sim with debug
Definition: TRGCDCT3DConverterModule.cc:946
Belle2::TRGCDCT3DCONVERTERSPACE::TRGCDCT3DConverterModule::addTSDatastore
void addTSDatastore(std::vector< std::vector< std::vector< double > > > &tsfInfo, int isSt=1)
adds tsfInfo to TS data store
Definition: TRGCDCT3DConverterModule.cc:440
Belle2::TRGCDCT3DUnpackerStore::m_t3dtrk0ts2_rt
int m_t3dtrk0ts2_rt
m_t3dtrk0ts2_rt leaf
Definition: TRGCDCT3DUnpackerStore.h:57
Belle2::TRGCDCT3DUnpackerStore::m_t3dtrk0_evtTimeValid_delay
int m_t3dtrk0_evtTimeValid_delay
m_t3dtrk0_evtTimeValid_delay leaf
Definition: TRGCDCT3DUnpackerStore.h:33
Belle2::TRGCDCT3DUnpackerStore::m_t3dtrk0ts2_id
int m_t3dtrk0ts2_id
m_t3dtrk0ts2_id leaf
Definition: TRGCDCT3DUnpackerStore.h:53
Belle2::TRGCDCT3DCONVERTERSPACE::TRGCDCT3DConverterModule::m_firmwareResults
StoreArray< TRGCDCT3DUnpackerStore > m_firmwareResults
list of firmware results
Definition: TRGCDCT3DConverterModule.h:155
Belle2::TRGCDCT3DUnpackerStore::m_t3dtrk0_zchisq
int m_t3dtrk0_zchisq
m_t3dtrk0_zchisq leaf
Definition: TRGCDCT3DUnpackerStore.h:109
Belle2::TRGCDCT3DCONVERTERSPACE::TRGCDCT3DConverterModule::store3DFirmwareData
void store3DFirmwareData(std::vector< std::vector< std::vector< double > > > &t3DFirmwareInfo)
converts firmwareResults of 3D to a vector
Definition: TRGCDCT3DConverterModule.cc:897
Belle2::TRGCDCT3DUnpackerStore::m_t3dtrk1_z0_s
int m_t3dtrk1_z0_s
m_t3dtrk1_z0_s leaf
Definition: TRGCDCT3DUnpackerStore.h:111
Belle2::TRGCDCT3DCONVERTERSPACE::TRGCDCT3DConverterModule::initialize
virtual void initialize() override
Initilizes TRGCDCT3DConverterModule.
Definition: TRGCDCT3DConverterModule.cc:83
Belle2::TRGCDCT3DUnpackerStore::m_t3dtrk2_z0_s
int m_t3dtrk2_z0_s
m_t3dtrk2_z0_s leaf
Definition: TRGCDCT3DUnpackerStore.h:117
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::TRGCDCT3DUnpackerStore::m_t3dtrk0ts2_lr
int m_t3dtrk0ts2_lr
m_t3dtrk0ts2_lr leaf
Definition: TRGCDCT3DUnpackerStore.h:55
Belle2::TRGCDCT3DCONVERTERSPACE::TRGCDCT3DConverterModule::m_outputCollectionName
std::string m_outputCollectionName
Name of the StoreArray containing the resulting 3D tracks.
Definition: TRGCDCT3DConverterModule.h:139
Belle2::TRGCDCT3DCONVERTERSPACE::TRGCDCT3DConverterModule::m_isVerbose
unsigned m_isVerbose
Switch printing detail information.
Definition: TRGCDCT3DConverterModule.h:149
Belle2::TRGCDCT3DUnpackerStore::m_t3dtrk0ts3_rt
int m_t3dtrk0ts3_rt
m_t3dtrk0ts3_rt leaf
Definition: TRGCDCT3DUnpackerStore.h:63
Belle2::TRGCDCT3DCONVERTERSPACE::TRGCDCT3DConverterModule::m_mLutStorage
std::map< std::string, TRGCDCJLUT * > m_mLutStorage
TRGCDCJLUT for VHDL generation (jbkim's class)
Definition: TRGCDCT3DConverterModule.h:170
Belle2::TRGCDCT3DUnpackerStore::m_t3dtrk0ts1_lr
int m_t3dtrk0ts1_lr
m_t3dtrk0ts1_lr leaf
Definition: TRGCDCT3DUnpackerStore.h:49
Belle2::TRGCDCT3DCONVERTERSPACE::TRGCDCT3DConverterModule::storeTSFirmwareData
void storeTSFirmwareData(std::vector< std::vector< std::vector< std::vector< double > > > > &tsfInfo)
converts firmwareResults of TS to a vector
Definition: TRGCDCT3DConverterModule.cc:457
Belle2::TRGCDCT3DCONVERTERSPACE::TRGCDCT3DConverterModule::m_tracks2D
StoreArray< CDCTriggerTrack > m_tracks2D
list of 2D input tracks
Definition: TRGCDCT3DConverterModule.h:159
Belle2::TRGCDCT3DUnpackerStore::m_t3dtrk3_zchisq
int m_t3dtrk3_zchisq
m_t3dtrk3_zchisq leaf
Definition: TRGCDCT3DUnpackerStore.h:127
Belle2::TRGCDCT3DUnpackerStore::m_t3dtrk3_z0_s
int m_t3dtrk3_z0_s
m_t3dtrk3_z0_s leaf
Definition: TRGCDCT3DUnpackerStore.h:123
Belle2::TRGCDCT3DCONVERTERSPACE::TRGCDCT3DConverterModule::filter3DData
void filter3DData(std::vector< std::vector< std::vector< double > > > &t3DFirmwareInfo, std::vector< std::vector< double > > &t3DInfo)
filters t3DFirmwareInfo to t3DInfo
Definition: TRGCDCT3DConverterModule.cc:1452
Belle2::TRGCDCT3DUnpackerStore::m_t3dtrk0ts0_id
int m_t3dtrk0ts0_id
m_t3dtrk0ts0_id leaf
Definition: TRGCDCT3DUnpackerStore.h:41
Belle2::TRGCDCT3DUnpackerStore::m_t3dtrk0_evtTime_delay
int m_t3dtrk0_evtTime_delay
m_t3dtrk0_evtTime_delay leaf
Definition: TRGCDCT3DUnpackerStore.h:31
Belle2::TRGCDCT3DUnpackerStore::m_t3dtrk2_cot_s
int m_t3dtrk2_cot_s
m_t3dtrk2_cot_s leaf
Definition: TRGCDCT3DUnpackerStore.h:119
Belle2::TRGCDCT3DUnpackerStore::m_t3dtrk1_zchisq
int m_t3dtrk1_zchisq
m_t3dtrk1_zchisq leaf
Definition: TRGCDCT3DUnpackerStore.h:115
Belle2::TRGCDCT3DCONVERTERSPACE::TRGCDCT3DConverterModule::m_inputCollectionName
std::string m_inputCollectionName
Name of the StoreArray containing the input tracks from the 2D fitter.
Definition: TRGCDCT3DConverterModule.h:135
Belle2::TRGCDCT3DCONVERTERSPACE::TRGCDCT3DConverterModule::m_hits
StoreArray< CDCTriggerSegmentHit > m_hits
list of track segment hits
Definition: TRGCDCT3DConverterModule.h:157
Belle2::TRGCDCT3DCONVERTERSPACE::TRGCDCT3DConverterModule::filterTSData
void filterTSData(std::vector< std::vector< std::vector< std::vector< double > > > > &tsfFirmwareInfo, std::vector< std::vector< std::vector< double > > > &tsfInfo)
filters tsfFirmwareInfo to tsfInfo
Definition: TRGCDCT3DConverterModule.cc:254