updatefile.cc
00001
00006 #include "Reader.hh"
00007 #include "RawWriter.hh"
00008 #include "ConfigHandler.hh"
00009 #include "CommandSwitchFunctions.hh"
00010 #include "EventHandler.hh"
00011 #include <time.h>
00012 #include <cstdlib>
00013
00014
00016 void SetOutputFile(RawWriter* writer, const char* inputfile){
00017 if( writer->GetFilename() == writer->GetDefaultFilename() ){
00018
00019 std::string fname(inputfile);
00020
00021 while(fname.find('/') != std::string::npos){
00022 fname = fname.substr(fname.find('/')+1);
00023 }
00024
00025 fname = fname.substr(0, fname.find('.'));
00026
00027 fname.append(".out");
00028 writer->SetFilename(fname);
00029 }
00030 }
00031
00033 int ProcessOneFile(const char* filename, int max_event=-1, int min_event=0)
00034 {
00035 Message(INFO)<<"\n***************************************\n"
00036 <<" Processing File "<<filename
00037 <<"\n***************************************\n";
00038 EventHandler* modules = EventHandler::GetInstance();
00039 modules->AllowDatabaseAccess(false);
00040 Reader reader(filename);
00041 if(!reader.IsOk())
00042 return 1;
00043 if(modules->Initialize()){
00044 Message(ERROR)<<"Unable to initialize all modules.\n";
00045 return 1;
00046 }
00047
00048
00049 time_t start_time = time(0);
00050 int evtnum = min_event;
00051 while(reader.IsOk() && !reader.eof()){
00052 if(max_event > 0 && evtnum >= max_event)
00053 break;
00054
00055 if(evtnum%1000 == 0)
00056 Message(INFO)<<"Processing event "<<evtnum<<std::endl;
00057
00058 RawEventPtr raw = reader.GetEventWithIndex(evtnum++);
00059 if(!raw){
00060 Message(ERROR)<<"Problem encountered reading event "<<evtnum<<std::endl;
00061 }
00062 modules->Process(raw);
00063
00064 }
00065
00066 modules->Finalize();
00067 Message(INFO)<<"Processed "<<evtnum<<" events in "
00068 <<time(0) - start_time<<" seconds. \n";
00069 return 0;
00070 }
00071
00072 int main(int argc, char** argv)
00073 {
00074 int max_event=-1, min_event = 0;
00075 ConfigHandler* config = ConfigHandler::GetInstance();
00076 config->SetProgramUsageString("updatefile [options] <file1> [<file2>, ... ]");
00077 config->AddCommandSwitch(' ',"max","last event to process",
00078 CommandSwitch::DefaultRead<int>(max_event),
00079 "event");
00080 config->AddCommandSwitch(' ',"min","first event to process",
00081 CommandSwitch::DefaultRead<int>(min_event),
00082 "event");
00083
00084 EventHandler* modules = EventHandler::GetInstance();
00085 RawWriter* writer = modules->AddModule<RawWriter>();
00086
00087
00088 if(config->ProcessCommandLine(argc,argv))
00089 return -1;
00090
00091 if(argc < 2){
00092 Message(ERROR)<<"Incorrect number of arguments: "<<argc<<std::endl;
00093 config->PrintSwitches(true);
00094 }
00095
00096 for(int i = 1; i<argc; i++){
00097 if(i > 1)
00098 writer->SetFilename(writer->GetDefaultFilename());
00099 SetOutputFile(writer, argv[i] );
00100 if(ProcessOneFile(argv[i], max_event, min_event)){
00101 Message(ERROR)<<"Error processing file "<<argv[i]<<"; aborting.\n";
00102 return 1;
00103 }
00104 }
00105 return 0;
00106 }