ReFRACtor
instrument.h
Go to the documentation of this file.
1 #ifndef INSTRUMENT_H
2 #define INSTRUMENT_H
3 #include "printable.h"
4 #include "spectral_window.h"
5 #include "array_ad.h"
7 #include "spectrum.h"
8 #include <blitz/array.h>
9 #include <boost/shared_ptr.hpp>
10 #include <vector>
11 
12 namespace FullPhysics {
13 /****************************************************************/
17 class Instrument : virtual public StateVectorObserver,
18  public Observable<Instrument> {
19 public:
20  virtual ~Instrument() {}
21 
22  virtual void add_observer(Observer<Instrument>& Obs)
23  { add_observer_do(Obs, *this);}
25  { remove_observer_do(Obs, *this);}
26 
27 //-----------------------------------------------------------------------
34 //-----------------------------------------------------------------------
35 
36  virtual boost::shared_ptr<Instrument> clone() const = 0;
37 
38 //-----------------------------------------------------------------------
40 //-----------------------------------------------------------------------
41 
42  virtual int number_spectrometer() const = 0;
43 
44 //-----------------------------------------------------------------------
51 //-----------------------------------------------------------------------
52 
54  const Spectrum& High_resolution_spectrum,
55  const std::vector<int>& Pixel_list,
56  int Spec_index) const = 0;
57 
58 //-----------------------------------------------------------------------
60 //-----------------------------------------------------------------------
61 
62  virtual SpectralDomain pixel_spectral_domain(int Spec_index) const = 0;
63 
64 //-----------------------------------------------------------------------
66 //-----------------------------------------------------------------------
67 
68  virtual std::string band_name(int Spec_index) const = 0;
69 
70 //-----------------------------------------------------------------------
78 //-----------------------------------------------------------------------
79 
80  virtual std::string hdf_band_name(int Spec_index) const
81  { return band_name(Spec_index); }
82 
83 //-----------------------------------------------------------------------
85 //-----------------------------------------------------------------------
86 
87  virtual DoubleWithUnit
88  ils_half_width(int Spec_index) const = 0;
89  virtual void ils_half_width(int Spec_index, DoubleWithUnit& half_width) = 0;
90  virtual void print(std::ostream& Os) const {Os << "Instrument";}
91 };
92 }
93 #endif
virtual boost::shared_ptr< Instrument > clone() const =0
Clone an Instrument object.
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...
Definition: instrument.h:80
virtual SpectralDomain pixel_spectral_domain(int Spec_index) const =0
This is the pixel wavenumber/wavelength for each pixel.
For different instruments, it is more natural to either work with wavenumbers (e.g., GOSAT) or wavelength (e.g., OCO).
virtual std::string band_name(int Spec_index) const =0
Band name for given Spec_index.
virtual int number_spectrometer() const =0
Give number of spectrometers.
void add_observer_do(Observer< Instrument > &Obs, Instrument &t)
Add an observer.
Definition: observer.h:148
This is an observer of a StateVector.
void remove_observer_do(Observer< Instrument > &Obs, Instrument &t)
Remove an observer.
Definition: observer.h:173
virtual Spectrum apply_instrument_model(const Spectrum &High_resolution_spectrum, const std::vector< int > &Pixel_list, int Spec_index) const =0
Apply the instrument model to both the radiance and derivatives.
This applies a instrument model to radiances.
Definition: instrument.h:17
This is a full spectrum, which contains a SpectralRange and SpectralDomain.
Definition: spectrum.h:18
Mixin for a class that allows other classes to observe it state.
Definition: observer.h:12
virtual void print(std::ostream &Os) const
Definition: instrument.h:90
We frequently have a double with units associated with it.
virtual void add_observer(Observer< Instrument > &Obs)
Add an observer.
Definition: instrument.h:22
Contains classes to abstract away details in various Spurr Radiative Transfer software.
Definition: doxygen_python.h:1
virtual void remove_observer(Observer< Instrument > &Obs)
Remove an observer.
Definition: instrument.h:24
virtual DoubleWithUnit ils_half_width(int Spec_index) const =0
This is the half width of the ILS in wavenumber.

Copyright © 2017, California Institute of Technology.
ALL RIGHTS RESERVED.
U.S. Government Sponsorship acknowledged.
Generated Fri Aug 24 2018 15:44:10