def assignName(scopeChannel,fileSuffix):
    lecroy_fileName="/Volumes/2015 Data/0"+str(date)+"/Scope43/C"+ \
                    str(scopeChannel)+"AC0000"+str(fileSuffix)+".trc"
    lecroy = lc.lecroy_data(lecroy_fileName)
    seg_time = lecroy.get_seg_time()
    segments = lecroy.get_segments()
    return seg_time, segments
Exemplo n.º 2
0
dt_80km = (
    2 * np.sqrt(80 * 80 + (distance / 2) * (distance / 2)) - distance
) / 2.99e5  #time delay of the first skywave for ionospheric reflection height=80km
dt_90km = (
    2 * np.sqrt(90 * 90 + (distance / 2) * (distance / 2)) - distance
) / 2.99e5  #time delay of the first skywave for ionospheric reflection height=90km
print("70km = %r, 80 km = %r, 90 km = %r (in microseconds)" %
      (dt_70km * 1e6, dt_80km * 1e6, dt_90km * 1e6))

#UF 15-38. RS#2
#Plot channel-base current
suffix26 = 0
seg = 1
lecroy_fileName_IIHI = "/Volumes/2015 Data/0"+str(date)+"/Scope26/C1AC0000"+ \
                        str(suffix26)+".trc"
lecroy_IIHI = lc.lecroy_data(lecroy_fileName_IIHI)
IIHI_time = lecroy_IIHI.get_seg_time()
IIHI = lecroy_IIHI.get_segments()
plt.subplot(321)
plt.plot((IIHI_time - 2.4e-3) * 1e6,
         IIHI[seg] * calfactor / 1000,
         color=[0.3, 0.3, 0.3],
         linewidth=2)
plt.xlabel("Time ($\mu$s)")
plt.ylabel("Channel-base Current (kA)")
plt.xlim(0, 500)
plt.ylim(-1, 22.5)
plt.grid()
plt.title("UF 15-38, RS#2, Peak Current = 21.5 kA")

moving_avg = Skywave(38, 2, 26.579535265, 8, x_max)
Exemplo n.º 3
0
suffix41 = 4  #yoko Last digit of the .wvf file name
suffix42 = 4  #lecroy last digit og the .trc file name
suffix43 = 4  #lecroy last digit og the .trc file name
suffix44 = 4  #lecroy last digit og the .trc file name
suffix48 = 4  #lecroy last digit og the .trc file name
suffix50 = 4  #lecroy last digit og the .trc file name
offset = 0.05
duplicate_delay = 0

dt1 = 1
dt2 = 1

#Current (from scope 26)
lecroy_fileName_IIHI = "/Volumes/2015 Data/0" + str(
    date) + "/Scope26/C1AC0000" + str(suffix26) + ".trc"
lecroy_IIHI = lc.lecroy_data(lecroy_fileName_IIHI)
seg_time_IIHI = lecroy_IIHI.get_seg_time()
segments_IIHI = lecroy_IIHI.get_segments()

#Yoko
yoko_fileName = "/Volumes/2015 Data/0" + str(date) + "/Scope41/APD000" + str(
    suffix41)

f = yk.Yoko750File(yoko_fileName)
header = f.get_header()

##LeCroy
#Diode 1
lecroy_fileName_Scope43_APD1 = "/Volumes/2015 Data/0" + str(
    date) + "/Scope43/C1AC0000" + str(suffix43) + ".trc"
lecroy_Scope43_APD1 = lc.lecroy_data(lecroy_fileName_Scope43_APD1)
def Natural_Skywaves(RS_time,date,fs,suffix,Horizontal_distance,x_max):
    ##############
    # Read Files #
    ##############
    #import IRIG file
    if suffix>999:
        lecroy_fileName_DBY_IRIG="/Volumes/DBY Skywaves/C2DBY0"+str(suffix)+".trc"
        lecroy_DBY_IRIG= lc.lecroy_data(lecroy_fileName_DBY_IRIG)
#        seg_time_DBY_IRIG = lecroy_DBY_IRIG.get_seg_time()
        segments_DBY_IRIG = lecroy_DBY_IRIG.get_segments()
    else:
        lecroy_fileName_DBY_IRIG="/Volumes/DBY Skywaves/C2DBY00"+str(suffix)+".trc"
        lecroy_DBY_IRIG= lc.lecroy_data(lecroy_fileName_DBY_IRIG)
#        seg_time_DBY_IRIG = lecroy_DBY_IRIG.get_seg_time()
        segments_DBY_IRIG = lecroy_DBY_IRIG.get_segments()
    
    #read IRIG file and print time stamp
    timestamp,t = IRIGA.IRIGA_signal(segments_DBY_IRIG[0], fs, year=2015)
    print(timestamp)
    
    #import skywaves data
    if suffix>999:
        lecroy_fileName_DBY = "/Volumes/DBY Skywaves/C1DBY0"+str(suffix)+".trc"
        lecroy_DBY= lc.lecroy_data(lecroy_fileName_DBY)
#        seg_time_DBY = lecroy_DBY.get_seg_time()
        segments_DBY = lecroy_DBY.get_segments()
    else:
        lecroy_fileName_DBY="/Volumes/DBY Skywaves/C1DBY00"+str(suffix)+".trc"
        lecroy_DBY= lc.lecroy_data(lecroy_fileName_DBY)
#        seg_time_DBY = lecroy_DBY.get_seg_time()
        segments_DBY = lecroy_DBY.get_segments()
    
    # This is the time reported by NLDN that we are trying to find 
    # in the data file
    NLDN_time=RS_time-(timestamp.second+timestamp.microsecond/1e6)
    
    # The time below should coincide with the rising edge of the ground
    # wave reported by NLDN. However, the NLDN time resolution is in the 
    # order of 100s of ms, so the ground wave might actually be 100 ms
    # to the right or to the left of the GW_time_at_antenna
    GW_time_at_antenna=NLDN_time+Horizontal_distance/2.99e8
    
    plt.plot(t,segments_DBY[0],'r')    
    plt.plot([NLDN_time,NLDN_time],[-1,1])
    plt.plot([GW_time_at_antenna,GW_time_at_antenna],[-1,1])
    plt.plot([GW_time_at_antenna+100e-3,GW_time_at_antenna+100e-3],[-1,1],'--')
    plt.plot([GW_time_at_antenna-100e-3,GW_time_at_antenna-100e-3],[-1,1],'--')
    UTC_time= "%r:%r:%r" %(timestamp.hour,timestamp.minute,\
                           timestamp.second+timestamp.microsecond/1e6)
    plt.xlabel("Time in seconds after "+str(UTC_time))
    plt.title('Complete 200 ms file the ground wave \n'
               'should be around the solid line')
    plt.show()

    t0=GW_time_at_antenna
              
    # Rename variables to filter nmore easily
    skywave=segments_DBY[0];
    time=t;

    return time,skywave,UTC_time,t0,timestamp
Exemplo n.º 5
0
def read_DBY(event,RS_number, RS_time,suffix,x_max,filterwindow): 
    ####################
    # Input Parameters #
    ####################
#    fs=10e6 #sampling rate
#    event=43 #event name
#    RS_number=4 #return stroke number
#    RS_time=23.293418545 #seconds of the XLI time stamp (for trigger lightning) 
    #                        #this time can be found in the triggered lightning reports
#    x_max=500e-6 #xlim max for plotting the skywaves
#    suffix=13
    DBY_distance=209e3 #209 km
    c=2.99e8 #m/s
    
    ##############
    # Read Files #
    ##############
    #import IRIG file
#    if suffix <=9:
    lecroy_fileName_DBY_IRIG = "/Volumes/Promise 12TB RAID5/2015 Data/082715/DBY Data/C2DBY0000"+str(suffix)+".trc"
    lecroy_DBY_IRIG= lc.lecroy_data(lecroy_fileName_DBY_IRIG)
#    seg_time_DBY_IRIG = lecroy_DBY_IRIG.get_seg_time()
    segments_DBY_IRIG = lecroy_DBY_IRIG.get_segments()
    
    #read IRIG file and print time stamp
    timestamp,t = IRIGA.IRIGA_signal(segments_DBY_IRIG[0], fs, year=2015)
    print('time stamp from IRIGA: %s' %timestamp)
    
    #import skywaves data
    lecroy_fileName_DBY = "/Volumes/Promise 12TB RAID5/2015 Data/082715/DBY Data/C1DBY0000"+str(suffix)+".trc"
    lecroy_DBY= lc.lecroy_data(lecroy_fileName_DBY)
#    seg_time_DBY = lecroy_DBY.get_seg_time()
    segments_DBY = lecroy_DBY.get_segments()
#    else:
#        lecroy_fileName_DBY_IRIG = "/Volumes/2015 Data/082715/Merritt Island/C2DBY000"+str(suffix)+".trc"
#        lecroy_DBY_IRIG= lc.lecroy_data(lecroy_fileName_DBY_IRIG)
#    #    seg_time_DBY_IRIG = lecroy_DBY_IRIG.get_seg_time()
#        segments_DBY_IRIG = lecroy_DBY_IRIG.get_segments()
#        
#        #read IRIG file and print time stamp
#        timestamp,t = IRIGA.IRIGA_signal(segments_DBY_IRIG[0], fs, year=2015)
#        print('time stamp from IRIGA: %s' %timestamp)
#        
#        #import skywaves data
#        lecroy_fileName_DBY = "/Volumes/2015 Data/082715/Merritt Island/C1DBY000"+str(suffix)+".trc"
#        lecroy_DBY= lc.lecroy_data(lecroy_fileName_DBY)
#    #    seg_time_DBY = lecroy_DBY.get_seg_time()
#        segments_DBY = lecroy_DBY.get_segments()      
    
    GW_propagation_delay=DBY_distance/c
    
    ##ICLRT XLi + propagation delay
    UTC_time_at_DBY=RS_time+GW_propagation_delay - 80e-6 #The -80us accounts for some data to be displayed before the groundwave
    
    ##This is the time t is referred to, i.e., t[0] is 0 seconds after reference_UTC_seconds 
    reference_UTC_seconds=timestamp.second+timestamp.microsecond/1e6
    UTC_reference_time= "%r:%r:%r" %(timestamp.hour,timestamp.minute,reference_UTC_seconds)
    
    ##Find the index in the t array closest to the UTC_time_at_DBY
    n0=np.argmax(np.abs(1.0/(t+reference_UTC_seconds-UTC_time_at_DBY))) 
    
    ##This will shift the data[n0] to t=0 
    shift_to_0=t[n0]
    UTC_reference_time= "%r:%r:%11.9f" %(timestamp.hour,timestamp.minute,reference_UTC_seconds+shift_to_0)
    
    ##The data window is from n0 to nf, nf being x_max in seconds. Here we have a 500us window if x_max is set to 500e-6
    nf=n0+x_max*fs 
    
    time=t[n0:nf]-shift_to_0
    Ez_data=segments_DBY[0][n0:nf]
    
    print('UTC reference time: %s' %UTC_reference_time)
#    plt.plot(time*1e6,Ez_data)
#    plt.xlabel('UTC time in microseconds after %s' %UTC_reference_time)
#    plt.show()
    
    ##############################################
    ## Resample to 1MHz (Cummer's sampling rate) #
    ##############################################
    #Ez_data=ss.resample(Ez_data,x_max/1e-6)
    #time=ss.resample(time,x_max/1e-6)
    #plt.plot(time,Ez_data)
    #plt.show()
    
    #########################
    # Moving Average Filter #
    #########################
    def movingaverage(interval, window_size):
        window= np.ones(int(window_size))/float(window_size)
        return np.convolve(interval, window, mode='same')
    
    Moving_Average_Ez=movingaverage(Ez_data,filterwindow)

    ####################
    # Measure Risetime #
    ####################
    def noise_analysis(x,y,fs,t0):
    #        plot(x,y)
    #        print("Please click")
    #        xx = ginput(3)
        xx=[0,0.00006,0.000095] #just for this application! 
        sampling_time=1/fs
    
        t0_noise=np.int(xx[0]/sampling_time)-t0/sampling_time #xx[0][0] when ginput is being used
        tf_noise=np.int(xx[1]/sampling_time)-t0/sampling_time #xx[1][0] when ginput is being used
        t_end=np.int(xx[2]/sampling_time)-t0/sampling_time #xx[2][0] when ginput is being used        
    #        show()  
        
        t_max=np.argmax(y[0:t_end])
        y_topeak=y[0:t_max]
        y_afterpeak=y[t_max:-1]
        noise_data_window=y_topeak[t0_noise:tf_noise]
        sigma=np.std(noise_data_window)
        mean=np.mean(noise_data_window)
    
        min_ind=np.argmax(np.abs(1.0/((mean+4*sigma)-y_topeak)))   
        min_ampl=y_topeak[min_ind]
        max_ampl=np.max(y_topeak)
        curve_peak=y_topeak[-1]-mean
        y_ampl=max_ampl-min_ampl
       
        five_percent_ind=np.argmax(np.abs(1.0/((0.05*y_ampl+min_ampl)-y_topeak))) 
        ten_percent_ind=np.argmax(np.abs(1.0/((0.1*y_ampl+min_ampl)-y_topeak)))  
        twenty_percent_ind=np.argmax(np.abs(1.0/((0.2*y_ampl+min_ampl)-y_topeak))) 
        fifty_percent_ind=np.argmax(np.abs(1.0/((0.5*y_ampl+min_ampl)-y_topeak))) 
        fifty_percent_afterpeak_ind=np.argmax(np.abs(1.0/((0.5*y_ampl+min_ampl)-y_afterpeak))) + t_max
        eighty_percent_ind=np.argmax(np.abs(1.0/((0.8*y_ampl+min_ampl)-y_topeak))) 
        ninety_percent_ind=np.argmax(np.abs(1.0/((0.9*y_ampl+min_ampl)-y_topeak))) 
        risetime_90_10=ninety_percent_ind-ten_percent_ind
        risetime_90_10_time=risetime_90_10*sampling_time  
        
        five_percent_to_peak_time=(t_max-five_percent_ind)*sampling_time
        half_width_time=(fifty_percent_afterpeak_ind-fifty_percent_ind)*sampling_time
        print("standard deviation= %.4f noise mean= %.4f"%(sigma,mean))
        print("10-90 risetime (sec)=%r"%risetime_90_10_time)
        print("5-peak risetime (sec)=%r"%five_percent_to_peak_time)
        print("half peak width (sec)=%r"%half_width_time)
