Source code for ewoksmx.utils.xds_utils

from ewoksmx.config.instrument_config import InstrumentConfigRegistry


[docs] def generate_xdsinp(job_list, master_path, metadata): """ This method creates a list of XDS.INP commands """ data_collection = metadata["data_collection"] name_template = str(master_path).replace("_master.h5", "_??????.h5") beam_position_x = data_collection["beam_position_x"] beam_position_y = data_collection["beam_position_y"] detector_distance = data_collection["detector_distance"] wavelength = data_collection["wavelength"] oscillation_width = data_collection["oscillation_width"] # Config values app_config = InstrumentConfigRegistry.load() beamline = data_collection["beamline"] config = getattr(app_config, beamline) pixel_size_x = config.detector.pixel_size_x pixel_size_y = config.detector.pixel_size_y # Creation of XDS.INP list_xdsinp = [ f"JOB= {','.join(job_list)}", f"NAME_TEMPLATE_OF_DATA_FRAMES= {name_template}", f"LIB= {config.grenades_fastproc.hdf5_lib_path}", f"DIRECTION_OF_DETECTOR_X-AXIS={config.geometry.detector_x_axis}", f"DIRECTION_OF_DETECTOR_Y-AXIS={config.geometry.detector_y_axis}", f"ROTATION_AXIS={config.geometry.rotation_axis}", f"INCIDENT_BEAM_DIRECTION={config.geometry.incident_beam_direction}", f"NX={config.detector.nx}", f"NY={config.detector.ny}", f"QX={pixel_size_x}", f"QY={pixel_size_y}", f"ORGX={beam_position_x} ORGY={beam_position_y}", f"DETECTOR={config.detector.xds_name} " # + f"MINIMUM_VALID_PIXEL_VALUE={config.detector.minimum_valid_pixel_value} " + f"OVERLOAD={config.detector.overload}", f"SENSOR_THICKNESS={config.detector.sensor_thickness}", f"TRUSTED_REGION={config.detector.trusted_region[0]} " + f"{config.detector.trusted_region[1]}", f"DETECTOR_DISTANCE={detector_distance}", f"X-RAY_WAVELENGTH={wavelength}", f"OSCILLATION_RANGE={oscillation_width}", "INDEX_QUALITY= 0.25", "MINIMUM_NUMBER_OF_PIXELS_IN_A_SPOT= 5", "INCLUDE_RESOLUTION_RANGE= 50 3.5", ] for tr in config.detector.untrusted_rectangle: list_xdsinp.append(f"UNTRUSTED_RECTANGLE={tr[0]} {tr[1]} {tr[2]} {tr[3]}") # Background and data range from subwedge information list_xdsinp += ["BACKGROUND_RANGE= 1 40"] list_xdsinp += ["DATA_RANGE= 1 10"] # if "spaceGroupNumber" in in_data: # spaceGroupNumber = in_data["spaceGroupNumber"] # cell = in_data["cell"] # unitCellConstants = "{a} {b} {c} {alpha} {beta} {gamma}".format(**cell) # listXDS_INP += [ # "SPACE_GROUP_NUMBER={0}".format(spaceGroupNumber), # "UNIT_CELL_CONSTANTS={0}".format(unitCellConstants), # ] # list_image_range = [] # list_subwedge = in_data["subwedge"] # rotation_axis_start = min(item["axis_start"] for item in list_subwedge) # listXDS_INP += (f"STARTING_ANGLE={rotation_axis_start}",) # for subwedge in list_subwedge: # axis_start = subwedge["axis_start"] # axis_end = subwedge["axis_end"] # image_number_start = ( # int((axis_start - rotation_axis_start) / oscillation_width) + 1 # ) # image_number_end = int((axis_end - rotation_axis_start) / oscillation_width) # list_image_range.append([image_number_start, image_number_end]) # listXDS_INP += [f"SPOT_RANGE= {image_number_start} {image_number_end}"] # listXDS_INP += [ # f"DATA_RANGE= {list_image_range[0][0]} {list_image_range[-1][1]}" # ] # for index, image_range in enumerate(list_image_range[:-1]): # exclude_start = list_image_range[index][1] + 1 # exclude_end = list_image_range[index + 1][0] - 1 # listXDS_INP += [f"EXCLUDE_DATA_RANGE= {exclude_start} {exclude_end}"] # if config.get("XDS", "LIB"): # modules = config.get("XDS", "modules") # lib_filename = config.get("XDS", "LIB") # lib_path = UtilsPath.find_ld_library_path(modules, lib_filename) # listXDS_INP += [f"LIB= {lib_path}"] return list_xdsinp