80: fpContainerVolume(containerVolume)
81, fpParameterisedVolume(nullptr)
84, fTransform(transform)
86 if (fpContainerVolume ==
nullptr)
return;
99 G4bool isContainer =
false;
102 pv1 = lv0->GetDaughter(0);
103 lv1 = pv1->GetLogicalVolume();
104 if (dynamic_cast<G4PVParameterised*>(pv1)) {
106 fpParameterisedVolume = pv1;
109 pv2 = lv1->GetDaughter(0);
110 lv2 = pv2->GetLogicalVolume();
111 if (dynamic_cast<G4PVParameterised*>(pv2) &&
112 dynamic_cast<G4VNestedParameterisation*>(pv2->GetParameterisation())) {
114 fpParameterisedVolume = pv2;
117 pv3 = lv2->GetDaughter(0);
118 if (dynamic_cast<G4PVParameterised*>(pv3) &&
119 dynamic_cast<G4VNestedParameterisation*>(pv3->GetParameterisation())) {
121 fpParameterisedVolume = pv3;
130 G4VSolid* pEndSol = fpParameterisedVolume->GetLogicalVolume()->GetSolid ();
131 if (
dynamic_cast<G4Box*
>(pEndSol)) {
132 fMeshType = rectangle;
133 auto pBox =
static_cast<G4Box*
>(pEndSol);
135 f3DRPs.fHalfY = pBox->GetYHalfLength();
136 f3DRPs.fHalfZ = pBox->GetZHalfLength();
137 }
else if (
dynamic_cast<G4Tet*
>(pEndSol)) {
138 fMeshType = tetrahedron;
139 }
else if (
dynamic_cast<G4Tubs*
>(pEndSol)) {
140 fMeshType = cylinder;
141 }
else if (
dynamic_cast<G4Sphere*
>(pEndSol)) {
146 if (fMeshDepth == 3 && fMeshType == rectangle) {
149 fMeshType = nested3DRectangular;
150 pv1->GetReplicationData
151 (f3DRPs.fAxis1,f3DRPs.fNreplica1,f3DRPs.fWidth1,f3DRPs.fOffset1,f3DRPs.fConsuming1);
152 pv2->GetReplicationData
153 (f3DRPs.fAxis2,f3DRPs.fNreplica2,f3DRPs.fWidth2,f3DRPs.fOffset2,f3DRPs.fConsuming2);
154 pv3->GetReplicationData
155 (f3DRPs.fAxis3,f3DRPs.fNreplica3,f3DRPs.fWidth3,f3DRPs.fOffset3,f3DRPs.fConsuming3);