1 package nom.tam.fits.header; 2 3 /*- 4 * #%L 5 * nom.tam.fits 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 /** 35 * Date-time related keywords defined by the FITS standard. 36 * 37 * @author Attila Kovacs 38 * 39 * @see WCS 40 * 41 * @since 1.19 42 */ 43 public enum DateTime implements IFitsHeader { 44 45 /** 46 * The date on which the HDU was created, in the format specified in the FITS Standard. The old date format was 47 * 'yy/mm/dd' and may be used only for dates from 1900 through 1999. the new Y2K compliant date format is 48 * 'yyyy-mm-dd' or 'yyyy-mm-ddTHH:MM:SS[.sss]'. 49 * 50 * @since 1.19 51 */ 52 DATE(SOURCE.RESERVED, HDU.ANY, VALUE.STRING, "date of file creation"), 53 54 /** 55 * The date of the observation, in the format specified in the FITS Standard. The old date format was 'yy/mm/dd' and 56 * may be used only for dates from 1900 through 1999. The new Y2K compliant date format is 'yyyy-mm-dd' or 57 * 'yyyy-mm-ddTHH:MM:SS[.sss]'. 58 * 59 * @since 1.19 60 */ 61 DATE_OBS("DATE-OBS", SOURCE.RESERVED, HDU.ANY, VALUE.STRING, "date of observation"), 62 63 /** 64 * The date of the observation for the given column index, in the format specified in the FITS Standard. The old 65 * date format was 'yy/mm/dd' and may be used only for dates from 1900 through 1999. The new Y2K compliant date 66 * format is 'yyyy-mm-dd' or 'yyyy-mm-ddTHH:MM:SS[.sss]'. 67 * 68 * @since 1.19 69 */ 70 DOBSn(SOURCE.RESERVED, HDU.TABLE, VALUE.STRING, "date of observation for column"), 71 72 /** 73 * The average date of the observation, in the format specified in the FITS Standard. The old date format was 74 * 'yy/mm/dd' and may be used only for dates from 1900 through 1999. The new Y2K compliant date format is 75 * 'yyyy-mm-dd' or 'yyyy-mm-ddTHH:MM:SS[.sss]'. 76 * 77 * @since 1.19 78 */ 79 DATE_AVG("DATE-AVG", SOURCE.RESERVED, HDU.ANY, VALUE.STRING, "mean date of observation"), 80 81 /** 82 * Avearge date of the observation for the given column index, in the format specified in the FITS Standard. The old 83 * date format was 'yy/mm/dd' and may be used only for dates from 1900 through 1999. The new Y2K compliant date 84 * format is 'yyyy-mm-dd' or 'yyyy-mm-ddTHH:MM:SS[.sss]'. 85 * 86 * @since 1.19 87 */ 88 DAVGn(SOURCE.RESERVED, HDU.TABLE, VALUE.STRING, "mean date of observation for column"), 89 90 /** 91 * The start date of the observation, in the format specified in the FITS Standard. The old date format was 92 * 'yy/mm/dd' and may be used only for dates from 1900 through 1999. The new Y2K compliant date format is 93 * 'yyyy-mm-dd' or 'yyyy-mm-ddTHH:MM:SS[.sss]'. 94 * 95 * @since 1.19 96 */ 97 DATE_BEG("DATE-BEG", SOURCE.RESERVED, HDU.ANY, VALUE.STRING, "start of observation"), 98 99 /** 100 * The end date of the observation, in the format specified in the FITS Standard. The old date format was 'yy/mm/dd' 101 * and may be used only for dates from 1900 through 1999. The new Y2K compliant date format is 'yyyy-mm-dd' or 102 * 'yyyy-mm-ddTHH:MM:SS[.sss]'. 103 * 104 * @since 1.19 105 */ 106 DATE_END("DATE-END", SOURCE.RESERVED, HDU.ANY, VALUE.STRING, "end of observation"), 107 108 /** 109 * The reference date of the observation, in the format specified in the FITS Standard. The old date format was 110 * 'yy/mm/dd' and may be used only for dates from 1900 through 1999. The new Y2K compliant date format is 111 * 'yyyy-mm-dd' or 'yyyy-mm-ddTHH:MM:SS[.sss]'. 112 * 113 * @since 1.19 114 */ 115 DATEREF(SOURCE.RESERVED, HDU.ANY, VALUE.STRING, "reference date"), 116 117 /** 118 * [day] Modified Julian Date of observation 119 * 120 * @since 1.19 121 */ 122 MJD_OBS("MJD-OBS", SOURCE.RESERVED, HDU.ANY, VALUE.REAL, "[day] Modified Julian Date of observation"), 123 124 /** 125 * [day] Modified Julian Date of observation for the given column index 126 * 127 * @since 1.19 128 */ 129 MJDOBn(SOURCE.RESERVED, HDU.TABLE, VALUE.REAL, "[day] MJD of observation for column"), 130 131 /** 132 * [day] Average Modified Julian Date of observation 133 * 134 * @since 1.19 135 */ 136 MJD_AVG("MJD-AVG", SOURCE.RESERVED, HDU.ANY, VALUE.REAL, "[day] mean Modified Julian Date of observation"), 137 138 /** 139 * [day] Average Modified Julian Date of observation for the given column index 140 * 141 * @since 1.19 142 */ 143 MJDAn(SOURCE.RESERVED, HDU.TABLE, VALUE.REAL, "[day] mean MJD of observation for column"), 144 145 /** 146 * [day] Modified Julian Date of the start of observation 147 * 148 * @since 1.19 149 */ 150 MJD_BEG("MJD-BEG", SOURCE.RESERVED, HDU.ANY, VALUE.REAL, "[day] Modified Julian Date of start of observation"), 151 152 /** 153 * [day] Average Modified Julian Date of the end of observation 154 * 155 * @since 1.19 156 */ 157 MJD_END("MJD-END", SOURCE.RESERVED, HDU.ANY, VALUE.REAL, "[day] Modified Julian Date of start of observation"), 158 159 /** 160 * [day] Reference Modified Julian Date 161 * 162 * @since 1.19 163 */ 164 MJDREF(SOURCE.RESERVED, HDU.ANY, VALUE.REAL, "[day] reference Modified Julian Date"), 165 166 /** 167 * [day] Reference Julian Date 168 * 169 * @since 1.19 170 */ 171 JDREF(SOURCE.RESERVED, HDU.ANY, VALUE.REAL, "[day] reference Julian Date"), 172 173 /** 174 * The start time of the observation, in the format specified in the FITS Standard, as decimal or in the format 175 * HH:MM:SS[.s...]'. 176 * 177 * @since 1.19 178 */ 179 TSTART(SOURCE.RESERVED, HDU.ANY, VALUE.ANY, "start time of observation"), 180 181 /** 182 * The end time of the observation, in the format specified in the FITS Standard, as decimal or in the format 183 * HH:MM:SS[.s...]'. 184 * 185 * @since 1.19 186 */ 187 TSTOP(SOURCE.RESERVED, HDU.ANY, VALUE.ANY, "end time of observation"), 188 189 /** 190 * [yr] Besselian epoch of observation 191 * 192 * @since 1.19 193 */ 194 BEPOCH(SOURCE.RESERVED, HDU.ANY, VALUE.REAL, "[Ba] Besselian epoch of observation"), 195 196 /** 197 * [yr] Julian epoch of observation 198 * 199 * @since 1.19 200 */ 201 JEPOCH(SOURCE.RESERVED, HDU.ANY, VALUE.REAL, "[yr] Julian epoch of observation"), 202 203 /** 204 * Net exposure duration (in specified time units, or else seconds) 205 * 206 * @since 1.19 207 */ 208 XPOSURE(SOURCE.RESERVED, HDU.ANY, VALUE.REAL, "net exposure duration"), 209 210 /** 211 * Wall clock exposure duration (in specified time units, or else seconds) 212 * 213 * @since 1.19 214 */ 215 TELAPSE(SOURCE.RESERVED, HDU.ANY, VALUE.REAL, "wall-clock exposure duration"), 216 217 /** 218 * Time reference system name 219 * 220 * @since 1.19 221 */ 222 TIMESYS(SOURCE.RESERVED, HDU.ANY, VALUE.STRING, "time reference system"), 223 224 /** 225 * Time reference location 226 * 227 * @since 1.19 228 */ 229 TREFPOS(SOURCE.RESERVED, HDU.ANY, VALUE.STRING, "time reference location"), 230 231 /** 232 * Time reference location for given column index. 233 * 234 * @since 1.19 235 */ 236 TRPOSn(SOURCE.RESERVED, HDU.TABLE, VALUE.STRING, "time reference location in column"), 237 238 /** 239 * Pointer to time reference direction 240 * 241 * @since 1.19 242 */ 243 TREFDIR(SOURCE.RESERVED, HDU.ANY, VALUE.STRING, "time reference direction"), 244 245 /** 246 * Time reference direction for given column index, e.g. 'TOPOCENT' 247 * 248 * @since 1.19 249 */ 250 TRDIRn(SOURCE.RESERVED, HDU.TABLE, VALUE.STRING, "time reference direction in column"), 251 252 /** 253 * Solar system ephemeris used, e.g. 'DE-405'. 254 * 255 * @since 1.19 256 */ 257 PLEPHEM(SOURCE.RESERVED, HDU.ANY, VALUE.STRING, "solar-system ephemeris ID"), 258 259 /** 260 * Time unit name 261 * 262 * @since 1.19 263 */ 264 TIMEUNIT(SOURCE.RESERVED, HDU.ANY, VALUE.STRING, "time unit"), 265 266 /** 267 * Precision time offset (in specified time units, or else seconds) 268 * 269 * @since 1.19 270 */ 271 TIMEOFFS(SOURCE.RESERVED, HDU.ANY, VALUE.REAL, "time offset"), 272 273 /** 274 * Systematic time error (in specified time units, or else seconds) 275 * 276 * @since 1.19 277 */ 278 TIMESYER(SOURCE.RESERVED, HDU.ANY, VALUE.REAL, "systematic time error"), 279 280 /** 281 * Random time error (in specified time units, or else seconds) 282 * 283 * @since 1.19 284 */ 285 TIMERDER(SOURCE.RESERVED, HDU.ANY, VALUE.REAL, "random time error"), 286 287 /** 288 * Time resolution (in specified time units, or else seconds) 289 * 290 * @since 1.19 291 */ 292 TIMEDEL(SOURCE.RESERVED, HDU.ANY, VALUE.REAL, "time resolution"), 293 294 /** 295 * Time location within pixel, between 0.0 and 1.0 (default 0.5). 296 * 297 * @since 1.19 298 */ 299 TIMEPIXR(SOURCE.RESERVED, HDU.ANY, VALUE.REAL, "time location within pixel"); 300 301 /** International Atomic Time (TAI) timescale value. */ 302 public static final String TIMESYS_TAI = "TAI"; 303 304 /** Terrestrial Time (TT) timescale value. */ 305 public static final String TIMESYS_TT = "TT"; 306 307 /** Terrestrial Dynamical Time (TDT) timescale value. */ 308 public static final String TIMESYS_TDT = "TDT"; 309 310 /** Ephemeris Time (ET) timescale value. */ 311 public static final String TIMESYS_ET = "ET"; 312 313 /** @deprecated Deprecated by the FITS standard, use {@link #TIMESYS_TAI} instead. */ 314 public static final String TIMESYS_IAT = "IAT"; 315 316 /** Earth rotation time (UT1) timescale value. */ 317 public static final String TIMESYS_UT1 = "UT1"; 318 319 /** Universal Coordinated Time (UTC) timescale value. */ 320 public static final String TIMESYS_UTC = "UTC"; 321 322 /** 323 * @deprecated Greenwich Mean time (GMT) timescale value; deprecated by the FITS standard, use {@link #TIMESYS_UTC} 324 * instead. 325 */ 326 public static final String TIMESYS_GMT = "GMT"; 327 328 /** Global Positioning System (GPS) time timescale value. */ 329 public static final String TIMESYS_GPS = "GPS"; 330 331 /** Geocentric Coordinated Time (TCG) timescale value. */ 332 public static final String TIMESYS_TCG = "TCG"; 333 334 /** Barycentric Coordinated Time (TCB) timescale value. */ 335 public static final String TIMESYS_TCB = "TCB"; 336 337 /** Barycentric Dynamical Time (TDB) timescale value. */ 338 public static final String TIMESYS_TDB = "TDB"; 339 340 /** Local time timescale value for free-running clocks. */ 341 public static final String TIMESYS_LOCAL = "LOCAL"; 342 343 /** Topocentric time reference position */ 344 public static final String TREFPOS_TOPOCENTER = "TOPOCENTER"; 345 346 /** Geocentric time reference position */ 347 public static final String TREFPOS_GEOCENTER = "GEOCENTER"; 348 349 /** Barycentric (Solar-system) time reference position */ 350 public static final String TREFPOS_BARYCENTER = "BARYCENTER"; 351 352 /** Relocatable time reference position (for simulations only) */ 353 public static final String TREFPOS_RELOCATABLE = "RELOCATABLE"; 354 355 /** Topocentric time reference position that is not the observatory location */ 356 public static final String TREFPOS_CUSTOM = "CUSTOM"; 357 358 /** Helioentric time reference position */ 359 public static final String TREFPOS_HELIOCENTER = "HELIOCENTER"; 360 361 /** Galactocentric time reference position */ 362 public static final String TREFPOS_GALACTIC = "GALACTIC"; 363 364 /** Earth-Moon barycenter time reference position */ 365 public static final String TREFPOS_EMBARYCENTER = "EMBARYCENTER"; 366 367 /** Time reference position at the center of Mercury */ 368 public static final String TREFPOS_MERCURY = "MERCURY"; 369 370 /** Time reference position at the center of Venus */ 371 public static final String TREFPOS_VENUS = "VENUS"; 372 373 /** Time reference position at the center of Mars */ 374 public static final String TREFPOS_MARS = "MARS"; 375 376 /** Time reference position at the center of Jupiter */ 377 public static final String TREFPOS_JUPITER = "JUPITER"; 378 379 /** Time reference position at the center of Saturn */ 380 public static final String TREFPOS_SATURN = "SATURN"; 381 382 /** Time reference position at the center of Uranus */ 383 public static final String TREFPOS_URANUS = "URANUS"; 384 385 /** Time reference position at the center of Neptune */ 386 public static final String TREFPOS_NEPTUNE = "NEPTUNE"; 387 388 /** Solar System ephemeris value for {@link #PLEPHEM} for Standish (1990). */ 389 public static final String PLEPHEM_DE200 = "DE200"; 390 391 /** Solar System ephemeris value for {@link #PLEPHEM} for Standish (1998). Default */ 392 public static final String PLEPHEM_DE405 = "DE405"; 393 394 /** Solar System ephemeris value for {@link #PLEPHEM} for Folkner, et al. (2009). */ 395 public static final String PLEPHEM_DE421 = "DE421"; 396 397 /** Solar System ephemeris value for {@link #PLEPHEM} for Folkner, et al. (2014). */ 398 public static final String PLEPHEM_DE430 = "DE430"; 399 400 /** Solar System ephemeris value for {@link #PLEPHEM} for Folkner, et al. (2014). */ 401 public static final String PLEPHEM_DE431 = "DE431"; 402 403 /** Solar System ephemeris value for {@link #PLEPHEM} for Folkner, et al. (2014). */ 404 public static final String PLEPHEM_DE432 = "DE432"; 405 406 /** Solar System ephemeris value for {@link #PLEPHEM} for Park, et al. (2021). */ 407 public static final String PLEPHEM_DE440 = "DE440"; 408 409 /** Solar System ephemeris value for {@link #PLEPHEM} for Park, et al. (2021). */ 410 public static final String PLEPHEM_DE441 = "DE441"; 411 412 /** Time unit value for time measured in seconds */ 413 public static final String TIMEUNIT_SECOND = "s"; 414 415 /** Time unit value for time measured in days */ 416 public static final String TIMEUNIT_DAY = "d"; 417 418 /** Time unit value for time measured in Julian years (1 a = 365.25 d) */ 419 public static final String TIMEUNIT_JULIAN_YEAR = "a"; 420 421 /** Time unit value for time measured in seconds (1 cy = 36525 d) */ 422 public static final String TIMEUNIT_JULIAN_CENTURY = "cy"; 423 424 /** Time unit value for time measured in minutes */ 425 public static final String TIMEUNIT_MINUTE = "min"; 426 427 /** Time unit value for time measured in hours */ 428 public static final String TIMEUNIT_HOUR = "h"; 429 430 /** Time unit value for time measured in Julian years (same as {@link #TIMEUNIT_JULIAN_YEAR}) */ 431 public static final String TIMEUNIT_YEAR = "yr"; 432 433 /** Time unit value for time measured in tropical years (1 ta ~ 365.2421988 d) */ 434 public static final String TIMEUNIT_TROPICAL_YEAR = "ta"; 435 436 /** 437 * Time unit value for time measured in Besselian years (essentially the same as {@link #TIMEUNIT_TROPICAL_YEAR}) 438 */ 439 public static final String TIMEUNIT_BESSELIAN_YEAR = "Ba"; 440 441 private final FitsKey key; 442 443 DateTime(SOURCE status, HDU hdu, VALUE valueType, String comment) { 444 this(null, status, hdu, valueType, comment); 445 } 446 447 DateTime(String headerName, SOURCE status, HDU hdu, VALUE valueType, String comment) { 448 key = new FitsKey(headerName == null ? name() : headerName, status, hdu, valueType, comment); 449 FitsKey.registerStandard(this); 450 } 451 452 @Override 453 public final FitsKey impl() { 454 return key; 455 } 456 457 }