Source code for schrodinger.application.desmond.starter.generator.mxmd

"""
Copyright Schrodinger, LLC. All rights reserved.
"""
import os
import subprocess
from typing import List

from schrodinger.application.desmond import cmdline
from schrodinger.application.desmond import launch_utils
from schrodinger.application.desmond import mapper_msj_generator
from schrodinger.application.desmond.constants import UiMode
from schrodinger.application.desmond.starter import ui
from schrodinger.application.desmond.starter.generator import common


def _cmd_for_new_job(raw_in: ui.mxmd.MxmdArgs) -> List[str]:
    stage_data_fnames = []  # dummy
    cd_params = {
        "processors_per_replica": 1,
        "cpus": raw_in.ppj,
        "mps_factor": raw_in.mps_factor,
    }

    builder_params = {
        "cosolvent_probes": [s.lower() for s in raw_in.probe.split(',')],
        "number_cosolvent_systems": raw_in.nsim_per_probe,
        "init_water_buffer": raw_in.init_water_buffer,
    }

    generator_args = [raw_in.JOBNAME, cd_params, builder_params]
    generator_kwargs = dict(
        forcefield=raw_in.forcefield,
        sim_time=raw_in.time,
        equilibrate_time=raw_in.time_equilibrate,
        custom_probe_dir=raw_in.custom_probe_dir and
        os.path.relpath(raw_in.custom_probe_dir),
        subhost=raw_in.SUBHOST,
    )
    generator = mapper_msj_generator.MixedSolventMsjGenerator(
        *generator_args, **generator_kwargs)
    main_msj_fname = generator.write_main_msj()
    generator.write_md_msj()

    cmd = launch_utils.prepare_command_for_launch(raw_in.HOST,
                                                  raw_in.SUBHOST,
                                                  raw_in.JOBNAME,
                                                  main_msj_fname,
                                                  raw_in.maxjob,
                                                  input_fname=raw_in.inp_file)

    cmd += launch_utils.additional_command_arguments(
        stage_data_fnames, raw_in.RETRIES, raw_in.WAIT, raw_in.LOCAL,
        raw_in.DEBUG, raw_in.TMPDIR, raw_in.forcefield, raw_in.OPLSDIR,
        raw_in.NICE, raw_in.SAVE)
    return cmd


[docs]def generate(raw_in: ui.mxmd.MxmdArgs) -> List[str]: """ Generate the files and command line to run multisim for the mixed solvent workflow. :param raw_in: Object with input arguments. :return: Command line to launch multisim """ if raw_in.mode == UiMode.NEW: cmd = _cmd_for_new_job(raw_in) else: cmd = common.prepare_files_and_command_for_restart(raw_in) print( "Launch command:", subprocess.list2cmdline(cmd).replace(os.environ["SCHRODINGER"], "$SCHRODINGER")) cmd.extend([ "-encoded_description", cmdline.get_b64encoded_str(cmdline.get_job_command_in_startup()), ]) return cmd