27 debug_( pset.getUntrackedParameter<bool>(
"debug",
false) ),
28 passbc0_( pset.getUntrackedParameter<bool>(
"passbc0",
false) ),
30 DTTM7InputTag_( pset.getParameter<edm::
InputTag>(
"DTTM7_FED_Source") ),
31 feds_( pset.getUntrackedParameter<std::vector<int> >(
"feds", std::vector<int>()) ),
32 wheels_( pset.getUntrackedParameter<std::vector<int> >(
"wheels", std::vector<int>())),
33 amcsecmap_( pset.getUntrackedParameter<std::vector<long long int> >(
"amcsecmap", std::vector<long long int>()))
37 produces<L1MuDTChambPhContainer>();
38 produces<L1MuDTChambThContainer>();
44 throw cms::Exception(
"TwinMux_unpacker") <<
"Configuration file error. Size of \'wheels\' and \'feds\' differs.\n";
47 throw cms::Exception(
"TwinMux_unpacker") <<
"Configuration file error. Size of \'wheels\' and \'amcsecmap\' differs.\n";
49 for (
size_t wh_i = 0; wh_i <
amcsecmap_.size(); ++wh_i){
50 std::array<short, 12> whmap;
51 for (
size_t amc_i = 1; amc_i < 13; ++amc_i ){
52 short shift = (12-amc_i)*4;
73 TM7phi_product->setContainer(phi_data);
74 TM7the_product->setContainer(the_data);
76 e.
put(TM7phi_product);
77 e.
put(TM7the_product);
89 for (
size_t w_i = 0; w_i <
nfeds_; ++w_i ) {
99 int bxNorm_ = bx_ - bxCnt_;
100 if (
abs( bxNorm_ ) < 3000 )
return bxNorm_;
102 if ( bxNorm_ > 0 )
return bxNorm_ - 3564;
103 if ( bxNorm_ < 0 )
return bxNorm_ + 3564;
129 std::array<short, 12> twinMuxAmcSec,
135 std::vector<long> DTTM7WordContainer;
140 std::ostringstream
fname;
141 fname <<
"eventDump_" << twinMuxFed <<
".txt";
142 logfile.open( fname.str() );
146 FEDRawData TM7data = data->FEDData(twinMuxFed);
147 if ( TM7data.
size() == 0 )
return;
159 int TM7fedId = ( dataWord >> 8 ) & 0xFFF;
164 int BOEevTy = ( dataWord >> 60 ) & 0xF;
167 if (
debug_ ) logfile <<
'[' << ++linecounter <<
"]\t"
168 << std::hex << dataWord <<
std::dec <<
"\t|\t"
169 <<
"BOEevTy " << BOEevTy <<
'\t'
170 <<
"TM7fedId " << TM7fedId <<
'\n';
172 if ( (BOEevTy != 0x5) || ( TM7fedId != twinMuxFed ) ) {
175 << twinMuxFed <<
" header "
176 << std::hex << dataWord;
185 std::map<int, int> AMCsizes;
189 int nAMC = ( dataWord >> 52 ) & 0xF;
191 if (
debug_ ) logfile <<
'[' << ++linecounter <<
"]\t" << std::hex
193 <<
"nAMC " << nAMC <<
'\n';
196 for (
int j = 0;
j < nAMC; ++
j ) {
201 int AMCno = (dataWord >> 16 ) & 0xF;
206 if ( (AMCno < 1) || (AMCno > 12) ) {
208 <<
" out of range (1-12)";
212 AMCsizes[AMCno] = ( dataWord >> 32 ) & 0xFFFFFF;
214 if (
debug_ ) logfile <<
'[' << ++linecounter <<
"]\t"
215 << std::hex << dataWord
217 <<
"AMCsizes[" << AMCno <<
"] "
223 std::map<int,int>::iterator AMCiterator = AMCsizes.begin();
224 std::map<int,int>::iterator AMCitend = AMCsizes.end();
225 for ( ; AMCiterator != AMCitend; ++AMCiterator ) {
227 for (
int k=0;
k<AMCiterator->second; ++
k) {
231 DTTM7WordContainer.push_back( dataWord );
242 calcCRC( dataWord & 0xFFFFFFFF0000FFFF, newCRC);
245 int chkEOE = (dataWord >> 60 ) & 0xF;
246 int CRC = ( dataWord >> 16 ) & 0xFFFF;
247 int evtLgth = ( dataWord >> 32 ) & 0xFFFFFF;
249 if ( chkEOE != 0xA ) {
250 edm::LogWarning(
"TwinMux_unpacker") <<
"AMC block closing line " << std::hex << dataWord
251 <<
std::dec <<
" does not start with 0xA";
255 if (
debug_ ) logfile <<
"\tevtLgth " << std::hex
256 << evtLgth <<
"\tCRC " << CRC <<
std::dec <<
'\n';
258 if ( nline != evtLgth ) {
259 edm::LogWarning(
"TwinMux_unpacker") <<
"Number of words read " << std::dec << nline
260 <<
" and event length " << std::dec << evtLgth
265 if ( newCRC != CRC ) {
266 edm::LogWarning(
"TwinMux_unpacker") <<
"Calculated CRC " << std::hex << newCRC
267 <<
" differs from CRC in trailer " << std::hex << CRC;
272 std::vector<long>::iterator DTTM7iterator = DTTM7WordContainer.begin();
273 std::vector<long>::iterator DTTM7itend = DTTM7WordContainer.end();
276 for ( ; DTTM7iterator != DTTM7itend; ++DTTM7iterator ) {
278 dataWord = (*DTTM7iterator);
279 int dataLenght = (dataWord & 0xFFFFF);
280 int bxCounter = (dataWord >> 20 ) & 0xFFF;
281 int event = (dataWord >> 32 ) & 0xFFFFFF;
282 int AMC_ID = (dataWord >> 56 ) & 0xF;
283 int control = (dataWord >> 60 ) & 0xF;
284 int wheel = twinMuxWheel;
286 if( ( AMC_ID < 1 )
or ( AMC_ID > 12 ) ) {
288 <<
" TM7fedId " << TM7fedId
289 <<
" AMC_ID " << AMC_ID;
293 int sector = twinMuxAmcSec[AMC_ID-1];
295 if( ( sector < 1 )
or ( sector > 12 ) ) {
296 if( sector != 15 )
edm::LogWarning(
"TwinMux_unpacker") <<
"%%%%%% VALID AMC_ID POINTS TO SECTOR OUT OF RANGE \n"
297 <<
" TM7fedId " << TM7fedId
298 <<
" AMC_ID " << AMC_ID
299 <<
" wheel " << wheel
300 <<
" sector " << sector;
304 if (
debug_ ) logfile <<
'[' << ++lcounter <<
"]\t"
305 << std::hex << dataWord << std::dec <<
"\t|\t"
306 <<
"AMC_ID " << AMC_ID <<
'\t'
307 <<
"control " << control <<
'\t'
308 <<
"event " <<
event <<
'\t'
309 <<
"bxCounter " << bxCounter <<
'\t'
310 <<
"dataLenght " << dataLenght <<
'\n';
313 if( DTTM7iterator == DTTM7itend ) {
314 edm::LogInfo(
"TwinMux_unpacker") <<
"TRAILING WORD AS A PAYLOAD END in FED "
315 << std::hex << TM7fedId
316 << std::hex << dataWord
317 << std::dec<<
" [it pos "
318 << int(DTTM7iterator - DTTM7itend) <<
" ]";
322 dataWord = (*DTTM7iterator);
323 int boardID = (dataWord & 0xFFFF);
324 int orbit = (dataWord >> 16 ) & 0xFFFF;
326 if ( DTTM7iterator == DTTM7itend ) {
328 <<
" control " << control
329 <<
" event " <<
event
330 <<
" bxCounter " << bxCounter
331 <<
" size " << dataLenght
332 <<
" orbit " << orbit
333 <<
" board " << boardID
334 <<
" AMCsizes " << AMCsizes[AMC_ID]
335 <<
" it pos " << int(DTTM7iterator - DTTM7itend);
339 if (
debug_ ) logfile <<
'[' << ++lcounter <<
"]\t"
340 << std::hex << dataWord
341 << std::dec <<
"\t|\t"
342 <<
" orbit " << orbit
343 <<
" board " << boardID <<
'\n';
345 int AMCsize = AMCsizes[AMC_ID] - 1;
351 for (
int tm7eventsize = 2; tm7eventsize < AMCsize; ++tm7eventsize ) {
354 if ( DTTM7iterator == DTTM7itend ) {
356 edm::LogWarning(
"TwinMux_unpacker") <<
"UNEXPECTED END OF PAYLOAD INSIDE CHAMBER DESCRIPTION"
357 <<
" [it pos " << int(DTTM7iterator - DTTM7itend) <<
" ]" ;
362 long dataWordSub = (*DTTM7iterator);
363 int selector = ( dataWordSub >> 60 ) & 0xF;
365 if ( selector == 0x4 ) {
367 bxID = ( dataWordSub >> 48 ) & 0xFFF;
368 bc0 = ( dataWordSub >> 22 ) & 0x1;
371 logfile <<
'[' << ++lcounter <<
"]\t" << std::hex
372 << dataWordSub <<
'\t' << dataWordSub
373 << std::dec <<
"\t|\t"
374 <<
"bxID " << bxID <<
'\t'
375 <<
"bc0 " << bc0 <<
'\n';
378 bxNr =
normBx(bxID, bxCounter);
382 else if ( selector == 0x1 ) {
384 int mb2_phi = ( dataWordSub & 0xFFF);
385 int mb2_phib = ( dataWordSub >> 12 ) & 0x3FF;
386 int mb2_qual = ( dataWordSub >> 22 ) & 0x7;
387 int mb2_ts2tag = ( dataWordSub >> 26 ) & 0x1;
392 int mb1_phi = ( dataWordSub >> 32 ) & 0xFFF;
393 int mb1_phib = ( dataWordSub >> 44 ) & 0x3FF;
394 int mb1_qual = ( dataWordSub >> 54 ) & 0x7;
395 int mb1_ts2tag = ( dataWordSub >> 58 ) & 0x1;
407 1, mb1_phi_conv, mb1_phib_conv,
408 mb1_qual, mb1_ts2tag, bxCounter ) );
410 2, mb2_phi_conv, mb2_phib_conv,
411 mb2_qual, mb2_ts2tag, bxCounter ) );
413 if (
debug_ ) logfile <<
'[' << ++lcounter <<
"]\t"<< std::hex
414 << dataWordSub << std::dec <<
"\t|\t"
415 <<
"mb1_ts2tag " << mb1_ts2tag <<
'\t'
416 <<
"mb1_qual " << mb1_qual <<
'\t'
417 <<
"mb1_phib " << mb1_phib_conv <<
'\t'
418 <<
"mb1_phi " << mb1_phi_conv <<
'\t'
419 <<
"mb2_ts2tag " << mb2_ts2tag <<
'\t'
420 <<
"mb2_qual " << mb2_qual <<
'\t'
421 <<
"mb2_phib " << mb2_phib_conv <<
'\t'
422 <<
"mb2_phi " << mb2_phi_conv <<
'\n';
425 else if ( selector == 0x2 ) {
427 int mb4_phi = ( dataWordSub & 0xFFF);
428 int mb4_phib = ( dataWordSub >> 12 ) & 0x3FF;
429 int mb4_qual = ( dataWordSub >> 22 ) & 0x7;
430 int mb4_ts2tag = ( dataWordSub >> 26 ) & 0x1;
435 int mb3_phi = ( dataWordSub >> 32 ) & 0xFFF;
436 int mb3_qual = ( dataWordSub >> 54 ) & 0x7;
437 int mb3_ts2tag = ( dataWordSub >> 58 ) & 0x1;
443 int mb3_phib_conv = 0;
451 3, mb3_phi_conv, mb3_phib_conv,
452 mb3_qual, mb3_ts2tag, bxCounter) );
454 4, mb4_phi_conv, mb4_phib_conv,
455 mb4_qual, mb4_ts2tag, bxCounter) );
457 if (
debug_ ) logfile <<
'[' << ++lcounter <<
"]\t"<< std::hex
458 << dataWordSub << std::dec <<
"\t|\t"
459 <<
"mb3_ts2tag " << mb3_ts2tag <<
'\t'
460 <<
"mb3_qual " << mb3_qual <<
'\t'
461 <<
"mb3_phib " << mb3_phib_conv <<
'\t'
462 <<
"mb3_phi " << mb3_phi_conv <<
'\t'
463 <<
"mb4_ts2tag " << mb4_ts2tag <<
'\t'
464 <<
"mb4_qual " << mb4_qual <<
'\t'
465 <<
"mb4_phib " << mb4_phib_conv <<
'\t'
466 <<
"mb4_phi " << mb4_phi_conv <<
'\n';
471 else if ( selector == 0x3 ) {
473 int posALL, posBTI[7];
475 int mb3_eta = ( dataWordSub & 0xFF );
476 int mb3_eta_HQ = ( dataWordSub >> 8 ) & 0xFF;
477 int mb2_eta = ( dataWordSub >> 16 ) & 0xFF;
479 int mb2_eta_HQ = ( dataWordSub >> 32 ) & 0xFF;
480 int mb1_eta = ( dataWordSub >> 40 ) & 0xFF;
481 int mb1_eta_HQ = ( dataWordSub >> 48 ) & 0xFF;
483 if (
debug_ ) logfile <<
'[' << ++lcounter <<
"]\t" << std::hex
484 << dataWordSub << std::dec <<
"\t|\t"
485 <<
"mb1_eta_HQ " << mb1_eta_HQ <<
'\t'
486 <<
"mb1_eta " << mb1_eta <<
'\t'
487 <<
"mb2_eta_HQ " << mb2_eta_HQ <<
'\t'
488 <<
"mb2_eta " << mb2_eta <<
'\t'
489 <<
"mb3_eta_HQ " << mb3_eta_HQ <<
'\t'
490 <<
"mb3_eta " << mb3_eta <<
'\n';
492 posALL = mb1_eta_HQ & 0x7F;
493 posBTI[0] = mb1_eta_HQ & 0x01;
494 posBTI[1] = (mb1_eta_HQ & 0x02)>>1;
495 posBTI[2] = (mb1_eta_HQ & 0x04)>>2;
496 posBTI[3] = (mb1_eta_HQ & 0x08)>>3;
497 posBTI[4] = (mb1_eta_HQ & 0x10)>>4;
498 posBTI[5] = (mb1_eta_HQ & 0x20)>>5;
499 posBTI[6] = (mb1_eta_HQ & 0x40)>>6;
507 posALL = mb2_eta_HQ & 0x7F;
508 posBTI[0] = mb2_eta_HQ & 0x01;
509 posBTI[1] = (mb2_eta_HQ & 0x02)>>1;
510 posBTI[2] = (mb2_eta_HQ & 0x04)>>2;
511 posBTI[3] = (mb2_eta_HQ & 0x08)>>3;
512 posBTI[4] = (mb2_eta_HQ & 0x10)>>4;
513 posBTI[5] = (mb2_eta_HQ & 0x20)>>5;
514 posBTI[6] = (mb2_eta_HQ & 0x40)>>6;
522 posALL = mb3_eta_HQ & 0x7F;
523 posBTI[0] = mb3_eta_HQ & 0x01;
524 posBTI[1] = (mb3_eta_HQ & 0x02)>>1;
525 posBTI[2] = (mb3_eta_HQ & 0x04)>>2;
526 posBTI[3] = (mb3_eta_HQ & 0x08)>>3;
527 posBTI[4] = (mb3_eta_HQ & 0x10)>>4;
528 posBTI[5] = (mb3_eta_HQ & 0x20)>>5;
529 posBTI[6] = (mb3_eta_HQ & 0x40)>>6;
539 else if ( selector == 0xB || selector == 0xC || selector == 0xD ) {
541 if (
debug_ ) logfile <<
'[' << ++lcounter <<
"]\t" << std::hex
542 << dataWordSub << std::dec <<
'\n';
546 else if ( selector == 0xF ) {
548 edm::LogInfo(
"TwinMux_unpacker") <<
"ERROR WORD [" << std::dec << tm7eventsize <<
"] : "
549 << std::hex << dataWordSub << std::dec
550 <<
" it pos " << int(DTTM7iterator - DTTM7itend);
552 if (
debug_ ) logfile <<
'[' << ++lcounter <<
"]\t" << std::hex
553 << dataWordSub << std::dec
554 <<
"\t ERROR WORD\n";
559 edm::LogInfo(
"TwinMux_unpacker") <<
"UNKNOWN WORD received " << std::hex << dataWordSub
560 <<
" in FED " << std::hex << TM7fedId;
562 if (
debug_ ) logfile <<
'[' << ++lcounter <<
"]\t" << std::hex
563 << dataWordSub << std::dec
564 <<
"\t UNKNOWN WORD\n";
567 if( DTTM7iterator == DTTM7itend )
break;
575 if( DTTM7iterator == DTTM7itend )
break;
586 int myCRC[16],
D[64],
C[16];
588 for (
int i = 0;
i < 64; ++
i ) { D[
i] = (word >>
i) & 0x1; }
589 for (
int i = 0;
i < 16; ++
i ) { C[
i] = (myC>>
i) & 0x1; }
591 myCRC[0] = ( D[63] + D[62] + D[61] + D[60] + D[55] + D[54] +
592 D[53] + D[52] + D[51] + D[50] + D[49] + D[48] +
593 D[47] + D[46] + D[45] + D[43] + D[41] + D[40] +
594 D[39] + D[38] + D[37] + D[36] + D[35] + D[34] +
595 D[33] + D[32] + D[31] + D[30] + D[27] + D[26] +
596 D[25] + D[24] + D[23] + D[22] + D[21] + D[20] +
597 D[19] + D[18] + D[17] + D[16] + D[15] + D[13] +
598 D[12] + D[11] + D[10] + D[9] + D[8] + D[7] +
599 D[6] + D[5] + D[4] + D[3] + D[2] + D[1] +
600 D[0] + C[0] + C[1] + C[2] + C[3] + C[4] +
601 C[5] + C[6] + C[7] + C[12] + C[13] + C[14] +
604 myCRC[1] = ( D[63] + D[62] + D[61] + D[56] + D[55] + D[54] +
605 D[53] + D[52] + D[51] + D[50] + D[49] + D[48] +
606 D[47] + D[46] + D[44] + D[42] + D[41] + D[40] +
607 D[39] + D[38] + D[37] + D[36] + D[35] + D[34] +
608 D[33] + D[32] + D[31] + D[28] + D[27] + D[26] +
609 D[25] + D[24] + D[23] + D[22] + D[21] + D[20] +
610 D[19] + D[18] + D[17] + D[16] + D[14] + D[13] +
611 D[12] + D[11] + D[10] + D[9] + D[8] + D[7] +
612 D[6] + D[5] + D[4] + D[3] + D[2] + D[1] +
613 C[0] + C[1] + C[2] + C[3] + C[4] + C[5] +
614 C[6] + C[7] + C[8] + C[13] + C[14] + C[15] )%2;
616 myCRC[2] = ( D[61] + D[60] + D[57] + D[56] + D[46] + D[42] +
617 D[31] + D[30] + D[29] + D[28] + D[16] + D[14] +
618 D[1] + D[0] + C[8] + C[9] + C[12] + C[13] )%2;
620 myCRC[3] = ( D[62] + D[61] + D[58] + D[57] + D[47] + D[43] +
621 D[32] + D[31] + D[30] + D[29] + D[17] + D[15] +
622 D[2] + D[1] + C[9] + C[10] + C[13] + C[14] )%2;
624 myCRC[4] = ( D[63] + D[62] + D[59] + D[58] + D[48] + D[44] +
625 D[33] + D[32] + D[31] + D[30] + D[18] + D[16] +
626 D[3] + D[2] + C[0] + C[10] + C[11] + C[14] +
629 myCRC[5] = ( D[63] + D[60] + D[59] + D[49] + D[45] + D[34] +
630 D[33] + D[32] + D[31] + D[19] + D[17] + D[4] +
631 D[3] + C[1] + C[11] + C[12] + C[15] )%2;
633 myCRC[6] = ( D[61] + D[60] + D[50] + D[46] + D[35] + D[34] +
634 D[33] + D[32] + D[20] + D[18] + D[5] + D[4] +
635 C[2] + C[12] + C[13] )%2;
637 myCRC[7] = ( D[62] + D[61] + D[51] + D[47] + D[36] + D[35] +
638 D[34] + D[33] + D[21] + D[19] + D[6] + D[5] +
639 C[3] + C[13] + C[14] )%2;
641 myCRC[8] = ( D[63] + D[62] + D[52] + D[48] + D[37] + D[36] +
642 D[35] + D[34] + D[22] + D[20] + D[7] + D[6] +
643 C[0] + C[4] + C[14] + C[15] )%2;
645 myCRC[9] = ( D[63] + D[53] + D[49] + D[38] + D[37] + D[36] +
646 D[35] + D[23] + D[21] + D[8] + D[7] + C[1] +
649 myCRC[10] = ( D[54] + D[50] + D[39] + D[38] + D[37] + D[36] +
650 D[24] + D[22] + D[9] + D[8] + C[2] + C[6] )%2;
652 myCRC[11] = ( D[55] + D[51] + D[40] + D[39] + D[38] + D[37] +
653 D[25] + D[23] + D[10] + D[9] + C[3] + C[7] )%2;
655 myCRC[12] = ( D[56] + D[52] + D[41] + D[40] + D[39] + D[38] +
656 D[26] + D[24] + D[11] + D[10] + C[4] + C[8] )%2;
658 myCRC[13] = ( D[57] + D[53] + D[42] + D[41] + D[40] + D[39] +
659 D[27] + D[25] + D[12] + D[11] + C[5] + C[9] )%2;
661 myCRC[14] = ( D[58] + D[54] + D[43] + D[42] + D[41] + D[40] +
662 D[28] + D[26] + D[13] + D[12] + C[6] + C[10] )%2;
664 myCRC[15] = ( D[63] + D[62] + D[61] + D[60] + D[59] + D[54] +
665 D[53] + D[52] + D[51] + D[50] + D[49] + D[48] +
666 D[47] + D[46] + D[45] + D[44] + D[42] + D[40] +
667 D[39] + D[38] + D[37] + D[36] + D[35] + D[34] +
668 D[33] + D[32] + D[31] + D[30] + D[29] + D[26] +
669 D[25] + D[24] + D[23] + D[22] + D[21] + D[20] +
670 D[19] + D[18] + D[17] + D[16] + D[15] + D[14] +
671 D[12] + D[11] + D[10] + D[9] + D[8] + D[7] +
672 D[6] + D[5] + D[4] + D[3] + D[2] + D[1] +
673 D[0] + C[0] + C[1] + C[2] + C[3] + C[4] +
674 C[5] + C[6] + C[11] + C[12] + C[13] + C[14] +
678 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)
char data[epos_bytes_allocation]
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)