utilities/Atri/makeAtriEventTreeForceStationId.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, 100); 00142 eventTree->Fill(); 00143 lastRunNumber=runNumber; 00144 // delete theEvent; 00145 }
Generated on Mon Jun 3 14:59:46 2013 for ARA ROOT v3.8 Software by
