analysis/getAtriRunStatistics.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 processFileList(char *inputName, char *outDir); 00022 00023 AraStationEventHeader_t theEventHeader; 00024 00025 char *dataBuffer; 00026 TFile *outFile; 00027 TTree *outTree; 00028 RawAtriStationEvent *theEvent=0; 00029 char outName[FILENAME_MAX]; 00030 UInt_t realTime; 00031 Int_t runNumber; 00032 Int_t stationIdInt; 00033 AraStationId_t stationId; 00034 00035 //For statistics 00036 00037 Int_t numEvents=0; 00038 Int_t numEvents_CPU=0; 00039 Int_t numEvents_RF0=0; 00040 Int_t numEvents_CALPULSER=0; 00041 Double_t eventRate=0; 00042 UInt_t unixTimeStart=0; 00043 00044 Int_t lastNumEvents=0; 00045 Int_t lastNumEvents_CPU=0; 00046 Int_t lastNumEvents_RF0=0; 00047 Int_t lastNumEvents_CALPULSER=0; 00048 00049 00050 //For Tree 00051 UInt_t lastUnixTime=0; 00052 UInt_t thisUnixTime=0; 00053 Double_t calPulserRate=0; 00054 Double_t RF0Rate=0; 00055 Double_t CPURate=0; 00056 Int_t lastTime=0; 00057 00058 00059 int main(int argc, char **argv) { 00060 dataBuffer = new char[200000]; 00061 theEvent=0; 00062 if(argc<3) { 00063 std::cout << "Usage: " << basename(argv[0]) << " <file list> <out dir>" << std::endl; 00064 return -1; 00065 } 00066 00067 processFileList(argv[1],argv[2]); 00068 delete [] dataBuffer; 00069 return 0; 00070 } 00071 00072 00073 void processFileList(char *inputName, char *outFileName) { 00074 cout << inputName << "\t" << outFileName << endl; 00075 00076 theEvent = new RawAtriStationEvent(); 00077 00078 ifstream SillyFile(inputName); 00079 outFile = new TFile(outFileName, "RECREATE"); 00080 outTree = new TTree("runStatsTree", "Tree of run statistics"); 00081 outTree->Branch("lastUnixTime", &lastUnixTime, "lastUnixTime/i"); 00082 outTree->Branch("thisUnixTime", &thisUnixTime, "thisUnixTime/i"); 00083 outTree->Branch("calPulserRate", &calPulserRate, "calPulserRate/D"); 00084 outTree->Branch("RF0Rate", &RF0Rate, "RF0Rate/D"); 00085 outTree->Branch("CPURate", &CPURate, "CPURate/D"); 00086 00087 outTree->Branch("eventRate", &eventRate, "eventRate/D"); 00088 outTree->Branch("unixTimeStart", &unixTimeStart, "unixTimeStart/i"); 00089 outTree->Branch("numEvents", &numEvents, "numEvents/I"); 00090 outTree->Branch("numEvents_CALPULSER", &numEvents_CALPULSER, "numEvents_CALPULSER/I"); 00091 outTree->Branch("numEvents_RF0", &numEvents_RF0, "numEvents_RF0/I"); 00092 outTree->Branch("numEvents_CPU", &numEvents_CPU, "numEvents_CPU/I"); 00093 outTree->Branch("stationId", &stationId, "stationId/I"); 00094 outTree->Branch("lastTime", &lastTime, "lastTime/I"); 00095 00096 int numBytes=0; 00097 char fileName[180]; 00098 int error=0; 00099 // int eventNumber=1; 00100 int counter=0; 00101 while(SillyFile >> fileName) { 00102 if(counter%100==0) 00103 cout << fileName << endl; 00104 counter++; 00105 00106 gzFile infile = gzopen (fileName, "rb"); 00107 // std::cout << "gzeof: " << gzeof(infile) << "\n"; 00108 for(int i=0;i<1000;i++) { 00109 // cout << i << endl; 00110 numBytes=gzread(infile,&theEventHeader,sizeof(AraStationEventHeader_t)); 00111 // std::cout << numBytes << "\n"; 00112 if(numBytes==0) break; 00113 if(numBytes!=sizeof(AraStationEventHeader_t)) { 00114 if(numBytes) 00115 cerr << "Read problem: " <<numBytes << " of " << sizeof(AraStationEventHeader_t) << endl; 00116 error=1; 00117 break; 00118 } 00119 if(stationIdInt!=0) 00120 theEventHeader.gHdr.stationId=stationId; 00121 00122 // std::cout << (int)theEventHeader.gHdr.stationId << "\t" << (int)stationId << "\n"; 00123 00124 if(theEventHeader.gHdr.numBytes>0) { 00125 // std::cout << "Num bytes: " << theEventHeader.gHdr.numBytes << "\t" << theEventHeader.numBytes << "\n"; 00126 // std::cout << "Event number: " << theEventHeader.eventNumber << "\t" << theEventHeader.unixTime << "\t" << theEventHeader.unixTimeUs << "\n"; 00127 00128 00129 Int_t numDataBytes=theEventHeader.gHdr.numBytes-sizeof(AraStationEventHeader_t); 00130 numBytes=gzread(infile,dataBuffer,numDataBytes); 00131 // std::cout << numBytes << "\n"; 00132 if(numBytes==0) break; 00133 if(numBytes!=numDataBytes) { 00134 if(numBytes) 00135 cerr << "Read problem: " <<numBytes << " of " << numDataBytes << endl; 00136 error=1; 00137 break; 00138 } 00139 process(); 00140 // exit(0); 00141 } 00142 else { 00143 std::cerr << "How can gHdr.numBytes = " << theEventHeader.gHdr.numBytes << "\n"; 00144 error=1; 00145 break; 00146 } 00147 00148 // cout << ": " << theEventHeader.unixTime << endl; 00149 } 00150 gzclose(infile); 00151 // if(error) break; 00152 } 00153 // //Do something with stats 00154 // if(numEvents > 0 && thisUnixTime > unixTimeStart) 00155 // eventRate = (1.*numEvents) / (thisUnixTime - unixTimeStart); 00156 // else 00157 // eventRate = 0; 00158 00159 // printf("Run statistics ****\n\n"); 00160 // printf("unixTimeStart\t%u\tthisUnixTime\t%u\n", unixTimeStart, thisUnixTime); 00161 // printf("numEvents\t\t%i\n", numEvents); 00162 // printf("numEvents_CPU\t%i\n", numEvents_CPU); 00163 // printf("numEvents_RF0\t%i\n", numEvents_RF0); 00164 // printf("numEvents_CALPULSER\t%i\n", numEvents_CALPULSER); 00165 // printf("eventRate\t\t%f\n", eventRate); 00166 00167 process(); 00168 00169 outFile->Write(); 00170 00171 } 00172 00173 00174 void process() { 00175 static int doneInit=0; 00176 static int firstTime=1; 00177 if(!doneInit) { 00178 doneInit=1; 00179 } 00180 if(theEvent) delete theEvent; 00181 00182 theEvent = new RawAtriStationEvent(&theEventHeader,dataBuffer); 00183 00184 00185 //Create stats 00186 if(firstTime){ 00187 unixTimeStart=theEvent->unixTime; 00188 lastUnixTime=unixTimeStart; 00189 firstTime=0; 00190 } 00191 thisUnixTime=theEvent->unixTime; 00192 numEvents++; 00193 if(theEvent->numReadoutBlocks<80) numEvents_CPU++; 00194 else numEvents_RF0++; 00195 if(theEvent->isCalpulserEvent()) numEvents_CALPULSER++; 00196 00197 00198 if(thisUnixTime >= lastUnixTime + 60*30 || lastTime){ 00199 00200 if(thisUnixTime > lastUnixTime){ 00201 00202 eventRate= (1.*(numEvents - lastNumEvents)) / (thisUnixTime - lastUnixTime); 00203 calPulserRate= (1.*(numEvents_CALPULSER - lastNumEvents_CALPULSER)) / (thisUnixTime - lastUnixTime); 00204 RF0Rate= (1.*(numEvents_RF0 - lastNumEvents_RF0)) / (thisUnixTime - lastUnixTime); 00205 CPURate= (1.*(numEvents_CPU - lastNumEvents_CPU)) / (thisUnixTime - lastUnixTime); 00206 00207 } 00208 //Otherwise they are just the last rate 00209 00210 outTree->Fill(); 00211 lastUnixTime=thisUnixTime; 00212 lastNumEvents=numEvents; 00213 lastNumEvents_CPU=numEvents_CPU; 00214 lastNumEvents_RF0=numEvents_RF0; 00215 lastNumEvents_CALPULSER=numEvents_CALPULSER; 00216 00217 00218 } 00219 00220 00221 }
Generated on Mon Jun 3 14:59:45 2013 for ARA ROOT v3.8 Software by
