2172 <structure>
2173 <volume name="/dd/Geometry/PoolDetails/lvNearTopCover0xbad46a0">
2174 <materialref ref="/dd/Materials/PPE0xb8310e0"/>
2175 <solidref ref="near_top_cover_box0xbad4490"/>
2176 </volume>
2177 <volume name="/dd/Geometry/RPC/lvRPCStrip0xb839910">
2178 <materialref ref="/dd/Materials/MixGas0xbad5d28"/>
2179 <solidref ref="RPCStrip0xb751cc0"/>
2180 </volume>
2181 <volume name="/dd/Geometry/RPC/lvRPCGasgap140xb7491f8">
2182 <materialref ref="/dd/Materials/Air0xb830740"/>
2183 <solidref ref="RPCGasgap140xbad5938"/>
2184 <physvol name="/dd/Geometry/RPC/lvRPCGasgap14#pvStrip14Array#pvStrip14ArrayOne:1#pvStrip14Unit0xbc1e930">
2185 <volumeref ref="/dd/Geometry/RPC/lvRPCStrip0xb839910"/>
2186 <position name="/dd/Geometry/RPC/lvRPCGasgap14#pvStrip14Array#pvStrip14ArrayOne:1#pvStrip14Unit0xbc1e930_pos" unit="mm" x="-910" y="0" z="0"/>
2187 <rotation name="/dd/Geometry/RPC/lvRPCGasgap14#pvStrip14Array#pvStrip14ArrayOne:1#pvStrip14Unit0xbc1e930_rot" unit="deg" x="0" y="0" z="-90"/>
2188 </physvol>
2189 <physvol name="/dd/Geometry/RPC/lvRPCGasgap14#pvStrip14Array#pvStrip14ArrayOne:2#pvStrip14Unit0xbc1f8b8">
2190 <volumeref ref="/dd/Geometry/RPC/lvRPCStrip0xb839910"/>
2191 <position name="/dd/Geometry/RPC/lvRPCGasgap14#pvStrip14Array#pvStrip14ArrayOne:2#pvStrip14Unit0xbc1f8b8_pos" unit="mm" x="-650" y="0" z="0"/>
2192 <rotation name="/dd/Geometry/RPC/lvRPCGasgap14#pvStrip14Array#pvStrip14ArrayOne:2#pvStrip14Unit0xbc1f8b8_rot" unit="deg" x="0" y="0" z="-90"/>
2193 </physvol>
Divide by 2 for open/close XML tags:
[blyth@belle7 gdml]$ grep physvol $LOCAL_BASE/env/geant4/geometry/gdml/g4_01.gdml | echo $(( $(wc -l)/2 ))
5642
simon:gdml blyth$ echo "select count(*) from physvol ;" | sqlite3 $LOCAL_BASE/env/geant4/geometry/gdml/g4_01.gdml.db
5642
Matches the distinct name count in shapedb from vrml2 file:
sqlite> select count(*) from shape ;
12229
sqlite> select count(distinct(name)) from shape ;
5642
sqlite> select count(distinct(hash)) from shape ;
12223
sqlite> select count(distinct(substr(name,0,instr(name,'.')))) from shape ;
5642
ROOT Load of GDML, counts 12230 nodes matching the VRML2 shape count (assume extra 1 is world that was culled in VRML2):
root [0] TGeoManager::Import("/data1/env/local/env/geant4/geometry/gdml/g4_01.gdml")
Info in <TGeoManager::Import>: Reading geometry from file: /data1/env/local/env/geant4/geometry/gdml/g4_01.gdml
Info in <TGeoManager::TGeoManager>: Geometry Geometry, default geometry created
Error: Unsupported GDML Tag Used :isotope. Please Check Geometry/Schema.
Error: Unsupported GDML Tag Used :atom. Please Check Geometry/Schema.
Error: Unsupported GDML Tag Used :fraction. Please Check Geometry/Schema.
...
Info in <TGeoManager::SetTopVolume>: Top volume is World. Master volume is World
Info in <TGeoManager::CheckGeometry>: Fixing runtime shapes...
Info in <TGeoManager::CheckGeometry>: ...Nothing to fix
Info in <TGeoManager::CloseGeometry>: Counting nodes...
Info in <TGeoManager::Voxelize>: Voxelizing...
Info in <TGeoManager::CloseGeometry>: Building cache...
Info in <TGeoNavigator::BuildCache>: --- Maximum geometry depth set to 100
Info in <TGeoManager::CloseGeometry>: 12230 nodes/ 249 volume UID's in default geometry
Info in <TGeoManager::CloseGeometry>: ----------------modeler ready----------------
(class TGeoManager*)0x89be148
root [1]
Hmm, was expecting the phyvol to correspond to the 12k ?
- so what are all the other VRML2 shapes 12229-5642=6587
- clearly the algorithmically transformed/duplicated volumes, eg 2 AD, 672 PMT
- the structure of the GDML heirarchy of volume/physvol/solid is doing the duplicatation that VRML2 spelt out in shapes
sqlite> select count(*) as N, name, max(dx)||":"||max(dy)||":"||max(dz) as dxyz from xshape group by name having N>1;
N name dxyz
---------- --------------------------------------------------------------------------------------------- ----------------------------
2 /dd/Geometry/AD/lvADE#pvAdVertiCableTray.1005 66.2000000000007:72.0:5000.0
2 /dd/Geometry/AD/lvADE#pvCenterCalibE.1001 798.1:798.0:688.98
2 /dd/Geometry/AD/lvADE#pvElectricalDistributionBoxE.1007 608.200000000001:609.0:260.3
2 /dd/Geometry/AD/lvADE#pvGCatCalibE.1004
...
2 /dd/Geometry/AD/lvLSO#pvIAV.1000 3126.0:3126.0:3174.49
2 /dd/Geometry/AD/lvOAV#pvLSO.1000 3958.9:3959.0:4076.53
...
672 /dd/Geometry/PMT/lvPmtHemi#pvPmtHemiVacuum.1000 297.0:297.0:292.5
672 /dd/Geometry/PMT/lvPmtHemiVacuum#pvPmtHemiBottom.1001 196.100000000002:196.0:196.2
672 /dd/Geometry/PMT/lvPmtHemiVacuum#pvPmtHemiCathode.1000 196.100000000002:196.0:196.2
672 /dd/Geometry/PMT/lvPmtHemiVacuum#pvPmtHemiDynode.1002 174.900000000001:175.0:166.0
26985 <physvol name="/dd/Geometry/Pool/lvNearPoolOWS#pvNearADE1OWSLegs#pvLegInOWS:1#pvLegInOWSUnit0xb905030">
26986 <volumeref ref="/dd/Geometry/PoolDetails/lvLegInOWSTub0xc4c2208"/>
26987 <position name="/dd/Geometry/Pool/lvNearPoolOWS#pvNearADE1OWSLegs#pvLegInOWS:1#pvLegInOWSUnit0xb905030_pos" unit="mm" x="4713" y="1842" z="-4456"/>
26988 </physvol>
26989 <physvol name="/dd/Geometry/Pool/lvNearPoolOWS#pvNearADE1OWSLegs#pvLegInOWS:2#pvLegInOWSUnit0xc12ecb0">
26990 <volumeref ref="/dd/Geometry/PoolDetails/lvLegInOWSTub0xc4c2208"/>
26991 <position name="/dd/Geometry/Pool/lvNearPoolOWS#pvNearADE1OWSLegs#pvLegInOWS:2#pvLegInOWSUnit0xc12ecb0_pos" unit="mm" x="1029" y="1842" z="-4456"/>
26992 <rotation name="/dd/Geometry/Pool/lvNearPoolOWS#pvNearADE1OWSLegs#pvLegInOWS:2#pvLegInOWSUnit0xc12ecb0_rot" unit="deg" x="0" y="0" z="-90"/>
26993 </physvol>
26994 <physvol name="/dd/Geometry/Pool/lvNearPoolOWS#pvNearADE1OWSLegs#pvLegInOWS:3#pvLegInOWSUnit0xb76f880">
26995 <volumeref ref="/dd/Geometry/PoolDetails/lvLegInOWSTub0xc4c2208"/>
26996 <position name="/dd/Geometry/Pool/lvNearPoolOWS#pvNearADE1OWSLegs#pvLegInOWS:3#pvLegInOWSUnit0xb76f880_pos" unit="mm" x="1029" y="-1842" z="-4456"/>
26997 <rotation name="/dd/Geometry/Pool/lvNearPoolOWS#pvNearADE1OWSLegs#pvLegInOWS:3#pvLegInOWSUnit0xb76f880_rot" unit="deg" x="0" y="0" z="-180"/>
26998 </physvol>
26999 <physvol name="/dd/Geometry/Pool/lvNearPoolOWS#pvNearADE1OWSLegs#pvLegInOWS:4#pvLegInOWSUnit0xc4c26e0">
27000 <volumeref ref="/dd/Geometry/PoolDetails/lvLegInOWSTub0xc4c2208"/>
27001 <position name="/dd/Geometry/Pool/lvNearPoolOWS#pvNearADE1OWSLegs#pvLegInOWS:4#pvLegInOWSUnit0xc4c26e0_pos" unit="mm" x="4713" y="-1842" z="-4456"/>
27002 <rotation name="/dd/Geometry/Pool/lvNearPoolOWS#pvNearADE1OWSLegs#pvLegInOWS:4#pvLegInOWSUnit0xc4c26e0_rot" unit="deg" x="0" y="0" z="90"/>
27003 </physvol>
27004 <physvol name="/dd/Geometry/Pool/lvNearPoolOWS#pvNearADE2OWSLegs#pvLegInOWS:1#pvLegInOWSUnit0xc4c27e0">
27005 <volumeref ref="/dd/Geometry/PoolDetails/lvLegInOWSTub0xc4c2208"/>
27006 <position name="/dd/Geometry/Pool/lvNearPoolOWS#pvNearADE2OWSLegs#pvLegInOWS:1#pvLegInOWSUnit0xc4c27e0_pos" unit="mm" x="-1029" y="1842" z="-4456"/>
27007 </physvol>
27008 <physvol name="/dd/Geometry/Pool/lvNearPoolOWS#pvNearADE2OWSLegs#pvLegInOWS:2#pvLegInOWSUnit0xc4c2890">
27009 <volumeref ref="/dd/Geometry/PoolDetails/lvLegInOWSTub0xc4c2208"/>
27010 <position name="/dd/Geometry/Pool/lvNearPoolOWS#pvNearADE2OWSLegs#pvLegInOWS:2#pvLegInOWSUnit0xc4c2890_pos" unit="mm" x="-4713" y="1842" z="-4456"/>
27011 <rotation name="/dd/Geometry/Pool/lvNearPoolOWS#pvNearADE2OWSLegs#pvLegInOWS:2#pvLegInOWSUnit0xc4c2890_rot" unit="deg" x="0" y="0" z="-90"/>
27012 </physvol>
27013 <physvol name="/dd/Geometry/Pool/lvNearPoolOWS#pvNearADE2OWSLegs#pvLegInOWS:3#pvLegInOWSUnit0xc4c2990">
27014 <volumeref ref="/dd/Geometry/PoolDetails/lvLegInOWSTub0xc4c2208"/>
27015 <position name="/dd/Geometry/Pool/lvNearPoolOWS#pvNearADE2OWSLegs#pvLegInOWS:3#pvLegInOWSUnit0xc4c2990_pos" unit="mm" x="-4713" y="-1842" z="-4456"/>
27016 <rotation name="/dd/Geometry/Pool/lvNearPoolOWS#pvNearADE2OWSLegs#pvLegInOWS:3#pvLegInOWSUnit0xc4c2990_rot" unit="deg" x="0" y="0" z="-180"/>
27017 </physvol>
27018 <physvol name="/dd/Geometry/Pool/lvNearPoolOWS#pvNearADE2OWSLegs#pvLegInOWS:4#pvLegInOWSUnit0xc4c2a90">
27019 <volumeref ref="/dd/Geometry/PoolDetails/lvLegInOWSTub0xc4c2208"/>
27020 <position name="/dd/Geometry/Pool/lvNearPoolOWS#pvNearADE2OWSLegs#pvLegInOWS:4#pvLegInOWSUnit0xc4c2a90_pos" unit="mm" x="-1029" y="-1842" z="-4456"/>
27021 <rotation name="/dd/Geometry/Pool/lvNearPoolOWS#pvNearADE2OWSLegs#pvLegInOWS:4#pvLegInOWSUnit0xc4c2a90_rot" unit="deg" x="0" y="0" z="90"/>
27022 </physvol>
simon:~ blyth$ echo "select id,uname,name from physvol where name like '/dd/Geometry/AD/lvOAV#pvLSO%' ;" | sqlite3 $LOCAL_BASE/env/geant4/geometry/gdml/g4_01.gdml.db
377 /dd/Geometry/AD/lvOAV#pvLSO0xba431e8 /dd/Geometry/AD/lvOAV#pvLSO
4064 <volume name="/dd/Geometry/AD/lvOAV0xb78abc0">
4065 <materialref ref="/dd/Materials/Acrylic0xb85a2d8"/>
4066 <solidref ref="oav0xb78bb68"/>
4067 <physvol name="/dd/Geometry/AD/lvOAV#pvLSO0xba431e8">
4068 <volumeref ref="/dd/Geometry/AD/lvLSO0xbac5950"/>
4069 <position name="/dd/Geometry/AD/lvOAV#pvLSO0xba431e8_pos" unit="mm" x="0" y="0" z="31.5"/>
4070 </physvol>
4071 <physvol name="/dd/Geometry/AD/lvOAV#pvOcrGdsLsoInOav0xbc16ab8">
4072 <volumeref ref="/dd/Geometry/AdDetails/lvOcrGdsLsoInOav0xbc15650"/>
4073 <position name="/dd/Geometry/AD/lvOAV#pvOcrGdsLsoInOav0xbc16ab8_pos" unit="mm" x="0" y="0" z="2024.81037191693"/>
4074 </physvol>
4075 <physvol name="/dd/Geometry/AD/lvOAV#pvOcrCalLsoInOav0xbc16860">
4076 <volumeref ref="/dd/Geometry/AdDetails/lvOcrCalLsoInOav0xbc172a0"/>
4077 <position name="/dd/Geometry/AD/lvOAV#pvOcrCalLsoInOav0xbc16860_pos" unit="mm" x="0" y="0" z="2024.81037191693"/>
4078 </physvol>
4079 </volume>
simon:gdml blyth$ vi ~/.sqliterc # avoid truncation with ".width 256"
simon:gdml blyth$ echo "select distinct(name) from physvol order by name ;" | sqlite3 $LOCAL_BASE/env/geant4/geometry/gdml/g4_01.gdml.db > physvol_names
simon:gdml blyth$ scp N:/data1/env/local/env/geant4/geometry/vrml2/g4_01.db /usr/local/env/geant4/geometry/vrml2/
simon:gdml blyth$ echo "select distinct(name) from shape order by name ;" | sqlite3 $LOCAL_BASE/env/geant4/geometry/vrml2/g4_01.db > shape_names
Apparently the VRML2 names have been de-duped via the .1005 etc:
simon:gdml blyth$ diff -y physvol_names shape_names | head -10
name name
------------------------------------------------------------- -------------------------------------------------------------
/dd/Geometry/AD/lvADE#pvAdVertiCableTray | /dd/Geometry/AD/lvADE#pvAdVertiCableTray.1005
/dd/Geometry/AD/lvADE#pvCenterCalibE | /dd/Geometry/AD/lvADE#pvCenterCalibE.1001
/dd/Geometry/AD/lvADE#pvElectricalDistributionBoxE | /dd/Geometry/AD/lvADE#pvElectricalDistributionBoxE.1007
/dd/Geometry/AD/lvADE#pvGCatCalibE | /dd/Geometry/AD/lvADE#pvGCatCalibE.1004
/dd/Geometry/AD/lvADE#pvGasDistributionBoxE | /dd/Geometry/AD/lvADE#pvGasDistributionBoxE.1006
/dd/Geometry/AD/lvADE#pvMOClarityBoxE | /dd/Geometry/AD/lvADE#pvMOClarityBoxE.1008
/dd/Geometry/AD/lvADE#pvOffCenterCalibE | /dd/Geometry/AD/lvADE#pvOffCenterCalibE.1003
/dd/Geometry/AD/lvADE#pvOflTnkContainer | /dd/Geometry/AD/lvADE#pvOflTnkContainer.1002
simon:gdml blyth$ diff -y physvol_names shape_names | tail -10
/dd/Geometry/Sites/lvNearHallBot#pvNearHallRadSlabs#pvNearHal | /dd/Geometry/Sites/lvNearHallBot#pvNearHallRadSlabs#pvNearHal
/dd/Geometry/Sites/lvNearHallBot#pvNearPoolDead | /dd/Geometry/Sites/lvNearHallBot#pvNearPoolDead.1000
/dd/Geometry/Sites/lvNearHallTop#pvNearRPCRoof | /dd/Geometry/Sites/lvNearHallTop#pvNearRPCRoof.1003
/dd/Geometry/Sites/lvNearHallTop#pvNearRPCSptRoof | /dd/Geometry/Sites/lvNearHallTop#pvNearRPCSptRoof.1004
/dd/Geometry/Sites/lvNearHallTop#pvNearTeleRpc#pvNearTeleRpc: | /dd/Geometry/Sites/lvNearHallTop#pvNearTeleRpc#pvNearTeleRpc:
/dd/Geometry/Sites/lvNearHallTop#pvNearTeleRpc#pvNearTeleRpc: | /dd/Geometry/Sites/lvNearHallTop#pvNearTeleRpc#pvNearTeleRpc:
/dd/Geometry/Sites/lvNearHallTop#pvNearTopCover | /dd/Geometry/Sites/lvNearHallTop#pvNearTopCover.1000
/dd/Geometry/Sites/lvNearSiteRock#pvNearHallBot | /dd/Geometry/Sites/lvNearSiteRock#pvNearHallBot.1001
/dd/Geometry/Sites/lvNearSiteRock#pvNearHallTop | /dd/Geometry/Sites/lvNearSiteRock#pvNearHallTop.1000
/dd/Structure/Sites/db-rock | /dd/Structure/Sites/db-rock.1000
simon:gdml blyth$
Using a very recent sqlite3 (for the instr function) chop off the VRML2 de-dupe:
[blyth@belle7 gdml]$ sqlite3-path
[blyth@belle7 gdml]$ sqlite3 -version
-- Loading resources from /home/blyth/.sqliterc
3.8.0.2 2013-09-03 17:11:13 7dd4968f235d6e1ca9547cda9cf3bd570e1609ef
[blyth@belle7 gdml]$ vi ~/.sqliterc
[blyth@belle7 gdml]$ echo "select distinct(substr(name,0,instr(name,'.'))) as name from shape order by name ;" | sqlite3 $LOCAL_BASE/env/geant4/geometry/vrml2/g4_01.db > shape_names_2
simon:gdml blyth$ scp N:env/geant4/geometry/gdml/shape_names_2 .
simon:gdml blyth$ diff physvol_names shape_names_2
simon:gdml blyth$
Thus there are exactly the same VRML2 de-duped distinct shape names as GDML physvol names.
Only 249 volume/@name in the GDML:
simon:gdml blyth$ grep volume\ $LOCAL_BASE/env/geant4/geometry/gdml/g4_01.gdml
<volume name="/dd/Geometry/PoolDetails/lvNearTopCover0xbad46a0">
<volume name="/dd/Geometry/RPC/lvRPCStrip0xb839910">
<volume name="/dd/Geometry/RPC/lvRPCGasgap140xb7491f8">
<volume name="/dd/Geometry/RPC/lvRPCBarCham140xbad5978">
<volume name="/dd/Geometry/RPC/lvRPCGasgap230xb83ee78">
...
<volume name="/dd/Geometry/RadSlabs/lvNearRadSlab80xc505ff8">
<volume name="/dd/Geometry/RadSlabs/lvNearRadSlab90xc632930">
<volume name="/dd/Geometry/Sites/lvNearHallBot0xb7dd4a8">
<volume name="/dd/Geometry/Sites/lvNearSiteRock0xb82e578">
<volume name="World0xc6337a8">
simon:gdml blyth$ grep volume\ $LOCAL_BASE/env/geant4/geometry/gdml/g4_01.gdml | wc -l
249
simon:gdml blyth$ echo "select count(*) from volume ;" | sqlite3 /usr/local/env/geant4/geometry/gdml/g4_01.gdml.db
249