View Javadoc
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 }