2017

From EOVSA Wiki
Jump to navigation Jump to search

List of EOVSA Flares with Spectrogram Data

April

Date Time (UT) GOES Class Position Spectrogram STIX Coverage AIA Movie EOVSA Images Comment
2019-04-15 19:31 B4.7
Eovsa.spec.flare id 20190415193100.png
plot data
NA AIA Quicklook Movie
FITS Files

Python code to read plotdata file

from __future__ import print_function
def rd_datfile(file):
    ''' Read EOVSA binary spectrogram file and return a dictionary with times 
        in Julian Date, frequencies in GHz, and cross-power data in sfu.
        
        Return Keys:
          'time'     Numpy array of nt times in JD format
          'fghz'     Numpy array of nf frequencies in GHz
          'data'     Numpy array of size [nf, nt] containing cross-power data
          
        Returns empty dictionary ({}) if file size is not compatible with inferred dimensions
    '''
    import struct
    import numpy as np
    def dims(file):
        # Determine time and frequency dimensions (assumes the file has fewer than 10000 times)
        f = open(file,'rb')
        tmp = f.read(83608)  # max 10000 times and 451 frequencies
        f.close()
        nbytes = len(tmp)
        tdat = np.array(struct.unpack(str(int(nbytes/8))+'d',tmp[:nbytes]))
        nt = np.where(tdat < 2400000.)[0]
        nf = np.where(np.logical_or(tdat[nt[0]:] > 18, tdat[nt[0]:] < 1))[0]
        return nt[0], nf[0]
    nt, nf = dims(file)
    f = open(file,'rb')
    tmp = f.read(nt*8)
    times = struct.unpack(str(nt)+'d',tmp)
    tmp = f.read(nf*8)
    fghz = struct.unpack(str(nf)+'d',tmp)
    tmp = f.read()
    f.close()
    if len(tmp) != nf*nt*4:
        print('File size is incorrect for nt=',nt,'and nf=',nf)
        return {}
    data = np.array(struct.unpack(str(nt*nf)+'f',tmp)).reshape(nf,nt)
    return {'time':times, 'fghz':fghz, 'data':data}

IDL code to read plotdata file

function rd_datfile,file
    ; Read EOVSA binary spectrogram file and return a structure with times 
    ; in Julian Date, frequencies in GHz, and cross-power data in sfu.
    ;    
    ; Return tags:
    ;      'time'     Array of nt times in JD format
    ;      'fghz'     Array of nf frequencies in GHz
    ;      'data'     Array of size [nf, nt] containing cross-power data
    ;
    ;    Returns empty dictionary ({}) if file size is not compatible with inferred dimensions
    openr,/get_lun,lun,file
    tmp = dblarr(10451)
    readu,lun,tmp
    free_lun,lun
    nt = (where(tmp lt 2400000.))[0]
    nf = (where(tmp[nt[0]:*] gt 18 or tmp[nt[0]:*] lt 1))[0]
    times = dblarr(nt)
    fghz = dblarr(nf)
    data = fltarr(nt, nf)
    openr,/get_lun,lun,file
    readu,lun,times
    readu,lun,fghz
    readu,lun,data
    free_lun,lun
    data = create_struct('time',times,'fghz',fghz,'data',transpose(data))
    return, data
    end