Exemplo n.º 1
0
def filter_rupture(fitfile, meas_pars, test=False):
    m = meas_pars

    #  laptop or work PC
    folder = "C:\\Users\\tbrouwer\\Desktop\\Data\\"
    bool = os.path.isdir(folder)
    if bool == False:
        folder = "C:\\Users\\brouw\\Desktop\\Data\\"

    # open data
    file_location = folder + str(fitfile[:6]) + "\\"
    file_name = str(fitfile[7:15]) + ".dat"
    bead = fitfile[16:-4]

    # read logfile
    log_name = str(fitfile[7:15]) + ".log"
    f = open(file_location + log_name, 'r')
    log = f.readlines()[:]
    f.close()
    m['beads'] = func.get_num(log[9])
    framerate = func.get_num(log[5])

    # because of this annoying bug in the LabVIEW program, offset bead no. by 2
    bead = int(bead)
    # bead = str(bead + 2)
    bead = str(bead)

    # title
    title = fitfile[:-4]

    # read DataFrame
    df = pd.read_csv(file_location + file_name, sep="\t")

    time = np.array(df['Time (s)'])
    amplitude = np.array(df['Amp' + str(bead) + ' (a.u.)'])
    X = np.array(df['X' + str(bead) + ' (um)'])
    Y = np.array(df['Y' + str(bead) + ' (um)'])
    Z = np.array(df['Z' + str(bead) + ' (um)'])

    m['X0_um'] = np.mean(X[np.logical_not(np.isnan(X))])
    m['Y0_um'] = np.mean(Y[np.logical_not(np.isnan(Y))])
    m['Z0_um'] = np.mean(Z[np.logical_not(np.isnan(Z))])
    m['amp'] = np.mean(amplitude[np.logical_not(np.isnan(amplitude))])
    m['points_exp'] = int(time[-1]*framerate)

    # does the tether rupture?
    rupt, peak_index, mask = func.rupture(time, amplitude, mask=True)

    if rupt:
        magnet = np.array(df['Stepper shift (mm)'])
        force = func.calc_force(magnet)
        f_rupt = force[peak_index]
        m['f_rupt_pN'] = f_rupt

    if test:
        return rupt, mask, Z
    else:
        return rupt, mask
Exemplo n.º 2
0
def open_data(n, measurements, data_path):

    # open data
    sub = measurements[n]
    file_location = data_path + str(sub[0]) + "\\"
    file_name = "data_" + str(sub[1])
    file_extension = ".dat"
    file_all = file_location + file_name + file_extension

    # title - extract date of the measurements
    title = int(func.get_num(file_location))

    # headers
    f = open(file_all, 'r')
    headers_lines = f.readlines()[0]
    f.close()

    headers = headers_lines.split('\t')

    # data
    f = open(file_all, 'r')
    data_lines = f.readlines()[1:]
    f.close()

    # number of beads
    file_name = "data_" + str(sub[1])
    file_extension = ".log"
    file_all = file_location + file_name + file_extension

    # find "number of beads" column
    f = open(file_all, 'r')
    beads = f.readlines()[9]
    f.close()
    beads = int(func.get_num(beads))

    # calculate force from magnet position
    magnet = []
    time = []
    force = []
    for n, x in enumerate(data_lines):
        magnet.append(float(x.split()[headers.index('Stepper shift (mm)')]))
        time.append(float(x.split()[headers.index('Time (s)')]))
    magnet = np.array(magnet)
    for i in magnet:
        force.append(func.calc_force(i))

    # calculating the first derivative of magnet to discriminate in pull/release-curve
    dx = np.diff(time)
    dy = np.diff(magnet)
    diff_magnet = np.array(np.divide(dy, dx))

    return time, force, beads, diff_magnet, headers, data_lines, title, file_name
