ARA ROOT v3.6 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 "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 doxygen 1.4.7