diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 8410b669f4c8b6bc1dd0da1cbb0fdaa6b245fcc1..0e45a37b9a90a201982dad1e3dd2acec6ca38c87 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -38,12 +38,12 @@ dd4hep_configure_output() #========================================================================== -SET(DD4HEP_BUILD_EXAMPLES "AlignDet CLICSiD ClientTests Conditions DDCMS DDCodex DDDB DDDigi DDG4 DDG4_MySensDet LHeD OpticalSurfaces Persistency SimpleDetector" +SET(DD4HEP_EXAMPLES "AlignDet CLICSiD ClientTests Conditions DDCMS DDCodex DDDB DDDigi DDG4 DDG4_MySensDet LHeD OpticalSurfaces Persistency SimpleDetector" CACHE STRING "List of DD4hep Examples to build") -SEPARATE_ARGUMENTS(DD4HEP_BUILD_EXAMPLES) +SEPARATE_ARGUMENTS(DD4HEP_EXAMPLES) MESSAGE(STATUS "Will be building these examples: ${DD4HEP_BUILD_EXAMPLES}") -FOREACH(DDExample IN LISTS DD4HEP_BUILD_EXAMPLES) +FOREACH(DDExample IN LISTS DD4HEP_EXAMPLES) dd4hep_print("|> Building ${DDExample}") add_subdirectory(${DDExample}) ENDFOREACH() diff --git a/examples/DDCMS/CMakeLists.txt b/examples/DDCMS/CMakeLists.txt index 7fb71f1d46d030a17dfb83a8f493a6e1c6669e31..1750e32970f792a807e60d842705ff4589259109 100644 --- a/examples/DDCMS/CMakeLists.txt +++ b/examples/DDCMS/CMakeLists.txt @@ -45,8 +45,8 @@ else() set(CLHEP CLHEP::CLHEP) endif() # - # +#------------------------------------------------------------------------------- # we only create only library for DDCMS. The whole package is a single component # library. A priory there is no need to seperate the implementation from the # plugins.... diff --git a/examples/DDDB/CMakeLists.txt b/examples/DDDB/CMakeLists.txt index 2cfc21f3e2cc165759fff1efab32db5fa62e7b6a..a9f05e74da4b513a39dae40c0caaccc6cbb38002 100644 --- a/examples/DDDB/CMakeLists.txt +++ b/examples/DDDB/CMakeLists.txt @@ -51,26 +51,30 @@ target_include_directories(DDDB #---DDDB plugin library ------------------------------------------------------- dd4hep_add_plugin(DDDBPlugins SOURCES src/plugins/*.cpp USES DDDB) install(TARGETS DDDB DDDBPlugins LIBRARY DESTINATION lib) +set(DDDB_BIN ${CMAKE_INSTALL_PREFIX}/bin) +set(DDDB_DATA ${CMAKE_INSTALL_PREFIX}/examples/DDDB) #---Package installation procedure(s) ----------------------------------------- install ( PROGRAMS scripts/run_dddb.sh DESTINATION bin) install ( PROGRAMS scripts/display_dddb.sh DESTINATION bin) install ( PROGRAMS scripts/extract_dddb.sh DESTINATION bin) -install ( FILES data/DDDB.tar.gz DESTINATION examples/DDDB) +install ( FILES data/DDDB.tar.gz DESTINATION examples/DDDB) +install ( FILES data/materials.xml DESTINATION examples/DDDB) #---Testing-------------------------------------------------------------------- dd4hep_configure_scripts ( DDDB DEFAULT_SETUP WITH_TESTS ) # #---Testing: Extract DDDB data from zip archive ------------------------------- dd4hep_add_test_reg( DDDB_extract_LONGTEST - COMMAND "${CMAKE_INSTALL_PREFIX}/bin/run_test_DDDB.sh" - EXEC_ARGS ${CMAKE_INSTALL_PREFIX}/bin/extract_dddb.sh + COMMAND "${DDDB_BIN}/run_test_DDDB.sh" + EXEC_ARGS ${DDDB_BIN}/extract_dddb.sh REGEX_PASS "DDDB Database successfully installed." ) # #---Testing: Load the geometry from archive ----------------------------------- dd4hep_add_test_reg( DDDB_load_LONGTEST - COMMAND "${CMAKE_INSTALL_PREFIX}/bin/run_test_DDDB.sh" - EXEC_ARGS ${CMAKE_INSTALL_PREFIX}/bin/run_dddb.sh + COMMAND "${DDDB_BIN}/run_test_DDDB.sh" + EXEC_ARGS ${DDDB_BIN}/run_dddb.sh + -config DD4hep_XMLLoader -arg ${DDDB_DATA}/materials.xml -config DD4hep_ConditionsManagerInstaller DEPENDS DDDB_extract_LONGTEST REGEX_PASS "\\+ Converted 12852 placements" @@ -79,8 +83,9 @@ dd4hep_add_test_reg( DDDB_load_LONGTEST # #---Testing: Load the geometry + conditions from archive ---------------------- dd4hep_add_test_reg( DDDB_conditions_LONGTEST - COMMAND "${CMAKE_INSTALL_PREFIX}/bin/run_test_DDDB.sh" - EXEC_ARGS ${CMAKE_INSTALL_PREFIX}/bin/run_dddb.sh + COMMAND "${DDDB_BIN}/run_test_DDDB.sh" + EXEC_ARGS ${DDDB_BIN}/run_dddb.sh + -config DD4hep_XMLLoader -arg ${DDDB_DATA}/materials.xml -config DD4hep_ConditionsManagerInstaller DEPENDS DDDB_extract_LONGTEST REGEX_PASS "\\+ Converted 9353 conditions" @@ -89,8 +94,9 @@ dd4hep_add_test_reg( DDDB_conditions_LONGTEST # #---Testing: Load the geometry + conditions dump as view from DetElement ------ dd4hep_add_test_reg( DDDB_conditions_dump_simple_LONGTEST - COMMAND "${CMAKE_INSTALL_PREFIX}/bin/run_test_DDDB.sh" - EXEC_ARGS ${CMAKE_INSTALL_PREFIX}/bin/run_dddb.sh + COMMAND "${DDDB_BIN}/run_test_DDDB.sh" + EXEC_ARGS ${DDDB_BIN}/run_dddb.sh + -config DD4hep_XMLLoader -arg ${DDDB_DATA}/materials.xml -config DD4hep_ConditionsManagerInstaller -exec DDDB_ConditionsSummary DEPENDS DDDB_extract_LONGTEST @@ -100,8 +106,9 @@ dd4hep_add_test_reg( DDDB_conditions_dump_simple_LONGTEST # #---Testing: Load the geometry + dump detector elemets ------------------------ dd4hep_add_test_reg( DDDB_det_elements_LONGTEST - COMMAND "${CMAKE_INSTALL_PREFIX}/bin/run_test_DDDB.sh" - EXEC_ARGS ${CMAKE_INSTALL_PREFIX}/bin/run_dddb.sh + COMMAND "${DDDB_BIN}/run_test_DDDB.sh" + EXEC_ARGS ${DDDB_BIN}/run_dddb.sh + -config DD4hep_XMLLoader -arg ${DDDB_DATA}/materials.xml -config DD4hep_ConditionsManagerInstaller -end-plugin -plugin DDDB_DetectorDump -print DEBUG -end-plugin DEPENDS DDDB_extract_LONGTEST @@ -111,8 +118,9 @@ dd4hep_add_test_reg( DDDB_det_elements_LONGTEST # #---Testing: Load the geometry + dump volumes --------------------------------- dd4hep_add_test_reg( DDDB_det_volumes_LONGTEST - COMMAND "${CMAKE_INSTALL_PREFIX}/bin/run_test_DDDB.sh" - EXEC_ARGS ${CMAKE_INSTALL_PREFIX}/bin/run_dddb.sh + COMMAND "${DDDB_BIN}/run_test_DDDB.sh" + EXEC_ARGS ${DDDB_BIN}/run_dddb.sh + -config DD4hep_XMLLoader -arg ${DDDB_DATA}/materials.xml -config DD4hep_ConditionsManagerInstaller -plugin DDDB_DetectorVolumeDump -print DEBUG DEPENDS DDDB_extract_LONGTEST @@ -122,8 +130,9 @@ dd4hep_add_test_reg( DDDB_det_volumes_LONGTEST # #---Testing: Load the geometry + dump condition keys -------------------------- dd4hep_add_test_reg( DDDB_det_conditions_keys_LONGTEST - COMMAND "${CMAKE_INSTALL_PREFIX}/bin/run_test_DDDB.sh" - EXEC_ARGS ${CMAKE_INSTALL_PREFIX}/bin/run_dddb.sh + COMMAND "${DDDB_BIN}/run_test_DDDB.sh" + EXEC_ARGS ${DDDB_BIN}/run_dddb.sh + -config DD4hep_XMLLoader -arg ${DDDB_DATA}/materials.xml -config DD4hep_ConditionsManagerInstaller -plugin DDDB_DetectorConditionKeysDump -print DEBUG DEPENDS DDDB_extract_LONGTEST @@ -133,8 +142,9 @@ dd4hep_add_test_reg( DDDB_det_conditions_keys_LONGTEST # #---Testing: Load the geometry + dump condition keys -------------------------- dd4hep_add_test_reg( DDDB_det_catalog_data_LONGTEST - COMMAND "${CMAKE_INSTALL_PREFIX}/bin/run_test_DDDB.sh" - EXEC_ARGS ${CMAKE_INSTALL_PREFIX}/bin/run_dddb.sh + COMMAND "${DDDB_BIN}/run_test_DDDB.sh" + EXEC_ARGS ${DDDB_BIN}/run_dddb.sh + -config DD4hep_XMLLoader -arg ${DDDB_DATA}/materials.xml -config DD4hep_ConditionsManagerInstaller -plugin DDDB_DetectorConditionDump -print DEBUG DEPENDS DDDB_extract_LONGTEST @@ -144,8 +154,9 @@ dd4hep_add_test_reg( DDDB_det_catalog_data_LONGTEST # #---Testing: Load the geometry + dump condition keys -------------------------- dd4hep_add_test_reg( DDDB_det_catalog_align_LONGTEST - COMMAND "${CMAKE_INSTALL_PREFIX}/bin/run_test_DDDB.sh" - EXEC_ARGS ${CMAKE_INSTALL_PREFIX}/bin/run_dddb.sh + COMMAND "${DDDB_BIN}/run_test_DDDB.sh" + EXEC_ARGS ${DDDB_BIN}/run_dddb.sh + -config DD4hep_XMLLoader -arg ${DDDB_DATA}/materials.xml -config DD4hep_ConditionsManagerInstaller -plugin DDDB_DetectorAlignmentDump -print DEBUG DEPENDS DDDB_extract_LONGTEST @@ -155,8 +166,9 @@ dd4hep_add_test_reg( DDDB_det_catalog_align_LONGTEST # #---Testing: Load the geometry + conditions dump as view from DetElement ------ dd4hep_add_test_reg( DDDB_detelement_conditions_dump_LONGTEST - COMMAND "${CMAKE_INSTALL_PREFIX}/bin/run_test_DDDB.sh" - EXEC_ARGS ${CMAKE_INSTALL_PREFIX}/bin/run_dddb.sh + COMMAND "${DDDB_BIN}/run_test_DDDB.sh" + EXEC_ARGS ${DDDB_BIN}/run_dddb.sh + -config DD4hep_XMLLoader -arg ${DDDB_DATA}/materials.xml -config DD4hep_ConditionsManagerInstaller -plugin DDDB_DetElementConditionDump -print DEBUG DEPENDS DDDB_extract_LONGTEST @@ -165,8 +177,9 @@ dd4hep_add_test_reg( DDDB_detelement_conditions_dump_LONGTEST # #---Testing: Load the geometry + conditions + conditions derives dd4hep_add_test_reg( DDDB_derived_conditions_LONGTEST - COMMAND "${CMAKE_INSTALL_PREFIX}/bin/run_test_DDDB.sh" - EXEC_ARGS ${CMAKE_INSTALL_PREFIX}/bin/run_dddb.sh + COMMAND "${DDDB_BIN}/run_test_DDDB.sh" + EXEC_ARGS ${DDDB_BIN}/run_dddb.sh + -config DD4hep_XMLLoader -arg ${DDDB_DATA}/materials.xml -config DD4hep_ConditionsManagerInstaller -plugin DDDB_DerivedCondTest -print DEBUG DEPENDS DDDB_extract_LONGTEST @@ -176,8 +189,9 @@ dd4hep_add_test_reg( DDDB_derived_conditions_LONGTEST # #---Testing: Load the geometry + conditions + run basic derived alignments test dd4hep_add_test_reg( DDDB_alignment_derived_LONGTEST - COMMAND "${CMAKE_INSTALL_PREFIX}/bin/run_test_DDDB.sh" - EXEC_ARGS ${CMAKE_INSTALL_PREFIX}/bin/run_dddb.sh + COMMAND "${DDDB_BIN}/run_test_DDDB.sh" + EXEC_ARGS ${DDDB_BIN}/run_dddb.sh + -config DD4hep_XMLLoader -arg ${DDDB_DATA}/materials.xml -config DD4hep_ConditionsManagerInstaller -plugin DDDB_DerivedAlignmentsTest -print DEBUG -turns 1 -access 3 DEPENDS DDDB_extract_LONGTEST @@ -187,8 +201,9 @@ dd4hep_add_test_reg( DDDB_alignment_derived_LONGTEST # #---Testing: Load the geometry + conditions + access derived alignments from DetElement structures dd4hep_add_test_reg( DDDB_alignment_access_LONGTEST - COMMAND "${CMAKE_INSTALL_PREFIX}/bin/run_test_DDDB.sh" - EXEC_ARGS ${CMAKE_INSTALL_PREFIX}/bin/run_dddb.sh + COMMAND "${DDDB_BIN}/run_test_DDDB.sh" + EXEC_ARGS ${DDDB_BIN}/run_dddb.sh + -config DD4hep_XMLLoader -arg ${DDDB_DATA}/materials.xml -config DD4hep_ConditionsManagerInstaller -plugin DDDB_AlignmentsAccessTest -print DEBUG DEPENDS DDDB_extract_LONGTEST @@ -198,9 +213,10 @@ dd4hep_add_test_reg( DDDB_alignment_access_LONGTEST # #---Testing: Load the geometry + conditions + create DeVelo detector elements dd4hep_add_test_reg( DDDB_DeVelo_LONGTEST - COMMAND "${CMAKE_INSTALL_PREFIX}/bin/run_test_DDDB.sh" - EXEC_ARGS ${CMAKE_INSTALL_PREFIX}/bin/run_dddb.sh + COMMAND "${DDDB_BIN}/run_test_DDDB.sh" + EXEC_ARGS ${DDDB_BIN}/run_dddb.sh -iov_start 31-12-2000-00:00:00 -iov_end 31-12-2019-00:00:00 + -config DD4hep_XMLLoader -arg ${DDDB_DATA}/materials.xml -config DD4hep_ConditionsManagerInstaller -plugin DDDB_DeVeloTest -print DEBUG DEPENDS DDDB_extract_LONGTEST @@ -210,9 +226,10 @@ dd4hep_add_test_reg( DDDB_DeVelo_LONGTEST # #---Testing: As above, but access conditions using Gaudi-like service dd4hep_add_test_reg( DDDB_DeVelo_Gaudi_LONGTEST - COMMAND "${CMAKE_INSTALL_PREFIX}/bin/run_test_DDDB.sh" - EXEC_ARGS ${CMAKE_INSTALL_PREFIX}/bin/run_dddb.sh + COMMAND "${DDDB_BIN}/run_test_DDDB.sh" + EXEC_ARGS ${DDDB_BIN}/run_dddb.sh -iov_start 31-12-2000-00:00:00 -iov_end 31-12-2019-00:00:00 + -config DD4hep_XMLLoader -arg ${DDDB_DATA}/materials.xml -config DD4hep_ConditionsManagerInstaller -plugin DDDB_DeVeloServiceTest -print DEBUG DEPENDS DDDB_extract_LONGTEST @@ -222,8 +239,8 @@ dd4hep_add_test_reg( DDDB_DeVelo_Gaudi_LONGTEST # #---Testing: Extract DDDB data from zip archive ------------------------------- dd4hep_add_test_reg( DDDB_clean_LONGTEST - COMMAND "${CMAKE_INSTALL_PREFIX}/bin/run_test_DDDB.sh" - EXEC_ARGS ${CMAKE_INSTALL_PREFIX}/bin/extract_dddb.sh -clean + COMMAND "${DDDB_BIN}/run_test_DDDB.sh" + EXEC_ARGS ${DDDB_BIN}/extract_dddb.sh -clean DEPENDS DDDB_extract_LONGTEST DDDB_alignment_access_LONGTEST DDDB_alignment_derived_LONGTEST diff --git a/examples/DDDB/data/materials.xml b/examples/DDDB/data/materials.xml new file mode 100644 index 0000000000000000000000000000000000000000..b60eeddfd0659ed5ef320ccd1091f892add0752d --- /dev/null +++ b/examples/DDDB/data/materials.xml @@ -0,0 +1,22 @@ +<lccdd xmlns:compact="http://www.lcsim.org/schemas/compact/1.0" + xmlns:xs="http://www.w3.org/2001/XMLSchema" + xs:noNamespaceSchemaLocation="http://www.lcsim.org/schemas/compact/1.0/compact.xsd"> + <info name="lhcb_full" + title="LHCb detector geometry" + author="Markus Frank" + url="http://lhcb.cern.ch" + status="development" + version="1.0"> + <comment>The conversion of a detector to DD4hep</comment> + </info> + + <geometry open="false" close="false"> + </geometry> + <debug> + <type name="materials" value="0"/> + </debug> + <includes> + <gdmlFile ref="${DD4hepINSTALL}/DDDetectors/compact/elements.xml"/> + <gdmlFile ref="${DD4hepINSTALL}/DDDetectors/compact/materials.xml"/> + </includes> +</lccdd> diff --git a/examples/DDDB/src/plugins/DDDB2Objects.cpp b/examples/DDDB/src/plugins/DDDB2Objects.cpp index d21bef5d666071564087e99317e162c69088ce72..2ef7adf7758ece245240821ea14c1d0c85488e88 100644 --- a/examples/DDDB/src/plugins/DDDB2Objects.cpp +++ b/examples/DDDB/src/plugins/DDDB2Objects.cpp @@ -202,6 +202,8 @@ namespace dd4hep { } namespace { + static UInt_t unique_mat_id = 0xAFFEFEED; + template <> void* CNV<GeoCondition>::convert(GeoCondition *object) const; template <> void* CNV<DDDBIsotope>::convert(DDDBIsotope *object) const; template <> void* CNV<DDDBElement>::convert(DDDBElement *object) const; @@ -285,7 +287,12 @@ namespace dd4hep { TGeoElementTable* t = TGeoElement::GetElementTable(); TGeoElement* e = t->FindElement(nam); if ( !e ) { - e = new TGeoElement(nam,o->symbol.c_str(),o->atom.Zeff,o->atom.A,o->density); + size_t iso_count = 0; + for(auto i = o->isotopes.begin(); i != o->isotopes.end(); ++i) ++iso_count; + if ( 0 == iso_count ) + e = new TGeoElement(nam,o->symbol.c_str(),o->atom.Zeff,o->atom.A,o->density); + else + e = new TGeoElement(nam,o->symbol.c_str(), iso_count); /// Add the isotopes to the element for(auto i = o->isotopes.begin(); i != o->isotopes.end(); ++i) { auto iso = context->geo->isotopes.find((*i).first); @@ -395,7 +402,6 @@ namespace dd4hep { } } // Now create the medium - static UInt_t unique_mat_id = 0xAFFEFEED; if (0 == medium) { --unique_mat_id; medium = new TGeoMedium(name, unique_mat_id, mat); @@ -412,6 +418,20 @@ namespace dd4hep { template <> template <> Material CNV<DDDBMaterial>::get<Material>(const string& material_name) const { Context* context = _param<Context>(); + TGeoManager& mgr = description.manager(); + TGeoMedium* gmed = mgr.GetMedium(material_name.c_str()); + if ( gmed ) { + return Material(gmed); + } + TGeoMaterial* gmat = mgr.GetMaterial(material_name.c_str()); + if ( gmat ) { + --unique_mat_id; + gmed = new TGeoMedium(material_name.c_str(), unique_mat_id, gmat); + gmed->SetTitle("material"); + gmed->SetUniqueID(unique_mat_id); + if ( context->print.materials ) dddb_print(gmed); + return Material(gmed); + } DDDBMaterial* mat = Context::find(context->geo->materials,material_name); if ( !mat ) { string mat_name = material_name; // HACK! for bad material names in IT @@ -424,13 +444,13 @@ namespace dd4hep { mat = Context::find(context->geo->materials,mat_name); } if ( !mat ) { - if ( context->print.materials ) { - printout(ERROR,"Cnv<Material>", - "++ Failed to find component material: %s " - "---> Material table dump.", material_name.c_str()); - for(auto im=context->geo->materials.begin(); im != context->geo->materials.end(); ++im) - dddb_print((*im).second); - } + if ( context->print.materials ) { + printout(ERROR,"Cnv<Material>", + "++ Failed to find component material: %s " + "---> Material table dump.", material_name.c_str()); + for(auto im=context->geo->materials.begin(); im != context->geo->materials.end(); ++im) + dddb_print((*im).second); + } except("Materials","++ Undefined material %s",material_name.c_str()); } TGeoMedium* medium = (TGeoMedium*)CNV<DDDBMaterial>(context->description,context).convert(mat);