def METHOD_NAME(crystalstructure,
                      wavelength=wavelengths.characteristic("CU").as_angstrom(),
                      I_obs=None, Profile=None, ProfileFile=None):
  """This function tries to rietveld refine a structure using FullProf.
  If I_obs is given neither a Profile or a ProfileFile may be specified.
  'Profile' and 'ProfileFile' are also exclusive.
  :param crystalstructure: the starting model for the refinement
  :type crystalstructure: cctbx.xray.structure
  :param wavelength: the x-ray wavelength for the given intensity data
  :type wavelength: float
  :param I_obs: observed Intensities
  :type I_obs: cctbx.miller
  :param Profile: a XRD profile given as a list/tuple of (2-theta, intensity)-tuples
  :type Profile: list/tuple(tuple(2theta,I))
  :param ProfileFile: path to a XRD profile as FullProf .prf file
  :type ProfileFile: string
  """
  # Check preconditions
  if [I_obs, Profile, ProfileFile].count(None) != 2:
    raise ValueError("You may only pass one of I_obs, Profile and ProfileFile")
  # start work
  from iotbx.write_pcr import write_pcr
  import tempfile
  import shutil
  import os
  # write pcr file and execute FullProf
  try:
    f = tempfile.NamedTemporaryFile(suffix=".pcr", delete=False)
  except IOError: raise
  pcrfile = f.name
  basepath = os.path.splitext(pcrfile)[0]
  write_pcr(f, crystalstructure, jobtype=0,
            wavelength=wavelength, I_obs=I_obs)
  f.close()
  try:
    if ProfileFile is not None:
      shutil.copyfile(ProfileFile, basepath+".dat")
    elif Profile is not None:
      # write out profile file for FullProf
      # XXX: todo implement
      pass
  except IOError: raise
  run_fullprof(pcrfile, verbose=0)
  # XXX Todo: extract refined structure from resulting .pcr/.new
  # XXX Todo: extract Rwp of refined structure from resulting .pcr/.new
  return None, None