7 #include <boost/noncopyable.hpp> 8 #include <blitz/array.h> 21 public boost::noncopyable {
33 const blitz::Array<double, 1>& Sza,
34 const blitz::Array<double, 1>& Zen,
35 const blitz::Array<double, 1>& Azm,
37 bool Use_first_order_scatt_calc =
true,
38 bool Do_second_order =
false,
39 double Spectrum_spacing = 0.01,
45 const blitz::Array<double, 1>& Sza,
46 const blitz::Array<double, 1>& Zen,
47 const blitz::Array<double, 1>& Azm,
50 bool Do_second_order =
false,
51 int Number_stream = 4,
52 double Spectrum_spacing = 0.01,
63 return (*zmat_interpolate)(Wn);
78 virtual void print(std::ostream& Os,
bool Short_form =
false)
const;
82 void initialize(
const SpectralBound& Spec_bound,
double Spectrum_spacing);
92 blitz::Array<double, 2> > > zmat_interpolate;
94 blitz::Array<double, 3> > > l_zmat_interpolate;
101 bool use_first_order_scatt_calc;
102 bool do_second_order;
105 blitz::Array<double, 1> sza, zen, azm;
108 std::vector<double> wmin, wmax;
117 mutable int alt_spec_index_cache;
118 void update_altitude(
int spec_index)
const;
void notify_update(const RtAtmosphere &atm)
For performance, we cache some data as we calculate it.
virtual int number_stream() const
Number of streams to use in processing.
ArrayAd< double, 2 > interp_z_matrix(double Wn)
Return an interpolated z_matrix value for use in offline testing.
This class is responsible for setting up the atmosphere and ground information needed to run the Radi...
boost::shared_ptr< RtAtmosphere > atm
virtual blitz::Array< double, 1 > stokes_single_wn(double Wn, int Spec_index, const ArrayAd< double, 2 > &Iv) const
Calculate stokes vector for the given wavenumber.
LRadRt(const boost::shared_ptr< RadiativeTransferSingleWn > &Rt, const SpectralBound &Spec_bound, const blitz::Array< double, 1 > &Sza, const blitz::Array< double, 1 > &Zen, const blitz::Array< double, 1 > &Azm, bool Pure_nadir, bool Use_first_order_scatt_calc=true, bool Do_second_order=false, double Spectrum_spacing=0.01, const LRadDriver::PsMode ps_mode=LRadDriver::DETECT)
Constructor.
virtual ArrayAd< double, 1 > stokes_and_jacobian_single_wn(double Wn, int Spec_index, const ArrayAd< double, 2 > &Iv) const
Calculate stokes vector and Jacobian for the given wavenumber.
This class drives the LRAD code, which gives a polarization correction to scalar intensity and jacobi...
virtual int surface_type() const
Returns an integer with l_rad's representation of surface type.
This is a RadiativeTransfer that supplies an interface that can be called for a single wavenumber...
This gives the upper and lower bounds of the SpectralWindow.
This does linear interpolate between two points.
virtual blitz::Array< double, 2 > stokes(const SpectralDomain &Spec_domain, int Spec_index) const
Calculate stokes vector for the given set of wavenumbers/wavelengths.
virtual int number_stokes() const
Number of stokes parameters we will return in stokes and stokes_and_jacobian.
const boost::shared_ptr< RadiativeTransferSingleWn > & radiative_transfer() const
Contains classes to abstract away details in various Spurr Radiative Transfer software.
virtual void print(std::ostream &Os, bool Short_form=false) const
Print to stream.
Simple Mixin to be and Observer of another object of class T.