utilities/Atri/makeAtriEventHkTree.cxx
00001 #include <cstdio> 00002 #include <fstream> 00003 #include <iostream> 00004 #include <zlib.h> 00005 #include <libgen.h> 00006 #include <stdlib.h> 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 "AtriEventHkData.h" 00019 00020 void processHk(Int_t newFormat); 00021 void makeHkTree(char *inputName, char *outDir); 00022 00023 AraEventHk_t theEventHkStruct; 00024 AraEventHk2_7_t theEventHkStruct_2_7; 00025 TFile *theFile; 00026 TTree *eventHkTree; 00027 AtriEventHkData *theEventHk=0; 00028 char outName[FILENAME_MAX]; 00029 UInt_t realTime; 00030 Int_t runNumber; 00031 Int_t lastRunNumber; 00032 Int_t stationIdInt; 00033 AraStationId_t stationId; 00034 00035 Int_t newHkFormat=0; 00036 00037 int main(int argc, char **argv) { 00038 if(argc<3) { 00039 std::cout << "Usage: " << basename(argv[0]) << " <file list> <out dir>" << std::endl; 00040 return -1; 00041 } 00042 if(argc>=4) 00043 runNumber=atoi(argv[3]); 00044 if(argc>=5) { 00045 stationIdInt=atoi(argv[4]); //To override station id 00046 stationId=AraGeomTool::getAtriStationId(stationIdInt); 00047 } 00048 std::cout << argc << "\t" << stationIdInt << "\t" << (int)stationId << "\n"; 00049 makeHkTree(argv[1],argv[2]); 00050 return 0; 00051 } 00052 00053 00054 void makeHkTree(char *inputName, char *outFile) { 00055 cout << inputName << "\t" << outFile << endl; 00056 strncpy(outName,outFile,FILENAME_MAX); 00057 theEventHk = new AtriEventHkData(); 00058 // cout << sizeof(AraEventHk_t) << endl; 00059 ifstream SillyFile(inputName); 00060 00061 int numBytes=0; 00062 char fileName[180]; 00063 int error=0; 00064 // int eventNumber=1; 00065 int counter=0; 00066 while(SillyFile >> fileName) { 00067 if(counter%100==0) 00068 cout << fileName << endl; 00069 counter++; 00070 00071 // const char *subDir = gSystem->DirName(fileName); 00072 // const char *subSubDir = gSystem->DirName(subDir); 00073 // const char *eventDir = gSystem->DirName(subSubDir); 00074 // const char *runDir = gSystem->DirName(eventDir); 00075 // const char *justRun = gSystem->BaseName(runDir); 00076 // cout << justRun << endl; 00077 // sscanf(justRun,"run%d",&runNumber); 00078 00079 00080 00081 00082 AtriGenericHeader_t theGenericHeader; 00083 gzFile infile = gzopen (fileName, "rb"); 00084 numBytes=gzread(infile, &theGenericHeader, sizeof(AtriGenericHeader_t)); 00085 // fprintf(stderr, "read %i bytes\n", numBytes); 00086 // fprintf(stderr, "typeId %i verId %i subVerId %i\n", theGenericHeader.typeId, theGenericHeader.verId, theGenericHeader.subVerId); 00087 // fprintf(stderr, "numBytes %i checksum %i numBytes(2_7) %lu numBytes(new) %lu genericHeaderSize %lu\n", theGenericHeader.numBytes, theGenericHeader.checksum,sizeof(AraEventHk2_7_t), sizeof(AraEventHk_t), sizeof(AtriGenericHeader_t) ); 00088 00089 00090 if(theGenericHeader.verId>2){ 00091 newHkFormat=1; 00092 } 00093 else if(theGenericHeader.verId==2 && theGenericHeader.subVerId >7){ 00094 newHkFormat=1; 00095 } 00096 else{ 00097 newHkFormat=0; 00098 } 00099 int loopCount=0; 00100 while(newHkFormat && theGenericHeader.numBytes != sizeof(AraEventHk_t)){ 00101 fprintf(stderr, "error - wrong numBytes (%d) for newHkFormat (%lu) oldFormat (%lu)\n", theGenericHeader.numBytes, sizeof(AraEventHk_t), sizeof(AraEventHk2_7_t)); 00102 if(theGenericHeader.numBytes==0) theGenericHeader.numBytes=sizeof(AraEventHk2_7_t); 00103 00104 00105 numBytes = gzread(infile, &theEventHkStruct, theGenericHeader.numBytes-sizeof(AtriGenericHeader_t)); 00106 numBytes = gzread(infile, &theGenericHeader, sizeof(AtriGenericHeader_t)); 00107 if(numBytes!=sizeof(AtriGenericHeader_t)) break; 00108 // fprintf(stderr, "read %i bytes\n", numBytes); 00109 // fprintf(stderr, "typeId %i verId %i subVerId %i\n", theGenericHeader.typeId, theGenericHeader.verId, theGenericHeader.subVerId); 00110 // fprintf(stderr, "numBytes %i checksum %i numBytes(2_7) %lu numBytes(new) %lu genericHeaderSize %lu\n", theGenericHeader.numBytes, theGenericHeader.checksum,sizeof(AraEventHk2_7_t), sizeof(AraEventHk_t), sizeof(AtriGenericHeader_t) ); 00111 00112 if(theGenericHeader.numBytes == sizeof(AraEventHk2_7_t)){ 00113 newHkFormat=0; 00114 fprintf(stderr, "Forcing event format to AraEventHk2_7_t\n"); 00115 } 00116 loopCount++; 00117 if(loopCount>10) break; 00118 } 00119 // newHkFormat=0; 00120 while(newHkFormat==0 && theGenericHeader.numBytes != sizeof(AraEventHk2_7_t)){ 00121 fprintf(stderr, "error - wrong numBytes (%d) for oldHkFormat (%lu) new format (%lu)\n", theGenericHeader.numBytes, sizeof(AraEventHk2_7_t), sizeof(AraEventHk_t)); 00122 if(theGenericHeader.numBytes==0) theGenericHeader.numBytes=sizeof(AraEventHk_t); 00123 00124 numBytes = gzread(infile, &theEventHkStruct, theGenericHeader.numBytes-sizeof(AtriGenericHeader_t)); 00125 numBytes = gzread(infile, &theGenericHeader, sizeof(AtriGenericHeader_t)); 00126 if(numBytes!=sizeof(AtriGenericHeader_t)) break; 00127 // fprintf(stderr, "read %i bytes\n", numBytes); 00128 // fprintf(stderr, "typeId %i verId %i subVerId %i\n", theGenericHeader.typeId, theGenericHeader.verId, theGenericHeader.subVerId); 00129 // fprintf(stderr, "numBytes %i checksum %i numBytes(2_7) %lu numBytes(new) %lu genericHeaderSize %lu\n", theGenericHeader.numBytes, theGenericHeader.checksum,sizeof(AraEventHk2_7_t), sizeof(AraEventHk_t), sizeof(AtriGenericHeader_t) ); 00130 00131 if(theGenericHeader.numBytes == sizeof(AraEventHk_t)){ 00132 newHkFormat=1; 00133 fprintf(stderr, "Forcing event format to AraEventHk_t\n"); 00134 } 00135 00136 // fprintf(stderr, "Forcing event format to AraEventHk_t\n"); 00137 // newHkFormat=1; 00138 loopCount++; 00139 if(loopCount>10) break; 00140 } 00141 00142 00143 gzclose(infile); 00144 00145 infile = gzopen (fileName, "rb"); 00146 // std::cout << "gzeof: " << gzeof(infile) << "\n"; 00147 00148 if(loopCount>=10) { 00149 std::cout << "Broken file -- giving up\n"; 00150 return; 00151 } 00152 00153 if(newHkFormat){ 00154 for(int i=0;i<1000;i++) { 00155 // cout << i << endl; 00156 numBytes=gzread(infile,&theEventHkStruct,sizeof(AraEventHk_t)); 00157 // std::cout << numBytes << "\n"; 00158 // fprintf(stderr, "read %i bytes\n", numBytes); 00159 // fprintf(stderr, "verId %i subVerId %i\n", theEventHkStruct.gHdr.verId, theEventHkStruct.gHdr.subVerId); 00160 00161 if(stationIdInt!=0) 00162 theEventHkStruct.gHdr.stationId=stationId; 00163 00164 if(numBytes==0) break; 00165 if(numBytes!=sizeof(AraEventHk_t)) { 00166 if(numBytes) 00167 cerr << "Read problem: " <<numBytes << " of " << sizeof(AraEventHk_t) << endl; 00168 error=1; 00169 break; 00170 } 00171 // cout << "Hk: " << theEventHkStruct.gHdr.unixTime << endl; 00172 processHk(1); 00173 } 00174 }//newHkFormat 00175 else{ 00176 for(int i=0;i<1000;i++) { 00177 // cout << i << endl; 00178 numBytes=gzread(infile,&theEventHkStruct_2_7,sizeof(AraEventHk2_7_t)); 00179 // std::cout << numBytes << "\n"; 00180 00181 // fprintf(stderr, "read %i bytes\n", numBytes); 00182 // fprintf(stderr, "verId %i subVerId %i\n", theEventHkStruct_2_7.gHdr.verId, theEventHkStruct_2_7.gHdr.subVerId); 00183 00184 if(stationIdInt!=0) 00185 theEventHkStruct.gHdr.stationId=stationId; 00186 00187 if(numBytes==0) break; 00188 if(numBytes!=sizeof(AraEventHk2_7_t)) { 00189 if(numBytes) 00190 cerr << "Read problem: " <<numBytes << " of " << sizeof(AraEventHk2_7_t) << endl; 00191 error=1; 00192 break; 00193 } 00194 // cout << "Hk: " << theEventHkStruct.unixTime << endl; 00195 processHk(0); 00196 } 00197 }//OldHkFormat 00198 00199 gzclose(infile); 00200 // if(error) break; 00201 } 00202 if(eventHkTree) 00203 eventHkTree->AutoSave(); 00204 // theFile->Close(); 00205 } 00206 00207 00208 void processHk(Int_t newFormat) { 00209 // cout << "processHk:\t" << theEventHkStruct.eventNumber << endl; 00210 static int doneInit=0; 00211 00212 if(!doneInit) { 00213 // char dirName[FILENAME_MAX]; 00214 // char fileName[FILENAME_MAX]; 00215 // sprintf(dirName,"%s/run%d",outDirName,runNumber); 00216 // gSystem->mkdir(dirName,kTRUE); 00217 // sprintf(fileName,"%s/eventFile%d.root",dirName,runNumber); 00218 cout << "Creating File: " << outName << endl; 00219 theFile = new TFile(outName,"RECREATE"); 00220 eventHkTree = new TTree("eventHkTree","Tree of ARA Hks"); 00221 eventHkTree->Branch("run",&runNumber,"run/I"); 00222 eventHkTree->Branch("eventHk","AtriEventHkData",&theEventHk); 00223 00224 doneInit=1; 00225 } 00226 // cout << "Here: " << theEventHk.eventNumber << endl; 00227 00228 if(newFormat){ 00229 00230 if(theEventHk) delete theEventHk; 00231 theEventHk = new AtriEventHkData(&theEventHkStruct); 00232 eventHkTree->Fill(); 00233 lastRunNumber=runNumber; 00234 // delete theEventHk; 00235 }//newFormat 00236 else{ 00237 00238 if(theEventHk) delete theEventHk; 00239 theEventHk = new AtriEventHkData(&theEventHkStruct_2_7); 00240 eventHkTree->Fill(); 00241 lastRunNumber=runNumber; 00242 }//Old Format 00243 }
Generated on Tue Jul 16 16:58:02 2013 for ARA ROOT v3.10 Software by
