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
