Beispiel #1
0
def fitter_timing(datadate,samplerate_name,shaping):
    if samplerate_name == 'INVALID':
        return("Failed")
    t_fitter,v_fitter,_ = rw('G:/data/watchman/'+datadate+'_watchman_spe/d2/d2_average.txt',1)
    uspl = us(t_fitter,v_fitter)
    filedir = 'G:/data/watchman/'+str(datadate)+'_watchman_spe/studies/phase/'+samplerate_name+'/'
    Nloops = len(os.listdir(filedir + 'phase=0/phase_'+shaping))
    for i in range(Nloops):
        print(i)
        filename_exact = 'G:/data/watchman/'+str(datadate)+'_watchman_spe/d3/d3_raw_gained/D3--waveforms--%05d.txt' % i
        t,v,_ = rw(filename_exact,5)
        v = -1*v
        ET = t[0:400]
        EV = v[0:400]
        chi2_min = -1
        x_min = -1
        y_min = -1
        shift_min = -1
        shifts = np.arange(0,80/20000000000,1e-11)
        for shift in shifts:
            pre_OV = uspl(ET + shift)
            A = np.array([[np.sum(np.square(pre_OV)),np.sum(pre_OV),np.sum(np.multiply(pre_OV,EV))],[np.sum(pre_OV),len(EV),np.sum(EV)]])
            A[0] = A[0]/A[0][0]
            A[1] = np.subtract(A[1],A[1][0]*A[0])
            A[1] = A[1]/A[1][1]
            A[0] = np.subtract(A[0],A[0][1]*A[1])
            x = A[0][2]
            y = A[1][2]
            OV = x*pre_OV + y
            chi2 = chi_squared(OV,EV)
            if chi2_min < 0:
                shift_min = shift
                chi2_min = chi2
                x_min = x
                y_min = y
            elif chi2 < chi2_min:
                shift_min = shift
                chi2_min = chi2
                x_min = x
                y_min = y
        v_fit = x_min*uspl(t_fitter + shift_min) + y_min
        t_cross = timing_extraction(t_fitter,v_fit)
        if t_cross <= -0.5e-10 or chi2_min >= 7.95e-5 or t_cross >= 0.5e-10:
            fig,ax = plt.subplots()
            ax.plot(t,v)
            ax.plot(t_fitter,v_fit)
            ax.axvline(0,color = 'Black')
            ax.axvline(t_cross,color = 'Red')
            ax.set_title(str(t_cross) + ', ' + str(chi2_min) + ', ' + str(i))
            plt.get_current_fig_manager().window.showMaximized()
            plt.show(block = False)
            plt.pause(0.1)
            fig.savefig('G:/data/watchman/20190724_watchman_spe/studies/phase/Histograms/'+samplerate_name+'/Doubles/%05d.png' % i,dpi = 500)
            print("Was double!")
            plt.close()
    return("Passed")
def p3(noise, datadate, numhead, fsps, new_fsps, gain_noise, gain_factor_2,
       gain_factor_4, gain_factor_8, start_index, steps, scale_array):
    #establishing directory names
    if new_fsps == 1000000000:
        sample_rate = '1 Gsps'
    elif new_fsps == 500000000:
        sample_rate = '500 Msps'
    elif new_fsps == 250000000:
        sample_rate = '250 Msps'
    else:
        sample_rate = 'trash'
    filename = 'G:/data/watchman/' + datadate + '_watchman_spe/d2/d2_average.txt'
    writedir = 'G:/data/watchman/' + datadate + '_watchman_spe/studies/phase/' + sample_rate + '/averages/phase=' + str(
        start_index) + '/phase_raw_gained_analyzed/'
    #creating directories if they don't exist
    if not os.path.exists(writedir):
        os.makedirs(writedir)
    t, v, header = rw(filename, numhead)
    Nloops = len(scale_array)  #establishing how many files to cycle through
    for i in range(Nloops):
        scale_height = scale_array[i] / np.max(v)
        v_scaled = v * scale_height
        print('%s/%s, File: %05d' %
              (start_index + 1, steps,
               i))  #printing number of file currently being processed
        #establishing read and write names
        writename = writedir + 'Phase--waveforms--%05d.txt' % i
        #downsampling waveform values
        (t_down, v_down) = downsampling(t - start_index * 1 / 20000000000,
                                        v_scaled, fsps, new_fsps, start_index)
        #digitizing waveform values
        v_digit = digitize(v_down, noise)
        #saving downsampled and digitized waveforms
        write_waveform(t_down, v_digit, writename, header)
Beispiel #3
0
def determine(datadate, numhead):
    Nloops = len(
        os.listdir('G:/data/watchman/' + datadate +
                   '_watchman_spe/d1/d1_50centered'))
    writename = 'G:/data/watchman/' + datadate + '_watchman_spe/d1/d1_histograms/charge.txt'
    if not os.path.exists('G:/data/watchman/' + datadate +
                          '_watchman_spe/d1/d1_histograms/histogram_images'):
        os.makedirs('G:/data/watchman/' + datadate +
                    '_watchman_spe/d1/d1_histograms/histogram_images')
    #determining charge
    for i in range(Nloops):
        print(i)
        area = 0
        filename = 'G:/data/watchman/' + datadate + '_watchman_spe/d1/d1_50centered/D1--waveforms--%05d.txt' % i
        (t, y, _) = rw(filename, numhead)
        #determining area under curve
        for i in range(len(y) - 1):
            area += ((t[i + 1] - t[i]) * y[i])
        charge = str(
            -1 * area / 50
        )  #area under curve/resistance gives charge, made positive for graphical reasons
        wh(charge, writename)
    #create histogram from saved file
    (histo_mean, histo_std) = gh(writename)
    rh(writename, "Coulombs", "Histogram of Charges", "Charge", datadate,
       histo_mean, histo_std)
Beispiel #4
0
def determine(datadate,numhead,directory):
    Nloops = len(os.listdir('G:/data/watchman/'+datadate+'_watchman_spe/d2/d2_'+directory))
    if directory == 'raw':
        Nloops -= 1
    writename = 'G:/data/watchman/'+datadate+'_watchman_spe/d2/d2_histograms/10_90_rise_time_'+directory+'.txt'
    if not os.path.exists('G:/data/watchman/'+datadate+'_watchman_spe/d2/d2_histograms/histogram_images/'):
        os.makedirs('G:/data/watchman/'+datadate+'_watchman_spe/d2/d2_histograms/histogram_images/')
    #determine rise times
    for i in range(Nloops):
        print(i)
        filename = 'G:/data/watchman/'+datadate+'_watchman_spe/d2/d2_'+directory+'/D2--waveforms--%05d.txt' % i
        (t,y,_) = rw(filename,numhead)
        y_norm = y/min(y)
        check10 = y_norm <= .1                                      #determining where 10% and 90% are located
        check90 = y_norm >= .9
        index10 = np.asarray([k for k, x in enumerate(check10) if x])
        index90 = np.asarray([k for k, x in enumerate(check90) if x])
        index_90 = int(index90[0] + 0.5)
        index10_removed = index10[np.where(index10 < index_90)]     #removing all values after 90% rise index
        index_10 = int(index10_removed[len(index10_removed)-1] + 0.5)   #turning last 10% rise index into int
        rise_time = str(t[index_90] - t[index_10])                  #rise time is time at 90% - time at 10%
        wh(rise_time,writename)                                     #writing value to histogram txt file
    #create histogram from saved file
    (histo_mean,histo_std) = gh(writename)
    rh(writename,"Seconds","Histogram of 10-90 Rise Times","10_90_Rise_"+directory,datadate,histo_mean,histo_std)
Beispiel #5
0
def disparity_investigation(samplerate_name,shaping,datadate,n_box,n_delay,n_att,numhead):
    phase_time = 1/20000000000  #sets timing between phases (initial sample rate of oscilloscope)
    
    filedir = 'G:/data/watchman/'+str(datadate)+'_watchman_spe/studies/phase/'+samplerate_name+'/phase=0/phase_'+shaping+'/'
    Nloops = len(os.listdir(filedir))

    filedir = 'G:/data/watchman/'+str(datadate)+'_watchman_spe/studies/phase/' + samplerate_name + '/array_data/'
    median_array = np.loadtxt(filedir+'median_array.csv', delimiter=',')
    correction_median_array = np.loadtxt(filedir+'correction_median_array.csv', delimiter=',')

    for i in range(29,40):
        corrected_difference_list = []      #initializing lists (use python lists rather than np arrays when appending, faster)
        for j in range(Nloops):
            print(j)            #printing value to show progress
            #establishing directory and file names
            filedir = 'G:/data/watchman/'+str(datadate)+'_watchman_spe/studies/phase/'+samplerate_name+'/phase='+str(i)+'/phase_'+shaping+'/'
            filename = filedir + 'Phase--waveforms--%05d.txt' % j
            #reading in waveform values and running CFD
            (t,v,_) = rw(filename,numhead)
            t_avg,v_avg = boxcar_wf(t,v,n_box)
            v_delay = delay_wf(v_avg,n_delay)
            v_att = attenuate_wf(v_avg,n_att)
            v_sum = sum_wf(v_att,v_delay)
            t_cross,_,_ = zc_locator(t_avg,v_sum)
            t_cross = t_cross - median_array[0]     #removing linear displacement
            corrected_difference_list.append(-1*i*phase_time - (t_cross + correction_median_array[i]))  #gathering timing difference

        corrected_difference_list = np.asarray(corrected_difference_list)   #turning to numpy array for better calculation

        #calculating full mean and standard deviations
        set_mean = np.mean(corrected_difference_list)
        set_std = np.std(corrected_difference_list)
        set_mean = '%.5g' % set_mean
        set_std = '%.5g' % set_std
        histo_mean,histo_std = gauss_histogram(corrected_difference_list)   #gathering starting means/stds for fit
        corrected_difference_list = corrected_difference_list[(corrected_difference_list >= histo_mean - 4*histo_std) & (corrected_difference_list <= histo_mean + 4*histo_std)]    #cutting off outliers
        histo_data, bins_data = np.histogram(corrected_difference_list, bins = 200)
        binwidth = (bins_data[1] - bins_data[0])                    #determining bin width
        #determining bin centers
        binscenters = np.array([0.5 * (bins_data[i] + bins_data[i+1]) for i in range(len(bins_data)-1)])
        b_guess = (len(corrected_difference_list) * binwidth)   #using area approximation to guess at B value
        popt, _ = cf(fit_function,xdata = binscenters,ydata = histo_data, p0 = [b_guess,histo_mean,histo_std], maxfev = 10000)
        gauss_mean = '%s' % float('%.5g' % popt[1])
        gauss_std = '%s' % float('%.5g' % popt[2])
        #establishing 5 significant figure versions of the mean and std from curve fit
        x_values = np.linspace(popt[1] - 1.5*popt[2], popt[1] + 1.5*popt[2], 100000)    #creating 100,000 x values to map curvefit gaussian to
        fig,ax = plt.subplots()
        ax.bar(binscenters, histo_data, width=binwidth)        #plotting histogram
        ax.plot(x_values, fit_function(x_values, *popt), color='darkorange')   #plotting curve fit
        ax.set_xlabel('True Timing - Recovered Timing')
        ax.set_ylabel('Count')
        ax.set_title('Corrected Timings for Phase=%d' %i +'\nGaussian Fit Values:\nMean = '+gauss_mean+' seconds, '+set_mean+'seconds\nStandard Deviation = '+gauss_std+' seconds, '+set_std+'seconds', fontdict={'fontsize': 14})
        plt.get_current_fig_manager().window.showMaximized()
        plt.show(block = False)
        plt.pause(1)
        filedir = 'G:/data/watchman/20190724_watchman_spe/studies/disparity/'
        filename = 'Phase_%d.png' % i
        savename = filedir + filename
        fig.savefig(savename,dpi = 500)
        plt.close()
