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
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)
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
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
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()
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
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()
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)
#################### # 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
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()
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
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"))