44 m_towerBeg(iConfig.getParameter<int>(
"towerBeg")),
45 m_towerEnd(iConfig.getParameter<int>(
"towerEnd")),
46 m_runOnceBuildCones(
false)
124 using namespace edm::es;
125 boost::shared_ptr<L1RPCConeBuilder> pL1RPCConeBuilder( (
new L1RPCConeBuilder ) );
141 m_ringsMap.begin()->second.compressConnections();
143 pL1RPCConeBuilder->setConeConnectionMap(
m_ringsMap.begin()->second.getConnectionsMap());
145 pL1RPCConeBuilder->setCompressedConeConnectionMap(
146 m_ringsMap.begin()->second.getCompressedConnectionsMap());
150 return pL1RPCConeBuilder;
186 throw cms::Exception(
"RPCInternal") <<
"buildCones called twice \n";
192 boost::shared_ptr<L1RPCConeBuilder::TConMap > uncompressedCons
197 for(TrackingGeometry::DetContainer::const_iterator it = rpcGeom->dets().begin();
198 it != rpcGeom->dets().end();
202 if( dynamic_cast< RPCRoll* >( *it ) == 0 )
continue;
219 RPCStripsRing::TIdToRindMap::iterator it =
m_ringsMap.begin();
226 it->second.filterOverlapingChambers();
227 it->second.fillWithVirtualStrips();
235 if (it->second.isReferenceRing() && (it->second.size() != 1152)){
236 throw cms::Exception(
"RPCInternal") <<
"Problem: refring " << it->first
237 <<
" has " << it->second.size() <<
" strips \n";
247 int sign = key/100 - (key/1000)*10;
258 throw cms::Exception(
"RPCInternal") <<
" Size differs for ring " << key <<
" +- 100 \n";
273 RPCStripsRing::TIdToRindMap::iterator itRef =
m_ringsMap.begin();
279 if (!itRef->second.isReferenceRing())
continue;
281 RPCStripsRing::TIdToRindMap::iterator itOther =
m_ringsMap.begin();
282 for (;itOther !=
m_ringsMap.end(); ++itOther){
284 if (itOther->second.isReferenceRing())
continue;
287 if ( pr.first != -1 ) {
289 newOtherConn.
m_it = itOther;
292 ringsToConnect.push_back(newOtherConn);
300 if (prRef.first == -1){
301 throw cms::Exception(
"RPCConfig") <<
" Cannot determine logplane for reference ring "
302 << itRef->first <<
"\n ";
304 if (prRef.second != 8){
306 throw cms::Exception(
"RPCConfig") <<
" logplaneSize for reference ring "
307 << itRef->first <<
" wrong "
308 <<
" logplane: " << prRef.first
309 <<
" etaPart: " << itRef->second.getEtaPartition()
310 <<
" tower: " << itRef->second.getTowerForRefRing()
311 <<
" hwPlane: " << itRef->second.getHwPlane()
312 <<
" strips " << prRef.second <<
"\n";
315 itRef->second.createRefConnections(ringsToConnect, prRef.first, prRef.second);
344 RPCStripsRing::TIdToRindMap::iterator other){
351 if ( ref->second.getEtaPartition()*other->second.getEtaPartition()<0 )
352 return std::make_pair(-1,0);
371 L1RPCConeDefinition::TRingToTowerVec::const_iterator itRef
374 const L1RPCConeDefinition::TRingToTowerVec::const_iterator itEnd
377 L1RPCConeDefinition::TRingToTowerVec::const_iterator itOther = itRef;
383 for (;itRef != itEnd; ++itRef){
384 if ( itRef->m_etaPart !=
std::abs(ref->second.getEtaPartition())
385 || itRef->m_hwPlane !=
std::abs(ref->second.getHwPlane()-1)
389 refTower = itRef->m_tower;
391 for (;itOther != itEnd; ++itOther){
392 if ( itOther->m_etaPart !=
std::abs(other->second.getEtaPartition())
393 || itOther->m_hwPlane !=
std::abs(other->second.getHwPlane()-1)
396 if (itOther->m_tower == refTower) index = itOther->m_index;
405 <<
"wants to be connected to " << refTowerCnt <<
" towers \n";
412 <<
" is not connected anywhere \n";
466 L1RPCConeDefinition::TRingToLPVec::const_iterator it =
m_L1RPCConeDefinition->getRingToLPVec().begin();
467 L1RPCConeDefinition::TRingToLPVec::const_iterator itEnd =
m_L1RPCConeDefinition->getRingToLPVec().end();
468 for (;it!=itEnd;++it){
470 if (it->m_etaPart !=
std::abs(other->second.getEtaPartition())
471 || it->m_hwPlane !=
std::abs(other->second.getHwPlane()-1)
472 || it->m_index != index)
continue;
483 for (;it!=itEnd;++it){
486 if (it->m_tower !=
std::abs(refTower) || it->m_LP != logplane-1)
continue;
508 return std::make_pair(logplane,lpSize);
edm::ESHandle< RPCGeometry > m_rpcGeometry
depends_on::OneHolder< T, TDependsOnRecord > dependsOn(void(T::*iT)(const TDependsOnRecord &))
RPCConeBuilder(const edm::ParameterSet &)
void geometryCallback(const MuonGeometryRecord &)
std::pair< int, int > areConnected(RPCStripsRing::TIdToRindMap::iterator ref, RPCStripsRing::TIdToRindMap::iterator other)
void setWhatProduced(T *iThis, const es::Label &iLabel=es::Label())
void buildCones(const edm::ESHandle< RPCGeometry > &rpcGeom)
boost::shared_ptr< L1RPCConeBuilder > ReturnType
std::vector< TOtherConnStruct > TOtherConnStructVec
void get(HolderT &iHolder) const
void coneDefCallback(const L1RPCConeDefinitionRcd &)
int m_towerBeg
Returns logplane number for this connection, if not connected returns -1. In second lpSize...
edm::ESHandle< L1RPCConeDefinition > m_L1RPCConeDefinition
RPCStripsRing::TIdToRindMap m_ringsMap
std::map< uint32_t, TStrip2ConVec > TConMap
ReturnType produce(const L1RPCConeBuilderRcd &)
TIdToRindMap::iterator m_it