예제 #1
0
def Refiner():
  '''Create a Refiner implementation.'''

  refiner = None
  preselection = get_preferences().get('refiner')

  if not refiner and \
    (not preselection or preselection == 'dials'):
    try:
      refiner = DialsRefiner()
      Debug.write('Using Dials Refiner')
    except NotAvailableError:
      if preselection == 'dials':
        raise RuntimeError('preselected refiner dials not available')

  if not refiner and \
     (not preselection or preselection == 'mosflm'):
    try:
      refiner = MosflmRefiner()
      Debug.write('Using Mosflm Refiner')
    except NotAvailableError:
      if preselection == 'mosflm':
        raise RuntimeError('preselected refiner mosflm not available')

  if not refiner and \
     (not preselection or preselection == 'xds'):
    try:
      refiner = XDSRefiner()
      Debug.write('Using XDS Refiner')
    except NotAvailableError:
      if preselection == 'xds':
        raise RuntimeError('preselected refiner xds not available')

  return refiner
def Refiner():
    """Create a Refiner implementation."""

    refiner = None
    preselection = get_preferences().get("refiner")

    if not refiner and (not preselection or preselection == "dials"):
        try:
            refiner = DialsRefiner()
            Debug.write("Using Dials Refiner")
        except NotAvailableError:
            if preselection == "dials":
                raise RuntimeError("preselected refiner dials not available")

    if not refiner and (not preselection or preselection == "mosflm"):
        try:
            refiner = MosflmRefiner()
            Debug.write("Using Mosflm Refiner")
        except NotAvailableError:
            if preselection == "mosflm":
                raise RuntimeError("preselected refiner mosflm not available")

    if not refiner and (not preselection or preselection == "xds"):
        try:
            refiner = XDSRefiner()
            Debug.write("Using XDS Refiner")
        except NotAvailableError:
            if preselection == "xds":
                raise RuntimeError("preselected refiner xds not available")

    return refiner
예제 #3
0
def Scaler():
    '''Create a Scaler implementation.'''

    scaler = None
    preselection = get_preferences().get('scaler')

    if not scaler and \
      (not preselection or preselection == 'ccp4a'):
        try:
            scaler = CCP4ScalerA()
            Debug.write('Using CCP4A Scaler')
        except NotAvailableError:
            if preselection == 'ccp4a':
                raise RuntimeError('preselected scaler ccp4a not available')

    if not scaler and \
      (not preselection or preselection == 'xdsa'):
        try:
            scaler = XDSScalerA()
            Debug.write('Using XDSA Scaler')
        except NotAvailableError:
            if preselection == 'xdsa':
                raise RuntimeError('preselected scaler xdsa not available')

    return scaler
예제 #4
0
def Scaler(*args, **kwargs):
    """Create a Scaler implementation."""
    scaler = None
    preselection = get_preferences().get("scaler")

    if not scaler and (not preselection or preselection == "ccp4a"):
        try:
            scaler = CCP4ScalerA(*args, **kwargs)
            logger.debug("Using CCP4A Scaler")
        except NotAvailableError:
            if preselection == "ccp4a":
                raise RuntimeError("preselected scaler ccp4a not available")

    if not scaler and (not preselection or preselection == "xdsa"):
        try:
            scaler = XDSScalerA(*args, **kwargs)
            logger.debug("Using XDSA Scaler")
        except NotAvailableError:
            if preselection == "xdsa":
                raise RuntimeError("preselected scaler xdsa not available")

    if not scaler and (not preselection or preselection == "dials"):
        try:
            scaler = DialsScaler(*args, **kwargs)
            logger.debug("Using DIALS Scaler")
        except NotAvailableError:
            if preselection == "dials":
                raise RuntimeError("preselected scaler dials not available")

    return scaler
