示例#1
0
def main(data, only_merohedral):
    indambh = indamb_handler()
    intFileList = read_pickles([data])
    if intFileList:
        obsList = {}
        for intFileName in intFileList:
            intPickle = read_frame(intFileName)
            try:
                obs = intPickle['observations'][0]
                obsList[intFileName] = obs
            except Exception as e:
                print "Warning:", e
                pass
        for key, value in obsList.iteritems():
            if only_merohedral:
                flag_all = False
            else:
                flag_all = True
            ops = indambh.generate_twin_operators(value, flag_all=flag_all)
            if ops:
                print os.path.basename(
                    key
                ), '%6.1f,%6.1f,%6.1f,%6.1f,%6.1f,%6.1f' % value.unit_cell(
                ).parameters(), ' '.join(
                    [op.operator.r().as_hkl() for op in ops])
            else:
                print os.path.basename(
                    key
                ), '%6.1f,%6.1f,%6.1f,%6.1f,%6.1f,%6.1f' % value.unit_cell(
                ).parameters(), 'Twining operators not found'
示例#2
0
 def get_observations(self, pickle_filename, iparams):
     main_obs_pickle = read_frame(pickle_filename)
     prh = postref_handler()
     avg_mode = 'average'
     try:
         inputs, txt_org = prh.organize_input(
             main_obs_pickle,
             iparams,
             avg_mode,
             pickle_filename=pickle_filename)
         main_obs = inputs[0]
     except Exception:
         print 'Error reading input pickle.'
         return None
     main_asu = main_obs.map_to_asu().merge_equivalents().array()
     #get other indexing alternatives
     if iparams.indexing_ambiguity.mode == 'Forced':
         #generate other basis format according to the list
         alternates = self.generate_forced_reindex_sets(
             main_asu, iparams.indexing_ambiguity.assigned_basis)
     else:
         alternates = self.generate_reindex_sets(main_asu)
     return alternates
示例#3
0
def get_Eoc_corrected_observations(pickle_filename, iparams):
    '''
  Read pickle file name and output Eoc corrected original miller array object.
  '''
    observations_pickle = read_frame(pickle_filename)
    observations_original = observations_pickle["observations"][0]
    wavelength = observations_pickle["wavelength"]
    crystal_init_orientation = observations_pickle["current_orientation"][0]
    uc_params = observations_original.unit_cell().parameters()
    detector_distance_mm = observations_pickle['distance']
    mm_predictions = iparams.pixel_size_mm * (
        observations_pickle['mapped_predictions'][0])
    xbeam = observations_pickle["xbeam"]
    ybeam = observations_pickle["ybeam"]
    alpha_angle = flex.double([math.atan(abs(pred[0]-xbeam)/abs(pred[1]-ybeam)) \
                                     for pred in mm_predictions])
    spot_pred_x_mm = flex.double([pred[0] - xbeam for pred in mm_predictions])
    spot_pred_y_mm = flex.double([pred[1] - ybeam for pred in mm_predictions])

    #filter resolution
    i_sel_res = observations_original.resolution_filter_selection(\
          d_max=iparams.iotacc.d_max, d_min=iparams.iotacc.d_min)
    observations_original = observations_original.customized_copy(\
          indices=observations_original.indices().select(i_sel_res), \
          data=observations_original.data().select(i_sel_res), \
          sigmas=observations_original.sigmas().select(i_sel_res))
    alpha_angle = alpha_angle.select(i_sel_res)
    spot_pred_x_mm = spot_pred_x_mm.select(i_sel_res)
    spot_pred_y_mm = spot_pred_y_mm.select(i_sel_res)

    #Filter weak
    i_sel = (observations_original.data() /
             observations_original.sigmas()) > iparams.iotacc.sigma_min
    observations_original = observations_original.customized_copy(\
          indices=observations_original.indices().select(i_sel),\
          data=observations_original.data().select(i_sel),\
          sigmas=observations_original.sigmas().select(i_sel))
    alpha_angle = alpha_angle.select(i_sel)
    spot_pred_x_mm = spot_pred_x_mm.select(i_sel)
    spot_pred_y_mm = spot_pred_y_mm.select(i_sel)

    #calculate spot radius
    from prime.postrefine.mod_leastsqr import calc_spot_radius
    spot_radius = calc_spot_radius(
        sqr(crystal_init_orientation.reciprocal_matrix()),
        observations_original.indices(), wavelength)

    G = 1
    B = 0
    from prime.postrefine.mod_leastsqr import calc_partiality_anisotropy_set
    two_theta = observations_original.two_theta(wavelength=wavelength).data()
    sin_theta_over_lambda_sq = observations_original.two_theta(
        wavelength=wavelength).sin_theta_over_lambda_sq().data()
    ry = 0
    rz = 0
    re = iparams.gamma_e
    rotx = 0
    roty = 0

    #calc partiality
    partiality_init, delta_xy_init, rs_init, rh_init = calc_partiality_anisotropy_set(
        crystal_init_orientation.unit_cell(), rotx, roty,
        observations_original.indices(), ry, rz, spot_radius, re, two_theta,
        alpha_angle, wavelength, crystal_init_orientation, spot_pred_x_mm,
        spot_pred_y_mm, detector_distance_mm, iparams.partiality_model,
        iparams.flag_beam_divergence)

    from prime.postrefine.mod_leastsqr import calc_full_refl
    I_full = calc_full_refl(observations_original.data(),
                            sin_theta_over_lambda_sq, G, B, partiality_init,
                            rs_init, iparams.flag_volume_correction)
    sigI_full = calc_full_refl(observations_original.sigmas(),
                               sin_theta_over_lambda_sq, G, B, partiality_init,
                               rs_init, iparams.flag_volume_correction)
    observations_Eoc_corrected = observations_original.customized_copy(
        data=I_full, sigmas=sigI_full)

    return observations_Eoc_corrected, observations_original
