Scine::Swoose  2.0.0
This is the SCINE module Swoose.
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Pages
SettingsPopulator.h
Go to the documentation of this file.
1 
8 #ifndef SWOOSEUTILITIES_SETTINGSPOPULATOR_H
9 #define SWOOSEUTILITIES_SETTINGSPOPULATOR_H
10 
11 #include "OptionNames.h"
12 #include "SettingsNames.h"
16 #include <Utils/Settings.h>
18 
19 namespace Scine {
20 namespace SwooseUtilities {
21 
27  public:
28  // These functions used mostly for MM
29  static void addSfamAtomTypeLevel(Utils::UniversalSettings::DescriptorCollection& settings);
30  static void addPrintContributionsMolecularMechanicsOption(Utils::UniversalSettings::DescriptorCollection& settings);
31  static void addOnlyCalculateBondedContribution(Utils::UniversalSettings::DescriptorCollection& settings);
32  static void addParameterAndConnectivityFile(Utils::UniversalSettings::DescriptorCollection& settings,
33  bool setEmptyDefault = true);
34  static void addDetectBondsWithCovalentRadiiOption(Utils::UniversalSettings::DescriptorCollection& settings);
35  static void addNonCovalentCutoffRadius(Utils::UniversalSettings::DescriptorCollection& settings);
36  static void addHydrogenBondCorrection(Utils::UniversalSettings::DescriptorCollection& settings);
37  static void addApplyCutoffDuringInitializationOption(Utils::UniversalSettings::DescriptorCollection& settings);
38  static void addGaffAtomicChargesFile(Utils::UniversalSettings::DescriptorCollection& settings);
39  static void addGaffAtomTypesFile(Utils::UniversalSettings::DescriptorCollection& settings);
40 
41  // These functions used for QM/MM
42  static void addQmAtomsOption(Utils::UniversalSettings::DescriptorCollection& settings);
43  static void addElectrostaticEmbeddingOption(Utils::UniversalSettings::DescriptorCollection& settings);
44  static void addQmRegionXyzFileOption(Utils::UniversalSettings::DescriptorCollection& settings);
45  static void addIgnoreQmOption(Utils::UniversalSettings::DescriptorCollection& settings);
46  static void addOptimizeLinksOption(Utils::UniversalSettings::DescriptorCollection& settings);
47  static void addSilenceOption(Utils::UniversalSettings::DescriptorCollection& settings);
48  static void addChargeRedistributionOption(Utils::UniversalSettings::DescriptorCollection& settings);
49  static void addReducedQmMmEnergyOption(Utils::UniversalSettings::DescriptorCollection& settings);
50 
51  // These functions are mostly for the MM parametrization
52  static void addBondOrderThreshold(Utils::UniversalSettings::DescriptorCollection& settings);
53  static void addConnectivityRefinementOption(Utils::UniversalSettings::DescriptorCollection& settings);
54  static void addExistingParameterFile(Utils::UniversalSettings::DescriptorCollection& settings);
55  static void addConstrainMMParametersOption(Utils::UniversalSettings::DescriptorCollection& settings);
56  static void addOptimizeImproperDihedralForceConstantsOption(Utils::UniversalSettings::DescriptorCollection& settings);
57  static void addGaussianMethodAndBasisSet(Utils::UniversalSettings::DescriptorCollection& settings);
58  static void addExternalProgramNProcs(Utils::UniversalSettings::DescriptorCollection& settings);
59  static void addBaseWorkingDirectory(Utils::UniversalSettings::DescriptorCollection& settings);
60  static void addNumberAtomsThreshold(Utils::UniversalSettings::DescriptorCollection& settings);
61  static void addSubsystemRadius(Utils::UniversalSettings::DescriptorCollection& settings);
62  static void addReferenceDataGenerationOptions(Utils::UniversalSettings::DescriptorCollection& settings,
63  bool includeReadWriteMode = true);
64  static void addDatabaseSettings(Utils::UniversalSettings::DescriptorCollection& settings, std::string defaultDatabaseName);
65  static void addDatabaseSleepTime(Utils::UniversalSettings::DescriptorCollection& settings);
66  static void addAtomicInformationFile(Utils::UniversalSettings::DescriptorCollection& settings, bool setEmptyDefault = true);
67  static void addUseGaussianOption(Utils::UniversalSettings::DescriptorCollection& settings);
68  static void addReferenceProgram(Utils::UniversalSettings::DescriptorCollection& settings);
69  static void addReferenceMethodAndBasisSet(Utils::UniversalSettings::DescriptorCollection& settings);
70  static void addIncreaseScfSafetyOption(Utils::UniversalSettings::DescriptorCollection& settings);
71  static void addEarlyTerminationOption(Utils::UniversalSettings::DescriptorCollection& settings);
72  static void addReuseDatabaseOption(Utils::UniversalSettings::DescriptorCollection& settings);
73  static void addTerminateAfterReferenceDataGenerationOption(Utils::UniversalSettings::DescriptorCollection& settings);
74  static void addUseCsvInputFormatOption(Utils::UniversalSettings::DescriptorCollection& settings);
75  static void addConvertToCm5Option(Utils::UniversalSettings::DescriptorCollection& settings);
76  static void addYamlSettingsForDirectMode(Utils::UniversalSettings::DescriptorCollection& settings);
77  static void addTitration(Utils::UniversalSettings::DescriptorCollection& settings);
78  static void addUseThermochemistryForTitration(Utils::UniversalSettings::DescriptorCollection& settings);
79  static void addTrainingDataDirectory(Utils::UniversalSettings::DescriptorCollection& settings);
80  static void addTitrationSiteFile(Utils::UniversalSettings::DescriptorCollection& settings);
81 
82  // These functions used for QM region selection
83  static void addQmRegionCenterAtoms(Utils::UniversalSettings::DescriptorCollection& settings);
84  static void addInitialRadius(Utils::UniversalSettings::DescriptorCollection& settings);
85  static void addCuttingProbability(Utils::UniversalSettings::DescriptorCollection& settings);
86  static void addQmRegionSizesSettings(Utils::UniversalSettings::DescriptorCollection& settings);
87  static void addNumAttemptsPerRadiusOption(Utils::UniversalSettings::DescriptorCollection& settings);
88  static void addMaxNumRefModelsOption(Utils::UniversalSettings::DescriptorCollection& settings);
89  static void addTolerancesForQmRegionSelection(Utils::UniversalSettings::DescriptorCollection& settings);
90  static void addQmRegionSelectionRandomSeed(Utils::UniversalSettings::DescriptorCollection& settings);
91 
92  // These functions used for QM region selection via a Database
93  static void addMethodFamily(Utils::UniversalSettings::DescriptorCollection& settings);
94  static void addProgram(Utils::UniversalSettings::DescriptorCollection& settings);
95 
96  // These functions used for structure preparation
97  static void addPreparationDataDirectory(Utils::UniversalSettings::DescriptorCollection& settings);
98  static void addSolvation(Utils::UniversalSettings::DescriptorCollection& settings);
99  static void addPhValueOfSystem(Utils::UniversalSettings::DescriptorCollection& settings);
100  static void addNumberOfSolventShells(Utils::UniversalSettings::DescriptorCollection& settings);
101  static void addChargedCandNTermini(Utils::UniversalSettings::DescriptorCollection& settings);
105  SettingsPopulator() = delete;
106 };
107 
108 inline void SettingsPopulator::addSfamAtomTypeLevel(Utils::UniversalSettings::DescriptorCollection& settings) {
109  Utils::UniversalSettings::OptionListDescriptor sfamAtomTypeLevel("Sets the atom type level for SFAM's MM model.");
110  sfamAtomTypeLevel.addOption("elements");
111  sfamAtomTypeLevel.addOption("low");
112  sfamAtomTypeLevel.addOption("high");
113  sfamAtomTypeLevel.addOption("unique");
114  sfamAtomTypeLevel.setDefaultOption("high");
115  settings.push_back(SettingsNames::sfamAtomTypeLevel, std::move(sfamAtomTypeLevel));
116 }
117 
118 inline void
119 SettingsPopulator::addPrintContributionsMolecularMechanicsOption(Utils::UniversalSettings::DescriptorCollection& settings) {
120  Utils::UniversalSettings::BoolDescriptor printContributionsMolecularMechanics(
121  "Sets the option to have a very verbose output from the MM calculation, which includes the individual energy "
122  "contributions.");
123  printContributionsMolecularMechanics.setDefaultValue(false);
124  settings.push_back(SettingsNames::printContributionsMolecularMechanics, std::move(printContributionsMolecularMechanics));
125 }
126 
127 inline void SettingsPopulator::addOnlyCalculateBondedContribution(Utils::UniversalSettings::DescriptorCollection& settings) {
128  Utils::UniversalSettings::BoolDescriptor onlyCalculateBondedContribution(
129  "Sets the option to only calculate covalent contributions within the MM model.");
130  onlyCalculateBondedContribution.setDefaultValue(false);
131  settings.push_back(SettingsNames::onlyCalculateBondedContribution, std::move(onlyCalculateBondedContribution));
132 }
133 
134 inline void SettingsPopulator::addParameterAndConnectivityFile(Utils::UniversalSettings::DescriptorCollection& settings,
135  bool setEmptyDefault) {
136  Utils::UniversalSettings::StringDescriptor parameterFilePath(
137  "Path to the MM parameter file (for reading and writing).");
138  if (setEmptyDefault)
139  parameterFilePath.setDefaultValue("");
140  else
141  parameterFilePath.setDefaultValue("Parameters.dat");
142  settings.push_back(Utils::SettingsNames::parameterFilePath, std::move(parameterFilePath));
143 
144  Utils::UniversalSettings::StringDescriptor connectivityFilePath(
145  "Path to the system connectivity file (for reading and writing).");
146  if (setEmptyDefault)
147  connectivityFilePath.setDefaultValue("");
148  else
149  connectivityFilePath.setDefaultValue("Connectivity.dat");
150  settings.push_back(SettingsNames::connectivityFilePath, std::move(connectivityFilePath));
151 }
152 
153 inline void SettingsPopulator::addDetectBondsWithCovalentRadiiOption(Utils::UniversalSettings::DescriptorCollection& settings) {
154  Utils::UniversalSettings::BoolDescriptor detectBonds(
155  "Decides whether the connectivity should be determined by bond detection based on covalent radii instead of "
156  "reading the connectivity file.");
157  detectBonds.setDefaultValue(false);
158  settings.push_back(SettingsNames::detectBondsWithCovalentRadii, std::move(detectBonds));
159 }
160 
161 inline void SettingsPopulator::addNonCovalentCutoffRadius(Utils::UniversalSettings::DescriptorCollection& settings) {
162  Utils::UniversalSettings::DoubleDescriptor cutoffRadius(
163  "The cutoff radius for non covalent interactions in Angstrom.");
164  cutoffRadius.setMinimum(0.0);
165  cutoffRadius.setDefaultValue(1200.0);
166  settings.push_back(SettingsNames::nonCovalentCutoffRadius, std::move(cutoffRadius));
167 }
168 
169 inline void SettingsPopulator::addHydrogenBondCorrection(Utils::UniversalSettings::DescriptorCollection& settings) {
170  Utils::UniversalSettings::BoolDescriptor hydrogenBondCorrection("Include hydrogen bond interaction in MM model.");
171  hydrogenBondCorrection.setDefaultValue(true);
172  settings.push_back(SettingsNames::hydrogenBondCorrection, std::move(hydrogenBondCorrection));
173 }
174 
175 inline void SettingsPopulator::addApplyCutoffDuringInitializationOption(Utils::UniversalSettings::DescriptorCollection& settings) {
176  Utils::UniversalSettings::BoolDescriptor applyCutoffDuringInitialization(
177  "Decides whether the non-covalent cutoff radius should be enforced during the initialization of the calculator "
178  "to "
179  "exclude the interactions beyond the distance cutoff.");
180  applyCutoffDuringInitialization.setDefaultValue(false);
181  settings.push_back(SettingsNames::applyCutoffDuringInitialization, std::move(applyCutoffDuringInitialization));
182 }
183 
184 inline void SettingsPopulator::addGaffAtomicChargesFile(Utils::UniversalSettings::DescriptorCollection& settings) {
185  Utils::UniversalSettings::StringDescriptor atomicChargeFilePath("Path to atomic charges file for GAFF.");
186  atomicChargeFilePath.setDefaultValue("");
187  settings.push_back(SettingsNames::gaffAtomicChargesFile, std::move(atomicChargeFilePath));
188 }
189 
190 inline void SettingsPopulator::addTitrationSiteFile(Utils::UniversalSettings::DescriptorCollection& settings) {
191  Utils::UniversalSettings::StringDescriptor titrationSiteFile("Path to titation sites for MM parametrization.");
192  titrationSiteFile.setDefaultValue("titrable_sites.dat");
193  settings.push_back(SettingsNames::titrationSiteFile, std::move(titrationSiteFile));
194 }
195 
196 inline void SettingsPopulator::addGaffAtomTypesFile(Utils::UniversalSettings::DescriptorCollection& settings) {
197  Utils::UniversalSettings::StringDescriptor atomTypesFilePath("Path to atom types file for GAFF.");
198  atomTypesFilePath.setDefaultValue("");
199  settings.push_back(SettingsNames::gaffAtomTypesFile, std::move(atomTypesFilePath));
200 }
201 
202 inline void SettingsPopulator::addQmAtomsOption(Utils::UniversalSettings::DescriptorCollection& settings) {
203  Utils::UniversalSettings::IntListDescriptor qmAtoms("A list containing the indices of the atoms in the QM region.");
204  qmAtoms.setDefaultValue({});
205  settings.push_back(Utils::SettingsNames::qmAtomsList, std::move(qmAtoms));
206 }
207 
208 inline void SettingsPopulator::addChargeRedistributionOption(Utils::UniversalSettings::DescriptorCollection& settings) {
209  Utils::UniversalSettings::OptionListDescriptor chargeRedistr(
210  "Sets the charge redistribution scheme for the MM atoms close to the QM-MM boundary.");
211  chargeRedistr.addOption(OptionNames::redistributedChargeOption);
212  chargeRedistr.addOption(OptionNames::redistributedChargeAndDipolesOption);
213  chargeRedistr.setDefaultOption(OptionNames::redistributedChargeOption);
214  settings.push_back(SettingsNames::chargeRedistributionKey, std::move(chargeRedistr));
215 }
216 
217 inline void SettingsPopulator::addElectrostaticEmbeddingOption(Utils::UniversalSettings::DescriptorCollection& settings) {
218  Utils::UniversalSettings::BoolDescriptor electrostaticEmbeddingOption(
219  "Sets whether electrostatic embedding is used in QM/MM. The alternative is applying mechanical embedding only.");
220  electrostaticEmbeddingOption.setDefaultValue(false);
221  settings.push_back(Utils::SettingsNames::electrostaticEmbedding, std::move(electrostaticEmbeddingOption));
222 }
223 
224 inline void SettingsPopulator::addQmRegionXyzFileOption(Utils::UniversalSettings::DescriptorCollection& settings) {
225  Utils::UniversalSettings::StringDescriptor qmRegionXyzFile(
226  "The path to a file to which the QM region can be dumped in XYZ format.");
227  qmRegionXyzFile.setDefaultValue("");
228  settings.push_back(SettingsNames::qmRegionXyzFile, std::move(qmRegionXyzFile));
229 }
230 
231 inline void SettingsPopulator::addIgnoreQmOption(Utils::UniversalSettings::DescriptorCollection& settings) {
232  Utils::UniversalSettings::BoolDescriptor ignoreQm(
233  "Whether to ignore all contributions from the QM calculation, and therefore, not performing it.");
234  ignoreQm.setDefaultValue(false);
235  settings.push_back(Utils::SettingsNames::ignoreQmOption, std::move(ignoreQm));
236 }
237 
238 inline void SettingsPopulator::addOptimizeLinksOption(Utils::UniversalSettings::DescriptorCollection& settings) {
239  Utils::UniversalSettings::BoolDescriptor optLinks(
240  "Whether to optimize the position of the link nuclei before reporting an energy.");
241  optLinks.setDefaultValue(false);
242  settings.push_back(Utils::SettingsNames::optimizeLinks, std::move(optLinks));
243 }
244 
245 inline void SettingsPopulator::addSilenceOption(Utils::UniversalSettings::DescriptorCollection& settings) {
246  Utils::UniversalSettings::BoolDescriptor silence("Whether to silence the standard output of the subcalculators.");
247  silence.setDefaultValue(false);
248  settings.push_back(SettingsNames::silenceUnderlyingCalculators, std::move(silence));
249 }
250 
251 inline void SettingsPopulator::addReducedQmMmEnergyOption(Utils::UniversalSettings::DescriptorCollection& settings) {
252  Utils::UniversalSettings::BoolDescriptor reducedEnergyOption(
253  "Sets whether an additional MM calculation shall be performed to evaluate the reduced QM/MM energy without any "
254  "MM contributions for atoms located solely within the environment.");
255  reducedEnergyOption.setDefaultValue(false);
256  settings.push_back(SettingsNames::calculateReducedQmMmEnergy, std::move(reducedEnergyOption));
257 }
258 
259 inline void SettingsPopulator::addBondOrderThreshold(Utils::UniversalSettings::DescriptorCollection& settings) {
260  Utils::UniversalSettings::DoubleDescriptor bondOrderThreshold(
261  "Sets the threshold for which bond orders to consider as bonds.");
262  bondOrderThreshold.setMinimum(0.0);
263  bondOrderThreshold.setMaximum(2.0);
264  bondOrderThreshold.setDefaultValue(0.5);
265  settings.push_back(SettingsNames::bondOrderThreshold, std::move(bondOrderThreshold));
266 }
267 
268 inline void SettingsPopulator::addConnectivityRefinementOption(Utils::UniversalSettings::DescriptorCollection& settings) {
269  Utils::UniversalSettings::BoolDescriptor refineConnectivity(
270  "Whether the connectivities of the atoms obtained from covalent radii shall be refined applying quantum-chemical "
271  "data.");
272  refineConnectivity.setDefaultValue(true);
273  settings.push_back(SettingsNames::refineConnectivity, std::move(refineConnectivity));
274 }
275 
276 inline void SettingsPopulator::addExistingParameterFile(Utils::UniversalSettings::DescriptorCollection& settings) {
277  Utils::UniversalSettings::StringDescriptor existingParameters(
278  "Path to an MM parameter file, which already contains some parameters that can be re-used for the "
279  "parametrization.");
280  existingParameters.setDefaultValue("");
281  settings.push_back(SettingsNames::existingParameters, std::move(existingParameters));
282 }
283 
284 inline void SettingsPopulator::addConstrainMMParametersOption(Utils::UniversalSettings::DescriptorCollection& settings) {
285  Utils::UniversalSettings::BoolDescriptor constrainMMParameters(
286  "Decides whether there should be constraints during the MM parameter optimization.");
287  constrainMMParameters.setDefaultValue(true);
288  settings.push_back(SettingsNames::constrainMMParameters, std::move(constrainMMParameters));
289 }
290 
291 inline void
292 SettingsPopulator::addOptimizeImproperDihedralForceConstantsOption(Utils::UniversalSettings::DescriptorCollection& settings) {
293  Utils::UniversalSettings::BoolDescriptor optImproperDihedralForceConstants(
294  "Decides whether the improper dihedral force constants of non-planar groups should be optimized during the MM "
295  "parameter optimization.");
296  optImproperDihedralForceConstants.setDefaultValue(true);
297  settings.push_back(SettingsNames::optimizeImproperDihedralForceConstants, std::move(optImproperDihedralForceConstants));
298 }
299 
300 inline void SettingsPopulator::addNumberAtomsThreshold(Utils::UniversalSettings::DescriptorCollection& settings) {
301  Utils::UniversalSettings::IntDescriptor numberAtomsThreshold(
302  "The maximum number of atoms where reference data is still generated for the whole system.");
303  numberAtomsThreshold.setMinimum(1);
304  numberAtomsThreshold.setMaximum(200);
305  numberAtomsThreshold.setDefaultValue(150);
306  settings.push_back(SettingsNames::numberAtomsThreshold, std::move(numberAtomsThreshold));
307 }
308 
309 inline void SettingsPopulator::addGaussianMethodAndBasisSet(Utils::UniversalSettings::DescriptorCollection& settings) {
310  Utils::UniversalSettings::StringDescriptor gaussianMethod(
311  "The method used in the Gaussian calculation for the CM5 charges.");
312  gaussianMethod.setDefaultValue("PBEPBE");
313  settings.push_back(SettingsNames::gaussianMethod, std::move(gaussianMethod));
314 
315  Utils::UniversalSettings::StringDescriptor gaussianBasisSet(
316  "The basis set used in the Gaussian calculation for the CM5 charges.");
317  gaussianBasisSet.setDefaultValue("def2SVP");
318  settings.push_back(SettingsNames::gaussianBasisSet, std::move(gaussianBasisSet));
319 }
320 
321 inline void SettingsPopulator::addBaseWorkingDirectory(Utils::UniversalSettings::DescriptorCollection& settings) {
322  Utils::UniversalSettings::StringDescriptor baseWorkingDirectory("Base directory for the calculations.");
323  baseWorkingDirectory.setDefaultValue(Utils::FilesystemHelpers::currentDirectory());
324  settings.push_back(Utils::ExternalQC::SettingsNames::baseWorkingDirectory, std::move(baseWorkingDirectory));
325 }
326 
327 inline void SettingsPopulator::addExternalProgramNProcs(Utils::UniversalSettings::DescriptorCollection& settings) {
328  Utils::UniversalSettings::IntDescriptor externalProgramNProcs(
329  "Number of processes for a reference calculation by an external program.");
330  externalProgramNProcs.setDefaultValue(1);
331  externalProgramNProcs.setMinimum(1);
332  settings.push_back(Utils::SettingsNames::externalProgramNProcs, std::move(externalProgramNProcs));
333 }
334 
335 inline void SettingsPopulator::addReferenceMethodAndBasisSet(Utils::UniversalSettings::DescriptorCollection& settings) {
336  Utils::UniversalSettings::StringDescriptor referenceMethod("The method used in reference calculations.");
337  referenceMethod.setDefaultValue(""); // default will be set later depending on the program
338  settings.push_back(SettingsNames::referenceMethod, std::move(referenceMethod));
339 
340  Utils::UniversalSettings::StringDescriptor referenceBasisSet("The basis set used in reference calculations.");
341  referenceBasisSet.setDefaultValue(""); // default will be set later depending on the program
342  settings.push_back(SettingsNames::referenceBasisSet, std::move(referenceBasisSet));
343 }
344 
345 inline void SettingsPopulator::addSubsystemRadius(Utils::UniversalSettings::DescriptorCollection& settings) {
346  Utils::UniversalSettings::DoubleDescriptor subsystemRadius(
347  "The radius of the spheres defining the volume of the subsystems. Unit: Angstrom.");
348  subsystemRadius.setMinimum(5.0);
349  subsystemRadius.setMaximum(12.0);
350  subsystemRadius.setDefaultValue(6.0);
351  settings.push_back(SettingsNames::subsystemRadius, std::move(subsystemRadius));
352 }
353 
354 inline void SettingsPopulator::addReferenceDataGenerationOptions(Utils::UniversalSettings::DescriptorCollection& settings,
355  bool includeReadWriteMode) {
356  if (includeReadWriteMode) {
357  Utils::UniversalSettings::StringDescriptor refDataDir(
358  "The name of the directory where the reference calculation files are loaded from and to which the molecular "
359  "structure data is written.");
360  refDataDir.setDefaultValue("reference_data");
361  settings.push_back(SettingsNames::referenceDataDirectory, std::move(refDataDir));
362  }
363 
364  Utils::UniversalSettings::OptionListDescriptor refDataMode(
365  "Mode of the reference data generation (direct, reading, writing, database)");
366  refDataMode.addOption(OptionNames::directMode);
367  refDataMode.addOption(OptionNames::databaseMode);
368  if (includeReadWriteMode) {
369  refDataMode.addOption(OptionNames::readFromFilesMode);
370  refDataMode.addOption(OptionNames::writeToFilesMode);
371  }
372  refDataMode.setDefaultOption(OptionNames::directMode);
373  settings.push_back(SettingsNames::referenceDataMode, std::move(refDataMode));
374 }
375 
376 inline void SettingsPopulator::addDatabaseSettings(Utils::UniversalSettings::DescriptorCollection& settings,
377  std::string defaultDatabaseName) {
378  Utils::UniversalSettings::StringDescriptor databaseHost("The name or IP address of the database host.");
379  databaseHost.setDefaultValue("localhost");
380  settings.push_back(SettingsNames::databaseHost, std::move(databaseHost));
381 
382  Utils::UniversalSettings::StringDescriptor databaseName("The name of the database.");
383  databaseName.setDefaultValue(defaultDatabaseName);
384  settings.push_back(SettingsNames::databaseName, std::move(databaseName));
385 
386  Utils::UniversalSettings::IntDescriptor databasePort("The port through which to connect to the database.");
387  databasePort.setMinimum(27000);
388  databasePort.setMaximum(27999);
389  databasePort.setDefaultValue(27017);
390  settings.push_back(SettingsNames::databasePort, std::move(databasePort));
391 }
392 
393 inline void SettingsPopulator::addDatabaseSleepTime(Utils::UniversalSettings::DescriptorCollection& settings) {
394  Utils::UniversalSettings::IntDescriptor databaseSleepTime(
395  "The sleep time in seconds inbetween database operations in reference data generation phase.");
396  databaseSleepTime.setMinimum(1);
397  databaseSleepTime.setMaximum(86400); // one day
398  databaseSleepTime.setDefaultValue(60);
399  settings.push_back(SettingsNames::databaseSleepTime, std::move(databaseSleepTime));
400 }
401 
402 inline void SettingsPopulator::addAtomicInformationFile(Utils::UniversalSettings::DescriptorCollection& settings,
403  bool setEmptyDefault) {
404  Utils::UniversalSettings::StringDescriptor atomicInfoFile(
405  "Path to file containing the information about formal charges and unpaired electrons.");
406  if (setEmptyDefault) {
407  atomicInfoFile.setDefaultValue("");
408  }
409  else {
410  atomicInfoFile.setDefaultValue("atomic_info.dat");
411  }
412  settings.push_back(SettingsNames::atomicInformationFile, std::move(atomicInfoFile));
413 }
414 
415 inline void SettingsPopulator::addUseGaussianOption(Utils::UniversalSettings::DescriptorCollection& settings) {
416  Utils::UniversalSettings::BoolDescriptor useGaussianOption(
417  "Decides whether to apply the Gaussian program to calculate CM5 charges.");
418  useGaussianOption.setDefaultValue(false);
419  settings.push_back(SettingsNames::useGaussianOptionKey, std::move(useGaussianOption));
420 }
421 
422 inline void SettingsPopulator::addReferenceProgram(Utils::UniversalSettings::DescriptorCollection& settings) {
423  Utils::UniversalSettings::OptionListDescriptor referenceProgram(
424  "Set program for the reference calculations in SFAM parametrization.");
425  referenceProgram.addOption(OptionNames::turbomoleOption);
426  referenceProgram.addOption(OptionNames::orcaOption);
427  referenceProgram.addOption(OptionNames::sparrowOption);
428  referenceProgram.addOption(OptionNames::xtbOption);
429  referenceProgram.setDefaultOption(OptionNames::orcaOption);
430  settings.push_back(SettingsNames::referenceProgram, std::move(referenceProgram));
431 }
432 
433 inline void SettingsPopulator::addIncreaseScfSafetyOption(Utils::UniversalSettings::DescriptorCollection& settings) {
434  Utils::UniversalSettings::BoolDescriptor increaseScfSafety(
435  "Decides whether options for a safer SCF convergence should be applied.");
436  increaseScfSafety.setDefaultValue(false);
437  settings.push_back(SettingsNames::increaseScfSafetyKey, std::move(increaseScfSafety));
438 }
439 
440 inline void SettingsPopulator::addEarlyTerminationOption(Utils::UniversalSettings::DescriptorCollection& settings) {
441  Utils::UniversalSettings::BoolDescriptor earlyTermination(
442  "Decides whether the reference data generation should be terminated early when enough data has been collected.");
443  earlyTermination.setDefaultValue(true);
444  settings.push_back(SettingsNames::enableEarlyTerminationKey, std::move(earlyTermination));
445 }
446 
447 inline void SettingsPopulator::addReuseDatabaseOption(Utils::UniversalSettings::DescriptorCollection& settings) {
448  Utils::UniversalSettings::BoolDescriptor reuseDatabase("Decides whether an existing database should be employed as "
449  "the basis for the parametrization by reusing its data.");
450  reuseDatabase.setDefaultValue(false);
451  settings.push_back(SettingsNames::reuseDatabaseKey, std::move(reuseDatabase));
452 }
453 
454 inline void
455 SettingsPopulator::addTerminateAfterReferenceDataGenerationOption(Utils::UniversalSettings::DescriptorCollection& settings) {
456  Utils::UniversalSettings::BoolDescriptor refDataOnly(
457  "Decides whether to terminate program after reference data generation step of parametrization. Can only be set "
458  "to true in case of the database or write mode.");
459  refDataOnly.setDefaultValue(false);
460  settings.push_back(SettingsNames::terminateAfterReferenceDataGeneration, std::move(refDataOnly));
461 }
462 
463 inline void SettingsPopulator::addUseCsvInputFormatOption(Utils::UniversalSettings::DescriptorCollection& settings) {
464  Utils::UniversalSettings::BoolDescriptor useCsv("Whether to use the CSV input format during read mode.");
465  useCsv.setDefaultValue(true);
466  settings.push_back(SettingsNames::useCsvInputFormat, std::move(useCsv));
467 }
468 
469 inline void SettingsPopulator::addConvertToCm5Option(Utils::UniversalSettings::DescriptorCollection& settings) {
470  Utils::UniversalSettings::BoolDescriptor convertChargesCm5(
471  "Whether to convert atomic charges with the Charge Model 5 algorithm.");
472  convertChargesCm5.setDefaultValue(true);
473  settings.push_back(SettingsNames::convertChargesCm5, std::move(convertChargesCm5));
474 }
475 
476 inline void SettingsPopulator::addYamlSettingsForDirectMode(Utils::UniversalSettings::DescriptorCollection& settings) {
477  Utils::UniversalSettings::StringDescriptor yamlSettingsFilePath("");
478  yamlSettingsFilePath.setDefaultValue("");
479  settings.push_back(SettingsNames::yamlSettingsFilePath, std::move(yamlSettingsFilePath));
480 }
481 
482 inline void SettingsPopulator::addQmRegionCenterAtoms(Utils::UniversalSettings::DescriptorCollection& settings) {
483  Utils::UniversalSettings::IntListDescriptor centerAtoms(
484  "The center atom(s) around which the QM Region will be constructed.");
485  centerAtoms.setDefaultValue({0});
486  settings.push_back(SettingsNames::qmRegionCenterAtoms, std::move(centerAtoms));
487 }
488 
489 inline void SettingsPopulator::addInitialRadius(Utils::UniversalSettings::DescriptorCollection& settings) {
490  Utils::UniversalSettings::DoubleDescriptor initialRadius("The initial radius for the QM region generation.");
491  initialRadius.setMinimum(2.0);
492  initialRadius.setMaximum(12.0);
493  initialRadius.setDefaultValue(6.0);
494  settings.push_back(SettingsNames::initialRadiusForQmRegionSelection, std::move(initialRadius));
495 }
496 
497 inline void SettingsPopulator::addCuttingProbability(Utils::UniversalSettings::DescriptorCollection& settings) {
498  Utils::UniversalSettings::DoubleDescriptor cuttingProbability(
499  "The cutting probability for the QM region generation.");
500  cuttingProbability.setMinimum(0.1);
501  cuttingProbability.setMaximum(1.0);
502  cuttingProbability.setDefaultValue(1.0);
503  settings.push_back(SettingsNames::cuttingProbability, std::move(cuttingProbability));
504 }
505 
506 inline void SettingsPopulator::addQmRegionSizesSettings(Utils::UniversalSettings::DescriptorCollection& settings) {
507  Utils::UniversalSettings::IntDescriptor minSize("Minimum size of the QM region.");
508  minSize.setMinimum(1);
509  minSize.setDefaultValue(100);
510  settings.push_back(SettingsNames::qmRegionCandidateMinSize, std::move(minSize));
511 
512  Utils::UniversalSettings::IntDescriptor maxSize("Maximum size of the QM region.");
513  maxSize.setMinimum(1);
514  maxSize.setDefaultValue(120);
515  settings.push_back(SettingsNames::qmRegionCandidateMaxSize, std::move(maxSize));
516 
517  Utils::UniversalSettings::IntDescriptor refMaxSize("Maximum size for the reference QM regions.");
518  refMaxSize.setMinimum(1);
519  refMaxSize.setDefaultValue(200);
520  settings.push_back(SettingsNames::qmRegionRefMaxSize, std::move(refMaxSize));
521 }
522 
523 inline void SettingsPopulator::addNumAttemptsPerRadiusOption(Utils::UniversalSettings::DescriptorCollection& settings) {
524  Utils::UniversalSettings::IntDescriptor numAttemptsPerRadius(
525  "Number of QM region generation attempts for a given initial radius.");
526  numAttemptsPerRadius.setMinimum(1);
527  numAttemptsPerRadius.setDefaultValue(100);
528  settings.push_back(SettingsNames::numAttemptsPerRadius, std::move(numAttemptsPerRadius));
529 }
530 
531 inline void SettingsPopulator::addMaxNumRefModelsOption(Utils::UniversalSettings::DescriptorCollection& settings) {
532  Utils::UniversalSettings::IntDescriptor maxNumRefModels("Maximum number of reference models to be evaluated.");
533  maxNumRefModels.setMinimum(1);
534  maxNumRefModels.setDefaultValue(10);
535  settings.push_back(SettingsNames::maxNumRefModels, std::move(maxNumRefModels));
536 }
537 
538 inline void SettingsPopulator::addTolerancesForQmRegionSelection(Utils::UniversalSettings::DescriptorCollection& settings) {
539  Utils::UniversalSettings::DoubleDescriptor tolPercentageError(
540  "The tolerance in percent for the mean absolute error of forces for the QM region selection.");
541  tolPercentageError.setMinimum(0.0);
542  tolPercentageError.setDefaultValue(20.0);
543  settings.push_back(SettingsNames::tolerancePercentageError, std::move(tolPercentageError));
544 
545  Utils::UniversalSettings::DoubleDescriptor tolPercentageSymmetryScore(
546  "The tolerance in percent for the symmetry score based on the minimum symmetry score of all candidate models.");
547  tolPercentageSymmetryScore.setMinimum(0.0);
548  tolPercentageError.setDefaultValue(50.0);
549  settings.push_back(SettingsNames::tolerancePercentageSymmetryScore, std::move(tolPercentageSymmetryScore));
550 }
551 
552 inline void SettingsPopulator::addQmRegionSelectionRandomSeed(Utils::UniversalSettings::DescriptorCollection& settings) {
553  Utils::UniversalSettings::IntDescriptor randomSeed("Random seed for the QM region selection.");
554  randomSeed.setDefaultValue(42);
555  settings.push_back(SettingsNames::qmRegionSelectionRandomSeed, std::move(randomSeed));
556 }
557 
558 inline void SettingsPopulator::addPreparationDataDirectory(Utils::UniversalSettings::DescriptorCollection& settings) {
559  Utils::UniversalSettings::StringDescriptor preparationDataDirectory("Base directory for the preparation.");
560  preparationDataDirectory.setDefaultValue("preparation_data");
561  settings.push_back(SettingsNames::preparationDataDirectory, std::move(preparationDataDirectory));
562 }
563 
564 inline void SettingsPopulator::addSolvation(Utils::UniversalSettings::DescriptorCollection& settings) {
565  Utils::UniversalSettings::BoolDescriptor solvateStructure("Solvates the input structure.");
566  solvateStructure.setDefaultValue(false);
567  settings.push_back(SettingsNames::solvateStructure, std::move(solvateStructure));
568 }
569 
570 inline void SettingsPopulator::addNumberOfSolventShells(Utils::UniversalSettings::DescriptorCollection& settings) {
571  Utils::UniversalSettings::IntDescriptor numberOfSolventShells("Defines the number of solvent shells");
572  numberOfSolventShells.setDefaultValue(1);
573  settings.push_back(SettingsNames::numberOfSolventShells, std::move(numberOfSolventShells));
574 }
575 
576 inline void SettingsPopulator::addChargedCandNTermini(Utils::UniversalSettings::DescriptorCollection& settings) {
577  Utils::UniversalSettings::BoolDescriptor chargedCandNTermini(
578  "Whether to protonate C and N termini in their charged (NH3+, COO-) form");
579  chargedCandNTermini.setDefaultValue(true);
580  settings.push_back(SettingsNames::chargedCandNTermini, std::move(chargedCandNTermini));
581 }
582 
583 inline void SettingsPopulator::addPhValueOfSystem(Utils::UniversalSettings::DescriptorCollection& settings) {
584  Utils::UniversalSettings::DoubleDescriptor phValueOfSystem("pH value for the protonation.");
585  phValueOfSystem.setDefaultValue(7.0);
586  settings.push_back(SettingsNames::phValueOfSystem, std::move(phValueOfSystem));
587 }
588 
589 inline void SettingsPopulator::addTitration(Utils::UniversalSettings::DescriptorCollection& settings) {
590  Utils::UniversalSettings::BoolDescriptor titrate(
591  "Titrates the structure to protonate amino acids according to the pH value.");
592  titrate.setDefaultValue(false);
593  settings.push_back(SettingsNames::titrate, std::move(titrate));
594 }
595 
596 inline void SettingsPopulator::addUseThermochemistryForTitration(Utils::UniversalSettings::DescriptorCollection& settings) {
597  Utils::UniversalSettings::BoolDescriptor useThermoChemistryForTitration(
598  "Sets whether thermochemical data (gibbs free energy) should be used for calculation of pka values and "
599  "protonation states.");
600  useThermoChemistryForTitration.setDefaultValue(false);
601  settings.push_back(SettingsNames::useThermoChemistryForTitration, std::move(useThermoChemistryForTitration));
602 }
603 
604 inline void SettingsPopulator::addTrainingDataDirectory(Utils::UniversalSettings::DescriptorCollection& settings) {
605  Utils::UniversalSettings::StringDescriptor trainingDataDirectory(
606  "Sets the directory in which the reference calculation for the training data are stored.");
607  trainingDataDirectory.setDefaultValue("");
608  settings.push_back(SettingsNames::trainingDataDirectory, std::move(trainingDataDirectory));
609 }
610 
611 inline void SettingsPopulator::addMethodFamily(Utils::UniversalSettings::DescriptorCollection& settings) {
612  Utils::UniversalSettings::StringDescriptor methodFamily("The method family such as 'DFT/SFAM'.");
613  methodFamily.setDefaultValue("PM6/SFAM");
614  settings.push_back(Utils::SettingsNames::methodFamily, std::move(methodFamily));
615 }
616 
617 inline void SettingsPopulator::addProgram(Utils::UniversalSettings::DescriptorCollection& settings) {
618  Utils::UniversalSettings::StringDescriptor program("The underlying programs such as 'Turbomole/SFAM'.");
619  program.setDefaultValue("Any/Swoose");
620  settings.push_back(Utils::SettingsNames::program, std::move(program));
621 }
622 
623 } // namespace SwooseUtilities
624 } // namespace Scine
625 
626 #endif // SWOOSEUTILITIES_SETTINGSPOPULATOR_H
SettingsPopulator()=delete
Deleted constructor.
Class with only static functions to populate settings.
Definition: SettingsPopulator.h:26
static std::string currentDirectory()