Exemplo n.º 3
0
def read_analyze_DNA(measurement, pars):
    # import parameters
    try:
        p = pars
    except:
        print('Error: no parameters')
        return

    # constants from Parameters
    L_bp = p['L_bp']  # contour length (bp)
    S_pN = p['S_pN']  # stretch modulus (pN)
    P_nm = p['P_nm']  # persistence length (nm)

    #  working on laptop or work PC?
    folder = "C:\\Users\\tbrouwer\\Desktop\\Data\\"
    bool = os.path.isdir(folder)
    if bool == False:
        folder = "C:\\Users\\brouw\\Desktop\\Data\\"

    # open data
    sub = measurement
    file_location = folder + str(sub[0]) + "\\"
    file_name = "data_" + str(sub[1])
    file_extension = ".dat"
    file_all = file_location + file_name + file_extension
    bead = int(sub[2])

    # title
    title = int(func.get_num(file_location))

    # read DataFrame
    df = pd.read_csv(file_all, sep="\t")

    magnet = np.array(df['Stepper shift (mm)'])
    time = np.array(df['Time (s)'])
    force = func.calc_force(magnet)
    Z = np.array(df['Z' + str(bead) + ' (um)'])

    # number of beads
    file_log = file_location + file_name + ".log"
    f = open(file_log, 'r')
    beads = f.readlines()[9]
    f.close()

    beads = int(func.get_num(beads))

    drift = []
    for i in range(beads):
        z_drift = np.array(df['Z' + str(i) + ' (um)'])
        amplitude_drift = np.array(df['Amp' + str(i) + ' (a.u.)'])

        # does the tether rupture?
        rupt = rupture(time, amplitude_drift)

        if rupt == False:
            drift.append(func.drift_self(z_drift, time))

    drift_med = float(np.median(drift))
    Z = Z - (drift_med / 1000) * time

    # calculating the first derivative of magnet
    dx = np.diff(time)
    dy = np.diff(magnet)
    diff_magnet = np.append([0], np.divide(dy,
                                           dx))  # add a zero as first element

    # split in pull & release
    factor = max(diff_magnet / 1000)
    # f_pull = force[diff_magnet > factor]
    # f_release = force[diff_magnet < factor]
    # z_pull = Z[diff_magnet > factor]
    # z_release = Z[diff_magnet < factor]
    # 1st pull
    # f_pull = force[np.where((diff_magnet > factor) & (time < 25))]
    # f_release = force[np.where((diff_magnet < factor) & (time < 25))]
    # z_pull = Z[np.where((diff_magnet > factor) & (time < 25))]
    # z_release = Z[np.where((diff_magnet < factor) & (time < 25))]
    # 2nd pull
    f_pull = force[np.where((diff_magnet > factor) & (time > 25))]
    f_release = force[np.where((diff_magnet < factor) & (time > 25))]
    z_pull = Z[np.where((diff_magnet > factor) & (time > 25))]
    z_release = Z[np.where((diff_magnet < factor) & (time > 25))]

    # select high-force data
    select_f = f_pull[np.where((f_pull > 14) & (f_pull < 16))]
    select_z = z_pull[np.where((f_pull > 14) & (f_pull < 16))]

    # fit the WLC in fashion (x,y) - only fit offset, fix everything else
    popt, pcov = curve_fit(
        lambda f, z0: func.WLC_fit(f, P_nm, L_bp * 0.34, S_pN, z0),
        select_f,
        select_z,
        p0=1)

    z_fit = popt[0]

    # subtract fitted offset from data
    z_pull -= z_fit
    z_release -= z_fit
    select_z -= z_fit

    title = str(title) + '_' + str(sub[1]) + '_' + str(sub[2]) + '_' + str(
        sub[3])

    return f_pull, z_pull, f_release, z_release, title
