Skip to content

Commit 3c890c3

Browse files
authored
Merge pull request #210 from OpenBioSim/feature_ion_template
Add function to create ions from AMBER templates
2 parents 633590a + a742357 commit 3c890c3

File tree

7 files changed

+706
-0
lines changed

7 files changed

+706
-0
lines changed

corelib/src/libs/SireIO/biosimspace.cpp

+62
Original file line numberDiff line numberDiff line change
@@ -1589,6 +1589,68 @@ namespace SireIO
15891589
return retval;
15901590
}
15911591

1592+
Molecule createSodiumIon(const Vector &coords, const QString model, const PropertyMap &map)
1593+
{
1594+
// Strip all whitespace from the model name and convert to upper case.
1595+
auto _model = model.simplified().replace(" ", "").toUpper();
1596+
1597+
// Create a hash between the allowed model names and their templace files.
1598+
QHash<QString, QString> models;
1599+
models["TIP3P"] = getShareDir() + "/templates/ions/na_tip3p";
1600+
models["TIP4P"] = getShareDir() + "/templates/ions/na_tip4p";
1601+
1602+
// Make sure the user has passed a valid water model.
1603+
if (not models.contains(_model))
1604+
{
1605+
throw SireError::incompatible_error(QObject::tr("Unsupported AMBER ion model '%1'").arg(model), CODELOC);
1606+
}
1607+
1608+
// Extract the water model template path.
1609+
auto path = models[_model];
1610+
1611+
// Load the ion template.
1612+
auto ion_template = MoleculeParser::read(path + ".prm7", map);
1613+
1614+
// Extract the ion the template.
1615+
auto ion = ion_template[MolIdx(0)].molecule();
1616+
1617+
// Set the coordinates of the ion.
1618+
ion = ion.edit().atom(AtomIdx(0)).setProperty(map["coordinates"], coords).molecule().commit();
1619+
1620+
return ion;
1621+
}
1622+
1623+
Molecule createChlorineIon(const Vector &coords, const QString model, const PropertyMap &map)
1624+
{
1625+
// Strip all whitespace from the model name and convert to upper case.
1626+
auto _model = model.simplified().replace(" ", "").toUpper();
1627+
1628+
// Create a hash between the allowed model names and their templace files.
1629+
QHash<QString, QString> models;
1630+
models["TIP3P"] = getShareDir() + "/templates/ions/cl_tip3p";
1631+
models["TIP4P"] = getShareDir() + "/templates/ions/cl_tip4p";
1632+
1633+
// Make sure the user has passed a valid water model.
1634+
if (not models.contains(_model))
1635+
{
1636+
throw SireError::incompatible_error(QObject::tr("Unsupported AMBER ion model '%1'").arg(model), CODELOC);
1637+
}
1638+
1639+
// Extract the water model template path.
1640+
auto path = models[_model];
1641+
1642+
// Load the ion template.
1643+
auto ion_template = MoleculeParser::read(path + ".prm7");
1644+
1645+
// Extract the ion the template.
1646+
auto ion = ion_template[MolIdx(0)].molecule();
1647+
1648+
// Set the coordinates of the ion.
1649+
ion = ion.edit().atom(AtomIdx(0)).setProperty(map["coordinates"], coords).molecule().commit();
1650+
1651+
return ion;
1652+
}
1653+
15921654
Vector cross(const Vector &v0, const Vector &v1)
15931655
{
15941656
double nx = v0.y() * v1.z() - v0.z() * v1.y();

corelib/src/libs/SireIO/biosimspace.h

+34
Original file line numberDiff line numberDiff line change
@@ -319,6 +319,38 @@ namespace SireIO
319319
const QHash<MolIdx, MolIdx> &molecule_mapping, const bool is_lambda1 = false,
320320
const PropertyMap &map0 = PropertyMap(), const PropertyMap &map1 = PropertyMap());
321321

322+
//! Create a sodium ion at the specified position.
323+
/*! \param position
324+
The position of the sodium ion.
325+
326+
\param model
327+
The name of the water model.
328+
329+
\param map
330+
A dictionary of user-defined molecular property names.
331+
332+
\retval sodium
333+
The sodium ion.
334+
*/
335+
SIREIO_EXPORT Molecule createSodiumIon(
336+
const Vector &coords, const QString model, const PropertyMap &map = PropertyMap());
337+
338+
//! Create a chlorine ion at the specified position.
339+
/*! \param position
340+
The position of the chlorine ion.
341+
342+
\param model
343+
The name of the water model.
344+
345+
\param map
346+
A dictionary of user-defined molecular property names.
347+
348+
\retval chlorine
349+
The chlorine ion.
350+
*/
351+
SIREIO_EXPORT Molecule createChlorineIon(
352+
const Vector &coords, const QString model, const PropertyMap &map = PropertyMap());
353+
322354
Vector cross(const Vector &v0, const Vector &v1);
323355
} // namespace SireIO
324356