Beispiel #6
0
def determine(datadate, numhead):
    Nloops = len(
        os.listdir(
            'G:/data/watchman/' + datadate +
            '_watchman_spe/d1/d1_50centered'))  #determining size of directory
    writename = 'G:/data/watchman/' + datadate + '_watchman_spe/d1/d1_histograms/10_90_fall_time.txt'  #setting file name to write to
    if not os.path.exists('G:/data/watchman/' + datadate +
                          '_watchman_spe/d1/d1_histograms/histogram_images'
                          ):  #creating write directory if nonexistant
        os.makedirs('G:/data/watchman/' + datadate +
                    '_watchman_spe/d1/d1_histograms/histogram_images')
    #determine fall times
    for i in range(Nloops):
        print(i)
        filename = 'G:/data/watchman/' + datadate + '_watchman_spe/d1/d1_50centered/D1--waveforms--%05d.txt' % i  #setting file name to read from
        (t, y, _) = rw(filename, numhead)  #taking in waveform values
        y_norm = y / min(y)  #normalizing voltage values
        check10 = y_norm <= .1  #determining where 10% and 90% falling are located
        check90 = y_norm >= .9
        index10 = np.asarray([k for k, x in enumerate(check10) if x])
        index90 = np.asarray([k for k, x in enumerate(check90) if x])
        index_90 = int(index90[len(index90) - 1] + 0.5)
        index10_removed = index10[np.where(
            index10 > index_90)]  #removing all values before 90% fall index
        index_10 = int(index10_removed[0] +
                       0.5)  #turning first 10% fall index into int
        fall_time = str(t[index_10] -
                        t[index_90])  #fall time is time at 10% - time at 90%
        wh(fall_time, writename)  #writing value to histogram txt file
    #create histogram from saved file
    (histo_mean, histo_std) = gh(writename)
    rh(writename, "Seconds", "Histogram of 10-90 Fall Times", "10_90_Fall",
       datadate, histo_mean, histo_std)
def determine_average_shape(datadate, numhead):
    Nloops = len(
        os.listdir('G:/data/watchman/' + datadate +
                   '_watchman_spe/d2/d2_normalized'))
    writename = 'G:/data/watchman/' + datadate + '_watchman_spe/d2/d2_histograms/average_shape.txt'
    if not os.path.exists('G:/data/watchman/' + datadate +
                          '_watchman_spe/d2/d2_histograms/histogram_images'):
        os.makedirs('G:/data/watchman/' + datadate +
                    '_watchman_spe/d2/d2_histograms/histogram_images')
    for i in range(Nloops):
        print(i)
        filename = 'G:/data/watchman/' + datadate + '_watchman_spe/d2/d2_normalized/D2--waveforms--%05d.txt' % i
        (t, y, _) = rw(filename, numhead)
        #starting array if this is first file
        if i == 0:
            ysum = y
        #adding additional normalized files to the array index-wise
        else:
            ysum = np.add(ysum, y)
    yfinal = np.divide(
        ysum, Nloops)  #diving array index-wise by number of files added
    header_name = "Average Waveform Shape\n"
    write_waveform(t, yfinal, writename,
                   header_name)  #writing array to waveform file
    return (t, yfinal)
Beispiel #8
0
def determine(datadate, numhead):
    Nloops = len(
        os.listdir(
            'G:/data/watchman/' + datadate +
            '_watchman_spe/d1/d1_50centered'))  #determining size of directory
    writename = 'G:/data/watchman/' + datadate + '_watchman_spe/d1/d1_histograms/20_80_rise_time.txt'  #setting file name to write to
    if not os.path.exists('G:/data/watchman/' + datadate +
                          '_watchman_spe/d1/d1_histograms/histogram_images'
                          ):  #creating write directory if nonexistant
        os.makedirs('G:/data/watchman/' + datadate +
                    '_watchman_spe/d1/d1_histograms/histogram_images')
    #determine rise times
    for i in range(Nloops):
        print(i)
        filename = 'G:/data/watchman/' + datadate + '_watchman_spe/d1/d1_50centered/D1--waveforms--%05d.txt' % i  #setting file name to read from
        (t, y, _) = rw(filename, numhead)  #taking in waveform values
        y_norm = y / min(y)  #normalizing voltage values
        check20 = y_norm <= .2  #determining where 20% and 80% rising are located
        check80 = y_norm >= .8
        index20 = np.asarray([k for k, x in enumerate(check20) if x])
        index80 = np.asarray([k for k, x in enumerate(check80) if x])
        index_80 = int(index80[0] + 0.5)
        index20_removed = index20[np.where(
            index20 < index_80)]  #removing all values after 80% rise index
        index_20 = int(index20_removed[len(index20_removed) - 1] +
                       0.5)  #turning last 20% rise index into int
        rise_time = str(t[index_80] -
                        t[index_20])  #rise time is time at 80% - time at 10%
        wh(rise_time, writename)  #writing value to histogram txt file
    #create histogram from saved file
    (histo_mean, histo_std) = gh(writename)
    rh(writename, "Seconds", "Histogram of 20-80 Rise Times", "20_80_Rise",
       datadate, histo_mean, histo_std)
def determine(datadate, numhead):
    Nloops = len(
        os.listdir('G:/data/watchman/' + datadate +
                   '_watchman_spe/d1/d1_50centered'))
    writename10 = 'G:/data/watchman/' + datadate + '_watchman_spe/d1/d1_histograms/10_jitter.txt'
    writename20 = 'G:/data/watchman/' + datadate + '_watchman_spe/d1/d1_histograms/20_jitter.txt'
    writename80 = 'G:/data/watchman/' + datadate + '_watchman_spe/d1/d1_histograms/80_jitter.txt'
    writename90 = 'G:/data/watchman/' + datadate + '_watchman_spe/d1/d1_histograms/90_jitter.txt'
    if not os.path.exists('G:/data/watchman/' + datadate +
                          '_watchman_spe/d1/d1_histograms/histogram_images'):
        os.makedirs('G:/data/watchman/' + datadate +
                    '_watchman_spe/d1/d1_histograms/histogram_images')
    #peak amplitude acquisition
    for i in range(Nloops):
        print(i)
        filename = 'G:/data/watchman/' + datadate + '_watchman_spe/d1/d1_50centered/D1--waveforms--%05d.txt' % i
        (t, y, _) = rw(filename, numhead)
        y_norm = y / min(y)
        check10 = y_norm <= .1  #determining where 10% and 90% are located
        check90 = y_norm >= .9
        index10 = np.asarray([k for k, x in enumerate(check10) if x])
        index90 = np.asarray([k for k, x in enumerate(check90) if x])
        index_90 = int(index90[0] + 0.5)  #turning 90% rising point into int
        index10_removed = index10[np.where(
            index10 < index_90)]  #removing all 10% points after 90% index
        index_10 = int(index10_removed[len(index10_removed) - 1] +
                       0.5)  #turning last 10% index before 90% index into int
        check20 = y_norm <= .2  #determining where 20% and 80% rising are located
        check80 = y_norm >= .8
        index20 = np.asarray([k for k, x in enumerate(check20) if x])
        index80 = np.asarray([k for k, x in enumerate(check80) if x])
        index_80 = int(index80[0] + 0.5)  #turning 80% rising point into int
        index20_removed = index20[np.where(
            index20 < index_80)]  #removing all 20% points after 80% index
        index_20 = int(index20_removed[len(index20_removed) - 1] +
                       0.5)  #turning last 20% index before 90% index into int
        #gathering times at rising 10,20,80,90% points
        t10 = str(t[index_10])
        t20 = str(t[index_20])
        t80 = str(t[index_80])
        t90 = str(t[index_90])
        #writing values to respective histogram files
        wh(t10, writename10)
        wh(t20, writename20)
        wh(t80, writename80)
        wh(t90, writename90)
    #create histograms from saved files
    (histo_mean10, histo_std10) = gh(writename10)
    (histo_mean20, histo_std20) = gh(writename20)
    (histo_mean80, histo_std80) = gh(writename80)
    (histo_mean90, histo_std90) = gh(writename90)
    rh(writename10, "Seconds", "Histogram of 10% Jitter", "10_Jitter",
       datadate, histo_mean10, histo_std10)
    rh(writename20, "Seconds", "Histogram of 20% Jitter", "20_Jitter",
       datadate, histo_mean20, histo_std20)
    rh(writename80, "Seconds", "Histogram of 80% Jitter", "80_Jitter",
       datadate, histo_mean80, histo_std80)
    rh(writename90, "Seconds", "Histogram of 90% Jitter", "90_Jitter",
       datadate, histo_mean90, histo_std90)
def p3_average_cycling(datadate, numhead, fsps, new_fsps, noise):
    filedir = 'G:/Data/watchman/' + datadate + '_watchman_spe/d2/'
    writedir1 = 'G:/Data/watchman/' + datadate + '_watchman_spe/d3/d3_averages/raw/'
    writedir2 = 'G:/Data/watchman/' + datadate + '_watchman_spe/d3/d3_averages/rise_doubled/'
    writedir4 = 'G:/Data/watchman/' + datadate + '_watchman_spe/d3/d3_averages/rise_quadrupled/'
    writedir8 = 'G:/Data/watchman/' + datadate + '_watchman_spe/d3/d3_averages/rise_octupled/'
    if not os.path.exists(writedir1):
        os.makedirs(writedir1)
    if not os.path.exists(writedir2):
        os.makedirs(writedir2)
    if not os.path.exists(writedir4):
        os.makedirs(writedir4)
    if not os.path.exists(writedir8):
        os.makedirs(writedir8)
    filename1 = filedir + 'd2_average.txt'
    filename2 = filedir + 'd2_average_doubled.txt'
    filename4 = filedir + 'd2_average_quadrupled.txt'
    filename8 = filedir + 'd2_average_octupled.txt'
    (t, v, header) = rw(filename1, numhead)
    (t2, v2, header2) = rw(filename2, numhead)
    (t4, v4, header4) = rw(filename4, numhead)
    (t8, v8, header8) = rw(filename8, numhead)
    (v, v2, v4, v8) = gain(v, v2, v4, v8)
    Nloops = 10000
    for i in range(Nloops):
        print(i)
        writename1 = writedir1 + 'D3--waveforms--%05d.txt' % i
        writename2 = writedir2 + 'D3--waveforms--%05d.txt' % i
        writename4 = writedir4 + 'D3--waveforms--%05d.txt' % i
        writename8 = writedir8 + 'D3--waveforms--%05d.txt' % i
        #downsampling waveform values
        (t_down_1, v_down_1) = downsampling(t, v, fsps, new_fsps)
        (t_down_2, v_down_2) = downsampling(t2, v2, fsps, new_fsps)
        (t_down_4, v_down_4) = downsampling(t4, v4, fsps, new_fsps)
        (t_down_8, v_down_8) = downsampling(t8, v8, fsps, new_fsps)
        #digitizing waveform values
        v_digit_1 = digitize(v_down_1, noise)
        v_digit_2 = digitize(v_down_2, noise)
        v_digit_4 = digitize(v_down_4, noise)
        v_digit_8 = digitize(v_down_8, noise)
        #saving downsampled and digitized waveforms
        write_waveform(t_down_1, v_digit_1, writename1, header)
        write_waveform(t_down_2, v_digit_2, writename2, header2)
        write_waveform(t_down_4, v_digit_4, writename4, header4)
        write_waveform(t_down_8, v_digit_8, writename8, header8)