예제 #5
0
def Indexer(preselection=None):
    """Create an instance of Indexer for use with a dataset."""

    # FIXME need to check that these implement indexer

    indexer = None

    if not preselection:
        preselection = get_preferences().get("indexer")

    indexerlist = [
        (DialsIndexer, "dials", "DialsIndexer"),
        (XDSIndexer, "xds", "XDS Indexer"),
    ]

    if PhilIndex.params.xia2.settings.interactive:
        indexerlist.append(
            (XDSIndexerInteractive, "xdsii", "XDS Interactive Indexer"))
    else:
        indexerlist.append((XDSIndexerII, "xdsii", "XDS II Indexer"))

    for (idxfactory, idxname, idxdisplayname) in indexerlist:
        if not indexer and (not preselection or preselection == idxname):
            try:
                indexer = idxfactory()
                logger.debug("Using %s", idxdisplayname)
            except NotAvailableError:
                if preselection:
                    raise RuntimeError("preselected indexer %s not available" %
                                       idxname)

    if not indexer:
        raise RuntimeError("no indexer implementations found")

    return indexer
예제 #6
0
def Integrater():
    """Return an  Integrater implementation."""

    # FIXME this should take an indexer as an argument...

    integrater = None
    preselection = get_preferences().get("integrater")

    if not integrater and (not preselection or preselection == "dials"):
        try:
            integrater = DialsIntegrater()
            logger.debug("Using Dials Integrater")
            if PhilIndex.params.xia2.settings.scaler == "dials":
                integrater.set_output_format("pickle")
        except NotAvailableError:
            if preselection == "dials":
                raise RuntimeError(
                    "preselected integrater dials not available: "
                    + "dials not installed?"
                )

    if not integrater and (not preselection or preselection == "xdsr"):
        try:
            integrater = XDSIntegrater()
            logger.debug("Using XDS Integrater in new resolution mode")
        except NotAvailableError:
            if preselection == "xdsr":
                raise RuntimeError(
                    "preselected integrater xdsr not available: " + "xds not installed?"
                )

    if not integrater:
        raise RuntimeError("no integrater implementations found")

    # check to see if resolution limits were passed in through the
    # command line...

    dmin = PhilIndex.params.xia2.settings.resolution.d_min
    dmax = PhilIndex.params.xia2.settings.resolution.d_max

    if dmin:
        logger.debug("Adding user-assigned resolution limits:")

        if dmax:

            logger.debug(f"dmin: {dmin:.3f} dmax: {dmax:.2f}")
            integrater.set_integrater_resolution(dmin, dmax, user=True)

        else:

            logger.debug("dmin: %.3f" % dmin)
            integrater.set_integrater_high_resolution(dmin, user=True)

    return integrater
예제 #7
0
파일: ScalerFactory.py 프로젝트: xia2/xia2
def Scaler():
  '''Create a Scaler implementation.'''

  scaler = None
  preselection = get_preferences().get('scaler')

  if not scaler and \
    (not preselection or preselection == 'ccp4a'):
    try:
      scaler = CCP4ScalerA()
      Debug.write('Using CCP4A Scaler')
    except NotAvailableError, e:
      if preselection == 'ccp4a':
        raise RuntimeError, 'preselected scaler ccp4a not available'
예제 #8
0
def Refiner():
  '''Create a Refiner implementation.'''

  refiner = None
  preselection = get_preferences().get('refiner')

  if not refiner and \
    (not preselection or preselection == 'dials'):
    try:
      refiner = DialsRefiner()
      Debug.write('Using Dials Refiner')
    except NotAvailableError, e:
      if preselection == 'dials':
        raise RuntimeError, 'preselected refiner dials not available'
      pass
예제 #9
0
def Integrater():
  '''Return an  Integrater implementation.'''

  # FIXME this should take an indexer as an argument...

  integrater = None
  preselection = get_preferences().get('integrater')

  if not integrater and \
         (not preselection or preselection == 'dials'):
    try:
      integrater = DialsIntegrater()
      Debug.write('Using Dials Integrater')
    except NotAvailableError, e:
      if preselection == 'dials':
        raise RuntimeError, \
              'preselected integrater dials not available: ' + \
              'dials not installed?'
예제 #10
0
def Indexer(preselection = None):
  '''Create an instance of Indexer for use with a dataset.'''

  # FIXME need to check that these implement indexer

  indexer = None

  if not preselection:
    preselection = get_preferences().get('indexer')

  # FIXME perhaps find a less baroque way of coding this up

  if not indexer and (not preselection or preselection == 'dials'):
    try:
      indexer = DialsIndexer()
      Debug.write('Using DialsIndexer')
    except NotAvailableError, e:
      if preselection:
        raise RuntimeError, \
              'preselected indexer dials not available'
      pass
