n2p2 - A neural network potential package
Settings.h
Go to the documentation of this file.
1// n2p2 - A neural network potential package
2// Copyright (C) 2018 Andreas Singraber (University of Vienna)
3//
4// This program is free software: you can redistribute it and/or modify
5// it under the terms of the GNU General Public License as published by
6// the Free Software Foundation, either version 3 of the License, or
7// (at your option) any later version.
8//
9// This program is distributed in the hope that it will be useful,
10// but WITHOUT ANY WARRANTY; without even the implied warranty of
11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12// GNU General Public License for more details.
13//
14// You should have received a copy of the GNU General Public License
15// along with this program. If not, see <https://www.gnu.org/licenses/>.
16
17#ifndef SETTINGS_H
18#define SETTINGS_H
19
20#include <cstddef> // std::size_t
21#include <fstream> // std::ofstream
22#include <map> // std::multimap
23#include <memory> // std::shared_ptr
24#include <string> // std::string
25#include <utility> // std::pair
26#include <vector> // std::vector
27
28namespace nnp
29{
30
33{
34public:
36 struct Key
37 {
39 bool isUnique() const {return (words.size() == 1);}
40
42 std::string description;
44 std::vector<std::string> words;
45 };
46
47 typedef std::multimap<std::string,
48 std::pair<std::string, std::size_t> > KeyMap;
49 typedef std::pair<KeyMap::const_iterator,
50 KeyMap::const_iterator> KeyRange;
51 typedef std::map<std::string,
52 std::shared_ptr<Key>> const KeywordList;
53
61 std::string operator[](std::string const& keyword) const;
68 std::size_t loadFile(
69 std::string const& fileName = "input.nn");
81 bool keywordExists(
82 std::string const& keyword,
83 bool exact = false) const;
91 std::string keywordCheck(std::string const& keyword) const;
101 std::string getValue(std::string const& keyword) const;
122 KeyRange getValues(std::string const& keyword) const;
127 std::vector<std::string> info() const;
132 std::vector<std::string> getSettingsLines() const;
139 std::ofstream* const& file,
140 std::map<std::size_t,
141 std::string> const& replacements
142 = {}) const;
143
144private:
146 std::vector<std::string> lines;
148 std::vector<std::string> log;
154 std::string fileName;
155
158 void readFile();
163 std::size_t parseLines();
169 std::pair<
170 std::size_t, std::size_t> sanityCheck();
171};
172
173}
174
175#endif
Reads and analyzes settings file and stores parameters.
Definition: Settings.h:33
std::vector< std::string > info() const
Get logged information about settings file.
Definition: Settings.cpp:239
std::string keywordCheck(std::string const &keyword) const
Check for keyword and alternatives, throw exception if not present.
Definition: Settings.cpp:199
static KeywordList knownKeywords
Map containing all known keywords and a description.
Definition: Settings.h:152
void writeSettingsFile(std::ofstream *const &file, std::map< std::size_t, std::string > const &replacements={}) const
Write complete settings file.
Definition: Settings.cpp:274
bool keywordExists(std::string const &keyword, bool exact=false) const
Check if keyword is present in settings file.
Definition: Settings.cpp:177
std::size_t loadFile(std::string const &fileName="input.nn")
Load a file with settings.
Definition: Settings.cpp:169
std::vector< std::string > log
Vector with log lines.
Definition: Settings.h:148
KeyRange getValues(std::string const &keyword) const
Get all keyword-value pairs for given keyword.
Definition: Settings.cpp:234
std::vector< std::string > lines
Vector of all lines in settings file.
Definition: Settings.h:146
std::string getValue(std::string const &keyword) const
Get value for given keyword.
Definition: Settings.cpp:229
std::vector< std::string > getSettingsLines() const
Get complete settings file.
Definition: Settings.cpp:244
std::pair< KeyMap::const_iterator, KeyMap::const_iterator > KeyRange
Definition: Settings.h:50
std::map< std::string, std::shared_ptr< Key > > const KeywordList
Definition: Settings.h:52
std::size_t parseLines()
Parse lines and create contents map.
Definition: Settings.cpp:296
std::string fileName
Settings file name.
Definition: Settings.h:154
void readFile()
Read file once and save all lines in lines vector.
Definition: Settings.cpp:249
KeyMap contents
Map containing all keyword-value pairs.
Definition: Settings.h:150
std::pair< std::size_t, std::size_t > sanityCheck()
Check if all keywords are in known-keywords database and for duplicates.
Definition: Settings.cpp:364
std::multimap< std::string, std::pair< std::string, std::size_t > > KeyMap
Definition: Settings.h:48
std::string operator[](std::string const &keyword) const
Overload [] operator.
Definition: Settings.cpp:164
Definition: Atom.h:28
Keyword properties.
Definition: Settings.h:37
std::vector< std::string > words
Alternative keywords (first entry is main name).
Definition: Settings.h:44
std::string description
A short description of the keyword.
Definition: Settings.h:42
bool isUnique() const
Whether this keyword has no alternative definitions or spellings.
Definition: Settings.h:39