event_dump.cxx File Reference

#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>
Include dependency graph for event_dump.cxx:

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

VirtualOdbgOdb = NULL
int gEventCutoff = 0
bool gSaveOdb = false
bool gPrintBank = false

Function Documentation

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 }

Here is the call graph for this function:

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 }

Here is the call graph for this function:


Variable Documentation

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().


Generated on 5 May 2014 for ROOT Analyzer by  doxygen 1.6.1