diff --git a/JFMC_CurrentSourceScan.cpp b/JFMC_CurrentSourceScan.cpp index 7316fde..e70aedb 100644 --- a/JFMC_CurrentSourceScan.cpp +++ b/JFMC_CurrentSourceScan.cpp @@ -79,14 +79,20 @@ int main(int argc, char* argv[]) { thisfile->readNextFrame(); pixelMaskObject->maskIfGainNot(0, thisfile->getFrameDataHandle(), (int*)(&pixel_mask)); } + cout << "after G0, n masked pixels is " << pixelMaskObject->getNMasked(pixel_mask) << endl; + for (int i = 0; i < 640; i++) { thisfile->readNextFrame(); pixelMaskObject->maskIfGainNot(1, thisfile->getFrameDataHandle(), (int*)(&pixel_mask)); } + cout << "after G1, n masked pixels is " << pixelMaskObject->getNMasked(pixel_mask) << endl; + for (int i = 0; i < 640; i++) { thisfile->readNextFrame(); pixelMaskObject->maskIfGainNot(3, thisfile->getFrameDataHandle(), (int*)(&pixel_mask)); } + cout << "after G2, n masked pixels is " << pixelMaskObject->getNMasked(pixel_mask) << endl; + thisfile->rewind(); sprintf(savename,"plots/M%s/CurrentSource/pixelmask.png", module_str.c_str()); @@ -172,7 +178,7 @@ int main(int argc, char* argv[]) { pedeRMSG1->GetYaxis()->SetTitleOffset(0.7); if (module_str == "006") { pedeRMSG1->GetZaxis()->SetRangeUser(0,400); - } else if (module_str == "008" || module_str == "021" || module_str == "022" || module_str == "032" || module_str == "040" || module_str == "044") { + } else if (module_str == "008" || module_str == "021" || module_str == "022" || module_str == "032" || module_str == "040" || module_str == "044" || module_str == "045") { pedeRMSG1->GetZaxis()->SetRangeUser(0,15); } pedeRMSG1->Draw("colz"); @@ -184,24 +190,24 @@ int main(int argc, char* argv[]) { pedeRMSG2->GetYaxis()->SetTitleOffset(0.7); if (module_str == "006") { pedeRMSG2->GetZaxis()->SetRangeUser(0,400); - } else if (module_str == "008" || module_str == "021" || module_str == "022" || module_str == "032" || module_str == "040" || module_str == "044") { + } else if (module_str == "008" || module_str == "021" || module_str == "022" || module_str == "032" || module_str == "040" || module_str == "044" || module_str == "045") { pedeRMSG2->GetZaxis()->SetRangeUser(0,15); } pedeRMSG2->Draw("colz"); sprintf(savename,"plots/M%s/CurrentSource/pedeRMSG2.png", module_str.c_str()); mapcanvas->SaveAs((const char *)(savename)); - TH2F *adcmap_avg_g1 [35]; - TH2F *adcmap_avg_g2 [35]; - TH2F *adcermap_avg_g1 [35]; - TH2F *adcermap_avg_g2 [35]; + TH2F *adcmap_avg_g1 [51]; + TH2F *adcmap_avg_g2 [51]; + TH2F *adcermap_avg_g1 [51]; + TH2F *adcermap_avg_g2 [51]; TCanvas *c1 = new TCanvas("c1",""); // creating the histograms if (createHistoFile) { - for(int i = 0; i < 35; i++) { + for(int i = 0; i < 51; i++) { 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); @@ -245,10 +251,12 @@ int main(int argc, char* argv[]) { int frame_counter = 0; int j = 0; int nfiles = 0; - if (module_str == "032" || module_str == "021" || module_str == "022") { + if (module_str == "032" || module_str == "021") { nfiles = 2; } else if (module_str == "006" || module_str == "008" || module_str == "040" || module_str == "044") { nfiles = 3; + } else if (module_str == "045" || module_str == "022") { + nfiles = 4; } for (int filei = 0; filei < nfiles; filei++) { @@ -336,8 +344,9 @@ 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" || module_str == "022") { + if (module_str == "032" || module_str == "021") { last_frame = 19199; } else if (module_str == "006" || module_str == "008" || module_str == "044") { last_frame = 24319; @@ -456,7 +465,7 @@ int main(int argc, char* argv[]) { sprintf(savename,"/mnt/pcmoench_jungfrau_data/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 < 35; i++) { + for (int i = 0; i < 51; i++) { adcmap_avg_g1[i]->Write(); adcmap_avg_g2[i]->Write(); adcermap_avg_g1[i]->Write(); @@ -469,7 +478,7 @@ int main(int argc, char* argv[]) { sprintf(savename,"/mnt/pcmoench_jungfrau_data/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 < 35; i++) { + for (int i = 0; i < 51; i++) { 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); @@ -497,7 +506,7 @@ int main(int argc, char* argv[]) { TH1F *g1hist = 0; if (module_str == "032") { g1hist = new TH1F("g1hist","",100,-12000,-4000); - } else if (module_str == "022" || module_str == "021" || module_str == "006" || module_str == "008" || module_str == "040" || module_str == "044") { + } else if (module_str == "022" || module_str == "021" || module_str == "006" || module_str == "008" || module_str == "040" || module_str == "044" || module_str == "045") { g1hist = new TH1F("g1hist","",100,-3000,0); } TH1F *g1erhist = new TH1F("g1erhist","",100,0,50); @@ -505,7 +514,7 @@ int main(int argc, char* argv[]) { TH1F *g2hist = 0; if (module_str == "032") { g2hist = new TH1F("g2hist","",100,-1000,-200); - } else if (module_str == "022" || module_str == "021" || module_str == "006" || module_str == "008" || module_str == "040" || module_str == "044") { + } else if (module_str == "022" || module_str == "021" || module_str == "006" || module_str == "008" || module_str == "040" || module_str == "044" || module_str == "045") { g2hist = new TH1F("g2hist","",100,-300,0); } TH1F *g2erhist = new TH1F("g2erhist","",100,0,10); @@ -523,7 +532,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[35]; + double filter[51]; if (module_str == "040" || module_str == "044") { for (int i = 0; i < 5; i++) { filter[i] = 0.05+(i*0.05); @@ -534,6 +543,19 @@ 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 == "045" || module_str == "022") { + for (int i = 0; i < 9; i++) { + filter[i] = 0.05+(i*0.05); + } + for (int i = 0; i < 17; i++) { + filter[i+9] = 0.5+(i*0.25); + } + for (int i = 0; i < 17; i++) { + filter[i+9+17] = 5.+(i*2.5); + } + for (int i = 0; i < 8; i++) { + filter[i+9+17+17] = 50.+(i*10.); + } } else { for (int i = 0; i < 9; i++) { filter[i] = 0.05+(i*0.025); @@ -564,21 +586,23 @@ 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 == "022" || module_str == "040" || module_str == "044") { + if (module_str == "032" || module_str == "021" || module_str == "040" || module_str == "044") { m_max = 27; } else if (module_str == "006" || module_str == "008") { m_max = 35; + } else if (module_str == "045" || module_str == "022") { + m_max = 51; } for (int m = 0; m < m_max; m++) { - 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) { + 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]); r1_adcerr.push_back(adcermap_avg_g1[m]->GetBinContent((i%NC)+1,(i/NC)+1)); r1_ferr.push_back(0.); } - if (adcmap_avg_g2[m]->GetBinContent((i%NC)+1,(i/NC)+1) != 0 && adcermap_avg_g2[m]->GetBinContent((i%NC)+1,(i/NC)+1) != 0) { + if (adcmap_avg_g2[m]->GetBinContent((i%NC)+1,(i/NC)+1) != 0 && adcermap_avg_g2[m]->GetBinContent((i%NC)+1,(i/NC)+1) > 0) { r3_adc.push_back(adcmap_avg_g2[m]->GetBinContent((i%NC)+1,(i/NC)+1)); r3_filter.push_back(filter[m]); r3_adcerr.push_back(adcermap_avg_g2[m]->GetBinContent((i%NC)+1,(i/NC)+1)); @@ -602,7 +626,7 @@ int main(int argc, char* argv[]) { rangemin2 = 0.75; } else if (module_str == "006") { rangemin2 = 0.075; - } else if (module_str == "008" || module_str == "021" || module_str == "022" || module_str == "040" || module_str == "044") { + } else if (module_str == "008" || module_str == "021" || module_str == "022" || module_str == "040" || module_str == "044" || module_str == "045") { rangemin2 = *min_element(r1_filter.begin(),r1_filter.end()); } double rangemax2 = *max_element(r1_filter.begin(),r1_filter.end()); @@ -633,7 +657,7 @@ int main(int argc, char* argv[]) { double rangemin3 = 0; if (module_str == "032") { rangemin3 = 5; - } else if (module_str == "006" || module_str == "008" || module_str == "021" || module_str == "022" || module_str == "040" || module_str == "044") { + } else if (module_str == "006" || module_str == "008" || module_str == "021" || module_str == "022" || module_str == "040" || module_str == "044" || module_str == "045") { rangemin3 = *min_element(r3_filter.begin(),r3_filter.end()); } double rangemax3 = *max_element(r3_filter.begin(),r3_filter.end()); @@ -767,10 +791,53 @@ int main(int argc, char* argv[]) { mapcanvas->SaveAs((const char *)(savename)); mapcanvas->SetLogx(0); + // normalise + vector r1_adc_norm; + vector r3_adc_norm; + for (size_t j = 0; j < r1_adc.size(); j++) { + r1_adc_norm.push_back(r1_adc[j] - fit2->Eval(r1_filter[j])); + } + for (size_t j = 0; j < r3_adc.size(); j++) { + r3_adc_norm.push_back(r3_adc[j] - fit3->Eval(r3_filter[j])); + } + TGraphErrors *grap1_norm = new TGraphErrors(r1_adc.size(),&(r1_filter[0]),&(r1_adc_norm[0]),&(r1_ferr[0]),&(r1_adcerr[0])); + TGraphErrors *grap2_norm = new TGraphErrors(r3_adc.size(),&(r3_filter[0]),&(r3_adc_norm[0]),&(r3_ferr[0]),&(r3_adcerr[0])); + + TF1* flat_g1 = new TF1("flat_g1","0",rangemin2, rangemax2); + TF1* flat_g2 = new TF1("flat_g2","0",rangemin3, rangemax3); + + grap1_norm->SetMarkerColor(kGreen+2); + grap1_norm->SetLineColor(kGreen+2); + flat_g1->SetLineColor(kGreen+2); + grap1_norm->GetXaxis()->SetTitle("Integration time [#mus]"); + grap1_norm->GetYaxis()->SetTitle("Normalised ADC [ADU]"); + grap1_norm->GetYaxis()->SetTitleOffset(0.9); + grap1_norm->SetMinimum(-100); + grap1_norm->SetMaximum(100); + grap1_norm->Draw("AP"); + flat_g1->Draw("same"); + sprintf(savename,"plots/M%s/CurrentSource/pixel_%s_%d_g1norm.png", module_str.c_str(), pixel_type.c_str(), i); + mapcanvas->SaveAs((const char *)(savename)); + + grap2_norm->SetMarkerColor(kRed); + grap2_norm->SetLineColor(kRed); + flat_g2->SetLineColor(kRed); + grap2_norm->GetXaxis()->SetTitle("Integration time [#mus]"); + grap2_norm->GetYaxis()->SetTitle("Normalised ADC [ADU]"); + grap2_norm->GetYaxis()->SetTitleOffset(0.9); + grap2_norm->SetMinimum(-100); + grap2_norm->SetMaximum(100); + grap2_norm->Draw("AP"); + flat_g2->Draw("same"); + sprintf(savename,"plots/M%s/CurrentSource/pixel_%s_%d_g2norm.png", module_str.c_str(), pixel_type.c_str(), i); + mapcanvas->SaveAs((const char *)(savename)); + mapcanvas->SetLeftMargin(0.1); mapcanvas->SetRightMargin(0.13); delete fit2_e; delete fit3_e; + delete grap1_norm; + delete grap2_norm; } delete grap_g1; @@ -890,7 +957,7 @@ int main(int argc, char* argv[]) { g1map->GetYaxis()->SetTitleOffset(0.7); if (module_str == "032") { g1map->GetZaxis()->SetRangeUser(-12000,-4000); - } else if (module_str == "022" || module_str == "021" || module_str == "006" || module_str == "008" || module_str == "040" || module_str == "044") { + } else if (module_str == "022" || module_str == "021" || module_str == "006" || module_str == "008" || module_str == "040" || module_str == "044" || module_str == "045") { g1map->GetZaxis()->SetRangeUser(-3000,0); } g1map->Draw("colz"); @@ -902,7 +969,7 @@ int main(int argc, char* argv[]) { g2map->GetYaxis()->SetTitleOffset(0.7); if (module_str == "032") { g2map->GetZaxis()->SetRangeUser(-800,-400); - } else if (module_str == "022" || module_str == "021" || module_str == "006" || module_str == "008" || module_str == "040" || module_str == "044") { + } else if (module_str == "022" || module_str == "021" || module_str == "006" || module_str == "008" || module_str == "040" || module_str == "044" || module_str == "045") { g2map->GetZaxis()->SetRangeUser(-200,-50); } g2map->Draw("colz"); diff --git a/run_JFModuleCalib_CuFBDCS.txt b/run_JFModuleCalib_CuFBDCS.txt index 5f4c0dc..d069050 100644 --- a/run_JFModuleCalib_CuFBDCS.txt +++ b/run_JFModuleCalib_CuFBDCS.txt @@ -29,7 +29,7 @@ Module 022 - 1M bottom LCLS, PX ./JFMC_CuFluoPeak 022 /data_pool/1M_021_022_150916 10us_200Hz_QS_allgain_pede__A 10us_200Hz_QS_G0_Cu__A ./JFMC_CuFluoPeakFit 022 ./JFMC_DirectBeamScan 022 /mnt/pcmoench_jungfrau_data/1M_021_022_150916 200us_200Hz_QS_allgain_pede_scan_d_A 200us_200Hz_QS_beam_scan_d_A -./JFMC_CurrentSourceScan 022 /mnt/pcmoench_jungfrau_data/1M_021_022_150916 Current_source_scan_a_A +./JFMC_CurrentSourceScan 022 /data_pool/Module_022_Calib CS_HS_NF_200Hz_scan1 ./JFMC_CalibWriter 022 @@ -52,6 +52,9 @@ Module 044 - added to the 1M to make the 1.5M, cSAXS ./JFMC_CalibWriter 044 +Module 045 - replaces M021 in the 1M +./JFMC_CurrentSourceScan 045 /data_pool/Module_045_Calib CS_HS_NF_200Hz_scan10 + Module 028 direct beam scan data only ./JFMC_DirectBeamScan 028 /mnt/pcmoench_jungfrau_data/test_module028_direct_beam_scan__01092016 200us_scan_a_pedestal_QS 200us_scan_a_beam_QS