#        plt.plot(x,y, 'b', \
#        x[t0_noise:tf_noise],y[t0_noise:tf_noise], 'g', \
#        [x[0],x[-1]],[mean,mean], 'r', \
#        [x[0],x[-1]],[mean+sigma,mean+sigma], '--r', \
#        [x[0],x[-1]],[mean-sigma,mean-sigma], '--r', \
#        x[min_ind],y[min_ind],'og',\
#        x[five_percent_ind],y[five_percent_ind],'oy',\
#        [x[ten_percent_ind],x[ninety_percent_ind]],[y[ten_percent_ind],y[ninety_percent_ind]], 'or',\
#        [x[fifty_percent_ind],x[fifty_percent_afterpeak_ind]],[y[fifty_percent_ind],y[fifty_percent_afterpeak_ind]],'oc')
#        plt.show()
        
        return risetime_90_10_time, ten_percent_ind, min_ind, y_ampl, mean,\
        twenty_percent_ind, fifty_percent_ind, eighty_percent_ind,\
        ninety_percent_ind, risetime_90_10, curve_peak, t_max, five_percent_to_peak_time
        
        
    #    time2=time-group_delay
    #    LPF_skywave = noise_analysis(time2,filtered_skywave,10e6,0)
    #    print("LPF 10-90 risetime = %r" %LPF_skywave[0])
    #    
    MovAvg_skywave = noise_analysis(time[10:-10],Moving_Average_Ez[10:-10],fs,0) 
    risetime_10_90=MovAvg_skywave[0]
    ten_percent_level=MovAvg_skywave[1]*(1/fs)
    ground_wave_start=MovAvg_skywave[2]*(1/fs)
    ground_wave_ampl=MovAvg_skywave[3]
    ground_wave_max=MovAvg_skywave[10]
    ground_wave_time_peak=MovAvg_skywave[11]*(1/fs)
    min_ampl=MovAvg_skywave[4]
    five_percent_to_peak_time=MovAvg_skywave[12]
    print("Moving Average 10-90 risetime = %r" %MovAvg_skywave[0])
    
    time=time+ground_wave_start
    reference_UTC_seconds=reference_UTC_seconds+shift_to_0-ground_wave_start
    UTC_reference_time = "%r:%r:%11.9f" %(timestamp.hour,timestamp.minute,reference_UTC_seconds)
    #    unfiltered = noise_analysis(time,skywave,10e6,0)
    #    print("Unfiltered 10-90 risetime = %r" %unfiltered[0])
    
    return time, Moving_Average_Ez, UTC_reference_time, risetime_10_90, ten_percent_level,\
    ground_wave_start, ground_wave_ampl, min_ampl, ground_wave_max, ground_wave_time_peak,\
    Ez_data, timestamp, reference_UTC_seconds,five_percent_to_peak_time
def Skywave(event,RS_number, RS_time,suffix,x_max,filterwindow): 
 


    ####################
    # Input Parameters #
    ####################
    fs=10e6 #sampling rate
#    event=38 #event name
#    RS_number=2 #return stroke number
#    RS_time=26.579535265 #seconds of the XLI time stamp (for trigger lightning) 
#                        #this time can be found in the triggered lightning reports
#    x_max=0.00035 #xlim max for plotting the skywaves
    
    ##############
    # Read Files #
    ##############
    #import IRIG file
    lecroy_fileName_DBY_IRIG = "/Volumes/Promise 12TB RAID5/2015 Data/082715/DBY Data/C2DBY0000"+str(suffix)+".trc"
    lecroy_DBY_IRIG= lc.lecroy_data(lecroy_fileName_DBY_IRIG)
    seg_time_DBY_IRIG = lecroy_DBY_IRIG.get_seg_time()
    segments_DBY_IRIG = lecroy_DBY_IRIG.get_segments()
    
    #read IRIG file and print time stamp
    timestamp,t =IRIGA.IRIGA_signal(segments_DBY_IRIG[0], fs, year=2015)
    print(timestamp)
    
    #import skywaves data
    lecroy_fileName_DBY = "/Volumes/Promise 12TB RAID5/2015 Data/082715/DBY Data/C1DBY0000"+str(suffix)+".trc"
    lecroy_DBY= lc.lecroy_data(lecroy_fileName_DBY)
    seg_time_DBY = lecroy_DBY.get_seg_time()
    segments_DBY = lecroy_DBY.get_segments()
    
    t0=RS_time-(timestamp.second+timestamp.microsecond/1e6)+180e3/2.99e8 #180 km
    t0=round(t0*1e9)/1e9
    tf=t0+0.5
    n0=int((t0-0.5)*fs)
    nf=int(tf*fs)
    #plt.plot([0,0],[-1,1],t[n0:nf]-t0,segments_DBY[0][n0:nf])
    #plt.xlabel('UTC Time in seconds after '+str(timestamp.hour)+':'+str(timestamp.minute)+':'+str(round((timestamp.second+timestamp.microsecond/1e6+t0)*1e9)/1e9))
    #plt.xlim(0,x_max)
    #plt.title("UF 15-"+str(event)+ " return stroke #"+str(RS_number) )
    #plt.grid()
    #plt.show()
    seconds=(round((timestamp.second+timestamp.microsecond/1e6+t0)*1e9)/1e9)
#    UTC_time= "%r:%r:%r" %(timestamp.hour,timestamp.minute,seconds)
    
    skywave=segments_DBY[0][n0:nf];
    time=t[n0:nf]-t0;
    
    #chop lists
    time=time[int(0.5*fs):int((x_max+0.5)*fs)]
    skywave=skywave[int(0.5*fs):int((x_max+0.5)*fs)]
#    a=len(skywave)
#    groundwave = skywave[1:240*fs] + [0]*(a - len(skywave[1:240*fs]))
#    skywave = skywave[1:]-groundwave
#    skywave=skywave[1:150*fs]+np.ones(len(skywave)-150*fs)
#    groundwave=skywave[int(0.5*fs):int((x_max-0+0.5)*fs)]
#    skywave=skywave[int((x_max-0+0.5)*fs):int((x_max+0.5)*fs)]
    
    #plt.plot(time,skywave)
    #plt.xlim(0,x_max)
    #plt.show()
    
    ##################################
    # take the FFT of skywave signal #
    ##################################
    #skywave_FFT=np.fft.fft(skywave,n=None,axis=-1)
    #n=int(len(skywave_FFT))
    #freq=[]
    #for a in range(0,n):
    #    freq.append(a*(fs/n)) #Create frequency list
    #plt.plot(freq,20*np.log10(np.abs(skywave_FFT))) #plot magnitude of FFT
    #plt.xlabel('Frequency (Hz)')
    #plt.ylabel('Magnitude (dB)')
    #plt.grid()
    #plt.show()
    
    ########################
    # Low Pass Filter data #
    ########################
    def butter_lowpass(cutoff, fs, order=6):
        nyq = 0.5 * fs
        normal_cutoff = cutoff / nyq
        b, a = butter(order, normal_cutoff, btype='low', analog=False)
        return b, a
    
    def butter_lowpass_filter(data, cutoff, fs, order=5):
        b, a = butter_lowpass(cutoff, fs, order=order)
        y = lfilter(b, a, data)
        return y
    
    # Filter requirements.
    order = 6
    fs = 10e6      # sample rate, Hz
    cutoff = 0.2e6  # desired cutoff frequency of the filter, Hz
    
    # Get the filter coefficients so we can check its frequency response.
    b, a = butter_lowpass(cutoff, fs, order)
    
    # Plot the frequency response.
#    w, h = freqz(b, a, worN=8000)
#    plt.subplot(2, 1, 1)
#    plt.plot(0.5*fs*w/np.pi, np.abs(h), 'b')
#    plt.plot(cutoff, 0.5*np.sqrt(2), 'ko')
#    plt.axvline(cutoff, color='k')
#    plt.xlim(0, 0.5*fs)
#    plt.title("Lowpass Filter Frequency Response")
#    plt.xlabel('Frequency [Hz]')
#    plt.grid()
    
#     Filter the data, and plot both the original and filtered signals.
#    filtered_skywave = butter_lowpass_filter(skywave, cutoff, fs, order)
#    group_delay=.6e-6
#    avg_skywave=filtered_skywave
#    plt.plot(time, skywave, 'b-', label='data')
#    plt.plot(time-group_delay, filtered_skywave, 'r-', linewidth=2, label='low pass filtered data')
#    plt.xlim(0,x_max)
#    plt.title("UF 15-"+str(event)+ " return stroke #"+str(RS_number) )
#    plt.xlabel('UTC Time in seconds after '+str(timestamp.hour)+':'+str(timestamp.minute)+':'+str(round((timestamp.second+timestamp.microsecond/1e6+t0)*1e9)/1e9))
#    plt.grid()
#    
    #########################
    # Moving Average Filter #
    #########################
    def movingaverage(interval, window_size):
        window= np.ones(int(window_size))/float(window_size)
        return np.convolve(interval, window, mode='valid')# 'same')  

    avg_skywave=movingaverage(skywave,filterwindow)
#    avg_groundwave=movingaverage(groundwave,51)
#    avg_skywave=avg_skywave+avg_groundwave
#    avg_skywave=movingaverage(skywave[n1:nf],11)
#    plt.plot(time, avg_skywave,'g',linewidth=2, label='moving average data')
#    plt.legend()
#    plt.show()
#    
    ####################
    # Measure Risetime #
    ####################
    def noise_analysis(x,y,fs,t0):
#        plot(x,y)
#        print("Please click")
#        xx = ginput(3)
        xx=[0,0.00008,0.000095] #just for this application! 
        sampling_time=1/fs

        t0_noise=np.int(xx[0]/sampling_time)-t0/sampling_time #xx[0][0] when ginput is being used
        tf_noise=np.int(xx[1]/sampling_time)-t0/sampling_time #xx[1][0] when ginput is being used
        t_end=np.int(xx[2]/sampling_time)-t0/sampling_time #xx[2][0] when ginput is being used        
#        show()  
        
        t_max=np.argmax(y[0:t_end])
        y_topeak=y[0:t_max]
        noise_data_window=y_topeak[t0_noise:tf_noise]
        sigma=np.std(noise_data_window)
        mean=np.mean(noise_data_window)
    
        min_ind=np.argmax(np.abs(1.0/((mean+4*sigma)-y_topeak)))   
        min_ampl=y_topeak[min_ind]
        max_ampl=np.max(y_topeak)
        curve_peak=y_topeak[-1]-mean
        y_ampl=max_ampl-min_ampl
       
        ten_percent_ind=np.argmax(np.abs(1.0/((0.1*y_ampl+min_ampl)-y_topeak)))  
        twenty_percent_ind=np.argmax(np.abs(1.0/((0.2*y_ampl+min_ampl)-y_topeak))) 
        fifty_percent_ind=np.argmax(np.abs(1.0/((0.5*y_ampl+min_ampl)-y_topeak))) 
        eighty_percent_ind=np.argmax(np.abs(1.0/((0.8*y_ampl+min_ampl)-y_topeak))) 
        ninety_percent_ind=np.argmax(np.abs(1.0/((0.9*y_ampl+min_ampl)-y_topeak))) 
        risetime_90_10=ninety_percent_ind-ten_percent_ind
        risetime_90_10_time=risetime_90_10*sampling_time  
        
#        print("standard deviation= %.4f noise mean= %.4f"%(sigma,mean))
#        plot(x,y, 'b', \
#        x[t0_noise:tf_noise],y[t0_noise:tf_noise], 'g', \
#        [x[0],x[-1]],[mean,mean], 'r', \
#        [x[0],x[-1]],[mean+sigma,mean+sigma], '--r', \
#        [x[0],x[-1]],[mean-sigma,mean-sigma], '--r', \
#        [x[min_ind],x[ten_percent_ind],x[ninety_percent_ind]],[y[min_ind],y[ten_percent_ind],y[ninety_percent_ind]], 'or')
#        show()
        
        return risetime_90_10_time, ten_percent_ind, min_ind, y_ampl, mean,\
        twenty_percent_ind, fifty_percent_ind, eighty_percent_ind,\
        ninety_percent_ind, risetime_90_10, curve_peak, t_max
        
#    time2=time-group_delay
#    LPF_skywave = noise_analysis(time2,filtered_skywave,10e6,0)
#    print("LPF 10-90 risetime = %r" %LPF_skywave[0])
#    
    MovAvg_skywave = noise_analysis(time,avg_skywave,10e6,0) 
    risetime_10_90=MovAvg_skywave[0]
    ten_percent_level=MovAvg_skywave[1]*(1/fs)
    ground_wave_start=MovAvg_skywave[2]*(1/fs)
    ground_wave_ampl=MovAvg_skywave[3]
    ground_wave_max=MovAvg_skywave[10]
    ground_wave_time_peak=MovAvg_skywave[11]*(1/fs)
    min_ampl=MovAvg_skywave[4]
    print("Moving Average 10-90 risetime = %r" %MovAvg_skywave[0])
    
    UTC_time= "%r:%r:%12.9f" %(timestamp.hour,timestamp.minute,seconds-ground_wave_start)
#    unfiltered = noise_analysis(time,skywave,10e6,0)
#    print("Unfiltered 10-90 risetime = %r" %unfiltered[0])

    return time, avg_skywave, UTC_time, risetime_10_90, ten_percent_level,\
    ground_wave_start, ground_wave_ampl, min_ampl, ground_wave_max, ground_wave_time_peak,\
    skywave
Exemplo n.º 7
0
def Natural_Skywaves(year, RS_time, date, fs, suffix, Horizontal_distance,
                     x_max):
    ##############
    # Read Files #
    ##############
    #import IRIG file
    if suffix > 999:
        lecroy_fileName_DBY_IRIG = "/Volumes/DBY Skywaves/" + str(
            year) + "/0" + str(date) + "/C2DBY0" + str(suffix) + ".trc"
        lecroy_DBY_IRIG = lc.lecroy_data(lecroy_fileName_DBY_IRIG)
        #        seg_time_DBY_IRIG = lecroy_DBY_IRIG.get_seg_time()
        segments_DBY_IRIG = lecroy_DBY_IRIG.get_segments()
    else:
        lecroy_fileName_DBY_IRIG = "/Volumes/DBY Skywaves/" + str(
            year) + "/0" + str(date) + "/C2DBY00" + str(suffix) + ".trc"
        lecroy_DBY_IRIG = lc.lecroy_data(lecroy_fileName_DBY_IRIG)
        #        seg_time_DBY_IRIG = lecroy_DBY_IRIG.get_seg_time()
        segments_DBY_IRIG = lecroy_DBY_IRIG.get_segments()

    #read IRIG file and print time stamp
    timestamp, t = IRIGA.IRIGA_signal(segments_DBY_IRIG[0], fs, year=year)
    print(timestamp)

    #import skywaves data
    if suffix > 999:
        lecroy_fileName_DBY = "/Volumes/DBY Skywaves/" + str(
            year) + "/0" + str(date) + "/C1DBY0" + str(suffix) + ".trc"
        lecroy_DBY = lc.lecroy_data(lecroy_fileName_DBY)
        #        seg_time_DBY = lecroy_DBY.get_seg_time()
        segments_DBY = lecroy_DBY.get_segments()
    else:
        lecroy_fileName_DBY = "/Volumes/DBY Skywaves/" + str(
            year) + "/0" + str(date) + "/C1DBY00" + str(suffix) + ".trc"
        lecroy_DBY = lc.lecroy_data(lecroy_fileName_DBY)
        #        seg_time_DBY = lecroy_DBY.get_seg_time()
        segments_DBY = lecroy_DBY.get_segments()

    # This is the time reported by NLDN that we are trying to find
    # in the data file
    NLDN_time = RS_time - (timestamp.second + timestamp.microsecond / 1e6)

    # The time below should coincide with the rising edge of the ground
    # wave reported by NLDN. However, the NLDN time resolution is in the
    # order of 100s of ms, so the ground wave might actually be 100 ms
    # to the right or to the left of the GW_time_at_antenna
    GW_time_at_antenna = NLDN_time + Horizontal_distance / 2.99e8

    plt.plot(t, segments_DBY[0], 'r')
    plt.plot([NLDN_time, NLDN_time], [-1, 1])
    plt.plot([GW_time_at_antenna, GW_time_at_antenna], [-1, 1])
    plt.plot([GW_time_at_antenna + 100e-3, GW_time_at_antenna + 100e-3],
             [-1, 1], '--')
    plt.plot([GW_time_at_antenna - 100e-3, GW_time_at_antenna - 100e-3],
             [-1, 1], '--')
    UTC_time= "%r:%r:%r" %(timestamp.hour,timestamp.minute,\
                           timestamp.second+timestamp.microsecond/1e6)
    plt.xlabel("Time in seconds after " + str(UTC_time))
    plt.title('Complete 200 ms file the ground wave \n'
              'should be around the solid line')
    #    plt.show()

    t0 = GW_time_at_antenna

    # Rename variables to filter nmore easily
    skywave = segments_DBY[0]
    time = t

    return time, skywave, UTC_time, t0, timestamp
