Debug.write('Using XDS Integrater in new resolution mode') except NotAvailableError, e: if preselection == 'xdsr': raise RuntimeError, \ 'preselected integrater xdsr not available: ' + \ 'xds not installed?' pass if not integrater: raise RuntimeError, 'no integrater implementations found' # check to see if resolution limits were passed in through the # command line... dmin = Flags.get_resolution_high() dmax = Flags.get_resolution_low() 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)
def setup_from_xinfo_file(self, xinfo_file): '''Set up this object & all subobjects based on the .xinfo file contents.''' settings = PhilIndex.params.xia2.settings sweep_ids = [sweep.id for sweep in settings.sweep] sweep_ranges = [sweep.range for sweep in settings.sweep] if len(sweep_ids) == 0: sweep_ids = None sweep_ranges = None xinfo = XInfo(xinfo_file, sweep_ids=sweep_ids, sweep_ranges=sweep_ranges) self._name = xinfo.get_project() crystals = xinfo.get_crystals() for crystal in crystals.keys(): xc = XCrystal(crystal, self) if crystals[crystal].has_key('sequence'): xc.set_aa_sequence(crystals[crystal]['sequence']) if crystals[crystal].has_key('ha_info'): if crystals[crystal]['ha_info'] != { }: xc.set_ha_info(crystals[crystal]['ha_info']) if crystals[crystal].has_key('scaled_merged_reflection_file'): xc.set_scaled_merged_reflections( crystals[crystal]['scaled_merged_reflections']) if crystals[crystal].has_key('reference_reflection_file'): xc.set_reference_reflection_file( crystals[crystal]['reference_reflection_file']) if crystals[crystal].has_key('freer_file'): xc.set_freer_file(crystals[crystal]['freer_file']) # user assigned spacegroup if crystals[crystal].has_key('user_spacegroup'): xc.set_user_spacegroup(crystals[crystal]['user_spacegroup']) elif settings.space_group is not None: # XXX do we ever actually get here? xc.set_user_spacegroup(settings.space_group.type().lookup_symbol()) # add a default sample if none present in xinfo file if len(crystals[crystal]['samples']) == 0: crystals[crystal]['samples']['X1'] = {} for sample in crystals[crystal]['samples'].keys(): sample_info = crystals[crystal]['samples'][sample] xsample = XSample(sample, xc) xc.add_sample(xsample) for wavelength in crystals[crystal]['wavelengths'].keys(): # FIXME 29/NOV/06 in here need to be able to cope with # no wavelength information - this should default to the # information in the image header (John Cowan pointed # out that this was untidy - requiring that it agrees # with the value in the header makes this almost # useless.) wave_info = crystals[crystal]['wavelengths'][wavelength] if not wave_info.has_key('wavelength'): Debug.write( 'No wavelength value given for wavelength %s' % wavelength) else: Debug.write( 'Overriding value for wavelength %s to %8.6f' % \ (wavelength, float(wave_info['wavelength']))) # handle case where user writes f" in place of f'' if wave_info.has_key('f"') and not \ wave_info.has_key('f\'\''): wave_info['f\'\''] = wave_info['f"'] xw = XWavelength(wavelength, xc, wavelength = wave_info.get('wavelength', 0.0), f_pr = wave_info.get('f\'', 0.0), f_prpr = wave_info.get('f\'\'', 0.0), dmin = wave_info.get('dmin', 0.0), dmax = wave_info.get('dmax', 0.0)) # in here I also need to look and see if we have # been given any scaled reflection files... # check to see if we have a user supplied lattice... if crystals[crystal].has_key('user_spacegroup'): lattice = Syminfo.get_lattice( crystals[crystal]['user_spacegroup']) elif settings.space_group is not None: # XXX do we ever actually get here? lattice = Syminfo.get_lattice( settings.space_group.type().lookup_symbol()) elif Flags.get_lattice(): lattice = Flags.get_lattice() else: lattice = None # and also user supplied cell constants - from either # the xinfo file (the first port of call) or the # command-line. if crystals[crystal].has_key('user_cell'): cell = crystals[crystal]['user_cell'] elif settings.unit_cell is not None: # XXX do we ever actually get here? cell = settings.unit_cell.parameters() else: cell = None dmin = wave_info.get('dmin', 0.0) dmax = wave_info.get('dmax', 0.0) if dmin == 0.0 and dmax == 0.0: dmin = Flags.get_resolution_high() dmax = Flags.get_resolution_low() # want to be able to locally override the resolution limits # for this sweep while leaving the rest for the data set # intact... for sweep_name in crystals[crystal]['sweeps'].keys(): sweep_info = crystals[crystal]['sweeps'][sweep_name] sample_name = sweep_info.get('sample') if sample_name is None: if len(crystals[crystal]['samples']) == 1: sample_name = crystals[crystal]['samples'].keys()[0] else: raise RuntimeError('No sample given for sweep %s' %sweep_name) xsample = xc.get_xsample(sample_name) assert xsample is not None dmin_old = dmin dmax_old = dmax replace = False if 'RESOLUTION' in sweep_info: values = map(float, sweep_info['RESOLUTION'].split()) if len(values) == 1: dmin = values[0] elif len(values) == 2: dmin = min(values) dmax = max(values) else: raise RuntimeError, \ 'bad resolution for sweep %s' % sweep_name replace = True # FIXME: AJP to implement if 'ice' in sweep_info: pass if 'excluded_regions' in sweep_info: pass if sweep_info['wavelength'] == wavelength: frames_to_process = sweep_info.get('start_end') if not frames_to_process and Flags.get_start_end(): frames_to_process = Flags.get_start_end() xsweep = xw.add_sweep( sweep_name, sample=xsample, directory = sweep_info.get('DIRECTORY'), image = sweep_info.get('IMAGE'), beam = sweep_info.get('beam'), reversephi = sweep_info.get('reversephi', False), distance = sweep_info.get('distance'), gain = float(sweep_info.get('GAIN', 0.0)), dmin = dmin, dmax = dmax, polarization = float(sweep_info.get( 'POLARIZATION', 0.0)), frames_to_process = frames_to_process, user_lattice = lattice, user_cell = cell, epoch = sweep_info.get('epoch', 0), ice = sweep_info.get('ice', False), excluded_regions = sweep_info.get( 'excluded_regions', []), ) xsample.add_sweep(xsweep) dmin = dmin_old dmax = dmax_old xc.add_wavelength(xw) self.add_crystal(xc) return