/[PAMELA software]/yoda/techmodel/techmodelreader.cpp
ViewVC logotype

Diff of /yoda/techmodel/techmodelreader.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.6 by kusanagi, Thu Aug 26 08:21:31 2004 UTC revision 6.6 by mocchiut, Mon Oct 16 10:59:14 2006 UTC
# Line 1  Line 1 
1    
2  #include "log4cpp/Category.hh"  #include <log4cxx/logger.h>
3  #include "log4cpp/PropertyConfigurator.hh"  #include <log4cxx/propertyconfigurator.h>
 #include "log4cpp/RollingFileAppender.hh"  
 #include "log4cpp/PatternLayout.hh"  
   
 #include "TROOT.h"  
   
 #include "TechmodelPamelaRun.h"  
4  #include "EventReader.h"  #include "EventReader.h"
 #include <fstream>  
 #include <cstdlib>  
 #include <stream.h>  
5  #include <time.h>  #include <time.h>
6    
7  extern "C" {  extern "C" {
8  //#include "DirectoryStructure.h"      #include <dirent.h>
 #include <dirent.h>  
9  }  }
10    
   
11  using namespace pamela;  using namespace pamela;
12    using namespace log4cxx;
13    using namespace std;
14  using namespace pamela::techmodel;  using namespace pamela::techmodel;
15    
16  static log4cpp::Category& cat = log4cpp::Category::getInstance("pamela.techmodel.TechmodelReader");  static LoggerPtr logger = Logger::getLogger(_T("pamela.techmodel.TechmodelReader"));
17    
18    int GetYODAver(){
19      return(60312);
20    };
21    
22  int main(int argc, char* argv[]) {  int main(int argc, char* argv[]) {
23        
24        stringstream oss;
25        int maxPackets = 0;
26        bool multiFile = 0;
27        short compression = 3;
28        char nomeFileLog[L_tmpnam];
29        mkstemp(nomeFileLog);
30        DIR *dirp;
31        char *outDir = "";
32        
33        //---------------- Log4cxx configuration-----------------------------------------------
34        //BasicConfigurator::configure();
35        //Retrieve the rootLogger and append to it a default FileAppender.
36        //Note that the priority level of the rootLogger (defined in log4cxx.conf) is unmodified
37        //LoggerPtr rootLogger = Logger::getRootLogger();
38    
39        //FileAppender *fileAppender = new FileAppender();
40        //fileAppender->setFile(pathLog);
41        //fileAppender->setAppend(false);
42        //fileAppender->setBufferedIO(true); //the default size is 8k
43        //fileAppender->setBufferSize(1000000);
44        //fileAppender->activateOptions();
45        //fileAppender->setLayout(new PatternLayout());
46    
47        //FileAppender *fileAppender = new FileAppender(new PatternLayout(), pathLog, false, true, 10000);
48        //rootLogger->addAppender(fileAppender);
49        //rootLogger->removeAppender('A1');
50        //---------------- Log4cxx configuration-----------------------------------------------
51    
52    // Check file name    // Check file name
53    if (argc != 2){    
54      cat.info("You have forgotten the file name");    if (argc < 2){
55        //logger->info(_T("You have forgotten the file name."));
56        cout << "You have forgotten the file name. \n";
57        cout << "Try '-help' for more information. \n";
58      exit(1);      exit(1);
59    }      }  
   
   std::ifstream from (argv[1]);  
   if (!from) cat.info("The file does not exist");  
60        
61      if (!strcmp(argv[1], "-help")){
62            cout << "Usage: yoda FILE [OPTION] \n";
63            cout << "\t -help               print this help and exit \n";
64            cout << "\t -version            print version number \n";
65            cout << "\t -p                  maximum number of packets to process [default all] \n";
66            cout << "\t -multi              generate multiple root files \n";
67            cout << "\t -c                  set the compression level for the generated root file(s). Values: [0,9] [default = 3]\n";
68            cout << "\t -o                  set the output directory for the generated root file(s). [default = $YODA_DATA]. Notice that in the same directory have to be prensent a log4cxx configuration file called \"log4cxx.conf\" \n";
69            exit(1);
70      }
71    
72      if (!strcmp(argv[1], "-version")){
73        printf(" Version %i \n",GetYODAver());
74        //        cout << "$Name:  $ $Revision: 6.5 $" << "\n";
75            exit(1);
76      }
77    
78      ifstream from (argv[1]);
79      if (!from) {
80        //logger->info(_T("The file does not exist."));
81        cout << "The file does not exist. \n";
82        exit(1);
83      }  
84    
85    /*try {    for (int i = 2; i < argc; i++){
86      log4cpp::PropertyConfigurator::configure("/home/kusanagi/yoda/techmodel/YodaLog.conf");      if (!strcmp(argv[i], "-p")){
87    } catch (log4cpp::ConfigureFailure& f) {          if (++i >= argc){
88      std::cerr << "Logging Configure Problem " << f.what() << std::endl;              cerr << "-p needs arguments. \n";
89    }*/              cout << "Try '-help' for more information. \n";
90                exit(1);
91            }
92  //--------------------------------------------------          if (isdigit(*argv[i]) && (atoi(argv[i]) > 0)) {
93  //This is the configuration for the Yoda Logger              maxPackets = atoi(argv[i]);
94  //The parameters in the RollingFileAppender means          } else {
95  // default           ------------>the selected category              //logger->info(_T("The file does not exist."));
96  // YodaLog.txt  ------------>the LogFile name              cerr << "-p needs a integer value. \n";
97  // 1000              ------------>The max size (in Kb) of the LogFile              cout << "Try '-help' for more information. \n";
98  // 5                     ------------>How many times the file will be backup              exit(1);
99     char nomeFileLog[L_tmpnam];          }
100     tmpnam(nomeFileLog);          continue;
101        }
102      DIR *dirp;  
103     std::string pathDir((char*)getenv("YODA_DATA"));      if (!strcmp(argv[i], "-multi")) multiFile = 1;
104     std::string pathLog = nomeFileLog;  
105     log4cpp::Category& root = log4cpp::Category::getRoot();      if (!strcmp(argv[i], "-c")){
106     try{          if (++i >= argc){
107      std::string initFileName = pathDir + "/log4cpp.conf";              cerr << "-c needs arguments. \n";
108      log4cpp::PropertyConfigurator::configure(initFileName);              cout << "Try '-help' for more information. \n";
109     } catch (log4cpp::ConfigureFailure& f) {              exit(1);
110      std::cerr << "Could not load log configuration from file: " << f.what() << std::endl          }
111                << "Using default setup (all msgs to stdout)" << std::endl;          if ((isdigit(*argv[i])) && ( (atoi(argv[i]) >= 0) && (atoi(argv[i]) <= 9))) {
112      log4cpp::Appender* appender;              compression = atoi(argv[i]);
113      appender = new log4cpp::FileAppender("default", pathLog.c_str(), false);          } else {
114      // set a nice layout              //logger->info(_T("The file does not exist."));
115      log4cpp::PatternLayout * pl = new log4cpp::PatternLayout();              cerr << "-c needs a integer value beetween 0 and 9. \n";
116      pl->setConversionPattern("%d{%Y/%m/%d %H:%M:%S.%l} %p %c - %m");              cout << "Try '-help' for more information. \n";
117      appender->setLayout(pl);              exit(1);
118      //log4cpp::Category& cat  = log4cpp::Category::getInstance("cat");          }
119      // remove default appender          continue;
120      cat.removeAllAppenders();      }
     // use this appender for all categories  
     cat.addAppender(appender);  
121            
122      // log messages from all levels.      if (!strcmp(argv[i], "-o")){
123      //cat.setPriority(log4cpp::Priority::DEBUG);          if (++i >= argc){
124      //cat.setPriority(log4cpp::Priority::WARN);              cerr << "-o needs arguments. \n";
125      cat.setPriority(log4cpp::Priority::INFO);              cout << "Try '-help' for more information. \n";
126     }              exit(1);
127            }
128            DIR* tempdir;
129            if ((tempdir = opendir(argv[i])) != 0) {
130                outDir = argv[i];
131                closedir(tempdir);
132            } else {
133                //logger->info(_T("The file does not exist."));
134                cerr << "-o needs an existing/accessable directory. \n";
135                cout << "Try '-help' for more information. \n";
136                exit(1);
137            }
138            continue;
139        }
140        
141      }
142    
143      if (outDir == ""){
144            try {
145                    outDir = getenv("YODA_DATA");
146                    if (getenv("YODA_DATA") == NULL) throw NotFoundEnvironmentVarException("The variable YODA_DATA has not been found.");
147            } catch (NotFoundEnvironmentVarException exc) {
148                    cout << "The variable YODA_DATA has not been found. \n";
149                    cout << "Please check your environment variables \n";
150                    oss.str("");
151                    oss << exc.print();
152                    logger->fatal(oss.str().c_str());
153                    exit(1);
154            }
155      }
156      
157        string pathDir(outDir);
158        string pathLog = nomeFileLog;
159        //Define the configuration file to be used on log4cxx
160        PropertyConfigurator::configure(pathDir + "/log4cxx.conf");
161    
162      time_t rawtime;      time_t rawtime;
163      struct tm * timeinfo;      struct tm * timeinfo;
   
