ARA ROOT Test BEd Software

analysis/makeL2Files_depricated.cxx

00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 //Includes
00011 #include <iostream>
00012 
00013 //AraRoot Includes
00014 #include "UsefulAraEvent.h"
00015 #include "RawAraEvent.h"
00016 #include "RawAraHeader.h"
00017 #include "AraHkData.h"
00018 #include "araDefines.h"
00019 #include "FFTtools.h"
00020 #include "RFWindow.h"
00021 //Include FFTtools.h if you want to ask the correlation, etc. tools
00022 
00023 //ROOT Includes
00024 #include "TTree.h"
00025 #include "TFile.h"
00026 #include "TGraph.h"
00027 #include "TH1.h"
00028 #include "TH1D.h"
00029 #include "TH2.h"
00030 #include "TH2D.h"
00031 
00032 //Global input file variables
00033 TFile *fpIn=0;
00034 TTree *feventTreeIn=0;
00035 RawAraEvent *evPtr=0;
00036 RFWindow *window=0;
00037 
00038 //Some more basic global variables
00039 TH1D *fftWindow[RFCHANS_PER_STATION];
00040 TH2D *fftAvTime[RFCHANS_PER_STATION];
00041 
00042 
00043 
00044 void makeHistos();
00045 
00046 double calcEventRate(double lastTime, double thisTime, double lastEvNum, double thisEvNum, double interval, double lastRate);
00047 
00048 int openRootFile(char *fileName);
00049 
00050 double getXMax(TGraph *gr);
00051 
00052 int main(int argc, char **argv)
00053 {
00054 
00055   if(argc<3) {
00056     std::cout << "Usage\n" << argv[0] << " <input file> <output file>\n";
00057     std::cout << "e.g.\n" << argv[0] << " http://www.hep.ucl.ac.uk/uhen/ara/monitor/root/run1841/event1841.root output.root\n";
00058     return 0;
00059   }
00060 
00061   if(openRootFile(argv[1])==0){
00062     std::cout << "Opened input file\n";
00063   }
00064   else
00065     return -1;
00066   
00067    char outFileName[FILENAME_MAX];
00068    sprintf(outFileName, "%s", argv[2]);   //FIXME
00069    TFile *fpOut = new TFile(outFileName, "RECREATE");
00070    TTree *L1Tree = new TTree("L1Tree", "L1Tree");
00071 
00072    //Create some useful variables
00073    Double_t rms[RFCHANS_PER_STATION]={0};
00074    Double_t rmsFft[RFCHANS_PER_STATION]={0};
00075    Double_t peakFreq[RFCHANS_PER_STATION]={0};
00076    Double_t power[RFCHANS_PER_STATION]={0};
00077    Double_t eventRate=0;
00078    Double_t lastEventRate=0;
00079    Int_t eventNum=0;
00080    Int_t eventNumLastHour=0;
00081    Int_t lastEventNum=0;
00082    Int_t runNumber=0;//FIXME
00083    Int_t unixTime=0; //FIXME  could use full unix time in us as well
00084    Double_t lastUnixTime=0;
00085    Double_t lastUnixTimeHours=0;
00086 
00087    RawAraHeader *head=0;
00088    AraHkData *hk=0;
00089    UsefulAraEvent *realEvent=0;
00090    TGraph *rfChan;
00091    TGraph *rfChanFft;
00092    // TGraph *rfChan[RFCHANS_PER_STATION]={0};
00093    // TGraph *rfChanFft[RFCHANS_PER_STATION]={0};
00094 
00095 
00096    L1Tree->Branch("rms", rms, "rms[16]/D");//FIXME
00097    L1Tree->Branch("rmsFft", rmsFft, "rmsFft[16]/D");
00098    L1Tree->Branch("peakFreq", peakFreq, "peakFreq[16]/D");
00099    L1Tree->Branch("power", power, "power[16]/D");//FIXME
00100    L1Tree->Branch("eventRate", &eventRate, "eventRate/D");
00101    L1Tree->Branch("lastUnixTime", &lastUnixTime, "lastUnixTime/I");
00102    L1Tree->Branch("eventNum", &eventNum, "eventNum/I");
00103    L1Tree->Branch("runNumber", &runNumber, "runNumber/I");
00104    L1Tree->Branch("unixTime", &unixTime, "unixTime/I");
00105    
00106    //L1Tree->Branch("rfChan","TGraph[16]",rfChan);
00107    //L1Tree->Branch("rfChanFft","TGraph[16]",rfChanFft);
00108 
00109    L1Tree->Branch("realEvent", "UsefulAraEvent", &realEvent);
00110    L1Tree->Branch("head","RawAraHeader",&head);
00111    L1Tree->Branch("hk","AraHkData",&hk);
00112    
00113    window = new RFWindow();
00114    L1Tree->Branch("window","RFWindow",&window);
00115 
00116    //Now loop through the tree
00117 
00118 
00119 
00120    Long64_t numEntries=feventTreeIn->GetEntries();
00121    Long64_t starEvery=numEntries/80;
00122    if(starEvery==0) starEvery++;
00123    
00124    //   numEntries=10;//FIXME
00125 
00126 
00127    for(Long64_t event=0;event<numEntries;event++) {
00128      if(event%starEvery==0) {
00129        std::cerr << "*";       
00130      }
00131 
00132      feventTreeIn->GetEntry(event);
00133      realEvent = new UsefulAraEvent(evPtr,AraCalType::kLatestCalib);
00134      eventNum = evPtr->head.eventNumber;
00135      unixTime = evPtr->head.unixTime;
00136      head=&(evPtr->head);
00137      hk=&(evPtr->hk);
00138 
00139      eventRate=calcEventRate(lastUnixTime, unixTime, lastEventNum, eventNum, 60, lastEventRate);
00140    
00141      for(int antenna=0;antenna<RFCHANS_PER_STATION;antenna++){
00142        
00143        rfChan = realEvent->getGraphFromRFChan(antenna);
00144        rfChanFft = realEvent->getFFTForRFChan(antenna);
00145        rms[antenna]=rfChan->GetRMS(2);
00146        Double_t tempPeak=0;
00147        FFTtools::getPeakRmsSqVal(rfChan, tempPeak, rmsFft[antenna]);
00148        peakFreq[antenna]=getXMax(rfChanFft);
00149        power[antenna]=0; //FIXME
00150       
00151        //decide whether to add to the rf window
00152        TH1D* tempFftHisto = realEvent->getFFTHistForRFChan(antenna);
00153        if(unixTime>lastUnixTimeHours+3600){
00154          window->addToAvHisto(antenna, tempFftHisto);
00155        }
00156        else
00157          window->clearAvHisto(antenna);
00158        
00159        //Fill our TH1D and TH2D for the average FFt
00160        TH1D *tempTempFftHisto = realEvent->getFFTHistForRFChan(antenna);
00161        if(unixTime<lastUnixTimeHours+3600){
00162          fftWindow->Add(tempTempFftHisto);
00163          eventNumLastHour++;
00164        }
00165        else{
00166          fftAvTime->Fill
00167 
00168 
00169        }
00170          
00171 
00172 
00173 
00174        delete rfChan;
00175        delete rfChanFft;
00176        delete tempFftHisto;
00177        
00178 
00179      }
00180      L1Tree->Fill();
00181      if(unixTime>lastUnixTime+60){
00182        lastEventNum = eventNum;
00183        lastUnixTime = unixTime;
00184        lastEventRate = eventRate;
00185      }
00186 
00187      // for(int antenna=0;antenna<RFCHANS_PER_STATION;antenna++){
00188      //   delete rfChan[antenna];
00189      //   delete rfChanFft[antenna];
00190      // }
00191 
00192      delete realEvent;
00193    
00194    }
00195    
00196    fpIn->Close();
00197 
00198    fpOut->Write();
00199    fpOut->Close();
00200 
00201    std::cerr << "\n";
00202 
00203 }
00204 
00205 void makeHistos(){
00206 
00207   char histoName[260];
00208    Int_t numBinsY=256;
00209    Double_t minY=0.0;
00210    Double_t maxY=1000.0;
00211    minY = minY - ( (maxY-minY)/numBinsY/2.0 ); // adjust histogram edges so that the bin centers
00212    maxY = maxY + ( (maxY-minY)/numBinsY/2.0 ); // of the histograms are aligned with graph [add bdf]
00213    numBinsY++;
00214 
00215    Int_t numBinsX=11;
00216    Double_t minX=0.0;
00217    Double_t maxX=10.0;
00218 
00219 
00220   for(int antenna=0;antenna<RFCHANS_PER_STATION;antenna++){
00221     sprintf(histoName, "average_fft_antenna_%i", antenna);
00222     fftWindow[antenna] = new TH1D(histoName, histoName, numBinsX, minX, maxX);
00223     fftAvTime[antenna] = new TH1D(histoName, histoName, numBinsX, minX, maxX, numBinsY, minY, maxY);
00224 
00225   }
00226 
00227 
00228 }
00229 
00230 
00231 int openRootFile(char *fileName){
00232 
00233   fpIn = TFile::Open(fileName);
00234   if(!fpIn) {
00235     std::cerr << "Can't open file\n";
00236      return -1;
00237    }
00238    feventTreeIn = (TTree*) fpIn->Get("eventTree");
00239    if(!feventTreeIn) {
00240      std::cerr << "Can't find eventTree\n";
00241      return -1;
00242    }
00243 
00244    feventTreeIn->SetBranchAddress("event",&evPtr);
00245 
00246    return 0;
00247 
00248 }
00249 
00250 
00251 double calcEventRate(double lastTime, double thisTime, double lastEvNum, double thisEvNum, double interval, double lastRate){
00252      Double_t dRate = 0;
00253      Double_t eventRate = 0;
00254      if(thisEvNum > lastEvNum)
00255        {
00256          Double_t dEventNum = thisEvNum - lastEvNum;
00257          if(thisTime > lastTime+interval)
00258            dRate = (thisTime-lastTime)/dEventNum;
00259        }
00260      if(dRate>0)
00261        eventRate = 1./dRate;
00262      else 
00263        eventRate = lastRate;
00264   
00265      return eventRate;
00266 
00267 }
00268 
00269 
00270 
00271 double getXMax(TGraph *gr){
00272   int bin=FFTtools::getPeakBin(gr);
00273   return gr->GetX()[bin];
00274 
00275 
00276 }
00277 
00278    // //Create TH2 to store the average FFT with the right number of bins
00279    // feventTreeIn->GetEntry(0);
00280    // Double_t minX=evPtr->head.unixTime/60;
00281    // feventTreeIn->GetEntry(feventTreeIn->GetEntries()-1);
00282    // Double_t maxX=evPtr->head.unixTime/60;
00283    // Int_t xBins=(maxX-minX)/60;
00284    // Double_t maxY=1000.0;
00285    // Double_t minY = 0.0;
00286    // Int_t yBins = 256;
00287    // minY = minY - ( (maxY-minY)/yBins/2.0 ); // adjust histogram edges so that the bin centers
00288    // maxY = maxY + ( (maxY-minY)/yBins/2.0 ); // of the histograms are aligned with graph [add bdf]
00289    // yBins++;
00290 
00291    // printf("First time %i, lastTime %i number of bins is %i\n", firstTime, endTime, nTimeBins);
00292 
00293    // avFFT = new TH2D("average_FFT_histo", "average_FFT_histo", xBins, minX, maxX, yBins, minY, maxY);
00294 
00295 
00296 
00297 
00298 
00299 
00300 
00301 
00302 
00303 //Things to Do
00304 
00305 //Average FFT over an hour
00306 
00307 // --> Need 16 TH2D's to store that are x - time y - frequency
00308 // --> Need 16 TH1D's to fill this
00309 // ----> Each TH1D is added to over an hour then averaged at the end
00310 
00311 
00312 // Some functions like:
00313 
00314 // addHisto for antenna
00315 // getAvHisto for antenna
00316 // clearAvHisto
00317 
00318 

Generated on Wed Aug 8 16:18:55 2012 for ARA ROOT Test Bed Software by doxygen 1.4.7