69                     const G4Box* 
const box)
 
   71    xercesc::DOMElement* box_dimensionsElement = 
NewElement(
"box_dimensions");
 
   72    box_dimensionsElement->
 
   74    box_dimensionsElement->
 
   76    box_dimensionsElement->
 
   78    box_dimensionsElement->
 
   80    parametersElement->appendChild(box_dimensionsElement);
 
   85                     const G4Trd* 
const trd)
 
   87    xercesc::DOMElement* trd_dimensionsElement = 
NewElement(
"trd_dimensions");
 
   88    trd_dimensionsElement->
 
   90    trd_dimensionsElement->
 
   92    trd_dimensionsElement->
 
   94    trd_dimensionsElement->
 
   96    trd_dimensionsElement->
 
   98    trd_dimensionsElement->
 
  100    parametersElement->appendChild(trd_dimensionsElement);
 
  108    const G4double phi = (simaxis.
z() != 1.0)
 
  109                       ? (std::atan(simaxis.
y()/simaxis.
x())) : (0.0);
 
  110    const G4double theta = std::acos(simaxis.
z());
 
  114    xercesc::DOMElement* trap_dimensionsElement = 
NewElement(
"trap");
 
  115    trap_dimensionsElement->
 
  117    trap_dimensionsElement->
 
  119    trap_dimensionsElement->
 
  121    trap_dimensionsElement->
 
  123    trap_dimensionsElement->
 
  125    trap_dimensionsElement->
 
  127    trap_dimensionsElement->
 
  129    trap_dimensionsElement->
 
  131    trap_dimensionsElement->
 
  133    trap_dimensionsElement->
 
  135    trap_dimensionsElement->
 
  137    trap_dimensionsElement->
 
  139    trap_dimensionsElement->
 
  141    parametersElement->appendChild(trap_dimensionsElement);
 
  148    xercesc::DOMElement* tube_dimensionsElement = 
NewElement(
"tube_dimensions");
 
  149    tube_dimensionsElement->
 
  151    tube_dimensionsElement->
 
  153    tube_dimensionsElement->
 
  155    tube_dimensionsElement->
 
  157    tube_dimensionsElement->
 
  159    tube_dimensionsElement->
 
  161    tube_dimensionsElement->
 
  163    parametersElement->appendChild(tube_dimensionsElement);
 
  171    xercesc::DOMElement* cone_dimensionsElement = 
