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
