source: trunk/source/geometry/management/src/G4ErrorPlaneSurfaceTarget.cc@ 1314

Last change on this file since 1314 was 1228, checked in by garnier, 16 years ago

update geant4.9.3 tag

File size: 5.7 KB
Line 
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//
27// $Id: G4ErrorPlaneSurfaceTarget.cc,v 1.2 2007/06/19 11:28:39 gcosmo Exp $
28// GEANT4 tag $Name: geant4-09-03 $
29//
30//
31// --------------------------------------------------------------------
32// GEANT 4 class implementation file
33// --------------------------------------------------------------------
34
35#include "G4ErrorPlaneSurfaceTarget.hh"
36
37#ifdef G4VERBOSE
38#include "G4ErrorPropagatorData.hh" //for verbosity checking
39#endif
40
41#include "G4Point3D.hh"
42#include "G4ThreeVector.hh"
43
44//---------------------------------------------------------------------
45
46G4ErrorPlaneSurfaceTarget::
47G4ErrorPlaneSurfaceTarget(G4double a, G4double b, G4double c, G4double d)
48 : G4Plane3D( a, b, c, d )
49{
50 theType = G4ErrorTarget_PlaneSurface;
51
52#ifdef G4VERBOSE
53 if(G4ErrorPropagatorData::verbose() >= 2 )
54 {
55 Dump( " $$$ creating G4ErrorPlaneSurfaceTarget from parameters");
56 }
57#endif
58}
59
60//---------------------------------------------------------------------
61
62G4ErrorPlaneSurfaceTarget::
63G4ErrorPlaneSurfaceTarget(const G4Normal3D &n, const G4Point3D &p)
64 : G4Plane3D( n, p )
65{
66 theType = G4ErrorTarget_PlaneSurface;
67
68#ifdef G4VERBOSE
69 if(G4ErrorPropagatorData::verbose() >= 2 )
70 {
71 Dump( " $$$ creating G4ErrorPlaneSurfaceTarget from point and normal");
72 }
73#endif
74}
75
76//---------------------------------------------------------------------
77
78G4ErrorPlaneSurfaceTarget::
79G4ErrorPlaneSurfaceTarget(const G4Point3D &p1,
80 const G4Point3D &p2,
81 const G4Point3D &p3)
82 : G4Plane3D( p1, p2, p3 )
83{
84 theType = G4ErrorTarget_PlaneSurface;
85
86#ifdef G4VERBOSE
87 if(G4ErrorPropagatorData::verbose() >= 2 )
88 {
89 Dump( " $$$ creating G4ErrorPlaneSurfaceTarget from three points");
90 }
91#endif
92}
93
94//---------------------------------------------------------------------
95
96G4ErrorPlaneSurfaceTarget::~G4ErrorPlaneSurfaceTarget()
97{
98}
99
100//---------------------------------------------------------------------
101
102G4ThreeVector G4ErrorPlaneSurfaceTarget::
103Intersect( const G4ThreeVector& pt, const G4ThreeVector& dir ) const
104{
105 G4double lam = GetDistanceFromPoint( pt, dir );
106 G4Point3D inters = pt + lam * dir;
107
108#ifdef G4VERBOSE
109 if(G4ErrorPropagatorData::verbose() >= 4 )
110 {
111 G4cerr << " $$$ creating G4ErrorPlaneSurfaceTarget::Intersect "
112 << inters << G4endl;
113 }
114#endif
115
116 return inters;
117}
118
119//---------------------------------------------------------------------
120
121G4double G4ErrorPlaneSurfaceTarget::
122GetDistanceFromPoint( const G4ThreeVector& pt, const G4ThreeVector& dir ) const
123{
124 if( std::fabs( dir.mag() -1. ) > 1.E-6 )
125 {
126 G4cerr << "WARNING - G4ErrorPlaneSurfaceTarget::GetDistanceFromPoint()"
127 << G4endl
128 << " Direction is not a unit vector: " << dir << " !"
129 << G4endl;
130 }
131 G4double dist = -(a_ * pt.x() + b_ * pt.y() + c_ * pt.z() + d_)
132 / (a_ * dir.x() + b_ * dir.y() + c_ * dir.z() );
133
134#ifdef G4VERBOSE
135 if(G4ErrorPropagatorData::verbose() >= 3 )
136 {
137 G4cout << " G4ErrorPlaneSurfaceTarget::GetDistanceFromPoint()" << G4endl
138 << " Point: " << pt << ", Direction: " << dir << G4endl
139 << " Distance: " << dist << G4endl;
140 }
141#endif
142
143 return dist;
144}
145
146//---------------------------------------------------------------------
147
148G4double G4ErrorPlaneSurfaceTarget::
149GetDistanceFromPoint( const G4ThreeVector& pt ) const
150{
151 G4ThreeVector vec = point() - pt;
152 G4double alpha = std::acos( vec * normal() / vec.mag() / normal().mag() );
153 G4double dist = std::fabs(vec.mag() * std::cos( alpha ));
154
155#ifdef G4VERBOSE
156 if(G4ErrorPropagatorData::verbose() >= 3 )
157 {
158 G4cout << " G4ErrorPlaneSurfaceTarget::GetDistanceFromPoint()" << G4endl
159 << " Point: " << pt << G4endl
160 << " Distance: " << dist << G4endl;
161 }
162#endif
163
164 return dist;
165}
166
167//---------------------------------------------------------------------
168
169G4Plane3D G4ErrorPlaneSurfaceTarget::
170GetTangentPlane( const G4ThreeVector& ) const
171{
172 return *this;
173}
174
175
176void G4ErrorPlaneSurfaceTarget::Dump( const G4String& msg ) const
177{
178 G4cout << msg << " point = " << point()
179 << " normal = " << normal() << G4endl;
180}
Note: See TracBrowser for help on using the repository browser.