32 #include "muse_standard_z.h"
61 prop->
darcheck = MUSE_POSTPROC_DARCHECK_NONE;
62 if (aParams->
darcheck == MUSE_STANDARD_PARAM_DARCHECK_CHECK) {
63 prop->
darcheck = MUSE_POSTPROC_DARCHECK_CHECK;
64 }
else if (aParams->
darcheck == MUSE_STANDARD_PARAM_DARCHECK_CORRECT) {
65 prop->
darcheck = MUSE_POSTPROC_DARCHECK_CORRECT;
69 if (aParams->
profile == MUSE_STANDARD_PARAM_PROFILE_MOFFAT) {
71 }
else if (aParams->
profile == MUSE_STANDARD_PARAM_PROFILE_CIRCLE) {
73 }
else if (aParams->
profile == MUSE_STANDARD_PARAM_PROFILE_SQUARE) {
75 }
else if (aParams->
profile != MUSE_STANDARD_PARAM_PROFILE_GAUSSIAN) {
76 cpl_msg_error(__func__,
"unknown profile \"%s\"", aParams->
profile_s);
82 MUSE_TAG_STD_FLUX_TABLE, 0);
84 cpl_msg_error(__func__,
"Required input %s not found in input files",
85 MUSE_TAG_STD_FLUX_TABLE);
86 cpl_error_set_message(__func__, CPL_ERROR_NULL_INPUT,
87 MUSE_TAG_STD_FLUX_TABLE
" missing");
95 cpl_msg_debug(__func__,
"%s could not be found or loaded, using defaults",
102 cpl_msg_error(__func__,
"No standard star exposures found in input!");
106 int nexposures = cpl_table_get_nrow(prop->
exposures);
111 for (i = 0; i < nexposures; i++) {
115 for (i2 = 0; i2 <= i; i2++) {
127 cpl_error_code rc = CPL_ERROR_NONE;
130 for (i = 0; i < nexposures; i++) {
131 int ifilt, ipos = 0, nfilt = cpl_array_get_size(filters);
132 for (ifilt = 0; ifilt < nfilt; ifilt++) {
135 cpl_array_get_string(filters, ifilt));
140 if (!fluxobjs[i]->cube->recimages) {
142 fluxobjs[i]->cube->
recnames = cpl_array_new(0, CPL_TYPE_STRING);
145 cpl_array_set_size(fluxobjs[i]->cube->recnames, ipos+1);
146 cpl_array_set_string(fluxobjs[i]->cube->recnames, ipos,
147 cpl_array_get_string(filters, ifilt));
148 cpl_table_delete(filter);
157 cpl_propertylist *header = cpl_propertylist_duplicate(fluxobjs[i]->cube->header);
158 cpl_propertylist_erase_regexp(header,
"^NAXIS|^EXPTIME$|"MUSE_WCS_KEYS, 0);
159 char *objorig = cpl_strdup(cpl_propertylist_get_string(header,
"OBJECT"));
160 char *
object = cpl_sprintf(
"Response curve (%s)", objorig);
161 cpl_propertylist_update_string(header,
"OBJECT",
object);
165 if (rc != CPL_ERROR_NONE) {
167 cpl_propertylist_delete(header);
168 for ( ; i < nexposures; i++) {
173 object = cpl_sprintf(
"Telluric correction (%s)", objorig);
174 cpl_propertylist_update_string(header,
"OBJECT",
object);
179 cpl_propertylist_delete(header);
181 if (rc != CPL_ERROR_NONE) {
182 for ( ; i < nexposures; i++) {
188 cpl_array_delete(filters);
191 return rc == CPL_ERROR_NONE ? 0 : -1;
muse_postproc_properties * muse_postproc_properties_new(muse_postproc_type aType)
Create a post-processing properties object.
int profile
Type of flux integration to use. "gaussian" and "moffat" use 2D profile fitting, circle and square ar...
muse_image * muse_datacube_collapse(muse_datacube *aCube, cpl_table *aFilter)
Integrate a FITS NAXIS=3 datacube along the wavelength direction.
cpl_error_code muse_postproc_qc_fwhm(muse_processing *aProcessing, muse_datacube *aCube)
Compute QC1 parameters for datacubes and save them in the FITS header.
const char * profile_s
Type of flux integration to use. "gaussian" and "moffat" use 2D profile fitting, circle and square ar...
Structure definition of MUSE three extension FITS file.
cpl_array * recnames
the reconstructed image filter names
muse_flux_profile_type profile
cpl_table * muse_table_load_filter(muse_processing *aProcessing, const char *aFilterName)
Load a table for a given filter name.
cpl_array * muse_cplarray_new_from_delimited_string(const char *aString, const char *aDelim)
Convert a delimited string into an array of strings.
Flux object to store data needed while computing the flux calibration.
cpl_error_code muse_datacube_convert_dq(muse_datacube *aCube)
Convert the DQ extension of a datacube to NANs in DATA and STAT.
double lambdamin
Cut off the data below this wavelength after loading the pixel table(s).
cpl_error_code muse_processing_save_cube(muse_processing *aProcessing, int aIFU, void *aCube, const char *aTag, muse_cube_type aType)
Save a MUSE datacube to disk.
Structure definition of the post-processing properties.
void muse_postproc_properties_delete(muse_postproc_properties *aProp)
Free memory taken by a post-processing properties object and all its components.
double lambdaref
Reference wavelength used for correction of differential atmospheric refraction. The R-band (peak wav...
double lambdamax
Cut off the data above this wavelength after loading the pixel table(s).
Structure to hold the parameters of the muse_standard recipe.
muse_imagelist * muse_imagelist_new(void)
Create a new (empty) MUSE image list.
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
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.
void * muse_postproc_process_exposure(muse_postproc_properties *aProp, unsigned int aIndex)
Merge and process pixel tables from one exposure.
int darcheck
Carry out a check of the theoretical DAR correction using source centroiding. If "correct" it will al...
cpl_table * muse_processing_sort_exposures(muse_processing *aProcessing)
Sort input frames (containing lists of pixel table filenames) into different exposures.
cpl_frameset * inputFrames
muse_postproc_darcheck darcheck
cpl_error_code muse_imagelist_set(muse_imagelist *aList, muse_image *aImage, unsigned int aIdx)
Set the muse_image of given list index.
cpl_frame * muse_frameset_find_master(const cpl_frameset *aFrames, const char *aTag, unsigned char aIFU)
find the master frame according to its CCD number and tag
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...
void muse_flux_object_delete(muse_flux_object *aFluxObj)
Deallocate memory associated to a muse_flux_object.
muse_imagelist * recimages
the reconstructed image data