Beispiel #11
0
def waveform_sort(filenum, datadate, numhead):
    filename = 'G:/data/watchman/' + datadate + '_watchman_spe/C2--waveforms--%05d.txt' % filenum
    (_, v, _) = rw(filename, numhead)
    v_sorted = np.flip(np.sort(v, kind="mergesort"))
    v_differences = voltage_diff(v_sorted)
    min_v_diff = min(v_differences)
    max_v_diff = max(v_differences)
    plt.hist(v_differences,
             bins=np.arange(min_v_diff, max_v_diff + 1.3729999999e-8,
                            1.3729999999e-8),
             log=True)
    plt.show()
Beispiel #12
0
def p3(new_fsps, datadate, numhead, scale, phase_array, n_box, n_delay, n_att,
       num_phases):
    #establishing directory names
    if new_fsps == 1000000000:
        sample_rate = '1 Gsps'
    elif new_fsps == 500000000:
        sample_rate = '500 Msps'
    elif new_fsps == 250000000:
        sample_rate = '250 Msps'
    else:
        sample_rate = 'trash'
    filename = 'G:/data/watchman/' + datadate + '_watchman_spe/d2/d2_average.txt'
    t, v, _ = rw(filename, numhead)
    uspl = us(t, v)
    t_cross_array = []
    for i in range(len(phase_array)):
        print('ndel=' + str(n_delay) + ', natt=' + str(n_att) + ', ' + str(i))
        start_value = t[0] + i / (new_fsps * num_phases)
        end_value = t[-1]
        t_array = np.arange(start_value, end_value, 1 / new_fsps)
        v_array = -1 * uspl(t_array)
        t_array = t_array - i / (new_fsps * num_phases)
        scale_height = scale / np.max(v_array)
        v_scaled = v_array * scale_height
        v_digit = digitize(v_scaled, 0)
        t_avg, v_avg = boxcar_wf(t_array, v_digit, n_box)
        v_delay = delay_wf(v_avg, n_delay)
        v_att = attenuate_wf(v_avg, n_att)
        v_sum = sum_wf(v_att, v_delay)
        t_cross, _, _ = zc_locator(t_avg, v_sum)
        t_cross_array.append(t_cross)
    t_cross_array = t_cross_array - t_cross_array[0]
    t_cross_array = np.flip(np.asarray(t_cross_array))
    true_timing_array = np.flip(np.zeros(num_phases) - phase_array)

    fig, ax = plt.subplots()
    ax.plot(true_timing_array, t_cross_array)
    ax.set_title('Recovered Timing vs. True Timing')
    ax.set_xlabel('True Timing (Seconds)')
    ax.set_ylabel('Recovered Timing (Seconds)')
    plt.get_current_fig_manager().window.showMaximized()
    plt.show(block=False)
    savedir = 'G:/data/watchman/' + str(
        datadate
    ) + '_watchman_spe/studies/phase/' + sample_rate + '/Histograms/averages_splined/'
    if not os.path.exists(savedir):
        os.makedirs(savedir)
    filename = 'ndelay=' + str(n_delay) + '_natt=' + str(
        n_att) + '_Phases=%d.png' % num_phases
    savename = savedir + filename
    fig.savefig(savename, dpi=500)
    plt.close()
def d2normalization(datadate, numhead):
    Nloops = len(
        os.listdir('G:/data/watchman/' + datadate + '_watchman_spe/d2/d2_raw'))
    if not os.path.exists('G:/data/watchman/' + datadate +
                          '_watchman_spe/d2/d2_normalized/'):
        os.makedirs('G:/data/watchman/' + datadate +
                    '_watchman_spe/d2/d2_normalized/')
    for i in range(Nloops):
        filename = 'G:/data/watchman/' + datadate + '_watchman_spe/d2/d2_raw/D2--waveforms--%05d.txt' % i
        writename = 'G:/data/watchman/' + datadate + '_watchman_spe/d2/d2_normalized/D2--waveforms--%05d.txt' % i
        (t, y, header) = rw(filename, numhead)
        y_norm = y / min(y)  #normalizing y to peak = 1
        write_waveform(t, y_norm, writename, header)
Beispiel #14
0
def three_stage_compare(datadate, numhead, filenum, shaping):
    plt.rcParams.update({'font.size': 16})
    readname1 = 'G:/Data/watchman/' + datadate + '_watchman_spe/d1/d1_final_spes/D1--waveforms--%05d.txt' % filenum
    readname2 = 'G:/Data/watchman/' + datadate + '_watchman_spe/d2/d2_' + shaping + '_gained/D2--waveforms--%05d.txt' % filenum
    readname3 = 'G:/Data/watchman/' + datadate + '_watchman_spe/d3/d3_' + shaping + '_gained_analyzed/D3--waveforms--%05d.txt' % filenum
    (t1, v1, _) = rw(readname1, numhead)
    (t2, v2, _) = rw(readname2, numhead)
    (t3, v3, _) = rw(readname3, numhead)
    v1 = v1 / min(v1)
    v2 = v2 / min(v2)
    v3 = v3 / min(v3)
    plt.rcParams.update({'font.size': 14})
    p1, = plt.plot(t1, v1, color='orange', label='Waveform After P1')
    p2, = plt.plot(t2, v2, color='green', label='Waveform After P2')
    p3, = plt.plot(t3, v3, color='blue', label='Waveform After P3')
    plt.scatter(t3, v3, color='blue')
    plt.xlabel('Time (s)')
    plt.title(
        '250 Msps, Risetime Octupled During P2\nSample SPE Waveform After Each Stage:\nWaveform %05d'
        % filenum)
    plt.legend(handles=[p1, p2, p3])
    plt.get_current_fig_manager().window.showMaximized()
    plt.show()
def establish_templates(new_fsps, datadate, numhead, scale_array, phase_array,
                        noise, fsps, steps, scale_mean):
    #establishing directory names
    if new_fsps == 1000000000:
        sample_rate = '1 Gsps'
    elif new_fsps == 500000000:
        sample_rate = '500 Msps'
    elif new_fsps == 250000000:
        sample_rate = '250 Msps'
    else:
        sample_rate = 'trash'
    filename = 'G:/data/watchman/' + datadate + '_watchman_spe/d2/d2_average.txt'
    t, v, header = rw(filename, numhead)
    uspl = us(t, v)
    for i in range(len(phase_array)):
        print(i)
        writedir_noise = 'G:/data/watchman/' + datadate + '_watchman_spe/studies/phase/' + sample_rate + '/file_template/phase=' + str(
            i) + '/phase_raw_gained_analyzed_noised/'
        writedir_peaked = 'G:/data/watchman/' + datadate + '_watchman_spe/studies/phase/' + sample_rate + '/file_template/phase=' + str(
            i) + '/phase_raw_gained_analyzed_peaked/'
        #creating directories if they don't exist
        if not os.path.exists(writedir_noise):
            os.makedirs(writedir_noise)
        if not os.path.exists(writedir_peaked):
            os.makedirs(writedir_peaked)
        start_value = t[i]
        end_value = t[-1]
        t_array = np.arange(start_value, end_value, 1 / new_fsps)
        v_array = uspl(t_array)
        Nloops = len(
            scale_array)  #establishing how many files to cycle through
        for j in range(Nloops):
            scale_height_noise = scale_mean / np.max(v_array)
            scale_height_peaked = scale_array[j] / np.max(v_array)
            v_scaled_noise = v_array * scale_height_noise
            v_scaled_peaked = v_array * scale_height_peaked
            print('%s/%s, File: %05d' %
                  (i + 1, steps,
                   j))  #printing number of file currently being processed
            #establishing read and write names
            writename_noise = writedir_noise + 'Phase--waveforms--%05d.txt' % j
            writename_peaked = writedir_peaked + 'Phase--waveforms--%05d.txt' % j
            #digitizing waveform values
            v_digit_noise = digitize(v_scaled_noise, noise)
            v_digit_peaked = digitize(v_scaled_peaked, noise)
            #saving downsampled and digitized waveforms
            ww(t_array - i / fsps, v_digit_noise, writename_noise, header)
            ww(t_array - i / fsps, v_digit_peaked, writename_peaked, header)
    return ()
Beispiel #16
0
def determine(datadate,numhead):
    Nloops = len(os.listdir('G:/data/watchman/'+datadate+'_watchman_spe/d2/d2_raw')) - 1
    writename = 'G:/data/watchman/'+datadate+'_watchman_spe/d2/d2_histograms/raw_peak_amplitude.txt'
    if not os.path.exists('G:/data/watchman/'+datadate+'_watchman_spe/d2/d2_histograms/histogram_images'):
        os.makedirs('G:/data/watchman/'+datadate+'_watchman_spe/d2/d2_histograms/histogram_images')
    #peak amplitude acquisition
    for i in range(Nloops):
        print(i)
        filename = 'G:/data/watchman/'+datadate+'_watchman_spe/d2/d2_raw/D2--waveforms--%05d.txt' % i
        (_,y,_) = rw(filename,numhead)
        index_min = np.where(y == min(y))               #determining index of peak
        value = str((-1*y[index_min])[0])               #flipping peak to positive
        wh(value,writename)                             #writing value to histogram txt file
    #create histogram from saved file
    (histo_mean,histo_std) = gh(writename)
    rh(writename,"Volts","Histogram of Peak Amplitudes","Peak_Amplitude",datadate,histo_mean,histo_std)
Beispiel #17
0
def d1normalization(datadate, numhead):
    Nloops = len(
        os.listdir(
            'G:/data/watchman/' + datadate +
            '_watchman_spe/d1/d1_50centered'))  #establishing size of directory
    if not os.path.exists('G:/data/watchman/' + datadate +
                          '_watchman_spe/d1/d1_normalized/'
                          ):  #creating write directory if nonexistant
        os.makedirs('G:/data/watchman/' + datadate +
                    '_watchman_spe/d1/d1_normalized/')
    for i in range(Nloops):
        filename = 'G:/data/watchman/' + datadate + '_watchman_spe/d1/d1_50centered/D1--waveforms--%05d.txt' % i  #setting file name for reading
        writename = 'G:/data/watchman/' + datadate + '_watchman_spe/d1/d1_normalized/D1--waveforms--%05d.txt' % i  #setting file name for writing
        (t, y, header) = rw(filename,
                            numhead)  #gathering waveform data into array
        y_norm = y / min(y)  #normalizing y to peak = 1
        write_waveform(t, y_norm, writename,
                       header)  #writing normalized waveform
def center_check(Nloops, numhead, datadate):
    center_list = []  #initializing list
    for i in range(Nloops):
        print(i)
        filename = 'G:/data/watchman/' + datadate + '_watchman_spe/d1/d1_baseline_shifted/D1--waveforms--%05d.txt' % i
        (_, y, _) = rw(filename, numhead)  #reading in waveform y values
        y_norm = y / min(y[370:1370])  #normalizing to make calculations easier
        check = y_norm >= 0.5  #50% crossing criteria
        index = [k for k, x in enumerate(check)
                 if x]  #code to enumerate index values
        index_50 = int(index[0])  #making into integer
        center_list = center_list.append(
            index_50)  #appending index location to list of index locations
    center_list = np.asarray(center_list)  #converting list to numpy array
    center_list_sorted = np.sort(center_list)  #sort center_list array
    max_index = int(round(center_list_sorted[(len(center_list_sorted) -
                                              1)]))  #determine maximum index
    min_index = int(round(center_list_sorted[0]))  #determine minimum index
    center_index = int(
        round(np.mean(center_list))
    )  #establishing mean index location, rounding it, and converting to integer
    return (max_index, min_index, center_index, center_list)
