calibration/firstCalibTry.cxx
00001 #include <iostream> 00002 #include <fstream> 00003 00004 //Event Reader Includes 00005 #include "UsefulAraEvent.h" 00006 #include "RawAraEvent.h" 00007 #include "araDefines.h" 00008 00009 //ROOT Includes 00010 #include "TROOT.h" 00011 #include "TCanvas.h" 00012 #include "TTree.h" 00013 #include "TFile.h" 00014 #include "TH1.h" 00015 #include "TTree.h" 00016 #include "TTreeIndex.h" 00017 #include "TButton.h" 00018 #include "TGroupButton.h" 00019 #include "TThread.h" 00020 #include "TEventList.h" 00021 #include "TMath.h" 00022 #include <TGClient.h> 00023 00024 #include <zlib.h> 00025 00026 void loadPedestals(); 00027 int gotPedFile=0; 00028 char pedFile[FILENAME_MAX]; 00029 float pedestalData[ACTIVE_CHIPS][CHANNELS_PER_CHIP][MAX_NUMBER_SAMPLES]; 00030 00031 00032 int main(int argc, char *argv) 00033 { 00034 // TFile *fp = new TFile("/Users/rjn/ara/data/root/event_frozen_200MHz.root"); 00035 TFile *fp = new TFile("/unix/anita1/ara/data/frozen_daqbox_calibration/Minus54C/sine_wave_data/root/event200MHz_317mV.root"); 00036 if(!fp) { 00037 std::cerr << "Can't open file\n"; 00038 return -1; 00039 } 00040 TTree *eventTree = (TTree*) fp->Get("eventTree"); 00041 if(!eventTree) { 00042 std::cerr << "Can't find eventTree\n"; 00043 return -1; 00044 } 00045 RawAraEvent *evPtr=0; 00046 eventTree->SetBranchAddress("event",&evPtr); 00047 // strcpy(pedFile,"/Users/rjn/ara/data/frozen_daqbox_calibration/Minus54C/pedestal_files/peds_1291239657/peds_1291239657/peds_1291239657.193855.dat"); 00048 strcpy(pedFile,"/unix/anita1/ara/data/frozen_daqbox_calibration/Minus54C/pedestal_files/peds_1291303459/peds_1291303459.323022.dat"); 00049 gotPedFile=1; 00050 loadPedestals(); 00051 00052 Double_t frequency=0.2; //Ghz 00053 Double_t ampmv=317; 00054 00055 char histName[180]; 00056 sprintf(histName,"histFile_%3.0fMHz_%3.0fmV.root",1000*frequency,ampmv); 00057 TFile *histFile = new TFile(histName,"RECREATE"); 00058 TH1F *histFirstSamp[NUM_DIGITIZED_CHANNELS][2]; 00059 TH1F *histLastSamp[NUM_DIGITIZED_CHANNELS][2]; 00060 TH1F *histZC[NUM_DIGITIZED_CHANNELS][2]; 00061 TH1F *histNorm[NUM_DIGITIZED_CHANNELS][2]; 00062 TH1F *histBinWidth[NUM_DIGITIZED_CHANNELS][2]; 00063 TH1F *histBinWidthErr[NUM_DIGITIZED_CHANNELS][2]; 00064 for(int chan=0;chan<NUM_DIGITIZED_CHANNELS;chan++) { 00065 for(int rco=0;rco<2;rco++) { 00066 sprintf(histName,"histFirstSamp_%d_%d",chan,rco); 00067 histFirstSamp[chan][rco] = new TH1F(histName,histName,260,-0.5,259.5); 00068 sprintf(histName,"histLastSamp_%d_%d",chan,rco); 00069 histLastSamp[chan][rco] = new TH1F(histName,histName,260,-0.5,259.5); 00070 sprintf(histName,"histZC_%d_%d",chan,rco); 00071 histZC[chan][rco] = new TH1F(histName,histName,260,-0.5,259.5); 00072 sprintf(histName,"histNorm_%d_%d",chan,rco); 00073 histNorm[chan][rco] = new TH1F(histName,histName,260,-0.5,259.5); 00074 sprintf(histName,"histBinWidth_%d_%d",chan,rco); 00075 histBinWidth[chan][rco] = new TH1F(histName,histName,260,-0.5,259.5); 00076 sprintf(histName,"histBinWidthErr_%d_%d",chan,rco); 00077 histBinWidthErr[chan][rco] = new TH1F(histName,histName,260,-0.5,259.5); 00078 } 00079 } 00080 00081 Long64_t numEntries=eventTree->GetEntries(); 00082 Long64_t starEvery=numEntries/80; 00083 if(starEvery==0) starEvery++; 00084 for(Long64_t i=0;i<numEntries;i++) { 00085 if(i%starEvery==0) std::cerr << "*"; 00086 eventTree->GetEntry(i); 00087 00088 for(int chan=0;chan<NUM_DIGITIZED_CHANNELS;chan++) { 00089 int chip=chan/9; 00090 int realChan=chan%9; 00091 if(realChan==8) continue; 00092 int rco=evPtr->getRCO(chan); 00093 int firstSamp=evPtr->getEarliestSample(chan); 00094 int lastSamp=evPtr->getLatestSample(chan); 00095 //This cut is to exclude those events with misdetermined RCO phases 00096 if(firstSamp<20 || firstSamp>250) continue; 00097 histFirstSamp[chan][rco]->Fill(firstSamp); 00098 histLastSamp[chan][rco]->Fill(lastSamp); 00099 double data[MAX_NUMBER_SAMPLES]; 00100 00101 for(int samp=0;samp<260;samp++) { 00102 data[samp]=evPtr->chan[chan].data[samp]-pedestalData[chip][realChan][samp]; 00103 } 00104 //Zero mean the waveform 00105 double mean=TMath::Mean(260,data); 00106 // std::cout << mean << "\t" << data[0] << "\n"; 00107 for(int samp=0;samp<260;samp++) 00108 data[samp]-=mean; 00109 00110 if(firstSamp<lastSamp) { 00111 //continue; 00112 //One RCO phase 00113 for(int i=firstSamp;i<lastSamp-1;i++) { 00114 double val1=data[i]; 00115 double val2=data[i+1]; 00116 histNorm[chan][rco]->Fill(i); 00117 if(val1<0 && val2>0) { 00118 histZC[chan][rco]->Fill(i); 00119 histBinWidth[chan][rco]->Fill(i); 00120 } 00121 else if(val1>0 && val2<0) { 00122 histZC[chan][rco]->Fill(i); 00123 histBinWidth[chan][rco]->Fill(i); 00124 } 00125 else if(val1==0 || val2==0) { 00126 histZC[chan][rco]->Fill(i,0.5); 00127 histBinWidth[chan][rco]->Fill(i,0.5); 00128 } 00129 00130 } 00131 } 00132 else { 00133 //continue; 00134 //Two RCO phases 00135 if(firstSamp<258) { 00136 for(int i=firstSamp;i<259;i++) { 00137 double val1=data[i]; 00138 double val2=data[i+1]; 00139 // if(i==258) 00140 // std::cout << val1 << "\t" << val2 << "\n"; 00141 histNorm[chan][1-rco]->Fill(i); 00142 if(val1<0 && val2>0) { 00143 histZC[chan][1-rco]->Fill(i); 00144 histBinWidth[chan][1-rco]->Fill(i); 00145 } 00146 else if(val1>0 && val2<0) { 00147 histZC[chan][1-rco]->Fill(i); 00148 histBinWidth[chan][1-rco]->Fill(i); 00149 } 00150 else if(val1==0 || val2==0) { 00151 histZC[chan][1-rco]->Fill(i,0.5); 00152 histBinWidth[chan][1-rco]->Fill(i,0.5); 00153 } 00154 00155 } 00156 } 00157 if(lastSamp>2) { 00158 for(int i=0;i<lastSamp-1;i++) { 00159 double val1=data[i]; 00160 double val2=data[i+1]; 00161 histNorm[chan][rco]->Fill(i); 00162 if(val1<0 && val2>0) { 00163 histZC[chan][rco]->Fill(i); 00164 histBinWidth[chan][rco]->Fill(i); 00165 } 00166 else if(val1>0 && val2<0) { 00167 histZC[chan][rco]->Fill(i); 00168 histBinWidth[chan][rco]->Fill(i); 00169 } 00170 else if(val1==0 || val2==0) { 00171 histZC[chan][rco]->Fill(i,0.5); 00172 histBinWidth[chan][rco]->Fill(i,0.5); 00173 } 00174 00175 } 00176 } 00177 } 00178 } 00179 } 00180 00181 Double_t avgNorm=0; 00182 Int_t numNorm=0; 00183 for(int chip=0;chip<3;chip++) { 00184 for(int rco=0;rco<2;rco++) { 00185 for(int chan=0;chan<8;chan++) { 00186 int chanIndex = chip*CHANNELS_PER_CHIP+chan; 00187 if(chip==2 && chan==7) continue; 00188 for(int bin=1;bin<260;bin++) { 00189 numNorm++; 00190 avgNorm+=histNorm[chanIndex][rco]->GetBinContent(bin); 00191 } 00192 } 00193 } 00194 } 00195 avgNorm/=numNorm; 00196 00197 TH1F *histBinWidthChip[3][2]; 00198 TH1F *histNormChip[3][2]; 00199 TH1F *histBinWidthChipErr[3][2]; 00200 char outName[FILENAME_MAX]; 00201 sprintf(outName,"binWidths_%3.0fMhz_%3.0fmV.txt",frequency*1000,ampmv); 00202 00203 for(int chip=0;chip<3;chip++) { 00204 for(int rco=0;rco<2;rco++) { 00205 00206 //Make the chip-by-chip hists 00207 sprintf(histName,"histNormChip_%d_%d",chip,rco); 00208 histNormChip[chip][rco] = new TH1F(histName,histName,260,-0.5,259.5); 00209 sprintf(histName,"histBinWidthChip_%d_%d",chip,rco); 00210 histBinWidthChip[chip][rco] = new TH1F(histName,histName,260,-0.5,259.5); 00211 sprintf(histName,"histBinWidthChipErr_%d_%d",chip,rco); 00212 histBinWidthChipErr[chip][rco] = new TH1F(histName,histName,260,-0.5,259.5); 00213 00214 for(int chan=0;chan<8;chan++) { 00215 if(chip==2 && chan==7) continue; 00216 00217 int chanIndex=chan+chip*9; 00218 //Fill chip-by-chip hists 00219 histBinWidthChip[chip][rco]->Add(histBinWidth[chanIndex][rco]); 00220 histNormChip[chip][rco]->Add(histNorm[chanIndex][rco]); 00221 00222 //Scale chan-by-chan hists 00223 for(int bin=1;bin<260;bin++) { 00224 double value=histBinWidth[chanIndex][rco]->GetBinContent(bin); 00225 if(value>0) { 00226 histBinWidthErr[chanIndex][rco]->SetBinContent(bin,TMath::Sqrt(value)); 00227 } 00228 } 00229 histBinWidth[chanIndex][rco]->Divide(histNorm[chanIndex][rco]); 00230 histBinWidth[chanIndex][rco]->Scale(0.5/frequency); 00231 histBinWidthErr[chanIndex][rco]->Divide(histNorm[chanIndex][rco]); 00232 //histBinWidthErr[chanIndex][rco]->Scale(1./avgNorm); 00233 histBinWidthErr[chanIndex][rco]->Scale(0.5/frequency); 00234 } 00235 } 00236 } 00237 00238 00239 Double_t avgChipNorm[3]={0}; 00240 Int_t numChipNorm[3]={0}; 00241 for(int chip=0;chip<3;chip++) { 00242 for(int rco=0;rco<2;rco++) { 00243 for(int bin=1;bin<260;bin++) { 00244 numChipNorm[chip]++; 00245 avgChipNorm[chip]+=histNormChip[chip][rco]->GetBinContent(bin); 00246 } 00247 } 00248 avgChipNorm[chip]/=numChipNorm[chip]; 00249 } 00250 00251 00252 00253 for(int chip=0;chip<3;chip++) { 00254 for(int rco=0;rco<2;rco++) { 00255 //Scale chip-by-chip hists 00256 for(int bin=1;bin<260;bin++) { 00257 double value=histBinWidthChip[chip][rco]->GetBinContent(bin); 00258 if(value>0) { 00259 histBinWidthChipErr[chip][rco]->SetBinContent(bin,TMath::Sqrt(value)); 00260 } 00261 } 00262 histBinWidthChip[chip][rco]->Divide(histNormChip[chip][rco]); 00263 // histBinWidthChip[chip][rco]->Scale(1./avgChipNorm[chip]); 00264 histBinWidthChip[chip][rco]->Scale(0.5/frequency); 00265 histBinWidthChipErr[chip][rco]->Divide(histNormChip[chip][rco]); 00266 //histBinWidthChipErr[chip][rco]->Scale(1./avgChipNorm[chip]); 00267 histBinWidthChipErr[chip][rco]->Scale(0.5/frequency); 00268 } 00269 } 00270 00271 00272 std::ofstream OutFile(outName); 00273 for(int chip=0;chip<3;chip++) { 00274 for(int rco=0;rco<2;rco++) { 00275 OutFile << chip << "\t" << rco << "\t"; 00276 00277 for(int samp=0;samp<260;samp++) { 00278 int bin=samp+1; 00279 if(bin<260) { 00280 OutFile << histBinWidthChip[chip][rco]->GetBinContent(bin) << " "; 00281 } 00282 else { 00283 OutFile << "0 "; 00284 } 00285 } 00286 OutFile << "\n"; 00287 } 00288 } 00289 00290 00291 histFile->Write(); 00292 00293 } 00294 00295 00296 00297 void loadPedestals() 00298 { 00299 if(!gotPedFile) { 00300 char calibDir[FILENAME_MAX]; 00301 char *calibEnv=getenv("ARA_CALIB_DIR"); 00302 if(!calibEnv) { 00303 char *utilEnv=getenv("ARA_UTIL_INSTALL_DIR"); 00304 if(!utilEnv) 00305 sprintf(calibDir,"calib"); 00306 else 00307 sprintf(calibDir,"%s/share/araCalib",utilEnv); 00308 } 00309 else { 00310 strncpy(calibDir,calibEnv,FILENAME_MAX); 00311 } 00312 sprintf(pedFile,"%s/peds_1286989711.394723.dat",calibDir); 00313 } 00314 FullLabChipPedStruct_t peds; 00315 gzFile inPed = gzopen(pedFile,"r"); 00316 if( !inPed ){ 00317 fprintf(stderr,"Failed to open pedestal file %s.\n",pedFile); 00318 return; 00319 } 00320 00321 int nRead = gzread(inPed,&peds,sizeof(FullLabChipPedStruct_t)); 00322 if( nRead != sizeof(FullLabChipPedStruct_t)){ 00323 int numErr; 00324 fprintf(stderr,"Error reading pedestal file %s; %s\n",pedFile,gzerror(inPed,&numErr)); 00325 gzclose(inPed); 00326 return; 00327 } 00328 00329 int chip,chan,samp; 00330 for(chip=0;chip<ACTIVE_CHIPS;++chip) { 00331 for(chan=0;chan<CHANNELS_PER_CHIP;++chan) { 00332 int chanIndex = chip*CHANNELS_PER_CHIP+chan; 00333 for(samp=0;samp<MAX_NUMBER_SAMPLES;++samp) { 00334 pedestalData[chip][chan][samp]=peds.chan[chanIndex].pedMean[samp]; 00335 } 00336 } 00337 } 00338 gzclose(inPed); 00339 }
Generated on Wed Aug 8 16:18:56 2012 for ARA ROOT Test Bed Software by
