next up previous contents
Next: UV tables column codes Up: IRAM Memo 2012-? Preparing Previous: GILDAS Fortran derived type   Contents


GDFV2 header

type :: gildas_header_v2
  sequence
    ! Trailer:
    integer(kind=4) :: ijtyp(3) = 0       !  1  Image Type
    integer(kind=4) :: form    = fmt_r4   !  4  Data format (FMT_xx)
    integer(kind=8) :: ndb     = 0        !  5  Number of blocks
    integer(kind=4) :: nhb     = 2        !  7  Number of header blocks
    integer(kind=4) :: ntb     = 0        !  8  Number of trailing blocks
    integer(kind=4) :: version_gdf = code_version_gdf_current !  9  Data format Version number
    integer(kind=4) :: type_gdf =  code_gdf_image  !  10 code_gdf_image or code_null
    integer(kind=4) :: dim_start = gdf_startdim    !  11  Start offset for DIMENSION, should be odd, >12
    integer(kind=4) :: pad_trail
    ! The maximum value would be 17 to hold up to 8 dimensions.
    !
    ! DIMENSION Section. Caution about alignment...
    integer(kind=4) :: dim_words   = 2*gdf_maxdims+2  ! at s_dim=17  Dimension section length
    integer(kind=4) :: blan_start !! = dim_start + dim_lenth + 2   ! 18  Pointer to next section
    integer(kind=4) :: mdim    = 4        !or > ! 19  Maximum number of dimensions in this data format
    integer(kind=4) :: ndim    = 0        ! 20  Number of dimensions
    integer(kind=index_length) :: dim(gdf_maxdims) = 0     ! 21  Dimensions
    !
    ! BLANKING
    integer(kind=4) :: blan_words = 2     ! Blanking section length
    integer(kind=4) :: extr_start         ! Pointer to next section
    real(kind=4) :: bval = +1.23456e+38   ! Blanking value
    real(kind=4) :: eval = -1.0           ! Tolerance
    !
    ! EXTREMA
    integer(kind=4) :: extr_words = 6    ! Extrema section length
    integer(kind=4) :: coor_start !! = extr_start + extr_words +2     !
    real(kind=4) :: rmin    = 0.0         ! Minimum
    real(kind=4) :: rmax    = 0.0         ! Maximum
    integer(kind=index_length) :: minloc(gdf_maxdims) = 0 ! Pixel of minimum
    integer(kind=index_length) :: maxloc(gdf_maxdims) = 0 ! Pixel of maximum
    !
    ! In data file, minloc and maxloc are not written. Instead, two Integer(8)
    ! mini and maxi indicate the position of the extrema in a rank-1 model of the data.
    !
    ! COORDINATE Section
    integer(kind=4) :: coor_words  = 6*gdf_maxdims   ! at s_coor  Section length
    integer(kind=4) :: desc_start  !! = coord_start + coord_words +2     !
    real(kind=8)    :: convert(3,gdf_maxdims)   !  Ref, Val, Inc for each dimension
    !
    ! DESCRIPTION Section
    integer(kind=4) :: desc_words  = 3*(gdf_maxdims+1) ! at s_desc, Description section length
    integer(kind=4) :: null_start  !! = desc_start + desc_words +2     !
    integer(kind=4) :: ijuni(3)   = 0        ! Data Unit
    integer(kind=4) :: ijcod(3,gdf_maxdims) = 0    ! Axis names
    integer(kind=4) :: pad_desc              ! For Odd gdf_maxdims only
    !
    !
    ! The first block length is thus
    !   s_dim-1 + (2*mdim+4) + (4) + (8) +  (6*mdim+2) + (3*mdim+5)
    ! = s_dim-1 + mdim*(2+6+3) + (4+4+2+5+8)
    ! = s_dim-1 + 11*mdim + 23
    ! With mdim = 7, s_dim=11, this is 110 spaces
    ! With mdim = 8, s_dim=11, this is 121 spaces
    ! MDIM > 8 would NOT fit in one block...
    !
    ! Block 2: Ancillary information
    !
    ! The same logic of Length + Pointer is used there too, although the
    ! length are fixed. Note rounding to even number for the pointer offsets
    ! in order to preserve alignement...
    !
    integer(kind=4) :: posi_start  = 1
    !
    ! POSITION
    integer(kind=4) :: posi_words = 15    ! Position section length: 15 used + 1 padding
    integer(kind=4) :: proj_start         !! = s_posi + 16     ! Pointer to next section
    integer(kind=4) :: ijsou(3) = 0       ! 75  Source name
    integer(kind=4) :: ijsys(3) = 0       ! 71  Coordinate System (moved from Description section)
    real(kind=8) :: ra         = 0.d0     ! 78  Right Ascension
    real(kind=8) :: dec        = 0.d0     ! 80  Declination
    real(kind=8) :: lii        = 0.d0     ! 82  Galactic longitude
    real(kind=8) :: bii        = 0.d0     ! 84           latitude
    real(kind=4) :: epoc       = 0.0      ! 86  Epoch of coordinates
    real(kind=4) :: pad_posi
    !
    ! PROJECTION
    integer(kind=4) :: proj_words = 9     ! Projection length: 9 used + 1 padding
    integer(kind=4) :: spec_start !! = proj_start + 12
    real(kind=8) :: a0      = 0.d0        ! 89  X of projection center
    real(kind=8) :: d0      = 0.d0        ! 91  Y of projection center
    real(kind=8) :: pang    = 0.d0        ! 93  Projection angle
    integer(kind=4) :: ptyp = p_none      ! 88  Projection type (see p_... codes)
    integer(kind=4) :: xaxi = 0           ! 95  X axis
    integer(kind=4) :: yaxi = 0           ! 96  Y axis
    integer(kind=4) :: pad_proj
    !
    ! SPECTROSCOPY
    integer(kind=4) :: spec_words  = 14   ! Spectroscopy length: 14 used
    integer(kind=4) :: reso_start  !! = spec_words + 16
    real(kind=8) :: fres       = 0.d0     !101  Frequency resolution
    real(kind=8) :: fima       = 0.d0     !103  Image frequency
    real(kind=8) :: freq       = 0.d0     !105  Rest Frequency
    real(kind=4) :: vres       = 0.0      !107  Velocity resolution
    real(kind=4) :: voff       = 0.0      !108  Velocity offset
    real(kind=4) :: dopp       = 0.0      !     Doppler factor
    integer(kind=4) :: faxi    = 0        !109  Frequency axis
    integer(kind=4) :: ijlin(3) = 0       ! 98  Line name
    integer(kind=4) :: vtyp    = vel_unk  ! Velocity type (see vel_... codes)
    !
    ! RESOLUTION
    integer(kind=4) :: reso_words = 3     ! Resolution length: 3 used + 1 padding
    integer(kind=4) :: nois_start !! = reso_words + 6
    real(kind=4) :: majo    = 0.0         !111  Major axis
    real(kind=4) :: mino    = 0.0         !112  Minor axis
    real(kind=4) :: posa    = 0.0         !113  Position angle
    real(kind=4) :: pad_reso
    !
    ! NOISE
    integer(kind=4) :: nois_words = 2     ! Noise section length: 2 used
    integer(kind=4) :: astr_start !! = s_nois + 4
    real(kind=4) :: noise   = 0.0         ! 115 Theoretical noise
    real(kind=4) :: rms     = 0.0         ! 116 Actual noise
    !
    ! ASTROMETRY
    integer(kind=4) :: astr_words = 3    ! Proper motion section length: 3 used + 1 padding
    integer(kind=4) :: uvda_start !! = s_astr + 4
    real(kind=4) :: mura     = 0.0        ! 118 along RA, in mas/yr
    real(kind=4) :: mudec    = 0.0        ! 119 along Dec, in mas/yr
    real(kind=4) :: parallax = 0.0        ! 120 in mas
    real(kind=4) :: pad_astr
    ! real(kind=4) :: pepoch   = 2000.0     ! 121 in yrs ?
    !
    ! UV_DATA information
    integer(kind=4) :: uvda_words  = 18+2*code_uvt_last ! Length of section: 18 used + codes
    integer(kind=4) :: void_start        !! = s_uvda + l_uvda + 2
    integer(kind=4) :: version_uv = code_version_uvt_current  ! 1 version number.
    integer(kind=4) :: nchan = 0         ! 2 Number of channels
    integer(kind=8) :: nvisi = 0         ! 3-4 Independent of the transposition status
    integer(kind=4) :: nstokes = 0       ! 5 Number of polarizations
    integer(kind=4) :: natom = 0         ! 6. 3 for real, imaginary, weight. 1 for real.
    real(kind=4)    :: basemin = 0.      ! 7 Minimum Baseline
    real(kind=4)    :: basemax = 0.      ! 8 Maximum Baseline
    integer(kind=4) :: fcol              ! 9 Column of first visibility information
    integer(kind=4) :: lcol              ! 10 Column of last visibility information
    ! The number of information per channel can be obtained by
    !       (lcol-fcol+1)/(nchan*natom)
    ! so this could allow to derive the number of Stokes parameters
    ! Leading data at start of each visibility contains specific information
    integer(kind=4) :: nlead = 7         ! 11 Number of leading informations
    ! Trailing data at end of each visibility may hold additional information
    integer(kind=4) :: ntrail = 0        ! 12 Number of trailing informations
    !
    ! Leading / Trailing information codes have been specified before
    integer(kind=4) :: column_pointer(code_uvt_last) = code_null ! Pointers to columns...
    integer(kind=4) :: column_size(code_uvt_last) = 0  ! Number of columns for each
    ! In the data, we instead have the codes for each column
    ! integer(kind=4) :: column_codes(nlead+ntrail)         ! Column code for each ...
    ! integer(kind=4) :: column_types(nlead+ntrail) /0,1,2/ ! Number of columns for each: 1 real*4, 2 real*8
    ! Leading / Trailing information codes
    !
    integer(kind=4) :: order = 0         ! 13  Stoke/Channel ordering
    integer(kind=4) :: nfreq = 0         ! 14  ! 0 or = nchan*nstokes
    integer(kind=4) :: atoms(4) = 0      ! 18  Atoms description
    !
    real(kind=8), pointer :: freqs(:) => null()     ! (nchan*nstokes) = 0d0
    integer(kind=4), pointer :: stokes(:) => null() ! (nchan*nstokes) or (nstokes) = code_stoke
  end type gildas_header_v2



Gildas manager 2014-07-01