Beispiel #19
0
def baselineshift(datadate, numhead):
    Nloops = len(
        os.listdir(
            'G:/data/watchman/' + datadate +
            '_watchman_spe/d1/d1_renamed'))  #establish size of directory
    if not os.path.exists('G:/data/watchman/' + datadate +
                          '_watchman_spe/d1/d1_baseline_shifted/'
                          ):  #create write directory if nonexistant
        os.makedirs('G:/data/watchman/' + datadate +
                    '_watchman_spe/d1/d1_baseline_shifted/')
    for i in range(Nloops):
        filename = 'G:/data/watchman/' + datadate + '_watchman_spe/d1/d1_renamed/D1--waveforms--%05d.txt' % i  #establish file name to read
        writename = 'G:/data/watchman/' + datadate + '_watchman_spe/d1/d1_baseline_shifted/D1--waveforms--%05d.txt' % i  #establish file name to write
        (t, y, header) = rw(filename,
                            numhead)  #collect waveform data into array
        baseline = np.mean(
            y[0:200]
        )  #determining average value at beginning to establish baseline
        if abs(baseline) >= 0.0005:  #used to check baselines that are too big
            print(str(baseline) + ', ' + str(i))
        y_new = (y - baseline)  #reducing y to factor out baseline
        write_waveform(t, y_new, writename, header)  #writing waveforms
def waveform_viewer(datadate, subfolder_name, numhead):
    NLoops = len(
        os.listdir('G:/data/watchman/' + datadate + '_watchman_spe/d1/' +
                   subfolder_name))  #determine number of files in directory
    files = sorted(
        os.listdir('G:/data/watchman/' + datadate + '_watchman_spe/d1/' +
                   subfolder_name))  #create list of file names in directory
    plt.rcParams.update({'font.size': 14})
    for i in range(NLoops):  #cycle through number of files
        filename = 'G:/data/watchman/' + datadate + '_watchman_spe/d1/' + subfolder_name + '/' + files[
            i]  #open first file in list
        (x, y, _) = rw(filename, numhead)  #get data from file, ignore header
        y_line = min(y) * .5
        print(filename)  #print name of file
        plt.plot(x, y)  #plot data from file
        plt.axvline(x=0, color='red')
        plt.axhline(y=y_line, color='purple')
        plt.xlabel('Time (s)')
        plt.ylabel('Volts')
        plt.title('Sample SPE Waveform After P1:\nWaveform %05d' %
                  i)  #title plot with name of file
        plt.get_current_fig_manager().window.showMaximized()  #maximizes plot
        plt.show()  #show plot, with pause in code
def d1shift50(datadate, numhead):
    Nloops = len(
        os.listdir('G:/data/watchman/' + datadate +
                   '_watchman_spe/d1/d1_baseline_shifted')
    )  #establishing size of direcory
    (max_index, min_index, center_index, center_list) = center_check(
        Nloops, numhead,
        datadate)  #checking for average location of 50% rise point
    #printing calculated indices
    print(min_index)
    print(center_index)
    print(max_index)
    if not os.path.exists('G:/data/watchman/' + datadate +
                          '_watchman_spe/d1/d1_50centered/'
                          ):  #creating write directory if nonexistant
        os.makedirs('G:/data/watchman/' + datadate +
                    '_watchman_spe/d1/d1_50centered/')
    for i in range(Nloops):
        filename = 'G:/data/watchman/' + datadate + '_watchman_spe/d1/d1_baseline_shifted/D1--waveforms--%05d.txt' % i  #setting file name for reading
        writename = 'G:/data/watchman/' + datadate + '_watchman_spe/d1/d1_50centered/D1--waveforms--%05d.txt' % i  #setting file name for writing
        (t, y, header) = rw(filename, numhead)  #reading in waveform values
        index_50 = int(center_list[i] + 0.5)  #converting to int
        t_50 = t[
            index_50]  #converting index of 50% rising point to value at that point
        t_new = (t - t_50)  #shifting t_50 to t=0s
        #rolling so 50 rising point is at center index
        t_intermediate = np.roll(t_new, center_index - index_50)
        y_intermediate = np.roll(y, center_index - index_50)
        first_cutoff = (center_index - min_index
                        )  #determining latest first index
        last_cutoff = (len(y) - max_index + center_index
                       )  #determining earliest last index
        #slicing off 'problem indices'
        t_50centered = t_intermediate[first_cutoff:last_cutoff]
        y_50centered = y_intermediate[first_cutoff:last_cutoff]
        write_waveform(t_50centered, y_50centered, writename,
                       header)  #writing final waveform
Beispiel #22
0
def determine(datadate, numhead):
    Nloops = len(
        os.listdir('G:/data/watchman/' + datadate +
                   '_watchman_spe/d1/d1_50centered'))
    writename = 'G:/data/watchman/' + datadate + '_watchman_spe/d1/d1_histograms/FWHM.txt'
    if not os.path.exists('G:/data/watchman/' + datadate +
                          '_watchman_spe/d1/d1_histograms/histogram_images'):
        os.makedirs('G:/data/watchman/' + datadate +
                    '_watchman_spe/d1/d1_histograms/histogram_images')
    #determine rise times
    for i in range(Nloops):
        print(i)
        filename = 'G:/data/watchman/' + datadate + '_watchman_spe/d1/d1_50centered/D1--waveforms--%05d.txt' % i
        (t, y, _) = rw(filename, numhead)
        y_norm = y / min(y)
        check = y_norm <= .5  #determining where values under 50% are
        check_peak = y_norm == 1  #determining where peak is
        index_peak = np.asarray([k for k, x in enumerate(check_peak) if x])
        peak_index = int(index_peak[0] + 0.5)  #turning peak index into int
        index = np.asarray([k for k, x in enumerate(check) if x])
        index_low = index[np.where(
            index < peak_index)]  #removing all values after peak
        index_high = index[np.where(
            index > peak_index)]  #removing all values before peak
        index_first = int(index_low[len(index_low) - 1] +
                          0.5)  #turning last 50% point before peak into int
        index_last = int(index_high[0] +
                         0.5)  #turning first 50% point after peak into int
        FWHM = str(
            t[index_last] -
            t[index_first])  #FWHM is time at falling 50% - time at rising 50%
        wh(FWHM, writename)  #writing to histogram txt file
    #create histogram from saved file
    (histo_mean, histo_std) = gh(writename)
    rh(writename, "Seconds", "Histogram of Full Width Half Maximums", "FWHM",
       datadate, histo_mean, histo_std)
#check location of 50% point on rising edge
import numpy as np
from readwaveform import read_waveform as rw
import os

Nloops = len(os.listdir('G:/data/watchman/20190724_watchman_spe/d1/d1_baseline_shifted')) #establish size of directory
for i in range(Nloops):
    filename = 'G:/data/watchman/20190724_watchman_spe/d1/d1_baseline_shifted/D1--waveforms--%05d.txt' % i  #open specific file
    (_,y,_) = rw(filename,5)    #read in y values from the file
    y_norm = y/min(y[370:1370])                             #normalizing to make calculations easier
    check = y_norm >= 0.5                                   #50% crossing criteria
    index = [k for k, x in enumerate(check) if x]           #code to enumerate index values
    index50 = int(index[0] + 0.5)   #converting first index to an integer
    if index50 < 370:
        print(str(index50)+', '+str(filename))
