// $Id: ParamOpticalSystem.hh,v 1.18 2005/05/18 16:44:05 thea Exp $ // Author: A.Thea Jul, 19 2004 /***************************************************************************** * ESAF: Euso Simulation and Analysis Framework * * * * Id: ParamOpticalSystem * * Package: Optics * * Coordinator: Alessandro.Thea * * * *****************************************************************************/ #ifndef __PARAMOPTICALSYSTEM_HH_ #define __PARAMOPTICALSYSTEM_HH_ #include "euso.hh" #include "OpticalSystem.hh" #include "Interpolate.hh" #include "TF1.h" #include "TF2.h" class IdealFocalSurface; //////////////////////////////////////////////////////////////////////////////// // // // ParamOpticalSystem // // // // Parameterized optical system // // // //////////////////////////////////////////////////////////////////////////////// class ParamOpticalSystem : public OpticalSystem { public: ParamOpticalSystem(); virtual ~ParamOpticalSystem(); Double_t DistanceToRadius( Double_t ) const; // distance from the fs vertex to r Double_t FocalSurfProfile( Double_t ) const; // profile of the focal surface Z(r) inline Double_t GetDmax() const { return fDmax; } inline Double_t* GetIntegral() const { return fIntegral; } inline Int_t GetNbins() const { return fNbins; } inline Double_t GetRmax() const { return fRmax; } inline const TF2* GetSpreadFun() const { return fSpreadFun; } inline Double_t GetThetaMax() const { return fThetaMax; } virtual Photon *Transport(Photon *) const; Bool_t Spread( Double_t th, Double_t wl, Double_t &x, Double_t &y, Double_t &a, Double_t &b ) const; // returns a random point (x,y) and angles (a,b) according psf(th,wl) private: enum EFSDescriptor { kIdeal, kTF2 }; enum EPsfType { kPoint, kGauss, kGaussVsTheta }; enum EGaussPar { kAmpl = 0, kSigma = 1 }; enum { kOutOfPupil = 1, kOutOfFoV = 2, kAbsorbed = 3, kOutOfPsf = 4, kTransportError = 5 }; Bool_t InitIntegral(); Bool_t IsAbsorbed( Double_t th, Double_t wl) const; EFSDescriptor fFSDescriptor; IdealFocalSurface *fIdealFocalSurface; Double_t fDmax; // max distance from focal surface vertex calculated along the fs Double_t fRmax; // radius of the focal surface Double_t fThetaMax; // max incident angle allowed Double_t fOutLensBorder; // the border of the exiting lens // Double_t fFocalSurfCenterZ; // z coord of the center of the focal surface Interpolate *fTotalEfficacy; EPsfType fPsfType; // Gaussian psf parameters Interpolate *fGaussSpread; Double_t fGaussAmpl; Double_t fGaussSigma; Double_t fEPD; TF2* fSpreadFun; Double_t *fIntegral; // fNbins+1 size array containing line integral of fs profile Int_t fNbins; // Size of fIntegral EsafConfigClass(Optics,ParamOpticalSystem) ClassDef(ParamOpticalSystem,0) }; #endif /* __PARAMOPTICALSYSTEM_HH_ */