NewElement(
"cone_dimensions");
 
  172    cone_dimensionsElement->
 
  174    cone_dimensionsElement->
 
  176    cone_dimensionsElement->
 
  178    cone_dimensionsElement->
 
  180    cone_dimensionsElement->
 
  182    cone_dimensionsElement->
 
  184    cone_dimensionsElement->
 
  186    cone_dimensionsElement->
 
  188    cone_dimensionsElement->
 
  190    parametersElement->appendChild(cone_dimensionsElement);
 
  197    xercesc::DOMElement* sphere_dimensionsElement =
 
  199    sphere_dimensionsElement->setAttributeNode(
NewAttribute(
"rmin",
 
  201    sphere_dimensionsElement->setAttributeNode(
NewAttribute(
"rmax",
 
  203    sphere_dimensionsElement->setAttributeNode(
NewAttribute(
"startphi",
 
  205    sphere_dimensionsElement->setAttributeNode(
NewAttribute(
"deltaphi",
 
  207    sphere_dimensionsElement->setAttributeNode(
NewAttribute(
"starttheta",
 
  209    sphere_dimensionsElement->setAttributeNode(
NewAttribute(
"deltatheta",
 
  211    sphere_dimensionsElement->setAttributeNode(
NewAttribute(
"aunit",
"deg"));
 
  212    sphere_dimensionsElement->setAttributeNode(
NewAttribute(
"lunit",
"mm"));
 
  213    parametersElement->appendChild(sphere_dimensionsElement);
 
  218                     const G4Orb* 
const orb)
 
  220    xercesc::DOMElement* orb_dimensionsElement = 
NewElement(
"orb_dimensions");
 
  221    orb_dimensionsElement->setAttributeNode(
NewAttribute(
"r",
 
  223    orb_dimensionsElement->setAttributeNode(
NewAttribute(
"lunit",
"mm"));
 
  224    parametersElement->appendChild(orb_dimensionsElement);
 
  231    xercesc::DOMElement* torus_dimensionsElement =
 
  233    torus_dimensionsElement->
 
  235    torus_dimensionsElement->
 
  237    torus_dimensionsElement->
 
  239    torus_dimensionsElement->
 
  241    torus_dimensionsElement->
 
  243    torus_dimensionsElement->
 
  245    torus_dimensionsElement->
 
  247    parametersElement->appendChild(torus_dimensionsElement);
 
  254    xercesc::DOMElement* ellipsoid_dimensionsElement =
 
  256    ellipsoid_dimensionsElement->
 
  258    ellipsoid_dimensionsElement->
 
  260    ellipsoid_dimensionsElement->
 
  262    ellipsoid_dimensionsElement->
 
  264    ellipsoid_dimensionsElement->
 
  266    ellipsoid_dimensionsElement->
 
  268    parametersElement->appendChild(ellipsoid_dimensionsElement);
 
  278    const G4double theta = std::acos(simaxis.
z());
 
  279    const G4double phi = (simaxis.
z() != 1.0)
 
  280                       ? (std::atan(simaxis.
y()/simaxis.
x())) : (0.0);
 
  282    xercesc::DOMElement* para_dimensionsElement = 
NewElement(
"para_dimensions");
 
  283    para_dimensionsElement->
 
  285    para_dimensionsElement->
 
  287    para_dimensionsElement->
 
  289    para_dimensionsElement->
 
  291    para_dimensionsElement->
 
  293    para_dimensionsElement->
 
  295    para_dimensionsElement->
 
  297    para_dimensionsElement->
 
  299    parametersElement->appendChild(para_dimensionsElement);
 
  306    xercesc::DOMElement* hype_dimensionsElement = 
NewElement(
"hype_dimensions");
 
  307    hype_dimensionsElement->
 
  309    hype_dimensionsElement->
 
  311    hype_dimensionsElement->
 
  313    hype_dimensionsElement->
 
  315    hype_dimensionsElement->
 
  317    hype_dimensionsElement->
 
  319    hype_dimensionsElement->
 
  321    parametersElement->appendChild(hype_dimensionsElement);
 
  328    xercesc::DOMElement* pcone_dimensionsElement
 
  331    pcone_dimensionsElement->setAttributeNode(
NewAttribute(
"numRZ",
 
  333    pcone_dimensionsElement->setAttributeNode(
NewAttribute(
"startPhi",
 
  335    pcone_dimensionsElement->setAttributeNode(
NewAttribute(
"openPhi",
 
  337    pcone_dimensionsElement->setAttributeNode(
NewAttribute(
"aunit",
"deg"));
 
  338    pcone_dimensionsElement->setAttributeNode(
NewAttribute(
"lunit",
"mm"));
 
  340    parametersElement->appendChild(pcone_dimensionsElement);
 
  346    for (
size_t i=0; i<num_zplanes; i++)
 
  349                  rmin_array[i],rmax_array[i]);
 
  357    xercesc::DOMElement* polyhedra_dimensionsElement
 
  360    polyhedra_dimensionsElement->setAttributeNode(
NewAttribute(
"numRZ",
 
  362    polyhedra_dimensionsElement->setAttributeNode(
NewAttribute(
"numSide",
 
  364    polyhedra_dimensionsElement->setAttributeNode(
NewAttribute(
"startPhi",
 
  366    polyhedra_dimensionsElement->setAttributeNode(
NewAttribute(
"openPhi",
 
  368    polyhedra_dimensionsElement->setAttributeNode(
NewAttribute(
"aunit",
"deg"));
 
  369    polyhedra_dimensionsElement->setAttributeNode(
NewAttribute(
"lunit",
"mm"));
 
  371    parametersElement->appendChild(polyhedra_dimensionsElement);
 
  377    for (
size_t i=0; i<num_zplanes; i++)
 
  379      ZplaneWrite(polyhedra_dimensionsElement,z_array[i],
 
  380                  rmin_array[i],rmax_array[i]);
 
  392    std::stringstream os; 
 
  397    xercesc::DOMElement* parametersElement = 
NewElement(
"parameters");
 
  398    parametersElement->setAttributeNode(
NewAttribute(
"number",index+1));
 
  408    paramvolElement->appendChild(parametersElement);
 
  412    if (
G4Box* box = dynamic_cast<G4Box*>(solid))
 
  415                 const_cast<G4VPhysicalVolume*>(paramvol));
 
  418    if (
G4Trd* trd = dynamic_cast<G4Trd*>(solid))
 
  421                 const_cast<G4VPhysicalVolume*>(paramvol));
 
  424    if (
G4Trap* trap = dynamic_cast<G4Trap*>(solid))
 
  427                 const_cast<G4VPhysicalVolume*>(paramvol));
 
  430    if (
G4Tubs* tube = dynamic_cast<G4Tubs*>(solid))
 
  433                 const_cast<G4VPhysicalVolume*>(paramvol));
 
  436    if (
G4Cons* cone = dynamic_cast<G4Cons*>(solid))
 
  439                 const_cast<G4VPhysicalVolume*>(paramvol));
 
  442    if (
G4Sphere* sphere = dynamic_cast<G4Sphere*>(solid))
 
  445                 const_cast<G4VPhysicalVolume*>(paramvol));
 
  448    if (
G4Orb* orb = dynamic_cast<G4Orb*>(solid))
 
  451                 const_cast<G4VPhysicalVolume*>(paramvol));
 
  454    if (
G4Torus* torus = dynamic_cast<G4Torus*>(solid))
 
  457                 const_cast<G4VPhysicalVolume*>(paramvol));
 
  460    if (
G4Ellipsoid* ellipsoid = dynamic_cast<G4Ellipsoid*>(solid))
 
  463                 const_cast<G4VPhysicalVolume*>(paramvol));
 
  466    if (
G4Para* para = dynamic_cast<G4Para*>(solid))
 
  469                 const_cast<G4VPhysicalVolume*>(paramvol));
 
  472    if (
G4Hype* hype = dynamic_cast<G4Hype*>(solid))
 
  475                 const_cast<G4VPhysicalVolume*>(paramvol));
 
  478    if (
G4Polycone* pcone = dynamic_cast<G4Polycone*>(solid))
 
  481                 const_cast<G4VPhysicalVolume*>(paramvol));
 
  484    if (
G4Polyhedra* polyhedra = dynamic_cast<G4Polyhedra*>(solid))
 
  487                 const_cast<G4VPhysicalVolume*>(paramvol));
 
  493                         + 
"' cannot be used in parameterised volume!";
 
  494      G4Exception(
"G4GDMLWriteParamvol::ParametersWrite()",
 
  506    xercesc::DOMElement* paramvolElement = 
NewElement(
"paramvol");
 
  507    paramvolElement->setAttributeNode(
NewAttribute(
"ncopies",
 
  509    xercesc::DOMElement* volumerefElement = 
NewElement(
"volumeref");
 
  510    volumerefElement->setAttributeNode(
NewAttribute(
"ref",volumeref));
 
  512    xercesc::DOMElement* algorithmElement =
 
  514    paramvolElement->appendChild(volumerefElement);
 
  515    paramvolElement->appendChild(algorithmElement);
 
  517    volumeElement->appendChild(paramvolElement);
 
  530    for (
G4int i=0; i<parameterCount; i++)
 
G4ThreeVector GetSymAxis() const 
 
G4double GetXHalfLength4() const 
 
void Box_dimensionsWrite(xercesc::DOMElement *, const G4Box *const)
 
void Polycone_dimensionsWrite(xercesc::DOMElement *, const G4Polycone *const)
 
G4double GetXHalfLength() const 
 
G4double GetOuterStereo() const 
 
void Orb_dimensionsWrite(xercesc::DOMElement *, const G4Orb *const)
 
static constexpr double mm
 
G4double GetYHalfLength2() const 
 
G4double GetYHalfLength1() const 
 
G4double GetInnerStereo() const 
 
G4double GetInnerRadius() const 
 
G4double GetZTopCut() const 
 
G4double GetZHalfLength() const 
 
void Hype_dimensionsWrite(xercesc::DOMElement *, const G4Hype *const)
 
G4VSolid * GetSolid() const 
 
G4double GetZBottomCut() const 
 
void Polyhedra_dimensionsWrite(xercesc::DOMElement *, const G4Polyhedra *const)
 
G4double GetOuterRadiusMinusZ() const 
 
virtual void ParamvolWrite(xercesc::DOMElement *, const G4VPhysicalVolume *const)
 
G4double GetZHalfLength() const 
 
xercesc::DOMElement * NewElement(const G4String &)
 
G4double GetDeltaPhiAngle() const 
 
G4double GetZHalfLength() const 
 
G4double GetSemiAxisMax(G4int i) const 
 
G4double GetXHalfLength2() const 
 
void Tube_dimensionsWrite(xercesc::DOMElement *, const G4Tubs *const)
 
G4double GetTanAlpha2() const 
 
G4double GetXHalfLength2() const 
 
G4double GetRadius() const 
 
G4double GetXHalfLength1() const 
 
virtual void ParamvolAlgorithmWrite(xercesc::DOMElement *paramvolElement, const G4VPhysicalVolume *const paramvol)
 
void Cone_dimensionsWrite(xercesc::DOMElement *, const G4Cons *const)
 
G4double GetDeltaPhiAngle() const 
 
G4double GetStartThetaAngle() const 
 
const G4String & GetName() const 
 
G4double GetXHalfLength3() const 
 
static constexpr double degree
 
virtual ~G4GDMLWriteParamvol()
 
virtual G4VPVParameterisation * GetParameterisation() const =0
 
G4RotationMatrix GetObjectRotationValue() const 
 
G4double GetYHalfLength() const 
 
G4double GetStartPhiAngle() const 
 
G4double GetYHalfLength2() const 
 
G4double GetOuterRadius() const 
 
G4double GetStartPhiAngle() const 
 
G4String GenerateName(const G4String &, const void *const)
 
G4double GetInnerRadiusPlusZ() const 
 
void RotationWrite(xercesc::DOMElement *element, const G4String &name, const G4ThreeVector &rot)
 
G4double GetInnerRadius() const 
 
G4PolyconeHistorical * GetOriginalParameters() const 
 
G4double GetXHalfLength() const 
 
G4double GetInnerRadius() const 
 
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
 
void ZplaneWrite(xercesc::DOMElement *, const G4double &, const G4double &, const G4double &)
 
void Ellipsoid_dimensionsWrite(xercesc::DOMElement *, const G4Ellipsoid *const)
 
virtual void ComputeDimensions(G4Box &, const G4int, const G4VPhysicalVolume *) const 
 
void Trap_dimensionsWrite(xercesc::DOMElement *, const G4Trap *const)
 
void Trd_dimensionsWrite(xercesc::DOMElement *, const G4Trd *const)
 
xercesc::DOMAttr * NewAttribute(const G4String &, const G4String &)
 
G4LogicalVolume * GetLogicalVolume() const 
 
G4double GetTanAlpha() const 
 
void Para_dimensionsWrite(xercesc::DOMElement *, const G4Para *const)
 
void Torus_dimensionsWrite(xercesc::DOMElement *, const G4Torus *const)
 
virtual void ComputeTransformation(const G4int, G4VPhysicalVolume *) const =0
 
G4ThreeVector GetAngles(const G4RotationMatrix &)
 
void Sphere_dimensionsWrite(xercesc::DOMElement *, const G4Sphere *const)
 
virtual G4int GetMultiplicity() const 
 
G4PolyhedraHistorical * GetOriginalParameters() const 
 
G4double GetZHalfLength() const 
 
G4double GetZHalfLength() const 
 
G4ThreeVector GetSymAxis() const 
 
G4double GetZHalfLength() const 
 
void ParametersWrite(xercesc::DOMElement *, const G4VPhysicalVolume *const, const G4int &)
 
G4double GetXHalfLength1() const 
 
G4double GetOuterRadius() const 
 
G4double GetStartPhiAngle() const 
 
G4double GetYHalfLength1() const 
 
void PositionWrite(xercesc::DOMElement *element, const G4String &name, const G4ThreeVector &pos)
 
G4ThreeVector GetObjectTranslation() const 
 
const G4String & GetName() const 
 
G4double GetInnerRadiusMinusZ() const 
 
G4double GetTanAlpha1() const 
 
static const G4double alpha
 
G4double GetDeltaThetaAngle() const 
 
G4double GetOuterRadiusPlusZ() const 
 
G4double GetZHalfLength() const 
 
G4double GetOuterRadius() const 
 
G4double GetDeltaPhiAngle() const 
 
G4double GetYHalfLength() const