#include <G4ParameterisationPolycone.hh>
Inheritance diagram for G4VParameterisationPolycone:
Public Member Functions | |
G4VParameterisationPolycone (EAxis axis, G4int nCopies, G4double offset, G4double step, G4VSolid *msolid, DivisionType divType) | |
virtual | ~G4VParameterisationPolycone () |
Definition at line 64 of file G4ParameterisationPolycone.hh.
G4VParameterisationPolycone::G4VParameterisationPolycone | ( | EAxis | axis, | |
G4int | nCopies, | |||
G4double | offset, | |||
G4double | step, | |||
G4VSolid * | msolid, | |||
DivisionType | divType | |||
) |
Definition at line 46 of file G4ParameterisationPolycone.cc.
References FatalException, G4VDivisionParameterisation::fDeleteSolid, G4VDivisionParameterisation::fmotherSolid, G4VDivisionParameterisation::fReflectedSolid, G4endl, G4Exception(), G4Polycone::GetEndPhi(), G4VSolid::GetEntityType(), G4VSolid::GetName(), G4Polycone::GetOriginalParameters(), G4Polycone::GetStartPhi(), G4Polycone::IsGeneric(), G4PolyconeHistorical::Num_z_planes, G4PolyconeHistorical::Rmax, G4PolyconeHistorical::Rmin, and G4PolyconeHistorical::Z_values.
00049 : G4VDivisionParameterisation( axis, nDiv, width, offset, divType, msolid ) 00050 { 00051 G4Polycone* msol = (G4Polycone*)(msolid); 00052 if ((msolid->GetEntityType() != "G4ReflectedSolid") && (msol->IsGeneric())) 00053 { 00054 std::ostringstream message; 00055 message << "Generic construct for G4Polycone NOT supported." << G4endl 00056 << "Sorry! Solid: " << msol->GetName() << "."; 00057 G4Exception("G4VParameterisationPolycone::G4VParameterisationPolycone()", 00058 "GeomDiv0001", FatalException, message); 00059 } 00060 if (msolid->GetEntityType() == "G4ReflectedSolid") 00061 { 00062 // Get constituent solid 00063 G4VSolid* mConstituentSolid 00064 = ((G4ReflectedSolid*)msolid)->GetConstituentMovedSolid(); 00065 msol = (G4Polycone*)(mConstituentSolid); 00066 00067 // Get parameters 00068 G4int nofZplanes = msol->GetOriginalParameters()->Num_z_planes; 00069 G4double* zValues = msol->GetOriginalParameters()->Z_values; 00070 G4double* rminValues = msol->GetOriginalParameters()->Rmin; 00071 G4double* rmaxValues = msol->GetOriginalParameters()->Rmax; 00072 00073 // Invert z values 00074 G4double* zValuesRefl = new double[nofZplanes]; 00075 for (G4int i=0; i<nofZplanes; i++) zValuesRefl[i] = - zValues[i]; 00076 00077 G4Polycone* newSolid 00078 = new G4Polycone(msol->GetName(), 00079 msol->GetStartPhi(), 00080 msol->GetEndPhi() - msol->GetStartPhi(), 00081 nofZplanes, zValuesRefl, rminValues, rmaxValues); 00082 00083 delete [] zValuesRefl; 00084 00085 msol = newSolid; 00086 fmotherSolid = newSolid; 00087 fReflectedSolid = true; 00088 fDeleteSolid = true; 00089 } 00090 }
G4VParameterisationPolycone::~G4VParameterisationPolycone | ( | ) | [virtual] |