diff --git a/DDCore/include/DD4hep/Detector.h b/DDCore/include/DD4hep/Detector.h index 97f4b609245d5568cee7c63ee717faa93669ff6b..6fdcf6171b6552aad88b945953bb008ce98e3b51 100644 --- a/DDCore/include/DD4hep/Detector.h +++ b/DDCore/include/DD4hep/Detector.h @@ -310,12 +310,9 @@ namespace dd4hep { } ///---Factory method------- - static Detector& getInstance(void); + static Detector& getInstance(const std::string& name="default"); /// Destroy the singleton instance - static void destroyInstance(); - - /// Create a new instance of the detector object - static Detector* newInstance(void); + static void destroyInstance(const std::string& name="default"); }; /* diff --git a/DDCore/src/DetectorData.cpp b/DDCore/src/DetectorData.cpp index 9dc4622b7872ccf88a5bd20cd911752c162889dd..3aa011587986a17f75b83c4d324416138d3f3a0a 100644 --- a/DDCore/src/DetectorData.cpp +++ b/DDCore/src/DetectorData.cpp @@ -228,8 +228,11 @@ void DetectorData::destroyData(bool destroy_mgr) { m_materialVacuum.clear(); m_materialAir.clear(); m_inhibitConstants = false; - if ( destroy_mgr ) + if ( destroy_mgr ) { + gGeoManager = m_manager; deletePtr(m_manager); + gGeoManager = 0; + } else { gGeoManager = m_manager; m_manager = 0; @@ -299,7 +302,6 @@ void DetectorData::adoptData(DetectorData& source, bool clr) { m_world.setPlacement(m_manager->GetTopNode()); // Need to update some global stuff if ( gGeoManager != m_manager ) delete gGeoManager; - gGeoManager = m_manager; - + gGeoManager = m_manager; if ( clr ) source.clearData(); } diff --git a/DDCore/src/DetectorImp.cpp b/DDCore/src/DetectorImp.cpp index 37c89be59e9c2124c0ec3e41b3430651247abdd5..def6f377a62af77ecbff04b608467afe8c95406b 100644 --- a/DDCore/src/DetectorImp.cpp +++ b/DDCore/src/DetectorImp.cpp @@ -28,6 +28,7 @@ #include <iostream> #include <stdexcept> #include <cerrno> +#include <mutex> // ROOT inlcude files #include "TGeoCompositeShape.h" @@ -61,7 +62,32 @@ namespace { m_t = BUILD_NONE; } }; - static Detector* s_description = 0; + struct Instances { + recursive_mutex lock; + map<string, Detector*> detectors; + Instances() = default; + ~Instances() = default; + Detector* get(const string& name) { + auto i = detectors.find(name); + return i==detectors.end() ? 0 : (*i).second; + } + void insert(const string& name, Detector* detector) { + auto i = detectors.find(name); + if ( i==detectors.end() ) { + detectors.insert(make_pair(name,detector)); + return; + } + except("DD4hep","Cannot insert detector instance %s [Already present]",name.c_str()); + } + Detector* remove(const string& name) { + auto i = detectors.find(name); + if ( i==detectors.end() ) { + detectors.erase(i); + return (*i).second; + } + return 0; + } + } s_instances; void description_unexpected() { try { @@ -89,38 +115,36 @@ string dd4hep::versionString(){ return vs; } -Detector& Detector::getInstance() { - if (!s_description) - s_description = new DetectorImp(); - return *s_description; -} - -Detector* Detector::newInstance() { - Detector* description = new DetectorImp(); - return description; +Detector& Detector::getInstance(const std::string& name) { + lock_guard<recursive_mutex> lock(s_instances.lock); + Detector* description = s_instances.get(name); + if ( 0 == description ) { + gGeoManager = 0; + description = new DetectorImp(name); + s_instances.insert(name,description); + } + return *description; } /// Destroy the instance -void Detector::destroyInstance() { - if (s_description) - delete s_description; - s_description = 0; +void Detector::destroyInstance(const std::string& name) { + lock_guard<recursive_mutex> lock(s_instances.lock); + Detector* description = s_instances.remove(name); + if (description) + delete description; } /// Default constructor -DetectorImp::DetectorImp() +DetectorImp::DetectorImp(const string& name) : DetectorData(), DetectorLoad(this), m_buildType(BUILD_NONE) { set_unexpected( description_unexpected ) ; set_terminate( description_unexpected ) ; - InstanceCount::increment(this); - //if (0 == gGeoManager) { - if ( gGeoManager ) delete gGeoManager; - gGeoManager = new TGeoManager("world", "Detector Geometry"); - //} + //if ( gGeoManager ) delete gGeoManager; + m_manager = new TGeoManager(name.c_str(), "Detector Geometry"); { - m_manager = gGeoManager; + gGeoManager = m_manager; #if 0 //FIXME: eventually this should be set to 1 - needs fixes in examples ... TGeoElementTable* table = m_manager->GetElementTable(); table->TGeoElementTable::~TGeoElementTable(); @@ -147,8 +171,15 @@ DetectorImp::DetectorImp() /// Standard destructor DetectorImp::~DetectorImp() { - if ( m_manager == gGeoManager ) gGeoManager = 0; - destroyData(false); + if ( m_manager ) { + lock_guard<recursive_mutex> lock(s_instances.lock); + if ( m_manager == gGeoManager ) gGeoManager = 0; + Detector* description = s_instances.get(m_manager->GetName()); + if ( 0 != description ) { + s_instances.remove(m_manager->GetName()); + } + } + destroyData(true); m_extensions.clear(); InstanceCount::decrement(this); } diff --git a/DDCore/src/DetectorImp.h b/DDCore/src/DetectorImp.h index 8be24276a961c4952a494133fc35c5c882f1bc83..c391214259c5b686b719ba9ad0f5a00fd45f2acc 100644 --- a/DDCore/src/DetectorImp.h +++ b/DDCore/src/DetectorImp.h @@ -59,7 +59,7 @@ namespace dd4hep { void imp_loadVolumeManager(); /// Default constructor - DetectorImp(); + DetectorImp(const std::string& name); /// Standard destructor virtual ~DetectorImp(); diff --git a/DDCore/src/GlobalAlignment.cpp b/DDCore/src/GlobalAlignment.cpp index 87de532f0b6b8374082e6bc4ba575e74ed57355d..3daa25836c5adeac2f3b01c4f20a18e3d64128dd 100644 --- a/DDCore/src/GlobalAlignment.cpp +++ b/DDCore/src/GlobalAlignment.cpp @@ -39,7 +39,6 @@ namespace { /// Initializing constructor to create a new object GlobalAlignment::GlobalAlignment(const string& path) { //cout << "GlobalAlignment: path=" << path << endl; - //m_element = gGeoManager->MakePhysicalNode(path.c_str()); m_element = new TGeoPhysicalNode(path.c_str()); } diff --git a/DDCore/src/Shapes.cpp b/DDCore/src/Shapes.cpp index 841eb97df09573fed703233630e9ce221d830eaf..0b784fc37afd51436fabca5d7e72e4be0b1467a8 100644 --- a/DDCore/src/Shapes.cpp +++ b/DDCore/src/Shapes.cpp @@ -623,29 +623,29 @@ void PseudoTrap::make(double x1, double x2, double y1, double y2, double z, doub /// calculate the displacement of the tubs w.r.t. to the trap, determine the opening angle of the tubs double delta = std::sqrt( r * r - x * x ); - if( r < 0 && std::abs( r ) >= x ) { + if( r < 0 && std::abs(r) >= x ) { intersec = true; // intersection solid h = y1 < y2 ? y2 : y1; // tubs half height h += h/20.; // enlarge a bit - for subtraction solid if( atMinusZ ) { displacement = - halfZ - delta; - startPhi = 90. - halfOpeningAngle; + startPhi = 270.0 - halfOpeningAngle; } else { displacement = halfZ + delta; - startPhi = -90.- halfOpeningAngle; + startPhi = 90.0 - halfOpeningAngle; } } else if( r > 0 && std::abs(r) >= x ) { if( atMinusZ ) { displacement = - halfZ + delta; - startPhi = 270.- halfOpeningAngle; + startPhi = 90.0 - halfOpeningAngle; h = y1; } else { displacement = halfZ - delta; - startPhi = 90. - halfOpeningAngle; + startPhi = 270.0 - halfOpeningAngle; h = y2; } } @@ -655,16 +655,15 @@ void PseudoTrap::make(double x1, double x2, double y1, double y2, double z, doub Solid trap(new TGeoTrd2(x1, x2, y1, y2, halfZ)); Solid tubs(new TGeoTubeSeg(0.,std::abs(r),h,startPhi,startPhi + halfOpeningAngle*2.)); - UnionSolid solid; + TGeoCompositeShape* solid = 0; if( intersec ) { - solid = SubtractionSolid(trap, tubs, Transform3D(RotationX(M_PI/2.), Position(0.,0.,displacement))); - return; + solid = SubtractionSolid(trap, tubs, Transform3D(RotationX(M_PI/2.), Position(0.,0.,displacement))).ptr(); } else { SubtractionSolid sub(tubs, Box(1.1*x, 1.1*h, std::sqrt(r*r-x*x)), Transform3D(RotationX(M_PI/2.))); - solid = UnionSolid(trap, sub, Transform3D(RotationX(M_PI/2.), Position(0,0,displacement))); + solid = UnionSolid(trap, sub, Transform3D(RotationX(M_PI/2.), Position(0,0,displacement))).ptr(); } - _assign(solid.ptr(),"","pseudo-trap", true); + _assign(solid,"","pseudo-trap", true); } /// Helper function to create poly hedron diff --git a/DDCore/src/XML/VolumeBuilder.cpp b/DDCore/src/XML/VolumeBuilder.cpp index 2e71d7d26c4fe6bcd302362ca30f25b02d7a2fe2..37d43138ef1c70868ff8e951bf70516ae4afa632 100644 --- a/DDCore/src/XML/VolumeBuilder.cpp +++ b/DDCore/src/XML/VolumeBuilder.cpp @@ -79,7 +79,7 @@ Solid VolumeBuilder::makeShape(xml_h handle) { if ( a ) { nam = handle.attr<string>(a); auto is = shapes.find(nam); - if ( is == shapes.end() ) { + if ( is != shapes.end() ) { except("VolumeBuilder","+++ The named shape %s is already known to this builder unit. " "Cannot be overridded.",nam.c_str()); } @@ -87,7 +87,7 @@ Solid VolumeBuilder::makeShape(xml_h handle) { /// Was it veto'ed before ? if ( !nam.empty() ) { auto iv = shape_veto.find(nam); - if ( iv == shape_veto.end() ) { + if ( iv != shape_veto.end() ) { return Solid(); } } @@ -190,6 +190,7 @@ size_t VolumeBuilder::buildVolumes(xml_h handle) { if ( c.attr_nothrow(_U(sensitive)) ) { vol.setSensitiveDetector(sensitive); } + printout(ALWAYS,"VolumeBuilder","+++ Building volume %s",nam.c_str()); continue; } bool is_assembly = true; diff --git a/DDCore/src/plugins/Compact2Objects.cpp b/DDCore/src/plugins/Compact2Objects.cpp index 6e2e317fbb50c32573e0c45af3c4d9b3fb26925b..8bdded2dc80469905cf66123e902f1e47ada05a2 100644 --- a/DDCore/src/plugins/Compact2Objects.cpp +++ b/DDCore/src/plugins/Compact2Objects.cpp @@ -97,6 +97,7 @@ namespace { bool s_debug_materials = false; bool s_debug_segmentation = false; bool s_debug_constants = false; + bool s_debug_include = false; } static Ref_t create_ConstantField(Detector& /* description */, xml_h e) { @@ -251,6 +252,7 @@ template <> void Converter<Debug>::operator()(xml_h e) const { else if ( nam.substr(0,6) == "limits" ) s_debug_limits = (0 != val); else if ( nam.substr(0,6) == "segmen" ) s_debug_segmentation = (0 != val); else if ( nam.substr(0,6) == "consta" ) s_debug_constants = (0 != val); + else if ( nam.substr(0,6) == "includ" ) s_debug_include = (0 != val); } } @@ -296,6 +298,9 @@ template <> void Converter<Constant>::operator()(xml_h e) const { return; } xml::DocumentHolder doc(xml::DocumentHandler().load(e, e.attr_value(_U(ref)))); + if ( s_debug_include ) { + printout(ALWAYS, "Compact","++ Processing xml document %s.",doc.uri().c_str()); + } xml_h root = doc.root(); xml_coll_t(root, _U(define)).for_each(_U(constant), Converter<Constant>(description)); xml_coll_t(root, _U(constant)).for_each(Converter<Constant>(description)); @@ -1072,6 +1077,9 @@ template <> void Converter<DetElement>::operator()(xml_h element) const { template <> void Converter<GdmlFile>::operator()(xml_h element) const { xml::DocumentHolder doc(xml::DocumentHandler().load(element, element.attr_value(_U(ref)))); xml_h root = doc.root(); + if ( s_debug_include ) { + printout(ALWAYS, "Compact","++ Processing xml document %s.",doc.uri().c_str()); + } if ( root.tag() == "materials" || root.tag() == "elements" ) { xml_coll_t(root, _U(isotope)).for_each(Converter<Isotope>(this->description,0,0)); xml_coll_t(root, _U(element)).for_each(Converter<Atom>(this->description)); @@ -1169,6 +1177,9 @@ template <> void Converter<DetElementInclude>::operator()(xml_h element) const { string type = element.hasAttr(_U(type)) ? element.attr<string>(_U(type)) : string("xml"); if ( type == "xml" ) { xml::DocumentHolder doc(xml::DocumentHandler().load(element, element.attr_value(_U(ref)))); + if ( s_debug_include ) { + printout(ALWAYS, "Compact","++ Processing xml document %s.",doc.uri().c_str()); + } xml_h node = doc.root(); string tag = node.tag(); if ( tag == "lccdd" ) diff --git a/DDDetectors/compact/materials.xml b/DDDetectors/compact/materials.xml index cb555a1860b8add9657234aa211d99cdaf3e5768..d6d057c0898bd28f2fb39c47506d2f1c626d77b9 100644 --- a/DDDetectors/compact/materials.xml +++ b/DDDetectors/compact/materials.xml @@ -25,7 +25,7 @@ <D type="density" value="1.3" unit="g/cm3"/> <composite n="44" ref="H"/> <composite n="15" ref="C"/> - <composite n="7" ref="O"/> + <composite n="7" ref="O"/> </material> <material name="Quartz"> @@ -36,7 +36,7 @@ <material name="G10"> <D type="density" value="1.7" unit="g/cm3"/> - <fraction n="0.08" ref="Cl"/> + <fraction n="0.08" ref="Cl"/> <fraction n="0.773" ref="Quartz"/> <fraction n="0.147" ref="Epoxy"/> </material> @@ -50,7 +50,7 @@ <material name="Steel235"> <D value="7.85" unit="g/cm3"/> <fraction n="0.998" ref="Fe"/> - <fraction n=".002" ref="C"/> + <fraction n=".002" ref="C"/> </material> <material name="SiliconOxide"> diff --git a/DDDetectors/src/VolumeAssembly_geo.cpp b/DDDetectors/src/VolumeAssembly_geo.cpp index 080eba277d64778ecdd253e550c4167aabb37f75..1f3850dea2dd619148ecf10a77d43de399264bcf 100644 --- a/DDDetectors/src/VolumeAssembly_geo.cpp +++ b/DDDetectors/src/VolumeAssembly_geo.cpp @@ -103,11 +103,18 @@ namespace { Solid solid = xml::createShape(description, x_envshape.typeStr(), x_envshape); assembly = Volume("lv"+det_name, solid, mat); } - if ( x_env.hasAttr(_U(name)) ) assembly->SetName(x_env.nameStr().c_str()); + /// Set generic associations assembly.setAttributes(description,x_det.regionStr(),x_det.limitsStr(),x_det.visStr()); + /// If specified more direct: use these ones. + if ( x_env.hasAttr(_U(vis)) ) { + assembly.setVisAttributes(description, x_env.visStr()); + } if ( x_det.hasAttr(_U(sensitive)) ) { sens.setType(x_det.attr<string>(_U(sensitive))); } + if ( x_env.hasAttr(_U(name)) ) { + assembly->SetName(x_env.nameStr().c_str()); + } for(xml_coll_t coll(e,_U(volume)); coll; ++coll) { xml_comp_t x_vol = coll; diff --git a/DDG4/examples/TEve.C b/DDG4/examples/TEve.C index ed26e1a17a9101146503e280ce9f654129e58ee1..fc7b505c6fe1e1bf1883e528092894b72a79774f 100644 --- a/DDG4/examples/TEve.C +++ b/DDG4/examples/TEve.C @@ -29,18 +29,13 @@ using namespace dd4hep::detail; void TEve() { Detector& description = Detector::getInstance(); + TGeoManager* mgr = description.manager(); const char* fname = "file:../DD4hep/examples/CLICSiD/compact/compact.xml"; description.apply("DD4hep_CompactLoader",1,(char**)&fname); TEveManager::Create(); - //TFile::SetCacheFileDir("."); - //gGeoManager = gEve->GetGeometry("LHCb.gdml"); - //gGeoManager = gEve->GetGeometry("lhcbfull_v1.root"); - gEve->fGeometries->Add(new TObjString(fname),&description.manager()); - //gGeoManager->DefaultColors(); - - TEveGeoTopNode* tn = new TEveGeoTopNode(gGeoManager, gGeoManager->GetTopNode()); + TEveGeoTopNode* tn = new TEveGeoTopNode(mgr, mgr->GetTopNode()); tn->SetVisLevel(4); gEve->AddGlobalElement(tn); diff --git a/DDG4/include/DDG4/Geant4GeometryInfo.h b/DDG4/include/DDG4/Geant4GeometryInfo.h index b91aa237e1b0a3d11f8bf4d721fa7404aeb9fcd1..af0cde3f3941e61827feb7c10ca2bbbc7aecdecc 100644 --- a/DDG4/include/DDG4/Geant4GeometryInfo.h +++ b/DDG4/include/DDG4/Geant4GeometryInfo.h @@ -86,6 +86,7 @@ namespace dd4hep { class Geant4GeometryInfo : public TNamed, public detail::GeoHandlerTypes::GeometryInfo { public: typedef std::vector<const G4VPhysicalVolume*> Geant4PlacementPath; + TGeoManager* manager = 0; Geant4GeometryMaps::ElementMap g4Elements; Geant4GeometryMaps::MaterialMap g4Materials; Geant4GeometryMaps::SolidMap g4Solids; diff --git a/DDG4/src/Geant4Converter.cpp b/DDG4/src/Geant4Converter.cpp index 21a414341783ff8a404f97afd220df88c9d03817..0d0172ac70a411fd61e16aaf3ffc52cc9d4b86ac 100644 --- a/DDG4/src/Geant4Converter.cpp +++ b/DDG4/src/Geant4Converter.cpp @@ -814,7 +814,7 @@ void* Geant4Converter::handlePlacement(const string& name, const TGeoNode* node) ass->imprint(info,node,chain,ass,(*volIt).second, transform, copy, checkOverlaps); return 0; } - else if ( node != gGeoManager->GetTopNode() && volIt == info.g4Volumes.end() ) { + else if ( node != info.manager->GetTopNode() && volIt == info.g4Volumes.end() ) { throw logic_error("Geant4Converter: Invalid mother volume found!"); } G4LogicalVolume* g4vol = info.g4Volumes[vol]; @@ -1116,7 +1116,9 @@ template <typename O, typename C, typename F> void handleRMap(const O* o, const /// Create geometry conversion Geant4Converter& Geant4Converter::create(DetElement top) { Geant4GeometryInfo& geo = this->init(); + World wrld = top.world(); m_data->clear(); + geo.manager = &wrld.detectorDescription().manager(); collect(top, geo); checkOverlaps = false; // We do not have to handle defines etc. diff --git a/examples/ClientTests/CMakeLists.txt b/examples/ClientTests/CMakeLists.txt index 345a85610cbd7a6ab252685bc0e4e8b42d67aaef..3c86a128002a6293f5abf14494b9fbd6b1915f7d 100644 --- a/examples/ClientTests/CMakeLists.txt +++ b/examples/ClientTests/CMakeLists.txt @@ -23,6 +23,11 @@ dd4hep_add_plugin( ClientTests SOURCES src/*.cpp OPTIONAL [BOOST SOURCES src_boost/*.cpp] ) # +#----------------------------------------------------------------------------------- +dd4hep_add_executable( multipleGeo main/MultipleGeometries.cpp ) +#----------------------------------------------------------------------------------- +# +# set(ClientTestsEx_INSTALL ${CMAKE_INSTALL_PREFIX}/examples/ClientTests) dd4hep_install_dir( compact scripts ref DESTINATION ${ClientTestsEx_INSTALL} ) #-------------------------------------------------------------------------- @@ -73,6 +78,19 @@ dd4hep_add_test_reg( ClientTests_DumpMaterials ) # # Test readout strings of the form: <id>system:8,barrel:-2</id> +dd4hep_add_test_reg( ClientTests_MultipleGeometries + COMMAND "${CMAKE_INSTALL_PREFIX}/bin/run_test_ClientTests.sh" + EXEC_ARGS multipleGeo + -compact file:${ClientTestsEx_INSTALL}/../CLICSiD/compact/compact.xml + -compact file:${ClientTestsEx_INSTALL}/compact/MiniTel.xml + -compact file:${ClientTestsEx_INSTALL}/compact/NestedDetectors.xml + -no-interp + REGEX_PASS "DELETE Geometry: .*/NestedDetectors.xml" + REGEX_FAIL "Exception" + REGEX_FAIL "FAILED" + ) +# +# Test readout strings of the form: <id>system:8,barrel:-2</id> dd4hep_add_test_reg( ClientTests_DumpElements COMMAND "${CMAKE_INSTALL_PREFIX}/bin/run_test_ClientTests.sh" EXEC_ARGS geoPluginRun diff --git a/examples/ClientTests/compact/CheckShape.xml b/examples/ClientTests/compact/CheckShape.xml index fb2557a348e2edaaf1ed09c47cd491f4463563e4..16dd0793076d4842a2c6abde9e8127d04777a693 100644 --- a/examples/ClientTests/compact/CheckShape.xml +++ b/examples/ClientTests/compact/CheckShape.xml @@ -48,7 +48,7 @@ <display> <vis name="InvisibleNoDaughters" showDaughters="false" visible="false"/> - <vis name="InvisibleWithDaughters" showDaughters="true" visible="false"/> + <vis name="InvisibleWithDaughters" showDaughters="true" visible="false"/> <vis name="Shape1_vis" alpha="1.0" r="1" g="0" b="0" showDaughters="true" visible="true"/> <vis name="Shape2_vis" alpha="1.0" r="0" g="1" b="0" showDaughters="true" visible="true"/> <vis name="Shape3_vis" alpha="1.0" r="0" g="0" b="1" showDaughters="true" visible="true"/> diff --git a/examples/ClientTests/compact/Check_Shape_PseudoTrap.xml b/examples/ClientTests/compact/Check_Shape_PseudoTrap.xml index cbb29f5f609994b47d4f8e461b9ab30b72410df5..79ff75fff01821081723343e64558d7ab963f057 100644 --- a/examples/ClientTests/compact/Check_Shape_PseudoTrap.xml +++ b/examples/ClientTests/compact/Check_Shape_PseudoTrap.xml @@ -5,20 +5,30 @@ <detectors> <detector id="1" name="Shape_PseudoTrap" type="DD4hep_TestShape_Creator"> + <!-- Union pseudo-trap: --> <check vis="Shape1_vis"> <shape type="PseudoTrap" z="30*cm" radius="10*cm" x1="10*cm" x2="3*cm" y1="30*cm" y2="10*cm" minusZ="false"/> <position x="30*cm" y="30*cm" z="50*cm"/> <rotation x="0" y="0" z="0"/> </check> -<!-- Creates a different mesh on different platforms. + <!-- Intersection pseudo-trap --> <check vis="Shape2_vis"> - <shape type="PseudoTrap" z="30*cm" radius="5*cm" + <shape type="PseudoTrap" z="30*cm" radius="-10*cm" x1="3*cm" x2="10*cm" y1="30*cm" y2="10*cm" minusZ="true"/> <position x="30*cm" y="30*cm" z="-50*cm"/> <rotation x="0" y="0" z="0"/> </check> ---> + + <!-- Creates a different mesh on different platforms. + <check vis="Shape3_vis"> + <shape type="PseudoTrap" z="30*cm" radius="5*cm" + x1="3*cm" x2="10*cm" y1="30*cm" y2="10*cm" minusZ="true"/> + <position x="30*cm" y="30*cm" z="-50*cm"/> + <rotation x="0" y="0" z="0"/> + </check> + --> + <test type="DD4hep_Mesh_Verifier" ref="${DD4hepExamplesINSTALL}/examples/ClientTests/ref/Ref_PseudoTrap.txt" create="CheckShape_create"/> </detector> </detectors> diff --git a/examples/ClientTests/ref/Ref_PseudoTrap.txt b/examples/ClientTests/ref/Ref_PseudoTrap.txt index 5d5df523ccaba531aab769f1d6a4da182bf1fcf6..3aa70cfc468c6c663e4dc58f3e98bfce8e8e99a6 100644 --- a/examples/ClientTests/ref/Ref_PseudoTrap.txt +++ b/examples/ClientTests/ref/Ref_PseudoTrap.txt @@ -1,5 +1,5 @@ -ShapeCheck[0] TGeoCompositeShape 46 Mesh-points: -TGeoCompositeShape PseudoTrap N(mesh)=46 N(vert)=46 N(seg)=0 N(pols)=0 +ShapeCheck[0] TGeoCompositeShape 8 Mesh-points: +TGeoCompositeShape PseudoTrap N(mesh)=8 N(vert)=8 N(seg)=0 N(pols)=0 TGeoCompositeShape 0 Local ( -10.00, -30.00, -30.00) Global ( 20.00, 0.00, 20.00) TGeoCompositeShape 1 Local ( -10.00, 30.00, -30.00) Global ( 20.00, 60.00, 20.00) TGeoCompositeShape 2 Local ( 10.00, 30.00, -30.00) Global ( 40.00, 60.00, 20.00) @@ -8,42 +8,15 @@ TGeoCompositeShape 4 Local ( -3.00, -10.00, 30.00) Global ( 27.00, 20. TGeoCompositeShape 5 Local ( -3.00, 10.00, 30.00) Global ( 27.00, 40.00, 80.00) TGeoCompositeShape 6 Local ( 3.00, 10.00, 30.00) Global ( 33.00, 40.00, 80.00) TGeoCompositeShape 7 Local ( 3.00, -10.00, 30.00) Global ( 33.00, 20.00, 80.00) -TGeoCompositeShape 8 Local ( 2.71, 10.00, 30.09) Global ( 32.71, 40.00, 80.09) -TGeoCompositeShape 9 Local ( 2.41, 10.00, 30.16) Global ( 32.41, 40.00, 80.16) -TGeoCompositeShape 10 Local ( 2.12, 10.00, 30.23) Global ( 32.12, 40.00, 80.23) -TGeoCompositeShape 11 Local ( 1.82, 10.00, 30.29) Global ( 31.82, 40.00, 80.29) -TGeoCompositeShape 12 Local ( 1.52, 10.00, 30.34) Global ( 31.52, 40.00, 80.34) -TGeoCompositeShape 13 Local ( 1.22, 10.00, 30.39) Global ( 31.22, 40.00, 80.39) -TGeoCompositeShape 14 Local ( 0.91, 10.00, 30.42) Global ( 30.91, 40.00, 80.42) -TGeoCompositeShape 15 Local ( 0.61, 10.00, 30.44) Global ( 30.61, 40.00, 80.44) -TGeoCompositeShape 16 Local ( 0.30, 10.00, 30.46) Global ( 30.30, 40.00, 80.46) -TGeoCompositeShape 17 Local ( 0.00, 10.00, 30.46) Global ( 30.00, 40.00, 80.46) -TGeoCompositeShape 18 Local ( -0.30, 10.00, 30.46) Global ( 29.70, 40.00, 80.46) -TGeoCompositeShape 19 Local ( -0.61, 10.00, 30.44) Global ( 29.39, 40.00, 80.44) -TGeoCompositeShape 20 Local ( -0.91, 10.00, 30.42) Global ( 29.09, 40.00, 80.42) -TGeoCompositeShape 21 Local ( -1.22, 10.00, 30.39) Global ( 28.78, 40.00, 80.39) -TGeoCompositeShape 22 Local ( -1.52, 10.00, 30.34) Global ( 28.48, 40.00, 80.34) -TGeoCompositeShape 23 Local ( -1.82, 10.00, 30.29) Global ( 28.18, 40.00, 80.29) -TGeoCompositeShape 24 Local ( -2.12, 10.00, 30.23) Global ( 27.88, 40.00, 80.23) -TGeoCompositeShape 25 Local ( -2.41, 10.00, 30.16) Global ( 27.59, 40.00, 80.16) -TGeoCompositeShape 26 Local ( -2.71, 10.00, 30.09) Global ( 27.29, 40.00, 80.09) -TGeoCompositeShape 27 Local ( 2.71, -10.00, 30.09) Global ( 32.71, 20.00, 80.09) -TGeoCompositeShape 28 Local ( 2.41, -10.00, 30.16) Global ( 32.41, 20.00, 80.16) -TGeoCompositeShape 29 Local ( 2.12, -10.00, 30.23) Global ( 32.12, 20.00, 80.23) -TGeoCompositeShape 30 Local ( 1.82, -10.00, 30.29) Global ( 31.82, 20.00, 80.29) -TGeoCompositeShape 31 Local ( 1.52, -10.00, 30.34) Global ( 31.52, 20.00, 80.34) -TGeoCompositeShape 32 Local ( 1.22, -10.00, 30.39) Global ( 31.22, 20.00, 80.39) -TGeoCompositeShape 33 Local ( 0.91, -10.00, 30.42) Global ( 30.91, 20.00, 80.42) -TGeoCompositeShape 34 Local ( 0.61, -10.00, 30.44) Global ( 30.61, 20.00, 80.44) -TGeoCompositeShape 35 Local ( 0.30, -10.00, 30.46) Global ( 30.30, 20.00, 80.46) -TGeoCompositeShape 36 Local ( 0.00, -10.00, 30.46) Global ( 30.00, 20.00, 80.46) -TGeoCompositeShape 37 Local ( -0.30, -10.00, 30.46) Global ( 29.70, 20.00, 80.46) -TGeoCompositeShape 38 Local ( -0.61, -10.00, 30.44) Global ( 29.39, 20.00, 80.44) -TGeoCompositeShape 39 Local ( -0.91, -10.00, 30.42) Global ( 29.09, 20.00, 80.42) -TGeoCompositeShape 40 Local ( -1.22, -10.00, 30.39) Global ( 28.78, 20.00, 80.39) -TGeoCompositeShape 41 Local ( -1.52, -10.00, 30.34) Global ( 28.48, 20.00, 80.34) -TGeoCompositeShape 42 Local ( -1.82, -10.00, 30.29) Global ( 28.18, 20.00, 80.29) -TGeoCompositeShape 43 Local ( -2.12, -10.00, 30.23) Global ( 27.88, 20.00, 80.23) -TGeoCompositeShape 44 Local ( -2.41, -10.00, 30.16) Global ( 27.59, 20.00, 80.16) -TGeoCompositeShape 45 Local ( -2.71, -10.00, 30.09) Global ( 27.29, 20.00, 80.09) -TGeoCompositeShape Bounding box: dx= 10.00 dy= 30.00 dz= 30.23 Origin: x= 0.00 y= 0.00 z= 0.23 +TGeoCompositeShape Bounding box: dx= 10.00 dy= 30.00 dz= 30.00 Origin: x= 0.00 y= 0.00 z= 0.00 +ShapeCheck[1] TGeoCompositeShape 8 Mesh-points: +TGeoCompositeShape PseudoTrap N(mesh)=8 N(vert)=8 N(seg)=0 N(pols)=0 +TGeoCompositeShape 0 Local ( -3.00, -30.00, -30.00) Global ( 27.00, 0.00, -80.00) +TGeoCompositeShape 1 Local ( -3.00, 30.00, -30.00) Global ( 27.00, 60.00, -80.00) +TGeoCompositeShape 2 Local ( 3.00, 30.00, -30.00) Global ( 33.00, 60.00, -80.00) +TGeoCompositeShape 3 Local ( 3.00, -30.00, -30.00) Global ( 33.00, 0.00, -80.00) +TGeoCompositeShape 4 Local ( -10.00, -10.00, 30.00) Global ( 20.00, 20.00, -20.00) +TGeoCompositeShape 5 Local ( -10.00, 10.00, 30.00) Global ( 20.00, 40.00, -20.00) +TGeoCompositeShape 6 Local ( 10.00, 10.00, 30.00) Global ( 40.00, 40.00, -20.00) +TGeoCompositeShape 7 Local ( 10.00, -10.00, 30.00) Global ( 40.00, 20.00, -20.00) +TGeoCompositeShape Bounding box: dx= 10.00 dy= 30.00 dz= 30.00 Origin: x= 0.00 y= 0.00 z= 0.00