ReFRACtor
chapman_boa_rt.h
Go to the documentation of this file.
1 #ifndef CHAPMAN_BOA_RT_H
2 #define CHAPMAN_BOA_RT_H
3 
4 #include "radiative_transfer.h"
5 #include "atmosphere_oco.h"
6 #include "chapman_boa.h"
7 #include "spectral_bound.h"
8 
9 namespace FullPhysics {
10 
11 /****************************************************************/
15  public Observer<RtAtmosphere>,
16  public boost::noncopyable {
17 public:
19  const blitz::Array<double, 1>& Sza);
20 
22  const blitz::Array<double, 1>& Sza,
23  const SpectralBound& Spec_bound);
24 
25  virtual ~ChapmanBoaRT() {}
26 
27  //-----------------------------------------------------------------------
29  //-----------------------------------------------------------------------
30  void notify_update(const RtAtmosphere& updated_atm) { chapman_cache_stale = true; }
31 
32  virtual int number_stokes() const { return 1; }
33 
34  virtual int number_spectrometer() const
35  { return sza.extent(blitz::firstDim);}
36 
37  //-----------------------------------------------------------------------
39  //-----------------------------------------------------------------------
40 
41  const boost::shared_ptr<AtmosphereOco>& atmosphere_ptr() const {return atm;}
42 
43  // See description in base class
44  virtual Spectrum reflectance
45  (const SpectralDomain& Spec_domain, int Spec_index,
46  bool Skip_jacobian = false) const;
47  virtual blitz::Array<double, 2> stokes(const SpectralDomain& Spec_domain, int Spec_index) const;
48  virtual ArrayAd<double, 2> stokes_and_jacobian(const SpectralDomain& Spec_domain, int Spec_index) const;
49 
50  virtual void print(std::ostream& Os, bool Short_form = false) const;
51 
52 private:
53 
55  void compute_chapman_factors(const int Spec_idx) const;
56 
58  mutable blitz::Array<bool, 1> chapman_cache_stale;
59 
61  mutable std::vector<boost::shared_ptr<ChapmanBOA> > chapman_boa;
62 
64  SpectralBound spec_bound;
65 
68 
70  blitz::Array<double, 1> sza;
71 
72 };
73 }
74 
75 #endif
This class is responsible for setting up the atmosphere and ground information needed to run the Radi...
Definition: rt_atmosphere.h:51
For different instruments, it is more natural to either work with wavenumbers (e.g., GOSAT) or wavelength (e.g., OCO).
ChapmanBoaRT(const boost::shared_ptr< AtmosphereOco > &Atm, const blitz::Array< double, 1 > &Sza)
const boost::shared_ptr< AtmosphereOco > & atmosphere_ptr() const
Pointer to the Atmosphere class we are using.
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.
virtual int number_spectrometer() const
Number of spectrometer we have.
void notify_update(const RtAtmosphere &updated_atm)
Regenerate chapman factors when Atmosphere changes.
This runs a Radiative Transfer code to determine the reflectance for a given set of wavelengths...
This is a full spectrum, which contains a SpectralRange and SpectralDomain.
Definition: spectrum.h:18
This gives the upper and lower bounds of the SpectralWindow.
virtual ArrayAd< double, 2 > stokes_and_jacobian(const SpectralDomain &Spec_domain, int Spec_index) const
Calculate stokes vector for the given set of wavenumbers/wavelengths.
virtual Spectrum reflectance(const SpectralDomain &Spec_domain, int Spec_index, bool Skip_jacobian=false) const
Calculate reflectance for the given set of wavenumbers/wavelengths.
virtual void print(std::ostream &Os, bool Short_form=false) const
Print to stream.
Contains classes to abstract away details in various Spurr Radiative Transfer software.
Definition: doxygen_python.h:1
Simple Mixin to be and Observer of another object of class T.
Definition: observer.h:29

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