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 "araAtriStructures.h" 00017 #include "AtriEventHkData.h" 00018 00019 void processHk(Int_t newFormat); 00020 void makeHkTree(char *inputName, char *outDir); 00021 00022 AraEventHk_t theEventHkStruct; 00023 AraEventHk2_7_t theEventHkStruct_2_7; 00024 TFile *theFile; 00025 TTree *eventHkTree; 00026 AtriEventHkData *theEventHk=0; 00027 char outName[FILENAME_MAX]; 00028 UInt_t realTime; 00029 Int_t runNumber; 00030 Int_t lastRunNumber; 00031 00032 Int_t newHkFormat=0; 00033 00034 int main(int argc, char **argv) { 00035 if(argc<3) { 00036 std::cout << "Usage: " << basename(argv[0]) << " <file list> <out dir>" << std::endl; 00037 return -1; 00038 } 00039 if(argc==4) 00040 runNumber=atoi(argv[3]); 00041 makeHkTree(argv[1],argv[2]); 00042 return 0; 00043 } 00044 00045 00046 void makeHkTree(char *inputName, char *outFile) { 00047 cout << inputName << "\t" << outFile << endl; 00048 strncpy(outName,outFile,FILENAME_MAX); 00049 theEventHk = new AtriEventHkData(); 00050 // cout << sizeof(AraEventHk_t) << endl; 00051 ifstream SillyFile(inputName); 00052 00053 int numBytes=0; 00054 char fileName[180]; 00055 int error=0; 00056 // int eventNumber=1; 00057 int counter=0; 00058 while(SillyFile >> fileName) { 00059 if(counter%100==0) 00060 cout << fileName << endl; 00061 counter++; 00062 00063 // const char *subDir = gSystem->DirName(fileName); 00064 // const char *subSubDir = gSystem->DirName(subDir); 00065 // const char *eventDir = gSystem->DirName(subSubDir); 00066 // const char *runDir = gSystem->DirName(eventDir); 00067 // const char *justRun = gSystem->BaseName(runDir); 00068 // cout << justRun << endl; 00069 // sscanf(justRun,"run%d",&runNumber); 00070 00071 00072 00073 00074 AtriGenericHeader_t theGenericHeader; 00075 gzFile infile = gzopen (fileName, "rb"); 00076 numBytes=gzread(infile, &theGenericHeader, sizeof(AtriGenericHeader_t)); 00077 00078 // fprintf(stderr, "read %i bytes\n", numBytes); 00079 00080 // fprintf(stderr, "verId %i subVerId %i\n", theGenericHeader.verId, theGenericHeader.subVerId); 00081 if(theGenericHeader.verId>2){ 00082 newHkFormat=1; 00083 // fprintf(stderr, "Use AraEventHk_t\n"); 00084 } 00085 else if(theGenericHeader.verId==2 && theGenericHeader.subVerId >7){ 00086 newHkFormat=1; 00087 // fprintf(stderr, "Use AraEventHk_t\n"); 00088 } 00089 else{ 00090 newHkFormat=0; 00091 // fprintf(stderr, "Use AraEventHk2_7_t\n"); 00092 } 00093 00094 gzclose(infile); 00095 00096 00097 infile = gzopen (fileName, "rb"); 00098 // std::cout << "gzeof: " << gzeof(infile) << "\n"; 00099 00100 if(newHkFormat){ 00101 for(int i=0;i<1000;i++) { 00102 // cout << i << endl; 00103 numBytes=gzread(infile,&theEventHkStruct,sizeof(AraEventHk_t)); 00104 // std::cout << numBytes << "\n"; 00105 if(numBytes==0) break; 00106 if(numBytes!=sizeof(AraEventHk_t)) { 00107 if(numBytes) 00108 cerr << "Read problem: " <<numBytes << " of " << sizeof(AraEventHk_t) << endl; 00109 error=1; 00110 break; 00111 } 00112 // cout << "Hk: " << theEventHkStruct.unixTime << endl; 00113 processHk(1); 00114 } 00115 }//newHkFormat 00116 else{ 00117 for(int i=0;i<1000;i++) { 00118 // cout << i << endl; 00119 numBytes=gzread(infile,&theEventHkStruct_2_7,sizeof(AraEventHk2_7_t)); 00120 // std::cout << numBytes << "\n"; 00121 if(numBytes==0) break; 00122 if(numBytes!=sizeof(AraEventHk2_7_t)) { 00123 if(numBytes) 00124 cerr << "Read problem: " <<numBytes << " of " << sizeof(AraEventHk2_7_t) << endl; 00125 error=1; 00126 break; 00127 } 00128 // cout << "Hk: " << theEventHkStruct.unixTime << endl; 00129 processHk(0); 00130 } 00131 }//OldHkFormat 00132 00133 gzclose(infile); 00134 // if(error) break; 00135 } 00136 if(eventHkTree) 00137 eventHkTree->AutoSave(); 00138 // theFile->Close(); 00139 } 00140 00141 00142 void processHk(Int_t newFormat) { 00143 // cout << "processHk:\t" << theEventHkStruct.eventNumber << endl; 00144 static int doneInit=0; 00145 00146 if(!doneInit) { 00147 // char dirName[FILENAME_MAX]; 00148 // char fileName[FILENAME_MAX]; 00149 // sprintf(dirName,"%s/run%d",outDirName,runNumber); 00150 // gSystem->mkdir(dirName,kTRUE); 00151 // sprintf(fileName,"%s/eventFile%d.root",dirName,runNumber); 00152 cout << "Creating File: " << outName << endl; 00153 theFile = new TFile(outName,"RECREATE"); 00154 eventHkTree = new TTree("eventHkTree","Tree of ARA Hks"); 00155 eventHkTree->Branch("run",&runNumber,"run/I"); 00156 eventHkTree->Branch("eventHk","AtriEventHkData",&theEventHk); 00157 00158 doneInit=1; 00159 } 00160 // cout << "Here: " << theEventHk.eventNumber << endl; 00161 00162 if(newFormat){ 00163 00164 if(theEventHk) delete theEventHk; 00165 theEventHk = new AtriEventHkData(&theEventHkStruct); 00166 eventHkTree->Fill(); 00167 lastRunNumber=runNumber; 00168 // delete theEventHk; 00169 }//newFormat 00170 else{ 00171 00172 if(theEventHk) delete theEventHk; 00173 theEventHk = new AtriEventHkData(&theEventHkStruct_2_7); 00174 eventHkTree->Fill(); 00175 lastRunNumber=runNumber; 00176 }//Old Format 00177 }
Generated on Mon Mar 18 16:04:45 2013 for ARA ROOT v3.6 Software by
