Majoranapp
A C++ library for studying MZM in non-interacting systems
InputScriptParser.hpp
Go to the documentation of this file.
1 #ifndef PARSERS_INPUTSCRIPTPARSER_HPP
2 #define PARSERS_INPUTSCRIPTPARSER_HPP
3 
4 #include <map>
5 #include <string>
6 #include <fstream>
7 #include <nlohmann/json.hpp>
8 
9 #include "../Misc.hpp"
10 #include "../QuantumSystem.hpp"
11 #include "../QuantumSystem/Parameters.hpp"
12 #include "../QuantumSystem/Dimensions.hpp"
13 #include "../Solver.hpp"
14 #include "ModelSelector.hpp"
15 
16 #include "ConnectionsParser.hpp"
17 
18 // for convenience
20 
25 {
26 
27 private:
35  template <class T>
36  static void ParseMap(json &jsonMap, T &map)
37  {
38  for (auto it : jsonMap.items())
39  {
40  json &val = it.value();
41  const std::string &key = it.key();
42  //std::cout << key << " " << val << "\n";
43  map[key] = val;
44  }
45  }
46 
52  static void ParseSolverOptions(json &solverOptions)
53  {
54  for (auto it : solverOptions.items())
55  {
56  json &val = it.value();
57  const std::string &key = it.key();
58  //std::cout << key << " " << val << "\n";
59 
60  switch (str2int(key.c_str()))
61  {
62  case str2int("tol"):
63  Solver::tol = val;
64  break;
65  case str2int("noe"):
66  Solver::noe = val;
67  break;
68  case str2int("nov"):
69  Solver::nov = val;
70  break;
71  case str2int("target"):
72  Solver::target = val.get<std::string>();
73  break;
74  case str2int("showEigenvalues"):
76  break;
77  case str2int("showEigenvectors"):
79  break;
80  default:
81  Info::Warning("Warning! Unrecognized option: ", key);
82  }
83  }
84  }
85 
86 public:
87  //typedef int type;
94  static void Parse(std::string filename,
95  QuantumSystem &quantumSystem)
96  {
97  Info::LogBegining("Parsing JSON input script...");
98  Parameters &parameters = quantumSystem.parameters;
99  Dimensions &dimensions = quantumSystem.dimensions;
100  ParametersConnections &parametersConnections = quantumSystem.parametersConnections;
101 
102  std::ifstream inputScriptFile{filename};
103  json inputScript;
104  inputScriptFile >> inputScript;
105 
106  // selecting the model
107  auto &modelName = inputScript["model name"];
108  ModelSelector::selectedModel = modelName.get<std::string>();
109  auto &matrixType = inputScript["matrix type"];
110  ModelSelector::selectedMatrixType = matrixType.get<std::string>();
111 
112  // TODO add warning when parameter name is invalid!
113  ParseMap(inputScript["parameters"], parameters.map);
114  ParseMap(inputScript["dimensions"], dimensions.map);
115  ParseSolverOptions(inputScript["solver options"]);
116 
117  //parsing connections
118  parametersConnections = ConnectionsParser::Parse(inputScript["connections"], parameters.map);
120  }
121 };
122 
123 #endif
static void Parse(std::string filename, QuantumSystem &quantumSystem)
parse JSON file into QuantumSystem object
Definition: InputScriptParser.hpp:94
static bool showEigenvalues
show eigenvalues (flag)
Definition: Solver.hpp:37
static void ParseMap(json &jsonMap, T &map)
unpacking json into map
Definition: InputScriptParser.hpp:36
Parameters parameters
Definition: QuantumSystem.hpp:15
nlohmann::json json
Definition: ConnectionsParser.hpp:5
static ParametersConnections Parse(json &jsonConnections, T &parameters)
Parsing json object to ParametersConnetions.
Definition: ConnectionsParser.hpp:88
static size_t nov
number of eigenvectors
Definition: Solver.hpp:28
static size_t noe
number of eigenvalues
Definition: Solver.hpp:23
constexpr unsigned int str2int(const char *str, int h=0)
converting c_str() into constexpr int, which can be used in switch statement
Definition: Misc.hpp:19
static bool showEigenvectors
show eigenvectors (flag)
Definition: Solver.hpp:42
static std::string selectedMatrixType
Definition: ModelSelector.hpp:23
ParametersConnections parametersConnections
Definition: QuantumSystem.hpp:17
Parsing JSON input script.
Definition: InputScriptParser.hpp:24
static void LogAccomplished(std::string text="... done")
LogComment with green color.
Definition: Basics.hpp:91
Dimensions dimensions
Definition: QuantumSystem.hpp:16
static void ParseSolverOptions(json &solverOptions)
Parsing Solver options (TODO move to separate class)
Definition: InputScriptParser.hpp:52
static double tol
tolerance for arma::eigs_sym procedure
Definition: Solver.hpp:19
static std::string selectedModel
Definition: ModelSelector.hpp:22
class containing all information about quantum system, which is needed for hamiltonian construction ...
Definition: QuantumSystem.hpp:12
nlohmann::json json
Definition: InputScriptParser.hpp:19
static void LogBegining(std::string text)
LogComment with red color.
Definition: Basics.hpp:81
static std::string target
target part of the spectrum
Definition: Solver.hpp:32
static void Warning(std::string text, std::string note="")
Warning sent to std::cout.
Definition: Basics.hpp:102