50 const G4int nReplicas,
53 :
G4PVReplica(pName, pLogical, pMother, pAxis, nReplicas, 0, 0),
59 std::ostringstream message, hint;
60 message <<
"A parameterised volume is being placed" <<
G4endl
61 <<
"inside another parameterised volume !";
62 hint <<
"To make sure that no overlaps are generated," << G4endl
63 <<
"you should verify the mother replicated shapes" << G4endl
64 <<
"are of the same type and dimensions." << G4endl
65 <<
" Mother physical volume: " << pMother->
GetName() << G4endl
66 <<
" Parameterised volume: " << pName << G4endl
67 <<
" (To switch this warning off, compile with G4_NO_VERBOSE)";
68 G4Exception(
"G4PVParameterised::G4PVParameterised()",
"GeomVol1002",
82 const G4int nReplicas,
85 :
G4PVReplica(pName, pLogical, pMotherLogical, pAxis, nReplicas, 0, 0),
157 if (res<=0) {
return false; }
164 std::vector<G4ThreeVector> points;
168 G4cout <<
"Checking overlaps for parameterised volume "
198 trials++; retval =
true;
199 std::ostringstream message;
200 message <<
"Overlap with mother volume !" <<
G4endl
201 <<
" Overlap is detected for volume "
203 <<
" with its mother volume "
205 <<
" at mother local point " << mp <<
", "
206 <<
"overlapping by at least: "
211 <<
"NOTE: Reached maximum fixed number -" << maxErr
212 <<
"- of overlaps reports for this volume !";
216 if (trials>=maxErr) {
return true; }
219 points.push_back(mp);
224 std::vector<G4ThreeVector>::iterator
pos;
235 for (pos=points.begin(); pos!=points.end(); pos++)
241 if (solidB->Inside(md)==
kInside)
243 G4double distout = solidB->DistanceToOut(md);
246 trials++; retval =
true;
247 std::ostringstream message;
248 message <<
"Overlap within parameterised volumes !" <<
G4endl
249 <<
" Overlap is detected for volume "
251 <<
" with parameterised volume instance: " << j
253 <<
" at local point " << md <<
", "
254 <<
"overlapping by at least: "
256 <<
", related to volume instance: " << j <<
".";
260 <<
"NOTE: Reached maximum fixed number -" << maxErr
261 <<
"- of overlaps reports for this volume !";
265 if (trials>=maxErr) {
return true; }
const G4ThreeVector & GetTranslation() const
CLHEP::Hep3Vector G4ThreeVector
virtual void SetRegularStructureId(G4int Code)
virtual void ComputeDimensions(G4VPVParameterisation *p, const G4int n, const G4VPhysicalVolume *pRep)
virtual G4VSolid * ComputeSolid(const G4int, G4VPhysicalVolume *)
G4bool IsParameterised() const
#define G4BestUnit(a, b)
#define G4_USE_G4BESTUNIT_FOR_VERBOSE 1
G4VPVParameterisation * GetParameterisation() const
G4GLOB_DLL std::ostream G4cout
const G4String & GetName() const
virtual EInside Inside(const G4ThreeVector &p) const =0
G4VPVParameterisation * fparam
virtual ~G4PVParameterised()
virtual G4double DistanceToIn(const G4ThreeVector &p, const G4ThreeVector &v) const =0
G4LogicalVolume * GetMotherLogical() const
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
virtual G4bool IsParameterised() const =0
virtual void SetRegularStructureId(G4int Code)
G4bool CheckOverlaps(G4int res=1000, G4double tol=0., G4bool verbose=true, G4int maxErr=1)
void GetReplicationData(EAxis &axis, G4int &nReplicas, G4double &width, G4double &offset, G4bool &consuming) const
virtual G4ThreeVector GetPointOnSurface() const
virtual void ComputeTransformation(const G4int, G4VPhysicalVolume *) const =0
virtual G4int GetMultiplicity() const
const G4RotationMatrix * GetRotation() const
const G4String & GetName() const
G4PVParameterised(const G4String &pName, G4LogicalVolume *pLogical, G4LogicalVolume *pMotherLogical, const EAxis pAxis, const G4int nReplicas, G4VPVParameterisation *pParam, G4bool pSurfChk=false)
static const G4double pos
G4VSolid * GetSolid() const