From 4382f9822739dd6a35554d06ad18b378b424ad49 Mon Sep 17 00:00:00 2001 From: redford_s Date: Thu, 30 Nov 2017 17:10:12 +0100 Subject: [PATCH] Modifications for the 4.5 M module calibration, new firmware v6 means the scan now operates over a larger range. Updated scans of modules 021 and 045. Added G0, may still need some adjustment to the logic for older scans. --- JFMC_CurrentSourceScan.cpp | 151 ++++++++++++++++++++++++++++++++----- 1 file changed, 132 insertions(+), 19 deletions(-) diff --git a/JFMC_CurrentSourceScan.cpp b/JFMC_CurrentSourceScan.cpp index d0458a4..303eedd 100644 --- a/JFMC_CurrentSourceScan.cpp +++ b/JFMC_CurrentSourceScan.cpp @@ -206,23 +206,31 @@ int main(int argc, char* argv[]) { sprintf(savename,"plots/M%s/CurrentSource/pedeRMSG2.png", module_str.c_str()); mapcanvas->SaveAs((const char *)(savename)); - TH2F *adcmap_avg_g1 [51]; - TH2F *adcmap_avg_g2 [51]; - TH2F *adcermap_avg_g1 [51]; - TH2F *adcermap_avg_g2 [51]; + TH2F *adcmap_avg_g0 [97]; + TH2F *adcmap_avg_g1 [97]; + TH2F *adcmap_avg_g2 [97]; + TH2F *adcermap_avg_g0 [97]; + TH2F *adcermap_avg_g1 [97]; + TH2F *adcermap_avg_g2 [97]; TCanvas *c1 = new TCanvas("c1",""); // creating the histograms if (createHistoFile) { - for(int i = 0; i < 51; i++) { + for(int i = 0; i < 97; i++) { + ostringstream histogramNameStreamg0; + histogramNameStreamg0 << "adcmap_avg_g0_" << i; + adcmap_avg_g0[i] = new TH2F(histogramNameStreamg0.str().c_str(),"",NC,-0.5,NC-0.5,NR,-0.5,NR-0.5); ostringstream histogramNameStreamg1; histogramNameStreamg1 << "adcmap_avg_g1_" << i; adcmap_avg_g1[i] = new TH2F(histogramNameStreamg1.str().c_str(),"",NC,-0.5,NC-0.5,NR,-0.5,NR-0.5); ostringstream histogramNameStreamg2; histogramNameStreamg2 << "adcmap_avg_g2_" << i; adcmap_avg_g2[i] = new TH2F(histogramNameStreamg2.str().c_str(),"",NC,-0.5,NC-0.5,NR,-0.5,NR-0.5); + ostringstream histogramNameStreamg5; + histogramNameStreamg5 << "adcermap_avg_g0_" << i; + adcermap_avg_g0[i] = new TH2F(histogramNameStreamg5.str().c_str(),"",NC,-0.5,NC-0.5,NR,-0.5,NR-0.5); ostringstream histogramNameStreamg3; histogramNameStreamg3 << "adcermap_avg_g1_" << i; adcermap_avg_g1[i] = new TH2F(histogramNameStreamg3.str().c_str(),"",NC,-0.5,NC-0.5,NR,-0.5,NR-0.5); @@ -238,14 +246,19 @@ int main(int argc, char* argv[]) { TH1F *gain_avg = new TH1F("gain_avg","",100,-1,4); TH2F *gainmap_avg = new TH2F("gainmap_avg","",NC,-0.5,NC-0.5,NR,-0.5,NR-0.5); + TH1F *adc_avg_g0 = new TH1F("adc_avg_g0","",100,0,17000); TH1F *adc_avg_g1 = new TH1F("adc_avg_g1","",100,0,17000); TH1F *adc_avg_g2 = new TH1F("adc_avg_g2","",100,0,17000); + static TH1I *adc_histos_g0 [NCH]; static TH1I *adc_histos_g1 [NCH]; static TH1I *adc_histos_g2 [NCH]; static TH1I *gain_histos [NCH]; for(int i = 0; i < NCH; i++) { + ostringstream histogramNameStreamg0; + histogramNameStreamg0 << "adc_histos_g0_" << i; + adc_histos_g0[i] = new TH1I(histogramNameStreamg0.str().c_str(),"",100,0,17000); ostringstream histogramNameStreamg1; histogramNameStreamg1 << "adc_histos_g1_" << i; adc_histos_g1[i] = new TH1I(histogramNameStreamg1.str().c_str(),"",100,0,17000); @@ -260,12 +273,14 @@ int main(int argc, char* argv[]) { int frame_counter = 0; int j = 0; int nfiles = 0; - if (module_str == "032" || module_str == "021") { + if (module_str == "032") { nfiles = 2; } else if (module_str == "008" || module_str == "040" || module_str == "044") { nfiles = 3; - } else if (module_str == "006" || module_str == "045" || module_str == "022" || module_str == "065" || module_str == "069" || module_str == "079" || module_str == "068" || module_str == "088" || module_str == "055" || module_str == "059" || module_str == "094" || module_str == "066") { + } else if (module_str == "006" || module_str == "022" || module_str == "065" || module_str == "069" || module_str == "079" || module_str == "068" || module_str == "088" || module_str == "055" || module_str == "059" || module_str == "094" || module_str == "066") { nfiles = 4; + } else if (module_str == "021" || module_str == "045" || module_str == "048" || module_str == "050" || module_str == "057" || module_str == "080" || module_str == "102" || module_str == "119" || module_str == "126") { + nfiles = 7; } for (int filei = 0; filei < nfiles; filei++) { @@ -305,7 +320,9 @@ int main(int argc, char* argv[]) { if (adc > 0) { gain_histos[i]->Fill(gain); - if (gain == 1) { + if (gain == 0) { + adc_histos_g0[i]->Fill(adc); + } else if (gain == 1) { adc_histos_g1[i]->Fill(adc); } else if (gain == 3) { adc_histos_g2[i]->Fill(adc); @@ -357,7 +374,7 @@ int main(int argc, char* argv[]) { // catch the last frame (bad ctrl-c exit) // new receiver doesn't have this problem int last_frame = 0; - if (module_str == "032" || module_str == "021") { + if (module_str == "032") { last_frame = 19199; } else if (module_str == "008" || module_str == "044") { last_frame = 24319; @@ -374,6 +391,8 @@ int main(int argc, char* argv[]) { if (pixel_mask[i] == 1) { gainmap_avg->Fill(i%NC,i/NC,gain_histos[i]->GetMean()); + adcmap_avg_g0[j/640-1]->Fill(i%NC,i/NC,adc_histos_g0[i]->GetMean()); + adcermap_avg_g0[j/640-1]->Fill(i%NC,i/NC,adc_histos_g0[i]->GetMeanError()); adcmap_avg_g1[j/640-1]->Fill(i%NC,i/NC,adc_histos_g1[i]->GetMean()); adcermap_avg_g1[j/640-1]->Fill(i%NC,i/NC,adc_histos_g1[i]->GetMeanError()); adcmap_avg_g2[j/640-1]->Fill(i%NC,i/NC,adc_histos_g2[i]->GetMean()); @@ -382,6 +401,9 @@ int main(int argc, char* argv[]) { if (gain_histos[i]->GetEntries() > 0) { gain_avg->Fill(gain_histos[i]->GetMean()); } + if (adc_histos_g0[i]->GetEntries() > 0) { + adc_avg_g0->Fill(adc_histos_g0[i]->GetMean()); + } if (adc_histos_g1[i]->GetEntries() > 0) { adc_avg_g1->Fill(adc_histos_g1[i]->GetMean()); } @@ -390,6 +412,7 @@ int main(int argc, char* argv[]) { } gain_histos[i]->Reset(); + adc_histos_g0[i]->Reset(); adc_histos_g1[i]->Reset(); adc_histos_g2[i]->Reset(); } @@ -409,6 +432,29 @@ int main(int argc, char* argv[]) { sprintf(savename,"plots/M%s/CurrentSource/perStep/gainmap_avg_%i.png", module_str.c_str(), j/640); mapcanvas->SaveAs((const char *)(savename)); + c1->cd(); + adc_avg_g0->GetXaxis()->SetTitle("Average G0 ADC"); + adc_avg_g0->GetXaxis()->SetTitleOffset(1.1); + adc_avg_g0->GetYaxis()->SetTitleOffset(1.5); + adc_avg_g0->Draw(); + sprintf(savename,"plots/M%s/CurrentSource/perStep/adc_avg_g0_%i.png", module_str.c_str(), j/640); + c1->SaveAs((const char *)(savename)); + mapcanvas->cd(); + adcmap_avg_g0[j/640-1]->GetXaxis()->SetTitle("Column"); + adcmap_avg_g0[j/640-1]->GetYaxis()->SetTitle("Row"); + adcmap_avg_g0[j/640-1]->GetYaxis()->SetTitleOffset(0.7); + adcmap_avg_g0[j/640-1]->Draw("colz"); + mapcanvas->Update(); + sprintf(savename,"plots/M%s/CurrentSource/perStep/adcmap_avg_g0_%i.png", module_str.c_str(), j/640); + mapcanvas->SaveAs((const char *)(savename)); + adcermap_avg_g0[j/640-1]->GetXaxis()->SetTitle("Column"); + adcermap_avg_g0[j/640-1]->GetYaxis()->SetTitle("Row"); + adcermap_avg_g0[j/640-1]->GetYaxis()->SetTitleOffset(0.7); + adcermap_avg_g0[j/640-1]->Draw("colz"); + mapcanvas->Update(); + sprintf(savename,"plots/M%s/CurrentSource/perStep/adcermap_avg_g0_%i.png", module_str.c_str(), j/640); + mapcanvas->SaveAs((const char *)(savename)); + c1->cd(); adc_avg_g1->GetXaxis()->SetTitle("Average G1 ADC"); adc_avg_g1->GetXaxis()->SetTitleOffset(1.1); @@ -455,6 +501,7 @@ int main(int argc, char* argv[]) { gain_avg->Reset(); gainmap_avg->Reset(); + adc_avg_g0->Reset(); adc_avg_g1->Reset(); adc_avg_g2->Reset(); } @@ -466,6 +513,7 @@ int main(int argc, char* argv[]) { for (int i = 0; i < NCH; i++) { delete gain_histos[i]; + delete adc_histos_g0[i]; delete adc_histos_g1[i]; delete adc_histos_g2[i]; } @@ -476,9 +524,11 @@ int main(int argc, char* argv[]) { sprintf(savename,"/mnt/pcmoench_jungfrau_data1_ib/jungfrau_ana_sophie/M%s_CalibAna/CS_histos_M%s.root", module_str.c_str(), module_str.c_str()); TFile* saved_file = new TFile((const char *)(savename),"RECREATE"); - for (int i = 0; i < 51; i++) { + for (int i = 0; i < 97; i++) { + adcmap_avg_g0[i]->Write(); adcmap_avg_g1[i]->Write(); adcmap_avg_g2[i]->Write(); + adcermap_avg_g0[i]->Write(); adcermap_avg_g1[i]->Write(); adcermap_avg_g2[i]->Write(); } @@ -489,12 +539,16 @@ int main(int argc, char* argv[]) { sprintf(savename,"/mnt/pcmoench_jungfrau_data1_ib/jungfrau_ana_sophie/M%s_CalibAna/CS_histos_M%s.root", module_str.c_str(), module_str.c_str()); TFile* saved_file = new TFile((const char *)(savename),"READ"); - for (int i = 0; i < 51; i++) { + for (int i = 0; i < 97; i++) { + sprintf(savename,"adcmap_avg_g0_%d", i); + adcmap_avg_g0[i] = (TH2F*)saved_file->Get((const char *)(savename)); sprintf(savename,"adcmap_avg_g1_%d", i); adcmap_avg_g1[i] = (TH2F*)saved_file->Get((const char *)(savename)); sprintf(savename,"adcmap_avg_g2_%d", i); adcmap_avg_g2[i] = (TH2F*)saved_file->Get((const char *)(savename)); + sprintf(savename,"adcermap_avg_g0_%d", i); + adcermap_avg_g0[i] = (TH2F*)saved_file->Get((const char *)(savename)); sprintf(savename,"adcermap_avg_g1_%d", i); adcermap_avg_g1[i] = (TH2F*)saved_file->Get((const char *)(savename)); sprintf(savename,"adcermap_avg_g2_%d", i); @@ -543,7 +597,7 @@ int main(int argc, char* argv[]) { TH1F *g1overg2_isQuad = new TH1F("g1overg2_isQuad","",100,11,15); TH1F *g1overg2_isBulk = new TH1F("g1overg2_isBulk","",100,11,15); - double filter[51]; + double filter[97]; if (module_str == "040" || module_str == "044") { for (int i = 0; i < 5; i++) { filter[i] = 0.05+(i*0.05); @@ -554,7 +608,7 @@ int main(int argc, char* argv[]) { for (int i = 0; i < 17; i++) { filter[i+5+9] = 5.+(i*2.5); } - } else if (module_str == "006" || module_str == "045" || module_str == "022" || module_str == "065" || module_str == "069" || module_str == "079" || module_str == "068" || module_str == "088" || module_str == "055" || module_str == "059" || module_str == "094" || module_str == "066") { + } else if (module_str == "006" || module_str == "022" || module_str == "065" || module_str == "069" || module_str == "079" || module_str == "068" || module_str == "088" || module_str == "055" || module_str == "059" || module_str == "094" || module_str == "066") { for (int i = 0; i < 9; i++) { filter[i] = 0.05+(i*0.05); } @@ -567,6 +621,43 @@ int main(int argc, char* argv[]) { for (int i = 0; i < 8; i++) { filter[i+9+17+17] = 50.+(i*10.); } + } else if (module_str == "021" || module_str == "045" || module_str == "048" || module_str == "050" || module_str == "057" || module_str == "080" || module_str == "102" || module_str == "119" || module_str == "126") { + // loop 1 + for (int i = 0; i < 9; i++) { + filter[i] = 0.05+(i*0.05); + } + // loop 2a + for (int i = 0; i < 11; i++) { + filter[i+9] = 0.5+(i*0.05); + } + // loop 2b + for (int i = 0; i < 10; i++) { + filter[i+9+11] = 1.10+(i*0.10); + } + // loop 2c + for (int i = 0; i < 10; i++) { + filter[i+9+11+10] = 2.25+(i*0.25); + } + // loop 3a + for (int i = 0; i < 11; i++) { + filter[i+9+11+10+10] = 5.+(i*0.5); + } + // loop 3b + for (int i = 0; i < 10; i++) { + filter[i+9+11+10+10+11] = 11.+(i*1.0); + } + // loop 3c + for (int i = 0; i < 10; i++) { + filter[i+9+11+10+10+11+10] = 22.5+(i*2.5); + } + // loop 4a + for (int i = 0; i < 11; i++) { + filter[i+9+11+10+10+11+10+10] = 50.+(i*5.); + } + // loop 4b + for (int i = 0; i < 15; i++) { + filter[i+9+11+10+10+11+10+10+11] = 110.+(i*10.); + } } else { for (int i = 0; i < 9; i++) { filter[i] = 0.05+(i*0.025); @@ -582,6 +673,11 @@ int main(int argc, char* argv[]) { for (int i = 0; i < NCH; i++) { if (pixel_mask[i] == 1) { + vector r0_adc; + vector r0_filter; + vector r0_adcerr; + vector r0_ferr; + vector r1_adc; vector r1_filter; vector r1_adcerr; @@ -594,16 +690,24 @@ int main(int argc, char* argv[]) { // filter out points at zero and points with 0 error (mean taken from one entry in hist) int m_max = 0; - if (module_str == "032" || module_str == "021" || module_str == "040" || module_str == "044") { + if (module_str == "032" || module_str == "040" || module_str == "044") { m_max = 27; } else if (module_str == "008") { m_max = 35; - } else if (module_str == "006" || module_str == "045" || module_str == "022" || module_str == "065" || module_str == "069" || module_str == "079" || module_str == "068" || module_str == "088" || module_str == "055" || module_str == "059" || module_str == "094" || module_str == "066") { + } else if (module_str == "006" || module_str == "022" || module_str == "065" || module_str == "069" || module_str == "079" || module_str == "068" || module_str == "088" || module_str == "055" || module_str == "059" || module_str == "094" || module_str == "066") { m_max = 51; + } else if (module_str == "021" || module_str == "045" || module_str == "048" || module_str == "050" || module_str == "057" || module_str == "080" || module_str == "102" || module_str == "119" || module_str == "126") { + m_max = 97; } for (int m = 0; m < m_max; m++) { + if (adcmap_avg_g0[m]->GetBinContent((i%NC)+1,(i/NC)+1) != 0 && adcermap_avg_g0[m]->GetBinContent((i%NC)+1,(i/NC)+1) > 0) { + r0_adc.push_back(adcmap_avg_g0[m]->GetBinContent((i%NC)+1,(i/NC)+1)); + r0_filter.push_back(filter[m]); + r0_adcerr.push_back(adcermap_avg_g0[m]->GetBinContent((i%NC)+1,(i/NC)+1)); + r0_ferr.push_back(0.); + } if (adcmap_avg_g1[m]->GetBinContent((i%NC)+1,(i/NC)+1) != 0 && adcermap_avg_g1[m]->GetBinContent((i%NC)+1,(i/NC)+1) > 0) { r1_adc.push_back(adcmap_avg_g1[m]->GetBinContent((i%NC)+1,(i/NC)+1)); r1_filter.push_back(filter[m]); @@ -618,17 +722,18 @@ int main(int argc, char* argv[]) { } } - if (r1_adc.size() > 1 && r3_adc.size() > 1) { + if (r0_adc.size() > 1 && r1_adc.size() > 1 && r3_adc.size() > 1) { + TGraphErrors *grap_g0 = new TGraphErrors(r0_adc.size(),&(r0_filter[0]),&(r0_adc[0]),&(r0_ferr[0]),&(r0_adcerr[0])); TGraphErrors *grap_g1 = new TGraphErrors(r1_adc.size(),&(r1_filter[0]),&(r1_adc[0]),&(r1_ferr[0]),&(r1_adcerr[0])); TGraphErrors *grap_g2 = new TGraphErrors(r3_adc.size(),&(r3_filter[0]),&(r3_adc[0]),&(r3_ferr[0]),&(r3_adcerr[0])); double rangemin2 = 0; if (module_str == "032") { rangemin2 = 0.75; - } else if (module_str == "008" || module_str == "021" || module_str == "040" || module_str == "044") { + } else if (module_str == "008" || module_str == "040" || module_str == "044") { rangemin2 = *min_element(r1_filter.begin(),r1_filter.end()); - } else if (module_str == "006" || module_str == "022" || module_str == "045" || module_str == "065" || module_str == "069" || module_str == "079" || module_str == "068" || module_str == "088" || module_str == "055" || module_str == "059" || module_str == "094" || module_str == "066") { + } else if (module_str == "006" || module_str == "021" || module_str == "022" || module_str == "045" || module_str == "065" || module_str == "069" || module_str == "079" || module_str == "068" || module_str == "088" || module_str == "055" || module_str == "059" || module_str == "094" || module_str == "066" || module_str == "048" || module_str == "050" || module_str == "057" || module_str == "080" || module_str == "102" || module_str == "119" || module_str == "126") { rangemin2 = 2.; } double rangemax2 = *max_element(r1_filter.begin(),r1_filter.end()); @@ -736,10 +841,13 @@ int main(int argc, char* argv[]) { mapcanvas->SetLeftMargin(0.13); mapcanvas->SetRightMargin(0.05); + grap_g0->SetMarkerStyle(20); grap_g1->SetMarkerStyle(20); grap_g2->SetMarkerStyle(20); + grap_g0->SetMarkerColor(kBlue); grap_g1->SetMarkerColor(kGreen+2); grap_g2->SetMarkerColor(kRed); + grap_g0->SetLineColor(kBlue); grap_g1->SetLineColor(kGreen+2); grap_g2->SetLineColor(kRed); @@ -753,7 +861,11 @@ int main(int argc, char* argv[]) { fit3_e->SetLineColor(kRed); fit3_e->SetLineStyle(2); - grap_g1->GetXaxis()->SetLimits(0.009,1.1E2); + if (module_str == "021" || module_str == "045" || module_str == "048" || module_str == "050" || module_str == "057" || module_str == "080" || module_str == "102" || module_str == "119" || module_str == "126") { + grap_g1->GetXaxis()->SetLimits(0.009,5E2); + } else { + grap_g1->GetXaxis()->SetLimits(0.009,1.1E2); + } grap_g1->SetMinimum(0); grap_g1->SetMaximum(20000); grap_g1->GetXaxis()->SetTitle("Integration time [#mus]"); @@ -780,6 +892,7 @@ int main(int argc, char* argv[]) { st1->SetBorderSize(0); st1->SetTextColor(kRed); + grap_g0->Draw("P"); fit2_e->Draw("same"); fit3_e->Draw("same"); mapcanvas->SetLogx();