Majoranapp
A C++ library for studying MZM in non-interacting systems
ArgvParser.hpp
Go to the documentation of this file.
1 #ifndef PARSERS_ARGVPARSER_HPP
2 #define PARSERS_ARGVPARSER_HPP
3 
4 #include <unistd.h>
5 #include <iostream>
6 #include "../QuantumSystem.hpp"
7 #include "KeyBindings.hpp"
8 #include "InputScriptParser.hpp"
9 
14 {
15 
16 private:
20  bool help = false;
21 
25  bool quiet = false;
26 
27 public:
32 
37  {
38  quantumSystem.parameters.map[Spinfull::KineticTerm::name] = 1.0;
39  quantumSystem.parameters.map[Spinfull::ProxTerm::name] = 1.0;
40  }
41 
45  void Info()
46  {
47  Info::Title("Model");
49  Info::Line();
50  Info::Title("Dimensions");
52  Info::Line();
53  Info::Title("Parameters");
55  Info::Line();
56  Info::Title("Connections");
57  quantumSystem.parametersConnections.Print();
58  Info::Line();
59  }
60 
68  int Parse(int argc, char *argv[])
69  {
70  int option;
71  int returnCode = 0;
72  std::string optstringKeys = KeyBindings::GetOptstring();
73  //optstringKeys += "vqhf:"; // TODO move to system key bindings
74  const char *optstring = optstringKeys.c_str();
75 
76  while ((option = getopt(argc, argv, optstring)) != -1)
77  {
78  if (KeyBindings::mapDimensions.count(option) > 0)
79  {
80  std::string name{KeyBindings::mapDimensions.at(option)};
81  quantumSystem.dimensions.map[name] = std::atof(optarg);
82  continue;
83  }
84 
85  if (KeyBindings::mapParameters.count(option) > 0)
86  {
87  std::string name{KeyBindings::mapParameters.at(option)};
88  quantumSystem.parameters.map[name] = std::atof(optarg);
89  continue;
90  }
91 
92  if (option == KeyBindings::QuietKey)
93  {
94  quiet = true;
95  continue;
96  }
97 
98  if (option == KeyBindings::VerboseKey)
99  {
100  Info::verbose = true;
101  continue;
102  }
103 
104  if (option == KeyBindings::HelpKey)
105  {
106  help = true;
107  continue;
108  }
109 
110  if (option == KeyBindings::FilenameKey)
111  {
112  std::string filename = optarg;
113  InputScriptParser::Parse(filename,
114  quantumSystem);
115  continue;
116  }
117 
118  if (option == ':')
119  {
120  std::cout << "option requires argument\n";
121  returnCode = 1;
122  continue;
123  }
124 
125  if (option == '?')
126  {
127  ;
128  }
129 
130  std::cout << "unknown option '" << char(optopt) << "'\n";
131  returnCode = 1;
132  }
133 
134  for (; optind < argc; ++optind)
135  std::cout << "argv[" << optind << "]='" << argv[optind] << "'\n";
136 
137  if (not quiet)
138  {
139  Info::Line();
141  }
142 
143 
144  if (Info::verbose)
145  this->Info();
146 
147  if (help)
148  {
150  return 1;
151  }
152 
154 
155  return returnCode;
156  }
157 };
158 
159 #endif
static void Title(std::string title)
Display title and Line.
Definition: Basics.hpp:113
static void Parse(std::string filename, QuantumSystem &quantumSystem)
parse JSON file into QuantumSystem object
Definition: InputScriptParser.hpp:94
int Parse(int argc, char *argv[])
parsing argv
Definition: ArgvParser.hpp:68
Parameters parameters
Definition: QuantumSystem.hpp:15
static const char QuietKey
Definition: KeyBindings.hpp:83
static void Comment(std::string text)
Display commented line.
Definition: Basics.hpp:33
primitive argv class
Definition: ArgvParser.hpp:13
static void Help()
display all key bindings
Definition: KeyBindings.hpp:35
static void SetDimensions(Dimensions &dimensions)
Definition: VectorViewer.hpp:24
static const std::string name
Definition: KineticTerm.hpp:45
static std::string GetSelected()
Get the Selected object.
Definition: ModelSelector.hpp:104
ParametersConnections parametersConnections
Definition: QuantumSystem.hpp:17
ArgvParser()
construct a new Argv Parser object
Definition: ArgvParser.hpp:36
static const char FilenameKey
Definition: KeyBindings.hpp:84
static bool verbose
Definition: Basics.hpp:26
Dimensions dimensions
Definition: QuantumSystem.hpp:16
static void ShowVersion()
displays all libs version
Definition: Version.hpp:48
static const char VerboseKey
Definition: KeyBindings.hpp:81
static void Line(int n=40)
Display line of n char (default char &#39;=&#39;)
Definition: Basics.hpp:124
static const std::map< char, std::string > mapParameters
Parameters name translation map.
Definition: KeyBindings.hpp:26
class containing all information about quantum system, which is needed for hamiltonian construction ...
Definition: QuantumSystem.hpp:12
bool help
show help (flag)
Definition: ArgvParser.hpp:20
static const std::string name
Definition: ProxTerm.hpp:43
bool quiet
quiet mode (flag)
Definition: ArgvParser.hpp:25
void Info()
verbose info
Definition: ArgvParser.hpp:45
static std::string GetOptstring()
Get the Optstring object optstring for ArgvParser.
Definition: KeyBindings.hpp:63
static const std::map< char, std::string > mapDimensions
Dimensions translation map.
Definition: KeyBindings.hpp:22
static const char HelpKey
Definition: KeyBindings.hpp:82
QuantumSystem quantumSystem
all information about QuantumSystem parsed from argv and/or JSON inputscript
Definition: ArgvParser.hpp:31
static void ShowMapCommonValue(T1 &map1, T2 &map2)
displaying common value of two maps
Definition: ShowMap.hpp:39