github.com/astrogo/fitsio@v0.3.0/common_test.go (about)

     1  // Copyright 2015 The astrogo Authors.  All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package fitsio
     6  
     7  type any interface{}
     8  
     9  var g_tables = []struct {
    10  	fname string
    11  	hdus  []HDU
    12  	tuple [][][]any
    13  	maps  []map[string]any
    14  	types []interface{}
    15  }{
    16  	{
    17  		fname: "testdata/swp06542llg.fits",
    18  		hdus: []HDU{
    19  			&primaryHDU{imageHDU{
    20  				hdr: *newHeader(
    21  					[]Card{
    22  						{
    23  							Name:    "SIMPLE",
    24  							Value:   true,
    25  							Comment: "Standard FITS format",
    26  						},
    27  						{
    28  							Name:    "BITPIX",
    29  							Value:   8,
    30  							Comment: "",
    31  						},
    32  						{
    33  							Name:    "NAXIS",
    34  							Value:   0,
    35  							Comment: "no data in main file",
    36  						},
    37  						{
    38  							Name:    "EXTEND",
    39  							Value:   true,
    40  							Comment: "Extensions may exist",
    41  						},
    42  						{
    43  							Name:    "FILENAME",
    44  							Value:   "swp06542llg",
    45  							Comment: "original name of input file",
    46  						},
    47  						{
    48  							Name:    "TELESCOP",
    49  							Value:   "IUE",
    50  							Comment: "International Ultraviolet Explorer",
    51  						},
    52  						{
    53  							Name:    "ORIGIN",
    54  							Value:   "GODDARD",
    55  							Comment: "Tape writing location",
    56  						},
    57  						{
    58  							Name:    "CAMERA",
    59  							Value:   3,
    60  							Comment: "IUE camera number",
    61  						},
    62  						{
    63  							Name:    "IMAGE",
    64  							Value:   6542,
    65  							Comment: "IUE image sequence number",
    66  						},
    67  						{
    68  							Name:    "APERTURE",
    69  							Value:   "",
    70  							Comment: "Aperture",
    71  						},
    72  						{
    73  							Name:    "DISPERSN",
    74  							Value:   "LOW",
    75  							Comment: "IUE spectrograph dispersion",
    76  						},
    77  						{
    78  							Name:    "DATE-OBS",
    79  							Value:   "nn/nn/nn",
    80  							Comment: "Observation date (dd/mm/yy)",
    81  						},
    82  						{
    83  							Name:    "DATE-PRO",
    84  							Value:   "nn/nn/nn",
    85  							Comment: "Processing date (dd/mm/yy)",
    86  						},
    87  						{
    88  							Name:    "DATE",
    89  							Value:   "18-Feb-1993",
    90  							Comment: "Date file was written (dd/mm/yy)",
    91  						},
    92  						{
    93  							Name:    "RA",
    94  							Value:   0.0,
    95  							Comment: "Right Ascension in degrees",
    96  						},
    97  						{
    98  							Name:    "DEC",
    99  							Value:   0.0,
   100  							Comment: "Declination in degrees",
   101  						},
   102  						{
   103  							Name:    "EQUINOX",
   104  							Value:   1950.0,
   105  							Comment: "Epoch for coordinates (years)",
   106  						},
   107  						{
   108  							Name:    "THDA-RES",
   109  							Value:   0.0,
   110  							Comment: "THDA at time of read",
   111  						},
   112  						{
   113  							Name:    "THDA-SPE",
   114  							Value:   0.0,
   115  							Comment: "THDA at end of exposure",
   116  						},
   117  					},
   118  					IMAGE_HDU,
   119  					8,
   120  					[]int{},
   121  				),
   122  			}},
   123  			&Table{
   124  				hdr: *newHeader(
   125  					[]Card{
   126  						{
   127  							Name:    "XTENSION",
   128  							Value:   "BINTABLE",
   129  							Comment: "Extension type",
   130  						},
   131  						{
   132  							Name:    "BITPIX",
   133  							Value:   8,
   134  							Comment: "binary data",
   135  						},
   136  						{
   137  							Name:    "NAXIS",
   138  							Value:   2,
   139  							Comment: "Number of Axes",
   140  						},
   141  						{
   142  							Name:    "NAXIS1",
   143  							Value:   7532,
   144  							Comment: "width of table in bytes",
   145  						},
   146  						{
   147  							Name:    "NAXIS2",
   148  							Value:   1,
   149  							Comment: "Number of entries in table",
   150  						},
   151  						{
   152  							Name:    "PCOUNT",
   153  							Value:   0,
   154  							Comment: "Number of parameters/group",
   155  						},
   156  						{
   157  							Name:    "GCOUNT",
   158  							Value:   1,
   159  							Comment: "Number of groups",
   160  						},
   161  						{
   162  							Name:    "TFIELDS",
   163  							Value:   9,
   164  							Comment: "Number of fields in each row",
   165  						},
   166  						{
   167  							Name:    "EXTNAME",
   168  							Value:   "IUE MELO",
   169  							Comment: "name of table (?)",
   170  						},
   171  						{
   172  							Name:    "TFORM1",
   173  							Value:   "1I",
   174  							Comment: "Count and data type of field 1",
   175  						},
   176  						{
   177  							Name:    "TTYPE1",
   178  							Value:   "ORDER",
   179  							Comment: "spectral order (low dispersion = 1)",
   180  						},
   181  						{
   182  							Name:    "TUNIT1",
   183  							Value:   "",
   184  							Comment: "unitless",
   185  						},
   186  						{
   187  							Name:    "TFORM2",
   188  							Value:   "1I",
   189  							Comment: "field 2 has one 2-byte integer",
   190  						},
   191  						{
   192  							Name:    "TTYPE2",
   193  							Value:   "NPTS",
   194  							Comment: "number of non-zero points in each vector",
   195  						},
   196  						{
   197  							Name:    "TUNIT2",
   198  							Value:   "",
   199  							Comment: "unitless",
   200  						},
   201  						{
   202  							Name:    "TFORM3",
   203  							Value:   "1E",
   204  							Comment: "Count and data type of field 3",
   205  						},
   206  						{
   207  							Name:    "TTYPE3",
   208  							Value:   "LAMBDA",
   209  							Comment: "3rd field is starting wavelength",
   210  						},
   211  						{
   212  							Name:    "TUNIT3",
   213  							Value:   "ANGSTROM",
   214  							Comment: "unit is angstrom",
   215  						},
   216  						{
   217  							Name:    "TFORM4",
   218  							Value:   "1E",
   219  							Comment: "Count and Type of 4th field",
   220  						},
   221  						{
   222  							Name:    "TTYPE4",
   223  							Value:   "DELTAW",
   224  							Comment: "4th field is wavelength increment",
   225  						},
   226  						{
   227  							Name:    "TUNIT4",
   228  							Value:   "ANGSTROM",
   229  							Comment: "unit is angstrom",
   230  						},
   231  						{
   232  							Name:    "TFORM5",
   233  							Value:   "376E",
   234  							Comment: "Count and Type of 5th field",
   235  						},
   236  						{
   237  							Name:    "TTYPE5",
   238  							Value:   "GROSS",
   239  							Comment: "5th field is gross flux array",
   240  						},
   241  						{
   242  							Name:    "TUNIT5",
   243  							Value:   "FN",
   244  							Comment: "unit is IUE FN",
   245  						},
   246  						{
   247  							Name:    "TFORM6",
   248  							Value:   "376E",
   249  							Comment: "Count and Type of 6th field",
   250  						},
   251  						{
   252  							Name:    "TTYPE6",
   253  							Value:   "BACK",
   254  							Comment: "6th field is background flux array",
   255  						},
   256  						{
   257  							Name:    "TUNIT6",
   258  							Value:   "FN",
   259  							Comment: "unit is IUE FN",
   260  						},
   261  						{
   262  							Name:    "TFORM7",
   263  							Value:   "376E",
   264  							Comment: "Count and Type of 7th field",
   265  						},
   266  						{
   267  							Name:    "TTYPE7",
   268  							Value:   "NET",
   269  							Comment: "7th field is net flux array",
   270  						},
   271  						{
   272  							Name:    "TUNIT7",
   273  							Value:   "ERGS",
   274  							Comment: "unit is IUE FN",
   275  						},
   276  						{
   277  							Name:    "TFORM8",
   278  							Value:   "376E",
   279  							Comment: "Count and Type of 8th field",
   280  						},
   281  						{
   282  							Name:    "TTYPE8",
   283  							Value:   "ABNET",
   284  							Comment: "absolutely calibrated net flux array",
   285  						},
   286  						{
   287  							Name:    "TUNIT8",
   288  							Value:   "ERGS",
   289  							Comment: "unit is ergs/cm2/sec/angstrom",
   290  						},
   291  						{
   292  							Name:    "TFORM9",
   293  							Value:   "376E",
   294  							Comment: "Count and Type of 9th field",
   295  						},
   296  						{
   297  							Name:    "TTYPE9",
   298  							Value:   "EPSILONS",
   299  							Comment: "9th field is epsilons",
   300  						},
   301  						{
   302  							Name:    "TUNIT9",
   303  							Value:   "",
   304  							Comment: "unitless",
   305  						},
   306  					},
   307  					BINARY_TBL,
   308  					8,
   309  					[]int{},
   310  				),
   311  			},
   312  		},
   313  		tuple: [][][]any{
   314  			nil,
   315  			{
   316  				// row-0
   317  				{
   318  					int16(1),
   319  					int16(376), float32(1000.8), float32(2.6515958), g_data_gross,
   320  					g_data_back, g_data_net, g_data_abnet,
   321  					g_data_epsilons,
   322  				},
   323  			},
   324  		},
   325  		maps: []map[string]any{
   326  			{},
   327  			{
   328  				"ORDER":    int16(1),
   329  				"NPTS":     int16(376),
   330  				"LAMBDA":   float32(1000.8),
   331  				"DELTAW":   float32(2.6515958),
   332  				"GROSS":    g_data_gross,
   333  				"BACK":     g_data_back,
   334  				"NET":      g_data_net,
   335  				"ABNET":    g_data_abnet,
   336  				"EPSILONS": g_data_epsilons,
   337  			},
   338  		},
   339  		types: []interface{}{
   340  			nil,
   341  			struct {
   342  				Order    int16        `fits:"ORDER"`
   343  				Npts     int16        `fits:"NPTS"`
   344  				DeltaW   float32      `fits:"DELTAW"` // switch order of deltaw w/ lambda
   345  				Lambda   float32      `fits:"LAMBDA"`
   346  				Gross    [376]float32 `fits:"GROSS"`
   347  				Back     [376]float32 `fits:"BACK"`
   348  				Net      [376]float32 `fits:"NET"`
   349  				ABNET    [376]float32 // test w/o struct-tag
   350  				EPSILONS [376]float32 // ditto
   351  			}{},
   352  		},
   353  	},
   354  	{
   355  		fname: "testdata/file001.fits",
   356  		hdus: []HDU{
   357  			&primaryHDU{imageHDU{
   358  				hdr: *newHeader(
   359  					[]Card{
   360  						{
   361  							Name:    "SIMPLE",
   362  							Value:   true,
   363  							Comment: "STANDARD FITS FORMAT (REV OCT 1981)",
   364  						},
   365  						{
   366  							Name:    "BITPIX",
   367  							Value:   8,
   368  							Comment: "CHARACTER INFORMATION",
   369  						},
   370  						{
   371  							Name:    "NAXIS",
   372  							Value:   0,
   373  							Comment: "NO IMAGE DATA ARRAY PRESENT",
   374  						},
   375  						{
   376  							Name:    "EXTEND",
   377  							Value:   true,
   378  							Comment: "THERE IS AN EXTENSION",
   379  						},
   380  						{
   381  							Name:    "ORIGIN",
   382  							Value:   "ESO",
   383  							Comment: "EUROPEAN SOUTHERN OBSERVATORY",
   384  						},
   385  						{
   386  							Name:    "OBJECT",
   387  							Value:   "SNG - CAT.",
   388  							Comment: "THE IDENTIFIER",
   389  						},
   390  						{
   391  							Name:    "DATE",
   392  							Value:   "27/ 5/84",
   393  							Comment: "DATE THIS TAPE WRITTEN DD/MM/YY",
   394  						},
   395  					},
   396  					IMAGE_HDU,
   397  					8,
   398  					[]int{},
   399  				),
   400  			}},
   401  			&Table{
   402  				hdr: *newHeader(
   403  					[]Card{
   404  						{
   405  							Name:    "XTENSION",
   406  							Value:   "TABLE",
   407  							Comment: "TABLE EXTENSION",
   408  						},
   409  						{
   410  							Name:    "BITPIX",
   411  							Value:   8,
   412  							Comment: "CHARACTER INFORMATION",
   413  						},
   414  						{
   415  							Name:    "NAXIS",
   416  							Value:   2,
   417  							Comment: "SIMPLE 2-D MATRIX",
   418  						},
   419  						{
   420  							Name:    "NAXIS1",
   421  							Value:   98,
   422  							Comment: "NO. OF CHARACTERS PER ROW",
   423  						},
   424  						{
   425  							Name:    "NAXIS2",
   426  							Value:   10,
   427  							Comment: "NO. OF ROWS",
   428  						},
   429  						{
   430  							Name:    "PCOUNT",
   431  							Value:   0,
   432  							Comment: "RANDOM PARAMETER COUNT",
   433  						},
   434  						{
   435  							Name:    "GCOUNT",
   436  							Value:   1,
   437  							Comment: "GROUP COUNT",
   438  						},
   439  						{
   440  							Name:    "TFIELDS",
   441  							Value:   7,
   442  							Comment: "NO. OF FIELDS PER ROW",
   443  						},
   444  						{
   445  							Name:    "TTYPE1",
   446  							Value:   "IDEN.",
   447  							Comment: "NAME OF ROW",
   448  						},
   449  						{
   450  							Name:    "TBCOL1",
   451  							Value:   1,
   452  							Comment: "BEGINNING COLUMN OF THE FIELD",
   453  						},
   454  						{
   455  							Name:    "TFORM1",
   456  							Value:   "E14.7",
   457  							Comment: "FORMAT",
   458  						},
   459  						{
   460  							Name:    "TNULL1",
   461  							Value:   "",
   462  							Comment: "NULL VALUE",
   463  						},
   464  						{
   465  							Name:    "TTYPE2",
   466  							Value:   "RA",
   467  							Comment: "NAME OF ROW",
   468  						},
   469  						{
   470  							Name:    "TBCOL2",
   471  							Value:   15,
   472  							Comment: "BEGINNING COLUMN OF THE FIELD",
   473  						},
   474  						{
   475  							Name:    "TFORM2",
   476  							Value:   "E14.7",
   477  							Comment: "FORMAT",
   478  						},
   479  						{
   480  							Name:    "TNULL2",
   481  							Value:   "",
   482  							Comment: "NULL VALUE",
   483  						},
   484  						{
   485  							Name:    "TTYPE3",
   486  							Value:   "DEC",
   487  							Comment: "NAME OF ROW",
   488  						},
   489  						{
   490  							Name:    "TBCOL3",
   491  							Value:   29,
   492  							Comment: "BEGINNING COLUMN OF THE FIELD",
   493  						},
   494  						{
   495  							Name:    "TFORM3",
   496  							Value:   "E14.7",
   497  							Comment: "FORMAT",
   498  						},
   499  						{
   500  							Name:    "TNULL3",
   501  							Value:   "",
   502  							Comment: "NULL VALUE",
   503  						},
   504  						{
   505  							Name:    "TTYPE4",
   506  							Value:   "TYPE",
   507  							Comment: "NAME OF ROW",
   508  						},
   509  						{
   510  							Name:    "TBCOL4",
   511  							Value:   43,
   512  							Comment: "BEGINNING COLUMN OF THE FIELD",
   513  						},
   514  						{
   515  							Name:    "TFORM4",
   516  							Value:   "E14.7",
   517  							Comment: "FORMAT",
   518  						},
   519  						{
   520  							Name:    "TNULL4",
   521  							Value:   "",
   522  							Comment: "NULL VALUE",
   523  						},
   524  						{
   525  							Name:    "TTYPE5",
   526  							Value:   "D25",
   527  							Comment: "NAME OF ROW",
   528  						},
   529  						{
   530  							Name:    "TBCOL5",
   531  							Value:   57,
   532  							Comment: "BEGINNING COLUMN OF THE FIELD",
   533  						},
   534  						{
   535  							Name:    "TFORM5",
   536  							Value:   "E14.7",
   537  							Comment: "FORMAT",
   538  						},
   539  						{
   540  							Name:    "TNULL5",
   541  							Value:   "",
   542  							Comment: "NULL VALUE",
   543  						},
   544  						{
   545  							Name:    "TTYPE6",
   546  							Value:   "INCL.",
   547  							Comment: "NAME OF ROW",
   548  						},
   549  						{
   550  							Name:    "TBCOL6",
   551  							Value:   71,
   552  							Comment: "BEGINNING COLUMN OF THE FIELD",
   553  						},
   554  						{
   555  							Name:    "TFORM6",
   556  							Value:   "E14.7",
   557  							Comment: "FORMAT",
   558  						},
   559  						{
   560  							Name:    "TNULL6",
   561  							Value:   "",
   562  							Comment: "NULL VALUE",
   563  						},
   564  						{
   565  							Name:    "TTYPE7",
   566  							Value:   "RV",
   567  							Comment: "NAME OF ROW",
   568  						},
   569  						{
   570  							Name:    "TBCOL7",
   571  							Value:   85,
   572  							Comment: "BEGINNING COLUMN OF THE FIELD",
   573  						},
   574  						{
   575  							Name:    "TFORM7",
   576  							Value:   "E14.7",
   577  							Comment: "FORMAT",
   578  						},
   579  						{
   580  							Name:    "TNULL7",
   581  							Value:   "",
   582  							Comment: "NULL VALUE",
   583  						},
   584  					},
   585  					ASCII_TBL,
   586  					8,
   587  					[]int{98, 10},
   588  				),
   589  			},
   590  		},
   591  		tuple: [][][]any{
   592  			nil,
   593  			{
   594  				{
   595  					-.1116590E+04, .1128000E+02, .5956670E+02, .3000000E+01,
   596  					.7789999E+02, .1200000E+02, .0000000E+00,
   597  				},
   598  				{
   599  					-.1109540E+04, .1115667E+02, .5430000E+02, .3000000E+01,
   600  					.4000000E+02, .1200000E+02, .0000000E+00,
   601  				},
   602  				{
   603  					-.3402850E+03, .3668300E+01, -.2801670E+02, .3000000E+01,
   604  					.7000000E+02, .3000000E+02, .4060000E+04,
   605  				},
   606  				{
   607  					.5360000E+03, .1393330E+01, .3445000E+02, .3500000E+01,
   608  					.2229000E+03, .5990000E+02, .5160000E+04,
   609  				},
   610  				{
   611  					.3177000E+04, .1023000E+02, .2136670E+02, .3000000E+01,
   612  					.9960001E+02, .3600000E+02, .1220000E+04,
   613  				},
   614  				{
   615  					.3627000E+04, .1129333E+02, .1326670E+02, .3200000E+01,
   616  					.5226000E+03, .5990000E+02, .6970000E+03,
   617  				},
   618  				{
   619  					.3756000E+04, .1156667E+02, .5456670E+02, .4200000E+01,
   620  					.2619000E+03, .5670000E+02, .1071000E+04,
   621  				},
   622  				{
   623  					.5457000E+04, .1402500E+02, .5458300E+02, .6200000E+01,
   624  					.1614900E+04, .1220000E+02, .2660000E+03,
   625  				},
   626  				{
   627  					.7292000E+04, .2243500E+02, .3005000E+02, .9500000E+01,
   628  					.1283000E+03, .3560000E+02, .9340000E+03,
   629  				},
   630  				{
   631  					.1423700E+05, .1336330E+02, -.2086700E+02, .3500000E+01,
   632  					.1170000E+03, .4220000E+02, .0000000E+00,
   633  				},
   634  			},
   635  		},
   636  		maps: []map[string]any{
   637  			{},
   638  			{
   639  				"IDEN.": -1116.59,
   640  				"RA":    11.28,
   641  				"DEC":   59.5667,
   642  				"TYPE":  float64(3),
   643  				"D25":   77.89999,
   644  				"INCL.": float64(12),
   645  				"RV":    float64(0),
   646  				//"NOT-THERE": 0.0,
   647  			},
   648  		},
   649  		types: []interface{}{
   650  			nil,
   651  			struct {
   652  				Iden float64 `fits:"IDEN."`
   653  				Ra   float64 `fits:"RA"`
   654  				Dec  float64 `fits:"DEC"`
   655  				Type float64 `fits:"TYPE"`
   656  				D25  float64 `fits:"D25"`
   657  				Incl float64 `fits:"INCL."`
   658  				RV   float64 // test w/o struct-tag
   659  				//X_NotThere float64 `fits:"NOT_THERE"`
   660  			}{},
   661  		},
   662  	},
   663  }