@@ -332,6 +364,8 @@ SIRE_EXPOSE_FUNCTION(SireIO::setAmberWater)
332364
SIRE_EXPOSE_FUNCTION(SireIO::setGromacsWater)
333365
SIRE_EXPOSE_FUNCTION(SireIO::updateAndPreserveOrder)
334366
SIRE_EXPOSE_FUNCTION(SireIO::updateCoordinatesAndVelocities)
367+
SIRE_EXPOSE_FUNCTION(SireIO::createSodiumIon)
368+
SIRE_EXPOSE_FUNCTION(SireIO::createChlorineIon)
335369

336370
SIRE_END_HEADER
337371

corelib/templates/ions/cl_tip3p.prm7

+130
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
%VERSION VERSION_STAMP = V0001.000 DATE = 07/10/24 14:04:15
2+
%FLAG TITLE
3+
%FORMAT(20a4)
4+
5+
%FLAG POINTERS
6+
%FORMAT(10I8)
7+
1 1 0 0 0 0 0 0 0 0
8+
1 1 0 0 0 0 0 0 1 0
9+
0 0 0 0 0 0 0 0 1 0
10+
0 0 0
11+
%FLAG ATOM_NAME
12+
%FORMAT(20a4)
13+
Cl-
14+
%FLAG CHARGE
15+
%FORMAT(5E16.8)
16+
-1.82223000E+01
17+
%FLAG ATOMIC_NUMBER
18+
%FORMAT(10I8)
19+
17
20+
%FLAG MASS
21+
%FORMAT(5E16.8)
22+
3.54500000E+01
23+
%FLAG ATOM_TYPE_INDEX
24+
%FORMAT(10I8)
25+
1
26+
%FLAG NUMBER_EXCLUDED_ATOMS
27+
%FORMAT(10I8)
28+
1
29+
%FLAG NONBONDED_PARM_INDEX
30+
%FORMAT(10I8)
31+
1
32+
%FLAG RESIDUE_LABEL
33+
%FORMAT(20a4)
34+
Cl-
35+
%FLAG RESIDUE_POINTER
36+
%FORMAT(10I8)
37+
1
38+
%FLAG BOND_FORCE_CONSTANT
39+
%FORMAT(5E16.8)
40+
41+
%FLAG BOND_EQUIL_VALUE
42+
%FORMAT(5E16.8)
43+
44+
%FLAG ANGLE_FORCE_CONSTANT
45+
%FORMAT(5E16.8)
46+
47+
%FLAG ANGLE_EQUIL_VALUE
48+
%FORMAT(5E16.8)
49+
50+
%FLAG DIHEDRAL_FORCE_CONSTANT
51+
%FORMAT(5E16.8)
52+
53+
%FLAG DIHEDRAL_PERIODICITY
54+
%FORMAT(5E16.8)
55+
56+
%FLAG DIHEDRAL_PHASE
57+
%FORMAT(5E16.8)
58+
59+
%FLAG SCEE_SCALE_FACTOR
60+
%FORMAT(5E16.8)
61+
62+
%FLAG SCNB_SCALE_FACTOR
63+
%FORMAT(5E16.8)
64+
65+
%FLAG SOLTY
66+
%FORMAT(5E16.8)
67+
0.00000000E+00
68+
%FLAG LENNARD_JONES_ACOEF
69+
%FORMAT(5E16.8)
70+
9.24719470E+06
71+
%FLAG LENNARD_JONES_BCOEF
72+
%FORMAT(5E16.8)
73+
1.14737423E+03
74+
%FLAG BONDS_INC_HYDROGEN
75+
%FORMAT(10I8)
76+
77+
%FLAG BONDS_WITHOUT_HYDROGEN
78+
%FORMAT(10I8)
79+
80+
%FLAG ANGLES_INC_HYDROGEN
81+
%FORMAT(10I8)
82+
83+
%FLAG ANGLES_WITHOUT_HYDROGEN
84+
%FORMAT(10I8)
85+
86+
%FLAG DIHEDRALS_INC_HYDROGEN
87+
%FORMAT(10I8)
88+
89+
%FLAG DIHEDRALS_WITHOUT_HYDROGEN
90+
%FORMAT(10I8)
91+
92+
%FLAG EXCLUDED_ATOMS_LIST
93+
%FORMAT(10I8)
94+
0
95+
%FLAG HBOND_ACOEF
96+
%FORMAT(5E16.8)
97+
98+
%FLAG HBOND_BCOEF
99+
%FORMAT(5E16.8)
100+
101+
%FLAG HBCUT
102+
%FORMAT(5E16.8)
103+
104+
%FLAG AMBER_ATOM_TYPE
105+
%FORMAT(20a4)
106+
Cl-
107+
%FLAG TREE_CHAIN_CLASSIFICATION
108+
%FORMAT(20a4)
109+
M
110+
%FLAG JOIN_ARRAY
111+
%FORMAT(10I8)
112+
0
113+
%FLAG IROTAT
114+
%FORMAT(10I8)
115+
0
116+
%FLAG RADIUS_SET
117+
%FORMAT(1a80)
118+
modified Bondi radii (mbondi)
119+
%FLAG RADII
120+
%FORMAT(5E16.8)
121+
1.70000000E+00
122+
%FLAG SCREEN
123+
%FORMAT(5E16.8)
124+
8.00000000E-01
125+
%FLAG ATOMS_PER_MOLECULE
126+
%FORMAT(10I8)
127+
1
128+
%FLAG IPOL
129+
%FORMAT(1I8)
130+
0

