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 @Deprecated
435 DAVAMBT(VALUE.REAL, "[C] ambient temperature"),
436
437 /**
438 * Davis Instruments Weather Station barometric pressure in hPa
439 *
440 * @deprecated Not part of the current MaxIm DL specification
441 */
442 @Deprecated
443 DAVBAROM(VALUE.REAL, "[hPa] barometric pressure"),
444
445 /**
446 * Davis Instruments Weather Station dewpoint in deg C
447 *
448 * @deprecated Not part of the current MaxIm DL specification
449 */
450 @Deprecated
451 DAVDEW(VALUE.REAL, "[C] dew point"),
452
453 /**
454 * Davis Instruments Weather Station humidity in percent
455 *
456 * @deprecated Not part of the current MaxIm DL specification
457 */
458 @Deprecated
459 DAVHUM(VALUE.REAL, "[%] humidity"),
460
461 /**
462 * Davis Instruments Weather Station solar radiation in W/m^2
463 *
464 * @deprecated Not part of the current MaxIm DL specification
465 */
466 @Deprecated
467 DAVRAD(VALUE.REAL, "[W/m**2] solar radiation"),
468
469 /**
470 * Davis Instruments Weather Station accumulated rainfall in mm/day
471 *
472 * @deprecated Not part of the current MaxIm DL specification
473 */
474 @Deprecated
475 DAVRAIN(VALUE.REAL, "[mm/day] accumulated rainfall"),
476
477 /**
478 * Davis Instruments Weather Station wind speed in km/h
479 *
480 * @deprecated Not part of the current MaxIm DL specification
481 */
482 @Deprecated
483 DAVWIND(VALUE.REAL, "[km/h] wind speed"),
484
485 /**
486 * Davis Instruments Weather Station wind direction in deg
487 *
488 * @deprecated Not part of the current MaxIm DL specification
489 */
490 @Deprecated
491 DAVWINDD(VALUE.REAL, "[deg] wind direction"),
492
493 /**
494 * Status of pier flip for German Equatorial mounts.
495 */
496 FLIPSTAT(VALUE.STRING, "status of pier flip"),
497
498 /**
499 * Focuser position in steps, if focuser is connected.
500 */
501 FOCUSPOS(VALUE.REAL, "[ct] focuser position in steps"),
502
503 /**
504 * Focuser step size in microns, if available.
505 */
506 FOCUSSSZ(VALUE.REAL, "[um] focuser step size"),
507
508 /**
509 * Focuser temperature readout in degrees C, if available.
510 */
511 FOCUSTEM(VALUE.REAL, "[C] focuser temperature readout"),
512
513 /**
514 * format of file from which image was read.
515 */
516 INPUTFMT(VALUE.STRING, "format of file from which image was read"),
517
518 /**
519 * ISO camera setting, if camera uses ISO speeds.
520 */
521 ISOSPEED(VALUE.REAL, "ISO camera setting"),
522
523 /**
524 * records the geocentric Julian Day of the start of exposure.
525 */
526 JD(VALUE.REAL, "[day] Geocentric Julian Date"),
527
528 /**
529 * records the geocentric Julian Day of the start of exposure.
530 */
531 JD_GEO(VALUE.REAL, "[day] Geocentric Julian Date"),
532
533 /**
534 * records the Heliocentric Julian Date at the exposure midpoint.
535 */
536 JD_HELIO(VALUE.REAL, "[day] Heliocentric Julian Date"),
537
538 /**
539 * records the Heliocentric Julian Date at the exposure midpoint.
540 */
541 JD_HELIO2("JD-HELIO", VALUE.REAL, "[day] Heliocentric Julian Date"),
542
543 /**
544 * UT of midpoint of exposure (ISO timestamp).
545 */
546 MIDPOINT(VALUE.STRING, "midpoint of exposure"),
547
548 /**
549 * user-entered information; free-form notes.
550 */
551 NOTES(VALUE.STRING, "free-form note"),
552
553 /**
554 * nominal altitude of center of image
555 */
556 OBJCTALT(VALUE.REAL, "[deg] altitude of center of image"),
557
558 /**
559 * nominal azimuth of center of image
560 */
561 OBJCTAZ(VALUE.REAL, "[deg] nominal azimuth of center of image"),
562
563 /**
564 * nominal hour angle of center of image
565 */
566 OBJCTHA(VALUE.REAL, "[h] nominal hour angle of center of image"),
567
568 /**
569 * Indicates side-of-pier status when connected to a German Equatorial mount. Usually 'East' or 'West'.
570 *
571 * @see #PIERSIDE_EAST
572 * @see #PIERSIDE_WEST
573 */
574 PIERSIDE(VALUE.STRING, "side-of-pier status"),
575
576 /**
577 * Records the selected Readout Mode (if any) for the camera. We define constants for some commonly used readout
578 * modes, but other modes beyond these may be valid and can be used also.
579 *
580 * @see #READOUTM_RAW
581 * @see #READOUTM_LONG_EXPOSURE_MODE
582 */
583 READOUTM(VALUE.STRING, "readout Mode for the camera"),
584
585 /**
586 * Rotator angle in degrees, if focal plane rotator is connected.
587 */
588 ROTATANG(VALUE.REAL, "[deg] rotator angle in degrees"),
589
590 /**
591 * Images taken by MaxIm DL are always TOP-DOWN.
592 *
593 * @see #ROWORDER_TOP_DOWN
594 * @see #ROWORDER_BOTTOM_UP
595 *
596 * @since 1.20.1
597 */
598 ROWORDER(VALUE.STRING, "pixel row readout order"),
599
600 /**
601 * indicates tile position within a mosaic.
602 */
603 TILEXY(VALUE.REAL, "tile position within a mosaic"),
604 /**
605 * X offset of Bayer array on imaging sensor.
606 */
607 XBAYROFF(VALUE.REAL, "X offset of Bayer array"),
608 /**
609 * Y offset of Bayer array on imaging sensor.
610 */
611 YBAYROFF(VALUE.REAL, "Y offset of Bayer array");
612
613 /**
614 * Value for {@link #CALSTAT} indicating a bias corrected calibration state.
615 *
616 * @since 1.20.1
617 */
618 public static final String CALSTAT_BIAS_CORRECTED = "B";
619
620 /**
621 * Value for {@link #CALSTAT} indicating a dark corrected calibration state.
622 *
623 * @since 1.20.1
624 */
625 public static final String CALSTAT_DARK_CORRECTED = "D";
626
627 /**
628 * Value for {@link #CALSTAT} indicating a flat corrected calibration state.
629 *
630 * @since 1.20.1
631 */
632 public static final String CALSTAT_FLAT_CORRECTED = "F";
633
634 /**
635 * Value for {@link #ROWORDER} indicating top-down ordering. MaxIm DL images are always this type
636 *
637 * @since 1.20.1
638 */
639 public static final String ROWORDER_TOP_DOWN = "TOP-DOWN";
640
641 /**
642 * Value for {@link #ROWORDER} indicating bottom-up ordering.
643 *
644 * @since 1.20.1
645 */
646 public static final String ROWORDER_BOTTOM_UP = "BOTTOM-UP";
647
648 /**
649 * Same as {@link SBFitsExt#IMAGETYP_LIGHT_FRAME}.
650 *
651 * @since 1.20.1
652 */
653 public static final String IMAGETYP_LIGHT_FRAME = SBFitsExt.IMAGETYP_LIGHT_FRAME;
654
655 /**
656 * Same as {@link SBFitsExt#IMAGETYP_BIAS_FRAME}.
657 *
658 * @since 1.20.1
659 */
660 public static final String IMAGETYP_BIAS_FRAME = SBFitsExt.IMAGETYP_BIAS_FRAME;
661
662 /**
663 * Same as {@link SBFitsExt#IMAGETYP_DARK_FRAME}.
664 *
665 * @since 1.20.1
666 */
667 public static final String IMAGETYP_DARK_FRAME = SBFitsExt.IMAGETYP_DARK_FRAME;
668
669 /**
670 * Same as {@link SBFitsExt#IMAGETYP_FLAT_FRAME}.
671 *
672 * @since 1.20.1
673 */
674 public static final String IMAGETYP_FLAT_FRAME = SBFitsExt.IMAGETYP_FLAT_FRAME;
675
676 /**
677 * Standard {@link #IMAGETYP} value for a tricolor image.
678 *
679 * @since 1.20.1
680 */
681 public static final String IMAGETYP_TRICOLOR_IMAGE = "Tricolor Image";
682
683 /**
684 * Standard {@link #PIERSIDE} value for East side of mount.
685 *
686 * @since 1.20.1
687 */
688 public static final String PIERSIDE_EAST = "East";
689
690 /**
691 * Standard {@link #PIERSIDE} value for West side of mount.
692 *
693 * @since 1.20.1
694 */
695 public static final String PIERSIDE_WEST = "West";
696
697 /**
698 * Standard {@link #READOUTM} value for raw readout mode.
699 *
700 * @since 1.20.1
701 */
702 public static final String READOUTM_RAW = "Raw";
703
704 /**
705 * Standard {@link #READOUTM} value for long exposure mode.
706 *
707 * @since 1.20.1
708 */
709 public static final String READOUTM_LONG_EXPOSURE_MODE = "Long Exposure Mode";
710
711 private final FitsKey key;
712
713 MaxImDLExt(IFitsHeader key) {
714 this.key = key.impl();
715 }
716
717 MaxImDLExt(String key, VALUE valueType, String comment) {
718 this.key = new FitsKey(key == null ? name() : key, IFitsHeader.SOURCE.MaxImDL, HDU.IMAGE, valueType, comment);
719 }
720
721 MaxImDLExt(VALUE valueType, String comment) {
722 this(null, valueType, comment);
723 }
724
725 @Override
726 public final FitsKey impl() {
727 return key;
728 }
729
730 }