22#include <trg/cdc/modules/trgcdct3dConverter/TRGCDCT3DConverterModule.h>
24#include "trg/cdc/Fitter3D.h"
25#include "trg/cdc/Fitter3DUtility.h"
26#include "trg/cdc/JSignal.h"
27#include "trg/cdc/JSignalData.h"
28#include "boost/multi_array.hpp"
32using namespace TRGCDCT3DCONVERTERSPACE;
38 return string(
"1.00");
45 string desc =
"TRGCDCT3DConverterModule(" +
version() +
")";
48 "Name of the input StoreArray of CDCTriggerSegmentHits.",
49 string(
"CDCTriggerSegmentHits0"));
51 "If true, adds TS to datastore",
54 "Name of the event time object.",
55 string(
"BinnedEventT00"));
57 "If true, adds event time to datastore",
60 "Name of the StoreArray holding the input tracks from the 2D finder.",
61 string(
"TRGCDC2DFinderTracks0"));
63 "If true, adds 2D Finder results to datastore",
66 "Name of the StoreArray holding the 3D output tracks.",
67 string(
"TRGCDC3DFitterTracks0"));
69 "If true, adds 3D results to datastore",
72 "0: use firmware results. 1: Fits with fast TSIM. 2: Fits with firm TSIM",
75 "Name of the StoreArray holding the firmware results.",
76 string(
"TRGCDCT3DUnpackerStores0"));
78 "If not zero, prints detail information.",
80 B2INFO(
"TRGCDCT3DConverter: Constructor done.");
120 boost::multi_array<double, 4> stTsfFirmwareInfo{boost::extents[4][15][48][5]};
124 boost::multi_array<double, 3> stTsfInfo{boost::extents[4][0][5]};
135 boost::multi_array<double, 3> t2DFirmwareInfo{boost::extents[4][48][5]};
137 boost::multi_array<double, 4> t2DTsfFirmwareInfo{boost::extents[4][48][5][4]};
141 boost::multi_array<double, 2> t2DInfo{boost::extents[0][3]};
143 boost::multi_array<double, 3> t2DTsfInfo{boost::extents[0][5][5]};
145 filter2DData(t2DFirmwareInfo, t2DTsfFirmwareInfo, t2DInfo, t2DTsfInfo);
152 bool validEventTime = 0;
156 if (result->m_t3dtrk0_evtTimeValid_delay) {
158 eventTime = result->m_t3dtrk0_evtTime_delay;
161 if (validEventTime) {
162 m_eventTime->addBinnedEventT0(eventTime, Const::CDC);
165 if (validEventTime) cout <<
"[ET] valid: 1 eventTime:" << eventTime << endl;
166 else cout <<
"[ET] valid: 0" << endl;
172 boost::multi_array<double, 3> t3DFirmwareInfo{boost::extents[4][48][11]};
183 boost::multi_array<double, 2> t3DInfo{boost::extents[0][7]};
229 vector<int> nWires = {160, 160, 192, 224, 256, 288, 320, 352, 384};
231 for (
int i = 0; i < (int)iSL; i++) {
237 id =
id + iWire + nWires[(int)iSL] / 4.0 * 0;
238 if (iWire + nWires[(
int)iSL] / 4.0 * 0 > nWires[(int)iSL]) {
239 id =
id - nWires[(int)iSL];
242 id =
id + iWire + nWires[(int)iSL] / 4.0 * 1;
243 if (iWire + nWires[(
int)iSL] / 4.0 * 1 > nWires[(int)iSL]) {
244 id =
id - nWires[(int)iSL];
247 id =
id + iWire + nWires[(int)iSL] / 4.0 * 2;
248 if (iWire + nWires[(
int)iSL] / 4.0 * 2 > nWires[(int)iSL]) {
249 id =
id - nWires[(int)iSL];
252 id =
id + iWire + nWires[(int)iSL] / 4.0 * 3;
253 if (iWire + nWires[(
int)iSL] / 4.0 * 3 > nWires[(int)iSL]) {
254 id =
id - nWires[(int)iSL];
263 int signMask = 1 << (nBits - 1);
264 if (value & signMask) {
265 int mask = (1 << nBits) - 1;
286 double phiReal = 45 + 90. / 80 * (1 + phi);
287 if (
toSigned(rho, 7) >= 0) phiReal -= 90;
290 while (phiReal > 180) {
293 while (phiReal < -180) {
297 int phiInt = phiReal * (pow(2, 12) - 0.5) / 180;
302 boost::multi_array<double, 3>& tsfInfo)
305 for (
unsigned iSL = 0; iSL < tsfFirmwareInfo.shape()[0]; iSL++) {
306 unsigned iTS_filter = 0;
307 for (
unsigned iTS = 0; iTS < tsfFirmwareInfo.shape()[1]; iTS++) {
308 for (
unsigned iClk = 0; iClk < tsfFirmwareInfo.shape()[2]; iClk++) {
309 double id = tsfFirmwareInfo[iSL][iTS][iClk][0];
310 double rt = tsfFirmwareInfo[iSL][iTS][iClk][1];
311 double lr = tsfFirmwareInfo[iSL][iTS][iClk][2];
312 double pr = tsfFirmwareInfo[iSL][iTS][iClk][3];
313 double ft = tsfFirmwareInfo[iSL][iTS][iClk][4];
316 double ts_ref[5] = {id, rt, lr, pr, ft};
317 boost::multi_array_ref<double, 1> ts((
double*)ts_ref, boost::extents[5]);
318 tsfInfo.resize(boost::extents[4][tsfInfo.shape()[1] + 1][5]);
319 tsfInfo[iSL][iTS_filter++] = ts;
358 boost::multi_array<double, 4>& t2DTsfFirmwareInfo, boost::multi_array<double, 2>& t2DInfo,
359 boost::multi_array<double, 3>& t2DTsfInfo)
362 for (
unsigned iTrack = 0; iTrack < t2DFirmwareInfo.shape()[0]; iTrack++) {
363 for (
unsigned iClk = 0; iClk < t2DFirmwareInfo.shape()[1]; iClk++) {
364 if (t2DFirmwareInfo[iTrack][iClk][0] == 0)
continue;
370 double track_ref[3] = {t2DFirmwareInfo[iTrack][iClk][2], t2DFirmwareInfo[iTrack][iClk][3], t2DFirmwareInfo[iTrack][iClk][4]};
371 boost::multi_array_ref<double, 1> track((
double*)track_ref, boost::extents[3]);
372 t2DInfo.resize(boost::extents[t2DInfo.shape()[0] + 1][3]);
373 t2DInfo[t2DInfo.shape()[0] - 1] = track;
376 boost::multi_array<double, 2> axTSInfo{boost::extents[5][5]};
377 for (
unsigned iAx = 0; iAx < t2DTsfFirmwareInfo.shape()[2]; iAx++) {
378 double id = t2DTsfFirmwareInfo[iTrack][iClk][iAx][0];
379 double rt = t2DTsfFirmwareInfo[iTrack][iClk][iAx][1];
380 double lr = t2DTsfFirmwareInfo[iTrack][iClk][iAx][2];
381 double pr = t2DTsfFirmwareInfo[iTrack][iClk][iAx][3];
383 axTSInfo[iAx][0] = id;
384 axTSInfo[iAx][1] = rt;
385 axTSInfo[iAx][2] = lr;
386 axTSInfo[iAx][3] = pr;
387 axTSInfo[iAx][4] = -9999;
389 t2DTsfInfo.resize(boost::extents[t2DTsfInfo.shape()[0] + 1][5][5]);
390 t2DTsfInfo[t2DTsfInfo.shape()[0] - 1] = axTSInfo;
453 boost::multi_array<double, 3>& t2DTsfInfo)
456 for (
unsigned iTrack = 0; iTrack < t2DInfo.shape()[0]; ++iTrack) {
457 double charge = 0, phi0_i = 0, omega = 0, chi2D = 0;
460 charge = t2DInfo[iTrack][0] == 2 ? -1 : 1;
464 phi0_i = (45 + 90. / 80 * (1 + t2DInfo[iTrack][2])) / 180 * M_PI;
468 phi0_i = phi0_i + (M_PI / 2.0) * 0;
470 phi0_i = phi0_i + (M_PI / 2.0) * 1;
472 phi0_i = phi0_i + (M_PI / 2.0) * 2;
474 phi0_i = phi0_i + (M_PI / 2.0) * 3;
478 while (phi0_i > M_PI) {
481 while (phi0_i < -M_PI) {
488 omega =
toSigned(t2DInfo[iTrack][1], 7) / 33.0 * 3.2;
493 if (
m_isVerbose) cout <<
"[2D] iTrack:" << iTrack <<
" charge:" << charge <<
" phi0_i:" << phi0_i <<
" " << phi0_i * 180 / M_PI <<
494 " omega:" << omega <<
" pt:" << charge / omega * 0.3 * 1.5 * 0.01 << endl;
496 for (
unsigned iAx = 0; iAx < t2DTsfInfo.shape()[1]; ++iAx) {
497 double rawId = t2DTsfInfo[iTrack][iAx][0];
499 if (iAx != 4)
id = rawId;
502 if (
id < 0)
id += 384;
504 double rt = t2DTsfInfo[iTrack][iAx][1];
505 double lr = t2DTsfInfo[iTrack][iAx][2];
506 double pr = t2DTsfInfo[iTrack][iAx][3];
507 double ft = t2DTsfInfo[iTrack][iAx][4];
508 if (pr == 0)
continue;
509 CDCHit prHit(rt, 0, iAx * 2, pr == 3 ? 2 : 3,
id);
510 m_hits.appendNew(prHit,
toTSID(
int(iAx * 2),
id), pr, lr, rt, 0, ft);
512 if (
m_isVerbose) cout <<
"[2D] iTrack: " << iTrack <<
" iAx:" << iAx <<
" id:" <<
id <<
" rt:" << rt <<
" lr:" << lr <<
" pr:" << pr
513 <<
" ft:" << ft << endl;
522 for (
unsigned iSL = 0; iSL < tsfInfo.shape()[0]; iSL++) {
523 for (
unsigned iTS = 0; iTS < tsfInfo.shape()[1]; iTS++) {
524 double id = tsfInfo[iSL][iTS][0];
525 double rt = tsfInfo[iSL][iTS][1];
526 double lr = tsfInfo[iSL][iTS][2];
527 double pr = tsfInfo[iSL][iTS][3];
528 double ft = tsfInfo[iSL][iTS][4];
529 if (
m_isVerbose) cout <<
"[TSF] iSL:" << iSL <<
" iTS:" << iTS <<
" id:" <<
id <<
" rt:" << rt <<
" lr:" << lr <<
" pr:" << pr <<
530 " ft:" << ft << endl;
532 CDCHit prHit(rt, 0, iSL * 2 + isSt, pr == 3 ? 2 : 3,
id);
533 m_hits.appendNew(prHit,
toTSID(
int(iSL * 2 + isSt),
id), pr, lr, rt, 0, ft);
544 tsfInfo[0][0][iClk][0] = result->m_tsf1ts0_id;
545 tsfInfo[0][0][iClk][1] = result->m_tsf1ts0_rt;
546 tsfInfo[0][0][iClk][2] = result->m_tsf1ts0_lr;
547 tsfInfo[0][0][iClk][3] = result->m_tsf1ts0_pr;
548 tsfInfo[0][0][iClk][4] = result->m_tsf1_cc;
549 tsfInfo[0][1][iClk][0] = result->m_tsf1ts1_id;
550 tsfInfo[0][1][iClk][1] = result->m_tsf1ts1_rt;
551 tsfInfo[0][1][iClk][2] = result->m_tsf1ts1_lr;
552 tsfInfo[0][1][iClk][3] = result->m_tsf1ts1_pr;
553 tsfInfo[0][1][iClk][4] = result->m_tsf1_cc;
554 tsfInfo[0][2][iClk][0] = result->m_tsf1ts2_id;
555 tsfInfo[0][2][iClk][1] = result->m_tsf1ts2_rt;
556 tsfInfo[0][2][iClk][2] = result->m_tsf1ts2_lr;
557 tsfInfo[0][2][iClk][3] = result->m_tsf1ts2_pr;
558 tsfInfo[0][2][iClk][4] = result->m_tsf1_cc;
559 tsfInfo[0][3][iClk][0] = result->m_tsf1ts3_id;
560 tsfInfo[0][3][iClk][1] = result->m_tsf1ts3_rt;
561 tsfInfo[0][3][iClk][2] = result->m_tsf1ts3_lr;
562 tsfInfo[0][3][iClk][3] = result->m_tsf1ts3_pr;
563 tsfInfo[0][3][iClk][4] = result->m_tsf1_cc;
564 tsfInfo[0][4][iClk][0] = result->m_tsf1ts4_id;
565 tsfInfo[0][4][iClk][1] = result->m_tsf1ts4_rt;
566 tsfInfo[0][4][iClk][2] = result->m_tsf1ts4_lr;
567 tsfInfo[0][4][iClk][3] = result->m_tsf1ts4_pr;
568 tsfInfo[0][4][iClk][4] = result->m_tsf1_cc;
569 tsfInfo[0][5][iClk][0] = result->m_tsf1ts5_id;
570 tsfInfo[0][5][iClk][1] = result->m_tsf1ts5_rt;
571 tsfInfo[0][5][iClk][2] = result->m_tsf1ts5_lr;
572 tsfInfo[0][5][iClk][3] = result->m_tsf1ts5_pr;
573 tsfInfo[0][5][iClk][4] = result->m_tsf1_cc;
574 tsfInfo[0][6][iClk][0] = result->m_tsf1ts6_id;
575 tsfInfo[0][6][iClk][1] = result->m_tsf1ts6_rt;
576 tsfInfo[0][6][iClk][2] = result->m_tsf1ts6_lr;
577 tsfInfo[0][6][iClk][3] = result->m_tsf1ts6_pr;
578 tsfInfo[0][6][iClk][4] = result->m_tsf1_cc;
579 tsfInfo[0][7][iClk][0] = result->m_tsf1ts7_id;
580 tsfInfo[0][7][iClk][1] = result->m_tsf1ts7_rt;
581 tsfInfo[0][7][iClk][2] = result->m_tsf1ts7_lr;
582 tsfInfo[0][7][iClk][3] = result->m_tsf1ts7_pr;
583 tsfInfo[0][7][iClk][4] = result->m_tsf1_cc;
584 tsfInfo[0][8][iClk][0] = result->m_tsf1ts8_id;
585 tsfInfo[0][8][iClk][1] = result->m_tsf1ts8_rt;
586 tsfInfo[0][8][iClk][2] = result->m_tsf1ts8_lr;
587 tsfInfo[0][8][iClk][3] = result->m_tsf1ts8_pr;
588 tsfInfo[0][8][iClk][4] = result->m_tsf1_cc;
589 tsfInfo[0][9][iClk][0] = result->m_tsf1ts9_id;
590 tsfInfo[0][9][iClk][1] = result->m_tsf1ts9_rt;
591 tsfInfo[0][9][iClk][2] = result->m_tsf1ts9_lr;
592 tsfInfo[0][9][iClk][3] = result->m_tsf1ts9_pr;
593 tsfInfo[0][9][iClk][4] = result->m_tsf1_cc;
594 tsfInfo[0][10][iClk][0] = result->m_tsf1ts10_id;
595 tsfInfo[0][10][iClk][1] = result->m_tsf1ts10_rt;
596 tsfInfo[0][10][iClk][2] = result->m_tsf1ts10_lr;
597 tsfInfo[0][10][iClk][3] = result->m_tsf1ts10_pr;
598 tsfInfo[0][10][iClk][4] = result->m_tsf1_cc;
599 tsfInfo[0][11][iClk][0] = result->m_tsf1ts11_id;
600 tsfInfo[0][11][iClk][1] = result->m_tsf1ts11_rt;
601 tsfInfo[0][11][iClk][2] = result->m_tsf1ts11_lr;
602 tsfInfo[0][11][iClk][3] = result->m_tsf1ts11_pr;
603 tsfInfo[0][11][iClk][4] = result->m_tsf1_cc;
604 tsfInfo[0][12][iClk][0] = result->m_tsf1ts12_id;
605 tsfInfo[0][12][iClk][1] = result->m_tsf1ts12_rt;
606 tsfInfo[0][12][iClk][2] = result->m_tsf1ts12_lr;
607 tsfInfo[0][12][iClk][3] = result->m_tsf1ts12_pr;
608 tsfInfo[0][12][iClk][4] = result->m_tsf1_cc;
609 tsfInfo[0][13][iClk][0] = result->m_tsf1ts13_id;
610 tsfInfo[0][13][iClk][1] = result->m_tsf1ts13_rt;
611 tsfInfo[0][13][iClk][2] = result->m_tsf1ts13_lr;
612 tsfInfo[0][13][iClk][3] = result->m_tsf1ts13_pr;
613 tsfInfo[0][13][iClk][4] = result->m_tsf1_cc;
614 tsfInfo[0][14][iClk][0] = result->m_tsf1ts14_id;
615 tsfInfo[0][14][iClk][1] = result->m_tsf1ts14_rt;
616 tsfInfo[0][14][iClk][2] = result->m_tsf1ts14_lr;
617 tsfInfo[0][14][iClk][3] = result->m_tsf1ts14_pr;
618 tsfInfo[0][14][iClk][4] = result->m_tsf1_cc;
620 tsfInfo[1][0][iClk][0] = result->m_tsf3ts0_id;
621 tsfInfo[1][0][iClk][1] = result->m_tsf3ts0_rt;
622 tsfInfo[1][0][iClk][2] = result->m_tsf3ts0_lr;
623 tsfInfo[1][0][iClk][3] = result->m_tsf3ts0_pr;
624 tsfInfo[1][0][iClk][4] = result->m_tsf3_cc;
625 tsfInfo[1][1][iClk][0] = result->m_tsf3ts1_id;
626 tsfInfo[1][1][iClk][1] = result->m_tsf3ts1_rt;
627 tsfInfo[1][1][iClk][2] = result->m_tsf3ts1_lr;
628 tsfInfo[1][1][iClk][3] = result->m_tsf3ts1_pr;
629 tsfInfo[1][1][iClk][4] = result->m_tsf3_cc;
630 tsfInfo[1][2][iClk][0] = result->m_tsf3ts2_id;
631 tsfInfo[1][2][iClk][1] = result->m_tsf3ts2_rt;
632 tsfInfo[1][2][iClk][2] = result->m_tsf3ts2_lr;
633 tsfInfo[1][2][iClk][3] = result->m_tsf3ts2_pr;
634 tsfInfo[1][2][iClk][4] = result->m_tsf3_cc;
635 tsfInfo[1][3][iClk][0] = result->m_tsf3ts3_id;
636 tsfInfo[1][3][iClk][1] = result->m_tsf3ts3_rt;
637 tsfInfo[1][3][iClk][2] = result->m_tsf3ts3_lr;
638 tsfInfo[1][3][iClk][3] = result->m_tsf3ts3_pr;
639 tsfInfo[1][3][iClk][4] = result->m_tsf3_cc;
640 tsfInfo[1][4][iClk][0] = result->m_tsf3ts4_id;
641 tsfInfo[1][4][iClk][1] = result->m_tsf3ts4_rt;
642 tsfInfo[1][4][iClk][2] = result->m_tsf3ts4_lr;
643 tsfInfo[1][4][iClk][3] = result->m_tsf3ts4_pr;
644 tsfInfo[1][4][iClk][4] = result->m_tsf3_cc;
645 tsfInfo[1][5][iClk][0] = result->m_tsf3ts5_id;
646 tsfInfo[1][5][iClk][1] = result->m_tsf3ts5_rt;
647 tsfInfo[1][5][iClk][2] = result->m_tsf3ts5_lr;
648 tsfInfo[1][5][iClk][3] = result->m_tsf3ts5_pr;
649 tsfInfo[1][5][iClk][4] = result->m_tsf3_cc;
650 tsfInfo[1][6][iClk][0] = result->m_tsf3ts6_id;
651 tsfInfo[1][6][iClk][1] = result->m_tsf3ts6_rt;
652 tsfInfo[1][6][iClk][2] = result->m_tsf3ts6_lr;
653 tsfInfo[1][6][iClk][3] = result->m_tsf3ts6_pr;
654 tsfInfo[1][6][iClk][4] = result->m_tsf3_cc;
655 tsfInfo[1][7][iClk][0] = result->m_tsf3ts7_id;
656 tsfInfo[1][7][iClk][1] = result->m_tsf3ts7_rt;
657 tsfInfo[1][7][iClk][2] = result->m_tsf3ts7_lr;
658 tsfInfo[1][7][iClk][3] = result->m_tsf3ts7_pr;
659 tsfInfo[1][7][iClk][4] = result->m_tsf3_cc;
660 tsfInfo[1][8][iClk][0] = result->m_tsf3ts8_id;
661 tsfInfo[1][8][iClk][1] = result->m_tsf3ts8_rt;
662 tsfInfo[1][8][iClk][2] = result->m_tsf3ts8_lr;
663 tsfInfo[1][8][iClk][3] = result->m_tsf3ts8_pr;
664 tsfInfo[1][8][iClk][4] = result->m_tsf3_cc;
665 tsfInfo[1][9][iClk][0] = result->m_tsf3ts9_id;
666 tsfInfo[1][9][iClk][1] = result->m_tsf3ts9_rt;
667 tsfInfo[1][9][iClk][2] = result->m_tsf3ts9_lr;
668 tsfInfo[1][9][iClk][3] = result->m_tsf3ts9_pr;
669 tsfInfo[1][9][iClk][4] = result->m_tsf3_cc;
670 tsfInfo[1][10][iClk][0] = result->m_tsf3ts10_id;
671 tsfInfo[1][10][iClk][1] = result->m_tsf3ts10_rt;
672 tsfInfo[1][10][iClk][2] = result->m_tsf3ts10_lr;
673 tsfInfo[1][10][iClk][3] = result->m_tsf3ts10_pr;
674 tsfInfo[1][10][iClk][4] = result->m_tsf3_cc;
675 tsfInfo[1][11][iClk][0] = result->m_tsf3ts11_id;
676 tsfInfo[1][11][iClk][1] = result->m_tsf3ts11_rt;
677 tsfInfo[1][11][iClk][2] = result->m_tsf3ts11_lr;
678 tsfInfo[1][11][iClk][3] = result->m_tsf3ts11_pr;
679 tsfInfo[1][11][iClk][4] = result->m_tsf3_cc;
680 tsfInfo[1][12][iClk][0] = result->m_tsf3ts12_id;
681 tsfInfo[1][12][iClk][1] = result->m_tsf3ts12_rt;
682 tsfInfo[1][12][iClk][2] = result->m_tsf3ts12_lr;
683 tsfInfo[1][12][iClk][3] = result->m_tsf3ts12_pr;
684 tsfInfo[1][12][iClk][4] = result->m_tsf3_cc;
685 tsfInfo[1][13][iClk][0] = result->m_tsf3ts13_id;
686 tsfInfo[1][13][iClk][1] = result->m_tsf3ts13_rt;
687 tsfInfo[1][13][iClk][2] = result->m_tsf3ts13_lr;
688 tsfInfo[1][13][iClk][3] = result->m_tsf3ts13_pr;
689 tsfInfo[1][13][iClk][4] = result->m_tsf3_cc;
690 tsfInfo[1][14][iClk][0] = result->m_tsf3ts14_id;
691 tsfInfo[1][14][iClk][1] = result->m_tsf3ts14_rt;
692 tsfInfo[1][14][iClk][2] = result->m_tsf3ts14_lr;
693 tsfInfo[1][14][iClk][3] = result->m_tsf3ts14_pr;
694 tsfInfo[1][14][iClk][4] = result->m_tsf3_cc;
696 tsfInfo[2][0][iClk][0] = result->m_tsf5ts0_id;
697 tsfInfo[2][0][iClk][1] = result->m_tsf5ts0_rt;
698 tsfInfo[2][0][iClk][2] = result->m_tsf5ts0_lr;
699 tsfInfo[2][0][iClk][3] = result->m_tsf5ts0_pr;
700 tsfInfo[2][0][iClk][4] = result->m_tsf5_cc;
701 tsfInfo[2][1][iClk][0] = result->m_tsf5ts1_id;
702 tsfInfo[2][1][iClk][1] = result->m_tsf5ts1_rt;
703 tsfInfo[2][1][iClk][2] = result->m_tsf5ts1_lr;
704 tsfInfo[2][1][iClk][3] = result->m_tsf5ts1_pr;
705 tsfInfo[2][1][iClk][4] = result->m_tsf5_cc;
706 tsfInfo[2][2][iClk][0] = result->m_tsf5ts2_id;
707 tsfInfo[2][2][iClk][1] = result->m_tsf5ts2_rt;
708 tsfInfo[2][2][iClk][2] = result->m_tsf5ts2_lr;
709 tsfInfo[2][2][iClk][3] = result->m_tsf5ts2_pr;
710 tsfInfo[2][2][iClk][4] = result->m_tsf5_cc;
711 tsfInfo[2][3][iClk][0] = result->m_tsf5ts3_id;
712 tsfInfo[2][3][iClk][1] = result->m_tsf5ts3_rt;
713 tsfInfo[2][3][iClk][2] = result->m_tsf5ts3_lr;
714 tsfInfo[2][3][iClk][3] = result->m_tsf5ts3_pr;
715 tsfInfo[2][3][iClk][4] = result->m_tsf5_cc;
716 tsfInfo[2][4][iClk][0] = result->m_tsf5ts4_id;
717 tsfInfo[2][4][iClk][1] = result->m_tsf5ts4_rt;
718 tsfInfo[2][4][iClk][2] = result->m_tsf5ts4_lr;
719 tsfInfo[2][4][iClk][3] = result->m_tsf5ts4_pr;
720 tsfInfo[2][4][iClk][4] = result->m_tsf5_cc;
721 tsfInfo[2][5][iClk][0] = result->m_tsf5ts5_id;
722 tsfInfo[2][5][iClk][1] = result->m_tsf5ts5_rt;
723 tsfInfo[2][5][iClk][2] = result->m_tsf5ts5_lr;
724 tsfInfo[2][5][iClk][3] = result->m_tsf5ts5_pr;
725 tsfInfo[2][5][iClk][4] = result->m_tsf5_cc;
726 tsfInfo[2][6][iClk][0] = result->m_tsf5ts6_id;
727 tsfInfo[2][6][iClk][1] = result->m_tsf5ts6_rt;
728 tsfInfo[2][6][iClk][2] = result->m_tsf5ts6_lr;
729 tsfInfo[2][6][iClk][3] = result->m_tsf5ts6_pr;
730 tsfInfo[2][6][iClk][4] = result->m_tsf5_cc;
731 tsfInfo[2][7][iClk][0] = result->m_tsf5ts7_id;
732 tsfInfo[2][7][iClk][1] = result->m_tsf5ts7_rt;
733 tsfInfo[2][7][iClk][2] = result->m_tsf5ts7_lr;
734 tsfInfo[2][7][iClk][3] = result->m_tsf5ts7_pr;
735 tsfInfo[2][7][iClk][4] = result->m_tsf5_cc;
736 tsfInfo[2][8][iClk][0] = result->m_tsf5ts8_id;
737 tsfInfo[2][8][iClk][1] = result->m_tsf5ts8_rt;
738 tsfInfo[2][8][iClk][2] = result->m_tsf5ts8_lr;
739 tsfInfo[2][8][iClk][3] = result->m_tsf5ts8_pr;
740 tsfInfo[2][8][iClk][4] = result->m_tsf5_cc;
741 tsfInfo[2][9][iClk][0] = result->m_tsf5ts9_id;
742 tsfInfo[2][9][iClk][1] = result->m_tsf5ts9_rt;
743 tsfInfo[2][9][iClk][2] = result->m_tsf5ts9_lr;
744 tsfInfo[2][9][iClk][3] = result->m_tsf5ts9_pr;
745 tsfInfo[2][9][iClk][4] = result->m_tsf5_cc;
746 tsfInfo[2][10][iClk][0] = result->m_tsf5ts10_id;
747 tsfInfo[2][10][iClk][1] = result->m_tsf5ts10_rt;
748 tsfInfo[2][10][iClk][2] = result->m_tsf5ts10_lr;
749 tsfInfo[2][10][iClk][3] = result->m_tsf5ts10_pr;
750 tsfInfo[2][10][iClk][4] = result->m_tsf5_cc;
751 tsfInfo[2][11][iClk][0] = result->m_tsf5ts11_id;
752 tsfInfo[2][11][iClk][1] = result->m_tsf5ts11_rt;
753 tsfInfo[2][11][iClk][2] = result->m_tsf5ts11_lr;
754 tsfInfo[2][11][iClk][3] = result->m_tsf5ts11_pr;
755 tsfInfo[2][11][iClk][4] = result->m_tsf5_cc;
756 tsfInfo[2][12][iClk][0] = result->m_tsf5ts12_id;
757 tsfInfo[2][12][iClk][1] = result->m_tsf5ts12_rt;
758 tsfInfo[2][12][iClk][2] = result->m_tsf5ts12_lr;
759 tsfInfo[2][12][iClk][3] = result->m_tsf5ts12_pr;
760 tsfInfo[2][12][iClk][4] = result->m_tsf5_cc;
761 tsfInfo[2][13][iClk][0] = result->m_tsf5ts13_id;
762 tsfInfo[2][13][iClk][1] = result->m_tsf5ts13_rt;
763 tsfInfo[2][13][iClk][2] = result->m_tsf5ts13_lr;
764 tsfInfo[2][13][iClk][3] = result->m_tsf5ts13_pr;
765 tsfInfo[2][13][iClk][4] = result->m_tsf5_cc;
766 tsfInfo[2][14][iClk][0] = result->m_tsf5ts14_id;
767 tsfInfo[2][14][iClk][1] = result->m_tsf5ts14_rt;
768 tsfInfo[2][14][iClk][2] = result->m_tsf5ts14_lr;
769 tsfInfo[2][14][iClk][3] = result->m_tsf5ts14_pr;
770 tsfInfo[2][14][iClk][4] = result->m_tsf5_cc;
772 tsfInfo[3][0][iClk][0] = result->m_tsf7ts0_id;
773 tsfInfo[3][0][iClk][1] = result->m_tsf7ts0_rt;
774 tsfInfo[3][0][iClk][2] = result->m_tsf7ts0_lr;
775 tsfInfo[3][0][iClk][3] = result->m_tsf7ts0_pr;
776 tsfInfo[3][0][iClk][4] = result->m_tsf7_cc;
777 tsfInfo[3][1][iClk][0] = result->m_tsf7ts1_id;
778 tsfInfo[3][1][iClk][1] = result->m_tsf7ts1_rt;
779 tsfInfo[3][1][iClk][2] = result->m_tsf7ts1_lr;
780 tsfInfo[3][1][iClk][3] = result->m_tsf7ts1_pr;
781 tsfInfo[3][1][iClk][4] = result->m_tsf7_cc;
782 tsfInfo[3][2][iClk][0] = result->m_tsf7ts2_id;
783 tsfInfo[3][2][iClk][1] = result->m_tsf7ts2_rt;
784 tsfInfo[3][2][iClk][2] = result->m_tsf7ts2_lr;
785 tsfInfo[3][2][iClk][3] = result->m_tsf7ts2_pr;
786 tsfInfo[3][2][iClk][4] = result->m_tsf7_cc;
787 tsfInfo[3][3][iClk][0] = result->m_tsf7ts3_id;
788 tsfInfo[3][3][iClk][1] = result->m_tsf7ts3_rt;
789 tsfInfo[3][3][iClk][2] = result->m_tsf7ts3_lr;
790 tsfInfo[3][3][iClk][3] = result->m_tsf7ts3_pr;
791 tsfInfo[3][3][iClk][4] = result->m_tsf7_cc;
792 tsfInfo[3][4][iClk][0] = result->m_tsf7ts4_id;
793 tsfInfo[3][4][iClk][1] = result->m_tsf7ts4_rt;
794 tsfInfo[3][4][iClk][2] = result->m_tsf7ts4_lr;
795 tsfInfo[3][4][iClk][3] = result->m_tsf7ts4_pr;
796 tsfInfo[3][4][iClk][4] = result->m_tsf7_cc;
797 tsfInfo[3][5][iClk][0] = result->m_tsf7ts5_id;
798 tsfInfo[3][5][iClk][1] = result->m_tsf7ts5_rt;
799 tsfInfo[3][5][iClk][2] = result->m_tsf7ts5_lr;
800 tsfInfo[3][5][iClk][3] = result->m_tsf7ts5_pr;
801 tsfInfo[3][5][iClk][4] = result->m_tsf7_cc;
802 tsfInfo[3][6][iClk][0] = result->m_tsf7ts6_id;
803 tsfInfo[3][6][iClk][1] = result->m_tsf7ts6_rt;
804 tsfInfo[3][6][iClk][2] = result->m_tsf7ts6_lr;
805 tsfInfo[3][6][iClk][3] = result->m_tsf7ts6_pr;
806 tsfInfo[3][6][iClk][4] = result->m_tsf7_cc;
807 tsfInfo[3][7][iClk][0] = result->m_tsf7ts7_id;
808 tsfInfo[3][7][iClk][1] = result->m_tsf7ts7_rt;
809 tsfInfo[3][7][iClk][2] = result->m_tsf7ts7_lr;
810 tsfInfo[3][7][iClk][3] = result->m_tsf7ts7_pr;
811 tsfInfo[3][7][iClk][4] = result->m_tsf7_cc;
812 tsfInfo[3][8][iClk][0] = result->m_tsf7ts8_id;
813 tsfInfo[3][8][iClk][1] = result->m_tsf7ts8_rt;
814 tsfInfo[3][8][iClk][2] = result->m_tsf7ts8_lr;
815 tsfInfo[3][8][iClk][3] = result->m_tsf7ts8_pr;
816 tsfInfo[3][8][iClk][4] = result->m_tsf7_cc;
817 tsfInfo[3][9][iClk][0] = result->m_tsf7ts9_id;
818 tsfInfo[3][9][iClk][1] = result->m_tsf7ts9_rt;
819 tsfInfo[3][9][iClk][2] = result->m_tsf7ts9_lr;
820 tsfInfo[3][9][iClk][3] = result->m_tsf7ts9_pr;
821 tsfInfo[3][9][iClk][4] = result->m_tsf7_cc;
822 tsfInfo[3][10][iClk][0] = result->m_tsf7ts10_id;
823 tsfInfo[3][10][iClk][1] = result->m_tsf7ts10_rt;
824 tsfInfo[3][10][iClk][2] = result->m_tsf7ts10_lr;
825 tsfInfo[3][10][iClk][3] = result->m_tsf7ts10_pr;
826 tsfInfo[3][10][iClk][4] = result->m_tsf7_cc;
827 tsfInfo[3][11][iClk][0] = result->m_tsf7ts11_id;
828 tsfInfo[3][11][iClk][1] = result->m_tsf7ts11_rt;
829 tsfInfo[3][11][iClk][2] = result->m_tsf7ts11_lr;
830 tsfInfo[3][11][iClk][3] = result->m_tsf7ts11_pr;
831 tsfInfo[3][11][iClk][4] = result->m_tsf7_cc;
832 tsfInfo[3][12][iClk][0] = result->m_tsf7ts12_id;
833 tsfInfo[3][12][iClk][1] = result->m_tsf7ts12_rt;
834 tsfInfo[3][12][iClk][2] = result->m_tsf7ts12_lr;
835 tsfInfo[3][12][iClk][3] = result->m_tsf7ts12_pr;
836 tsfInfo[3][12][iClk][4] = result->m_tsf7_cc;
837 tsfInfo[3][13][iClk][0] = result->m_tsf7ts13_id;
838 tsfInfo[3][13][iClk][1] = result->m_tsf7ts13_rt;
839 tsfInfo[3][13][iClk][2] = result->m_tsf7ts13_lr;
840 tsfInfo[3][13][iClk][3] = result->m_tsf7ts13_pr;
841 tsfInfo[3][13][iClk][4] = result->m_tsf7_cc;
842 tsfInfo[3][14][iClk][0] = result->m_tsf7ts14_id;
843 tsfInfo[3][14][iClk][1] = result->m_tsf7ts14_rt;
844 tsfInfo[3][14][iClk][2] = result->m_tsf7ts14_lr;
845 tsfInfo[3][14][iClk][3] = result->m_tsf7ts14_pr;
846 tsfInfo[3][14][iClk][4] = result->m_tsf7_cc;
854 boost::multi_array<double, 4>& t2DTsfFirmwareInfo)
859 bitset<6> t2d_fnf(
int(result->m_t2d_fnf));
860 bitset<6> t2d_oldfnf(
int(result->m_t3d_2doldtrk));
864 t2DFirmwareInfo[0][iClk][0] = t2d_fnf[5];
865 t2DFirmwareInfo[0][iClk][1] = t2d_oldfnf[5];;
866 t2DFirmwareInfo[0][iClk][2] = result->m_t2d0_charge;
867 t2DFirmwareInfo[0][iClk][3] = result->m_t2d0_rho_s;
868 t2DFirmwareInfo[0][iClk][4] = result->m_t2d0_phi;
870 t2DFirmwareInfo[1][iClk][0] = t2d_fnf[4];
871 t2DFirmwareInfo[1][iClk][1] = t2d_oldfnf[4];;
872 t2DFirmwareInfo[1][iClk][2] = result->m_t2d1_charge;
873 t2DFirmwareInfo[1][iClk][3] = result->m_t2d1_rho_s;
874 t2DFirmwareInfo[1][iClk][4] = result->m_t2d1_phi;
876 t2DFirmwareInfo[2][iClk][0] = t2d_fnf[3];
877 t2DFirmwareInfo[2][iClk][1] = t2d_oldfnf[3];;
878 t2DFirmwareInfo[2][iClk][2] = result->m_t2d2_charge;
879 t2DFirmwareInfo[2][iClk][3] = result->m_t2d2_rho_s;
880 t2DFirmwareInfo[2][iClk][4] = result->m_t2d2_phi;
882 t2DFirmwareInfo[3][iClk][0] = t2d_fnf[2];
883 t2DFirmwareInfo[3][iClk][1] = t2d_oldfnf[2];;
884 t2DFirmwareInfo[3][iClk][2] = result->m_t2d3_charge;
885 t2DFirmwareInfo[3][iClk][3] = result->m_t2d3_rho_s;
886 t2DFirmwareInfo[3][iClk][4] = result->m_t2d3_phi;
888 t2DTsfFirmwareInfo[0][iClk][0][0] = result->m_t2d0ts0_id;
889 t2DTsfFirmwareInfo[0][iClk][0][1] = result->m_t2d0ts0_rt;
890 t2DTsfFirmwareInfo[0][iClk][0][2] = result->m_t2d0ts0_lr;
891 t2DTsfFirmwareInfo[0][iClk][0][3] = result->m_t2d0ts0_pr;
892 t2DTsfFirmwareInfo[0][iClk][1][0] = result->m_t2d0ts2_id;
893 t2DTsfFirmwareInfo[0][iClk][1][1] = result->m_t2d0ts2_rt;
894 t2DTsfFirmwareInfo[0][iClk][1][2] = result->m_t2d0ts2_lr;
895 t2DTsfFirmwareInfo[0][iClk][1][3] = result->m_t2d0ts2_pr;
896 t2DTsfFirmwareInfo[0][iClk][2][0] = result->m_t2d0ts4_id;
897 t2DTsfFirmwareInfo[0][iClk][2][1] = result->m_t2d0ts4_rt;
898 t2DTsfFirmwareInfo[0][iClk][2][2] = result->m_t2d0ts4_lr;
899 t2DTsfFirmwareInfo[0][iClk][2][3] = result->m_t2d0ts4_pr;
900 t2DTsfFirmwareInfo[0][iClk][3][0] = result->m_t2d0ts6_id;
901 t2DTsfFirmwareInfo[0][iClk][3][1] = result->m_t2d0ts6_rt;
902 t2DTsfFirmwareInfo[0][iClk][3][2] = result->m_t2d0ts6_lr;
903 t2DTsfFirmwareInfo[0][iClk][3][3] = result->m_t2d0ts6_pr;
904 t2DTsfFirmwareInfo[0][iClk][4][0] = result->m_t2d0ts8_id;
905 t2DTsfFirmwareInfo[0][iClk][4][1] = result->m_t2d0ts8_rt;
906 t2DTsfFirmwareInfo[0][iClk][4][2] = result->m_t2d0ts8_lr;
907 t2DTsfFirmwareInfo[0][iClk][4][3] = result->m_t2d0ts8_pr;
909 t2DTsfFirmwareInfo[1][iClk][0][0] = result->m_t2d1ts0_id;
910 t2DTsfFirmwareInfo[1][iClk][0][1] = result->m_t2d1ts0_rt;
911 t2DTsfFirmwareInfo[1][iClk][0][2] = result->m_t2d1ts0_lr;
912 t2DTsfFirmwareInfo[1][iClk][0][3] = result->m_t2d1ts0_pr;
913 t2DTsfFirmwareInfo[1][iClk][1][0] = result->m_t2d1ts2_id;
914 t2DTsfFirmwareInfo[1][iClk][1][1] = result->m_t2d1ts2_rt;
915 t2DTsfFirmwareInfo[1][iClk][1][2] = result->m_t2d1ts2_lr;
916 t2DTsfFirmwareInfo[1][iClk][1][3] = result->m_t2d1ts2_pr;
917 t2DTsfFirmwareInfo[1][iClk][2][0] = result->m_t2d1ts4_id;
918 t2DTsfFirmwareInfo[1][iClk][2][1] = result->m_t2d1ts4_rt;
919 t2DTsfFirmwareInfo[1][iClk][2][2] = result->m_t2d1ts4_lr;
920 t2DTsfFirmwareInfo[1][iClk][2][3] = result->m_t2d1ts4_pr;
921 t2DTsfFirmwareInfo[1][iClk][3][0] = result->m_t2d1ts6_id;
922 t2DTsfFirmwareInfo[1][iClk][3][1] = result->m_t2d1ts6_rt;
923 t2DTsfFirmwareInfo[1][iClk][3][2] = result->m_t2d1ts6_lr;
924 t2DTsfFirmwareInfo[1][iClk][3][3] = result->m_t2d1ts6_pr;
925 t2DTsfFirmwareInfo[1][iClk][4][0] = result->m_t2d1ts8_id;
926 t2DTsfFirmwareInfo[1][iClk][4][1] = result->m_t2d1ts8_rt;
927 t2DTsfFirmwareInfo[1][iClk][4][2] = result->m_t2d1ts8_lr;
928 t2DTsfFirmwareInfo[1][iClk][4][3] = result->m_t2d1ts8_pr;
930 t2DTsfFirmwareInfo[2][iClk][0][0] = result->m_t2d2ts0_id;
931 t2DTsfFirmwareInfo[2][iClk][0][1] = result->m_t2d2ts0_rt;
932 t2DTsfFirmwareInfo[2][iClk][0][2] = result->m_t2d2ts0_lr;
933 t2DTsfFirmwareInfo[2][iClk][0][3] = result->m_t2d2ts0_pr;
934 t2DTsfFirmwareInfo[2][iClk][1][0] = result->m_t2d2ts2_id;
935 t2DTsfFirmwareInfo[2][iClk][1][1] = result->m_t2d2ts2_rt;
936 t2DTsfFirmwareInfo[2][iClk][1][2] = result->m_t2d2ts2_lr;
937 t2DTsfFirmwareInfo[2][iClk][1][3] = result->m_t2d2ts2_pr;
938 t2DTsfFirmwareInfo[2][iClk][2][0] = result->m_t2d2ts4_id;
939 t2DTsfFirmwareInfo[2][iClk][2][1] = result->m_t2d2ts4_rt;
940 t2DTsfFirmwareInfo[2][iClk][2][2] = result->m_t2d2ts4_lr;
941 t2DTsfFirmwareInfo[2][iClk][2][3] = result->m_t2d2ts4_pr;
942 t2DTsfFirmwareInfo[2][iClk][3][0] = result->m_t2d2ts6_id;
943 t2DTsfFirmwareInfo[2][iClk][3][1] = result->m_t2d2ts6_rt;
944 t2DTsfFirmwareInfo[2][iClk][3][2] = result->m_t2d2ts6_lr;
945 t2DTsfFirmwareInfo[2][iClk][3][3] = result->m_t2d2ts6_pr;
946 t2DTsfFirmwareInfo[2][iClk][4][0] = result->m_t2d2ts8_id;
947 t2DTsfFirmwareInfo[2][iClk][4][1] = result->m_t2d2ts8_rt;
948 t2DTsfFirmwareInfo[2][iClk][4][2] = result->m_t2d2ts8_lr;
949 t2DTsfFirmwareInfo[2][iClk][4][3] = result->m_t2d2ts8_pr;
951 t2DTsfFirmwareInfo[3][iClk][0][0] = result->m_t2d3ts0_id;
952 t2DTsfFirmwareInfo[3][iClk][0][1] = result->m_t2d3ts0_rt;
953 t2DTsfFirmwareInfo[3][iClk][0][2] = result->m_t2d3ts0_lr;
954 t2DTsfFirmwareInfo[3][iClk][0][3] = result->m_t2d3ts0_pr;
955 t2DTsfFirmwareInfo[3][iClk][1][0] = result->m_t2d3ts2_id;
956 t2DTsfFirmwareInfo[3][iClk][1][1] = result->m_t2d3ts2_rt;
957 t2DTsfFirmwareInfo[3][iClk][1][2] = result->m_t2d3ts2_lr;
958 t2DTsfFirmwareInfo[3][iClk][1][3] = result->m_t2d3ts2_pr;
959 t2DTsfFirmwareInfo[3][iClk][2][0] = result->m_t2d3ts4_id;
960 t2DTsfFirmwareInfo[3][iClk][2][1] = result->m_t2d3ts4_rt;
961 t2DTsfFirmwareInfo[3][iClk][2][2] = result->m_t2d3ts4_lr;
962 t2DTsfFirmwareInfo[3][iClk][2][3] = result->m_t2d3ts4_pr;
963 t2DTsfFirmwareInfo[3][iClk][3][0] = result->m_t2d3ts6_id;
964 t2DTsfFirmwareInfo[3][iClk][3][1] = result->m_t2d3ts6_rt;
965 t2DTsfFirmwareInfo[3][iClk][3][2] = result->m_t2d3ts6_lr;
966 t2DTsfFirmwareInfo[3][iClk][3][3] = result->m_t2d3ts6_pr;
967 t2DTsfFirmwareInfo[3][iClk][4][0] = result->m_t2d3ts8_id;
968 t2DTsfFirmwareInfo[3][iClk][4][1] = result->m_t2d3ts8_rt;
969 t2DTsfFirmwareInfo[3][iClk][4][2] = result->m_t2d3ts8_lr;
970 t2DTsfFirmwareInfo[3][iClk][4][3] = result->m_t2d3ts8_pr;
985 bitset<6> t3d_oldfnf(
int(result->m_t3d_2doldtrk));
991 t3DFirmwareInfo[0][iClk][0] = t3d_fnf[5];
992 t3DFirmwareInfo[0][iClk][1] = t3d_oldfnf[5];
993 t3DFirmwareInfo[0][iClk][2] = tsf_fnf[0];
996 t3DFirmwareInfo[0][iClk][5] = result->m_t2d0_charge;
997 t3DFirmwareInfo[0][iClk][6] = result->m_t2d0_rho_s;
998 t3DFirmwareInfo[0][iClk][7] = result->m_t2d0_phi;
1003 t3DFirmwareInfo[1][iClk][0] = t3d_fnf[4];
1004 t3DFirmwareInfo[1][iClk][1] = t3d_oldfnf[4];
1005 t3DFirmwareInfo[1][iClk][2] = tsf_fnf[1];
1008 t3DFirmwareInfo[1][iClk][5] = result->m_t2d1_charge;
1009 t3DFirmwareInfo[1][iClk][6] = result->m_t2d1_rho_s;
1010 t3DFirmwareInfo[1][iClk][7] = result->m_t2d1_phi;
1015 t3DFirmwareInfo[2][iClk][0] = t3d_fnf[3];
1016 t3DFirmwareInfo[2][iClk][1] = t3d_oldfnf[3];
1017 t3DFirmwareInfo[2][iClk][2] = tsf_fnf[2];
1020 t3DFirmwareInfo[2][iClk][5] = result->m_t2d2_charge;
1021 t3DFirmwareInfo[2][iClk][6] = result->m_t2d2_rho_s;
1022 t3DFirmwareInfo[2][iClk][7] = result->m_t2d2_phi;
1027 t3DFirmwareInfo[3][iClk][0] = t3d_fnf[2];
1028 t3DFirmwareInfo[3][iClk][1] = t3d_oldfnf[2];
1029 t3DFirmwareInfo[3][iClk][2] = tsf_fnf[3];
1032 t3DFirmwareInfo[3][iClk][5] = result->m_t2d3_charge;
1033 t3DFirmwareInfo[3][iClk][6] = result->m_t2d3_rho_s;
1034 t3DFirmwareInfo[3][iClk][7] = result->m_t2d3_phi;
1053 if (bitset<6> (result->m_t2d_fnf)[5] == 0)
continue;
1058 double radius = resultDebug->
m_t3dtrk0_rho * 2500 / (pow(2, 11) - 0.5);
1063 vector<vector<int> > rawStTSs(4, vector<int> (3));
1078 map<string, vector<double> > stGeometry;
1079 vector<vector<double> > stXts;
1083 double z0 = 0, cot = 0, chi2 = 0;
1084 Fitter3DUtility::fitter3D(stGeometry, stXts, eventTimeValid, eventTime, rawStTSs, charge, radius, phi_c, z0, cot, chi2);
1088 bitset<6> t2d_oldfnf(
int(result->m_t3d_2doldtrk));
1092 t3DFirmwareInfo[0][iClk][0] = t2d_fnf[5];
1093 t3DFirmwareInfo[0][iClk][1] = t2d_oldfnf[5];
1094 t3DFirmwareInfo[0][iClk][2] = tsf_fnf[3];
1098 t3DFirmwareInfo[0][iClk][5] = charge;
1099 t3DFirmwareInfo[0][iClk][6] = radius;
1100 t3DFirmwareInfo[0][iClk][7] = phi_c;
1101 t3DFirmwareInfo[0][iClk][8] = z0;
1102 t3DFirmwareInfo[0][iClk][9] = cot;
1103 t3DFirmwareInfo[0][iClk][10] = chi2;
1116 if (bitset<6> (result->m_t2d_fnf)[5] == 0)
continue;
1121 double radius = resultDebug->
m_t3dtrk0_rho * 2500 / (pow(2, 11) - 0.5);
1126 vector<vector<int> > rawStTSs(4, vector<int> (3));
1141 map<string, vector<double> > stGeometry;
1142 vector<vector<double> > stXts;
1147 map<string, vector<double> > mConstV;
1148 map<string, double> mConstD;
1158 bitset<6> t2d_oldfnf(
int(result->m_t3d_2doldtrk));
1162 t3DFirmwareInfo[0][iClk][0] = t2d_fnf[5];
1163 t3DFirmwareInfo[0][iClk][1] = t2d_oldfnf[5];
1164 t3DFirmwareInfo[0][iClk][2] = tsf_fnf[3];
1168 t3DFirmwareInfo[0][iClk][5] = charge;
1169 t3DFirmwareInfo[0][iClk][6] = radius;
1170 t3DFirmwareInfo[0][iClk][7] = phi_c;
1171 t3DFirmwareInfo[0][iClk][8] = z0;
1172 t3DFirmwareInfo[0][iClk][9] = cot;
1173 t3DFirmwareInfo[0][iClk][10] = chi2;
1306 if (result->m_t2d_fnf && iClk < 48 - 17 - 1 && bitset<6> (result->m_t2d_fnf)[5]) {
1313 double radius = resultDebug->
m_t3dtrk0_rho * 2500 / (pow(2, 11) - 0.5);
1318 vector<vector<int> > rawStTSs(4, vector<int> (3));
1333 map<string, vector<double> > stGeometry;
1334 vector<vector<double> > stXts;
1368 Fitter3DUtility::fitter3D(stGeometry, stXts, eventTimeValid, eventTime, rawStTSs, charge, radius, phi_c, z0, cot, chi2);
1371 map<string, vector<double> > mConstV;
1372 map<string, double> mConstD;
1420 bitset<6> t2d_oldfnf(
int(result->m_t3d_2doldtrk));
1421 cout <<
"iClk:" << iClk << endl;
1422 cout <<
" [2D] fnf:" << result->m_t2d_fnf <<
" " << bitset<6> (result->m_t2d_fnf) <<
" oldfnf: " << t2d_oldfnf << endl;
1425 cout <<
" [debug] MSB" << endl;
1436 cout <<
" [3D] fnf:" << result3D->
m_t3d_2dfnf <<
" " << bitset<6> (result3D->
m_t3d_2dfnf) <<
" tsValid: " <<
1456 cout <<
" [Store information]" << endl;
1457 cout <<
" charge: " << charge <<
" radius(cm): " << radius <<
" phi_c(rad): " << phi_c << endl;
1458 cout <<
" eventTime: " << eventTime <<
" valid: " << eventTimeValid << endl;
1459 cout <<
" rawStTSs[0] id:" << rawStTSs[0][0] <<
" lr: " << rawStTSs[0][1] <<
" rt: " << rawStTSs[0][2] << endl;
1460 cout <<
" rawStTSs[1] id:" << rawStTSs[1][0] <<
" lr: " << rawStTSs[1][1] <<
" rt: " << rawStTSs[1][2] << endl;
1461 cout <<
" rawStTSs[2] id:" << rawStTSs[2][0] <<
" lr: " << rawStTSs[2][1] <<
" rt: " << rawStTSs[2][2] << endl;
1462 cout <<
" rawStTSs[3] id:" << rawStTSs[3][0] <<
" lr: " << rawStTSs[3][1] <<
" rt: " << rawStTSs[3][2] << endl;
1464 cout <<
" [Calculate fast]" << endl;
1465 cout <<
" [z0] " << z0 <<
" [cot] " << cot <<
" [chi2] " << chi2 << endl;
1467 cout <<
" [Calculate firm]" << endl;
1487 bitset<6> t2d_fnf(
int(result->m_t3d_2dfnf));
1488 bitset<4> tsf_fnf(
int(result->m_t3d_validTS));
1489 bitset<6> t2d_oldfnf(
int(result->m_t3d_2doldtrk));
1490 cout <<
"iClk:" << iClk << endl;
1491 cout <<
" [2D] fnf:" << result->m_t2d_fnf <<
" " << bitset<6> (result->m_t2d_fnf) <<
" oldfnf: " << t2d_oldfnf << endl;
1492 cout <<
" [0] rho: " << result->m_t2d0_rho_s <<
" " <<
toSigned(result->m_t2d0_rho_s,
1493 7) <<
" " << int(0.3 * 34 / 30 / 1.5e-4 / abs(
toSigned(result->m_t2d0_rho_s, 7)) * (pow(2,
1494 11) - 0.5) / 2500) <<
" phi0: " << result->m_t2d0_phi << endl;
1495 cout <<
" [1] rho: " << result->m_t2d1_rho_s <<
" " <<
toSigned(result->m_t2d1_rho_s,
1496 7) <<
" " << int(0.3 * 34 / 30 / 1.5e-4 / abs(
toSigned(result->m_t2d1_rho_s, 7)) * (pow(2,
1497 11) - 0.5) / 2500) <<
" phi0: " << result->m_t2d1_phi << endl;
1498 cout <<
" [2] rho: " << result->m_t2d2_rho_s <<
" " <<
toSigned(result->m_t2d2_rho_s,
1499 7) <<
" " << int(0.3 * 34 / 30 / 1.5e-4 / abs(
toSigned(result->m_t2d2_rho_s, 7)) * (pow(2,
1500 11) - 0.5) / 2500) <<
" phi0: " << result->m_t2d2_phi << endl;
1501 cout <<
" [3] rho: " << result->m_t2d3_rho_s <<
" " <<
toSigned(result->m_t2d3_rho_s,
1502 7) <<
" " << int(0.3 * 34 / 30 / 1.5e-4 / abs(
toSigned(result->m_t2d3_rho_s, 7)) * (pow(2,
1503 11) - 0.5) / 2500) <<
" phi0: " << result->m_t2d3_phi << endl;
1504 cout <<
" [3D] fnf:" << result->m_t3d_2dfnf <<
" " << t2d_fnf <<
" " << t2d_fnf[5] <<
" tsValid: " << result->m_t3d_validTS <<
" "
1505 << tsf_fnf << endl;;
1506 cout <<
" [0] z0: " << result->m_t3dtrk0_z0_s <<
" cot: " << result->m_t3dtrk0_cot_s <<
" chi2: " << result->m_t3dtrk0_zchisq
1508 cout <<
" [1] z0: " << result->m_t3dtrk1_z0_s <<
" cot: " << result->m_t3dtrk1_cot_s <<
" chi2: " << result->m_t3dtrk1_zchisq
1510 cout <<
" [2] z0: " << result->m_t3dtrk2_z0_s <<
" cot: " << result->m_t3dtrk2_cot_s <<
" chi2: " << result->m_t3dtrk2_zchisq
1512 cout <<
" [3] z0: " << result->m_t3dtrk3_z0_s <<
" cot: " << result->m_t3dtrk3_cot_s <<
" chi2: " << result->m_t3dtrk3_zchisq
1514 cout <<
" [debug] MSB" << endl;
1515 cout <<
" evtTime: " << result->m_t3dtrk0_evtTime_delay <<
" evtTimeValid: " << result->m_t3dtrk0_evtTimeValid_delay <<
1517 cout <<
" charge: " << result->m_t3dtrk0_charge <<
" rho: " << result->m_t3dtrk0_rho <<
" phi0: " << result->m_t3dtrk0_phi0
1519 cout <<
" ts0 id: " << result->m_t3dtrk0ts0_id <<
" lr: " << result->m_t3dtrk0ts0_lr <<
" rt: " << result->m_t3dtrk0ts0_rt
1521 cout <<
" ts1 id: " << result->m_t3dtrk0ts1_id <<
" lr: " << result->m_t3dtrk0ts1_lr <<
" rt: " << result->m_t3dtrk0ts1_rt
1523 cout <<
" ts2 id: " << result->m_t3dtrk0ts2_id <<
" lr: " << result->m_t3dtrk0ts2_lr <<
" rt: " << result->m_t3dtrk0ts2_rt
1525 cout <<
" ts3 id: " << result->m_t3dtrk0ts3_id <<
" lr: " << result->m_t3dtrk0ts3_lr <<
" rt: " << result->m_t3dtrk0ts3_rt
1527 cout <<
" [debug] LSB" << endl;
1528 cout <<
" evtTime: " << result->m_t3dtrk1_evtTime_delay <<
" evtTimeValid: " << result->m_t3dtrk1_evtTimeValid_delay <<
1530 cout <<
" charge: " << result->m_t3dtrk1_charge <<
" rho: " << result->m_t3dtrk1_rho <<
" phi0: " << result->m_t3dtrk1_phi0
1532 cout <<
" ts0 id: " << result->m_t3dtrk1ts0_id <<
" lr: " << result->m_t3dtrk1ts0_lr <<
" rt: " << result->m_t3dtrk1ts0_rt
1534 cout <<
" ts1 id: " << result->m_t3dtrk1ts1_id <<
" lr: " << result->m_t3dtrk1ts1_lr <<
" rt: " << result->m_t3dtrk1ts1_rt
1536 cout <<
" ts2 id: " << result->m_t3dtrk1ts2_id <<
" lr: " << result->m_t3dtrk1ts2_lr <<
" rt: " << result->m_t3dtrk1ts2_rt
1538 cout <<
" ts3 id: " << result->m_t3dtrk1ts3_id <<
" lr: " << result->m_t3dtrk1ts3_lr <<
" rt: " << result->m_t3dtrk1ts3_rt
1548 boost::multi_array<double, 2>& t3DInfo)
1550 for (
unsigned iTrack = 0; iTrack < t3DFirmwareInfo.shape()[0]; iTrack++) {
1551 for (
unsigned iClk = 0; iClk < t3DFirmwareInfo.shape()[1]; iClk++) {
1554 if (t3DFirmwareInfo[iTrack][iClk][0] == 0)
continue;
1566 double track3D_ref[7] = {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]};
1568 boost::multi_array_ref<double, 1> track3D((
double*)track3D_ref, boost::extents[7]);
1570 t3DInfo.resize(boost::extents[t3DInfo.shape()[0] + 1][7]);
1571 t3DInfo[t3DInfo.shape()[0] - 1] = track3D;
1580 for (
unsigned iTrack = 0; iTrack < t3DInfo.shape()[0]; ++iTrack) {
1581 double charge = 0, phi0_i = 0, omega = 0, chi2D = 0, z0 = 0, cot = 0, zchi2 = 0;
1584 charge = t3DInfo[iTrack][1] == 2 ? -1 : 1;
1585 phi0_c =
t2DPhiTot3DPhi(t3DInfo[iTrack][3], t3DInfo[iTrack][2]) / (pow(2, 12) - 0.5) * M_PI;
1587 phi0_i = (45 + 90. / 80 * (1 + t3DInfo[iTrack][3])) / 180 * M_PI;
1589 omega =
toSigned(t3DInfo[iTrack][2], 7) / 33.0 * 3.2;
1590 z0 =
toSigned(t3DInfo[iTrack][4], 11) * 0.0382;
1591 cot =
toSigned(t3DInfo[iTrack][5], 11) * 0.00195;
1592 zchi2 = t3DInfo[iTrack][6];
1594 charge = t3DInfo[iTrack][1] == 1 ? 1 : -1;
1595 phi0_c =
t2DPhiTot3DPhi((t3DInfo[iTrack][3] - 34 / 90.*80 - 1), t3DInfo[iTrack][2]) / (pow(2, 12) - 0.5) * M_PI;
1596 phi0_i = t3DInfo[iTrack][3];
1597 omega = t3DInfo[iTrack][2];
1598 z0 = t3DInfo[iTrack][4];
1599 cot = t3DInfo[iTrack][5];
1600 zchi2 = t3DInfo[iTrack][6];
1605 phi0_c = phi0_c + (M_PI / 2.0) * 0;
1606 phi0_i = phi0_i + (M_PI / 2.0) * 0;
1608 phi0_c = phi0_c + (M_PI / 2.0) * 1;
1609 phi0_i = phi0_i + (M_PI / 2.0) * 1;
1611 phi0_c = phi0_c + (M_PI / 2.0) * 2;
1612 phi0_i = phi0_i + (M_PI / 2.0) * 2;
1614 phi0_c = phi0_c + (M_PI / 2.0) * 3;
1615 phi0_i = phi0_i + (M_PI / 2.0) * 3;
1618 while (phi0_c > M_PI) {
1621 while (phi0_i < -M_PI) {
1624 while (phi0_i > M_PI) {
1627 while (phi0_i < -M_PI) {
1632 if (
m_isVerbose) cout <<
"[3D] iTrack:" << iTrack <<
" charge: " << charge <<
" phi0_i:" << phi0_i <<
" " << phi0_i * 180 / M_PI <<
1633 " omega:" << omega <<
" pt:" << charge / omega * 0.3 * 1.5 * 0.01 <<
" z0:" << z0 <<
" cot:" << cot <<
" zchi2:" << zchi2 << endl;
1634 m_tracks3D.appendNew(phi0_i, omega, chi2D, z0, cot, zchi2);
Class containing the result of the unpacker in raw data and the result of the digitizer in simulation...
Track created by the CDC trigger.
void setDescription(const std::string &description)
Sets the description of the module.
void setPropertyFlags(unsigned int propertyFlags)
Sets the flags for the module properties.
@ c_ParallelProcessingCertified
This module can be run in parallel processing mode safely (All I/O must be done through the data stor...
A class to hold common data for JSignals.
std::string m_EventTimeName
name of the event time StoreObjPtr
unsigned m_fit3DWithTSIM
Mode for fitting with TSIM.
StoreArray< CDCTriggerTrack > m_tracks2D
list of 2D input tracks
void debug3DFirmware()
Used for debugging 3D firmware.
void addTSDatastore(boost::multi_array< double, 3 > &tsfInfo, int isSt=1)
adds tsfInfo to TS data store
bool m_add2DFinderToDatastore
Flag for adding 2D finder to datastore.
void store3DFirmSimData(boost::multi_array< double, 3 > &t3DFirmwareInfo)
uses firm sim with debug
Belle2::TRGCDCJSignalData * m_commonData
TRGCDCJSignalData for VHDL generation (jbkim's class)
int toSigned(int value, int nBits)
converts to signed value
void store3DFastSimData(boost::multi_array< double, 3 > &t3DFirmwareInfo)
uses fast sim with debug
virtual void initialize() override
Initializes TRGCDCT3DConverterModule.
virtual void event() override
Called event by event.
std::string m_outputCollectionName
Name of the StoreArray containing the resulting 3D tracks.
StoreArray< CDCTriggerSegmentHit > m_hits
list of track segment hits
void filterTSData(boost::multi_array< double, 4 > &tsfFirmwareInfo, boost::multi_array< double, 3 > &tsfInfo)
filters tsfFirmwareInfo to tsfInfo
virtual void endRun() override
Called when run ended.
std::map< std::string, TRGCDCJLUT * > m_mLutStorage
TRGCDCJLUT for VHDL generation (jbkim's class)
virtual void terminate() override
Called when processing ended.
void add3DDatastore(boost::multi_array< double, 2 > &t3DInfo, bool doConvert=1)
adds t3DInfo to track data store
std::map< std::string, TRGCDCJSignal > m_mSignalStorage
TRGCDCJSignal for VHDL generation (jbkim's class)
void store2DFirmwareData(boost::multi_array< double, 3 > &t2DFirmwareInfo, boost::multi_array< double, 4 > &axTsfFirmwareInfo)
converts firmwareResults of 2D to a vector
std::string m_inputCollectionName
Name of the StoreArray containing the input tracks from the 2D fitter.
unsigned m_isVerbose
Switch printing detail information.
void store3DFirmwareData(boost::multi_array< double, 3 > &t3DFirmwareInfo)
converts firmwareResults of 3D to a vector
virtual void beginRun() override
Called when new run started.
bool m_add3DToDatastore
Flag for adding 3D to datastore.
virtual ~TRGCDCT3DConverterModule()
Destructor.
void storeTSFirmwareData(boost::multi_array< double, 4 > &tsfInfo)
converts firmwareResults of TS to a vector
bool m_addTSToDatastore
Flag for adding TS to datastore.
TRGCDCT3DConverterModule()
Constructor.
bool m_addEventTimeToDatastore
Flag for adding event time to datastore.
StoreArray< CDCTriggerTrack > m_tracks3D
list of 3D output tracks
StoreObjPtr< BinnedEventT0 > m_eventTime
StoreObjPtr containing the event time.
void filter3DData(boost::multi_array< double, 3 > &t3DFirmwareInfo, boost::multi_array< double, 2 > &t3DInfo)
filters t3DFirmwareInfo to t3DInfo
std::string version() const
returns version of TRGCDCT3DConverterModule.
void filter2DData(boost::multi_array< double, 3 > &t2DFirmwareInfo, boost::multi_array< double, 4 > &t2DTsfFirmwareInfo, boost::multi_array< double, 2 > &t2DInfo, boost::multi_array< double, 3 > &t2DTsfInfo)
** filters t2DFirmwareInfo to t2DInfo*/
int toTSID(int iSL, int iWire)
converts sl, iWire to continuous TS ID [0,2335]
std::string m_hitCollectionName
Name of the StoreArray containing the input track segment hits.
std::string m_firmwareResultCollectionName
Name of the StoreArray containing the input firmware results.
void add2DDatastore(boost::multi_array< double, 2 > &t2DInfo, boost::multi_array< double, 3 > &t2DTsfInfo)
adds t2DInfo to track data store
int t2DPhiTot3DPhi(int phi, int rho)
converts to 2D rho to 3D rho value, obsolete
StoreArray< TRGCDCT3DUnpackerStore > m_firmwareResults
list of firmware results
int m_t3dtrk3_cot_s
m_t3dtrk3_cot_s leaf
int m_t3dtrk3_zchisq
m_t3dtrk3_zchisq leaf
int m_t3dtrk0_evtTimeValid_delay
m_t3dtrk0_evtTimeValid_delay leaf
int m_t3dtrk0ts2_id
m_t3dtrk0ts2_id leaf
int m_t3dtrk0_rho
m_t3dtrk0_rho leaf
int m_t3dtrk0ts0_rt
m_t3dtrk0ts0_rt leaf
int m_t3dtrk0ts3_lr
m_t3dtrk0ts3_lr leaf
int m_t3dtrk0ts1_id
m_t3dtrk0ts1_id leaf
int m_t3dtrk2_zchisq
m_t3dtrk2_zchisq leaf
int m_t3dtrk3_z0_s
m_t3dtrk3_z0_s leaf
int m_t3dtrk2_cot_s
m_t3dtrk2_cot_s leaf
int m_t3dtrk0ts3_id
m_t3dtrk0ts3_id leaf
int m_t3d_validTS
m_t3d_validTS leaf
int m_t3dtrk0ts0_lr
m_t3dtrk0ts0_lr leaf
int m_t3dtrk0_zchisq
m_t3dtrk0_zchisq leaf
int m_t3dtrk1_cot_s
m_t3dtrk1_cot_s leaf
int m_t3d_2dfnf
m_t3d_2dfnf leaf
int m_t3dtrk0ts0_id
m_t3dtrk0ts0_id leaf
int m_t3dtrk0_cot_s
m_t3dtrk0_cot_s leaf
int m_t3dtrk0_evtTime_delay
m_t3dtrk0_evtTime_delay leaf
int m_t3dtrk0_z0_s
m_t3dtrk0_z0_s leaf
int m_t3dtrk0ts2_lr
m_t3dtrk0ts2_lr leaf
int m_t3dtrk0ts1_rt
m_t3dtrk0ts1_rt leaf
int m_t3dtrk0_phi0
m_t3dtrk0_phi0 leaf
int m_t3dtrk0ts3_rt
m_t3dtrk0ts3_rt leaf
int m_t3dtrk2_z0_s
m_t3dtrk2_z0_s leaf
int m_t3dtrk0_charge
m_t3dtrk0_charge leaf
int m_t3dtrk1_z0_s
m_t3dtrk1_z0_s leaf
int m_t3dtrk0ts1_lr
m_t3dtrk0ts1_lr leaf
int m_t3dtrk0ts2_rt
m_t3dtrk0ts2_rt leaf
int m_t3dtrk1_zchisq
m_t3dtrk1_zchisq leaf
static void fitter3DFirm(std::map< std::string, double > &mConstD, const 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.
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.
void addParam(const std::string &name, T ¶mVariable, const std::string &description, const T &defaultValue)
Adds a new parameter to the module.
#define REG_MODULE(moduleName)
Register the given module (without 'Module' suffix) with the framework.
static void getStereoGeometry(std::map< std::string, std::vector< double > > &stGeometry)
Get stereo geometry.
static void getStereoXt(std::vector< double > const &stPriorityLayer, std::vector< std::vector< double > > &stXts, bool isSimple=0)
Get stereo Xt.
static void getConstants(std::map< std::string, double > &mConstD, std::map< std::string, std::vector< double > > &mConstV, bool isXtSimple=0)
Get constants for firmwareFit.
Abstract base class for different kinds of events.