00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00035
00036
00037
00038 #ifndef mc_antenna_h
00039 #define mc_antenna_h
00040
00041 #include "arts.h"
00042 #include "rng.h"
00043 #include "matpackI.h"
00044 #include <cmath>
00045 #include <stdexcept>
00046
00047 typedef enum{
00048 ATYPE_PENCIL_BEAM = 1,
00049 ATYPE_GAUSSIAN = 2,
00050 ATYPE_LOOKUP = 3
00051 } AType;
00052
00054
00056 class MCAntenna {
00057 AType atype;
00058 Numeric sigma_aa,sigma_za;
00059 Vector aa_grid,za_grid;
00060 Matrix G_lookup;
00061
00062 public:
00063 MCAntenna() : atype(),
00064 sigma_aa(0.),
00065 sigma_za(0.),
00066 aa_grid(),
00067 za_grid(),
00068 G_lookup()
00069 { }
00070
00071 void set_pencil_beam (void);
00072 void set_gaussian (const Numeric& za_sigma,
00073 const Numeric& aa_sigma);
00074 void set_gaussian_fwhm (const Numeric& za_fwhm,
00075 const Numeric& aa_fwhm);
00076 void set_lookup (ConstVectorView& za_grid,
00077 ConstVectorView& aa_grid,
00078 ConstMatrixView& G_lookup);
00079 AType get_type(void) const;
00080 void draw_los(VectorView& sampled_rte_los,
00081 Rng& rng,
00082 ConstVectorView bore_sight_los) const;
00083 };
00084
00085 ostream& operator<< (ostream& os, const MCAntenna& mca);
00086
00087 Numeric ran_gaussian (
00088 Rng& rng,
00089 const Numeric sigma);
00090
00091 #endif // mc_antenna_h
00092