示例#4
0
        print "Please specify pixel size (eg. pixel_size_mm=0.079346)"
        exit()
    return data, hklrefin, pixel_size_mm, target_unit_cell, d_min, d_max


if (__name__ == "__main__"):
    uc_tol = 3
    ry, rz, re, rotx, roty = (0, 0, 0.008, 0, 0)
    flag_beam_divergence = False
    lambda_template = flex.double(range(-50, 50, 1)) / 1000
    #0 .read input parameters and frames (pickle files)
    data, hklrefin, pixel_size_mm, target_unit_cell, \
      d_min, d_max = read_input(args = sys.argv[1:])
    frame_files = read_pickles(data)
    for pickle_filename in frame_files:
        observations_pickle = read_frame(pickle_filename)
        pickle_filename_arr = pickle_filename.split('/')
        pickle_filename_only = pickle_filename_arr[len(pickle_filename_arr) -
                                                   1]
        mxh = mx_handler()
        flag_hklisoin_found, miller_array_iso = mxh.get_miller_array_from_reflection_file(
            hklrefin)
        observations = observations_pickle["observations"][0]
        #check if the uc is good
        flag_good_unit_cell = good_unit_cell(
            observations.unit_cell().parameters(),
            None,
            uc_tol,
            target_unit_cell=target_unit_cell)
        #update lambda_set
        lambda_set = lambda_template + observations_pickle["wavelength"]
示例#5
0
        exit()
    return data, data_sweep


if __name__ == "__main__":
    # Read input parameters and frames (pickle files)
    data_fine, data_sweep = read_input(args=sys.argv[1:])
    pixel_size_mm = 0.079346
    # read all the pickle files from fine-slice data
    frames_fine = read_pickles(data_fine)
    # get a sample reflections
    sample_no = 0
    obs_fine_sample = None
    for i in range(2000):
        frame = frames_fine[i]
        pickle_fine = read_frame(frame)
        obs_fine = pickle_fine["observations"][0]
        obs_fine = obs_fine.select(obs_fine.data() > 0)
        if len(obs_fine.data()) > 5:
            print(frame)
            for index, d, I, sigI in zip(
                    obs_fine.indices(),
                    obs_fine.d_spacings().data(),
                    obs_fine.data(),
                    obs_fine.sigmas(),
            ):
                print(index, d, I, sigI)
            obs_fine_sample = obs_fine.deep_copy()
            # break
        sample_no += 1
    """