1 | // $Id: Aerosol.hh 2676 2006-04-28 15:22:49Z moreggia $ |
---|
2 | // Author: Sylvain Moreggia 2006/04/24 |
---|
3 | |
---|
4 | /***************************************************************************** |
---|
5 | * ESAF: Euso Simulation and Analysis Framework * |
---|
6 | * * |
---|
7 | * Id: Aerosol * |
---|
8 | * Package: <packagename> * |
---|
9 | * Coordinator: <coordinator> * |
---|
10 | * * |
---|
11 | *****************************************************************************/ |
---|
12 | |
---|
13 | #ifndef __AEROSOL_HH__ |
---|
14 | #define __AEROSOL_HH__ |
---|
15 | |
---|
16 | #include "euso.hh" |
---|
17 | #include "EsafConfigurable.hh" |
---|
18 | #include "EsafMsgSource.hh" |
---|
19 | |
---|
20 | class EarthVector; |
---|
21 | |
---|
22 | //////////////////////////////////////////////////////////////////////////////// |
---|
23 | // // |
---|
24 | // Aerosol // |
---|
25 | // // |
---|
26 | // Boundary layers aerosol, between altitude [0-2km] // |
---|
27 | // // |
---|
28 | //////////////////////////////////////////////////////////////////////////////// |
---|
29 | |
---|
30 | class Aerosol : public EsafConfigurable, public EsafMsgSource { |
---|
31 | public: |
---|
32 | // ctor |
---|
33 | Aerosol(string); |
---|
34 | // dtor |
---|
35 | virtual ~Aerosol(); |
---|
36 | |
---|
37 | // Return impact for given position and direction |
---|
38 | // Convention : - if already within aerosol, returns pos |
---|
39 | // - no impact, returns (0,0,HUGE) |
---|
40 | virtual EarthVector GetImpact(const EarthVector& pos, const EarthVector& dir,string opt = "default") const = 0; |
---|
41 | |
---|
42 | // to know if a position is within aerosol |
---|
43 | virtual Bool_t IsInAerosol(const EarthVector&) const = 0; |
---|
44 | |
---|
45 | // Returns the transmission at given wl, along given track |
---|
46 | // set "scat" to the scattering rate along a direction |
---|
47 | virtual Double_t Trans(const EarthVector&,const EarthVector&,Double_t, Double_t& scat) const = 0; |
---|
48 | |
---|
49 | // returns a scattering position along a given track |
---|
50 | // depends on wavelength |
---|
51 | virtual Bool_t RandomScatPos(const EarthVector&,const EarthVector&,Double_t,EarthVector&) const = 0; |
---|
52 | |
---|
53 | // set incoming direction to the outgoing direction after scattering |
---|
54 | // depends on wavelength |
---|
55 | virtual void RandomDir(EarthVector&,Double_t) const = 0; |
---|
56 | |
---|
57 | // aerosol scattering phase function - Normalized when integrated over full solid angle |
---|
58 | // depends on wavelength |
---|
59 | virtual Double_t PhaseFunction(const EarthVector&,const EarthVector&,Double_t) const = 0; |
---|
60 | |
---|
61 | // returns maximum value of currently used scattering phase function |
---|
62 | // depends on wavelength range |
---|
63 | virtual Double_t GetMaxPhaseFunction(Double_t wlmin,Double_t wlmax) const = 0; |
---|
64 | |
---|
65 | // reset the instance |
---|
66 | virtual void Reset() = 0; |
---|
67 | |
---|
68 | |
---|
69 | protected: |
---|
70 | |
---|
71 | // read config files |
---|
72 | virtual void Configure() = 0; |
---|
73 | |
---|
74 | // build the configured object |
---|
75 | virtual void Build() = 0; |
---|
76 | |
---|
77 | string fName; |
---|
78 | |
---|
79 | ClassDef(Aerosol,0) |
---|
80 | }; |
---|
81 | |
---|
82 | #endif /* __AEROSOL_HH__ */ |
---|
83 | |
---|