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
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
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
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
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
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'
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
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?'
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
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
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
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
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
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
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
(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, \
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')