github.com/astrogo/fitsio@v0.3.0/README.md (about)

     1  fitsio
     2  ======
     3  
     4  [![GitHub release](https://img.shields.io/github/release/astrogo/fitsio.svg)](https://github.com/astrogo/fitsio/releases)
     5  [![CI](https://github.com/astrogo/fitsio/workflows/CI/badge.svg)](https://github.com/astrogo/fitsio/actions)
     6  [![codecov](https://codecov.io/gh/astrogo/fitsio/branch/master/graph/badge.svg)](https://codecov.io/gh/astrogo/fitsio)
     7  [![GoDoc](https://godoc.org/github.com/astrogo/fitsio?status.svg)](https://godoc.org/github.com/astrogo/fitsio)
     8  
     9  `fitsio` is a pure-Go package to read and write `FITS` files.
    10  
    11  ## Installation
    12  
    13  ```sh
    14  $ go get github.com/astrogo/fitsio
    15  ```
    16  
    17  ## Documentation
    18  
    19  https://godoc.org/github.com/astrogo/fitsio
    20  
    21  ## Contribute
    22  
    23  `astrogo/fitsio` is released under `BSD-3`.
    24  Please send a pull request to [astrogo/license](https://github.com/astrogo/license),
    25  adding yourself to the `AUTHORS` and/or `CONTRIBUTORS` file.
    26  
    27  ## Example
    28  
    29  ```go
    30  import fits "github.com/astrogo/fitsio"
    31  
    32  func dumpFitsTable(fname string) {
    33      r, err := os.Open(fname)
    34      if err != nil {
    35          panic(err)
    36      }
    37      defer r.Close()
    38  	f, err := fits.Open(r)
    39  	if err != nil {
    40  		panic(err)
    41  	}
    42  	defer f.Close()
    43  
    44  	// get the second HDU
    45  	table := f.HDU(1).(*fits.Table)
    46  	nrows := table.NumRows()
    47      rows, err := table.Read(0, nrows)
    48      if err != nil {
    49          panic(err)
    50      }
    51      defer rows.Close()
    52  	for rows.Next() {
    53          var x, y float64
    54          var id int64
    55          err = rows.Scan(&id, &x, &y)
    56          if err != nil {
    57              panic(err)
    58          }
    59          fmt.Printf(">>> %v %v %v\n", id, x, y)
    60  	}
    61      err = rows.Err()
    62      if err != nil { panic(err) }
    63      
    64      // using a struct
    65      xx := struct{
    66          Id int     `fits:"ID"`
    67          X  float64 `fits:"x"`
    68          Y  float64 `fits:"y"`
    69      }{}
    70      // using a map
    71      yy := make(map[string]interface{})
    72      
    73      rows, err = table.Read(0, nrows)
    74      if err != nil {
    75          panic(err)
    76      }
    77      defer rows.Close()
    78  	for rows.Next() {
    79          err = rows.Scan(&xx)
    80          if err != nil {
    81              panic(err)
    82          }
    83          fmt.Printf(">>> %v\n", xx)
    84  
    85          err = rows.Scan(&yy)
    86          if err != nil {
    87              panic(err)
    88          }
    89          fmt.Printf(">>> %v\n", yy)
    90  	}
    91      err = rows.Err()
    92      if err != nil { panic(err) }
    93      
    94  }
    95  
    96  ```
    97  
    98  ## TODO
    99  
   100  - ``[DONE]`` add support for writing tables from structs
   101  - ``[DONE]`` add support for writing tables from maps
   102  - ``[DONE]`` add support for variable length array
   103  - provide benchmarks _wrt_ ``CFITSIO``
   104  - add support for `TUNITn`
   105  - add support for `TSCALn`
   106  - add suport for `TDIMn`
   107  - add support for (fast, low-level) copy of `FITS` tables
   108