ARA ROOT v3.10 Software

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