164      time ( &rawtime );      time ( &rawtime );
165      timeinfo = localtime ( &rawtime );      timeinfo = localtime ( &rawtime );
166  //--------------------------------------------------        
167      cat.log(log4cpp::Priority::INFO,"Importance depends on context");      oss.str("");
168      cat << log4cpp::Priority::INFO      oss << "<-------------------------------START UNPACKING------------------------------->\n"
169      << "<-------------------------------START UNPACKING------------------------------->\n"          << " Starting the program at: " << asctime (timeinfo) << " Opening file: " << argv[1];
170      << " Starting the program at: " << asctime (timeinfo) << " Opening file: " << argv[1]      logger->info(oss.str().c_str());
171      << "\n \n" << log4cpp::CategoryStream::ENDLINE;    
172      
173    gROOT->SetBatch(kTRUE);    gROOT->SetBatch(kTRUE);
174      EventReader *reader = new EventReader(maxPackets);
   EventReader Reader;  
175    
176    int num = 0;    int num = 0;
177    TechmodelPamelaRun Run(argv[1]);    TechmodelPamelaRun Run(argv[1], outDir, multiFile, compression);
178    Reader.Init(&Run);    reader->Init(&Run);
179      cat << log4cpp::Priority::INFO  
180      << "Init successul ok" << asctime (timeinfo) << log4cpp::CategoryStream::ENDLINE;     oss.str("");
181    Reader.RunEvent(num); //TBD --- eliminate the runNumber     oss << "Init successul ok" << asctime (timeinfo);
182    Reader.Finish();     logger->debug(oss.str().c_str());
183    
184      reader->RunEvent(num); //TBD --- eliminate the runNumber
185      reader->Finish();
186    Run.WriteFiles();    Run.WriteFiles();
187      cat << log4cpp::Priority::INFO  
188          << "<-------------------------------END UNPACKING------------------------------->"    logger->info("<-------------------------------END UNPACKING------------------------------->\n");
189          << "\n " << log4cpp::CategoryStream::ENDLINE;    printf("Finished, exiting...\n");
190      log4cpp::Category::shutdown();  
191    std::string command;    //Momentarly suspended the save  
192    //command = "mv " + pathLog + "  " + pathDir + "/" + Run.GetRun() + "/YodaLog.txt";    //system(command.c_str());
   command = "mv " + pathLog + "  " + pathDir + "/" + Run.GetRun() + "/YodaLog.txt";  
   cat.info(command);  
   system(command.c_str());  
193  }  }
194    

Legend:
Removed from v.1.6  
changed lines
  Added in v.6.6

  ViewVC Help
Powered by ViewVC 1.1.23