corelib/templates/ions/cl_tip4p.prm7

+130
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
%VERSION VERSION_STAMP = V0001.000 DATE = 07/10/24 14:04:34
2+
%FLAG TITLE
3+
%FORMAT(20a4)
4+
5+
%FLAG POINTERS
6+
%FORMAT(10I8)
7+
1 1 0 0 0 0 0 0 0 0
8+
1 1 0 0 0 0 0 0 1 0
9+
0 0 0 0 0 0 0 0 1 0
10+
0 0 0
11+
%FLAG ATOM_NAME
12+
%FORMAT(20a4)
13+
Cl-
14+
%FLAG CHARGE
15+
%FORMAT(5E16.8)
16+
-1.82223000E+01
17+
%FLAG ATOMIC_NUMBER
18+
%FORMAT(10I8)
19+
17
20+
%FLAG MASS
21+
%FORMAT(5E16.8)
22+
3.54500000E+01
23+
%FLAG ATOM_TYPE_INDEX
24+
%FORMAT(10I8)
25+
1
26+
%FLAG NUMBER_EXCLUDED_ATOMS
27+
%FORMAT(10I8)
28+
1
29+
%FLAG NONBONDED_PARM_INDEX
30+
%FORMAT(10I8)
31+
1
32+
%FLAG RESIDUE_LABEL
33+
%FORMAT(20a4)
34+
Cl-
35+
%FLAG RESIDUE_POINTER
36+
%FORMAT(10I8)
37+
1
38+
%FLAG BOND_FORCE_CONSTANT
39+
%FORMAT(5E16.8)
40+
41+
%FLAG BOND_EQUIL_VALUE
42+
%FORMAT(5E16.8)
43+
44+
%FLAG ANGLE_FORCE_CONSTANT
45+
%FORMAT(5E16.8)
46+
47+
%FLAG ANGLE_EQUIL_VALUE
48+
%FORMAT(5E16.8)
49+
50+
%FLAG DIHEDRAL_FORCE_CONSTANT
51+
%FORMAT(5E16.8)
52+
53+
%FLAG DIHEDRAL_PERIODICITY
54+
%FORMAT(5E16.8)
55+
56+
%FLAG DIHEDRAL_PHASE
57+
%FORMAT(5E16.8)
58+
59+
%FLAG SCEE_SCALE_FACTOR
60+
%FORMAT(5E16.8)
61+
62+
%FLAG SCNB_SCALE_FACTOR
63+
%FORMAT(5E16.8)
64+
65+
%FLAG SOLTY
66+
%FORMAT(5E16.8)
67+
0.00000000E+00
68+
%FLAG LENNARD_JONES_ACOEF
69+
%FORMAT(5E16.8)
70+
9.33304478E+06
71+
%FLAG LENNARD_JONES_BCOEF
72+
%FORMAT(5E16.8)
73+
6.59809978E+02
74+
%FLAG BONDS_INC_HYDROGEN
75+
%FORMAT(10I8)
76+
77+
%FLAG BONDS_WITHOUT_HYDROGEN
78+
%FORMAT(10I8)
79+
80+
%FLAG ANGLES_INC_HYDROGEN
81+
%FORMAT(10I8)
82+
83+
%FLAG ANGLES_WITHOUT_HYDROGEN
84+
%FORMAT(10I8)
85+
86+
%FLAG DIHEDRALS_INC_HYDROGEN
87+
%FORMAT(10I8)
88+
89+
%FLAG DIHEDRALS_WITHOUT_HYDROGEN
90+
%FORMAT(10I8)
91+
92+
%FLAG EXCLUDED_ATOMS_LIST
93+
%FORMAT(10I8)
94+
0
95+
%FLAG HBOND_ACOEF
96+
%FORMAT(5E16.8)
97+
98+
%FLAG HBOND_BCOEF
99+
%FORMAT(5E16.8)
100+
101+
%FLAG HBCUT
102+
%FORMAT(5E16.8)
103+
104+
%FLAG AMBER_ATOM_TYPE
105+
%FORMAT(20a4)
106+
Cl-
107+
%FLAG TREE_CHAIN_CLASSIFICATION
108+
%FORMAT(20a4)
109+
M
110+
%FLAG JOIN_ARRAY
111+
%FORMAT(10I8)
112+
0
113+
%FLAG IROTAT
114+
%FORMAT(10I8)
115+
0
116+
%FLAG RADIUS_SET
117+
%FORMAT(1a80)
118+
modified Bondi radii (mbondi)
119+
%FLAG RADII
120+
%FORMAT(5E16.8)
121+
1.70000000E+00
122+
%FLAG SCREEN
123+
%FORMAT(5E16.8)
124+
8.00000000E-01
125+
%FLAG ATOMS_PER_MOLECULE
126+
%FORMAT(10I8)
127+
1
128+
%FLAG IPOL
129+
%FORMAT(1I8)
130+
0

0 commit comments

Comments
 (0)