Source code for aiida_gromacs.data.genion
"""
Data types provided by plugin
Register data types via the "aiida.data" entry point in setup.json.
"""
# You can directly use or subclass aiida.orm.data.Data
# or any other data type listed under 'verdi data'
from voluptuous import Optional, Required, Schema
from aiida.orm import Dict
# A subset of genion command line options
cmdline_options = {
Required("o", default="solvated_ions.gro"): str,
Optional("np"): str,
Required("pname", default="NA"): str,
Optional("pq"): str,
Optional("nn"): str,
Required("nname", default="CL"): str,
Optional("nq"): str,
Optional("rmin"): str,
Optional("seed"): str,
Optional("conc"): str,
Required("neutral", default="true"): str,
}
[docs]
class GenionParameters(Dict): # pylint: disable=too-many-ancestors
"""
Command line options for diff.
This class represents a python dictionary used to
pass command line options to the executable.
"""
# "voluptuous" schema to add automatic validation
schema = Schema(cmdline_options)
# pylint: disable=redefined-builtin
[docs]
def __init__(self, dict=None, **kwargs):
"""
Constructor for the data class
Usage: ``GenionParameters(dict{'ignore-case': True})``
:param parameters_dict: dictionary with commandline parameters
:param type parameters_dict: dict
"""
dict = self.validate(dict)
super().__init__(dict=dict, **kwargs)
[docs]
def validate(self, parameters_dict):
"""Validate command line options.
Uses the voluptuous package for validation. Find out about allowed keys using::
print(GenionParameters).schema.schema
:param parameters_dict: dictionary with commandline parameters
:param type parameters_dict: dict
:returns: validated dictionary
"""
return GenionParameters.schema(parameters_dict)
[docs]
def cmdline_params(self, input_files):
"""Synthesize command line parameters.
e.g. [ '--ignore-case', 'filename1', 'filename2']
:param pdbfile: Name of input pdb file
:param type pdbfile: str
"""
parameters = []
if "instructions_file" in input_files:
parameters.append("genion")
parameters.extend(["-s", input_files["tprfile"]])
parameters.extend(["-p", input_files["topfile"]])
if "n_file" in input_files: parameters.extend(["-n", input_files["n_file"]])
parm_dict = self.get_dict()
for key, value in parm_dict.items():
parameters.extend(["-" + key, value])
else:
# if no instructions given, then default to hard coded genion input
cmdline = "echo"
cmdline = cmdline + " " + "SOL"
cmdline = cmdline + " " + "| gmx genion"
cmdline = cmdline + " " + " -s " + input_files["tprfile"]
cmdline = cmdline + " " + " -p " + input_files["topfile"]
if "n_file" in input_files: cmdline = cmdline + " " + " -n " + input_files["n_file"]
parm_dict = self.get_dict()
for key, value in parm_dict.items():
cmdline = cmdline + " -" + key + " " + value
parameters.extend(["-c", cmdline])
return [str(p) for p in parameters]
[docs]
def __str__(self):
"""String representation of node.
Append values of dictionary to usual representation. E.g.::
uuid: b416cbee-24e8-47a8-8c11-6d668770158b (pk: 590)
{'ignore-case': True}
"""
string = super().__str__()
string += "\n" + str(self.get_dict())
return string