change parameter via CLI options
This commit is contained in:
		
							
								
								
									
										5
									
								
								main.cpp
									
									
									
									
									
								
							
							
						
						
									
										5
									
								
								main.cpp
									
									
									
									
									
								
							| @@ -1,5 +1,4 @@ | ||||
|  | ||||
|  | ||||
| #include "utils/io.h" | ||||
| #include "simulation/sims.h" | ||||
| #include "motions/base.h" | ||||
| @@ -25,6 +24,10 @@ int main (const int argc, char *argv[]) { | ||||
|  | ||||
|     std::unordered_map parameter { read_parameter(args.parameter_file) }; | ||||
|  | ||||
|     for (const auto& [key, value]: args.optional) { | ||||
|         parameter[key] = value; | ||||
|     } | ||||
|  | ||||
|     std::random_device rd; | ||||
|     std::mt19937_64 rng(rd()); | ||||
|  | ||||
|   | ||||
							
								
								
									
										9
									
								
								test.py
									
									
									
									
									
								
							
							
						
						
									
										9
									
								
								test.py
									
									
									
									
									
								
							| @@ -17,10 +17,7 @@ def run_sims(taus, ste: bool = True, spectrum: bool = False, exec_file: str = '. | ||||
|  | ||||
|         arguments += ['BimodalAngle'] | ||||
|  | ||||
|         # arguments += ['-TAU', '1'] | ||||
|  | ||||
|         with pathlib.Path(config_file).open('a') as f: | ||||
|             f.write(f'tau={tau}\n') | ||||
|         arguments += ['-TAU', f'{tau}'] | ||||
|  | ||||
|         subprocess.run(arguments) | ||||
|  | ||||
| @@ -71,7 +68,7 @@ def post_process_spectrum(taus, apod, tpulse): | ||||
|  | ||||
|  | ||||
| def post_process_ste(taus): | ||||
|     tevo = np.linspace(1e-6, 120e-6, num=8) | ||||
|     tevo = np.linspace(1e-6, 120e-6, num=121) | ||||
|  | ||||
|     for i, tau in enumerate(taus): | ||||
|         try: | ||||
| @@ -211,7 +208,7 @@ def ste(x, m0, t, beta, finfty): | ||||
|  | ||||
|  | ||||
| if __name__ == '__main__': | ||||
|     tau_values = np.geomspace(1e-2, 1e-6, num=1)   # if num=1, tau is first value | ||||
|     tau_values = np.geomspace(1e-2, 1e2, num=2)   # if num=1, tau is first value | ||||
|  | ||||
|     # parameter for spectrum simulations | ||||
|     lb = 2e3 | ||||
|   | ||||
							
								
								
									
										57
									
								
								utils/io.cpp
									
									
									
									
									
								
							
							
						
						
									
										57
									
								
								utils/io.cpp
									
									
									
									
									
								
							| @@ -7,6 +7,7 @@ | ||||
| #include <fstream> | ||||
| #include <iostream> | ||||
| #include <algorithm> | ||||
| #include <complex> | ||||
| #include <vector> | ||||
| #include <iomanip> | ||||
| #include <unordered_map> | ||||
| @@ -16,29 +17,56 @@ | ||||
|  | ||||
|  | ||||
|  | ||||
| Arguments parse_args(const int argc, char **argv) { | ||||
| Arguments parse_args(const int argc, char* argv[]) { | ||||
|     if (argc < 3) { | ||||
|         throw std::runtime_error("Not enough arguments: missing parameter file"); | ||||
|     } | ||||
|  | ||||
|     Arguments args; | ||||
|  | ||||
|     for (int i=1; i<argc; i++) { | ||||
|         if (std::string arg = argv[i]; arg[0] == '-') { | ||||
|             if (arg == "--ste") { | ||||
|                 args.ste = true; | ||||
|             } else if (arg == "--spectrum") { | ||||
|     const std::vector<std::string> input_args(argv + 1, argv + argc); | ||||
|  | ||||
|     for (auto it = input_args.begin();  it != input_args.end(); ++it) { | ||||
|         std::cout << *it << std::endl; | ||||
|         if (it->at(0) == '-') { | ||||
|  | ||||
|             if (*it == "--spectrum") { | ||||
|                 args.spectrum = true; | ||||
|             } else { | ||||
|                 throw std::runtime_error("Unrecognized option: " + arg); | ||||
|                 std::cout << "spectrum: " << args.spectrum << std::endl; | ||||
|                 continue; | ||||
|             } | ||||
|         } else if (args.parameter_file.empty()) { | ||||
|             args.parameter_file = arg; | ||||
|         } else if (args.motion_type.empty()) { | ||||
|             args.motion_type = arg; | ||||
|         } else { | ||||
|             throw std::invalid_argument("Too many options for parameter file"); | ||||
|  | ||||
|             if (*it == "--ste") { | ||||
|                 args.ste = true; | ||||
|                 std::cout << "ste: " << args.ste << std::endl; | ||||
|                 continue; | ||||
|             } | ||||
|  | ||||
|             std::string stripped_arg; | ||||
|             if (it->size() > 2 && it->at(0) == '-' && it->at(1) == '-') { | ||||
|                 stripped_arg = it->substr(2, it->size()); | ||||
|             } else if (it->size() > 1 && it->at(0) == '-') { | ||||
|                 stripped_arg = it->substr(1, it->size()); | ||||
|             } | ||||
|             std::transform(stripped_arg.begin(), stripped_arg.end(), stripped_arg.begin(), [](unsigned char c) { return std::tolower(c); }); | ||||
|             const auto stripped_value = std::stod(*(++it), nullptr); | ||||
|             args.optional[stripped_arg] = stripped_value; | ||||
|             continue; | ||||
|         } | ||||
|  | ||||
|         if (args.parameter_file.empty()) { | ||||
|             std::cout << *it << " is parameter_file" << std::endl; | ||||
|             args.parameter_file = *it; | ||||
|             continue; | ||||
|         } | ||||
|  | ||||
|         if (args.motion_type.empty()) { | ||||
|             std::cout << *it << " is motion model" << std::endl; | ||||
|             args.motion_type = *it; | ||||
|             continue; | ||||
|         } | ||||
|  | ||||
|         throw std::invalid_argument("too many positional arguments"); | ||||
|     } | ||||
|  | ||||
|     if (args.parameter_file.empty()) { | ||||
| @@ -48,7 +76,6 @@ Arguments parse_args(const int argc, char **argv) { | ||||
|     if (args.motion_type.empty()) { | ||||
|         throw std::invalid_argument("Missing motion model"); | ||||
|     } | ||||
|  | ||||
|     return args; | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -16,7 +16,7 @@ struct Arguments { | ||||
|     std::unordered_map<std::string, double> optional; | ||||
| }; | ||||
|  | ||||
| Arguments parse_args(int argc, char **argv); | ||||
| Arguments parse_args(int argc, char* argv[]); | ||||
|  | ||||
| std::unordered_map<std::string, double> read_parameter(const std::filesystem::path&); | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user