Source code for aiida_gromacs.calculations.make_ndx

"""
Calculations provided by aiida_gromacs.

This calculation configures the ability to use the 'gmx make_ndx' executable.
"""
import os

from aiida.common import CalcInfo, CodeInfo
from aiida.engine import CalcJob
from aiida.orm import SinglefileData, Str
from aiida.plugins import DataFactory

Make_ndxParameters = DataFactory("gromacs.make_ndx")


[docs] class Make_ndxCalculation(CalcJob): """ AiiDA calculation plugin wrapping the 'gmx make_ndx' executable. AiiDA plugin wrapper for converting PDB files to GRO files. """
[docs] @classmethod def define(cls, spec): """Define inputs and outputs of the calculation.""" # yapf: disable super().define(spec) # Define inputs and outputs of the calculation. spec.input('command', valid_type=Str, required=False, help='The command used to execute the job.') # set default values for AiiDA options # TODO: something changed about withmpi in aiida-2.4.0, needs investigation. spec.inputs['metadata']['options']['withmpi'].default = False # TODO: remove this for production release. spec.inputs['metadata']['options']['max_wallclock_seconds'].default = 86400 spec.inputs['metadata']['options']['resources'].default = { 'num_machines': 1, 'num_mpiprocs_per_machine': 1, 'num_cores_per_mpiproc': 5, } # Required inputs. spec.inputs['metadata']['options']['parser_name'].default = 'gromacs.make_ndx' spec.input('metadata.options.output_filename', valid_type=str, default='make_ndx.out') spec.input('parameters', valid_type=Make_ndxParameters, help='Command line parameters for gmx make_ndx') spec.input( 'metadata.options.filename_stdin', valid_type=str, required=False, help='Filename that should be redirected to the shell command using the stdin file descriptor.', ) spec.input('grofile', valid_type=SinglefileData, required=False, help='Structure file: gro g96 pdb brk ent esp tpr') spec.input('instructions_file', valid_type=SinglefileData, required=False, help='Instructions for generating index file') spec.input('metadata.options.stdin_filename', valid_type=str, help='name of file used in stdin.') spec.input('metadata.options.output_dir', valid_type=str, default=os.getcwd(), help='Directory where output files will be saved when parsed.') # Optional inputs. spec.input('n_file', valid_type=SinglefileData, required=False, help='Index file') # Required outputs. spec.output('stdout', valid_type=SinglefileData, help='stdout') spec.output('n_file_out', valid_type=SinglefileData, help='Index file') # Include Optional outputs here. spec.exit_code(300, 'ERROR_MISSING_OUTPUT_FILES', message='Calculation did not produce all expected output files.')
[docs] def prepare_for_submission(self, folder): """ Create input files. :param folder: an `aiida.common.folders.Folder` where the plugin should temporarily place all files needed by the calculation. :return: `aiida.common.datastructures.CalcInfo` instance """ codeinfo = CodeInfo() # Setup data structures for files. input_options = ["grofile", "n_file", "instructions_file"] output_options = ["o"] cmdline_input_files = {} input_files = [] output_files = [] # Map input files to AiiDA plugin data types. for item in input_options: if item in self.inputs: cmdline_input_files[item] = self.inputs[item].filename input_files.append(( self.inputs[item].uuid, self.inputs[item].filename, self.inputs[item].filename, )) # Add output files to retrieve list. output_files.append(self.metadata.options.output_filename) for item in output_options: if item in self.inputs.parameters: output_files.append(self.inputs.parameters[item]) # Form the commandline. codeinfo.cmdline_params = self.inputs.parameters.cmdline_params(cmdline_input_files) # Form stdin file for index instructions codeinfo.stdin_name = self.inputs['metadata']['options'].get('stdin_filename', None) codeinfo.code_uuid = self.inputs.code.uuid codeinfo.stdout_name = self.metadata.options.output_filename codeinfo.withmpi = self.inputs.metadata.options.withmpi # Prepare a `CalcInfo` to be returned to the engine calcinfo = CalcInfo() calcinfo.codes_info = [codeinfo] calcinfo.local_copy_list = input_files calcinfo.retrieve_list = output_files return calcinfo