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]
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
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)