[cctbxbb] cctbx.miller.complete_array() bug?

Jan Marten Simons marten at xtal.rwth-aachen.de
Thu Jul 12 05:21:53 PDT 2012


Hi,

I think I found a bug or missing feature in cctbx.miller.complete_array:
As I suppose the complete_array function should check if a set of reflections 
is complete and add missing indices with the specified values. The bug is now 
when a set contains symmetrically equivalent reflections e.g. in P4 (1, 0, 2) 
and (0, 1, 2). 
The sample code below generates this output for the atached data file:

--- f_obs read in:
Miller array info: None
Observation type: xray.amplitude
Type of data: double, size=8
Type of sigmas: None
Number of Miller indices: 8
Anomalous flag: False
Unit cell: (4, 4, 4.44, 90, 90, 90)
Space group: P 4 (No. 75)
Systematic absences: 0
Centric reflections: 3
Resolution range: 4.44 1.94109
Completeness in resolution range: 1
Completeness with d_max=infinity: 1
(0, 0, 1) 4.10852771683
(0, 1, 0) 4.34856298103
(0, 1, 1) 10.0
(1, 1, 0) 0.911043357914
(1, 1, 1) 9.12523972288
(0, 0, 2) 5.97578446733
(0, 2, 0) 7.10492786733
(1, 0, 2) 2.17485631709

--- f_obs completed:
Miller array info: None
Observation type: xray.amplitude
Type of data: double, size=9
Type of sigmas: None
Number of Miller indices: 9
Anomalous flag: False
Unit cell: (4, 4, 4.44, 90, 90, 90)
Space group: P 4 (No. 75)
Systematic absences: 0
Centric reflections: 3
Resolution range: 4.44 1.94109
(0, 0, 1) 4.10852771683
(0, 1, 0) 4.34856298103
(0, 1, 1) 10.0
(1, 1, 0) 0.911043357914
(1, 1, 1) 9.12523972288
(0, 0, 2) 5.97578446733
(0, 2, 0) 7.10492786733
(1, 0, 2) 2.17485631709
(0, 1, 2) 0.0

---- sample code -------
obs_file = "Model02.hkl"
xtal_symm = crystal.symmetry(
    unit_cell=(4.000, 4.0, 4.44, 90.0, 90.0, 90.0),
    space_group_symbol="P 4")

# load (integral) intensities from diffraction data
from iotbx import reflection_file_reader
rfl = reflection_file_reader.any_reflection_file("intensities="+obs_file,
                                                  ensure_read_access=True)
I_obs = rfl.as_miller_arrays(crystal_symmetry=xtal_symm,
                              force_symmetry=False,
                              merge_equivalents=True,
                              base_array_info=None)[0]
I_obs = I_obs.discard_sigmas()
I_obs.merge_equivalents()
f_obs = I_obs.as_amplitude_array()
print("\n--- f_obs read in:")
f_obs.show_comprehensive_summary()
f_obs.show_array()

d_max, d_min = f_obs.resolution_range()
# add missing reflections with 0.0 intensity (= not observed)
f_obs = f_obs.complete_array(d_min=d_min, d_max=d_max,
                              new_data_value=0.0,
                              new_sigmas_value=1.0).sort()
print("\n--- f_obs completed:")
f_obs.show_comprehensive_summary()
f_obs.show_array()
---- end sample code -------

As you can see the index (0, 1, 2) is added with zero amplitude where instead 
the index (1, 0, 2) should be renamed to (0, 1, 2) as those two are 
symmetrically equivalent for any tetragonal spacegroup (like P4). So to me it 
looks like the complete_array method does not honor symmetrically equivalent 
indices at all, where it should imho. What do you think on this issue?

With regards,

 Dipl. Phys.
  Jan M. Simons
 
Institute of Crystallography
RWTH Aachen University
-------------- next part --------------
   0   0   1   16.88    0.10
   0   1   0   18.91    0.10
   0   1   1  100.00    0.10
   1   1   0    0.83    0.10
   1   1   1   83.27    0.10
   0   0   2   35.71    0.10
   0   2   0   50.48    0.10
   1   0   2    4.73    0.10
   0   0   0    0.00    0.00


More information about the cctbxbb mailing list