ARA ROOT v3.4 Software

utilities/Atri/makeAtriEventTree.cxx

00001 #include <cstdio>
00002 #include <fstream>
00003 #include <iostream>
00004 #include <zlib.h>
00005 #include <libgen.h>     
00006 #include <cstdlib>
00007  
00008 using namespace std;
00009 
00010 #include "TTree.h"
00011 #include "TFile.h"
00012 #include "TSystem.h"
00013 
00014 #define HACK_FOR_ROOT
00015 
00016 #include "araAtriStructures.h"
00017 #include "RawAtriStationEvent.h"  
00018 
00019 void process();
00020 void makeTree(char *inputName, char *outDir);
00021 
00022 AraStationEventHeader_t theEventHeader;
00023 char *dataBuffer;
00024 TFile *theFile;
00025 TTree *eventTree;
00026 RawAtriStationEvent *theEvent=0;
00027 char outName[FILENAME_MAX];
00028 UInt_t realTime;
00029 Int_t runNumber;
00030 Int_t lastRunNumber;
00031 
00032 
00033 int main(int argc, char **argv) {
00034   dataBuffer = new char[200000];
00035   theEvent=0;
00036   if(argc<3) {
00037     std::cout << "Usage: " << basename(argv[0]) << " <file list> <out dir>" << std::endl;
00038     return -1;
00039   }
00040   if(argc==4) 
00041     runNumber=atoi(argv[3]);
00042   makeTree(argv[1],argv[2]);
00043   delete [] dataBuffer;
00044   return 0;
00045 }
00046   
00047 
00048 void makeTree(char *inputName, char *outFile) {
00049   cout << inputName << "\t" << outFile << endl;
00050   strncpy(outName,outFile,FILENAME_MAX);
00051   theEvent = new RawAtriStationEvent();
00052   //    cout << sizeof(AraStationEventHeader_t) << endl;
00053   ifstream SillyFile(inputName);
00054 
00055   int numBytes=0;
00056   char fileName[180];
00057   int error=0;
00058   //    int eventNumber=1;
00059   int counter=0;
00060   while(SillyFile >> fileName) {
00061     if(counter%100==0) 
00062       cout << fileName << endl;
00063     counter++;
00064     
00065     //    const char *subDir = gSystem->DirName(fileName);
00066     //    const char *subSubDir = gSystem->DirName(subDir);
00067     //    const char *eventDir = gSystem->DirName(subSubDir);
00068     //    const char *runDir = gSystem->DirName(eventDir);
00069     //    const char *justRun = gSystem->BaseName(runDir);
00070     //  cout << justRun << endl;
00071     //    sscanf(justRun,"run%d",&runNumber);
00072     
00073     gzFile infile = gzopen (fileName, "rb");    
00074     //    std::cout << "gzeof: " << gzeof(infile) << "\n";
00075     for(int i=0;i<1000;i++) {   
00076       //      cout << i << endl;
00077       numBytes=gzread(infile,&theEventHeader,sizeof(AraStationEventHeader_t));
00078       //      std::cout << numBytes << "\n";
00079       if(numBytes==0) break;
00080       if(numBytes!=sizeof(AraStationEventHeader_t)) {
00081         if(numBytes)
00082           cerr << "Read problem: " <<numBytes << " of " << sizeof(AraStationEventHeader_t) << endl;
00083         error=1;
00084         break;
00085       }
00086       if(theEventHeader.gHdr.numBytes>0) {
00087         //      std::cout << "Num bytes: " << theEventHeader.gHdr.numBytes << "\t" << theEventHeader.numBytes << "\n";
00088         //      std::cout << "Event number: " << theEventHeader.eventNumber << "\t" << theEventHeader.unixTime << "\t" << theEventHeader.unixTimeUs << "\n";
00089         
00090         
00091         Int_t numDataBytes=theEventHeader.gHdr.numBytes-sizeof(AraStationEventHeader_t);
00092         numBytes=gzread(infile,dataBuffer,numDataBytes);
00093         //      std::cout << numBytes << "\n";
00094         if(numBytes==0) break;
00095         if(numBytes!=numDataBytes) {
00096           if(numBytes)
00097             cerr << "Read problem: " <<numBytes << " of " <<  numDataBytes << endl;
00098           error=1;
00099           break;
00100         }
00101         process();
00102         //      exit(0);
00103       }
00104       else {
00105         std::cerr << "How can gHdr.numBytes = " << theEventHeader.gHdr.numBytes << "\n";
00106         error=1;
00107         break;
00108       }
00109 
00110       //      cout << ": " << theEventHeader.unixTime << endl;
00111      }
00112     gzclose(infile);
00113     //  if(error) break;
00114   }
00115   if(eventTree)
00116     eventTree->AutoSave();
00117   //    theFile->Close();
00118 }
00119 
00120 
00121 void process() {
00122   //  cout << "process:\t" << theEventHeader.eventNumber << endl;
00123   static int doneInit=0;
00124   if(!doneInit) {
00125     //    char dirName[FILENAME_MAX];
00126     //    char fileName[FILENAME_MAX];
00127     //    sprintf(dirName,"%s/run%d",outDirName,runNumber);
00128     //    gSystem->mkdir(dirName,kTRUE);
00129     //    sprintf(fileName,"%s/eventFile%d.root",dirName,runNumber);
00130     cout << "Creating File: " << outName << endl;
00131     theFile = new TFile(outName,"RECREATE");
00132     eventTree = new TTree("eventTree","Tree of ARA Event's");
00133     eventTree->Branch("run",&runNumber,"run/I");
00134     eventTree->Branch("event","RawAtriStationEvent",&theEvent);
00135     
00136     doneInit=1;
00137   }  
00138   //  cout << "Here: "  << theEvent.eventNumber << endl;
00139   if(theEvent) delete theEvent;
00140   
00141   //  theEvent = new RawAtriStationEvent(&theEventHeader,dataBuffer);//BRENDAN -- this line makes an ATRI station event using the ARAAcqd produced stationId (encoded in the raw events in the dat file). The next line with additional argument (in this case 2) forces the station Id in the produced L0 events to be station (2)
00142   theEvent = new RawAtriStationEvent(&theEventHeader,dataBuffer, 2);//FIXME -- this forces the stationId to 2
00143   eventTree->Fill();  
00144   lastRunNumber=runNumber;
00145   //  delete theEvent;
00146 }

Generated on Mon Mar 18 16:00:45 2013 for ARA ROOT v3.4 Software by doxygen 1.4.7