コード例 #1
0
def thin_ds1(idx, frame_params):

    from libtbx.phil import parse
    from simtbx.diffBragg.phil import philz
    from simtbx.diffBragg.phil import hopper_phil
    philz = hopper_phil + philz
    phil_scope_db = parse(philz)
    from LS49.adse13_187.report_versions import ds1_params_v4 as ds1_params
    user_phil = parse(ds1_params)
    working_phil = phil_scope_db.fetch(sources=[user_phil])
    params = working_phil.extract()
    from simtbx.diffBragg import hopper_utils
    BERNINA = os.environ.get("BERNINA")

    try:
      exp, ref, data_modeler, x = hopper_utils.refine(
      exp=os.path.join(BERNINA, "split_cs", "split_%04d.expt"%idx),
      ref = os.path.join(BERNINA, "split2b" , "split_%04d.refl"%idx),
      params=params, return_modeler=True)
      (scale, rotX, rotY, rotZ, Na, Nb, Nc,
       diff_gam_a, diff_gam_b, diff_gam_c, diff_sig_a, diff_sig_b, diff_sig_c,
       a,b,c,al,be,ga, detz) = hopper_utils.get_param_from_x(x,data_modeler.SIM)
      from dxtbx.model.experiment_list import ExperimentList
      L = ExperimentList()
      L.append(exp)
      L.as_file("ds1_%04d.expt"%idx)
      print("DS1 parameters index %d Na Nb Nc %.3f %.3f %.3f"%(idx,Na,Nb,Nc))

      from LS49.adse13_187.adse13_221.basic_runner import run as basic_run
      anaparams = mcmc_runner_parse_input()
      anaparams.trusted_mask=os.path.join(BERNINA, "trusted_Py3.mask")
      anaparams.cryst="ds1_%04d.expt"%idx
      anaparams.expt = os.path.join(BERNINA, "split_cs", "split_%04d.expt"%idx)
      anaparams.refl=os.path.join(BERNINA, "split2b" , "split_%04d.refl"%idx)
      anaparams.output.enable=False
      anaparams.output.label="mcmc3"
      anaparams.output.index=idx
      anaparams.model.mosaic_spread.value=0.001
      anaparams.model.Nabc.value=(Na,Nb,Nc)
      anaparams.model.Nabc.hyperparameter=0.8
      anaparams.model.rot.refine=True
      anaparams.model.cell.covariance=os.path.join(
      BERNINA,"..", "covariance_cytochrome_form.pickle")
      anaparams.simplex.cycles=200
      anaparams.mcmc.cycles=2000
      anaparams.model.plot=False
      print(anaparams.trusted_mask)
      print(anaparams.cryst)
      print(anaparams.expt)
      print(anaparams.refl)
      print(anaparams.model.cell.covariance)
      basic_run(anaparams)

    except Exception as e:
      print("CATCH EXCEPTION",e)
      traceback.print_exc()
