CMS 3D CMS Logo

RPCConeBuilder Class Reference

Description: <one line="" class="" summary>="">. More...

#include <L1TriggerConfig/RPCConeBuilder/src/RPCConeBuilder.cc>

Inheritance diagram for RPCConeBuilder:

edm::ESProducer edm::ESProxyFactoryProducer edm::eventsetup::DataProxyProvider

List of all members.

Public Types

typedef boost::shared_ptr
< L1RPCConeBuilder
ReturnType

Public Member Functions

void geometryCallback (const MuonGeometryRecord &)
ReturnType produce (const L1RPCConeBuilderRcd &)
 RPCConeBuilder (const edm::ParameterSet &)
 ~RPCConeBuilder ()

Private Member Functions

std::pair< int, intareConnected (RPCStripsRing::TIdToRindMap::iterator ref, RPCStripsRing::TIdToRindMap::iterator other)
void buildCones (const edm::ESHandle< RPCGeometry > &rpcGeom)
void buildConnections ()

Private Attributes

int m_hwPlaneBeg
int m_hwPlaneEnd
L1RPCConeBuilder::TLPSizesInTowers m_LPSizesInTowers
RPCStripsRing::TIdToRindMap m_ringsMap
L1RPCConeBuilder::TRingsToLP m_RingsToLP
L1RPCConeBuilder::TRingsToTowers m_RingsToTowers
int m_rollBeg
int m_rollEnd
int m_towerBeg
 Returns logplane number for this connection, if not connected returns -1. In second lpSize.
int m_towerEnd


Detailed Description

Description: <one line="" class="" summary>="">.

Usage: <usage>

Implementation: <Notes on="" implementation>="">

Definition at line 36 of file RPCConeBuilder.h.


Member Typedef Documentation

typedef boost::shared_ptr<L1RPCConeBuilder> RPCConeBuilder::ReturnType

Definition at line 40 of file RPCConeBuilder.h.


Constructor & Destructor Documentation

RPCConeBuilder::RPCConeBuilder ( const edm::ParameterSet iConfig  ) 

Definition at line 42 of file RPCConeBuilder.cc.

References edm::eventsetup::dependsOn(), geometryCallback(), edm::ParameterSet::getParameter(), i, m_hwPlaneBeg, m_hwPlaneEnd, m_LPSizesInTowers, m_RingsToLP, m_RingsToTowers, m_rollBeg, m_rollEnd, m_towerBeg, m_towerEnd, name, and edm::ESProducer::setWhatProduced().

00042                                                              :
00043       m_towerBeg(iConfig.getParameter<int>("towerBeg")),
00044       m_towerEnd(iConfig.getParameter<int>("towerEnd")),
00045       m_rollBeg(iConfig.getParameter<int>("rollBeg")),
00046       m_rollEnd(iConfig.getParameter<int>("rollEnd")),
00047       m_hwPlaneBeg(iConfig.getParameter<int>("hwPlaneBeg")),
00048       m_hwPlaneEnd(iConfig.getParameter<int>("hwPlaneEnd"))
00049 {
00050    
00051    setWhatProduced(this, dependsOn( &RPCConeBuilder::geometryCallback ));
00052 
00053    for (int i = m_towerBeg; i <= m_towerEnd; ++i){
00054       
00055       std::stringstream name;
00056       name << "lpSizeTower" << i;
00057       
00058       L1RPCConeBuilder::TLogPlaneSize newSizes = 
00059             iConfig.getParameter<std::vector<int> >(name.str().c_str());
00060       
00061       m_LPSizesInTowers.push_back(newSizes);
00062       
00063    }
00064    
00065    for (int roll = m_rollBeg; roll <= m_rollEnd; ++roll){
00066       L1RPCConeBuilder::THWplaneToTower newHwPlToTower;
00067       L1RPCConeBuilder::THWplaneToLP newHWplaneToLP;
00068       for (int hwpl = m_hwPlaneBeg; hwpl <= m_hwPlaneEnd; ++hwpl){
00069          std::stringstream name;
00070          name << "rollConnLP_" << roll << "_" << hwpl;
00071          L1RPCConeBuilder::TTowerList newListLP = 
00072                iConfig.getParameter<std::vector<int> >(name.str().c_str());
00073          newHWplaneToLP.push_back(newListLP);
00074          
00075          
00076          std::stringstream name1;
00077          name1 << "rollConnT_" << roll << "_" << hwpl;
00078          L1RPCConeBuilder::TLPList newListT = 
00079                iConfig.getParameter<std::vector<int> >(name1.str().c_str());
00080          newHwPlToTower.push_back(newListT);
00081       }
00082       m_RingsToTowers.push_back(newHwPlToTower);
00083       m_RingsToLP.push_back(newHWplaneToLP);
00084    }
00085    
00086 }