예제 #11
0
def Indexer(preselection=None):
    '''Create an instance of Indexer for use with a dataset.'''

    # FIXME need to check that these implement indexer

    indexer = None

    if not preselection:
        preselection = get_preferences().get('indexer')

    indexerlist = [(DialsIndexer, 'dials', 'DialsIndexer'),
                   (LabelitIndexer, 'labelit', 'Labelit Indexer'),
                   (MosflmIndexer, 'mosflm', 'Mosflm Indexer'),
                   (XDSIndexer, 'xds', 'XDS Indexer')]

    if PhilIndex.params.xia2.settings.interactive == True:
        indexerlist.append(
            (XDSIndexerInteractive, 'xdsii', 'XDS Interactive Indexer'))
    else:
        indexerlist.append((XDSIndexerII, 'xdsii', 'XDS II Indexer'))

    indexerlist.extend([(XDSIndexerSum, 'xdssum',
                         'XDS Indexer on summed images'),
                        (LabelitIndexerII, 'labelitii', 'LabelitIndexerII')])

    for (idxfactory, idxname, idxdisplayname) in indexerlist:
        if not indexer and (not preselection or preselection == idxname):
            try:
                indexer = idxfactory()
                Debug.write('Using %s' % idxdisplayname)
            except NotAvailableError:
                if preselection:
                    raise RuntimeError('preselected indexer %s not available' %
                                       idxname)

    if not indexer:
        raise RuntimeError('no indexer implementations found')

    return indexer
예제 #12
0
파일: IndexerFactory.py 프로젝트: xia2/xia2
def Indexer(preselection = None):
  '''Create an instance of Indexer for use with a dataset.'''

  # FIXME need to check that these implement indexer

  indexer = None

  if not preselection:
    preselection = get_preferences().get('indexer')

  indexerlist = [
      (DialsIndexer, 'dials', 'DialsIndexer'),
      (LabelitIndexer, 'labelit', 'Labelit Indexer'),
      (MosflmIndexer, 'mosflm', 'Mosflm Indexer'),
      (XDSIndexer, 'xds', 'XDS Indexer')
    ]

  if PhilIndex.params.xia2.settings.interactive == True:
    indexerlist.append((XDSIndexerInteractive, 'xdsii', 'XDS Interactive Indexer'))
  else:
    indexerlist.append((XDSIndexerII, 'xdsii', 'XDS II Indexer'))

  indexerlist.extend([
      (XDSIndexerSum, 'xdssum', 'XDS Indexer on summed images'),
      (LabelitIndexerII, 'labelitii', 'LabelitIndexerII')
    ])

  for (idxfactory, idxname, idxdisplayname) in indexerlist:
    if not indexer and (not preselection or preselection == idxname):
      try:
        indexer = idxfactory()
        Debug.write('Using %s' % idxdisplayname)
      except NotAvailableError, e:
        if preselection:
          raise RuntimeError, \
              'preselected indexer %s not available' % idxname
예제 #13
0
def Integrater():
  '''Return an  Integrater implementation.'''

  # FIXME this should take an indexer as an argument...

  integrater = None
  preselection = get_preferences().get('integrater')

  if not integrater and \
         (not preselection or preselection == 'dials'):
    try:
      integrater = DialsIntegrater()
      Debug.write('Using Dials Integrater')
    except NotAvailableError:
      if preselection == 'dials':
        raise RuntimeError( \
              'preselected integrater dials not available: ' + \
              'dials not installed?')

  if not integrater and (not preselection or preselection == 'mosflmr'):
    try:
      integrater = MosflmIntegrater()
      Debug.write('Using MosflmR Integrater')
      if not get_preferences().get('scaler'):
        add_preference('scaler', 'ccp4a')
    except NotAvailableError:
      if preselection == 'mosflmr':
        raise RuntimeError('preselected integrater mosflmr not available')

  if not integrater and \
         (not preselection or preselection == 'xdsr'):
    try:
      integrater = XDSIntegrater()
      Debug.write('Using XDS Integrater in new resolution mode')
    except NotAvailableError:
      if preselection == 'xdsr':
        raise RuntimeError( \
              'preselected integrater xdsr not available: ' + \
              'xds not installed?')

  if not integrater:
    raise RuntimeError('no integrater implementations found')

  # check to see if resolution limits were passed in through the
  # command line...

  dmin = PhilIndex.params.xia2.settings.resolution.d_min
  dmax = PhilIndex.params.xia2.settings.resolution.d_max

  if dmin:
    Debug.write('Adding user-assigned resolution limits:')

    if dmax:

      Debug.write('dmin: %.3f dmax: %.2f' % (dmin, dmax))
      integrater.set_integrater_resolution(dmin, dmax, user=True)

    else:

      Debug.write('dmin: %.3f' % dmin)
      integrater.set_integrater_high_resolution(dmin, user=True)

  return integrater
