CMS 3D CMS Logo

TrackerMapDDDtoID.cc

Go to the documentation of this file.
00001 #include "Geometry/TrackerNumberingBuilder/interface/TrackerMapDDDtoID.h"
00002 #include "DetectorDescription/Core/interface/DDExpandedView.h"
00003 #include "DetectorDescription/Core/interface/DDFilteredView.h"
00004 #include "DataFormats/DetId/interface/DetId.h"
00005 #include "CLHEP/Units/SystemOfUnits.h"
00006 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00007 #include<algorithm>
00008 
00009 TrackerMapDDDtoID::TrackerMapDDDtoID(const GeometricDet* iDet) 
00010 {
00011    buildAll(iDet);
00012   //
00013   // loop over all the volumes which hahe a SpecPar called specpar with value value, 
00014   // and save in the map the association nav_type<->id
00015   //
00016 }
00017 
00018 void TrackerMapDDDtoID::buildAll(const GeometricDet* iDet){
00019   edm::LogInfo("TrackerMapDDDtoID")<<" Building the TrackerMapDDDtoID map.";
00020   TrackerMapDDDtoID* me = const_cast<TrackerMapDDDtoID*>(this);
00021   me->buildAllStep2(iDet);
00022 }
00023 
00024 void TrackerMapDDDtoID::buildAllStep2(const GeometricDet* theTracker){
00025   
00026   std::vector<const GeometricDet*> allDetectors=theTracker->deepComponents();
00027   
00028   //
00029   // Also build a map! (for slower access)
00030   //
00031 
00032   for (unsigned int j=0; j<allDetectors.size(); j++){
00033     
00034     path2id_.insert(std::pair<nav_type,uint32_t>(allDetectors[j]->navType(),(allDetectors[j]->geographicalID())()));
00035     revpath2id_.insert(std::pair<uint32_t,nav_type>((allDetectors[j]->geographicalID())(),allDetectors[j]->navType()));
00036     navVec.push_back(allDetectors[j]->navType());
00037   }
00038   edm::LogInfo("TrackerMapDDDtoID")<<"Created TrackerMapDDDtoID; results in "<<allDetectors.size()<<" detectors numbered.";
00039 }
00040 
00041 
00042 unsigned int TrackerMapDDDtoID::id(const DDExpandedView & e) const
00043 {
00044   return id(e.navPos());
00045 }
00046 
00047 
00048 unsigned int TrackerMapDDDtoID::id(const DDFilteredView & f) const
00049 {
00050   return id(f.navPos());
00051 }
00052 
00053 
00054 unsigned int TrackerMapDDDtoID::id(const nav_type & n) const
00055 {
00056   std::map<nav_type,uint32_t>::const_iterator it = path2id_.find(n);
00057   unsigned int result = 0;
00058   if (it != path2id_.end())
00059     result = it->second;
00060   return result;  
00061 }
00062 
00063 
00064 std::vector<TrackerMapDDDtoID::nav_type> TrackerMapDDDtoID::allNavTypes() const{
00065   return navVec;
00066 }
00067 
00068 TrackerMapDDDtoID::nav_type TrackerMapDDDtoID::navType(uint32_t num) const
00069 { 
00070   std::map<uint32_t,nav_type>::const_iterator it = revpath2id_.find(num);
00071   nav_type result;
00072   if (it != revpath2id_.end())
00073     result = it->second;
00074   return result;  
00075 }
00076 
00077 void TrackerMapDDDtoID::clear(){
00078   path2id_.clear();
00079   edm::LogInfo("TrackerMapDDDtoID")<<" TrackerMapDDDtoID maps deleted from memory.";
00080 }

Generated on Tue Jun 9 17:37:34 2009 for CMSSW by  doxygen 1.5.4