def p3(noise_filter, noise, datadate, numhead, fsps, new_fsps, gain_noise,
       gain_factor_2, gain_factor_4, gain_factor_8, start_index, steps):
    #establishing directory names
    if new_fsps == 1000000000:
        sample_rate = '1 Gsps'
    elif new_fsps == 500000000:
        sample_rate = '500 Msps'
    elif new_fsps == 250000000:
        sample_rate = '250 Msps'
    else:
        sample_rate = 'trash'
    if noise_filter == 0 and gain_noise == 0:
        filedir1 = 'g:/data/watchman/' + datadate + '_watchman_spe/d2/d2_raw'
        filedir2 = 'g:/data/watchman/' + datadate + '_watchman_spe/d2/d2_rise_doubled'
        filedir4 = 'g:/data/watchman/' + datadate + '_watchman_spe/d2/d2_rise_quadrupled'
        filedir8 = 'g:/data/watchman/' + datadate + '_watchman_spe/d2/d2_rise_octupled'
        writedir1 = 'g:/data/watchman/' + datadate + '_watchman_spe/studies/phase/' + sample_rate + '/phase=' + str(
            start_index) + '/phase_raw'
        writedir2 = 'g:/data/watchman/' + datadate + '_watchman_spe/studies/phase/' + sample_rate + '/phase=' + str(
            start_index) + '/phase_rise_doubled'
        writedir4 = 'g:/data/watchman/' + datadate + '_watchman_spe/studies/phase/' + sample_rate + '/phase=' + str(
            start_index) + '/phase_rise_quadrupled'
        writedir8 = 'g:/data/watchman/' + datadate + '_watchman_spe/studies/phase/' + sample_rate + '/phase=' + str(
            start_index) + '/phase_rise_octupled'
    elif gain_noise == 0:
        filedir1 = 'g:/data/watchman/' + datadate + '_watchman_spe/d2/d2_raw_noise=' + str(
            noise) + 'V'
        filedir2 = 'g:/data/watchman/' + datadate + '_watchman_spe/d2/d2_rise_doubled_noise=' + str(
            noise) + 'V'
        filedir4 = 'g:/data/watchman/' + datadate + '_watchman_spe/d2/d2_rise_quadrupled_noise=' + str(
            noise) + 'V'
        filedir8 = 'g:/data/watchman/' + datadate + '_watchman_spe/d2/d2_rise_octupled_noise=' + str(
            noise) + 'V'
        writedir1 = 'g:/data/watchman/' + datadate + '_watchman_spe/studies/phase/' + sample_rate + '/phase=' + str(
            start_index) + '/phase_raw_noise=' + str(noise_filter) + 'V'
        writedir2 = 'g:/data/watchman/' + datadate + '_watchman_spe/studies/phase/' + sample_rate + '/phase=' + str(
            start_index) + '/phase_rise_doubled_noise=' + str(
                noise_filter) + 'V'
        writedir4 = 'g:/data/watchman/' + datadate + '_watchman_spe/studies/phase/' + sample_rate + '/phase=' + str(
            start_index) + '/phase_rise_quadrupled_noise=' + str(
                noise_filter) + 'V'
        writedir8 = 'g:/data/watchman/' + datadate + '_watchman_spe/studies/phase/' + sample_rate + '/phase=' + str(
            start_index) + '/phase_rise_octupled_noise=' + str(
                noise_filter) + 'V'
    elif noise_filter == 0:
        filedir1 = 'g:/data/watchman/' + datadate + '_watchman_spe/d2/d2_raw_gain_noise=' + str(
            gain_noise) + 'V'
        filedir2 = 'g:/data/watchman/' + datadate + '_watchman_spe/d2/d2_rise_doubled_gain_noise=' + str(
            gain_noise) + 'V'
        filedir4 = 'g:/data/watchman/' + datadate + '_watchman_spe/d2/d2_rise_quadrupled_gain_noise=' + str(
            gain_noise) + 'V'
        filedir8 = 'g:/data/watchman/' + datadate + '_watchman_spe/d2/d2_rise_octupled_gain_noise=' + str(
            gain_noise) + 'V'
        writedir1 = 'g:/data/watchman/' + datadate + '_watchman_spe/studies/phase/' + sample_rate + '/phase=' + str(
            start_index) + '/phase_raw_gain_noise=' + str(gain_noise) + 'V'
        writedir2 = 'g:/data/watchman/' + datadate + '_watchman_spe/studies/phase/' + sample_rate + '/phase=' + str(
            start_index) + '/phase_rise_doubled_gain_noise=' + str(
                gain_noise) + 'V'
        writedir4 = 'g:/data/watchman/' + datadate + '_watchman_spe/studies/phase/' + sample_rate + '/phase=' + str(
            start_index) + '/phase_rise_quadrupled_gain_noise=' + str(
                gain_noise) + 'V'
        writedir8 = 'g:/data/watchman/' + datadate + '_watchman_spe/studies/phase/' + sample_rate + '/phase=' + str(
            start_index) + '/phase_rise_octupled_gain_noise=' + str(
                gain_noise) + 'V'
    else:
        filedir1 = 'g:/data/watchman/' + datadate + '_watchman_spe/d2/d2_raw_gain_noise=' + str(
            gain_noise) + 'V_noise=' + str(noise) + 'V'
        filedir2 = 'g:/data/watchman/' + datadate + '_watchman_spe/d2/d2_rise_doubled_gain_noise=' + str(
            gain_noise) + 'V_noise=' + str(noise) + 'V'
        filedir4 = 'g:/data/watchman/' + datadate + '_watchman_spe/d2/d2_rise_quadrupled_gain_noise=' + str(
            gain_noise) + 'V_noise=' + str(noise) + 'V'
        filedir8 = 'g:/data/watchman/' + datadate + '_watchman_spe/d2/d2_rise_octupled_gain_noise=' + str(
            gain_noise) + 'V_noise=' + str(noise) + 'V'
        writedir1 = 'g:/data/watchman/' + datadate + '_watchman_spe/studies/phase/' + sample_rate + '/phase=' + str(
            start_index) + '/phase_raw_gain_noise=' + str(
                gain_noise) + 'V_noise=' + str(noise_filter) + 'V'
        writedir2 = 'g:/data/watchman/' + datadate + '_watchman_spe/studies/phase/' + sample_rate + '/phase=' + str(
            start_index) + '/phase_rise_doubled_gain_noise=' + str(
                gain_noise) + 'V_noise=' + str(noise_filter) + 'V'
        writedir4 = 'g:/data/watchman/' + datadate + '_watchman_spe/studies/phase/' + sample_rate + '/phase=' + str(
            start_index) + '/phase_rise_quadrupled_gain_noise=' + str(
                gain_noise) + 'V_noise=' + str(noise_filter) + 'V'
        writedir8 = 'g:/data/watchman/' + datadate + '_watchman_spe/studies/phase/' + sample_rate + '/phase=' + str(
            start_index) + '/phase_rise_octupled_gain_noise=' + str(
                gain_noise) + 'V_noise=' + str(noise_filter) + 'V'
    if gain_factor_2 != 1 or gain_factor_4 != 1 or gain_factor_8:
        filedir1 = filedir1 + '_gained/'
        filedir2 = filedir2 + '_gained/'
        filedir4 = filedir4 + '_gained/'
        filedir8 = filedir8 + '_gained/'
        writedir1 = writedir1 + '_gained_analyzed/'
        writedir2 = writedir2 + '_gained_analyzed/'
        writedir4 = writedir4 + '_gained_analyzed/'
        writedir8 = writedir8 + '_gained_analyzed/'
    else:
        filedir1 = filedir1 + '/'
        filedir2 = filedir2 + '/'
        filedir4 = filedir4 + '/'
        filedir8 = filedir8 + '/'
        writedir1 = writedir1 + '_analyzed/'
        writedir2 = writedir2 + '_analyzed/'
        writedir4 = writedir4 + '_analyzed/'
        writedir8 = writedir8 + '_analyzed/'
    #creating directories if they don't exist
    if not os.path.exists(writedir1):
        os.makedirs(writedir1)
    if not os.path.exists(writedir2):
        os.makedirs(writedir2)
    if not os.path.exists(writedir4):
        os.makedirs(writedir4)
    if not os.path.exists(writedir8):
        os.makedirs(writedir8)
    Nloops = len(
        os.listdir(filedir2))  #establishing how many files to cycle through
    for i in range(Nloops):
        print('%s/%s, File: %05d' %
              (start_index + 1, steps,
               i))  #printing number of file currently being processed
        #establishing read and write names
        filename1 = filedir1 + 'D2--waveforms--%05d.txt' % i
        filename2 = filedir2 + 'D2--waveforms--%05d.txt' % i
        filename4 = filedir4 + 'D2--waveforms--%05d.txt' % i
        filename8 = filedir8 + 'D2--waveforms--%05d.txt' % i
        writename1 = writedir1 + 'Phase--waveforms--%05d.txt' % i
        writename2 = writedir2 + 'Phase--waveforms--%05d.txt' % i
        writename4 = writedir4 + 'Phase--waveforms--%05d.txt' % i
        writename8 = writedir8 + 'Phase--waveforms--%05d.txt' % i
        #reading in waveform values
        (t1, v1, header1) = rw(filename1, numhead)
        (t2, v2, header2) = rw(filename2, numhead)
        (t4, v4, header4) = rw(filename4, numhead)
        (t8, v8, header8) = rw(filename8, numhead)
        #downsampling waveform values
        (t_down_1, v_down_1) = downsampling(t1 - start_index * 1 / 20000000000,
                                            v1, fsps, new_fsps, start_index)
        (t_down_2, v_down_2) = downsampling(t2 - start_index * 1 / 20000000000,
                                            v2, fsps, new_fsps, start_index)
        (t_down_4, v_down_4) = downsampling(t4 - start_index * 1 / 20000000000,
                                            v4, fsps, new_fsps, start_index)
        (t_down_8, v_down_8) = downsampling(t8 - start_index * 1 / 20000000000,
                                            v8, fsps, new_fsps, start_index)
        #digitizing waveform values
        v_digit_1 = digitize(v_down_1, noise)
        v_digit_2 = digitize(v_down_2, noise)
        v_digit_4 = digitize(v_down_4, noise)
        v_digit_8 = digitize(v_down_8, noise)
        #saving downsampled and digitized waveforms
        write_waveform(t_down_1, v_digit_1, writename1, header1)
        write_waveform(t_down_2, v_digit_2, writename2, header2)
        write_waveform(t_down_4, v_digit_4, writename4, header4)
        write_waveform(t_down_8, v_digit_8, writename8, header8)
Beispiel #25
0
def p1_sort(filenum, datadate, lowpass, numhead, numtaps, threshold, baseline):
    filename = 'g:/data/watchman/' + datadate + '_watchman_spe/C2--waveforms--%05d.txt' % filenum
    spe_wasname = 'g:/data/watchman/' + datadate + '_watchman_spe/d1/d1_raw/D1--waveforms--%05d.txt' % filenum
    spe_not_there = 'g:/data/watchman/' + datadate + '_watchman_spe/d1/not_spe/D1--waveforms--%05d.txt' % filenum
    spe_unsure = 'g:/data/watchman/' + datadate + '_watchman_spe/d1/unsure_if_spe/D1--waveforms--%05d.txt' % filenum
    if not os.path.exists('g:/data/watchman/' + datadate +
                          '_watchman_spe/d1/d1_raw/'):
        os.makedirs('g:/data/watchman/' + datadate +
                    '_watchman_spe/d1/d1_raw/')
    if not os.path.exists('g:/data/watchman/' + datadate +
                          '_watchman_spe/d1/not_spe/'):
        os.makedirs('g:/data/watchman/' + datadate +
                    '_watchman_spe/d1/not_spe/')
    if not os.path.exists('g:/data/watchman/' + datadate +
                          '_watchman_spe/d1/unsure_if_spe/'):
        os.makedirs('g:/data/watchman/' + datadate +
                    '_watchman_spe/d1/unsure_if_spe/')
    if os.path.isfile(spe_wasname):
        pass
    elif os.path.isfile(spe_not_there):
        pass
    elif os.path.isfile(spe_unsure):
        pass
    else:
        (t, v, header) = rw(filename, numhead)

        y = signal.filtfilt(lowpass, 1.0, v)
        y2 = y[numtaps:len(y) - 1]
        t2 = t[numtaps:len(y) - 1]

        y_flip = -1 * y2
        height = -1 * (baseline + threshold)
        peaks, _ = signal.find_peaks(y_flip, height, distance=370)
        y_peaks = y2[peaks]
        t_peaks = t2[peaks]

        if len(peaks) != 0:  #Making sure there is a peak
            if len(peaks) == 1 and peaks[
                    0] >= 450:  #Checking if only 1 peak exists, making sure it's in proper range
                if min(
                        y2[370:1370]
                ) < baseline + threshold:  #Checking if peak is below -.0015V in range 370 to 1370
                    write_waveform(t2, y2, spe_wasname, header)
                    print(
                        len(
                            os.listdir('g:/data/watchman/' + datadate +
                                       '_watchman_spe/d1/d1_raw/')))
            else:
                if min(
                        y2[370:1370]
                ) < baseline + threshold:  #Shows plot if min is less than -0.0015V in range 370 to 1370
                    plt.figure()
                    plt.plot(t, v, 'b')
                    plt.plot(t2, y2, 'r', linewidth=2.5)
                    plt.plot(t_peaks, y_peaks, 'x', color='cyan')
                    plt.grid(True)
                    print('Displaying file #%05d' % filenum)
                    plt.get_current_fig_manager().window.showMaximized(
                    )  #maximizes plot
                    plt.show()

                    spe_check = 'pre-loop initialization'
                    while spe_check != 'y' and spe_check != 'u' and spe_check != 'n':
                        spe_check = input(
                            'Is there a single visible SPE? "y" or "n" or "u"\n'
                        )
                    #writing data to proper folder
                    if spe_check == 'y':
                        write_waveform(t2, y2, spe_wasname, header)
                    elif spe_check == 'n':
                        write_waveform(t2, y2, spe_not_there, header)
                    elif spe_check == 'u':
                        write_waveform(t2, y2, spe_unsure, header)
                    print('File #%05d: Done' % filenum)
                    print(
                        len(
                            os.listdir('g:/data/watchman/' + datadate +
                                       '_watchman_spe/d1/d1_raw/')))
    return
