1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 package ffx.potential.commands.test;
39
40 import ffx.potential.cli.PotentialCommand;
41 import ffx.potential.parameters.ChargeType;
42 import ffx.potential.parameters.ForceField;
43 import ffx.potential.parameters.MultipoleType;
44 import ffx.potential.parameters.VDWType;
45 import ffx.potential.parsers.ForceFieldFilter;
46 import ffx.utilities.FFXBinding;
47 import ffx.utilities.Keyword;
48 import org.apache.commons.configuration2.CompositeConfiguration;
49 import picocli.CommandLine.Command;
50 import picocli.CommandLine.Option;
51 import picocli.CommandLine.Parameters;
52
53 import java.util.List;
54 import java.util.Map;
55
56
57
58
59
60 @Command(description = "PrmToProperty converts a TINKER *.prm file to Java properties.",
61 name = "test.PrmToProperty")
62 public class PrmToProperty extends PotentialCommand {
63
64
65
66
67 @Option(names = {"-t", "--tinker"}, paramLabel = "false", defaultValue = "false",
68 description = "Remove line continuation characters from multi-line force field types (i.e. Tinker prm format).")
69 private boolean tinker = false;
70
71
72
73
74 @Option(names = {"-c", "--useCharges"}, paramLabel = "false", defaultValue = "false",
75 description = "Output charge keywords instead of multipole keywords.")
76 private boolean useCharges = false;
77
78
79
80
81 @Option(names = {"-z", "--zeroVDW"}, paramLabel = "false", defaultValue = "false",
82 description = "Add a zero VDW class with zero parameters.")
83 private boolean zeroVDW = false;
84
85
86
87
88 @Parameters(arity = "1", paramLabel = "files",
89 description = "TINKER *.prm file(s).")
90 private List<String> filenames = null;
91
92
93
94
95 public PrmToProperty() {
96 super();
97 }
98
99
100
101
102
103 public PrmToProperty(FFXBinding binding) {
104 super(binding);
105 }
106
107
108
109
110
111 public PrmToProperty(String[] args) {
112 super(args);
113 }
114
115
116
117
118 @Override
119 public PrmToProperty run() {
120
121 if (!init()) {
122 return this;
123 }
124
125 if (filenames == null || filenames.size() < 1) {
126 logger.info(helpString());
127 return this;
128 }
129
130
131 String prmName = filenames.get(0);
132 CompositeConfiguration properties = Keyword.loadProperties(null);
133 properties.setProperty("parameters", prmName);
134 ForceFieldFilter forceFieldFilter = new ForceFieldFilter(properties);
135
136 ForceField forceField = forceFieldFilter.parse();
137
138 for (int i = 1; i < filenames.size(); i++) {
139 String filename = filenames.get(i);
140 properties = Keyword.loadProperties(null);
141 properties.setProperty("parameters", filename);
142 forceFieldFilter = new ForceFieldFilter(properties);
143 ForceField forceField2 = forceFieldFilter.parse();
144 forceField.append(forceField2);
145 }
146
147 if (useCharges) {
148
149 @SuppressWarnings("unchecked")
150 Map<String, MultipoleType> multipoleTypes = (Map<String, MultipoleType>) (Map<?, ?>)
151 forceField.getTypes(ForceField.ForceFieldType.MULTIPOLE);
152 for (String key : multipoleTypes.keySet()) {
153 MultipoleType multipoleType = multipoleTypes.get(key);
154 ChargeType chargeType = new ChargeType(multipoleType.frameAtomTypes[0], multipoleType.getCharge());
155 forceField.addForceFieldType(chargeType);
156 }
157
158 forceField.clearForceFieldType(ForceField.ForceFieldType.MULTIPOLE);
159 }
160
161 if (zeroVDW) {
162
163 forceField.addForceFieldType(new VDWType(0, 0.0, 0.0, -1.0));
164 }
165
166 if (forceField != null) {
167 StringBuffer sb = forceField.toStringBuffer();
168 if (tinker) {
169 logger.info(sb.toString().replace('\\', ' '));
170 } else {
171 logger.info(sb.toString());
172 }
173 }
174
175 return this;
176 }
177 }