// $Id: OpticalSystem.hh,v 1.12 2004/12/08 01:15:12 thea Exp $ // Author: Daniel De Marco /***************************************************************************** * ESAF: Euso Simulation and Analysis Framework * * * * Id: OpticalSystem * * Package: Optics * * Coordinator: Alessandro.Thea * * * *****************************************************************************/ #ifndef OPTICALSYSTEM_HH #define OPTICALSYSTEM_HH #include "DetectorPhotonTransporter.hh" //////////////////////////////////////////////////////////////////////////////// // // // OpticalSystem // // // // Abstarct base class providing the interface of a generic optical system. // // // //////////////////////////////////////////////////////////////////////////////// class OpticalSystem: public DetectorPhotonTransporter { protected: OpticalSystem() : DetectorPhotonTransporter(),fFirstLensDZ(0),fSecondLensDZ(0){} // Focal Distance Double_t fFocalDistance; // Lower lens height (vertex/base) Double_t fFirstLensDZ; // Upper lens height (vertex/base) Double_t fSecondLensDZ; public: virtual Photon *Transport(Photon *) const = 0; // checks if the photon hits the lateral surface of the optics virtual Bool_t HitSide(Photon *p) const; // height of the vertex of the upper lens virtual Double_t SecondLensTop() const { return Top(); } // height of the base of the upper lens virtual Double_t SecondLensBottom() const { return Top()-fSecondLensDZ; } // height of the vertex of the lower lens virtual Double_t FirstLensTop() const { return Bottom()+fFirstLensDZ; } // height of the base of the lower lens virtual Double_t FirstLensBottom() const { return Bottom(); } EsafConfigClass(Optics,OpticalSystem) ClassDef(OpticalSystem,0) }; #include "Interpolate.hh" //////////////////////////////////////////////////////////////////////////////// // // // TestOpticalSystem // // // // A simple implementation of a perfect lens with psf and absorption // // (wavelength dependent) // // // //////////////////////////////////////////////////////////////////////////////// class TestOpticalSystem: public OpticalSystem { protected: Interpolate *psf, *tr; virtual EVector getPSF(Photon *p, double thetain) const; public: TestOpticalSystem(); virtual Photon *Transport(Photon *p) const; EsafConfigClass(Optics,TestOpticalSystem) ClassDef(TestOpticalSystem,0) }; #endif /* OPTICALSYSTEM_HH */