def fitter_timing(datadate,samplerate_name,shaping):
    if samplerate_name == 'INVALID':
        return("Failed")
    t_fitter,v_fitter,_ = rw('G:/data/watchman/'+datadate+'_watchman_spe/d2/d2_average.txt',1)
    uspl = us(t_fitter,v_fitter)
    filedir = 'G:/data/watchman/'+str(datadate)+'_watchman_spe/studies/phase/'+samplerate_name+'/'
    Nloops = len(os.listdir(filedir + 'phase=0/phase_'+shaping))
    for i in range(Nloops):
        filename_exact = 'G:/data/watchman/'+str(datadate)+'_watchman_spe/d3/d3_raw_gained/D3--waveforms--%05d.txt' % i
        t_exact,v_exact,_ = rw(filename_exact,5)
        j = 0
        check_value = 0
        while j < 80 and check_value == 0:
            print(str(i) + ', Phase=' + str(j))
            filename = filedir + 'phase='+str(j)+'/phase_'+shaping+'/Phase--waveforms--%05d.txt' % i
            t,v,_ = rw(filename,5)
            v = -1*v
            ET = t[0:10]
            EV = v[0:10]
            chi2_min = -1
            x_min = -1
            y_min = -1
            shift_min = -1
            shifts = np.arange(0,80/20000000000,1e-11)
            for shift in shifts:
                pre_OV = uspl(ET + shift)
                A = np.array([[np.sum(np.square(pre_OV)),np.sum(pre_OV),np.sum(np.multiply(pre_OV,EV))],[np.sum(pre_OV),len(EV),np.sum(EV)]])
                A[0] = A[0]/A[0][0]
                A[1] = np.subtract(A[1],A[1][0]*A[0])
                A[1] = A[1]/A[1][1]
                A[0] = np.subtract(A[0],A[0][1]*A[1])
                x = A[0][2]
                y = A[1][2]
                OV = x*pre_OV + y
                chi2 = chi_squared(OV,EV)
                if chi2_min < 0:
                    shift_min = shift
                    chi2_min = chi2
                    x_min = x
                    y_min = y
                elif chi2 < chi2_min:
                    shift_min = shift
                    chi2_min = chi2
                    x_min = x
                    y_min = y
            v_fit = x_min*uspl(t_fitter + shift_min) + y_min
            t_cross = timing_extraction(t_fitter,v_fit)
            timing_check = -1*j/20000000000 - t_cross
            if timing_check <= -1e-9 or chi2_min >= 5000 or timing_check >= 1e-9:
                t_exact = t_exact - j/20000000000
                v_peak_ind = np.where(v == np.amax(v))[0][0]
                t_peak = t[v_peak_ind]
                t_exact_check = np.abs(t_exact - t_peak)
                t_exact_loc = np.where(t_exact_check == np.amin(t_exact_check))[0][0]
                v_exact = v[v_peak_ind]/v_exact[t_exact_loc]*v_exact
                fig,ax = plt.subplots()
                ax.plot(t,v)
                ax.plot(t_fitter,v_fit)
                ax.plot(t_exact,v_exact)
                ax.axvline(-1*j/20000000000,color = 'Black')
                ax.axvline(t_cross,color = 'Red')
                ax.set_title(str(t_cross) + ', ' + str(chi2_min) + ', ' + str(i))
                plt.get_current_fig_manager().window.showMaximized()
                plt.show(block = False)
                plt.pause(0.1)
                fig.savefig('G:/data/watchman/20190724_watchman_spe/studies/phase/Histograms/'+samplerate_name+'/Doubles Copy/%05d.png' % i,dpi = 500)
                print("Was double!")
                plt.close()
                check_value += 1
            j += 1
    return("Passed")
