Newer
Older
/*****************************************************************************
* Copyright (C) 2009-2013 this file is part of the NPTool Project *
* *
* For the licensing terms see $NPTOOL/Licence/NPTool_Licence *
* For the list of contributors see $NPTOOL/Licence/Contributors *
*****************************************************************************/
/*****************************************************************************
* Original Author: A. MATTA contact address: matta@ipno.in2p3.fr *
* *
* Creation Date : 21/07/09 *
* Last update : *
*---------------------------------------------------------------------------*
* Decription: This class is a singleton class which deals with input *
* arguments of the different NPTool programm (NPS and NPA) *
*---------------------------------------------------------------------------*
* Comment: The singleton form allow users to call the object from anywhere *
* in the code *
* *
* *
*****************************************************************************/
#include "NPOptionManager.h"
#include <cstdlib>
NPOptionManager* NPOptionManager::instance = 0 ;
NPOptionManager* NPOptionManager::getInstance(int argc, char** argv)
{
if (instance == 0) instance = new NPOptionManager(argc, argv);
return instance ;
NPOptionManager* NPOptionManager::getInstance(string arg){
if (instance == 0) instance = new NPOptionManager(arg);
return instance ;
}
void NPOptionManager::ReadTheInputArgument(int argc, char** argv){
// Default Setting
fDefaultReactionFileName = "defaultReaction.reaction";
fDefaultDetectorFileName = "defaultDetector.detector";
fDefaultOutputFileName = "myResult.root";
fDefaultRunToReadFileName = "defaultRunToTreat.txt";
fDefaultCalibrationFileName = "defaultCalibration.txt";
// Assigned values
fReactionFileName = fDefaultReactionFileName;
fDetectorFileName = fDefaultDetectorFileName;
fOutputFileName = fDefaultOutputFileName;
fRunToReadFileName = fDefaultRunToReadFileName;
fCalibrationFileName = fDefaultCalibrationFileName;
fDisableAllBranchOption = false;
fInputPhysicalTreeOption = false;
for (int i = 0; i < argc; i++) {
string argument = argv[i];
if (argument == "-H" || argument == "-h" || argument == "--help") DisplayHelp();
else if (argument == "--event-generator" && argc >= i + 1) fReactionFileName = argv[++i] ;
else if (argument == "-E" && argc >= i + 1) fReactionFileName = argv[++i] ;
else if (argument == "--detector" && argc >= i + 1) fDetectorFileName = argv[++i] ;
else if (argument == "-D" && argc >= i + 1) fDetectorFileName = argv[++i] ;
else if (argument == "--output" && argc >= i + 1) fOutputFileName = argv[++i] ;
else if (argument == "-O" && argc >= i + 1) fOutputFileName = argv[++i] ;
else if (argument == "--run" && argc >= i + 1) fRunToReadFileName = argv[++i] ;
else if (argument == "-R" && argc >= i + 1) fRunToReadFileName = argv[++i] ;
else if (argument == "--cal" && argc >= i + 1) fCalibrationFileName = argv[++i] ;
else if (argument == "-C" && argc >= i + 1) fCalibrationFileName = argv[++i] ;
else if (argument == "-V" && argc >= i + 1) fVerboseLevel = atoi(argv[++i]) ;
else if (argument == "--verbose" && argc >= i + 1) fVerboseLevel = atoi(argv[++i]) ;
else if (argument == "--disable-branch") fDisableAllBranchOption = true ;
else if (argument == "--input-physical") fInputPhysicalTreeOption = true ;
else if (argument == "-IP") fInputPhysicalTreeOption = true ;
else if (argument == "-GH") fGenerateHistoOption = true ;
else if (argument == "--generate-histo") fGenerateHistoOption = true ;
else if (argument == "--proof") fPROOFMode = true ;
//else ;
}
CheckArguments();
NPOptionManager::NPOptionManager(int argc, char** argv){
ReadTheInputArgument(argc,argv);
}
NPOptionManager::NPOptionManager(string arg)
{
vector<char *> args;
istringstream iss(arg);
string token;
while(iss >> token) {
char *arg = new char[token.size() + 1];
copy(token.begin(), token.end(), arg);
arg[token.size()] = '\0';
args.push_back(arg);
}
args.push_back(0);
ReadTheInputArgument(args.size()-1, &args[0]);
for(size_t i = 0; i < args.size(); i++)
delete[] args[i];
}
void NPOptionManager::CheckArguments()
{
CheckEventGenerator();
CheckDetectorConfiguration();
}
void NPOptionManager::CheckEventGenerator()
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
{
bool checkFile = true;
// NPTool path
string GlobalPath = getenv("NPTOOL");
string StandardPath = GlobalPath + "/Inputs/EventGenerator/" + fReactionFileName;
// ifstream to configfile
ifstream ConfigFile;
// test if config file is in local path
ConfigFile.open(fReactionFileName.c_str());
if (!ConfigFile.is_open()) {
ConfigFile.open(StandardPath.c_str());
if (!ConfigFile.is_open()) { // if not, assign standard path
checkFile = false;
}
else {
fReactionFileName = StandardPath;
}
}
if (!checkFile && fReactionFileName != fDefaultReactionFileName) { // if file does not exist
SendErrorAndExit("EventGenerator");
}
// close ConfigFile
ConfigFile.close();
}
void NPOptionManager::CheckDetectorConfiguration()
{
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
bool checkFile = true;
// NPTool path
string GlobalPath = getenv("NPTOOL");
string StandardPath = GlobalPath + "/Inputs/DetectorConfiguration/" + fDetectorFileName;
// ifstream to configfile
ifstream ConfigFile;
// test if config file is in local path
ConfigFile.open(fDetectorFileName.c_str());
if (!ConfigFile.is_open()) {
ConfigFile.open(StandardPath.c_str());
if (!ConfigFile.is_open()) { // if not, assign standard path
checkFile = false;
}
else {
fDetectorFileName = StandardPath;
}
}
if (!checkFile && fDetectorFileName != fDefaultDetectorFileName) { // if file does not exist
SendErrorAndExit("DetectorConfiguration");
}
// close ConfigFile
ConfigFile.close();
// This method tests if the input files are the default ones
bool NPOptionManager::IsDefault(const char* type) const
{
bool result = false;
string stype = type;
if (stype == "EventGenerator") {
if (fReactionFileName == fDefaultReactionFileName) result = true;
}
else if (stype == "DetectorConfiguration") {
if (fDetectorFileName == fDefaultDetectorFileName) result = true;
}
else if (stype == "Calibration") {
if (fCalibrationFileName == fDefaultCalibrationFileName) result = true;
}
else if (stype == "RunToTreat") {
if (fRunToReadFileName == fDefaultRunToReadFileName) result = true;
}
else {
cout << "NPOptionManager::IsDefault() unkwown keyword" << endl;
}
return result;
}
// This method tests if the input files are the default ones
void NPOptionManager::SendErrorAndExit(const char* type) const
{
string stype = type;
if (stype == "EventGenerator") {
cout << endl;
cout << "********************************** Error **********************************" << endl;
cout << "* No event generator file found in $NPTool/Inputs/EventGenerator or local directories *" << endl;
cout << "***************************************************************************************" << endl;
cout << endl;
exit(1);
}
else if (stype == "DetectorConfiguration") {
cout << endl;
cout << "*********************************** Error ***********************************" << endl;
cout << "* No detector geometry file found in $NPTool/Inputs/EventGenerator or local directories *" << endl;
cout << "*****************************************************************************************" << endl;
cout << endl;
exit(1);
}
else if (stype == "Calibration") {
}
else if (stype == "RunToTreat") {
}
else {
cout << "NPOptionManager::SendErrorAndExit() unkwown keyword" << endl;
}
void NPOptionManager::DisplayHelp()
cout << endl << "----NPOptionManager Help----" << endl << endl ;
cout << "List of Option " << endl ;
cout << "\t --help -H -h\t \t \t \t \t \t \t Display this help message" << endl ;
cout << "\t --detector -D <arg>\t \t \t \t \t \t Set arg as the detector configuration file" << endl ;
cout << "\t --event-generator -E <arg>\t \t \t \t \t Set arg as the event generator file" << endl ;
cout << "\t --output -O <arg>\t \t \t \t \t \t Set arg as the Output File Name (output tree)" << endl ;
cout << "\t --verbose -V <arg>\t \t \t \t \t \t Set the verbose level of some of the object, 0 for nothing, 1 for normal printout. Error and warning are not affected" << endl ;
cout << endl << "NPAnalysis only:"<<endl;
cout << "\t --run -R <arg>\t \t \t \t \t \t \t Set arg as the run to read file list" << endl ;
cout << "\t --cal -C <arg>\t \t \t \t \t \t \t Set arg as the calibration file list" << endl ;
cout << "\t --disable-branch\t \t \t \t \t \t Disable of branch of Input tree except the one of the detector (faster)" << endl ;
cout << "\t --generate-histo -GH\t \t \t \t \t \t Instantiate the T*Spectra class of each detector" << endl ;
cout << "\t --input-physical -IP\t \t \t \t \t \t Consider the Input file is containing Physics Class instead of Data Class. Output branches associate to the detector are not activated" << endl ;
cout << endl << endl ;
// exit current program
exit(1);
void NPOptionManager::Destroy()
{
if (instance != 0) {
delete instance;
instance = 0;
}