1 package nom.tam.fits.header.extra;
2
3 import nom.tam.fits.header.DateTime;
4
5 /*
6 * #%L
7 * nom.tam FITS library
8 * %%
9 * Copyright (C) 1996 - 2024 nom-tam-fits
10 * %%
11 * This is free and unencumbered software released into the public domain.
12 *
13 * Anyone is free to copy, modify, publish, use, compile, sell, or
14 * distribute this software, either in source code form or as a compiled
15 * binary, for any purpose, commercial or non-commercial, and by any
16 * means.
17 *
18 * In jurisdictions that recognize copyright laws, the author or authors
19 * of this software dedicate any and all copyright interest in the
20 * software to the public domain. We make this dedication for the benefit
21 * of the public at large and to the detriment of our heirs and
22 * successors. We intend this dedication to be an overt act of
23 * relinquishment in perpetuity of all present and future rights to this
24 * software under copyright law.
25 *
26 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
27 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
28 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
29 * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
30 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
31 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
32 * OTHER DEALINGS IN THE SOFTWARE.
33 * #L%
34 */
35
36 import nom.tam.fits.header.FitsKey;
37 import nom.tam.fits.header.IFitsHeader;
38 import nom.tam.fits.header.InstrumentDescription;
39
40 /**
41 * This is the file content.txt that presents a comprehensive compilation of all classes of data products in the Chandra
42 * Data Archive for the "flight" dataset. This file is the definitive authority on the values of various FITS header
43 * keywords.
44 * <p>
45 * All files are identified by the CONTENT value of their principal HDUs.
46 * </p>
47 * Originally based on the <a href="http://cxc.harvard.edu/contrib/arots/fits/content.txt">Guide to Chandra Data
48 * Products</a>, with additional keyword entries added in 1.20.1 based on the
49 * <a href="https://planet4589.org/astro/sds/asc/ps/sds73.pdf">FITS Keyword Conventions in CXC Data Model files
50 * SDS-7.3</a>.
51 *
52 * @author Attila Kovacs and Richard van Nieuwenhoven
53 */
54 public enum CXCExt implements IFitsHeader {
55
56 /**
57 * ASC-DS processing system revision (release)
58 */
59 ASCDSVER(VALUE.STRING, "ASC-DS processing system revision (release)"),
60
61 /**
62 * Correction applied to Basic Time rate (s)
63 */
64 BTIMCORR(VALUE.REAL, "[s] time rate correction"),
65
66 /**
67 * Basic Time clock drift (s / VCDUcount<sup>2</sup>)
68 */
69 BTIMDRFT(VALUE.REAL, "'[s/ct**2] clock drift"),
70
71 /**
72 * Basic Time offset (s)
73 */
74 BTIMNULL(VALUE.REAL, "[s] time offset"),
75
76 /**
77 * Basic Time clock rate (s / VCDUcount)
78 */
79 BTIMRATE(VALUE.REAL, "[s/ct] clock rate"),
80
81 /**
82 * Data product identification
83 */
84 CONTENT(VALUE.STRING, "data product identification"),
85
86 /**
87 * The format of the CONVERS keyword is 'i.j.k'. if missing, the default value will be '1.0.0'
88 */
89 CONVERS(VALUE.STRING, "version info"),
90
91 /**
92 * Data class: 'observed' or 'simulated'
93 *
94 * @see #DATACLAS_OBSERVED
95 * @see #DATACLAS_SIMULATED
96 */
97 DATACLAS(VALUE.STRING, "observed or simulated"),
98
99 /**
100 * Dead time correction factor [0.0:1.0].
101 */
102 DTCOR(VALUE.REAL, "[s] dead time correction [0.0:1.0]"),
103
104 /**
105 * Assumed focal length, mm; Level 1 and up
106 */
107 FOC_LEN(VALUE.REAL, "[mm] assumed focal length"),
108
109 /**
110 * ICD reference. E.g. 'HRC Level 1 Data Products ICD, Version 1.1'
111 */
112 HDUSPEC(VALUE.STRING, "ICD reference"),
113
114 /**
115 * The OGIP long string convention may be used.
116 */
117 LONGSTRN(VALUE.STRING, "The OGIP long string convention may be used."),
118
119 /**
120 * Mission specifier, e.g. 'AXAF'
121 */
122 MISSION(VALUE.STRING, "mission identifier"),
123
124 /**
125 * Processing version of data
126 */
127 REVISION(VALUE.STRING, "processing version of data"),
128
129 /**
130 * Nominal roll angle, deg
131 */
132 ROLL_NOM(VALUE.REAL, "[deg] nominal roll angle"),
133
134 /**
135 * Sequence number
136 */
137 SEQ_NUM(VALUE.INTEGER, "sequence number"),
138
139 /**
140 * SIM focus pos (mm)
141 */
142 SIM_X(VALUE.REAL, "[mm] SIM focus pos"),
143
144 /**
145 * SIM orthogonal axis pos (mm)
146 */
147 SIM_Y(VALUE.REAL, "[mm] SIM orthogonal axis pos"),
148
149 /**
150 * SIM translation stage pos (mm)
151 */
152 SIM_Z(VALUE.REAL, "[mm] SIM translation stage pos"),
153
154 /**
155 * Major frame count at start
156 */
157 STARTMJF(VALUE.INTEGER, "major frame count at start"),
158
159 /**
160 * Minor frame count at start
161 */
162 STARTMNF(VALUE.INTEGER, "minor frame count at start"),
163
164 /**
165 * On-Board MET close to STARTMJF and STARTMNF
166 */
167 STARTOBT(VALUE.INTEGER, "on-board MET close to STARTMJF and STARTMNF"),
168
169 /**
170 * Major frame count at stop
171 */
172 STOPMJF(VALUE.INTEGER, "major frame count at stop"),
173
174 /**
175 * Minor frame count at stop
176 */
177 STOPMNF(VALUE.INTEGER, "minor frame count at stop"),
178
179 /**
180 * Absolute timing error.
181 */
182 TIERABSO(VALUE.REAL, "[s] absolute timing error"),
183
184 /**
185 * Clock rate error
186 */
187 TIERRELA(VALUE.REAL, "[s/s] clock rate error"),
188
189 /**
190 * Time stamp reference as bin fraction
191 */
192 TIMEPIXR(VALUE.REAL, "[bin] time stamp reference"),
193
194 /**
195 * Telemetry revision number (IP&CL)
196 */
197 TLMVER(VALUE.STRING, "telemetry revision number (IP&CL)"),
198
199 // Inherited from CXCStscISharedExt ----------------------------------------->
200
201 /**
202 * Same as {@link STScIExt#CLOCKAPP}.
203 *
204 * @since 1.20.1
205 */
206 CLOCKAPP(STScIExt.CLOCKAPP),
207
208 /**
209 * Same as {@link STScIExt#TASSIGN}.
210 *
211 * @since 1.20.1
212 */
213 TASSIGN(STScIExt.TASSIGN),
214
215 /**
216 * Same as {@link DateTime#TIMEDEL}.
217 *
218 * @since 1.20.1
219 */
220 TIMEDEL(DateTime.TIMEDEL),
221
222 /**
223 * Same as {@link STScIExt#TIMEREF}.
224 *
225 * @since 1.20.1
226 *
227 * @see #TIMEREF_LOCAL
228 * @see #TIMEREF_GEOCENTRIC
229 * @see #TIMEREF_HELIOCENTRIC
230 * @see #TIMEREF_SOLARSYSTEM
231 */
232 TIMEREF(STScIExt.TIMEREF),
233
234 /**
235 * Same as {@link STScIExt#TIMEUNIT}.
236 *
237 * @since 1.20.1
238 */
239 TIMEUNIT(STScIExt.TIMEUNIT),
240
241 /**
242 * Same as {@link STScIExt#TIMVERSN}.
243 *
244 * @since 1.20.1
245 */
246 TIMVERSN(STScIExt.TIMVERSN),
247
248 /**
249 * Same as {@link STScIExt#TIMEZERO}.
250 *
251 * @since 1.20.1
252 */
253 TIMEZERO(STScIExt.TIMEZERO),
254
255 /**
256 * Same as {@link STScIExt#TSTART}.
257 */
258 TSTART(STScIExt.TSTART),
259
260 /**
261 * Same as {@link STScIExt#TSTOP}.
262 */
263 TSTOP(STScIExt.TSTOP),
264
265 // ---- Added in 1.20.1 from the CXC Data Model specification ------------>
266
267 // Standard header keywords
268 // MISSION(VALUE.STRING, "Grouping of related telesopes"),
269
270 // SEQ_NUM(VALUE.INTEGER, "Sequence_number"),
271
272 // ASCDSVER(VALUE.STRING, "Processing system revision"),
273
274 /**
275 * Defocus distance of instrument in mm rel to best.
276 *
277 * @since 1.20.1
278 */
279 DEFOCUS(VALUE.REAL, "[mm] Defocus distance from best"),
280
281 // FOC_LEN(VALUE.REAL, "Telessope focal length in mm"),
282
283 /**
284 * Configuration of instrument
285 *
286 * @since 1.20.1
287 */
288 READMODE(VALUE.STRING, "instrument config"),
289
290 /** Data class "observed" or "simulated". */
291 // DATACLAS(VALUE.STRING, "observed or simulated"),
292
293 // ONTIME(VALUE.REAL, "Sum of GTIs"),
294
295 // DTCOR(VALUE.REAL, "Dead time corretion [0.0:1.0]"),
296
297 /**
298 * CALDB file for gain corretion
299 *
300 * @since 1.20.1
301 */
302 GAINFILE(VALUE.STRING, "CALDB file for gain correction"),
303
304 /**
305 * CALDB file for grade correction
306 *
307 * @since 1.20.1
308 */
309 GRD_FILE(VALUE.STRING, "CALDB file for grade correction"),
310
311 // Data model keywords
312
313 /**
314 * Override {@link nom.tam.fits.header.Standard#CTYPEn} image coordinate axis name
315 *
316 * @since 1.20.1
317 */
318 CNAMEn(VALUE.STRING, HDU.IMAGE, "coordinate axis name"),
319
320 /**
321 * List of 'preferred cols' for making image from table
322 *
323 * @since 1.20.1
324 */
325 CPREF(VALUE.STRING, HDU.TABLE, "list of image columns"),
326
327 /**
328 * Data Subspace column name for column <i>n</i>.
329 *
330 * @since 1.20.1
331 */
332 DSTYPn(VALUE.STRING, HDU.TABLE, "data subspace column name"),
333
334 /**
335 * Data Subspace data type name (optional) for column <i>n</i>.
336 *
337 * @since 1.20.1
338 */
339 DSFORMn(VALUE.STRING, HDU.TABLE, "data subspace data type"),
340
341 /**
342 * Data Subspace unit name (optional) for column <i>n</i>.
343 *
344 * @since 1.20.1
345 */
346 DSUNITn(VALUE.STRING, "data subspace unit"),
347
348 /**
349 * Data Subspace filter list for column <i>n</i>.
350 *
351 * @since 1.20.1
352 */
353 DSVALn(VALUE.STRING, HDU.TABLE, "data subspace filter list"),
354
355 /**
356 * Data Subspace filter list for component <i>i</i> (leading index) and column <i>n</i> (trailing index).
357 *
358 * @since 1.20.1
359 *
360 * @see #DSVALn
361 */
362 nDSVALn(VALUE.STRING, HDU.TABLE, "data subspace filter list for component"),
363
364 /**
365 * Data Subspace table pointer for column <i>n</i>.
366 *
367 * @since 1.20.1
368 */
369 DSREFn(VALUE.STRING, HDU.TABLE, "data subspace table pointer"),
370
371 /**
372 * Data Subspace table pointer for component <i>i</i> (leading index) and column <i>n</i> (trailing index).
373 *
374 * @since 1.20.1
375 *
376 * @see #DSVALn
377 */
378 nDSREFn(VALUE.STRING, HDU.TABLE, "data subspace table pointer for component"),
379
380 /**
381 * Name for composite long-named keyword (f. CFITSIO HIERARCH) for column <i>n</i>. Also used to de ne array
382 * keywords.
383 *
384 * @since 1.20.1
385 */
386 DTYPEn(VALUE.STRING, "composite keyword name"),
387
388 /**
389 * Unit for composite long-named keyword for column <i>n</i>.
390 *
391 * @since 1.20.1
392 */
393 DUNITn(VALUE.STRING, "composite keyword unit"),
394
395 /**
396 * Value for composite long-named keyword for column <i>n</i>.
397 *
398 * @since 1.20.1
399 */
400 DVALn(VALUE.ANY, HDU.TABLE, "composite keyword value"),
401
402 /**
403 * Gives a name to an HDU. If not present, you should use EXTNAME/EXTVER.
404 *
405 * @since 1.20.1
406 */
407 HDUNAME(VALUE.STRING, "HDU name"),
408
409 /**
410 * Type of composite column (not yet supported)
411 *
412 * @since 1.20.1
413 */
414 METYPn(VALUE.STRING, HDU.TABLE, "composite column type"),
415
416 /**
417 * Comma-separated list of column names making up composite col (with {@link #MTYPEn}).
418 *
419 * @since 1.20.1
420 */
421 MFORMn(VALUE.STRING, HDU.TABLE, "column names for composite column"),
422
423 /**
424 * Composite column name (paired with {@link #MFORMn}).
425 *
426 * @since 1.20.1
427 */
428 MTYPEn(VALUE.STRING, HDU.TABLE, "composite column name"),
429
430 /**
431 * Override {@link nom.tam.fits.header.WCS#TCTYPn} table oordinate axis name.
432 *
433 * @since 1.20.1
434 */
435 TCNAMn(VALUE.STRING, HDU.TABLE, "column coordinate axis name"),
436
437 /**
438 * Default binning factor for table column
439 *
440 * @since 1.20.1
441 */
442 TDBINn(VALUE.REAL, HDU.TABLE, "Default binning factor for table column"),
443
444 /**
445 * Floating point <code>null</code> value other than NaN
446 *
447 * @since 1.20.1
448 */
449 TDNULLn(VALUE.REAL, HDU.TABLE, "designated null value");
450
451 /**
452 * Standard {@link #DATACLAS} value 'observed'.
453 *
454 * @since 1.20.1
455 */
456 public static final String DATACLAS_OBSERVED = "observed";
457
458 /**
459 * Standard {@link #DATACLAS} value 'simulated'.
460 *
461 * @since 1.20.1
462 */
463 public static final String DATACLAS_SIMULATED = "simulated";
464
465 /**
466 * Standard {@link InstrumentDescription#OBS_MODE} value for pointing observations.
467 *
468 * @since 1.20.1
469 */
470 public static final String OBS_MODE_POINTING = "pointing";
471
472 /**
473 * Standard {@link InstrumentDescription#OBS_MODE} value while slewing.
474 *
475 * @since 1.20.1
476 */
477 public static final String OBS_MODE_SLEWING = "slewing";
478
479 /**
480 * Standard {@link InstrumentDescription#OBS_MODE} value for ground cal observations.
481 *
482 * @since 1.20.1
483 */
484 public static final String OBS_MODE_GROUND_CAL = "ground cal";
485
486 /**
487 * Same as {@link STScIExt#TIMEREF_GEOCENTRIC}.
488 *
489 * @since 1.20.1
490 */
491 public static final String TIMEREF_GEOCENTRIC = STScIExt.TIMEREF_GEOCENTRIC;
492
493 /**
494 * Same as {@link STScIExt#TIMEREF_HELIOCENTRIC}.
495 *
496 * @since 1.20.1
497 */
498 public static final String TIMEREF_HELIOCENTRIC = STScIExt.TIMEREF_HELIOCENTRIC;
499
500 /**
501 * Same as {@link STScIExt#TIMEREF_SOLARSYSTEM}.
502 *
503 * @since 1.20.1
504 */
505 public static final String TIMEREF_SOLARSYSTEM = STScIExt.TIMEREF_SOLARSYSTEM;
506
507 /**
508 * Same as {@link STScIExt#TIMEREF_LOCAL}.
509 *
510 * @since 1.20.1
511 */
512 public static final String TIMEREF_LOCAL = STScIExt.TIMEREF_LOCAL;
513
514 private final FitsKey key;
515
516 CXCExt(IFitsHeader key) {
517 this.key = key.impl();
518 }
519
520 CXCExt(VALUE valueType, String comment) {
521 this(valueType, HDU.ANY, comment);
522 }
523
524 CXCExt(VALUE valueType, HDU hduType, String comment) {
525 key = new FitsKey(name(), IFitsHeader.SOURCE.CXC, hduType, valueType, comment);
526 }
527
528 @Override
529 public final FitsKey impl() {
530 return key;
531 }
532
533 }