source.h
Go to the documentation of this file.
1 #ifndef SOURCE_H
2 #define SOURCE_H
3 
4 #include <vector>
5 #include <map>
13 class Source
14 {
15 public:
16  /* Constructor */
17  Source();
18 
19  /* Destructor - it's important that this is virtual ! */
20  virtual ~Source();
21 
29  virtual std::vector<double> get_spectral_density(std::vector<double> wavelength);
30 
38  virtual double get_spectral_density(double wavelength);
39 
47  virtual std::vector<double> get_spectrum(std::vector<double> wavelength);
48 
54  void set_doppler_shift(double shift);
55 
60  void set_integration_steps(int n);
61 
62 private:
79  double integral_s(double a, double b, int n);
80 
81  double shift;
83 };
84 
94 class Constant : public Source{
95 public:
96  /* Constructor */
97  Constant();
102  Constant(double value);
109  double get_spectral_density(double wavelength);
110 private:
111  /* Constant spectral density value */
112  double value;
113 };
114 
131 class IdealEtalon : public Source{
132 public:
141  IdealEtalon(double d, double n, double theta, double R);
154  static double coefficient_of_finesse(double R);
155 
156  double FSR();
157 
158  double F();
159 
177  static double T(double wl, double theta, double d, double n, double cF);
184  double get_spectral_density(double wavelength);
185 private:
186  double d;
187  double n;
188  double theta;
189  double R;
190  double cF;
191 };
192 
193 
213 class Blackbody : public Source{
214 public:
219  Blackbody(double T);
226  static double planck(const double& T, const double& wavelength);
235  double get_spectral_density(double wavelength);
236 private:
237  double T;
238 };
239 
240 class PhoenixSpectrum : public Source{
241 public:
242  PhoenixSpectrum(std::string spectrum_file, std::string wavelength_file, const double& min_wavelength, const double& max_wavelength);
243  void read_spectrum(std::string spectrum_file, std::string wavelength_file, const double& min_wavelength, const double& max_wavelength);
244  double get_spectral_density(double wavelength);
245 private:
246  std::map<double, double> data;
247 
248 };
249 
255 class LineList : public Source{
256 public:
257  LineList(std::string linelist);
258  void read_spectrum(std::string linelist);
259  double get_spectral_density(double wavelength);
260  std::vector<double> get_spectrum(std::vector<double> wavelength);
261  std::vector<double> get_wavelength();
262 private:
263  std::map<double, double> data;
264 };
265 #endif // SOURCE_H
Base class of all spectral sources.
Definition: source.h:13
double d
Definition: source.h:186
Implements the spectral density of an ideal fabry-perot etalon.
Definition: source.h:131
void set_integration_steps(int n)
Definition: source.cpp:64
Implements a blackbody spectrum.
Definition: source.h:213
Implements line list spectrum.
Definition: source.h:255
double cF
Definition: source.h:190
int integration_steps
number of steps for the integrator
Definition: source.h:82
std::map< double, double > data
Definition: source.h:246
double shift
current doppler shift
Definition: source.h:81
virtual ~Source()
Definition: source.cpp:33
double value
Definition: source.h:112
Source()
Definition: source.cpp:26
virtual std::vector< double > get_spectrum(std::vector< double > wavelength)
Definition: source.cpp:45
double integral_s(double a, double b, int n)
Definition: source.cpp:68
virtual std::vector< double > get_spectral_density(std::vector< double > wavelength)
Definition: source.cpp:38
double R
Definition: source.h:189
Definition: source.h:240
double T
Temperature [K].
Definition: source.h:237
double theta
Definition: source.h:188
void set_doppler_shift(double shift)
Definition: source.cpp:77
std::map< double, double > data
Definition: source.h:263
Implements constant spectral density.
Definition: source.h:94
double n
Definition: source.h:187