// $Id: Ground.hh,v 1.18 2005/09/21 15:52:25 moreggia Exp $ // Author: S.Moreggia Oct, 27 2003 /***************************************************************************** * ESAF: Euso Simulation and Analysis Framework * * * * Id: Ground * * Package: RadiativeTransfer * * Coordinator: Sylvain Moreggia * * * *****************************************************************************/ #ifndef __GROUND_HH__ #define __GROUND_HH__ #include "EsafConfigurable.hh" #include "EarthVector.hh" #include "BunchOfPhotons.hh" #include "EsafMsgSource.hh" class ListPhotonsInAtmosphere; //////////////////////////////////////////////////////////////////////////////// // // // Ground // // // // Interface for ground description // // // //////////////////////////////////////////////////////////////////////////////// class Ground : public EsafConfigurable, public EsafMsgSource { public: Ground(); // ctor virtual ~Ground(); // dtor virtual EarthVector GetImpact(const EarthVector&, const EarthVector&) const = 0; inline EarthVector GetImpact(const BunchOfPhotons& b) const {return GetImpact(b.GetPos(),b.GetDir());} // Get an impact form starting position and direction in atmosphere // NB : if no impact, return (0,0,HUGE) // if track is underground, return (0,0,-HUGE) virtual Double_t Outgoing_phase_function(const EarthVector& pos1, const EarthVector& pos2) const = 0; // Phase function of the outgoing light, emitted from pos1 toward pos2 // earth sphericity taken into account // set incom_dir to the outgoing direction of scattering, sampling Outgoing phase function virtual void RandomDir(const EarthVector& pos, EarthVector& incom_dir) const = 0; virtual Double_t Albedo(const EarthVector&) const = 0; // Get albedo for a given position virtual Double_t Altitude(const EarthVector&) const = 0; // Get ground altitude at the vertical of the given point Bool_t IsUnderGround(const EarthVector& pos) const; // to know if position is underground virtual void Configure() = 0; // Configure virtual void Reset() = 0; // get ready for next event EsafConfigClass(RadiativeTransfer,Ground) protected: ClassDef(Ground,0) }; #endif /* __GROUND_HH__ */