34 #include <cpl_recipe.h>
35 #include <cpl_plugininfo.h>
36 #include <cpl_parameterlist.h>
37 #include <cpl_frameset.h>
43 #include "gifiberutils.h"
44 #include "gislitgeometry.h"
45 #include "gipsfdata.h"
48 #include "giextract.h"
50 #include "gitransmission.h"
51 #include "girebinning.h"
52 #include "gisgcalibration.h"
53 #include "giastrometry.h"
55 #include "gimessages.h"
60 static cxint giscience(cpl_parameterlist*, cpl_frameset*);
69 giscience_create(cpl_plugin* plugin)
72 cpl_recipe* recipe = (cpl_recipe*)plugin;
74 cpl_parameter* p = NULL;
86 recipe->parameters = cpl_parameterlist_new();
87 cx_assert(recipe->parameters != NULL);
116 p = cpl_parameter_new_value(
"giraffe.siwc.apply",
118 "Enable simultaneous wavelength calibration "
123 cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,
"siwc-apply");
124 cpl_parameterlist_append(recipe->parameters, p);
142 giscience_exec(cpl_plugin* plugin)
145 cpl_recipe* recipe = (cpl_recipe*)plugin;
148 cx_assert(recipe->parameters != NULL);
149 cx_assert(recipe->frames != NULL);
151 return giscience(recipe->parameters, recipe->frames);
157 giscience_destroy(cpl_plugin* plugin)
160 cpl_recipe* recipe = (cpl_recipe*)plugin;
169 cpl_parameterlist_delete(recipe->parameters);
171 giraffe_error_clear();
183 giscience(cpl_parameterlist* config, cpl_frameset*
set)
186 const cxchar*
const _id =
"giscience";
189 const cxchar* filename = NULL;
192 cxbool calsim = FALSE;
199 cxdouble exptime = 0.;
201 cx_slist* slist = NULL;
203 cpl_propertylist* properties = NULL;
205 cpl_matrix* biasareas = NULL;
207 cpl_frame* science_frame = NULL;
208 cpl_frame* mbias_frame = NULL;
209 cpl_frame* mdark_frame = NULL;
210 cpl_frame* bpixel_frame = NULL;
211 cpl_frame* slight_frame = NULL;
212 cpl_frame* locy_frame = NULL;
213 cpl_frame* locw_frame = NULL;
214 cpl_frame* psfdata_frame = NULL;
215 cpl_frame* grating_frame = NULL;
216 cpl_frame* linemask_frame = NULL;
217 cpl_frame* slit_frame = NULL;
218 cpl_frame* wcal_frame = NULL;
219 cpl_frame* rscience_frame = NULL;
220 cpl_frame* sext_frame = NULL;
221 cpl_frame* rbin_frame = NULL;
223 cpl_parameter* p = NULL;
225 GiImage* mbias = NULL;
226 GiImage* mdark = NULL;
227 GiImage* bpixel = NULL;
228 GiImage* slight = NULL;
229 GiImage* sscience = NULL;
230 GiImage* rscience = NULL;
232 GiTable* fibers = NULL;
233 GiTable* slitgeometry = NULL;
234 GiTable* grating = NULL;
235 GiTable* wcalcoeff = NULL;
237 GiLocalization* localization = NULL;
238 GiExtraction* extraction = NULL;
239 GiRebinning* rebinning = NULL;
241 GiBiasConfig* bias_config = NULL;
242 GiExtractConfig* extract_config = NULL;
243 GiFlatConfig* flat_config = NULL;
244 GiRebinConfig* rebin_config = NULL;
246 GiInstrumentMode mode;
248 GiRecipeInfo info = {(cxchar*)_id, 1, NULL};
250 GiGroupInfo groups[] = {
251 {GIFRAME_SCIENCE, CPL_FRAME_GROUP_RAW},
252 {GIFRAME_BADPIXEL_MAP, CPL_FRAME_GROUP_CALIB},
253 {GIFRAME_BIAS_MASTER, CPL_FRAME_GROUP_CALIB},
254 {GIFRAME_DARK_MASTER, CPL_FRAME_GROUP_CALIB},
255 {GIFRAME_FIBER_FLAT_EXTSPECTRA, CPL_FRAME_GROUP_CALIB},
256 {GIFRAME_FIBER_FLAT_EXTERRORS, CPL_FRAME_GROUP_CALIB},
257 {GIFRAME_SCATTERED_LIGHT_MODEL, CPL_FRAME_GROUP_CALIB},
258 {GIFRAME_LOCALIZATION_CENTROID, CPL_FRAME_GROUP_CALIB},
259 {GIFRAME_LOCALIZATION_WIDTH, CPL_FRAME_GROUP_CALIB},
260 {GIFRAME_PSF_CENTROID, CPL_FRAME_GROUP_CALIB},
261 {GIFRAME_PSF_WIDTH, CPL_FRAME_GROUP_CALIB},
262 {GIFRAME_PSF_DATA, CPL_FRAME_GROUP_CALIB},
263 {GIFRAME_WAVELENGTH_SOLUTION, CPL_FRAME_GROUP_CALIB},
264 {GIFRAME_LINE_MASK, CPL_FRAME_GROUP_CALIB},
265 {GIFRAME_SLITSETUP, CPL_FRAME_GROUP_CALIB},
266 {GIFRAME_SLITMASTER, CPL_FRAME_GROUP_CALIB},
267 {GIFRAME_GRATING, CPL_FRAME_GROUP_CALIB},
268 {NULL, CPL_FRAME_GROUP_NONE}
274 cpl_msg_error(_id,
"Invalid parameter list! Aborting ...");
279 cpl_msg_error(_id,
"Invalid frame set! Aborting ...");
283 status = giraffe_frameset_set_groups(
set, groups);
286 cpl_msg_error(_id,
"Setting frame group information failed!");
295 nscience = cpl_frameset_count_tags(
set, GIFRAME_SCIENCE);
298 cpl_msg_error(_id,
"Too few (%ld) raw frames (%s) present in "
299 "frame set! Aborting ...", nscience, GIFRAME_SCIENCE);
303 locy_frame = cpl_frameset_find(
set, GIFRAME_PSF_CENTROID);
305 if (locy_frame == NULL) {
307 locy_frame = cpl_frameset_find(
set, GIFRAME_LOCALIZATION_CENTROID);
309 if (locy_frame == NULL) {
310 cpl_msg_info(_id,
"No master localization (centroid position) "
311 "present in frame set. Aborting ...");
317 locw_frame = cpl_frameset_find(
set, GIFRAME_PSF_WIDTH);
319 if (locw_frame == NULL) {
321 locw_frame = cpl_frameset_find(
set, GIFRAME_LOCALIZATION_WIDTH);
323 if (locw_frame == NULL) {
324 cpl_msg_info(_id,
"No master localization (spectrum width) "
325 "present in frame set. Aborting ...");
331 grating_frame = cpl_frameset_find(
set, GIFRAME_GRATING);
333 if (!grating_frame) {
334 cpl_msg_error(_id,
"No grating data present in frame set. "
342 cpl_msg_error(_id,
"No slit geometry present in frame set. "
347 wcal_frame = cpl_frameset_find(
set, GIFRAME_WAVELENGTH_SOLUTION);
350 cpl_msg_error(_id,
"No dispersion solution present in frame set. "
355 linemask_frame = cpl_frameset_find(
set, GIFRAME_LINE_MASK);
357 if (!linemask_frame) {
358 cpl_msg_warning(_id,
"No reference line mask present in frame set.");
361 bpixel_frame = cpl_frameset_find(
set, GIFRAME_BADPIXEL_MAP);
364 cpl_msg_info(_id,
"No bad pixel map present in frame set.");
367 mbias_frame = cpl_frameset_find(
set, GIFRAME_BIAS_MASTER);
370 cpl_msg_info(_id,
"No master bias present in frame set.");
373 mdark_frame = cpl_frameset_find(
set, GIFRAME_DARK_MASTER);
376 cpl_msg_info(_id,
"No master dark present in frame set.");
379 slight_frame = cpl_frameset_find(
set, GIFRAME_SCATTERED_LIGHT_MODEL);
382 cpl_msg_info(_id,
"No scattered light model present in frame set.");
385 psfdata_frame = cpl_frameset_find(
set, GIFRAME_PSF_DATA);
387 if (!psfdata_frame) {
388 cpl_msg_info(_id,
"No PSF profile parameters present in frame set.");
396 slist = cx_slist_new();
398 science_frame = cpl_frameset_find(
set, GIFRAME_SCIENCE);
400 for (i = 0; i < nscience; i++) {
402 filename = cpl_frame_get_filename(science_frame);
410 cpl_msg_error(_id,
"Cannot load raw science frame from '%s'. "
411 "Aborting ...", filename);
418 cx_slist_push_back(slist, raw);
420 science_frame = cpl_frameset_find(
set, NULL);
424 nscience = (cxint)cx_slist_size(slist);
425 sscience = cx_slist_pop_front(slist);
428 cx_assert(properties != NULL);
437 cpl_msg_info(_id,
"Averaging science frames ...");
439 exptime = cpl_propertylist_get_double(properties, GIALIAS_EXPTIME);
441 for (i = 1; i < nscience; i++) {
443 cpl_propertylist* _properties;
445 GiImage* science = cx_slist_pop_front(slist);
452 cx_assert(_properties != NULL);
454 exptime += cpl_propertylist_get_double(_properties, GIALIAS_EXPTIME);
463 cx_assert(cx_slist_empty(slist));
464 cx_slist_delete(slist);
474 cpl_msg_info(_id,
"Updating stacked science image properties ...");
476 cpl_propertylist_set_double(properties, GIALIAS_EXPTIME,
479 cpl_propertylist_append_double(properties, GIALIAS_EXPTTOT, exptime);
480 cpl_propertylist_set_comment(properties, GIALIAS_EXPTTOT,
481 "Total exposure time of all frames "
484 cpl_propertylist_append_int(properties, GIALIAS_DATANCOM, nscience);
485 cpl_propertylist_set_comment(properties, GIALIAS_DATANCOM,
486 "Number of frames combined");
488 cpl_propertylist_erase(properties, GIALIAS_TPLEXPNO);
503 if (bias_config->method == GIBIAS_METHOD_MASTER ||
504 bias_config->method == GIBIAS_METHOD_ZMASTER) {
507 cpl_msg_error(_id,
"Missing master bias frame! Selected bias "
508 "removal method requires a master bias frame!");
516 filename = cpl_frame_get_filename(mbias_frame);
523 cpl_msg_error(_id,
"Cannot load master bias from '%s'. "
524 "Aborting ...", filename);
541 filename = cpl_frame_get_filename(bpixel_frame);
548 cpl_msg_error(_id,
"Cannot load bad pixel map from '%s'. "
549 "Aborting ...", filename);
590 cpl_msg_error(_id,
"Bias removal failed. Aborting ...");
595 if (bpixel != NULL) {
611 GiDarkConfig dark_config = {GIDARK_METHOD_ZMASTER, 0.};
614 cpl_msg_info(_id,
"Correcting for dark current ...");
616 filename = cpl_frame_get_filename(mdark_frame);
622 cpl_msg_error(_id,
"Cannot load master dark from '%s'. "
623 "Aborting ...", filename);
628 if (bpixel != NULL) {
640 cpl_msg_error(_id,
"Dark subtraction failed! Aborting ...");
648 if (bpixel != NULL) {
667 cpl_msg_info(_id,
"Writing pre-processed science image ...");
672 GIFRAME_SCIENCE_REDUCED,
673 CPL_FRAME_LEVEL_INTERMEDIATE,
676 if (rscience_frame == NULL) {
677 cpl_msg_error(_id,
"Cannot create local file! Aborting ...");
684 cpl_frameset_insert(
set, rscience_frame);
691 science_frame = cpl_frameset_find(
set, GIFRAME_SCIENCE);
693 cpl_msg_info(_id,
"Building fiber setup for frame '%s'.",
694 cpl_frame_get_filename(science_frame));
699 cpl_msg_error(_id,
"Cannot create fiber setup for frame '%s'! "
700 "Aborting ...", cpl_frame_get_filename(science_frame));
713 cpl_msg_info(_id,
"Fiber reference setup taken from localization "
714 "frame '%s'.", cpl_frame_get_filename(locy_frame));
721 localization = giraffe_localization_new();
723 filename = cpl_frame_get_filename(locy_frame);
730 cpl_msg_error(_id,
"Cannot load localization (centroid "
731 "position) frame from '%s'. Aborting ...",
734 giraffe_localization_destroy(localization);
748 filename = cpl_frame_get_filename(locw_frame);
755 cpl_msg_error(_id,
"Cannot load localization (spectrum width) "
756 "frame from '%s'. Aborting ...", filename);
758 giraffe_localization_destroy(localization);
778 filename = cpl_frame_get_filename(slight_frame);
785 cpl_msg_error(_id,
"Cannot load scattered light model from '%s'. "
786 "Aborting ...", filename);
790 giraffe_localization_destroy(localization);
809 if ((extract_config->emethod == GIEXTRACT_OPTIMAL) ||
810 (extract_config->emethod == GIEXTRACT_HORNE)) {
812 if (psfdata_frame == NULL) {
814 const cxchar* emethod =
"Optimal";
816 if (extract_config->emethod == GIEXTRACT_HORNE) {
820 cpl_msg_error(_id,
"%s spectrum extraction requires PSF "
821 "profile data. Aborting ...", emethod);
824 extract_config = NULL;
826 if (slight != NULL) {
831 giraffe_localization_destroy(localization);
850 filename = cpl_frame_get_filename(psfdata_frame);
853 localization->psf = giraffe_psfdata_new();
854 status = giraffe_psfdata_load(localization->psf, filename);
857 cpl_msg_error(_id,
"Cannot load PSF profile data frame from "
858 "'%s'. Aborting ...", filename);
861 extract_config = NULL;
863 if (slight != NULL) {
868 giraffe_localization_destroy(localization);
891 extraction = giraffe_extraction_new();
894 localization, bpixel, slight,
898 cpl_msg_error(_id,
"Spectrum extraction failed! Aborting ...");
900 giraffe_extraction_destroy(extraction);
905 giraffe_localization_destroy(localization);
938 if (flat_config->load == TRUE) {
940 cpl_frame* flat_frame = NULL;
942 GiImage* flat = NULL;
945 flat_frame = cpl_frameset_find(
set, GIFRAME_FIBER_FLAT_EXTSPECTRA);
947 if (flat_frame == NULL) {
948 cpl_msg_error(_id,
"Missing flat field spectra frame!");
952 giraffe_extraction_destroy(extraction);
953 giraffe_localization_destroy(localization);
963 filename = cpl_frame_get_filename(flat_frame);
969 cpl_msg_error(_id,
"Cannot load flat field spectra from '%s'. "
970 "Aborting ...", filename);
976 giraffe_extraction_destroy(extraction);
977 giraffe_localization_destroy(localization);
987 if (flat_config->apply == TRUE) {
989 GiImage* errors = NULL;
992 flat_frame = cpl_frameset_find(
set, GIFRAME_FIBER_FLAT_EXTERRORS);
994 if (flat_frame == NULL) {
995 cpl_msg_warning(_id,
"Missing flat field spectra errors "
1000 filename = cpl_frame_get_filename(flat_frame);
1006 cpl_msg_error(_id,
"Cannot load flat field spectra "
1007 "errors from '%s'. Aborting ...",
1015 giraffe_extraction_destroy(extraction);
1016 giraffe_localization_destroy(localization);
1028 cpl_msg_info(_id,
"Applying flat field correction ...");
1034 cpl_msg_error(_id,
"Flat field correction failed! "
1042 giraffe_extraction_destroy(extraction);
1043 giraffe_localization_destroy(localization);
1058 if (flat_config->transmission == TRUE) {
1060 const cxchar* _filename = cpl_frame_get_filename(flat_frame);
1062 GiTable* _fibers = NULL;
1065 cpl_msg_info(_id,
"Loading fiber setup for frame '%s'.",
1071 cpl_msg_error(_id,
"Cannot create fiber setup for "
1072 "frame '%s'! Aborting ...", _filename);
1078 giraffe_extraction_destroy(extraction);
1079 giraffe_localization_destroy(localization);
1089 cpl_msg_info(_id,
"Applying relative fiber transmission "
1092 status = giraffe_transmission_setup(fibers, _fibers);
1096 status = giraffe_transmission_apply(extraction, fibers);
1101 cpl_msg_error(_id,
"Relative transmission correction failed! "
1108 giraffe_extraction_destroy(extraction);
1109 giraffe_localization_destroy(localization);
1134 cpl_msg_info(_id,
"Writing extracted spectra ...");
1141 GIFRAME_SCIENCE_EXTSPECTRA,
1142 CPL_FRAME_LEVEL_FINAL,
1145 if (sext_frame == NULL) {
1146 cpl_msg_error(_id,
"Cannot create local file! Aborting ...");
1148 giraffe_extraction_destroy(extraction);
1149 giraffe_localization_destroy(localization);
1162 cpl_msg_error(_id,
"Cannot attach fiber setup to local file '%s'! "
1163 "Aborting ...", cpl_frame_get_filename(sext_frame));
1165 cpl_frame_delete(sext_frame);
1167 giraffe_extraction_destroy(extraction);
1168 giraffe_localization_destroy(localization);
1178 cpl_frameset_insert(
set, sext_frame);
1185 GIFRAME_SCIENCE_EXTERRORS,
1186 CPL_FRAME_LEVEL_FINAL,
1189 if (sext_frame == NULL) {
1190 cpl_msg_error(_id,
"Cannot create local file! Aborting ...");
1192 giraffe_extraction_destroy(extraction);
1193 giraffe_localization_destroy(localization);
1206 cpl_msg_error(_id,
"Cannot attach fiber setup to local file '%s'! "
1207 "Aborting ...", cpl_frame_get_filename(sext_frame));
1209 cpl_frame_delete(sext_frame);
1211 giraffe_extraction_destroy(extraction);
1212 giraffe_localization_destroy(localization);
1222 cpl_frameset_insert(
set, sext_frame);
1226 if (extraction->npixels != NULL) {
1231 GIFRAME_SCIENCE_EXTPIXELS,
1232 CPL_FRAME_LEVEL_FINAL,
1235 if (sext_frame == NULL) {
1236 cpl_msg_error(_id,
"Cannot create local file! Aborting ...");
1238 giraffe_extraction_destroy(extraction);
1239 giraffe_localization_destroy(localization);
1252 cpl_msg_error(_id,
"Cannot attach fiber setup to local file '%s'! "
1253 "Aborting ...", cpl_frame_get_filename(sext_frame));
1255 cpl_frame_delete(sext_frame);
1257 giraffe_extraction_destroy(extraction);
1258 giraffe_localization_destroy(localization);
1268 cpl_frameset_insert(
set, sext_frame);
1277 GIFRAME_SCIENCE_EXTTRACE,
1278 CPL_FRAME_LEVEL_FINAL,
1281 if (sext_frame == NULL) {
1282 cpl_msg_error(_id,
"Cannot create local file! Aborting ...");
1284 giraffe_extraction_destroy(extraction);
1285 giraffe_localization_destroy(localization);
1298 cpl_msg_error(_id,
"Cannot attach fiber setup to local file '%s'! "
1299 "Aborting ...", cpl_frame_get_filename(sext_frame));
1301 cpl_frame_delete(sext_frame);
1303 giraffe_extraction_destroy(extraction);
1304 giraffe_localization_destroy(localization);
1314 cpl_frameset_insert(
set, sext_frame);
1318 if (extraction->model != NULL) {
1323 GIFRAME_SCIENCE_EXTMODEL,
1324 CPL_FRAME_LEVEL_FINAL,
1327 if (sext_frame == NULL) {
1328 cpl_msg_error(_id,
"Cannot create local file! Aborting ...");
1330 giraffe_extraction_destroy(extraction);
1331 giraffe_localization_destroy(localization);
1344 cpl_msg_error(_id,
"Cannot attach fiber setup to local file '%s'! "
1345 "Aborting ...", cpl_frame_get_filename(sext_frame));
1347 cpl_frame_delete(sext_frame);
1349 giraffe_extraction_destroy(extraction);
1350 giraffe_localization_destroy(localization);
1360 cpl_frameset_insert(
set, sext_frame);
1370 filename = (cxchar *)cpl_frame_get_filename(wcal_frame);
1376 cpl_msg_error(_id,
"Cannot load dispersion solution from "
1377 "'%s'. Aborting ...", filename);
1379 giraffe_extraction_destroy(extraction);
1380 giraffe_localization_destroy(localization);
1395 filename = (cxchar *)cpl_frame_get_filename(grating_frame);
1403 cpl_msg_error(_id,
"Cannot load grating data from '%s'. "
1404 "Aborting ...", filename);
1406 giraffe_extraction_destroy(extraction);
1407 giraffe_localization_destroy(localization);
1423 filename = (cxchar *)cpl_frame_get_filename(slit_frame);
1427 if (slitgeometry == NULL) {
1428 cpl_msg_error(_id,
"Cannot load slit geometry data from '%s'. "
1429 "Aborting ...", filename);
1433 giraffe_extraction_destroy(extraction);
1434 giraffe_localization_destroy(localization);
1452 cpl_msg_error(_id,
"Slit geometry data from '%s' is not "
1453 "applicable for current fiber setup! "
1454 "Aborting ...", filename);
1459 giraffe_extraction_destroy(extraction);
1460 giraffe_localization_destroy(localization);
1478 cpl_msg_info(_id,
"Spectrum rebinning");
1485 localization, grating, slitgeometry,
1486 wcalcoeff, rebin_config);
1489 cpl_msg_error(_id,
"Rebinning of science spectra failed! Aborting...");
1493 giraffe_extraction_destroy(extraction);
1494 giraffe_localization_destroy(localization);
1515 p = cpl_parameterlist_find(config,
"giraffe.siwc.apply");
1516 cx_assert(p != NULL);
1518 siwc = cpl_parameter_get_bool(p);
1522 cx_assert(properties != NULL);
1525 if (cpl_propertylist_has(properties, GIALIAS_STSCTAL) == TRUE) {
1526 calsim = cpl_propertylist_get_bool(properties, GIALIAS_STSCTAL);
1530 if ((siwc == TRUE) && (calsim == TRUE) && (linemask_frame != NULL)) {
1539 if (siwc_config == NULL) {
1546 giraffe_extraction_destroy(extraction);
1547 giraffe_localization_destroy(localization);
1561 filename = cpl_frame_get_filename(linemask_frame);
1566 cpl_msg_error(_id,
"Cannot load line reference mask from '%s'. "
1567 "Aborting ...", filename);
1577 giraffe_extraction_destroy(extraction);
1578 giraffe_localization_destroy(localization);
1594 linemask, siwc_config);
1597 cpl_msg_error(_id,
"Applying simultaneous wavelength "
1598 "calibration correction failed! Aborting...");
1608 giraffe_extraction_destroy(extraction);
1609 giraffe_localization_destroy(localization);
1633 localization, grating, slitgeometry,
1634 wcalcoeff, rebin_config);
1637 cpl_msg_error(_id,
"Rebinning of science spectra failed! "
1642 giraffe_extraction_destroy(extraction);
1643 giraffe_localization_destroy(localization);
1659 giraffe_extraction_destroy(extraction);
1662 giraffe_localization_destroy(localization);
1663 localization = NULL;
1666 rebin_config = NULL;
1683 cpl_msg_warning(_id,
"Missing observation time properties! "
1684 "Barycentric correction computation "
1691 cpl_msg_warning(_id,
"Missing telescope location properties! "
1692 "Barycentric correction computation "
1699 cpl_msg_warning(_id,
"Object positions are not available "
1700 "Barycentric correction computation "
1707 cpl_msg_error(_id,
"Barycentric correction computation "
1708 "failed! Aborting...");
1734 GIFRAME_SCIENCE_RBNSPECTRA,
1735 CPL_FRAME_LEVEL_FINAL,
1738 if (rbin_frame == NULL) {
1739 cpl_msg_error(_id,
"Cannot create local file! Aborting ...");
1755 cpl_msg_error(_id,
"Cannot attach fiber setup to local "
1756 "file '%s'! Aborting ...",
1757 cpl_frame_get_filename(rbin_frame));
1766 cpl_frame_delete(rbin_frame);
1771 cpl_frameset_insert(
set, rbin_frame);
1778 GIFRAME_SCIENCE_RBNERRORS,
1779 CPL_FRAME_LEVEL_FINAL,
1782 if (rbin_frame == NULL) {
1783 cpl_msg_error(_id,
"Cannot create local file! Aborting ...");
1799 cpl_msg_error(_id,
"Cannot attach fiber setup to local "
1800 "file '%s'! Aborting ...",
1801 cpl_frame_get_filename(rbin_frame));
1811 cpl_frame_delete(rbin_frame);
1816 cpl_frameset_insert(
set, rbin_frame);
1827 if (mode == GIMODE_IFU || mode == GIMODE_ARGUS) {
1829 cpl_frame* rimg_frame = NULL;
1831 GiFieldOfView* fov = NULL;
1833 GiFieldOfViewConfig* fov_config = NULL;
1835 GiFieldOfViewCubeFormat cube_format = GIFOV_FORMAT_ESO3D;
1840 cube_format = fov_config->format;
1843 cpl_msg_info(_id,
"Reconstructing image and data cube from rebinned "
1849 slitgeometry, fov_config);
1854 cpl_msg_warning(_id,
"No reconstructed image was built. "
1855 "Fiber list has no fiber position "
1859 cpl_msg_error(_id,
"Image reconstruction failed! Aborting...");
1889 GIFRAME_SCIENCE_RCSPECTRA,
1890 CPL_FRAME_LEVEL_FINAL,
1893 if (rimg_frame == NULL) {
1894 cpl_msg_error(_id,
"Cannot create local file! Aborting ...");
1908 cpl_frameset_insert(
set, rimg_frame);
1916 GIFRAME_SCIENCE_RCERRORS,
1917 CPL_FRAME_LEVEL_FINAL,
1920 if (rimg_frame == NULL) {
1921 cpl_msg_error(_id,
"Cannot create local file! Aborting ...");
1935 cpl_frameset_insert(
set, rimg_frame);
1940 if (cube_format == GIFOV_FORMAT_SINGLE) {
1944 if (fov->cubes.spectra != NULL) {
1946 cxint component = 0;
1952 properties = cpl_propertylist_duplicate(properties);
1957 CPL_FRAME_LEVEL_FINAL,
1963 cpl_propertylist_delete(properties);
1966 if (rimg_frame == NULL) {
1967 cpl_msg_error(_id,
"Cannot create local file! Aborting ...");
1979 slitgeometry = NULL;
1993 cpl_msg_error(_id,
"Cannot attach fiber setup to local "
1994 "file '%s'! Aborting ...",
1995 cpl_frame_get_filename(rimg_frame));
1997 cpl_frame_delete(rimg_frame);
2009 slitgeometry = NULL;
2020 cpl_frameset_insert(
set, rimg_frame);
2026 if (fov->cubes.errors != NULL) {
2028 cxint component = 1;
2034 properties = cpl_propertylist_duplicate(properties);
2039 CPL_FRAME_LEVEL_FINAL,
2045 cpl_propertylist_delete(properties);
2048 if (rimg_frame == NULL) {
2049 cpl_msg_error(_id,
"Cannot create local file! Aborting ...");
2061 slitgeometry = NULL;
2075 cpl_msg_error(_id,
"Cannot attach fiber setup to local "
2076 "file '%s'! Aborting ...",
2077 cpl_frame_get_filename(rimg_frame));
2079 cpl_frame_delete(rimg_frame);
2091 slitgeometry = NULL;
2102 cpl_frameset_insert(
set, rimg_frame);
2113 properties = cpl_propertylist_duplicate(properties);
2118 CPL_FRAME_LEVEL_FINAL,
2124 cpl_propertylist_delete(properties);
2127 if (rimg_frame == NULL) {
2128 cpl_msg_error(_id,
"Cannot create local file! Aborting ...");
2140 slitgeometry = NULL;
2154 cpl_msg_error(_id,
"Cannot attach fiber setup to local "
2155 "file '%s'! Aborting ...",
2156 cpl_frame_get_filename(rimg_frame));
2158 cpl_frame_delete(rimg_frame);
2170 slitgeometry = NULL;
2181 cpl_frameset_insert(
set, rimg_frame);
2214 cpl_plugin_get_info(cpl_pluginlist* list)
2217 cpl_recipe* recipe = cx_calloc(1,
sizeof *recipe);
2218 cpl_plugin* plugin = &recipe->interface;
2221 cpl_plugin_init(plugin,
2223 GIRAFFE_BINARY_VERSION,
2224 CPL_PLUGIN_TYPE_RECIPE,
2226 "Process a science observation.",
2227 "For detailed information please refer to the "
2228 "GIRAFFE pipeline user manual.\nIt is available at "
2229 "http://www.eso.org/pipelines.",
2237 cpl_pluginlist_append(list, plugin);