예제 #14
0
def IndexerForXSweep(xsweep, json_file=None):
  '''Provide an indexer to work with XSweep instance xsweep.'''

  # check what is going on

  if xsweep == None:
    raise RuntimeError, 'XSweep instance needed'

  if not xsweep.__class__.__name__ == 'XSweep':
    raise RuntimeError, 'XSweep instance needed'

  # if the xsweep has a crystal lattice defined, use mosflm which
  # FIXME needs to be modified to take a crystal cell as input.
  # Ignore this - both mosflm and labelit can take this as
  # input and it is implemented for both via the Indexer interface.

  crystal_lattice = xsweep.get_crystal_lattice()

  from xia2.Handlers.Phil import PhilIndex
  params = PhilIndex.params
  multi_sweep_indexing = params.xia2.settings.developmental.multi_sweep_indexing

  # FIXME SCI-599 decide from the width of the sweep and the preference
  # which indexer to return...

  sweep_images = xsweep.get_image_range()
  imageset = xsweep.get_imageset()
  scan = imageset.get_scan()
  oscillation = scan.get_oscillation()
  sweep_width = (oscillation[1] * (sweep_images[1] - sweep_images[0] + 1))

  # hack now - if XDS integration switch to XDS indexer if (i) labelit and
  # (ii) sweep < 10 degrees
  if multi_sweep_indexing and len(xsweep.get_xsample().get_sweeps()) > 1:
    xsample = xsweep.get_xsample()
    indexer = xsample.get_multi_indexer()

    if indexer is None:
      indexer = Indexer()
      xsample.set_multi_indexer(indexer)

  elif sweep_width < 10.0 and not get_preferences().get('indexer') and \
      get_preferences().get('integrater') and \
      'xds' in get_preferences().get('integrater'):
    Debug.write('Overriding indexer as XDSII')
    indexer = Indexer(preselection = 'xdsii')
  else:
    indexer = Indexer()

  if json_file is not None:
    assert os.path.isfile(json_file)
    Debug.write("Loading indexer from json: %s" %json_file)
    import time
    t0 = time.time()
    indexer = indexer.__class__.from_json(filename=json_file)
    t1 = time.time()
    Debug.write("Loaded indexer in %.2f seconds" %(t1-t0))
  else:
    # configure the indexer
    indexer.add_indexer_imageset(xsweep.get_imageset())

  if crystal_lattice:
    # this is e.g. ('aP', (1.0, 2.0, 3.0, 90.0, 98.0, 88.0))
    indexer.set_indexer_input_lattice(crystal_lattice[0])
    indexer.set_indexer_input_cell(crystal_lattice[1])

  # FIXME - it is assumed that all programs which implement the Indexer
  # interface will also implement FrameProcessor, which this uses.
  # verify this, or assert it in some way...

  #if xsweep.get_beam_centre():
    #indexer.set_beam_centre(xsweep.get_beam_centre())

  ## N.B. This does not need to be done for the integrater, since
  ## that gets it's numbers from the indexer it uses.

  #if xsweep.get_distance():
    #Debug.write('Indexer factory: Setting distance: %.2f' % \
                #xsweep.get_distance())
    #indexer.set_distance(xsweep.get_distance())

  # FIXME more - need to check if we should be indexing in a specific
  # lattice - check xsweep.get_crystal_lattice()

  # need to do the same for wavelength now as that could be wrong in
  # the image header...

  #if xsweep.get_wavelength_value():
    #Debug.write('Indexer factory: Setting wavelength: %.6f' % \
                #xsweep.get_wavelength_value())
    #indexer.set_wavelength(xsweep.get_wavelength_value())

  indexer.set_indexer_sweep(xsweep)

  if xsweep.get_xsample().get_multi_indexer() is not None:
    xsample = xsweep.get_xsample()
    multi_indexer = xsample.get_multi_indexer()
    assert multi_indexer is indexer, (multi_indexer, indexer)

    if len(indexer._indxr_imagesets) == 1:

      for xsweep_other in xsample.get_sweeps()[1:]:
        xsweep_other._get_indexer()

  return indexer
