00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef LOSR_Analyser_hpp
00024 #define LOSR_Analyser_hpp
00025
00026 #include "losr/ApproxRaytracer.hpp"
00027 #include "losr/ExactRaytracer.hpp"
00028 #include "losr/OpticalSystem.hpp"
00029 #include "losr/Surface.hpp"
00030
00031 namespace LOSR {
00032
00033
00040 struct Pupil {
00041 Pupil(long double inT=0.0,long double inR=0.0,long double inM=0.0);
00042
00043 long double mT;
00044 long double mR;
00045 long double mM;
00046 };
00047
00048
00058 class Analyzer {
00059 public:
00060 Analyzer() { }
00061 ~Analyzer() { }
00062
00063 ApproxRaytracer::const_iterator getApertureStop(const ApproxRaytracer& inAxialRay) const;
00064
00065 ApproxRaytracer::iterator getApertureStop(ApproxRaytracer& inAxialRay) const;
00066
00067 ApproxRaytracer::const_iterator getFieldStop(const ApproxRaytracer& inChiefRay) const;
00068
00069 ApproxRaytracer::iterator getFieldStop(ApproxRaytracer& inAxialRay) const;
00070
00071 Pupil getEntrancePupil(const ApproxRaytracer& inAxialRay,
00072 ApproxRaytracer::const_iterator inApertureStop,
00073 const ApproxRaytracer& inChiefRay) const;
00074
00075 Pupil getExitPupil(const ApproxRaytracer& inAxialRay,
00076 ApproxRaytracer::const_iterator inApertureStop,
00077 const ApproxRaytracer& inChiefRay) const;
00078
00079 double getMagnification(const ApproxRaytracer& inChiefRay) const;
00080
00081 double evaluateLastCurvature(const ApproxRaytracer& inMarginalRay) const;
00082
00083 bool traceChiefRay(const ApproxRaytracer& inAxialRay,
00084 ApproxRaytracer::const_iterator inApertureStop,
00085 ApproxRaytracer& outChiefRay,
00086 long double inCY0=1.0, long double inCU0=0.0) const;
00087
00088 bool traceMarginalRay(const ApproxRaytracer& inAxialRay,
00089 ApproxRaytracer::const_iterator inApertureStop,
00090 const ApproxRaytracer& inChiefRay,
00091 ApproxRaytracer& outMarginalRay) const;
00092
00093 };
00094
00095 }
00096
00097 #endif // LOSR_Analyser_hpp
00098