296 TRGState s(80 + 16 * 4 + 16 * 4 + 16 + 5 * 4 + 1 * 9 + 3);
299 bool* binput =
new bool[
input.size()];
300 input.copy2bool(binput);
301 bool* binside = & binput[0];
302 bool* boutside = & binput[256];
306 const bool*
const hitptn0 = & binside[0];
307 const bool*
const hitptn1 = & boutside[0];
308 s.set(0, 32, hitptn0);
309 s.set(32, 48, hitptn1);
313 bool PTS_out_hit[16];
314 for (
unsigned i = 0; i < 16; i++) {
316 PTS_in_hit[i] = hitptn0[0] || hitptn0[16];
317 PTS_out_hit[i] = hitptn1[0] || hitptn1[1] || hitptn1[16] || hitptn1[17] || hitptn1[32] || hitptn1[33] || hitptn1[34];
319 PTS_in_hit[i] = hitptn0[1] || hitptn0[16] || hitptn0[17];
320 PTS_out_hit[i] = hitptn1[0] || hitptn1[1] || hitptn1[2] || hitptn1[16] || hitptn1[17] || hitptn1[18] || hitptn1[32] || hitptn1[33]
321 || hitptn1[34] || hitptn1[35];
322 }
else if (i == 14) {
323 PTS_in_hit[i] = hitptn0[14] || hitptn0[29] || hitptn0[30];
324 PTS_out_hit[i] = hitptn1[13] || hitptn1[14] || hitptn1[15] || hitptn1[28] || hitptn1[29] || hitptn1[30] || hitptn1[31]
325 || hitptn1[44] || hitptn1[45] || hitptn1[46] || hitptn1[47];
326 }
else if (i == 15) {
327 PTS_in_hit[i] = hitptn0[15] || hitptn0[30] || hitptn0[31];
328 PTS_out_hit[i] = hitptn1[14] || hitptn1[15] || hitptn1[29] || hitptn1[30] || hitptn1[31] || hitptn1[45] || hitptn1[46]
331 PTS_in_hit[i] = hitptn0[i] || hitptn0[i + 15] || hitptn0[i + 16];
332 PTS_out_hit[i] = hitptn1[i - 1] || hitptn1[i] || hitptn1[i + 1] || hitptn1[i + 14] || hitptn1[i + 15] || hitptn1[i + 16]
333 || hitptn1[i + 17] || hitptn1[i + 30] || hitptn1[i + 31] || hitptn1[i + 32] || hitptn1[i + 33] || hitptn1[i + 34];
339 const bool*
const pt[16] = {
340 &binside[33], &binside[38], &binside[43], &binside[48],
341 &binside[53], &binside[58], &binside[63], &binside[68],
342 &binside[73], &binside[78], &binside[83], &binside[88],
343 &binside[93], &binside[98], &binside[103], &binside[108]
346 for (
unsigned i = 0; i < 16; i++) {
352 const bool*
const ftinside[16] = {
353 &binside[128], &binside[133], &binside[138], &binside[143],
354 &binside[148], &binside[153], &binside[158], &binside[163],
355 &binside[168], &binside[173], &binside[178], &binside[183],
356 &binside[188], &binside[193], &binside[198], &binside[203]
358 const bool*
const ftoutside[16] = {
359 &boutside[48], &boutside[53], &boutside[58], &boutside[63],
360 &boutside[68], &boutside[73], &boutside[78], &boutside[83],
361 &boutside[88], &boutside[93], &boutside[98], &boutside[103],
362 &boutside[108], &boutside[113], &boutside[118], &boutside[123]
367 for (
unsigned i = 0; i < 16; i++) {
371 if (!PTS_in_hit[i]) st[0].set(5,
true);
372 if (!PTS_out_hit[i]) st[1].set(5,
true);
374 if (PTS_in_hit[i] || PTS_out_hit[i]) {
376 s.set(p, 4, &binside[129 + i * 5]);
378 s.set(p, 4, &boutside[49 + i * 5]);
386 s.set(p, 16, &binside[112]);
392 s.set(p, 4, &binside[209]);
399 s.set(p, 4, &boutside[129]);
405 if (hitptn1[0] || hitptn1[16] || hitptn1[32] || hitptn1[33]) {
406 s.set(p, 4, &boutside[134]);
415 et[1] =
TRGState(5, &boutside[138]);
417 if ((!hitptn1[15]) && (!hitptn1[30]) && (!hitptn1[31]) && (!hitptn1[46]) && (!hitptn1[47])) et[1].
set(5,
true);
418 if ((!hitptn0[31])) et[0].
set(5,
true);
420 if (hitptn0[31] || hitptn1[15] || hitptn1[30] || hitptn1[31] || hitptn1[46] || hitptn1[47]) {
422 s.set(p, 4, &binside[209]);
424 s.set(p, 4, &boutside[139]);
433 if (hitptn1[31] || hitptn1[47]) {
434 s.set(p, 4, &boutside[144]);
503 TRGState s(80 + 16 * 4 + 16 * 4 + 16 + 3 * 4 + 9 + 11);
506 bool* binput =
new bool[
input.size()];
507 input.copy2bool(binput);
508 bool* binside = & binput[0];
509 bool* boutside = & binput[256];
513 const bool*
const hitptn0 = & binside[0];
514 const bool*
const hitptn1 = & boutside[0];
515 s.set(0, 48, hitptn0);
516 s.set(48, 32, hitptn1);
519 bool PTS_out_hit[16];
520 for (
unsigned i = 0; i < 16; i++) {
522 PTS_in_hit[i] = hitptn0[0] || hitptn0[1] || hitptn0[16] || hitptn0[32] ;
523 PTS_out_hit[i] = hitptn1[0] || hitptn1[16] || hitptn1[17];
524 }
else if (i == 15) {
525 PTS_in_hit[i] = hitptn0[14] || hitptn0[15] || hitptn0[30] || hitptn0[31] || hitptn0[47] ;
526 PTS_out_hit[i] = hitptn1[14] || hitptn1[15] || hitptn1[30] || hitptn1[31];
528 PTS_in_hit[i] = hitptn0[i - 1] || hitptn0[i] || hitptn0[i + 1] || hitptn0[i + 15] || hitptn0[i + 16] || hitptn0[i + 32];
529 PTS_out_hit[i] = hitptn1[i - 1] || hitptn1[i] || hitptn1[i + 15] || hitptn1[i + 16] || hitptn1[i + 17];
553 const bool dummy[6] = {
false,
false,
false,
false,
false,
true};
557 for (
unsigned i = 0; i < 16; i++) {
559 if (hitptn0[32 + i]) {
560 s.set(p, 4, &binside[49 + 5 * i]);;
566 s.set(p, 4, &boutside[49]);
568 s.set(208 + i, 1,
true);
574 st[0] =
TRGState(5, &boutside[43 + i * 5]);
575 st[1] =
TRGState(5, &boutside[48 + i * 5]);
576 if (!hitptn1[i - 1]) st[0].set(5,
true);
577 if (!hitptn1[i]) st[1].set(5,
true);
579 if (hitptn1[i] || hitptn1[i - 1]) {
581 s.set(p, 4, &boutside[49 + i * 5]);
582 s.set(208 + i, 1,
true);
585 s.set(p, 4, &boutside[44 + i * 5]);
620 for (
unsigned i = 0; i < 16; i++) {
622 st[0] =
TRGState(5, &binside[128 + i * 5]);
623 st[1] =
TRGState(5, &boutside[128 + i * 5]);
625 if (!PTS_in_hit[i]) st[0].set(5,
true);
626 if (!PTS_out_hit[i]) st[1].set(5,
true);
628 if (PTS_in_hit[i] || PTS_out_hit[i]) {
630 s.set(p, 4, &binside[129 + i * 5]);
632 s.set(p, 4, &boutside[129 + i * 5]);
656 s.set(p, 4, &boutside[124]);
659 for (
unsigned i = 0; i < 2; i++) {
662 et[0] =
TRGState(5, &binside[208 + i * 5]);
663 et[1] =
TRGState(5, &boutside[208 + i * 5]);
666 if (!hitptn0[0]) et[0].
set(5,
true);
667 if (!hitptn1[16]) et[1].
set(5,
true);
669 if (hitptn0[0] || hitptn1[16]) {
671 s.set(p, 4, &binside[209 + i * 5]);
673 s.set(p, 4, &boutside[209 + i * 5]);
679 if (!hitptn0[15] && !hitptn0[31]) et[0].
set(5,
true);
680 if (!hitptn1[15] && !hitptn1[31]) et[1].
set(5,
true);
682 if (hitptn0[15] || hitptn0[31] || hitptn1[15] || hitptn1[31]) {
684 s.set(p, 4, &binside[209 + i * 5]);
686 s.set(p, 4, &boutside[209 + i * 5]);
1108 output <<
"Inner Superlayer Merger output dump" << endl << endl;
1110 const std::vector<int> changetime =
_mosb->stateChanges();
1111 std::vector<vector<int>> boolvector(changetime.size());
1112 for (
unsigned ch_t = 0; ch_t < changetime.size(); ch_t++) {
1114 for (
unsigned b = 0; b < (* _mosb)[0]->size(); b++) {
1115 boolvector[ch_t].push_back(((*
_mosb)[0]->state(changetime[ch_t])[b]) ? 1 : 0);
1118 output <<
"# of clk: " << changetime[ch_t] <<
" (" << dClock.
absoluteTime(changetime[ch_t]) <<
" ns), signal vector: " << endl;
1120 output <<
"Hitmap: " << endl <<
" ";
1121 for (
int b = 0; b < 80; b++) {
1122 output << boolvector[ch_t][79 - b] <<
" ";
1123 if (b == 15)
output << endl;
1124 else if (b == 31)
output << endl <<
" ";
1125 else if (b == 47)
output << endl ;
1126 else if (b == 63)
output << endl <<
" ";
1130 for (
int b = 0; b < 16; b++) {
1131 output <<
"PT#" << b <<
": " << boolvector[ch_t][ 80 + 4 * b + 3 ] << boolvector[ch_t][ 80 + 4 * b + 2 ] << boolvector[ch_t][ 80 + 4
1133 << boolvector[ch_t][ 80 + 4 * b ] << endl;
1137 for (
int b = 0; b < 16; b++) {
1138 output <<
"FT#" << b <<
": " << boolvector[ch_t][ 144 + 4 * b + 3 ] << boolvector[ch_t][ 144 + 4 * b + 2 ] << boolvector[ch_t][ 144
1140 << boolvector[ch_t][ 144 + 4 * b ] << endl;
1143 output <<
"Secondary: " << endl;
1144 for (
int b = 0; b < 16; b++) {
1145 output << boolvector[ch_t][ 223 - b ] ;
1149 output <<
"ET#0(31): " << endl << boolvector[ch_t][227] << boolvector[ch_t][226] << boolvector[ch_t][225] << boolvector[ch_t][224]
1151 output <<
"ET#1(64(out32)): " << endl << boolvector[ch_t][231] << boolvector[ch_t][230] << boolvector[ch_t][229] <<
1152 boolvector[ch_t][228]
1154 output <<
"ET#2(32, 48, 64, 65(outside 0, 16, 32, 33)): " << endl << boolvector[ch_t][235] << boolvector[ch_t][234] <<
1155 boolvector[ch_t][233]
1156 << boolvector[ch_t][232] << endl;
1157 output <<
"ET#3(31, 47, 62, 63, 78, 79(inside 31, outside 15, 30, 31, 46, 47)): " << endl << boolvector[ch_t][239] <<
1158 boolvector[ch_t][238]
1159 << boolvector[ch_t][237] << boolvector[ch_t][236] << endl;
1160 output <<
"ET#4(63, 79(outside 31, 47)): " << endl << boolvector[ch_t][243] << boolvector[ch_t][242] << boolvector[ch_t][241]
1161 << boolvector[ch_t][240] << endl;
1179 output <<
"Outer Superlayer Merger output dump" << endl << endl;
1181 const std::vector<int> changetime =
_mosb->stateChanges();
1182 std::vector<vector<int>> boolvector(changetime.size());
1183 for (
unsigned ch_t = 0; ch_t < changetime.size(); ch_t++) {
1185 for (
unsigned b = 0; b < (* _mosb)[0]->size(); b++) {
1186 boolvector[ch_t].push_back(((*
_mosb)[0]->state(changetime[ch_t])[b]) ? 1 : 0);
1189 output <<
"# of clk: " << changetime[ch_t] <<
" (" << dClock.
absoluteTime(changetime[ch_t]) <<
" ns), signal vector: " << endl;
1191 output <<
"Hitmap: " << endl <<
" ";
1192 for (
int b = 0; b < 80; b++) {
1193 output << boolvector[ch_t][79 - b] <<
" ";
1194 if (b == 15)
output << endl;
1195 else if (b == 31)
output << endl <<
" ";
1196 else if (b == 47)
output << endl ;
1197 else if (b == 63)
output << endl <<
" ";
1201 for (
int b = 0; b < 16; b++) {
1202 output <<
"PT#" << b <<
": " << boolvector[ch_t][ 80 + 4 * b + 3 ] << boolvector[ch_t][ 80 + 4 * b + 2 ] << boolvector[ch_t][ 80 + 4
1204 << boolvector[ch_t][ 80 + 4 * b ] << endl;
1208 for (
int b = 0; b < 16; b++) {
1209 output <<
"FT#" << b <<
": " << boolvector[ch_t][ 144 + 4 * b + 3 ] << boolvector[ch_t][ 144 + 4 * b + 2 ] << boolvector[ch_t][ 144
1211 << boolvector[ch_t][ 144 + 4 * b ] << endl;
1215 for (
int b = 0; b < 16; b++) {
1216 output << boolvector[ch_t][ 223 - b ] ;
1220 output <<
"ET#0(63(outside 15)): " << endl << boolvector[ch_t][227] << boolvector[ch_t][226] << boolvector[ch_t][225] <<
1221 boolvector[ch_t][224]
1223 output <<
"ET#1(0,64(inside 0, out 16)): " << endl << boolvector[ch_t][231] << boolvector[ch_t][230] << boolvector[ch_t][229]
1224 << boolvector[ch_t][228] << endl;
1225 output <<
"ET#2(15,31,63,79(inside 15, 31, outside 15, 31)): " << endl << boolvector[ch_t][235] << boolvector[ch_t][234]
1226 << boolvector[ch_t][233] << boolvector[ch_t][232] << endl;
static TRGCDC * getTRGCDC(const std::string &configFile, unsigned simulationMode=0, unsigned fastSimulationMode=0, unsigned firmwareSimulationMode=0, int firmwareSimulationStart=0, int firmwareSimulationStop=32 *32 - 1, bool _makeRootFile=0, bool perfect2DFinder=false, bool perfect3DFinder=false, const std::string &innerTSLUTFile="?", const std::string &outerTSLUTFile="?", const std::string &rootTRGCDCFile="?", const std::string &rootFitter3DFile="?", unsigned houghFinderPeakMin=5, const std::string &houghMappingFilePlus="?", const std::string &houghMappingFileMinus="?", unsigned houghDoit=2, bool fLogicLUTTSF=0, bool fLRLUT=1, bool fFitter3Dsmclr=0, bool fFitter3Ds2DFit=1, bool fFitter3Ds2DFitDrift=0, double inefficiency=0, bool fileTSF=0, bool fileETF=0, int fverETF=0, bool fprintFirmETF=0, bool fileHough3D=0, int finder3DMode=0, bool fileFitter3D=0, bool fXtSimpleFitter3D=0, double TdcBinWidth=1., int trgCDCDataInputMode=0, const std::string &cdchitCollectionName="")
returns TRGCDC object with specific configuration.