36 #include "muse_scibasic_z.h"
45 cpl_table *aTrace, cpl_table *aWave, cpl_table *aGeo,
48 cpl_ensure(aImage && aTrace && aWave, CPL_ERROR_NULL_INPUT, -1);
54 char *tag = cpl_sprintf(
"%s_RED", aProcessing->
inputTag);
62 cpl_msg_error(__func__,
"pixel table was not created: %s",
63 cpl_error_get_message());
77 char *tag = cpl_sprintf(
"%s_RESAMPLED", aProcessing->
inputTag);
79 cpl_propertylist_erase_regexp(image->
header, QC_SCIBASIC_PREFIX, 0);
88 const double llimN = 4750. - FLT_EPSILON, hlimN = 9350. + FLT_EPSILON,
89 llimE = 4600. - FLT_EPSILON, hlimE = 9350. + FLT_EPSILON;
92 cpl_msg_info(__func__,
"Nominal mode: cropping the pixel table to "
93 "%.1f...%.1f Angstrom", llimN, hlimN);
96 cpl_msg_info(__func__,
"Extended mode: cropping the pixel table to "
97 "%.1f...%.1f Angstrom", llimE, hlimE);
103 char *outtag = cpl_sprintf(
"PIXTABLE_%s", aProcessing->
inputTag);
125 if (strcmp(aProcessing->
inputTag,
"REDUCED") != 0) {
133 cpl_ensure(images, cpl_error_get_code(), -1);
135 cpl_table *tracetable =
muse_table_load(aProcessing, MUSE_TAG_TRACE_TABLE,
137 cpl_table *wavecaltable =
muse_table_load(aProcessing, MUSE_TAG_WAVECAL_TABLE,
139 cpl_table *geotable =
muse_table_load(aProcessing, MUSE_TAG_GEOMETRY_TABLE, 0);
140 if (!tracetable || !wavecaltable || !geotable) {
141 cpl_msg_error(__func__,
"Calibration could not be loaded:%s%s%s",
142 !tracetable ?
" "MUSE_TAG_TRACE_TABLE :
"",
143 !wavecaltable ?
" "MUSE_TAG_WAVECAL_TABLE :
"",
144 !geotable ?
" "MUSE_TAG_GEOMETRY_TABLE :
"");
147 cpl_table_delete(tracetable);
148 cpl_table_delete(wavecaltable);
149 cpl_table_delete(geotable);
154 cpl_array_delete(lines);
157 "muse.muse_scibasic");
158 if (cpars->combine == MUSE_COMBINE_NONE) {
160 for (i = 0; i < nimages && !rc; i++) {
162 rc = muse_scibasic_per_exposure(aProcessing, aParams, tracetable,
163 wavecaltable, geotable, image, skylines);
167 rc = muse_scibasic_per_exposure(aProcessing, aParams, tracetable,
168 wavecaltable, geotable, image, skylines);
171 cpl_array_delete(skylines);
176 cpl_table_delete(tracetable);
177 cpl_table_delete(wavecaltable);
178 cpl_table_delete(geotable);
muse_imagelist * muse_basicproc_load(muse_processing *aProcessing, unsigned char aIFU, muse_basicproc_params *aBPars)
Load the raw input files from disk and do basic processing.
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.
Structure definition for a collection of muse_images.
void muse_image_delete(muse_image *aImage)
Deallocate memory associated to a muse_image object.
cpl_array * muse_cplarray_string_to_double(const cpl_array *aArray)
Convert a string array into an array of type double.
void muse_imagelist_delete(muse_imagelist *aList)
Free the memory of the MUSE image list.
muse_imagelist * muse_basicproc_load_reduced(muse_processing *aProcessing, unsigned char aIFU)
Load reduced input files from disk.
muse_basicproc_params * muse_basicproc_params_new(cpl_parameterlist *aParameters, const char *aPrefix)
Create a new structure of basic processing parameters.
double dlambda
Wavelength step (in Angstrom per pixel) to use for resampling.
muse_image * muse_combine_images(muse_combinepar *aCPars, muse_imagelist *aImages)
Combine several images into one.
Structure definition of MUSE three extension FITS file.
void muse_basicproc_params_delete(muse_basicproc_params *aBPars)
Free a structure of basic processing parameters.
cpl_propertylist * header
the FITS header
unsigned int muse_imagelist_get_size(muse_imagelist *aList)
Return the number of stored images.
void muse_combinepar_delete(muse_combinepar *aCPars)
Clear the combination parameters.
cpl_error_code muse_pixtable_restrict_wavelength(muse_pixtable *aPixtable, double aLow, double aHigh)
Restrict a pixel table to a certain wavelength range.
int saveimage
Save the pre-processed CCD-based image of each input exposure before it is transformed into a pixel t...
cpl_array * muse_cplarray_new_from_delimited_string(const char *aString, const char *aDelim)
Convert a delimited string into an array of strings.
Structure definition of MUSE pixel table.
muse_image * muse_imagelist_get(muse_imagelist *aList, unsigned int aIdx)
Get the muse_image of given list index.
int resample
Resample the input science data into 2D spectral images using tracing and wavelength calibration solu...
muse_combinepar * muse_combinepar_new(cpl_parameterlist *aParameters, const char *aPrefix)
Create a new set of combination parameters.
int nifu
IFU to handle. If set to 0, all IFUs are processed serially. If set to -1, all IFUs are processed in ...
double skyhalfwidth
Half-width of the extraction box (in Angstrom) around each sky emission line.
int crop
Automatically crop the output pixel tables in wavelength depending on the expected useful wavelength ...
muse_pixtable * muse_pixtable_create(muse_image *aImage, cpl_table *aTrace, cpl_table *aWave, cpl_table *aGeoTable)
Create the pixel table for one CCD.
cpl_error_code muse_basicproc_shift_pixtable(muse_pixtable *aPt, cpl_array *aLines, double aHalfWidth, double aBinWidth)
Compute wavelength corrections for science data based on reference sky lines.
int muse_processing_save_image(muse_processing *aProcessing, int aIFU, muse_image *aImage, const char *aTag)
Save a computed MUSE image to disk.
Structure to hold the parameters of the muse_scibasic recipe.
double skybinsize
Size of the bins (in Angstrom per pixel) for the intermediate spectrum to do the Gaussian fit to each...
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.
Structure of basic processing parameters.
const char * skylines
List of wavelengths of sky emission lines (in Angstrom) to use as reference for wavelength offset cor...
void muse_pixtable_delete(muse_pixtable *aPixtable)
Deallocate memory associated to a pixel table object.
muse_ins_mode muse_pfits_get_mode(const cpl_propertylist *aHeaders)
find out the observation mode
cpl_parameterlist * parameters
cpl_propertylist * header
The FITS header.
cpl_error_code muse_basicproc_qc_saturated(muse_image *aImage, const char *aPrefix)
Add QC parameter about saturated pixels to a muse_image.