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.
This commit is contained in:
redford_s
2017-11-30 17:10:12 +01:00
parent c331e229dd
commit 4382f98227
+132 -19
View File
@@ -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<double> r0_adc;
vector<double> r0_filter;
vector<double> r0_adcerr;
vector<double> r0_ferr;
vector<double> r1_adc;
vector<double> r1_filter;
vector<double> 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();