diff --git a/src/dlstbx/mimas/core.py b/src/dlstbx/mimas/core.py index dacdafb9b..47e1ebb4b 100644 --- a/src/dlstbx/mimas/core.py +++ b/src/dlstbx/mimas/core.py @@ -44,6 +44,19 @@ mimas.MimasISPyBParameter(key="ice_rings.filter", value="true"), ) +XIA2_DIALS_VMXM_SPOTFINDING_PARAMS: Tuple[mimas.MimasISPyBParameter, ...] = ( + mimas.MimasISPyBParameter(key="spotfinder.filter.max_separation", value="8"), + mimas.MimasISPyBParameter( + key="spotfinder.threshold.dispersion.kernel_size", value="6,6" + ), + mimas.MimasISPyBParameter( + key="spotfinder.threshold.dispersion.sigma_background", value="3" + ), + mimas.MimasISPyBParameter( + key="spotfinder.threshold.dispersion.sigma_strong", value="1" + ), +) + def xia2_dials_absorption_params( scenario: mimas.MimasScenario, @@ -298,6 +311,8 @@ def handle_rotation_end( xia2_dials_beamline_extra_params = ( *XIA2_DIALS_COPPER_RINGS_PARAMS, mimas.MimasISPyBParameter(key="failover", value="true"), + mimas.MimasISPyBParameter(key="remove_blanks", value="true"), + *XIA2_DIALS_VMXM_SPOTFINDING_PARAMS, ) triggervars_pref: Tuple[mimas.MimasISPyBTriggerVariable, ...] = () diff --git a/src/dlstbx/wrapper/xia2.py b/src/dlstbx/wrapper/xia2.py index 6f8bbfe35..2d7158a52 100644 --- a/src/dlstbx/wrapper/xia2.py +++ b/src/dlstbx/wrapper/xia2.py @@ -56,7 +56,11 @@ def construct_commandline( "unit_cell": "xia2.settings.unit_cell", } for param, value in params["ispyb_parameters"].items(): - command.append(translation.get(param, param) + "=" + value) + if param.startswith("spotfinder"): + if "find_spots.phil_file=spots.phil" not in command: + command.append("find_spots.phil_file=spots.phil") + else: + command.append(translation.get(param, param) + "=" + value) return command @@ -195,11 +199,22 @@ def run_xia2(self, working_directory: Path, params: dict): f"Could not create run_xia2.sh script file in the working directory {working_directory}" ) return False - command = ["sh", f"{working_directory}/run_xia2.sh"] + run_command = ["sh", f"{working_directory}/run_xia2.sh"] + else: + run_command = command subprocess_directory = working_directory / params["program_name"] subprocess_directory.mkdir(parents=True, exist_ok=True) + # Write out spot finding parameters that are not directly accessible in xia2 to phil file + + if "find_spots.phil_file=spots.phil" in command: + with open(subprocess_directory / "spots.phil", "w") as phil: + for param, value in params["ispyb_parameters"].items(): + if "spotfinder" in param: + phil.write(f"{param}={value}\n") + self.log.info(f"Created spots.phil in {subprocess_directory}") + if "dials.integrate.phil_file" in params["xia2"]: dials_integrate_phil_file = subprocess_directory / params["xia2"].get( "dials.integrate.phil_file" @@ -219,7 +234,7 @@ def run_xia2(self, working_directory: Path, params: dict): try: start_time = time.perf_counter() result = subprocess.run( - command, + run_command, timeout=params.get("timeout"), cwd=subprocess_directory, )