コード例 #1
0
def percentage_same(minima_path_a,
                    minima_path_b,
                    foldnameInversePower,
                    ctol=1e-10,
                    minima_l=2000000):
    """
    Checks the percentage of minima that are same in path a and path b, and returns the fraction of minima
    that are not the same.
    """
    abs_path_a = BASE_DIRECTORY + "/" + foldnameInversePower + "/" + minima_path_a
    abs_path_b = BASE_DIRECTORY + "/" + foldnameInversePower + "/" + minima_path_b
    print(abs_path_b)
    print(abs_path_a)
    minima_database_path = (BASE_DIRECTORY + "/" + foldnameInversePower + "/" +
                            MINIMA_DATABASE_NAME)
    data_a = CheckSameMinimum.load_map(
        abs_path_a,
        max_minima_l=minima_l,
        minima_database_path=minima_database_path)
    data_b = CheckSameMinimum.load_map(
        abs_path_b,
        max_minima_l=minima_l,
        minima_database_path=minima_database_path)
    op_a_arr = data_a.order_params
    print(op_a_arr)
    op_b_arr = data_b.order_params
    print(op_b_arr)
    return (sum(op_a_arr == op_b_arr)) / len(op_b_arr)
コード例 #2
0
minima_database_path = data_loc + "minima_database.npy"
(hs_radii, initial_coords, box_length) = load_secondary_params(data_loc)
sysparams = load_params(data_loc)
potential = InversePower(
    sysparams.power.value,
    sysparams.eps.value,
    use_cell_lists=False,
    ndim=sysparams.ndim.value,
    radii=hs_radii * 1.0,
    boxvec=[box_length, box_length],
)
minima_container_debug = CheckSameMinimum(
    ctol,
    ndim,
    boxl=box_length,
    minimalist_max_len=2000,
    minima_database_location=minima_database_path,
    update_database=True,
    rattler_check=True,
    potential=potential,
    hs_radii=hs_radii,
)


# plot the rattlers


minima_container_debug._find_rattlers(np.array(debug_coords))

print("works")
コード例 #3
0
ファイル: compare_runs.py プロジェクト: spraharsh/basinerror
def compare_runs_2d(fnames, foldpath, subfoldname, run_a, run_b, ctol):
    """ compares runs on points with names fnames between
        runs done with 2 minima find routines run_a and run_b

    Args:
       fnames filenames
       run_a run a 
       run_b run b

    Returns:
        percentage of minima that are the same

    """
    # TODO: replace this
    sysparams = load_params(foldpath)
    radii = get_hs_radii(foldpath, subfoldname)
    box_length = get_box_length(radii, sysparams.ndim.value,
                                sysparams.phi.value)

    subfoldpath = foldpath + "/" + subfoldname
    data_path_a = subfoldpath + "/" + run_a
    data_path_b = subfoldpath + "/" + run_b
    potential = InversePower(
        sysparams.power.value,
        sysparams.eps.value,
        use_cell_lists=False,
        ndim=sysparams.ndim.value,
        radii=radii * 1.0,
        boxvec=[box_length, box_length],
    )
    minima_checker = CheckSameMinimum(ctol,
                                      dim=2,
                                      boxl=box_length,
                                      hs_radii=radii,
                                      potential=potential)

    same_minimum_check_l = []
    for fname in fnames:
        print(fname)
        minimum_a = np.loadtxt(data_path_a + "/" + fname, delimiter=",")
        minimum_b = np.loadtxt(data_path_b + "/" + fname, delimiter=",")
        boxed_minimum_a = minima_checker.box_reshape_coords(minimum_a)
        boxed_minimum_b = minima_checker.box_reshape_coords(minimum_b)
        # get first index that is not a rattler
        rattlers_exist, rattlers = minima_checker._find_rattlers(minimum_a)
        print(rattlers)
        # number of non rattlers to ensure we're not in a fluid state
        n_non_rattlers = np.count_nonzero(rattlers)
        # only do calculations if all particles aren't rattlers
        if n_non_rattlers != 0:
            first_non_rattler = (np.argwhere(rattlers != 0).T)[0, 0]
            # TODO: rewrite the CheckSameMinimum function
            # load and make sure the particle being aligned is not a rattler later
            # we're choosing -1 because that's always going to be of radius 1.4
            #  particle
            aligned_minimum_b = minima_checker.align_structures(
                boxed_minimum_a, boxed_minimum_b, part_ind=first_non_rattler)
            same_minimum_check = minima_checker.check_same_structure(
                aligned_minimum_b, boxed_minimum_a, rattlers)
            same_minimum_check_l.append(same_minimum_check)

    fraction_same_minimum = np.mean(same_minimum_check_l)
    print(fraction_same_minimum)
    return fraction_same_minimum
