def exercise_miller_arrays_as_cif_block(): from iotbx.cif import reader cif_model = reader(input_string=cif_miller_array, builder=cif.builders.cif_model_builder()).model() ma_builder = cif.builders.miller_array_builder(cif_model['global']) ma1 = ma_builder.arrays()['_refln_F_squared_meas'] mas_as_cif_block = cif.miller_arrays_as_cif_block(ma1, array_type='meas', format="corecif") mas_as_cif_block.add_miller_array( ma1.array(data=flex.complex_double([1 - 1j] * ma1.size())), array_type='calc') mas_as_cif_block.add_miller_array( ma1.array(data=flex.complex_double([1 - 2j] * ma1.size())), column_names=['_refln_A_calc', '_refln_B_calc']) for key in ('_refln_F_squared_meas', '_refln_F_squared_sigma', '_refln_F_calc', '_refln_phase_calc', '_refln_A_calc', '_refln_A_calc'): assert key in mas_as_cif_block.cif_block.keys(), key # mas_as_cif_block = cif.miller_arrays_as_cif_block(ma1, array_type='meas', format="mmcif") mas_as_cif_block.add_miller_array( ma1.array(data=flex.complex_double([1 - 1j] * ma1.size())), array_type='calc') for key in ('_refln.F_squared_meas', '_refln.F_squared_sigma', '_refln.F_calc', '_refln.phase_calc', '_space_group_symop.operation_xyz', '_cell.length_a', '_refln.index_h'): assert key in mas_as_cif_block.cif_block.keys() # mas_as_cif_block = cif.miller_arrays_as_cif_block( ma1, column_names=[ '_diffrn_refln_intensity_net', '_diffrn_refln_intensity_sigma' ], miller_index_prefix='_diffrn_refln') mas_as_cif_block.add_miller_array( ma1.array(data=flex.std_string(ma1.size(), 'om')), column_name='_diffrn_refln_intensity_u') for key in ('_diffrn_refln_intensity_net', '_diffrn_refln_intensity_sigma', '_diffrn_refln_intensity_u'): assert key in mas_as_cif_block.cif_block.keys() # try: reader(input_string=cif_global) except CifParserError, e: pass
def exercise_mmcif_structure_factors(): miller_arrays = cif.reader(input_string=r3adrsf).as_miller_arrays() assert len(miller_arrays) == 16 hl_coeffs = find_miller_array_from_labels( miller_arrays, ','.join([ 'scale_group_code=1', 'crystal_id=2', 'wavelength_id=3', '_refln.pdbx_HL_A_iso', '_refln.pdbx_HL_B_iso', '_refln.pdbx_HL_C_iso', '_refln.pdbx_HL_D_iso'])) assert hl_coeffs.is_hendrickson_lattman_array() assert hl_coeffs.size() == 2 mas_as_cif_block = cif.miller_arrays_as_cif_block( hl_coeffs, column_names=('_refln.pdbx_HL_A_iso', '_refln.pdbx_HL_B_iso', '_refln.pdbx_HL_C_iso', '_refln.pdbx_HL_D_iso')) abcd = [] for key in ('_refln.pdbx_HL_A_iso', '_refln.pdbx_HL_B_iso', '_refln.pdbx_HL_C_iso', '_refln.pdbx_HL_D_iso'): assert key in mas_as_cif_block.cif_block.keys() abcd.append(flex.double(mas_as_cif_block.cif_block[key])) hl_coeffs_from_cif_block = flex.hendrickson_lattman(*abcd) assert approx_equal(hl_coeffs.data(), hl_coeffs_from_cif_block) f_meas_au = find_miller_array_from_labels( miller_arrays, ','.join([ 'scale_group_code=1', 'crystal_id=1', 'wavelength_id=1', '_refln.F_meas_au', '_refln.F_meas_sigma_au'])) assert f_meas_au.is_xray_amplitude_array() assert f_meas_au.size() == 5 assert f_meas_au.sigmas() is not None assert f_meas_au.space_group_info().symbol_and_number() == 'C 1 2 1 (No. 5)' assert approx_equal(f_meas_au.unit_cell().parameters(), (163.97, 45.23, 110.89, 90.0, 131.64, 90.0)) pdbx_I_plus_minus = find_miller_array_from_labels( miller_arrays, ','.join( ['_refln.pdbx_I_plus', '_refln.pdbx_I_plus_sigma', '_refln.pdbx_I_minus', '_refln.pdbx_I_minus_sigma'])) assert pdbx_I_plus_minus.is_xray_intensity_array() assert pdbx_I_plus_minus.anomalous_flag() assert pdbx_I_plus_minus.size() == 21 assert pdbx_I_plus_minus.unit_cell() is None # no symmetry information in assert pdbx_I_plus_minus.space_group() is None # this CIF block # miller_arrays = cif.reader(input_string=r3ad7sf).as_miller_arrays() assert len(miller_arrays) == 11 f_calc = find_miller_array_from_labels( miller_arrays, ','.join([ 'crystal_id=2', 'wavelength_id=1', '_refln.F_calc', '_refln.phase_calc'])) assert f_calc.is_complex_array() assert f_calc.size() == 4 # miller_arrays = cif.reader(input_string=integer_observations).as_miller_arrays() assert len(miller_arrays) == 2 assert isinstance(miller_arrays[0].data(), flex.double) assert isinstance(miller_arrays[0].sigmas(), flex.double) # miller_arrays = cif.reader(input_string=r3v56sf).as_miller_arrays() assert len(miller_arrays) == 2 for ma in miller_arrays: assert ma.is_complex_array() assert miller_arrays[0].info().labels == [ 'r3v56sf', '_refln.pdbx_DELFWT', '_refln.pdbx_DELPHWT'] assert miller_arrays[1].info().labels == [ 'r3v56sf', '_refln.pdbx_FWT', '_refln.pdbx_PHWT']
def exercise_mmcif_structure_factors(): miller_arrays = cif.reader(input_string=r3adrsf).as_miller_arrays() assert len(miller_arrays) == 16 hl_coeffs = find_miller_array_from_labels( miller_arrays, ','.join([ 'scale_group_code=1', 'crystal_id=2', 'wavelength_id=3', '_refln.pdbx_HL_A_iso', '_refln.pdbx_HL_B_iso', '_refln.pdbx_HL_C_iso', '_refln.pdbx_HL_D_iso' ])) assert hl_coeffs.is_hendrickson_lattman_array() assert hl_coeffs.size() == 2 mas_as_cif_block = cif.miller_arrays_as_cif_block( hl_coeffs, column_names=('_refln.pdbx_HL_A_iso', '_refln.pdbx_HL_B_iso', '_refln.pdbx_HL_C_iso', '_refln.pdbx_HL_D_iso')) abcd = [] for key in ('_refln.pdbx_HL_A_iso', '_refln.pdbx_HL_B_iso', '_refln.pdbx_HL_C_iso', '_refln.pdbx_HL_D_iso'): assert key in list(mas_as_cif_block.cif_block.keys()) abcd.append(flex.double(mas_as_cif_block.cif_block[key])) hl_coeffs_from_cif_block = flex.hendrickson_lattman(*abcd) assert approx_equal(hl_coeffs.data(), hl_coeffs_from_cif_block) f_meas_au = find_miller_array_from_labels( miller_arrays, ','.join([ 'scale_group_code=1', 'crystal_id=1', 'wavelength_id=1', '_refln.F_meas_au', '_refln.F_meas_sigma_au' ])) assert f_meas_au.is_xray_amplitude_array() assert f_meas_au.size() == 5 assert f_meas_au.sigmas() is not None assert f_meas_au.space_group_info().symbol_and_number( ) == 'C 1 2 1 (No. 5)' assert approx_equal(f_meas_au.unit_cell().parameters(), (163.97, 45.23, 110.89, 90.0, 131.64, 90.0)) pdbx_I_plus_minus = find_miller_array_from_labels( miller_arrays, ','.join([ '_refln.pdbx_I_plus', '_refln.pdbx_I_plus_sigma', '_refln.pdbx_I_minus', '_refln.pdbx_I_minus_sigma' ])) assert pdbx_I_plus_minus.is_xray_intensity_array() assert pdbx_I_plus_minus.anomalous_flag() assert pdbx_I_plus_minus.size() == 21 assert pdbx_I_plus_minus.unit_cell() is None # no symmetry information in assert pdbx_I_plus_minus.space_group() is None # this CIF block # miller_arrays = cif.reader(input_string=r3ad7sf).as_miller_arrays() assert len(miller_arrays) == 11 f_calc = find_miller_array_from_labels( miller_arrays, ','.join([ 'crystal_id=2', 'wavelength_id=1', '_refln.F_calc', '_refln.phase_calc' ])) assert f_calc.is_complex_array() assert f_calc.size() == 4 # miller_arrays = cif.reader( input_string=integer_observations).as_miller_arrays() assert len(miller_arrays) == 2 assert isinstance(miller_arrays[0].data(), flex.double) assert isinstance(miller_arrays[0].sigmas(), flex.double) # miller_arrays = cif.reader(input_string=r3v56sf).as_miller_arrays() assert len(miller_arrays) == 2 for ma in miller_arrays: assert ma.is_complex_array() assert miller_arrays[0].info().labels == [ 'r3v56sf', '_refln.pdbx_DELFWT', '_refln.pdbx_DELPHWT' ] assert miller_arrays[1].info().labels == [ 'r3v56sf', '_refln.pdbx_FWT', '_refln.pdbx_PHWT' ]
def exercise_miller_arrays_as_cif_block(): from iotbx.cif import reader cif_model = reader(input_string=cif_miller_array, builder=cif.builders.cif_model_builder()).model() ma_builder = cif.builders.miller_array_builder(cif_model['global']) ma1 = ma_builder.arrays()['_refln_F_squared_meas'] mas_as_cif_block = cif.miller_arrays_as_cif_block(ma1, array_type='meas', format="corecif") mas_as_cif_block.add_miller_array( ma1.array(data=flex.complex_double([1 - 1j] * ma1.size())), array_type='calc') mas_as_cif_block.add_miller_array( ma1.array(data=flex.complex_double([1 - 2j] * ma1.size())), column_names=['_refln_A_calc', '_refln_B_calc']) for key in ('_refln_F_squared_meas', '_refln_F_squared_sigma', '_refln_F_calc', '_refln_phase_calc', '_refln_A_calc', '_refln_A_calc'): assert (key in mas_as_cif_block.cif_block.keys()), key # mas_as_cif_block = cif.miller_arrays_as_cif_block(ma1, array_type='meas', format="mmcif") mas_as_cif_block.add_miller_array( ma1.array(data=flex.complex_double([1 - 1j] * ma1.size())), array_type='calc') for key in ('_refln.F_squared_meas', '_refln.F_squared_sigma', '_refln.F_calc', '_refln.phase_calc', '_space_group_symop.operation_xyz', '_cell.length_a', '_refln.index_h'): assert key in mas_as_cif_block.cif_block.keys() # mas_as_cif_block = cif.miller_arrays_as_cif_block( ma1, column_names=[ '_diffrn_refln_intensity_net', '_diffrn_refln_intensity_sigma' ], miller_index_prefix='_diffrn_refln') mas_as_cif_block.add_miller_array( ma1.array(data=flex.std_string(ma1.size(), 'om')), column_name='_diffrn_refln_intensity_u') for key in ('_diffrn_refln_intensity_net', '_diffrn_refln_intensity_sigma', '_diffrn_refln_intensity_u'): assert key in list(mas_as_cif_block.cif_block.keys()) # try: reader(input_string=cif_global) except CifParserError as e: pass else: raise Exception_expected cif_model = reader(input_string=cif_global, strict=False).model() assert not show_diff( str(cif_model), """\ data_1 _c 3 _d 4 """) # exercise adding miller arrays with non-matching indices cs = crystal.symmetry(unit_cell=uctbx.unit_cell((10, 10, 10, 90, 90, 90)), space_group_info=sgtbx.space_group_info(symbol="P1")) mi = flex.miller_index(((1, 0, 0), (1, 2, 3), (2, 3, 4))) ms1 = miller.set(cs, mi) ma1 = miller.array(ms1, data=flex.double((1, 2, 3))) mas_as_cif_block = cif.miller_arrays_as_cif_block( ma1, column_name="_refln.F_meas_au") ms2 = miller.set(cs, mi[:2]) ma2 = miller.array(ms2, data=flex.complex_double([1 - 2j] * ms2.size())) mas_as_cif_block.add_miller_array(ma2, column_names=("_refln.F_calc_au", "_refln.phase_calc")), ms3 = miller.set(cs, flex.miller_index(((1, 0, 0), (5, 6, 7), (2, 3, 4)))) ma3 = miller.array(ms3, data=flex.double((4, 5, 6))) mas_as_cif_block.add_miller_array(ma3, column_name="_refln.F_squared_meas") ms4 = miller.set( cs, flex.miller_index( ((1, 2, 3), (5, 6, 7), (1, 1, 1), (1, 0, 0), (2, 3, 4)))) ma4 = ms4.d_spacings() mas_as_cif_block.add_miller_array(ma4, column_name="_refln.d_spacing") # extract arrays from cif block and make sure we get back what we started with arrays = cif.builders.miller_array_builder( mas_as_cif_block.cif_block).arrays() recycled_arrays = (arrays['_refln.F_meas_au'], arrays['_refln.F_calc_au'], arrays['_refln.F_squared_meas'], arrays['_refln.d_spacing']) for orig, recycled in zip((ma1, ma2, ma3, ma4), recycled_arrays): assert orig.size() == recycled.size() recycled = recycled.customized_copy( anomalous_flag=orig.anomalous_flag()) orig, recycled = orig.common_sets(recycled) assert orig.indices().all_eq(recycled.indices()) assert approx_equal(orig.data(), recycled.data(), eps=1e-5) # cif_model = reader(input_string=r3adrsf, builder=cif.builders.cif_model_builder()).model() cs = cif.builders.crystal_symmetry_builder( cif_model["r3adrsf"]).crystal_symmetry ma_builder = cif.builders.miller_array_builder( cif_model['r3adrAsf'], base_array_info=miller.array_info(crystal_symmetry_from_file=cs)) miller_arrays = list(ma_builder.arrays().values()) assert len(miller_arrays) == 4 mas_as_cif_block = cif.miller_arrays_as_cif_block( miller_arrays[0].map_to_asu(), column_names=miller_arrays[0].info().labels, format="corecif") for array in miller_arrays[1:]: labels = array.info().labels if len(labels) > 1: for label in labels: if label.startswith("wavelength_id"): labels.remove(label) mas_as_cif_block.add_miller_array(array=array.map_to_asu(), column_names=array.info().labels) s = StringIO() print(mas_as_cif_block.refln_loop, file=s) assert not show_diff( s.getvalue(), """\ loop_ _refln_index_h _refln_index_k _refln_index_l _refln.crystal_id _refln.scale_group_code _refln.wavelength_id _refln.pdbx_I_plus _refln.pdbx_I_plus_sigma _refln.pdbx_I_minus _refln.pdbx_I_minus_sigma -87 5 46 1 1 3 40.2 40.4 6.7 63.9 -87 5 45 1 1 3 47.8 29.7 35.1 30.5 -87 5 44 1 1 3 18.1 33.2 0.5 34.6 -87 5 43 1 1 3 6.1 45.4 12.9 51.6 -87 5 42 1 1 3 -6.6 45.6 -15.5 55.8 -87 7 37 1 1 3 6.3 43.4 ? ? -87 7 36 1 1 3 -67.2 55.4 ? ? -88 2 44 1 1 3 0 -1 35 38.5 -88 2 43 1 1 3 0 -1 57.4 41.5 -88 4 45 1 1 3 -1 46.1 -9.1 45.6 -88 4 44 1 1 3 -19.8 49.2 0.3 34.7 -88 6 44 1 1 3 -1.8 34.8 ? ? """)
def exercise_mmcif_structure_factors(): miller_arrays = cif.reader(input_string=r3adrsf).as_miller_arrays() assert len(miller_arrays) == 16 hl_coeffs = find_miller_array_from_labels(miller_arrays, [ '_refln.pdbx_HL_A_iso', '_refln.pdbx_HL_B_iso', '_refln.pdbx_HL_C_iso', '_refln.pdbx_HL_D_iso', 'scale_group_code=1', 'crystal_id=2', 'wavelength_id=3' ]) assert hl_coeffs.is_hendrickson_lattman_array() assert hl_coeffs.size() == 2 mas_as_cif_block = cif.miller_arrays_as_cif_block( hl_coeffs, column_names=('_refln.pdbx_HL_A_iso', '_refln.pdbx_HL_B_iso', '_refln.pdbx_HL_C_iso', '_refln.pdbx_HL_D_iso')) abcd = [] for key in ('_refln.pdbx_HL_A_iso', '_refln.pdbx_HL_B_iso', '_refln.pdbx_HL_C_iso', '_refln.pdbx_HL_D_iso'): assert key in list(mas_as_cif_block.cif_block.keys()) abcd.append(flex.double(mas_as_cif_block.cif_block[key])) hl_coeffs_from_cif_block = flex.hendrickson_lattman(*abcd) assert approx_equal(hl_coeffs.data(), hl_coeffs_from_cif_block) f_meas_au = find_miller_array_from_labels(miller_arrays, [ '_refln.F_meas_au', '_refln.F_meas_sigma_au', 'scale_group_code=1', 'crystal_id=1', 'wavelength_id=1' ]) assert f_meas_au.is_xray_amplitude_array() assert f_meas_au.size() == 5 assert f_meas_au.sigmas() is not None assert f_meas_au.space_group_info().symbol_and_number( ) == 'C 1 2 1 (No. 5)' assert approx_equal(f_meas_au.unit_cell().parameters(), (163.97, 45.23, 110.89, 90.0, 131.64, 90.0)) pdbx_I_plus_minus = find_miller_array_from_labels(miller_arrays, [ '_refln.pdbx_I_plus', '_refln.pdbx_I_plus_sigma', '_refln.pdbx_I_minus', '_refln.pdbx_I_minus_sigma' ]) assert pdbx_I_plus_minus.is_xray_intensity_array() assert pdbx_I_plus_minus.anomalous_flag() assert pdbx_I_plus_minus.size() == 21 assert pdbx_I_plus_minus.unit_cell() is None # no symmetry information in assert pdbx_I_plus_minus.space_group() is None # this CIF block # miller_arrays = cif.reader(input_string=r3ad7sf).as_miller_arrays() assert len(miller_arrays) == 11 f_calc = find_miller_array_from_labels( miller_arrays, ['r3ad7sf', '_refln.F_calc', '_refln.phase_calc', 'crystal_id=2' ]) #, 'wavelength_id=1'])) assert f_calc.is_complex_array() assert f_calc.size() == 4 # miller_arrays = cif.reader( input_string=integer_observations).as_miller_arrays() assert len(miller_arrays) == 2 fmeas_sigmeas = find_miller_array_from_labels(miller_arrays, ['_refln.F_meas_au']) assert isinstance(fmeas_sigmeas.data(), flex.double) assert isinstance(fmeas_sigmeas.sigmas(), flex.double) # miller_arrays = cif.reader(input_string=r3v56sf).as_miller_arrays() assert len(miller_arrays) == 2 for ma in miller_arrays: assert ma.is_complex_array() find_miller_array_from_labels( miller_arrays, ['r3v56sf', '_refln.pdbx_DELFWT', '_refln.pdbx_DELPHWT']) find_miller_array_from_labels( miller_arrays, ['r3v56sf', '_refln.pdbx_FWT', '_refln.pdbx_PHWT']) # verify _refln.pdbx_FWT', '_refln.pdbx_PHWT' are parsed as complex arrays in the presence of other columns miller_arrays = cif.reader(input_string=r6cxosf).as_miller_arrays() assert len(miller_arrays) == 11 ma = find_miller_array_from_labels( miller_arrays, ['r6cxosf', '_refln.pdbx_FWT', '_refln.pdbx_PHWT']) assert ma.is_complex_array() ma = find_miller_array_from_labels( miller_arrays, ['r6cxosf', '_refln.pdbx_DELFWT', '_refln.pdbx_DELPHWT']) assert ma.is_complex_array() # accept unconventional cif column labels resembling mtz column labels miller_arrays = cif.reader(input_string=r6c5f_phases).as_miller_arrays() assert len(miller_arrays) == 8 ma = find_miller_array_from_labels( miller_arrays, ['6c5f_phases', '_refln.FP', '_refln.SIGFP']) assert ma.is_xray_amplitude_array() ma = find_miller_array_from_labels( miller_arrays, ['6c5f_phases', '_refln.FC', '_refln.PHIC']) assert ma.is_complex_array() ma = find_miller_array_from_labels( miller_arrays, ['6c5f_phases', '_refln.FC_ALL', '_refln.PHIC_ALL']) assert ma.is_complex_array() ma = find_miller_array_from_labels( miller_arrays, ['6c5f_phases', '_refln.DELFWT', '_refln.PHDELWT']) assert ma.is_complex_array()
def exercise_miller_arrays_as_cif_block(): from iotbx.cif import reader cif_model = reader(input_string=cif_miller_array, builder=cif.builders.cif_model_builder()).model() ma_builder = cif.builders.miller_array_builder(cif_model['global']) ma1 = ma_builder.arrays()['_refln_F_squared_meas'] mas_as_cif_block = cif.miller_arrays_as_cif_block( ma1, array_type='meas') mas_as_cif_block.add_miller_array( ma1.array(data=flex.complex_double([1-1j]*ma1.size())), array_type='calc') mas_as_cif_block.add_miller_array( ma1.array(data=flex.complex_double([1-2j]*ma1.size())), column_names=[ '_refln_A_calc', '_refln_B_calc']) for key in ('_refln_F_squared_meas', '_refln_F_squared_sigma', '_refln_F_calc', '_refln_phase_calc', '_refln_A_calc', '_refln_A_calc'): assert key in mas_as_cif_block.cif_block.keys() # mas_as_cif_block = cif.miller_arrays_as_cif_block( ma1, array_type='meas', format="mmcif") mas_as_cif_block.add_miller_array( ma1.array(data=flex.complex_double([1-1j]*ma1.size())), array_type='calc') for key in ('_refln.F_squared_meas', '_refln.F_squared_sigma', '_refln.F_calc', '_refln.phase_calc', '_space_group_symop.operation_xyz', '_cell.length_a', '_refln.index_h'): assert key in mas_as_cif_block.cif_block.keys() # mas_as_cif_block = cif.miller_arrays_as_cif_block( ma1, column_names=['_diffrn_refln_intensity_net', '_diffrn_refln_intensity_sigma'], miller_index_prefix='_diffrn_refln') mas_as_cif_block.add_miller_array( ma1.array(data=flex.std_string(ma1.size(), 'om')), column_name='_diffrn_refln_intensity_u') for key in ('_diffrn_refln_intensity_net', '_diffrn_refln_intensity_sigma', '_diffrn_refln_intensity_u'): assert key in mas_as_cif_block.cif_block.keys() # try: reader(input_string=cif_global) except CifParserError, e: pass else: raise Exception_expected cif_model = reader(input_string=cif_global, strict=False).model() assert not show_diff(str(cif_model), """\ data_1 _c 3 _d 4 """) # exercise adding miller arrays with non-matching indices cs = crystal.symmetry(unit_cell=uctbx.unit_cell((10, 10, 10, 90, 90, 90)), space_group_info=sgtbx.space_group_info(symbol="P1")) mi = flex.miller_index(((1,0,0), (1,2,3), (2,3,4))) ms1 = miller.set(cs, mi) ma1 = miller.array(ms1, data=flex.double((1,2,3))) mas_as_cif_block = cif.miller_arrays_as_cif_block( ma1, column_name="_refln.F_meas_au") ms2 = miller.set(cs, mi[:2]) ma2 = miller.array(ms2, data=flex.complex_double([1-2j]*ms2.size())) mas_as_cif_block.add_miller_array( ma2, column_names=("_refln.F_calc_au", "_refln.phase_calc")), ms3 = miller.set(cs, flex.miller_index(((1,0,0), (5,6,7), (2,3,4)))) ma3 = miller.array(ms3, data=flex.double((4,5,6))) mas_as_cif_block.add_miller_array(ma3, column_name="_refln.F_squared_meas") ms4 = miller.set(cs, flex.miller_index(((1,2,3), (5,6,7), (1,1,1), (1,0,0), (2,3,4)))) ma4 = ms4.d_spacings() mas_as_cif_block.add_miller_array(ma4, column_name="_refln.d_spacing") # extract arrays from cif block and make sure we get back what we started with arrays = cif.builders.miller_array_builder(mas_as_cif_block.cif_block).arrays() recycled_arrays = (arrays['_refln.F_meas_au'], arrays['_refln.F_calc_au'], arrays['_refln.F_squared_meas'], arrays['_refln.d_spacing']) for orig, recycled in zip((ma1, ma2, ma3, ma4), recycled_arrays): assert orig.size() == recycled.size() recycled = recycled.customized_copy(anomalous_flag=orig.anomalous_flag()) orig, recycled = orig.common_sets(recycled) assert orig.indices().all_eq(recycled.indices()) assert approx_equal(orig.data(), recycled.data(), eps=1e-5) # cif_model = reader(input_string=r3adrsf, builder=cif.builders.cif_model_builder()).model() cs = cif.builders.crystal_symmetry_builder(cif_model["r3adrsf"]).crystal_symmetry ma_builder = cif.builders.miller_array_builder( cif_model['r3adrAsf'], base_array_info=miller.array_info(crystal_symmetry_from_file=cs)) miller_arrays = ma_builder.arrays().values() assert len(miller_arrays) == 4 mas_as_cif_block = cif.miller_arrays_as_cif_block( miller_arrays[0].map_to_asu(), column_names=miller_arrays[0].info().labels) for array in miller_arrays[1:]: labels = array.info().labels if len(labels) > 1 : for label in labels : if label.startswith("wavelength_id") : labels.remove(label) mas_as_cif_block.add_miller_array( array=array.map_to_asu(), column_names=array.info().labels) s = StringIO() print >> s, mas_as_cif_block.refln_loop assert not show_diff(s.getvalue(), """\ loop_ _refln_index_h _refln_index_k _refln_index_l _refln.crystal_id _refln.scale_group_code _refln.wavelength_id _refln.pdbx_I_plus _refln.pdbx_I_plus_sigma _refln.pdbx_I_minus _refln.pdbx_I_minus_sigma -87 5 46 1 1 3 40.2 40.4 6.7 63.9 -87 5 45 1 1 3 47.8 29.7 35.1 30.5 -87 5 44 1 1 3 18.1 33.2 0.5 34.6 -87 5 43 1 1 3 6.1 45.4 12.9 51.6 -87 5 42 1 1 3 -6.6 45.6 -15.5 55.8 -87 7 37 1 1 3 6.3 43.4 ? ? -87 7 36 1 1 3 -67.2 55.4 ? ? -88 2 44 1 1 3 0 -1 35 38.5 -88 2 43 1 1 3 0 -1 57.4 41.5 -88 4 45 1 1 3 -1 46.1 -9.1 45.6 -88 4 44 1 1 3 -19.8 49.2 0.3 34.7 -88 6 44 1 1 3 -1.8 34.8 ? ? """)
else: raise Exception_expected cif_model = reader(input_string=cif_global, strict=False).model() assert not show_diff( str(cif_model), """\ data_1 _c 3 _d 4 """) # exercise adding miller arrays with non-matching indices cs = crystal.symmetry(unit_cell=uctbx.unit_cell((10, 10, 10, 90, 90, 90)), space_group_info=sgtbx.space_group_info(symbol="P1")) mi = flex.miller_index(((1, 0, 0), (1, 2, 3), (2, 3, 4))) ms1 = miller.set(cs, mi) ma1 = miller.array(ms1, data=flex.double((1, 2, 3))) mas_as_cif_block = cif.miller_arrays_as_cif_block( ma1, column_name="_refln.F_meas_au") ms2 = miller.set(cs, mi[:2]) ma2 = miller.array(ms2, data=flex.complex_double([1 - 2j] * ms2.size())) mas_as_cif_block.add_miller_array(ma2, column_names=("_refln.F_calc_au", "_refln.phase_calc")), ms3 = miller.set(cs, flex.miller_index(((1, 0, 0), (5, 6, 7), (2, 3, 4)))) ma3 = miller.array(ms3, data=flex.double((4, 5, 6))) mas_as_cif_block.add_miller_array(ma3, column_name="_refln.F_squared_meas") ms4 = miller.set( cs, flex.miller_index( ((1, 2, 3), (5, 6, 7), (1, 1, 1), (1, 0, 0), (2, 3, 4)))) ma4 = ms4.d_spacings() mas_as_cif_block.add_miller_array(ma4, column_name="_refln.d_spacing") # extract arrays from cif block and make sure we get back what we started with