ARA ROOT Test BEd Software

analysis/makeL2Files_For_Testing.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 
00022 
00023 //ROOT Includes
00024 #include "TTree.h"
00025 #include "TFile.h"
00026 #include "TGraph.h"
00027 
00028 double calcEventRate(double lastTime, double thisTime, double lastEvNum, double thisEvNum, double interval, double lastRate);
00029 
00030 double getXMax(TGraph *gr);
00031 
00032 int main(int argc, char **argv)
00033 {
00034 
00035   if(argc<3) {
00036     std::cout << "Usage\n" << argv[0] << " <input file> <output file>/n";
00037     std::cout << "e.g.\n" << argv[0] << " http://www.hep.ucl.ac.uk/uhen/ara/monitor/root/run1841/event1841.root output.root\n";
00038     return 0;
00039   }
00040 
00041   TFile *fpIn = TFile::Open(argv[1]);
00042   if(!fpIn) {
00043     std::cerr << "Can't open file\n";
00044      return -1;
00045    }
00046    TTree *eventTree = (TTree*) fpIn->Get("eventTree");
00047    if(!eventTree) {
00048      std::cerr << "Can't find eventTree\n";
00049      return -1;
00050    }
00051 
00052    RawAraEvent *evPtr=0;
00053    eventTree->SetBranchAddress("event",&evPtr);
00054 
00055 
00056    char outFileName[FILENAME_MAX];
00057    sprintf(outFileName, "%s", argv[2]);   //FIXME
00058    TFile *fpOut = new TFile(outFileName, "RECREATE");
00059    TTree *L1Tree = new TTree("L1Tree", "L1Tree");
00060 
00061    //Create some useful variables
00062    Double_t rms[RFCHANS_PER_STATION]={0};
00063    Double_t rmsFft[RFCHANS_PER_STATION]={0};
00064    Double_t peakFreq[RFCHANS_PER_STATION]={0};
00065    Double_t power[RFCHANS_PER_STATION]={0};
00066    Double_t eventRate=0;
00067    Double_t eventRate60=0;
00068    Double_t lastEventRate=0;
00069    Double_t lastEventRate60=0;
00070    Double_t lastTime=0;
00071    Double_t firstTime=0;
00072    Int_t lastEventNum=0;
00073    Int_t eventNum=0;
00074    Int_t runNumber=0;//FIXME
00075    Int_t unixTime=0; //FIXME  could use full unix time in us as well
00076 
00077    // TGraph *rfChan[RFCHANS_PER_STATION]={0};
00078    // TGraph *rfChanFft[RFCHANS_PER_STATION]={0};
00079    
00080    RawAraHeader *head=0;
00081    AraHkData *hk=0;
00082    UsefulAraEvent *realEvent=0;
00083    RFWindow *window=0;
00084 
00085    L1Tree->Branch("rms", rms, "rms[16]/D");//FIXME
00086    L1Tree->Branch("rmsFft", rmsFft, "rmsFft[16]/D");
00087    L1Tree->Branch("peakFreq", peakFreq, "peakFreq[16]/D");
00088    L1Tree->Branch("power", power, "power[16]/D");//FIXME
00089    L1Tree->Branch("eventRate", &eventRate, "eventRate/D");
00090    L1Tree->Branch("eventRate60", &eventRate60, "eventRate60/D");
00091    L1Tree->Branch("lastTime", &lastTime, "lastTime/D");
00092    L1Tree->Branch("firstTime", &firstTime, "firstTime/D");
00093    L1Tree->Branch("lastEventNum", &lastEventNum, "lastEventNum/I");
00094 
00095    L1Tree->Branch("eventNum", &eventNum, "eventNum/I");
00096    L1Tree->Branch("runNumber", &runNumber, "runNumber/I");
00097    L1Tree->Branch("unixTime", &unixTime, "unixTime/I");
00098    
00099    // L1Tree->Branch("rfChan","TGraph[16]",rfChan);
00100    // L1Tree->Branch("rfChanFft","TGraph[16]",rfChanFft);
00101 
00102    L1Tree->Branch("realEvent", "UsefulAraEvent", &realEvent);
00103    L1Tree->Branch("head","RawAraHeader",&head);
00104    L1Tree->Branch("hk","AraHkData",&hk);
00105    L1Tree->Branch("window","RFWindow",&window);
00106 
00107    //Now loop through the tree
00108 
00109    TGraph *rfChan;
00110    TGraph *rfChanFft;
00111    window = new RFWindow();
00112 
00113    Long64_t numEntries=eventTree->GetEntries();
00114    Long64_t starEvery=numEntries/80;
00115    if(starEvery==0) starEvery++;
00116 
00117 
00118    for(Long64_t event=0;event<numEntries;event++) {
00119      if(event%starEvery==0) {
00120        std::cerr << "*";       
00121      }
00122 
00123      eventTree->GetEntry(event);
00124      realEvent = new UsefulAraEvent(evPtr,AraCalType::kLatestCalib);
00125 
00126      eventNum = evPtr->head.eventNumber;
00127      unixTime = evPtr->head.unixTime;
00128      if(event==0) firstTime=unixTime;
00129      head=&(evPtr->head);
00130      hk=&(evPtr->hk);
00131      //     eventRate=calcEventRate(lastTime, unixTime, lastEventNum, eventNum, 1, lastEventRate);
00132      eventRate60=calcEventRate(lastTime, unixTime, lastEventNum, eventNum, 60, lastEventRate60);
00133      window->addGraphToWindow(realEvent->getFFTForRFChan(0));
00134 
00135      for(int antenna=0;antenna<RFCHANS_PER_STATION;antenna++){
00136        
00137        // rfChan[antenna] = realEvent->getGraphFromRFChan(antenna);
00138        // rfChanFft[antenna] = realEvent->getFFTForRFChan(antenna);
00139        // rms[antenna]=rfChan[antenna]->GetRMS(2);
00140        // Double_t tempPeak=0;
00141        // FFTtools::getPeakRmsSqVal(rfChan[antenna], tempPeak, rmsFft[antenna]);
00142        // peakFreq[antenna]=FFTtools::getPeakVal(rfChanFft[antenna]);
00143        // power[antenna]=0; //FIXME
00144        rfChan = realEvent->getGraphFromRFChan(antenna);
00145        rfChanFft = realEvent->getFFTForRFChan(antenna);
00146        rms[antenna]=rfChan->GetRMS(2);
00147        Double_t tempPeak=0;
00148        FFTtools::getPeakRmsSqVal(rfChan, tempPeak, rmsFft[antenna]);
00149        peakFreq[antenna]=getXMax(rfChanFft);
00150        power[antenna]=0; //FIXME
00151 
00152        delete rfChan;
00153        delete rfChanFft;
00154        
00155 
00156      }
00157      L1Tree->Fill();
00158      if(unixTime>lastTime+60){
00159        lastEventNum = eventNum;
00160        lastTime = unixTime;
00161        lastEventRate = eventRate;
00162        lastEventRate60 = eventRate60;
00163      }
00164 
00165      // for(int antenna=0;antenna<RFCHANS_PER_STATION;antenna++){
00166      //   delete rfChan[antenna];
00167      //   delete rfChanFft[antenna];
00168      // }
00169 
00170      delete realEvent;
00171    
00172    }
00173    
00174    delete window;
00175    
00176    fpIn->Close();
00177 
00178    fpOut->Write();
00179    fpOut->Close();
00180 
00181    std::cerr << "\n";
00182 
00183 }
00184 
00185 double calcEventRate(double lastTime, double thisTime, double lastEvNum, double thisEvNum, double interval, double lastRate){
00186      Double_t dRate = 0;
00187      Double_t eventRate = 0;
00188      if(thisEvNum > lastEvNum)
00189        {
00190          Double_t dEventNum = thisEvNum - lastEvNum;
00191          if(thisTime > lastTime+interval)
00192            dRate = (thisTime-lastTime)/dEventNum;
00193        }
00194      if(dRate>0)
00195        eventRate = 1./dRate;
00196      else 
00197        eventRate = lastRate;
00198   
00199      return eventRate;
00200 
00201 }
00202 
00203 double getXMax(TGraph *gr){
00204   int bin=FFTtools::getPeakBin(gr);
00205   return gr->GetX()[bin];
00206 
00207 
00208 }
00209 
00210 
00211 //Things to Do
00212 
00213 //Average FFT over an n event window
00214 
00215 

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