1 | // $Id: Ground.hh 2672 2006-04-18 12:26:23Z moreggia $ |
---|
2 | // Author: S.Moreggia Oct, 27 2003 |
---|
3 | |
---|
4 | /***************************************************************************** |
---|
5 | * ESAF: Euso Simulation and Analysis Framework * |
---|
6 | * * |
---|
7 | * Id: Ground * |
---|
8 | * Package: RadiativeTransfer * |
---|
9 | * Coordinator: Sylvain Moreggia * |
---|
10 | * * |
---|
11 | *****************************************************************************/ |
---|
12 | |
---|
13 | |
---|
14 | #ifndef __GROUND_HH__ |
---|
15 | #define __GROUND_HH__ |
---|
16 | |
---|
17 | #include "EsafConfigurable.hh" |
---|
18 | #include "EarthVector.hh" |
---|
19 | #include "BunchOfPhotons.hh" |
---|
20 | #include "EsafMsgSource.hh" |
---|
21 | |
---|
22 | class ListPhotonsInAtmosphere; |
---|
23 | |
---|
24 | |
---|
25 | //////////////////////////////////////////////////////////////////////////////// |
---|
26 | // // |
---|
27 | // Ground // |
---|
28 | // // |
---|
29 | // Interface for ground description // |
---|
30 | // // |
---|
31 | //////////////////////////////////////////////////////////////////////////////// |
---|
32 | |
---|
33 | class Ground : public EsafConfigurable, public EsafMsgSource { |
---|
34 | public: |
---|
35 | |
---|
36 | // ctor |
---|
37 | Ground(); |
---|
38 | |
---|
39 | // dtor |
---|
40 | virtual ~Ground(); |
---|
41 | |
---|
42 | virtual EarthVector GetImpact(const EarthVector&, const EarthVector&) const = 0; |
---|
43 | |
---|
44 | // Get an impact form starting position and direction in atmosphere |
---|
45 | // NB : if no impact, return (0,0,HUGE) |
---|
46 | // if track is underground, return (0,0,-HUGE) |
---|
47 | inline EarthVector GetImpact(const BunchOfPhotons& b) const {return GetImpact(b.GetPos(),b.GetDir());} |
---|
48 | |
---|
49 | // Phase function of the outgoing light (earth sphericity taken into account) |
---|
50 | // - pos = position on ground (MES frame) |
---|
51 | // - incomdir = incident direction (MES frame) |
---|
52 | // - outgodir = outgoing position (MES frame) |
---|
53 | virtual Double_t Outgoing_phase_function(const EarthVector& pos, const EarthVector& incomdir, const EarthVector& outgodir) const = 0; |
---|
54 | |
---|
55 | virtual Double_t GetMaxOutgoing_phase_function() const = 0; |
---|
56 | |
---|
57 | // change incom_dir to the outgoing direction of scattering, sampling Outgoing phase function |
---|
58 | virtual void RandomDir(const EarthVector& pos, EarthVector& incom_dir) const = 0; |
---|
59 | |
---|
60 | // Get albedo for a given position |
---|
61 | virtual Double_t Albedo(const EarthVector&) const = 0; |
---|
62 | |
---|
63 | // Get ground altitude at the vertical of the given point |
---|
64 | virtual Double_t Altitude(const EarthVector&) const = 0; |
---|
65 | |
---|
66 | // Get ground specular component intensity at given position |
---|
67 | virtual Double_t Specular(const EarthVector&) const = 0; |
---|
68 | |
---|
69 | // to know if position is underground |
---|
70 | Bool_t IsUnderGround(const EarthVector& pos) const; |
---|
71 | |
---|
72 | // Configure |
---|
73 | virtual void Configure() = 0; |
---|
74 | |
---|
75 | // get ready for next event |
---|
76 | virtual void Reset() = 0; |
---|
77 | |
---|
78 | EsafConfigClass(RadiativeTransfer,Ground) |
---|
79 | |
---|
80 | protected: |
---|
81 | |
---|
82 | ClassDef(Ground,0) |
---|
83 | }; |
---|
84 | |
---|
85 | #endif /* __GROUND_HH__ */ |
---|