Difference between revisions of "EOVSA Data products"

From EOVSA Wiki
Jump to: navigation, search
(All-day TP spectrum)
(Synoptic 6-band Images)
 
(20 intermediate revisions by 2 users not shown)
Line 83: Line 83:
 
==Reading level 2 data==
 
==Reading level 2 data==
 
===Software===
 
===Software===
[https://github.com/suncasa/suncasa suncasa]
+
We have developed a package for EOVSA data processing and analysis:
 +
[https://github.com/suncasa/suncasa SunCASA] A wrapper around [https://casa.nrao.edu/ CASA (the Common Astronomy Software Applications package)] for synthesis imaging and visualizing solar spectral imaging data. CASA is one of the leading software tools for "supporting the data post-processing needs of the next generation of radio astronomical telescopes such as ALMA and VLA", an international effort led by the [https://public.nrao.edu/ National Radio Astronomy Observatory]. The current version of CASA uses Python (2.7) interface. More information about CASA can be found on [https://casa.nrao.edu/ NRAO's CASA website ]. Note, CASA is available ONLY on UNIX-BASED PLATFORMS (and therefore, so is SunCASA). We are developing a new version of SunCASA based on CASA 6 (which offers a modular approach) so that users have the flexibility to build CASA tools and tasks in their Python environment.
 +
 
 +
Please [http://www.ovsa.njit.edu/wiki/index.php/SunCASA_Installation follow this link] for details regarding the installation of SunCASA on your own machine (only available on Unix-bases OS). This will take you to another page.
  
 
===All-day TP spectrum===
 
===All-day TP spectrum===
Line 91: Line 94:
  
 
<pre style="background-color: #FCEBD9;">
 
<pre style="background-color: #FCEBD9;">
from astropy.io import fits
+
from suncasa.eovsa import eovsa_dspec as ds
import astropy.table
+
 
from astropy.time import Time
 
from astropy.time import Time
import matplotlib.pyplot as plt
+
from matplotlib.colors import LogNorm
import matplotlib.colors as colors
+
## Read EOVSA Dynamic Spectrum FITS file <filename>
from matplotlib.dates import DateFormatter
+
filename = 'EOVSA_TPall_20170713.fts'
import numpy as np
+
s = ds.get_dspec(filename, doplot=True, cmap='gist_heat', norm=LogNorm(vmax=2.1e3, vmin=40))
from mpl_toolkits.axes_grid1 import make_axes_locatable
+
## To access the data in the spectrogram object, use
 
+
spec = s['spectrogram']                    ## (Array of amplitudes in SFU, of size nfreq,ntimes)
 
+
fghz = s['spectrum_axis']                  ## (Array of frequencies in GHz, of size nfreq)
def get_dspec(filename, doplot=False, vmax=None, vmin=None, norm=None, cmap=None):
+
tim = Time(s['time_axis'], format='mjd')  ## (Array of UT times in astropy.time object, of size ntimes)
    """
+
    Read EOVSA Dynamic Spectrum FITS file <filename> and return a spectrogram dictionary.
+
    Optionally show an overview plot if doplot switch is set.
+
 
+
    Example:
+
    --------
+
    >>> from suncasa.eovsa import eovsa_dspec as ds
+
    >>> from astropy.time import Time
+
    >>> filename='EOVSA_TPall_20170713.fts'
+
    >>> s = ds.dspec(filename,doplot=True,vmax=200)
+
    ## To access the data in the spectrogram object, use
+
    >>> filename='EOVSA_TPall_20170713.fts'
+
    >>> s = ds.dspec(filename,doplot=True,vmax=200)
+
    >>> spec = s['spectrogram']                    ## (Array of amplitudes in SFU, of size nfreq,ntimes)
+
    >>> fghz = s['spectrum_axis']                  ## (Array of frequencies in GHz, of size nfreq)
+
    >>> tim = Time(s['time_axis'], format='mjd')  ## (Array of UT times in astropy.time object, of size ntimes)
+
 
+
    Parameters
+
    ----------
+
    filename :  filename of the spectrogram fits file
+
 
+
    doplot : Boolean, optional
+
 
+
    vmin, vmax : scalar, optional
+
    When using scalar data and no explicit norm, vmin and vmax
+
    define the data range that the colormap covers. By default,
+
    the colormap covers the complete value range of the supplied data.
+
    vmin, vmax are ignored if the norm parameter is used.
+
 
+
    norm : `matplotib.colors.Normalize` or str, optional
+
    The Normalize instance used to scale scalar data to the [0, 1]
+
    range before mapping to colors using cmap. By default, a linear
+
    scaling mapping the lowest value to 0 and the highest to 1 is used.
+
    This parameter is ignored for RGB(A) data.
+
 
+
    cmap : `matplotib.colors.Colormap` or str
+
    A colormap instance or the name of a registered colormap.
+
 
+
    Returns
+
    -------
+
    spectrogram : dictionary
+
    """
+
 
+
    hdulist = fits.open(filename)
+
    spec = hdulist[0].data
+
    fghz = np.array(astropy.table.Table(hdulist[1].data)['sfreq'])
+
    tim = astropy.table.Table(hdulist[2].data)
+
    tim = Time(np.array(tim['mjd']) + np.array(tim['time']) / 24. / 3600 / 1000, format='mjd')
+
    timplt = tim.plot_date
+
    ntim = len(timplt)
+
    nfreq = len(fghz)
+
    if doplot:
+
        fig, ax = plt.subplots(figsize=(9, 4))
+
        # if vmax is None:
+
        #    vmax = np.nanmax(spec)
+
        # if vmin is None:
+
        #    vmin = 0.1
+
        # if norm is None:
+
        #    norm = colors.Normalize(vmax=vmax, vmin=vmin)
+
        pcm = ax.pcolormesh(timplt, fghz, spec, norm=norm, vmax=vmax, vmin=vmin, cmap=cmap)
+
        ax.xaxis_date()
+
        ax.xaxis.set_major_formatter(DateFormatter("%H:%M"))
+
        ax.set_ylim(fghz[0], fghz[-1])
+
        ax.set_xlim(tim[0].plot_date, tim[-1].plot_date)
+
        ax.set_xlabel('Time [UT]')
+
        ax.set_ylabel('Frequency [GHz]')
+
        ax.set_title('EOVSA Dynamic Spectrum for ' + tim[0].datetime.strftime('%Y-%m-%d'))
+
        divider = make_axes_locatable(ax)
+
        cax_spec = divider.append_axes('right', size='1.5%', pad=0.05)
+
        clb_spec = plt.colorbar(pcm, ax=ax, cax=cax_spec, label='Flux density [sfu]')
+
 
+
        def format_coord(x, y):
+
            col = np.argmin(np.absolute(timplt - x))
+
            row = np.argmin(np.absolute(fghz - y))
+
            if col >= 0 and col < ntim and row >= 0 and row < nfreq:
+
                timstr = tim[col].isot
+
                flux = spec[row, col]
+
                return 'time {0}, freq = {1:.3f} GHz, flux = {2:.2f} sfu'.format(timstr, y, flux)
+
            else:
+
                return 'x = {0}, y = {1:.3f}'.format(x, y)
+
 
+
        ax.format_coord = format_coord
+
        fig.tight_layout()
+
        plt.show()
+
    return {'spectrogram': spec, 'spectrum_axis': fghz, 'time_axis': tim.mjd}
+
  
 
</pre>
 
</pre>
  
The code is available in [https://github.com/suncasa/suncasa/blob/master/eovsa/eovsa_dspec.py suncasa].
+
The '''get_dspec''' code is also available in [https://github.com/suncasa/suncasa/blob/master/eovsa/eovsa_dspec.py github].
 
[[File:TPSP.jpeg|center|500px]]
 
[[File:TPSP.jpeg|center|500px]]
'''TODO''': change the example in py section to 13-jul-17. add software installation from zero. add return in the eovsa_dspec. add sunpy/radiospectra after that.
 
  
  
Line 209: Line 125:
 
   ;    spec = s.get(/spectrogram)    (Array of amplitudes in SFU, of size ntimes, nfreq)
 
   ;    spec = s.get(/spectrogram)    (Array of amplitudes in SFU, of size ntimes, nfreq)
 
   ;    fghz = s.get(/spectrum_axis)  (Array of frequencies in GHz, of size nfreq)
 
   ;    fghz = s.get(/spectrum_axis)  (Array of frequencies in GHz, of size nfreq)
   ;    ut = s.set(/time_axis)        (Array of UT times in anytim format, of size ntimes)
+
   ;    ut = s.get(/time_axis)        (Array of UT times in anytim format, of size ntimes)
 
    
 
    
 
   default,doplot,0
 
   default,doplot,0
Line 233: Line 149:
 
[[File:IDL_TPSP.png|center|500px]]
 
[[File:IDL_TPSP.png|center|500px]]
  
===All-day XP spectrum===
+
===Synoptic 6-band Images===
Daily cross power spectrogram (mean flux from baselines with "intermediate" lengths) calibrated in solar flux units are provided at 451 frequencies and 1 s time resolution. XP spectrogram has much better sensitivity to weak bursts.
+
Full disk images at 6 selected frequency bands centered at 1.4, 3.0, 4.5, 6.8, 10.2, and 13.9 GHz are provided once per day, calibrated in brightness temperature. [[File:synoptic_image.jpg| center |400px]]
 +
 
 +
The EOVSA full disk image FITS files are compressed with the RICE algorithm implemented in the FITS file handling module (astropy.io.fits) in Astropy. EOVSA FITS files are very similar to the compressed SDO/AIA FITS files from JSOC. Popular coding languages can easily read compressed images directly.
 +
 
 +
In IDL, you can use read_sdo in the ONTOLOGY package, which should be installed by default in SolarSoftWare (SSW), to read compressed EOVSA FITS files. The following code will read the EOVSA image FITS file in SSWIDL:
  
 
<pre style="background-color: #FCEBD9;">
 
<pre style="background-color: #FCEBD9;">
from suncasa.eovsa import eovsa_dspec as ds
+
read_sdo,'eovsa_20191225.spw11-20.tb.disk.fits',header,data,/UNCOMP_DELETE
## define the dynamic spectrum file.
+
index2map,header,data,eomap
tpfits = 'EOVSA_XPall_20190504.fts'
+
plot_map,eomap
## display the dynamic spectrum.
+
ds.dspec(tpfits,vmax=30)
+
 
</pre>
 
</pre>
  
[[File:XPSP.jpeg|500px| center]]
+
[[File:eovsa_20191225_image_sswidl.jpg| center |250px]]
  
===Synoptic 6-band Images===
+
In Python, you can use SunPy map module to read EOVAS FITS files. SunPy is an open solar data analysis environment for Python. The installation instruction can be found at [https://sunpy.org/ SunPy official website].
Full disk images at 6 selected frequency bands centered at 1.4, 3.0, 4.5, 6.8, 10.2, and 13.9 GHz are provided once per day, calibrated in brightness temperature. [[File:synoptic_image.jpg| center |400px]]
+
<pre style="background-color: #FCEBD9;">
 +
import matplotlib.pyplot as plt
 +
from sunpy import map as smap
 +
eofile='eovsa_20191225.spw11-20.tb.disk.fits'
 +
eomap = smap.Map(eofile)
 +
eomap.plot()
 +
plt.show()
 +
</pre>
 +
[[File:eovsa_20191225_image_py.jpg| center |250px]]
 +
 
 +
Although the Sunpy Python package already exists for doing analysis of solar data, it has a significant learning curve and lacks the generality of the Mapping routines written by Dominic Zarro for the IDL-based Solarsoft (SSW). We provided IDL Mapping routines available in Python that may help those IDL users who have been avoiding learning Python. '''The mapping routines work equally well in both Python 2.7 and Python 3'''.
 +
Get the [http://www.ovsa.njit.edu/wiki/index.php/Mapping_Software Mapping routines]
 +
The following code will read the EOVSA image FITS file in python:
 +
<pre style="background-color: #FCEBD9;">
 +
from mapping.plot_map import plot_map
 +
from mapping.fits2map import fits2map
 +
eofile='eovsa_20191225.spw11-20.tb.disk.fits'
 +
eomap, h = fits2map(eofile,header=True)
 +
plot_map(eomap, grid=15, limb=True,cmap='gray')
 +
</pre>
 +
[[File:eovsa_20191225_image_py_ssw-mapping.jpg| center |250px]]
  
 
===10-min 6-band Images===
 
===10-min 6-band Images===
 
===Event images===
 
===Event images===

Latest revision as of 14:41, 3 July 2020

Welcome to the EOVSA data products documentation. EOVSA observes the full disk of the Sun at all times when the Sun is >10 degrees above the local horizon, which is season dependent and ranges from 7-12 hours duration centered on 20 UT. During January, coverage will be 16-24 UT daily, 7 days/week. Like any radio interferometer, the fundamental measurement for imaging is the correlated amplitude and phase between each pair of antennas, which is called a “complex visibility.” EOVSA’s 13 antennas form 78 such visibilities at any frequency and instant of time, i.e. 78 measurements of the spatial Fourier transform of the solar brightness distribution. EOVSA records these visibilities at 451 science frequency channels each second, in four polarization products, as well as additional total flux measurements from each individual antenna. These data are then processed through a pipeline processing system (the block diagram in Figure 1 shows the data flow in the pipeline). One of the outputs of the pipeline is a visibility database in a widely used open-standard format called a CASA measurement set (or “ms”; CASA is the Common Astronomy Software Applications package used by many modern interferometer arrays). Many different CASA ms’s can be created from the raw visibility data by selecting time ranges, frequencies, integration times, polarizations, and so on.

EOVSA pipeline block diagram/flow chart


We deliver the radio interferometry data on the following three levels:


Level 0 - Raw visibility data from the instrument

As outlined in Figure 1, the real-time pipeline creates raw data products in the left-hand column (labeled Level 0). This includes observations of cosmic sources for phase calibration, and gain and pointing observations required for total power calibration.

raw full resolution visibility database

EOVSA full resolution visibility database can be retrieved from the following page:

http://www.ovsa.njit.edu/fits//IDB/

raw 1-min averaged visibility database

EOVSA 1-min averaged visibility database can be retrieved from the following page:

http://www.ovsa.njit.edu/fits/UDB/

Level 1 - calibrated visibility data

After applying calibration and other preliminary processing to level 0 data, we create the CASA ms’s in the second column in Figure 1 ( labeled Level 1). These visibility data have all of the required content to produce Level 2 images and spectrogram data in standard FITS format. We provide a set of standard ms’s for each day (red boxes in Figure 1), for use by researchers who wish to start with visibility data.

CASA Event ms

EOVSA event data products in boxes with dashed outlines in Figure 1 will typically be available within 30 days after they are taken.

Link: TBD.

CASA 1-min averaged ms

EOVSA 1-min averaged visibility data in CASA ms format can be retrieved from the following page:

http://www.ovsa.njit.edu/fits/UDBms_slfcaled

Level 2 - Images and spectrogram data in standard FITS format

Most users, however, will prefer to work with spectrogram (frequency-time) and image data, which are also outputs of the pipeline system shown in Figure 1 (orange boxes). Spectrograms are provided as standard FITS tables containing the frequency list, list of times, and data in both total power and a sum of amplitudes over intermediate-length baselines (cross power). Likewise, image data products are in FITS format with standard keywords and are converted into the Helioprojective Cartesian coordinate system compatible with the World Coordinate System (WCS) convention, along with correct registration for the spatial, spectral, and temporal coordinates. Both the spectrogram and image data products are calibrated properly and have physical radio intensity units (sfu for spectrograms and brightness temperature for radio images).

List of Level 2 data products

category data product name
Dynamic Spectrum All-day TP spectrum EOVSA_TPall_yyyymmdd.fts
All-day XP spectrum EOVSA_XPall_yyyymmdd.fts
Image
Synoptic 1.4 GHz image eovsa_yyyymmdd.spw00-01.tb.disk.fits
Synoptic 3.0 GHz image eovsa_yyyymmdd.spw02-05.tb.disk.fits
Synoptic 4.5 GHz image eovsa_yyyymmdd.spw06-10.tb.disk.fits
Synoptic 6.8 GHz image eovsa_yyyymmdd.spw11-20.tb.disk.fits
Synoptic 10.2 GHz image eovsa_yyyymmdd.spw21-30.tb.disk.fits
Synoptic 13.9 GHz image eovsa_yyyymmdd.spw31-43.tb.disk.fits

Getting level 2 data

Eovsa browser.jpg

EOVSA Level 2 data products can be retrieved with the following steps:

  • Browse to the date of interest.
  • Click "synoptic fits" button next to the calendar tool.
  • Select the data product based on the names listed in the table above.

Reading level 2 data

Software

We have developed a package for EOVSA data processing and analysis: SunCASA A wrapper around CASA (the Common Astronomy Software Applications package) for synthesis imaging and visualizing solar spectral imaging data. CASA is one of the leading software tools for "supporting the data post-processing needs of the next generation of radio astronomical telescopes such as ALMA and VLA", an international effort led by the National Radio Astronomy Observatory. The current version of CASA uses Python (2.7) interface. More information about CASA can be found on NRAO's CASA website . Note, CASA is available ONLY on UNIX-BASED PLATFORMS (and therefore, so is SunCASA). We are developing a new version of SunCASA based on CASA 6 (which offers a modular approach) so that users have the flexibility to build CASA tools and tasks in their Python environment.

Please follow this link for details regarding the installation of SunCASA on your own machine (only available on Unix-bases OS). This will take you to another page.

All-day TP spectrum

Daily total power full-Sun-integrated spectrogram calibrated in solar flux units are provided at 451 frequencies (134 frequencies prior to 2019 Feb 22) and 1 s time resolution.

To read a spectrogram file in Python using the suncasa library:

from suncasa.eovsa import eovsa_dspec as ds
from astropy.time import Time
from matplotlib.colors import LogNorm
## Read EOVSA Dynamic Spectrum FITS file <filename>
filename = 'EOVSA_TPall_20170713.fts'
s = ds.get_dspec(filename, doplot=True, cmap='gist_heat', norm=LogNorm(vmax=2.1e3, vmin=40))
## To access the data in the spectrogram object, use
spec = s['spectrogram']                    ## (Array of amplitudes in SFU, of size nfreq,ntimes)
fghz = s['spectrum_axis']                  ## (Array of frequencies in GHz, of size nfreq)
tim = Time(s['time_axis'], format='mjd')   ## (Array of UT times in astropy.time object, of size ntimes)

The get_dspec code is also available in github.

TPSP.jpeg


The following code will read the spectrogram file in IDL:

function dspec,filename,doplot=doplot
  ; Read EOVSA Dynamic Spectrum FITS file <filename> and return a spectrogram object.
  ; Optionally show an overview plot if doplot switch is set
  ; 
  ; Usage:
  ;    s = dspec(<filename>)            ; Returns spectrogram object
  ;    s = dspec(<filename>,/doplot)    ; Plots spectrum and returns spectrogram object
  ;
  ; To access the data in the spectrogram object, use
  ;    spec = s.get(/spectrogram)    (Array of amplitudes in SFU, of size ntimes, nfreq)
  ;    fghz = s.get(/spectrum_axis)  (Array of frequencies in GHz, of size nfreq)
  ;    ut = s.get(/time_axis)        (Array of UT times in anytim format, of size ntimes)
  
  default,doplot,0
  spec = mrdfits(filename,0)
  freq = mrdfits(filename,1)
  time = mrdfits(filename,2)
  fghz = freq.sfreq
  ut = anytim(time)
  s = spectrogram(spec,ut,fghz)
  if doplot then begin
    window,/free,xsiz=1024,ysiz=600
    ; Find min and max of data from 5% to 95% of sorted array (eliminates outliers)
    sarr = sort(spec)
    dlim = minmax(spec[sarr[n_elements(sarr)*0.05:n_elements(sarr)*0.95]])
    ; Set drange with margin factor of 2 on low end and 5 on high end
    s.set,drange=dlim*[0.5,5]
    loadct,3
    s.plot,/log,/xsty,/ysty,ytitle='Frequency [GHz]',charsize=1.5
  endif
return,s
end
IDL TPSP.png

Synoptic 6-band Images

Full disk images at 6 selected frequency bands centered at 1.4, 3.0, 4.5, 6.8, 10.2, and 13.9 GHz are provided once per day, calibrated in brightness temperature.
Synoptic image.jpg

The EOVSA full disk image FITS files are compressed with the RICE algorithm implemented in the FITS file handling module (astropy.io.fits) in Astropy. EOVSA FITS files are very similar to the compressed SDO/AIA FITS files from JSOC. Popular coding languages can easily read compressed images directly.

In IDL, you can use read_sdo in the ONTOLOGY package, which should be installed by default in SolarSoftWare (SSW), to read compressed EOVSA FITS files. The following code will read the EOVSA image FITS file in SSWIDL:

read_sdo,'eovsa_20191225.spw11-20.tb.disk.fits',header,data,/UNCOMP_DELETE
index2map,header,data,eomap
plot_map,eomap
Eovsa 20191225 image sswidl.jpg

In Python, you can use SunPy map module to read EOVAS FITS files. SunPy is an open solar data analysis environment for Python. The installation instruction can be found at SunPy official website.

import matplotlib.pyplot as plt
from sunpy import map as smap
eofile='eovsa_20191225.spw11-20.tb.disk.fits'
eomap = smap.Map(eofile)
eomap.plot()
plt.show()
Eovsa 20191225 image py.jpg

Although the Sunpy Python package already exists for doing analysis of solar data, it has a significant learning curve and lacks the generality of the Mapping routines written by Dominic Zarro for the IDL-based Solarsoft (SSW). We provided IDL Mapping routines available in Python that may help those IDL users who have been avoiding learning Python. The mapping routines work equally well in both Python 2.7 and Python 3. Get the Mapping routines The following code will read the EOVSA image FITS file in python:

from mapping.plot_map import plot_map
from mapping.fits2map import fits2map
eofile='eovsa_20191225.spw11-20.tb.disk.fits'
eomap, h = fits2map(eofile,header=True)
plot_map(eomap, grid=15, limb=True,cmap='gray')
Eovsa 20191225 image py ssw-mapping.jpg

10-min 6-band Images

Event images