18 using namespace sistrip;
27 findingRecord<SiStripFedCablingRcd>();
30 <<
"[SiStripFedCablingBuilderFromDb::" << __func__ <<
"]"
31 <<
" Constructing object...";
38 <<
"[SiStripFedCablingBuilderFromDb::" << __func__ <<
"]"
39 <<
" CablingSource configurable set to \"" << source <<
"\""
40 <<
". CablingSource member data set to: \""
48 <<
"[SiStripFedCablingBuilderFromDb::" << __func__ <<
"]"
49 <<
" Destructing object...";
56 <<
"[SiStripFedCablingBuilderFromDb::" << __func__ <<
"]"
57 <<
" Constructing FED cabling...";
68 <<
"[SiStripFedCablingBuilderFromDb::" << __func__ <<
"]"
69 <<
" Pointer to SiStripConfigDb: 0x"
70 << std::setw(8) << std::setfill(
'0')
71 << std::hex <<
db_ << std::dec;
74 <<
"[SiStripFedCablingBuilderFromDb::" << __func__ <<
"]"
75 <<
" NULL pointer to SiStripConfigDb returned by DB \"service\"!"
76 <<
" Cannot build FED cabling object!";
103 <<
"[SiStripFedCablingBuilderFromDb::" << __func__ <<
"]"
104 <<
" NULL pointers to DeviceFactory and DatabaseCache returned by SiStripConfigDb!"
105 <<
" Cannot build FED cabling object!";
124 <<
"[SiStripFedCablingBuilderFromDb::" << __func__ <<
"]"
125 <<
" Unexpected value for CablingSource: \""
127 <<
"\" Querying DB in order to build cabling from one of connections, devices or DetIds...";
134 <<
"[SiStripFedCablingBuilderFromDb::" << __func__ <<
"]"
135 <<
" Cannot build SiStripFecCabling object!"
136 <<
" sistrip::CablingSource has value: "
144 std::stringstream ss;
145 ss <<
"[SiStripFedCablingBuilderFromDb::" << __func__ <<
"]"
146 <<
" Built SiStripFecCabling object with following devices:"
157 <<
"[SiStripFedCablingBuilderFromDb::" << __func__ <<
"]"
158 <<
" Building cabling object...";
166 <<
"[SiStripFedCablingBuilderFromDb::" << __func__ <<
"]"
167 <<
" Cannot build SiStripFecCabling object!"
168 <<
" FedConnections, DeviceDescriptions and DcuDetIds vectors are all empty!";
175 std::stringstream ss;
176 ss <<
"[SiStripFedCablingBuilderFromDb::" << __func__ <<
"]"
177 <<
" Built SiStripFecCabling object with following devices:"
178 << std::endl << devices;
222 <<
"[SiStripFedCablingBuilderFromDb::" << __func__ <<
"]"
223 <<
" Building FEC cabling from FED connections descriptions...";
232 if ( conns.empty() ) {
234 <<
"[SiStripFedCablingBuilderFromDb::" << __func__ <<
"]"
235 <<
" Unable to build FEC cabling!"
236 <<
" No entries in FedConnections vector!";
243 <<
"[SiStripFedCablingBuilderFromDb::" << __func__ <<
"]"
244 <<
" Retrieving DCU-DetId vector from database...";
247 if ( !dcu_detid_vector.empty() ) {
249 <<
"[SiStripFedCablingBuilderFromDb::" << __func__ <<
"]"
250 <<
" Found " << dcu_detid_vector.size()
251 <<
" entries in DCU-DetId vector retrieved from database!";
254 <<
"[SiStripFedCablingBuilderFromDb::" << __func__ <<
"]"
255 <<
" No entries in DCU-DetId vector retrieved from database!";
260 SiStripConfigDb::FedConnectionsV::const_iterator ifed = conns.begin();
261 SiStripConfigDb::FedConnectionsV::const_iterator jfed = conns.end();
262 for ( ; ifed != jfed; ++ifed ) {
266 <<
"[SiStripFedCablingBuilderFromDb::" << __func__ <<
"]"
267 <<
" NULL pointer to FedConnection!";
273 uint16_t fec_slot =
static_cast<uint16_t
>( (*ifed)->getFecSlot() );
275 uint16_t ccu_addr =
static_cast<uint16_t
>( (*ifed)->getCcuAddress() );
276 uint16_t ccu_chan =
static_cast<uint16_t
>( (*ifed)->getI2cChannel() );
277 uint16_t apv0 =
static_cast<uint16_t
>( (*ifed)->getApvAddress() );
278 uint16_t apv1 = apv0 + 1;
279 uint32_t dcu_id =
static_cast<uint32_t
>( (*ifed)->getDcuHardId() );
282 uint16_t fed_id =
static_cast<uint16_t
>( (*ifed)->getFedId() );
283 uint16_t fed_ch =
static_cast<uint16_t
>( (*ifed)->getFedChannel() );
288 dcu_id, det_id, npairs,
294 fed_crate =
static_cast<uint16_t
>( (*ifed)->getFedCrateId() );
295 fed_slot =
static_cast<uint16_t
>( (*ifed)->getFedSlot() );
355 <<
"[SiStripFedCablingBuilderFromDb::" << __func__ <<
"]"
356 <<
" Building FEC cabling object from device descriptions...";
365 <<
"[SiStripFedCablingBuilderFromDb::" << __func__ <<
"]"
366 <<
" Retrieving APV descriptions from database...";
368 if ( !apv_desc.empty() ) {
370 <<
"[SiStripFedCablingBuilderFromDb::" << __func__ <<
"]"
371 <<
" Retrieved " << apv_desc.size()
372 <<
" APV descriptions from database!";
375 <<
"[SiStripFedCablingBuilderFromDb::" << __func__ <<
"]"
376 <<
" Unable to build FEC cabling!"
377 <<
" No APV descriptions found!";
384 <<
"[SiStripFedCablingBuilderFromDb::" << __func__ <<
"]"
385 <<
" Retrieving DCU descriptions from database...";
388 if ( !dcu_desc.empty() ) {
392 SiStripConfigDb::DeviceDescriptionsV::const_iterator idcu;
393 for ( idcu = dcu_desc.begin(); idcu != dcu_desc.end(); idcu++ ) {
394 dcuDescription* dcu =
dynamic_cast<dcuDescription*
>( *idcu );
395 if ( !dcu ) {
continue; }
396 if ( dcu->getDcuType() ==
"FEH" ) { feh++; }
401 <<
"[SiStripFedCablingBuilderFromDb::" << __func__ <<
"]"
402 <<
" Retrieved " << feh
403 <<
" DCU-FEH descriptions from database!"
404 <<
" (and a further " << ccu <<
" DCUs for CCU modules, etc...)";
408 <<
"[SiStripFedCablingBuilderFromDb::" << __func__ <<
"]"
409 <<
" No DCU descriptions found!";
416 <<
"[SiStripFedCablingBuilderFromDb::" << __func__ <<
"]"
417 <<
" Retrieving DCU-DetId vector from database...";
420 if ( !dcu_detid_vector.empty() ) {
422 <<
"[SiStripFedCablingBuilderFromDb::" << __func__ <<
"]"
423 <<
" Found " << dcu_detid_vector.size()
424 <<
" entries in DCU-DetId vector retrieved from database!";
427 <<
"[SiStripFedCablingBuilderFromDb::" << __func__ <<
"]"
428 <<
" No entries in DCU-DetId vector retrieved from database!";
434 <<
"[SiStripFedCablingBuilderFromDb::" << __func__ <<
"]"
435 <<
" Retrieving FED ids from database...";
438 if ( !fed_ids.empty() ) {
440 <<
"[SiStripFedCablingBuilderFromDb::" << __func__ <<
"]"
441 <<
" Retrieved " << fed_ids.size()
442 <<
" FED ids from database!";
445 <<
"[SiStripFedCablingBuilderFromDb::" << __func__ <<
"]"
446 <<
" No FED ids found!";
452 <<
"[SiStripFedCablingBuilderFromDb::" << __func__ <<
"]"
453 <<
" Building FEC cabling object from APV and DCU descriptions...";
455 SiStripConfigDb::DeviceDescriptionsV::const_iterator iapv;
456 for ( iapv = apv_desc.begin(); iapv != apv_desc.end(); iapv++ ) {
460 <<
"[SiStripFedCablingBuilderFromDb::" << __func__ <<
"]"
461 <<
" NULL pointer to DeviceDescription (of type APV25)!";
476 SiStripConfigDb::DeviceDescriptionsV::const_iterator idcu;
477 for ( idcu = dcu_desc.begin(); idcu != dcu_desc.end(); idcu++ ) {
481 <<
"[SiStripFedCablingBuilderFromDb::" << __func__ <<
"]"
482 <<
" NULL pointer to DeviceDescription (of type DCU)!";
487 dcuDescription* dcu =
dynamic_cast<dcuDescription*
>( *idcu );
488 if ( !dcu ) {
continue; }
489 if ( dcu->getDcuType() !=
"FEH" ) {
continue; }
496 dcu->getDcuHardId() );
497 fec_cabling.
dcuId( conn );
502 <<
"[SiStripFedCablingBuilderFromDb::" << __func__ <<
"]"
503 <<
" Finished building FEC cabling object from APV and DCU descriptions!";
506 std::stringstream ss1;
507 ss1 <<
"[SiStripFedCablingBuilderFromDb::" << __func__ <<
"]"
508 <<
" Number of devices in FEC cabling object:" << std::endl;
514 std::vector<uint16_t>::const_iterator ifed = fed_ids.begin();
519 std::vector<uint32_t> used_keys;
522 <<
"[SiStripFedCablingBuilderFromDb::" << __func__ <<
"]"
523 <<
" Randomly assigning FED ids/channels to APV pairs in front-end modules...";
525 if ( fed_ids.empty() ) {
527 <<
"[SiStripFedCablingBuilderFromDb::" << __func__ <<
"]"
528 <<
" No FED ids retrieved from database! Unable to cable system!";
531 bool complete =
false;
532 std::vector<SiStripFecCrate>::const_iterator icrate = fec_cabling.
crates().begin();
533 std::vector<SiStripFecCrate>::const_iterator jcrate = fec_cabling.
crates().end();
534 while ( !complete && icrate != jcrate ) {
535 std::vector<SiStripFec>::const_iterator ifec = icrate->fecs().begin();
536 std::vector<SiStripFec>::const_iterator jfec = icrate->fecs().end();
537 while ( !complete && ifec != jfec ) {
538 std::vector<SiStripRing>::const_iterator iring = ifec->rings().begin();
539 std::vector<SiStripRing>::const_iterator jring = ifec->rings().end();
540 while ( !complete && iring != jring ) {
541 std::vector<SiStripCcu>::const_iterator iccu = iring->ccus().begin();
542 std::vector<SiStripCcu>::const_iterator jccu = iring->ccus().end();
543 while ( !complete && iccu != jccu ) {
544 std::vector<SiStripModule>::const_iterator imod = iccu->modules().begin();
545 std::vector<SiStripModule>::const_iterator jmod = iccu->modules().end();
546 while ( !complete && imod != jmod ) {
555 imod->ccuChan() ).
key() );
572 for ( uint16_t ipair = 0; ipair < imod->nApvPairs(); ipair++ ) {
575 if ( ifed == fed_ids.end() ) { fed_ch++; ifed = fed_ids.begin(); }
576 if ( fed_ch == 96 ) {
578 <<
"[SiStripFedCablingBuilderFromDb::" << __func__ <<
"]"
579 <<
" Insufficient FED channels to cable all devices in control system!";
585 pair<uint16_t,uint16_t> addr = imod->activeApvPair( imod->lldChannel(ipair) );
608 std::sort( used_keys.begin(), used_keys.end() );
611 std::stringstream ss2;
612 ss2 <<
"[SiStripFedCablingBuilderFromDb::" << __func__ <<
"]"
613 <<
" Number of devices in FEC cabling object:" << std::endl;
618 <<
"[SiStripFedCablingBuilderFromDb::" << __func__ <<
"]"
619 <<
" Finished randomly assigning FED ids/channels to APV pairs in front-end modules...";
624 <<
"[SiStripFedCablingBuilderFromDb::" << __func__ <<
"]"
625 <<
" Assigning APV pairs in dummy front-end modules to any remaining \"uncabled\" FED ids/channels...";
627 if ( fed_ids.empty() ) {
629 <<
"[SiStripFedCablingBuilderFromDb::" << __func__ <<
"]"
630 <<
" No FED ids retrieved from database! Unable to cable system!";
634 bool complete =
false;
635 while ( !complete ) {
639 if ( ifed == fed_ids.end() ) { fed_ch++; ifed = fed_ids.begin(); }
640 if ( fed_ch == 96 ) {
642 <<
"[SiStripFedCablingBuilderFromDb::" << __func__ <<
"]"
643 <<
" All FED channels are now cabled!";
669 uint16_t fed_crate = (*ifed)/16+1;
670 uint16_t fed_slot = (*ifed)%16+2;
683 <<
"[SiStripFedCablingBuilderFromDb::" << __func__ <<
"]"
684 <<
" Finished assigning APV pairs in dummy front-end modules to any remaining \"uncabled\" FED ids/channels...";
687 std::stringstream ss3;
688 ss3 <<
"[SiStripFedCablingBuilderFromDb::" << __func__ <<
"]"
689 <<
" Number of devices in FEC cabling object:" << std::endl;
740 <<
"[SiStripFedCablingBuilderFromDb::" << __func__ <<
"]"
741 <<
" Building FEC cabling object from DetIds...";
748 uint32_t chans_per_ccu = 10;
749 uint32_t ccus_per_ring = 10;
750 uint32_t rings_per_fec = 8;
751 uint32_t fecs_per_crate = 11;
757 <<
"[SiStripFedCablingBuilderFromDb::" << __func__ <<
"]"
758 <<
" Retrieving DCU-DetId vector from database...";
761 if ( !dcu_detid_vector.empty() ) {
763 <<
"[SiStripFedCablingBuilderFromDb::" << __func__ <<
"]"
764 <<
" Found " << dcu_detid_vector.size()
765 <<
" entries in DCU-DetId vector retrieved from database!";
768 <<
"[SiStripFedCablingBuilderFromDb::" << __func__ <<
"]"
769 <<
" No entries in DCU-DetId vector retrieved from database!"
770 <<
" Unable to build FEC cabling!";
776 uint32_t imodule = 0;
777 SiStripConfigDb::DcuDetIdsV::const_iterator iter;
778 for ( iter = dcu_detid_vector.begin(); iter != dcu_detid_vector.end(); iter++ ) {
780 if ( !(iter->second) ) {
782 <<
"[SiStripFedCablingBuilderFromDb::" << __func__ <<
"]"
783 <<
" NULL pointer to TkDcuInfo!";
787 uint16_t fec_crate = ( imodule / ( chans_per_ccu * ccus_per_ring * rings_per_fec * fecs_per_crate ) ) + 1;
788 uint16_t fec_slot = ( imodule / ( chans_per_ccu * ccus_per_ring * rings_per_fec ) ) % fecs_per_crate + 2;
789 uint16_t fec_ring = ( imodule / ( chans_per_ccu * ccus_per_ring ) ) % rings_per_fec + 1;
790 uint16_t ccu_addr = ( imodule / ( chans_per_ccu) ) % ccus_per_ring + 1;
791 uint16_t ccu_chan = ( imodule ) % chans_per_ccu + 16;
793 uint32_t dcu_id = iter->second->getDcuHardId();
794 uint32_t det_id = iter->second->getDetId();
795 uint16_t npairs = iter->second->getApvNumber()/2;
796 uint16_t length = (uint16_t) iter->second->getFibreLength();
807 if ( !det_id ) { det_id = 0xFFFF + imodule; }
808 if ( !npairs ) { npairs =
rand()/2 ? 2 : 3; }
812 for ( uint16_t ipair = 0; ipair < npairs; ipair++ ) {
813 uint16_t iapv = ( ipair == 1 && npairs == 2 ? 36 : 32 + 2 * ipair ) ;
820 dcu_id, det_id, npairs,
823 true,
true,
true,
true );
832 uint32_t fed_id = 50;
834 for ( vector<SiStripFecCrate>::const_iterator icrate = fec_cabling.
crates().begin(); icrate != fec_cabling.
crates().end(); icrate++ ) {
835 for ( vector<SiStripFec>::const_iterator ifec = icrate->fecs().begin(); ifec != icrate->fecs().end(); ifec++ ) {
836 for ( vector<SiStripRing>::const_iterator iring = ifec->rings().begin(); iring != ifec->rings().end(); iring++ ) {
837 for ( vector<SiStripCcu>::const_iterator iccu = iring->ccus().begin(); iccu != iring->ccus().end(); iccu++ ) {
838 for ( vector<SiStripModule>::const_iterator imod = iccu->modules().begin(); imod != iccu->modules().end(); imod++ ) {
839 if ( 96-fed_ch < imod->nApvPairs() ) { fed_id++; fed_ch = 0; }
840 for ( uint16_t ipair = 0; ipair < imod->nApvPairs(); ipair++ ) {
841 pair<uint16_t,uint16_t> addr = imod->activeApvPair( (*imod).lldChannel(ipair) );
860 std::vector< std::pair<uint32_t,TkDcuInfo*> >
in ) {
866 <<
"[SiStripFedCablingBuilderFromDb::" << __func__ <<
"]"
867 <<
" No entries in DCU-DetId vector!";
873 <<
"[SiStripFedCablingBuilderFromDb::" << __func__ <<
"]"
874 <<
" Assigning DCU ids and DetIds to constructed modules...";
876 uint16_t channels = 0;
882 for ( vector<SiStripFecCrate>::const_iterator icrate = fec_cabling.
crates().begin(); icrate != fec_cabling.
crates().end(); icrate++ ) {
883 for ( vector<SiStripFec>::const_iterator ifec = icrate->fecs().begin(); ifec != icrate->fecs().end(); ifec++ ) {
884 for ( vector<SiStripRing>::const_iterator iring = ifec->rings().begin(); iring != ifec->rings().end(); iring++ ) {
885 for ( vector<SiStripCcu>::const_iterator iccu = iring->ccus().begin(); iccu != iring->ccus().end(); iccu++ ) {
886 for ( vector<SiStripModule>::const_iterator imod = iccu->modules().begin(); imod != iccu->modules().end(); imod++ ) {
894 if ( !module.
dcuId() ) {
900 uint32_t module_key =
path.key();
901 module.
dcuId( module_key );
903 ss <<
"[SiStripFedCablingBuilderFromDb::" << __func__ <<
"]"
904 <<
" Found NULL DcuId! Setting 'dummy' value based control key 0x"
905 << hex << setw(8) << setfill(
'0') << module_key << dec;
911 if ( !module.
detId() ) {
915 SiStripConfigDb::DcuDetIdsV::iterator iter =
in.end();
917 if ( iter !=
in.end() ) {
919 if ( !(iter->second) ) {
921 <<
"[SiStripFedCablingBuilderFromDb::" << __func__ <<
"]"
922 <<
" NULL pointer to TkDcuInfo!";
928 module.
detId( iter->second->getDetId() );
932 uint16_t pairs = iter->second->getApvNumber()/2;
934 if ( pairs == 2 ) { four++; }
935 else if ( pairs == 3 ) { six++; }
942 missing += ( iter->second->getApvNumber()/2 - module.
nApvPairs() );
944 ss1 <<
"[SiStripFedCablingBuilderFromDb::" << __func__ <<
"]" << std::endl
945 <<
" Module with DCU id 0x"
946 << hex << setw(8) << setfill(
'0') << module.
dcuId() << dec
948 << hex << setw(8) << setfill(
'0') << module.
detId() << dec
949 <<
" has unexpected number of APV pairs ("
950 << module.
nApvPairs() <<
")." << std::endl
951 <<
" Some APV pairs may have not been detected by the FEC scan." << std::endl
952 <<
" Setting to value found in static map ("
953 << iter->second->getApvNumber()/2 <<
")...";
955 module.
nApvPairs( iter->second->getApvNumber()/2 );
957 }
else if ( module.
nApvPairs() < iter->second->getApvNumber()/2 ) {
959 missing += ( iter->second->getApvNumber()/2 - module.
nApvPairs() );
961 ss2 <<
"[SiStripFedCablingBuilderFromDb::" << __func__ <<
"]" << std::endl
962 <<
" Module with DCU id 0x"
963 << hex << setw(8) << setfill(
'0') << module.
dcuId() << dec
965 << hex << setw(8) << setfill(
'0') << module.
detId() << dec
966 <<
" has number of APV pairs ("
968 <<
") that does not match value found in DCU-DetId vector ("
969 << iter->second->getApvNumber()/2 <<
")." << std::endl
970 <<
" Some APV pairs may have not been detected by"
971 <<
" the FEC scan or the DCU-DetId vector may be incorrect." << std::endl
972 <<
" Setting to value found in static map ("
973 << iter->second->getApvNumber()/2 <<
")...";
975 module.
nApvPairs( iter->second->getApvNumber()/2 );
982 module.
length( static_cast<uint16_t>( iter->second->getFibreLength() ) );
998 std::stringstream sss;
999 sss <<
"[SiStripFedCablingBuilderFromDb::" << __func__ <<
"]" << std::endl
1000 <<
" Connections in DCU-DetId map : " << channels << std::endl
1001 <<
" 4-APV modules : " << four << std::endl
1002 <<
" 6-APV modules : " << six << std::endl
1003 <<
" Unknown number of APV pairs : " << unknown << std::endl
1004 <<
" Total found APV pairs : " << ( channels -
missing ) << std::endl
1005 <<
" Total missing APV pairs : " << missing << std::endl;
1009 <<
"[SiStripFedCablingBuilderFromDb::" << __func__ <<
"]"
1010 <<
" Finished assigning DCU ids and DetIds to constructed modules...";
1015 <<
"[SiStripFedCablingBuilderFromDb::" << __func__ <<
"]"
1016 <<
" Assigning \"random\" DetIds to modules with DCU ids not found in static table...";
1018 uint32_t
detid = 0x10000;
1019 for ( vector<SiStripFecCrate>::const_iterator icrate = fec_cabling.
crates().begin(); icrate != fec_cabling.
crates().end(); icrate++ ) {
1020 for ( vector<SiStripFec>::const_iterator ifec = icrate->fecs().begin(); ifec != icrate->fecs().end(); ifec++ ) {
1021 for ( vector<SiStripRing>::const_iterator iring = ifec->rings().begin(); iring != ifec->rings().end(); iring++ ) {
1022 for ( vector<SiStripCcu>::const_iterator iccu = iring->ccus().begin(); iccu != iring->ccus().end(); iccu++ ) {
1023 for ( vector<SiStripModule>::const_iterator imod = iccu->modules().begin(); imod != iccu->modules().end(); imod++ ) {
1028 if ( !module.
detId() ) {
1030 SiStripConfigDb::DcuDetIdsV::iterator iter =
in.end();
1032 if ( iter !=
in.end() ) {
1036 SiStripConfigDb::DcuDetIdsV::iterator idcu;
1037 if (
in.empty() ) { idcu =
in.end(); }
1040 while ( idcu !=
in.end() ) {
1041 if ( idcu->second ) {
1042 if ( static_cast<uint32_t>(idcu->second->getApvNumber()) ==
1043 static_cast<uint32_t>(2*module.
nApvPairs()) ) {
break; }
1051 if ( idcu !=
in.end() ) {
1053 if ( !(idcu->second) ) {
1055 <<
"[SiStripFedCablingBuilderFromDb::" << __func__ <<
"]"
1056 <<
" NULL pointer to TkDcuInfo!";
1060 module.
detId( idcu->second->getDetId() );
1064 ss <<
"[SiStripFedCablingBuilderFromDb::" << __func__ <<
"]"
1065 <<
" Did not find module with DCU id 0x"
1066 << hex << setw(8) << setfill(
'0') << module.
dcuId() << dec
1067 <<
" in DCU-DetId vector!" << endl
1068 <<
" Assigned 'random' DetId 0x"
1069 << hex << setw(8) << setfill(
'0') << module.
detId() << dec;
1075 module.
detId( detid );
1080 ss <<
"[SiStripFedCablingBuilderFromDb::" << __func__ <<
"]"
1081 <<
" Did not find module with DCU id 0x"
1082 << hex << setw(8) << setfill(
'0') << module.
dcuId() << dec
1083 <<
" in DCU-DetId vector!"
1084 <<
" Could not assign 'random' DetId as DCU-DetID map is empty!"
1085 <<
" Assigned DetId based on incremented counter, with value 0x"
1086 << hex << setw(8) << setfill(
'0') << module.
detId() << dec;
1088 ss <<
"[SiStripFedCablingBuilderFromDb::" << __func__ <<
"]"
1089 <<
" Did not find module with DCU id 0x"
1090 << hex << setw(8) << setfill(
'0') << module.
dcuId() << dec
1091 <<
" in DCU-DetId vector!"
1092 <<
" Could not assign 'random' DetId as no modules had appropriate number of APV pairs ("
1094 <<
"). Assigned DetId based on incremented counter, with value 0x"
1095 << hex << setw(8) << setfill(
'0') << module.
detId() << dec;
1111 <<
"[SiStripFedCablingBuilderFromDb::" << __func__ <<
"]"
1112 <<
" Finished assigning \"random\" DetIds to modules with DCU ids not found in static table...";
1115 <<
"[SiStripFedCablingBuilderFromDb::" << __func__ <<
"]"
1116 <<
" Assigning \"random\" DetIds to modules with DCU ids not found in static table...";
1120 if ( !
in.empty() ) {
1122 ss <<
"[SiStripFedCablingBuilderFromDb::" << __func__ <<
"]"
1123 <<
" Not all DetIds have been assigned to a DcuId! "
1124 <<
in.size() <<
" DetIds are unassigned!";
1134 vector<FedChannelConnection> conns;
Device and connection information at the level of a front-end module.
static void assignDcuAndDetIds(SiStripFecCabling &, std::vector< std::pair< uint32_t, TkDcuInfo * > >)
T getUntrackedParameter(std::string const &, T const &) const
static uint16_t ccuAddr(const uint16_t &nth_module)
void print(std::stringstream &) const
static uint16_t fecCrate(const uint16_t &nth_module)
DcuDetIds::range DcuDetIdsRange
static void buildFecCablingFromDetIds(SiStripConfigDb *const, SiStripFecCabling &)
DeviceFactory *const deviceFactory(std::string method_name="") const
static const uint32_t invalid32_
static const uint16_t LLD_CHAN_MIN
static const uint16_t LLD_CHAN_MAX
void addDevices(const FedChannelConnection &conn)
static const uint16_t FEC_RING_OFFSET
static const IOVSyncValue & endOfTime()
const std::vector< SiStripFecCrate > & crates() const
SiStripFedCablingBuilderFromDb(const edm::ParameterSet &)
static uint16_t fecSlot(const uint16_t &nth_module)
static uint16_t fecRing(const uint16_t &nth_module)
virtual void setIntervalFor(const edm::eventsetup::EventSetupRecordKey &, const edm::IOVSyncValue &, edm::ValidityInterval &)
const uint16_t & i2cAddr() const
FedConnections::range FedConnectionsRange
const uint32_t & key() const
Utility class that identifies a position within the strip tracker control structure, down to the level of an APV25.
static void getFecCabling(const SiStripFedCabling &in, SiStripFecCabling &out)
static const char mlCabling_[]
virtual SiStripFedCabling * make(const SiStripFedCablingRcd &)
const uint16_t & length() const
void buildFedCabling(const std::vector< FedChannelConnection > &)
static DcuDetIdsV::const_iterator findDcuDetId(DcuDetIdsV::const_iterator begin, DcuDetIdsV::const_iterator end, uint32_t dcu_id)
static const IOVSyncValue & beginOfTime()
void connections(std::vector< FedChannelConnection > &) const
const uint16_t & fedSlot() const
static void buildFecCabling(SiStripConfigDb *const, SiStripFecCabling &, const sistrip::CablingSource &)
Class containning control, module, detector and connection information, at the level of a FED channel...
virtual ~SiStripFedCablingBuilderFromDb()
DeviceDescriptions::range DeviceDescriptionsRange
FedConnectionsRange getFedConnections(std::string partition="")
void dcuId(const FedChannelConnection &conn)
An interface class to the DeviceFactory.
virtual void writeFedCablingToCondDb(const SiStripFedCabling &)
FedIdsRange getFedIds(std::string partition="")
Abstract base class for producer of SiStripFedCabling record.
DeviceAddress deviceAddress(const deviceDescription &)
void buildFecCabling(const SiStripFedCabling &)
Simple container class for counting devices.
DbClient *const databaseCache(std::string method_name="") const
static uint16_t ccuChan(const uint16_t &nth_module)
static void getFedCabling(const SiStripFecCabling &in, SiStripFedCabling &out)
const uint16_t & nApvPairs() const
const uint32_t & dcuId() const
std::vector< DcuDetId > DcuDetIdsV
static const uint16_t invalid_
sistrip::CablingSource source_
const uint32_t & detId() const
Contains cabling info at the device level, including DetId, APV pair numbers, hardware addresses...
const uint16_t & fedCrate() const
boost::iterator_range< FedIds::const_iterator > FedIdsRange
static std::string cablingSource(const sistrip::CablingSource &)
static const uint16_t FEC_CRATE_OFFSET
FedChannel fedCh(const uint16_t &apv_pair_num) const
static void buildFecCablingFromFedConnections(SiStripConfigDb *const, SiStripFecCabling &)
DeviceDescriptionsRange getDeviceDescriptions(std::string partition="")
DcuDetIdsRange getDcuDetIds(std::string partition="")
NumberOfDevices countDevices() const
static void buildFecCablingFromDevices(SiStripConfigDb *const, SiStripFecCabling &)