30 #include "muse_scipost_z.h"
62 prop->
darcheck = MUSE_POSTPROC_DARCHECK_NONE;
63 if (aParams->
darcheck == MUSE_SCIPOST_PARAM_DARCHECK_CHECK) {
64 prop->
darcheck = MUSE_POSTPROC_DARCHECK_CHECK;
65 }
else if (aParams->
darcheck == MUSE_SCIPOST_PARAM_DARCHECK_CORRECT) {
66 prop->
darcheck = MUSE_POSTPROC_DARCHECK_CORRECT;
77 cpl_msg_warning(__func__,
"Using default MUSE WFM astrometry, output "
78 "world coordinates will be inaccurate!");
87 { MUSE_SCIPOST_PARAM_SKYMETHOD_NONE, MUSE_POSTPROC_SKYMETHOD_NONE },
88 { MUSE_SCIPOST_PARAM_SKYMETHOD_SUBTRACT_MODEL, MUSE_POSTPROC_SKYMETHOD_NONE },
89 { MUSE_SCIPOST_PARAM_SKYMETHOD_MODEL, MUSE_POSTPROC_SKYMETHOD_MODEL },
90 { MUSE_SCIPOST_PARAM_SKYMETHOD_ROW_BY_ROW, MUSE_POSTPROC_SKYMETHOD_ROWBYROW },
91 { MUSE_SCIPOST_PARAM_SKYMETHOD_INVALID_VALUE, MUSE_POSTPROC_SKYMETHOD_MODEL },
93 prop->
skymethod = MUSE_POSTPROC_SKYMETHOD_MODEL;
96 skymethod[i_method].par != MUSE_SCIPOST_PARAM_SKYMETHOD_INVALID_VALUE;
98 if (skymethod[i_method].par == aParams->
skymethod) {
99 prop->
skymethod = skymethod[i_method].postproc;
109 if (aParams->
skymethod == MUSE_SCIPOST_PARAM_SKYMETHOD_SUBTRACT_MODEL) {
111 if (prop->
sky->
lsf != NULL) {
114 cpl_msg_warning(__func__,
"Sky lines missing for subtraction");
118 }
else if (aParams->
skymethod == MUSE_SCIPOST_PARAM_SKYMETHOD_MODEL) {
120 if (prop->
sky->
lsf == NULL) {
121 cpl_msg_error(__func__,
"Missing required LSF parameter frames for sky model");
125 cpl_msg_error(__func__,
"Missing required sky lines frame for sky model");
138 cpl_msg_error(__func__,
"no science exposures found in input");
142 int nexposures = cpl_table_get_nrow(prop->
exposures);
148 for (i = 0; i < nexposures; i++) {
152 for (i2 = 0; i2 <= i; i2++) {
161 MUSE_TAG_PIXTABLE_REDUCED,
172 MUSE_TAG_PIXTABLE_POSITIONED,
181 if (nexposures > 1) {
184 if (rc != CPL_ERROR_NONE) {
185 cpl_msg_error(__func__,
"weighting the pixel tables didn't work: %s",
186 cpl_error_get_message());
187 for (i = 0; i < nexposures; i++) {
196 cpl_msg_error(__func__,
"combining the pixel tables didn't work: %s",
197 cpl_error_get_message());
198 for (i = 0; i < nexposures; i++) {
205 bigpixtable = pixtables[0];
215 rp->
dx = aParams->
dx;
216 rp->dy = aParams->
dy;
217 rp->dlambda = aParams->
dlambda;
220 rp->
ld = aParams->
ld;
221 rp->
rc = aParams->
rc;
227 cpl_propertylist_delete(outwcs);
236 MUSE_TAG_PIXTABLE_COMBINED,
240 cpl_msg_debug(__func__,
"additional output as column-stacked image");
250 return rc == CPL_ERROR_NONE ? 0 : -1;
muse_image * muse_resampling_image(muse_pixtable *aPixtable, muse_resampling_type aMethod, double aDX, double aDLambda)
Resample a pixel table onto a two-dimensional regular grid.
cpl_propertylist * muse_postproc_cube_load_output_wcs(muse_processing *aProcessing)
Find a file with a usable output WCS in the input frameset.
muse_postproc_properties * muse_postproc_properties_new(muse_postproc_type aType)
Create a post-processing properties object.
muse_postproc_skymethod
Method of sky subtraction to apply.
void muse_image_delete(muse_image *aImage)
Deallocate memory associated to a muse_image object.
double lambdamin
Cut off the data below this wavelength after loading the pixel table(s).
muse_pixtable * muse_pixtable_duplicate(muse_pixtable *aPixtable)
Make a copy of the pixtanle.
int save_combined
If true, save the fully reduced and combined pixel table for the full set of exposures. The difference to save_positioned is that here all pixel tables are combined into one, with an added "weight" column. This is useful, if only the final resampling step is to be done separately.
double muse_pfits_get_ra(const cpl_propertylist *aHeaders)
find out the right ascension
cpl_error_code muse_resampling_params_set_wcs(muse_resampling_params *aParams, const cpl_propertylist *aWCS)
Set an output WCS (and wavelength scale) in the resampling parameters.
muse_xcombine_types muse_postproc_get_weight_type(const char *aWeightString)
Select correct weighting type for weight string.
cpl_table * muse_sky_lines_load(muse_processing *)
Load the sky data files.
muse_resampling_crstats_type muse_postproc_get_cr_type(const char *aCRTypeString)
Select correct cosmic ray rejection type for crtype string.
int ld
Number of adjacent pixels to take into account during resampling in all three directions (loop distan...
Structure definition of MUSE three extension FITS file.
cpl_error_code muse_postproc_cube_resample_and_collapse(muse_processing *aProcessing, muse_pixtable *aPixtable, muse_cube_type aFormat, muse_resampling_params *aParams, const char *aFilter)
High level function to resample to a datacube and collapse that to an image of the field of view and ...
muse_mask * muse_processing_mask_load(muse_processing *aProcessing, const char *aTag)
Load a mask file and its FITS header.
cpl_error_code muse_xcombine_weights(muse_pixtable **aPixtables, muse_xcombine_types aWeighting)
compute the weights for combination of two or more exposures
muse_postproc_skymethod skymethod
const char * filter
The filter name(s) to be used for the output field-of-view image. Each name has to correspond to an E...
muse_resampling_crstats_type crtype
const char * weight_s
Type of weighting scheme to use when combining multiple exposures. (as string)
cpl_table * muse_sky_continuum_load(muse_processing *)
Load the SKY_CONTINUUM spectrum.
Structure definition of MUSE pixel table.
muse_cube_type muse_postproc_get_cube_format(const char *aFormatString)
Select correct cube format for format string.
double dy
Vertical step size for resampling (in arcsec or pixel). The following defaults are taken when this va...
cpl_table * lines
Table of Atmospheric emission lines and their intensities.
muse_resampling_params * muse_resampling_params_new(muse_resampling_type aMethod)
Create the resampling parameters structure.
double pixfrac
Pixel down-scaling factor for the "drizzle" resampling method.
double lambdaref
Reference wavelength used for correction of differential atmospheric refraction. The R-band (peak wav...
double rc
Critical radius for the "renka" resampling method.
Structure definition of the post-processing properties.
double skymodel_fraction
Fraction of the image to be considered as sky. If an input sky mask is provided, the fraction is appl...
void muse_postproc_properties_delete(muse_postproc_properties *aProp)
Free memory taken by a post-processing properties object and all its components.
const char * crtype_s
Type of statistics used for detection of cosmic rays during final resampling. "iraf" uses the varianc...
int darcheck
Carry out a check of the theoretical DAR correction using source centroiding. If "correct" it will al...
double skymodel_sampling
Spectral sampling of the sky spectrum [Angstrom].
double muse_pfits_get_dec(const cpl_propertylist *aHeaders)
find out the declination
int astrometry
If false, skip any astrometric calibration, even if one was passed in the input set of files...
double skymodel_csampling
Spectral sampling of the continuum spectrum [Angstrom].
const char * format_s
Type of output file format, "Cube" is a standard FITS cube with NAXIS=3 and multiple extensions (for ...
double lambdamax
Cut off the data above this wavelength after loading the pixel table(s).
int muse_processing_save_image(muse_processing *aProcessing, int aIFU, muse_image *aImage, const char *aTag)
Save a computed MUSE image to disk.
muse_resampling_type muse_postproc_get_resampling_type(const char *aResampleString)
Select correct resampling type for resample string.
double dx
Horizontal step size for resampling (in arcsec or pixel). The following defaults are taken when this ...
muse_pixtable * muse_xcombine_tables(muse_pixtable **aPixtables)
combine the pixel tables of several exposures into one
int skymethod
The method used to subtract the sky background. "model" should work in all cases, it uses a global sk...
Structure to hold the parameters of the muse_scipost recipe.
cpl_table * muse_table_load(muse_processing *aProcessing, const char *aTag, unsigned char aIFU)
load a table according to its tag and IFU/channel number
double crsigma
Sigma rejection factor to use for cosmic ray rejection during final resampling. A zero or negative va...
cpl_error_code muse_processing_save_table(muse_processing *aProcessing, int aIFU, void *aTable, cpl_propertylist *aHeader, const char *aTag, muse_table_type aType)
Save a computed table to disk.
muse_resampling_type
Resampling types.
void muse_resampling_params_delete(muse_resampling_params *aParams)
Delete a resampling parameters structure.
muse_lsf_params ** muse_processing_lsf_params_load(muse_processing *aProcessing, int aIFU)
Load slice LSF parameters.
cpl_propertylist * muse_propertylist_load(muse_processing *aProcessing, const char *aTag)
load a propertylist according to its tag
void * muse_postproc_process_exposure(muse_postproc_properties *aProp, unsigned int aIndex)
Merge and process pixel tables from one exposure.
cpl_table * continuum
Continuum flux table
cpl_error_code muse_wcs_position_celestial(muse_pixtable *aPixtable, double aRA, double aDEC)
Convert native to celestial spherical coordinates in a pixel table.
muse_sky_params skymodel_params
cpl_table * muse_processing_sort_exposures(muse_processing *aProcessing)
Sort input frames (containing lists of pixel table filenames) into different exposures.
void muse_pixtable_delete(muse_pixtable *aPixtable)
Deallocate memory associated to a pixel table object.
int save_individual
If true, save fully reduced pixel table for each individual exposure as output product.
int save_positioned
If true, save fully reduced and positioned pixel table for each individual exposure as output product...
muse_postproc_darcheck darcheck
muse_xcombine_types
Xposure combination types.
double dlambda
Wavelength step size (in Angstrom). Natural instrument sampling is used, if this is 0...
muse_lsf_params ** lsf
LSF parameter for the resampled spectrum.
int stacked
If true, write an additional output file in form of a 2D stacked image (x direction is pseudo-spatial...
const char * resample_s
The resampling technique to use for the final output cube. (as string)
cpl_propertylist * header
The FITS header.
muse_sky_master * muse_sky_master_new(void)
Create a muse_sky_master structure.
cpl_propertylist * muse_wcs_create_default(void)
Create FITS headers containing a default (relative) WCS.