Geant4 Cross Reference |
1 // 1 2 // ******************************************* 3 // * License and Disclaimer 4 // * 5 // * The Geant4 software is copyright of th 6 // * the Geant4 Collaboration. It is provided 7 // * conditions of the Geant4 Software License 8 // * LICENSE and available at http://cern.ch/ 9 // * include a list of copyright holders. 10 // * 11 // * Neither the authors of this software syst 12 // * institutes,nor the agencies providing fin 13 // * work make any representation or warran 14 // * regarding this software system or assum 15 // * use. Please see the license in the file 16 // * for the full disclaimer and the limitatio 17 // * 18 // * This code implementation is the result 19 // * technical work of the GEANT4 collaboratio 20 // * By using, copying, modifying or distri 21 // * any work based on the software) you ag 22 // * use in resulting scientific publicati 23 // * acceptance of all terms of the Geant4 Sof 24 // ******************************************* 25 // 26 // G4ErrorPlaneSurfaceTarget class implementat 27 // 28 // Created: P.Arce, September 2004 29 // ------------------------------------------- 30 31 #include "G4ErrorPlaneSurfaceTarget.hh" 32 33 #ifdef G4VERBOSE 34 #include "G4ErrorPropagatorData.hh" // for ver 35 #endif 36 37 #include "G4Point3D.hh" 38 #include "G4ThreeVector.hh" 39 40 //-------------------------------------------- 41 42 G4ErrorPlaneSurfaceTarget:: 43 G4ErrorPlaneSurfaceTarget(G4double aa, G4doubl 44 : G4Plane3D( aa, ab, ac, ad ) 45 { 46 theType = G4ErrorTarget_PlaneSurface; 47 48 #ifdef G4VERBOSE 49 if(G4ErrorPropagatorData::verbose() >= 2 ) 50 { 51 Dump( " $$$ creating G4ErrorPlaneSurfaceTa 52 } 53 #endif 54 } 55 56 //-------------------------------------------- 57 58 G4ErrorPlaneSurfaceTarget:: 59 G4ErrorPlaneSurfaceTarget(const G4Normal3D &no 60 : G4Plane3D( norm, pt ) 61 { 62 theType = G4ErrorTarget_PlaneSurface; 63 64 #ifdef G4VERBOSE 65 if(G4ErrorPropagatorData::verbose() >= 2 ) 66 { 67 Dump( " $$$ creating G4ErrorPlaneSurfaceTa 68 } 69 #endif 70 } 71 72 //-------------------------------------------- 73 74 G4ErrorPlaneSurfaceTarget:: 75 G4ErrorPlaneSurfaceTarget(const G4Point3D &p1, 76 const G4Point3D &p2, 77 const G4Point3D &p3) 78 : G4Plane3D( p1, p2, p3 ) 79 { 80 theType = G4ErrorTarget_PlaneSurface; 81 82 #ifdef G4VERBOSE 83 if(G4ErrorPropagatorData::verbose() >= 2 ) 84 { 85 Dump( " $$$ creating G4ErrorPlaneSurfaceTa 86 } 87 #endif 88 } 89 90 //-------------------------------------------- 91 92 G4ThreeVector G4ErrorPlaneSurfaceTarget:: 93 Intersect( const G4ThreeVector& pt, const G4Th 94 { 95 G4double lam = GetDistanceFromPoint( pt, dir 96 G4Point3D inters = pt + lam * dir; 97 98 #ifdef G4VERBOSE 99 if(G4ErrorPropagatorData::verbose() >= 4 ) 100 { 101 G4cout << " $$$ creating G4ErrorPlaneSurfa 102 << inters << G4endl; 103 } 104 #endif 105 106 return inters; 107 } 108 109 //-------------------------------------------- 110 111 G4double G4ErrorPlaneSurfaceTarget:: 112 GetDistanceFromPoint( const G4ThreeVector& pt, 113 { 114 if( std::fabs( dir.mag() -1. ) > 1.E-6 ) 115 { 116 std::ostringstream message; 117 message << "Direction is not a unit vector 118 G4Exception("G4ErrorPlaneSurfaceTarget::Ge 119 "GeomMgt1002", JustWarning, me 120 } 121 G4double dist = -(a_ * pt.x() + b_ * pt.y() 122 / (a_ * dir.x() + b_ * dir.y( 123 124 #ifdef G4VERBOSE 125 if(G4ErrorPropagatorData::verbose() >= 3 ) 126 { 127 G4cout << " G4ErrorPlaneSurfaceTarget::Get 128 << " Point: " << pt << ", Directi 129 << " Distance: " << dist << G4end 130 } 131 #endif 132 133 return dist; 134 } 135 136 //-------------------------------------------- 137 138 G4double G4ErrorPlaneSurfaceTarget:: 139 GetDistanceFromPoint( const G4ThreeVector& pt 140 { 141 G4ThreeVector vec = point() - pt; 142 G4double dist = std::fabs(vec * normal() / n 143 144 #ifdef G4VERBOSE 145 if(G4ErrorPropagatorData::verbose() >= 3 ) 146 { 147 G4cout << " G4ErrorPlaneSurfaceTarget::Get 148 << " Point: " << pt << G4endl 149 << " Distance: " << dist << G4end 150 } 151 #endif 152 153 return dist; 154 } 155 156 //-------------------------------------------- 157 158 G4Plane3D G4ErrorPlaneSurfaceTarget:: 159 GetTangentPlane( const G4ThreeVector& ) const 160 { 161 return *this; 162 } 163 164 //-------------------------------------------- 165 166 void G4ErrorPlaneSurfaceTarget::Dump( const G4 167 { 168 G4cout << msg << " point = " << point() 169 << " normal = " << normal() << 170 } 171