diff --git a/examples/DDCMS/CMakeLists.txt b/examples/DDCMS/CMakeLists.txt index e88a5d51fa4dfe83b6d9278001263c40e571c3a8..6be97acf039367345b1019cfbce45bd5c867ae77 100644 --- a/examples/DDCMS/CMakeLists.txt +++ b/examples/DDCMS/CMakeLists.txt @@ -18,9 +18,10 @@ include ( ${DD4hep_DIR}/cmake/DD4hep.cmake ) #------------------------------------------------------------------------------ dd4hep_configure_output () +# [CLHEP REQUIRED] + dd4hep_package( DDCMS USES [DD4hep REQUIRED COMPONENTS DDCore] - [CLHEP REQUIRED] [ROOT REQUIRED COMPONENTS Geom GenVector] INCLUDE_DIRS include INSTALL_INCLUDES include/DDCMS) diff --git a/examples/DDCMS/data/cms_tracker.xml b/examples/DDCMS/data/cms_tracker.xml index e882e4b62b4eb415e279b66cfdd64718e7273a4e..54d2d99002e302d0d2205acff25ea1945f2d810a 100644 --- a/examples/DDCMS/data/cms_tracker.xml +++ b/examples/DDCMS/data/cms_tracker.xml @@ -7,12 +7,12 @@ <debug_shapes/> <debug_volumes/> - <debug_constants/> <debug_includes/> <debug_namespaces/> <debug_placements/> - <debug_algorithms/> <debug_visattr/> + <debug_algorithms/> + <debug_constants/> --> </debug> <open_geometry/> @@ -23,8 +23,8 @@ <Constant name="world_y" value="5*m"/> <Constant name="world_z" value="5*m"/> <Constant name="fm" value="1e-12*m"/> - <Constant name="Air" value="materials_Air" type="string"/> - <Constant name="Vacuum" value="materials_Vacuum" type="string"/> + <Constant name="Air" value="materials:Air" type="string"/> + <Constant name="Vacuum" value="materials:Vacuum" type="string"/> </ConstantsSection> <ConstantsSection label="servicescylinderb.xml" eval="true"> <Constant name="zero" value="0.0*fm"/> diff --git a/examples/DDCMS/data/pixfwdMaterials.xml b/examples/DDCMS/data/pixfwdMaterials.xml index 6fee50e940a2d4e31d42e92879f890cd23422155..b450254d8c7637f8acb78510c482fd10f22b69a7 100644 --- a/examples/DDCMS/data/pixfwdMaterials.xml +++ b/examples/DDCMS/data/pixfwdMaterials.xml @@ -1,6 +1,6 @@ <?xml version="1.0"?> <DDDefinition xmlns="http://www.cern.ch/cms/DDL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd"> - <MaterialSection label="PixelForwardMaterial.xml"> + <MaterialSection label="pixfwdMaterials.xml"> <CompositeMaterial name="FPix_Alumina" density="3.96*g/cm3" method="mixture by weight" symbol=" "> <MaterialFraction fraction="0.52924272"> <rMaterial name="trackermaterial:T_Aluminium" /> diff --git a/examples/DDCMS/include/DDCMS/DDCMS.h b/examples/DDCMS/include/DDCMS/DDCMS.h index 31e4f69b7fcf9a88428a37505a2b2b55cd5bfc57..81561a0d69d42bee698be4966848a83b8e64eb59 100644 --- a/examples/DDCMS/include/DDCMS/DDCMS.h +++ b/examples/DDCMS/include/DDCMS/DDCMS.h @@ -73,13 +73,16 @@ namespace dd4hep { /// Return the namespace name of a component static std::string ns_name(const std::string& n); template <typename T> T attr(xml_elt_t elt,const xml_tag_t& n) const { - std::string val = real_name(elt.attr<std::string>(n)); + std::string raw = elt.attr<std::string>(n); + std::string val = real_name(raw); elt.setAttr(n,val); return elt.attr<T>(n); } + /// Resolve attribute with name resolution template <typename T> T attr(xml_elt_t elt,const xml_tag_t& n, T default_value) const { if ( elt.hasAttr(n) ) { - std::string val = real_name(elt.attr<std::string>(n)); + std::string raw = elt.attr<std::string>(n); + std::string val = real_name(raw); elt.setAttr(n,val); return elt.attr<T>(n); } @@ -244,4 +247,6 @@ namespace dd4hep { } /* End namespace cms */ } /* End namespace dd4hep */ +#define NAMESPACE_SEP ':' + #endif /* DD4HEP_DDCMS_DDCMS_H */ diff --git a/examples/DDCMS/src/DDCMS.cpp b/examples/DDCMS/src/DDCMS.cpp index f626ada56398cb3913cd2cb943c78f02e6175a66..29390afe51751d97dd6140c9e2df4be4925738ed 100644 --- a/examples/DDCMS/src/DDCMS.cpp +++ b/examples/DDCMS/src/DDCMS.cpp @@ -31,8 +31,6 @@ using namespace std; using namespace dd4hep; using namespace dd4hep::cms; -#define NAMESPACE_SEP '_' - /// Create 3D rotation matrix from angles. Rotation3D dd4hep::cms::make_rotation3D(double thetaX, double phiX, double thetaY, double phiY, @@ -48,10 +46,8 @@ Rotation3D dd4hep::cms::make_rotation3D(double thetaX, double phiX, string dd4hep::cms::detElementName(PlacedVolume pv) { if ( pv.isValid() ) { string nam = pv.name(); - string nnam = nam.substr(nam.find('_')+1); + string nnam = nam.substr(nam.find(NAMESPACE_SEP)+1); return nnam; - //size_t idx = nnam.rfind('_'); - //return idx == string::npos ? nnam : nnam.substr(0,idx); } except("DDCMS","++ Cannot deduce name from invalid PlacedVolume handle!"); return string(); @@ -137,24 +133,21 @@ string Namespace::real_name(const string& v) const { string val = v; while ( (idx=val.find('[')) != string::npos ) { val.erase(idx,1); - idp = val.find(':'); - idq = val.find(']'); + idp = val.find(NAMESPACE_SEP,idx); + idq = val.find(']',idx); val.erase(idq,1); if ( idp == string::npos || idp > idq ) val.insert(idx,name); else if ( idp != string::npos && idp < idq ) val[idp] = NAMESPACE_SEP; } - while ( (idx=val.find(':')) != string::npos ) val[idx]=NAMESPACE_SEP; return val; } /// Return the namespace name of a component string Namespace::ns_name(const string& nam) { size_t idx; - if ( (idx=nam.find(':')) != string::npos ) - return nam.substr(0,idx); - else if ( (idx=nam.find('_')) != string::npos ) + if ( (idx=nam.find(NAMESPACE_SEP)) != string::npos ) return nam.substr(0,idx); return ""; } @@ -162,9 +155,7 @@ string Namespace::ns_name(const string& nam) { /// Strip off the namespace part of a given name string Namespace::obj_name(const string& nam) { size_t idx; - if ( (idx=nam.find(':')) != string::npos ) - return nam.substr(idx+1); - else if ( (idx=nam.find('_')) != string::npos ) + if ( (idx=nam.find(NAMESPACE_SEP)) != string::npos ) return nam.substr(idx+1); return ""; } @@ -205,10 +196,10 @@ const Rotation3D& Namespace::rotation(const string& nam) const { return (*i).second; else if ( nam == "NULL" ) return s_null; - else if ( nam.find("_NULL") == nam.length()-5 ) + else if ( nam.find(":NULL") == nam.length()-5 ) return s_null; string n = nam; - if ( (idx=nam.find(':')) != string::npos ) { + if ( (idx=nam.find(NAMESPACE_SEP)) != string::npos ) { n[idx] = NAMESPACE_SEP; i = context->rotations.find(n); if ( i != context->rotations.end() ) @@ -252,7 +243,7 @@ Volume Namespace::volume(const string& nam, bool exc) const { if ( i != context->volumes.end() ) { return (*i).second; } - if ( (idx=nam.find(':')) != string::npos ) { + if ( (idx=nam.find(NAMESPACE_SEP)) != string::npos ) { string n = nam; n[idx] = NAMESPACE_SEP; i = context->volumes.find(n); @@ -284,7 +275,7 @@ Solid Namespace::solid(const string& nam) const { auto i = context->shapes.find(n); if ( i != context->shapes.end() ) return (*i).second; - if ( (idx=nam.find(':')) != string::npos ) { + if ( (idx=nam.find(NAMESPACE_SEP)) != string::npos ) { n = real_name(nam); n[idx] = NAMESPACE_SEP; i = context->shapes.find(n); diff --git a/examples/DDCMS/src/plugins/DDDefinitions2Objects.cpp b/examples/DDCMS/src/plugins/DDDefinitions2Objects.cpp index 2b7548bfd00266577c39f1bd868e09afa8c9300d..d2552a8c2db89297ff2f26ea45b09f13169fa00a 100644 --- a/examples/DDCMS/src/plugins/DDDefinitions2Objects.cpp +++ b/examples/DDCMS/src/plugins/DDDefinitions2Objects.cpp @@ -328,10 +328,10 @@ template <> void Converter<constant>::operator()(xml_h element) const { if ( idp == string::npos || idp > idq ) val.insert(idx,_ns.name); else if ( idp != string::npos && idp < idq ) - val[idp] = '_'; + val[idp] = NAMESPACE_SEP; idx = val.find('[',idx); } - while ( (idx=val.find(':')) != string::npos ) val[idx]='_'; + //MSF NS while ( (idx=val.find(':')) != string::npos ) val[idx]=NAMESPACE_SEP; printout(_ns.context->debug_constants ? ALWAYS : DEBUG, "Constant","Unresolved: %s -> %s",real.c_str(),val.c_str()); res->allConst[real] = val; @@ -963,9 +963,11 @@ template <> void Converter<algorithm>::operator()(xml_h element) const { return; } try { + size_t idx; SensitiveDetector sd; Segmentation seg; string type = "DDCMS_"+_ns.real_name(name); + while ( (idx=type.find(NAMESPACE_SEP)) != string::npos ) type[idx]='_'; // SensitiveDetector and Segmentation currently are undefined. Let's keep it like this // until we found something better.....