// ESAF : Euso Simulation and Analysis Framework // $Id: UniformLayersClouds.hh,v 1.8 2005/10/19 12:10:26 moreggia Exp $ // Author: Sylvain Moreggia Aug, 18 2004 #ifndef __UNIFORMLAYERSCLOUDS_HH_ #define __UNIFORMLAYERSCLOUDS_HH_ #include "euso.hh" #include "Clouds.hh" #include "CloudsBox.hh" #include "EarthVector.hh" /******************************************************************************* * * UniformLayersClouds: class description * * Multi-layer clouds spreading uniformly within Euso FoV * Each layer has homogeneous properties * Earth sphericity is taken into account * ******************************************************************************/ class UniformLayersClouds : public Clouds { public: // ctor UniformLayersClouds(); // dtor virtual ~UniformLayersClouds(); // Return impact on clouds for given position and direction // if opt is "outgoing", returns the track exit point // Convention : - if already within clouds, returns pos // - no impact, returns (0,0,HUGE) virtual EarthVector GetCloudImpact(const EarthVector&, const EarthVector&,string opt = "default") const; // to know if a position is within clouds virtual Bool_t IsInClouds(const EarthVector&) const; // Returns the total OD along a direction virtual Double_t TotalOD(const EarthVector&,const EarthVector&) const; // returns a scattering position along a given track virtual EarthVector RandomScatPos(const EarthVector&,const EarthVector&) const {return EarthVector(0,0,HUGE);} // set incoming direction to the outgoing direction after scattering virtual void RandomDir(EarthVector&) const {} // clouds scattering phase function - Normalized when integrated over full solid angle virtual Double_t PhaseFunction(const EarthVector&,const EarthVector&) const {return 0;} // Layer OD between incoming and outgoing points Double_t InclinedODloc(Int_t,const EarthVector&,const EarthVector&) const; // Returns the impact of a track on a specified CloudLayer (outgoing option allowed) EarthVector GetLayerImpact(Int_t,const EarthVector&,const EarthVector&,string opt = "default") const; // says in which layer pos is standing Int_t LayerNumber(const EarthVector&) const; // reset virtual void Reset() {} EsafConfigClass(Atmosphere,UniformLayersClouds) private: // read config files virtual void Configure() {} // Build clouds description virtual void Build(); // to know if pos is in the specified layer Bool_t IsInLayer(Int_t,const EarthVector& pos, EarthVector dir = 0.) const; // says if the track points toward the specified layer Int_t PointToLayer(Int_t,const EarthVector&,const EarthVector&) const; // idem but for the whole cloud Int_t PointToClouds(const EarthVector&,const EarthVector&) const; // to know if locally track is going up/downward Bool_t GoingDownward(const EarthVector&,const EarthVector&) const; CloudsBox* fBox; // describe clouds properties string fCloudsType; // clouds type ClassDef(UniformLayersClouds,0) }; #endif /* __UNIFORMLAYERSCLOUDS_HH_ */