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 }