예제 #15
0
def IndexerForXSweep(xsweep, json_file=None):
    """Provide an indexer to work with XSweep instance xsweep."""

    # check what is going on

    if xsweep is None:
        raise RuntimeError("XSweep instance needed")

    if not xsweep.__class__.__name__ == "XSweep":
        raise RuntimeError("XSweep instance needed")

    crystal_lattice = xsweep.get_crystal_lattice()

    params = PhilIndex.params
    multi_sweep_indexing = params.xia2.settings.multi_sweep_indexing

    # FIXME SCI-599 decide from the width of the sweep and the preference
    # which indexer to return...

    sweep_images = xsweep.get_image_range()
    imageset = xsweep.get_imageset()
    scan = imageset.get_scan()
    oscillation = scan.get_oscillation()
    sweep_width = oscillation[1] * (sweep_images[1] - sweep_images[0] + 1)

    # hack now - if XDS integration switch to XDS indexer if (i) labelit and
    # (ii) sweep < 10 degrees
    if multi_sweep_indexing and len(xsweep.sample.get_sweeps()) > 1:
        indexer = xsweep.sample.multi_indexer
        if not indexer:
            indexer = Indexer()
            xsweep.sample.multi_indexer = indexer
    elif (sweep_width < 10.0 and not get_preferences().get("indexer")
          and get_preferences().get("integrater")
          and "xds" in get_preferences().get("integrater")):
        logger.debug("Overriding indexer as XDSII")
        indexer = Indexer(preselection="xdsii")
    else:
        indexer = Indexer()

    if json_file is not None:
        assert os.path.isfile(json_file)
        logger.debug("Loading indexer from json: %s", json_file)

        t0 = time.time()
        indexer = indexer.__class__.from_json(filename=json_file)
        t1 = time.time()
        logger.debug("Loaded indexer in %.2f seconds", t1 - t0)
    else:
        # configure the indexer
        indexer.add_indexer_imageset(xsweep.get_imageset())

    if crystal_lattice:
        # this is e.g. ('aP', (1.0, 2.0, 3.0, 90.0, 98.0, 88.0))
        indexer.set_indexer_input_lattice(crystal_lattice[0])
        indexer.set_indexer_input_cell(crystal_lattice[1])

    # FIXME - it is assumed that all programs which implement the Indexer
    # interface will also implement FrameProcessor, which this uses.
    # verify this, or assert it in some way...

    # if xsweep.get_beam_centre():
    # indexer.set_beam_centre(xsweep.get_beam_centre())

    ## N.B. This does not need to be done for the integrater, since
    ## that gets it's numbers from the indexer it uses.

    # if xsweep.get_distance():
    # logger.debug('Indexer factory: Setting distance: %.2f' % \
    # xsweep.get_distance())
    # indexer.set_distance(xsweep.get_distance())

    # FIXME more - need to check if we should be indexing in a specific
    # lattice - check xsweep.get_crystal_lattice()

    # need to do the same for wavelength now as that could be wrong in
    # the image header...

    # if xsweep.get_wavelength_value():
    # logger.debug('Indexer factory: Setting wavelength: %.6f' % \
    # xsweep.get_wavelength_value())
    # indexer.set_wavelength(xsweep.get_wavelength_value())

    indexer.set_indexer_sweep(xsweep)

    if xsweep.sample.multi_indexer:
        assert xsweep.sample.multi_indexer is indexer, (
            xsweep.sample.multi_indexer,
            indexer,
        )

        if len(indexer._indxr_imagesets) == 1:

            for xsweep_other in xsweep.sample.get_sweeps()[1:]:
                xsweep_other._get_indexer()

    return indexer
