Program Listing for File source.h¶
↰ Return to documentation for file (include/source.h)
#ifndef SOURCE_H
#define SOURCE_H
#include <vector>
#include <map>
class Source {
public:
/* Constructor */
Source();
/* Destructor - it's important that this is virtual ! */
virtual ~Source();
virtual std::vector<double> get_interpolated_spectral_density(std::vector<double> wavelength);
void set_doppler_shift(double shift);
void set_integration_steps(int n);
virtual std::vector<double> get_photon_flux(std::vector<double> wavelength);
virtual std::vector<double> get_wavelength() {};
bool is_list_like() { return list_like; };
bool is_stellar_source() { return stellar_source; };
std::string get_source_name() { return name; };
protected:
virtual double get_spectral_density(double wavelength) {};
bool list_like;
bool stellar_source;
std::string name;
double shift;
double s_val = 1.0;
double integral_s(double a, double b, int n);
int integration_steps;
};
class CalibrationSource : public Source {
public:
CalibrationSource();
};
class StellarSource : public Source {
public:
StellarSource(double magnitude, double telescope_area);
// std::vector<double> get_interpolated_spectral_density(std::vector<double> wavelength);
protected:
double mag;
double telescope_area;
double v_zp = 3.68E-02;
double min_w = 0;
double max_w = 10.;
void calc_flux_scale();
};
class Constant : public CalibrationSource {
public:
/* Default Constructor */
Constant();
Constant(double value);
double get_spectral_density(double wavelength);
private:
/* Constant spectral density value */
double value;
};
class IdealEtalon : public CalibrationSource {
public:
IdealEtalon(double d, double n, double theta, double R, double I);
static double coefficient_of_finesse(double R);
static double T(double wl, double theta, double d, double n, double cF);
protected:
double get_spectral_density(double wavelength);
private:
double get_local_efficiency(double wavelength);
double d;
double n;
double theta;
double R;
double cF;
double I;
};
class Blackbody : public StellarSource {
public:
Blackbody(double T, double magnitude, double telescope_area);
double planck(const double &T, const double &wavelength);
double get_spectral_density(double wavelength);
private:
double T;
};
class PhoenixSpectrum : public StellarSource {
public:
PhoenixSpectrum(std::string spectrum_file, std::string wavelength_file, double magnitude,
double telescope_area);
double get_spectral_density(double wavelength);
private:
void read_spectrum(std::string spectrum_file, std::string wavelength_file);
// contains wavelength, spectrum data
std::map<double, double> data;
};
class CoehloSpectrum : public StellarSource {
public:
CoehloSpectrum(std::string spectrum_file, double magnitude, double telescope_area);
void read_spectrum(std::string spectrum_file);
double get_spectral_density(double wavelength);
private:
std::map<double, double> data;
};
class CustomSpectrum : public StellarSource {
public:
CustomSpectrum(double magnitude, double telescope_area, const std::string spectrum_file,
std::string wave_file);
void read_spectrum(const std::string spectrum_file, std::string wave_file);
double get_spectral_density(double wavelength);
private:
std::map<double, double> data;
};
class LineList : public CalibrationSource {
public:
LineList(const std::string linelist_file);
void read_spectrum(std::string linelist_file);
double get_spectral_density(double wavelength);
std::vector<double> get_interpolated_spectral_density(std::vector<double> wavelength);
std::vector<double> get_wavelength();
std::vector<double> event;
std::vector<double> intensity;
private:
std::map<double, double> data;
};
#endif // SOURCE_H