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