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.terms;
39
40 import ffx.potential.bonded.BondedTerm;
41 import ffx.potential.bonded.RestrainDistance;
42 import ffx.potential.parameters.BondType;
43
44 import javax.annotation.Nullable;
45 import java.util.ArrayList;
46 import java.util.Collection;
47 import java.util.Collections;
48 import java.util.List;
49 import java.util.logging.Logger;
50
51
52
53
54
55
56
57 public class RestrainDistancePotentialEnergy extends EnergyTerm {
58
59 private static final Logger logger = Logger.getLogger(RestrainDistancePotentialEnergy.class.getName());
60
61
62
63
64 @Override
65 public void log() {
66 if (getNumberOfRestrainDistances() <= 0) {
67 return;
68 }
69 logger.info("\n Restrain Distance Interactions:");
70 for (RestrainDistance restrainDistance : getRestrainDistances()) {
71 logger.info(" Restrain Distance \t" + restrainDistance.toString());
72 }
73 }
74
75
76
77
78 private final List<RestrainDistance> restrainDistances = new ArrayList<>();
79
80
81
82
83
84
85 public RestrainDistancePotentialEnergy(String name) {
86 super(name);
87 }
88
89
90
91
92
93
94
95 public RestrainDistancePotentialEnergy(String name, int forceGroup) {
96 super(name, forceGroup);
97 }
98
99
100
101
102
103
104
105
106 public RestrainDistancePotentialEnergy(String name, int forceGroup, List<RestrainDistance> restrainDistances) {
107 super(name, forceGroup);
108 if (restrainDistances != null) {
109 Collections.sort(restrainDistances);
110 this.restrainDistances.addAll(restrainDistances);
111 logger.info(String.format(" Restrain Distances: %10d", getNumberOfRestrainDistances()));
112 }
113 }
114
115
116
117
118 @Override
119 public int getNumberOfTerms() {
120 return getNumberOfRestrainDistances();
121 }
122
123
124
125
126 @Override
127 public BondedTerm[] getBondedTermsArray() {
128 return getRestrainDistanceArray();
129 }
130
131
132
133
134
135
136
137 public RestrainDistancePotentialEnergy(String name, Collection<RestrainDistance> restrainDistances) {
138 super(name);
139 if (restrainDistances != null) {
140 this.restrainDistances.addAll(restrainDistances);
141 }
142 }
143
144
145
146
147
148
149
150 public boolean addRestrainDistance(RestrainDistance restrainDistance) {
151 if (restrainDistance == null) {
152 return false;
153 }
154 return restrainDistances.add(restrainDistance);
155 }
156
157
158
159
160
161
162
163 public boolean addRestrainDistances(RestrainDistance[] restrainDistances) {
164 if (restrainDistances == null) {
165 return false;
166 }
167 Collections.addAll(this.restrainDistances, restrainDistances);
168 return true;
169 }
170
171
172
173
174
175
176
177 public boolean addRestrainDistances(List<RestrainDistance> restrainDistances) {
178 if (restrainDistances == null) {
179 return false;
180 }
181 this.restrainDistances.addAll(restrainDistances);
182 return true;
183 }
184
185
186
187
188
189
190
191 public boolean removeRestrainDistance(RestrainDistance restrainDistance) {
192 if (restrainDistance == null) {
193 return false;
194 }
195 return restrainDistances.remove(restrainDistance);
196 }
197
198
199
200
201
202
203
204
205 public RestrainDistance getRestrainDistance(int index) {
206 return restrainDistances.get(index);
207 }
208
209
210
211
212
213
214 public List<RestrainDistance> getRestrainDistances() {
215 return Collections.unmodifiableList(restrainDistances);
216 }
217
218
219
220
221
222
223 public RestrainDistance[] getRestrainDistanceArray() {
224 return restrainDistances.toArray(new RestrainDistance[0]);
225 }
226
227
228
229
230
231
232 public int getNumberOfRestrainDistances() {
233 return restrainDistances.size();
234 }
235
236
237
238
239
240
241
242
243 public List<RestrainDistance> getRestrainDistances(@Nullable BondType.BondFunction bondFunction) {
244
245 if (bondFunction == null) {
246 return restrainDistances;
247 }
248
249 List<RestrainDistance> list = new ArrayList<>();
250 for (RestrainDistance restrainDistance : restrainDistances) {
251 if (restrainDistance.getBondType().bondFunction == bondFunction) {
252 list.add(restrainDistance);
253 }
254 }
255 if (!list.isEmpty()) {
256 return list;
257 }
258 return null;
259 }
260
261 @Override
262 public String toPDBString() {
263 if (getNumberOfRestrainDistances() <= 0) {
264 return "";
265 }
266 return String.format("REMARK 3 %s %g (%d)\n", "RESTRAIN DISTANCE : ", getEnergy(), getNumberOfRestrainDistances());
267 }
268
269 @Override
270 public String toString() {
271 return String.format(" %s %20.8f %12d %12.3f\n", "Restrain Distance ",
272 getEnergy(), getNumberOfRestrainDistances(), getTime());
273 }
274 }