#include <G4ParameterisationTubs.hh>
Inheritance diagram for G4ParameterisationTubsZ:
Public Member Functions | |
G4ParameterisationTubsZ (EAxis axis, G4int nCopies, G4double offset, G4double step, G4VSolid *motherSolid, DivisionType divType) | |
~G4ParameterisationTubsZ () | |
G4double | GetMaxParameter () const |
void | ComputeTransformation (const G4int copyNo, G4VPhysicalVolume *physVol) const |
void | ComputeDimensions (G4Tubs &tubs, const G4int copyNo, const G4VPhysicalVolume *physVol) const |
Definition at line 160 of file G4ParameterisationTubs.hh.
G4ParameterisationTubsZ::G4ParameterisationTubsZ | ( | EAxis | axis, | |
G4int | nCopies, | |||
G4double | offset, | |||
G4double | step, | |||
G4VSolid * | motherSolid, | |||
DivisionType | divType | |||
) |
Definition at line 292 of file G4ParameterisationTubs.cc.
References G4VDivisionParameterisation::CalculateNDiv(), G4VDivisionParameterisation::CalculateWidth(), G4VDivisionParameterisation::CheckParametersValidity(), DivNDIV, DivWIDTH, G4VDivisionParameterisation::fmotherSolid, G4VDivisionParameterisation::fnDiv, G4VDivisionParameterisation::foffset, G4VDivisionParameterisation::fwidth, G4cout, G4endl, G4Tubs::GetZHalfLength(), G4VDivisionParameterisation::SetType(), and G4VDivisionParameterisation::verbose.
00295 : G4VParameterisationTubs( axis, nDiv, width, offset, msolid, divType ) 00296 { 00297 CheckParametersValidity(); 00298 SetType( "DivisionTubsZ" ); 00299 00300 G4Tubs* msol = (G4Tubs*)(fmotherSolid); 00301 if( divType == DivWIDTH ) 00302 { 00303 fnDiv = CalculateNDiv( 2*msol->GetZHalfLength(), width, offset ); 00304 } 00305 else if( divType == DivNDIV ) 00306 { 00307 fwidth = CalculateWidth( 2*msol->GetZHalfLength(), nDiv, offset ); 00308 } 00309 00310 #ifdef G4DIVDEBUG 00311 if( verbose >= 1 ) 00312 { 00313 G4cout << " G4ParameterisationTubsZ: # divisions " << fnDiv << " = " 00314 << nDiv << G4endl 00315 << " Offset " << foffset << " = " << offset << G4endl 00316 << " Width " << fwidth << " = " << width << G4endl; 00317 } 00318 #endif 00319 }
G4ParameterisationTubsZ::~G4ParameterisationTubsZ | ( | ) |
void G4ParameterisationTubsZ::ComputeDimensions | ( | G4Tubs & | tubs, | |
const G4int | copyNo, | |||
const G4VPhysicalVolume * | physVol | |||
) | const [virtual] |
Reimplemented from G4VPVParameterisation.
Definition at line 373 of file G4ParameterisationTubs.cc.
References G4VSolid::DumpInfo(), G4VDivisionParameterisation::fhgap, G4VDivisionParameterisation::fmotherSolid, G4VDivisionParameterisation::fwidth, G4cout, G4endl, G4Tubs::GetDeltaPhiAngle(), G4Tubs::GetInnerRadius(), G4Tubs::GetOuterRadius(), G4Tubs::GetStartPhiAngle(), G4Tubs::SetDeltaPhiAngle(), G4Tubs::SetInnerRadius(), G4Tubs::SetOuterRadius(), G4Tubs::SetStartPhiAngle(), G4Tubs::SetZHalfLength(), and G4VDivisionParameterisation::verbose.
00375 { 00376 G4Tubs* msol = (G4Tubs*)(fmotherSolid); 00377 00378 G4double pRMin = msol->GetInnerRadius(); 00379 G4double pRMax = msol->GetOuterRadius(); 00380 // G4double pDz = msol->GetZHalfLength() / GetNoDiv(); 00381 G4double pDz = fwidth/2. - fhgap; 00382 G4double pSPhi = msol->GetStartPhiAngle(); 00383 G4double pDPhi = msol->GetDeltaPhiAngle(); 00384 00385 tubs.SetInnerRadius( pRMin ); 00386 tubs.SetOuterRadius( pRMax ); 00387 tubs.SetZHalfLength( pDz ); 00388 tubs.SetStartPhiAngle( pSPhi, false ); 00389 tubs.SetDeltaPhiAngle( pDPhi ); 00390 00391 #ifdef G4DIVDEBUG 00392 if( verbose >= 2 ) 00393 { 00394 G4cout << " G4ParameterisationTubsZ::ComputeDimensions()" << G4endl 00395 << " pDz: " << pDz << G4endl; 00396 tubs.DumpInfo(); 00397 } 00398 #endif 00399 }
void G4ParameterisationTubsZ::ComputeTransformation | ( | const G4int | copyNo, | |
G4VPhysicalVolume * | physVol | |||
) | const [virtual] |
Implements G4VDivisionParameterisation.
Definition at line 336 of file G4ParameterisationTubs.cc.
References G4VDivisionParameterisation::ChangeRotMatrix(), G4VDivisionParameterisation::faxis, G4VDivisionParameterisation::fmotherSolid, G4VDivisionParameterisation::foffset, G4VDivisionParameterisation::fwidth, G4cout, G4endl, G4Tubs::GetZHalfLength(), G4VDivisionParameterisation::OffsetZ(), G4VPhysicalVolume::SetTranslation(), and G4VDivisionParameterisation::verbose.
00337 { 00338 //----- set translation: along Z axis 00339 G4Tubs* motherTubs = (G4Tubs*)(fmotherSolid); 00340 G4double posi = - motherTubs->GetZHalfLength() + OffsetZ() 00341 + fwidth/2 + copyNo*fwidth; 00342 G4ThreeVector origin(0.,0.,posi); 00343 physVol->SetTranslation( origin ); 00344 00345 //----- calculate rotation matrix: unit 00346 00347 #ifdef G4DIVDEBUG 00348 if( verbose >= 2 ) 00349 { 00350 G4cout << " G4ParameterisationTubsZ::ComputeTransformation()" << G4endl 00351 << " Position: " << posi << " - copyNo: " << copyNo << G4endl 00352 << " foffset " << foffset/deg << " - fwidth " << fwidth/deg 00353 << G4endl; 00354 } 00355 #endif 00356 00357 ChangeRotMatrix( physVol ); 00358 00359 #ifdef G4DIVDEBUG 00360 if( verbose >= 2 ) 00361 { 00362 G4cout << std::setprecision(8) << " G4ParameterisationTubsZ " << copyNo 00363 << G4endl 00364 << " Position: " << origin << " - Width: " << fwidth 00365 << " - Axis: " << faxis << G4endl; 00366 } 00367 #endif 00368 }
G4double G4ParameterisationTubsZ::GetMaxParameter | ( | ) | const [virtual] |
Implements G4VDivisionParameterisation.
Definition at line 327 of file G4ParameterisationTubs.cc.
References G4VDivisionParameterisation::fmotherSolid, and G4Tubs::GetZHalfLength().
00328 { 00329 G4Tubs* msol = (G4Tubs*)(fmotherSolid); 00330 return 2*msol->GetZHalfLength(); 00331 }