1 package nom.tam.fits.header.extra; 2 3 /* 4 * #%L 5 * nom.tam FITS library 6 * %% 7 * Copyright (C) 1996 - 2024 nom-tam-fits 8 * %% 9 * This is free and unencumbered software released into the public domain. 10 * 11 * Anyone is free to copy, modify, publish, use, compile, sell, or 12 * distribute this software, either in source code form or as a compiled 13 * binary, for any purpose, commercial or non-commercial, and by any 14 * means. 15 * 16 * In jurisdictions that recognize copyright laws, the author or authors 17 * of this software dedicate any and all copyright interest in the 18 * software to the public domain. We make this dedication for the benefit 19 * of the public at large and to the detriment of our heirs and 20 * successors. We intend this dedication to be an overt act of 21 * relinquishment in perpetuity of all present and future rights to this 22 * software under copyright law. 23 * 24 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 25 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 26 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 27 * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR 28 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 29 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 30 * OTHER DEALINGS IN THE SOFTWARE. 31 * #L% 32 */ 33 34 import nom.tam.fits.header.FitsKey; 35 import nom.tam.fits.header.IFitsHeader; 36 37 /** 38 * The Fits extension keywords that may be added or read by MaxIm DL, depending on the current equipment and software 39 * configuration. 40 * <p> 41 * This standard extends the @see {@link SBFitsExt}. As of version 1.20.1, this enum explicitly includes all keywords of 42 * the SBIG proposal also. 43 * </p> 44 * 45 * <pre> 46 * http://www.cyanogen.com/help/maximdl/FITS_File_Header_Definitions.htm 47 * </pre> 48 * 49 * @author Attila Kovacs, John Murphy, and Richard van Nieuwenhoven 50 * 51 * @see SBFitsExt 52 */ 53 public enum MaxImDLExt implements IFitsHeader { 54 55 // ------------------------------------------------------------------------ 56 // The MaxIm DL keywords, which are based on the SBIG proposal: 57 // ------------------------------------------------------------------------ 58 59 /** 60 * Same as {@link SBFitsExt#APTAREA}. 61 * 62 * @since 1.20.1 63 */ 64 APTAREA(SBFitsExt.APTAREA), 65 66 /** 67 * Same as {@link SBFitsExt#APTDIA}. 68 * 69 * @since 1.20.1 70 */ 71 APTDIA(SBFitsExt.APTDIA), 72 73 /** 74 * Same as {@link SBFitsExt#CBLACK}. 75 * 76 * @since 1.20.1 77 */ 78 CBLACK(SBFitsExt.CBLACK), 79 80 /** 81 * Same as {@link SBFitsExt#CCD_TEMP}. 82 * 83 * @since 1.20.1 84 */ 85 CCD_TEMP(SBFitsExt.CCD_TEMP), 86 87 /** 88 * Same as {@link SBFitsExt#CENTALT}. 89 * 90 * @since 1.20.1 91 */ 92 CENTALT(SBFitsExt.CENTALT), 93 94 /** 95 * Same as {@link SBFitsExt#CENTAZ}. 96 * 97 * @since 1.20.1 98 */ 99 CENTAZ(SBFitsExt.CENTAZ), 100 101 /** 102 * Same as {@link SBFitsExt#CWHITE}. 103 * 104 * @since 1.20.1 105 */ 106 CWHITE(SBFitsExt.CWHITE), 107 108 /** 109 * Same as {@link SBFitsExt#DARKTIME}. 110 * 111 * @since 1.20.1 112 */ 113 DARKTIME(SBFitsExt.DARKTIME), 114 115 /** 116 * Same as {@link SBFitsExt#EGAIN}. 117 * 118 * @since 1.20.1 119 */ 120 EGAIN(SBFitsExt.EGAIN), 121 122 /** 123 * Same as {@link SBFitsExt#FOCALLEN}. 124 * 125 * @since 1.20.1 126 */ 127 FOCALLEN(SBFitsExt.FOCALLEN), 128 129 /** 130 * Same as {@link SBFitsExt#IMAGETYP}. 131 * 132 * @since 1.20.1 133 * 134 * @see #IMAGETYP_LIGHT_FRAME 135 * @see #IMAGETYP_DARK_FRAME 136 * @see #IMAGETYP_FLAT_FRAME 137 * @see #IMAGETYP_BIAS_FRAME 138 * @see #IMAGETYP_TRICOLOR_IMAGE 139 */ 140 IMAGETYP(SBFitsExt.IMAGETYP), 141 142 /** 143 * Same as {@link SBFitsExt#OBJCTDEC}. 144 * 145 * @since 1.20.1 146 */ 147 OBJCTDEC(SBFitsExt.OBJCTDEC), 148 149 /** 150 * Same as {@link SBFitsExt#OBJCTRA}. 151 * 152 * @since 1.20.1 153 */ 154 OBJCTRA(SBFitsExt.OBJCTRA), 155 156 /** 157 * Same as {@link SBFitsExt#PEDESTAL}. 158 * 159 * @since 1.20.1 160 */ 161 PEDESTAL(SBFitsExt.PEDESTAL), 162 163 /** 164 * Same as {@link SBFitsExt#SBSTDVER}. 165 * 166 * @since 1.20.1 167 */ 168 SBSTDVER(SBFitsExt.SBSTDVER), 169 170 /** 171 * Same as {@link SBFitsExt#SET_TEMP}. 172 * 173 * @since 1.20.1 174 */ 175 SET_TEMP(SBFitsExt.SET_TEMP), 176 177 /** 178 * Same as {@link SBFitsExt#SITELAT}. 179 * 180 * @since 1.20.1 181 */ 182 SITELAT(SBFitsExt.SITELAT), 183 184 /** 185 * Same as {@link SBFitsExt#SITELONG}. 186 * 187 * @since 1.20.1 188 */ 189 SITELONG(SBFitsExt.SITELONG), 190 191 /** 192 * Same as {@link SBFitsExt#SNAPSHOT}. 193 * 194 * @since 1.20.1 195 */ 196 SNAPSHOT(SBFitsExt.SNAPSHOT), 197 198 /** 199 * Same as {@link SBFitsExt#SWCREATE}. 200 * 201 * @since 1.20.1 202 */ 203 SWCREATE(SBFitsExt.SWCREATE), 204 205 /** 206 * Same as {@link SBFitsExt#SWMODIFY}. 207 * 208 * @since 1.20.1 209 */ 210 SWMODIFY(SBFitsExt.SWMODIFY), 211 212 /** 213 * Same as {@link SBFitsExt#TRAKTIME}. 214 * 215 * @since 1.20.1 216 */ 217 TRAKTIME(SBFitsExt.TRAKTIME), 218 219 /** 220 * Same as {@link SBFitsExt#XBINNING}. 221 * 222 * @since 1.20.1 223 */ 224 XBINNING(SBFitsExt.XBINNING), 225 226 /** 227 * Same as {@link SBFitsExt#XORGSUBF}. 228 * 229 * @since 1.20.1 230 */ 231 XORGSUBF(SBFitsExt.XORGSUBF), 232 233 /** 234 * Same as {@link SBFitsExt#XPIXSZ}. 235 * 236 * @since 1.20.1 237 */ 238 XPIXSZ(SBFitsExt.XPIXSZ), 239 240 /** 241 * Same as {@link SBFitsExt#YBINNING}. 242 * 243 * @since 1.20.1 244 */ 245 YBINNING(SBFitsExt.YBINNING), 246 247 /** 248 * Same as {@link SBFitsExt#YORGSUBF}. 249 * 250 * @since 1.20.1 251 */ 252 YORGSUBF(SBFitsExt.YORGSUBF), 253 254 /** 255 * Same as {@link SBFitsExt#YPIXSZ}. 256 * 257 * @since 1.20.1 258 */ 259 YPIXSZ(SBFitsExt.YPIXSZ), 260 261 // ------------------------------------------------------------------------ 262 // Additional MaxIm DL keywords, beyond the SBIG proposal 263 // ------------------------------------------------------------------------ 264 265 /** 266 * ASCOM Observatory Conditions -- relative optical path length through atmosphere 267 * 268 * @since 1.20.1 269 */ 270 AIRMASS(VALUE.REAL, "relative optical path length through atmosphere"), 271 272 /** 273 * ASCOM Observatory Conditions -- ambient temperature in degrees Celsius 274 * 275 * @since 1.20.1 276 */ 277 AOCAMBT(VALUE.REAL, "[C] ambient temperature"), 278 279 /** 280 * ASCOM Observatory Conditions -- dew point in degrees Celsius 281 * 282 * @since 1.20.1 283 */ 284 AOCDEW(VALUE.REAL, "[C] dew point"), 285 286 /** 287 * ASCOM Observatory Conditions -- rain rate in mm/hour 288 * 289 * @since 1.20.1 290 */ 291 AOCRAIN(VALUE.REAL, "[mm/h] rain rate"), 292 293 /** 294 * ASCOM Observatory Conditions -- humidity in percent 295 * 296 * @since 1.20.1 297 */ 298 AOCHUM(VALUE.REAL, "[%] humidity"), 299 300 /** 301 * ASCOM Observatory Conditions -- wind speed in m/s 302 * 303 * @since 1.20.1 304 */ 305 AOCWIND(VALUE.REAL, "[m/s] wind speed"), 306 307 /** 308 * ASCOM Observatory Conditions -- wind direction in degrees [0:360] 309 * 310 * @since 1.20.1 311 */ 312 AOCWINDD(VALUE.REAL, "[deg] wind direction"), 313 314 /** 315 * ASCOM Observatory Conditions -- wind gusts in m/s 316 * 317 * @since 1.20.1 318 */ 319 AOCWINDG(VALUE.REAL, "[m/s] wind gust"), 320 321 /** 322 * ASCOM Observatory Conditions -- barometric pressure in hPa 323 * 324 * @since 1.20.1 325 */ 326 AOCBAROM(VALUE.REAL, "[hPa] barometric pressure"), 327 328 /** 329 * ASCOM Observatory Conditions -- cloud coverage in percent 330 * 331 * @since 1.20.1 332 */ 333 AOCCLOUD(VALUE.REAL, "[%] cloud coverage"), 334 335 /** 336 * ASCOM Observatory Conditions -- sky brightness in lux 337 * 338 * @since 1.20.1 339 */ 340 341 AOCSKYBR(VALUE.REAL, "[lx] sky brightness"), 342 /** 343 * ASCOM Observatory Conditions -- Sky quality in magnitudes / sq-arcsec 344 * 345 * @since 1.20.1 346 */ 347 348 AOCSKYQU(VALUE.REAL, "[mag/arcsec**2] sky quality"), 349 /** 350 * ASCOM Observatory Conditions -- sky temperature in degrees Celsius 351 * 352 * @since 1.20.1 353 */ 354 355 AOCSKYT(VALUE.REAL, "[C] sky temperature"), 356 /** 357 * ASCOM Observatory Conditions -- seeing FWHM in arcsec 358 * 359 * @since 1.20.1 360 */ 361 AOCFWHM(VALUE.REAL, "[arcsec] seeing FWHM"), 362 363 /** 364 * if present the image has a valid Bayer color pattern. For example, "RGGB", "GRBG", "GBRG", "BGGR", "RGBG", 365 * "GRGB", "GBGR", or "BGRG" 366 */ 367 BAYERPAT(VALUE.STRING, "Bayer color pattern"), 368 369 /** 370 * Boltwood Cloud Sensor ambient temperature in degrees C. 371 */ 372 BOLTAMBT(VALUE.REAL, "[C] ambient temperature"), 373 374 /** 375 * Boltwood Cloud Sensor cloud condition. 376 */ 377 BOLTCLOU(VALUE.STRING, "cloud condition"), 378 379 /** 380 * Boltwood Cloud Sensor daylight level (arbitrary units). 381 */ 382 BOLTDAY(VALUE.REAL, "daylight level"), 383 384 /** 385 * Boltwood Cloud Sensor dewpoint in degrees C. 386 */ 387 BOLTDEW(VALUE.REAL, "[C] dew point"), 388 389 /** 390 * Boltwood Cloud Sensor humidity in percent. 391 */ 392 BOLTHUM(VALUE.REAL, "[%] humidity"), 393 394 /** 395 * Boltwood Cloud Sensor rain condition. 396 */ 397 BOLTRAIN(VALUE.STRING, "rain condition"), 398 399 /** 400 * Boltwood Cloud Sensor sky minus ambient temperature in degrees C. 401 */ 402 BOLTSKYT(VALUE.REAL, "[C] sky minus ambient temperature"), 403 404 /** 405 * Boltwood Cloud Sensor wind speed in km/h. 406 */ 407 BOLTWIND(VALUE.REAL, "[km/h] wind speed"), 408 409 /** 410 * indicates calibration state of the image; B indicates bias corrected, D indicates dark corrected, F indicates 411 * flat corrected. 412 * 413 * @see #CALSTAT_BIAS_CORRECTED 414 * @see #CALSTAT_DARK_CORRECTED 415 * @see #CALSTAT_FLAT_CORRECTED 416 */ 417 CALSTAT(VALUE.STRING, "calibration state of the image"), 418 419 /** 420 * initial display screen stretch mode 421 */ 422 CSTRETCH(VALUE.STRING, "initial display screen stretch mode"), 423 424 /** 425 * type of color sensor Bayer array or zero for monochrome. 426 */ 427 COLORTYP(VALUE.ANY, "type of color sensor"), 428 429 /** 430 * Davis Instruments Weather Station ambient temperature in deg C 431 * 432 * @deprecated Not part of the current MaxIm DL specification 433 */ 434 DAVAMBT(VALUE.REAL, "[C] ambient temperature"), 435 436 /** 437 * Davis Instruments Weather Station barometric pressure in hPa 438 * 439 * @deprecated Not part of the current MaxIm DL specification 440 */ 441 DAVBAROM(VALUE.REAL, "[hPa] barometric pressure"), 442 443 /** 444 * Davis Instruments Weather Station dewpoint in deg C 445 * 446 * @deprecated Not part of the current MaxIm DL specification 447 */ 448 DAVDEW(VALUE.REAL, "[C] dew point"), 449 450 /** 451 * Davis Instruments Weather Station humidity in percent 452 * 453 * @deprecated Not part of the current MaxIm DL specification 454 */ 455 DAVHUM(VALUE.REAL, "[%] humidity"), 456 457 /** 458 * Davis Instruments Weather Station solar radiation in W/m^2 459 * 460 * @deprecated Not part of the current MaxIm DL specification 461 */ 462 DAVRAD(VALUE.REAL, "[W/m**2] solar radiation"), 463 464 /** 465 * Davis Instruments Weather Station accumulated rainfall in mm/day 466 * 467 * @deprecated Not part of the current MaxIm DL specification 468 */ 469 DAVRAIN(VALUE.REAL, "[mm/day] accumulated rainfall"), 470 471 /** 472 * Davis Instruments Weather Station wind speed in km/h 473 * 474 * @deprecated Not part of the current MaxIm DL specification 475 */ 476 DAVWIND(VALUE.REAL, "[km/h] wind speed"), 477 478 /** 479 * Davis Instruments Weather Station wind direction in deg 480 * 481 * @deprecated Not part of the current MaxIm DL specification 482 */ 483 DAVWINDD(VALUE.REAL, "[deg] wind direction"), 484 485 /** 486 * Status of pier flip for German Equatorial mounts. 487 */ 488 FLIPSTAT(VALUE.STRING, "status of pier flip"), 489 490 /** 491 * Focuser position in steps, if focuser is connected. 492 */ 493 FOCUSPOS(VALUE.REAL, "[ct] focuser position in steps"), 494 495 /** 496 * Focuser step size in microns, if available. 497 */ 498 FOCUSSSZ(VALUE.REAL, "[um] focuser step size"), 499 500 /** 501 * Focuser temperature readout in degrees C, if available. 502 */ 503 FOCUSTEM(VALUE.REAL, "[C] focuser temperature readout"), 504 505 /** 506 * format of file from which image was read. 507 */ 508 INPUTFMT(VALUE.STRING, "format of file from which image was read"), 509 510 /** 511 * ISO camera setting, if camera uses ISO speeds. 512 */ 513 ISOSPEED(VALUE.REAL, "ISO camera setting"), 514 515 /** 516 * records the geocentric Julian Day of the start of exposure. 517 */ 518 JD(VALUE.REAL, "[day] Geocentric Julian Date"), 519 520 /** 521 * records the geocentric Julian Day of the start of exposure. 522 */ 523 JD_GEO(VALUE.REAL, "[day] Geocentric Julian Date"), 524 525 /** 526 * records the Heliocentric Julian Date at the exposure midpoint. 527 */ 528 JD_HELIO(VALUE.REAL, "[day] Heliocentric Julian Date"), 529 530 /** 531 * records the Heliocentric Julian Date at the exposure midpoint. 532 */ 533 JD_HELIO2("JD-HELIO", VALUE.REAL, "[day] Heliocentric Julian Date"), 534 535 /** 536 * UT of midpoint of exposure (ISO timestamp). 537 */ 538 MIDPOINT(VALUE.STRING, "midpoint of exposure"), 539 540 /** 541 * user-entered information; free-form notes. 542 */ 543 NOTES(VALUE.STRING, "free-form note"), 544 545 /** 546 * nominal altitude of center of image 547 */ 548 OBJCTALT(VALUE.REAL, "[deg] altitude of center of image"), 549 550 /** 551 * nominal azimuth of center of image 552 */ 553 OBJCTAZ(VALUE.REAL, "[deg] nominal azimuth of center of image"), 554 555 /** 556 * nominal hour angle of center of image 557 */ 558 OBJCTHA(VALUE.REAL, "[h] nominal hour angle of center of image"), 559 560 /** 561 * Indicates side-of-pier status when connected to a German Equatorial mount. Usually 'East' or 'West'. 562 * 563 * @see #PIERSIDE_EAST 564 * @see #PIERSIDE_WEST 565 */ 566 PIERSIDE(VALUE.STRING, "side-of-pier status"), 567 568 /** 569 * Records the selected Readout Mode (if any) for the camera. We define constants for some commonly used readout 570 * modes, but other modes beyond these may be valid and can be used also. 571 * 572 * @see #READOUTM_RAW 573 * @see #READOUTM_LONG_EXPOSURE_MODE 574 */ 575 READOUTM(VALUE.STRING, "readout Mode for the camera"), 576 577 /** 578 * Rotator angle in degrees, if focal plane rotator is connected. 579 */ 580 ROTATANG(VALUE.REAL, "[deg] rotator angle in degrees"), 581 582 /** 583 * Images taken by MaxIm DL are always TOP-DOWN. 584 * 585 * @see #ROWORDER_TOP_DOWN 586 * @see #ROWORDER_BOTTOM_UP 587 * 588 * @since 1.20.1 589 */ 590 ROWORDER(VALUE.STRING, "pixel row readout order"), 591 592 /** 593 * indicates tile position within a mosaic. 594 */ 595 TILEXY(VALUE.REAL, "tile position within a mosaic"), 596 /** 597 * X offset of Bayer array on imaging sensor. 598 */ 599 XBAYROFF(VALUE.REAL, "X offset of Bayer array"), 600 /** 601 * Y offset of Bayer array on imaging sensor. 602 */ 603 YBAYROFF(VALUE.REAL, "Y offset of Bayer array"); 604 605 /** 606 * Value for {@link #CALSTAT} indicating a bias corrected calibration state. 607 * 608 * @since 1.20.1 609 */ 610 public static final String CALSTAT_BIAS_CORRECTED = "B"; 611 612 /** 613 * Value for {@link #CALSTAT} indicating a dark corrected calibration state. 614 * 615 * @since 1.20.1 616 */ 617 public static final String CALSTAT_DARK_CORRECTED = "D"; 618 619 /** 620 * Value for {@link #CALSTAT} indicating a flat corrected calibration state. 621 * 622 * @since 1.20.1 623 */ 624 public static final String CALSTAT_FLAT_CORRECTED = "F"; 625 626 /** 627 * Value for {@link #ROWORDER} indicating top-down ordering. MaxIm DL images are always this type 628 * 629 * @since 1.20.1 630 */ 631 public static final String ROWORDER_TOP_DOWN = "TOP-DOWN"; 632 633 /** 634 * Value for {@link #ROWORDER} indicating bottom-up ordering. 635 * 636 * @since 1.20.1 637 */ 638 public static final String ROWORDER_BOTTOM_UP = "BOTTOM-UP"; 639 640 /** 641 * Same as {@link SBFitsExt#IMAGETYP_LIGHT_FRAME}. 642 * 643 * @since 1.20.1 644 */ 645 public static final String IMAGETYP_LIGHT_FRAME = SBFitsExt.IMAGETYP_LIGHT_FRAME; 646 647 /** 648 * Same as {@link SBFitsExt#IMAGETYP_BIAS_FRAME}. 649 * 650 * @since 1.20.1 651 */ 652 public static final String IMAGETYP_BIAS_FRAME = SBFitsExt.IMAGETYP_BIAS_FRAME; 653 654 /** 655 * Same as {@link SBFitsExt#IMAGETYP_DARK_FRAME}. 656 * 657 * @since 1.20.1 658 */ 659 public static final String IMAGETYP_DARK_FRAME = SBFitsExt.IMAGETYP_DARK_FRAME; 660 661 /** 662 * Same as {@link SBFitsExt#IMAGETYP_FLAT_FRAME}. 663 * 664 * @since 1.20.1 665 */ 666 public static final String IMAGETYP_FLAT_FRAME = SBFitsExt.IMAGETYP_FLAT_FRAME; 667 668 /** 669 * Standard {@link #IMAGETYP} value for a tricolor image. 670 * 671 * @since 1.20.1 672 */ 673 public static final String IMAGETYP_TRICOLOR_IMAGE = "Tricolor Image"; 674 675 /** 676 * Standard {@link #PIERSIDE} value for East side of mount. 677 * 678 * @since 1.20.1 679 */ 680 public static final String PIERSIDE_EAST = "East"; 681 682 /** 683 * Standard {@link #PIERSIDE} value for West side of mount. 684 * 685 * @since 1.20.1 686 */ 687 public static final String PIERSIDE_WEST = "West"; 688 689 /** 690 * Standard {@link #READOUTM} value for raw readout mode. 691 * 692 * @since 1.20.1 693 */ 694 public static final String READOUTM_RAW = "Raw"; 695 696 /** 697 * Standard {@link #READOUTM} value for long exposure mode. 698 * 699 * @since 1.20.1 700 */ 701 public static final String READOUTM_LONG_EXPOSURE_MODE = "Long Exposure Mode"; 702 703 private final FitsKey key; 704 705 MaxImDLExt(IFitsHeader key) { 706 this.key = key.impl(); 707 } 708 709 MaxImDLExt(String key, VALUE valueType, String comment) { 710 this.key = new FitsKey(key == null ? name() : key, IFitsHeader.SOURCE.MaxImDL, HDU.IMAGE, valueType, comment); 711 } 712 713 MaxImDLExt(VALUE valueType, String comment) { 714 this(null, valueType, comment); 715 } 716 717 @Override 718 public final FitsKey impl() { 719 return key; 720 } 721 722 }