57 std::ostringstream message;
58 message <<
"Generic construct for G4Polyhedra NOT supported." <<
G4endl
59 <<
"Sorry! Solid: " << msol->
GetName();
60 G4Exception(
"G4VParameterisationPolyhedra::G4VParameterisationPolyhedra()",
82 for (
G4int i=0; i<nofZplanes; i++)
86 zValuesRefl[i] = - zValues[i];
94 nofZplanes, zValuesRefl, rminValues2, rmaxValues2);
96 delete [] rminValues2;
97 delete [] rmaxValues2;
98 delete [] zValuesRefl;
120 if ( (phiTotal <=0) || (phiTotal >
124 return std::cos(0.5*phiTotal/nofSides);
136 SetType(
"DivisionPolyhedraRho" );
144 - original_pars->
Rmin[0], width, offset );
149 - original_pars->
Rmin[0], nDiv, offset );
155 G4cout <<
" G4ParameterisationPolyhedraRho - # divisions " <<
fnDiv
156 <<
" = " << nDiv <<
G4endl
177 std::ostringstream message;
179 <<
"Division along R will be done with a width "
180 <<
"different for each solid section." <<
G4endl
181 <<
"WIDTH will not be used !";
182 G4Exception(
"G4ParameterisationPolyhedraRho::CheckParametersValidity()",
187 std::ostringstream message;
189 <<
"Division along R will be done with a width "
190 <<
"different for each solid section." <<
G4endl
191 <<
"OFFSET will not be used !";
192 G4Exception(
"G4ParameterisationPolyhedraRho::CheckParametersValidity()",
202 return original_pars->
Rmax[0] - original_pars->
Rmin[0];
232 G4cout << std::setprecision(8) <<
" G4ParameterisationPolyhedraRho "
234 <<
" Position: " << origin
254 for(
G4int ii = 0; ii < nZplanes; ii++ )
259 origparam.
Rmax[ii] = origparamMother->
Rmin[ii]+
foffset+width*(copyNo+1);
268 G4cout <<
"G4ParameterisationPolyhedraRho::ComputeDimensions()" <<
G4endl
269 <<
"-- Parametrised phedra copy-number: " << copyNo <<
G4endl;
283 SetType(
"DivisionPolyhedraPhi" );
298 G4cout <<
" G4ParameterisationPolyhedraPhi - # divisions " <<
fnDiv
299 <<
" = " << nDiv <<
G4endl
327 std::ostringstream message;
329 <<
" Division along PHI will be done splitting "
330 <<
"in the defined numSide." <<
G4endl
331 <<
"WIDTH will not be used !";
332 G4Exception(
"G4ParameterisationPolyhedraPhi::CheckParametersValidity()",
337 std::ostringstream message;
339 <<
"Division along PHI will be done splitting "
340 <<
"in the defined numSide." <<
G4endl
341 <<
"OFFSET will not be used !";
342 G4Exception(
"G4ParameterisationPolyhedraPhi::CheckParametersValidity()",
350 std::ostringstream message;
351 message <<
"Configuration not supported." <<
G4endl
352 <<
"Division along PHI will be done splitting in the defined"
354 <<
"numSide, i.e, the number of division would be :"
355 << origparamMother->
numSide <<
" instead of " <<
fnDiv <<
" !";
356 G4Exception(
"G4ParameterisationPolyhedraPhi::CheckParametersValidity()",
377 G4cout <<
" G4ParameterisationPolyhedraPhi - position: " << posi/
deg
379 <<
" copyNo: " << copyNo
380 <<
" - fwidth: " << fwidth/
deg <<
G4endl;
389 G4cout << std::setprecision(8) <<
" G4ParameterisationPolyhedraPhi " << copyNo
391 <<
" Position: " << origin <<
" - Width: " << fwidth
418 G4cout <<
"G4ParameterisationPolyhedraPhi::ComputeDimensions():" <<
G4endl;
431 fOrigParamMother(((
G4Polyhedra*)fmotherSolid)->GetOriginalParameters())
434 SetType(
"DivisionPolyhedraZ" );
452 G4cout <<
" G4ParameterisationPolyhedraZ - # divisions " <<
fnDiv <<
" = "
475 return (r1-r2)/(z1-z2)*z + ( r1 - (r1-r2)/(z1-z2)*z1 ) ;
517 std::ostringstream message;
518 message <<
"Configuration not supported." <<
G4endl
519 <<
"Division along Z will be done splitting in the defined"
521 <<
"Z planes, i.e, the number of division would be :"
524 G4Exception(
"G4ParameterisationPolyhedraZ::CheckParametersValidity()",
535 G4int isegstart = -1;
546 while ( isegend < 0 && counter < fOrigParamMother->Num_z_planes-1 ) {
549 zstart < fOrigParamMother->Z_values[counter+1] ) {
554 zend <= fOrigParamMother->Z_values[counter+1] ) {
568 while ( isegend < 0 && counter < fOrigParamMother->Num_z_planes-1 ) {
570 if ( zstart <= fOrigParamMother->Z_values[counter] &&
575 if ( zend < fOrigParamMother->Z_values[counter] &&
583 if ( isegstart != isegend ) {
584 std::ostringstream message;
585 message <<
"Configuration not supported." <<
G4endl
586 <<
"Division with user defined width." <<
G4endl
588 <<
"Divided region is not between two Z planes.";
589 G4Exception(
"G4ParameterisationPolyhedraZ::CheckParametersValidity()",
627 G4cout <<
" G4ParameterisationPolyhedraZ - position: " << posi <<
G4endl
628 <<
" copyNo: " << copyNo <<
" - foffset: " <<
foffset/
deg
638 G4cout << std::setprecision(8) <<
" G4ParameterisationPolyhedraZ "
640 <<
" Position: " << origin <<
" - Width: " <<
fwidth
715 if ( origparam.
Rmin[0] < 0.0 ) origparam.
Rmin[0] = 0.0;
716 if ( origparam.
Rmin[nz-1] < 0.0 ) origparam.
Rmin[1] = 0.0;
725 G4cout <<
"G4ParameterisationPolyhedraZ::ComputeDimensions()" <<
G4endl
726 <<
"-- Parametrised phedra copy-number: " << copyNo <<
G4endl;
void ComputeDimensions(G4Polyhedra &phedra, const G4int copyNo, const G4VPhysicalVolume *physVol) const
virtual ~G4VParameterisationPolyhedra()
virtual void CheckParametersValidity()
G4double GetMaxParameter() const
CLHEP::Hep3Vector G4ThreeVector
void SetType(const G4String &type)
G4double GetR(G4double z, G4double z1, G4double r1, G4double z2, G4double r2) const
G4double GetRmax(G4double z, G4int nsegment) const
void CheckParametersValidity()
G4double CalculateWidth(G4double motherDim, G4int nDiv, G4double offset) const
G4double ConvertRadiusFactor(const G4Polyhedra &phedra) const
void ComputeTransformation(const G4int copyNo, G4VPhysicalVolume *physVol) const
static G4ThreadLocal G4int verbose
virtual G4GeometryType GetEntityType() const =0
G4double GetEndPhi() const
G4double GetMaxParameter() const
G4ParameterisationPolyhedraPhi(EAxis axis, G4int nCopies, G4double offset, G4double step, G4VSolid *motherSolid, DivisionType divType)
void ComputeTransformation(const G4int copyNo, G4VPhysicalVolume *physVol) const
G4VParameterisationPolyhedra(EAxis axis, G4int nCopies, G4double offset, G4double step, G4VSolid *msolid, DivisionType divType)
G4GLOB_DLL std::ostream G4cout
void ChangeRotMatrix(G4VPhysicalVolume *physVol, G4double rotZ=0.) const
void SetTranslation(const G4ThreeVector &v)
G4PolyhedraHistorical * fOrigParamMother
void CheckParametersValidity()
G4ParameterisationPolyhedraZ(EAxis axis, G4int nCopies, G4double offset, G4double step, G4VSolid *motherSolid, DivisionType divType)
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
G4double GetMaxParameter() const
void CheckParametersValidity()
G4ParameterisationPolyhedraRho(EAxis axis, G4int nCopies, G4double offset, G4double step, G4VSolid *motherSolid, DivisionType divType)
void ComputeDimensions(G4Polyhedra &phedra, const G4int copyNo, const G4VPhysicalVolume *physVol) const
G4int CalculateNDiv(G4double motherDim, G4double width, G4double offset) const
G4PolyhedraHistorical * GetOriginalParameters() const
G4double GetStartPhi() const
~G4ParameterisationPolyhedraRho()
void SetOriginalParameters(G4PolyhedraHistorical *pars)
~G4ParameterisationPolyhedraPhi()
void ComputeDimensions(G4Polyhedra &phedra, const G4int copyNo, const G4VPhysicalVolume *physVol) const
~G4ParameterisationPolyhedraZ()
void ComputeTransformation(const G4int copyNo, G4VPhysicalVolume *physVol) const
static G4GeometryTolerance * GetInstance()
G4double GetRmin(G4double z, G4int nsegment) const
DivisionType fDivisionType