ARA ROOT v3.8 Software

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 doxygen 1.4.7