コード例 #4
0
    # quench_type= ''

    # quench_type = "cvode_ex"
    # quench_type = 'correct_minima'

    data_fold_path = BASE_DIRECTORY + "/" + foldnameInversePower + "/" + quench_type

    z_list = os.listdir(data_fold_path + "/z_data_30_l6_2")
    print(z_list)
    minima_l = 200000
    print("loading data from")
    print(data_fold_path)
    for z in z_list:
        data = CheckSameMinimum.load_map(
            data_fold_path + "/z_data_30_l6_2/" + z,
            max_minima_l=minima_l,
            minima_database_path=minima_database_path,
        )

        print(
            np.load(data_fold_path + "/z_data_30_l6_2/" + z +
                    "/order_params200000.npy"))
        print(len(data.minimalist))
        print(data.minimalist)
        print(data.initial_coords)
        print(minima_database_path)
        initial_coords = data.initial_coords
        order_params = data.order_params
        minimalist = data.minimalist

        print(order_params)
コード例 #5
0
def map_pointset_loop_xy(
    foldname,
    pointset,
    optimizer,
    parameter_dict,
    ctol=1e-2,
    ndim=2,
    use_minima_database=True,
    minima_database_path=None,
    coord_arg_0=0,
    coord_arg_1=1,
    z=0,
):
    """ Checks a bunch of points if they match to a minimum by using a for loop
    """
    is_same_minimum_list = []
    resultlist = []
    foldpath = BASE_DIRECTORY + "/" + foldname

    sysparams = load_params(foldpath)
    (hs_radii, initial_coords, box_length) = load_secondary_params(foldpath)
    minimum_coords = np.loadtxt(foldpath + "/coords_of_minimum.txt", delimiter=",")

    # Initialize CheckSameMinimum
    potential = InversePower(
        sysparams.power.value,
        sysparams.eps.value,
        use_cell_lists=False,
        ndim=sysparams.ndim.value,
        radii=hs_radii * 1.0,
        boxvec=[box_length, box_length],
    )
    minima_container = CheckSameMinimum(
        ctol,
        ndim,
        boxl=box_length,
        minimalist_max_len=200000,
        minima_database_location=minima_database_path,
        update_database=True,
        rattler_check=True,
        potential=potential,
        hs_radii=hs_radii,
    )

    if use_minima_database == True:
        try:
            minima_container.minimalist = [
                minima_container.box_reshape_coords(x)
                for x in np.load(minima_database_path)
            ]
        except:
            print("warning no minima data found. generating")
            minima_container.minimalist = [
                # minima_container.box_reshape_coords(minimum_coords)
            ]
    nfevlist = []
    nstepslist = []
    nhevlist = []
    for index, point in enumerate(pointset):
        res = map_binary_inversepower(
            foldname,
            point,
            optimizer,
            parameter_dict,
            random_coord_0=coord_arg_0,
            random_coord_1=coord_arg_1,
            z=z,
        )
        minima_container.add_minimum(res[0], point, res[2])
        # print(index)
        # print(minima_container.nrattlermin, 'nrattlermin')
        # print(minima_container.nfluidstates, 'nfluidstates')
        nfevlist.append(res[3])
        nstepslist.append(res[4])
        nhevlist.append(res[5])

    # print(np.average(nfevlist), 'number of function evaluations')
    # print(np.average(nstepslist), 'number of steps')
    # print(np.average(nstepslist), 'number of steps')
    # print(np.average(nhevlist), "number of hessian evaluations")

    # print(minima_container.orderparamlist)

    foldpathdata = foldpath + "/" + QUENCH_FOLDER_NAME + "/z_data_30_l6/" + str(z)
    os.makedirs(foldpathdata, exist_ok=True)
    minima_container.dump_map(foldpathdata)

    run_diagnostics = {}
    run_diagnostics["nfev"] = float(np.average(nfevlist))
    run_diagnostics["nhev"] = float(np.average(nhevlist))
    run_diagnostics["nsteps"] = float(np.average(nstepslist))

    # print(minima_container.initial_coords_list)
    # print(minima_container.orderparamlist)
    # print(minima_container.orderparamlist)
    return run_diagnostics, is_same_minimum_list, resultlist
コード例 #6
0
ctol = 1e-3
ndim = 2
potential = InversePower(
    sysparams.power.value,
    sysparams.eps.value,
    use_cell_lists=False,
    ndim=sysparams.ndim.value,
    radii=hs_radii * 1.0,
    boxvec=[box_length, box_length],
)
minima_container = CheckSameMinimum(
    ctol,
    ndim,
    boxl=box_length,
    minimalist_max_len=2000,
    minima_database_location=minima_database_path,
    update_database=True,
    rattler_check=True,
    potential=potential,
    hs_radii=hs_radii,
)
print(box_length, "box_length")

box_length = float(box_length)
minimum_coords = np.loadtxt(foldpath + "/coords_of_minimum.txt", delimiter=",")
m1 = minima_container.box_reshape_coords(th[m1_arg])
m2 = minima_container.box_reshape_coords(th[m2_arg])
m3 = minima_container.box_reshape_coords(th[m3_arg])
m4 = minima_container.box_reshape_coords(th[m4_arg])
print(minima_container.boxl)