예제 #16
0
def IndexerForXSweep(xsweep, json_file=None):
    '''Provide an indexer to work with XSweep instance xsweep.'''

    # check what is going on

    if xsweep is None:
        raise RuntimeError('XSweep instance needed')

    if not xsweep.__class__.__name__ == 'XSweep':
        raise RuntimeError('XSweep instance needed')

    # if the xsweep has a crystal lattice defined, use mosflm which
    # FIXME needs to be modified to take a crystal cell as input.
    # Ignore this - both mosflm and labelit can take this as
    # input and it is implemented for both via the Indexer interface.

    crystal_lattice = xsweep.get_crystal_lattice()

    params = PhilIndex.params
    multi_sweep_indexing = params.xia2.settings.multi_sweep_indexing == True

    # FIXME SCI-599 decide from the width of the sweep and the preference
    # which indexer to return...

    sweep_images = xsweep.get_image_range()
    imageset = xsweep.get_imageset()
    scan = imageset.get_scan()
    oscillation = scan.get_oscillation()
    sweep_width = (oscillation[1] * (sweep_images[1] - sweep_images[0] + 1))

    # hack now - if XDS integration switch to XDS indexer if (i) labelit and
    # (ii) sweep < 10 degrees
    if multi_sweep_indexing and len(xsweep.get_xsample().get_sweeps()) > 1:
        xsample = xsweep.get_xsample()
        indexer = xsample.get_multi_indexer()

        if indexer is None:
            indexer = Indexer()
            xsample.set_multi_indexer(indexer)

    elif sweep_width < 10.0 and not get_preferences().get('indexer') and \
        get_preferences().get('integrater') and \
        'xds' in get_preferences().get('integrater'):
        Debug.write('Overriding indexer as XDSII')
        indexer = Indexer(preselection='xdsii')
    else:
        indexer = Indexer()

    if json_file is not None:
        assert os.path.isfile(json_file)
        Debug.write("Loading indexer from json: %s" % json_file)
        import time
        t0 = time.time()
        indexer = indexer.__class__.from_json(filename=json_file)
        t1 = time.time()
        Debug.write("Loaded indexer in %.2f seconds" % (t1 - t0))
    else:
        # configure the indexer
        indexer.add_indexer_imageset(xsweep.get_imageset())

    if crystal_lattice:
        # this is e.g. ('aP', (1.0, 2.0, 3.0, 90.0, 98.0, 88.0))
        indexer.set_indexer_input_lattice(crystal_lattice[0])
        indexer.set_indexer_input_cell(crystal_lattice[1])

    # FIXME - it is assumed that all programs which implement the Indexer
    # interface will also implement FrameProcessor, which this uses.
    # verify this, or assert it in some way...

    #if xsweep.get_beam_centre():
    #indexer.set_beam_centre(xsweep.get_beam_centre())

    ## N.B. This does not need to be done for the integrater, since
    ## that gets it's numbers from the indexer it uses.

    #if xsweep.get_distance():
    #Debug.write('Indexer factory: Setting distance: %.2f' % \
    #xsweep.get_distance())
    #indexer.set_distance(xsweep.get_distance())

    # FIXME more - need to check if we should be indexing in a specific
    # lattice - check xsweep.get_crystal_lattice()

    # need to do the same for wavelength now as that could be wrong in
    # the image header...

    #if xsweep.get_wavelength_value():
    #Debug.write('Indexer factory: Setting wavelength: %.6f' % \
    #xsweep.get_wavelength_value())
    #indexer.set_wavelength(xsweep.get_wavelength_value())

    indexer.set_indexer_sweep(xsweep)

    if xsweep.get_xsample().get_multi_indexer() is not None:
        xsample = xsweep.get_xsample()
        multi_indexer = xsample.get_multi_indexer()
        assert multi_indexer is indexer, (multi_indexer, indexer)

        if len(indexer._indxr_imagesets) == 1:

            for xsweep_other in xsample.get_sweeps()[1:]:
                xsweep_other._get_indexer()

    return indexer
