event_dump.cxx File Reference

#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>
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 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 }

Here is the call graph for this function:

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 }

Here is the call graph for this function:


Variable Documentation

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


Generated on 12 Feb 2016 for ROOT Analyzer by  doxygen 1.6.1