1 #ifndef ILS_INSTRUMENT_H 2 #define ILS_INSTRUMENT_H 16 public Observer<InstrumentCorrection> {
20 Instrument_correction =
25 const Spectrum& High_resolution_spectrum,
26 const std::vector<int>& Pixel_list,
27 int Spec_index)
const;
31 return ils_[Spec_index]->pixel_grid();
36 return ils_[Spec_index]->hdf_band_name();
41 return ils_[Spec_index]->hdf_band_name();
47 return ils_[Spec_index]->ils_half_width();
52 return ils_[Spec_index]->ils_half_width(half_width);
54 virtual void print(std::ostream& Os)
const;
68 return ils_[Spec_index];
74 const std::vector<boost::shared_ptr<InstrumentCorrection> >&
78 return inst_corr[Spec_index];
81 std::vector<boost::shared_ptr<Ils> > ils_;
82 std::vector<std::vector<boost::shared_ptr<InstrumentCorrection> > >
#define range_check(V, Min, Max)
Range check.
virtual int number_spectrometer() const
Give number of spectrometers.
virtual void notify_update(const InstrumentCorrection &C)
Called when the Observed object is updated.
virtual Spectrum apply_instrument_model(const Spectrum &High_resolution_spectrum, const std::vector< int > &Pixel_list, int Spec_index) const
Apply the instrument model to both the radiance and derivatives.
IlsInstrument(const std::vector< boost::shared_ptr< Ils > > &Ils_list, const std::vector< std::vector< boost::shared_ptr< InstrumentCorrection > > > &Instrument_correction=std::vector< std::vector< boost::shared_ptr< InstrumentCorrection > > >())
Constructor.
virtual void print(std::ostream &Os) const
For different instruments, it is more natural to either work with wavenumbers (e.g., GOSAT) or wavelength (e.g., OCO).
virtual std::string hdf_band_name(int Spec_index) const
In general, the name used in HDF files for a particular band is similar but not identical to the more...
This is a instrument that uses a Ils object for each spectrometer to model the instrument.
boost::shared_ptr< Ils > ils(int Spec_index) const
Underlying Ils.
void notify_update_do(const Instrument &Self)
Function to call to notify Observers of a state change.
This applies a instrument model to radiances.
This is a full spectrum, which contains a SpectralRange and SpectralDomain.
virtual std::string band_name(int Spec_index) const
Band name for given Spec_index.
We frequently have a double with units associated with it.
virtual void ils_half_width(int Spec_index, DoubleWithUnit &half_width)
virtual SpectralDomain pixel_spectral_domain(int Spec_index) const
This is the pixel wavenumber/wavelength for each pixel.
This class models an Instrument Line Shape (ILS).
const std::vector< boost::shared_ptr< InstrumentCorrection > > & instrument_correction(int Spec_index) const
Underlying InstrumentCorrection.
virtual boost::shared_ptr< Instrument > clone() const
Clone an Instrument object.
Contains classes to abstract away details in various Spurr Radiative Transfer software.
virtual void notify_update(const Ils &D)
Called when the Observed object is updated.
virtual DoubleWithUnit ils_half_width(int Spec_index) const
This is the half width of the ILS in wavenumber.
This class models an Instrument correction.
Simple Mixin to be and Observer of another object of class T.