ARA ROOT v3.10 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 "AraGeomTool.h"
00017 #include "araAtriStructures.h"
00018 #include "RawAtriStationEvent.h"  
00019 
00020 void process();
00021 void makeTree(char *inputName, char *outDir);
00022 
00023 AraStationEventHeader_t theEventHeader;
00024 
00025 char *dataBuffer;
00026 TFile *theFile;
00027 TTree *eventTree;
00028 RawAtriStationEvent *theEvent=0;
00029 char outName[FILENAME_MAX];
00030 UInt_t realTime;
00031 Int_t runNumber;
00032 //Int_t lastRunNumber;
00033 Int_t stationIdInt;
00034 AraStationId_t stationId;
00035 
00036 int main(int argc, char **argv) {
00037   dataBuffer = new char[200000];
00038   theEvent=0;
00039   if(argc<3) {
00040     std::cout << "Usage: " << basename(argv[0]) << " <file list> <out dir>" << std::endl;
00041     return -1;
00042   }
00043   if(argc>=4) 
00044      runNumber=atoi(argv[3]); //To override runNumber
00045   if(argc>=5) {
00046     stationIdInt=atoi(argv[4]);  //To override station id
00047     stationId=AraGeomTool::getAtriStationId(stationIdInt);
00048   }
00049   //  std::cout << argc << "\t" << stationIdInt << "\t" << (int)stationId << "\n";
00050 
00051   makeTree(argv[1],argv[2]);
00052   delete [] dataBuffer;
00053   return 0;
00054 }
00055   
00056 
00057 void makeTree(char *inputName, char *outFile) {
00058   cout << inputName << "\t" << outFile << endl;
00059   strncpy(outName,outFile,FILENAME_MAX);
00060   theEvent = new RawAtriStationEvent();
00061   //    cout << sizeof(AraStationEventHeader_t) << endl;
00062   ifstream SillyFile(inputName);
00063 
00064   int numBytes=0;
00065   char fileName[180];
00066   int error=0;
00067   //    int eventNumber=1;
00068   int counter=0;
00069   while(SillyFile >> fileName) {
00070     if(counter%100==0) 
00071       cout << fileName << endl;
00072     counter++;
00073     
00074     //    const char *subDir = gSystem->DirName(fileName);
00075     //    const char *subSubDir = gSystem->DirName(subDir);
00076     //    const char *eventDir = gSystem->DirName(subSubDir);
00077     //    const char *runDir = gSystem->DirName(eventDir);
00078     //    const char *justRun = gSystem->BaseName(runDir);
00079     //  cout << justRun << endl;
00080     //    sscanf(justRun,"run%d",&runNumber);
00081     
00082     gzFile infile = gzopen (fileName, "rb");    
00083     //    std::cout << "gzeof: " << gzeof(infile) << "\n";
00084     for(int i=0;i<1000;i++) {   
00085       //      cout << i << endl;
00086       numBytes=gzread(infile,&theEventHeader,sizeof(AraStationEventHeader_t));
00087       //      std::cout << numBytes << "\n";
00088       if(numBytes==0) break;
00089       if(numBytes!=sizeof(AraStationEventHeader_t)) {
00090         if(numBytes)
00091           cerr << "Read problem: " <<numBytes << " of " << sizeof(AraStationEventHeader_t) << endl;
00092         error=1;
00093         break;
00094       }
00095       if(stationIdInt!=0)
00096          theEventHeader.gHdr.stationId=stationId;
00097       
00098       //      std::cout << (int)theEventHeader.gHdr.stationId << "\t" << (int)stationId << "\n";
00099 
00100       if(theEventHeader.gHdr.numBytes>0) {
00101         //      std::cout << "Num bytes: " << theEventHeader.gHdr.numBytes << "\t" << theEventHeader.numBytes << "\n";
00102         //      std::cout << "Event number: " << theEventHeader.eventNumber << "\t" << theEventHeader.unixTime << "\t" << theEventHeader.unixTimeUs << "\n";
00103         
00104         
00105         Int_t numDataBytes=theEventHeader.gHdr.numBytes-sizeof(AraStationEventHeader_t);
00106         numBytes=gzread(infile,dataBuffer,numDataBytes);
00107         //      std::cout << numBytes << "\n";
00108         if(numBytes==0) break;
00109         if(numBytes!=numDataBytes) {
00110           if(numBytes)
00111             cerr << "Read problem: " <<numBytes << " of " <<  numDataBytes << endl;
00112           error=1;
00113           break;
00114         }
00115         process();
00116         //      exit(0);
00117       }
00118       else {
00119         std::cerr << "How can gHdr.numBytes = " << theEventHeader.gHdr.numBytes << "\n";
00120         error=1;
00121         break;
00122       }
00123 
00124       //      cout << ": " << theEventHeader.unixTime << endl;
00125      }
00126     gzclose(infile);
00127     //  if(error) break;
00128   }
00129   if(eventTree)
00130     eventTree->AutoSave();
00131   //    theFile->Close();
00132 }
00133 
00134 
00135 void process() {
00136   //  cout << "process:\t" << theEventHeader.eventNumber << endl;
00137   static int doneInit=0;
00138   if(!doneInit) {
00139     //    char dirName[FILENAME_MAX];
00140     //    char fileName[FILENAME_MAX];
00141     //    sprintf(dirName,"%s/run%d",outDirName,runNumber);
00142     //    gSystem->mkdir(dirName,kTRUE);
00143     //    sprintf(fileName,"%s/eventFile%d.root",dirName,runNumber);
00144     cout << "Creating File: " << outName << endl;
00145     theFile = new TFile(outName,"RECREATE");
00146     eventTree = new TTree("eventTree","Tree of ARA Event's");
00147     eventTree->Branch("run",&runNumber,"run/I");
00148     eventTree->Branch("event","RawAtriStationEvent",&theEvent);
00149     
00150     doneInit=1;
00151   }  
00152   //  cout << "Here: "  << theEvent.eventNumber << endl;
00153   if(theEvent) delete theEvent;
00154   
00155   theEvent = new RawAtriStationEvent(&theEventHeader,dataBuffer);
00156   eventTree->Fill();  
00157   //  lastRunNumber=runNumber;
00158   //  delete theEvent;
00159 }

Generated on Tue Jul 16 16:58:02 2013 for ARA ROOT v3.10 Software by doxygen 1.4.7