00001 #include <typeinfo> 00002 00003 #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" 00004 #include "Geometry/CommonDetUnit/interface/GeomDetUnit.h" 00005 #include "Geometry/CommonDetUnit/interface/GeomDetType.h" 00006 #include "FWCore/MessageLogger/interface/MessageLogger.h" 00007 00008 #include "DataFormats/SiStripDetId/interface/StripSubdetector.h" 00009 #include "DataFormats/SiPixelDetId/interface/PixelSubdetector.h" 00010 #include "DataFormats/DetId/interface/DetId.h" 00011 00012 #include <algorithm> 00013 #include <iostream> 00014 #include <map> 00015 00016 TrackerGeometry::TrackerGeometry(GeometricDet const* gd) : theTrackerDet(gd){} 00017 00018 TrackerGeometry::~TrackerGeometry() { 00019 for (DetContainer::iterator it = theDets.begin(), ed = theDets.end(); it != ed; ++it) delete *it; 00020 for (DetTypeContainer::iterator it = theDetTypes.begin(), ed = theDetTypes.end(); it != ed; ++it) delete *it; 00021 } 00022 00023 GeometricDet const * TrackerGeometry::trackerDet() const { 00024 return theTrackerDet; 00025 } 00026 00027 00028 void TrackerGeometry::addType(GeomDetType* p) { 00029 theDetTypes.push_back(p); // add to vector 00030 } 00031 00032 void TrackerGeometry::addDetUnit(GeomDetUnit* p) { 00033 theDetUnits.push_back(p); // add to vector 00034 theMapUnit.insert(std::make_pair(p->geographicalId().rawId(),p)); 00035 } 00036 00037 void TrackerGeometry::addDetUnitId(DetId p){ 00038 theDetUnitIds.push_back(p); 00039 } 00040 00041 void TrackerGeometry::addDet(GeomDet* p) { 00042 theDets.push_back(p); // add to vector 00043 theMap.insert(std::make_pair(p->geographicalId().rawId(),p)); 00044 DetId id(p->geographicalId()); 00045 switch(id.subdetId()){ 00046 case PixelSubdetector::PixelBarrel: 00047 thePXBDets.push_back(p); 00048 break; 00049 case PixelSubdetector::PixelEndcap: 00050 thePXFDets.push_back(p); 00051 break; 00052 case StripSubdetector::TIB: 00053 theTIBDets.push_back(p); 00054 break; 00055 case StripSubdetector::TID: 00056 theTIDDets.push_back(p); 00057 break; 00058 case StripSubdetector::TOB: 00059 theTOBDets.push_back(p); 00060 break; 00061 case StripSubdetector::TEC: 00062 theTECDets.push_back(p); 00063 break; 00064 default: 00065 edm::LogError("TrackerGeometry")<<"ERROR - I was expecting a Tracker Subdetector, I got a "<<id.subdetId(); 00066 } 00067 00068 00069 } 00070 00071 void TrackerGeometry::addDetId(DetId p){ 00072 theDetIds.push_back(p); 00073 } 00074 00075 const TrackerGeometry::DetUnitContainer& 00076 TrackerGeometry::detUnits() const 00077 { 00078 return theDetUnits; 00079 } 00080 00081 const TrackerGeometry::DetContainer& 00082 TrackerGeometry::dets() const 00083 { 00084 return theDets; 00085 } 00086 00087 const TrackerGeometry::DetContainer& 00088 TrackerGeometry::detsPXB() const 00089 { 00090 return thePXBDets; 00091 } 00092 00093 const TrackerGeometry::DetContainer& 00094 TrackerGeometry::detsPXF() const 00095 { 00096 return thePXFDets; 00097 } 00098 00099 const TrackerGeometry::DetContainer& 00100 TrackerGeometry::detsTIB() const 00101 { 00102 return theTIBDets; 00103 } 00104 00105 const TrackerGeometry::DetContainer& 00106 TrackerGeometry::detsTID() const 00107 { 00108 return theTIDDets; 00109 } 00110 00111 const TrackerGeometry::DetContainer& 00112 TrackerGeometry::detsTOB() const 00113 { 00114 return theTOBDets; 00115 } 00116 00117 const TrackerGeometry::DetContainer& 00118 TrackerGeometry::detsTEC() const 00119 { 00120 return theTECDets; 00121 } 00122 00123 const GeomDetUnit* 00124 TrackerGeometry::idToDetUnit(DetId s)const 00125 { 00126 mapIdToDetUnit::const_iterator p=theMapUnit.find(s.rawId()); 00127 if (p != theMapUnit.end()) 00128 return (p)->second; 00129 edm::LogError("TrackerGeometry")<<"Invalid DetID: no GeomDetUnit associated"; 00130 GeomDetUnit* geom = 0; 00131 return geom; 00132 } 00133 00134 const GeomDet* 00135 TrackerGeometry::idToDet(DetId s)const 00136 { 00137 mapIdToDet::const_iterator p=theMap.find(s.rawId()); 00138 if (p != theMap.end()) 00139 return (p)->second; 00140 edm::LogError("TrackerGeometry")<<"Invalid DetID: no GeomDet associated"; 00141 GeomDet* geom = 0; 00142 return geom; 00143 } 00144 00145 const TrackerGeometry::DetTypeContainer& 00146 TrackerGeometry::detTypes() const 00147 { 00148 return theDetTypes; 00149 } 00150 00151 00152 const TrackerGeometry::DetIdContainer& 00153 TrackerGeometry::detUnitIds() const 00154 { 00155 return theDetUnitIds; 00156 } 00157 00158 const TrackerGeometry::DetIdContainer& 00159 TrackerGeometry::detIds() const 00160 { 00161 return theDetIds; 00162 } 00163 00164