254 #include <uves_pfits.h>
256 #include <uves_utils.h>
257 #include <uves_utils_wrappers.h>
258 #include <uves_dump.h>
259 #include <uves_error.h>
261 #include <irplib_utils.h>
288 "Error getting %s", UVES_ENCODER_REF1);
306 "Error getting %s",UVES_ENCODER_REF2);
324 check(uves_get_property_value(plist,
"MAXFIBRES",
325 CPL_TYPE_INT, &result),
326 "Error reading MAXFIBRES");
344 "Error getting CHIPCHOICE");
360 const char* result=NULL;
362 check(uves_get_property_value(plist,
"BADPXFRAME",
363 CPL_TYPE_STRING, &result),
364 "Error reading BADPXFRAME");
383 check(uves_get_property_value(plist,
"ESO INS SENS26 MEAN",
384 CPL_TYPE_DOUBLE, &result),
385 "Error reading ESO INS SENS26 MEAN");
403 const char* result=NULL;
406 check(uves_get_property_value(plist,
"ARCFILE",
407 CPL_TYPE_STRING, &result),
408 "Error reading ARCFILE");
425 const char* result=NULL;
428 "Error getting IDENT");
445 const char* result=NULL;
448 "Error getting OBJECT");
465 const char* result=NULL;
467 check(uves_get_property_value(plist,
"ORIGFILE",
468 CPL_TYPE_STRING, &result),
469 "Error reading ORIGFILE");
486 const char* result=NULL;
489 check(uves_get_property_value(plist,
"PIPEFILE",
490 CPL_TYPE_STRING, &result),
491 "Error reading PIPEFILE");
510 const char* result=NULL;
512 check(uves_get_property_value(plist,
"ESO PRO REC1 RAW1 NAME",
513 CPL_TYPE_STRING, &result),
514 "Error reading ESO PRO REC1 RAW1 NAME");
529 const char* result=NULL;
531 check(uves_get_property_value(plist,
"ESO TPL ID",
532 CPL_TYPE_STRING, &result),
533 "Error reading ESO TPL ID");
552 const char* result=NULL;
553 check(uves_get_property_value(plist,
"DATE-OBS",
554 CPL_TYPE_STRING, &result),
555 "Error reading DATE-OBS");
570 const char* result=NULL;
572 check(uves_get_property_value(plist, UVES_DPR_CATG,
573 CPL_TYPE_STRING, &result),
574 "Error reading %s", UVES_DPR_CATG);
591 check( uves_get_property_value(plist, UVES_OCS_SIMCAL, CPL_TYPE_INT, &returnvalue),
592 "Error reading keyword '%s'", UVES_OCS_SIMCAL);
608 "Error writing keyword '%s'", UVES_OCS_SIMCAL);
624 const char* result=NULL;
626 check(uves_get_property_value(plist,
"ESO PRO CATG",
627 CPL_TYPE_STRING, &result),
628 "Error reading ESO PRO CATG");
643 const char* result=NULL;
645 check( uves_get_property_value(plist, UVES_DPR_TECH,
646 CPL_TYPE_STRING, &result),
647 "Error reading %s", UVES_DPR_TECH);
662 const char* result=NULL;
665 check( uves_get_property_value(plist, UVES_DPR_TYPE,
666 CPL_TYPE_STRING, &result),
667 "Error reading %s", UVES_DPR_TYPE);
683 double mjd_obs = 0.0;
686 "Could not read observation date");
690 return (mjd_obs > 55018.0);
703 double mjd_obs = 0.0;
706 "Could not read observation date");
710 return (mjd_obs > 53096.0);
728 "Error determining FITS header format");
730 check( uves_get_property_value(plist, UVES_PRESCANX(new_format, chip),
731 CPL_TYPE_INT, &returnvalue),
732 "Error reading keyword %s", UVES_PRESCANX(new_format, chip));
749 const char* returnvalue =
"";
751 check( uves_get_property_value(plist, UVES_CHIP_ID(chip), CPL_TYPE_STRING, &returnvalue),
752 "Error reading keyword %s", UVES_CHIP_ID(chip));
769 const char* returnvalue =
"";
771 check( uves_get_property_value(plist, UVES_CHIP_NAME(chip), CPL_TYPE_STRING, &returnvalue),
772 "Error reading keyword %s", UVES_CHIP_NAME(chip));
793 "Error determining FITS header format");
795 check( uves_get_property_value(plist, UVES_OVRSCANX(new_format, chip),
796 CPL_TYPE_INT, &returnvalue),
797 "Error reading keyword %s", UVES_OVRSCANX(new_format, chip));
819 "Error determining FITS header format");
821 check( uves_get_property_value(plist, UVES_PRESCANY(new_format, chip),
822 CPL_TYPE_INT, &returnvalue),
823 "Error reading keyword %s", UVES_PRESCANY(new_format, chip));
844 "Error determining FITS header format");
846 check( uves_get_property_value(plist, UVES_OVRSCANY(new_format, chip),
847 CPL_TYPE_INT, &returnvalue),
848 "Error reading keyword %s", UVES_OVRSCANY(new_format, chip));
871 double default_ron_el = 5.0;
876 "Error determining FITS header format");
878 check( uves_get_property_value(plist, UVES_RON(new_format, chip), CPL_TYPE_DOUBLE, &ron_el),
879 "Error reading keyword '%s'", UVES_RON(new_format, chip));
884 "non-positive (%e electrons). Using default value %e",
885 ron_el, default_ron_el);
886 ron_el = default_ron_el;
890 "Error reading gain");
892 assure( ron_el * gain > 0, CPL_ERROR_ILLEGAL_INPUT,
893 "Non-positive read-out noise: %f ADU", ron_el * gain);
896 return ron_el * gain;
911 check( uves_get_property_value(plist, UVES_AIRMASS_START, CPL_TYPE_DOUBLE, &result),
912 "Error reading keyword '%s'", UVES_AIRMASS_START);
930 check( uves_get_property_value(plist, UVES_AIRMASS_END, CPL_TYPE_DOUBLE, &result),
931 "Error reading keyword '%s'", UVES_AIRMASS_END);
953 "Error determining FITS header format");
955 check( uves_get_property_value(plist, UVES_CONAD(new_format, chip),
956 CPL_TYPE_DOUBLE, &result),
957 "Error reading keyword '%s'", UVES_CONAD(new_format, chip));
973 const char* returnvalue =
"";
975 check( uves_get_property_value(plist, UVES_TARG_NAME, CPL_TYPE_STRING, &returnvalue),
976 "Error reading keyword %s", UVES_TARG_NAME);
996 double default_gain = 2.1;
1000 "Error determining FITS header format");
1002 check( uves_get_property_value(plist, UVES_GAIN(new_format, chip),
1003 CPL_TYPE_DOUBLE, &result),
1004 "Error reading keyword '%s'", UVES_GAIN(new_format, chip));
1009 "non-positive (%e). Using default value %e",
1010 result, default_gain);
1011 result = default_gain;
1032 check( uves_get_property_value(plist, UVES_EXPTIME, CPL_TYPE_DOUBLE, &result),
1033 "Error reading keyword '%s'", UVES_EXPTIME);
1034 assure( result >= 0, CPL_ERROR_ILLEGAL_OUTPUT,
"Exposure time is negative: %f", result);
1054 "Error writing keyword '%s'", UVES_EXPTIME);
1056 return cpl_error_get_code();
1073 "Error writing keyword '%s'", UVES_DEC);
1091 "Error writing keyword '%s'", UVES_RA);
1110 "Error writing keyword '%s'", UVES_ORD_PRED);
1112 return cpl_error_get_code();
1125 const char *result =
"";
1127 check( uves_get_property_value(plist, UVES_DRS_ID, CPL_TYPE_STRING, &result),
1128 "Error reading keyword '%s'", UVES_DRS_ID);
1131 if (cpl_error_get_code() != CPL_ERROR_NONE)
1151 const char *result =
"";
1153 check( uves_get_property_value(plist, UVES_TPL_START, CPL_TYPE_STRING, &result),
1154 "Error reading keyword '%s'", UVES_TPL_START);
1157 if (cpl_error_get_code() != CPL_ERROR_NONE)
1175 double returnvalue = 0;
1177 check( uves_get_property_value(plist, UVES_UTC, CPL_TYPE_DOUBLE, &returnvalue),
1178 "Error reading keyword '%s'", UVES_UTC);
1194 double returnvalue = 0;
1196 check( uves_get_property_value(plist, UVES_MJDOBS, CPL_TYPE_DOUBLE, &returnvalue),
1197 "Error reading keyword '%s'", UVES_MJDOBS);
1212 double returnvalue = 0;
1214 check( uves_get_property_value(plist, UVES_GEOLAT, CPL_TYPE_DOUBLE, &returnvalue),
1215 "Error reading keyword '%s'", UVES_GEOLAT);
1230 double returnvalue = 0;
1232 check( uves_get_property_value(plist, UVES_GEOLON, CPL_TYPE_DOUBLE, &returnvalue),
1233 "Error reading keyword '%s'", UVES_GEOLON);
1248 double returnvalue = 0;
1250 check( uves_get_property_value(plist, UVES_RA, CPL_TYPE_DOUBLE, &returnvalue),
1251 "Error reading keyword '%s'", UVES_RA);
1266 double returnvalue = 0;
1268 check( uves_get_property_value(plist, UVES_DEC, CPL_TYPE_DOUBLE, &returnvalue),
1269 "Error reading keyword '%s'", UVES_DEC);
1284 int returnvalue = 0;
1286 check( uves_get_property_value(plist, UVES_BINX, CPL_TYPE_INT, &returnvalue),
1287 "Error reading keyword '%s'", UVES_BINX);
1302 int returnvalue = 0;
1304 check( uves_get_property_value(plist, UVES_BINY, CPL_TYPE_INT, &returnvalue),
1305 "Error reading keyword '%s'", UVES_BINY);
1320 int returnvalue = 0;
1325 assure( plist != NULL, CPL_ERROR_NULL_INPUT,
"Null plist");
1329 check( uves_get_property_value(plist, UVES_DATANCOM, CPL_TYPE_INT, &returnvalue),
1330 "Error reading keyword '%s'", UVES_DATANCOM);
1335 check( uves_get_property_value(plist, UVES_DATANCOM_OLD, CPL_TYPE_INT, &returnvalue),
1336 "Error reading keyword '%s'", UVES_DATANCOM_OLD);
1339 uves_msg_warning(
"Neither %s nor %s found! We assume a value of 5! This may affect noise/error propagation",
1340 UVES_DATANCOM,UVES_DATANCOM_OLD);
1359 const char* result=
"";
1361 check( uves_get_property_value(plist, UVES_CCDID, CPL_TYPE_STRING, &result),
1362 "Error reading keyword '%s'", UVES_CCDID);
1379 check( uves_get_property_value(plist, UVES_PRESSURE, CPL_TYPE_DOUBLE, &returnvalue),
1380 "Error reading keyword '%s'", UVES_PRESSURE);
1396 const char *result = NULL;
1397 const char *prefix =
"ESO ";
1398 unsigned int pref_len = strlen(prefix);
1400 assure( strlen(key) >= pref_len &&
1401 strncmp(key, prefix, pref_len) == 0,
1402 CPL_ERROR_ILLEGAL_INPUT,
1403 "Keyword %s does not contain 'ESO ' prefix", key);
1405 result = key + pref_len;
1423 check( uves_get_property_value(plist, UVES_TEMPCAM(chip), CPL_TYPE_DOUBLE, &returnvalue),
1424 "Error reading keyword '%s'", UVES_TEMPCAM(chip));
1442 check( uves_get_property_value(plist, UVES_HUMIDITY, CPL_TYPE_DOUBLE, &returnvalue),
1443 "Error reading keyword '%s'", UVES_HUMIDITY);
1461 check( uves_get_property_value(plist, UVES_GRATWLEN(chip), CPL_TYPE_DOUBLE, &returnvalue),
1462 "Error reading keyword '%s'", UVES_GRATWLEN(chip));
1464 assure(returnvalue > 0, CPL_ERROR_ILLEGAL_INPUT,
"Non-positive wavelength: %e", returnvalue);
1479 const char* returnvalue=
"";
1481 check( uves_get_property_value(plist, UVES_INSMODE, CPL_TYPE_STRING, &returnvalue),
1482 "Error reading keyword '%s'", UVES_INSMODE);
1497 const char* returnvalue=
"";
1499 check( uves_get_property_value(plist, UVES_INSPATH, CPL_TYPE_STRING, &returnvalue),
1500 "Error reading keyword '%s'", UVES_INSPATH);
1515 const char* returnvalue=
"";
1517 check( uves_get_property_value(plist, UVES_GRATNAME(chip), CPL_TYPE_STRING, &returnvalue),
1518 "Error reading keyword '%s'", UVES_GRATNAME(chip));
1534 const char* returnvalue=
"";
1536 check( uves_get_property_value(plist, UVES_READ_SPEED, CPL_TYPE_STRING, &returnvalue),
1537 "Error reading keyword '%s'", UVES_READ_SPEED);
1553 const char* returnvalue=
"";
1555 check( uves_get_property_value(plist, UVES_GRATID(chip), CPL_TYPE_STRING, &returnvalue),
1556 "Error reading keyword '%s'", UVES_GRATID(chip));
1574 check( uves_get_property_value(plist, UVES_SLITLENGTH(chip), CPL_TYPE_DOUBLE, &returnvalue),
1575 "Error reading keyword '%s'", UVES_SLITLENGTH(chip));
1594 check( uves_get_property_value(plist, UVES_SLITWIDTH(chip), CPL_TYPE_DOUBLE, &returnvalue),
1595 "Error reading keyword '%s'", UVES_SLITWIDTH(chip));
1613 assure( plist != NULL, CPL_ERROR_NULL_INPUT,
"Null plist");
1620 CPL_ERROR_DATA_NOT_FOUND,
1621 "Keyword %s does not exist", UVES_ORD_PRED);
1623 "Error reading type of property '%s'", UVES_ORD_PRED);
1625 if (type == CPL_TYPE_INT)
1627 check( uves_get_property_value(
1628 plist, UVES_ORD_PRED, CPL_TYPE_INT, &returnvalue),
1629 "Error reading keyword '%s'", UVES_ORD_PRED);
1631 else if (type == CPL_TYPE_DOUBLE)
1634 check( uves_get_property_value(
1635 plist, UVES_ORD_PRED, CPL_TYPE_DOUBLE, &dvalue),
1636 "Error reading keyword '%s'", UVES_ORD_PRED);
1637 returnvalue = uves_round_double(dvalue);
1641 assure(
false, CPL_ERROR_TYPE_MISMATCH,
1642 "Keyword '%s' has wrong type '%s'",
1667 char *val_str = NULL;
1668 char *number_str = NULL;
1669 cpl_property *existing = NULL;
1675 existing == NULL && i < plist_size; i++)
1677 cpl_property *p = uves_propertylist_get(plist, i);
1678 const char *pname = cpl_property_get_name(p);
1680 if (strcmp(pname,
"HISTORY") == 0)
1683 check( pval = cpl_property_get_string(p),
1684 "Error reading property value");
1688 if (strlen(pval) > strlen(name) + strlen(
" ") &&
1689 strncmp(pval, name, strlen(name)) == 0 &&
1690 pval[strlen(name)] ==
' ')
1698 va_start(arglist, format);
1699 number_str = cpl_vsprintf(format, arglist);
1702 val_str = uves_sprintf(
"%s %s", name, number_str);
1704 if (existing != NULL)
1706 check( cpl_property_set_string(existing, val_str),
1707 "Error updating HISTORY keyword with value '%s'", val_str);
1711 check( uves_propertylist_append_string(plist,
"HISTORY", val_str),
1712 "Error writing HISTORY keyword with value '%s'", val_str);
1717 cpl_free(number_str);
1741 double returnvalue = 0;
1747 for (i = 0; !found && i < plist_size; i++) {
1749 const char *value = cpl_property_get_name(p);
1751 if (strcmp(value,
"HISTORY") == 0) {
1752 check( value = cpl_property_get_string(p),
1753 "Error reading property value");
1757 if (strlen(value) > strlen(name) + strlen(
" ") &&
1758 strncmp(value, name, strlen(name)) == 0 &&
1759 value[strlen(name)] ==
' ') {
1763 returnvalue = atoi(value + strlen(name) + strlen(
" "));
1764 assure(errno == 0, CPL_ERROR_ILLEGAL_INPUT,
1765 "Could not parse string '%s' as integer. "
1766 "atoi() returned %d",
1767 value + strlen(name) + strlen(
" "), errno);
1769 case CPL_TYPE_DOUBLE:
1770 returnvalue = strtod(value + strlen(name) + strlen(
" "), NULL);
1771 assure(errno == 0, CPL_ERROR_ILLEGAL_INPUT,
1772 "Could not parse string '%s' as double. "
1773 "strtod() returned %d",
1774 value + strlen(name) + strlen(
" "), errno);
1777 assure(
false, CPL_ERROR_UNSUPPORTED_MODE,
1786 assure( found, CPL_ERROR_DATA_NOT_FOUND,
"Missing record 'HISTORY %s '",
1820 return uves_round_double(
parse_history(plist, UVES_FIRSTABSORDER, CPL_TYPE_INT));
1850 return uves_round_double(
parse_history(plist, UVES_LASTABSORDER, CPL_TYPE_INT));
1866 "Error writing keyword '%s'", UVES_PRO_DATAAVG);
1868 return cpl_error_get_code();
1884 "Standard deviation of pixel values")),
1885 "Error writing keyword '%s'", UVES_PRO_DATARMS);
1888 return cpl_error_get_code();
1904 "Error writing keyword '%s'", UVES_PRO_DATAMED);
1907 return cpl_error_get_code();
1922 "Error writing keyword '%s'", UVES_DATAMIN);
1925 return cpl_error_get_code();
1940 "Maximum of pixel values")),
1941 "Error writing keyword '%s'", UVES_DATAMAX);
1944 return cpl_error_get_code();
1976 check( uves_get_property_value(plist, UVES_TRACE_OFFSET, CPL_TYPE_DOUBLE,
1978 "Error reading keyword %s", UVES_TRACE_OFFSET);
1982 offset =
parse_history(plist, UVES_TRACE_OFFSET, CPL_TYPE_DOUBLE);
2029 return uves_round_double(
parse_history(plist, UVES_TRACEID, CPL_TYPE_INT));
2042 return uves_round_double(
parse_history(plist, UVES_WINDOWNUMBER, CPL_TYPE_INT));
2055 const char* returnvalue=
"";
2057 check( uves_get_property_value(plist, UVES_BUNIT, CPL_TYPE_STRING, &returnvalue),
2058 "Error reading keyword '%s'", UVES_BUNIT);
2074 double returnvalue = 0;
2076 check( uves_get_property_value(plist, UVES_BSCALE, CPL_TYPE_DOUBLE, &returnvalue),
2077 "Error reading keyword '%s'", UVES_BSCALE);
2094 const char* returnvalue=
"";
2096 check( uves_get_property_value(plist, UVES_CUNIT1, CPL_TYPE_STRING, &returnvalue),
2097 "Error reading keyword '%s'", UVES_CUNIT1);
2113 const char* returnvalue=
"";
2115 check( uves_get_property_value(plist, UVES_CUNIT2, CPL_TYPE_STRING, &returnvalue),
2116 "Error reading keyword '%s'", UVES_CUNIT2);
2132 const char* returnvalue=
"";
2134 check( uves_get_property_value(plist, UVES_CTYPE1, CPL_TYPE_STRING, &returnvalue),
2135 "Error reading keyword '%s'", UVES_CTYPE1);
2151 const char* returnvalue=
"";
2153 check( uves_get_property_value(plist, UVES_CTYPE2, CPL_TYPE_STRING, &returnvalue),
2154 "Error reading keyword '%s'", UVES_CTYPE2);
2170 double returnvalue = 0;
2174 "Error determining FITS header format");
2176 check( uves_get_property_value(plist, UVES_UIT(new_format), CPL_TYPE_DOUBLE, &returnvalue),
2177 "Error reading keyword %s", UVES_UIT(new_format));
2197 int returnvalue = 0;
2201 "Error determining FITS header format");
2203 check( uves_get_property_value(plist, UVES_NX(new_format, chip), CPL_TYPE_INT, &returnvalue),
2204 "Error reading keyword %s", UVES_NX(new_format, chip));
2226 int returnvalue = 0;
2230 "Error determining FITS header format");
2232 check( uves_get_property_value(plist, UVES_NY(new_format, chip), CPL_TYPE_INT, &returnvalue),
2233 "Error reading keyword %s", UVES_NY(new_format, chip));
2252 int returnvalue = 0;
2254 check( uves_get_property_value(plist, UVES_OUT1NX, CPL_TYPE_INT, &returnvalue),
2255 "Error reading keyword '%s'", UVES_OUT1NX);
2271 int returnvalue = 0;
2273 check( uves_get_property_value(plist, UVES_OUT1NY, CPL_TYPE_INT, &returnvalue),
2274 "Error reading keyword '%s'", UVES_OUT1NY);
2290 int returnvalue = 0;
2292 check( uves_get_property_value(plist, UVES_OUT4NX, CPL_TYPE_INT, &returnvalue),
2293 "Error reading keyword '%s'", UVES_OUT4NX);
2309 int returnvalue = 0;
2311 check( uves_get_property_value(plist, UVES_OUT4NY, CPL_TYPE_INT, &returnvalue),
2312 "Error reading keyword '%s'", UVES_OUT4NY);
2329 int returnvalue = 0;
2331 check( uves_get_property_value(plist, UVES_NAXIS, CPL_TYPE_INT, &returnvalue),
2332 "Error reading keyword '%s'", UVES_NAXIS);
2348 int returnvalue = 0;
2350 check( uves_get_property_value(plist, FLAMES_NFLATS, CPL_TYPE_INT, &returnvalue),
2351 "Error reading keyword '%s'", FLAMES_NFLATS);
2368 int returnvalue = 0;
2370 check( uves_get_property_value(plist, UVES_BITPIX, CPL_TYPE_INT, &returnvalue),
2371 "Error reading keyword '%s'", UVES_BITPIX);
2386 int returnvalue = 0;
2388 check( uves_get_property_value(plist, UVES_NAXIS1, CPL_TYPE_INT, &returnvalue),
2389 "Error reading keyword '%s'", UVES_NAXIS1);
2406 double returnvalue = 0;
2408 check( uves_get_property_value(plist, UVES_STARTX, CPL_TYPE_DOUBLE, &returnvalue),
2409 "Error reading keyword '%s'", UVES_STARTX);
2426 double returnvalue = 0;
2428 check( uves_get_property_value(plist, UVES_STARTY, CPL_TYPE_DOUBLE, &returnvalue),
2429 "Error reading keyword '%s'", UVES_STARTY);
2445 int returnvalue = 0;
2447 check( uves_get_property_value(plist, UVES_NAXIS2, CPL_TYPE_INT, &returnvalue),
2448 "Error reading keyword '%s'", UVES_NAXIS2);
2463 double returnvalue = 0.0;
2465 check( uves_get_property_value(plist, UVES_CRVAL1, CPL_TYPE_DOUBLE, &returnvalue),
2466 "Error reading keyword '%s'", UVES_CRVAL1);
2481 double returnvalue = 0.0;
2483 check( uves_get_property_value(plist, UVES_CRVAL2, CPL_TYPE_DOUBLE, &returnvalue),
2484 "Error reading keyword '%s'", UVES_CRVAL2);
2499 double returnvalue = 0.0;
2501 check( uves_get_property_value(plist, UVES_CRPIX1, CPL_TYPE_DOUBLE, &returnvalue),
2502 "Error reading keyword '%s'", UVES_CRPIX1);
2517 double returnvalue = 0.0;
2519 check( uves_get_property_value(plist, UVES_CRPIX2, CPL_TYPE_DOUBLE, &returnvalue),
2520 "Error reading keyword '%s'", UVES_CRPIX2);
2535 double returnvalue = 0.0;
2537 check( uves_get_property_value(plist, UVES_CDELT1, CPL_TYPE_DOUBLE, &returnvalue),
2538 "Error reading keyword '%s'", UVES_CDELT1);
2553 double returnvalue = 0.0;
2555 check( uves_get_property_value(plist, UVES_CDELT2, CPL_TYPE_DOUBLE, &returnvalue),
2556 "Error reading keyword '%s'", UVES_CDELT2);
2575 "Error writing %s", UVES_DPR_CATG);
2592 "Error writing %s", UVES_DPR_TECH);
2608 "Error writing %s", UVES_DPR_TYPE);
2625 "Error writing keyword '%s'", UVES_OBJECT);
2628 return cpl_error_get_code();
2642 "Error writing keyword '%s'", UVES_QC_BADPIXCORR);
2645 return cpl_error_get_code();
2660 "Error writing keyword '%s'", UVES_REDLEVEL);
2663 return cpl_error_get_code();
2678 "Error writing keyword '%s'", UVES_STATUS);
2681 return cpl_error_get_code();
2696 "Error writing keyword '%s'", UVES_START);
2699 return cpl_error_get_code();
2713 "Error writing keyword '%s'", UVES_STOP);
2716 return cpl_error_get_code();
2731 "Error writing keyword '%s'", UVES_BUNIT);
2734 return cpl_error_get_code();
2749 "Error writing keyword '%s'", UVES_BSCALE);
2752 return cpl_error_get_code();
2768 sprintf(key_name,
"%s%d",UVES_TUNIT,col_no);
2769 uves_msg(
"Filling key %s with value %s",key_name,tunit);
2771 "Error writing keyword '%s'", key_name);
2774 return cpl_error_get_code();
2789 "Error writing keyword '%s'", UVES_BUNIT);
2792 return cpl_error_get_code();
2807 "Error writing keyword '%s'", UVES_CTYPE1);
2810 return cpl_error_get_code();
2824 "Error writing keyword '%s'", UVES_CTYPE2);
2827 return cpl_error_get_code();
2844 "Error writing keyword '%s'", UVES_CUNIT1);
2847 return cpl_error_get_code();
2862 "Error writing keyword '%s'", UVES_CUNIT2);
2865 return cpl_error_get_code();
2880 "Error writing keyword '%s'", UVES_CRVAL1);
2883 return cpl_error_get_code();
2898 "Error writing keyword '%s'", UVES_CRVAL2);
2901 return cpl_error_get_code();
2915 "Error writing keyword '%s'", UVES_CRPIX1);
2918 return cpl_error_get_code();
2933 "Error writing keyword '%s'", UVES_CRPIX2);
2936 return cpl_error_get_code();
2950 "Error writing keyword '%s'", UVES_CDELT1);
2953 return cpl_error_get_code();
2968 "Error writing keyword '%s'", FLAMES_CCFPOSMAX);
2986 "Error writing keyword '%s'", UVES_CDELT2);
2989 return cpl_error_get_code();
3003 "Error writing keyword '%s'", UVES_HS);
3022 char *wstart_string = NULL;
3024 assure (1 <= order && order <= 99, CPL_ERROR_ILLEGAL_INPUT,
3025 "Illegal order number: %d. Allowed range is 1 to 99", order);
3028 wstart_string = cpl_malloc( strlen(UVES_WSTART) + 2 + 1);
3031 snprintf(wstart_string, strlen(UVES_WSTART)+2+1, UVES_WSTART
"%d", order);
3034 "Error updating product header");
3037 cpl_free(wstart_string);
3038 return cpl_error_get_code();
3055 char *wstart = NULL;
3057 assure (1 <= order && order <= 99, CPL_ERROR_ILLEGAL_INPUT,
3058 "Illegal order number: %d. Allowed range is 1 to 99", order);
3061 wstart = cpl_malloc( strlen(UVES_WSTART) + 2 + 1);
3064 snprintf(wstart, strlen(UVES_WSTART)+2+1, UVES_WSTART
"%d", order);
3066 check( uves_get_property_value(plist, wstart, CPL_TYPE_DOUBLE, &returnvalue),
3067 "Error reading keyword '%s'", wstart);
3085 char *wend_string = NULL;
3087 assure (1 <= order && order <= 99, CPL_ERROR_ILLEGAL_INPUT,
3088 "Illegal order number: %d. Allowed range is 1 to 99", order);
3091 wend_string = cpl_malloc( strlen(UVES_WEND) + 2 + 1);
3094 snprintf(wend_string, strlen(UVES_WEND)+2+1, UVES_WEND
"%d", order);
3097 "Error updating product header");
3100 cpl_free(wend_string);
3101 return cpl_error_get_code();
3120 assure (1 <= order && order <= 99, CPL_ERROR_ILLEGAL_INPUT,
3121 "Illegal order number: %d. Allowed range is 1 to 99", order);
3124 wend = cpl_malloc( strlen(UVES_WEND) + 2 + 1);
3127 snprintf(wend, strlen(UVES_WEND)+2+1, UVES_WEND
"%d", order);
3129 check( uves_get_property_value(plist, wend, CPL_TYPE_DOUBLE, &returnvalue),
3130 "Error reading keyword '%s'", wend);
3147 double pixelscale = 0;
3149 check( uves_get_property_value(plist, UVES_PIXELSCALE, CPL_TYPE_DOUBLE, &pixelscale),
3150 "Error reading keyword '%s'", UVES_PIXELSCALE);
3166 const char* returnvalue =
"";
3168 check( uves_get_property_value(plist, UVES_SLIT1NAME, CPL_TYPE_STRING, &returnvalue),
3169 "Error reading keyword '%s'", UVES_SLIT1NAME);
3190 enum uves_chip chip)
3192 double slitlength_pixels = 0;
3194 const char *slicer_name =
"";
3195 double slitlength_arcsecs = 0;
3198 "Could not read slicer id");
3200 if ( strncmp(slicer_name,
"FREE", 4) != 0)
3203 if (strncmp(slicer_name,
"SLIC#1", 6) == 0) slitlength_arcsecs = 8.0;
3204 else if (strncmp(slicer_name,
"SLIC#2", 6) == 0) slitlength_arcsecs = 8.0;
3205 else if (strncmp(slicer_name,
"SLIC#3", 6) == 0) slitlength_arcsecs = 10.0;
3208 assure(
false, CPL_ERROR_ILLEGAL_INPUT,
"Unrecognized slicer name: '%s'. "
3209 "Recognized names are 'FREE', 'SLIC#1', 'SLIC#2', 'SLIC#3'.",
3217 check( uves_get_property_value(
3218 plist, UVES_SLITLENGTH(chip), CPL_TYPE_DOUBLE, &slitlength_arcsecs),
3219 "Error reading keyword '%s'", UVES_SLITLENGTH(chip));
3231 "Could not get x-binning");
3233 slitlength_pixels = slitlength_arcsecs / (pixelscale * binx);
3237 return slitlength_pixels;
3256 check( uves_get_property_value(raw_header, FLAMES_NEWPLATEID,
3257 CPL_TYPE_INT, &plate_no),
3258 "Error reading keyword '%s'", FLAMES_NEWPLATEID);
3261 FLAMES_OBS_PLATE_ID))
3263 check( uves_get_property_value(raw_header, FLAMES_OBS_PLATE_ID,
3264 CPL_TYPE_INT, &plate_no),
3265 "Error reading keyword '%s'", FLAMES_NEWPLATEID);
3281 "setting plate number = %d",
3283 FLAMES_OBS_PLATE_ID,
3304 double returnvalue = 0;
3306 check( uves_get_property_value(plist, FLAMES_DIT, CPL_TYPE_DOUBLE, &returnvalue),
3307 "Error reading keyword '%s'", FLAMES_DIT);
3324 "Error writing keyword '%s'", FLAMES_NEWPLATEID);