#include <stdio.h>
#include <sys/time.h>
#include <assert.h>
#include <signal.h>
#include <errno.h>
#include <stdlib.h>
#include <string.h>
#include "TMidasOnline.h"
#include "TMidasEvent.h"
#include "TMidasFile.h"
#include "VirtualOdb.h"
#include <vector>
Go to the source code of this file.
Functions | |
void | HandleMidasEvent (TMidasEvent &event) |
int | ProcessMidasFile (const char *fname) |
void | help () |
int | main (int argc, char *argv[]) |
Variables | |
VirtualOdb * | gOdb = NULL |
int | gEventCutoff = 0 |
bool | gSaveOdb = false |
bool | gPrintBank = false |
void HandleMidasEvent | ( | TMidasEvent & | event | ) |
Definition at line 35 of file event_dump.cxx.
References gPrintBank.
00036 { 00037 int eventId = event.GetEventId(); 00038 if (gPrintBank) 00039 event.Print("a"); 00040 else 00041 event.Print(); 00042 }
void help | ( | ) |
Definition at line 217 of file event_dump.cxx.
00218 { 00219 printf("\nUsage:\n"); 00220 printf("\n./event_dump.exe [-h] [-Hhostname] [-Eexptname] [-p] [-O] [-eMaxEvents] [file1 file2 ...]\n"); 00221 printf("\n"); 00222 printf("\t-h: print this help message\n"); 00223 printf("\t-Hhostname: connect to MIDAS experiment on given host\n"); 00224 printf("\t-Eexptname: connect to this MIDAS experiment\n"); 00225 printf("\t-O: save ODB from midas data file into odbNNNN.xml or .odb file\n"); 00226 printf("\t-e: Number of events to read from input data files\n"); 00227 printf("\t-p: Print bank contents\n"); 00228 printf("\n"); 00229 printf("Example1: print online events: ./event_dump.exe\n"); 00230 printf("Example2: print events from file: ./event_dump.exe /data/alpha/current/run00500.mid.gz\n"); 00231 exit(1); 00232 }
int main | ( | int | argc, | |
char * | argv[] | |||
) |
Definition at line 236 of file event_dump.cxx.
References gEventCutoff, gPrintBank, gSaveOdb, help(), and ProcessMidasFile().
00237 { 00238 setbuf(stdout,NULL); 00239 setbuf(stderr,NULL); 00240 00241 signal(SIGILL, SIG_DFL); 00242 signal(SIGBUS, SIG_DFL); 00243 signal(SIGSEGV, SIG_DFL); 00244 signal(SIGPIPE, SIG_DFL); 00245 00246 std::vector<std::string> args; 00247 for (int i=0; i<argc; i++) 00248 { 00249 if (strcmp(argv[i],"-h")==0) 00250 help(); // does not return 00251 args.push_back(argv[i]); 00252 } 00253 00254 const char* hostname = NULL; 00255 const char* exptname = NULL; 00256 00257 for (unsigned int i=1; i<args.size(); i++) // loop over the commandline options 00258 { 00259 const char* arg = args[i].c_str(); 00260 //printf("argv[%d] is %s\n",i,arg); 00261 00262 if (strncmp(arg,"-e",2)==0) // Event cutoff flag (only applicable in offline mode) 00263 gEventCutoff = atoi(arg+2); 00264 else if (strncmp(arg,"-H",2)==0) 00265 hostname = strdup(arg+2); 00266 else if (strncmp(arg,"-E",2)==0) 00267 exptname = strdup(arg+2); 00268 else if (strncmp(arg,"-O",2)==0) 00269 gSaveOdb = true; 00270 else if (strncmp(arg,"-p",2)==0) 00271 gPrintBank = true; 00272 else if (strcmp(arg,"-h")==0) 00273 help(); // does not return 00274 else if (arg[0] == '-') 00275 help(); // does not return 00276 } 00277 00278 bool flag = false; 00279 00280 for (unsigned int i=1; i<args.size(); i++) 00281 { 00282 const char* arg = args[i].c_str(); 00283 00284 if (arg[0] != '-') 00285 { 00286 flag = true; 00287 ProcessMidasFile(arg); 00288 } 00289 } 00290 00291 // if we processed some data files, 00292 // do not go into online mode. 00293 if (flag) 00294 return 0; 00295 00296 #ifdef HAVE_MIDAS 00297 ProcessMidasOnline(hostname, exptname); 00298 #endif 00299 00300 return 0; 00301 }
int ProcessMidasFile | ( | const char * | fname | ) |
Definition at line 44 of file event_dump.cxx.
References TMidasFile::Close(), TMidasEvent::GetData(), TMidasEvent::GetSerialNumber(), gEventCutoff, gSaveOdb, HandleMidasEvent(), TMidasFile::Open(), and TMidasFile::Read().
00045 { 00046 TMidasFile f; 00047 bool tryOpen = f.Open(fname); 00048 00049 if (!tryOpen) 00050 { 00051 printf("Cannot open input file \"%s\"\n",fname); 00052 return -1; 00053 } 00054 00055 int i=0; 00056 while (1) 00057 { 00058 TMidasEvent event; 00059 if (!f.Read(&event)) 00060 break; 00061 00062 int eventId = event.GetEventId(); 00063 //printf("Have an event of type %d\n",eventId); 00064 00065 if ((eventId & 0xFFFF) == 0x8000) 00066 { 00067 // begin run 00068 event.Print(); 00069 00070 if (gSaveOdb) 00071 { 00072 char fname[256]; 00073 00074 char* ptr = event.GetData(); 00075 int size = event.GetDataSize(); 00076 00077 if (strncmp(ptr, "<?xml", 5) == 0) 00078 sprintf(fname,"odb%05d.xml", event.GetSerialNumber()); 00079 else 00080 sprintf(fname,"odb%05d.odb", event.GetSerialNumber()); 00081 00082 FILE* fp = fopen(fname,"w"); 00083 if (!fp) 00084 { 00085 fprintf(stderr,"Error: Cannot write ODB to \'%s\', errno %d (%s)\n", fname, errno, strerror(errno)); 00086 exit(1); 00087 } 00088 00089 fwrite(ptr, size, 1, fp); 00090 fclose(fp); 00091 00092 fprintf(stderr,"Wrote ODB to \'%s\'\n", fname); 00093 exit(0); 00094 } 00095 00096 // 00097 // Load ODB contents from the ODB XML file 00098 // 00099 if (gOdb) 00100 delete gOdb; 00101 gOdb = NULL; 00102 #ifdef HAVE_ROOT 00103 gOdb = new XmlOdb(event.GetData(),event.GetDataSize()); 00104 #endif 00105 } 00106 else if ((eventId & 0xFFFF) == 0x8001) 00107 { 00108 // end run 00109 event.Print(); 00110 } 00111 else if ((eventId & 0xFFFF) == 0x8002) 00112 { 00113 // log message 00114 event.Print(); 00115 printf("Log message: %s\n", event.GetData()); 00116 } 00117 else 00118 { 00119 event.SetBankList(); 00120 //event.Print(); 00121 HandleMidasEvent(event); 00122 } 00123 00124 if((i%500)==0) 00125 { 00126 printf("Processing event %d\n",i); 00127 } 00128 00129 i++; 00130 if ((gEventCutoff!=0)&&(i>=gEventCutoff)) 00131 { 00132 printf("Reached event %d, exiting loop.\n", i); 00133 break; 00134 } 00135 } 00136 00137 f.Close(); 00138 00139 return 0; 00140 }
int gEventCutoff = 0 |
Definition at line 31 of file event_dump.cxx.
VirtualOdb* gOdb = NULL |
Definition at line 29 of file event_dump.cxx.
bool gPrintBank = false |
Definition at line 33 of file event_dump.cxx.
Referenced by HandleMidasEvent(), and main().
bool gSaveOdb = false |
Definition at line 32 of file event_dump.cxx.
Referenced by main(), and ProcessMidasFile().