def phase_array_gen(samplerate, samplerate_name, shaping, datadate, n_box,
                    n_delay, n_att, numhead):
    phase_time = 1 / 20000000000
    maxphase = int(20000000000 / samplerate + 0.5)
    phase_array = np.arange(0, maxphase)

    x = []
    y = []
    x_bins = []
    median_array = []
    correction = []
    correction_median_array = []
    for i in range(len(phase_array)):
        filedir = 'G:/data/watchman/' + str(
            datadate
        ) + '_watchman_spe/studies/phase/' + samplerate_name + '/phase=' + str(
            phase_array[i]) + '/phase_' + shaping + '/'
        Nloops = len(os.listdir(filedir))
        y_j = []
        x_j = []
        correction_j = []
        for j in range(Nloops):
            print('Uncorrected Files ' + samplerate_name + ';' + str(n_box) +
                  ',' + str(n_delay) + ',' + str(n_att) + ';' + str(i) + ',' +
                  str(j))
            filename = filedir + 'Phase--waveforms--%05d.txt' % j
            (t, v, _) = rw(filename, numhead)
            t_avg, v_avg = boxcar_wf(t, v, n_box)
            v_delay = delay_wf(v_avg, n_delay)
            v_att = attenuate_wf(v_avg, n_att)
            v_sum = sum_wf(v_att, v_delay)
            t_cross, _, _ = zc_locator(t_avg, v_sum)
            y_j.append(t_cross)
            x_j.append(-1 * i * phase_time)
            correction_j.append(-1 * i * phase_time - t_cross)
        median_array.append(np.median(np.asarray(y_j)))
        correction_median_array.append(np.median(np.asarray(correction_j)))
        y = y + y_j
        x = x + x_j
        correction = correction + correction_j
        x_bins.append(-1 * (i - 0.5) * phase_time)
    y = np.asarray(y)
    y = y - median_array[0]
    correction = np.asarray(correction)
    correction = correction + median_array[0]
    correction_median_array = np.asarray(correction_median_array)
    correction_median_array = correction_median_array + median_array[0]
    median_value = median_array[0]
    median_array = np.asarray(median_array)
    median_array = median_array - median_array[0]
    ybin = 1 / (2 * samplerate)
    y_bins = np.linspace(-2 * ybin, 0, num=maxphase, endpoint=True)
    y_bins_corrections = np.linspace(-ybin, ybin, num=maxphase, endpoint=True)
    x_bins = np.asarray(x_bins)
    x_bins = np.flip(x_bins)

    y_corrected = []
    corrected_median_array = []
    corrected_corrections = []
    corrected_correction_median_array = []
    for i in range(len(phase_array)):
        filedir = 'G:/data/watchman/' + str(
            datadate
        ) + '_watchman_spe/studies/phase/' + samplerate_name + '/phase=' + str(
            phase_array[i]) + '/phase_' + shaping + '/'
        Nloops = len(os.listdir(filedir))
        corrected_corrections_j = []
        y_corrected_j = []
        for j in range(Nloops):
            print('Corrected Files ' + samplerate_name + ';' + str(n_box) +
                  ',' + str(n_delay) + ',' + str(n_att) + ';' + str(i) + ',' +
                  str(j))
            filename = filedir + 'Phase--waveforms--%05d.txt' % j
            (t, v, _) = rw(filename, numhead)
            t_avg, v_avg = boxcar_wf(t, v, n_box)
            v_delay = delay_wf(v_avg, n_delay)
            v_att = attenuate_wf(v_avg, n_att)
            v_sum = sum_wf(v_att, v_delay)
            t_cross, _, _ = zc_locator(t_avg, v_sum)
            t_corrected = t_cross - median_value + correction_median_array[i]
            y_corrected_j.append(t_corrected)
            corrected_correction = -1 * i * phase_time - t_corrected
            corrected_corrections_j.append(corrected_correction)
        corrected_median_array.append(np.median(np.asarray(y_corrected_j)))
        corrected_correction_median_array.append(
            np.median(np.asarray(corrected_corrections_j)))
        y_corrected = y_corrected + y_corrected_j
        corrected_corrections = corrected_corrections + corrected_corrections_j
    y_corrected = np.asarray(y_corrected)
    corrected_correction_median_array = np.asarray(
        corrected_correction_median_array)
    corrected_corrections = np.asarray(corrected_corrections)

    if samplerate_name == '250 Msps' and shaping == 'raw_gained_analyzed':
        established_x_noised = []
        established_y_noised = []
        established_x_bins_noised = []
        established_median_array_noised = []
        established_correction_noised = []
        established_correction_median_array_noised = []
        for i in range(len(phase_array)):
            filedir = 'G:/data/watchman/' + str(
                datadate
            ) + '_watchman_spe/studies/phase/' + samplerate_name + '/file_template/phase=' + str(
                phase_array[i]) + '/phase_' + shaping + '_noised/'
            Nloops = len(os.listdir(filedir))
            established_y_j_noised = []
            established_x_j_noised = []
            established_correction_j_noised = []
            for j in range(Nloops):
                print('Established Noised Uncorrected Files ' +
                      samplerate_name + ';' + str(n_box) + ',' + str(n_delay) +
                      ',' + str(n_att) + ';' + str(i) + ',' + str(j))
                filename = filedir + 'Phase--waveforms--%05d.txt' % j
                (t, v, _) = rw(filename, numhead)
                t_avg, v_avg = boxcar_wf(t, v, n_box)
                v_delay = delay_wf(v_avg, n_delay)
                v_att = attenuate_wf(v_avg, n_att)
                v_sum = sum_wf(v_att, v_delay)
                t_cross, _, _ = zc_locator(t_avg, v_sum)
                established_y_j_noised.append(t_cross)
                established_x_j_noised.append(-1 * i * phase_time)
                established_correction_j_noised.append(-1 * i * phase_time -
                                                       t_cross)
            established_median_array_noised.append(
                np.median(np.asarray(established_y_j_noised)))
            established_correction_median_array_noised.append(
                np.median(np.asarray(established_correction_j_noised)))
            established_y_noised = established_y_noised + established_y_j_noised
            established_x_noised = established_x_noised + established_x_j_noised
            established_correction_noised = established_correction_noised + established_correction_j_noised
            established_x_bins_noised.append(-1 * (i - 0.5) * phase_time)
        established_y_noised = np.asarray(established_y_noised)
        established_y_noised = established_y_noised - established_median_array_noised[
            0]
        established_correction_noised = np.asarray(
            established_correction_noised)
        established_correction_noised = established_correction_noised + established_median_array_noised[
            0]
        established_correction_median_array_noised = np.asarray(
            established_correction_median_array_noised)
        established_correction_median_array_noised = established_correction_median_array_noised + established_median_array_noised[
            0]
        established_median_value_noised = established_median_array_noised[0]
        established_median_array_noised = np.asarray(
            established_median_array_noised)
        established_median_array_noised = established_median_array_noised - established_median_array_noised[
            0]
        established_ybin_noised = 1 / (2 * samplerate)
        established_y_bins_noised = np.linspace(-2 * established_ybin_noised,
                                                0,
                                                num=maxphase,
                                                endpoint=True)
        established_y_bins_corrections_noised = np.linspace(
            -established_ybin_noised,
            established_ybin_noised,
            num=maxphase,
            endpoint=True)
        established_x_bins_noised = np.asarray(established_x_bins_noised)
        established_x_bins_noised = np.flip(established_x_bins_noised)

        established_y_corrected_noised = []
        established_corrected_median_array_noised = []
        established_corrected_corrections_noised = []
        established_corrected_correction_median_array_noised = []
        for i in range(len(phase_array)):
            filedir = 'G:/data/watchman/' + str(
                datadate
            ) + '_watchman_spe/studies/phase/' + samplerate_name + '/file_template/phase=' + str(
                phase_array[i]) + '/phase_' + shaping + '_noised/'
            Nloops = len(os.listdir(filedir))
            established_corrected_corrections_j_noised = []
            established_y_corrected_j_noised = []
            for j in range(Nloops):
                print('Established Noised Corrected Files ' + samplerate_name +
                      ';' + str(n_box) + ',' + str(n_delay) + ',' +
                      str(n_att) + ';' + str(i) + ',' + str(j))
                filename = filedir + 'Phase--waveforms--%05d.txt' % j
                (t, v, _) = rw(filename, numhead)
                t_avg, v_avg = boxcar_wf(t, v, n_box)
                v_delay = delay_wf(v_avg, n_delay)
                v_att = attenuate_wf(v_avg, n_att)
                v_sum = sum_wf(v_att, v_delay)
                t_cross, _, _ = zc_locator(t_avg, v_sum)
                established_t_corrected_noised = t_cross - established_median_value_noised + established_correction_median_array_noised[
                    i]
                established_y_corrected_j_noised.append(
                    established_t_corrected_noised)
                established_corrected_correction_noised = -1 * i * phase_time - established_t_corrected_noised
                established_corrected_corrections_j_noised.append(
                    established_corrected_correction_noised)
            established_corrected_median_array_noised.append(
                np.median(np.asarray(established_y_corrected_j_noised)))
            established_corrected_correction_median_array_noised.append(
                np.median(
                    np.asarray(established_corrected_corrections_j_noised)))
            established_y_corrected_noised = established_y_corrected_noised + established_y_corrected_j_noised
            established_corrected_corrections_noised = established_corrected_corrections_noised + established_corrected_corrections_j_noised
        established_y_corrected_noised = np.asarray(
            established_y_corrected_noised)
        established_corrected_correction_median_array_noised = np.asarray(
            established_corrected_correction_median_array_noised)
        established_corrected_corrections_noised = np.asarray(
            established_corrected_corrections_noised)

        established_x_peaked = []
        established_y_peaked = []
        established_x_bins_peaked = []
        established_median_array_peaked = []
        established_correction_peaked = []
        established_correction_median_array_peaked = []
        for i in range(len(phase_array)):
            filedir = 'G:/data/watchman/' + str(
                datadate
            ) + '_watchman_spe/studies/phase/' + samplerate_name + '/file_template/phase=' + str(
                phase_array[i]) + '/phase_' + shaping + '_peaked/'
            Nloops = len(os.listdir(filedir))
            established_y_j_peaked = []
            established_x_j_peaked = []
            established_correction_j_peaked = []
            for j in range(Nloops):
                print('Established Peaked Uncorrected Files ' +
                      samplerate_name + ';' + str(n_box) + ',' + str(n_delay) +
                      ',' + str(n_att) + ';' + str(i) + ',' + str(j))
                filename = filedir + 'Phase--waveforms--%05d.txt' % j
                (t, v, _) = rw(filename, numhead)
                t_avg, v_avg = boxcar_wf(t, v, n_box)
                v_delay = delay_wf(v_avg, n_delay)
                v_att = attenuate_wf(v_avg, n_att)
                v_sum = sum_wf(v_att, v_delay)
                t_cross, _, _ = zc_locator(t_avg, v_sum)
                established_y_j_peaked.append(t_cross)
                established_x_j_peaked.append(-1 * i * phase_time)
                established_correction_j_peaked.append(-1 * i * phase_time -
                                                       t_cross)
            established_median_array_peaked.append(
                np.median(np.asarray(established_y_j_peaked)))
            established_correction_median_array_peaked.append(
                np.median(np.asarray(established_correction_j_peaked)))
            established_y_peaked = established_y_peaked + established_y_j_peaked
            established_x_peaked = established_x_peaked + established_x_j_peaked
            established_correction_peaked = established_correction_peaked + established_correction_j_peaked
            established_x_bins_peaked.append(-1 * (i - 0.5) * phase_time)
        established_y_peaked = np.asarray(established_y_peaked)
        established_y_peaked = established_y_peaked - established_median_array_peaked[
            0]
        established_correction_peaked = np.asarray(
            established_correction_peaked)
        established_correction_peaked = established_correction_peaked + established_median_array_peaked[
            0]
        established_correction_median_array_peaked = np.asarray(
            established_correction_median_array_peaked)
        established_correction_median_array_peaked = established_correction_median_array_peaked + established_median_array_peaked[
            0]
        established_median_value_peaked = established_median_array_peaked[0]
        established_median_array_peaked = np.asarray(
            established_median_array_peaked)
        established_median_array_peaked = established_median_array_peaked - established_median_array_peaked[
            0]
        established_ybin_peaked = 1 / (2 * samplerate)
        established_y_bins_peaked = np.linspace(-2 * established_ybin_peaked,
                                                0,
                                                num=maxphase,
                                                endpoint=True)
        established_y_bins_corrections_peaked = np.linspace(
            -established_ybin_peaked,
            established_ybin_peaked,
            num=maxphase,
            endpoint=True)
        established_x_bins_peaked = np.asarray(established_x_bins_peaked)
        established_x_bins_peaked = np.flip(established_x_bins_peaked)

        established_y_corrected_peaked = []
        established_corrected_median_array_peaked = []
        established_corrected_corrections_peaked = []
        established_corrected_correction_median_array_peaked = []
        for i in range(len(phase_array)):
            filedir = 'G:/data/watchman/' + str(
                datadate
            ) + '_watchman_spe/studies/phase/' + samplerate_name + '/file_template/phase=' + str(
                phase_array[i]) + '/phase_' + shaping + '_peaked/'
            Nloops = len(os.listdir(filedir))
            established_corrected_corrections_j_peaked = []
            established_y_corrected_j_peaked = []
            for j in range(Nloops):
                print('Established Peaked Corrected Files ' + samplerate_name +
                      ';' + str(n_box) + ',' + str(n_delay) + ',' +
                      str(n_att) + ';' + str(i) + ',' + str(j))
                filename = filedir + 'Phase--waveforms--%05d.txt' % j
                (t, v, _) = rw(filename, numhead)
                t_avg, v_avg = boxcar_wf(t, v, n_box)
                v_delay = delay_wf(v_avg, n_delay)
                v_att = attenuate_wf(v_avg, n_att)
                v_sum = sum_wf(v_att, v_delay)
                t_cross, _, _ = zc_locator(t_avg, v_sum)
                established_t_corrected_peaked = t_cross - established_median_value_peaked + established_correction_median_array_peaked[
                    i]
                established_y_corrected_j_peaked.append(
                    established_t_corrected_peaked)
                established_corrected_correction_peaked = -1 * i * phase_time - established_t_corrected_peaked
                established_corrected_corrections_j_peaked.append(
                    established_corrected_correction_peaked)
            established_corrected_median_array_peaked.append(
                np.median(np.asarray(established_y_corrected_j_peaked)))
            established_corrected_correction_median_array_peaked.append(
                np.median(
                    np.asarray(established_corrected_corrections_j_peaked)))
            established_y_corrected_peaked = established_y_corrected_peaked + established_y_corrected_j_peaked
            established_corrected_corrections_peaked = established_corrected_corrections_peaked + established_corrected_corrections_j_peaked
        established_y_corrected_peaked = np.asarray(
            established_y_corrected_peaked)
        established_corrected_correction_median_array_peaked = np.asarray(
            established_corrected_correction_median_array_peaked)
        established_corrected_corrections_peaked = np.asarray(
            established_corrected_corrections_peaked)

    savedir = 'G:/data/watchman/' + str(
        datadate
    ) + '_watchman_spe/studies/phase/' + samplerate_name + '/array_data/'
    if not os.path.exists(savedir):
        os.makedirs(savedir)
    np.savetxt(savedir + 'x.csv', x, delimiter=',')
    np.savetxt(savedir + 'y.csv', y, delimiter=',')
    np.savetxt(savedir + 'x_bins.csv', x_bins, delimiter=',')
    np.savetxt(savedir + 'y_bins.csv', y_bins, delimiter=',')
    np.savetxt(savedir + 'median_array.csv', median_array, delimiter=',')
    np.savetxt(savedir + 'correction.csv', correction, delimiter=',')
    np.savetxt(savedir + 'y_bins_corrections.csv',
               y_bins_corrections,
               delimiter=',')
    np.savetxt(savedir + 'correction_median_array.csv',
               correction_median_array,
               delimiter=',')
    np.savetxt(savedir + 'y_corrected.csv', y_corrected, delimiter=',')
    np.savetxt(savedir + 'corrected_median_array.csv',
               corrected_median_array,
               delimiter=',')
    np.savetxt(savedir + 'corrected_corrections.csv',
               corrected_corrections,
               delimiter=',')
    np.savetxt(savedir + 'corrected_correction_median_array.csv',
               corrected_correction_median_array,
               delimiter=',')

    np.savetxt(savedir + 'established_x_noised.csv',
               established_x_noised,
               delimiter=',')
    np.savetxt(savedir + 'established_y_noised.csv',
               established_y_noised,
               delimiter=',')
    np.savetxt(savedir + 'established_x_bins_noised.csv',
               established_x_bins_noised,
               delimiter=',')
    np.savetxt(savedir + 'established_y_bins_noised.csv',
               established_y_bins_noised,
               delimiter=',')
    np.savetxt(savedir + 'established_median_array_noised.csv',
               established_median_array_noised,
               delimiter=',')
    np.savetxt(savedir + 'established_correction_noised.csv',
               established_correction_noised,
               delimiter=',')
    np.savetxt(savedir + 'established_y_bins_corrections_noised.csv',
               established_y_bins_corrections_noised,
               delimiter=',')
    np.savetxt(savedir + 'established_correction_median_array_noised.csv',
               established_correction_median_array_noised,
               delimiter=',')
    np.savetxt(savedir + 'established_y_corrected_noised.csv',
               established_y_corrected_noised,
               delimiter=',')
    np.savetxt(savedir + 'established_corrected_median_array_noised.csv',
               established_corrected_median_array_noised,
               delimiter=',')
    np.savetxt(savedir + 'established_corrected_corrections_noised.csv',
               established_corrected_corrections_noised,
               delimiter=',')
    np.savetxt(savedir +
               'established_corrected_correction_median_array_noised.csv',
               established_corrected_correction_median_array_noised,
               delimiter=',')

    np.savetxt(savedir + 'established_x_peaked.csv',
               established_x_peaked,
               delimiter=',')
    np.savetxt(savedir + 'established_y_peaked.csv',
               established_y_peaked,
               delimiter=',')
    np.savetxt(savedir + 'established_x_bins_peaked.csv',
               established_x_bins_peaked,
               delimiter=',')
    np.savetxt(savedir + 'established_y_bins_peaked.csv',
               established_y_bins_peaked,
               delimiter=',')
    np.savetxt(savedir + 'established_median_array_peaked.csv',
               established_median_array_peaked,
               delimiter=',')
    np.savetxt(savedir + 'established_correction_peaked.csv',
               established_correction_peaked,
               delimiter=',')
    np.savetxt(savedir + 'established_y_bins_corrections_peaked.csv',
               established_y_bins_corrections_peaked,
               delimiter=',')
    np.savetxt(savedir + 'established_correction_median_array_peaked.csv',
               established_correction_median_array_peaked,
               delimiter=',')
    np.savetxt(savedir + 'established_y_corrected_peaked.csv',
               established_y_corrected_peaked,
               delimiter=',')
    np.savetxt(savedir + 'established_corrected_median_array_peaked.csv',
               established_corrected_median_array_peaked,
               delimiter=',')
    np.savetxt(savedir + 'established_corrected_corrections_peaked.csv',
               established_corrected_corrections_peaked,
               delimiter=',')
    np.savetxt(savedir +
               'established_corrected_correction_median_array_peaked.csv',
               established_corrected_correction_median_array_peaked,
               delimiter=',')

    return ()
Beispiel #28
0
#import necessary
from matplotlib import pyplot as plt
from readwaveform import read_waveform as rw
import numpy as np
import os

#plotting the waveforms
Nloops = len(
    os.listdir(
        'G:/data/watchman/20190724_watchman_spe/d3/500 Mhz/d3_averages/raw/'))
