ARA ROOT v3.10 Software

analysis/avWaveformCalPulser.cxx

00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 //Includes
00010 #include <iostream>
00011 
00012 //AraRoot Includes
00013 #include "RawAtriStationEvent.h"
00014 #include "UsefulAtriStationEvent.h"
00015 #include "AraEventCalibrator.h"
00016 #include "FFTtools.h"
00017 
00018 //ROOT Includes
00019 #include "TTree.h"
00020 #include "TFile.h"
00021 #include "TGraph.h"
00022 #include "TCanvas.h"
00023 
00024 RawAtriStationEvent *rawAtriEvPtr;
00025 UsefulAtriStationEvent *realAtriEvPtr;
00026 
00027 int main(int argc, char **argv)
00028 {
00029 
00030   if(argc<4) {
00031     std::cout << "Usage\n" << argv[0] << " <run file> <ped file> <out file>\n";
00032     std::cout << "e.g.\n" << argv[0] << " http://www.hep.ucl.ac.uk/uhen/ara/monitor/root/run1841/event1841.root\n";
00033     return 0;
00034   }
00035   
00036   char pedFileName[FILENAME_MAX];
00037   char outFileName[FILENAME_MAX];
00038   sprintf(pedFileName, "%s", argv[2]);
00039   sprintf(outFileName, "%s", argv[3]);
00040   
00041   printf("------------------------------------------------------------------------\n");
00042   printf("%s\n", argv[0]);
00043   printf("runFileName %s\n", argv[1]);
00044   printf("pedFileName %s\n", pedFileName);
00045   printf("outFileName %s\n", outFileName);
00046   printf("------------------------------------------------------------------------\n");
00047   TFile *fpOut = new TFile(outFileName, "RECREATE");
00048   TGraph *grAv[3][8]={{0}};
00049   TGraph *grAvFFT[3][8]={{0}};
00050   TGraph *grChan;
00051   TCanvas *canAv[2]={0};
00052   const Int_t grSize=20000;
00053   const Int_t maxNumWaveforms=100;
00054   const Double_t intSample=(1./1.6)/32;
00055   Double_t grAvXVals[3][8][grSize]={{{0}}};
00056   Double_t grAvYVals[3][8][grSize]={{{0}}};
00057   Int_t numWaveforms[3][8]={{0}};
00058   Int_t chanMap[3][8]={{0,1,8,9,16,17,24,25},{3,4,10,11,18,19,26,27},{5,6,28,29,-1,-1}};
00059 
00060   TFile *fp = TFile::Open(argv[1]);
00061   if(!fp) {
00062     std::cerr << "Can't open file\n";
00063      return -1;
00064    }
00065    TTree *eventTree = (TTree*) fp->Get("eventTree");
00066    if(!eventTree) {
00067      std::cerr << "Can't find eventTree\n";
00068      return -1;
00069    }
00070    
00071    eventTree->SetBranchAddress("event",&rawAtriEvPtr);
00072    Long64_t numEntries=eventTree->GetEntries();
00073    Long64_t starEvery=numEntries/80;
00074    Int_t stationId=0;
00075    eventTree->GetEntry(0);
00076    stationId = rawAtriEvPtr->stationId;
00077    if(starEvery==0) starEvery++;
00078 
00079 
00080    printf("stationId %i numEntries %li\n", stationId, (long int)numEntries);
00081    AraEventCalibrator *calib = AraEventCalibrator::Instance();
00082    calib->setAtriPedFile(pedFileName,stationId);
00083 
00084    for(Long64_t event=0;event<numEntries;event++) {
00085      if(event%starEvery==0) {
00086        std::cerr << "*";       
00087      }
00088 
00089      eventTree->GetEntry(event);
00090      
00091      if(rawAtriEvPtr->isCalpulserEvent()==0) continue;
00092 
00093      realAtriEvPtr = new UsefulAtriStationEvent(rawAtriEvPtr, AraCalType::kFirstCalib);
00094      
00095      Int_t chan=0;
00096      Int_t ant=0;
00097      Int_t pol=0;
00098      for(pol=0;pol<2;pol++){
00099        for(ant=0;ant<8;ant++){
00100          chan=chanMap[pol][ant];
00101          //printf("pol %i ant %i chan %i\n", pol, ant, chan);
00102          if(chan<0) continue;
00103          if(numWaveforms[pol][ant]>=maxNumWaveforms) continue;
00104          
00105          grChan = realAtriEvPtr->getGraphFromElecChan(chan);             
00106          TGraph *chanInt = FFTtools::getInterpolatedGraph(grChan,intSample); 
00107 
00108          //second time etc
00109          if(numWaveforms[pol][ant]==0){
00110            Double_t *xVals = chanInt->GetX();
00111            Double_t *yVals = chanInt->GetY();
00112            Int_t numSamples = chanInt->GetN();
00113            //printf("pol %i ant %i chan %i numSamples %i\n", pol, ant, chan, numSamples);
00114            
00115            for(int samp=0;samp<grSize;samp++){
00116              if(samp>numSamples) continue;
00117              grAvYVals[pol][ant][samp]+=yVals[samp];
00118              grAvXVals[pol][ant][samp]=xVals[samp];
00119            }
00120            numWaveforms[pol][ant]++;
00121          }
00122          else{
00123            TGraph *grTemplate = new TGraph(grSize, grAvXVals[pol][ant], grAvYVals[pol][ant]);    
00124            TGraph *grCorr = FFTtools::getCorrelationGraph(chanInt, grTemplate);
00125            Int_t peakBin =  FFTtools::getPeakBin(grCorr);
00126            
00127            Double_t *xVals = chanInt->GetX();
00128            Double_t *yVals = chanInt->GetY();
00129            Int_t numSamples = chanInt->GetN();
00130            //      printf("peakBin %i numSamples %d proposed %d\n", peakBin, grCorr->GetN()/2,  peakBin - grCorr->GetN()/2);
00131            Int_t deltaBin = peakBin - grCorr->GetN()/2;
00132            for(int samp=0;samp<grSize;samp++){
00133              if(samp>numSamples) continue;
00134              //      grAvXVals[pol][ant][samp]=xVals[samp];
00135 
00136              Int_t newSample = samp+deltaBin;
00137              if(newSample<0 || newSample>grSize) continue;
00138              grAvYVals[pol][ant][samp]+=yVals[newSample];
00139              
00140            }
00141            numWaveforms[pol][ant]++;
00142            delete grCorr;
00143            delete grTemplate;
00144 
00145          }
00146          
00147          delete grChan;
00148          delete chanInt;
00149        }
00150      }
00151      delete realAtriEvPtr;
00152    
00153      if(maxNumWaveforms<=numWaveforms[0][0]) break;
00154 
00155    }
00156    
00157 
00158 
00159    Int_t chan=0;
00160    Int_t ant=0;
00161    Int_t pol=0;
00162    for(pol=0;pol<2;pol++){
00163      char canName[100];
00164      sprintf(canName, "can%sPol_%i_waveforms", pol ? "H": "V", numWaveforms[pol][0]);
00165      canAv[pol]=new TCanvas(canName, canName);
00166      canAv[pol]->Divide(4,2);
00167      for(ant=0;ant<8;ant++){
00168        Int_t row=0, column=0;
00169        row = ant%2;
00170        column = ant/2;
00171        canAv[pol]->cd(1+column+row*4);
00172        chan=chanMap[pol][ant];
00173        
00174        for(int samp=0;samp<grSize;samp++){
00175          if(numWaveforms[pol][ant]==0) grAvYVals[pol][ant][samp]=0;
00176          else grAvYVals[pol][ant][samp]/=numWaveforms[pol][ant];
00177        }
00178        grAv[pol][ant] = new TGraph(grSize, grAvXVals[pol][ant], grAvYVals[pol][ant]);
00179        char grName[100];
00180        sprintf(grName, "grAv_%sPol_ant%i", pol ? "H": "V", ant);
00181        grAv[pol][ant]->SetName(grName);
00182        grAv[pol][ant]->SetTitle(grName);
00183        grAv[pol][ant]->GetXaxis()->SetTitle("Time (ns)");
00184        grAv[pol][ant]->GetYaxis()->SetTitle("Voltage (mV)");
00185        fpOut->cd();
00186        grAv[pol][ant]->Draw("AL");
00187        grAv[pol][ant]->Write();
00188        grAvFFT[pol][ant] = FFTtools::makePowerSpectrumMilliVoltsNanoSecondsdB(grAv[pol][ant]);
00189        sprintf(grName, "grAvFFT_%sPol_ant%i", pol ? "H": "V", ant);
00190        grAvFFT[pol][ant]->SetName(grName);
00191        grAvFFT[pol][ant]->SetTitle(grName);
00192        grAvFFT[pol][ant]->GetXaxis()->SetTitle("Frequency (MHz)");
00193        grAvFFT[pol][ant]->GetYaxis()->SetTitle("Power ()");
00194 
00195        grAvFFT[pol][ant]->Write();
00196 
00197        //       printf("%sPol ant %i numWaveforms %i\n", pol ? "H" : "V", ant, numWaveforms[pol][ant]);
00198 
00199      }
00200      canAv[pol]->SetTitle(canName);
00201      canAv[pol]->Write();
00202      
00203    }
00204    fpOut->Write();
00205 
00206    std::cerr << "\n";
00207 
00208 }

Generated on Tue Jul 16 16:58:01 2013 for ARA ROOT v3.10 Software by doxygen 1.4.7