G4LogicalBorderSurface
=======================
GDML/G4DAE persisted form
----------------------------
::
157610
157611
157612
157613
157614
157615
157616
157617
Issues
~~~~~~~~
#. no copy numbers on the PV ref attributes, means not unique ?
* http://www-zeuthen.desy.de/geant4/geant4.9.3.b01/classG4LogicalBorderSurface.html
* http://www-zeuthen.desy.de/geant4/geant4.9.3.b01/classG4PVPlacement.html
* maybe should be using G4PVPlacement which implements G4VPhysicalVolume in order to have a CopyNo to give a unique ID
Refs
-----
* :google:`G4LogicalBorderSurface`
* http://hypernews.slac.stanford.edu/HyperNews/geant4/get/docsexamples/263.html
* http://hypernews.slac.stanford.edu/HyperNews/geant4/get/opticalphotons/428.html
* suggests need to double up G4LogicalBorderSurface with volumes switched if want photons from
either direction to see the same surface
* http://geant4.in2p3.fr/2005/Workshop/ShortCourse/session4/P.Gumplinger.pdf
Hmm physvolref/@ref attributes are PV names, these cannot directly
be matched against `node.id` as that has a uniquing count tacked on.
Using pvlookup reveals that cannot match to precise PV in many cases
getting two possibilites one from each of the 2 AD.
Maybe need to change G4DAE to pluck the uid at C++ level ? Or
could be bug in BorderSurface creation ? Persisting has lost
the association.
Geant4 Usage of G4LogicalBorderSurface
-------------------------------------------
::
[blyth@belle7 source]$ find . -name '*.cc' -exec grep -l G4LogicalBorderSurface {} \;
./persistency/gdml/src/G4GDMLReadStructure.cc
./processes/optical/src/G4OpBoundaryProcess.cc
./geometry/volumes/src/G4LogicalBorderSurface.cc
[blyth@belle7 source]$
`processes/optical/src/G4OpBoundaryProcess.cc`::
132 G4VParticleChange*
133 G4OpBoundaryProcess::PostStepDoIt(const G4Track& aTrack, const G4Step& aStep)
134 {
218 theModel = glisur;
219 theFinish = polished;
220
221 G4SurfaceType type = dielectric_dielectric;
222
223 Rindex = NULL;
224 OpticalSurface = NULL;
225
226 G4LogicalSurface* Surface = NULL;
227
228 Surface = G4LogicalBorderSurface::GetSurface
229 (pPreStepPoint ->GetPhysicalVolume(),
230 pPostStepPoint->GetPhysicalVolume());
// THIS IS ONLY CHANCE TO SNAG A BORDERSURFACE
231
232 if (Surface == NULL){
233 G4bool enteredDaughter=(pPostStepPoint->GetPhysicalVolume()
234 ->GetMotherLogical() ==
235 pPreStepPoint->GetPhysicalVolume()
236 ->GetLogicalVolume());
// poststep.PV.motherLV == prestep.PV.LV
// poststep mother logical is prestep logical ... so poststep must be daughter of prestep
237 if(enteredDaughter){
238 Surface = G4LogicalSkinSurface::GetSurface
239 (pPostStepPoint->GetPhysicalVolume()->
240 GetLogicalVolume());
241 if(Surface == NULL)
242 Surface = G4LogicalSkinSurface::GetSurface
243 (pPreStepPoint->GetPhysicalVolume()->
244 GetLogicalVolume());
245 }
246 else {
// does this imply poststep must be mother of prestep ?
// what about stepping between siblings ?
247 Surface = G4LogicalSkinSurface::GetSurface
248 (pPreStepPoint->GetPhysicalVolume()->
249 GetLogicalVolume());
250 if(Surface == NULL)
251 Surface = G4LogicalSkinSurface::GetSurface
252 (pPostStepPoint->GetPhysicalVolume()->
253 GetLogicalVolume());
254 }
255 }
Translating that into something digestable,
// Surface = G4LogicalBorderSurface::GetSurface(pPreStepPoint ->GetPhysicalVolume(),pPostStepPoint->GetPhysicalVolume());
// * border surface takes priority
//
// if(Surface == NULL){
// ...
// if(enteredDaughter){ // first try post and then pre : daughter has first dibs
// Surface = G4LogicalSkinSurface::GetSurface(pPostStepPoint->GetPhysicalVolume()->GetLogicalVolume());
// if(Surface == NULL){
// Surface = G4LogicalSkinSurface::GetSurface(pPreStepPoint->GetPhysicalVolume()->GetLogicalVolume());
// }
// }
// else
// { // first pre then post :
//
//
256
257 if (Surface) OpticalSurface =
258 dynamic_cast (Surface->GetSurfaceProperty());
259
PV Ambiguity Issue
--------------------
::
dump_bordersurface
[00]
pv1 (2) AdDetails__lvTopReflector--pvTopRefGap0xabcc228
__dd__Geometry__AdDetails__lvTopReflector--pvTopRefGap0xabcc228.0 __dd__Materials__Air0xab09580
__dd__Geometry__AdDetails__lvTopReflector--pvTopRefGap0xabcc228.1 __dd__Materials__Air0xab09580
pv2 (2) AdDetails__lvTopRefGap--pvTopESR0xab4bd50
__dd__Geometry__AdDetails__lvTopRefGap--pvTopESR0xab4bd50.0 __dd__Materials__ESR0xaeaaeb8
__dd__Geometry__AdDetails__lvTopRefGap--pvTopESR0xab4bd50.1 __dd__Materials__ESR0xaeaaeb8
Oil http://belle7.nuu.edu.tw/dae/tree/__dd__Geometry__AD__lvSST--pvOIL0xaa6d998.0.html
http://belle7.nuu.edu.tw/dae/tree/3155.html (many children)
Acr http://belle7.nuu.edu.tw/dae/tree/__dd__Geometry__AD__lvOIL--pvTopReflector0xab22490.0.html
http://belle7.nuu.edu.tw/dae/tree/4425.html (Acrylic, single child)
pv1 http://belle7.nuu.edu.tw/dae/tree/__dd__Geometry__AdDetails__lvTopReflector--pvTopRefGap0xabcc228.0___4.html
pv1 http://belle7.nuu.edu.tw/dae/tree/4426___4.html (Air, single child)
pv2 http://belle7.nuu.edu.tw/dae/tree/__dd__Geometry__AdDetails__lvTopRefGap--pvTopESR0xab4bd50.0.html
pv2 http://belle7.nuu.edu.tw/dae/tree/4427.html (EST, leaf )
http://belle7.nuu.edu.tw/dae/tree/__dd__Geometry__AdDetails__lvTopReflector--pvTopRefGap0xabcc228.1___4.html
http://belle7.nuu.edu.tw/dae/tree/6086___4.html
http://belle7.nuu.edu.tw/dae/tree/__dd__Geometry__AdDetails__lvTopRefGap--pvTopESR0xab4bd50.1.html
http://belle7.nuu.edu.tw/dae/tree/6087.html
This bordersurface pair are (single-parent)-(single-child) with the child being leaf node
The PV ambiguity is between the two ADs.
Construction is simarly shaped discs
Oil-Acrylic-Air-ESR
pv1 pv2
Double ambiguity, should yield two border surfaces ... the parent child pairings
can be used to break ambiguity ?
[01]
pv1 (2) AdDetails__lvBotReflector--pvBotRefGap0xaa6e3d8
__dd__Geometry__AdDetails__lvBotReflector--pvBotRefGap0xaa6e3d8.0 __dd__Materials__Air0xab09580
__dd__Geometry__AdDetails__lvBotReflector--pvBotRefGap0xaa6e3d8.1 __dd__Materials__Air0xab09580
pv2 (2) AdDetails__lvBotRefGap--pvBotESR0xae4eda0
__dd__Geometry__AdDetails__lvBotRefGap--pvBotESR0xae4eda0.0 __dd__Materials__ESR0xaeaaeb8
__dd__Geometry__AdDetails__lvBotRefGap--pvBotESR0xae4eda0.1 __dd__Materials__ESR0xaeaaeb8
Presumably same pattern as top reflector
Double ambiguity, means this should yield two surfaces... one for each AD
[02]
pv1 (2) AD__lvSST--pvOIL0xaa6d998
__dd__Geometry__AD__lvSST--pvOIL0xaa6d998.0 __dd__Materials__MineralOil0xaecfd78
__dd__Geometry__AD__lvSST--pvOIL0xaa6d998.1 __dd__Materials__MineralOil0xaecfd78
http://belle7.nuu.edu.tw/dae/tree/__dd__Geometry__AD__lvSST--pvOIL0xaa6d998.0.html
http://belle7.nuu.edu.tw/dae/tree/3155.html Oil
pv2 (2) AD__lvADE--pvSST0xaba3f60
__dd__Geometry__AD__lvADE--pvSST0xaba3f60.0 __dd__Materials__StainlessSteel0xadf7930
__dd__Geometry__AD__lvADE--pvSST0xaba3f60.1 __dd__Materials__StainlessSteel0xadf7930
http://belle7.nuu.edu.tw/dae/tree/__dd__Geometry__AD__lvADE--pvSST0xaba3f60.0.html
http://belle7.nuu.edu.tw/dae/tree/3154.html
(4 children, one of which os the Oil)
child(Oil)-parent(Steel) border
Thanks to the double ambiguity, this should yield two surfaces ? One for each AD
[03]
pv1 (1) Pool__lvNearPoolIWS--pvNearADE10xaa9d608
__dd__Geometry__Pool__lvNearPoolIWS--pvNearADE10xaa9d608.0 __dd__Materials__IwsWater0xab82978
http://belle7.nuu.edu.tw/dae/tree/__dd__Geometry__Pool__lvNearPoolIWS--pvNearADE10xaa9d608.0.html
http://belle7.nuu.edu.tw/dae/tree/3153___1.html cylindrical Iws containing SST
pv2 (2) AD__lvADE--pvSST0xaba3f60
__dd__Geometry__AD__lvADE--pvSST0xaba3f60.0 __dd__Materials__StainlessSteel0xadf7930
__dd__Geometry__AD__lvADE--pvSST0xaba3f60.1 __dd__Materials__StainlessSteel0xadf7930
http://belle7.nuu.edu.tw/dae/tree/__dd__Geometry__AD__lvADE--pvSST0xaba3f60.0.html
http://belle7.nuu.edu.tw/dae/tree/3154.html
http://belle7.nuu.edu.tw/dae/tree/__dd__Geometry__AD__lvADE--pvSST0xaba3f60.1.html
http://belle7.nuu.edu.tw/dae/tree/4814.html
Parent(water)-child(Steel),
[04]
pv1 (1) Pool__lvNearPoolIWS--pvNearADE20xaaa18b8
__dd__Geometry__Pool__lvNearPoolIWS--pvNearADE20xaaa18b8.0 __dd__Materials__IwsWater0xab82978
pv2 (2) AD__lvADE--pvSST0xaba3f60
__dd__Geometry__AD__lvADE--pvSST0xaba3f60.0 __dd__Materials__StainlessSteel0xadf7930
__dd__Geometry__AD__lvADE--pvSST0xaba3f60.1 __dd__Materials__StainlessSteel0xadf7930
Same for other AD, no ambiguity for pv1 but is for pv2
[05]
pv1 (1) Pool__lvNearPoolCurtain--pvNearPoolIWS0xae08fa0
__dd__Geometry__Pool__lvNearPoolCurtain--pvNearPoolIWS0xae08fa0.0 __dd__Materials__IwsWater0xab82978
http://belle7.nuu.edu.tw/dae/tree/__dd__Geometry__Pool__lvNearPoolCurtain--pvNearPoolIWS0xae08fa0.0.html
http://belle7.nuu.edu.tw/dae/tree/3152.html
pv2 (1) Pool__lvNearPoolOWS--pvNearPoolCurtain0xae9ba38
__dd__Geometry__Pool__lvNearPoolOWS--pvNearPoolCurtain0xae9ba38.0 __dd__Materials__Tyvek0xab26538
http://belle7.nuu.edu.tw/dae/tree/__dd__Geometry__Pool__lvNearPoolOWS--pvNearPoolCurtain0xae9ba38.0.html
http://belle7.nuu.edu.tw/dae/tree/3151.html
child-parent
[06]
pv1 (1) Pool__lvNearPoolLiner--pvNearPoolOWS0xaa64f68
__dd__Geometry__Pool__lvNearPoolLiner--pvNearPoolOWS0xaa64f68.0 __dd__Materials__OwsWater0xabb2118
http://belle7.nuu.edu.tw/dae/tree/__dd__Geometry__Pool__lvNearPoolLiner--pvNearPoolOWS0xaa64f68.0.html
http://belle7.nuu.edu.tw/dae/tree/3150.html
pv2 (1) Pool__lvNearPoolDead--pvNearPoolLiner0xab6b300
__dd__Geometry__Pool__lvNearPoolDead--pvNearPoolLiner0xab6b300.0 __dd__Materials__Tyvek0xab26538
http://belle7.nuu.edu.tw/dae/tree/__dd__Geometry__Pool__lvNearPoolDead--pvNearPoolLiner0xab6b300.0.html
http://belle7.nuu.edu.tw/dae/tree/3149.html
child-parent
[07]
pv1 (1) Sites__lvNearHallBot--pvNearPoolDead0xaa63ff0
__dd__Geometry__Sites__lvNearHallBot--pvNearPoolDead0xaa63ff0.0 __dd__Materials__DeadWater0xaabb308
http://belle7.nuu.edu.tw/dae/tree/__dd__Geometry__Sites__lvNearHallBot--pvNearPoolDead0xaa63ff0.0.html
http://belle7.nuu.edu.tw/dae/tree/3148.html
pv2 (1) Pool__lvNearPoolDead--pvNearPoolLiner0xab6b300
__dd__Geometry__Pool__lvNearPoolDead--pvNearPoolLiner0xab6b300.0 __dd__Materials__Tyvek0xab26538
http://belle7.nuu.edu.tw/dae/tree/__dd__Geometry__Pool__lvNearPoolDead--pvNearPoolLiner0xab6b300.0.html
http://belle7.nuu.edu.tw/dae/tree/3149.html
parent-child
How deep does the ambiguity bug go ?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#. GDML appending the pointer to volume IDs is a crutch, that assumes C++ instance identity
and PV identity are equivalent : this issue seems to indicates that is not true
Check VMRL code
~~~~~~~~~~~~~~~~~
`G4VRML2SceneHandlerFunc.icc`::
169 void G4VRML2SCENEHANDLER::AddPrimitive(const G4Polyhedron& polyhedron)
170 {
...
182 // Current Model
183 const G4VModel* pv_model = GetModel();
184 G4String pv_name = "No model";
185 if (pv_model) pv_name = pv_model->GetCurrentTag() ;
186
187 // VRML codes are generated below
188
189 //std::cerr << "SCB " << pv_name << "\n";
190 fDest << "#---------- SOLID: " << pv_name << "\n";
191
192
`visualization/modeling/include/G4VModel.hh`::
74 virtual G4String GetCurrentTag () const;
75 // A tag which depends on the current state of the model.
76
`visualization/modeling/src/G4VModel.cc`::
49 G4String G4VModel::GetCurrentTag () const {
50 // Override in concrete class if concept of "current" is meaningful.
51 return fGlobalTag;
52 }
`visualization/modeling/src/G4PhysicalVolumeModel.cc`::
181 G4String G4PhysicalVolumeModel::GetCurrentTag () const
182 {
183 if (fpCurrentPV) {
184 std::ostringstream o;
185 o << fpCurrentPV -> GetCopyNo ();
186 return fpCurrentPV -> GetName () + "." + o.str();
187 }
188 else {
189 return "WARNING: NO CURRENT VOLUME - global tag is " + fGlobalTag;
190 }
191 }
PV CopyNo
~~~~~~~~~~~
`geometry/management/include/G4VPhysicalVolume.hh`::
140 virtual G4bool IsMany() const = 0;
141 // Return true if the volume is MANY (not implemented yet).
142 virtual G4int GetCopyNo() const = 0;
143 // Return the volumes copy number.
144 virtual void SetCopyNo(G4int CopyNo) = 0;
145 // Set the volumes copy number.
146 virtual G4bool IsReplicated() const = 0;
147 // Return true if replicated (single object instance represents
148 // many real volumes), else false.
149 virtual G4bool IsParameterised() const = 0;
150 // Return true if parameterised (single object instance represents
151 // many real parameterised volumes), else false.
`geometry/volumes/src/G4PVPlacement.cc`::
174 // GetCopyNo
175 //
176 G4int G4PVPlacement::GetCopyNo() const
177 {
178 return fcopyNo;
179 }
180
181 // ----------------------------------------------------------------------
182 // SetCopyNo
183 //
184 void G4PVPlacement::SetCopyNo(G4int newCopyNo)
185 {
186 fcopyNo= newCopyNo;
187 }
188
What is setting the CopyNo?::
[blyth@belle7 source]$ find . -name '*.cc' -exec grep -H SetCopyNo {} \;
./persistency/ascii/src/G4tgbPlaceParamCircle.cc: physVol->SetCopyNo( copyNo );
./persistency/ascii/src/G4tgbPlaceParamLinear.cc: physVol->SetCopyNo( copyNo );
./persistency/ascii/src/G4tgbPlaceParamSquare.cc: physVol->SetCopyNo( copyNo );
./visualization/modeling/src/G4PhysicalVolumeModel.cc: pVPV -> SetCopyNo (n);
./visualization/modeling/src/G4PhysicalVolumeModel.cc: pVPV -> SetCopyNo (n);
./geometry/volumes/src/G4PVReplica.cc:void G4PVReplica::SetCopyNo(G4int newCopyNo)
./geometry/volumes/src/G4PVPlacement.cc:// SetCopyNo
./geometry/volumes/src/G4PVPlacement.cc:void G4PVPlacement::SetCopyNo(G4int newCopyNo)
./geometry/divisions/src/G4PVDivision.cc:void G4PVDivision::SetCopyNo(G4int newCopyNo)
./geometry/navigation/src/G4RegularNavigation.cc: pPhysical->SetCopyNo(replicaNo);
./geometry/navigation/src/G4ParameterisedNavigation.cc: pPhysical->SetCopyNo(replicaNo);
./geometry/navigation/src/G4Navigator.cc: fBlockedPhysicalVolume->SetCopyNo(fBlockedReplicaNo);
./geometry/navigation/src/G4Navigator.cc: fBlockedPhysicalVolume->SetCopyNo(fBlockedReplicaNo);
[blyth@belle7 source]$
DAE CopyNo
~~~~~~~~~~~
CopyNo is non trivial to persist into DAE, as DAE retains the tree structure unlike VRML2 that fully unwinds it.
The copyNo kinda emerges from the traverse. Despite this it is included in DAE metadata elements, but difficult
to interpret.
DAE Debug
------------
Interleaving the bordersurface with the debug bsurf from the meta element. Observations:
* one extra bsurf,
* copyNo not helping... presumably because of when it is requested, need to do this during the traverse somehow as the copyNo is being incremented
::
157610
157611
157612
157613
157614
157615
157616
157617
157618
157619
157620
157621
157642
157643
157644
157645
157646
157647
157648
157649
157650
157651
157652
157653
157654
157622
157623
157624
157625
157626
157627
157628
157629
157655
157656
157657
157658
157659
157660
157661
157662
157630
157631
157632
157633
157675
157676
157677
157678
157634
157635
157636
157637
157663
157664
157665
157666
########### HUH THIS ONE WITH SAME PV1 AS PRIOR IS MISSING IN THE ABOVE
########### THE GDML EXTRACTED CODE THAT JUST CHECKS THE FIRST OF THE PAIR IS WRONG
157671
157672
157673
157674
157638
157639
157640
157641
157667
157668
157669
157670
157679
157680
157681
GiGa Creation
--------------
::
[blyth@belle7 lhcb]$ find . -name '*.cpp' -exec grep -H G4LogicalBorderSurface {} \;
./Sim/GiGaCnv/src/component/GiGaSurfaceCnv.cpp:#include "G4LogicalBorderSurface.hh"
./Sim/GiGaCnv/src/component/GiGaSurfaceCnv.cpp: G4LogicalBorderSurface* surf =
./Sim/GiGaCnv/src/component/GiGaSurfaceCnv.cpp: G4LogicalBorderSurface::GetSurface( pv1 , pv2 );
./Sim/GiGaCnv/src/component/GiGaSurfaceCnv.cpp: { logsurf = new G4LogicalBorderSurface( surface->registry()->identifier() ,
[blyth@belle7 lhcb]$
Ambiguity By Design ? Detdesc XML would suggest so
-----------------------------------------------------
* see geant4/geometry/materials/dd.py for detdesc parsing
::
[blyth@belle7 DDDB]$ pwd
/data1/env/local/dybx/NuWa-trunk/dybgaudi/Detector/XmlDetDesc/DDDB
[blyth@belle7 DDDB]$ find . -name surfaces.xml
./AdDetails/surfaces.xml
./Parameters/surfaces.xml
./AdDetails_213/surfaces.xml
./PoolDetails/surfaces.xml
Only one surface definition for all such reflectors in all ADs ?
AdDetails/surfaces.xml::
43
44
45
46
53
54
55
62
63
Parameters/surfaces.xml::
09
10
11
12
13
14
15
16
17
18
19
20
21
::
[blyth@belle7 DDDB]$ diff AdDetails/surfaces.xml AdDetails_213/surfaces.xml
6a7,8
>
>
18c20
<
---
>
24c26
<
---
>
28,37c30,39
<
<
<
<
<
<
<
<
<
<
---
>
>
>
>
>
>
>
>
>
>
88,96c90,92
<
<
<
---
>
>
>
128,136c124,125
<
<
<
---
>
>
[blyth@belle7 DDDB]$
BorderSurface Debug during traverse
--------------------------------------
* PV2 matches on the volume before (the mother ?)
::
G4DAE::GetBorderSurface ... /dd/Geometry/AD/lvOIL#pvRadialShield:27[27]
G4DAE::GetBorderSurface ... /dd/Geometry/AD/lvOIL#pvRadialShield:28[28]
G4DAE::GetBorderSurface ... /dd/Geometry/AD/lvOIL#pvRadialShield:29[29]
G4DAE::GetBorderSurface ... /dd/Geometry/AD/lvOIL#pvRadialShield:30[30]
G4DAE::GetBorderSurface ... /dd/Geometry/AD/lvOIL#pvRadialShield:31[31]
G4DAE::GetBorderSurface ... /dd/Geometry/AdDetails/lvTopRefGap#pvTopESR[1000]
G4DAE::GetBorderSurface surf PV2 match
PV1 [copyNo]name [1000]/dd/Geometry/AdDetails/lvTopReflector#pvTopRefGap
PV2 [copyNo]name [1000]/dd/Geometry/AdDetails/lvTopRefGap#pvTopESR
G4DAE::GetBorderSurface ... /dd/Geometry/AdDetails/lvTopReflector#pvTopRefGap[1000]
G4DAE::GetBorderSurface surf_first_pv1
PV1 [copyNo]name [1000]/dd/Geometry/AdDetails/lvTopReflector#pvTopRefGap
PV2 [copyNo]name [1000]/dd/Geometry/AdDetails/lvTopRefGap#pvTopESR
G4DAE::GetBorderSurface ... /dd/Geometry/AD/lvOIL#pvTopReflector[1429]
G4DAE::GetBorderSurface ... /dd/Geometry/AdDetails/lvBotRefGap#pvBotESR[1000]
G4DAE::GetBorderSurface surf PV2 match
PV1 [copyNo]name [1000]/dd/Geometry/AdDetails/lvBotReflector#pvBotRefGap
PV2 [copyNo]name [1000]/dd/Geometry/AdDetails/lvBotRefGap#pvBotESR
G4DAE::GetBorderSurface ... /dd/Geometry/AdDetails/lvBotReflector#pvBotRefGap[1000]
G4DAE::GetBorderSurface surf_first_pv1
PV1 [copyNo]name [1000]/dd/Geometry/AdDetails/lvBotReflector#pvBotRefGap
PV2 [copyNo]name [1000]/dd/Geometry/AdDetails/lvBotRefGap#pvBotESR
G4DAE::GetBorderSurface ... /dd/Geometry/AD/lvOIL#pvBotReflector[1430]
G4DAE::GetBorderSurface ... /dd/Geometry/AD/lvOIL#pvSstBotRadiusRibs#SstBotRibs#SstBotRibRot[1431]
G4DAE::GetBorderSurface ... /dd/Geometry/AD/lvOIL#pvSstBotRadiusRibs#SstBotRibs:1#SstBotRibRot[1]
G4DAE::GetBorderSurface ... /dd/Geometry/AD/lvOIL#pvSstBotRadiusRibs#SstBotRibs:2#SstBotRibRot[2]
G4DAE::GetBorderSurface ... /dd/Geometry/AD/lvOIL#pvSstBotRadiusRibs#SstBotRibs:3#SstBotRibRot[3]
G4DAE::GetBorderSurface ... /dd/Geometry/AD/lvOIL#pvWallUpperLedSourceAssy[1517]
G4DAE::GetBorderSurface ... /dd/Geometry/AD/lvOIL#pvWallMidLedSourceAssy[1518]
G4DAE::GetBorderSurface ... /dd/Geometry/AD/lvOIL#pvWallBotLedSourceAssy[1519]
G4DAE::GetBorderSurface ... /dd/Geometry/AD/lvSST#pvOIL[1000]
G4DAE::GetBorderSurface surf_first_pv1
PV1 [copyNo]name [1000]/dd/Geometry/AD/lvSST#pvOIL
PV2 [copyNo]name [1000]/dd/Geometry/AD/lvADE#pvSST
G4DAE::GetBorderSurface ... /dd/Geometry/AD/lvSST#lvCenterCalibHoleSST[1001]
G4DAE::GetBorderSurface ... /dd/Geometry/AD/lvSST#pvOffCenterCalibHoleSST[1002]
G4DAE::GetBorderSurface ... /dd/Geometry/AD/lvSST#pvGCatCalibHoleSST[1003]
G4DAE::GetBorderSurface ... /dd/Geometry/AD/lvADE#pvSST[1000]
G4DAE::GetBorderSurface surf PV2 match
PV1 [copyNo]name [1000]/dd/Geometry/AD/lvSST#pvOIL
PV2 [copyNo]name [1000]/dd/Geometry/AD/lvADE#pvSST
G4DAE::GetBorderSurface surf PV2 match
PV1 [copyNo]name [1000]/dd/Geometry/Pool/lvNearPoolIWS#pvNearADE1
PV2 [copyNo]name [1000]/dd/Geometry/AD/lvADE#pvSST
G4DAE::GetBorderSurface surf PV2 match
PV1 [copyNo]name [1001]/dd/Geometry/Pool/lvNearPoolIWS#pvNearADE2
PV2 [copyNo]name [1000]/dd/Geometry/AD/lvADE#pvSST
G4DAE::GetBorderSurface ... /dd/Geometry/CalibrationBox/lvCenterCalibE#pvCenterBottomPlate[1000]
G4DAE::GetBorderSurface ... /dd/Geometry/CalibrationBox/lvDomeInterior#pvShieldingPuck[1000]
G4DAE::GetBorderSurface ... /dd/Geometry/CalibrationBox/lvDomeInterior#pvBearingRing[1001]
G4DAE::GetBorderSurface ... /dd/Geometry/CalibrationBox/lvDomeInterior#pvTurntableLowerPlate[1002]
G4DAE::GetBorderSurface ... /dd/Geometry/AdDetails/lvMOOverflowTankE#pvMOFTTopFlangeInterior[1004]
G4DAE::GetBorderSurface ... /dd/Geometry/AdDetails/lvMOOverflowTankE#pvMOFTTopCover[1005]
G4DAE::GetBorderSurface ... /dd/Geometry/AD/lvADE#pvlvMOOverflowTankE1[1009]
G4DAE::GetBorderSurface ... /dd/Geometry/AD/lvADE#pvlvMOOverflowTankE2[1010]
G4DAE::GetBorderSurface ... /dd/Geometry/Pool/lvNearPoolIWS#pvNearADE1[1000]
G4DAE::GetBorderSurface surf_first_pv1
PV1 [copyNo]name [1000]/dd/Geometry/Pool/lvNearPoolIWS#pvNearADE1
PV2 [copyNo]name [1000]/dd/Geometry/AD/lvADE#pvSST
G4DAE::GetBorderSurface ... /dd/Geometry/Pool/lvNearPoolIWS#pvNearADE2[1001]
G4DAE::GetBorderSurface surf_first_pv1
PV1 [copyNo]name [1001]/dd/Geometry/Pool/lvNearPoolIWS#pvNearADE2
PV2 [copyNo]name [1000]/dd/Geometry/AD/lvADE#pvSST
G4DAE::GetBorderSurface ... /dd/Geometry/Pool/lvNearPoolIWS#pvVetoPmtNearInn#pvNearInnWall1#pvNearInnWall1:1#pvVetoPmtUnit#pvPmtHemi[1]
G4DAE::GetBorderSurface ... /dd/Geometry/Pool/lvNearPoolIWS#pvVetoPmtNearInn#pvNearInnWall1#pvNearInnWall1:1#pvVetoPmtUnit#pvPmtMount#pvPmtTopRing[1]
G4DAE::GetBorderSurface ... /dd/Geometry/Pool/lvNearPoolIWS#pvVetoPmtNearInn#pvNearInnWall1#pvNearInnWall1:1#pvVetoPmtUnit#pvPmtMount#pvPmtBaseRing[1]
G4DAE::GetBorderSurface ... /dd/Geometry/Pool/lvNearPoolOWS#pvNearMuonCableTray#pvMuonCableTrayNear:2#MuonHalfCableTrayNear:7[2]
G4DAE::GetBorderSurface ... /dd/Geometry/Pool/lvNearPoolOWS#pvOutWaterPipeNear#OutWaterPipeNear:1[1]
G4DAE::GetBorderSurface ... /dd/Geometry/Pool/lvNearPoolOWS#pvOutWaterPipeNear#OutWaterPipeNear:2[2]
G4DAE::GetBorderSurface ... /dd/Geometry/Pool/lvNearPoolLiner#pvNearPoolOWS[1000]
G4DAE::GetBorderSurface surf_first_pv1
PV1 [copyNo]name [1000]/dd/Geometry/Pool/lvNearPoolLiner#pvNearPoolOWS
PV2 [copyNo]name [1000]/dd/Geometry/Pool/lvNearPoolDead#pvNearPoolLiner
G4DAE::GetBorderSurface surf other PV1 match
PV1 [copyNo]name [1000]/dd/Geometry/Pool/lvNearPoolLiner#pvNearPoolOWS
PV2 [copyNo]name [1000]/dd/Geometry/Pool/lvNearPoolOWS#pvNearPoolCurtain
G4DAE::GetBorderSurface ... /dd/Geometry/Pool/lvNearPoolLiner#pvNearADE1LinerLegs#pvLegInLiner:1#pvLegInLinerUnit[1]
G4DAE::GetBorderSurface ... /dd/Geometry/Pool/lvNearPoolLiner#pvNearADE1LinerLegs#pvLegInLiner:2#pvLegInLinerUnit[2]
G4DAE::GetBorderSurface ... /dd/Geometry/Pool/lvNearPoolLiner#pvNearADE1LinerLegs#pvLegInLiner:3#pvLegInLinerUnit[3]
G4DAE::GetBorderSurface ... /dd/Geometry/Pool/lvNearPoolLiner#pvNearADE1LinerLegs#pvLegInLiner:4#pvLegInLinerUnit[4]
G4DAE::GetBorderSurface ... /dd/Geometry/Pool/lvNearPoolLiner#pvNearADE2LinerLegs#pvLegInLiner:1#pvLegInLinerUnit[1]
G4DAE::GetBorderSurface ... /dd/Geometry/Pool/lvNearPoolLiner#pvNearADE2LinerLegs#pvLegInLiner:2#pvLegInLinerUnit[2]
G4DAE::GetBorderSurface ... /dd/Geometry/Pool/lvNearPoolLiner#pvNearADE2LinerLegs#pvLegInLiner:3#pvLegInLinerUnit[3]
G4DAE::GetBorderSurface ... /dd/Geometry/Pool/lvNearPoolLiner#pvNearADE2LinerLegs#pvLegInLiner:4#pvLegInLinerUnit[4]
G4DAE::GetBorderSurface ... /dd/Geometry/Pool/lvNearPoolDead#pvNearPoolLiner[1000]
G4DAE::GetBorderSurface surf PV2 match
PV1 [copyNo]name [1000]/dd/Geometry/Pool/lvNearPoolLiner#pvNearPoolOWS
PV2 [copyNo]name [1000]/dd/Geometry/Pool/lvNearPoolDead#pvNearPoolLiner
G4DAE::GetBorderSurface surf PV2 match
PV1 [copyNo]name [1000]/dd/Geometry/Sites/lvNearHallBot#pvNearPoolDead
PV2 [copyNo]name [1000]/dd/Geometry/Pool/lvNearPoolDead#pvNearPoolLiner
G4DAE::GetBorderSurface ... /dd/Geometry/Pool/lvNearPoolDead#pvNearADE1DeadLegs#pvLegInDead:1#pvLegInDeadUnit[1]
G4DAE::GetBorderSurface ... /dd/Geometry/Pool/lvNearPoolDead#pvNearADE1DeadLegs#pvLegInDead:2#pvLegInDeadUnit[2]
G4DAE::GetBorderSurface ... /dd/Geometry/Pool/lvNearPoolDead#pvNearADE1DeadLegs#pvLegInDead:3#pvLegInDeadUnit[3]
G4DAE::GetBorderSurface ... /dd/Geometry/Pool/lvNearPoolDead#pvNearADE1DeadLegs#pvLegInDead:4#pvLegInDeadUnit[4]
G4DAE::GetBorderSurface ... /dd/Geometry/Pool/lvNearPoolDead#pvNearADE2DeadLegs#pvLegInDead:1#pvLegInDeadUnit[1]
G4DAE::GetBorderSurface ... /dd/Geometry/Pool/lvNearPoolDead#pvNearADE2DeadLegs#pvLegInDead:2#pvLegInDeadUnit[2]
G4DAE::GetBorderSurface ... /dd/Geometry/Pool/lvNearPoolDead#pvNearADE2DeadLegs#pvLegInDead:3#pvLegInDeadUnit[3]
G4DAE::GetBorderSurface ... /dd/Geometry/Pool/lvNearPoolDead#pvNearADE2DeadLegs#pvLegInDead:4#pvLegInDeadUnit[4]
G4DAE::GetBorderSurface ... /dd/Geometry/Sites/lvNearHallBot#pvNearPoolDead[1000]
G4DAE::GetBorderSurface surf_first_pv1
PV1 [copyNo]name [1000]/dd/Geometry/Sites/lvNearHallBot#pvNearPoolDead
PV2 [copyNo]name [1000]/dd/Geometry/Pool/lvNearPoolDead#pvNearPoolLiner
G4DAE::GetBorderSurface ... /dd/Geometry/Sites/lvNearHallBot#pvNearHallRadSlabs#pvNearHallRadSlab1[1001]
G4DAE::GetBorderSurface ... /dd/Geometry/Sites/lvNearHallBot#pvNearHallRadSlabs#pvNearHallRadSlab2[1002]
G4DAE::GetBorderSurface ... /dd/Geometry/Sites/lvNearHallBot#pvNearHallRadSlabs#pvNearHallRadSlab3[1003]
G4DAE::GetBorderSurface ... /dd/Geometry/Sites/lvNearHallBot#pvNearHallRadSlabs#pvNearHallRadSlab4[1004]
G4DAE::GetBorderSurface ... /dd/Geometry/Sites/lvNearHallBot#pvNearHallRadSlabs#pvNearHallRadSlab5[1005]