def exercise(space_group_info, n_scatterers=1, d_min=2, verbose=0):
    structure = random_structure.xray_structure(space_group_info,
                                                elements=["Hg"] * n_scatterers,
                                                volume_per_atom=500,
                                                min_distance=2.,
                                                general_positions_only=True)
    if (1 or verbose):
        structure.show_summary().show_scatterers()
    reduced_peaks = phase_o_phrenia.calculate_exp_i_two_phi_peaks(
        structure, d_min, min_peak_distance=3, max_reduced_peaks=20)
    for peak in reduced_peaks:
        print("%.6g" % peak.height, "%8.5f %8.5f %8.5f" % peak.site)
def exercise(space_group_info, n_scatterers=1, d_min=2, verbose=0):
  structure = random_structure.xray_structure(
    space_group_info,
    elements=["Hg"]*n_scatterers,
    volume_per_atom=500,
    min_distance=2.,
    general_positions_only=True)
  if (1 or verbose):
    structure.show_summary().show_scatterers()
  reduced_peaks = phase_o_phrenia.calculate_exp_i_two_phi_peaks(
    structure, d_min, min_peak_distance=3, max_reduced_peaks=20)
  for peak in reduced_peaks:
    print "%.6g" % peak.height, "%8.5f %8.5f %8.5f" % peak.site
