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     //set the filename to be the input filename + _v1
00019     std::string fname(inputfile);
00020     //remove leading directories
00021     while(fname.find('/') != std::string::npos){
00022       fname = fname.substr(fname.find('/')+1);
00023     }
00024     //remove filename suffix
00025     fname = fname.substr(0, fname.find('.'));
00026     //append the new filename
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   //read through the file and process all events
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     //Message(DEBUG)<<"*************Event "<<evtnum<<"**************\n";
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   //finish up
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   //disable saving the config file by default
00087   //writer->SetSaveConfig(false);
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 }
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Defines

Generated on 20 Jun 2014 for daqman by  doxygen 1.6.1