def Integrater():
    """Return an  Integrater implementation."""

    # FIXME this should take an indexer as an argument...

    integrater = None
    preselection = get_preferences().get("integrater")

    if not integrater and (not preselection or preselection == "dials"):
        try:
            integrater = DialsIntegrater()
            Debug.write("Using Dials Integrater")
        except NotAvailableError:
            if preselection == "dials":
                raise RuntimeError(
                    "preselected integrater dials not available: " +
                    "dials not installed?")

    if not integrater and (not preselection or preselection == "mosflmr"):
        try:
            integrater = MosflmIntegrater()
            Debug.write("Using MosflmR Integrater")
            if not get_preferences().get("scaler"):
                add_preference("scaler", "ccp4a")
        except NotAvailableError:
            if preselection == "mosflmr":
                raise RuntimeError(
                    "preselected integrater mosflmr not available")

    if not integrater and (not preselection or preselection == "xdsr"):
        try:
            integrater = XDSIntegrater()
            Debug.write("Using XDS Integrater in new resolution mode")
        except NotAvailableError:
            if preselection == "xdsr":
                raise RuntimeError(
                    "preselected integrater xdsr not available: " +
                    "xds not installed?")

    if not integrater:
        raise RuntimeError("no integrater implementations found")

    # check to see if resolution limits were passed in through the
    # command line...

    dmin = PhilIndex.params.xia2.settings.resolution.d_min
    dmax = PhilIndex.params.xia2.settings.resolution.d_max

    if dmin:
        Debug.write("Adding user-assigned resolution limits:")

        if dmax:

            Debug.write("dmin: %.3f dmax: %.2f" % (dmin, dmax))
            integrater.set_integrater_resolution(dmin, dmax, user=True)

        else:

            Debug.write("dmin: %.3f" % dmin)
            integrater.set_integrater_high_resolution(dmin, user=True)

    return integrater
예제 #18
0
         (not preselection or preselection == 'dials'):
    try:
      integrater = DialsIntegrater()
      Debug.write('Using Dials Integrater')
    except NotAvailableError, e:
      if preselection == 'dials':
        raise RuntimeError, \
              'preselected integrater dials not available: ' + \
              'dials not installed?'
      pass

  if not integrater and (not preselection or preselection == 'mosflmr'):
    try:
      integrater = MosflmIntegrater()
      Debug.write('Using MosflmR Integrater')
      if not get_preferences().get('scaler'):
        add_preference('scaler', 'ccp4a')
    except NotAvailableError, e:
      if preselection == 'mosflmr':
        raise RuntimeError, \
              'preselected integrater mosflmr not available'
      pass

  if not integrater and \
         (not preselection or preselection == 'xdsr'):
    try:
      integrater = XDSIntegrater()
      Debug.write('Using XDS Integrater in new resolution mode')
    except NotAvailableError, e:
      if preselection == 'xdsr':
        raise RuntimeError, \
예제 #19
0
      Debug.write('Using DialsIndexer')
    except NotAvailableError, e:
      if preselection:
        raise RuntimeError, \
              'preselected indexer dials not available'
      pass

  if not indexer and (not preselection or preselection == 'labelit'):
    try:
      indexer = LabelitIndexer()
      Debug.write('Using Labelit Indexer')
    except NotAvailableError, e:
      if preselection:
        raise RuntimeError, \
              'preselected indexer labelit not available'
      elif 'xds' in get_preferences().get('integrater'):
        preselection = 'xds'

  if not indexer and (not preselection or preselection == 'mosflm'):
    try:
      indexer = MosflmIndexer()
      Debug.write('Using Mosflm Indexer')
    except NotAvailableError, e:
      if preselection:
        raise RuntimeError, 'preselected indexer mosflm not available'
      pass

  if not indexer and (not preselection or preselection == 'xds'):
    try:
      indexer = XDSIndexer()
      Debug.write('Using XDS Indexer')