コード例 #2
0
ファイル: hopper.py プロジェクト: dials/cctbx
def save_to_pandas(x, SIM, orig_exp_name, params, expt, rank_exp_idx, stg1_refls, stg1_img_path):
    LOGGER = logging.getLogger("refine")
    rank_exper_outdir = make_rank_outdir(params.outdir, "expers")
    rank_pandas_outdir =make_rank_outdir(params.outdir, "pandas")

    #if SIM.num_xtals > 1:
    #    raise NotImplemented("cant save pandas for multiple crystals yet")
    scale, rotX, rotY, rotZ, Na, Nb, Nc,diff_gam_a, diff_gam_b, diff_gam_c, diff_sig_a, diff_sig_b, diff_sig_c, a,b,c,al,be,ga,detz_shift = hopper_utils.get_param_from_x(x, SIM)
    if params.isotropic.diffuse_gamma:
        diff_gam_b = diff_gam_c = diff_gam_a
    if params.isotropic.diffuse_sigma:
        diff_sig_b = diff_sig_c = diff_sig_a
    shift = np.nan
    #if SIM.shift_param is not None:
    #    shift = SIM.shift_param.get_val(x[-1])
    xtal_scales = [scale]
    eta_a, eta_b, eta_c = hopper_utils.get_mosaicity_from_x(x, SIM)
    a_init, b_init, c_init, al_init, be_init, ga_init = SIM.crystal.dxtbx_crystal.get_unit_cell().parameters()

    xax = col((-1, 0, 0))
    yax = col((0, -1, 0))
    zax = col((0, 0, -1))
    ## update parameters:
    RX = xax.axis_and_angle_as_r3_rotation_matrix(rotX, deg=False)
    RY = yax.axis_and_angle_as_r3_rotation_matrix(rotY, deg=False)
    RZ = zax.axis_and_angle_as_r3_rotation_matrix(rotZ, deg=False)
    M = RX * RY * RZ
    U = M * sqr(SIM.crystal.dxtbx_crystal.get_U())
    SIM.crystal.dxtbx_crystal.set_U(U)

    ucparam = a, b, c, al, be, ga
    ucman = utils.manager_from_params(ucparam)
    SIM.crystal.dxtbx_crystal.set_B(ucman.B_recipspace)

    Amats = [SIM.crystal.dxtbx_crystal.get_A()]
    ncells_def_vals = [(0, 0, 0)]
    ncells_vals = [(Na, Nb, Nc)]
    eta = [0]
    lam0 = [-1]
    lam1 = [-1]
    df = pandas.DataFrame({
        # "panX": list(panX), "panY": list(panY), "panZ": list(panZ),
        # "panO": list(panO), "panF": list(panF), "panS": list(panS),
        "spot_scales": xtal_scales, "Amats": Amats, "ncells": ncells_vals,
        "eta_abc": [(eta_a, eta_b, eta_c)],
        "detz_shift_mm": [detz_shift * 1e3],
        "ncells_def": ncells_def_vals,
        "diffuse_gamma": [(diff_gam_a, diff_gam_b, diff_gam_c)],
        "diffuse_sigma": [(diff_sig_a, diff_sig_b, diff_sig_c)],
        "fp_fdp_shift": [shift],
        "use_diffuse_models": [params.use_diffuse_models],
        "gamma_miller_units": [params.gamma_miller_units],
        # "bgplanes": bgplanes, "image_corr": image_corr,
        # "init_image_corr": init_img_corr,
        # "fcell_xstart": fcell_xstart,
        # "ucell_xstart": ucell_xstart,
        # "init_misorient": init_misori, "final_misorient": final_misori,
        # "bg_coef": bg_coef,
        "eta": eta,
        "rotX": rotX,
        "rotY": rotY,
        "rotZ": rotZ,
        "a": a, "b": b, "c": c, "al": al, "be": be, "ga": ga,
        "a_init": a_init, "b_init": b_init, "c_init": c_init, "al_init": al_init,
        "lam0": lam0, "lam1": lam1,
        "be_init": be_init, "ga_init": ga_init})
    # "scale_xpos": scale_xpos,
    # "ncells_xpos": ncells_xstart,
    # "bgplanes_xpos": bgplane_xpos})

    basename = os.path.splitext(os.path.basename(orig_exp_name))[0]
    opt_exp_path = os.path.join(rank_exper_outdir, "%s_%s_%d.expt" % (params.tag, basename, rank_exp_idx))
    pandas_path = os.path.join(rank_pandas_outdir, "%s_%s_%d.pkl" % (params.tag, basename, rank_exp_idx))
    expt.crystal = SIM.crystal.dxtbx_crystal
    # expt.detector = refiner.get_optimized_detector()
    new_exp_list = ExperimentList()
    new_exp_list.append(expt)
    new_exp_list.as_file(opt_exp_path)
    LOGGER.debug("saved opt_exp %s with wavelength %f" % (opt_exp_path, expt.beam.get_wavelength()))

    spec_file = None
    if params.simulator.spectrum.filename is not None:
        spec_file = os.path.abspath(params.simulator.spectrum.filename)
    df["spectrum_filename"] = spec_file
    df["spectrum_stride"] = params.simulator.spectrum.stride

    df["total_flux"] = SIM.D.flux  # params.simulator.total_flux
    df["beamsize_mm"] = SIM.beam.size_mm
    df["exp_name"] = os.path.abspath(orig_exp_name)
    df["opt_exp_name"] = os.path.abspath(opt_exp_path)
    df["spectrum_from_imageset"] = params.spectrum_from_imageset
    df["oversample"] = params.simulator.oversample
    if params.opt_det is not None:
        df["opt_det"] = params.opt_det
    df["stage1_refls"] = stg1_refls
    df["stage1_output_img"] = stg1_img_path

    df.to_pickle(pandas_path)
    return df