RPCConeBuilder::~RPCConeBuilder (  )  [inline]

Definition at line 40 of file RPCConeBuilder.h.

00040 {};


Member Function Documentation

std::pair< int, int > RPCConeBuilder::areConnected ( RPCStripsRing::TIdToRindMap::iterator  ref,
RPCStripsRing::TIdToRindMap::iterator  other 
) [private]

Definition at line 295 of file RPCConeBuilder.cc.

References funct::abs(), asciidump::at, Exception, i, index, m_LPSizesInTowers, m_RingsToLP, and m_RingsToTowers.

Referenced by buildConnections().

00296                                                                           {
00297 
00298   int logplane = -1;
00299   
00300   //std::cout << "Checking " << ref->first << " and " << other->first << std::endl;
00301   
00302   // Do not connect  rolls lying on the oposite side of detector
00303   if ( ref->second.getEtaPartition()*other->second.getEtaPartition()<0  )
00304     return std::make_pair(-1,0);  
00305   
00306   
00307   // refRing and otherRing areConnected, if they contribute to the same tower
00308   L1RPCConeBuilder::TTowerList refTowList 
00309         = m_RingsToTowers.at(std::abs(ref->second.getEtaPartition()))
00310                          .at(ref->second.getHwPlane()-1);
00311       
00312 
00313   L1RPCConeBuilder::TTowerList otherTowList 
00314         = m_RingsToTowers.at(std::abs(other->second.getEtaPartition()))
00315                          .at(other->second.getHwPlane()-1);
00316   
00317   int refTower = -1;
00318   
00319   L1RPCConeBuilder::TTowerList::iterator rtlIt = refTowList.begin();
00320   for (; rtlIt != refTowList.end(); ++rtlIt){
00321   
00322      if ( *rtlIt >= 0 && refTower < 0){
00323         refTower = *rtlIt;
00324      }
00325      else if ( *rtlIt >= 0 && refTower >= 0) {
00326       throw cms::Exception("RPCConfig") << " Reference(?) ring "
00327             << ref->first << " "
00328             << "wants to be connected more than one tower: "
00329             << refTower << " "
00330             << *rtlIt << "\n";
00331      
00332      }
00333   
00334   }
00335   
00336   if (refTower < 0) {
00337      throw cms::Exception("RPCConfig") << " Reference(?) ring "
00338            << ref->first
00339            << " is not connected anywhere \n";
00340   }
00341   
00342   L1RPCConeBuilder::TTowerList::iterator otlIt = otherTowList.begin();
00343   
00344   int index = -1, i = 0;
00345   for (; otlIt != otherTowList.end(); ++otlIt){
00346      if (*otlIt == refTower) {
00347         index = i;
00348      }
00349      ++i;
00350   }
00351   
00352   int lpSize = 0;
00353   if (index != -1){
00354      logplane = m_RingsToLP.at(std::abs(other->second.getEtaPartition()))
00355            .at(other->second.getHwPlane()-1)
00356            .at(index);
00357      lpSize = m_LPSizesInTowers.at(refTower).at(logplane-1);
00358      
00359   }
00360   
00361   
00362   /*
00363   if (logplane != -1){
00364     
00365      std::cout << ref->first << " <-> " << other->first 
00366            << " logplane " << logplane
00367            << " lpsize " << lpSize 
00368            << std::endl;
00369                                   }*/
00370   
00371   return std::make_pair(logplane,lpSize);
00372 
00373 }

void RPCConeBuilder::buildCones ( const edm::ESHandle< RPCGeometry > &  rpcGeom  )  [private]

Definition at line 142 of file RPCConeBuilder.cc.

References buildConnections(), Exception, RPCStripsRing::getRingId(), it, getDQMSummary::key, and m_ringsMap.

Referenced by produce().