Exemplo n.º 4
0
def read_analyze(measurement, pars, data_path):
    try:
        p = pars
    except:
        print('Error: no parameters')
        return

    global_drift = True

    # constants from parameters
    L_bp = p['L_bp']  # contour length (bp)
    S_pN = p['S_pN']  # stretch modulus (pN)
    P_nm = p['P_nm']  # persistence length (nm)

    # open data
    file_location = data_path
    file_name = "data_" + str(measurement[1])
    file_extension = ".dat"
    file_all = file_location + file_name + file_extension
    bead = int(measurement[2])

    # title
    title = int(func.get_num(file_location))

    # read DataFrame
    df = pd.read_csv(file_all, sep="\t")

    magnet = np.array(df['Stepper shift (mm)'])
    time = np.array(df['Time (s)'])
    force = func.calc_force(magnet)
    Z = np.array(df['Z' + str(bead) + ' (um)'])

    # number of beads
    file_log = file_location + file_name + ".log"
    f = open(file_log, 'r')
    try:
        beads = f.readlines()[9]
    except:
        headers = list(df)
        # get number of beads
        beads = headers[len(headers) - 1]
    f.close()

    try:
        beads = int(func.get_num(beads))
    except:
        beads = func.get_int(beads)

    drift = []
    for i in range(beads):
        z_drift = np.array(df['Z' + str(i) + ' (um)'])
        try:
            amplitude_drift = np.array(df['Amp' + str(i) + ' (a.u.)'])
        except:
            amplitude_drift = np.array(df['Amp a.u.'])

        # does the tether rupture?
        rupt, _ = func.rupture(time, amplitude_drift)

        if rupt == False:
            drift.append(func.drift_self(z_drift, time))

    if not drift:
        p['drift'] = 'uncorrected'
        drift_med = 0
    else:
        drift_med = float(np.median(drift))
        Z = Z - (drift_med / 1000) * time
        p['drift'] = str(round(drift_med, 3)) + " nm/s (global drift)"

    # calculating the first derivative of magnet
    dx = np.diff(time)
    dy = np.diff(magnet)
    diff_magnet = np.append([0], np.divide(dy, dx))  # add a zero as first element

    # split in pull & release
    factor = max(diff_magnet / 1000)
    time_pull = time[diff_magnet < factor]
    f_pull = force[diff_magnet < factor]
    f_release = force[diff_magnet > factor]
    z_pull = Z[diff_magnet < factor]
    z_release = Z[diff_magnet > factor]

    # select high-force data
    select_f = f_pull[np.where((f_pull > 50) & (f_pull < 55) & (time_pull > 60) & (time_pull < 140))]
    select_z = z_pull[np.where((f_pull > 50) & (f_pull < 55) & (time_pull > 60) & (time_pull < 140))]

    if select_f.size != 0:

        # fit the WLC in fashion (x,y) - only fit offset, fix everything else
        popt, pcov = curve_fit(lambda f, z0: func.WLC_fit(f, P_nm, L_bp * 0.34, S_pN, z0), select_f, select_z, p0=1)

        z_fit = popt[0]

        # subtract fitted offset from data
        z_pull -= z_fit
        z_release -= z_fit
        select_z -= z_fit

    else:
        z_fit = 0

    title = str(title) + '_' + str(measurement[1]) + '_' + str(measurement[2]) + '_' + str(measurement[3])

    return f_pull, z_pull, f_release, z_release, title, drift_med, z_fit
Exemplo n.º 5
0
for file in fitfiles:

    # read DataFrame
    df = pd.read_csv(folder + file, sep="\t")

    force = np.array(df['F (pN)'])
    time = np.array(df['t (s)'])

    A = 59.5
    C = 0.01
    L = 1.4

    magnet = -np.log(force / A - C / A) * L

    recalc_force = func.calc_force(magnet)

    df['F (pN)'] = recalc_force

    df.to_csv(recalc_folder + file[:-4] + "_rec.fit", sep='\t')

# rename logfiles + save

logfiles = []
os.chdir(folder)
for file in glob.glob("*.log"):
    logfiles.append(file)

for file in logfiles:

    old_name = folder + file