コード例 #3
0
if "eta" in args.perturb:
    P.ftol = 1e-8
#P.method="Nelder-Mead"
#P.fix.G = True
#P.fix.Nabc =True
#P.fix.detz_shift=True

import logging
import sys
h = logging.StreamHandler(sys.stdout)
logging.basicConfig(level=logging.DEBUG, handlers=[h])

from simtbx.diffBragg import hopper_utils
Eopt, _, Mod, x = hopper_utils.refine(E, refls, P, return_modeler=True)

G, rotX, rotY, rotZ, Na, Nb, Nc, _, _, _, _, _, _, a, b, c, al, be, ga, detz_shift = hopper_utils.get_param_from_x(
    x, Mod.SIM)
eta_abc_opt = hopper_utils.get_mosaicity_from_x(x, Mod.SIM)

print("Na, Nb, Nc= %f %f %f" % (Na, Nb, Nc))
print("eta_abc optimized:", eta_abc_opt)

# check crystal
Copt = Eopt.crystal
misset, misset_init = utils.compare_with_ground_truth(
    *C.get_real_space_vectors(),
    dxcryst_models=[Copt, E.crystal],
    symbol=symbol)
print(misset_init, "init misset with ground truth")
print(misset, "misset with ground truth")
if "detz_shift" in args.perturb:
    assert misset < 0.007, misset
コード例 #4
0
def tst_ds1(idx, frame_params):
    print("in tst_diffbragg_stage_1")

    from libtbx.phil import parse
    from simtbx.diffBragg.phil import philz
    from simtbx.diffBragg.phil import hopper_phil
    philz = hopper_phil + philz
    phil_scope_db = parse(philz)
    user_phil = parse(ds1_params)
    working_phil = phil_scope_db.fetch(sources=[user_phil])
    params = working_phil.extract()
    #import logging
    #logging.disable(level=logging.CRITICAL)
    #logging.basicConfig(stream=sys.stdout, level=logging.DEBUG)
    from simtbx.diffBragg import hopper_utils
    BERNINA = os.environ.get("BERNINA")
    #params.fix.detz_shift = True
    print ("hopper",flush=True)
    try:
      exp, ref, data_modeler, x = hopper_utils.refine(
      exp=os.path.join(BERNINA, "split_cs", "split_%04d.expt"%idx),
      ref = os.path.join(BERNINA, "split2b" , "split_%04d.refl"%idx),
      params=params, return_modeler=True)
      print("1",flush=True)
      scale, rotX, rotY, rotZ, Na, Nb, Nc,diff_gam_a, diff_gam_b, diff_gam_c, diff_sig_a, diff_sig_b, diff_sig_c, a,b,c,al,be,ga, detz = hopper_utils.get_param_from_x(x,data_modeler.SIM)
      print("The parameters are\n",scale, rotX, rotY, rotZ, Na, Nb, Nc,diff_gam_a, diff_gam_b, diff_gam_c, diff_sig_a, diff_sig_b, diff_sig_c, a,b,c,al,be,ga, detz)
    except Exception as e:
      print("CATCH EXCEPTION",e)
      traceback.print_tb(e.__traceback__)
