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
