Geant4 10.7.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4ErrorPlaneSurfaceTarget.cc
Go to the documentation of this file.
1//
2// ********************************************************************
3// * License and Disclaimer *
4// * *
5// * The Geant4 software is copyright of the Copyright Holders of *
6// * the Geant4 Collaboration. It is provided under the terms and *
7// * conditions of the Geant4 Software License, included in the file *
8// * LICENSE and available at http://cern.ch/geant4/license . These *
9// * include a list of copyright holders. *
10// * *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work make any representation or warranty, express or implied, *
14// * regarding this software system or assume any liability for its *
15// * use. Please see the license in the file LICENSE and URL above *
16// * for the full disclaimer and the limitation of liability. *
17// * *
18// * This code implementation is the result of the scientific and *
19// * technical work of the GEANT4 collaboration. *
20// * By using, copying, modifying or distributing the software (or *
21// * any work based on the software) you agree to acknowledge its *
22// * use in resulting scientific publications, and indicate your *
23// * acceptance of all terms of the Geant4 Software license. *
24// ********************************************************************
25//
26// G4ErrorPlaneSurfaceTarget class implementation
27//
28// Created: P.Arce, September 2004
29// --------------------------------------------------------------------
30
32
33#ifdef G4VERBOSE
34#include "G4ErrorPropagatorData.hh" // for verbosity checking
35#endif
36
37#include "G4Point3D.hh"
38#include "G4ThreeVector.hh"
39
40//---------------------------------------------------------------------
41
44 : G4Plane3D( aa, ab, ac, ad )
45{
47
48#ifdef G4VERBOSE
50 {
51 Dump( " $$$ creating G4ErrorPlaneSurfaceTarget from parameters");
52 }
53#endif
54}
55
56//---------------------------------------------------------------------
57
60 : G4Plane3D( norm, pt )
61{
63
64#ifdef G4VERBOSE
66 {
67 Dump( " $$$ creating G4ErrorPlaneSurfaceTarget from point and normal");
68 }
69#endif
70}
71
72//---------------------------------------------------------------------
73
76 const G4Point3D &p2,
77 const G4Point3D &p3)
78 : G4Plane3D( p1, p2, p3 )
79{
81
82#ifdef G4VERBOSE
84 {
85 Dump( " $$$ creating G4ErrorPlaneSurfaceTarget from three points");
86 }
87#endif
88}
89
90//---------------------------------------------------------------------
91
93{
94}
95
96//---------------------------------------------------------------------
97
99Intersect( const G4ThreeVector& pt, const G4ThreeVector& dir ) const
100{
101 G4double lam = GetDistanceFromPoint( pt, dir );
102 G4Point3D inters = pt + lam * dir;
103
104#ifdef G4VERBOSE
106 {
107 G4cout << " $$$ creating G4ErrorPlaneSurfaceTarget::Intersect "
108 << inters << G4endl;
109 }
110#endif
111
112 return inters;
113}
114
115//---------------------------------------------------------------------
116
118GetDistanceFromPoint( const G4ThreeVector& pt, const G4ThreeVector& dir ) const
119{
120 if( std::fabs( dir.mag() -1. ) > 1.E-6 )
121 {
122 std::ostringstream message;
123 message << "Direction is not a unit vector: " << dir << " !";
124 G4Exception("G4ErrorPlaneSurfaceTarget::GetDistanceFromPoint()",
125 "GeomMgt1002", JustWarning, message);
126 }
127 G4double dist = -(a_ * pt.x() + b_ * pt.y() + c_ * pt.z() + d_)
128 / (a_ * dir.x() + b_ * dir.y() + c_ * dir.z() );
129
130#ifdef G4VERBOSE
132 {
133 G4cout << " G4ErrorPlaneSurfaceTarget::GetDistanceFromPoint()" << G4endl
134 << " Point: " << pt << ", Direction: " << dir << G4endl
135 << " Distance: " << dist << G4endl;
136 }
137#endif
138
139 return dist;
140}
141
142//---------------------------------------------------------------------
143
145GetDistanceFromPoint( const G4ThreeVector& pt ) const
146{
147 G4ThreeVector vec = point() - pt;
148 G4double dist = std::fabs(vec * normal() / normal().mag());
149
150#ifdef G4VERBOSE
152 {
153 G4cout << " G4ErrorPlaneSurfaceTarget::GetDistanceFromPoint()" << G4endl
154 << " Point: " << pt << G4endl
155 << " Distance: " << dist << G4endl;
156 }
157#endif
158
159 return dist;
160}
161
162//---------------------------------------------------------------------
163
165GetTangentPlane( const G4ThreeVector& ) const
166{
167 return *this;
168}
169
170//---------------------------------------------------------------------
171
173{
174 G4cout << msg << " point = " << point()
175 << " normal = " << normal() << G4endl;
176}
@ G4ErrorTarget_PlaneSurface
@ JustWarning
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
Definition: G4Exception.cc:35
double G4double
Definition: G4Types.hh:83
#define G4endl
Definition: G4ios.hh:57
G4GLOB_DLL std::ostream G4cout
double z() const
double x() const
double y() const
double mag() const
virtual G4Plane3D GetTangentPlane(const G4ThreeVector &point) const
virtual G4double GetDistanceFromPoint(const G4ThreeVector &point, const G4ThreeVector &direc) const
virtual G4ThreeVector Intersect(const G4ThreeVector &point, const G4ThreeVector &direc) const
G4ErrorPlaneSurfaceTarget(G4double a=0., G4double b=0., G4double c=0., G4double d=0.)
virtual void Dump(const G4String &msg) const
G4ErrorTargetType theType
Normal3D< G4double > normal() const
Definition: Plane3D.h:97
Point3D< G4double > point() const
Definition: Plane3D.h:122