コード例 #5
0
def save_to_pandas(x, SIM, orig_exp_name, params, expt, rank_exp_idx,
                   stg1_refls, stg1_img_path):
    LOGGER = logging.getLogger("refine")
    rank_exper_outdir = make_rank_outdir(params.outdir, "expers")
    rank_pandas_outdir = make_rank_outdir(params.outdir, "pandas")

    scale, rotX, rotY, rotZ, Na, Nb, Nc, diff_gam_a, diff_gam_b, diff_gam_c, diff_sig_a, diff_sig_b, diff_sig_c, a, b, c, al, be, ga, detz_shift = hopper_utils.get_param_from_x(
        x, SIM)
    scale_p = SIM.P["G_xtal0"]
    scale_init = scale_p.init
    Nabc_init = []
    for i in [0, 1, 2]:
        p = SIM.P["Nabc%d" % i]
        Nabc_init.append(p.init)
    Nabc_init = tuple(Nabc_init)

    if params.isotropic.diffuse_gamma:
        diff_gam_b = diff_gam_c = diff_gam_a
    if params.isotropic.diffuse_sigma:
        diff_sig_b = diff_sig_c = diff_sig_a
    eta_a, eta_b, eta_c = hopper_utils.get_mosaicity_from_x(x, SIM)
    a_init, b_init, c_init, al_init, be_init, ga_init = SIM.crystal.dxtbx_crystal.get_unit_cell(
    ).parameters()

    xax = col((-1, 0, 0))
    yax = col((0, -1, 0))
    zax = col((0, 0, -1))
    ## update parameters:
    RX = xax.axis_and_angle_as_r3_rotation_matrix(rotX, deg=False)
    RY = yax.axis_and_angle_as_r3_rotation_matrix(rotY, deg=False)
    RZ = zax.axis_and_angle_as_r3_rotation_matrix(rotZ, deg=False)
    M = RX * RY * RZ
    U = M * sqr(SIM.crystal.dxtbx_crystal.get_U())
    SIM.crystal.dxtbx_crystal.set_U(U)

    ucparam = a, b, c, al, be, ga
    ucman = utils.manager_from_params(ucparam)
    SIM.crystal.dxtbx_crystal.set_B(ucman.B_recipspace)

    Amat = SIM.crystal.dxtbx_crystal.get_A()
    eta = [0]
    lam_coefs = [0], [1]
    if hasattr(SIM, "P"):
        names = "lambda_offset", "lambda_scale"
        if names[0] in SIM.P and names[1] in SIM.P:
            lam_coefs = []
            for name in names:
                if name in SIM.P:
                    p = SIM.P[name]
                    val = p.get_val(x[p.xpos])
                    lam_coefs.append([val])
            lam_coefs = tuple(lam_coefs)

    basename = os.path.splitext(os.path.basename(orig_exp_name))[0]
    opt_exp_path = os.path.join(
        rank_exper_outdir,
        "%s_%s_%d.expt" % (params.tag, basename, rank_exp_idx))
    pandas_path = os.path.join(
        rank_pandas_outdir,
        "%s_%s_%d.pkl" % (params.tag, basename, rank_exp_idx))
    expt.crystal = SIM.crystal.dxtbx_crystal
    # expt.detector = refiner.get_optimized_detector()
    new_exp_list = ExperimentList()
    new_exp_list.append(expt)
    new_exp_list.as_file(opt_exp_path)
    LOGGER.debug("saved opt_exp %s with wavelength %f" %
                 (opt_exp_path, expt.beam.get_wavelength()))
    _, flux_vals = zip(*SIM.beam.spectrum)

    df = single_expt_pandas(xtal_scale=scale,
                            Amat=Amat,
                            ncells_abc=(Na, Nb, Nc),
                            ncells_def=(0, 0, 0),
                            eta_abc=(eta_a, eta_b, eta_c),
                            diff_gamma=(diff_gam_a, diff_gam_b, diff_gam_c),
                            diff_sigma=(diff_sig_a, diff_sig_b, diff_sig_c),
                            detz_shift=detz_shift,
                            use_diffuse=params.use_diffuse_models,
                            gamma_miller_units=params.gamma_miller_units,
                            eta=eta,
                            rotXYZ=(rotX, rotY, rotZ),
                            ucell_p=(a, b, c, al, be, ga),
                            ucell_p_init=(a_init, b_init, c_init, al_init,
                                          be_init, ga_init),
                            lam0_lam1=lam_coefs,
                            spec_file=params.simulator.spectrum.filename,
                            spec_stride=params.simulator.spectrum.stride,
                            flux=sum(flux_vals),
                            beamsize_mm=SIM.beam.size_mm,
                            orig_exp_name=orig_exp_name,
                            opt_exp_name=opt_exp_path,
                            spec_from_imageset=params.spectrum_from_imageset,
                            oversample=params.simulator.oversample,
                            opt_det=params.opt_det,
                            stg1_refls=stg1_refls,
                            stg1_img_path=stg1_img_path,
                            ncells_init=Nabc_init,
                            spot_scales_init=scale_init)
    df.to_pickle(pandas_path)
    return df