GDML Examination ================== .. contents:: :local: TODO ---- #. try to create the geometry Russian doll hierarchy (starting from World) from the GDML parse, to grok the format physvol -------- :: 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 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 : Reading geometry from file: /data1/env/local/env/geant4/geometry/gdml/g4_01.gdml Info in : 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 : Top volume is World. Master volume is World Info in : Fixing runtime shapes... Info in : ...Nothing to fix Info in : Counting nodes... Info in : Voxelizing... Info in : Building cache... Info in : --- Maximum geometry depth set to 100 Info in : 12230 nodes/ 249 volume UID's in default geometry Info in : ----------------modeler ready---------------- (class TGeoManager*)0x89be148 root [1] VRML2 GDML mismatch ? ---------------------- 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 Maybe the AD split happedns here ---------------------------------- :: 26985 26986 26987 26988 26989 26990 26991 26992 26993 26994 26995 26996 26997 26998 26999 27000 27001 27002 27003 27004 27005 27006 27007 27008 27009 27010 27011 27012 27013 27014 27015 27016 27017 27018 27019 27020 27021 27022 Pick a volume to see whats going down in the GDML ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ :: 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 4065 4066 4067 4068 4069 4070 4071 4072 4073 4074 4075 4076 4077 4078 4079 Compare VRML2 shape names with physvol names ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ :: 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. volume names --------------- Only 249 `volume/\@name` in the GDML:: simon:gdml blyth$ grep volume\ $LOCAL_BASE/env/geant4/geometry/gdml/g4_01.gdml ... 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