1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160
|
/* Copyright (c) 2008-2022 the MRtrix3 contributors.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* Covered Software is provided under this License on an "as is"
* basis, without warranty of any kind, either expressed, implied, or
* statutory, including, without limitation, warranties that the
* Covered Software is free of defects, merchantable, fit for a
* particular purpose or non-infringing.
* See the Mozilla Public License v. 2.0 for more details.
*
* For more details, see http://www.mrtrix.org/.
*/
#include "app.h"
#include "debug.h"
#include "header.h"
#include "file/path.h"
#include "file/config.h"
#define MRTRIX_CONFIG_FILE "mrtrix.conf"
#define MRTRIX_SYS_CONFIG_FILE "/etc/" MRTRIX_CONFIG_FILE
#define MRTRIX_USER_CONFIG_FILE "." MRTRIX_CONFIG_FILE
namespace MR
{
namespace File
{
KeyValues Config::config;
//ENVVAR name: MRTRIX_CONFIGFILE
//ENVVAR This can be used to set the location of the system-wide
//ENVVAR configuration file. By default, this is ``/etc/mrtrix.conf``.
//ENVVAR This can be useful for deployments where access to the system's
//ENVVAR ``/etc`` folder is problematic, or to allow different versions of
//ENVVAR the software to have different configurations, etc.
void Config::init ()
{
const char* sysconf_location = getenv ("MRTRIX_CONFIGFILE");
if (!sysconf_location)
sysconf_location = MRTRIX_SYS_CONFIG_FILE;
if (Path::is_file (sysconf_location)) {
INFO (std::string("reading config file \"") + sysconf_location + "\"...");
try {
KeyValue::Reader kv (sysconf_location);
while (kv.next()) {
config[kv.key()] = kv.value();
}
}
catch (...) { }
} else {
DEBUG (std::string ("No config file found at \"") + sysconf_location + "\"");
}
std::string path = Path::join (Path::home(), MRTRIX_USER_CONFIG_FILE);
if (Path::is_file (path)) {
INFO ("reading config file \"" + path + "\"...");
try {
KeyValue::Reader kv (path);
while (kv.next()) {
config[kv.key()] = kv.value();
}
}
catch (...) { }
} else {
DEBUG ("No config file found at \"" + path + "\"");
}
auto opt = App::get_options ("config");
for (const auto& keyval : opt)
config[std::string(keyval[0])] = std::string(keyval[1]);
//CONF option: RealignTransform
//CONF default: 1 (true)
//CONF A boolean value to indicate whether all images should be realigned
//CONF to an approximately axial orientation at load.
Header::do_realign_transform = get_bool("RealignTransform", true);
}
bool Config::get_bool (const std::string& key, bool default_value)
{
std::string value = get (key);
if (value.empty())
return default_value;
try {
return to<bool> (value);
}
catch (...) {
WARN ("malformed boolean entry \"" + value + "\" for key \"" + key + "\" in configuration file - ignored");
return default_value;
}
}
int Config::get_int (const std::string& key, int default_value)
{
std::string value = get (key);
if (value.empty())
return default_value;
try {
return to<int> (value);
}
catch (...) {
WARN ("malformed integer entry \"" + value + "\" for key \"" + key + "\" in configuration file - ignored");
return default_value;
}
}
float Config::get_float (const std::string& key, float default_value)
{
std::string value = get (key);
if (value.empty())
return default_value;
try {
return to<float> (value);
}
catch (...) {
WARN ("malformed floating-point entry \"" + value + "\" for key \"" + key + "\" in configuration file - ignored");
return default_value;
}
}
void Config::get_RGB (const std::string& key, float* ret, float default_R, float default_G, float default_B)
{
std::string value = get (key);
if (value.size()) {
try {
vector<default_type> V (parse_floats (value));
if (V.size() < 3)
throw Exception ("malformed RGB entry \"" + value + "\" for key \"" + key + "\" in configuration file - ignored");
ret[0] = V[0];
ret[1] = V[1];
ret[2] = V[2];
}
catch (Exception) { }
}
else {
ret[0] = default_R;
ret[1] = default_G;
ret[2] = default_B;
}
}
}
}
|