Program Listing for File matrixsimulator.h¶
↰ Return to documentation for file (include/matrixsimulator.h)
#ifndef MATRIXSIMULATOR_H
#define MATRIXSIMULATOR_H
#include <memory>
#include "helper.h"
#include "spline.h"
#include "efficiency.h"
#include "source.h"
#include "PSF.h"
#include "CCD.h"
#include "telescope.h"
#include <array>
struct raw_transformation {
int order;
double wavelength;
std::array<double, 6> transformation_matrix;
std::vector<double> decomposed_matrix;
};
struct spectrograph_information {
double alpha;
double gpmm;
};
typedef struct raw_transformation raw_transformation;
class MatrixSimulator {
public:
MatrixSimulator(const std::string path, int fiber_number, bool keep_ccd);
void set_wavelength(int N);
void set_wavelength(std::vector<double> wavelength);
void add_efficiency(Efficiency *eff);
void set_telescope(Telescope *telescope);
void set_source(Source *src);
void save_to_hdf(const std::string filename, bool bleed = true, bool overwrite = false);
void save_to_fits(const std::string filename, bool bleed = true, bool overwrite = false);
void save_1d_to_fits(const std::string filename);
double get_alpha();
double get_gpmm();
int get_fiber_number();
void simulate(double t, unsigned long seed);
double get_minimum_wavelength();
double get_maximum_wavelength();
void add_background(double bias, double noise, unsigned long seed);
private:
void load_spectrograph_model(const std::string path, int fiber_number, bool keep_ccd = false);
void calc_splines();
std::array<double, 6> get_transformation_matrix(int order, double wavelength);
inline std::array<double, 6> get_transformation_matrix_lookup(int o, double wavelength);
void set_efficiencies(std::vector<Efficiency *> &efficiencies);
// void set_ccd(CCD *ccd);
// void set_slit(Slit *slit);
// void set_psfs(PSF *psfs);
void prepare_source(Source *source);
void prepare_psfs(int N);
void prepare_matrix_lookup(int N);
std::vector<int> orders;
int fiber_number;
int n_orders;
int min_order;
// highest order number
int max_order;
double wavelength_limit_max = 0.; // will be overwritten by load_spectrograph model
double wavelength_limit_min = 100.; // will be overwritten by load_spectrograph model
std::map<int, std::vector<raw_transformation> > raw_transformations;
std::vector<Efficiency *> efficiencies;
Source *source;
Telescope telescope;
CCD *ccd;
PSF *psfs;
std::vector<std::vector<double>> sim_wavelength;
std::vector<std::vector<double>> sim_efficiencies;
std::vector<std::vector<double>> sim_flux;
std::vector<std::vector<double>> flux_times_efficiency;
std::vector<double> sim_total_efficiency_per_order;
std::vector<std::vector<Matrix>> sim_psfs;
std::vector<std::vector<double>> sim_psfs_wavelength;
std::vector<double> sim_psfs_dwavelength;
std::vector<std::vector<int>> sim_1d;
std::vector<std::vector<double>> sim_p;
std::vector<std::vector<double>> sim_q;
std::vector<std::vector<double>> sim_r;
std::vector<std::vector<double>> sim_phi;
std::vector<std::vector<double>> sim_tx;
std::vector<std::vector<double>> sim_ty;
std::vector<std::vector<double>> sim_m00;
std::vector<std::vector<double>> sim_m01;
std::vector<std::vector<double>> sim_m10;
std::vector<std::vector<double>> sim_m11;
std::vector<std::vector<double>> sim_matrix_wavelength;
std::vector<double> sim_matrix_dwavelength;
std::vector<tk::spline> tr_p;
std::vector<tk::spline> tr_r;
std::vector<tk::spline> tr_q;
std::vector<tk::spline> tr_phi;
std::vector<tk::spline> tr_tx;
std::vector<tk::spline> tr_ty;
spectrograph_information spec_info;
};
#endif // MATRIXSIMULATOR_H