10 using namespace sistrip;
18 <<
"[SiStripFecCabling::" << __func__ <<
"]"
19 <<
" Constructing object...";
28 <<
"[SiStripFecCabling::" << __func__ <<
"]"
29 <<
" Building FEC cabling...";
32 const std::vector<uint16_t>& feds = fed_cabling.
feds();
33 std::vector<uint16_t>::const_iterator ifed;
34 for ( ifed = feds.begin(); ifed != feds.end(); ifed++ ) {
37 const std::vector<FedChannelConnection>& conns = fed_cabling.
connections( *ifed );
38 std::vector<FedChannelConnection>::const_iterator iconn;
39 for ( iconn = conns.begin(); iconn != conns.end(); iconn++ ) {
48 for ( std::vector<SiStripFecCrate>::const_iterator icrate = this->
crates().
begin(); icrate != this->
crates().end(); icrate++ ) {
49 for ( std::vector<SiStripFec>::const_iterator ifec = icrate->fecs().begin(); ifec != icrate->fecs().end(); ifec++ ) {
50 for ( std::vector<SiStripRing>::const_iterator iring = ifec->rings().begin(); iring != ifec->rings().end(); iring++ ) {
51 for ( std::vector<SiStripCcu>::const_iterator iccu = iring->ccus().begin(); iccu != iring->ccus().end(); iccu++ ) {
52 for ( std::vector<SiStripModule>::const_iterator imod = iccu->modules().begin(); imod != iccu->modules().end(); imod++ ) {
60 <<
"[SiStripFecCabling::" << __func__ <<
"]"
61 <<
" Finished building FEC cabling";
67 std::vector<SiStripFecCrate>::const_iterator icrate =
crates().begin();
68 while ( icrate !=
crates().
end() && (*icrate).fecCrate() != conn.
fecCrate() ) { icrate++; }
69 if ( icrate ==
crates().end() ) {
80 <<
"[SiStripFecCabling::" << __func__ <<
"]"
81 <<
" Building vector of FedChannelConnection objects...";
83 for ( std::vector<SiStripFecCrate>::const_iterator icrate = this->
crates().
begin(); icrate != this->
crates().end(); icrate++ ) {
84 for ( std::vector<SiStripFec>::const_iterator ifec = icrate->fecs().begin(); ifec != icrate->fecs().end(); ifec++ ) {
85 for ( std::vector<SiStripRing>::const_iterator iring = ifec->rings().begin(); iring != ifec->rings().end(); iring++ ) {
86 for ( std::vector<SiStripCcu>::const_iterator iccu = iring->ccus().begin(); iccu != iring->ccus().end(); iccu++ ) {
87 for ( std::vector<SiStripModule>::const_iterator imod = iccu->modules().begin(); imod != iccu->modules().end(); imod++ ) {
88 for ( uint16_t ipair = 0; ipair < imod->nApvPairs(); ipair++ ) {
94 imod->activeApvPair( imod->lldChannel(ipair) ).
first,
95 imod->activeApvPair( imod->lldChannel(ipair) ).
second,
99 imod->fedCh(ipair).fedId_,
100 imod->fedCh(ipair).fedCh_,
106 uint16_t fed_crate = imod->fedCh(ipair).fedCrate_;
107 uint16_t fed_slot = imod->fedCh(ipair).fedSlot_;
108 conns.back().fedCrate( fed_crate );
109 conns.back().fedSlot( fed_slot );
122 std::stringstream ss;
123 std::vector<SiStripFecCrate>::const_iterator icrate =
crates().begin();
124 while ( icrate !=
crates().
end() && icrate->fecCrate() != conn.
fecCrate() ) { icrate++; }
125 if ( icrate !=
crates().end() ) {
126 std::vector<SiStripFec>::const_iterator ifec = icrate->fecs().begin();
127 while ( ifec != icrate->fecs().end() && ifec->fecSlot() != conn.
fecSlot() ) { ifec++; }
128 if ( ifec != icrate->fecs().end() ) {
129 std::vector<SiStripRing>::const_iterator iring = ifec->rings().begin();
130 while ( iring != ifec->rings().end() && iring->fecRing() != conn.
fecRing() ) { iring++; }
131 if ( iring != ifec->rings().end() ) {
132 std::vector<SiStripCcu>::const_iterator iccu = iring->ccus().begin();
133 while ( iccu != iring->ccus().end() && iccu->ccuAddr() != conn.
ccuAddr() ) { iccu++; }
134 if ( iccu != iring->ccus().end() ) {
135 std::vector<SiStripModule>::const_iterator imod = iccu->modules().begin();
136 while ( imod != iccu->modules().end() && imod->ccuChan() != conn.
ccuChan() ) { imod++; }
137 if ( imod != iccu->modules().end() ) {
140 ss <<
"[SiStripFecCabling::" << __func__ <<
"]"
141 <<
" CCU channel " << conn.
ccuChan()
144 ss <<
"[SiStripFecCabling::" << __func__ <<
"]"
145 <<
" CCU address " << conn.
ccuAddr()
148 ss <<
"[SiStripFecCabling::" << __func__ <<
"]"
149 <<
" FEC ring " << conn.
fecRing()
152 ss <<
"[SiStripFecCabling::" << __func__ <<
"]"
153 <<
" FEC slot " << conn.
fecSlot()
156 ss <<
"[SiStripFecCabling::" << __func__ <<
"]"
170 for ( std::vector<SiStripFecCrate>::const_iterator icrate = this->
crates().
begin(); icrate != this->
crates().end(); icrate++ ) {
171 for ( std::vector<SiStripFec>::const_iterator ifec = icrate->fecs().begin(); ifec != icrate->fecs().end(); ifec++ ) {
172 for ( std::vector<SiStripRing>::const_iterator iring = ifec->rings().begin(); iring != ifec->rings().end(); iring++ ) {
173 for ( std::vector<SiStripCcu>::const_iterator iccu = iring->ccus().begin(); iccu != iring->ccus().end(); iccu++ ) {
174 for ( std::vector<SiStripModule>::const_iterator imod = iccu->modules().begin(); imod != iccu->modules().end(); imod++ ) {
175 if ( (*imod).dcuId() == dcu_id ) {
return *imod; }
192 std::vector<uint16_t> fed_crates;
193 std::vector<uint16_t> fed_slots;
194 std::vector<uint16_t> fed_ids;
195 for ( std::vector<SiStripFecCrate>::const_iterator icrate = this->
crates().
begin(); icrate != this->
crates().end(); icrate++ ) {
196 for ( std::vector<SiStripFec>::const_iterator ifec = icrate->fecs().begin(); ifec != icrate->fecs().end(); ifec++ ) {
197 for ( std::vector<SiStripRing>::const_iterator iring = ifec->rings().begin(); iring != ifec->rings().end(); iring++ ) {
198 for ( std::vector<SiStripCcu>::const_iterator iccu = iring->ccus().begin(); iccu != iring->ccus().end(); iccu++ ) {
199 for ( std::vector<SiStripModule>::const_iterator imod = iccu->modules().begin(); imod != iccu->modules().end(); imod++ ) {
202 if ( imod->activeApv(32) ) { num_of_devices.
nApvs_++; }
203 if ( imod->activeApv(33) ) { num_of_devices.
nApvs_++; }
204 if ( imod->activeApv(34) ) { num_of_devices.
nApvs_++; }
205 if ( imod->activeApv(35) ) { num_of_devices.
nApvs_++; }
206 if ( imod->activeApv(36) ) { num_of_devices.
nApvs_++; }
207 if ( imod->activeApv(37) ) { num_of_devices.
nApvs_++; }
208 if ( imod->dcuId() ) { num_of_devices.
nDcuIds_++; }
209 if ( imod->detId() ) { num_of_devices.
nDetIds_++; }
212 num_of_devices.
nApvPairs_ += imod->nApvPairs();
213 if ( imod->nApvPairs() == 0 ) { num_of_devices.
nApvPairs0_++; }
214 else if ( imod->nApvPairs() == 1 ) { num_of_devices.
nApvPairs1_++; }
215 else if ( imod->nApvPairs() == 2 ) { num_of_devices.
nApvPairs2_++; }
216 else if ( imod->nApvPairs() == 3 ) { num_of_devices.
nApvPairs3_++; }
220 for ( uint16_t ipair = 0; ipair < imod->nApvPairs(); ipair++ ) {
222 uint16_t fed_crate = imod->fedCh(ipair).fedCrate_;
223 uint16_t fed_slot = imod->fedCh(ipair).fedSlot_;
224 uint16_t fed_id = imod->fedCh(ipair).fedId_;
230 std::vector<uint16_t>::iterator icrate =
find( fed_crates.begin(), fed_crates.end(), fed_crate );
231 if ( icrate == fed_crates.end() ) {
233 fed_crates.push_back(fed_crate);
236 std::vector<uint16_t>::iterator islot =
find( fed_slots.begin(), fed_slots.end(), fed_slot );
237 if ( islot == fed_slots.end() ) {
239 fed_slots.push_back(fed_slot);
242 std::vector<uint16_t>::iterator ifed =
find( fed_ids.begin(), fed_ids.end(), fed_id );
243 if ( ifed == fed_ids.end() ) {
245 fed_ids.push_back(fed_id);
253 if ( imod->dcu() ) { num_of_devices.
nDcus_++; }
254 if ( imod->mux() ) { num_of_devices.
nMuxes_++; }
255 if ( imod->pll() ) { num_of_devices.
nPlls_++; }
256 if ( imod->lld() ) { num_of_devices.
nLlds_++; }
270 return num_of_devices;
279 ss <<
"[SiStripFecCabling::" << __func__ <<
"] Printing FEC cabling:" << std::endl;
280 ss <<
"Printing cabling for " <<
crates().size() <<
" crates" << std::endl;
281 for ( std::vector<SiStripFecCrate>::const_iterator icrate =
crates().
begin(); icrate !=
crates().end(); icrate++ ) {
282 ss <<
"Printing cabling for " << icrate->fecs().size() <<
" FECs for crate " << icrate->fecCrate() << std::endl;
283 for ( std::vector<SiStripFec>::const_iterator ifec = icrate->fecs().begin(); ifec != icrate->fecs().end(); ifec++ ) {
284 ss <<
"Printing cabling for " << ifec->rings().size() <<
" rings for FEC " << ifec->fecSlot() << std::endl;
285 for ( std::vector<SiStripRing>::const_iterator iring = ifec->rings().begin(); iring != ifec->rings().end(); iring++ ) {
286 ss <<
"Printing cabling for " << iring->ccus().size() <<
" CCUs for ring " << iring->fecRing() << std::endl;
287 for ( std::vector<SiStripCcu>::const_iterator iccu = iring->ccus().begin(); iccu != iring->ccus().end(); iccu++ ) {
288 ss <<
"Printing cabling for " << iccu->modules().size() <<
" modules for CCU " << iccu->ccuAddr() << std::endl;
289 for ( std::vector<SiStripModule>::const_iterator imod = iccu->modules().begin(); imod != iccu->modules().end(); imod++ ) {
292 SiStripModule::FedCabling::const_iterator
ii = conns.begin();
293 SiStripModule::FedCabling::const_iterator
jj = conns.end();
294 for ( ; ii !=
jj; ++
ii ) {
299 ss << *imod << std::endl;
305 ss <<
"Number of connected: " << valid << std::endl
306 <<
"Number of connections: " << total << std::endl;
312 ss <<
"[SiStripFecCabling::" << __func__ <<
"] Printing FEC cabling:" << std::endl;
313 for ( std::vector<SiStripFecCrate>::const_iterator icrate =
crates().
begin(); icrate !=
crates().end(); icrate++ ) {
314 for ( std::vector<SiStripFec>::const_iterator ifec = icrate->fecs().begin(); ifec != icrate->fecs().end(); ifec++ ) {
315 for ( std::vector<SiStripRing>::const_iterator iring = ifec->rings().begin(); iring != ifec->rings().end(); iring++ ) {
316 for ( std::vector<SiStripCcu>::const_iterator iccu = iring->ccus().begin(); iccu != iring->ccus().end(); iccu++ ) {
317 for ( std::vector<SiStripModule>::const_iterator imod = iccu->modules().begin(); imod != iccu->modules().end(); imod++ ) {
330 std::stringstream ss;
const uint16_t & fecSlot() const
Device and connection information at the level of a front-end module.
const uint16_t & fecCrate() const
const std::vector< uint16_t > & feds() const
const SiStripModule & module(const FedChannelConnection &conn) const
void addDevices(const FedChannelConnection &conn)
std::vector< SiStripFecCrate > crates_
void terse(std::stringstream &) const
const std::vector< SiStripFecCrate > & crates() const
std::ostream & operator<<(std::ostream &out, const ALILine &li)
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
U second(std::pair< T, U > const &p)
static const char mlCabling_[]
const uint16_t & fecRing() const
void connections(std::vector< FedChannelConnection > &) const
Class containning control, module, detector and connection information, at the level of a FED channel...
const uint16_t & ccuChan() const
void print(std::stringstream &) const
const uint16_t & ccuAddr() const
void buildFecCabling(const SiStripFedCabling &)
Simple container class for counting devices.
static const uint16_t invalid_
Contains cabling info at the device level, including DetId, APV pair numbers, hardware addresses...
void addDevices(const FedChannelConnection &conn)
std::map< uint16_t, FedChannel > FedCabling
const std::vector< FedChannelConnection > & connections(uint16_t fed_id) const
NumberOfDevices countDevices() const