00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef MUSE_FLUX_H
00023 #define MUSE_FLUX_H
00024
00025
00026
00027
00028 #include <cpl.h>
00029
00030 #include "muse_image.h"
00031 #include "muse_pixtable.h"
00032 #include "muse_resampling.h"
00033
00034
00035
00036
00037
00038 static const char kMuseFluxUnitString[] = "10**(-20)*erg/s/cm**2/Angstrom";
00039 static const char kMuseFluxStatString[] = "(10**(-20)*erg/s/cm**2/Angstrom)**2";
00040 static const double kMuseFluxUnitFactor = 1e20;
00041 static const double kMuseFluxStatFactor = 1e40;
00042
00043
00044
00045 #define MUSE_HDR_FLUX_NOBJ "ESO DRS MUSE FLUX NOBJ"
00046 #define MUSE_HDR_FLUX_OBJn_X "ESO DRS MUSE FLUX OBJ%d X"
00047 #define MUSE_HDR_FLUX_OBJn_Y "ESO DRS MUSE FLUX OBJ%d Y"
00048 #define MUSE_HDR_FLUX_OBJn_RA "ESO DRS MUSE FLUX OBJ%d RA"
00049 #define MUSE_HDR_FLUX_OBJn_DEC "ESO DRS MUSE FLUX OBJ%d DEC"
00050 #define MUSE_HDR_FLUX_OBJn_FLUX "ESO DRS MUSE FLUX OBJ%d INTFLUX"
00051
00052
00053
00054
00055 extern const muse_cpltable_def muse_response_tellbands_def[];
00056
00060
00064
00065 typedef struct {
00067 muse_datacube *cube;
00070 muse_image *intimage;
00073 cpl_table *sensitivity;
00075 cpl_table *response;
00077 cpl_table *tellbands;
00079 cpl_table *telluric;
00081 double raref;
00083 double decref;
00084 } muse_flux_object;
00085
00086
00095
00096 typedef enum {
00097 MUSE_FLUX_RESP_FILTER = 0,
00098 MUSE_FLUX_RESP_FLUX,
00099 MUSE_FLUX_RESP_STD_FLUX,
00100 MUSE_FLUX_RESP_EXTINCT,
00101 MUSE_FLUX_TELLURIC
00102 } muse_flux_interpolation_type;
00103
00104
00108
00109 typedef enum {
00110 MUSE_FLUX_PROFILE_MOFFAT = 0,
00111 MUSE_FLUX_PROFILE_GAUSSIAN,
00112 MUSE_FLUX_PROFILE_CIRCLE,
00113 MUSE_FLUX_PROFILE_EQUAL_SQUARE
00114 } muse_flux_profile_type;
00115
00116
00120
00121 typedef enum {
00122 MUSE_FLUX_SELECT_BRIGHTEST = 0,
00123 MUSE_FLUX_SELECT_NEAREST
00124 } muse_flux_selection_type;
00125
00126
00130
00131 typedef enum {
00132 MUSE_FLUX_SMOOTH_NONE = 0,
00133 MUSE_FLUX_SMOOTH_MEDIAN,
00134 MUSE_FLUX_SMOOTH_PPOLY
00136 } muse_flux_smooth_type;
00137
00140
00141
00142
00143 muse_flux_object *muse_flux_object_new(void);
00144 void muse_flux_object_delete(muse_flux_object *aFluxObj);
00145
00146 cpl_error_code muse_flux_reference_table_check(cpl_table *);
00147 double muse_flux_response_interpolate(const cpl_table *, double, double *, muse_flux_interpolation_type);
00148 muse_image *muse_flux_integrate_cube(muse_datacube *, cpl_apertures *, muse_flux_profile_type);
00149 cpl_error_code muse_flux_integrate_std(muse_pixtable *, muse_flux_profile_type, muse_flux_object *);
00150 cpl_error_code muse_flux_response_compute(muse_flux_object *, muse_flux_selection_type, double, const cpl_table *, const cpl_table *, const cpl_table *);
00151 cpl_error_code muse_flux_get_response_table(muse_flux_object *, muse_flux_smooth_type);
00152 cpl_error_code muse_flux_get_telluric_table(muse_flux_object *);
00153 cpl_error_code muse_flux_calibrate(muse_pixtable *, const cpl_table *, const cpl_table *, const cpl_table *);
00154
00155 #endif