plt.rcParams.update({'font.size': 14})
for i in range(Nloops):
    print('File: %05d' % i)
    #collecting data for various risetimes
    (t_single, v_single, _) = rw(
        'G:/Data/watchman/20190724_watchman_spe/d3/500 Mhz/d3_averages/raw/D3--waveforms--%05d.txt'
        % i, 1)
    (t_double, v_double, _) = rw(
        'G:/Data/watchman/20190724_watchman_spe/d3/500 Mhz/d3_averages/rise_doubled/D3--waveforms--%05d.txt'
        % i, 1)
    (t_quadruple, v_quadruple, _) = rw(
        'G:/Data/watchman/2019724_watchman_spe/d3/500 Mhz/d3_averages/rise_quadrupled/D3--waveforms--%05d.txt'
        % i, 1)
    (t_octuple, v_octuple, _) = rw(
        'G:/Data/watchman/20190724_watchman_spe/d3/500 Mhz/d3_averages/rise_octupled/D3--waveforms--%05d.txt'
        % i, 1)
    #initializing plots
    plt.rcParams.update({'font.size': 14})
    unshaped, = plt.plot(t_single, -1 * v_single, label='Unshaped Waveform')
    doubled, = plt.plot(t_double,
                        -1 * v_double,
def fitter_timing(datadate, numhead, samplerate, samplerate_name, shaping):
    if samplerate_name == 'INVALID':
        return ("Failed")
    phase_time = 1 / 20000000000
    maxphase = int(20000000000 / samplerate + 0.5)
    t_fitter, v_fitter, _ = rw(
        'G:/data/watchman/' + datadate + '_watchman_spe/d2/d2_average.txt', 1)
    uspl = us(t_fitter, v_fitter)
    filedir = 'G:/data/watchman/' + str(
        datadate
    ) + '_watchman_spe/studies/phase/' + samplerate_name + '/file_template/'
    Nloops = len(os.listdir(filedir + 'phase=0/phase_' + shaping))
    difference_list = []
    chi_list = []
    for i in range(Nloops):
        print(i)
        j = random.randint(0, maxphase - 1)
        filename = filedir + 'phase=' + str(
            j) + '/phase_' + shaping + '/Phase--waveforms--%05d.txt' % i
        t, v, _ = rw(filename, numhead)
        v = -1 * v
        ET = t[0:10]
        EV = v[0:10]
        chi2_min = -1
        x_min = -1
        y_min = -1
        shift_min = -1
        shifts = np.arange(0, 80 / 20000000000, 1e-11)
        for shift in shifts:
            pre_OV = uspl(ET + shift)
            A = np.array([[
                np.sum(np.square(pre_OV)),
                np.sum(pre_OV),
                np.sum(np.multiply(pre_OV, EV))
            ], [np.sum(pre_OV), len(EV), np.sum(EV)]])
            A[0] = A[0] / A[0][0]
            A[1] = np.subtract(A[1], A[1][0] * A[0])
            A[1] = A[1] / A[1][1]
            A[0] = np.subtract(A[0], A[0][1] * A[1])
            x = A[0][2]
            y = A[1][2]
            OV = x * pre_OV + y
            chi2 = chi_squared(OV, EV)
            if chi2_min < 0:
                shift_min = shift
                chi2_min = chi2
                x_min = x
                y_min = y
            elif chi2 < chi2_min:
                shift_min = shift
                chi2_min = chi2
                x_min = x
                y_min = y
        v_fit = x_min * uspl(t_fitter + shift_min) + y_min
        t_cross = timing_extraction(t_fitter, v_fit)
        #if (-1*j*phase_time - t_cross) < -1e-7:
        #    _,ax = plt.subplots()
        #    ax.plot(t,v)
        #    ax.plot(t_fitter,v_fit)
        #    ax.scatter(ET,EV)
        #    ax.axvline(-1*j*phase_time,color = 'Black')
        #    ax.axvline(t_cross,color = 'Red')
        #    ax.set_title(str(-1*j*phase_time - t_cross) + ', ' + str(chi2_min) + ', ' + str(i) + ', ' + str(j))
        #    plt.get_current_fig_manager().window.showMaximized()
        #    plt.show()
        difference_list.append((-1 * j * phase_time - t_cross)[0])
        chi_list.append(chi2_min)
    difference_list = np.asarray(difference_list)
    chi_list = np.asarray(chi_list)
    true_mean = '%5g' % (np.mean(difference_list) * 1e12)
    true_std = '%5g' % (np.std(difference_list) * 1e12)
    bins = 30  #np.linspace(-2.2e-9,2.2e-9,num = 100)
    histo_data, bins_data = np.histogram(difference_list, bins=bins)
    binwidth = (bins_data[1] - bins_data[0])
    binscenters = np.array([
        0.5 * (bins_data[i] + bins_data[i + 1])
        for i in range(len(bins_data) - 1)
    ])
    FontSize = 32
    plt.rcParams.update({'font.size': FontSize})
    _, ax = plt.subplots()
    ax.bar(binscenters, histo_data, width=binwidth)
    ax.set_xlabel('True Timing - Recovered Timing')
    ax.set_ylabel('Count')
    ax.set_title(samplerate_name + ' - Fitter Timings')
    ax.text(0.05,
            0.95,
            'Distribution Parameters:\nMean: ' + true_mean +
            ' ps\nStandard Deviation: ' + true_std + ' ps',
            transform=ax.transAxes,
            fontsize=FontSize,
            verticalalignment='top',
            bbox=dict(boxstyle='round', facecolor='White', alpha=0.5))
    plt.get_current_fig_manager().window.showMaximized()
    plt.show()
    plt.close()

    bins = 30  #np.linspace(0,30200,num = 100)
    histo_data, bins_data = np.histogram(chi_list, bins=bins)
    binwidth = (bins_data[1] - bins_data[0])
    binscenters = np.array([
        0.5 * (bins_data[i] + bins_data[i + 1])
        for i in range(len(bins_data) - 1)
    ])
    plt.rcParams.update({'font.size': FontSize})
    plt.bar(binscenters, histo_data, width=binwidth, log=True)
    plt.xlabel('Chi Squared')
    plt.ylabel('Count')
    plt.title(samplerate_name + ' - Chi Squared Counts - Fitter Timings')
    plt.get_current_fig_manager().window.showMaximized()
    plt.show()
    plt.close()

    _, ax = plt.subplots()
    h = ax.hist2d(difference_list, chi_list, bins=30, norm=LogNorm())
    plt.colorbar(h[3], ax=ax)
    ax.set_title(samplerate_name +
                 ' - Chi Squared vs. Timing Corrections - Fitter Timings')
    ax.set_xlabel('Timing Corrections')
    ax.set_ylabel('Chi Squared')
    plt.get_current_fig_manager().window.showMaximized()
    plt.show()
    plt.close()
    return ("Passed")
Beispiel #30
0
def p1b_sort(datadate,charge_mean,peak_mean,FWHM_mean,numhead):
    #set file locations for charge and peak histograms
    charge_name = 'G:/data/watchman/'+datadate+'_watchman_spe/d1/d1_histograms/charge.txt'
    peak_name = 'G:/data/watchman/'+datadate+'_watchman_spe/d1/d1_histograms/peak_amplitude.txt'
    FWHM_name = 'G:/data/watchman/'+datadate+'_watchman_spe/d1/d1_histograms/FWHM.txt'
    ten_jitter_name = 'G:/data/watchman/'+datadate+'_watchman_spe/d1/d1_histograms/10_jitter.txt'
    twenty_jitter_name = 'G:/data/watchman/'+datadate+'_watchman_spe/d1/d1_histograms/20_jitter.txt'
    #initialize histogram arrays
    charge_histo = np.array([])
    peak_histo = np.array([])
    FWHM_histo = np.array([])
    ten_jitter_histo = np.array([])
    twenty_jitter_histo = np.array([])
    #read histogram txt files int othe arrays
    charge_fin = open(charge_name,'r')
    for line in charge_fin:
        charge_histo = np.append(charge_histo, float(line.split(',')[0]))
    charge_fin.close
    peak_fin = open(peak_name,'r')
    for line in peak_fin:
        peak_histo = np.append(peak_histo, float(line.split(',')[0]))
    peak_fin.close
    FWHM_fin = open(FWHM_name,'r')
    for line in FWHM_fin:
        FWHM_histo = np.append(FWHM_histo, float(line.split(',')[0]))
    FWHM_fin.close
    ten_jitter_fin = open(ten_jitter_name,'r')
    for line in ten_jitter_fin:
        ten_jitter_histo = np.append(ten_jitter_histo, float(line.split(',')[0]))
    ten_jitter_fin.close
    twenty_jitter_fin = open(twenty_jitter_name,'r')
    for line in twenty_jitter_fin:
        twenty_jitter_histo = np.append(twenty_jitter_histo, float(line.split(',')[0]))
    twenty_jitter_fin.close
    #setting up arrays listing indices of where the value is twice the mean or greater
    charge_doubles = np.asarray(charge_histo >= 2*charge_mean).nonzero()
    charge_doubles = charge_doubles[0]
    peak_doubles = np.asarray(peak_histo >= 2*peak_mean).nonzero()
    peak_doubles = peak_doubles[0]
    FWHM_doubles = np.asarray(FWHM_histo >= 2*FWHM_mean).nonzero()
    FWHM_doubles = FWHM_doubles[0]
    ten_jitter_positive = np.asarray(ten_jitter_histo > 0).nonzero()
    ten_jitter_positive = ten_jitter_positive[0]
    twenty_jitter_positive = np.asarray(twenty_jitter_histo > 0).nonzero()
    twenty_jitter_positive = twenty_jitter_positive[0]
    for i in range(len(charge_histo)):
        print(i)
        #setting location of files to read
        filename = 'G:/data/watchman/'+datadate+'_watchman_spe/d1/d1_50centered/D1--waveforms--%05d.txt' % i
        #setting up locations to write each file to
        writename_double = 'G:/data/watchman/'+datadate+'_watchman_spe/d1/d1_final_doubles/D1--waveforms--%05d.txt' % i
        writename_single = 'G:/data/watchman/'+datadate+'_watchman_spe/d1/d1_final_spes/D1--waveforms--%05d.txt' % i
        if not os.path.exists('G:/data/watchman/'+datadate+'_watchman_spe/d1/d1_final_doubles/'):
            os.makedirs('G:/data/watchman/'+datadate+'_watchman_spe/d1/d1_final_doubles/')
        if not os.path.exists('G:/data/watchman/'+datadate+'_watchman_spe/d1/d1_final_spes/'):
            os.makedirs('G:/data/watchman/'+datadate+'_watchman_spe/d1/d1_final_spes/')
        t,v,header = rw(filename,numhead)                                   #reading data from waveform file
        #checking if both charge and peak or charge and FWHM are greater than twice the mean
        if (np.any(charge_doubles == i) and np.any(peak_doubles == i)) or (np.any(FWHM_doubles == i) and np.any(charge_doubles == i)):
            print("Was double!")
            write_waveform(t,v,writename_double,header)
        #checking if any charge, peak, or FWHM are greater than twice the mean or if 10% or 20% rise times are positive
        elif any([np.any(charge_doubles == i), np.any(peak_doubles == i), np.any(FWHM_doubles == i), np.any(ten_jitter_positive == i), np.any(twenty_jitter_positive == i)]):
            #printing off what caused the graph to display for manual selection
            if np.any(charge_doubles == i):
                print("Charge")
            if np.any(peak_doubles == i):
                print("Peak")
            if np.any(FWHM_doubles == i):
                print("FWHM")
            if np.any(ten_jitter_positive == i):
                print("10% Jitter")
            if np.any(twenty_jitter_positive == i):
                print("20% Jitter")
            plt.title(filename)
            plt.plot(t,v)                   #plotting waveform in question
            plt.get_current_fig_manager().window.showMaximized()        #maximizes plot
            plt.show()
            double_check = 'Initialization.'
            while double_check != 's' and double_check != 'd':
                double_check = input('Is there a single or double? "s" or "d"\n')
            if double_check == 's':
                write_waveform(t,v,writename_single,header)
            if double_check == 'd':
                print("Was double!")
                write_waveform(t,v,writename_double,header)
        else:
            write_waveform(t,v,writename_single,header)
    return