ARA ROOT v3.6 Software

AraDisplay/AraWaveformGraph.cxx

00001 #include "AraWaveformGraph.h"
00002 #include "AraCorrelationFactory.h"
00003 #include "AraGeomTool.h"
00004 #include "TButton.h"
00005 #include "TList.h"
00006 #include "TCanvas.h"
00007 #include "TStyle.h"
00008 #include "TH1.h"
00009 #include "TAxis.h"
00010 #include <iostream>
00011 using namespace std;
00012 
00013 #include "FFTtools.h"
00014 
00015 
00016 ClassImp(AraWaveformGraph);
00017 
00018 AraWaveformGraph::AraWaveformGraph()
00019 
00020   : TGraph(),fElecChan(-1),fRFChan(-1),fNewCanvas(0)
00021     
00022 {
00023   this->SetEditable(kFALSE);
00024 }
00025 
00026 
00027 AraWaveformGraph::AraWaveformGraph(int N, const Int_t *x, const Int_t *y)
00028 
00029   : TGraph(N,x,y),fElecChan(-1),fRFChan(-1),fNewCanvas(0)
00030 {
00031   this->SetEditable(kFALSE);
00032 }
00033 
00034 AraWaveformGraph::AraWaveformGraph(int N, const Float_t *x, const Float_t *y)
00035 
00036   : TGraph(N,x,y),fElecChan(-1),fRFChan(-1),fNewCanvas(0)
00037 {
00038   this->SetEditable(kFALSE);
00039 }
00040 
00041 AraWaveformGraph::AraWaveformGraph(int N, const Double_t *x, const Double_t *y)
00042 
00043   : TGraph(N,x,y),fElecChan(-1),fRFChan(-1),fNewCanvas(0)
00044 {  
00045   this->SetEditable(kFALSE);
00046 }
00047 
00048 AraWaveformGraph::~AraWaveformGraph()
00049 {
00050    //   std::cout << "~AraWaveformGraph" << std::endl;
00051 }
00052 
00053 void AraWaveformGraph::ExecuteEvent(Int_t event, Int_t px, Int_t py)
00054 {
00055   static int keyWasPressed=0;
00056    switch (event) {
00057    case kKeyPress:
00058      //     std::cout << "kKeyPress" << std::endl;
00059      keyWasPressed=1;
00060      break;
00061    case kButtonPress:
00062      //     cout << "kButtonPress" << endl;
00063      break;
00064      
00065    case kButton1Double:
00066      //     std::cout << "kButtonDoubleClick" << std::endl;
00067      //     new TCanvas();
00068      break;
00069 
00070    case kButton1Down:
00071      //     std::cout << "kButton1Down" << std::endl;
00072      if(!keyWasPressed) {
00073        if(!fNewCanvas) drawInNewCanvas();
00074        else this->TGraph::ExecuteEvent(event,px,py);
00075      }
00076      else {
00077        //       std::cout << "ctrl + click\n";
00078        AraCorrelationFactory::Instance()->addWaveformToCorrelation(this);
00079        keyWasPressed=0;
00080      }
00081 
00082      break;
00083           
00084    default:
00085        this->TGraph::ExecuteEvent(event,px,py);
00086        break;
00087    }
00088 }
00089 
00090 void AraWaveformGraph::setElecChan(int elecChan)
00091 {
00092   fElecChan=elecChan;
00093   char graphName[180];
00094   sprintf(graphName,"grElec%d",elecChan);
00095   this->SetName(graphName);
00096   char graphTitle[180];
00097   sprintf(graphTitle,"Raw Electronics Channel %d",elecChan+1);
00098   this->SetTitle(graphTitle);
00099   
00100 }
00101 
00102 void AraWaveformGraph::setRFChan(int rfChan, int stationId)
00103 {
00104   fRFChan=rfChan;
00105   char graphName[180];
00106   sprintf(graphName,"grRFChan%d",rfChan);
00107   this->SetName(graphName);
00108   char graphTitle[180];
00109   sprintf(graphTitle,"RF Channel %d (Ant %s)",rfChan+1,AraGeomTool::Instance()->fStationInfo[stationId].fAntInfo[rfChan].designator);
00110   this->SetTitle(graphTitle);
00111 }
00112   
00113   
00114 void AraWaveformGraph::drawInNewCanvas()
00115 {
00116   gStyle->SetTitleH(0.1);
00117   gStyle->SetOptTitle(1);
00118   gStyle->SetPadLeftMargin(0.15);
00119   gStyle->SetPadRightMargin(0.1);
00120   gStyle->SetPadTopMargin(0.1);
00121   gStyle->SetPadBottomMargin(0.1);
00122   gStyle->SetCanvasDefW(600);
00123   gStyle->SetCanvasDefH(400);
00124   //   gROOT->ForceStyle();
00125   AraWaveformGraph *thisCopy = (AraWaveformGraph*)this->Clone();
00126   thisCopy->GetXaxis()->SetLabelSize(0.06);
00127   thisCopy->GetXaxis()->SetTitleSize(0.06);
00128   thisCopy->GetYaxis()->SetLabelSize(0.06);
00129   thisCopy->GetYaxis()->SetTitleSize(0.06);
00130   thisCopy->GetXaxis()->SetTitle("Time (ns)");
00131   thisCopy->GetYaxis()->SetTitle("Voltage (mV-ish)");
00132 
00133 
00134   thisCopy->SetTitle(this->GetTitle());
00135   TCanvas *can = new TCanvas();
00136   can->SetLeftMargin(0.15);
00137   can->SetBottomMargin(0.15);
00138   can->SetTopMargin(0.1);
00139   can->SetRightMargin(0.1);
00140   thisCopy->Draw("al");
00141   //  fNewCanvas=1;
00142   
00143 }
00144 
00145 //______________________________________________________________________________
00146 void AraWaveformGraph::DrawFFT()
00147 {
00148   //  char graphTitle[180];
00149   gStyle->SetTitleH(0.1);
00150   gStyle->SetLabelSize(0.1,"xy");
00151   gStyle->SetTitleSize(0.1,"xy");
00152   gStyle->SetTitleOffset(0.5,"y");
00153   gStyle->SetOptTitle(1);
00154   gStyle->SetCanvasDefW(600);
00155   gStyle->SetCanvasDefH(400);
00156   //   gROOT->ForceStyle();
00157    
00158   TCanvas *can = new TCanvas();
00159   can->SetLeftMargin(0.15);
00160   can->SetBottomMargin(0.15);
00161   can->SetTopMargin(0.1);
00162   can->SetRightMargin(0.1);
00163 
00164   TGraph *grFFT  = this->getFFT();
00165   grFFT->GetXaxis()->SetLabelSize(0.06);
00166   grFFT->GetXaxis()->SetTitleSize(0.06);
00167   grFFT->GetYaxis()->SetLabelSize(0.06);
00168   grFFT->GetYaxis()->SetTitleSize(0.06);
00169   grFFT->GetXaxis()->SetTitle("Frequency (MHz)");
00170   grFFT->GetYaxis()->SetTitle("dB (m maybe)");
00171 
00172   
00173 
00174   grFFT->SetTitle(this->GetTitle());
00175   grFFT->Draw("al");
00176   
00177   //   printf("AraWaveformGraph::DrawFFT: not yet implemented\n");
00178 }
00179 
00180 //______________________________________________________________________________
00181 void AraWaveformGraph::DrawHilbert()
00182 {
00183   //  char graphTitle[180];
00184   gStyle->SetTitleH(0.1);
00185   gStyle->SetLabelSize(0.1,"xy");
00186   gStyle->SetTitleSize(0.1,"xy");
00187   gStyle->SetTitleOffset(0.5,"y");
00188   gStyle->SetOptTitle(1);
00189   gStyle->SetCanvasDefW(600);
00190   gStyle->SetCanvasDefH(400);
00191   //   gROOT->ForceStyle();
00192    
00193   TCanvas *can = new TCanvas();
00194   can->SetLeftMargin(0.15);
00195   can->SetBottomMargin(0.15);
00196   can->SetTopMargin(0.1);
00197   can->SetRightMargin(0.1);
00198 
00199   TGraph *grHilbert  = this->getHilbert();
00200   grHilbert->GetXaxis()->SetLabelSize(0.06);
00201   grHilbert->GetXaxis()->SetTitleSize(0.06);
00202   grHilbert->GetYaxis()->SetLabelSize(0.06);
00203   grHilbert->GetYaxis()->SetTitleSize(0.06);
00204   grHilbert->GetXaxis()->SetTitle("Time (ns)");
00205   grHilbert->GetYaxis()->SetTitle("Voltage^2 (mv^2) ");
00206  
00207   grHilbert->SetTitle(this->GetTitle());
00208   grHilbert->Draw("al");
00209   
00210   //   printf("AraWaveformGraph::DrawFFT: not yet implemented\n");
00211 }
00212 
00213 TGraph *AraWaveformGraph::getFFT()
00214 {
00215   Double_t newX[512],newY[512];
00216   TGraph *grInt = FFTtools::getInterpolatedGraph(this,0.5);
00217   Int_t numSamps=grInt->GetN();
00218   Double_t *xVals=grInt->GetX();
00219   Double_t *yVals=grInt->GetY();
00220   for(int i=0;i<512;i++) {
00221     if(i<numSamps) {
00222       newX[i]=xVals[i];
00223       newY[i]=yVals[i];
00224     }
00225     else {
00226       newX[i]=newX[i-1]+(1.);
00227       newY[i]=0;
00228     }      
00229   }
00230   TGraph *grNew = new TGraph(512,newX,newY);
00231   TGraph *grFFT = FFTtools::makePowerSpectrumMilliVoltsNanoSecondsdB(grNew);
00232   delete grNew;
00233   delete grInt;
00234   return grFFT;
00235 }
00236 
00237 TH1D *AraWaveformGraph::getFFTHisto() {
00238   TGraph *grFFT =getFFT();
00239   Double_t *xVals=grFFT->GetX();
00240   Double_t *yVals=grFFT->GetY();
00241   Int_t numPoints=grFFT->GetN();
00242   Double_t binWidth=xVals[1]-xVals[0];
00243   char histName[180];
00244   sprintf(histName,"%s_ffthist",this->GetName());
00245   TH1D *histFFT = new TH1D(histName,histName,256,0,1000);
00246   for(int i=0;i<numPoints;i++) {    
00247     histFFT->Fill(xVals[i],yVals[i]);
00248   }
00249   delete grFFT;
00250   return histFFT;
00251 }
00252 
00253 
00254 
00255 
00256 TGraph *AraWaveformGraph::getHilbert()
00257 {
00258   TGraph *grInt = FFTtools::getInterpolatedGraph(this,1./2.6);
00259   TGraph *grHilbert = FFTtools::getHilbertEnvelope(grInt);
00260   delete grInt;
00261   return grHilbert;
00262 }
00263 
00264 void AraWaveformGraph::AddToCorrelation()
00265 {
00266   AraCorrelationFactory::Instance()->addWaveformToCorrelation(this);
00267 }

Generated on Mon Mar 18 16:04:45 2013 for ARA ROOT v3.6 Software by doxygen 1.4.7