77 |
|
#include "applications/staticProps/AngleR.hpp" |
78 |
|
#include "applications/staticProps/TetrahedralityParam.hpp" |
79 |
|
#include "applications/staticProps/TetrahedralityParamZ.hpp" |
80 |
+ |
#include "applications/staticProps/TetrahedralityParamXYZ.hpp" |
81 |
|
#include "applications/staticProps/RNEMDStats.hpp" |
82 |
+ |
#include "applications/staticProps/NitrileFrequencyMap.hpp" |
83 |
+ |
#include "applications/staticProps/MultipoleSum.hpp" |
84 |
+ |
#include "applications/staticProps/SurfaceDiffusion.hpp" |
85 |
+ |
#include "applications/staticProps/HBondGeometric.hpp" |
86 |
|
|
87 |
|
using namespace OpenMD; |
88 |
|
|
100 |
|
std::string dumpFileName = args_info.input_arg; |
101 |
|
std::string sele1; |
102 |
|
std::string sele2; |
103 |
+ |
std::string sele3; |
104 |
|
|
105 |
|
// check the first selection argument, or set it to the environment |
106 |
|
// variable, or failing that, set it to "select all" |
132 |
|
} |
133 |
|
} |
134 |
|
|
135 |
+ |
// check the third selection argument, which is only set if |
136 |
+ |
// requested by the user |
137 |
+ |
|
138 |
+ |
if (args_info.sele3_given) sele3 = args_info.sele3_arg; |
139 |
+ |
|
140 |
|
bool batchMode; |
141 |
|
if (args_info.scd_given){ |
142 |
|
if (args_info.sele1_given && |
192 |
|
analyser = new GofRZ(info, dumpFileName, sele1, sele2, maxLen, zmaxLen, |
193 |
|
args_info.nbins_arg, args_info.nbins_z_arg); |
194 |
|
} else if (args_info.r_theta_given) { |
195 |
< |
analyser = new GofRTheta(info, dumpFileName, sele1, sele2, maxLen, |
196 |
< |
args_info.nbins_arg, args_info.nanglebins_arg); |
195 |
> |
if (args_info.sele3_given) |
196 |
> |
analyser = new GofRTheta(info, dumpFileName, sele1, sele2, sele3, maxLen, |
197 |
> |
args_info.nbins_arg, args_info.nanglebins_arg); |
198 |
> |
else |
199 |
> |
analyser = new GofRTheta(info, dumpFileName, sele1, sele2, maxLen, |
200 |
> |
args_info.nbins_arg, args_info.nanglebins_arg); |
201 |
|
} else if (args_info.r_omega_given) { |
202 |
< |
analyser = new GofROmega(info, dumpFileName, sele1, sele2, maxLen, |
203 |
< |
args_info.nbins_arg, args_info.nanglebins_arg); |
202 |
> |
if (args_info.sele3_given) |
203 |
> |
analyser = new GofROmega(info, dumpFileName, sele1, sele2, sele3, maxLen, |
204 |
> |
args_info.nbins_arg, args_info.nanglebins_arg); |
205 |
> |
else |
206 |
> |
analyser = new GofROmega(info, dumpFileName, sele1, sele2, maxLen, |
207 |
> |
args_info.nbins_arg, args_info.nanglebins_arg); |
208 |
> |
|
209 |
|
} else if (args_info.theta_omega_given) { |
210 |
< |
analyser = new GofAngle2(info, dumpFileName, sele1, sele2, |
211 |
< |
args_info.nanglebins_arg); |
210 |
> |
if (args_info.sele3_given) |
211 |
> |
analyser = new GofAngle2(info, dumpFileName, sele1, sele2, sele3, |
212 |
> |
args_info.nanglebins_arg); |
213 |
> |
else |
214 |
> |
analyser = new GofAngle2(info, dumpFileName, sele1, sele2, |
215 |
> |
args_info.nanglebins_arg); |
216 |
|
} else if (args_info.gxyz_given) { |
217 |
|
if (args_info.refsele_given) { |
218 |
|
analyser= new GofXyz(info, dumpFileName, sele1, sele2, |
266 |
|
painCave.isFatal = 1; |
267 |
|
simError(); |
268 |
|
} |
269 |
< |
|
269 |
> |
} else if (args_info.multipole_given){ |
270 |
> |
analyser = new MultipoleSum(info, dumpFileName, sele1, |
271 |
> |
maxLen, args_info.nbins_arg); |
272 |
|
} else if (args_info.tet_param_given) { |
273 |
|
if (args_info.rcut_given) { |
274 |
|
analyser = new TetrahedralityParam(info, dumpFileName, sele1, |
293 |
|
painCave.isFatal = 1; |
294 |
|
simError(); |
295 |
|
} |
296 |
< |
} else if (args_info.bor_given){ |
296 |
> |
} else if (args_info.tet_param_xyz_given) { |
297 |
> |
if (!args_info.rcut_given) { |
298 |
> |
sprintf( painCave.errMsg, |
299 |
> |
"A cutoff radius (rcut) must be specified when calculating" |
300 |
> |
" Tetrahedrality Parameters"); |
301 |
> |
painCave.severity = OPENMD_ERROR; |
302 |
> |
painCave.isFatal = 1; |
303 |
> |
simError(); |
304 |
> |
} |
305 |
> |
if (!args_info.voxelSize_given) { |
306 |
> |
sprintf( painCave.errMsg, |
307 |
> |
"A voxel size must be specified when calculating" |
308 |
> |
" volume-resolved Tetrahedrality Parameters"); |
309 |
> |
painCave.severity = OPENMD_ERROR; |
310 |
> |
painCave.isFatal = 1; |
311 |
> |
simError(); |
312 |
> |
} |
313 |
> |
if (!args_info.gaussWidth_given) { |
314 |
> |
sprintf( painCave.errMsg, |
315 |
> |
"A gaussian width must be specified when calculating" |
316 |
> |
" volume-resolved Tetrahedrality Parameters"); |
317 |
> |
painCave.severity = OPENMD_ERROR; |
318 |
> |
painCave.isFatal = 1; |
319 |
> |
simError(); |
320 |
> |
} |
321 |
> |
analyser = new TetrahedralityParamXYZ(info, dumpFileName, sele1, sele2, |
322 |
> |
args_info.rcut_arg, |
323 |
> |
args_info.voxelSize_arg, |
324 |
> |
args_info.gaussWidth_arg); |
325 |
> |
} else if (args_info.ior_given){ |
326 |
|
if (args_info.rcut_given) { |
327 |
< |
analyser = new BOPofR(info, dumpFileName, sele1, args_info.rcut_arg, |
327 |
> |
analyser = new IcosahedralOfR(info, dumpFileName, sele1, |
328 |
> |
args_info.rcut_arg, |
329 |
> |
args_info.nbins_arg, maxLen); |
330 |
> |
} else { |
331 |
> |
sprintf( painCave.errMsg, |
332 |
> |
"A cutoff radius (rcut) must be specified when calculating Bond Order Parameters"); |
333 |
> |
painCave.severity = OPENMD_ERROR; |
334 |
> |
painCave.isFatal = 1; |
335 |
> |
simError(); |
336 |
> |
} |
337 |
> |
} else if (args_info.for_given){ |
338 |
> |
if (args_info.rcut_given) { |
339 |
> |
analyser = new FCCOfR(info, dumpFileName, sele1, args_info.rcut_arg, |
340 |
|
args_info.nbins_arg, maxLen); |
341 |
|
} else { |
342 |
|
sprintf( painCave.errMsg, |
363 |
|
args_info.molname_arg, |
364 |
|
args_info.begin_arg, args_info.end_arg); |
365 |
|
} else{ |
299 |
– |
std::string sele3 = args_info.sele3_arg; |
366 |
|
analyser = new SCDOrderParameter(info, dumpFileName, |
367 |
|
sele1, sele2, sele3); |
368 |
|
} |
377 |
|
analyser = new RNEMDZ(info, dumpFileName, sele1, args_info.nbins_arg); |
378 |
|
} else if (args_info.rnemdr_given) { |
379 |
|
analyser = new RNEMDR(info, dumpFileName, sele1, args_info.nbins_arg); |
380 |
+ |
} else if (args_info.rnemdrt_given) { |
381 |
+ |
analyser = new RNEMDRTheta(info, dumpFileName, sele1, |
382 |
+ |
args_info.nbins_arg, args_info.nanglebins_arg); |
383 |
+ |
} else if (args_info.nitrile_given) { |
384 |
+ |
analyser = new NitrileFrequencyMap(info, dumpFileName, sele1, |
385 |
+ |
args_info.nbins_arg); |
386 |
|
} else if (args_info.p_angle_given) { |
387 |
< |
analyser = new pAngle(info, dumpFileName, sele1, args_info.nbins_arg); |
387 |
> |
if (args_info.sele1_given) { |
388 |
> |
if (args_info.sele2_given) |
389 |
> |
analyser = new pAngle(info, dumpFileName, sele1, sele2, |
390 |
> |
args_info.nbins_arg); |
391 |
> |
else |
392 |
> |
if (args_info.seleoffset_given) { |
393 |
> |
if (args_info.seleoffset2_given) { |
394 |
> |
analyser = new pAngle(info, dumpFileName, sele1, |
395 |
> |
args_info.seleoffset_arg, |
396 |
> |
args_info.seleoffset2_arg, |
397 |
> |
args_info.nbins_arg); |
398 |
> |
} else { |
399 |
> |
analyser = new pAngle(info, dumpFileName, sele1, |
400 |
> |
args_info.seleoffset_arg, |
401 |
> |
args_info.nbins_arg); |
402 |
> |
} |
403 |
> |
} else |
404 |
> |
analyser = new pAngle(info, dumpFileName, sele1, |
405 |
> |
args_info.nbins_arg); |
406 |
> |
} else { |
407 |
> |
sprintf( painCave.errMsg, |
408 |
> |
"At least one selection script (--sele1) must be specified when " |
409 |
> |
"calculating P(angle) distributions"); |
410 |
> |
painCave.severity = OPENMD_ERROR; |
411 |
> |
painCave.isFatal = 1; |
412 |
> |
simError(); |
413 |
> |
} |
414 |
|
#if defined(HAVE_FFTW_H) || defined(HAVE_DFFTW_H) || defined(HAVE_FFTW3_H) |
415 |
|
}else if (args_info.hxy_given) { |
416 |
|
analyser = new Hxy(info, dumpFileName, sele1, args_info.nbins_x_arg, |
417 |
|
args_info.nbins_y_arg, args_info.nbins_arg); |
418 |
|
#endif |
419 |
+ |
}else if (args_info.surfDiffusion_given){ |
420 |
+ |
analyser = new SurfaceDiffusion(info, dumpFileName, sele1, maxLen); |
421 |
|
}else if (args_info.rho_r_given) { |
422 |
|
if (args_info.radius_given){ |
423 |
|
analyser = new RhoR(info, dumpFileName, sele1, maxLen,args_info.nbins_arg,args_info.radius_arg); |
434 |
|
analyser = new NanoLength(info, dumpFileName, sele1); |
435 |
|
} else if (args_info.angle_r_given) { |
436 |
|
analyser = new AngleR(info, dumpFileName, sele1, maxLen,args_info.nbins_arg); |
437 |
+ |
} else if (args_info.hbond_given){ |
438 |
+ |
if (args_info.rcut_given) { |
439 |
+ |
if (args_info.thetacut_given) { |
440 |
+ |
|
441 |
+ |
analyser = new HBondGeometric(info, dumpFileName, sele1, sele2, |
442 |
+ |
args_info.rcut_arg, |
443 |
+ |
args_info.thetacut_arg, |
444 |
+ |
args_info.nbins_arg); |
445 |
+ |
} else { |
446 |
+ |
sprintf( painCave.errMsg, |
447 |
+ |
"A cutoff angle (thetacut) must be specified when calculating Hydrogen Bonding Statistics"); |
448 |
+ |
painCave.severity = OPENMD_ERROR; |
449 |
+ |
painCave.isFatal = 1; |
450 |
+ |
simError(); |
451 |
+ |
} |
452 |
+ |
} else { |
453 |
+ |
sprintf( painCave.errMsg, |
454 |
+ |
"A cutoff radius (rcut) must be specified when calculating Hydrogen Bonding Statistics"); |
455 |
+ |
painCave.severity = OPENMD_ERROR; |
456 |
+ |
painCave.isFatal = 1; |
457 |
+ |
simError(); |
458 |
+ |
} |
459 |
|
} |
460 |
|
|
461 |
|
if (args_info.output_given) { |