7 #ifndef Tomato_TomatoOPTIONS_HXX 8 #define Tomato_TomatoOPTIONS_HXX 15 #define YAML_BUFFER_SIZE 65536 22 template<
typename MeasureType >
28 template<
typename MeasureType >
32 throw std::runtime_error(
"Yaml parser not available");
36 Ox::TomatoParser<MeasureType> parser;
37 parser._filePath = filePath;
38 parser._sequences[
"files_magnitude"];
39 parser._sequences[
"files_phase"];
40 parser._scalars[
"dir_magnitude"];
41 parser._scalars[
"dir_phase"];
42 parser._scalars[
"dir_output_map"];
43 parser._scalars[
"dir_output_fitparams"];
44 parser._scalars[
"dir_output_magSignRecov"];
46 parser._scalars[
"parameter_to_map"];
47 parser._scalars[
"fitting_method"];
48 parser._scalars[
"model_type"];
49 parser._scalars[
"sign_calc_method"];
50 parser._scalars[
"start_point_calc_method"];
52 parser._scalars[
"fTolerance"];
53 parser._scalars[
"max_function_evals"];
54 parser._scalars[
"use_gradient"];
56 parser._sequences[
"inversion_times"];
57 parser._sequences[
"echo_times"];
58 parser._sequences[
"start_point"];
59 parser._sequences[
"noise"];
61 parser._scalars[
"mean_cut_off"];
62 parser._scalars[
"map_scale_factor"];
63 parser._scalars[
"use_colorbar"];
64 parser._scalars[
"number_of_threads"];
66 parser._scalars[
"output_map_series_instance_uid"];
67 parser._scalars[
"output_fitparams_series_instance_uid"];
68 parser._scalars[
"output_magSignRecov_series_instance_uid"];
69 parser._scalars[
"output_map_series_number"];
70 parser._scalars[
"output_fitparams_series_number"];
71 parser._scalars[
"output_magSignRecov_series_number"];
76 files_magnitude = parser._sequences[
"files_magnitude"];
77 files_phase = parser._sequences[
"files_phase"];
78 dir_magnitude = parser._scalars[
"dir_magnitude"];
79 dir_phase = parser._scalars[
"dir_phase"];
82 dir_output_map = parser._scalars[
"dir_output_map"];
83 dir_output_fitparams = parser._scalars[
"dir_output_fitparams"];
84 dir_output_magSignRecov = parser._scalars[
"dir_output_magSignRecov"];
86 output_map_series_instance_uid = parser._scalars[
"output_map_series_instance_uid"];
87 output_fitparams_series_instance_uid = parser._scalars[
"output_fitparams_series_instance_uid"];
88 output_magSignRecov_series_instance_uid = parser._scalars[
"output_magSignRecov_series_instance_uid"];
89 if (!parser._scalars[
"output_map_series_number"].empty())
90 output_map_series_number = KWUtil::StringToNumber<MeasureType>(parser._scalars[
"output_map_series_number"]);
91 if (!parser._scalars[
"output_fitparams_series_number"].empty())
92 output_fitparams_series_number = KWUtil::StringToNumber<MeasureType>(parser._scalars[
"output_fitparams_series_number"]);
93 if (!parser._scalars[
"output_magSignRecov_series_number"].empty())
94 output_magSignRecov_series_number = KWUtil::StringToNumber<MeasureType>(parser._scalars[
"output_magSignRecov_series_number"]);
97 if (!parser._scalars[
"parameter_to_map"].empty())
98 parameter_to_map = (calculatorsType_t) findInArray(lastCalculatorType+1, calculatorsTypeNames, parser._scalars[
"parameter_to_map"]);
99 parameter_type = (paramType_t)calculatorsParamsToCalculate[(
int)parameter_to_map];
100 if (!parser._scalars[
"fitting_method"].empty())
101 fitting_method = (fittersType_t) findInArray(lastFitterType+1, fittersTypeNames, parser._scalars[
"fitting_method"]);
102 if (!parser._scalars[
"model_type"].empty())
103 model_type = (modelType_t) findInArray(lastFunctorType + 1, modelTypeNames, parser._scalars[
"model_type"]);
104 if (!parser._scalars[
"sign_calc_method"].empty())
105 sign_calc_method = (signCalculatorsType_t) findInArray(lastSignCalculatorType+1, signCalculatorsTypeNames, parser._scalars[
"sign_calc_method"]);
106 if (!parser._scalars[
"start_point_calc_method"].empty())
107 start_point_calc_method = (startPointCalculatorsType_t) findInArray(lastStartPointCalculatorType+1, startPointCalculatorsTypeNames, parser._scalars[
"start_point_calc_method"]);
109 if (!parser._scalars[
"fTolerance"].empty())
110 fTolerance = KWUtil::StringToNumber<MeasureType>(parser._scalars[
"fTolerance"]);
111 if (!parser._scalars[
"max_function_evals"].empty())
112 max_function_evals = KWUtil::StringToNumber<MeasureType>(parser._scalars[
"max_function_evals"]);
113 if (!parser._scalars[
"use_gradient"].empty())
114 use_gradient = (
bool)KWUtil::StringToNumber<MeasureType>(parser._scalars[
"use_gradient"]);
116 copyStrVectorToMemberVector(parser._sequences[
"inversion_times"], inversion_times);
117 copyStrVectorToMemberVector(parser._sequences[
"echo_times"], echo_times);
118 copyStrVectorToMemberVector(parser._sequences[
"start_point"], start_point);
119 copyStrVectorToMemberVector(parser._sequences[
"noise"], noise);
121 if (!parser._scalars[
"mean_cut_off"].empty())
122 mean_cut_off = KWUtil::StringToNumber<MeasureType>(parser._scalars[
"mean_cut_off"]);
123 if (!parser._scalars[
"map_scale_factor"].empty())
124 map_scale_factor = KWUtil::StringToNumber<MeasureType>(parser._scalars[
"map_scale_factor"]);
125 if (!parser._scalars[
"use_colorbar"].empty())
126 use_colorbar = KWUtil::StringToNumber<MeasureType>(parser._scalars[
"use_colorbar"]);
127 if (!parser._scalars[
"number_of_threads"].empty())
128 number_of_threads = KWUtil::StringToNumber<MeasureType>(parser._scalars[
"number_of_threads"]);
132 template<
typename MeasureType >
137 template<
typename MeasureType >
141 for (
int i = 0; i < size; ++i){
142 std::string nameFromArray(nameArray[i]);
143 if (nameFromArray.compare(name) == 0){
147 std::string errorMessage =
"Option \"" + name +
"\" not found";
148 throw std::runtime_error(errorMessage);
151 template<
typename MeasureType >
156 for (
unsigned int i = 0; i < strVector.size(); ++i) {
157 memberVector.push_back(KWUtil::StringToNumber<MeasureType>(strVector[i]));
161 template<
typename MeasureType >
166 printf(
"#############################################\n");
167 printf(
" TOMATO %d.%d.%d CURRENTLY SELECTED options: \n", Tomato_VERSION_MAJOR, Tomato_VERSION_MINOR, Tomato_VERSION_PATCH);
168 printf(
"#############################################\n");
173 printf(
" dir_magnitude: %s ", dir_magnitude.c_str());
174 printf(
"\n dir_phase: %s ", dir_phase.c_str());
175 printf(
"\n dir_output_map: %s ", dir_output_map.c_str());
176 printf(
"\n dir_output_fitparams: %s ", dir_output_fitparams.c_str());
177 printf(
"\n dir_output_magSignRecov: %s ", dir_output_magSignRecov.c_str());
178 printf(
"\n output_map_series_instance_uid: %s ", output_map_series_instance_uid.c_str());
179 printf(
"\n output_fitparams_series_instance_uid: %s ", output_fitparams_series_instance_uid.c_str());
180 printf(
"\n output_magSignRecov_series_instance_uid: %s ", output_magSignRecov_series_instance_uid.c_str());
181 printf(
"\n output_map_series_number: %d ", output_map_series_number);
182 printf(
"\n output_fitparams_series_number: %d ", output_fitparams_series_number);
183 printf(
"\n output_magSignRecov_series_number: %d ", output_magSignRecov_series_number);
191 printf(
"\n fTolerance: %.2e", fTolerance);
193 printf(
"\n max_function_evals: %d", max_function_evals);
194 printf(
"\n use_gradient: %s", use_gradient ?
"1" :
"0");
200 printf(
"\n mean_cut_off: %.2f", mean_cut_off);
201 printf(
"\n map_scale_factor: %.2f", map_scale_factor);
202 printf(
"\n use_colorbar: %s", use_colorbar ?
"1" :
"0");
204 printf(
"\n number_of_threads: %d", number_of_threads);
205 if (calculation_time > 0) {
206 printf(
"\n calculation time: %.2fs", calculation_time);
212 template<
typename MeasureType >
217 throw std::runtime_error(
"Yaml parser not available");
219 if (dir_output_map.length() > 0){
220 std::string filePath = dir_output_map + KWUtil::PathSeparator() +
"tomato_output_config.yaml";
221 exportToYaml(filePath);
224 if (dir_output_fitparams.length() > 0){
225 std::string filePath = dir_output_fitparams + KWUtil::PathSeparator() +
"tomato_output_config.yaml";
226 exportToYaml(filePath);
229 if (dir_output_magSignRecov.length() > 0){
230 std::string filePath = dir_output_magSignRecov + KWUtil::PathSeparator() +
"tomato_output_config.yaml";
231 exportToYaml(filePath);
238 template<
typename MeasureType >
243 throw std::runtime_error(
"Yaml parser not available");
245 yaml_document_t document;
246 yaml_emitter_t emitter;
249 yaml_document_initialize(&document, NULL, NULL, NULL, 1, 1);
251 yaml_document_add_mapping(&document, (yaml_char_t*)YAML_DEFAULT_MAPPING_TAG, YAML_ANY_MAPPING_STYLE);
252 int mapping_node_number = (int)(document.nodes.top - document.nodes.start);
254 KWUtilYaml::addSequence(&document, mapping_node_number,
"files_magnitude", files_magnitude);
255 KWUtilYaml::addSequence(&document, mapping_node_number,
"files_phase", files_phase);
256 KWUtilYaml::addMapping(&document, mapping_node_number,
"dir_magnitude", dir_magnitude);
257 KWUtilYaml::addMapping(&document, mapping_node_number,
"dir_phase", dir_phase);
258 KWUtilYaml::addMapping(&document, mapping_node_number,
"dir_output_map", dir_output_map);
259 KWUtilYaml::addMapping(&document, mapping_node_number,
"dir_output_fitparams", dir_output_fitparams);
260 KWUtilYaml::addMapping(&document, mapping_node_number,
"dir_output_magSignRecov", dir_output_magSignRecov);
261 KWUtilYaml::addMapping(&document, mapping_node_number,
"output_map_series_instance_uid", output_map_series_instance_uid);
262 KWUtilYaml::addMapping(&document, mapping_node_number,
"output_fitparams_series_instance_uid", output_fitparams_series_instance_uid);
263 KWUtilYaml::addMapping(&document, mapping_node_number,
"output_magSignRecov_series_instance_uid", output_magSignRecov_series_instance_uid);
264 KWUtilYaml::addMapping(&document, mapping_node_number,
"output_map_series_number", KWUtil::NumberToString(output_map_series_number));
265 KWUtilYaml::addMapping(&document, mapping_node_number,
"output_fitparams_series_number", KWUtil::NumberToString(output_fitparams_series_number));
266 KWUtilYaml::addMapping(&document, mapping_node_number,
"output_magSignRecov_series_number", KWUtil::NumberToString(output_magSignRecov_series_number));
268 KWUtilYaml::addMapping(&document, mapping_node_number,
"parameter_to_map", calculatorsTypeNames[parameter_to_map]);
269 KWUtilYaml::addMapping(&document, mapping_node_number,
"fitting_method", fittersTypeNames[fitting_method]);
270 KWUtilYaml::addMapping(&document, mapping_node_number,
"model_type", modelTypeNames[model_type]);
271 KWUtilYaml::addMapping(&document, mapping_node_number,
"sign_calc_method" , signCalculatorsTypeNames[sign_calc_method]);
272 KWUtilYaml::addMapping(&document, mapping_node_number,
"start_point_calc_method", startPointCalculatorsTypeNames[start_point_calc_method]);
274 KWUtilYaml::addMapping(&document, mapping_node_number,
"fTolerance", KWUtil::NumberToString(fTolerance));
275 KWUtilYaml::addMapping(&document, mapping_node_number,
"max_function_evals", KWUtil::NumberToString(max_function_evals));
276 KWUtilYaml::addMapping(&document, mapping_node_number,
"use_gradient", use_gradient ?
"1" :
"0");
278 KWUtilYaml::addSequenceOfNumbers(&document, mapping_node_number,
"inversion_times", inversion_times);
279 KWUtilYaml::addSequenceOfNumbers(&document, mapping_node_number,
"echo_times", echo_times);
280 KWUtilYaml::addSequenceOfNumbers(&document, mapping_node_number,
"start_point", start_point);
281 KWUtilYaml::addSequenceOfNumbers(&document, mapping_node_number,
"noise", noise);
283 KWUtilYaml::addMapping(&document, mapping_node_number,
"mean_cut_off", KWUtil::NumberToString(mean_cut_off));
284 KWUtilYaml::addMapping(&document, mapping_node_number,
"map_scale_factor", KWUtil::NumberToString(map_scale_factor));
285 KWUtilYaml::addMapping(&document, mapping_node_number,
"use_colorbar", use_colorbar ?
"1" :
"0");
286 KWUtilYaml::addMapping(&document, mapping_node_number,
"number_of_threads", KWUtil::NumberToString(number_of_threads));
287 KWUtilYaml::addMapping(&document, mapping_node_number,
"calculation_time", KWUtil::NumberToString(calculation_time));
289 std::string tomato_version =
"v" + KWUtil::NumberToString(Tomato_VERSION_MAJOR) +
"." + KWUtil::NumberToString(Tomato_VERSION_MINOR);
290 KWUtilYaml::addMapping(&document, mapping_node_number,
"tomato_version", tomato_version);
292 unsigned char buffer[YAML_BUFFER_SIZE+1];
293 memset(buffer, 0, YAML_BUFFER_SIZE+1);
295 yaml_emitter_initialize(&emitter);
296 yaml_emitter_set_output_string(&emitter, buffer, YAML_BUFFER_SIZE, &written);
297 yaml_emitter_open(&emitter);
298 yaml_emitter_dump(&emitter, &document);
299 yaml_emitter_flush(&emitter);
300 yaml_emitter_close(&emitter);
302 FILE *file = fopen(filePath.c_str(),
"wb");
303 fprintf(file,
"%s", buffer);
312 #undef YAML_BUFFER_SIZE 314 #endif //Tomato_TomatoOPTIONS_HXX Definition: OxFactoryOfSignCalculators.h:43
Definition: OxFactoryOfModels.h:60
void printCurrent()
Definition: TomatoOptions.hxx:164
static void printVectorNewline(const std::string &name, const std::vector< TYPE > vector)
Definition: KWUtil.hxx:44
Definition: OxFactoryOfCalculators.h:76
int exportToYaml()
Definition: TomatoOptions.hxx:215
Definition: OxFactoryOfStartPointCalculators.h:40
Definition: OxFactoryOfFitters.h:73
int findInArray(int size, const char *nameArray[], std::string name)
Definition: TomatoOptions.hxx:140
static void printVector(const std::string &name, const std::vector< TYPE > vector)
Definition: KWUtil.hxx:35
Definition: OxFactoryOfCalculators.h:17
TomatoOptions()
Definition: TomatoOptions.hxx:24
Definition: OxCalculator.h:19
~TomatoOptions()
Definition: TomatoOptions.hxx:134