1 #include "Parameters.hxx" 12 Parameters::Parameters() {
21 fReadParamOverrideFilePointPassed=
false;
24 Parameters::~Parameters() {
28 void Parameters::ReadInputFile(TString fileName, TString dirName, UInt_t tryFileMode,
bool fixParameters) {
32 if (!dirName.CompareTo(
""))
33 fullFileName = fileName.Data();
35 fullFileName = dirName.Data() + TString(
"/") + fileName.Data();
37 ifstream inputFile(fullFileName.Data(), ios::in);
43 std::cout <<
"\n***** Parameters::ReadInputFile *****\n" <<
"Cannot open input file '" << fullFileName.Data() <<
"'." << std::endl;
47 std::cout <<
" --> " <<
"This package has no parameters file !!!" << std::endl;
49 std::cerr <<
"\n***** Parameters::ReadInputFile *****\n" <<
"Cannot open input file '" << fullFileName.Data() <<
"'." << std::endl;
55 std::cout << std::endl;
62 string parameterValueUnit;
63 string parameterValue;
65 while (inputFile >> inputString) {
66 if (inputState == 0) {
67 if (inputString ==
"<")
69 }
else if (inputState == 1) {
70 parameterName = inputString;
72 }
else if (inputState == 2) {
73 if (inputString ==
"=")
76 std::cerr <<
"\n***** Parameters::ReadInputFile *****\n" 77 "Input file '" << fileName <<
"'. Last parameter '" << parameterName <<
"'.\n" <<
"Cannot find symbol '='.\n" 78 <<
"Badly formatted parameters file." << std::endl;
81 }
else if (inputState == 3) {
83 parameterValue = inputString.c_str();
84 parameterValueUnit = inputString;
86 }
else if (inputState == 4) {
87 if (inputString ==
">") {
90 if (fixedParameters.find(parameterName) == fixedParameters.end()) {
91 mapOfParameters[parameterName] = parameterValue;
94 fixedParameters.insert(parameterName);
97 }
else if (inputString ==
"<") {
98 std::cerr <<
"\n***** Parameters::ReadInputFile *****\n" <<
"Input file '" << fileName <<
"'. Last parameter '" << parameterName
99 <<
"'.\n" <<
"Unexpected symbol '<'.\n" <<
"Badly formatted parameters file." << std::endl;
103 parameterValueUnit.append(
" ");
104 parameterValueUnit.append(inputString);
108 parameterValue = fUnitsParser->Convert2DoubleWithUnit(parameterValueUnit);
113 if (inputState != 0) {
114 std::cerr <<
"\n***** Parameters::ReadInputFile *****\n" <<
"Input file '" << fileName <<
"'. Last parameter '" << parameterName
115 <<
"'.\n" <<
"Cannot find symbol '>' at the end of file.\n" <<
"Badly formatted parameters file." << std::endl;
122 void Parameters::PrintListOfParameters() {
124 std::cout <<
"***** Parameters::PrintListOfParameters *****" << std::endl;
125 std::cout <<
"List of parameters:" << std::endl;
127 for (mapIterator i = mapOfParameters.begin(); i != mapOfParameters.end(); i++)
128 std::cout <<
" " << (*i).first <<
" = " << (*i).second << std::endl;
130 std::cout << std::endl;
137 std::cout <<
"Load parameters file for a list of packages package: fixed = " << fixed << std::endl;
138 for (std::vector<std::string>::const_iterator it=packageNames.begin();it!=packageNames.end();it++){
139 LoadParametersFile(*it, 1, fixed);
145 std::cout <<
"Trying to load parameters file for package: " << packageName;
147 std::cout << std::endl;
151 TString fileName = packageName +
".parameters.dat";
153 packageName.ToUpper();
155 TString packageROOT = packageName +
"ROOT";
156 TString dirName = getenv(packageROOT.Data()) + TString(
"/parameters");
160 ReadInputFile(fileName, dirName, tryFileMode, fixed);
164 int Parameters::TryLoadingParametersFile(std::string parameterName) {
166 std::cout <<
"Trying to load parameters file for parameter: " << parameterName << std::endl;
169 int pos = parameterName.find(
".");
170 TString packageName(parameterName.c_str(), pos);
173 TString fileName = packageName +
".parameters.dat";
176 packageName.ToUpper();
177 TString packageROOT = packageName +
"ROOT";
178 TString dirName = getenv(packageROOT.Data()) + TString(
"/parameters/");
181 ReadInputFile(fileName, dirName, 0);
184 mapIterator i = mapOfParameters.find(parameterName);
185 if (i != mapOfParameters.end())
194 std::cout <<
"Using Parameters override file = " << filename << std::endl;
199 ReadInputFile(filename,
"", 2,
true);
204 mapIterator i = mapOfParameters.find(parameterName);
206 if (i != mapOfParameters.end())
213 return TryLoadingParametersFile(parameterName);
218 if (HasParameter(parameterName)) {
219 CheckReadParamOverrideFilePointPassed(parameterName);
220 return atoi(mapOfParameters[parameterName].c_str());
222 std::cerr <<
"\n***** Parameters::GetParameterAsInteger *****\n" <<
"Cannot find parameter '" << parameterName <<
"'." << std::endl;
230 if (HasParameter(parameterName)) {
231 CheckReadParamOverrideFilePointPassed(parameterName);
232 return atof(mapOfParameters[parameterName].c_str());
234 std::cerr <<
"\n***** Parameters::GetParameterAsDouble *****\n" <<
"Cannot find parameter '" << parameterName <<
"'." << std::endl;
243 if (HasParameter(parameterName)) {
244 CheckReadParamOverrideFilePointPassed(parameterName);
245 return mapOfParameters[parameterName];
247 std::cerr <<
"\n***** Parameters::GetParameterAsString *****\n" <<
"Cannot find parameter '" << parameterName <<
"'." << std::endl;
251 return std::string();
255 mapOfParameters.clear();
261 if (!fReadParamOverrideFilePointPassed){
262 std::cerr <<
"ERROR: Parameter '" << parameterName <<
"'" << std::endl
263 <<
"should no be accessed in analysis algorithm constructors or globally" << std::endl
264 <<
"since it will not be overwritten when an override parameter file is used (-p option)" << std::endl
265 <<
"Please move the GetParameter calls to the Initialize method of the analysis algorithm." << std::endl;
int GetParameterI(std::string)
Get parameter. Value is returned as integer.
void LoadParametersFiles(const std::vector< std::string > &packageNames, bool fixed=false)
Load the parameters for a list of packages.
std::string GetParameterS(std::string)
Get parameter. Value is returned as string.
This exception class indicates an error when reading a parameters file.
void ReadParamOverrideFile(TString filename)
bool HasParameter(std::string)
Check if Parameter is stored in database.
double GetParameterD(std::string)
Get parameter. Value is returned as double.
static Parameters & Get(void)
int LoadParametersFile(TString packageName, UInt_t tryFileMode=0, bool fixParameters=false)
Load the parameters for a given package - needed for multi-threading.
void ClearMapOfParameters()
Clear all the parameters that have been read.
void CheckReadParamOverrideFilePointPassed(std::string parameterName)