00142                                                                         {
00143   
00144 
00145   //std::cout << "    ---> buildCones called " << std::endl; 
00146   
00147   // fetch geometricall data
00148   int rolls = 0;
00149   for(TrackingGeometry::DetContainer::const_iterator it = rpcGeom->dets().begin();
00150       it != rpcGeom->dets().end();
00151       ++it)
00152   {
00153   
00154       if( dynamic_cast< RPCRoll* >( *it ) == 0 ) continue;
00155       
00156       ++rolls;
00157       RPCRoll* roll = dynamic_cast< RPCRoll*>( *it );
00158       
00159       int ringId = RPCStripsRing::getRingId(roll);
00160       if ( m_ringsMap.find(ringId)  == m_ringsMap.end() ) {
00161          m_ringsMap[ringId]=RPCStripsRing(roll);
00162       } else {
00163          m_ringsMap[ringId].addRoll(roll);
00164       }
00165       //RPCStripsRing sr(roll);
00166       
00167   }
00168 
00169   //std::cout << " found: " << rolls << " dets" << std::endl;
00170   
00171   RPCStripsRing::TIdToRindMap::iterator it = m_ringsMap.begin();
00172   
00173   // filtermixed strips, fill gaps with virtual strips
00174   for (;it != m_ringsMap.end(); ++it){
00175      
00176     //int before = it->second.size();
00177     
00178     it->second.filterOverlapingChambers();    
00179     it->second.fillWithVirtualStrips();
00180 
00181     
00182     //std::cout << it->first << " " <<  it->second.isReferenceRing() << " " 
00183      //   << before << " -> " 
00184       //  << it->second.size() << std::endl;
00185     
00186     // In reference plane we should have 144*8 = 1152 strips
00187     if (it->second.isReferenceRing() && (it->second.size() != 1152)){
00188       throw cms::Exception("RPCInternal") << "Problem: refring " << it->first 
00189           << " has " << it->second.size() << " strips \n";
00190     }
00191     
00192     
00193   }
00194     
00195   // Xcheck, if rings are symettrical 
00196   it = m_ringsMap.begin();
00197   for (;it != m_ringsMap.end(); ++it){
00198     int key = it->first;
00199     int sign = key/100 - (key/1000)*10;
00200     
00201     if (sign == 0) {
00202       key += 100;
00203     } else {
00204       key -= 100;
00205     }
00206     
00207     if  (key != 2000){// Hey 2100 has no counterring
00208       if (it->second.size() !=  m_ringsMap[key].size())  
00209       {
00210          throw cms::Exception("RPCInternal") << " Size differs for ring " << key << " +- 100 \n";
00211       }
00212     }
00213   
00214   
00215   }
00216       
00217   buildConnections();
00218 }

void RPCConeBuilder::buildConnections (  )  [private]

Definition at line 221 of file RPCConeBuilder.cc.

References areConnected(), Exception, RPCStripsRing::TOtherConnStruct::m_it, RPCStripsRing::TOtherConnStruct::m_logplane, RPCStripsRing::TOtherConnStruct::m_logplaneSize, and m_ringsMap.

Referenced by buildCones().

00221                                      {
00222 
00223 
00224 
00225    RPCStripsRing::TIdToRindMap::iterator itRef = m_ringsMap.begin();
00226    for (;itRef != m_ringsMap.end(); ++itRef){ // iterate over reference rings
00227       
00228       
00229       RPCStripsRing::TOtherConnStructVec ringsToConnect; 
00230       
00231       if (!itRef->second.isReferenceRing()) continue; // iterate over reference rings
00232       
00233       RPCStripsRing::TIdToRindMap::iterator itOther = m_ringsMap.begin();
00234       for (;itOther != m_ringsMap.end(); ++itOther){ // iterate over nonreference rings
00235          
00236          if (itOther->second.isReferenceRing()) continue; // iterate over nonreference rings
00237          
00238          std::pair<int,int> pr = areConnected(itRef, itOther);
00239          if ( pr.first != -1 ) {
00240             RPCStripsRing::TOtherConnStruct newOtherConn;
00241             newOtherConn.m_it = itOther;
00242             newOtherConn.m_logplane = pr.first;
00243             newOtherConn.m_logplaneSize = pr.second;
00244             ringsToConnect.push_back(newOtherConn);
00245          }
00246          
00247          
00248       } // OtherRings iteration ends
00249       
00250       // 
00251       std::pair<int,int> prRef = areConnected(itRef, itRef);
00252       if (prRef.first == -1){
00253         throw cms::Exception("RPCConfig") << " Cannot determine logplane for reference ring "
00254             << itRef->first << "\n ";
00255       }
00256       if (prRef.second != 8){
00257         // XXX        
00258         throw cms::Exception("RPCConfig") << " logplaneSize for reference ring "
00259             << itRef->first << " wrong "
00260             << " logplane: " << prRef.first
00261             << " etaPart: " << itRef->second.getEtaPartition()
00262             << " tower: " << itRef->second.getTowerForRefRing()
00263             << " hwPlane: " << itRef->second.getHwPlane()
00264             << " strips " << prRef.second << "\n";
00265       }
00266       
00267       itRef->second.createRefConnections(ringsToConnect, prRef.first, prRef.second);
00268       
00269    } // RefRings iteration ends
00270 
00271    
00272    // Fetch connection data, and save in one place
00273    /*
00274    RPCStripsRing::TIdToRindMap::iterator it = m_ringsMap.begin();
00275    for (;it != m_ringsMap.end(); ++it) { 
00276      
00277      L1RPCConeBuilder::TConMap nmap = it->second.getConnectionsMap();
00278      L1RPCConeBuilder::TConMap::iterator newMapIt = nmap.begin();
00279      for (; newMapIt != nmap.end(); ++ newMapIt) {
00280        uint32_t raw = newMapIt->first;
00281        TStrip2ConVec stripsVec = newMapIt->second;
00282        TStrip2ConVec::iterator stripIt = stripsVec.first
00283        //unsigned char strip = 
00284      
00285      
00286      }
00287      
00288      
00289   }*/
00290    
00291 }