def RS_plot_2016_diodes14(date, event, seg, RS_number, suffix):
    plt.figure(figsize=(10.9, 15.8))

    suffix43 = suffix
    suffix44 = suffix
    suffix48 = suffix
    suffix50 = suffix
    suffix39 = suffix
    suffix42 = suffix
    suffix37 = suffix
    suffix29 = suffix

    luminosity_peak = list()
    ax = plt.subplot(111)
    ##LeCroy
    offset = 0
    #Diode 2
    lecroy_fileName_Scope43_APD2 = "/Volumes/Promise 12TB RAID5/2016 Data/0" + str(
        date) + "/Scope43/C1AC0000" + str(suffix43) + ".trc"
    scope43_D2 = lc.lecroy_data(lecroy_fileName_Scope43_APD2)
    D2_time = scope43_D2.get_seg_time()
    D2_data = scope43_D2.get_segments()
    D2_data = D2_data[seg] * 1.0
    plt.plot((D2_time - 5e-3) * 1e6, D2_data + offset, label='D2 (0 m)')

    offset = offset + np.max(D2_data)
    luminosity_peak = np.append(luminosity_peak, np.max(D2_data))

    #Diode 5
    lecroy_fileName_Scope44_APD5 = "/Volumes/Promise 12TB RAID5/2016 Data/0" + str(
        date) + "/Scope43/C2AC0000" + str(suffix44) + ".trc"
    scope44_D5 = lc.lecroy_data(lecroy_fileName_Scope44_APD5)
    D5_time = scope44_D5.get_seg_time()
    D5_data = scope44_D5.get_segments()
    D5_data = D5_data[seg] * .82

    plt.plot((D5_time - 5e-3) * 1e6, D5_data + offset, label='D5 (100 m)')

    offset = offset + np.max(D5_data)
    luminosity_peak = np.append(luminosity_peak, np.max(D5_data))

    #Diode 8
    lecroy_fileName_Scope44_APD8 = "/Volumes/Promise 12TB RAID5/2016 Data/0" + str(
        date) + "/Scope43/C3AC0000" + str(suffix44) + ".trc"
    scope44_D8 = lc.lecroy_data(lecroy_fileName_Scope44_APD8)
    D8_time = scope44_D8.get_seg_time()
    D8_data = scope44_D8.get_segments()
    D8_data = D8_data[seg] * .57

    plt.plot((D8_time - 5e-3) * 1e6, D8_data + offset, label='D8 (200 m)')

    offset = offset + np.max(D8_data)
    luminosity_peak = np.append(luminosity_peak, np.max(D8_data))

    #Diode 11
    lecroy_fileName_Scope48_APD11 = "/Volumes/Promise 12TB RAID5/2016 Data/0" + str(
        date) + "/Scope48/C3AC0000" + str(suffix48) + ".trc"
    scope48_D11 = lc.lecroy_data(lecroy_fileName_Scope48_APD11)
    D11_time = scope48_D11.get_seg_time()
    D11_data = scope48_D11.get_segments()
    D11_data = D11_data[seg] * 0.81

    plt.plot((D11_time - 5e-3) * 1e6, D11_data + offset, label='D11 (300 m)')

    offset = offset + np.max(D11_data)
    luminosity_peak = np.append(luminosity_peak, np.max(D11_data))

    #Diode 14
    lecroy_fileName_Scope50_APD14 = "/Volumes/Promise 12TB RAID5/2016 Data/0" + str(
        date) + "/Scope43/C4AC0000" + str(suffix50) + ".trc"
    scope50_D14 = lc.lecroy_data(lecroy_fileName_Scope50_APD14)
    D14_time = scope50_D14.get_seg_time()
    D14_data = scope50_D14.get_segments()
    D14_data = D14_data[seg] * 1.62

    plt.plot((D14_time - 5e-3) * 1e6, D14_data + offset, label='D14 (400 m)')

    offset = offset + np.max(D14_data)
    luminosity_peak = np.append(luminosity_peak, np.max(D14_data))

    #Diode 17
    lecroy_fileName_Scope39_APD17 = "/Volumes/Promise 12TB RAID5/2016 Data/0" + str(
        date) + "/Scope39/C1AC0000" + str(suffix39) + ".trc"
    scope39_D17 = lc.lecroy_data(lecroy_fileName_Scope39_APD17)
    D17_time = scope39_D17.get_seg_time()
    D17_data = scope39_D17.get_segments()
    D17_data = D17_data[seg] * 1.34
    plt.plot((D17_time - 5e-3) * 1e6, D17_data + offset, label='D17 (500 m)')

    offset = offset + np.max(D17_data)
    luminosity_peak = np.append(luminosity_peak, np.max(D17_data))

    #Diode 20
    lecroy_fileName_Scope39_APD20 = "/Volumes/Promise 12TB RAID5/2016 Data/0" + str(
        date) + "/Scope39/C4AC0000" + str(suffix39) + ".trc"
    scope39_D20 = lc.lecroy_data(lecroy_fileName_Scope39_APD20)
    D20_time = scope39_D20.get_seg_time()
    D20_data = scope39_D20.get_segments()
    D20_data = D20_data[seg] * 0.76

    plt.plot((D20_time - 5e-3) * 1e6, D20_data + offset, label='D20 (600 m)')

    offset = offset + np.max(D20_data)
    luminosity_peak = np.append(luminosity_peak, np.max(D20_data))

    #Diode 23
    lecroy_fileName_Scope42_APD23 = "/Volumes/Promise 12TB RAID5/2016 Data/0" + str(
        date) + "/Scope42/C3AC0000" + str(suffix42) + ".trc"
    scope42_D23 = lc.lecroy_data(lecroy_fileName_Scope42_APD23)
    D23_time = scope42_D23.get_seg_time()
    D23_data = scope42_D23.get_segments()
    D23_data = D23_data[seg] * 1.54

    plt.plot((D23_time - 5e-3) * 1e6, D23_data + offset, label='D23 (700 m)')

    offset = offset + np.max(D23_data)
    luminosity_peak = np.append(luminosity_peak, np.max(D23_data))

    #Diode 26
    lecroy_fileName_Scope37_APD26 = "/Volumes/Promise 12TB RAID5/2016 Data/0" + str(
        date) + "/Scope37/C2AC0000" + str(suffix37) + ".trc"
    scope37_D26 = lc.lecroy_data(lecroy_fileName_Scope37_APD26)
    D26_time = scope37_D26.get_seg_time()
    D26_data = scope37_D26.get_segments()
    D26_data = D26_data[seg] * 1.44

    plt.plot((D26_time - 5e-3) * 1e6, D26_data + offset, label='D26 (800 m)')

    offset = offset + np.max(D26_data)
    luminosity_peak = np.append(luminosity_peak, np.max(D26_data))

    #Diode 29
    lecroy_fileName_Scope29_APD29 = "/Volumes/Promise 12TB RAID5/2016 Data/0" + str(
        date) + "/Scope29/C1AC0000" + str(suffix29) + ".trc"
    scope29_D29 = lc.lecroy_data(lecroy_fileName_Scope29_APD29)
    D29_time = scope29_D29.get_seg_time()
    D29_data = scope29_D29.get_segments()
    D29_data = D29_data[seg] * 1.80

    plt.plot((D29_time - 5e-3) * 1e6, D29_data + offset, label='D29 (900 m)')

    offset = offset + np.max(D29_data)
    luminosity_peak = np.append(luminosity_peak, np.max(D29_data))

    #Diode 31
    lecroy_fileName_Scope29_APD31 = "/Volumes/Promise 12TB RAID5/2016 Data/0" + str(
        date) + "/Scope29/C3AC0000" + str(suffix29) + ".trc"
    scope29_D31 = lc.lecroy_data(lecroy_fileName_Scope29_APD31)
    D31_time = scope29_D31.get_seg_time()
    D31_data = scope29_D31.get_segments()
    D31_data = D31_data[seg] * 1.78

    plt.plot((D31_time - 5e-3) * 1e6, D31_data + offset, label='D31 (1 km)')

    offset = offset + np.max(D31_data)
    luminosity_peak = np.append(luminosity_peak, np.max(D31_data))

    plt.grid()
    plt.xlabel('Time $\mu s$')
    handles, labels = ax.get_legend_handles_labels()
    ax.legend(handles[::-1], labels[::-1]).draggable()
    plt.title('Event UF 16-' + str(event) + ', RS ' + str(RS_number) +
              ' (2014 APDs only)')
    #    plt.title('Natural flash July 30, 2016 21:19:41.4600486 UTC (2014 APDs only)')
    plt.xlim(-50, 1000)
    plt.show()
Exemplo n.º 9
0
Created on Mon Jul 13 11:59:55 2015

