27 debug_( pset.getUntrackedParameter<bool>(
"debug",
false) ),
29 DTTM7InputTag_( pset.getParameter<edm::
InputTag>(
"DTTM7_FED_Source") ),
30 feds_( pset.getUntrackedParameter<std::vector<int> >(
"feds", std::vector<int>()) ),
31 wheels_( pset.getUntrackedParameter<std::vector<int> >(
"wheels", std::vector<int>())),
32 amcsecmap_( pset.getUntrackedParameter<std::vector<long long int> >(
"amcsecmap", std::vector<long long int>()))
36 produces<L1MuDTChambPhContainer>();
37 produces<L1MuDTChambThContainer>();
43 throw cms::Exception(
"TwinMux_unpacker") <<
"Configuration file error. Size of \'wheels\' and \'feds\' differs.\n";
46 throw cms::Exception(
"TwinMux_unpacker") <<
"Configuration file error. Size of \'wheels\' and \'amcsecmap\' differs.\n";
48 for (
size_t wh_i = 0; wh_i <
amcsecmap_.size(); ++wh_i){
49 std::array<short, 12> whmap;
50 for (
size_t amc_i = 1; amc_i < 13; ++amc_i ){
51 short shift = (12-amc_i)*4;
72 TM7phi_product->setContainer(phi_data);
73 TM7the_product->setContainer(the_data);
75 e.
put(TM7phi_product);
76 e.
put(TM7the_product);
88 for (
size_t w_i = 0; w_i <
nfeds_; ++w_i ) {
98 int bxNorm_ = bx_ - bxCnt_;
99 if (
abs( bxNorm_ ) < 3000 )
return bxNorm_;
101 if ( bxNorm_ > 0 )
return bxNorm_ - 3564;
102 if ( bxNorm_ < 0 )
return bxNorm_ + 3564;
128 std::array<short, 12> twinMuxAmcSec,
134 std::vector<long> DTTM7WordContainer;
139 std::ostringstream
fname;
140 fname <<
"eventDump_" << twinMuxFed <<
".txt";
141 logfile.open( fname.str() );
145 FEDRawData TM7data = data->FEDData(twinMuxFed);
146 if ( TM7data.
size() == 0 )
return;
158 int TM7fedId = ( dataWord >> 8 ) & 0xFFF;
163 int BOEevTy = ( dataWord >> 60 ) & 0xF;
166 if (
debug_ ) logfile <<
'[' << ++linecounter <<
"]\t"
167 << std::hex << dataWord <<
std::dec <<
"\t|\t"
168 <<
"BOEevTy " << BOEevTy <<
'\t'
169 <<
"TM7fedId " << TM7fedId <<
'\n';
171 if ( (BOEevTy != 0x5) || ( TM7fedId != twinMuxFed ) ) {
174 << twinMuxFed <<
" header "
175 << std::hex << dataWord;
184 std::map<int, int> AMCsizes;
188 int nAMC = ( dataWord >> 52 ) & 0xF;
190 if (
debug_ ) logfile <<
'[' << ++linecounter <<
"]\t" << std::hex
192 <<
"nAMC " << nAMC <<
'\n';
195 for (
int j = 0;
j < nAMC; ++
j ) {
200 int AMCno = (dataWord >> 16 ) & 0xF;
205 if ( (AMCno < 1) || (AMCno > 12) ) {
207 <<
" out of range (1-12)";
211 AMCsizes[AMCno] = ( dataWord >> 32 ) & 0xFFFFFF;
213 if (
debug_ ) logfile <<
'[' << ++linecounter <<
"]\t"
214 << std::hex << dataWord
216 <<
"AMCsizes[" << AMCno <<
"] "
222 std::map<int,int>::iterator AMCiterator = AMCsizes.begin();
223 std::map<int,int>::iterator AMCitend = AMCsizes.end();
224 for ( ; AMCiterator != AMCitend; ++AMCiterator ) {
226 for (
int k=0;
k<AMCiterator->second; ++
k) {
230 DTTM7WordContainer.push_back( dataWord );
241 calcCRC( dataWord & 0xFFFFFFFF0000FFFF, newCRC);
244 int chkEOE = (dataWord >> 60 ) & 0xF;
245 int CRC = ( dataWord >> 16 ) & 0xFFFF;
246 int evtLgth = ( dataWord >> 32 ) & 0xFFFFFF;
248 if ( chkEOE != 0xA ) {
249 edm::LogWarning(
"TwinMux_unpacker") <<
"AMC block closing line " << std::hex << dataWord
250 <<
std::dec <<
" does not start with 0xA";
254 if (
debug_ ) logfile <<
"\tevtLgth " << std::hex
255 << evtLgth <<
"\tCRC " << CRC <<
std::dec <<
'\n';
257 if ( nline != evtLgth ) {
258 edm::LogWarning(
"TwinMux_unpacker") <<
"Number of words read " << std::dec << nline
259 <<
" and event length " << std::dec << evtLgth
264 if ( newCRC != CRC ) {
265 edm::LogWarning(
"TwinMux_unpacker") <<
"Calculated CRC " << std::hex << newCRC
266 <<
" differs from CRC in trailer " << std::hex << CRC;
271 std::vector<long>::iterator DTTM7iterator = DTTM7WordContainer.begin();
272 std::vector<long>::iterator DTTM7itend = DTTM7WordContainer.end();
275 for ( ; DTTM7iterator != DTTM7itend; ++DTTM7iterator ) {
277 dataWord = (*DTTM7iterator);
278 int dataLenght = (dataWord & 0xFFFFF);
279 int bxCounter = (dataWord >> 20 ) & 0xFFF;
280 int event = (dataWord >> 32 ) & 0xFFFFFF;
281 int AMC_ID = (dataWord >> 56 ) & 0xF;
282 int control = (dataWord >> 60 ) & 0xF;
283 int wheel = twinMuxWheel;
285 if( ( AMC_ID < 1 )
or ( AMC_ID > 12 ) ) {
287 <<
" TM7fedId " << TM7fedId
288 <<
" AMC_ID " << AMC_ID;
292 int sector = twinMuxAmcSec[AMC_ID-1];
294 if( ( sector < 1 )
or ( sector > 12 ) ) {
295 if( sector != 15 )
edm::LogWarning(
"TwinMux_unpacker") <<
"%%%%%% VALID AMC_ID POINTS TO SECTOR OUT OF RANGE \n"
296 <<
" TM7fedId " << TM7fedId
297 <<
" AMC_ID " << AMC_ID
298 <<
" wheel " << wheel
299 <<
" sector " << sector;
303 if (
debug_ ) logfile <<
'[' << ++lcounter <<
"]\t"
304 << std::hex << dataWord << std::dec <<
"\t|\t"
305 <<
"AMC_ID " << AMC_ID <<
'\t'
306 <<
"control " << control <<
'\t'
307 <<
"event " <<
event <<
'\t'
308 <<
"bxCounter " << bxCounter <<
'\t'
309 <<
"dataLenght " << dataLenght <<
'\n';
312 if( DTTM7iterator == DTTM7itend ) {
313 edm::LogInfo(
"TwinMux_unpacker") <<
"TRAILING WORD AS A PAYLOAD END in FED "
314 << std::hex << TM7fedId
315 << std::hex << dataWord
316 << std::dec<<
" [it pos "
317 << int(DTTM7iterator - DTTM7itend) <<
" ]";
321 dataWord = (*DTTM7iterator);
322 int boardID = (dataWord & 0xFFFF);
323 int orbit = (dataWord >> 16 ) & 0xFFFF;
325 if ( DTTM7iterator == DTTM7itend ) {
327 <<
" control " << control
328 <<
" event " <<
event
329 <<
" bxCounter " << bxCounter
330 <<
" size " << dataLenght
331 <<
" orbit " << orbit
332 <<
" board " << boardID
333 <<
" AMCsizes " << AMCsizes[AMC_ID]
334 <<
" it pos " << int(DTTM7iterator - DTTM7itend);
338 if (
debug_ ) logfile <<
'[' << ++lcounter <<
"]\t"
339 << std::hex << dataWord
340 << std::dec <<
"\t|\t"
341 <<
" orbit " << orbit
342 <<
" board " << boardID <<
'\n';
344 int AMCsize = AMCsizes[AMC_ID] - 1;
350 for (
int tm7eventsize = 2; tm7eventsize < AMCsize; ++tm7eventsize ) {
353 if ( DTTM7iterator == DTTM7itend ) {
355 edm::LogWarning(
"TwinMux_unpacker") <<
"UNEXPECTED END OF PAYLOAD INSIDE CHAMBER DESCRIPTION"
356 <<
" [it pos " << int(DTTM7iterator - DTTM7itend) <<
" ]" ;
361 long dataWordSub = (*DTTM7iterator);
362 int selector = ( dataWordSub >> 60 ) & 0xF;
364 if ( selector == 0x4 ) {
366 bxID = ( dataWordSub >> 48 ) & 0xFFF;
367 bc0 = ( dataWordSub >> 22 ) & 0x1;
368 bxNr =
normBx(bxID, bxCounter);
370 if (
debug_ ) logfile <<
'[' << ++lcounter <<
"]\t" << std::hex
371 << dataWordSub << std::dec
373 <<
"bxID " << bxID <<
'\t'
374 <<
"bc0 " << bc0 <<
'\n';
378 else if ( selector == 0x1 ) {
380 int mb2_phi = ( dataWordSub & 0xFFF);
381 int mb2_phib = ( dataWordSub >> 12 ) & 0x3FF;
382 int mb2_qual = ( dataWordSub >> 22 ) & 0x7;
383 int mb2_ts2tag = ( dataWordSub >> 28 ) & 0x1;
388 int mb1_phi = ( dataWordSub >> 30 ) & 0xFFF;
389 int mb1_phib = ( dataWordSub >> 42 ) & 0x3FF;
390 int mb1_qual = ( dataWordSub >> 52 ) & 0x7;
391 int mb1_ts2tag = ( dataWordSub >> 58 ) & 0x1;
403 1, mb1_phi_conv, mb1_phib_conv,
404 mb1_qual, mb1_ts2tag, bxCounter ) );
406 2, mb2_phi_conv, mb2_phib_conv,
407 mb2_qual, mb2_ts2tag, bxCounter ) );
409 if (
debug_ ) logfile <<
'[' << ++lcounter <<
"]\t"<< std::hex
410 << dataWordSub << std::dec <<
"\t|\t"
411 <<
"mb1_ts2tag " << mb1_ts2tag <<
'\t'
412 <<
"mb1_qual " << mb1_qual <<
'\t'
413 <<
"mb1_phib " << mb1_phib_conv <<
'\t'
414 <<
"mb1_phi " << mb1_phi_conv <<
'\t'
415 <<
"mb2_ts2tag " << mb2_ts2tag <<
'\t'
416 <<
"mb2_qual " << mb2_qual <<
'\t'
417 <<
"mb2_phib " << mb2_phib_conv <<
'\t'
418 <<
"mb2_phi " << mb2_phi_conv <<
'\n';
421 else if ( selector == 0x2 ) {
423 int mb4_phi = ( dataWordSub & 0xFFF);
424 int mb4_phib = ( dataWordSub >> 12 ) & 0x3FF;
425 int mb4_qual = ( dataWordSub >> 22 ) & 0x7;
426 int mb4_ts2tag = ( dataWordSub >> 28 ) & 0x1;
431 int mb3_phi = ( dataWordSub >> 30 ) & 0xFFF;
432 int mb3_phib = ( dataWordSub >> 42 ) & 0x3FF;
433 int mb3_qual = ( dataWordSub >> 52 ) & 0x7;
434 int mb3_ts2tag = ( dataWordSub >> 58 ) & 0x1;
446 3, mb3_phi_conv, mb3_phib_conv,
447 mb3_qual, mb3_ts2tag, bxCounter) );
449 4, mb4_phi_conv, mb4_phib_conv,
450 mb4_qual, mb4_ts2tag, bxCounter) );
452 if (
debug_ ) logfile <<
'[' << ++lcounter <<
"]\t"<< std::hex
453 << dataWordSub << std::dec <<
"\t|\t"
454 <<
"mb3_ts2tag " << mb3_ts2tag <<
'\t'
455 <<
"mb3_qual " << mb3_qual <<
'\t'
456 <<
"mb3_phib " << mb3_phib_conv <<
'\t'
457 <<
"mb3_phi " << mb3_phi_conv <<
'\t'
458 <<
"mb4_ts2tag " << mb4_ts2tag <<
'\t'
459 <<
"mb4_qual " << mb4_qual <<
'\t'
460 <<
"mb4_phib " << mb4_phib_conv <<
'\t'
461 <<
"mb4_phi " << mb4_phi_conv <<
'\n';
465 else if ( selector == 0x3 ) {
467 int posALL, posBTI[7];
469 int mb3_eta = ( dataWordSub & 0xFF );
470 int mb3_eta_HQ = ( dataWordSub >> 8 ) & 0xFF;
471 int mb2_eta = ( dataWordSub >> 16 ) & 0xFF;
473 int mb2_eta_HQ = ( dataWordSub >> 32 ) & 0xFF;
474 int mb1_eta = ( dataWordSub >> 40 ) & 0xFF;
475 int mb1_eta_HQ = ( dataWordSub >> 48 ) & 0xFF;
477 if (
debug_ ) logfile <<
'[' << ++lcounter <<
"]\t" << std::hex
478 << dataWordSub << std::dec <<
"\t|\t"
479 <<
"mb1_eta_HQ " << mb1_eta_HQ <<
'\t'
480 <<
"mb1_eta " << mb1_eta <<
'\t'
481 <<
"mb2_eta_HQ " << mb2_eta_HQ <<
'\t'
482 <<
"mb2_eta " << mb2_eta <<
'\t'
483 <<
"mb3_eta_HQ " << mb3_eta_HQ <<
'\t'
484 <<
"mb3_eta " << mb3_eta <<
'\n';
486 posALL = mb1_eta_HQ & 0x7F;
487 posBTI[0] = mb1_eta_HQ & 0x01;
488 posBTI[1] = (mb1_eta_HQ & 0x02)>>1;
489 posBTI[2] = (mb1_eta_HQ & 0x04)>>2;
490 posBTI[3] = (mb1_eta_HQ & 0x08)>>3;
491 posBTI[4] = (mb1_eta_HQ & 0x10)>>4;
492 posBTI[5] = (mb1_eta_HQ & 0x20)>>5;
493 posBTI[6] = (mb1_eta_HQ & 0x40)>>6;
501 posALL = mb2_eta_HQ & 0x7F;
502 posBTI[0] = mb2_eta_HQ & 0x01;
503 posBTI[1] = (mb2_eta_HQ & 0x02)>>1;
504 posBTI[2] = (mb2_eta_HQ & 0x04)>>2;
505 posBTI[3] = (mb2_eta_HQ & 0x08)>>3;
506 posBTI[4] = (mb2_eta_HQ & 0x10)>>4;
507 posBTI[5] = (mb2_eta_HQ & 0x20)>>5;
508 posBTI[6] = (mb2_eta_HQ & 0x40)>>6;
516 posALL = mb3_eta_HQ & 0x7F;
517 posBTI[0] = mb3_eta_HQ & 0x01;
518 posBTI[1] = (mb3_eta_HQ & 0x02)>>1;
519 posBTI[2] = (mb3_eta_HQ & 0x04)>>2;
520 posBTI[3] = (mb3_eta_HQ & 0x08)>>3;
521 posBTI[4] = (mb3_eta_HQ & 0x10)>>4;
522 posBTI[5] = (mb3_eta_HQ & 0x20)>>5;
523 posBTI[6] = (mb3_eta_HQ & 0x40)>>6;
533 else if ( selector == 0xB ) {
568 if (
debug_ ) logfile <<
'[' << ++lcounter <<
"]\t" << std::hex
569 << dataWordSub << std::dec
570 <<
"\t MB1/2 OUTPUT WORD\n";
575 else if ( selector == 0xC ) {
610 if (
debug_ ) logfile <<
'[' << ++lcounter <<
"]\t" << std::hex
611 << dataWordSub << std::dec
612 <<
"\t MB3/4 OUTPUT WORD\n";
616 else if ( selector == 0xD ) {
618 if (
debug_ ) logfile <<
'[' << ++lcounter <<
"]\t" << std::hex
619 << dataWordSub << std::dec
620 <<
"\t ETHA OUTPUT WORD\n";
624 else if ( selector == 0x9 || selector == 0xE ) {
626 edm::LogInfo(
"TwinMux_unpacker") <<
"RPC WORD [" << std::dec << tm7eventsize <<
"] : "
627 << std::hex << dataWordSub << std::dec
628 <<
" it pos " << int(DTTM7iterator - DTTM7itend);
630 if (
debug_ ) logfile <<
'[' << ++lcounter <<
"]\t" << std::hex
631 << dataWordSub << std::dec
636 else if ( selector == 0x6 ) {
638 edm::LogInfo(
"TwinMux_unpacker") <<
"HO WORD [" << std::dec << tm7eventsize <<
"] : "
639 << std::hex << dataWordSub << std::dec
640 <<
" it pos " << int(DTTM7iterator - DTTM7itend);
642 if (
debug_ ) logfile <<
'[' << ++lcounter <<
"]\t" << std::hex
643 << dataWordSub << std::dec
648 else if ( selector == 0xF ) {
650 edm::LogInfo(
"TwinMux_unpacker") <<
"ERROR WORD [" << std::dec << tm7eventsize <<
"] : "
651 << std::hex << dataWordSub << std::dec
652 <<
" it pos " << int(DTTM7iterator - DTTM7itend);
654 if (
debug_ ) logfile <<
'[' << ++lcounter <<
"]\t" << std::hex
655 << dataWordSub << std::dec
656 <<
"\t ERROR WORD\n";
661 edm::LogInfo(
"TwinMux_unpacker") <<
"UNKNOWN WORD received " << std::hex << dataWordSub
662 <<
" in FED " << std::hex << TM7fedId;
664 if (
debug_ ) logfile <<
'[' << ++lcounter <<
"]\t" << std::hex
665 << dataWordSub << std::dec
666 <<
"\t UNKNOWN WORD\n";
669 if( DTTM7iterator == DTTM7itend )
break;
677 if( DTTM7iterator == DTTM7itend )
break;
688 int myCRC[16],
D[64],
C[16];
690 for (
int i = 0;
i < 64; ++
i ) { D[
i] = (word >>
i) & 0x1; }
691 for (
int i = 0;
i < 16; ++
i ) { C[
i] = (myC>>
i) & 0x1; }
693 myCRC[0] = ( D[63] + D[62] + D[61] + D[60] + D[55] + D[54] +
694 D[53] + D[52] + D[51] + D[50] + D[49] + D[48] +
695 D[47] + D[46] + D[45] + D[43] + D[41] + D[40] +
696 D[39] + D[38] + D[37] + D[36] + D[35] + D[34] +
697 D[33] + D[32] + D[31] + D[30] + D[27] + D[26] +
698 D[25] + D[24] + D[23] + D[22] + D[21] + D[20] +
699 D[19] + D[18] + D[17] + D[16] + D[15] + D[13] +
700 D[12] + D[11] + D[10] + D[9] + D[8] + D[7] +
701 D[6] + D[5] + D[4] + D[3] + D[2] + D[1] +
702 D[0] + C[0] + C[1] + C[2] + C[3] + C[4] +
703 C[5] + C[6] + C[7] + C[12] + C[13] + C[14] +
706 myCRC[1] = ( D[63] + D[62] + D[61] + D[56] + D[55] + D[54] +
707 D[53] + D[52] + D[51] + D[50] + D[49] + D[48] +
708 D[47] + D[46] + D[44] + D[42] + D[41] + D[40] +
709 D[39] + D[38] + D[37] + D[36] + D[35] + D[34] +
710 D[33] + D[32] + D[31] + D[28] + D[27] + D[26] +
711 D[25] + D[24] + D[23] + D[22] + D[21] + D[20] +
712 D[19] + D[18] + D[17] + D[16] + D[14] + D[13] +
713 D[12] + D[11] + D[10] + D[9] + D[8] + D[7] +
714 D[6] + D[5] + D[4] + D[3] + D[2] + D[1] +
715 C[0] + C[1] + C[2] + C[3] + C[4] + C[5] +
716 C[6] + C[7] + C[8] + C[13] + C[14] + C[15] )%2;
718 myCRC[2] = ( D[61] + D[60] + D[57] + D[56] + D[46] + D[42] +
719 D[31] + D[30] + D[29] + D[28] + D[16] + D[14] +
720 D[1] + D[0] + C[8] + C[9] + C[12] + C[13] )%2;
722 myCRC[3] = ( D[62] + D[61] + D[58] + D[57] + D[47] + D[43] +
723 D[32] + D[31] + D[30] + D[29] + D[17] + D[15] +
724 D[2] + D[1] + C[9] + C[10] + C[13] + C[14] )%2;
726 myCRC[4] = ( D[63] + D[62] + D[59] + D[58] + D[48] + D[44] +
727 D[33] + D[32] + D[31] + D[30] + D[18] + D[16] +
728 D[3] + D[2] + C[0] + C[10] + C[11] + C[14] +
731 myCRC[5] = ( D[63] + D[60] + D[59] + D[49] + D[45] + D[34] +
732 D[33] + D[32] + D[31] + D[19] + D[17] + D[4] +
733 D[3] + C[1] + C[11] + C[12] + C[15] )%2;
735 myCRC[6] = ( D[61] + D[60] + D[50] + D[46] + D[35] + D[34] +
736 D[33] + D[32] + D[20] + D[18] + D[5] + D[4] +
737 C[2] + C[12] + C[13] )%2;
739 myCRC[7] = ( D[62] + D[61] + D[51] + D[47] + D[36] + D[35] +
740 D[34] + D[33] + D[21] + D[19] + D[6] + D[5] +
741 C[3] + C[13] + C[14] )%2;
743 myCRC[8] = ( D[63] + D[62] + D[52] + D[48] + D[37] + D[36] +
744 D[35] + D[34] + D[22] + D[20] + D[7] + D[6] +
745 C[0] + C[4] + C[14] + C[15] )%2;
747 myCRC[9] = ( D[63] + D[53] + D[49] + D[38] + D[37] + D[36] +
748 D[35] + D[23] + D[21] + D[8] + D[7] + C[1] +
751 myCRC[10] = ( D[54] + D[50] + D[39] + D[38] + D[37] + D[36] +
752 D[24] + D[22] + D[9] + D[8] + C[2] + C[6] )%2;
754 myCRC[11] = ( D[55] + D[51] + D[40] + D[39] + D[38] + D[37] +
755 D[25] + D[23] + D[10] + D[9] + C[3] + C[7] )%2;
757 myCRC[12] = ( D[56] + D[52] + D[41] + D[40] + D[39] + D[38] +
758 D[26] + D[24] + D[11] + D[10] + C[4] + C[8] )%2;
760 myCRC[13] = ( D[57] + D[53] + D[42] + D[41] + D[40] + D[39] +
761 D[27] + D[25] + D[12] + D[11] + C[5] + C[9] )%2;
763 myCRC[14] = ( D[58] + D[54] + D[43] + D[42] + D[41] + D[40] +
764 D[28] + D[26] + D[13] + D[12] + C[6] + C[10] )%2;
766 myCRC[15] = ( D[63] + D[62] + D[61] + D[60] + D[59] + D[54] +
767 D[53] + D[52] + D[51] + D[50] + D[49] + D[48] +
768 D[47] + D[46] + D[45] + D[44] + D[42] + D[40] +
769 D[39] + D[38] + D[37] + D[36] + D[35] + D[34] +
770 D[33] + D[32] + D[31] + D[30] + D[29] + D[26] +
771 D[25] + D[24] + D[23] + D[22] + D[21] + D[20] +
772 D[19] + D[18] + D[17] + D[16] + D[15] + D[14] +
773 D[12] + D[11] + D[10] + D[9] + D[8] + D[7] +
774 D[6] + D[5] + D[4] + D[3] + D[2] + D[1] +
775 D[0] + C[0] + C[1] + C[2] + C[3] + C[4] +
776 C[5] + C[6] + C[11] + C[12] + C[13] + C[14] +
780 for (
int i = 0;
i < 16 ; ++
i) { tempC = tempC + ( myCRC[
i] <<
i ); }
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e< void, edm::EventIDconst &, edm::Timestampconst & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
int normBx(int bx_, int bxCnt_)
std::vector< long long int > amcsecmap_
bool getByToken(EDGetToken token, Handle< PROD > &result) const
#define DEFINE_FWK_MODULE(type)
std::vector< std::array< short, 12 > > amcsec_
L1TTwinMuxRawToDigi(const edm::ParameterSet &pset)
Constructor.
int radAngConversion(int radAng_)
void readline(int &lines, long &dataWord)
size_t size() const
Lenght of the data buffer in bytes.
virtual ~L1TTwinMuxRawToDigi()
Destructor.
bool fillRawData(edm::Event &e, L1MuDTChambPhContainer::Phi_Container &phi_data, L1MuDTChambThContainer::The_Container &the_data)
Generate and fill FED raw data for a full event.
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
Abs< T >::type abs(const T &t)
void produce(edm::Event &e, const edm::EventSetup &c)
Produce digis out of raw data.
std::vector< L1MuDTChambPhDigi > Phi_Container
std::vector< L1MuDTChambThDigi > The_Container
std::vector< int > wheels_
edm::EDGetTokenT< FEDRawDataCollection > Raw_token
edm::InputTag DTTM7InputTag_
int benAngConversion(int benAng_)
DecomposeProduct< arg, typename Div::arg > D
void calcCRC(long word, int &myC)
const unsigned char * data() const
Return a const pointer to the beginning of the data buffer.
static unsigned int const shift
volatile std::atomic< bool > shutdown_flag false
void processFed(int twinmuxfed, int wheel, std::array< short, 12 > twinMuxAmcSec, edm::Handle< FEDRawDataCollection > data, L1MuDTChambPhContainer::Phi_Container &phi_data, L1MuDTChambThContainer::The_Container &the_data)