Exemplo n.º 1
0
def test_fit_constraint_simple_inequality():
    """ Check "smaller than" relation during fitting.
    """
    dfile = data_file_dl.get_data_file(examplefile)
    data = pcf.readfiles.openAny(dfile)
    corr = pcf.Correlation(
        correlation=data["Correlation"][0],
        traces=data["Trace"][0],
        corr_type=data["Type"][0],
        filename=os.path.basename(dfile),
        title="test correlation",
        fit_model=6035  # confocal 3D+3D)
    )
    corr.fit_parameters_variable = [
        True, True, True, True, False, False, False
    ]
    # crop triplet data
    corr.fit_ival[0] = 8
    pcf.Fit(corr)
    assert corr.fit_parameters[1] <= corr.fit_parameters[2]
    # -> deliberately reverse everything and try again
    corr.fit_parameters[1], corr.fit_parameters[2] = corr.fit_parameters[
        2], corr.fit_parameters[1]
    corr.fit_parameters[3] = 1 - corr.fit_parameters[3]
    pcf.Fit(corr)
    # This tests also for equality
    assert corr.fit_parameters[1] <= corr.fit_parameters[2]
    if corr.fit_parameters[1] == corr.fit_parameters[2]:
        print(
            "found identity of fit parameters - multiplying by two to see if relation holds"
        )
        corr.fit_parameters[2] *= 2
        pcf.Fit(corr)
        assert corr.fit_parameters[1] < corr.fit_parameters[2]
Exemplo n.º 2
0
def test_fit_constraint_sum_smaller_one():
    """ Check "a+b<c" relation during fitting.
    """
    dfile = data_file_dl.get_data_file(examplefile)
    data = pcf.readfiles.openAny(dfile)
    corr = pcf.Correlation(
        correlation=data["Correlation"][0],
        traces=data["Trace"][0],
        corr_type=data["Type"][0],
        filename=os.path.basename(dfile),
        title="test correlation",
        fit_model=6081  # confocal 3D+3D)
    )
    pcf.Fit(corr)
    assert corr.fit_parameters[4] + corr.fit_parameters[5] < 1
    parms0 = np.array([
        1.13827592342,  #   n    
        3.0918704e-05,  #   τ₁ [ms]    
        1.98835792339,  #   τ₂ [ms]    
        2000.0,  #   τ₃ [ms]    
        0.972264423555,  #   F₁    
        0.021400173882,  #   F₂    
        5.0,  #   SP    
        1.0,  #   α₂₁    
        1.0,  #   α₃₁    
        1e-08,  #   τ_trip [ms]    
        0.0,  #   T    
        0.0,  #   offset    
    ])
    corr.fit_parameters = parms0

    vary = [False] * 12
    vary[4] = vary[5] = True
    corr.fit_parameters_variable = vary
    # crop triplet data
    pcf.Fit(corr)
    assert corr.fit_parameters[4] + corr.fit_parameters[5] < 1
    # -> deliberately reverse everything and try again
    corr.fit_parameters[4], corr.fit_parameters[5] = corr.fit_parameters[
        5], corr.fit_parameters[4]
    pcf.Fit(corr)
    # This tests also for equality
    assert corr.fit_parameters[4] + corr.fit_parameters[5] < 1
Exemplo n.º 3
0
def test_basic():
    """This is a very rudimentary test for the session handling"""
    dfile = data_file_dl.get_data_file(examplefile)
    data = pcf.readfiles.open_any(dfile)
    corr = pcf.Correlation(
        correlation=data["Correlation"][0],
        traces=data["Trace"][0],
        corr_type=data["Type"][0],
        filename=os.path.basename(dfile),
        title="test correlation",
        fit_model=6035  # confocal 3D+3D)
    )
    corr.fit_parameters_variable = [
        True, True, True, True, False, False, False
    ]
    # crop triplet data
    corr.fit_ival[0] = 8
    pcf.Fit(corr)

    tmpdir = tempfile.mkdtemp(prefix="pycorrfit_tests_")
    path = pathlib.Path(tmpdir) / "session.pcfs"

    fiterr = []
    for ii, fitpid in enumerate(corr.fit_results["fit parameters"]):
        fiterr.append(
            [int(fitpid),
             float(corr.fit_results["fit error estimation"][ii])])

    Infodict = {
        "Correlations": {
            1: [corr.lag_time, corr.correlation]
        },
        "Parameters": {
            1: [
                "#1:", corr.fit_model.id, corr.fit_parameters,
                corr.fit_parameters_variable, corr.fit_ival,
                [3, 3, 5, corr.fit_algorithm], [None, None], True, None,
                [[0.0, np.inf], [0.0, np.inf], [0.0, np.inf],
                 [0.0, 0.9999999999999], [-np.inf, np.inf]]
            ]
        },
        "Supplements": {
            1: {
                "FitErr": fiterr,
                "Chi sq": float(corr.fit_results["chi2"]),
                "Global Share": [],
            }
        },
        "External Functions": {},
        "Traces": {},
        "Comments": {
            "Session": "No comment."
        },
        "Backgrounds": {},
        "External Weights": {},
        "Preferences": {},
    }

    pcf.openfile.SaveSessionData(sessionfile=str(path), Infodict=Infodict)

    ldt = pcf.openfile.LoadSessionData(str(path))

    # lag time only, shape (N,)
    assert np.allclose(data["Correlation"][0][:, 0], ldt["Correlations"][1][0])
    # lag time and correlation, shape (N, 2)
    assert np.allclose(corr.correlation, ldt["Correlations"][1][1])
    # parameters
    assert corr.fit_model.id == ldt["Parameters"][0][1]
    assert np.allclose(corr.fit_parameters, ldt["Parameters"][0][2])
    assert np.allclose(corr.fit_parameters_variable, ldt["Parameters"][0][3])
    assert np.allclose(corr.fit_ival, ldt["Parameters"][0][4])

    shutil.rmtree(tmpdir, ignore_errors=True)