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