1 | #ifndef G4FresnelLens_HH |
---|
2 | #define G4FresnelLens_HH |
---|
3 | #include "FSIntersectedSegment.h" |
---|
4 | |
---|
5 | #include <geomdefs.hh> |
---|
6 | #include <G4ThreeVector.hh> |
---|
7 | |
---|
8 | namespace G4FresnelLens{ |
---|
9 | bool InLimits(double perp, double z, double r1, double z1, double r2, double z2); |
---|
10 | bool InLimits2(double perp2, double z, double r1, double z1, double r2, double z2); |
---|
11 | int SolveQuadratic(double a, double b, double c, double& x1, double& x2); |
---|
12 | int BinarySearch(double*, double, int, int); |
---|
13 | bool CompareVectors(const G4ThreeVector& v1, const G4ThreeVector& v2, double tolerance); |
---|
14 | bool VectorIsZero(const G4ThreeVector& v1); |
---|
15 | double Hyp(double x1, double y1, double x2, double y2); |
---|
16 | bool VectorGoesOut(const G4ThreeVector& p, const G4ThreeVector& v); |
---|
17 | }; |
---|
18 | |
---|
19 | //__________________________________________________________________________________ |
---|
20 | inline double G4FresnelLens::Hyp(double x1, double y1, double x2, double y2){ |
---|
21 | double dx=x2-x1; |
---|
22 | double dy=y2-y1; |
---|
23 | return sqrt(dx*dx+dy*dy); |
---|
24 | } |
---|
25 | |
---|
26 | //__________________________________________________________________________________ |
---|
27 | inline bool G4FresnelLens::VectorGoesOut(const G4ThreeVector& p, const G4ThreeVector& v){ |
---|
28 | return (p.x()*v.x()+p.y()*v.y())>=0.; |
---|
29 | } |
---|
30 | |
---|
31 | //__________________________________________________________________________________ |
---|
32 | inline bool G4FresnelLens::InLimits(double perp, double z, double r1, double z1, double r2, double z2){ |
---|
33 | if ( z<z1 || z>z2 ) return false; |
---|
34 | if ( perp<r1 || perp>r2 ) return false; |
---|
35 | return true; |
---|
36 | } |
---|
37 | |
---|
38 | //__________________________________________________________________________________ |
---|
39 | inline bool G4FresnelLens::InLimits2(double perp2, double z, double r1, double z1, double r2, double z2){ |
---|
40 | if ( z<z1 || z>z2 ) return false; |
---|
41 | if ( perp2<r1*r1 || perp2>r2*r2 ) return false; |
---|
42 | return true; |
---|
43 | } |
---|
44 | |
---|
45 | //__________________________________________________________________________________ |
---|
46 | inline bool G4FresnelLens::CompareVectors(const G4ThreeVector& v1, const G4ThreeVector& v2, double tolerance) { |
---|
47 | if ( fabs(v1.x()-v2.x())<tolerance && |
---|
48 | fabs(v1.y()-v2.y())<tolerance && |
---|
49 | fabs(v1.z()-v2.z())<tolerance |
---|
50 | ) return true; |
---|
51 | |
---|
52 | return false; |
---|
53 | } |
---|
54 | |
---|
55 | //__________________________________________________________________________________ |
---|
56 | inline bool G4FresnelLens::VectorIsZero(const G4ThreeVector& v1){ |
---|
57 | if ( v1.x()==0 && |
---|
58 | v1.y()==0 && |
---|
59 | v1.z()==0 |
---|
60 | ) return true; |
---|
61 | |
---|
62 | return false; |
---|
63 | } |
---|
64 | |
---|
65 | #endif |
---|