00001 #ifndef GEOMETRY_ECALGEOMETRYLOADER_H 00002 #define GEOMETRY_ECALGEOMETRYLOADER_H 1 00003 00004 #include "DetectorDescription/Core/interface/DDSolid.h" 00005 #include "Geometry/CaloGeometry/interface/CaloSubdetectorGeometry.h" 00006 00007 #include "DetectorDescription/Core/interface/DDFilter.h" 00008 #include "DetectorDescription/Core/interface/DDFilteredView.h" 00009 00010 #include "CondFormats/Alignment/interface/Alignments.h" 00011 00012 #include "CLHEP/Geometry/Transform3D.h" 00013 #include <string> 00014 #include <vector> 00015 00022 class DDCompactView; 00023 00024 template < class T > 00025 class CaloGeometryLoader 00026 { 00027 public: 00028 00029 typedef std::vector< double > ParmVec ; 00030 00031 typedef boost::shared_ptr< CaloSubdetectorGeometry > PtrType ; 00032 00033 typedef CaloSubdetectorGeometry::ParVec ParVec ; 00034 typedef CaloSubdetectorGeometry::ParVecVec ParVecVec ; 00035 00036 CaloGeometryLoader< T >() ; 00037 00038 virtual ~CaloGeometryLoader< T >() {} 00039 00040 PtrType load( const DDCompactView* cpv, 00041 const Alignments* alignments = 0 ) ; 00042 00043 private: 00044 00045 unsigned int whichTransform( const DetId& id ) const ; 00046 00047 void makeGeometry( const DDCompactView* cpv , 00048 T* geom , 00049 const Alignments* alignments ) ; 00050 00051 void fillNamedParams( DDFilteredView fv, 00052 T* geom ) ; 00053 00054 void fillGeom( T* geom , 00055 const ParmVec& pv , 00056 const HepTransform3D& tr , 00057 const DetId& id ) ; 00058 00059 void extraStuff( T* geom ) ; 00060 00061 unsigned int getDetIdForDDDNode( const DDFilteredView& fv ) ; 00062 00063 typename T::NumberingScheme m_scheme; 00064 DDSpecificsFilter m_filter; 00065 }; 00066 00067 #endif