Example #3
0
def run(server_info, inp, status):
    print("<pre>")

    if (inp.format == "cns_sdb"):
        print("Minimum distance between symmetrically equivalent sites:",
              end=' ')
        print(float(inp.min_distance_sym_equiv))
        print()
        structures = inp_as_xray_structures(inp)
        if (len(structures) == 0):
            print("No CNS sdb files found!")
            print()
            print(
                "Note that each file must start with {+ file: some_file_name +}"
            )
            print("in order to be recognized.")
            print()
    else:
        if (inp.ucparams is None): inp.ucparams = ""
        if (inp.sgsymbol is None): inp.sgsymbol = "P1"
        special_position_settings = io_utils.special_position_settings_from_inp(
            inp)
        special_position_settings.show_summary()
        print("Minimum distance between symmetrically equivalent sites:",
              end=' ')
        print(special_position_settings.min_distance_sym_equiv())
        print()
        structures = [
            io_utils.structure_from_inp(inp, status, special_position_settings)
        ]

    d_min = float(inp.d_min)
    print("Minimum d-spacing:", d_min)
    if (d_min <= 0.):
        raise ValueError("d-spacing must be greater than zero.")
    print()

    min_peak_distance = float(inp.min_peak_distance)
    print("Minimum peak distance:", min_peak_distance)
    if (min_peak_distance <= 0.):
        raise ValueError("min_peak_distance must be greater than zero.")
    print()

    max_reduced_peaks = int(inp.max_reduced_peaks)
    print("Maximum number of peaks:", max_reduced_peaks)
    if (max_reduced_peaks <= 0):
        raise ValueError("max_reduced_peaks must be greater than zero.")
    print()

    for structure in structures:
        if (inp.format == "cns_sdb"):
            structure.show_summary().show_scatterers()
            print()
        if (structure.scatterers().size() == 0): continue
        reduced_peaks = phase_o_phrenia.calculate_exp_i_two_phi_peaks(
            xray_structure=structure,
            d_min=d_min,
            min_peak_distance=min_peak_distance,
            max_reduced_peaks=max_reduced_peaks)

        print("Actual number of peaks:", len(reduced_peaks))
        print()

        plot_nx = min(len(reduced_peaks), 60)
        if (plot_nx > 0):
            plot_ny = max(10, plot_nx // 3)
            if (plot_nx != max_reduced_peaks):
                print("Number of peaks used for plot:", plot_nx)
                print()
            print("Plot of relative peak heights:")
            print()
            plot = flex.bool(flex.grid(plot_nx, plot_ny))
            for i in range(plot_nx):
                height = reduced_peaks[i].height
                h = int(round(height * plot_ny))
                h = max(0, min(plot_ny, h))
                for j in range(h):
                    plot[(i, j)] = True
            for j in range(plot_ny - 1, -1, -1):
                line = ""
                for i in range(plot_nx):
                    if (plot[(i, j)]): line += "*"
                    else: line += " "
                print("    |" + line.rstrip())
            print("    -" + "-" * plot_nx)
            print()

            print("Peak list:")
            print("  Relative")
            print("   height   Fractional coordinates")
            for peak in reduced_peaks:
                print("    %5.1f" % (peak.height * 100),
                      " %8.5f %8.5f %8.5f" % peak.site)
            print()

    print("</pre>")
def run(server_info, inp, status):
  print "<pre>"

  if (inp.format == "cns_sdb"):
    print "Minimum distance between symmetrically equivalent sites:",
    print float(inp.min_distance_sym_equiv)
    print
    structures = inp_as_xray_structures(inp)
    if (len(structures) == 0):
      print "No CNS sdb files found!"
      print
      print "Note that each file must start with {+ file: some_file_name +}"
      print "in order to be recognized."
      print
  else:
    if (inp.ucparams is None): inp.ucparams = ""
    if (inp.sgsymbol is None): inp.sgsymbol = "P1"
    special_position_settings = io_utils.special_position_settings_from_inp(inp)
    special_position_settings.show_summary()
    print "Minimum distance between symmetrically equivalent sites:",
    print special_position_settings.min_distance_sym_equiv()
    print
    structures = [io_utils.structure_from_inp(inp, status, special_position_settings)]

  d_min = float(inp.d_min)
  print "Minimum d-spacing:", d_min
  if (d_min <= 0.):
    raise ValueError, "d-spacing must be greater than zero."
  print

  min_peak_distance = float(inp.min_peak_distance)
  print "Minimum peak distance:", min_peak_distance
  if (min_peak_distance <= 0.):
    raise ValueError, "min_peak_distance must be greater than zero."
  print

  max_reduced_peaks = int(inp.max_reduced_peaks)
  print "Maximum number of peaks:", max_reduced_peaks
  if (max_reduced_peaks <= 0):
    raise ValueError, "max_reduced_peaks must be greater than zero."
  print

  for structure in structures:
    if (inp.format == "cns_sdb"):
      structure.show_summary().show_scatterers()
      print
    if (structure.scatterers().size() == 0): continue
    reduced_peaks = phase_o_phrenia.calculate_exp_i_two_phi_peaks(
      xray_structure=structure,
      d_min=d_min,
      min_peak_distance=min_peak_distance,
      max_reduced_peaks=max_reduced_peaks)

    print "Actual number of peaks:", len(reduced_peaks)
    print

    plot_nx = min(len(reduced_peaks), 60)
    if (plot_nx > 0):
      plot_ny = max(10, plot_nx//3)
      if (plot_nx != max_reduced_peaks):
        print "Number of peaks used for plot:", plot_nx
        print
      print "Plot of relative peak heights:"
      print
      plot = flex.bool(flex.grid(plot_nx, plot_ny))
      for i in xrange(plot_nx):
        height = reduced_peaks[i].height
        h = int(round(height * plot_ny))
        h = max(0, min(plot_ny, h))
        for j in xrange(h): plot[(i,j)] = True
      for j in xrange(plot_ny-1,-1,-1):
        line = ""
        for i in xrange(plot_nx):
          if (plot[(i,j)]): line += "*"
          else:                  line += " "
        print "    |" + line.rstrip()
      print   "    -" + "-" * plot_nx
      print

      print "Peak list:"
      print "  Relative"
      print "   height   Fractional coordinates"
      for peak in reduced_peaks:
        print "    %5.1f" % (peak.height*100), " %8.5f %8.5f %8.5f" % peak.site
      print

  print "</pre>"