// ESAF : Euso Simulation and Analysis Framework // $Id: Clouds.hh,v 1.14 2005/10/19 12:10:26 moreggia Exp $ // Sylvain Moreggia created Dec, 1 2003 #ifndef __CLOUDS_HH_ #define __CLOUDS_HH_ #include "euso.hh" #include "EsafConfigurable.hh" /******************************************************************************* * * Clouds : class description * * Interface for clouds description * Hold by the atmosphere object * Each Clouds description holds its associated CloudsData object for data storage * Each clouds description has its associated propagator (in RadiativeTransfer module) * ******************************************************************************/ class SinglePhoton; class BunchOfPhotons; class EarthVector; class EVector; class Clouds : public EsafConfigurable, public EsafMsgSource { public: // ctor Clouds(); // dtor virtual ~Clouds(); // Return impact for given position and direction // Convention : - if already within clouds, returns pos // - no impact, returns (0,0,HUGE) virtual EarthVector GetCloudImpact(const EarthVector& pos, const EarthVector& dir,string opt = "default") const = 0; // to know if a position is within clouds virtual Bool_t IsInClouds(const EarthVector&) const = 0; // Returns the total OD along a direction virtual Double_t TotalOD(const EarthVector&,const EarthVector&) const = 0; // returns a scattering position along a given track virtual EarthVector RandomScatPos(const EarthVector&,const EarthVector&) const = 0; // set incoming direction to the outgoing direction after scattering virtual void RandomDir(EarthVector&) const = 0; // clouds scattering phase function - Normalized when integrated over full solid angle virtual Double_t PhaseFunction(const EarthVector&,const EarthVector&) const = 0; // reset the instance virtual void Reset() = 0; // get members inline Double_t GetTopAltitude() const {return fTopAltitude;} inline Double_t GetThickness() const {return fThickness;} inline Double_t GetOD() const {return fOD;} EsafConfigClass(Atmosphere,Clouds) protected: // read config files virtual void Configure() = 0; // build the configured object virtual void Build() = 0; string fFeat; // clouds features (occurence, OD and alt distributions). Defined in config files Double_t fTopAltitude; // clouds top altitude at sea level Double_t fThickness; // vertical thickness (spatial, not optical) Double_t fOD; // vertical integrated optical depth, homogeneously distributed ClassDef(Clouds,0) }; #endif /* __CLOUDS_HH_ */