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 }