#include <stdio.h>#include <sys/time.h>#include <assert.h>#include <signal.h>#include <errno.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 33 of file event_dump.cxx.
References gPrintBank.
00034 { 00035 int eventId = event.GetEventId(); 00036 if (gPrintBank) 00037 event.Print("a"); 00038 else 00039 event.Print(); 00040 }
| void help | ( | ) |
Definition at line 215 of file event_dump.cxx.
00216 { 00217 printf("\nUsage:\n"); 00218 printf("\n./event_dump.exe [-h] [-Hhostname] [-Eexptname] [-p] [-O] [-eMaxEvents] [file1 file2 ...]\n"); 00219 printf("\n"); 00220 printf("\t-h: print this help message\n"); 00221 printf("\t-Hhostname: connect to MIDAS experiment on given host\n"); 00222 printf("\t-Eexptname: connect to this MIDAS experiment\n"); 00223 printf("\t-O: save ODB from midas data file into odbNNNN.xml or .odb file\n"); 00224 printf("\t-e: Number of events to read from input data files\n"); 00225 printf("\t-p: Print bank contents\n"); 00226 printf("\n"); 00227 printf("Example1: print online events: ./event_dump.exe\n"); 00228 printf("Example2: print events from file: ./event_dump.exe /data/alpha/current/run00500.mid.gz\n"); 00229 exit(1); 00230 }
| int main | ( | int | argc, | |
| char * | argv[] | |||
| ) |
Definition at line 234 of file event_dump.cxx.
References gEventCutoff, gPrintBank, gSaveOdb, help(), and ProcessMidasFile().
00235 { 00236 setbuf(stdout,NULL); 00237 setbuf(stderr,NULL); 00238 00239 signal(SIGILL, SIG_DFL); 00240 signal(SIGBUS, SIG_DFL); 00241 signal(SIGSEGV, SIG_DFL); 00242 signal(SIGPIPE, SIG_DFL); 00243 00244 std::vector<std::string> args; 00245 for (int i=0; i<argc; i++) 00246 { 00247 if (strcmp(argv[i],"-h")==0) 00248 help(); // does not return 00249 args.push_back(argv[i]); 00250 } 00251 00252 const char* hostname = NULL; 00253 const char* exptname = NULL; 00254 00255 for (unsigned int i=1; i<args.size(); i++) // loop over the commandline options 00256 { 00257 const char* arg = args[i].c_str(); 00258 //printf("argv[%d] is %s\n",i,arg); 00259 00260 if (strncmp(arg,"-e",2)==0) // Event cutoff flag (only applicable in offline mode) 00261 gEventCutoff = atoi(arg+2); 00262 else if (strncmp(arg,"-H",2)==0) 00263 hostname = strdup(arg+2); 00264 else if (strncmp(arg,"-E",2)==0) 00265 exptname = strdup(arg+2); 00266 else if (strncmp(arg,"-O",2)==0) 00267 gSaveOdb = true; 00268 else if (strncmp(arg,"-p",2)==0) 00269 gPrintBank = true; 00270 else if (strcmp(arg,"-h")==0) 00271 help(); // does not return 00272 else if (arg[0] == '-') 00273 help(); // does not return 00274 } 00275 00276 bool flag = false; 00277 00278 for (unsigned int i=1; i<args.size(); i++) 00279 { 00280 const char* arg = args[i].c_str(); 00281 00282 if (arg[0] != '-') 00283 { 00284 flag = true; 00285 ProcessMidasFile(arg); 00286 } 00287 } 00288 00289 // if we processed some data files, 00290 // do not go into online mode. 00291 if (flag) 00292 return 0; 00293 00294 #ifdef HAVE_MIDAS 00295 ProcessMidasOnline(hostname, exptname); 00296 #endif 00297 00298 return 0; 00299 }

| int ProcessMidasFile | ( | const char * | fname | ) |
Definition at line 42 of file event_dump.cxx.
References TMidasFile::Close(), TMidasEvent::GetData(), TMidasEvent::GetSerialNumber(), gEventCutoff, gSaveOdb, HandleMidasEvent(), TMidasFile::Open(), and TMidasFile::Read().
00043 { 00044 TMidasFile f; 00045 bool tryOpen = f.Open(fname); 00046 00047 if (!tryOpen) 00048 { 00049 printf("Cannot open input file \"%s\"\n",fname); 00050 return -1; 00051 } 00052 00053 int i=0; 00054 while (1) 00055 { 00056 TMidasEvent event; 00057 if (!f.Read(&event)) 00058 break; 00059 00060 int eventId = event.GetEventId(); 00061 //printf("Have an event of type %d\n",eventId); 00062 00063 if ((eventId & 0xFFFF) == 0x8000) 00064 { 00065 // begin run 00066 event.Print(); 00067 00068 if (gSaveOdb) 00069 { 00070 char fname[256]; 00071 00072 char* ptr = event.GetData(); 00073 int size = event.GetDataSize(); 00074 00075 if (strncmp(ptr, "<?xml", 5) == 0) 00076 sprintf(fname,"odb%05d.xml", event.GetSerialNumber()); 00077 else 00078 sprintf(fname,"odb%05d.odb", event.GetSerialNumber()); 00079 00080 FILE* fp = fopen(fname,"w"); 00081 if (!fp) 00082 { 00083 fprintf(stderr,"Error: Cannot write ODB to \'%s\', errno %d (%s)\n", fname, errno, strerror(errno)); 00084 exit(1); 00085 } 00086 00087 fwrite(ptr, size, 1, fp); 00088 fclose(fp); 00089 00090 fprintf(stderr,"Wrote ODB to \'%s\'\n", fname); 00091 exit(0); 00092 } 00093 00094 // 00095 // Load ODB contents from the ODB XML file 00096 // 00097 if (gOdb) 00098 delete gOdb; 00099 gOdb = NULL; 00100 #ifdef HAVE_ROOT 00101 gOdb = new XmlOdb(event.GetData(),event.GetDataSize()); 00102 #endif 00103 } 00104 else if ((eventId & 0xFFFF) == 0x8001) 00105 { 00106 // end run 00107 event.Print(); 00108 } 00109 else if ((eventId & 0xFFFF) == 0x8002) 00110 { 00111 // log message 00112 event.Print(); 00113 printf("Log message: %s\n", event.GetData()); 00114 } 00115 else 00116 { 00117 event.SetBankList(); 00118 //event.Print(); 00119 HandleMidasEvent(event); 00120 } 00121 00122 if((i%500)==0) 00123 { 00124 printf("Processing event %d\n",i); 00125 } 00126 00127 i++; 00128 if ((gEventCutoff!=0)&&(i>=gEventCutoff)) 00129 { 00130 printf("Reached event %d, exiting loop.\n", i); 00131 break; 00132 } 00133 } 00134 00135 f.Close(); 00136 00137 return 0; 00138 }

| int gEventCutoff = 0 |
Definition at line 29 of file event_dump.cxx.
| VirtualOdb* gOdb = NULL |
Definition at line 27 of file event_dump.cxx.
| bool gPrintBank = false |
Definition at line 31 of file event_dump.cxx.
Referenced by HandleMidasEvent(), and main().
| bool gSaveOdb = false |
Definition at line 30 of file event_dump.cxx.
Referenced by main(), and ProcessMidasFile().
1.6.1