00001 00008 #include <Geometry/DTGeometry/interface/DTGeometry.h> 00009 #include <Geometry/CommonDetUnit/interface/GeomDetUnit.h> 00010 00011 #include <algorithm> 00012 #include <iostream> 00013 00014 DTGeometry::DTGeometry() {} 00015 00016 DTGeometry::~DTGeometry(){ 00017 // delete all the chambers (which will delete the SL which will delete the 00018 // layers) 00019 for (std::vector<DTChamber*>::const_iterator ich=theChambers.begin(); 00020 ich!=theChambers.end(); ++ich) delete (*ich); 00021 } 00022 00023 const DTGeometry::DetTypeContainer& DTGeometry::detTypes() const{ 00024 // FIXME - fill it at runtime 00025 return theDetTypes; 00026 } 00027 00028 00029 void DTGeometry::add(DTChamber* ch) { 00030 theDets.push_back(ch); 00031 theChambers.push_back(ch); 00032 theMap.insert(DTDetMap::value_type(ch->geographicalId(),ch)); 00033 } 00034 00035 00036 void DTGeometry::add(DTSuperLayer* sl) { 00037 theDets.push_back(sl); 00038 theSuperLayers.push_back(sl); 00039 theMap.insert(DTDetMap::value_type(sl->geographicalId(),sl)); 00040 } 00041 00042 00043 void DTGeometry::add(DTLayer* l) { 00044 theDetUnits.push_back(l); 00045 theDets.push_back(l); 00046 theLayers.push_back(l); 00047 theMap.insert(DTDetMap::value_type(l->geographicalId(),l)); 00048 } 00049 00050 00051 const DTGeometry::DetUnitContainer& DTGeometry::detUnits() const{ 00052 return theDetUnits; 00053 } 00054 00055 00056 const DTGeometry::DetContainer& DTGeometry::dets() const{ 00057 return theDets; 00058 } 00059 00060 00061 const DTGeometry::DetIdContainer& DTGeometry::detUnitIds() const{ 00062 // FIXME - fill it at runtime 00063 return theDetUnitIds; 00064 } 00065 00066 00067 const DTGeometry::DetIdContainer& DTGeometry::detIds() const{ 00068 // FIXME - fill it at runtime 00069 return theDetIds; 00070 } 00071 00072 00073 const GeomDetUnit* DTGeometry::idToDetUnit(DetId id) const{ 00074 return dynamic_cast<const GeomDetUnit*>(idToDet(id)); 00075 } 00076 00077 00078 const GeomDet* DTGeometry::idToDet(DetId id) const{ 00079 // Strip away wire#, if any! 00080 DTLayerId lId(id.rawId()); 00081 DTDetMap::const_iterator i = theMap.find(lId); 00082 return (i != theMap.end()) ? 00083 i->second : 0 ; 00084 } 00085 00086 00087 const std::vector<DTChamber*>& DTGeometry::chambers() const{ 00088 return theChambers; 00089 } 00090 00091 00092 const std::vector<DTSuperLayer*>& DTGeometry::superLayers() const{ 00093 return theSuperLayers; 00094 } 00095 00096 00097 const std::vector<DTLayer*>& DTGeometry::layers() const{ 00098 return theLayers; 00099 } 00100 00101 00102 const DTChamber* DTGeometry::chamber(DTChamberId id) const { 00103 return (const DTChamber*)(idToDet(id)); 00104 } 00105 00106 00107 const DTSuperLayer* DTGeometry::superLayer(DTSuperLayerId id) const { 00108 return (const DTSuperLayer*)(idToDet(id)); 00109 } 00110 00111 00112 const DTLayer* DTGeometry::layer(DTLayerId id) const { 00113 return (const DTLayer*)(idToDet(id)); 00114 }