FITSArchive.h
1//-*-C++-*-
2/***************************************************************************
3 *
4 * Copyright (C) 2003-2009 by Willem van Straten
5 * Licensed under the Academic Free License version 2.1
6 *
7 ***************************************************************************/
8
9// psrchive/Base/Formats/PSRFITS/Pulsar/FITSArchive.h
10
11#ifndef __Pulsar_FITSArchive_h
12#define __Pulsar_FITSArchive_h
13
14#include "Pulsar/BasicArchive.h"
15#include "Pulsar/Agent.h"
16#include "FITSError.h"
17
18#include <fitsio.h>
19
20namespace Pulsar
21{
22 class FITSHdrExtension;
23 class ObsExtension;
25 class Receiver;
26 class ITRFExtension;
27 class CalInfoExtension;
28 class ProcHistory;
29 class Passband;
33 class CalibratorStokes;
36 class DigitiserCounts;
38 class ProfileColumn;
40 class SpectralKurtosis;
41 class ObsDescription;
42 class CrossCovarianceMatrix;
43 class DynamicResponse;
44
45 class Pointing;
47
49
59
60 class FITSArchive : public BasicArchive {
61
62 public:
63
65 FITSArchive ();
66
68 FITSArchive (const FITSArchive& archive);
69
71 ~FITSArchive ();
72
74 const FITSArchive& operator= (const FITSArchive& archive);
75
77 FITSArchive (const Archive& archive);
78
80 void copy (const Archive& archive);
81
82 // //////////////////////////////////////////////////////////////////
83 //
84 // implement the pure virtual methods of the Archive base class
85 //
86
88 FITSArchive* clone () const;
89
90 // //////////////////////////////////////////////////////////////////
91 //
92 // FITSArchive specific interface
93 //
94
96 void update_history ();
97
99 static std::string get_template_name ();
100
102 static void unload (fitsfile*, const FITSHdrExtension*);
103
105 static void unload (fitsfile*, const ObsExtension*);
106
108 static void unload (fitsfile*, const Receiver*);
109
111 static void unload (fitsfile*, const WidebandCorrelator*);
112
114 static void unload (fitsfile*, const ITRFExtension*);
115
117 static void unload (fitsfile*, const CalInfoExtension*);
118
120 static void unload (fitsfile*, const ProcHistory*);
121
123 static void unload (fitsfile*, const Passband*);
124
126 void unload (fitsfile*, const DigitiserStatistics*) const;
127
129 void unload (fitsfile*, const DigitiserCounts*) const;
130
132 static void unload (fitsfile*, const PolnCalibratorExtension*);
133
135 static void unload (fitsfile*, const FluxCalibratorExtension*);
136
138 static void unload (fitsfile*, const CalibratorStokes*);
139
141 static void unload (fitsfile*, const CalibrationInterpolatorExtension*);
142
144 static void unload (fitsfile*, const ConfigurableProjectionExtension*);
145
147 static void unload (fitsfile*, const FITSSUBHdrExtension*);
148
150 static void unload (fitsfile*, const CoherentDedispersion*);
151
153 void unload (fitsfile*, const Pointing*, int row) const;
154
156 static void unload (fitsfile*, const AuxColdPlasmaMeasures*, int row);
157
159 static void unload (fitsfile*, const ObsDescription*);
160
162 static void unload (fitsfile*, const CrossCovarianceMatrix*);
163
165 static void unload (fitsfile*, const DynamicResponse*);
166
168 double get_offs_sub( unsigned int isub ) const;
169
170 // Correct error due to REF_MJD precision
171 void refmjd_rounding_correction();
172
174 void set_search_mode() { search_mode = true; };
175
176 protected:
177
178 class SKLoader;
179
180 friend class Archive::Advocate<FITSArchive>;
181
182 // Advocates the use of the FITSArchive plugin
183 class Agent : public Archive::Advocate<FITSArchive> {
184
185 public:
186
188 Agent () {}
189
191 bool advocate (const char* filename);
192
194 std::string get_name () { return "PSRFITS"; }
195
197 std::string get_description ();
198
199 };
200
202 virtual void load_header (const char* filename);
203
205 virtual Integration*
206 load_Integration (const char* filename, unsigned subint);
207
209 bool can_unload () const { return true; }
210
212 virtual void unload_file (const char* filename) const;
213
215 template<typename T>
216 void load_amps (fitsfile*, Integration*, unsigned isubint, int colnum);
217
218 // //////////////////////////////////////////////////////////////////////
219 //
220 // ADDITIONAL ATTRIBUTES
221 //
222
225
227 double chanbw;
228
231
233 std::string state_scale;
234
236 std::string state_pol_type;
237
240
243
244 // //////////////////////////////////////////////////////////////////////
245
246 // load the Pulsar::Parameters
247 void load_Parameters (fitsfile*);
248
249 // unload the Pulsar::Parameters
250 void unload_Parameters (fitsfile*) const;
251
252 // load the Pulsar::Predictor model
253 void load_Predictor (fitsfile*);
254
255 // unload the Pulsar::Predictor model
256 void unload_Predictor (fitsfile*) const;
257
258 // Archive Extensions used by FITSArchive
259
260 // Extension I/O routines
261 void load_ProcHistory (fitsfile*);
262 void no_ProcHistory (fitsfile*);
263
264 void load_DigitiserStatistics (fitsfile*);
265 void load_DigitiserCounts(fitsfile*);
266 void load_Passband (fitsfile*);
267 void load_PolnCalibratorExtension (fitsfile*);
268 void load_FluxCalibratorExtension (fitsfile*);
269 void load_CalibratorStokes (fitsfile*);
270 void load_CalibrationInterpolatorExtension (fitsfile*);
271 void load_ConfigurableProjectionExtension (fitsfile*);
272 void load_Receiver (fitsfile*);
273 void load_ITRFExtension (fitsfile*);
274 void load_CalInfoExtension (fitsfile*);
275 void load_WidebandCorrelator (fitsfile*);
276 void load_FITSSUBHdrExtension ( fitsfile * );
277 void load_CoherentDedispersion (fitsfile*);
278 void load_ObsDescription (fitsfile*);
279 void load_CrossCovarianceMatrix (fitsfile*);
280 void load_DynamicResponse(fitsfile*);
281
282 template<class Ext>
283 void unload (fitsfile*, const char* hdu_name) const;
284
285 void load_integration_state ( fitsfile * );
286 void load_state ( fitsfile * );
287
288 void load_Pointing (fitsfile*, int row, Integration*);
289 void load_Plasma (fitsfile*, int row, Integration*);
290 void load_SpectralKurtosis (fitsfile*, int row, Integration*);
291
292 void interpret_scale ( );
293 void interpret_pol_type ( );
294
296 static void delete_hdu (fitsfile*, const char* hdu_name);
297
298 // //////////////////////////////////////////////////////////////////////
299
300 // Helper function to write an integration to a file
301 void unload_Integration (fitsfile*, int row, const Integration*) const;
302
304 void unload_integrations (fitsfile*) const;
305
307 void clean_Pointing_columns (fitsfile*) const;
308
310 void add_Pointing_columns (fitsfile*) const;
311
313 void load_Pointing_columns (fitsfile* fptr);
314
316 int get_last_pointing_column (fitsfile* fptr) const;
317
319 void unload_sk_integrations (fitsfile*) const;
320
321 private:
322
323 // Correct the reference epoch in WBC data taken during commissioning
324 void P236_reference_epoch_correction ();
325
326 // Correct the reference epoch in WBC data taken during commissioning
327 bool correct_P236_reference_epoch;
328
329 // The data file contains search mode data, not folded pulse profiles
330 bool search_mode;
331
332 // Flag set when data are loaded from a PSRFITS file
333 bool loaded_from_fits;
334
336 mutable unsigned naux_profile;
337
339 mutable double aux_nsample;
340
341 // Reference epoch is used during unload_Integration
342 /* This attribute enables proper handling of time stamps when there
343 is no FITSHdrExtension in use (as is the case in psrconv) */
344 mutable MJD reference_epoch;
345
346 struct pointing_info_column
347 {
348 std::string name;
349 std::string unit;
350 std::string description;
351 int colnum;
352 };
353
354 mutable std::vector<pointing_info_column> extra_pointing_columns;
355
356 // Gate duty cycle passed on to all sub-integrations
357 mutable double gate_duty_cycle;
358
359 // Profile load/unload algorithm
360 mutable Reference::To<ProfileColumn> load_dat_io, unload_dat_io;
361
362 // Prepare dat_io attribute for use
363 void setup_dat (fitsfile*, Reference::To<ProfileColumn>&) const;
364
365 // Auxilliary data load/unload algorithm
366 mutable Reference::To<ProfileColumn> load_aux_io, unload_aux_io;
367
368 // Prepare dat_io attribute for use
369 void setup_aux (fitsfile*, Reference::To<ProfileColumn>&, unsigned) const;
370
371 // Set all attributes to default values
372 void init ();
373
374 // Pointer to file used for reading (only)
375 fitsfile* read_fptr;
376
377 // Name of file used for reading
378 std::string read_filename;
379 };
380
381 extern template Registry::List<Archive::Agent>::Enter<FITSArchive::Agent>
382 Archive::Advocate<FITSArchive>::entry;
383
384}
385
386#endif
Stores parameters used to correct variable dispersion and birefringence.
Definition AuxColdPlasmaMeasures.h:19
Record of phase-coherent dispersion removal algorithm.
Definition CoherentDedispersion.h:22
Stores digitizer statistics.
Definition DigitiserStatistics.h:21
FITSArchive()
Default constructor.
Definition FITSArchive.C:86
Stores PSRFITS header extensions.
Definition FITSHdrExtension.h:21
Stores PSRFITS SUBINT header parameters.
Definition FITSSUBHdrExtension.h:24
Instrumental passband (or bandpass)
Definition Passband.h:20
Telescope pointing parameters recorded during the observation.
Definition Pointing.h:22
Archive()
Default constructor.
Definition Archive.C:67
Stores parameters used to correct variable dispersion and birefringence.
Definition AuxColdPlasmaMeasures.h:19
BasicArchive()
null constructor
Definition BasicArchive.C:18
Stores information about the reference source (ATNF)
Definition CalInfoExtension.h:23
Stores Polarization Calibration Model Interpolator information.
Definition CalibrationInterpolatorExtension.h:25
Stores the Stokes parameters of the reference source.
Definition CalibratorStokes.h:23
Record of phase-coherent dispersion removal algorithm.
Definition CoherentDedispersion.h:22
Stores ConfigurableProjection parameters in an Archive instance.
Definition ConfigurableProjectionExtension.h:24
Stores digitizer histograms.
Definition DigitiserCounts.h:26
Stores digitizer statistics.
Definition DigitiserStatistics.h:21
Loads and unloads PSRFITS archives.
Definition FITSArchive.h:60
static std::string get_template_name()
Return the name of the PSRFITS definition template file.
Definition FITSArchive.C:811
FITSArchive * clone() const
Return a pointer to a new copy constructed instance equal to this.
Definition FITSArchive.C:185
std::string state_pol_type
String describing polarization state.
Definition FITSArchive.h:236
static void unload(fitsfile *, const FITSHdrExtension *)
Unload FITSHdrExtension to the current HDU of the specified FITS file.
Definition unload_FITSHdrExtension.C:18
void load_amps(fitsfile *, Integration *, unsigned isubint, int colnum)
Load data of any type.
void load_Pointing_columns(fitsfile *fptr)
Load additional Pointing::Info column information, if any.
Definition load_Pointing_columns.C:14
std::string state_scale
String describing scale.
Definition FITSArchive.h:233
void load_SpectralKurtosis(fitsfile *, int row, Integration *)
Definition load_SpectralKurtosis.C:18
void load_DigitiserCounts(fitsfile *)
FITSArchive::load_DigitiserCounts Creates a DigitiserCounts extension and loads it from the fits file...
Definition load_DigitiserCounts.C:139
static void delete_hdu(fitsfile *, const char *hdu_name)
Delete the HDU with the specified name.
Definition delete_hdu.C:19
virtual Integration * load_Integration(const char *filename, unsigned subint)
Load the specified Integration from filename, returning new instance.
Definition load_Integration.C:37
void load_Pointing(fitsfile *, int row, Integration *)
Definition load_Pointing.C:49
void add_Pointing_columns(fitsfile *) const
Add additional Pointing::Info columns, if needed.
Definition add_Pointing_columns.C:30
bool can_unload() const
The unload_file method is implemented.
Definition FITSArchive.h:209
float psrfits_version
The PSRFITS version.
Definition FITSArchive.h:224
void update_history()
Add a new row to the history, reflecting the current state.
Definition update_history.C:64
~FITSArchive()
Destructor.
Definition FITSArchive.C:111
Reference::To< const Predictor > hdr_model
The polyco parsed from the PSRFITS file.
Definition FITSArchive.h:242
void copy(const Archive &archive)
Copy all of the class attributes and the selected Integration data.
Definition FITSArchive.C:155
void unload_Integration(fitsfile *, int row, const Integration *) const
A function to write an integration to a row in a FITS file on disk.
Definition unload_Integration.C:35
void unload_integrations(fitsfile *) const
Unload Integration data to the SUBINT HDU of the specified FITS file.
Definition unload_integrations.C:26
void clean_Pointing_columns(fitsfile *) const
Delete Pointing-related columns, if not needed.
Definition clean_Pointing_columns.C:13
virtual void load_header(const char *filename)
Load the FITS header information from filename.
Definition FITSArchive.C:198
double predicted_phase
Extra polyco information stored in POLYCO HDU.
Definition FITSArchive.h:239
void load_state(fitsfile *)
Definition load_integration_state.C:284
bool scale_cross_products
Double cross coherence term.
Definition FITSArchive.h:230
void unload_sk_integrations(fitsfile *) const
Unload Spectral Kurtosis Integration data to the SPECKURT HDU.
Definition unload_SpectralKurtosis.C:16
int get_last_pointing_column(fitsfile *fptr) const
Get the column past which to write/read additional Pointing::Info.
Definition add_Pointing_columns.C:14
const FITSArchive & operator=(const FITSArchive &archive)
Assignment operator.
Definition FITSArchive.C:132
FITSArchive()
Default constructor.
Definition FITSArchive.C:86
virtual void unload_file(const char *filename) const
Unload the FITSArchive (header and Integration data) to filename.
Definition FITSArchive.C:836
double chanbw
Channel bandwidth.
Definition FITSArchive.h:227
void set_search_mode()
Indicate the FITSArchive contains search mode data.
Definition FITSArchive.h:174
void load_Plasma(fitsfile *, int row, Integration *)
Definition load_Plasma.C:17
double get_offs_sub(unsigned int isub) const
Get the offs_sub value (only present in fits files)
Definition FITSArchive.C:1232
Stores PSRFITS header extensions.
Definition FITSHdrExtension.h:21
Stores PSRFITS SUBINT header parameters.
Definition FITSSUBHdrExtension.h:24
Flux Calibrator Extension.
Definition FluxCalibratorExtension.h:24
International Terrestrial Reference Frame Extension.
Definition ITRFExtension.h:22
Array of Profiles integrated over the same time interval.
Definition Integration.h:37
Stores pulsar parameters as uninterpreted text.
Definition ObsDescription.h:19
Observation Information Extension.
Definition ObsExtension.h:24
Instrumental passband (or bandpass)
Definition Passband.h:20
Telescope pointing parameters recorded during the observation.
Definition Pointing.h:22
Stores PolnCalibrator parameters in an Archive instance.
Definition PolnCalibratorExtension.h:23
Loads and unloads Profile vector from PSRFITS archives.
Definition ProfileColumn.h:23
Contains information about the receiver and receiver platform.
Definition Receiver.h:23
Spectral Kurtosis Staticstics calculated during observation.
Definition SpectralKurtosis.h:20
Stores Parkes Wideband Correlator parameters.
Definition WidebandCorrelator.h:22
Stores Parkes Wideband Correlator parameters.
Definition WidebandCorrelator.h:22
Defines the PSRCHIVE library.
Definition CalSource.h:17

Generated using doxygen 1.14.0