void RPCConeBuilder::geometryCallback ( const MuonGeometryRecord record  ) 

Definition at line 130 of file RPCConeBuilder.cc.

Referenced by RPCConeBuilder().

00130                                                                        {
00131 
00132   //std::cout << " Geometry callback called " << std::endl; 
00133   
00134   //edm::ESHandle<RPCGeometry> rpcGeom;
00135   //record.get(rpcGeom);
00136   
00137   //buildCones(rpcGeom);
00138   
00139 }

RPCConeBuilder::ReturnType RPCConeBuilder::produce ( const L1RPCConeBuilderRcd iRecord  ) 

Definition at line 97 of file RPCConeBuilder.cc.

References buildCones(), edm::eventsetup::DependentRecordImplementation< RecordT, ListT >::getRecord(), m_LPSizesInTowers, m_ringsMap, m_RingsToLP, m_towerBeg, and m_towerEnd.

00099 {
00100 
00101   
00102    //std::cout << " RPCConeBuilder::produce called " << std::endl;
00103    using namespace edm::es;
00104    boost::shared_ptr<L1RPCConeBuilder> pL1RPCConeBuilder( ( new L1RPCConeBuilder ) );
00105    
00106    pL1RPCConeBuilder->setFirstTower(m_towerBeg);
00107    pL1RPCConeBuilder->setLastTower(m_towerEnd);
00108    
00109    pL1RPCConeBuilder->setLPSizeForTowers(m_LPSizesInTowers);
00110    pL1RPCConeBuilder->setRingsToLP(m_RingsToLP);
00111 
00112    
00113    edm::ESHandle<RPCGeometry> rpcGeom;
00114    iRecord.getRecord<MuonGeometryRecord>().get(rpcGeom);   
00115    
00116    buildCones(rpcGeom);
00117    
00118    // getConnectionsMap() returns reference to static class member, so we are getting all connections
00119    
00120    //std::cout << " conMap has: " << m_ringsMap.begin()->second.getConnectionsMap().size() << " rings" << std::endl;
00121    pL1RPCConeBuilder->setConeConnectionMap(m_ringsMap.begin()->second.getConnectionsMap());
00122       
00123    m_ringsMap.clear(); // free mem
00124       
00125    return pL1RPCConeBuilder;
00126    
00127 }


Member Data Documentation

int RPCConeBuilder::m_hwPlaneBeg [private]

Definition at line 63 of file RPCConeBuilder.h.

Referenced by RPCConeBuilder().

int RPCConeBuilder::m_hwPlaneEnd [private]

Definition at line 64 of file RPCConeBuilder.h.

Referenced by RPCConeBuilder().

L1RPCConeBuilder::TLPSizesInTowers RPCConeBuilder::m_LPSizesInTowers [private]

Definition at line 66 of file RPCConeBuilder.h.

Referenced by areConnected(), produce(), and RPCConeBuilder().

RPCStripsRing::TIdToRindMap RPCConeBuilder::m_ringsMap [private]

Definition at line 70 of file RPCConeBuilder.h.

Referenced by buildCones(), buildConnections(), and produce().

L1RPCConeBuilder::TRingsToLP RPCConeBuilder::m_RingsToLP [private]

Definition at line 68 of file RPCConeBuilder.h.

Referenced by areConnected(), produce(), and RPCConeBuilder().

L1RPCConeBuilder::TRingsToTowers RPCConeBuilder::m_RingsToTowers [private]

Definition at line 67 of file RPCConeBuilder.h.

Referenced by areConnected(), and RPCConeBuilder().

int RPCConeBuilder::m_rollBeg [private]

Definition at line 61 of file RPCConeBuilder.h.

Referenced by RPCConeBuilder().

int RPCConeBuilder::m_rollEnd [private]

Definition at line 62 of file RPCConeBuilder.h.

Referenced by RPCConeBuilder().

int RPCConeBuilder::m_towerBeg [private]

Returns logplane number for this connection, if not connected returns -1. In second lpSize.

Definition at line 59 of file RPCConeBuilder.h.

Referenced by produce(), and RPCConeBuilder().

int RPCConeBuilder::m_towerEnd [private]

Definition at line 60 of file RPCConeBuilder.h.

Referenced by produce(), and RPCConeBuilder().


The documentation for this class was generated from the following files:
Generated on Tue Jun 9 18:30:54 2009 for CMSSW by  doxygen 1.5.4