Scine::Swoose  1.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 addChargeRedistributionOption(Utils::UniversalSettings::DescriptorCollection& settings);
47  static void addReducedQmMmEnergyOption(Utils::UniversalSettings::DescriptorCollection& settings);
48 
49  // These functions are mostly for the MM parametrization
50  static void addBondOrderThreshold(Utils::UniversalSettings::DescriptorCollection& settings);
51  static void addConnectivityRefinementOption(Utils::UniversalSettings::DescriptorCollection& settings);
52  static void addExistingParameterFile(Utils::UniversalSettings::DescriptorCollection& settings);
53  static void addConstrainMMParametersOption(Utils::UniversalSettings::DescriptorCollection& settings);
54  static void addOptimizeImproperDihedralForceConstantsOption(Utils::UniversalSettings::DescriptorCollection& settings);
55  static void addGaussianMethodAndBasisSet(Utils::UniversalSettings::DescriptorCollection& settings);
56  static void addExternalProgramNProcs(Utils::UniversalSettings::DescriptorCollection& settings);
57  static void addBaseWorkingDirectory(Utils::UniversalSettings::DescriptorCollection& settings);
58  static void addNumberAtomsThreshold(Utils::UniversalSettings::DescriptorCollection& settings);
59  static void addSubsystemRadius(Utils::UniversalSettings::DescriptorCollection& settings);
60  static void addReferenceDataGenerationOptions(Utils::UniversalSettings::DescriptorCollection& settings,
61  bool includeReadWriteMode = true);
62  static void addDatabaseSettings(Utils::UniversalSettings::DescriptorCollection& settings, std::string defaultDatabaseName);
63  static void addDatabaseSleepTime(Utils::UniversalSettings::DescriptorCollection& settings);
64  static void addAtomicInformationFile(Utils::UniversalSettings::DescriptorCollection& settings);
65  static void addUseGaussianOption(Utils::UniversalSettings::DescriptorCollection& settings);
66  static void addReferenceProgram(Utils::UniversalSettings::DescriptorCollection& settings);
67  static void addReferenceMethodAndBasisSet(Utils::UniversalSettings::DescriptorCollection& settings);
68  static void addIncreaseScfSafetyOption(Utils::UniversalSettings::DescriptorCollection& settings);
69  static void addEarlyTerminationOption(Utils::UniversalSettings::DescriptorCollection& settings);
70  static void addReuseDatabaseOption(Utils::UniversalSettings::DescriptorCollection& settings);
71  static void addTerminateAfterReferenceDataGenerationOption(Utils::UniversalSettings::DescriptorCollection& settings);
72  static void addUseCsvInputFormatOption(Utils::UniversalSettings::DescriptorCollection& settings);
73  static void addConvertToCm5Option(Utils::UniversalSettings::DescriptorCollection& settings);
74  static void addYamlSettingsForDirectMode(Utils::UniversalSettings::DescriptorCollection& settings);
75 
76  // These functions used for QM region selection
77  static void addQmRegionCenterAtom(Utils::UniversalSettings::DescriptorCollection& settings);
78  static void addInitialRadius(Utils::UniversalSettings::DescriptorCollection& settings);
79  static void addCuttingProbability(Utils::UniversalSettings::DescriptorCollection& settings);
80  static void addQmRegionSizesSettings(Utils::UniversalSettings::DescriptorCollection& settings);
81  static void addNumAttemptsPerRadiusOption(Utils::UniversalSettings::DescriptorCollection& settings);
82  static void addMaxNumRefModelsOption(Utils::UniversalSettings::DescriptorCollection& settings);
83  static void addTolerancesForQmRegionSelection(Utils::UniversalSettings::DescriptorCollection& settings);
84  static void addQmRegionSelectionRandomSeed(Utils::UniversalSettings::DescriptorCollection& settings);
85 
89  SettingsPopulator() = delete;
90 };
91 
92 inline void SettingsPopulator::addSfamAtomTypeLevel(Utils::UniversalSettings::DescriptorCollection& settings) {
93  Utils::UniversalSettings::OptionListDescriptor sfamAtomTypeLevel("Sets the atom type level for SFAM's MM model.");
94  sfamAtomTypeLevel.addOption("elements");
95  sfamAtomTypeLevel.addOption("low");
96  sfamAtomTypeLevel.addOption("high");
97  sfamAtomTypeLevel.addOption("unique");
98  sfamAtomTypeLevel.setDefaultOption("high");
99  settings.push_back(SettingsNames::sfamAtomTypeLevel, std::move(sfamAtomTypeLevel));
100 }
101 
102 inline void
103 SettingsPopulator::addPrintContributionsMolecularMechanicsOption(Utils::UniversalSettings::DescriptorCollection& settings) {
104  Utils::UniversalSettings::BoolDescriptor printContributionsMolecularMechanics(
105  "Sets the option to have a very verbose output from the MM calculation, which includes the individual energy "
106  "contributions.");
107  printContributionsMolecularMechanics.setDefaultValue(false);
108  settings.push_back(SettingsNames::printContributionsMolecularMechanics, std::move(printContributionsMolecularMechanics));
109 }
110 
111 inline void SettingsPopulator::addOnlyCalculateBondedContribution(Utils::UniversalSettings::DescriptorCollection& settings) {
112  Utils::UniversalSettings::BoolDescriptor onlyCalculateBondedContribution(
113  "Sets the option to only calculate covalent contributions within the MM model.");
114  onlyCalculateBondedContribution.setDefaultValue(false);
115  settings.push_back(SettingsNames::onlyCalculateBondedContribution, std::move(onlyCalculateBondedContribution));
116 }
117 
118 inline void SettingsPopulator::addParameterAndConnectivityFile(Utils::UniversalSettings::DescriptorCollection& settings,
119  bool setEmptyDefault) {
120  Utils::UniversalSettings::StringDescriptor parameterFilePath(
121  "Path to the MM parameter file (for reading and writing).");
122  if (setEmptyDefault)
123  parameterFilePath.setDefaultValue("");
124  else
125  parameterFilePath.setDefaultValue("Parameters.dat");
126  settings.push_back(SettingsNames::parameterFilePath, std::move(parameterFilePath));
127 
128  Utils::UniversalSettings::StringDescriptor connectivityFilePath(
129  "Path to the system connectivity file (for reading and writing).");
130  if (setEmptyDefault)
131  connectivityFilePath.setDefaultValue("");
132  else
133  connectivityFilePath.setDefaultValue("Connectivity.dat");
134  settings.push_back(SettingsNames::connectivityFilePath, std::move(connectivityFilePath));
135 }
136 
137 inline void SettingsPopulator::addDetectBondsWithCovalentRadiiOption(Utils::UniversalSettings::DescriptorCollection& settings) {
138  Utils::UniversalSettings::BoolDescriptor detectBonds(
139  "Decides whether the connectivity should be determined by bond detection based on covalent radii instead of "
140  "reading the connectivity file.");
141  detectBonds.setDefaultValue(false);
142  settings.push_back(SettingsNames::detectBondsWithCovalentRadii, std::move(detectBonds));
143 }
144 
145 inline void SettingsPopulator::addNonCovalentCutoffRadius(Utils::UniversalSettings::DescriptorCollection& settings) {
146  Utils::UniversalSettings::DoubleDescriptor cutoffRadius(
147  "The cutoff radius for non covalent interactions in Angstrom.");
148  cutoffRadius.setMinimum(0.0);
149  cutoffRadius.setDefaultValue(12.0);
150  settings.push_back(SettingsNames::nonCovalentCutoffRadius, std::move(cutoffRadius));
151 }
152 
153 inline void SettingsPopulator::addHydrogenBondCorrection(Utils::UniversalSettings::DescriptorCollection& settings) {
154  Utils::UniversalSettings::BoolDescriptor hydrogenBondCorrection("Include hydrogen bond interaction in MM model.");
155  hydrogenBondCorrection.setDefaultValue(true);
156  settings.push_back(SettingsNames::hydrogenBondCorrection, std::move(hydrogenBondCorrection));
157 }
158 
159 inline void SettingsPopulator::addApplyCutoffDuringInitializationOption(Utils::UniversalSettings::DescriptorCollection& settings) {
160  Utils::UniversalSettings::BoolDescriptor applyCutoffDuringInitialization(
161  "Decides whether the non-covalent cutoff radius should be enforced during the initialization of the calculator "
162  "to "
163  "exclude the interactions beyond the distance cutoff.");
164  applyCutoffDuringInitialization.setDefaultValue(false);
165  settings.push_back(SettingsNames::applyCutoffDuringInitialization, std::move(applyCutoffDuringInitialization));
166 }
167 
168 inline void SettingsPopulator::addGaffAtomicChargesFile(Utils::UniversalSettings::DescriptorCollection& settings) {
169  Utils::UniversalSettings::StringDescriptor atomicChargeFilePath("Path to atomic charges file for GAFF.");
170  atomicChargeFilePath.setDefaultValue("");
171  settings.push_back(SettingsNames::gaffAtomicChargesFile, std::move(atomicChargeFilePath));
172 }
173 
174 inline void SettingsPopulator::addGaffAtomTypesFile(Utils::UniversalSettings::DescriptorCollection& settings) {
175  Utils::UniversalSettings::StringDescriptor atomTypesFilePath("Path to atom types file for GAFF.");
176  atomTypesFilePath.setDefaultValue("");
177  settings.push_back(SettingsNames::gaffAtomTypesFile, std::move(atomTypesFilePath));
178 }
179 
180 inline void SettingsPopulator::addQmAtomsOption(Utils::UniversalSettings::DescriptorCollection& settings) {
181  Utils::UniversalSettings::IntListDescriptor qmAtoms("A list containing the indices of the atoms in the QM region.");
182  qmAtoms.setDefaultValue({});
183  settings.push_back(SettingsNames::qmAtomsList, std::move(qmAtoms));
184 }
185 
186 inline void SettingsPopulator::addChargeRedistributionOption(Utils::UniversalSettings::DescriptorCollection& settings) {
187  Utils::UniversalSettings::OptionListDescriptor chargeRedistr(
188  "Sets the charge redistribution scheme for the MM atoms close to the QM-MM boundary.");
189  chargeRedistr.addOption(OptionNames::redistributedChargeOption);
190  chargeRedistr.addOption(OptionNames::redistributedChargeAndDipolesOption);
191  chargeRedistr.setDefaultOption(OptionNames::redistributedChargeOption);
192  settings.push_back(SettingsNames::chargeRedistributionKey, std::move(chargeRedistr));
193 }
194 
195 inline void SettingsPopulator::addElectrostaticEmbeddingOption(Utils::UniversalSettings::DescriptorCollection& settings) {
196  Utils::UniversalSettings::BoolDescriptor electrostaticEmbeddingOption(
197  "Sets whether electrostatic embedding is used in QM/MM. The alternative is applying mechanical embedding only.");
198  electrostaticEmbeddingOption.setDefaultValue(true);
199  settings.push_back(SettingsNames::electrostaticEmbedding, std::move(electrostaticEmbeddingOption));
200 }
201 
202 inline void SettingsPopulator::addQmRegionXyzFileOption(Utils::UniversalSettings::DescriptorCollection& settings) {
203  Utils::UniversalSettings::StringDescriptor qmRegionXyzFile(
204  "The path to a file to which the QM region can be dumped in XYZ format.");
205  qmRegionXyzFile.setDefaultValue("");
206  settings.push_back(SettingsNames::qmRegionXyzFile, std::move(qmRegionXyzFile));
207 }
208 
209 inline void SettingsPopulator::addIgnoreQmOption(Utils::UniversalSettings::DescriptorCollection& settings) {
210  Utils::UniversalSettings::BoolDescriptor ignoreQm(
211  "Whether to ignore all contributions from the QM calculation, and therefore, not performing it.");
212  ignoreQm.setDefaultValue(false);
213  settings.push_back(SettingsNames::ignoreQmOption, std::move(ignoreQm));
214 }
215 
216 inline void SettingsPopulator::addReducedQmMmEnergyOption(Utils::UniversalSettings::DescriptorCollection& settings) {
217  Utils::UniversalSettings::BoolDescriptor reducedEnergyOption(
218  "Sets whether an additional MM calculation shall be performed to evaluate the reduced QM/MM energy without any "
219  "MM contributions for atoms located solely within the environment.");
220  reducedEnergyOption.setDefaultValue(false);
221  settings.push_back(SettingsNames::calculateReducedQmMmEnergy, std::move(reducedEnergyOption));
222 }
223 
224 inline void SettingsPopulator::addBondOrderThreshold(Utils::UniversalSettings::DescriptorCollection& settings) {
225  Utils::UniversalSettings::DoubleDescriptor bondOrderThreshold(
226  "Sets the threshold for which bond orders to consider as bonds.");
227  bondOrderThreshold.setMinimum(0.0);
228  bondOrderThreshold.setMaximum(2.0);
229  bondOrderThreshold.setDefaultValue(0.5);
230  settings.push_back(SettingsNames::bondOrderThreshold, std::move(bondOrderThreshold));
231 }
232 
233 inline void SettingsPopulator::addConnectivityRefinementOption(Utils::UniversalSettings::DescriptorCollection& settings) {
234  Utils::UniversalSettings::BoolDescriptor refineConnectivity(
235  "Whether the connectivities of the atoms obtained from covalent radii shall be refined applying quantum-chemical "
236  "data.");
237  refineConnectivity.setDefaultValue(true);
238  settings.push_back(SettingsNames::refineConnectivity, std::move(refineConnectivity));
239 }
240 
241 inline void SettingsPopulator::addExistingParameterFile(Utils::UniversalSettings::DescriptorCollection& settings) {
242  Utils::UniversalSettings::StringDescriptor existingParameters(
243  "Path to an MM parameter file, which already contains some parameters that can be re-used for the "
244  "parametrization.");
245  existingParameters.setDefaultValue("");
246  settings.push_back(SettingsNames::existingParameters, std::move(existingParameters));
247 }
248 
249 inline void SettingsPopulator::addConstrainMMParametersOption(Utils::UniversalSettings::DescriptorCollection& settings) {
250  Utils::UniversalSettings::BoolDescriptor constrainMMParameters(
251  "Decides whether there should be constraints during the MM parameter optimization.");
252  constrainMMParameters.setDefaultValue(true);
253  settings.push_back(SettingsNames::constrainMMParameters, std::move(constrainMMParameters));
254 }
255 
256 inline void
257 SettingsPopulator::addOptimizeImproperDihedralForceConstantsOption(Utils::UniversalSettings::DescriptorCollection& settings) {
258  Utils::UniversalSettings::BoolDescriptor optImproperDihedralForceConstants(
259  "Decides whether the improper dihedral force constants of non-planar groups should be optimized during the MM "
260  "parameter optimization.");
261  optImproperDihedralForceConstants.setDefaultValue(true);
262  settings.push_back(SettingsNames::optimizeImproperDihedralForceConstants, std::move(optImproperDihedralForceConstants));
263 }
264 
265 inline void SettingsPopulator::addNumberAtomsThreshold(Utils::UniversalSettings::DescriptorCollection& settings) {
266  Utils::UniversalSettings::IntDescriptor numberAtomsThreshold(
267  "The maximum number of atoms where reference data is still generated for the whole system.");
268  numberAtomsThreshold.setMinimum(1);
269  numberAtomsThreshold.setMaximum(200);
270  numberAtomsThreshold.setDefaultValue(150);
271  settings.push_back(SettingsNames::numberAtomsThreshold, std::move(numberAtomsThreshold));
272 }
273 
274 inline void SettingsPopulator::addGaussianMethodAndBasisSet(Utils::UniversalSettings::DescriptorCollection& settings) {
275  Utils::UniversalSettings::StringDescriptor gaussianMethod(
276  "The method used in the Gaussian calculation for the CM5 charges.");
277  gaussianMethod.setDefaultValue("PBEPBE");
278  settings.push_back(SettingsNames::gaussianMethod, std::move(gaussianMethod));
279 
280  Utils::UniversalSettings::StringDescriptor gaussianBasisSet(
281  "The basis set used in the Gaussian calculation for the CM5 charges.");
282  gaussianBasisSet.setDefaultValue("def2SVP");
283  settings.push_back(SettingsNames::gaussianBasisSet, std::move(gaussianBasisSet));
284 }
285 
286 inline void SettingsPopulator::addBaseWorkingDirectory(Utils::UniversalSettings::DescriptorCollection& settings) {
287  Utils::UniversalSettings::StringDescriptor baseWorkingDirectory("Base directory for the calculations.");
288  baseWorkingDirectory.setDefaultValue(Utils::FilesystemHelpers::currentDirectory());
289  settings.push_back(Utils::ExternalQC::SettingsNames::baseWorkingDirectory, std::move(baseWorkingDirectory));
290 }
291 
292 inline void SettingsPopulator::addExternalProgramNProcs(Utils::UniversalSettings::DescriptorCollection& settings) {
293  Utils::UniversalSettings::IntDescriptor externalProgramNProcs(
294  "Number of processes for a reference calculation by an external program.");
295  externalProgramNProcs.setDefaultValue(1);
296  externalProgramNProcs.setMinimum(1);
297  settings.push_back(Utils::SettingsNames::externalProgramNProcs, std::move(externalProgramNProcs));
298 }
299 
300 inline void SettingsPopulator::addReferenceMethodAndBasisSet(Utils::UniversalSettings::DescriptorCollection& settings) {
301  Utils::UniversalSettings::StringDescriptor referenceMethod("The method used in reference calculations.");
302  referenceMethod.setDefaultValue(""); // default will be set later depending on the program
303  settings.push_back(SettingsNames::referenceMethod, std::move(referenceMethod));
304 
305  Utils::UniversalSettings::StringDescriptor referenceBasisSet("The basis set used in reference calculations.");
306  referenceBasisSet.setDefaultValue(""); // default will be set later depending on the program
307  settings.push_back(SettingsNames::referenceBasisSet, std::move(referenceBasisSet));
308 }
309 
310 inline void SettingsPopulator::addSubsystemRadius(Utils::UniversalSettings::DescriptorCollection& settings) {
311  Utils::UniversalSettings::DoubleDescriptor subsystemRadius(
312  "The radius of the spheres defining the volume of the subsystems. Unit: Angstrom.");
313  subsystemRadius.setMinimum(5.0);
314  subsystemRadius.setMaximum(12.0);
315  subsystemRadius.setDefaultValue(6.0);
316  settings.push_back(SettingsNames::subsystemRadius, std::move(subsystemRadius));
317 }
318 
319 inline void SettingsPopulator::addReferenceDataGenerationOptions(Utils::UniversalSettings::DescriptorCollection& settings,
320  bool includeReadWriteMode) {
321  if (includeReadWriteMode) {
322  Utils::UniversalSettings::StringDescriptor refDataDir(
323  "The name of the directory where the reference calculation files are loaded from and to which the molecular "
324  "structure data is written.");
325  refDataDir.setDefaultValue("reference_data");
326  settings.push_back(SettingsNames::referenceDataDirectory, std::move(refDataDir));
327  }
328 
329  Utils::UniversalSettings::OptionListDescriptor refDataMode(
330  "Mode of the reference data generation (direct, reading, writing, database)");
331  refDataMode.addOption(OptionNames::directMode);
332  refDataMode.addOption(OptionNames::databaseMode);
333  if (includeReadWriteMode) {
334  refDataMode.addOption(OptionNames::readFromFilesMode);
335  refDataMode.addOption(OptionNames::writeToFilesMode);
336  }
337  refDataMode.setDefaultOption(OptionNames::directMode);
338  settings.push_back(SettingsNames::referenceDataMode, std::move(refDataMode));
339 }
340 
341 inline void SettingsPopulator::addDatabaseSettings(Utils::UniversalSettings::DescriptorCollection& settings,
342  std::string defaultDatabaseName) {
343  Utils::UniversalSettings::StringDescriptor databaseHost("The name or IP address of the database host.");
344  databaseHost.setDefaultValue("localhost");
345  settings.push_back(SettingsNames::databaseHost, std::move(databaseHost));
346 
347  Utils::UniversalSettings::StringDescriptor databaseName("The name of the database.");
348  databaseName.setDefaultValue(defaultDatabaseName);
349  settings.push_back(SettingsNames::databaseName, std::move(databaseName));
350 
351  Utils::UniversalSettings::IntDescriptor databasePort("The port through which to connect to the database.");
352  databasePort.setMinimum(27000);
353  databasePort.setMaximum(27999);
354  databasePort.setDefaultValue(27017);
355  settings.push_back(SettingsNames::databasePort, std::move(databasePort));
356 }
357 
358 inline void SettingsPopulator::addDatabaseSleepTime(Utils::UniversalSettings::DescriptorCollection& settings) {
359  Utils::UniversalSettings::IntDescriptor databaseSleepTime(
360  "The sleep time in seconds inbetween database operations in reference data generation phase.");
361  databaseSleepTime.setMinimum(1);
362  databaseSleepTime.setMaximum(86400); // one day
363  databaseSleepTime.setDefaultValue(60);
364  settings.push_back(SettingsNames::databaseSleepTime, std::move(databaseSleepTime));
365 }
366 
367 inline void SettingsPopulator::addAtomicInformationFile(Utils::UniversalSettings::DescriptorCollection& settings) {
368  Utils::UniversalSettings::StringDescriptor atomicInfoFile(
369  "Path to file containing the information about formal charges and unpaired electrons.");
370  atomicInfoFile.setDefaultValue("");
371  settings.push_back(SettingsNames::atomicInformationFile, std::move(atomicInfoFile));
372 }
373 
374 inline void SettingsPopulator::addUseGaussianOption(Utils::UniversalSettings::DescriptorCollection& settings) {
375  Utils::UniversalSettings::BoolDescriptor useGaussianOption(
376  "Decides whether to apply the Gaussian program to calculate CM5 charges.");
377  useGaussianOption.setDefaultValue(false);
378  settings.push_back(SettingsNames::useGaussianOptionKey, std::move(useGaussianOption));
379 }
380 
381 inline void SettingsPopulator::addReferenceProgram(Utils::UniversalSettings::DescriptorCollection& settings) {
382  Utils::UniversalSettings::OptionListDescriptor referenceProgram(
383  "Set program for the reference calculations in SFAM parametrizations.");
384  referenceProgram.addOption(OptionNames::turbomoleOption);
385  referenceProgram.addOption(OptionNames::orcaOption);
386  referenceProgram.addOption(OptionNames::sparrowOption);
387  referenceProgram.addOption(OptionNames::xtbOption);
388  referenceProgram.setDefaultOption(OptionNames::orcaOption);
389  settings.push_back(SettingsNames::referenceProgram, std::move(referenceProgram));
390 }
391 
392 inline void SettingsPopulator::addIncreaseScfSafetyOption(Utils::UniversalSettings::DescriptorCollection& settings) {
393  Utils::UniversalSettings::BoolDescriptor increaseScfSafety(
394  "Decides whether options for a safer SCF convergence should be applied.");
395  increaseScfSafety.setDefaultValue(false);
396  settings.push_back(SettingsNames::increaseScfSafetyKey, std::move(increaseScfSafety));
397 }
398 
399 inline void SettingsPopulator::addEarlyTerminationOption(Utils::UniversalSettings::DescriptorCollection& settings) {
400  Utils::UniversalSettings::BoolDescriptor earlyTermination(
401  "Decides whether the reference data generation should be terminated early when enough data has been collected.");
402  earlyTermination.setDefaultValue(true);
403  settings.push_back(SettingsNames::enableEarlyTerminationKey, std::move(earlyTermination));
404 }
405 
406 inline void SettingsPopulator::addReuseDatabaseOption(Utils::UniversalSettings::DescriptorCollection& settings) {
407  Utils::UniversalSettings::BoolDescriptor reuseDatabase("Decides whether an existing database should be employed as "
408  "the basis for the parametrization by reusing its data.");
409  reuseDatabase.setDefaultValue(false);
410  settings.push_back(SettingsNames::reuseDatabaseKey, std::move(reuseDatabase));
411 }
412 
413 inline void
414 SettingsPopulator::addTerminateAfterReferenceDataGenerationOption(Utils::UniversalSettings::DescriptorCollection& settings) {
415  Utils::UniversalSettings::BoolDescriptor refDataOnly(
416  "Decides whether to terminate program after reference data generation step of parametrization. Can only be set "
417  "to true in case of the database or write mode.");
418  refDataOnly.setDefaultValue(false);
419  settings.push_back(SettingsNames::terminateAfterReferenceDataGeneration, std::move(refDataOnly));
420 }
421 
422 inline void SettingsPopulator::addUseCsvInputFormatOption(Utils::UniversalSettings::DescriptorCollection& settings) {
423  Utils::UniversalSettings::BoolDescriptor useCsv("Whether to use the CSV input format during read mode.");
424  useCsv.setDefaultValue(true);
425  settings.push_back(SettingsNames::useCsvInputFormat, std::move(useCsv));
426 }
427 
428 inline void SettingsPopulator::addConvertToCm5Option(Utils::UniversalSettings::DescriptorCollection& settings) {
429  Utils::UniversalSettings::BoolDescriptor convertChargesCm5(
430  "Whether to convert atomic charges with the Charge Model 5 algorithm.");
431  convertChargesCm5.setDefaultValue(true);
432  settings.push_back(SettingsNames::convertChargesCm5, std::move(convertChargesCm5));
433 }
434 
435 inline void SettingsPopulator::addYamlSettingsForDirectMode(Utils::UniversalSettings::DescriptorCollection& settings) {
436  Utils::UniversalSettings::StringDescriptor yamlSettingsFilePath("");
437  yamlSettingsFilePath.setDefaultValue("");
438  settings.push_back(SettingsNames::yamlSettingsFilePath, std::move(yamlSettingsFilePath));
439 }
440 
441 inline void SettingsPopulator::addQmRegionCenterAtom(Utils::UniversalSettings::DescriptorCollection& settings) {
442  Utils::UniversalSettings::IntDescriptor centerAtom("The center atom around which the QM Region will be constructed.");
443  centerAtom.setDefaultValue(0);
444  settings.push_back(SettingsNames::qmRegionCenterAtom, std::move(centerAtom));
445 }
446 
447 inline void SettingsPopulator::addInitialRadius(Utils::UniversalSettings::DescriptorCollection& settings) {
448  Utils::UniversalSettings::DoubleDescriptor initialRadius("The initial radius for the QM region generation.");
449  initialRadius.setMinimum(5.0);
450  initialRadius.setMaximum(12.0);
451  initialRadius.setDefaultValue(6.0);
452  settings.push_back(SettingsNames::initialRadiusForQmRegionSelection, std::move(initialRadius));
453 }
454 
455 inline void SettingsPopulator::addCuttingProbability(Utils::UniversalSettings::DescriptorCollection& settings) {
456  Utils::UniversalSettings::DoubleDescriptor cuttingProbability(
457  "The cutting probability for the QM region generation.");
458  cuttingProbability.setMinimum(0.1);
459  cuttingProbability.setMaximum(1.0);
460  cuttingProbability.setDefaultValue(1.0);
461  settings.push_back(SettingsNames::cuttingProbability, std::move(cuttingProbability));
462 }
463 
464 inline void SettingsPopulator::addQmRegionSizesSettings(Utils::UniversalSettings::DescriptorCollection& settings) {
465  Utils::UniversalSettings::IntDescriptor minSize("Minimum size of the QM region.");
466  minSize.setMinimum(1);
467  minSize.setDefaultValue(100);
468  settings.push_back(SettingsNames::qmRegionCandidateMinSize, std::move(minSize));
469 
470  Utils::UniversalSettings::IntDescriptor maxSize("Maximum size of the QM region.");
471  maxSize.setMinimum(1);
472  maxSize.setDefaultValue(120);
473  settings.push_back(SettingsNames::qmRegionCandidateMaxSize, std::move(maxSize));
474 
475  Utils::UniversalSettings::IntDescriptor refMaxSize("Maximum size for the reference QM regions.");
476  refMaxSize.setMinimum(1);
477  refMaxSize.setDefaultValue(200);
478  settings.push_back(SettingsNames::qmRegionRefMaxSize, std::move(refMaxSize));
479 }
480 
481 inline void SettingsPopulator::addNumAttemptsPerRadiusOption(Utils::UniversalSettings::DescriptorCollection& settings) {
482  Utils::UniversalSettings::IntDescriptor numAttemptsPerRadius(
483  "Number of QM region generation attempts for a given initial radius.");
484  numAttemptsPerRadius.setMinimum(1);
485  numAttemptsPerRadius.setDefaultValue(100);
486  settings.push_back(SettingsNames::numAttemptsPerRadius, std::move(numAttemptsPerRadius));
487 }
488 
489 inline void SettingsPopulator::addMaxNumRefModelsOption(Utils::UniversalSettings::DescriptorCollection& settings) {
490  Utils::UniversalSettings::IntDescriptor maxNumRefModels("Maximum number of reference models to be evaluated.");
491  maxNumRefModels.setMinimum(1);
492  maxNumRefModels.setDefaultValue(10);
493  settings.push_back(SettingsNames::maxNumRefModels, std::move(maxNumRefModels));
494 }
495 
496 inline void SettingsPopulator::addTolerancesForQmRegionSelection(Utils::UniversalSettings::DescriptorCollection& settings) {
497  Utils::UniversalSettings::DoubleDescriptor tolPercentageError(
498  "The tolerance in percent for the mean absolute error of forces for the QM region selection.");
499  tolPercentageError.setMinimum(0.0);
500  tolPercentageError.setDefaultValue(20.0);
501  settings.push_back(SettingsNames::tolerancePercentageError, std::move(tolPercentageError));
502 
503  Utils::UniversalSettings::DoubleDescriptor tolPercentageSymmetryScore(
504  "The tolerance in percent for the symmetry score based on the minimum symmetry score of all candidate models.");
505  tolPercentageSymmetryScore.setMinimum(0.0);
506  tolPercentageError.setDefaultValue(50.0);
507  settings.push_back(SettingsNames::tolerancePercentageSymmetryScore, std::move(tolPercentageSymmetryScore));
508 }
509 
510 inline void SettingsPopulator::addQmRegionSelectionRandomSeed(Utils::UniversalSettings::DescriptorCollection& settings) {
511  Utils::UniversalSettings::IntDescriptor randomSeed("Random seed for the QM region selection.");
512  randomSeed.setDefaultValue(42);
513  settings.push_back(SettingsNames::qmRegionSelectionRandomSeed, std::move(randomSeed));
514 }
515 
516 } // namespace SwooseUtilities
517 } // namespace Scine
518 
519 #endif // SWOOSEUTILITIES_SETTINGSPOPULATOR_H
SettingsPopulator()=delete
Deleted constructor.
Class with only static functions to populate settings.
Definition: SettingsPopulator.h:26
static std::string currentDirectory()