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