@author: lenz
"""

import numpy as np
import scipy.interpolate as ip
import matplotlib.pyplot as plt
from matplotlib.ticker import LinearLocator
import lecroy as lc
import timing
import dfplots as df

file_name = "/Volumes/2015 Data/Sky Waves/070815/Good Skywaves/C1AC00051.trc"

lecroy = lc.lecroy_data(file_name)

seg_time = lecroy.get_seg_time()

segments = lecroy.get_segments()

MaxAmpl = np.max(segments[0])
MaxInd = np.argmax(segments[0])
MinAmpl = np.min(segments[0])
dt = 50e-9
s1 = (MaxInd) - 100e-6 / dt
s2 = s1 + 1e-3 / dt
print(MaxAmpl, MaxInd)

mult = 1e6
cal = 58.56
Exemplo n.º 10
0
def RS_plot_2016(date, event, seg, RS_number, suffix):
    plt.figure(figsize=(10.9, 15.8))

    suffix43 = suffix
    suffix44 = suffix
    suffix48 = suffix
    suffix50 = suffix
    suffix39 = suffix
    suffix42 = suffix
    suffix37 = suffix
    suffix29 = suffix

    luminosity_peak = list()
    ax = plt.subplot(111)
    ##LeCroy
    #Diode 1
    lecroy_fileName_Scope43_APD1 = "/Volumes/Promise 12TB RAID5/2016 Data/0" + str(
        date) + "/Scope43/C1AC0000" + str(suffix43) + ".trc"
    scope43_D1 = lc.lecroy_data(lecroy_fileName_Scope43_APD1)
    D1_time = scope43_D1.get_seg_time()
    D1_data = scope43_D1.get_segments()
    D1_data = D1_data[seg] * 1.2

    plt.plot((D1_time - 5e-3) * 1e6, D1_data, label='D1# (0 m)')

    offset = np.max(D1_data)
    luminosity_peak = np.append(luminosity_peak, np.max(D1_data))

    ##Diode +1
    #lecroy_fileName_Scope29_APD1 = "/Volumes/Promise 12TB RAID5/2016 Data/0"+str(date)+"/Scope29/C4AC0000"+str(suffix29)+".trc"
    #scope29_D1 = lc.lecroy_data(lecroy_fileName_Scope29_APD1)
    #D1_time = scope29_D1.get_seg_time()
    #D1_data = scope29_D1.get_segments()
    #D1_data=D1_data[seg]*1.2
    #
    #plt.plot(D1_time,D1_data)
    #plt.plot()

    #Diode 2
    lecroy_fileName_Scope43_APD2 = "/Volumes/Promise 12TB RAID5/2016 Data/0" + str(
        date) + "/Scope43/C2AC0000" + str(suffix43) + ".trc"
    scope43_D2 = lc.lecroy_data(lecroy_fileName_Scope43_APD2)
    D2_time = scope43_D2.get_seg_time()
    D2_data = scope43_D2.get_segments()
    D2_data = D2_data[seg] * 1.0
    plt.plot((D2_time - 5e-3) * 1e6, D2_data + offset, label='D2 (0 m)')

    offset = offset + np.max(D2_data)
    luminosity_peak = np.append(luminosity_peak, np.max(D2_data))

    #Diode 3
    lecroy_fileName_Scope43_APD3 = "/Volumes/Promise 12TB RAID5/2016 Data/0" + str(
        date) + "/Scope43/C3AC0000" + str(suffix43) + ".trc"
    scope43_D3 = lc.lecroy_data(lecroy_fileName_Scope43_APD3)
    D3_time = scope43_D3.get_seg_time()
    D3_data = scope43_D3.get_segments()
    D3_data = D3_data[seg] * 1.3

    plt.plot((D3_time - 5e-3) * 1e6, D3_data + offset, label='D3# (50 m)')

    offset = offset + np.max(D3_data)
    luminosity_peak = np.append(luminosity_peak, np.max(D3_data))

    #Diode 4
    lecroy_fileName_Scope43_APD4 = "/Volumes/Promise 12TB RAID5/2016 Data/0" + str(
        date) + "/Scope43/C4AC0000" + str(suffix43) + ".trc"
    scope43_D4 = lc.lecroy_data(lecroy_fileName_Scope43_APD4)
    D4_time = scope43_D4.get_seg_time()
    D4_data = scope43_D4.get_segments()
    D4_data = D4_data[seg] * 1.2

    plt.plot((D4_time - 5e-3) * 1e6, D4_data + offset, label='D4# (100 m)')

    offset = offset + np.max(D4_data)
    luminosity_peak = np.append(luminosity_peak, np.max(D4_data))

    #Diode 5
    lecroy_fileName_Scope44_APD5 = "/Volumes/Promise 12TB RAID5/2016 Data/0" + str(
        date) + "/Scope44/C1AC0000" + str(suffix44) + ".trc"
    scope44_D5 = lc.lecroy_data(lecroy_fileName_Scope44_APD5)
    D5_time = scope44_D5.get_seg_time()
    D5_data = scope44_D5.get_segments()
    D5_data = D5_data[seg] * .82

    plt.plot((D5_time - 5e-3) * 1e6, D5_data + offset, label='D5 (100 m)')

    offset = offset + np.max(D5_data)
    luminosity_peak = np.append(luminosity_peak, np.max(D5_data))

    #Diode 6
    lecroy_fileName_Scope44_APD6 = "/Volumes/Promise 12TB RAID5/2016 Data/0" + str(
        date) + "/Scope44/C2AC0000" + str(suffix44) + ".trc"
    scope44_D6 = lc.lecroy_data(lecroy_fileName_Scope44_APD6)
    D6_time = scope44_D6.get_seg_time()
    D6_data = scope44_D6.get_segments()
    D6_data = D6_data[seg] * 1.18

    plt.plot((D6_time - 5e-3) * 1e6, D6_data + offset, label='D6# (150 m)')

    offset = offset + np.max(D6_data)
    luminosity_peak = np.append(luminosity_peak, np.max(D6_data))

    #Diode 7
    lecroy_fileName_Scope44_APD7 = "/Volumes/Promise 12TB RAID5/2016 Data/0" + str(
        date) + "/Scope44/C3AC0000" + str(suffix44) + ".trc"
    scope44_D7 = lc.lecroy_data(lecroy_fileName_Scope44_APD7)
    D7_time = scope44_D7.get_seg_time()
    D7_data = scope44_D7.get_segments()
    D7_data = D7_data[seg] * 1.4

    plt.plot((D7_time - 5e-3) * 1e6, D7_data + offset, label='D7# (200 m)')

    offset = offset + np.max(D7_data)
    luminosity_peak = np.append(luminosity_peak, np.max(D7_data))

    #Diode 8
    lecroy_fileName_Scope44_APD8 = "/Volumes/Promise 12TB RAID5/2016 Data/0" + str(
        date) + "/Scope44/C4AC0000" + str(suffix44) + ".trc"
    scope44_D8 = lc.lecroy_data(lecroy_fileName_Scope44_APD8)
    D8_time = scope44_D8.get_seg_time()
    D8_data = scope44_D8.get_segments()
    D8_data = D8_data[seg] * .57

    plt.plot((D8_time - 5e-3) * 1e6, D8_data + offset, label='D8 (200 m)')

    offset = offset + np.max(D8_data)
    luminosity_peak = np.append(luminosity_peak, np.max(D8_data))

    #Diode 9
    lecroy_fileName_Scope48_APD9 = "/Volumes/Promise 12TB RAID5/2016 Data/0" + str(
        date) + "/Scope48/C1AC0000" + str(suffix48) + ".trc"
    scope48_D9 = lc.lecroy_data(lecroy_fileName_Scope48_APD9)
    D9_time = scope48_D9.get_seg_time()
    D9_data = scope48_D9.get_segments()
    D9_data = D9_data[seg] * 1.37

    plt.plot((D9_time - 5e-3) * 1e6, D9_data + offset, label='D9# (250 m)')

    offset = offset + np.max(D9_data)
    luminosity_peak = np.append(luminosity_peak, np.max(D9_data))

    #Diode 10
    lecroy_fileName_Scope48_APD10 = "/Volumes/Promise 12TB RAID5/2016 Data/0" + str(
        date) + "/Scope48/C2AC0000" + str(suffix48) + ".trc"
    scope48_D10 = lc.lecroy_data(lecroy_fileName_Scope48_APD10)
    D10_time = scope48_D10.get_seg_time()
    D10_data = scope48_D10.get_segments()
    D10_data = D10_data[seg] * 1.48

    plt.plot((D10_time - 5e-3) * 1e6, D10_data + offset, label='D10# (300 m)')

    offset = offset + np.max(D10_data)
    luminosity_peak = np.append(luminosity_peak, np.max(D10_data))

    #Diode 11
    lecroy_fileName_Scope48_APD11 = "/Volumes/Promise 12TB RAID5/2016 Data/0" + str(
        date) + "/Scope48/C3AC0000" + str(suffix48) + ".trc"
    scope48_D11 = lc.lecroy_data(lecroy_fileName_Scope48_APD11)
    D11_time = scope48_D11.get_seg_time()
    D11_data = scope48_D11.get_segments()
    D11_data = D11_data[seg] * 0.81

    plt.plot((D11_time - 5e-3) * 1e6, D11_data + offset, label='D11 (300 m)')

    offset = offset + np.max(D11_data)
    luminosity_peak = np.append(luminosity_peak, np.max(D11_data))

    #Diode 12
    lecroy_fileName_Scope48_APD12 = "/Volumes/Promise 12TB RAID5/2016 Data/0" + str(
        date) + "/Scope48/C4AC0000" + str(suffix48) + ".trc"
    scope48_D12 = lc.lecroy_data(lecroy_fileName_Scope48_APD12)
    D12_time = scope48_D12.get_seg_time()
    D12_data = scope48_D12.get_segments()
    D12_data = D12_data[seg] * 1.49

    plt.plot((D12_time - 5e-3) * 1e6, D12_data + offset, label='D12# (350 m)')

    offset = offset + np.max(D12_data)
    luminosity_peak = np.append(luminosity_peak, np.max(D12_data))

    #Diode 13
    lecroy_fileName_Scope50_APD13 = "/Volumes/Promise 12TB RAID5/2016 Data/0" + str(
        date) + "/Scope50/C1AC0000" + str(suffix50) + ".trc"
    scope50_D13 = lc.lecroy_data(lecroy_fileName_Scope50_APD13)
    D13_time = scope50_D13.get_seg_time()
    D13_data = scope50_D13.get_segments()
    D13_data = D13_data[seg] * 1.24

    plt.plot((D13_time - 5e-3) * 1e6, D13_data + offset, label='D13# (400 m)')

    offset = offset + np.max(D13_data)
    luminosity_peak = np.append(luminosity_peak, np.max(D13_data))

    #Diode 14
    lecroy_fileName_Scope50_APD14 = "/Volumes/Promise 12TB RAID5/2016 Data/0" + str(
        date) + "/Scope50/C2AC0000" + str(suffix50) + ".trc"
    scope50_D14 = lc.lecroy_data(lecroy_fileName_Scope50_APD14)
    D14_time = scope50_D14.get_seg_time()
    D14_data = scope50_D14.get_segments()
    D14_data = D14_data[seg] * 1.62

    plt.plot((D14_time - 5e-3) * 1e6, D14_data + offset, label='D14 (400 m)')

    offset = offset + np.max(D14_data)
    luminosity_peak = np.append(luminosity_peak, np.max(D14_data))

    #Diode 15
    lecroy_fileName_Scope50_APD15 = "/Volumes/Promise 12TB RAID5/2016 Data/0" + str(
        date) + "/Scope50/C3AC0000" + str(suffix50) + ".trc"
    scope50_D15 = lc.lecroy_data(lecroy_fileName_Scope50_APD15)
    D15_time = scope50_D15.get_seg_time()
    D15_data = scope50_D15.get_segments()
    D15_data = D15_data[seg] * 0.78

    plt.plot((D15_time - 5e-3) * 1e6, D15_data + offset, label='D15# (450 m)')

    offset = offset + np.max(D15_data)
    luminosity_peak = np.append(luminosity_peak, np.max(D15_data))

    #Diode 16
    lecroy_fileName_Scope50_APD16 = "/Volumes/Promise 12TB RAID5/2016 Data/0" + str(
        date) + "/Scope50/C4AC0000" + str(suffix50) + ".trc"
    scope50_D16 = lc.lecroy_data(lecroy_fileName_Scope50_APD16)
    D16_time = scope50_D16.get_seg_time()
    D16_data = scope50_D16.get_segments()
    D16_data = D16_data[seg] * 1.64

    plt.plot((D16_time - 5e-3) * 1e6, D16_data + offset, label='D16# (500 m)')

    offset = offset + np.max(D16_data)
    luminosity_peak = np.append(luminosity_peak, np.max(D16_data))

    #Diode 17
    lecroy_fileName_Scope39_APD17 = "/Volumes/Promise 12TB RAID5/2016 Data/0" + str(
        date) + "/Scope39/C1AC0000" + str(suffix39) + ".trc"
    scope39_D17 = lc.lecroy_data(lecroy_fileName_Scope39_APD17)
    D17_time = scope39_D17.get_seg_time()
    D17_data = scope39_D17.get_segments()
    D17_data = D17_data[seg] * 1.34
    plt.plot((D17_time - 5e-3) * 1e6, D17_data + offset, label='D17 (500 m)')

    offset = offset + np.max(D17_data)
    luminosity_peak = np.append(luminosity_peak, np.max(D17_data))

    #Diode 18
    lecroy_fileName_Scope39_APD18 = "/Volumes/Promise 12TB RAID5/2016 Data/0" + str(
        date) + "/Scope39/C2AC0000" + str(suffix39) + ".trc"
    scope39_D18 = lc.lecroy_data(lecroy_fileName_Scope39_APD18)
    D18_time = scope39_D18.get_seg_time()
    D18_data = scope39_D18.get_segments()
    D18_data = D18_data[seg] * 0.78

    plt.plot((D18_time - 5e-3) * 1e6, D18_data + offset, label='D18# (550 m)')

    offset = offset + np.max(D18_data)
    luminosity_peak = np.append(luminosity_peak, np.max(D18_data))

    #Diode 19
    lecroy_fileName_Scope39_APD19 = "/Volumes/Promise 12TB RAID5/2016 Data/0" + str(
        date) + "/Scope39/C3AC0000" + str(suffix39) + ".trc"
    scope39_D19 = lc.lecroy_data(lecroy_fileName_Scope39_APD19)
    D19_time = scope39_D19.get_seg_time()
    D19_data = scope39_D19.get_segments()
    D19_data = D19_data[seg] * 1.97

    plt.plot((D19_time - 5e-3) * 1e6, D19_data + offset, label='D19# (600 m)')

    offset = offset + np.max(D19_data)
    luminosity_peak = np.append(luminosity_peak, np.max(D19_data))

    #Diode 20
    lecroy_fileName_Scope39_APD20 = "/Volumes/Promise 12TB RAID5/2016 Data/0" + str(
        date) + "/Scope39/C4AC0000" + str(suffix39) + ".trc"
    scope39_D20 = lc.lecroy_data(lecroy_fileName_Scope39_APD20)
    D20_time = scope39_D20.get_seg_time()
    D20_data = scope39_D20.get_segments()
    D20_data = D20_data[seg] * 0.76

    plt.plot((D20_time - 5e-3) * 1e6, D20_data + offset, label='D20 (600 m)')

    offset = offset + np.max(D20_data)
    luminosity_peak = np.append(luminosity_peak, np.max(D20_data))

    #Diode 21
    lecroy_fileName_Scope42_APD21 = "/Volumes/Promise 12TB RAID5/2016 Data/0" + str(
        date) + "/Scope42/C1AC0000" + str(suffix42) + ".trc"
    scope42_D21 = lc.lecroy_data(lecroy_fileName_Scope42_APD21)
    D21_time = scope42_D21.get_seg_time()
    D21_data = scope42_D21.get_segments()
    D21_data = D21_data[seg] * 1.64

    plt.plot((D21_time - 5e-3) * 1e6, D21_data + offset, label='D21# (650 m)')

    offset = offset + np.max(D21_data)
    luminosity_peak = np.append(luminosity_peak, np.max(D21_data))

    #Diode 22
    lecroy_fileName_Scope42_APD22 = "/Volumes/Promise 12TB RAID5/2016 Data/0" + str(
        date) + "/Scope42/C2AC0000" + str(suffix42) + ".trc"
    scope42_D22 = lc.lecroy_data(lecroy_fileName_Scope42_APD22)
    D22_time = scope42_D22.get_seg_time()
    D22_data = scope42_D22.get_segments()
    D22_data = D22_data[seg] * 0.82

    plt.plot((D22_time - 5e-3) * 1e6, D22_data + offset, label='D22# (700 m)')

    offset = offset + np.max(D22_data)
    luminosity_peak = np.append(luminosity_peak, np.max(D22_data))

    #Diode 23
    lecroy_fileName_Scope42_APD23 = "/Volumes/Promise 12TB RAID5/2016 Data/0" + str(
        date) + "/Scope42/C3AC0000" + str(suffix42) + ".trc"
    scope42_D23 = lc.lecroy_data(lecroy_fileName_Scope42_APD23)
    D23_time = scope42_D23.get_seg_time()
    D23_data = scope42_D23.get_segments()
    D23_data = D23_data[seg] * 1.54

    plt.plot((D23_time - 5e-3) * 1e6, D23_data + offset, label='D23 (700 m)')

    offset = offset + np.max(D23_data)
    luminosity_peak = np.append(luminosity_peak, np.max(D23_data))

    #Diode 24
    lecroy_fileName_Scope42_APD24 = "/Volumes/Promise 12TB RAID5/2016 Data/0" + str(
        date) + "/Scope42/C4AC0000" + str(suffix42) + ".trc"
    scope42_D24 = lc.lecroy_data(lecroy_fileName_Scope42_APD24)
    D24_time = scope42_D24.get_seg_time()
    D24_data = scope42_D24.get_segments()
    D24_data = D24_data[seg] * 0.82

    plt.plot((D24_time - 5e-3) * 1e6, D24_data + offset, label='D24# (750 m)')

    offset = offset + np.max(D24_data)
    luminosity_peak = np.append(luminosity_peak, np.max(D24_data))

    #Diode 25
    lecroy_fileName_Scope37_APD25 = "/Volumes/Promise 12TB RAID5/2016 Data/0" + str(
        date) + "/Scope37/C1AC0000" + str(suffix37) + ".trc"
    scope37_D25 = lc.lecroy_data(lecroy_fileName_Scope37_APD25)
    D25_time = scope37_D25.get_seg_time()
    D25_data = scope37_D25.get_segments()
    D25_data = D25_data[seg] * 0.95

    plt.plot((D25_time - 5e-3) * 1e6, D25_data + offset, label='D25# (800 m)')

    offset = offset + np.max(D25_data)
    luminosity_peak = np.append(luminosity_peak, np.max(D25_data))

    #Diode 26
    lecroy_fileName_Scope37_APD26 = "/Volumes/Promise 12TB RAID5/2016 Data/0" + str(
        date) + "/Scope37/C2AC0000" + str(suffix37) + ".trc"
    scope37_D26 = lc.lecroy_data(lecroy_fileName_Scope37_APD26)
    D26_time = scope37_D26.get_seg_time()
    D26_data = scope37_D26.get_segments()
    D26_data = D26_data[seg] * 1.44

    plt.plot((D26_time - 5e-3) * 1e6, D26_data + offset, label='D26 (800 m)')

    offset = offset + np.max(D26_data)
    luminosity_peak = np.append(luminosity_peak, np.max(D26_data))

    #Diode 27
    lecroy_fileName_Scope37_APD27 = "/Volumes/Promise 12TB RAID5/2016 Data/0" + str(
        date) + "/Scope37/C3AC0000" + str(suffix37) + ".trc"
    scope37_D27 = lc.lecroy_data(lecroy_fileName_Scope37_APD27)
    D27_time = scope37_D27.get_seg_time()
    D27_data = scope37_D27.get_segments()
    D27_data = D27_data[seg] * 0.89

    plt.plot((D27_time - 5e-3) * 1e6, D27_data + offset, label='D27# (850 m)')

    offset = offset + np.max(D27_data)
    luminosity_peak = np.append(luminosity_peak, np.max(D27_data))

    #Diode 28
    lecroy_fileName_Scope37_APD28 = "/Volumes/Promise 12TB RAID5/2016 Data/0" + str(
        date) + "/Scope37/C4AC0000" + str(suffix37) + ".trc"
    scope37_D28 = lc.lecroy_data(lecroy_fileName_Scope37_APD28)
    D28_time = scope37_D28.get_seg_time()
    D28_data = scope37_D28.get_segments()
    D28_data = D28_data[seg] * 0.98

    plt.plot((D28_time - 5e-3) * 1e6, D28_data + offset, label='D28# (900 m)')

    offset = offset + np.max(D28_data)
    luminosity_peak = np.append(luminosity_peak, np.max(D28_data))

    #Diode 29
    lecroy_fileName_Scope29_APD29 = "/Volumes/Promise 12TB RAID5/2016 Data/0" + str(
        date) + "/Scope29/C1AC0000" + str(suffix29) + ".trc"
    scope29_D29 = lc.lecroy_data(lecroy_fileName_Scope29_APD29)
    D29_time = scope29_D29.get_seg_time()
    D29_data = scope29_D29.get_segments()
    D29_data = D29_data[seg] * 1.80

    plt.plot((D29_time - 5e-3) * 1e6, D29_data + offset, label='D29 (900 m)')

    offset = offset + np.max(D29_data)
    luminosity_peak = np.append(luminosity_peak, np.max(D29_data))

    #Diode 30
    lecroy_fileName_Scope29_APD30 = "/Volumes/Promise 12TB RAID5/2016 Data/0" + str(
        date) + "/Scope29/C2AC0000" + str(suffix29) + ".trc"
    scope29_D30 = lc.lecroy_data(lecroy_fileName_Scope29_APD30)
    D30_time = scope29_D30.get_seg_time()
    D30_data = scope29_D30.get_segments()
    D30_data = D30_data[seg] * 0.91

    plt.plot((D30_time - 5e-3) * 1e6, D30_data + offset, label='D30# (1 km)')

    offset = offset + np.max(D30_data)
    luminosity_peak = np.append(luminosity_peak, np.max(D30_data))

    #Diode 31
    lecroy_fileName_Scope29_APD31 = "/Volumes/Promise 12TB RAID5/2016 Data/0" + str(
        date) + "/Scope29/C3AC0000" + str(suffix29) + ".trc"
    scope29_D31 = lc.lecroy_data(lecroy_fileName_Scope29_APD31)
    D31_time = scope29_D31.get_seg_time()
    D31_data = scope29_D31.get_segments()
    D31_data = D31_data[seg] * 1.78

    plt.plot((D31_time - 5e-3) * 1e6, D31_data + offset, label='D31 (1 km)')

    offset = offset + np.max(D31_data)
    luminosity_peak = np.append(luminosity_peak, np.max(D31_data))

    plt.grid()
    plt.xlabel('Time $\mu s$')
    handles, labels = ax.get_legend_handles_labels()
    ax.legend(handles[::-1], labels[::-1]).draggable()
    plt.title('Event UF 16-' + str(event) + ', RS ' + str(RS_number))
    plt.xlim(-50, 200)
    plt.show()

    heights = [
        0, 0, 50, 100, 100, 150, 200, 200, 250, 300, 300, 350, 400, 400, 450,
        500, 500, 550, 600, 600, 650, 700, 700, 750, 800, 800, 850, 900, 900,
        1000, 1000
    ]
    heights_2014diodes=[heights[1],heights[4],heights[7],heights[10],heights[13],\
                        heights[16],heights[19],heights[22],heights[25],heights[28],heights[30]]
    luminosity_peak_2014diodes=[luminosity_peak[1],luminosity_peak[4],luminosity_peak[7],luminosity_peak[10],luminosity_peak[13],\
                        luminosity_peak[16],luminosity_peak[19],luminosity_peak[22],luminosity_peak[25],luminosity_peak[28],luminosity_peak[30]]

    plt.figure(figsize=(15.8, 10.9))
    plt.subplot(211)
    plt.plot(heights_2014diodes, luminosity_peak_2014diodes, '*-')
    plt.title('2014 APDs')
    plt.xlabel('Channel Height (m)')
    plt.ylabel('Max luminosity peak')
    plt.grid()

    heights_2015diodes=[heights[0],heights[2],heights[3],heights[5],heights[6],\
                        heights[8],heights[9],heights[11],heights[12],heights[14],\
                        heights[15],heights[17],heights[18],heights[20],heights[21],\
                        heights[23],heights[24],heights[26],heights[27],heights[29]]
    luminosity_peak_2015diodes=[luminosity_peak[0],luminosity_peak[2],luminosity_peak[3],luminosity_peak[5],luminosity_peak[6],\
                        luminosity_peak[8],luminosity_peak[9],luminosity_peak[11],luminosity_peak[12],luminosity_peak[14],\
                        luminosity_peak[15],luminosity_peak[17],luminosity_peak[18],luminosity_peak[20],luminosity_peak[21],\
                        luminosity_peak[23],luminosity_peak[24],luminosity_peak[26],luminosity_peak[27],luminosity_peak[29]]
    plt.subplot(212)
    plt.plot(heights_2015diodes, luminosity_peak_2015diodes, 'r*-')
    plt.title('2015 APDs')
    plt.xlabel('Channel Height (m)')
    plt.ylabel('Max luminosity peak')
    plt.grid()
    plt.show()
Exemplo n.º 11
0
def Skywave(event, RS_number, RS_time, suffix, x_max, filterwindow):

    ####################
    # Input Parameters #
    ####################
    fs = 10e6  #sampling rate
    #    event=38 #event name
    #    RS_number=2 #return stroke number
    #    RS_time=26.579535265 #seconds of the XLI time stamp (for trigger lightning)
    #                        #this time can be found in the triggered lightning reports
    #    x_max=0.00035 #xlim max for plotting the skywaves

    ##############
    # Read Files #
    ##############
    #import IRIG file
    lecroy_fileName_DBY_IRIG = "/Volumes/Promise 12TB RAID5/2015 Data/082715/DBY Data/C2DBY0000" + str(
        suffix) + ".trc"
    lecroy_DBY_IRIG = lc.lecroy_data(lecroy_fileName_DBY_IRIG)
    seg_time_DBY_IRIG = lecroy_DBY_IRIG.get_seg_time()
    segments_DBY_IRIG = lecroy_DBY_IRIG.get_segments()

    #read IRIG file and print time stamp
    timestamp, t = IRIGA.IRIGA_signal(segments_DBY_IRIG[0], fs, year=2015)
    print(timestamp)

    #import skywaves data
    lecroy_fileName_DBY = "/Volumes/Promise 12TB RAID5/2015 Data/082715/DBY Data/C1DBY0000" + str(
        suffix) + ".trc"
    lecroy_DBY = lc.lecroy_data(lecroy_fileName_DBY)
    seg_time_DBY = lecroy_DBY.get_seg_time()
    segments_DBY = lecroy_DBY.get_segments()

    t0 = RS_time - (timestamp.second +
                    timestamp.microsecond / 1e6) + 180e3 / 2.99e8  #180 km
    t0 = round(t0 * 1e9) / 1e9
    tf = t0 + 0.5
    n0 = int((t0 - 0.5) * fs)
    nf = int(tf * fs)
    #plt.plot([0,0],[-1,1],t[n0:nf]-t0,segments_DBY[0][n0:nf])
    #plt.xlabel('UTC Time in seconds after '+str(timestamp.hour)+':'+str(timestamp.minute)+':'+str(round((timestamp.second+timestamp.microsecond/1e6+t0)*1e9)/1e9))
    #plt.xlim(0,x_max)
    #plt.title("UF 15-"+str(event)+ " return stroke #"+str(RS_number) )
    #plt.grid()
    #plt.show()
    seconds = (round(
        (timestamp.second + timestamp.microsecond / 1e6 + t0) * 1e9) / 1e9)
    #    UTC_time= "%r:%r:%r" %(timestamp.hour,timestamp.minute,seconds)

    skywave = segments_DBY[0][n0:nf]
    time = t[n0:nf] - t0

    #chop lists
    time = time[int(0.5 * fs):int((x_max + 0.5) * fs)]
    skywave = skywave[int(0.5 * fs):int((x_max + 0.5) * fs)]

    #    a=len(skywave)
    #    groundwave = skywave[1:240*fs] + [0]*(a - len(skywave[1:240*fs]))
    #    skywave = skywave[1:]-groundwave
    #    skywave=skywave[1:150*fs]+np.ones(len(skywave)-150*fs)
    #    groundwave=skywave[int(0.5*fs):int((x_max-0+0.5)*fs)]
    #    skywave=skywave[int((x_max-0+0.5)*fs):int((x_max+0.5)*fs)]

    #plt.plot(time,skywave)
    #plt.xlim(0,x_max)
    #plt.show()

    ##################################
    # take the FFT of skywave signal #
    ##################################
    #skywave_FFT=np.fft.fft(skywave,n=None,axis=-1)
    #n=int(len(skywave_FFT))
    #freq=[]
    #for a in range(0,n):
    #    freq.append(a*(fs/n)) #Create frequency list
    #plt.plot(freq,20*np.log10(np.abs(skywave_FFT))) #plot magnitude of FFT
    #plt.xlabel('Frequency (Hz)')
    #plt.ylabel('Magnitude (dB)')
    #plt.grid()
    #plt.show()

    ########################
    # Low Pass Filter data #
    ########################
    def butter_lowpass(cutoff, fs, order=6):
        nyq = 0.5 * fs
        normal_cutoff = cutoff / nyq
        b, a = butter(order, normal_cutoff, btype='low', analog=False)
        return b, a

    def butter_lowpass_filter(data, cutoff, fs, order=5):
        b, a = butter_lowpass(cutoff, fs, order=order)
        y = lfilter(b, a, data)
        return y

    # Filter requirements.
    order = 6
    fs = 10e6  # sample rate, Hz
    cutoff = 0.2e6  # desired cutoff frequency of the filter, Hz

    # Get the filter coefficients so we can check its frequency response.
    b, a = butter_lowpass(cutoff, fs, order)

    # Plot the frequency response.
    #    w, h = freqz(b, a, worN=8000)
    #    plt.subplot(2, 1, 1)
    #    plt.plot(0.5*fs*w/np.pi, np.abs(h), 'b')
    #    plt.plot(cutoff, 0.5*np.sqrt(2), 'ko')
    #    plt.axvline(cutoff, color='k')
    #    plt.xlim(0, 0.5*fs)
    #    plt.title("Lowpass Filter Frequency Response")
    #    plt.xlabel('Frequency [Hz]')
    #    plt.grid()

    #     Filter the data, and plot both the original and filtered signals.
    #    filtered_skywave = butter_lowpass_filter(skywave, cutoff, fs, order)
    #    group_delay=.6e-6
    #    avg_skywave=filtered_skywave
    #    plt.plot(time, skywave, 'b-', label='data')
    #    plt.plot(time-group_delay, filtered_skywave, 'r-', linewidth=2, label='low pass filtered data')
    #    plt.xlim(0,x_max)
    #    plt.title("UF 15-"+str(event)+ " return stroke #"+str(RS_number) )
    #    plt.xlabel('UTC Time in seconds after '+str(timestamp.hour)+':'+str(timestamp.minute)+':'+str(round((timestamp.second+timestamp.microsecond/1e6+t0)*1e9)/1e9))
    #    plt.grid()
    #
    #########################
    # Moving Average Filter #
    #########################
    def movingaverage(interval, window_size):
        window = np.ones(int(window_size)) / float(window_size)
        return np.convolve(interval, window, mode='valid')  # 'same')

    avg_skywave = movingaverage(skywave, filterwindow)

    #    avg_groundwave=movingaverage(groundwave,51)
    #    avg_skywave=avg_skywave+avg_groundwave
    #    avg_skywave=movingaverage(skywave[n1:nf],11)
    #    plt.plot(time, avg_skywave,'g',linewidth=2, label='moving average data')
    #    plt.legend()
    #    plt.show()
    #
    ####################
    # Measure Risetime #
    ####################
    def noise_analysis(x, y, fs, t0):
        #        plot(x,y)
        #        print("Please click")
        #        xx = ginput(3)
        xx = [0, 0.00008, 0.000095]  #just for this application!
        sampling_time = 1 / fs

        t0_noise = np.int(
            xx[0] / sampling_time
        ) - t0 / sampling_time  #xx[0][0] when ginput is being used
        tf_noise = np.int(
            xx[1] / sampling_time
        ) - t0 / sampling_time  #xx[1][0] when ginput is being used
        t_end = np.int(
            xx[2] / sampling_time
        ) - t0 / sampling_time  #xx[2][0] when ginput is being used
        #        show()

        t_max = np.argmax(y[0:t_end])
        y_topeak = y[0:t_max]
        noise_data_window = y_topeak[t0_noise:tf_noise]
        sigma = np.std(noise_data_window)
        mean = np.mean(noise_data_window)

        min_ind = np.argmax(np.abs(1.0 / ((mean + 4 * sigma) - y_topeak)))
        min_ampl = y_topeak[min_ind]
        max_ampl = np.max(y_topeak)
        curve_peak = y_topeak[-1] - mean
        y_ampl = max_ampl - min_ampl

        ten_percent_ind = np.argmax(
            np.abs(1.0 / ((0.1 * y_ampl + min_ampl) - y_topeak)))
        twenty_percent_ind = np.argmax(
            np.abs(1.0 / ((0.2 * y_ampl + min_ampl) - y_topeak)))
        fifty_percent_ind = np.argmax(
            np.abs(1.0 / ((0.5 * y_ampl + min_ampl) - y_topeak)))
        eighty_percent_ind = np.argmax(
            np.abs(1.0 / ((0.8 * y_ampl + min_ampl) - y_topeak)))
        ninety_percent_ind = np.argmax(
            np.abs(1.0 / ((0.9 * y_ampl + min_ampl) - y_topeak)))
        risetime_90_10 = ninety_percent_ind - ten_percent_ind
        risetime_90_10_time = risetime_90_10 * sampling_time

        #        print("standard deviation= %.4f noise mean= %.4f"%(sigma,mean))
        #        plot(x,y, 'b', \
        #        x[t0_noise:tf_noise],y[t0_noise:tf_noise], 'g', \
        #        [x[0],x[-1]],[mean,mean], 'r', \
        #        [x[0],x[-1]],[mean+sigma,mean+sigma], '--r', \
        #        [x[0],x[-1]],[mean-sigma,mean-sigma], '--r', \
        #        [x[min_ind],x[ten_percent_ind],x[ninety_percent_ind]],[y[min_ind],y[ten_percent_ind],y[ninety_percent_ind]], 'or')
        #        show()

        return risetime_90_10_time, ten_percent_ind, min_ind, y_ampl, mean,\
        twenty_percent_ind, fifty_percent_ind, eighty_percent_ind,\
        ninety_percent_ind, risetime_90_10, curve_peak, t_max

#    time2=time-group_delay
#    LPF_skywave = noise_analysis(time2,filtered_skywave,10e6,0)
#    print("LPF 10-90 risetime = %r" %LPF_skywave[0])
#

    MovAvg_skywave = noise_analysis(time, avg_skywave, 10e6, 0)
    risetime_10_90 = MovAvg_skywave[0]
    ten_percent_level = MovAvg_skywave[1] * (1 / fs)
    ground_wave_start = MovAvg_skywave[2] * (1 / fs)
    ground_wave_ampl = MovAvg_skywave[3]
    ground_wave_max = MovAvg_skywave[10]
    ground_wave_time_peak = MovAvg_skywave[11] * (1 / fs)
    min_ampl = MovAvg_skywave[4]
    print("Moving Average 10-90 risetime = %r" % MovAvg_skywave[0])

    UTC_time = "%r:%r:%12.9f" % (timestamp.hour, timestamp.minute,
                                 seconds - ground_wave_start)
    #    unfiltered = noise_analysis(time,skywave,10e6,0)
    #    print("Unfiltered 10-90 risetime = %r" %unfiltered[0])

    return time, avg_skywave, UTC_time, risetime_10_90, ten_percent_level,\
    ground_wave_start, ground_wave_ampl, min_ampl, ground_wave_max, ground_wave_time_peak,\
    skywave
#plt.ylim(-0.12,0.28)
#plt.grid()
#
#plt.show()

#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
#!!!!!!!!!!!!!!!!!!Plot Fig.2!!!!!!!!!!!!!!!!!!!!!!!!!!
#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
#UF 15-38, RS#1

#Plot channel-base current
suffix26=0
seg=0
lecroy_fileName_IIHI = "/Volumes/2015 Data/0"+str(date)+"/Scope26/C1AC0000"+ \
                        str(suffix26)+".trc"
lecroy_IIHI = lc.lecroy_data(lecroy_fileName_IIHI)
IIHI_time = lecroy_IIHI.get_seg_time()
IIHI = lecroy_IIHI.get_segments()
plt.subplot(321)
plt.plot((IIHI_time-2.4e-3)*1e6,IIHI[seg]*calfactor/1000,color=[0.3, 0.3, 0.3],linewidth=2)
plt.xlabel("Time ($\mu$s)")
plt.ylabel("Channel-base Current (kA)")
plt.xlim(0,500)
plt.ylim(-1,16.1)
plt.grid()
plt.title("UF 15-38, RS#1, Peak Current = 15.1 kA")

#Plot DBY Data
moving_avg_gw=Skywave(38,1,26.522908895,8,x_max,10)   
moving_avg_ir=Skywave(38,1,26.522908895,8,x_max,50) 
Exemplo n.º 13
0
####################
# Input Parameters #
####################
fs = 10e6  #sampling rate
event = 38  #event name
RS_number = 2  #return stroke number
RS_time = 26.579535265  #seconds of the XLI time stamp (for trigger lightning)
#this time can be found in the triggered lightning reports
x_max = 0.00035  #xlim max for plotting the skywaves

##############
# Read Files #
##############
#import IRIG file
lecroy_fileName_DBY_IRIG = "/Volumes/Promise 12TB RAID5/2015 Data/082715/DBY Data/C2DBY00008.trc"
lecroy_DBY_IRIG = lc.lecroy_data(lecroy_fileName_DBY_IRIG)
seg_time_DBY_IRIG = lecroy_DBY_IRIG.get_seg_time()
segments_DBY_IRIG = lecroy_DBY_IRIG.get_segments()

#read IRIG file and print time stamp
timestamp, t = IRIGA.IRIGA_signal(segments_DBY_IRIG[0], fs, year=2015)
print(timestamp)

#import skywaves data
lecroy_fileName_DBY = "/Volumes/Promise 12TB RAID5/2015 Data/082715/DBY Data/C1DBY00008.trc"
lecroy_DBY = lc.lecroy_data(lecroy_fileName_DBY)
seg_time_DBY = lecroy_DBY.get_seg_time()
segments_DBY = lecroy_DBY.get_segments()

t0 = RS_time - (timestamp.second +
                timestamp.microsecond / 1e6) + 200e3 / 2.99e8
Exemplo n.º 14
0
def RS_plot_2016_diodes15(date, event, seg, RS_number, suffix):
    plt.figure(figsize=(10.9, 15.8))

    suffix43 = suffix
    suffix44 = suffix
    suffix48 = suffix
    suffix50 = suffix
    suffix39 = suffix
    suffix42 = suffix
    suffix37 = suffix
    suffix29 = suffix

    luminosity_peak = list()
    ax = plt.subplot(111)
    ##LeCroy
    #Diode 1
    lecroy_fileName_Scope43_APD1 = "/Volumes/Promise 12TB RAID5/2016 Data/0" + str(
        date) + "/Scope43/C1AC0000" + str(suffix43) + ".trc"
    scope43_D1 = lc.lecroy_data(lecroy_fileName_Scope43_APD1)
    D1_time = scope43_D1.get_seg_time()
    D1_data = scope43_D1.get_segments()
    D1_data = D1_data[seg] * 1.2

    plt.plot((D1_time - 5e-3) * 1e6, D1_data, label='D1# (0 m)')

    offset = np.max(D1_data)
    luminosity_peak = np.append(luminosity_peak, np.max(D1_data))

    ##Diode +1
    #lecroy_fileName_Scope29_APD1 = "/Volumes/Promise 12TB RAID5/2016 Data/0"+str(date)+"/Scope29/C4AC0000"+str(suffix29)+".trc"
    #scope29_D1 = lc.lecroy_data(lecroy_fileName_Scope29_APD1)
    #D1_time = scope29_D1.get_seg_time()
    #D1_data = scope29_D1.get_segments()
    #D1_data=D1_data[seg]*1.2
    #
    #plt.plot(D1_time,D1_data)
    #plt.plot()

    #Diode 3
    lecroy_fileName_Scope43_APD3 = "/Volumes/Promise 12TB RAID5/2016 Data/0" + str(
        date) + "/Scope43/C3AC0000" + str(suffix43) + ".trc"
    scope43_D3 = lc.lecroy_data(lecroy_fileName_Scope43_APD3)
    D3_time = scope43_D3.get_seg_time()
    D3_data = scope43_D3.get_segments()
    D3_data = D3_data[seg] * 1.3

    plt.plot((D3_time - 5e-3) * 1e6, D3_data + offset, label='D3# (50 m)')

    offset = offset + np.max(D3_data)
    luminosity_peak = np.append(luminosity_peak, np.max(D3_data))

    #Diode 4
    lecroy_fileName_Scope43_APD4 = "/Volumes/Promise 12TB RAID5/2016 Data/0" + str(
        date) + "/Scope43/C4AC0000" + str(suffix43) + ".trc"
    scope43_D4 = lc.lecroy_data(lecroy_fileName_Scope43_APD4)
    D4_time = scope43_D4.get_seg_time()
    D4_data = scope43_D4.get_segments()
    D4_data = D4_data[seg] * 1.2

    plt.plot((D4_time - 5e-3) * 1e6, D4_data + offset, label='D4# (100 m)')

    offset = offset + np.max(D4_data)
    luminosity_peak = np.append(luminosity_peak, np.max(D4_data))

    #Diode 6
    lecroy_fileName_Scope44_APD6 = "/Volumes/Promise 12TB RAID5/2016 Data/0" + str(
        date) + "/Scope44/C2AC0000" + str(suffix44) + ".trc"
    scope44_D6 = lc.lecroy_data(lecroy_fileName_Scope44_APD6)
    D6_time = scope44_D6.get_seg_time()
    D6_data = scope44_D6.get_segments()
    D6_data = D6_data[seg] * 1.18

    plt.plot((D6_time - 5e-3) * 1e6, D6_data + offset, label='D6# (150 m)')

    offset = offset + np.max(D6_data)
    luminosity_peak = np.append(luminosity_peak, np.max(D6_data))

    #Diode 7
    lecroy_fileName_Scope44_APD7 = "/Volumes/Promise 12TB RAID5/2016 Data/0" + str(
        date) + "/Scope44/C3AC0000" + str(suffix44) + ".trc"
    scope44_D7 = lc.lecroy_data(lecroy_fileName_Scope44_APD7)
    D7_time = scope44_D7.get_seg_time()
    D7_data = scope44_D7.get_segments()
    D7_data = D7_data[seg] * 1.4

    plt.plot((D7_time - 5e-3) * 1e6, D7_data + offset, label='D7# (200 m)')

    offset = offset + np.max(D7_data)
    luminosity_peak = np.append(luminosity_peak, np.max(D7_data))

    #Diode 9
    lecroy_fileName_Scope48_APD9 = "/Volumes/Promise 12TB RAID5/2016 Data/0" + str(
        date) + "/Scope48/C1AC0000" + str(suffix48) + ".trc"
    scope48_D9 = lc.lecroy_data(lecroy_fileName_Scope48_APD9)
    D9_time = scope48_D9.get_seg_time()
    D9_data = scope48_D9.get_segments()
    D9_data = D9_data[seg] * 1.37

    plt.plot((D9_time - 5e-3) * 1e6, D9_data + offset, label='D9# (250 m)')

    offset = offset + np.max(D9_data)
    luminosity_peak = np.append(luminosity_peak, np.max(D9_data))

    #Diode 10
    lecroy_fileName_Scope48_APD10 = "/Volumes/Promise 12TB RAID5/2016 Data/0" + str(
        date) + "/Scope48/C2AC0000" + str(suffix48) + ".trc"
    scope48_D10 = lc.lecroy_data(lecroy_fileName_Scope48_APD10)
    D10_time = scope48_D10.get_seg_time()
    D10_data = scope48_D10.get_segments()
    D10_data = D10_data[seg] * 1.48

    plt.plot((D10_time - 5e-3) * 1e6, D10_data + offset, label='D10# (300 m)')

    offset = offset + np.max(D10_data)
    luminosity_peak = np.append(luminosity_peak, np.max(D10_data))

    #Diode 12
    lecroy_fileName_Scope48_APD12 = "/Volumes/Promise 12TB RAID5/2016 Data/0" + str(
        date) + "/Scope48/C4AC0000" + str(suffix48) + ".trc"
    scope48_D12 = lc.lecroy_data(lecroy_fileName_Scope48_APD12)
    D12_time = scope48_D12.get_seg_time()
    D12_data = scope48_D12.get_segments()
    D12_data = D12_data[seg] * 1.49

    plt.plot((D12_time - 5e-3) * 1e6, D12_data + offset, label='D12# (350 m)')

    offset = offset + np.max(D12_data)
    luminosity_peak = np.append(luminosity_peak, np.max(D12_data))

    #Diode 13
    lecroy_fileName_Scope50_APD13 = "/Volumes/Promise 12TB RAID5/2016 Data/0" + str(
        date) + "/Scope50/C1AC0000" + str(suffix50) + ".trc"
    scope50_D13 = lc.lecroy_data(lecroy_fileName_Scope50_APD13)
    D13_time = scope50_D13.get_seg_time()
    D13_data = scope50_D13.get_segments()
    D13_data = D13_data[seg] * 1.24

    plt.plot((D13_time - 5e-3) * 1e6, D13_data + offset, label='D13# (400 m)')

    offset = offset + np.max(D13_data)
    luminosity_peak = np.append(luminosity_peak, np.max(D13_data))

    #Diode 15
    lecroy_fileName_Scope50_APD15 = "/Volumes/Promise 12TB RAID5/2016 Data/0" + str(
        date) + "/Scope50/C3AC0000" + str(suffix50) + ".trc"
    scope50_D15 = lc.lecroy_data(lecroy_fileName_Scope50_APD15)
    D15_time = scope50_D15.get_seg_time()
    D15_data = scope50_D15.get_segments()
    D15_data = D15_data[seg] * 0.78

    plt.plot((D15_time - 5e-3) * 1e6, D15_data + offset, label='D15# (450 m)')

    offset = offset + np.max(D15_data)
    luminosity_peak = np.append(luminosity_peak, np.max(D15_data))

    #Diode 16
    lecroy_fileName_Scope50_APD16 = "/Volumes/Promise 12TB RAID5/2016 Data/0" + str(
        date) + "/Scope50/C4AC0000" + str(suffix50) + ".trc"
    scope50_D16 = lc.lecroy_data(lecroy_fileName_Scope50_APD16)
    D16_time = scope50_D16.get_seg_time()
    D16_data = scope50_D16.get_segments()
    D16_data = D16_data[seg] * 1.64 / 10

    plt.plot((D16_time - 5e-3) * 1e6, D16_data + offset, label='D16# (500 m)')

    offset = offset + np.max(D16_data)
    luminosity_peak = np.append(luminosity_peak, np.max(D16_data))

    #Diode 18
    lecroy_fileName_Scope39_APD18 = "/Volumes/Promise 12TB RAID5/2016 Data/0" + str(
        date) + "/Scope39/C2AC0000" + str(suffix39) + ".trc"
    scope39_D18 = lc.lecroy_data(lecroy_fileName_Scope39_APD18)
    D18_time = scope39_D18.get_seg_time()
    D18_data = scope39_D18.get_segments()
    D18_data = D18_data[seg] * 0.78 / 10

    plt.plot((D18_time - 5e-3) * 1e6, D18_data + offset, label='D18# (550 m)')

    offset = offset + np.max(D18_data)
    luminosity_peak = np.append(luminosity_peak, np.max(D18_data))

    #Diode 19
    lecroy_fileName_Scope39_APD19 = "/Volumes/Promise 12TB RAID5/2016 Data/0" + str(
        date) + "/Scope39/C3AC0000" + str(suffix39) + ".trc"
    scope39_D19 = lc.lecroy_data(lecroy_fileName_Scope39_APD19)
    D19_time = scope39_D19.get_seg_time()
    D19_data = scope39_D19.get_segments()
    D19_data = D19_data[seg] * 1.97 / 10

    plt.plot((D19_time - 5e-3) * 1e6, D19_data + offset, label='D19# (600 m)')

    offset = offset + np.max(D19_data)
    luminosity_peak = np.append(luminosity_peak, np.max(D19_data))

    #Diode 21
    lecroy_fileName_Scope42_APD21 = "/Volumes/Promise 12TB RAID5/2016 Data/0" + str(
        date) + "/Scope42/C1AC0000" + str(suffix42) + ".trc"
    scope42_D21 = lc.lecroy_data(lecroy_fileName_Scope42_APD21)
    D21_time = scope42_D21.get_seg_time()
    D21_data = scope42_D21.get_segments()
    D21_data = D21_data[seg] * 1.64 / 10

    plt.plot((D21_time - 5e-3) * 1e6, D21_data + offset, label='D21# (650 m)')

    offset = offset + np.max(D21_data)
    luminosity_peak = np.append(luminosity_peak, np.max(D21_data))

    #Diode 22
    lecroy_fileName_Scope42_APD22 = "/Volumes/Promise 12TB RAID5/2016 Data/0" + str(
        date) + "/Scope42/C2AC0000" + str(suffix42) + ".trc"
    scope42_D22 = lc.lecroy_data(lecroy_fileName_Scope42_APD22)
    D22_time = scope42_D22.get_seg_time()
    D22_data = scope42_D22.get_segments()
    D22_data = D22_data[seg] * 0.82 / 10

    plt.plot((D22_time - 5e-3) * 1e6, D22_data + offset, label='D22# (700 m)')

    offset = offset + np.max(D22_data)
    luminosity_peak = np.append(luminosity_peak, np.max(D22_data))

    #Diode 24
    lecroy_fileName_Scope42_APD24 = "/Volumes/Promise 12TB RAID5/2016 Data/0" + str(
        date) + "/Scope42/C4AC0000" + str(suffix42) + ".trc"
    scope42_D24 = lc.lecroy_data(lecroy_fileName_Scope42_APD24)
    D24_time = scope42_D24.get_seg_time()
    D24_data = scope42_D24.get_segments()
    D24_data = D24_data[seg] * 0.82 / 10

    plt.plot((D24_time - 5e-3) * 1e6, D24_data + offset, label='D24# (750 m)')

    offset = offset + np.max(D24_data)
    luminosity_peak = np.append(luminosity_peak, np.max(D24_data))

    #Diode 25
    lecroy_fileName_Scope37_APD25 = "/Volumes/Promise 12TB RAID5/2016 Data/0" + str(
        date) + "/Scope37/C1AC0000" + str(suffix37) + ".trc"
    scope37_D25 = lc.lecroy_data(lecroy_fileName_Scope37_APD25)
    D25_time = scope37_D25.get_seg_time()
    D25_data = scope37_D25.get_segments()
    D25_data = D25_data[seg] * 0.95 / 10

    plt.plot((D25_time - 5e-3) * 1e6, D25_data + offset, label='D25# (800 m)')

    offset = offset + np.max(D25_data)
    luminosity_peak = np.append(luminosity_peak, np.max(D25_data))

    #Diode 27
    lecroy_fileName_Scope37_APD27 = "/Volumes/Promise 12TB RAID5/2016 Data/0" + str(
        date) + "/Scope37/C3AC0000" + str(suffix37) + ".trc"
    scope37_D27 = lc.lecroy_data(lecroy_fileName_Scope37_APD27)
    D27_time = scope37_D27.get_seg_time()
    D27_data = scope37_D27.get_segments()
    D27_data = D27_data[seg] * 0.89 / 10

    plt.plot((D27_time - 5e-3) * 1e6, D27_data + offset, label='D27# (850 m)')

    offset = offset + np.max(D27_data)
    luminosity_peak = np.append(luminosity_peak, np.max(D27_data))

    #Diode 28
    lecroy_fileName_Scope37_APD28 = "/Volumes/Promise 12TB RAID5/2016 Data/0" + str(
        date) + "/Scope37/C4AC0000" + str(suffix37) + ".trc"
    scope37_D28 = lc.lecroy_data(lecroy_fileName_Scope37_APD28)
    D28_time = scope37_D28.get_seg_time()
    D28_data = scope37_D28.get_segments()
    D28_data = D28_data[seg] * 0.98 / 10

    plt.plot((D28_time - 5e-3) * 1e6, D28_data + offset, label='D28# (900 m)')

    offset = offset + np.max(D28_data)
    luminosity_peak = np.append(luminosity_peak, np.max(D28_data))

    #Diode 30
    lecroy_fileName_Scope29_APD30 = "/Volumes/Promise 12TB RAID5/2016 Data/0" + str(
        date) + "/Scope29/C2AC0000" + str(suffix29) + ".trc"
    scope29_D30 = lc.lecroy_data(lecroy_fileName_Scope29_APD30)
    D30_time = scope29_D30.get_seg_time()
    D30_data = scope29_D30.get_segments()
    D30_data = D30_data[seg] * 0.91 / 10

    plt.plot((D30_time - 5e-3) * 1e6, D30_data + offset, label='D30# (1 km)')

    offset = offset + np.max(D30_data)
    luminosity_peak = np.append(luminosity_peak, np.max(D30_data))

    plt.grid()
    plt.xlabel('Time $\mu s$')
    handles, labels = ax.get_legend_handles_labels()
    ax.legend(handles[::-1], labels[::-1]).draggable()
    plt.title('Event UF 16-' + str(event) + ', RS ' + str(RS_number) +
              ' (2015 APDs only)')
    plt.xlim(-50, 200)
    plt.show()
Exemplo n.º 15
0
def read_skywaves_2016(station, year, date, event, RS_number, RS_time, suffix,
                       x_max, filterwindow):
    ####################
    # Input Parameters #
    ####################
    #    fs=10e6 #sampling rate
    #    event=43 #event name
    #    RS_number=4 #return stroke number
    #    RS_time=23.293418545 #seconds of the XLI time stamp (for trigger lightning)
    #                        #this time can be found in the triggered lightning reports
    #    x_max=500e-6 #xlim max for plotting the skywaves
    #    suffix=13
    DBY_distance = 209e3  #209 km
    VE_distance = 302.5e3  #302.5 km
    GL_distance = 50e3

    if station == "VE":
        distance = VE_distance
    elif station == "DBY":
        distance = DBY_distance
    elif station == "GL":
        distance = GL_distance

    c = 2.99e8  #m/s

    ##############
    # Read Files #
    ##############
    #import IRIG file
    #    if suffix <=9:
    lecroy_fileName_IRIG = "/Volumes/Promise 12TB RAID5/" + str(
        year) + " Data/0" + str(date) + "/" + str(station) + "/C2" + str(
            station) + "0000" + str(suffix) + ".trc"
    lecroy_IRIG = lc.lecroy_data(lecroy_fileName_IRIG)
    segments_IRIG = lecroy_IRIG.get_segments()

    #read IRIG file and print time stamp
    timestamp, t = IRIGA.IRIGA_signal(segments_IRIG[0], fs, year=year)
    print('time stamp from IRIGA: %s' % timestamp)

    #import skywaves data
    lecroy_fileName_data = "/Volumes/Promise 12TB RAID5/" + str(
        year) + " Data/0" + str(date) + "/" + str(station) + "/C1" + str(
            station) + "0000" + str(suffix) + ".trc"
    lecroy_data = lc.lecroy_data(lecroy_fileName_data)
    segments_data = lecroy_data.get_segments()

    GW_propagation_delay = distance / c

    ##ICLRT XLi + propagation delay
    UTC_time_at_station = RS_time + GW_propagation_delay - 80e-6  #The -80us accounts for some data to be displayed before the groundwave

    ##This is the time t is referred to, i.e., t[0] is 0 seconds after reference_UTC_seconds
    reference_UTC_seconds = timestamp.second + timestamp.microsecond / 1e6
    UTC_reference_time = "%r:%r:%r" % (timestamp.hour, timestamp.minute,
                                       reference_UTC_seconds)

    ##Find the index in the t array closest to the UTC_time_at_DBY
    n0 = np.argmax(
        np.abs(1.0 / (t + reference_UTC_seconds - UTC_time_at_station)))

    ##This will shift the data[n0] to t=0
    shift_to_0 = t[n0]
    UTC_reference_time = "%r:%r:%11.9f" % (timestamp.hour, timestamp.minute,
                                           reference_UTC_seconds + shift_to_0)

    ##The data window is from n0 to nf, nf being x_max in seconds. Here we have a 500us window if x_max is set to 500e-6
    nf = n0 + x_max * fs

    time = t[n0:nf] - shift_to_0
    Ez_data = segments_data[0][n0:nf]

    print('UTC reference time: %s' % UTC_reference_time)

    #    plt.plot(time*1e6,Ez_data)
    #    plt.xlabel('UTC time in microseconds after %s' %UTC_reference_time)
    #    plt.show()

    ##############################################
    ## Resample to 1MHz (Cummer's sampling rate) #
    ##############################################
    #Ez_data=ss.resample(Ez_data,x_max/1e-6)
    #time=ss.resample(time,x_max/1e-6)
    #plt.plot(time,Ez_data)
    #plt.show()

    #########################
    # Moving Average Filter #
    #########################
    def movingaverage(interval, window_size):
        window = np.ones(int(window_size)) / float(window_size)
        return np.convolve(interval, window, mode='same')

    Moving_Average_Ez = movingaverage(Ez_data, filterwindow)

    ####################
    # Measure Risetime #
    ####################
    def noise_analysis(x, y, fs, t0):
        #        plot(x,y)
        #        print("Please click")
        #        xx = ginput(3)
        xx = [0, 0.00006, 0.000095]  #just for this application!
        sampling_time = 1 / fs

        t0_noise = np.int(
            xx[0] / sampling_time
        ) - t0 / sampling_time  #xx[0][0] when ginput is being used
        tf_noise = np.int(
            xx[1] / sampling_time
        ) - t0 / sampling_time  #xx[1][0] when ginput is being used
        t_end = np.int(
            xx[2] / sampling_time
        ) - t0 / sampling_time  #xx[2][0] when ginput is being used
        #        show()

        t_max = np.argmax(y[0:t_end])
        y_topeak = y[0:t_max]
        y_afterpeak = y[t_max:-1]
        noise_data_window = y_topeak[t0_noise:tf_noise]
        sigma = np.std(noise_data_window)
        mean = np.mean(noise_data_window)

        min_ind = np.argmax(np.abs(1.0 / ((mean + 4 * sigma) - y_topeak)))
        min_ampl = y_topeak[min_ind]
        max_ampl = np.max(y_topeak)
        curve_peak = y_topeak[-1] - mean
        y_ampl = max_ampl - min_ampl

        five_percent_ind = np.argmax(
            np.abs(1.0 / ((0.05 * y_ampl + min_ampl) - y_topeak)))
        ten_percent_ind = np.argmax(
            np.abs(1.0 / ((0.1 * y_ampl + min_ampl) - y_topeak)))
        twenty_percent_ind = np.argmax(
            np.abs(1.0 / ((0.2 * y_ampl + min_ampl) - y_topeak)))
        fifty_percent_ind = np.argmax(
            np.abs(1.0 / ((0.5 * y_ampl + min_ampl) - y_topeak)))
        fifty_percent_afterpeak_ind = np.argmax(
            np.abs(1.0 / ((0.5 * y_ampl + min_ampl) - y_afterpeak))) + t_max
        eighty_percent_ind = np.argmax(
            np.abs(1.0 / ((0.8 * y_ampl + min_ampl) - y_topeak)))
        ninety_percent_ind = np.argmax(
            np.abs(1.0 / ((0.9 * y_ampl + min_ampl) - y_topeak)))
        risetime_90_10 = ninety_percent_ind - ten_percent_ind
        risetime_90_10_time = risetime_90_10 * sampling_time

        five_percent_to_peak_time = (t_max - five_percent_ind) * sampling_time
        half_width_time = (fifty_percent_afterpeak_ind -
                           fifty_percent_ind) * sampling_time
        print("standard deviation= %.4f noise mean= %.4f" % (sigma, mean))
        print("10-90 risetime (sec)=%r" % risetime_90_10_time)
        print("5-peak risetime (sec)=%r" % five_percent_to_peak_time)
        print("half peak width (sec)=%r" % half_width_time)
        #        plt.plot(x,y, 'b', \
        #        x[t0_noise:tf_noise],y[t0_noise:tf_noise], 'g', \
        #        [x[0],x[-1]],[mean,mean], 'r', \
        #        [x[0],x[-1]],[mean+sigma,mean+sigma], '--r', \
        #        [x[0],x[-1]],[mean-sigma,mean-sigma], '--r', \
        #        x[min_ind],y[min_ind],'og',\
        #        x[five_percent_ind],y[five_percent_ind],'oy',\
        #        [x[ten_percent_ind],x[ninety_percent_ind]],[y[ten_percent_ind],y[ninety_percent_ind]], 'or',\
        #        [x[fifty_percent_ind],x[fifty_percent_afterpeak_ind]],[y[fifty_percent_ind],y[fifty_percent_afterpeak_ind]],'oc')
        #        plt.show()

        return risetime_90_10_time, ten_percent_ind, min_ind, y_ampl, mean,\
        twenty_percent_ind, fifty_percent_ind, eighty_percent_ind,\
        ninety_percent_ind, risetime_90_10, curve_peak, t_max, five_percent_to_peak_time

    #    time2=time-group_delay
    #    LPF_skywave = noise_analysis(time2,filtered_skywave,10e6,0)
    #    print("LPF 10-90 risetime = %r" %LPF_skywave[0])
    #
    MovAvg_skywave = noise_analysis(time[10:-10], Moving_Average_Ez[10:-10],
                                    fs, 0)
    risetime_10_90 = MovAvg_skywave[0]
    ten_percent_level = MovAvg_skywave[1] * (1 / fs)
    ground_wave_start = MovAvg_skywave[2] * (1 / fs)
    ground_wave_ampl = MovAvg_skywave[3]
    ground_wave_max = MovAvg_skywave[10]
    ground_wave_time_peak = MovAvg_skywave[11] * (1 / fs)
    min_ampl = MovAvg_skywave[4]
    five_percent_to_peak_time = MovAvg_skywave[12]
    print("Moving Average 10-90 risetime = %r" % MovAvg_skywave[0])

    time = time + ground_wave_start
    reference_UTC_seconds = reference_UTC_seconds + shift_to_0 - ground_wave_start
    UTC_reference_time = "%r:%r:%11.9f" % (timestamp.hour, timestamp.minute,
                                           reference_UTC_seconds)
    #    unfiltered = noise_analysis(time,skywave,10e6,0)
    #    print("Unfiltered 10-90 risetime = %r" %unfiltered[0])

    return time, Moving_Average_Ez, UTC_reference_time, risetime_10_90, ten_percent_level,\
    ground_wave_start, ground_wave_ampl, min_ampl, ground_wave_max, ground_wave_time_peak,\
    Ez_data, timestamp, reference_UTC_seconds,five_percent_to_peak_time
Exemplo n.º 16
0
def get_data_set(eventDate=1, eventName = '0000', meas_numbers=[], rs = 1):
    
    """
    File Information
    """

    eventDate = eventDate
    eventName = eventName
    rs = rs
    
    if meas_numbers == []:
        scope18_number = 0
        scope20_number = 0
        scope21_number = 0
        scope24_number = 0
        scope25_number = 0
        scope26_number = 0
    else:
        scope18_number = meas_numbers[0]
        scope20_number = meas_numbers[1]
        scope21_number = meas_numbers[2]
        scope24_number = meas_numbers[3]
        scope25_number = meas_numbers[4]
        scope26_number = meas_numbers[5]
    
    # Scope filenames
    scope24_filename = '/media/jaime/JaimeBackup/OSX2/My Papers/Current Reflections/Raw Data/%s/Scope24/D000%d' % (eventDate, scope24_number)
    
    scope25_filename = '/media/jaime/JaimeBackup/OSX2/My Papers/Current Reflections/Raw Data/%s/Scope25/D000%d' % (eventDate, scope25_number)
    
    scope26_filename = '/media/jaime/JaimeBackup/OSX2/My Papers/Current Reflections/Raw Data/%s/Scope26/C1AC0000%d.trc' % (eventDate, scope26_number)
    
    log_filename = '/media/jaime/JaimeBackup/OSX2/My Papers/Current Reflections/Raw Data/LOG/Data for Jaime/UF13-09/UF1309_LOG_E'
    
    # Scope 20
    de_1_filename = '/media/jaime/JaimeBackup/OSX2/My Papers/Current Reflections/Raw Data/%s/Scope20/C1AC0000%d.trc' % (eventDate, scope20_number)
    de_3_filename = '/media/jaime/JaimeBackup/OSX2/My Papers/Current Reflections/Raw Data/%s/Scope20/C2AC0000%d.trc' % (eventDate, scope20_number)
    de_4_filename = '/media/jaime/JaimeBackup/OSX2/My Papers/Current Reflections/Raw Data/%s/Scope20/C3AC0000%d.trc' % (eventDate, scope20_number)
    de_5_filename = '/media/jaime/JaimeBackup/OSX2/My Papers/Current Reflections/Raw Data/%s/Scope20/C4AC0000%d.trc' % (eventDate, scope20_number)
    
    # Scope 21
    de_7_filename = '/media/jaime/JaimeBackup/OSX2/My Papers/Current Reflections/Raw Data/%s/Scope20/C1AC0000%d.trc' % (eventDate, scope21_number)
    de_8_filename = '/media/jaime/JaimeBackup/OSX2/My Papers/Current Reflections/Raw Data/%s/Scope20/C2AC0000%d.trc' % (eventDate, scope21_number)
    de_9_filename = '/media/jaime/JaimeBackup/OSX2/My Papers/Current Reflections/Raw Data/%s/Scope20/C3AC0000%d.trc' % (eventDate, scope21_number)
    de_11_filename = '/media/jaime/JaimeBackup/OSX2/My Papers/Current Reflections/Raw Data/%s/Scope20/C4AC0000%d.trc' % (eventDate, scope21_number)
    
    # Scope 18
    de_17_filename = '/media/jaime/JaimeBackup/OSX2/My Papers/Current Reflections/Raw Data/%s/Scope18/C4AC0000%d.trc' % (eventDate, scope18_number)

    # Measurement parameters
    II_HI_24 = {'cal':55214.78, 'trace':1, 'fileName':scope24_filename, 'units':'A', 'distance':'0m'}
    II_HI = {'cal':19960.08, 'trace':13, 'fileName':scope25_filename, 'units':'A', 'distance':'0m'}
    II_HI_26 = {'cal':59127.23, 'trace':5, 'fileName':scope26_filename, 'units':'A', 'distance':'0m'}
    
    E_7 = {'cal':75.82, 'trace':2, 'fileName':scope25_filename, 'units':'V/m', 'distance':'225m'}
    E_12F = {'cal':61721.9, 'trace':3, 'fileName':scope25_filename, 'units':'V/m', 'distance':'180m'}
    E_12 = {'cal':200384.89, 'trace':4, 'fileName':scope25_filename, 'units':'V/m', 'distance':'180m'}
    E_13 = {'cal':67.2, 'trace':5, 'fileName':scope25_filename, 'units':'V/m', 'distance':'26m'}
    E_13F = {'cal':23.64, 'trace':6, 'fileName':scope25_filename, 'units':'V/m', 'distance':'26m'}
    E_NW60 = {'cal':8387.2, 'trace':7, 'fileName':scope25_filename, 'units':'V/m', 'distance':'60m'}
    E_NW100 = {'cal':8074.52, 'trace':8, 'fileName':scope25_filename, 'units':'V/m', 'distance':'100m'}
    E_16HI = {'cal':16555.67, 'trace':9, 'fileName':scope25_filename, 'units':'V/m', 'distance':'65m'}
    E_16LO = {'cal':3050.02, 'trace':10, 'fileName':scope25_filename, 'units':'V/m', 'distance':'63m'}
    
    E_5 = {'cal':30904.17, 'trace':14, 'fileName':scope24_filename, 'units':'V/m', 'distance':'92m'}
    E_11 = {'cal':2436.68, 'trace':7, 'fileName':scope24_filename, 'units':'V/m', 'distance':'316m'}
    E_18 = {'cal':23647.60, 'trace':8, 'fileName':scope24_filename, 'units':'V/m', 'distance':'327m'}
    E_23 = {'cal':40482.39, 'trace':10, 'fileName':scope24_filename, 'units':'V/m', 'distance':'257m'}

    E_LOG = {'cal':100, 'trace':1, 'fileName':log_filename, 'units':'V/m', 'distance':'45km'}
    
    dE_1  = {'cal':15.76*1E9, 'trace':1, 'fileName':de_1_filename, 'units':'V/m/s', 'distance':'165m'}
    dE_3  = {'cal':15.65*1E9, 'trace':1, 'fileName':de_3_filename, 'units':'V/m/s', 'distance':'137m'}
    dE_4  = {'cal':14.89*1E9, 'trace':1, 'fileName':de_4_filename, 'units':'V/m/s', 'distance':'382m'}
    dE_5  = {'cal':15.14*1E9, 'trace':1, 'fileName':de_5_filename, 'units':'V/m/s', 'distance':'77m'}
    
    dE_7  = {'cal':14.33*1E9, 'trace':1, 'fileName':de_7_filename, 'units':'V/m/s', 'distance':'225m'}
    dE_8  = {'cal':13.44*1E9, 'trace':1, 'fileName':de_8_filename, 'units':'V/m/s', 'distance':'313m'}
    dE_9  = {'cal':14.20*1E9, 'trace':1, 'fileName':de_9_filename, 'units':'V/m/s', 'distance':'390m'}
    dE_11  = {'cal':14.24*1E9, 'trace':1, 'fileName':de_11_filename, 'units':'V/m/s', 'distance':'233m'}
    
    dE_17  = {'cal':14.58*1E9, 'trace':1, 'fileName':de_17_filename, 'units':'V/m/s', 'distance':'27m'}
    
    
    scope24_meas = {}#'II_HI':II_HI_24, \
                    #~ 'E_5':E_5, \
                    #~ 'E_11':E_11, \
                    #~ 'E_18':E_18, \
                    #~ 'E_23':E_23 , \
                    #~ }
    
    scope25_meas = {'II_HI':II_HI, \
                    'E_12F':E_12F , \
                    #~ 'E_12':E_12, \
                    #~ # 'E_13':E_13, \
                    #~ # 'E_13F':E_13F, \
                    'E_NW60':E_NW60, \
                    #~ 'E_NW100':E_NW100, \
                    #~ 'E_16HI':E_16HI\
                    'E_16LO':E_16LO, \
                    }
                     
    scope20_meas = {'dE_1':dE_1, \
                    'dE_3':dE_3, \
                    'dE_4':dE_4, \
                    'dE_5':dE_5, \
                   }
                   
    scope21_meas = {'dE_7':dE_7, \
                    'dE_8':dE_8, \
                    'dE_9':dE_9, \
                    'dE_11':dE_11, \
                   }
                   
    scope26_meas = {}#'II_HI':II_HI_26}
    
    scope18_meas = {'dE_17':dE_17}
    
    log_meas = {}#'E_LOG':E_LOG}

    t_start = 0
    t_end = 2
    wantOffset = False

    """
    Load waveforms
    """
    ### II_HI
    
    keys = scope24_meas.keys()
    
    if keys:
        f = yk850.Yoko850File(scope24_filename)
        header = f.get_header()
        
        result = {}
    
    for i,key in enumerate(keys):
        try:
            result[key] = f.get_trace_data(header, scope24_meas[key]['trace'], t_start,\
                            t_end, scope24_meas[key]['cal'], wantOffset)
        except AttributeError:
            print("\n\nERROR: Invalid file.")
            sys.exit(1)
            
    for i,key in enumerate(keys):
        scope24_meas[key]['result'] = result[key]
    
    keys = scope25_meas.keys()
    
    if keys:
        f = yk850.Yoko850File(scope25_filename)
        header = f.get_header()
        
        result = {}
    
    for i,key in enumerate(keys):
        try:
            result[key] = f.get_trace_data(header, scope25_meas[key]['trace'], t_start,\
                            t_end, scope25_meas[key]['cal'], wantOffset)
        except AttributeError:
            print("\n\nERROR: Invalid file.")
            sys.exit(1)
            
    for i,key in enumerate(keys):
        scope25_meas[key]['result'] = result[key]
        
    keys = scope26_meas.keys()
    
    for i,key in enumerate(keys):
        lecroy = lc.lecroy_data(scope26_meas[key]['fileName'])
        lecroy.get_seg_time()
        lecroy.get_segment(scope26_meas[key]['trace'], scope26_meas[key]['cal'])
        offset = np.average(lecroy.data[0:int(len(lecroy.data)/5)])
        lecroy.data -= offset
        
        scope26_meas[key]['result'] = lecroy        
        
    
    ### E_LOG
    f = yk850.Yoko850File(log_filename)
    header = f.get_header()
    
    keys = log_meas.keys()
    result = {}
    
    for i,key in enumerate(keys):
        try:
            result[key] = f.get_trace_data(header, log_meas[key]['trace'], 2.4,\
                            2.7, log_meas[key]['cal'], wantOffset)
        except AttributeError:
            print("\n\nERROR: Invalid file.")
            sys.exit(1)
            
    for i,key in enumerate(keys):
        log_meas[key]['result'] = result[key]


    ### dE/dt
    keys = scope20_meas.keys()
    
    for i,key in enumerate(keys):
        lecroy = lc.lecroy_data(scope20_meas[key]['fileName'])
        lecroy.get_seg_time()
        lecroy.get_segment(scope20_meas[key]['trace'], scope20_meas[key]['cal'])
        offset = np.average(lecroy.data[0:int(len(lecroy.data)/5)])
        lecroy.data -= offset
        
        scope20_meas[key]['result'] = lecroy    
        
        dt = np.diff(lecroy.dataTime)[0]
        ind = 0 #len(lecroy.dataTime)/2.0 - 100E-6/dt 
        
        scope20_meas[key]['result'].data = integrate.cumtrapz(y=scope20_meas[key]['result'].data[ind:], x=scope20_meas[key]['result'].dataTime[ind:], initial=0)
        scope20_meas[key]['result'].dataTime = scope20_meas[key]['result'].dataTime[ind:]
        
    keys = scope21_meas.keys()
    
    for i,key in enumerate(keys):
        lecroy = lc.lecroy_data(scope21_meas[key]['fileName'])
        lecroy.get_seg_time()
        lecroy.get_segment(scope21_meas[key]['trace'], scope21_meas[key]['cal'])
        offset = np.average(lecroy.data[0:int(len(lecroy.data)/5)])
        lecroy.data -= offset
        
        scope21_meas[key]['result'] = lecroy   
        
        dt = np.diff(lecroy.dataTime)[0]
        ind = 0 #len(lecroy.dataTime)/2.0 - 100E-6/dt     
        
        scope21_meas[key]['result'].data = integrate.cumtrapz(y=scope21_meas[key]['result'].data[ind:], x=scope21_meas[key]['result'].dataTime[ind:], initial=0)
        scope21_meas[key]['result'].dataTime = scope21_meas[key]['result'].dataTime[ind:]
        
    keys = scope18_meas.keys()
    
    for i,key in enumerate(keys):
        lecroy = lc.lecroy_data(scope18_meas[key]['fileName'])
        lecroy.get_seg_time()
        lecroy.get_segment(scope18_meas[key]['trace'], scope18_meas[key]['cal'])
        offset = np.average(lecroy.data[0:int(len(lecroy.data)/5)])
        lecroy.data -= offset
        
        scope18_meas[key]['result'] = lecroy        
        
        scope18_meas[key]['result'].data = integrate.cumtrapz(y=scope18_meas[key]['result'].data, x=scope18_meas[key]['result'].dataTime, initial=0)
        
    """
    Get time intervals
    """
    rt_plots = {}
    
    keys = scope24_meas.keys()
    
    for i, key in enumerate(keys):
        print("Acquiring %s" % key)
        rt_plots[key] = df.RelativeTimePlot(scope24_meas[key]['result'].dataTime, scope24_meas[key]['result'].data, max_points=1E9)
        rt_plots[key].plot()
        plt.show()
    
    keys = scope25_meas.keys()
    
    for i, key in enumerate(keys):
        print("Acquiring %s" % key)
        rt_plots[key] = df.RelativeTimePlot(scope25_meas[key]['result'].dataTime, scope25_meas[key]['result'].data, max_points=1E9)
        rt_plots[key].plot()
        plt.show()
        
        print('%s offset: %02.f' % (key, rt_plots[key].y[rt_plots[key].zero_ind]))
        
    keys = scope20_meas.keys()
    
    for i, key in enumerate(keys):
        print("Acquiring %s" % key)
        rt_plots[key] = df.RelativeTimePlot(scope20_meas[key]['result'].dataTime, scope20_meas[key]['result'].data, max_points=1E9)
        rt_plots[key].plot()
        plt.show()
        
        print('%s offset: %02.f' % (key, rt_plots[key].y[rt_plots[key].zero_ind]))
        
    keys = scope21_meas.keys()
    
    for i, key in enumerate(keys):
        print("Acquiring %s" % key)
        rt_plots[key] = df.RelativeTimePlot(scope21_meas[key]['result'].dataTime, scope21_meas[key]['result'].data, max_points=1E9)
        rt_plots[key].plot()
        plt.show()
        
        print('%s offset: %02.f' % (key, rt_plots[key].y[rt_plots[key].zero_ind]))
        
    keys = log_meas.keys()
    
    keys = scope26_meas.keys()
    
    for i, key in enumerate(keys):
        print("Acquiring %s" % key)
        rt_plots[key] = df.RelativeTimePlot(scope26_meas[key]['result'].dataTime, scope26_meas[key]['result'].data, max_points=1E9)
        rt_plots[key].plot()
        plt.show()
        
    keys = scope18_meas.keys()
    
    for i, key in enumerate(keys):
        print("Acquiring %s" % key)
        rt_plots[key] = df.RelativeTimePlot(scope18_meas[key]['result'].dataTime, scope18_meas[key]['result'].data, max_points=1E9)
        rt_plots[key].plot()
        plt.show()
        
        print('%s offset: %02.f' % (key, rt_plots[key].y[rt_plots[key].zero_ind]))
        
    keys = log_meas.keys()
    
    for i,key in enumerate(keys):
        print("Acquiring %s" % key)
        rt_plots[key] = df.RelativeTimePlot(log_meas[key]['result'].dataTime, log_meas[key]['result'].data, max_points=1E9)
        rt_plots[key].plot()
        plt.show()        

    """
    Plot
    """
    axes = {}
    lims = [5E-6,95E-6]
    
    
    for i,key in enumerate(rt_plots):
        fig, ax = rt_plots[key].relative_plot(1E6,lims)
        
        if key in list(scope24_meas.keys()):
            ax.set_title('%s (D = %s)' % (key,scope24_meas[key]['distance']))
            ax.set_ylabel('(%s)' % scope24_meas[key]['units'])
            
        elif key in list(scope25_meas.keys()):
            ax.set_title('%s (D = %s)' % (key,scope25_meas[key]['distance']))
            ax.set_ylabel('(%s)' % scope25_meas[key]['units'])
            
        elif key in list(scope20_meas.keys()):
            ax.set_title('%s (D = %s)' % ('Integrated %s'%key,scope20_meas[key]['distance']))
            ax.set_ylabel('(%s)' % scope20_meas[key]['units'])
            
        elif key in list(scope21_meas.keys()):
            ax.set_title('%s (D = %s)' % ('Integrated %s'%key,scope21_meas[key]['distance']))
            ax.set_ylabel('(%s)' % scope21_meas[key]['units'])
            
        elif key in list(scope26_meas.keys()):
            ax.set_title('%s (D = %s)' % (key,scope26_meas[key]['distance']))
            ax.set_ylabel('(%s)' % scope26_meas[key]['units'])
        
        elif key in list(scope18_meas.keys()):
            ax.set_title('%s (D = %s)' % ('Integrated %s'%key,scope18_meas[key]['distance']))
            ax.set_ylabel('(%s)' % scope18_meas[key]['units'])
        
        elif key in list(log_meas.keys()):
            ax.set_title('%s (D = %s)' % (key,log_meas[key]['distance']))
            ax.set_ylabel('(%s)' % log_meas[key]['units'])
        
        axes[key] = ax
        plt.close(fig)
        
    #~ 
    #~ for i,key in enumerate(rt_plots_l):
        #~ fig, ax = rt_plots_l[key].relative_plot(1E6,lims)
        #~ ax.set_title('%s (D = %s)' % (key,log_meas[key]['distance']))
        #~ ax.set_ylabel('(%s)' % log_meas[key]['units'])
        #~ axes[key] = ax
        #~ plt.close(fig)
        
    """
    Save data
    """
        
    keys = axes.keys()
    data = {'axes':axes}
    
    for i,key in enumerate(keys):
        if key == 'E_LOG':
            data[key] = axes[key].get_lines()[0].get_ydata() - rt_plots[key].y[(rt_plots[key].zero_time - rt_plots[key].x[0])/rt_plots[key].delta_t]
            
        else:
            print("Offsetting %s by %0.2f" % (key, rt_plots[key].y[rt_plots[key].zero_ind]))
            data[key] = axes[key].get_lines()[0].get_ydata() - rt_plots[key].y[rt_plots[key].zero_ind]
        
    data['time'] = axes['II_HI'].get_lines()[0].get_xdata()    
    

    fileSave = "UF%s_data_%s_rs%d.p" % (eventName, eventDate, rs)
    #~ fileSave = "data_test.p"
    
    try:
        fo = pickle.load(open(fileSave, "rb"))
        temp = {}
        
        for i,key in enumerate(fo.keys()):
            temp[key] = fo[key]
            
        for i,key in enumerate(axes.keys()):
            temp[key] = data[key]
            temp['axes'][key] = axes[key]
            
        pickle.dump(temp, open(fileSave, "wb"))
            
    except FileNotFoundError:
        pickle.dump(data, open(fileSave, "wb"))