def save_results(data_img, crystal, refl, fcalc_file, Xang, Yang, filename): x = col((1, 0, 0)) y = col((0, 1, 0)) rX = x.axis_and_angle_as_r3_rotation_matrix(Xang, deg=True) rY = y.axis_and_angle_as_r3_rotation_matrix(Yang, deg=True) energies, fcalc_at_en = sim_utils.load_fcalc_file(fcalc_file) Patts = PatternFactory() Patts.adjust_mosaicity(2, 0.05) #flux_per_en = [fracA*Patts.SIM2.flux, fracB*Patts.SIM2.flux] flux_per_en = [fracA * 1e14, fracB * 1e14] sim_patt = Patts.make_pattern2(crystal=deepcopy(crystal), flux_per_en=flux_per_en, energies_eV=energies, fcalcs_at_energies=fcalcs_at_en, mosaic_spread=None, mosaic_domains=None, ret_sum=True, Op=None) sim_patt_R = Patts.make_pattern2(crystal=deepcopy(crystal), flux_per_en=flux_per_en, energies_eV=energies, fcalcs_at_energies=fcalcs_at_en, mosaic_spread=None, mosaic_domains=None, ret_sum=True, Op=rX * rY) refls = [refl] * 3 imgs = [sim_patt, data_img, sim_patt_R] utils.images_and_refls_to_simview(filename, imgs, refls)
def simulate_xyscan_result(scan_data_file, prefix=None): """ scan data is the output of yhe xyscan refinement script :param scan_data_file: string path :param prefix: output path prefix where results will be written :return: """ scan_data = np.load(scan_data_file) idx = int(scan_data['hit_idx']) if prefix is None: prefix = "refined_sim%d" % idx # crystal = scan_data['crystal'] refl = scan_data['refl'] # xR = scan_data['optX'] # yR = scan_data['optY'] optCrystal = scan_data['optCrystal'] fracA = int(scan_data["fracA"]) fracB = int(scan_data["fracB"]) flux = [fracA * 1e14, fracB * 1e14] energy, fcalc_f = load_fcalc_file(scan_data['fcalc_f']) P = PatternFactory() P.adjust_mosaicity(2, 0.05) sim_A, sim_B = P.make_pattern2(crystal=deepcopy(optCrystal), flux_per_en=flux, energies_eV=energy, fcalcs_at_energies=fcalc_f, mosaic_spread=None, mosaic_domains=None, ret_sum=False, Op=None) # xR * yR) if 'optX_fine' in scan_data.keys(): #xR_fine = scan_data['optX_fine'] #yR_fine = scan_data['optY_fine'] optCryst_fine = scan_data["optCrystal_fine"] sim_A_fine, sim_B_fine = P.make_pattern2( crystal=deepcopy(optCryst_fine), flux_per_en=flux, energies_eV=energy, fcalcs_at_energies=fcalc_f, mosaic_spread=None, mosaic_domains=None, ret_sum=False, Op=None) # xR_fine * yR_fine * xR * yR) fine_scan = True else: fine_scan = False # work this into the data stream, perhaps use experiment lists?? img_file = "/Users/dermen/cxid9114/run62_hits_wtime.h5" loader = dxtbx.load(img_file) raw_img = loader.get_raw_data(idx).as_numpy_array() patts = [sim_A, sim_B, sim_A + sim_B, raw_img] refls = [refl] * 4 utils.images_and_refls_to_simview(prefix, patts, refls) if fine_scan: patts = [sim_A_fine, sim_B_fine, sim_A_fine + sim_B_fine, raw_img] refls = [refl] * 4 utils.images_and_refls_to_simview(prefix + "_fine", patts, refls)
flux_per_en = [fracA * 1e14, fracB * 1e14] sim_patt = Patts.make_pattern2(crystal=cryst, flux_per_en=flux_per_en, energies_eV=energies, fcalcs_at_energies=fcalcs_at_en, mosaic_spread=None, mosaic_domains=None, ret_sum=True) actual_img = loader.get_raw_data(hit_idx).as_numpy_array().astype( np.float32) refl = data[hit_idx]['refl'] output_imgs.extend([sim_patt, actual_img]) output_refls.extend([refl, refl]) utils.images_and_refls_to_simview(output_pref, output_imgs, output_refls) #os.system("dials.image_viewer %s %s" % \ # (output_pref+".h5", output_pref+"_strong.pkl")) x = col((1., 0., 0.)) y = col((0., 1., 0.)) z = col((0., 0., 1.)) xRot = x.axis_and_angle_as_r3_rotation_matrix yRot = y.axis_and_angle_as_r3_rotation_matrix zRot = z.axis_and_angle_as_r3_rotation_matrix degs = np.linspace(-5., 5., 50) # not sure here.. degs = np.arange(-0.2, 0.2, 0.025) # still not sure about ranges here. degs = np.arange(-0.4, 0.4, 0.05) # feeling more confident about this range rotXY_series = [(xRot(i, deg=True), yRot(j, deg=True)) for i in degs for j in degs]
iset = loader.get_imageset(loader.get_image_file()) dblock = DataBlockFactory.from_imageset(iset[idx:idx + 1])[0] refl = flex.reflection_table.from_observations(dblock, find_spot_params) imgs.append(img) refls.append(refl) info_fname = image_fname.replace(".h5", ".pkl") sim_data = utils.open_flex(info_fname) orient = indexer_two_color( reflections=count_spots.as_single_shot_reflections(refl, inplace=False), imagesets=[iset], params=indexing_params) try: orient.index() crystals = [o.crystal for o in orient.refined_experiments] rmsd = orient.best_rmsd sim_data["sim_indexed_rmsd"] = rmsd sim_data["sim_indexed_crystals"] = crystals sim_data["sim_indexed_refls"] = refl except: print("FAILED!") utils.save_flex(sim_data, info_fname + out_tag) images_and_refls_to_simview(output_pref, imgs, refls)