Changes in JFCalibration

1.New files:
a. Fits for a given module, column, and row:
i) BP_fit.cpp
ii) BP_fit_M431.cpp
iii) BP_fit_thin.cpp (use a different scan as the standard module)
iv) CS_fit.cpp
v) CuFluo_fit.cpp

b. Calibration bash files:
i) BP_scan_both_speed.sh
ii) CS_scan_both_speed.sh
iii) CuFluo_exposure_both_speed.sh
v) BP_scan_thinSensor.sh (use a different scan than the standard one)
c. Analysis:
i) CS_analysis_M431.cpp
ii) CS_analysis_M439.cpp
ii) BP_analysis_thinSensor.cpp

d) Default pixels map for JF systems
i) Default_pixels_array.cpp (gives 3 bin files with the default pixels of the JF system at G0, G1, G2, HG0, view from the front side)

2. Changes
a. Calibration bash files
- BP_scan_JF11.sh (changed pc of the wave generator)
- CuFluo_exposure.sh (increase frames)
- filename_creator.sh ( defined parameter DSTIP to source it from any receiver pc. The pccalib.sh has to be sourced before)
b. Analysis
- BP_analysis.cpp ( avoid abort of the analysis due to empty fits in the plotting of the ADU versus mV for the defined pixels )
- CS_analysis.cpp

c. Run_JFCalibration.txt
This commit is contained in:
2025-06-17 18:24:46 +02:00
parent b8f36b0cf3
commit 05d0c2d44b
21 changed files with 10397 additions and 47 deletions

View File

@ -540,13 +540,15 @@ int main(int argc, char* argv[]) {
grap_g0->Draw("AP");
fit_g0->Draw("same");
mapcanvas->Update();
TPaveStats *st0 = (TPaveStats*)grap_g0->FindObject("stats");
// Added by Vadym to save empty fits too as discussed with Mar
if(grap_g0->FindObject("stats")){ TPaveStats *st0 = (TPaveStats*)grap_g0->FindObject("stats");
st0->SetX1NDC(0.2);
st0->SetX2NDC(0.54);
st0->SetY1NDC(0.18);
st0->SetY2NDC(0.37);
st0->SetBorderSize(0);
st0->SetTextColor(kBlue);
}
sprintf(savename,"plots/M%s/%s/pixel_%s_%d_g0_M%s.png", module_str.c_str(),plotfolder_str.c_str(), pixel_type.c_str(), i,module_str.c_str());
mapcanvas->SaveAs((const char *)(savename));

1110
BP_analysis_thinSensors.cpp Normal file

File diff suppressed because it is too large Load Diff

520
BP_fit.cpp Normal file
View File

@ -0,0 +1,520 @@
// to analyse the backplane pulsing data per module
// changes by VH 210906: to eliminate hardcoded absolute paths, uses location of the analysis root files as additional input argument (accordingly changed in filename_creator.sh)
#include "TApplication.h"
#include "sls_detector_calibration/jungfrauCommonHeader.h"
#include "sls_detector_calibration/jungfrauCommonFunctions.h"
#include "sls_detector_calibration/jungfrauFile.C"
#include "sls_detector_calibration/jungfrauPedestal.C"
#include "TGraphErrors.h"
#include "TF1.h"
#include "TStyle.h"
#include "TPaveStats.h"
#include "TFile.h"
#include "TLegend.h"
#include "TPaveText.h"
#include "TCanvas.h"
#include "TRootCanvas.h"
#include "TSystem.h"
#include "TF2.h"
#include <sys/stat.h>
#include <sstream>
//#define NB_ENABLE 1
//void nonblock(int state);
//#define NB_DISABLE 0
//TApplication* rootapp;
//TCanvas *A2;
//TCanvas *A3;
//TCanvas *A4;
//TCanvas *A5;
//TCanvas *A6;
TGraphErrors *grap_g0;
TGraphErrors *grap_g1;
TF1 *fit_g0=0;
TF1 *fit_g1=0;
TGraphErrors *norm_g0=0;
TGraphErrors *norm_g1=0;
TF1 *flat_g0;
TF1 *flat_g1;
TF1 *lin_g0_p1pc;
TF1 *lin_g0_p05pc;
TF1 *lin_g0_p02pc;
TF1 *lin_g0_m1pc;
TF1 *lin_g0_m05pc;
TF1 *lin_g0_m02pc;
TF1 *lin_g1_p02pc;
TF1 *lin_g1_p01pc;
TF1 *lin_g1_m02pc;
TF1 *lin_g1_m01pc;
//TPaveStats *st0;
//void PlotCanvas(void);
double checkRangeMaxForAmplifierPlateau(double range_max) {
// check that the range maximum is no more than 6.4 V
// to avoid non-linearity coming from amplifier plateau
if (range_max > 6400) {
return 6400;
} else {
return range_max;
}
}
bool isHGX=false;
int main(int argc, char* argv[]) {
//nonblock(NB_ENABLE);
cout <<"opening the rootapp" <<endl;
TApplication rootapp("example",&argc, argv);
jungfrauStyle();
//gROOT->SetBatch(1);
gStyle->SetOptFit(11);
/*
if (argc != 3) {
cout << "Correct usage:" << endl;
cout << "arg 1: specify module number" << endl;
cout << "arg 2: specify data location" << endl;
cout << "arg 3: specify column (x)" << endl;
cout << "arg 4: specify row (y)" << endl;
exit(1);
}
*/ //uncomment for SR
if (argc != 4) {
cout << "Correct usage:" << endl;
cout << "arg 1: specify module number" << endl;
cout << "arg 2: specify pixel x position" << endl;
cout << "arg 3: specify pixel y position" << endl;
exit(1);
} //uncomment for VH 210906
string module_str = argv[1];
string str2 =("HG0G1G2");
string str3 =("HGOG1G2"); //filename creator had this bug
string C = argv[2];
string R = argv[3];
int column;
int row;
std::stringstream(C) >> column;
std::stringstream(R) >> row;
int pixel = column+row*1024;
char data_loc[256];
sprintf(data_loc,"/mnt/sls_det_storage/jungfrau_calib/jungfrau_ana_sophie/M%s_CalibAna/", module_str.c_str());
cout << data_loc << endl;
std::string folder_path(data_loc);
if (folder_path.find(str2) != string::npos) isHGX=true;
if (folder_path.find(str3) != string::npos) isHGX=true;
// cout << data_loc.find(str2)<<" " << string::npos << " " << str2 << " " << data_loc <<endl;
if (isHGX) {
cout << " HG0->HG1->HG2 sequence - dynamicHG0" <<endl;
// plotfolder_str="BackplanePulsing_HG0G1G2";
}
else {
cout << " G0->G1->G2 sequence - dynamicG0" <<endl;
// plotfolder_str="BackplanePulsing";
}
std::vector<double> G0_pixel(220, 0);
std::vector<double> G0_err_pixel(220, 0);
std::vector<double> G1_pixel(220, 0);
std::vector<double> G1_err_pixel(220, 0);
//char savename[128]; //uncomment for SR
//char filename[128]; //uncomment for SR
char filename[256]; //uncomment for VH 210902
// create necessary directories with permissions drwxrwxr-x
// data/Mxxx
//sprintf(savename,"data/M%s", module_str.c_str());
//mkdir(savename, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
// plots/Mxxx
//sprintf(savename,"plots/M%s", module_str.c_str());
//mkdir(savename, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
// plots/Mxxx/BackplanePulsing
//sprintf(savename,"plots/M%s/%s", module_str.c_str(), plotfolder_str.c_str());
//mkdir(savename, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
// /mnt/pcmoench_jungfrau_data/jungfrau_ana_sophie/Mxxx_CalibAna
//sprintf(savename,"/mnt/sls_det_storage/jungfrau_data1/jungfrau_ana_sophie/M%s_CalibAna", module_str.c_str()); //uncomment for SR
//sprintf(savename,"%s", anadata_loc.c_str()); //uncomment for VH 210906
//mkdir(savename, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
double xs[220];
for (int i = 0; i < 100; i++) {
xs[i] = (i+1)*10.;
}
for (int i = 0; i < 120; i++) {
xs[i+100] = 1000+((i+1)*50);
}
TCanvas *A2 = new TCanvas("A2","Plot scan",150,10,800,400);
TCanvas *A3 = new TCanvas("A3","Plot G0 fit",150,10,800,400);
TCanvas *A4 = new TCanvas("A4","Plot G0 residuals",150,10,800,400);
TCanvas *A5 = new TCanvas("A5","Plot G1 fit",150,10,800,400);
TCanvas *A6 = new TCanvas("A6","Plot G1 residuals",150,10,800,400);
//file name
sprintf(filename,"%sBP_histos_M%s.root",folder_path.c_str(), module_str.c_str());
cout << "Loading file " << filename << endl;
TFile* f = new TFile((const char *)(filename),"READ");
for (int j = 0; j < 220; j++) {
TH2F* hist0=(TH2F*)f->Get(Form("avg_adcG0_map_%d",j));
G0_pixel[j]=hist0->GetBinContent((column+1),(row+1));
TH2F* hist0er=(TH2F*)f->Get(Form("avg_adcG0er_map_%d",j));
G0_err_pixel[j]=hist0er->GetBinContent((column+1),(row+1));
TH2F* hist1=(TH2F*)f->Get(Form("avg_adcG1_map_%d",j));
G1_pixel[j]=hist1->GetBinContent((column+1),(row+1));
TH2F* hist1er=(TH2F*)f->Get(Form("avg_adcG1er_map_%d",j));
G1_err_pixel[j]=hist1er->GetBinContent((column+1),(row+1));
//cout << "Data for pixel "<< pixel << "is loaded" << endl;
}
A2->SetLeftMargin(0.13);
A2->SetRightMargin(0.05);
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;
vector<double> r1_ferr;
for (int j = 0; j < 220; j++) {
if (G0_pixel[j] != 0) {
r0_filter.push_back(xs[j]);
r0_ferr.push_back(0.);
r0_adc.push_back(G0_pixel[j]);
r0_adcerr.push_back(G0_err_pixel[j]);
}
if (G1_pixel[j] != 0) {
r1_filter.push_back(xs[j]);
r1_ferr.push_back(0.);
r1_adc.push_back(G1_pixel[j]);
r1_adcerr.push_back(G1_err_pixel[j]);
}
cout << "Filter array is loaded" << endl;
}
//TGraphErrors *grap_g0 = 0;
//TGraphErrors *grap_g1 = 0;
//TF1 *fit_g0 = 0;
//TF1 *fit_g1 = 0;
double rangemin_g0 = 0;
double rangemax_g0 = 0;
double rangemin_g1 = 0;
double rangemax_g1 = 0;
A2->cd();
// define graphs
if (r0_adc.size() > 1) {
grap_g0 = new TGraphErrors(r0_adc.size(),&(r0_filter[0]),&(r0_adc[0]),&(r0_ferr[0]),&(r0_adcerr[0]));
grap_g0->SetMarkerStyle(20);
grap_g0->SetMarkerColor(kBlue);
grap_g0->SetLineColor(kBlue);
}
if (r1_adc.size() > 1) {
grap_g1 = new TGraphErrors(r1_adc.size(),&(r1_filter[0]),&(r1_adc[0]),&(r1_ferr[0]),&(r1_adcerr[0]));
grap_g1->SetMarkerStyle(20);
grap_g1->SetMarkerColor(kGreen+2);
grap_g1->SetLineColor(kGreen+2);
}
//debug
// cout << i <<" r0size= "<< r0_adc.size()<< " r1size= "<< r1_adc.size()<< endl;
// plot the datapoints
if (r1_adc.size() > 1) {
grap_g1->GetXaxis()->SetTitle("Signal generator voltage [mV]");
grap_g1->GetYaxis()->SetTitle("ADC [ADU]");
grap_g1->GetYaxis()->SetTitleOffset(0.9);
grap_g1->SetMinimum(1000);
grap_g1->SetMaximum(15000);
grap_g1->GetXaxis()->SetLimits(0,7200);
grap_g1->Draw("AP");
if (r0_adc.size() > 1) {
grap_g0->Draw("P");
A2->Update();
}
//cout << "Number of point in g1 =" << r1_adc.size() << endl;
//sprintf(savename,"plots/M%s/%s/pixel_%s_%d_M%s.png", module_str.c_str(), plotfolder_str.c_str(),pixel_type.c_str(), i,module_str.c_str());
//mapcanvas->SaveAs((const char *)(savename));
}
// define fit ranges and fit
if (r0_adc.size() > 1) {
A3->cd();
rangemin_g0 = *min_element(r0_filter.begin(),r0_filter.end());
rangemax_g0 = highestPointBeforeSwitching(r0_filter,r1_filter);
if (rangemax_g0 > rangemin_g0) {
grap_g0->Fit("pol1","QRC","",rangemin_g0,rangemax_g0);
fit_g0 = (TF1*) grap_g0->GetFunction("pol1");
if (fit_g0) {
fit_g0->SetLineColor(kBlue);
fit_g0->SetParName(0,"G0 const");
fit_g0->SetParName(1,"G0 grad");
grap_g0->GetXaxis()->SetTitle("Signal generator voltage [mV]");
grap_g0->GetYaxis()->SetTitle("ADC [ADU]");
grap_g0->GetYaxis()->SetTitleOffset(0.9);
grap_g0->SetMinimum(1000);
grap_g0->SetMaximum(15000);
grap_g0->GetXaxis()->SetLimits(*min_element(r0_filter.begin(),r0_filter.end()),*max_element(r0_filter.begin(),r0_filter.end()));
// TPaveStats *st0 = (TPaveStats*)grap_g0->FindObject("stats");
// st0->SetX1NDC(0.2);
// st0->SetX2NDC(0.54);
// st0->SetY1NDC(0.18);
// st0->SetY2NDC(0.37);
// st0->SetBorderSize(0);
// st0->SetTextColor(kBlue);
grap_g0->Draw("AP");
fit_g0->Draw("same");
A3->Update();
//PlotCanvas();
//sprintf(savename,"plots/M%s/%s/pixel_%s_%d_g0_M%s.png", module_str.c_str(),plotfolder_str.c_str(), pixel_type.c_str(), i,module_str.c_str());
//mapcanvas->SaveAs((const char *)(savename));
A4->cd();
vector<double> r0_adc_norm;
for (size_t j = 0; j < r0_adc.size(); j++) {
r0_adc_norm.push_back(r0_adc[j] - fit_g0->Eval(r0_filter[j]));
}
TGraphErrors *norm_g0 = new TGraphErrors(r0_adc.size(),&(r0_filter[0]),&(r0_adc_norm[0]),&(r0_ferr[0]),&(r0_adcerr[0]));
norm_g0->SetMarkerColor(kBlue);
norm_g0->SetLineColor(kBlue);
TF1* flat_g0 = new TF1("flat_g0","0",rangemin_g0,rangemax_g0);
flat_g0->SetLineColor(kBlue);
TF1* lin_g0_p1pc = new TF1("lin_g0_p1pc","[0]+[1]*x",rangemin_g0,rangemax_g0);
lin_g0_p1pc->SetParameter(0,fit_g0->GetParameter(0)/100.);
lin_g0_p1pc->SetParameter(1,fit_g0->GetParameter(1)/100.);
lin_g0_p1pc->SetLineColor(kRed);
TF1* lin_g0_p05pc = new TF1("lin_g0_p05pc","[0]+[1]*x",rangemin_g0,rangemax_g0);
lin_g0_p05pc->SetParameter(0,fit_g0->GetParameter(0)/200.);
lin_g0_p05pc->SetParameter(1,fit_g0->GetParameter(1)/200.);
lin_g0_p05pc->SetLineColor(kOrange+1);
TF1* lin_g0_p02pc = new TF1("lin_g0_p02pc","[0]+[1]*x",rangemin_g0,rangemax_g0);
lin_g0_p02pc->SetParameter(0,fit_g0->GetParameter(0)/500.);
lin_g0_p02pc->SetParameter(1,fit_g0->GetParameter(1)/500.);
lin_g0_p02pc->SetLineColor(kOrange);
TF1* lin_g0_m1pc = new TF1("lin_g0_m1pc","[0]+[1]*x",rangemin_g0,rangemax_g0);
lin_g0_m1pc->SetParameter(0,fit_g0->GetParameter(0)/-100.);
lin_g0_m1pc->SetParameter(1,fit_g0->GetParameter(1)/-100.);
lin_g0_m1pc->SetLineColor(kRed);
TF1* lin_g0_m05pc = new TF1("lin_g0_m05pc","[0]+[1]*x",rangemin_g0,rangemax_g0);
lin_g0_m05pc->SetParameter(0,fit_g0->GetParameter(0)/-200.);
lin_g0_m05pc->SetParameter(1,fit_g0->GetParameter(1)/-200.);
lin_g0_m05pc->SetLineColor(kOrange+1);
TF1* lin_g0_m02pc = new TF1("lin_g0_m02pc","[0]+[1]*x",rangemin_g0,rangemax_g0);
lin_g0_m02pc->SetParameter(0,fit_g0->GetParameter(0)/-500.);
lin_g0_m02pc->SetParameter(1,fit_g0->GetParameter(1)/-500.);
lin_g0_m02pc->SetLineColor(kOrange);
norm_g0->GetXaxis()->SetRangeUser(*min_element(r0_filter.begin(),r0_filter.end()),*max_element(r0_filter.begin(),r0_filter.end()));
norm_g0->SetMinimum(1.5*lin_g0_m02pc->Eval(rangemax_g0));
norm_g0->SetMaximum(1.5*lin_g0_p02pc->Eval(rangemax_g0));
if (isHGX) {
norm_g0->SetMinimum(3*lin_g0_m02pc->Eval(rangemax_g0));
norm_g0->SetMaximum(3*lin_g0_p02pc->Eval(rangemax_g0));
}
norm_g0->GetXaxis()->SetTitle("Signal generator voltage [mV]");
norm_g0->GetYaxis()->SetTitle("Normalised ADC [ADU]");
norm_g0->GetYaxis()->SetTitleOffset(0.9);
norm_g0->Draw("AP");
flat_g0->Draw("same");
lin_g0_p1pc->Draw("same");
lin_g0_p05pc->Draw("same");
lin_g0_p02pc->Draw("same");
lin_g0_m1pc->Draw("same");
lin_g0_m05pc->Draw("same");
lin_g0_m02pc->Draw("same");
norm_g0->Draw("P");
A4->Update();
//sprintf(savename,"plots/M%s/%s/pixel_%s_%d_g0norm_M%s.png", module_str.c_str(), plotfolder_str.c_str(),pixel_type.c_str(), i, module_str.c_str());
//mapcanvas->SaveAs((const char *)(savename));
//delete norm_g0;
}
}
}
A5->cd();
if (r1_adc.size() > 1) {
rangemin_g1 = lowestPointAfterSwitching(r1_filter,r0_filter);
rangemax_g1 = *max_element(r1_filter.begin(),r1_filter.end());
rangemax_g1 = checkRangeMaxForAmplifierPlateau(rangemax_g1);
if (rangemax_g1 > rangemin_g1) {
grap_g1->Fit("pol1","QRC","",rangemin_g1,rangemax_g1);
fit_g1 = (TF1*) grap_g1->GetFunction("pol1");
if (fit_g1) {
fit_g1->SetLineColor(kGreen+2);
fit_g1->SetParName(0,"G1 const");
fit_g1->SetParName(1,"G1 grad");
grap_g1->GetXaxis()->SetTitle("Signal generator voltage [mV]");
grap_g1->GetYaxis()->SetTitle("ADC [ADU]");
grap_g1->GetYaxis()->SetTitleOffset(0.9);
grap_g1->SetMinimum(1000);
grap_g1->SetMaximum(15000);
grap_g1->GetXaxis()->SetLimits(*min_element(r1_filter.begin(),r1_filter.end()),*max_element(r1_filter.begin(),r1_filter.end()));
// TPaveStats *st0 = (TPaveStats*)grap_g1->FindObject("stats");
// st0->SetX1NDC(0.6);
// st0->SetX2NDC(0.94);
// st0->SetY1NDC(0.18);
// st0->SetY2NDC(0.37);
// st0->SetBorderSize(0);
// st0->SetTextColor(kGreen+2);
grap_g1->Draw("AP");
fit_g1->Draw("same");
A5->Update();
//sprintf(savename,"plots/M%s/%s/pixel_%s_%d_g1_M%s.png", module_str.c_str(), plotfolder_str.c_str(), pixel_type.c_str(), i, module_str.c_str());
//mapcanvas->SaveAs((const char *)(savename));
vector<double> r1_adc_norm;
for (size_t j = 0; j < r1_adc.size(); j++) {
r1_adc_norm.push_back(r1_adc[j] - fit_g1->Eval(r1_filter[j]));
}
A6->cd();
TGraphErrors *norm_g1 = new TGraphErrors(r1_adc.size(),&(r1_filter[0]),&(r1_adc_norm[0]),&(r1_ferr[0]),&(r1_adcerr[0]));
norm_g1->SetMarkerColor(kGreen+2);
norm_g1->SetLineColor(kGreen+2);
TF1* flat_g1 = new TF1("flat_gi","0",rangemin_g1,rangemax_g1);
flat_g1->SetLineColor(kGreen+2);
TF1* lin_g1_p02pc = new TF1("lin_g1_p02pc","[0]+[1]*x",rangemin_g1,rangemax_g1);
lin_g1_p02pc->SetParameter(0,fit_g1->GetParameter(0)/500.);
lin_g1_p02pc->SetParameter(1,fit_g1->GetParameter(1)/500.);
lin_g1_p02pc->SetLineColor(kOrange);
TF1* lin_g1_p01pc = new TF1("lin_g1_p01pc","[0]+[1]*x",rangemin_g1,rangemax_g1);
lin_g1_p01pc->SetParameter(0,fit_g1->GetParameter(0)/1000.);
lin_g1_p01pc->SetParameter(1,fit_g1->GetParameter(1)/1000.);
lin_g1_p01pc->SetLineColor(kYellow);
TF1* lin_g1_m02pc = new TF1("lin_g1_m02pc","[0]+[1]*x",rangemin_g1,rangemax_g1);
lin_g1_m02pc->SetParameter(0,fit_g1->GetParameter(0)/-500.);
lin_g1_m02pc->SetParameter(1,fit_g1->GetParameter(1)/-500.);
lin_g1_m02pc->SetLineColor(kOrange);
TF1* lin_g1_m01pc = new TF1("lin_g1_m01pc","[0]+[1]*x",rangemin_g1,rangemax_g1);
lin_g1_m01pc->SetParameter(0,fit_g1->GetParameter(0)/-1000.);
lin_g1_m01pc->SetParameter(1,fit_g1->GetParameter(1)/-1000.);
lin_g1_m01pc->SetLineColor(kYellow);
norm_g1->GetXaxis()->SetRangeUser(*min_element(r1_filter.begin(),r1_filter.end()),*max_element(r1_filter.begin(),r1_filter.end()));
norm_g1->SetMinimum(1.5*lin_g1_m02pc->Eval(rangemin_g1));
norm_g1->SetMaximum(1.5*lin_g1_p02pc->Eval(rangemin_g1));
norm_g1->GetXaxis()->SetTitle("Signal generator voltage [mV]");
norm_g1->GetYaxis()->SetTitle("Normalised ADC [ADU]");
norm_g1->GetYaxis()->SetTitleOffset(0.9);
norm_g1->Draw("AP");
flat_g1->Draw("same");
lin_g1_p02pc->Draw("same");
lin_g1_p01pc->Draw("same");
lin_g1_m02pc->Draw("same");
lin_g1_m01pc->Draw("same");
norm_g1->Draw("P");
A6->Update();
//sprintf(savename,"plots/M%s/%s/pixel_%s_%d_g1norm_M%s.png", module_str.c_str(),plotfolder_str.c_str(), pixel_type.c_str(), i, module_str.c_str());
//mapcanvas->SaveAs((const char *)(savename));
//delete norm_g1;
}
}
}
// get ratio measurements
// if (fit_g0 && fit_g1) {
// double this_g0overg1 = fit_g0->GetParameter(1)/fit_g1->GetParameter(1);
// double this_g0overg1er = sqrt(pow(fit_g0->GetParError(1)/fit_g0->GetParameter(1),2) + pow(fit_g1->GetParError(1)/fit_g1->GetParameter(1),2));
// cout << "G0overG1 =" << this_g0overg1 << "+/-" << this_g0overg1er << endl;
// }
rootapp.Run();
return 0;
}

550
BP_fit_M431.cpp Normal file
View File

@ -0,0 +1,550 @@
// to analyse the backplane pulsing data per module
// changes by VH 210906: to eliminate hardcoded absolute paths, uses location of the analysis root files as additional input argument (accordingly changed in filename_creator.sh)
#include "TApplication.h"
#include "sls_detector_calibration/jungfrauCommonHeader.h"
#include "sls_detector_calibration/jungfrauCommonFunctions.h"
#include "sls_detector_calibration/jungfrauFile.C"
#include "sls_detector_calibration/jungfrauPedestal.C"
#include "TGraphErrors.h"
#include "TF1.h"
#include "TStyle.h"
#include "TPaveStats.h"
#include "TFile.h"
#include "TLegend.h"
#include "TPaveText.h"
#include "TCanvas.h"
#include "TRootCanvas.h"
#include "TSystem.h"
#include "TF2.h"
#include "TGaxis.h"
#include <sys/stat.h>
#include <sstream>
#include <algorithm>
//#define NB_ENABLE 1
//void nonblock(int state);
//#define NB_DISABLE 0
//TApplication* rootapp;
//TCanvas *A2;
//TCanvas *A3;
//TCanvas *A4;
//TCanvas *A5;
//TCanvas *A6;
TGraphErrors *grap_g0;
TGraphErrors *grap_g1;
TF1 *fit_g0=0;
TF1 *fit_g1=0;
TGraphErrors *norm_g0=0;
TGraphErrors *norm_g1=0;
TF1 *flat_g0;
TF1 *flat_g1;
TF1 *lin_g0_p1pc;
TF1 *lin_g0_p05pc;
TF1 *lin_g0_p02pc;
TF1 *lin_g0_m1pc;
TF1 *lin_g0_m05pc;
TF1 *lin_g0_m02pc;
TF1 *lin_g1_p02pc;
TF1 *lin_g1_p01pc;
TF1 *lin_g1_m02pc;
TF1 *lin_g1_m01pc;
//TPaveStats *st0;
//void PlotCanvas(void);
double checkRangeMaxForAmplifierPlateau(double range_max) {
// check that the range maximum is no more than 6.4 V
// to avoid non-linearity coming from amplifier plateau
if (range_max > 6400) {
return 6400;
} else {
return range_max;
}
}
bool isHGX=false;
int main(int argc, char* argv[]) {
//nonblock(NB_ENABLE);
cout <<"opening the rootapp" <<endl;
TApplication rootapp("example",&argc, argv);
jungfrauStyle();
//gROOT->SetBatch(1);
gStyle->SetOptFit(11);
/*
if (argc != 3) {
cout << "Correct usage:" << endl;
cout << "arg 1: specify module number" << endl;
cout << "arg 2: specify data location" << endl;
cout << "arg 3: specify column (x)" << endl;
cout << "arg 4: specify row (y)" << endl;
exit(1);
}
*/ //uncomment for SR
if (argc != 4) {
cout << "Correct usage:" << endl;
cout << "arg 1: specify module number" << endl;
cout << "arg 2: specify pixel x position" << endl;
cout << "arg 3: specify pixel y position" << endl;
exit(1);
} //uncomment for VH 210906
string module_str = argv[1];
string str2 =("HG0G1G2");
string str3 =("HGOG1G2"); //filename creator had this bug
string C = argv[2];
string R = argv[3];
int column;
int row;
std::stringstream(C) >> column;
std::stringstream(R) >> row;
int pixel = column+row*1024;
char data_loc[256];
sprintf(data_loc,"/mnt/sls_det_storage/jungfrau_calib/jungfrau_ana_sophie/M%s_CalibAna/", module_str.c_str());
cout << data_loc << endl;
std::string folder_path(data_loc);
if (folder_path.find(str2) != string::npos) isHGX=true;
if (folder_path.find(str3) != string::npos) isHGX=true;
// cout << data_loc.find(str2)<<" " << string::npos << " " << str2 << " " << data_loc <<endl;
if (isHGX) {
cout << " HG0->HG1->HG2 sequence - dynamicHG0" <<endl;
// plotfolder_str="BackplanePulsing_HG0G1G2";
}
else {
cout << " G0->G1->G2 sequence - dynamicG0" <<endl;
// plotfolder_str="BackplanePulsing";
}
std::vector<double> G0_pixel(220, 0);
std::vector<double> G0_err_pixel(220, 0);
std::vector<double> G1_pixel(220, 0);
std::vector<double> G1_err_pixel(220, 0);
//char savename[128]; //uncomment for SR
//char filename[128]; //uncomment for SR
char filename[256]; //uncomment for VH 210902
// create necessary directories with permissions drwxrwxr-x
// data/Mxxx
//sprintf(savename,"data/M%s", module_str.c_str());
//mkdir(savename, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
// plots/Mxxx
//sprintf(savename,"plots/M%s", module_str.c_str());
//mkdir(savename, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
// plots/Mxxx/BackplanePulsing
//sprintf(savename,"plots/M%s/%s", module_str.c_str(), plotfolder_str.c_str());
//mkdir(savename, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
// /mnt/pcmoench_jungfrau_data/jungfrau_ana_sophie/Mxxx_CalibAna
//sprintf(savename,"/mnt/sls_det_storage/jungfrau_data1/jungfrau_ana_sophie/M%s_CalibAna", module_str.c_str()); //uncomment for SR
//sprintf(savename,"%s", anadata_loc.c_str()); //uncomment for VH 210906
//mkdir(savename, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
double xs[220];
for (int i = 0; i < 100; i++) {
//for (int i = 0; i < 220; i++) {
xs[i] = (i+1)*10.;
}
for (int i = 0; i < 120; i++) {
xs[i+100] = 1000+((i+1)*50);
}
TCanvas *A2 = new TCanvas("A2","Plot scan",150,10,800,400);
TCanvas *A3 = new TCanvas("A3","Plot G0 fit",150,10,800,400);
TCanvas *A4 = new TCanvas("A4","Plot G0 residuals",150,10,800,400);
TCanvas *A5 = new TCanvas("A5","Plot G1 fit",150,10,800,400);
TCanvas *A6 = new TCanvas("A6","Plot G1 residuals",150,10,800,400);
TCanvas *A7 = new TCanvas("A7","G0 linearity",150,10,800,400);
//file name
sprintf(filename,"%sBP_histos_M%s.root",folder_path.c_str(), module_str.c_str());
cout << "Loading file " << filename << endl;
TFile* f = new TFile((const char *)(filename),"READ");
for (int j = 0; j < 220; j++) {
TH2F* hist0=(TH2F*)f->Get(Form("avg_adcG0_map_%d",j));
G0_pixel[j]=hist0->GetBinContent((column+1),(row+1));
TH2F* hist0er=(TH2F*)f->Get(Form("avg_adcG0er_map_%d",j));
G0_err_pixel[j]=hist0er->GetBinContent((column+1),(row+1));
TH2F* hist1=(TH2F*)f->Get(Form("avg_adcG1_map_%d",j));
G1_pixel[j]=hist1->GetBinContent((column+1),(row+1));
TH2F* hist1er=(TH2F*)f->Get(Form("avg_adcG1er_map_%d",j));
G1_err_pixel[j]=hist1er->GetBinContent((column+1),(row+1));
//cout << "Data for pixel "<< pixel << "is loaded" << endl;
}
A2->SetLeftMargin(0.13);
A2->SetRightMargin(0.05);
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;
vector<double> r1_ferr;
for (int j = 0; j < 220; j++) {
//cout << "Pixel G0: " << G0_pixel[j] << ", pixel G1: " << G1_pixel[j] << endl;
if (G0_pixel[j] != 0) {
r0_filter.push_back(xs[j]);
r0_ferr.push_back(0.);
r0_adc.push_back(G0_pixel[j]);
r0_adcerr.push_back(G0_err_pixel[j]);
}
if (G1_pixel[j] != 0) {
r1_filter.push_back(xs[j]);
r1_ferr.push_back(0.);
r1_adc.push_back(G1_pixel[j]);
r1_adcerr.push_back(G1_err_pixel[j]);
}
//cout << "Filter array is loaded" << endl;
}
//TGraphErrors *grap_g0 = 0;
//TGraphErrors *grap_g1 = 0;
//TF1 *fit_g0 = 0;
//TF1 *fit_g1 = 0;
double rangemin_g0 = 0;
double rangemax_g0 = 0;
double rangemin_g1 = 0;
double rangemax_g1 = 0;
A2->cd();
// define graphs
if (r0_adc.size() > 1) {
grap_g0 = new TGraphErrors(r0_adc.size(),&(r0_filter[0]),&(r0_adc[0]),&(r0_ferr[0]),&(r0_adcerr[0]));
grap_g0->SetMarkerStyle(20);
grap_g0->SetMarkerColor(kBlue);
grap_g0->SetLineColor(kBlue);
}
if (r1_adc.size() > 1) {
grap_g1 = new TGraphErrors(r1_adc.size(),&(r1_filter[0]),&(r1_adc[0]),&(r1_ferr[0]),&(r1_adcerr[0]));
grap_g1->SetMarkerStyle(20);
grap_g1->SetMarkerColor(kGreen+2);
grap_g1->SetLineColor(kGreen+2);
}
//debug
cout <<" r0size= "<< r0_adc.size()<< " r1size= "<< r1_adc.size()<< endl;
// plot the datapoints
if (r1_adc.size() > 1) {
grap_g1->GetXaxis()->SetTitle("Signal generator voltage [mV]");
grap_g1->GetYaxis()->SetTitle("ADC [ADU]");
grap_g1->GetYaxis()->SetTitleOffset(0.9);
grap_g1->SetMinimum(1000);
grap_g1->SetMaximum(20000);
grap_g1->GetXaxis()->SetLimits(0,7200);
grap_g1->Draw("AP");
if (r0_adc.size() > 1) {
grap_g0->Draw("P");
A2->Update();
}
//cout << "Number of point in g1 =" << r1_adc.size() << endl;
//sprintf(savename,"plots/M%s/%s/pixel_%s_%d_M%s.png", module_str.c_str(), plotfolder_str.c_str(),pixel_type.c_str(), i,module_str.c_str());
//mapcanvas->SaveAs((const char *)(savename));
}
// define fit ranges and fit
if (r0_adc.size() > 1) {
A3->cd();
rangemin_g0 = *min_element(r0_filter.begin(),r0_filter.end());
rangemax_g0 = highestPointBeforeSwitching(r0_filter,r1_filter);
cout << "Switch point: " << rangemax_g0 << endl;
if (rangemax_g0 > rangemin_g0) {
grap_g0->Fit("pol1","QRC","",rangemin_g0,rangemax_g0);
fit_g0 = (TF1*) grap_g0->GetFunction("pol1");
if (fit_g0) {
fit_g0->SetLineColor(kBlue);
fit_g0->SetParName(0,"G0 const");
fit_g0->SetParName(1,"G0 grad");
grap_g0->GetXaxis()->SetTitle("Signal generator voltage [mV]");
grap_g0->GetYaxis()->SetTitle("ADC [ADU]");
grap_g0->GetYaxis()->SetTitleOffset(0.9);
grap_g0->SetMinimum(1000);
grap_g0->SetMaximum(15000);
grap_g0->GetXaxis()->SetLimits(*min_element(r0_filter.begin(),r0_filter.end()),*max_element(r0_filter.begin(),r0_filter.end()));
// TPaveStats *st0 = (TPaveStats*)grap_g0->FindObject("stats");
// st0->SetX1NDC(0.2);
// st0->SetX2NDC(0.54);
// st0->SetY1NDC(0.18);
// st0->SetY2NDC(0.37);
// st0->SetBorderSize(0);
// st0->SetTextColor(kBlue);
grap_g0->Draw("AP");
fit_g0->Draw("same");
A3->Update();
//PlotCanvas();
//sprintf(savename,"plots/M%s/%s/pixel_%s_%d_g0_M%s.png", module_str.c_str(),plotfolder_str.c_str(), pixel_type.c_str(), i,module_str.c_str());
//mapcanvas->SaveAs((const char *)(savename));
A4->cd();
vector<double> r0_adc_norm;
for (size_t j = 0; j < r0_adc.size(); j++) {
r0_adc_norm.push_back(r0_adc[j] - fit_g0->Eval(r0_filter[j]));
}
TGraphErrors *norm_g0 = new TGraphErrors(r0_adc.size(),&(r0_filter[0]),&(r0_adc_norm[0]),&(r0_ferr[0]),&(r0_adcerr[0]));
norm_g0->SetMarkerColor(kBlue);
norm_g0->SetLineColor(kBlue);
TF1* flat_g0 = new TF1("flat_g0","0",rangemin_g0,rangemax_g0);
flat_g0->SetLineColor(kBlue);
TF1* lin_g0_p1pc = new TF1("lin_g0_p1pc","[0]+[1]*x",rangemin_g0,rangemax_g0);
lin_g0_p1pc->SetParameter(0,fit_g0->GetParameter(0)/100.);
lin_g0_p1pc->SetParameter(1,fit_g0->GetParameter(1)/100.);
lin_g0_p1pc->SetLineColor(kRed);
TF1* lin_g0_p05pc = new TF1("lin_g0_p05pc","[0]+[1]*x",rangemin_g0,rangemax_g0);
lin_g0_p05pc->SetParameter(0,fit_g0->GetParameter(0)/200.);
lin_g0_p05pc->SetParameter(1,fit_g0->GetParameter(1)/200.);
lin_g0_p05pc->SetLineColor(kOrange+1);
TF1* lin_g0_p02pc = new TF1("lin_g0_p02pc","[0]+[1]*x",rangemin_g0,rangemax_g0);
lin_g0_p02pc->SetParameter(0,fit_g0->GetParameter(0)/500.);
lin_g0_p02pc->SetParameter(1,fit_g0->GetParameter(1)/500.);
lin_g0_p02pc->SetLineColor(kOrange);
TF1* lin_g0_m1pc = new TF1("lin_g0_m1pc","[0]+[1]*x",rangemin_g0,rangemax_g0);
lin_g0_m1pc->SetParameter(0,fit_g0->GetParameter(0)/-100.);
lin_g0_m1pc->SetParameter(1,fit_g0->GetParameter(1)/-100.);
lin_g0_m1pc->SetLineColor(kRed);
TF1* lin_g0_m05pc = new TF1("lin_g0_m05pc","[0]+[1]*x",rangemin_g0,rangemax_g0);
lin_g0_m05pc->SetParameter(0,fit_g0->GetParameter(0)/-200.);
lin_g0_m05pc->SetParameter(1,fit_g0->GetParameter(1)/-200.);
lin_g0_m05pc->SetLineColor(kOrange+1);
TF1* lin_g0_m02pc = new TF1("lin_g0_m02pc","[0]+[1]*x",rangemin_g0,rangemax_g0);
lin_g0_m02pc->SetParameter(0,fit_g0->GetParameter(0)/-500.);
lin_g0_m02pc->SetParameter(1,fit_g0->GetParameter(1)/-500.);
lin_g0_m02pc->SetLineColor(kOrange);
norm_g0->GetXaxis()->SetRangeUser(*min_element(r0_filter.begin(),r0_filter.end()),*max_element(r0_filter.begin(),r0_filter.end()));
norm_g0->SetMinimum(1.5*lin_g0_m02pc->Eval(rangemax_g0));
norm_g0->SetMaximum(1.5*lin_g0_p02pc->Eval(rangemax_g0));
if (isHGX) {
norm_g0->SetMinimum(3*lin_g0_m02pc->Eval(rangemax_g0));
norm_g0->SetMaximum(3*lin_g0_p02pc->Eval(rangemax_g0));
}
norm_g0->GetXaxis()->SetTitle("Signal generator voltage [mV]");
norm_g0->GetYaxis()->SetTitle("Normalised ADC [ADU]");
norm_g0->GetYaxis()->SetTitleOffset(0.9);
norm_g0->Draw("AP");
flat_g0->Draw("same");
lin_g0_p1pc->Draw("same");
lin_g0_p05pc->Draw("same");
lin_g0_p02pc->Draw("same");
lin_g0_m1pc->Draw("same");
lin_g0_m05pc->Draw("same");
lin_g0_m02pc->Draw("same");
norm_g0->Draw("P");
A4->Update();
//sprintf(savename,"plots/M%s/%s/pixel_%s_%d_g0norm_M%s.png", module_str.c_str(), plotfolder_str.c_str(),pixel_type.c_str(), i, module_str.c_str());
//mapcanvas->SaveAs((const char *)(savename));
//delete norm_g0;
}
}
}
A5->cd();
if (r1_adc.size() > 1) {
rangemin_g1 = lowestPointAfterSwitching(r1_filter,r0_filter);
rangemax_g1 = *max_element(r1_filter.begin(),r1_filter.end());
// Added to fit first linear range, JF1.2
//rangemax_g1 = std::min(rangemax_g1, 2200.);
rangemax_g1 = checkRangeMaxForAmplifierPlateau(rangemax_g1);
if (rangemax_g1 > rangemin_g1) {
grap_g1->Fit("pol1","QRC","",rangemin_g1,rangemax_g1);
fit_g1 = (TF1*) grap_g1->GetFunction("pol1");
if (fit_g1) {
fit_g1->SetLineColor(kGreen+2);
fit_g1->SetParName(0,"G1 const");
fit_g1->SetParName(1,"G1 grad");
grap_g1->GetXaxis()->SetTitle("Signal generator voltage [mV]");
grap_g1->GetYaxis()->SetTitle("ADC [ADU]");
grap_g1->GetYaxis()->SetTitleOffset(0.9);
grap_g1->SetMinimum(1000);
grap_g1->SetMaximum(15000);
grap_g1->GetXaxis()->SetLimits(*min_element(r1_filter.begin(),r1_filter.end()),*max_element(r1_filter.begin(),r1_filter.end()));
// TPaveStats *st0 = (TPaveStats*)grap_g1->FindObject("stats");
// st0->SetX1NDC(0.6);
// st0->SetX2NDC(0.94);
// st0->SetY1NDC(0.18);
// st0->SetY2NDC(0.37);
// st0->SetBorderSize(0);
// st0->SetTextColor(kGreen+2);
grap_g1->Draw("AP");
fit_g1->Draw("same");
A5->Update();
//sprintf(savename,"plots/M%s/%s/pixel_%s_%d_g1_M%s.png", module_str.c_str(), plotfolder_str.c_str(), pixel_type.c_str(), i, module_str.c_str());
//mapcanvas->SaveAs((const char *)(savename));
vector<double> r1_adc_norm;
for (size_t j = 0; j < r1_adc.size(); j++) {
r1_adc_norm.push_back(r1_adc[j] - fit_g1->Eval(r1_filter[j]));
}
A6->cd();
TGraphErrors *norm_g1 = new TGraphErrors(r1_adc.size(),&(r1_filter[0]),&(r1_adc_norm[0]),&(r1_ferr[0]),&(r1_adcerr[0]));
norm_g1->SetMarkerColor(kGreen+2);
norm_g1->SetLineColor(kGreen+2);
TF1* flat_g1 = new TF1("flat_gi","0",rangemin_g1,rangemax_g1);
flat_g1->SetLineColor(kGreen+2);
TF1* lin_g1_p02pc = new TF1("lin_g1_p02pc","[0]+[1]*x",rangemin_g1,rangemax_g1);
lin_g1_p02pc->SetParameter(0,fit_g1->GetParameter(0)/500.);
lin_g1_p02pc->SetParameter(1,fit_g1->GetParameter(1)/500.);
lin_g1_p02pc->SetLineColor(kOrange);
TF1* lin_g1_p01pc = new TF1("lin_g1_p01pc","[0]+[1]*x",rangemin_g1,rangemax_g1);
lin_g1_p01pc->SetParameter(0,fit_g1->GetParameter(0)/1000.);
lin_g1_p01pc->SetParameter(1,fit_g1->GetParameter(1)/1000.);
lin_g1_p01pc->SetLineColor(kYellow);
TF1* lin_g1_m02pc = new TF1("lin_g1_m02pc","[0]+[1]*x",rangemin_g1,rangemax_g1);
lin_g1_m02pc->SetParameter(0,fit_g1->GetParameter(0)/-500.);
lin_g1_m02pc->SetParameter(1,fit_g1->GetParameter(1)/-500.);
lin_g1_m02pc->SetLineColor(kOrange);
TF1* lin_g1_m01pc = new TF1("lin_g1_m01pc","[0]+[1]*x",rangemin_g1,rangemax_g1);
lin_g1_m01pc->SetParameter(0,fit_g1->GetParameter(0)/-1000.);
lin_g1_m01pc->SetParameter(1,fit_g1->GetParameter(1)/-1000.);
lin_g1_m01pc->SetLineColor(kYellow);
norm_g1->GetXaxis()->SetRangeUser(*min_element(r1_filter.begin(),r1_filter.end()),*max_element(r1_filter.begin(),r1_filter.end()));
norm_g1->SetMinimum(1.5*lin_g1_m02pc->Eval(rangemin_g1));
norm_g1->SetMaximum(1.5*lin_g1_p02pc->Eval(rangemin_g1));
norm_g1->GetXaxis()->SetTitle("Signal generator voltage [mV]");
norm_g1->GetYaxis()->SetTitle("Normalised ADC [ADU]");
norm_g1->GetYaxis()->SetTitleOffset(0.9);
norm_g1->Draw("AP");
flat_g1->Draw("same");
lin_g1_p02pc->Draw("same");
lin_g1_p01pc->Draw("same");
lin_g1_m02pc->Draw("same");
lin_g1_m01pc->Draw("same");
norm_g1->Draw("P");
A6->Update();
//sprintf(savename,"plots/M%s/%s/pixel_%s_%d_g1norm_M%s.png", module_str.c_str(),plotfolder_str.c_str(), pixel_type.c_str(), i, module_str.c_str());
//mapcanvas->SaveAs((const char *)(savename));
//delete norm_g1;
//
}
}
}
if(fit_g1){
A7->cd();
TGraph* linearityGraph = new TGraph();
double x, y;
for(size_t i = 0; i < grap_g1->GetN(); i++){
grap_g1->GetPoint(i, x, y);
auto ADU = y;
auto fitADU = fit_g1->Eval(x);
linearityGraph->SetPoint(i, ADU, fitADU - ADU);
}
//linearityGraph->GetXaxis()->SetTitle("Injected signal [mV]");
linearityGraph->GetXaxis()->SetTitle("Injected signal [ADU]");
linearityGraph->GetYaxis()->SetTitle("fit - signal [ADU]");
linearityGraph->SetMarkerStyle(20);
linearityGraph->SetMarkerColor(kGreen+2);
linearityGraph->SetLineColor(kGreen+2);
linearityGraph->Draw("AP");
A7->Update();
}
// get ratio measurements
// if (fit_g0 && fit_g1) {
// double this_g0overg1 = fit_g0->GetParameter(1)/fit_g1->GetParameter(1);
// double this_g0overg1er = sqrt(pow(fit_g0->GetParError(1)/fit_g0->GetParameter(1),2) + pow(fit_g1->GetParError(1)/fit_g1->GetParameter(1),2));
// cout << "G0overG1 =" << this_g0overg1 << "+/-" << this_g0overg1er << endl;
// }
rootapp.Run();
return 0;
}

520
BP_fit_thin.cpp Normal file
View File

@ -0,0 +1,520 @@
// to analyse the backplane pulsing data per module
// changes by VH 210906: to eliminate hardcoded absolute paths, uses location of the analysis root files as additional input argument (accordingly changed in filename_creator.sh)
#include "TApplication.h"
#include "sls_detector_calibration/jungfrauCommonHeader.h"
#include "sls_detector_calibration/jungfrauCommonFunctions.h"
#include "sls_detector_calibration/jungfrauFile.C"
#include "sls_detector_calibration/jungfrauPedestal.C"
#include "TGraphErrors.h"
#include "TF1.h"
#include "TStyle.h"
#include "TPaveStats.h"
#include "TFile.h"
#include "TLegend.h"
#include "TPaveText.h"
#include "TCanvas.h"
#include "TRootCanvas.h"
#include "TSystem.h"
#include "TF2.h"
#include <sys/stat.h>
#include <sstream>
//#define NB_ENABLE 1
//void nonblock(int state);
//#define NB_DISABLE 0
//TApplication* rootapp;
//TCanvas *A2;
//TCanvas *A3;
//TCanvas *A4;
//TCanvas *A5;
//TCanvas *A6;
TGraphErrors *grap_g0;
TGraphErrors *grap_g1;
TF1 *fit_g0=0;
TF1 *fit_g1=0;
TGraphErrors *norm_g0=0;
TGraphErrors *norm_g1=0;
TF1 *flat_g0;
TF1 *flat_g1;
TF1 *lin_g0_p1pc;
TF1 *lin_g0_p05pc;
TF1 *lin_g0_p02pc;
TF1 *lin_g0_m1pc;
TF1 *lin_g0_m05pc;
TF1 *lin_g0_m02pc;
TF1 *lin_g1_p02pc;
TF1 *lin_g1_p01pc;
TF1 *lin_g1_m02pc;
TF1 *lin_g1_m01pc;
//TPaveStats *st0;
//void PlotCanvas(void);
double checkRangeMaxForAmplifierPlateau(double range_max) {
// check that the range maximum is no more than 6.4 V
// to avoid non-linearity coming from amplifier plateau
if (range_max > 6400) {
return 6400;
} else {
return range_max;
}
}
bool isHGX=false;
int main(int argc, char* argv[]) {
//nonblock(NB_ENABLE);
cout <<"opening the rootapp" <<endl;
TApplication rootapp("example",&argc, argv);
jungfrauStyle();
//gROOT->SetBatch(1);
gStyle->SetOptFit(11);
/*
if (argc != 3) {
cout << "Correct usage:" << endl;
cout << "arg 1: specify module number" << endl;
cout << "arg 2: specify data location" << endl;
cout << "arg 3: specify column (x)" << endl;
cout << "arg 4: specify row (y)" << endl;
exit(1);
}
*/ //uncomment for SR
if (argc != 4) {
cout << "Correct usage:" << endl;
cout << "arg 1: specify module number" << endl;
cout << "arg 2: specify pixel x position" << endl;
cout << "arg 3: specify pixel y position" << endl;
exit(1);
} //uncomment for VH 210906
string module_str = argv[1];
string str2 =("HG0G1G2");
string str3 =("HGOG1G2"); //filename creator had this bug
string C = argv[2];
string R = argv[3];
int column;
int row;
std::stringstream(C) >> column;
std::stringstream(R) >> row;
int pixel = column+row*1024;
char data_loc[256];
sprintf(data_loc,"/mnt/sls_det_storage/jungfrau_calib/jungfrau_ana_sophie/M%s_CalibAna/", module_str.c_str());
cout << data_loc << endl;
std::string folder_path(data_loc);
if (folder_path.find(str2) != string::npos) isHGX=true;
if (folder_path.find(str3) != string::npos) isHGX=true;
// cout << data_loc.find(str2)<<" " << string::npos << " " << str2 << " " << data_loc <<endl;
if (isHGX) {
cout << " HG0->HG1->HG2 sequence - dynamicHG0" <<endl;
// plotfolder_str="BackplanePulsing_HG0G1G2";
}
else {
cout << " G0->G1->G2 sequence - dynamicG0" <<endl;
// plotfolder_str="BackplanePulsing";
}
std::vector<double> G0_pixel(245, 0);
std::vector<double> G0_err_pixel(245, 0);
std::vector<double> G1_pixel(245, 0);
std::vector<double> G1_err_pixel(245, 0);
//char savename[128]; //uncomment for SR
//char filename[128]; //uncomment for SR
char filename[256]; //uncomment for VH 210902
// create necessary directories with permissions drwxrwxr-x
// data/Mxxx
//sprintf(savename,"data/M%s", module_str.c_str());
//mkdir(savename, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
// plots/Mxxx
//sprintf(savename,"plots/M%s", module_str.c_str());
//mkdir(savename, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
// plots/Mxxx/BackplanePulsing
//sprintf(savename,"plots/M%s/%s", module_str.c_str(), plotfolder_str.c_str());
//mkdir(savename, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
// /mnt/pcmoench_jungfrau_data/jungfrau_ana_sophie/Mxxx_CalibAna
//sprintf(savename,"/mnt/sls_det_storage/jungfrau_data1/jungfrau_ana_sophie/M%s_CalibAna", module_str.c_str()); //uncomment for SR
//sprintf(savename,"%s", anadata_loc.c_str()); //uncomment for VH 210906
//mkdir(savename, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
double xs[245];
for (int i = 0; i < 139; i++) {
xs[i] = 10+i*5.;
}
for (int i = 0; i < 106; i++) {
xs[i+139] = 700+((i+1)*50);
}
TCanvas *A2 = new TCanvas("A2","Plot scan",150,10,800,400);
TCanvas *A3 = new TCanvas("A3","Plot G0 fit",150,10,800,400);
TCanvas *A4 = new TCanvas("A4","Plot G0 residuals",150,10,800,400);
TCanvas *A5 = new TCanvas("A5","Plot G1 fit",150,10,800,400);
TCanvas *A6 = new TCanvas("A6","Plot G1 residuals",150,10,800,400);
//file name
sprintf(filename,"%sBP_histos_M%s.root",folder_path.c_str(), module_str.c_str());
cout << "Loading file " << filename << endl;
TFile* f = new TFile((const char *)(filename),"READ");
for (int j = 0; j < 245; j++) {
TH2F* hist0=(TH2F*)f->Get(Form("avg_adcG0_map_%d",j));
G0_pixel[j]=hist0->GetBinContent((column+1),(row+1));
TH2F* hist0er=(TH2F*)f->Get(Form("avg_adcG0er_map_%d",j));
G0_err_pixel[j]=hist0er->GetBinContent((column+1),(row+1));
TH2F* hist1=(TH2F*)f->Get(Form("avg_adcG1_map_%d",j));
G1_pixel[j]=hist1->GetBinContent((column+1),(row+1));
TH2F* hist1er=(TH2F*)f->Get(Form("avg_adcG1er_map_%d",j));
G1_err_pixel[j]=hist1er->GetBinContent((column+1),(row+1));
//cout << "Data for pixel "<< pixel << "is loaded" << endl;
}
A2->SetLeftMargin(0.13);
A2->SetRightMargin(0.05);
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;
vector<double> r1_ferr;
for (int j = 0; j < 245; j++) {
if (G0_pixel[j] != 0) {
r0_filter.push_back(xs[j]);
r0_ferr.push_back(0.);
r0_adc.push_back(G0_pixel[j]);
r0_adcerr.push_back(G0_err_pixel[j]);
}
if (G1_pixel[j] != 0) {
r1_filter.push_back(xs[j]);
r1_ferr.push_back(0.);
r1_adc.push_back(G1_pixel[j]);
r1_adcerr.push_back(G1_err_pixel[j]);
}
cout << "Filter array is loaded" << endl;
}
//TGraphErrors *grap_g0 = 0;
//TGraphErrors *grap_g1 = 0;
//TF1 *fit_g0 = 0;
//TF1 *fit_g1 = 0;
double rangemin_g0 = 0;
double rangemax_g0 = 0;
double rangemin_g1 = 0;
double rangemax_g1 = 0;
A2->cd();
// define graphs
if (r0_adc.size() > 1) {
grap_g0 = new TGraphErrors(r0_adc.size(),&(r0_filter[0]),&(r0_adc[0]),&(r0_ferr[0]),&(r0_adcerr[0]));
grap_g0->SetMarkerStyle(20);
grap_g0->SetMarkerColor(kBlue);
grap_g0->SetLineColor(kBlue);
}
if (r1_adc.size() > 1) {
grap_g1 = new TGraphErrors(r1_adc.size(),&(r1_filter[0]),&(r1_adc[0]),&(r1_ferr[0]),&(r1_adcerr[0]));
grap_g1->SetMarkerStyle(20);
grap_g1->SetMarkerColor(kGreen+2);
grap_g1->SetLineColor(kGreen+2);
}
//debug
// cout << i <<" r0size= "<< r0_adc.size()<< " r1size= "<< r1_adc.size()<< endl;
// plot the datapoints
if (r1_adc.size() > 1) {
grap_g1->GetXaxis()->SetTitle("Signal generator voltage [mV]");
grap_g1->GetYaxis()->SetTitle("ADC [ADU]");
grap_g1->GetYaxis()->SetTitleOffset(0.9);
grap_g1->SetMinimum(1000);
grap_g1->SetMaximum(15000);
grap_g1->GetXaxis()->SetLimits(0,7200);
grap_g1->Draw("AP");
if (r0_adc.size() > 1) {
grap_g0->Draw("P");
A2->Update();
}
//cout << "Number of point in g1 =" << r1_adc.size() << endl;
//sprintf(savename,"plots/M%s/%s/pixel_%s_%d_M%s.png", module_str.c_str(), plotfolder_str.c_str(),pixel_type.c_str(), i,module_str.c_str());
//mapcanvas->SaveAs((const char *)(savename));
}
// define fit ranges and fit
if (r0_adc.size() > 1) {
A3->cd();
rangemin_g0 = *min_element(r0_filter.begin(),r0_filter.end());
rangemax_g0 = highestPointBeforeSwitching(r0_filter,r1_filter);
if (rangemax_g0 > rangemin_g0) {
grap_g0->Fit("pol1","QRC","",rangemin_g0,rangemax_g0);
fit_g0 = (TF1*) grap_g0->GetFunction("pol1");
if (fit_g0) {
fit_g0->SetLineColor(kBlue);
fit_g0->SetParName(0,"G0 const");
fit_g0->SetParName(1,"G0 grad");
grap_g0->GetXaxis()->SetTitle("Signal generator voltage [mV]");
grap_g0->GetYaxis()->SetTitle("ADC [ADU]");
grap_g0->GetYaxis()->SetTitleOffset(0.9);
grap_g0->SetMinimum(1000);
grap_g0->SetMaximum(15000);
grap_g0->GetXaxis()->SetLimits(*min_element(r0_filter.begin(),r0_filter.end()),*max_element(r0_filter.begin(),r0_filter.end()));
// TPaveStats *st0 = (TPaveStats*)grap_g0->FindObject("stats");
// st0->SetX1NDC(0.2);
// st0->SetX2NDC(0.54);
// st0->SetY1NDC(0.18);
// st0->SetY2NDC(0.37);
// st0->SetBorderSize(0);
// st0->SetTextColor(kBlue);
grap_g0->Draw("AP");
fit_g0->Draw("same");
A3->Update();
//PlotCanvas();
//sprintf(savename,"plots/M%s/%s/pixel_%s_%d_g0_M%s.png", module_str.c_str(),plotfolder_str.c_str(), pixel_type.c_str(), i,module_str.c_str());
//mapcanvas->SaveAs((const char *)(savename));
A4->cd();
vector<double> r0_adc_norm;
for (size_t j = 0; j < r0_adc.size(); j++) {
r0_adc_norm.push_back(r0_adc[j] - fit_g0->Eval(r0_filter[j]));
}
TGraphErrors *norm_g0 = new TGraphErrors(r0_adc.size(),&(r0_filter[0]),&(r0_adc_norm[0]),&(r0_ferr[0]),&(r0_adcerr[0]));
norm_g0->SetMarkerColor(kBlue);
norm_g0->SetLineColor(kBlue);
TF1* flat_g0 = new TF1("flat_g0","0",rangemin_g0,rangemax_g0);
flat_g0->SetLineColor(kBlue);
TF1* lin_g0_p1pc = new TF1("lin_g0_p1pc","[0]+[1]*x",rangemin_g0,rangemax_g0);
lin_g0_p1pc->SetParameter(0,fit_g0->GetParameter(0)/100.);
lin_g0_p1pc->SetParameter(1,fit_g0->GetParameter(1)/100.);
lin_g0_p1pc->SetLineColor(kRed);
TF1* lin_g0_p05pc = new TF1("lin_g0_p05pc","[0]+[1]*x",rangemin_g0,rangemax_g0);
lin_g0_p05pc->SetParameter(0,fit_g0->GetParameter(0)/200.);
lin_g0_p05pc->SetParameter(1,fit_g0->GetParameter(1)/200.);
lin_g0_p05pc->SetLineColor(kOrange+1);
TF1* lin_g0_p02pc = new TF1("lin_g0_p02pc","[0]+[1]*x",rangemin_g0,rangemax_g0);
lin_g0_p02pc->SetParameter(0,fit_g0->GetParameter(0)/500.);
lin_g0_p02pc->SetParameter(1,fit_g0->GetParameter(1)/500.);
lin_g0_p02pc->SetLineColor(kOrange);
TF1* lin_g0_m1pc = new TF1("lin_g0_m1pc","[0]+[1]*x",rangemin_g0,rangemax_g0);
lin_g0_m1pc->SetParameter(0,fit_g0->GetParameter(0)/-100.);
lin_g0_m1pc->SetParameter(1,fit_g0->GetParameter(1)/-100.);
lin_g0_m1pc->SetLineColor(kRed);
TF1* lin_g0_m05pc = new TF1("lin_g0_m05pc","[0]+[1]*x",rangemin_g0,rangemax_g0);
lin_g0_m05pc->SetParameter(0,fit_g0->GetParameter(0)/-200.);
lin_g0_m05pc->SetParameter(1,fit_g0->GetParameter(1)/-200.);
lin_g0_m05pc->SetLineColor(kOrange+1);
TF1* lin_g0_m02pc = new TF1("lin_g0_m02pc","[0]+[1]*x",rangemin_g0,rangemax_g0);
lin_g0_m02pc->SetParameter(0,fit_g0->GetParameter(0)/-500.);
lin_g0_m02pc->SetParameter(1,fit_g0->GetParameter(1)/-500.);
lin_g0_m02pc->SetLineColor(kOrange);
norm_g0->GetXaxis()->SetRangeUser(*min_element(r0_filter.begin(),r0_filter.end()),*max_element(r0_filter.begin(),r0_filter.end()));
norm_g0->SetMinimum(1.5*lin_g0_m02pc->Eval(rangemax_g0));
norm_g0->SetMaximum(1.5*lin_g0_p02pc->Eval(rangemax_g0));
if (isHGX) {
norm_g0->SetMinimum(3*lin_g0_m02pc->Eval(rangemax_g0));
norm_g0->SetMaximum(3*lin_g0_p02pc->Eval(rangemax_g0));
}
norm_g0->GetXaxis()->SetTitle("Signal generator voltage [mV]");
norm_g0->GetYaxis()->SetTitle("Normalised ADC [ADU]");
norm_g0->GetYaxis()->SetTitleOffset(0.9);
norm_g0->Draw("AP");
flat_g0->Draw("same");
lin_g0_p1pc->Draw("same");
lin_g0_p05pc->Draw("same");
lin_g0_p02pc->Draw("same");
lin_g0_m1pc->Draw("same");
lin_g0_m05pc->Draw("same");
lin_g0_m02pc->Draw("same");
norm_g0->Draw("P");
A4->Update();
//sprintf(savename,"plots/M%s/%s/pixel_%s_%d_g0norm_M%s.png", module_str.c_str(), plotfolder_str.c_str(),pixel_type.c_str(), i, module_str.c_str());
//mapcanvas->SaveAs((const char *)(savename));
//delete norm_g0;
}
}
}
A5->cd();
if (r1_adc.size() > 1) {
rangemin_g1 = lowestPointAfterSwitching(r1_filter,r0_filter);
rangemax_g1 = *max_element(r1_filter.begin(),r1_filter.end());
rangemax_g1 = checkRangeMaxForAmplifierPlateau(rangemax_g1);
if (rangemax_g1 > rangemin_g1) {
grap_g1->Fit("pol1","QRC","",rangemin_g1,rangemax_g1);
fit_g1 = (TF1*) grap_g1->GetFunction("pol1");
if (fit_g1) {
fit_g1->SetLineColor(kGreen+2);
fit_g1->SetParName(0,"G1 const");
fit_g1->SetParName(1,"G1 grad");
grap_g1->GetXaxis()->SetTitle("Signal generator voltage [mV]");
grap_g1->GetYaxis()->SetTitle("ADC [ADU]");
grap_g1->GetYaxis()->SetTitleOffset(0.9);
grap_g1->SetMinimum(1000);
grap_g1->SetMaximum(15000);
grap_g1->GetXaxis()->SetLimits(*min_element(r1_filter.begin(),r1_filter.end()),*max_element(r1_filter.begin(),r1_filter.end()));
// TPaveStats *st0 = (TPaveStats*)grap_g1->FindObject("stats");
// st0->SetX1NDC(0.6);
// st0->SetX2NDC(0.94);
// st0->SetY1NDC(0.18);
// st0->SetY2NDC(0.37);
// st0->SetBorderSize(0);
// st0->SetTextColor(kGreen+2);
grap_g1->Draw("AP");
fit_g1->Draw("same");
A5->Update();
//sprintf(savename,"plots/M%s/%s/pixel_%s_%d_g1_M%s.png", module_str.c_str(), plotfolder_str.c_str(), pixel_type.c_str(), i, module_str.c_str());
//mapcanvas->SaveAs((const char *)(savename));
vector<double> r1_adc_norm;
for (size_t j = 0; j < r1_adc.size(); j++) {
r1_adc_norm.push_back(r1_adc[j] - fit_g1->Eval(r1_filter[j]));
}
A6->cd();
TGraphErrors *norm_g1 = new TGraphErrors(r1_adc.size(),&(r1_filter[0]),&(r1_adc_norm[0]),&(r1_ferr[0]),&(r1_adcerr[0]));
norm_g1->SetMarkerColor(kGreen+2);
norm_g1->SetLineColor(kGreen+2);
TF1* flat_g1 = new TF1("flat_gi","0",rangemin_g1,rangemax_g1);
flat_g1->SetLineColor(kGreen+2);
TF1* lin_g1_p02pc = new TF1("lin_g1_p02pc","[0]+[1]*x",rangemin_g1,rangemax_g1);
lin_g1_p02pc->SetParameter(0,fit_g1->GetParameter(0)/500.);
lin_g1_p02pc->SetParameter(1,fit_g1->GetParameter(1)/500.);
lin_g1_p02pc->SetLineColor(kOrange);
TF1* lin_g1_p01pc = new TF1("lin_g1_p01pc","[0]+[1]*x",rangemin_g1,rangemax_g1);
lin_g1_p01pc->SetParameter(0,fit_g1->GetParameter(0)/1000.);
lin_g1_p01pc->SetParameter(1,fit_g1->GetParameter(1)/1000.);
lin_g1_p01pc->SetLineColor(kYellow);
TF1* lin_g1_m02pc = new TF1("lin_g1_m02pc","[0]+[1]*x",rangemin_g1,rangemax_g1);
lin_g1_m02pc->SetParameter(0,fit_g1->GetParameter(0)/-500.);
lin_g1_m02pc->SetParameter(1,fit_g1->GetParameter(1)/-500.);
lin_g1_m02pc->SetLineColor(kOrange);
TF1* lin_g1_m01pc = new TF1("lin_g1_m01pc","[0]+[1]*x",rangemin_g1,rangemax_g1);
lin_g1_m01pc->SetParameter(0,fit_g1->GetParameter(0)/-1000.);
lin_g1_m01pc->SetParameter(1,fit_g1->GetParameter(1)/-1000.);
lin_g1_m01pc->SetLineColor(kYellow);
norm_g1->GetXaxis()->SetRangeUser(*min_element(r1_filter.begin(),r1_filter.end()),*max_element(r1_filter.begin(),r1_filter.end()));
norm_g1->SetMinimum(1.5*lin_g1_m02pc->Eval(rangemin_g1));
norm_g1->SetMaximum(1.5*lin_g1_p02pc->Eval(rangemin_g1));
norm_g1->GetXaxis()->SetTitle("Signal generator voltage [mV]");
norm_g1->GetYaxis()->SetTitle("Normalised ADC [ADU]");
norm_g1->GetYaxis()->SetTitleOffset(0.9);
norm_g1->Draw("AP");
flat_g1->Draw("same");
lin_g1_p02pc->Draw("same");
lin_g1_p01pc->Draw("same");
lin_g1_m02pc->Draw("same");
lin_g1_m01pc->Draw("same");
norm_g1->Draw("P");
A6->Update();
//sprintf(savename,"plots/M%s/%s/pixel_%s_%d_g1norm_M%s.png", module_str.c_str(),plotfolder_str.c_str(), pixel_type.c_str(), i, module_str.c_str());
//mapcanvas->SaveAs((const char *)(savename));
//delete norm_g1;
}
}
}
// get ratio measurements
// if (fit_g0 && fit_g1) {
// double this_g0overg1 = fit_g0->GetParameter(1)/fit_g1->GetParameter(1);
// double this_g0overg1er = sqrt(pow(fit_g0->GetParError(1)/fit_g0->GetParameter(1),2) + pow(fit_g1->GetParError(1)/fit_g1->GetParameter(1),2));
// cout << "G0overG1 =" << this_g0overg1 << "+/-" << this_g0overg1er << endl;
// }
rootapp.Run();
return 0;
}

View File

@ -95,55 +95,55 @@ sleep 1
# prepare the AGILENT 33250A
echo $CLI" OUTP OFF " | nc pc8830 5555
echo $CLI" OUTP OFF " | nc pc10773 5555
sleep 0.2
#remember to put High-Z load!
#Change load to Infinity
echo $CLI" OUTP:LOAD INF " | nc pc8830 5555
echo $CLI" OUTP:LOAD INF " | nc pc10773 5555
# Polarity normal
echo $CLI" OUTP:POL NORM" | nc pc8830 5555
echo $CLI" OUTP:POL NORM" | nc pc10773 5555
# pulse
echo $CLI" FUNC PULS" | nc pc8830 5555
echo $CLI" FUNC PULS" | nc pc10773 5555
sleep 0.2
# frequency 1kHz
echo $CLI" FREQ 1000" | nc pc8830 5555
echo $CLI" FREQ 1000" | nc pc10773 5555
sleep 0.2
# width 40 us
echo $CLI" PULS:WIDT 0.000040" | nc pc8830 5555
echo $CLI" PULS:WIDT 0.000040" | nc pc10773 5555
sleep 0.2
# amplitude 0.1 V" | nc pc8830 5555
echo $CLI" VOLT 0.1" | nc pc8830 5555
echo $CLI" VOLT 0.1" | nc pc10773 5555
sleep 0.2
# offset 0 V
#echo $CLI" VOLT:OFFS 0" | nc pc8830 5555
sleep 0.2
# VLOW 0 V
echo $CLI" VOLT:LOW 0" | nc pc8830 5555
echo $CLI" VOLT:LOW 0" | nc pc10773 5555
sleep 0.2
# edge 50 ns
echo $CLI" PULS:TRAN 0.000000050" | nc pc8830 5555
echo $CLI" PULS:TRAN 0.000000050" | nc pc10773 5555
sleep 0.2
# triggered burst
echo $CLI" BURS:MODE TRIG" | nc pc8830 5555
echo $CLI" BURS:MODE TRIG" | nc pc10773 5555
sleep 0.2
# cycles 1
echo $CLI" BURS:NCYC 1" | nc pc8830 5555
echo $CLI" BURS:NCYC 1" | nc pc10773 5555
sleep 0.2
# external trigger source
echo $CLI" TRIG:SOUR EXT" | nc pc8830 5555
echo $CLI" TRIG:SOUR EXT" | nc pc10773 5555
sleep 0.2
# delay 1 us
echo $CLI" TRIG:DEL 0.000001" | nc pc8830 5555
echo $CLI" TRIG:DEL 0.000001" | nc pc10773 5555
sleep 0.2
# slope positive
echo $CLI" TRIG:SLOP POS" | nc pc8830 5555
echo $CLI" TRIG:SLOP POS" | nc pc10773 5555
sleep 0.2
# turn on burst mode
echo $CLI" BURS:STAT ON" | nc pc8830 5555
echo $CLI" BURS:STAT ON" | nc pc10773 5555
sleep 0.2
@ -159,7 +159,7 @@ fi
# high voltage
#sls_detector_put highvoltage 200 #because it seemed more stable, we are using external HV 230V
# output on
echo $CLI" OUTP ON" | nc pc8830 5555
echo $CLI" OUTP ON" | nc pc10773 5555
sleep 0.2
echo "The current on the amplifier board should be ~0.035 A"
@ -178,6 +178,8 @@ if [[ $input = "q" ]]; then
exit 1
fi
# sls_detector_put gainmode fixg0 # Trial for M431_JF12
# sleep 2
$RCVON &
@ -186,7 +188,7 @@ for ivpulse in {10..1000..10}
do
vpulse=$(printf %.3f $(echo "$ivpulse/1000" | bc -l))
echo $CLI" VOLT "$vpulse | nc pc8830 5555
echo $CLI" VOLT:HIGH "$vpulse | nc pc10773 5555 #24.02.2025 changed, before command was echo $CLI" VOLT "$vpulse | nc pc10773 5555
sleep 1
sls_detector_put start
sleep 1
@ -195,7 +197,7 @@ done
for ivpulse in {1050..7000..50}
do
vpulse=$(printf %.3f $(echo "$ivpulse/1000" | bc -l))
echo $CLI" VOLT "$vpulse | nc pc8830 5555
echo $CLI" VOLT:HIGH "$vpulse | nc pc10773 5555 #24.02.2025 changed, before command was echo $CLI" VOLT "$vpulse | nc pc10773 5555
sleep 1
sls_detector_put start
sleep 1
@ -205,7 +207,7 @@ done
# high voltage
#sls_detector_put highvoltage 0
# output off
echo $CLI" OUTP OFF " | nc pc8830 5555
echo $CLI" OUTP OFF " | nc pc10773 5555
echo "Finished scan, please wait for capacitor to discharge"
sleep 20

236
BP_scan_both_speeds.sh Normal file
View File

@ -0,0 +1,236 @@
#!/bin/bash
# to run do: bash BP_scan.sh
# prerequisites:
# - setup_env.sh souced
# - the hostname is set
# - detector is on
# - source pccalib.sh with pc (pc-jungfrau-01/pc-jungfrau-test/pc-jungfrau-02)
# - waveform generator is on
# - amplifier board is powered and unconnected.
# - last file should be 2097184000 bytes big.
# connect to pc10773 (RH7 machine connected to the pulser and, after klog, run the command
# nc -k -n -v -l -p 5555 -e /bin/bash
# last data file (000002.dat) should be 2097184000 bytes
KILLRCV="killall ju_udp_receiver_3threads_2_0"
$KILLRCV
if [[ "$0" == *"BP_scan_both_speeds.sh"* ]]; then
echo "script changes env. variables: should be invoked with source, not sh "
exit
fi
if [ ! -v $1 ]; then
echo $0
echo "printing filenames for module " $1
source filename_creator.sh $1 Y
sls_detector_put stop #just in case
sls_detector_put powerchip 1
sls_detector_put delay 0
sls_detector_put triggers 1
sls_detector_put frames 100
sls_detector_put period 0.005
sls_detector_put exptime 0.00004
sls_detector_put highvoltage 0
# configure for receiver on pc-jungfrau-01/pc-jungfrau-test/pc-jungfrau-02
# source pccalib.sh with pc (pc-jungfrau-01/pc-jungfrau-test/pc-jungfrau-02)
sls_detector_put udp_dstport 32410
sls_detector_put udp_dstip $DSTIP #10.1.4.105
sls_detector_put udp_dstmac $DSTMAC #3C:FD:FE:A2:14:D8
sls_detector_put udp_srcip $SRCIP #10.1.4.9
sls_detector_put udp_srcmac 00:ab:be:cc:dd:e2
#sls_detector_put configuremac 0
sls_detector_put readoutspeed half_speed
#sls_detector_put readoutspeed full_speed
sls_detector_put gainmode dynamic
CLI=/afs/psi.ch/project/sls_det_software/serial_control_software/minidelay/minidelay
# prepare the AGILENT 33250A
echo $CLI" OUTP OFF " | nc pc10773 5555
sleep 0.2
#remember to put High-Z load!
#Change load to Infinity
echo $CLI" OUTP:LOAD INF " | nc pc10773 5555
# Polarity normal
echo $CLI" OUTP:POL NORM" | nc pc10773 5555
# pulse
echo $CLI" FUNC PULS" | nc pc10773 5555
sleep 0.2
# frequency 1kHz
echo $CLI" FREQ 1000" | nc pc10773 5555
sleep 0.2
# width 40 us
echo $CLI" PULS:WIDT 0.000040" | nc pc10773 5555
sleep 0.2
# amplitude 0.1 V" | nc pc10773 5555
echo $CLI" VOLT 0.1" | nc pc10773 5555
# offset 0 V echo $CLI" VOLT:OFFS 0" | nc pc8830 5555
sleep 0.2
# VLOW 0 V
echo $CLI" VOLT:LOW 0" | nc pc10773 5555
sleep 0.2
# edge 50 ns
echo $CLI" PULS:TRAN 0.000000050" | nc pc10773 5555
sleep 0.2
# triggered burst
echo $CLI" BURS:MODE TRIG" | nc pc10773 5555
sleep 0.2
# cycles 1
echo $CLI" BURS:NCYC 1" | nc pc10773 5555
sleep 0.2
# external trigger source
echo $CLI" TRIG:SOUR EXT" | nc pc10773 5555
sleep 0.2
# delay 1 us
echo $CLI" TRIG:DEL 0.000001" | nc pc10773 5555
# delay 40 us
#echo $CLI" TRIG:DEL 0.000040" | nc pc10773 5555
sleep 0.2
# slope positive
echo $CLI" TRIG:SLOP POS" | nc pc10773 5555
sleep 0.2
# turn on burst mode
echo $CLI" BURS:STAT ON" | nc pc10773 5555
sleep 0.2
if [ "$1" == 'Y' ]; then
echo "started with Y argument, skipping manual checks"
else
echo "It is now safe to connect the cable between the amplifier board and the readout board"
echo "Please do so and press any key to continue, or press q to exit this script"
read -n 1 -s input
if [[ $input = "q" ]]; then
echo "Exiting script"
exit 1
fi
fi
# high voltage
# sls_detector_put highvoltage 200 #because it seemed more stable, we are using external HV 230V
# output on
echo $CLI" OUTP ON" | nc pc10773 5555
sleep 0.2
if [ "$1" == 'Y' ]; then
echo "started with Y argument, skipping manual checks"
else
echo "The current on the amplifier board should be ~0.035 A"
echo "Please check and press any key to continue, or press q to exit this script"
read -n 1 -s input
if [[ $input = "q" ]]; then
echo "Exiting script"
exit 1
fi
fi
$TKBPG0 &
sleep 1
# the scan
for ivpulse in {10..1000..10}
do
vpulse=$(printf %.3f $(echo "$ivpulse/1000" | bc -l))
echo $CLI" VOLT:HIGH "$vpulse | nc pc10773 5555
sleep 1
sls_detector_put start
sleep 1
done
for ivpulse in {1050..6000..50}
do
vpulse=$(printf %.3f $(echo "$ivpulse/1000" | bc -l))
echo $CLI" VOLT:HIGH "$vpulse | nc pc10773 5555
sleep 1
sls_detector_put start
sleep 1
done
# Kill receiver
sls_detector_put stop
echo $CLI" VOLT:HIGH 0.010" | nc pc10773 5555
sleep 20
$KILLRCV
# source filename creator to save data in fullspeed folder
source filename_creator.sh $1"_fullspeed" N
# set detector for full speed
sls_detector_put readoutspeed full_speed
$TKBPG0 &
sleep 1
# the scan
for ivpulse in {10..1000..10}
do
vpulse=$(printf %.3f $(echo "$ivpulse/1000" | bc -l))
echo $CLI" VOLT:HIGH "$vpulse | nc pc10773 5555
sleep 1
sls_detector_put start
sleep 1
done
for ivpulse in {1050..6000..50}
do
vpulse=$(printf %.3f $(echo "$ivpulse/1000" | bc -l))
echo $CLI" VOLT:HIGH "$vpulse | nc pc10773 5555
sleep 1
sls_detector_put start
sleep 1
done
# high voltage
# sls_detector_put highvoltage 0
# output off
echo $CLI" OUTP OFF " | nc pc10773 5555
$KILLRCV
echo "Finished scan, please wait for capacitor to discharge"
sleep 20
echo "It is now safe to disconnect the cable between the amplifier board and the readout board"
echo "Script finished"
else
echo "Specify module number as a first argument"
echo "Script finished"
fi

175
BP_scan_thinSensor.sh Normal file
View File

@ -0,0 +1,175 @@
#!/bin/bash
# to run do: bash BP_scan.sh
# prerequisites:
# - setup_env.sh souced
# - the hostname is set
# - detector is on
# - Filename_creator has been run (with correct module #)
# - source pccalib.sh with pc (pc-jungfrau-01/pc-jungfrau-test/pc-jungfrau-02)
# - waveform generator is on
# - amplifier board is powered and unconnected.
# - last file should be 2097184000 bytes big.
# connect to pc10773 (RH7 machine connected to the pulser and, after klog, run the command
# nc -k -n -v -l -p 5555 -e /bin/bash
# last data file (000002.dat) should be 2097184000 bytes
KILLRCV="killall ju_udp_receiver_3threads_2_0"
$KILLRCV
sls_detector_put stop #just in case
sls_detector_put powerchip 1
sls_detector_put delay 0
sls_detector_put triggers 1
sls_detector_put frames 100
sls_detector_put period 0.005
sls_detector_put exptime 0.00004
#sls_detector_put highvoltage 0
# configure for receiver on pc-jungfrau-01/pc-jungfrau-test/pc-jungfrau-02
# source pccalib.sh with pc (pc-jungfrau-01/pc-jungfrau-test/pc-jungfrau-02)
sls_detector_put udp_dstport 32410
sls_detector_put udp_dstip $DSTIP #10.1.4.105
sls_detector_put udp_dstmac $DSTMAC #3C:FD:FE:A2:14:D8
sls_detector_put udp_srcip $SRCIP #10.1.4.9
sls_detector_put udp_srcmac 00:ab:be:cc:dd:e2
#sls_detector_put configuremac 0
#sls_detector_put readoutspeed half_speed
sls_detector_put readoutspeed full_speed
sls_detector_put gainmode dynamic
CLI=/afs/psi.ch/project/sls_det_software/serial_control_software/minidelay/minidelay
# prepare the AGILENT 33250A
echo $CLI" OUTP OFF " | nc pc10773 5555
sleep 0.2
#remember to put High-Z load!
#Change load to Infinity
echo $CLI" OUTP:LOAD INF " | nc pc10773 5555
# Polarity normal
echo $CLI" OUTP:POL NORM" | nc pc10773 5555
# pulse
echo $CLI" FUNC PULS" | nc pc10773 5555
sleep 0.2
# frequency 1kHz
echo $CLI" FREQ 1000" | nc pc10773 5555
sleep 0.2
# width 40 us
echo $CLI" PULS:WIDT 0.000040" | nc pc10773 5555
sleep 0.2
# amplitude 0.1 V" | nc pc10773 5555
echo $CLI" VOLT 0.1" | nc pc10773 5555
# offset 0 V echo $CLI" VOLT:OFFS 0" | nc pc8830 5555
sleep 0.2
# VLOW 0 V
echo $CLI" VOLT:LOW 0" | nc pc10773 5555
sleep 0.2
# edge 50 ns
echo $CLI" PULS:TRAN 0.000000050" | nc pc10773 5555
sleep 0.2
# triggered burst
echo $CLI" BURS:MODE TRIG" | nc pc10773 5555
sleep 0.2
# cycles 1
echo $CLI" BURS:NCYC 1" | nc pc10773 5555
sleep 0.2
# external trigger source
echo $CLI" TRIG:SOUR EXT" | nc pc10773 5555
sleep 0.2
# delay 1 us
echo $CLI" TRIG:DEL 0.000001" | nc pc10773 5555
# delay 40 us
#echo $CLI" TRIG:DEL 0.000040" | nc pc10773 5555
sleep 0.2
# slope positive
echo $CLI" TRIG:SLOP POS" | nc pc10773 5555
sleep 0.2
# turn on burst mode
echo $CLI" BURS:STAT ON" | nc pc10773 5555
sleep 0.2
if [ "$1" == 'Y' ]; then
echo "started with Y argument, skipping manual checks"
else
echo "It is now safe to connect the cable between the amplifier board and the readout board"
echo "Please do so and press any key to continue, or press q to exit this script"
read -n 1 -s input
if [[ $input = "q" ]]; then
echo "Exiting script"
exit 1
fi
fi
# high voltage
# sls_detector_put highvoltage 200 #because it seemed more stable, we are using external HV 230V
# output on
echo $CLI" OUTP ON" | nc pc10773 5555
sleep 0.2
if [ "$1" == 'Y' ]; then
echo "started with Y argument, skipping manual checks"
else
echo "The current on the amplifier board should be ~0.035 A"
echo "Please check and press any key to continue, or press q to exit this script"
read -n 1 -s input
if [[ $input = "q" ]]; then
echo "Exiting script"
exit 1
fi
fi
$TKBPG0 &
# the scan
for ivpulse in {10..700..5}
do
vpulse=$(printf %.3f $(echo "$ivpulse/1000" | bc -l))
echo $CLI" VOLT:HIGH "$vpulse | nc pc10773 5555
sleep 1
sls_detector_put start
sleep 1
done
for ivpulse in {750..6000..50}
do
vpulse=$(printf %.3f $(echo "$ivpulse/1000" | bc -l))
echo $CLI" VOLT:HIGH "$vpulse | nc pc10773 5555
sleep 1
sls_detector_put start
sleep 1
done
# high voltage
# sls_detector_put highvoltage 0
# output off
echo $CLI" OUTP OFF " | nc pc10773 5555
$KILLRCV
echo "Finished scan, please wait for capacitor to discharge"
sleep 20
echo "It is now safe to disconnect the cable between the amplifier board and the readout board"
echo "Script finished"

View File

@ -532,6 +532,157 @@ cout << " G0->G1->G2 sequence - dynamicG0" <<endl;
scan_v6.push_back("501"); //jfcalib-4
scan_v6.push_back("502"); //jfcalib-5
scan_v6.push_back("036"); //jfcalib-0
scan_v6.push_back("560"); //jfcalib-1
scan_v6.push_back("536"); //jfcalib-2
scan_v6.push_back("535"); //jfcalib-3
scan_v6.push_back("527"); //jfcalib-4
scan_v6.push_back("522"); //jfcalib-5
scan_v6.push_back("037"); //jfcalib-1
scan_v6.push_back("571"); //jfcalib-0
scan_v6.push_back("571_fullspeed"); //jfcalib-0
scan_v6.push_back("573"); //jfcalib-1
scan_v6.push_back("573_fullspeed"); //jfcalib-1
scan_v6.push_back("574"); //jfcalib-2
scan_v6.push_back("574_fullspeed"); //jfcalib-2
scan_v6.push_back("575"); //jfcalib-3
scan_v6.push_back("575_fullspeed"); //jfcalib-3
scan_v6.push_back("576"); //jfcalib-4
scan_v6.push_back("576_fullspeed"); //jfcalib-4
scan_v6.push_back("577"); //jfcalib-5
scan_v6.push_back("577_fullspeed"); //jfcalib-5
scan_v6.push_back("579"); //bchip596 150um sensors
scan_v6.push_back("579_fullspeed"); //bchip596 150um sensors
scan_v6.push_back("431_JF12"); // JF12 chip Vadym
scan_v6.push_back("563"); //jfcalib-0
scan_v6.push_back("563_fullspeed"); //jfcalib-0
scan_v6.push_back("564"); //jfcalib-1
scan_v6.push_back("564_fullspeed"); //jfcalib-1
scan_v6.push_back("566"); //jfcalib-2
scan_v6.push_back("566_fullspeed"); //jfcalib-2
scan_v6.push_back("567"); //jfcalib-3
scan_v6.push_back("567_fullspeed"); //jfcalib-3
scan_v6.push_back("568"); //jfcalib-4
scan_v6.push_back("568_fullspeed"); //jfcalib-4
scan_v6.push_back("569"); //jfcalib-5
scan_v6.push_back("569_fullspeed"); //jfcalib-5
scan_v6.push_back("454_fullspeed"); //jfcalib-0
scan_v6.push_back("466_fullspeed"); //jfcalib-1
scan_v6.push_back("536_fullspeed"); //jfcalib-2
scan_v6.push_back("561"); //jfcalib-3
scan_v6.push_back("561_fullspeed"); //jfcalib-3
scan_v6.push_back("562"); //jfcalib-4
scan_v6.push_back("562_fullspeed"); //jfcalib-4
scan_v6.push_back("038"); //jfcalib-5
scan_v6.push_back("038_fullspeed"); //jfcalib-5
scan_v6.push_back("428_fullspeed"); //jfcalib-0
scan_v6.push_back("443_fullspeed"); //jfcalib-1
scan_v6.push_back("444_fullspeed"); //jfcalib-2
scan_v6.push_back("455_fullspeed"); //jfcalib-3
scan_v6.push_back("471_fullspeed"); //jfcalib-4
scan_v6.push_back("493_fullspeed"); //jfcalib-5
scan_v6.push_back("448_fullspeed"); //jfcalib-0
scan_v6.push_back("497_fullspeed"); //jfcalib-1
scan_v6.push_back("498_fullspeed"); //jfcalib-2
scan_v6.push_back("501_fullspeed"); //jfcalib-3
scan_v6.push_back("502_fullspeed"); //jfcalib-4
scan_v6.push_back("527_fullspeed"); //jfcalib-5
scan_v6.push_back("481_fullspeed"); //jfcalib-0
scan_v6.push_back("488_fullspeed"); //jfcalib-1
scan_v6.push_back("490_fullspeed"); //jfcalib-2
scan_v6.push_back("491_fullspeed"); //jfcalib-3
scan_v6.push_back("492_fullspeed"); //jfcalib-4
scan_v6.push_back("560_fullspeed"); //jfcalib-5
scan_v6.push_back("036_fullspeed"); //jfcalib-0
scan_v6.push_back("441_fullspeed"); //jfcalib-1
scan_v6.push_back("535_fullspeed"); //jfcalib-2
scan_v6.push_back("454_fullspeed"); //jfcalib-3
scan_v6.push_back("466_fullspeed"); //jfcalib-4
scan_v6.push_back("536_fullspeed"); //jfcalib-5
scan_v6.push_back("580_fullspeed"); //jfcalib-4
scan_v6.push_back("580"); //jfcalib-5
scan_v6.push_back("596"); //jfcalib-0
scan_v6.push_back("596_fullspeed"); //jfcalib-0
scan_v6.push_back("597"); //jfcalib-1
scan_v6.push_back("597_fullspeed"); //jfcalib-1
scan_v6.push_back("598"); //jfcalib-2
scan_v6.push_back("598_fullspeed"); //jfcalib-2
scan_v6.push_back("599"); //jfcalib-3
scan_v6.push_back("599_fullspeed"); //jfcalib-3
scan_v6.push_back("602"); //jfcalib-4
scan_v6.push_back("602_fullspeed"); //jfcalib-4
scan_v6.push_back("603"); //jfcalib-5
scan_v6.push_back("603_fullspeed"); //jfcalib-5
scan_v6.push_back("578"); //jfcalib-0
scan_v6.push_back("578_fullspeed"); //jfcalib-0
scan_v6.push_back("588"); //jfcalib-2
scan_v6.push_back("588_fullspeed"); //jfcalib-2
scan_v6.push_back("592"); //jfcalib-3
scan_v6.push_back("592_fullspeed"); //jfcalib-3
scan_v6.push_back("590"); //jfcalib-4
scan_v6.push_back("590_fullspeed"); //jfcalib-4
scan_v6.push_back("591"); //jfcalib-5
scan_v6.push_back("591_fullspeed"); //jfcalib-5
scan_v6.push_back("594"); //jfcalib-0
scan_v6.push_back("594_fullspeed"); //jfcalib-0
scan_v6.push_back("595"); //jfcalib-1
scan_v6.push_back("595_fullspeed"); //jfcalib-1
scan_v6.push_back("606"); //jfcalib-3
scan_v6.push_back("606_fullspeed"); //jfcalib-3
scan_v6.push_back("608"); //jfcalib-4
scan_v6.push_back("608_fullspeed"); //jfcalib-4
scan_v6.push_back("589"); //jfcalib-5
scan_v6.push_back("589_fullspeed"); //jfcalib-5
scan_v6.push_back("586"); //jfcalib-0
scan_v6.push_back("586_fullspeed"); //jfcalib-0
scan_v6.push_back("607"); //jfcalib-1
scan_v6.push_back("607_fullspeed"); //jfcalib-1
scan_v6.push_back("609"); //jfcalib-2
scan_v6.push_back("609_fullspeed"); //jfcalib-2
scan_v6.push_back("625"); //jfcalib-3
scan_v6.push_back("625_fullspeed"); //jfcalib-3
scan_v6.push_back("626"); //jfcalib-4
scan_v6.push_back("626_fullspeed"); //jfcalib-4
scan_v6.push_back("607"); //jfcalib-1
scan_v6.push_back("607_fullspeed"); //jfcalib-1
scan_v6.push_back("609"); //jfcalib-2
scan_v6.push_back("609_fullspeed"); //jfcalib-2
scan_v6.push_back("367"); //jfcalib-4
scan_v6.push_back("367_fullspeed"); //jfcalib-4
scan_v6.push_back("604"); //jfcalib-5
scan_v6.push_back("604_fullspeed"); //jfcalib-5
scan_v6.push_back("628"); //jfcalib-0
scan_v6.push_back("628_fullspeed"); //jfcalib-0
scan_v6.push_back("627"); //jfcalib-1
scan_v6.push_back("627_fullspeed"); //jfcalib-1
scan_v6.push_back("629"); //jfcalib-5
scan_v6.push_back("629_fullspeed"); //jfcalib-5
scan_v6.push_back("642"); //jfcalib-3
scan_v6.push_back("642_fullspeed"); //jfcalib-3
scan_v6.push_back("604"); //jfcalib-4
scan_v6.push_back("604_fullspeed"); //jfcalib-4
scan_v6.push_back("701_Vadym");
jungfrauFile *thisfile = new jungfrauFile();
jungfrauPixelMask *pixelMaskObject = new jungfrauPixelMask();
@ -1381,14 +1532,17 @@ cout << " G0->G1->G2 sequence - dynamicG0" <<endl;
}
}
// define fit ranges and fit
if (r0_adc.size() > 1) {
rangemin_g0 = *min_element(r0_filter.begin(),r0_filter.end());
rangemin_g0 = checkRangeMinForRCEffect(rangemin_g0);
rangemax_g0 = highestPointBeforeSwitching(r0_filter, r1_filter);
if (rangemax_g0 > rangemin_g0) {
fit_g0 = new TF1("fit_g0","[0]+[1]*x",rangemin_g0, rangemax_g0);
@ -1399,6 +1553,8 @@ cout << " G0->G1->G2 sequence - dynamicG0" <<endl;
fit_g0->SetParName(1,"G0 grad");
grap_g0->Fit(fit_g0,"QR+","");
g0hist->Fill(fit_g0->GetParameter(1));
g0map->Fill(i%NC,i/NC,fit_g0->GetParameter(1));
g0erhist->Fill(fit_g0->GetParError(1));
@ -1426,7 +1582,7 @@ cout << " G0->G1->G2 sequence - dynamicG0" <<endl;
} else if (i == (255*1024)+255) {
pixel_type = "q";
}
grap_g0->SetMinimum(0);
grap_g0->SetMaximum(16000);
grap_g0->GetXaxis()->SetTitle("Integration time [#mus]");
@ -1435,31 +1591,34 @@ cout << " G0->G1->G2 sequence - dynamicG0" <<endl;
grap_g0->GetXaxis()->SetLimits(*min_element(r0_filter.begin(),r0_filter.end()),*max_element(r0_filter.begin(),r0_filter.end()));
grap_g0->Draw("AP");
fit_g0->Draw("same");
mapcanvas->Update();
TPaveStats *st0 = (TPaveStats*)grap_g0->FindObject("stats");
mapcanvas->Update();
if (grap_g0->FindObject("stats")) {TPaveStats *st0 = (TPaveStats*)grap_g0->FindObject("stats");
cout<<"here8"<<endl;
st0->SetX1NDC(0.2);
st0->SetX2NDC(0.54);
st0->SetY1NDC(0.71);
st0->SetY2NDC(0.90);
st0->SetBorderSize(0);
st0->SetTextColor(kBlue);
}
mapcanvas->SetLogx();
sprintf(savename,"plots/M%s/%s/pixel_%s_%d_g0_M%s.png", module_str.c_str(),plotfolder_str.c_str(), pixel_type.c_str(), i, module_str.c_str());
mapcanvas->SaveAs((const char *)(savename));
mapcanvas->SetLogx(0);
vector<double> r0_adc_norm;
for (size_t j = 0; j < r0_adc.size(); j++) {
r0_adc_norm.push_back(r0_adc[j] - fit_g0->Eval(r0_filter[j]));
}
cout<<"here85"<<endl;
TGraphErrors *norm_g0 = new TGraphErrors(r0_adc.size(),&(r0_filter[0]),&(r0_adc_norm[0]),&(r0_ferr[0]),&(r0_adcerr[0]));
norm_g0->SetMarkerColor(kBlue);
norm_g0->SetLineColor(kBlue);
TF1* flat_g0 = new TF1("flat_g0","0",rangemin_g0, rangemax_g0);
flat_g0->SetLineColor(kBlue);
norm_g0->GetXaxis()->SetTitle("Integration time [#mus]");
norm_g0->GetYaxis()->SetTitle("Normalised ADC [ADU]");
norm_g0->GetYaxis()->SetTitleOffset(0.9);
@ -1493,6 +1652,8 @@ cout << " G0->G1->G2 sequence - dynamicG0" <<endl;
fit_g1->SetParName(0,"G1 const");
fit_g1->SetParName(1,"G1 grad");
grap_g1->Fit(fit_g1,"QR","");
g1hist->Fill(fit_g1->GetParameter(1));
g1map->Fill(i%NC,i/NC,fit_g1->GetParameter(1));
@ -1613,7 +1774,7 @@ cout << " G0->G1->G2 sequence - dynamicG0" <<endl;
fit_g2->SetParName(0,"G2 const");
fit_g2->SetParName(1,"G2 grad");
grap_g2->Fit(fit_g2,"QR+","");
g2hist->Fill(fit_g2->GetParameter(1));
g2map->Fill(i%NC,i/NC,fit_g2->GetParameter(1));
g2erhist->Fill(fit_g2->GetParError(1));
@ -1717,6 +1878,8 @@ cout << " G0->G1->G2 sequence - dynamicG0" <<endl;
}
}
// get ratio measurements
if (rangemax_g0 > rangemin_g0 && rangemax_g1 > rangemin_g1) {

2202
CS_analysis_M431.cpp Normal file

File diff suppressed because it is too large Load Diff

2171
CS_analysis_M439.cpp Normal file

File diff suppressed because it is too large Load Diff

1215
CS_fit.cpp Normal file

File diff suppressed because it is too large Load Diff

View File

@ -23,7 +23,7 @@ sls_detector_put powerchip 1
sls_detector_put frames 640
sls_detector_put period 0.005
sls_detector_put exptime 0.000010
sls_detector_put highvoltage 200
sls_detector_put highvoltage 200 #200
# configure for receiver on pc-jungfrau-01/pc-jungfrau-02/pc-jungfrau-test
# source pccalib.sh [pc] (pc-jungfrau-01/pc-jungfrau-02/pc-jungfrau-test)

View File

@ -39,7 +39,7 @@ sls_detector_put udp_dstmac $DSTMAC #3C:FD:FE:A2:14:D8
sls_detector_put udp_srcip $SRCIP #10.1.4.9
sls_detector_put udp_srcmac 00:ab:be:cc:dd:e2
sls_detector_put readoutspeed 1
sls_detector_put readoutspeed 1
sls_detector_put start # this puts the chip in a known state.
sls_detector_put stop
@ -68,8 +68,6 @@ sls_detector_put reg 0x7f 0xff1f
sls_detector_put gainmode dynamic
if [ "$1" == 'HG0' ]; then
$TKCSHG0 &
else
@ -102,11 +100,14 @@ sls_detector_put gainmode dynamic
# bit 16 high bit 17 low = automatic cal col sweep
# bit 16 high bit 17 high = cal col selected with bits 26-20
sls_detector_put currentsource 1 nofix 0x8000000000000000 normal #low
#sls_detector_put currentsource 1 nofix 0x8000000000000000 normal # this pattern was inverted, inject signals in cols 0, 63 ... 1 or 63, 0 ... 62
sls_detector_put currentsource 1 nofix 0x0000000000000001 normal #normal #low #correct pattern for JF11 and JF12
#sls_detector_put currentsource 1 nofix 0x800000ffff000003 normal # workaround, seems like too much current fir single column in JF12, also inject current to left/right columns
#sls_detector_put currentsource 1 nofix 0xffffffffffffffff normal
sleep 1
#sls_detector_get reg 0x1D

347
CS_scan_both_speeds.sh Normal file
View File

@ -0,0 +1,347 @@
#!/bin/bash
# to run do: bash CS_scan.sh
# prerequisites:
# - setup_env.sh souced
# - the hostname is set
# - detector is on
# - fileneame script has been sourced
# - source pccalib.sh [pc] (pc-jungfrau-01/pc-jungfrau-02/pc-jungfrau-test)
# last file should have exactly 4194368000 byte in it.
KILLRCV="killall ju_udp_receiver_3threads_2_0"
$KILLRCV
if [[ "$0" == *"CS_scan_both_speeds.sh"* ]]; then
echo "script changes env. variables: should be invoked with source, not sh "
exit
fi
if [ ! -v $1 ]; then
echo $0
echo "printing filenames for module " $1
source filename_creator.sh $1 N
sls_detector_put stop #just in case
sls_detector_put powerchip 1
sls_detector_put frames 640
sls_detector_put period 0.005
sls_detector_put exptime 0.000010
sls_detector_put highvoltage 200
# configure for receiver on pc-jungfrau-01/pc-jungfrau-02/pc-jungfrau-test
# source pccalib.sh [pc] (pc-jungfrau-01/pc-jungfrau-02/pc-jungfrau-test)
sls_detector_put udp_dstport 32410
sls_detector_put udp_dstip $DSTIP #10.1.4.105
sls_detector_put udp_dstmac $DSTMAC #3C:FD:FE:A2:14:D8
sls_detector_put udp_srcip $SRCIP #10.1.4.9
sls_detector_put udp_srcmac 00:ab:be:cc:dd:e2
sls_detector_put readoutspeed half_speed
#sls_detector_put readoutspeed full_speed
#sls_detector_put dbitphase 125
sleep 3
sls_detector_put frames 10000
sls_detector_put start
sleep 70
sls_detector_put stop
sls_detector_put frames 640
$TKCSG0 &
sleep 3
echo "recording G0 pede"
sls_detector_put start
sleep 4
echo "recording G1 pede"
sls_detector_put gainmode forceswitchg1
sls_detector_put start
sleep 4
echo "recording G2 pede"
sls_detector_put gainmode forceswitchg2
sls_detector_put start
sleep 4
sls_detector_put gainmode dynamic
# turn on current source
# bit 16 high bit 17 low = automatic cal col sweep
# bit 16 high bit 17 high = cal col selected with bits 26-20
sls_detector_put currentsource 1 nofix 0
sleep 1
# loop 1
for tint in {50..450..50} # 25 is too small here, 50 min
do
tint_sec=$(printf %.9f $(echo "$tint/1000000000" | bc -l))
echo "setting integration time to (s) " $tint_sec
sls_detector_put exptime $tint_sec
sls_detector_put start
sleep 4
done
# loop 2a
for tint in {50..100..5}
do
tint_sec=$(printf %.8f $(echo "$tint/100000000" | bc -l))
echo "setting integration time to (s) " $tint_sec
sls_detector_put exptime $tint_sec
sls_detector_put start
sleep 4
done
# loop 2b
for tint in {110..200..10}
do
tint_sec=$(printf %.8f $(echo "$tint/100000000" | bc -l))
echo "setting integration time to (s) " $tint_sec
sls_detector_put exptime $tint_sec
sls_detector_put start
sleep 4
done
# loop 2c
for tint in {225..450..25}
do
tint_sec=$(printf %.8f $(echo "$tint/100000000" | bc -l))
echo "setting integration time to (s) " $tint_sec
sls_detector_put exptime $tint_sec
sls_detector_put start
sleep 4
done
# loop 3a
for tint in {50..100..5}
do
tint_sec=$(printf %.7f $(echo "$tint/10000000" | bc -l))
echo "setting integration time to (s) " $tint_sec
sls_detector_put exptime $tint_sec
sls_detector_put start
sleep 4
done
# loop 3b
for tint in {110..200..10}
do
tint_sec=$(printf %.7f $(echo "$tint/10000000" | bc -l))
echo "setting integration time to (s) " $tint_sec
sls_detector_put exptime $tint_sec
sls_detector_put start
sleep 4
done
# loop 3c
for tint in {225..450..25}
do
tint_sec=$(printf %.7f $(echo "$tint/10000000" | bc -l))
echo "setting integration time to (s) " $tint_sec
sls_detector_put exptime $tint_sec
sls_detector_put start
sleep 4
done
# loop 4a
for tint in {50..100..5}
do
tint_sec=$(printf %.7f $(echo "$tint/1000000" | bc -l))
echo "setting integration time to (s) " $tint_sec
sls_detector_put exptime $tint_sec
sls_detector_put start
sleep 4
done
# loop 4b
for tint in {110..250..10}
do
tint_sec=$(printf %.7f $(echo "$tint/1000000" | bc -l))
echo "setting integration time to (s) " $tint_sec
sls_detector_put exptime $tint_sec
sls_detector_put start
sleep 4
done
echo "Finished scan at halfspeed"
sls_detector_put exptime 0.000010
sleep 4
$KILLRCV
# source filename creator to save data in fullspeed folder
source filename_creator.sh $1"_fullspeed" N
sls_detector_put readoutspeed full_speed
sleep 2
sls_detector_put currentsource 0
sleep 2
$TKCSG0 &
sleep 3
echo "recording G0 pede"
sls_detector_put start
sleep 4
echo "recording G1 pede"
sls_detector_put gainmode forceswitchg1
sls_detector_put start
sleep 4
echo "recording G2 pede"
sls_detector_put gainmode forceswitchg2
sls_detector_put start
sleep 4
sls_detector_put gainmode dynamic
# turn on current source
# bit 16 high bit 17 low = automatic cal col sweep
# bit 16 high bit 17 high = cal col selected with bits 26-20
sls_detector_put currentsource 1 nofix 0
sleep 1
# loop 1
for tint in {50..450..50} # 25 is too small here, 50 min
do
tint_sec=$(printf %.9f $(echo "$tint/1000000000" | bc -l))
echo "setting integration time to (s) " $tint_sec
sls_detector_put exptime $tint_sec
sls_detector_put start
sleep 4
done
# loop 2a
for tint in {50..100..5}
do
tint_sec=$(printf %.8f $(echo "$tint/100000000" | bc -l))
echo "setting integration time to (s) " $tint_sec
sls_detector_put exptime $tint_sec
sls_detector_put start
sleep 4
done
# loop 2b
for tint in {110..200..10}
do
tint_sec=$(printf %.8f $(echo "$tint/100000000" | bc -l))
echo "setting integration time to (s) " $tint_sec
sls_detector_put exptime $tint_sec
sls_detector_put start
sleep 4
done
# loop 2c
for tint in {225..450..25}
do
tint_sec=$(printf %.8f $(echo "$tint/100000000" | bc -l))
echo "setting integration time to (s) " $tint_sec
sls_detector_put exptime $tint_sec
sls_detector_put start
sleep 4
done
# loop 3a
for tint in {50..100..5}
do
tint_sec=$(printf %.7f $(echo "$tint/10000000" | bc -l))
echo "setting integration time to (s) " $tint_sec
sls_detector_put exptime $tint_sec
sls_detector_put start
sleep 4
done
# loop 3b
for tint in {110..200..10}
do
tint_sec=$(printf %.7f $(echo "$tint/10000000" | bc -l))
echo "setting integration time to (s) " $tint_sec
sls_detector_put exptime $tint_sec
sls_detector_put start
sleep 4
done
# loop 3c
for tint in {225..450..25}
do
tint_sec=$(printf %.7f $(echo "$tint/10000000" | bc -l))
echo "setting integration time to (s) " $tint_sec
sls_detector_put exptime $tint_sec
sls_detector_put start
sleep 4
done
# loop 4a
for tint in {50..100..5}
do
tint_sec=$(printf %.7f $(echo "$tint/1000000" | bc -l))
echo "setting integration time to (s) " $tint_sec
sls_detector_put exptime $tint_sec
sls_detector_put start
sleep 4
done
# loop 4b
for tint in {110..250..10}
do
tint_sec=$(printf %.7f $(echo "$tint/1000000" | bc -l))
echo "setting integration time to (s) " $tint_sec
sls_detector_put exptime $tint_sec
sls_detector_put start
sleep 4
done
echo "Finished scan at fullspeed"
sls_detector_put exptime 0.000010
sls_detector_put period 0.002
sls_detector_put frames 1000000
sls_detector_put currentsource 0
sls_detector_put highvoltage 0
echo "Script finished"
sleep 4
$KILLRCV
else
echo "Specify module number as a first argument"
echo "Script finished"
fi

View File

@ -0,0 +1,238 @@
#!/bin/bash
# to run do: bash CuFluo_exposure.sh
# prerequisites:
# - the hostname is set
# - export PATH=/afs/psi.ch/project/sls_det_software/latest_slsDetectorPackage/build/bin:$PATH
# - export LD_LIBRARY_PATH=/afs/psi.ch/project/sls_det_software/latest_slsDetectorPackage/build/bin:$LD_LIBRARY_PATH
# - detector is on
# - source filename_creator.sh #
# - source pccalib.sh [pc] (mpc2012/pc-jungfrau-test)
# - xray tube is on and ramped for 40 kV, 60 mA, set to Cu
if [[ "$0" == *"CuFluo_exposure_both_speeds.sh"* ]]; then
echo "script changes env. variables: should be invoked with source, not sh "
exit
fi
if [ ! -v $1 ]; then
echo $0
echo "printing filenames for module " $1
source filename_creator.sh $1 N
shutter=1
sls_detector_put stop #just in case
sls_detector_put powerchip 1
sls_detector_put period 0.002
sls_detector_put exptime 0.000010
sls_detector_put highvoltage 200
# configure for receiver on mpc2012/pc-jungfrau-test/mpc2198/mpc3282
# source pccalib.sh [pc] (mpc2012/pc-jungfrau-test/mpc2198/mpc3282)
sls_detector_put udp_dstport 32410
sls_detector_put udp_dstip $DSTIP #10.1.4.105
sls_detector_put udp_dstmac $DSTMAC #3C:FD:FE:A2:14:D8
sls_detector_put udp_srcip $SRCIP #10.1.4.9
sls_detector_put udp_srcmac 00:ab:be:cc:dd:e2
sls_detector_put readoutspeed half_speed #half_speed
#sls_detector_put reg 0x59 0x1310 #0001 0011 0001 0000
#sls_detector_put readoutspeed 0
#sls_detector_put reg 0x59 0x0100 #0000 0001 0000 0000
KILLRCV="killall ju_udp_receiver_3threads_2_0"
$KILLRCV
#CLI=/afs/psi.ch/project/sls_det_software/bin/sl7_binaries_to_be_removed_soon/xrayClient_sl7 #/vacuumClient_sl7
CLI=/afs/psi.ch/project/sls_det_software/bin/xrayClient_sl8 #/vacuumClient_sl7
$CLI setv 40
$CLI setc 60
$CLI HV on
sls_detector_put clearbit 0x5d 0
#sls_detector_put vref_prech 1000
#sls_detector_put vref_ds 1100
$CLI shutter $shutter off #$CLI shutter 1 off
echo "warmin up the board"
sls_detector_put frames 40000
sls_detector_put start
sleep 81
sls_detector_put stop
echo "end of board warm up"
sls_detector_put frames 1000
$KILLRCV
sleep 1
$TKPG0 &
sleep 5
echo "recording G0 pede"
sls_detector_put start
sleep 3
# 1000 frames at 500 frames per second takes 2s
echo "recording G1 pede"
sls_detector_put gainmode forceswitchg1
sls_detector_put start
sleep 3
echo "recording G2 pede"
sls_detector_put gainmode forceswitchg2
sls_detector_put start
sleep 3
sls_detector_put gainmode dynamic
$KILLRCV
echo "closed G0 pede file and open the G0 CuFluo file"
sleep 1
$TKFG0 &
sleep 5
sls_detector_put frames 230000
$CLI shutter $shutter on #$CLI shutter 1 on
sleep 1
sls_detector_put start
sleep 470
# 200k frames at 500 frames per second takes 400s
$CLI shutter $shutter off #$CLI shutter 1 off
$KILLRCV
echo "closed G0 CuFluo file and open HG0 pede file"
sleep 1
$TKPHG0 &
sleep 3
sls_detector_put settings highgain0
#sls_detector_put vref_prech 1000
#sls_detector_put vref_ds 1100
sls_detector_put frames 1000
echo "recording HG0 pede"
sls_detector_put start
sleep 3
# 1000 frames at 500 frames per second takes 2s
$KILLRCV
echo "closed HG0 pede file and open the HG0 CuFluo file"
sleep 1
$TKFHG0 &
sleep 5
sls_detector_put frames 230000
$CLI shutter $shutter on #$CLI shutter 1 on
sleep 1
sls_detector_put start
sleep 470
echo "finish exposure at half speed"
# 200k frames at 500 frames per second takes 400s
$CLI shutter $shutter off #$CLI shutter 1 off
sleep 2
echo "close shutter"
$KILLRCV
sleep 1
# source filename creator to save data in fullspeed folder
source filename_creator.sh $1"_fullspeed" N
# set detector for full speed
sls_detector_put readoutspeed full_speed
sleep 1
sls_detector_put clearbit 0x5d 0
#sls_detector_put vref_prech 1000
#sls_detector_put vref_ds 1100
sls_detector_put frames 1000
$TKPG0 &
sleep 5
echo "recording G0 pede"
sls_detector_put start
sleep 3
# 1000 frames at 500 frames per second takes 2s
echo "recording G1 pede"
sls_detector_put gainmode forceswitchg1
sls_detector_put start
sleep 3
echo "recording G2 pede"
sls_detector_put gainmode forceswitchg2
sls_detector_put start
sleep 3
sls_detector_put gainmode dynamic
$KILLRCV
echo "closed G0 pede file and open the G0 CuFluo file"
sleep 1
$TKFG0 &
sleep 5
sls_detector_put frames 230000
$CLI shutter $shutter on #$CLI shutter 1 on
sleep 1
sls_detector_put start
sleep 470
# 200k frames at 500 frames per second takes 400s
$CLI shutter $shutter off #$CLI shutter 1 off
$KILLRCV
echo "closed G0 CuFluo file and open HG0 pede file"
sleep 1
$TKPHG0 &
sleep 5
sls_detector_put settings highgain0
#sls_detector_put vref_prech 1000
#sls_detector_put vref_ds 1100
sls_detector_put frames 1000
echo "recording HG0 pede"
sls_detector_put start
sleep 3
# 1000 frames at 500 frames per second takes 2s
$KILLRCV
echo "closed HG0 pede file and open the HG0 CuFluo file"
sleep 1
$TKFHG0 &
sleep 5
sls_detector_put frames 230000
$CLI shutter $shutter on #$CLI shutter 1 on
sleep 1
sls_detector_put start
sleep 470
# 200k frames at 500 frames per second takes 400s
$CLI shutter $shutter off #$CLI shutter 1 off
sleep 2
$KILLRCV
sls_detector_put highvoltage 0
sls_detector_put clearbit 0x5d 0
echo "Script finished"
else
echo "Specify module number as a first argument"
echo "Script finished"
fi

322
CuFluo_fit.cpp Normal file
View File

@ -0,0 +1,322 @@
// to analyse the backplane pulsing data per module
// changes by VH 210906: to eliminate hardcoded absolute paths, uses location of the analysis root files as additional input argument (accordingly changed in filename_creator.sh)
#include "TApplication.h"
#include "sls_detector_calibration/jungfrauCommonHeader.h"
#include "sls_detector_calibration/jungfrauCommonFunctions.h"
#include "sls_detector_calibration/jungfrauFile.C"
#include "sls_detector_calibration/jungfrauPixelMask.C"
#include "sls_detector_calibration/jungfrauPedestal.C"
#include "sls_detector_calibration/energyCalibration.h"
#include "sls_detector_calibration/energyCalibration.cpp"
#include "TGraph.h"
#include "TGraphErrors.h"
#include "TF1.h"
#include "TFile.h"
#include "TPaveStats.h"
#include "TLegend.h"
#include "TPaveText.h"
#include <sys/stat.h>
//#include <sstream>
//#define NB_ENABLE 1
//void nonblock(int state);
//#define NB_DISABLE 0
//TApplication* rootapp;
//TCanvas *A2;
//TCanvas *A3;
//TCanvas *A4;
//TCanvas *A5;
//TCanvas *A6;
//TPaveStats *st0;
//void PlotCanvas(void);
double checkRangeMaxForAmplifierPlateau(double range_max) {
// check that the range maximum is no more than 6.4 V
// to avoid non-linearity coming from amplifier plateau
if (range_max > 6400) {
return 6400;
} else {
return range_max;
}
}
bool isHGX=false;
int main(int argc, char* argv[]) {
//nonblock(NB_ENABLE);
cout <<"opening the rootapp" <<endl;
TApplication rootapp("example",&argc, argv);
jungfrauStyle();
//gROOT->SetBatch(1);
gStyle->SetOptFit(11);
/*
if (argc != 3) {
cout << "Correct usage:" << endl;
cout << "arg 1: specify module number" << endl;
cout << "arg 2: specify data location" << endl;
cout << "arg 3: specify column (x)" << endl;
cout << "arg 4: specify row (y)" << endl;
exit(1);
}
*/ //uncomment for SR
if (argc != 5) {
cout << "Correct usage:" << endl;
cout << "arg 1: specify module number" << endl;
cout << "arg 2: gain settings" << endl;
cout << "arg 3: specify pixel x position" << endl;
cout << "arg 4: specify pixel y position" << endl;
exit(1);
} //uncomment for VH 210906
string module_str = argv[1];
string gain_str = argv[2];
string str2 =("HG0G1G2");
string str3 =("HGOG1G2"); //filename creator had this bug
int column = atoi(argv[3]);
int row = atoi(argv[4]);
int pixel = column+row*1024;
char data_loc[256];
sprintf(data_loc,"/mnt/sls_det_storage/jungfrau_calib/jungfrau_ana_sophie/M%s_CalibAna/", module_str.c_str());
cout << data_loc << endl;
std::string folder_path(data_loc);
if (folder_path.find(str2) != string::npos) isHGX=true;
if (folder_path.find(str3) != string::npos) isHGX=true;
bool isJF11=false;
if (gain_str == "HG0JF11") {
gain_str = "HG0";
isJF11=true;
}
// cout << data_loc.find(str2)<<" " << string::npos << " " << str2 << " " << data_loc <<endl;
if (isHGX) {
cout << " HG0->HG1->HG2 sequence - dynamicHG0" <<endl;
// plotfolder_str="BackplanePulsing_HG0G1G2";
}
else {
cout << " G0->G1->G2 sequence - dynamicG0" <<endl;
// plotfolder_str="BackplanePulsing";
}
//char savename[128]; //uncomment for SR
//char filename[128]; //uncomment for SR
char filename[256]; //uncomment for VH 210902
int low_ADU_peak = 0;
int high_ADU_peak = 0;
if (gain_str == "HG0") {
low_ADU_peak = 700;
high_ADU_peak = 900;
if (isJF11) {
low_ADU_peak = 850;
high_ADU_peak = 1350;
}
} else if (gain_str == "G0") {
low_ADU_peak = 250;
high_ADU_peak = 400;
}
int low_bin_noise = 101;
int high_bin_noise = 301;
int low_bin_peak = 0;
int high_bin_peak = 0;
if (gain_str == "HG0") {
low_bin_peak = 701;
high_bin_peak = 1200;
if (isJF11) {
low_bin_peak = 801;
high_bin_peak = 1451;
}
} else if (gain_str == "G0") {
low_bin_peak = 301;
high_bin_peak = 651;
}
TCanvas *A2 = new TCanvas("A2","Plot histogram",150,10,800,400);
TCanvas *A3 = new TCanvas("A3","Plot noise",150,10,800,400);
A2->SetLeftMargin(0.1);
A2->SetRightMargin(0.13);
A2->SetTopMargin(0.08);
A2->SetBottomMargin(0.15);
A3->SetLeftMargin(0.1);
A3->SetRightMargin(0.13);
A3->SetTopMargin(0.08);
A3->SetBottomMargin(0.15);
//file name
sprintf(filename,"%sCuFluo_%s_file0to19.root",folder_path.c_str(), gain_str.c_str());
cout << "Loading file " << filename << endl;
TFile* f = new TFile((const char *)(filename),"READ");
int chip;
int CH = row*1024+column;
if (CH < (65536*1)) {
chip = 1;
} else if (CH < (65536*2)) {
chip = 2;
} else if (CH < (65536*3)) {
chip = 3;
} else if (CH < (65536*4)) {
chip = 4;
} else if (CH < (65536*5)) {
chip = 5;
} else if (CH < (65536*6)) {
chip = 6;
} else if (CH < (65536*7)) {
chip = 7;
} else if (CH < (65536*8)){
chip = 8;
}
cout<< "Chip "<< chip << " Channel number " << CH << endl;
TH2I* hist0=(TH2I*)f->Get(Form("adc2d_%d",chip));
cout << "Creating histogram for " << Form("adc2d_%d",chip) << endl;
TH1D* proj = hist0->ProjectionX("bin1",CH-(65536*(chip-1))+1,CH-(65536*(chip-1))+1);
cout << "Data for pixel "<< pixel << " is loaded" << endl;
if (proj->Integral(low_bin_noise,high_bin_noise)!=0 && proj->Integral(low_bin_peak,high_bin_peak)!=0) {
A2->cd();
cout << "Canvas Noise" << endl;
// noise
TH1D *proj_noise = dynamic_cast<TH1D*>(proj->Rebin(4,"proj_noise"));
proj_noise->SetStats(kTRUE);
proj_noise->GetXaxis()->SetRangeUser(proj->GetBinLowEdge(low_bin_noise),proj->GetBinLowEdge(high_bin_noise+1));
proj_noise->Fit("gaus","Q");
TF1 *fit = proj_noise->GetFunction("gaus");
proj_noise->Draw();
A2->Update();
proj_noise->GetXaxis()->SetTitle("Pedestal corrected ADC [ADU]");
proj_noise->GetXaxis()->SetRangeUser(-100,150);
fit->SetParNames("N_{#gamma}", "Peak pos", "Noise RMS");
TPaveStats *st0 = (TPaveStats*)proj_noise->FindObject("stats");
st0->SetX1NDC(0.53);
st0->SetX2NDC(0.94);
st0->SetY1NDC(0.75);
st0->SetY2NDC(0.94);
st0->SetBorderSize(0);
st0->SetTextSize(0.04);
A2->Modified();
A2->Update();
A3->cd();
// peak
TH1D *proj_peak = dynamic_cast<TH1D*>(proj->Rebin(4,"proj_peak"));
proj_peak->SetStats(kTRUE);
proj_peak->GetXaxis()->SetRangeUser(proj->GetBinLowEdge(low_bin_peak),proj->GetBinLowEdge(high_bin_peak+1));
Double_t mypar[8];
mypar[0] = 0.0;
mypar[1] = 0.0;
mypar[2] = proj_peak->GetBinCenter(proj_peak->GetMaximumBin());
if (gain_str == "G0") {
mypar[3] = 16.;
} else if (gain_str == "HG0") {
mypar[3] = 29.;
}
mypar[4] = proj_peak->GetBinContent(proj_peak->GetMaximumBin());
if (gain_str == "G0") {
mypar[5] = 0.17;
} else if (gain_str == "HG0") {
mypar[5] = 0.14;
}
mypar[6] = 1.12;
if (gain_str == "G0") {
mypar[7] = 0.12;
} else if (gain_str == "HG0") {
mypar[7] = 0.14;
}
Double_t emypar[8];
energyCalibration *thiscalibration = new energyCalibration();
thiscalibration->setScanSign(1);
thiscalibration->setStartParametersKb(mypar);
thiscalibration->fixParameter(0,0.); // no background
thiscalibration->fixParameter(1,0.);
TF1* fittedfun = thiscalibration->fitSpectrumKb(proj_peak,mypar,emypar);
TF1 *gaus_Ka = new TF1("gaus_Ka","gaus",proj->GetBinLowEdge(low_bin_peak),proj->GetBinLowEdge(high_bin_peak+1));
gaus_Ka->SetParameters(mypar[4],mypar[2],mypar[3]);
gaus_Ka->SetLineColor(kBlue);
TF1 *erfc_Ka = new TF1("erfc_Ka","[0]/2.*(TMath::Erfc(([1]*(x-[2])/[3])/(TMath::Sqrt(2.))))",proj->GetBinLowEdge(low_bin_peak),proj->GetBinLowEdge(high_bin_peak+1));
erfc_Ka->SetParameters(mypar[4]*mypar[5], 1, mypar[2], mypar[3]);
erfc_Ka->SetLineColor(kOrange);
TF1 *gaus_Kb = new TF1("gaus_Kb","gaus",proj->GetBinLowEdge(low_bin_peak),proj->GetBinLowEdge(high_bin_peak+1));
gaus_Kb->SetParameters(mypar[4]*mypar[7],mypar[6]*mypar[2],mypar[3]);
gaus_Kb->SetLineColor(kGreen+2);
TF1 *erfc_Kb = new TF1("erfc_Kb","[0]/2.*(TMath::Erfc(([1]*(x-[2])/[3])/(TMath::Sqrt(2.))))",proj->GetBinLowEdge(low_bin_peak),proj->GetBinLowEdge(high_bin_peak+1));
erfc_Kb->SetParameters(mypar[4]*mypar[7]*mypar[5], 1, mypar[6]*mypar[2], mypar[3]);
erfc_Kb->SetLineColor(kOrange+7);
proj_peak->Draw();
A3->Update();
erfc_Kb->Draw("same");
erfc_Ka->Draw("same");
gaus_Kb->Draw("same");
gaus_Ka->Draw("same");
fittedfun->Draw("same");
A3->Update();
proj_peak->GetXaxis()->SetTitle("Pedestal corrected ADC [ADU]");
fittedfun->SetParNames("Bkg height", "Bkg grad", "K_{#alpha} pos", "Noise RMS", "K_{#alpha} height", "CS", "K_{#beta}/K_{#alpha} pos", "K_{#beta} frac");
TPaveStats *st = (TPaveStats*)proj_peak->FindObject("stats");
st->SetX1NDC(0.15);
st->SetX2NDC(0.55);
st->SetY1NDC(0.7);
st->SetY2NDC(0.94);
st->SetBorderSize(0);
st->SetTextSize(0.04);
A3->Modified();
A3->Update();
} else {
std::cout << "Masked pixel";
}
rootapp.Run();
return 0;
}

239
Default_pixels_arrays.cpp Normal file
View File

@ -0,0 +1,239 @@
// file to create the hg0, g0, g1,and g2 bin files of default pixels for a list of modules past as an argument
// Each file contains the default pixels map for the list of modules past as an argument
// It save 4 files. One for each gain stage.
#include "../sls_detector_calibration/jungfrauCommonHeader.h"
#include "../sls_detector_calibration/jungfrauCommonFunctions.h"
#include <fstream>
#include <dirent.h>
#include "TCanvas.h"
#include "TFile.h"
#include "TH2F.h"
#include "TGraph.h"
#include "TF1.h"
int main(int argc, char* argv[]) {
jungfrauStyle();
if (argc == 1) {
cout << "Correct usage:" << endl;
cout << "arg 1: specify module number" << endl;
cout << "Number of arguments "<< argc << endl;
cout << " " << endl;
exit(1);
} else {
char savename[256];
char savename_hg0[256];
char savename_g0[256];
char savename_g1[256];
char savename_g2[256];
// today's date
time_t rawtime;
tm* timeinfo;
char date[80];
time(&rawtime);
timeinfo = localtime(&rawtime);
strftime(date,80,"%Y-%m-%d",timeinfo);
sprintf(savename_hg0,"/afs/psi.ch/user/c/carulla_m/JFProjects/defaultMaps_HG0_%s.bin", date);
fstream outfile_hg0;
outfile_hg0.open(savename_hg0, ios::binary | ios::out);
sprintf(savename_g0,"/afs/psi.ch/user/c/carulla_m/JFProjects/defaultMaps_G0_%s.bin", date);
fstream outfile_g0;
outfile_g0.open(savename_g0, ios::binary | ios::out);
sprintf(savename_g1,"/afs/psi.ch/user/c/carulla_m/JFProjects/defaultMaps_G1_%s.bin", date);
fstream outfile_g1;
outfile_g1.open(savename_g1, ios::binary | ios::out);
sprintf(savename_g2,"/afs/psi.ch/user/c/carulla_m/JFProjects/defaultMaps_G2_%s.bin", date);
fstream outfile_g2;
outfile_g2.open(savename_g2, ios::binary | ios::out);
for (int j=1; j<argc; j++) {
cout << j << endl;
string this_module = argv[j];
cout << "Processing module "<< this_module << endl;
std::vector<short> this_g0_default_pixels(NCH,0);
std::vector<short> this_g1_default_pixels(NCH,0);
std::vector<short> this_g2_default_pixels(NCH,0);
std::vector<short> this_hg0_default_pixels(NCH,0);
// // CuFluo HG0 dataset
sprintf(savename,"data/M%s/CuFluo_gain_HG0_M%s.root", this_module.c_str(), this_module.c_str());
TFile* FL_HG0_file = new TFile((char*)savename,"READ");
TH2F* FL_HG0_gain_map = 0;
if (FL_HG0_file->IsZombie()) {
cout << "didn't find HG0 file" << endl;
} else {
FL_HG0_gain_map = (TH2F*)FL_HG0_file->Get("gain_ADUper1keV_2d");
cout << "The HG0 map is loaded" << endl;
}
// CuFluo G0 dataset
sprintf(savename,"data/M%s/CuFluo_gain_G0_M%s.root", this_module.c_str(), this_module.c_str());
TFile* FL_G0_file = new TFile((char*)savename,"READ");
TH2F* FL_G0_gain_map = 0;
if (FL_G0_file->IsZombie()) {
cout << "didn't find G0 file" << endl;
} else {
FL_G0_gain_map = (TH2F*)FL_G0_file->Get("gain_ADUper1keV_2d");
}
// Backplane pulsing dataset
sprintf(savename,"data/M%s/BP_ratio_M%s.root", this_module.c_str(), this_module.c_str());
TFile* DB_file = new TFile((char*)savename,"READ");
TH2F* DB_ratio_map = 0;
if (DB_file->IsZombie()) {
cout << "didn't find BP file" << endl;
// look for a direct beam dataset
sprintf(savename,"data/M%s/DB_ratio_M%s.root", this_module.c_str(), this_module.c_str());
DB_file = new TFile((char*)savename,"READ");
if (DB_file->IsZombie()) {
cout << "also didn't find DB file" << endl;
} else {
cout << "loading G0/G1 from DB" << endl;
DB_ratio_map = (TH2F*)DB_file->Get("g0overg1map");
}
} else {
cout << "loading G0/G1 from BP" << endl;
DB_ratio_map = (TH2F*)DB_file->Get("g0overg1_map");
}
// Current source dataset
sprintf(savename,"data/M%s/CS_ratio_M%s.root", this_module.c_str(), this_module.c_str());
TFile* CS_file = new TFile((char*)savename,"READ");
TH2F* CS_ratio_map = 0;
if (CS_file->IsZombie()) {
cout << "didn't find CS file" << endl;
} else {
CS_ratio_map = (TH2F*)CS_file->Get("g1overg2map");
cout << "loading G1/G2 map" << endl;
}
for (int i=0; i<NCH; i++) {
double this_hg0 = 0;
double this_g0 = 0;
double this_g0overg1 = 0;
double this_g1 = 0;
double this_g1overg2 = 0;
double this_g2 = 0;
// HG0
if (FL_HG0_gain_map) {
this_hg0 = FL_HG0_gain_map->GetBinContent((i%NC)+1,(i/NC)+1);
//cout << "Gain value is " << this_hg0 << endl;
//this_hg0_default_pixels[i] = 0;
if (this_hg0 == 0) {
this_hg0_default_pixels[i] = 1;
} else if (this_hg0 < 80 || this_hg0 > 200) {
this_hg0_default_pixels[i] = 1;
}
} else {
this_hg0_default_pixels[i] = 1;
}
// G0
if (FL_G0_gain_map) {
this_g0 = FL_G0_gain_map->GetBinContent((i%NC)+1,(i/NC)+1);
this_g0_default_pixels[i] = 0;
if (this_g0 == 0) {
this_g0_default_pixels[i] = 1;
} else if (this_g0 < 30 || this_g0 > 56) {
this_g0_default_pixels[i] = 1;
}
} else {
this_g0_default_pixels[i] = 1;
}
// G1
if (DB_ratio_map) {
this_g0overg1 = DB_ratio_map->GetBinContent((i%NC)+1,(i/NC)+1);
this_g1 = this_g0 / this_g0overg1;
this_g1_default_pixels[i] = 0;
if (this_g0overg1 == 0) {
this_g1_default_pixels[i] = 1;
} else if (this_g0 != 0 && (this_g1 < -2.5 || this_g1 > -0.4)) {
this_g1_default_pixels[i] = 1;
}
} else {
this_g1_default_pixels[i] = 1;
}
// G2
if (CS_ratio_map) {
this_g1overg2 = CS_ratio_map->GetBinContent((i%NC)+1,(i/NC)+1);
this_g2 = this_g1 / this_g1overg2;
this_g2_default_pixels[i] = 0;
if (this_g1overg2 == 0) {
this_g2_default_pixels[i] = 1;
} else if (this_g0 != 0 && this_g1 != 0 && (this_g2 < -0.3 || this_g2 > -0.015)) {
this_g2_default_pixels[i] = 1;
}
} else {
this_g2_default_pixels[i] = 1;
}
if (this_module == "586") {
if ( (i/NC) > 0 && (i/NC)<256 && (i%NC)> 768 && (i%NC)<1024 ) {
this_g2_default_pixels[i]=1;
this_g1_default_pixels[i]=1;
}
}
if (this_module == "454") {
if ( (i/NC) > 0 && (i/NC)<256 && (i%NC)> 768 && (i%NC)<1024 ) {
this_g2_default_pixels[i]=1;
}
}
//hg0_default_pixels.push_back(this_hg0_default_pixels[i]);
outfile_hg0.write(reinterpret_cast<const char *>(&this_hg0_default_pixels[i]), sizeof(short));
// g0_default_pixels.push_back(this_g0_default_pixels[i]);
outfile_g0.write(reinterpret_cast<const char *>(&this_g0_default_pixels[i]), sizeof(short));
// g1_default_pixels.push_back(this_g1_default_pixels[i]);
outfile_g1.write(reinterpret_cast<const char *>(&this_g1_default_pixels[i]), sizeof(short));
// g2_default_pixels.push_back(this_g2_default_pixels[i]);
outfile_g2.write(reinterpret_cast<const char *>(&this_g2_default_pixels[i]), sizeof(short));
}
// //Modules_d.push_back(this_module);
// cout << "Module loop after push_back" << endl;
// cout << j << endl;
cout << "Pixels number " << this_hg0_default_pixels.size() << endl;
}
outfile_hg0.close();
outfile_g0.close();
outfile_g1.close();
outfile_g2.close();
cout << "Files closed" << endl;
// outfile_g0.close();
// outfile_g1.close();
// outfile_g2.close();
// cout<< "Number of words "<< sizeof(hg0_default_pixels)<< endl;
// cout<< "Size of HG0 map"<< hg0_default_pixels.size() * sizeof(int)<< endl;
}
}

View File

@ -6,11 +6,12 @@ if [[ "$0" == *"filename_creator.sh"* ]]; then
fi
echo "Run pccalib.sh [pc_name] to set the DST ip address before running the filename creator"
echo $0
echo "printing filenames for module " $1
#define folder structure
parentdir="/mnt/sls_det_storage/jungfrau_calib/"
calib_relativedir="data/Module_"$1"_Calib/"
@ -24,25 +25,35 @@ echo "Relative analysis results directory is "$ana_relativedir
echo "mkdir "$calibdatafolder "if not already existing."
mkdir -p $calibdatafolder
#Rcv="./slsDetector_bin_8_0_2_RHEL7/ju_udp_receiver_3threads_2_0 S " #mpc2012 RHEL7
Rcv="./slsDetector_bin/ju_udp_receiver_3threads_2_0 S " #pc-jungfrau-02 RHEL8
export TKBPG0="./slsDetector_bin/ju_udp_receiver_3threads_2_0 S "$calibdatafolder"BP_M"$1"_"$datestring"_ 10.1.1.106"
export TKBPG0=$Rcv$calibdatafolder"BP_M"$1"_"$datestring"_ "$DSTIP
#export TKBPG0="./slsDetector_bin/ju_udp_receiver_3threads_2_0 S "$calibdatafolder"BP_M"$1"_"$datestring"_ 10.1.1.106"
export TKBPHG0="./slsDetector_bin/ju_udp_receiver_3threads_2_0 S "$calibdatafolder"BP_M"$1"_"$datestring"_HGOG1G2_ 10.1.1.106"
export TKCSHG0="./slsDetector_bin/ju_udp_receiver_3threads_2_0 S "$calibdatafolder"CS_M"$1"_"$datestring"_HGOG1G2_ 10.1.1.106"
export TKCSG0="./slsDetector_bin/ju_udp_receiver_3threads_2_0 S "$calibdatafolder"CS_M"$1"_"$datestring"_ 10.1.1.106"
export TKBPHG0=$Rcv$calibdatafolder"BP_M"$1"_"$datestring"_HGOG1G2_ "$DSTIP
#export TKBPHG0="./slsDetector_bin/ju_udp_receiver_3threads_2_0 S "$calibdatafolder"BP_M"$1"_"$datestring"_HGOG1G2_ 10.1.1.106"
export TKCSHG0=$Rcv$calibdatafolder"CS_M"$1"_"$datestring"_HGOG1G2_ "$DSTIP
#export TKCSHG0="./slsDetector_bin/ju_udp_receiver_3threads_2_0 S "$calibdatafolder"CS_M"$1"_"$datestring"_HGOG1G2_ 10.1.1.106"
export TKCSG0=$Rcv$calibdatafolder"CS_M"$1"_"$datestring"_ $DSTIP"
#export TKCSG0="./slsDetector_bin/ju_udp_receiver_3threads_2_0 S "$calibdatafolder"CS_M"$1"_"$datestring"_ 10.1.1.106"
echo "exporting the fluorescence receiver commands "
export TKFG0="./slsDetector_bin/ju_udp_receiver_3threads_2_0 S "$calibdatafolder"CuFluoG0_M"$1"_"$datestring"_ 10.1.1.106"
export TKFHG0="./slsDetector_bin/ju_udp_receiver_3threads_2_0 S "$calibdatafolder"CuFluoHG0_M"$1"_"$datestring"_ 10.1.1.106"
export TKPG0="./slsDetector_bin/ju_udp_receiver_3threads_2_0 S "$calibdatafolder"pedeG0_M"$1"_"$datestring"_ 10.1.1.106"
export TKPHG0="./slsDetector_bin/ju_udp_receiver_3threads_2_0 S "$calibdatafolder"pedeHG0_M"$1"_"$datestring"_ 10.1.1.106"
export TKFG0=$Rcv$calibdatafolder"CuFluoG0_M"$1"_"$datestring"_ "$DSTIP
#export TKFG0="./slsDetector_bin/ju_udp_receiver_3threads_2_0 S "$calibdatafolder"CuFluoG0_M"$1"_"$datestring"_ 10.1.1.106"
export TKFHG0=$Rcv$calibdatafolder"CuFluoHG0_M"$1"_"$datestring"_ "$DSTIP
#export TKFHG0="./slsDetector_bin/ju_udp_receiver_3threads_2_0 S "$calibdatafolder"CuFluoHG0_M"$1"_"$datestring"_ 10.1.1.106"
export TKPG0=$Rcv$calibdatafolder"pedeG0_M"$1"_"$datestring"_ "$DSTIP
#export TKPG0="./slsDetector_bin/ju_udp_receiver_3threads_2_0 S "$calibdatafolder"pedeG0_M"$1"_"$datestring"_ 10.1.1.106"
export TKPHG0=$Rcv$calibdatafolder"pedeHG0_M"$1"_"$datestring"_ "$DSTIP
#export TKPHG0="./slsDetector_bin/ju_udp_receiver_3threads_2_0 S "$calibdatafolder"pedeHG0_M"$1"_"$datestring"_ 10.1.1.106"
echo "printing the analysis commands "
@ -98,7 +109,14 @@ echo "----------------------------------------------------------------------"
echo "creating the output folders? Y for yes "
read -n 1 -s input
if [ ! -v $2 ]; then
input=$2
echo $input
else
read -n 1 -s input
echo $input
fi
if [[ $input = "Y" ]]; then
echo "creating the output folders."
plotbasefolder="/afs/psi.ch/project/mythen/sophie/JFCalibration/plots/M"$1

View File

@ -24,9 +24,9 @@ if [[ $1 == "pc-jungfrau-test" ]]; then
echo "DSTIP" $DSTIP
echo "SRCIP" $SRCIP
elif [[ $1 == "mpc2012" ]]; then
elif [[ $1 == "mpc2012-1" ]]; then
export DSTMAC="3C:FD:FE:A2:14:DB"
export DSTMAC="e8:eb:d3:f3:39:ee"
export DSTIP="10.1.1.105"
export SRCIP="10.1.1.9"
@ -34,6 +34,16 @@ elif [[ $1 == "mpc2012" ]]; then
echo "DSTIP" $DSTIP
echo "SRCIP" $SRCIP
elif [[ $1 == "mpc2012-2" ]]; then
export DSTMAC="e8:eb:d3:f3:39:ef"
export DSTIP="10.1.2.105"
export SRCIP="10.1.2.9"
echo "DSTMAC" $DSTMAC
echo "DSTIP" $DSTIP
echo "SRCIP" $SRCIP
elif [[ $1 == "pc-jungfrau-02" ]]; then
export DSTMAC="08:c0:eb:9a:3b:02"

View File

@ -3233,4 +3233,313 @@ Module 502
./JFMC_CalibWriter_wBP 502
Module 036
./BP_analysis 036 /mnt/sls_det_storage/jungfrau_calib/data/Module_036_Calib/BP_M036_2024-12-09 /mnt/sls_det_storage/jungfrau_calib/ana/M036_CalibAna/
./CS_analysis 036 /mnt/sls_det_storage/jungfrau_calib/data/Module_036_Calib/ CS_M036_2024-12-09 /mnt/sls_det_storage/jungfrau_calib/ana/M036_CalibAna/
./CuFluo_analysis 036 G0 /mnt/sls_det_storage/jungfrau_calib/data/Module_036_Calib/ pedeG0_M036_2024-12-10 CuFluoG0_M036_2024-12-10 /mnt/sls_det_storage/jungfrau_calib/ana/M036_CalibAna/
./CuFluo_analysis 036 HG0 /mnt/sls_det_storage/jungfrau_calib/data/Module_036_Calib/ pedeHG0_M036_2024-12-10 CuFluoHG0_M036_2024-12-10 /mnt/sls_det_storage/jungfrau_calib/ana/M036_CalibAna/
./JFMC_CalibWriter_wBP 036
Module 560
./BP_analysis 560 /mnt/sls_det_storage/jungfrau_calib/data/Module_560_Calib/BP_M560_2024-12-09 /mnt/sls_det_storage/jungfrau_calib/ana/M560_CalibAna/
./CS_analysis 560 /mnt/sls_det_storage/jungfrau_calib/data/Module_560_Calib/ CS_M560_2024-12-09 /mnt/sls_det_storage/jungfrau_calib/ana/M560_CalibAna/
./CuFluo_analysis 560 G0 /mnt/sls_det_storage/jungfrau_calib/data/Module_560_Calib/ pedeG0_M560_2024-12-10 CuFluoG0_M560_2024-12-10 /mnt/sls_det_storage/jungfrau_calib/ana/M560_CalibAna/
./CuFluo_analysis 560 HG0 /mnt/sls_det_storage/jungfrau_calib/data/Module_560_Calib/ pedeHG0_M560_2024-12-10 CuFluoHG0_M560_2024-12-10 /mnt/sls_det_storage/jungfrau_calib/ana/M560_CalibAna/
./JFMC_CalibWriter_wBP 560
Module 536
./BP_analysis 536 /mnt/sls_det_storage/jungfrau_calib/data/Module_536_Calib/BP_M536_2024-12-09 /mnt/sls_det_storage/jungfrau_calib/ana/M536_CalibAna/
./CS_analysis 536 /mnt/sls_det_storage/jungfrau_calib/data/Module_536_Calib/ CS_M536_2024-12-09 /mnt/sls_det_storage/jungfrau_calib/ana/M536_CalibAna/
./CuFluo_analysis 536 G0 /mnt/sls_det_storage/jungfrau_calib/data/Module_536_Calib/ pedeG0_M536_2024-12-10 CuFluoG0_M536_2024-12-10 /mnt/sls_det_storage/jungfrau_calib/ana/M536_CalibAna/
./CuFluo_analysis 536 HG0 /mnt/sls_det_storage/jungfrau_calib/data/Module_536_Calib/ pedeHG0_M536_2024-12-10 CuFluoHG0_M536_2024-12-10 /mnt/sls_det_storage/jungfrau_calib/ana/M536_CalibAna/
./JFMC_CalibWriter_wBP 536
Module 535
./BP_analysis 535 /mnt/sls_det_storage/jungfrau_calib/data/Module_535_Calib/BP_M535_2024-12-09 /mnt/sls_det_storage/jungfrau_calib/ana/M535_CalibAna/
./CS_analysis 535 /mnt/sls_det_storage/jungfrau_calib/data/Module_535_Calib/ CS_M535_2024-12-09 /mnt/sls_det_storage/jungfrau_calib/ana/M535_CalibAna/
./CuFluo_analysis 535 G0 /mnt/sls_det_storage/jungfrau_calib/data/Module_535_Calib/ pedeG0_M535_2024-12-10 CuFluoG0_M535_2024-12-10 /mnt/sls_det_storage/jungfrau_calib/ana/M535_CalibAna/
./CuFluo_analysis 535 HG0 /mnt/sls_det_storage/jungfrau_calib/data/Module_535_Calib/ pedeHG0_M535_2024-12-10 CuFluoHG0_M535_2024-12-10 /mnt/sls_det_storage/jungfrau_calib/ana/M535_CalibAna/
./JFMC_CalibWriter_wBP 535
Module 527
./BP_analysis 527 /mnt/sls_det_storage/jungfrau_calib/data/Module_527_Calib/BP_M527_2024-12-09 /mnt/sls_det_storage/jungfrau_calib/ana/M527_CalibAna/
./CS_analysis 527 /mnt/sls_det_storage/jungfrau_calib/data/Module_527_Calib/ CS_M527_2024-12-09 /mnt/sls_det_storage/jungfrau_calib/ana/M527_CalibAna/
./CuFluo_analysis 527 G0 /mnt/sls_det_storage/jungfrau_calib/data/Module_527_Calib/ pedeG0_M527_2024-12-10 CuFluoG0_M527_2024-12-10 /mnt/sls_det_storage/jungfrau_calib/ana/M527_CalibAna/
./CuFluo_analysis 527 HG0 /mnt/sls_det_storage/jungfrau_calib/data/Module_527_Calib/ pedeHG0_M527_2024-12-10 CuFluoHG0_M527_2024-12-10 /mnt/sls_det_storage/jungfrau_calib/ana/M527_CalibAna/
./JFMC_CalibWriter_wBP 527
Module 522
./BP_analysis 522 /mnt/sls_det_storage/jungfrau_calib/data/Module_522_Calib/BP_M522_2024-12-09 /mnt/sls_det_storage/jungfrau_calib/ana/M522_CalibAna/
./CS_analysis 522 /mnt/sls_det_storage/jungfrau_calib/data/Module_522_Calib/ CS_M522_2024-12-09 /mnt/sls_det_storage/jungfrau_calib/ana/M522_CalibAna/
./CuFluo_analysis 522 G0 /mnt/sls_det_storage/jungfrau_calib/data/Module_522_Calib/ pedeG0_M522_2024-12-10 CuFluoG0_M522_2024-12-10 /mnt/sls_det_storage/jungfrau_calib/ana/M522_CalibAna/
./CuFluo_analysis 522 HG0 /mnt/sls_det_storage/jungfrau_calib/data/Module_522_Calib/ pedeHG0_M522_2024-12-10 CuFluoHG0_M522_2024-12-10 /mnt/sls_det_storage/jungfrau_calib/ana/M522_CalibAna/
./JFMC_CalibWriter_wBP 522
Module 571
./BP_analysis 571 /mnt/sls_det_storage/jungfrau_calib/data/Module_571_Calib/BP_M571_2025-01-24 /mnt/sls_det_storage/jungfrau_calib/ana/M571_CalibAna/
./CS_analysis 571 /mnt/sls_det_storage/jungfrau_calib/data/Module_571_Calib/ CS_M571_2025-01-24 /mnt/sls_det_storage/jungfrau_calib/ana/M571_CalibAna/
./CuFluo_analysis 571 G0 /mnt/sls_det_storage/jungfrau_calib/data/Module_571_Calib/ pedeG0_M571_2025-02-03 CuFluoG0_M571_2025-02-03 /mnt/sls_det_storage/jungfrau_calib/ana/M571_CalibAna/
./CuFluo_analysis 571 HG0 /mnt/sls_det_storage/jungfrau_calib/data/Module_571_Calib/ pedeHG0_M571_2025-02-03 CuFluoHG0_M571_2025-02-03 /mnt/sls_det_storage/jungfrau_calib/ana/M571_CalibAna/
./JFMC_CalibWriter_wBP 571
Module 571_fullspeed
./BP_analysis 571_fullspeed /mnt/sls_det_storage/jungfrau_calib/data/Module_571_fullspeed_Calib/BP_M571_fullspeed_2025-01-24 /mnt/sls_det_storage/jungfrau_calib/ana/M571_fullspeed_CalibAna/
./CS_analysis 571_fullspeed /mnt/sls_det_storage/jungfrau_calib/data/Module_571_fullspeed_Calib/ CS_M571_fullspeed_2025-01-24 /mnt/sls_det_storage/jungfrau_calib/ana/M571_fullspeed_CalibAna/
./CuFluo_analysis 571_fullspeed G0 /mnt/sls_det_storage/jungfrau_calib/data/Module_571_fullspeed_Calib/ pedeG0_M571_fullspeed_2025-02-03 CuFluoG0_M571_fullspeed_2025-02-03 /mnt/sls_det_storage/jungfrau_calib/ana/M571_fullspeed_CalibAna/
./CuFluo_analysis 571_fullspeed HG0 /mnt/sls_det_storage/jungfrau_calib/data/Module_571_fullspeed_Calib/ pedeHG0_M571_fullspeed_2025-02-03 CuFluoHG0_M571_fullspeed_2025-02-03 /mnt/sls_det_storage/jungfrau_calib/ana/M571_fullspeed_CalibAna/
./JFMC_CalibWriter_wBP 571_fullspeed
Module 573
./BP_analysis 573 /mnt/sls_det_storage/jungfrau_calib/data/Module_573_Calib/BP_M573_2025-01-27 /mnt/sls_det_storage/jungfrau_calib/ana/M573_CalibAna/
./CS_analysis 573 /mnt/sls_det_storage/jungfrau_calib/data/Module_573_Calib/ CS_M573_2025-01-27 /mnt/sls_det_storage/jungfrau_calib/ana/M573_CalibAna/
./CuFluo_analysis 573 G0 /mnt/sls_det_storage/jungfrau_calib/data/Module_573_Calib/ pedeG0_M573_2025-02-03 CuFluoG0_M573_2025-02-03 /mnt/sls_det_storage/jungfrau_calib/ana/M573_CalibAna/
./CuFluo_analysis 573 HG0 /mnt/sls_det_storage/jungfrau_calib/data/Module_573_Calib/ pedeHG0_M573_2025-02-03 CuFluoHG0_M573_2025-02-03 /mnt/sls_det_storage/jungfrau_calib/ana/M573_CalibAna/
./JFMC_CalibWriter_wBP 573
Module 573_fullspeed
/BP_analysis 573_fullspeed /mnt/sls_det_storage/jungfrau_calib/data/Module_573_fullspeed_Calib/BP_M573_fullspeed_2025-01-27 /mnt/sls_det_storage/jungfrau_calib/ana/M573_fullspeed_CalibAna/
./CS_analysis 573_fullspeed /mnt/sls_det_storage/jungfrau_calib/data/Module_573_fullspeed_Calib/ CS_M573_fullspeed_2025-01-27 /mnt/sls_det_storage/jungfrau_calib/ana/M573_fullspeed_CalibAna/
./CuFluo_analysis 573_fullspeed G0 /mnt/sls_det_storage/jungfrau_calib/data/Module_573_fullspeed_Calib/ pedeG0_M573_fullspeed_2025-02-05 CuFluoG0_M573_fullspeed_2025-02-05 /mnt/sls_det_storage/jungfrau_calib/ana/M573_fullspeed_CalibAna/
./CuFluo_analysis 573_fullspeed HG0 /mnt/sls_det_storage/jungfrau_calib/data/Module_573_fullspeed_Calib/ pedeHG0_M573_fullspeed_2025-02-03 CuFluoHG0_M573_fullspeed_2025-02-03 /mnt/sls_det_storage/jungfrau_calib/ana/M573_fullspeed_CalibAna/
./JFMC_CalibWriter_wBP 573_fullspeed
Module 574
./BP_analysis 574 /mnt/sls_det_storage/jungfrau_calib/data/Module_574_Calib/BP_M574_2025-01-27 /mnt/sls_det_storage/jungfrau_calib/ana/M574_CalibAna/
./CS_analysis 574 /mnt/sls_det_storage/jungfrau_calib/data/Module_574_Calib/ CS_M574_2025-01-27 /mnt/sls_det_storage/jungfrau_calib/ana/M574_CalibAna/
./CuFluo_analysis 574 G0 /mnt/sls_det_storage/jungfrau_calib/data/Module_574_Calib/ pedeG0_M574_2025-02-03 CuFluoG0_M574_2025-02-03 /mnt/sls_det_storage/jungfrau_calib/ana/M574_CalibAna/
./CuFluo_analysis 574 HG0 /mnt/sls_det_storage/jungfrau_calib/data/Module_574_Calib/ pedeHG0_M574_2025-02-03 CuFluoHG0_M574_2025-02-03 /mnt/sls_det_storage/jungfrau_calib/ana/M574_CalibAna/
./JFMC_CalibWriter_wBP 574
Module 574_fullspeed
./BP_analysis 574_fullspeed /mnt/sls_det_storage/jungfrau_calib/data/Module_574_fullspeed_Calib/BP_M574_fullspeed_2025-01-27 /mnt/sls_det_storage/jungfrau_calib/ana/M574_fullspeed_CalibAna/
./CS_analysis 574_fullspeed /mnt/sls_det_storage/jungfrau_calib/data/Module_574_fullspeed_Calib/ CS_M574_fullspeed_2025-01-27 /mnt/sls_det_storage/jungfrau_calib/ana/M574_fullspeed_CalibAna/
./CuFluo_analysis 574_fullspeed G0 /mnt/sls_det_storage/jungfrau_calib/data/Module_574_fullspeed_Calib/ pedeG0_M574_fullspeed_2025-02-05 CuFluoG0_M574_fullspeed_2025-02-05 /mnt/sls_det_storage/jungfrau_calib/ana/M574_fullspeed_CalibAna/
./CuFluo_analysis 574_fullspeed HG0 /mnt/sls_det_storage/jungfrau_calib/data/Module_574_fullspeed_Calib/ pedeHG0_M574_fullspeed_2025-02-03 CuFluoHG0_M574_fullspeed_2025-02-03 /mnt/sls_det_storage/jungfrau_calib/ana/M574_fullspeed_CalibAna/
./JFMC_CalibWriter_wBP 574_fullspeed
Module 575
./BP_analysis 575 /mnt/sls_det_storage/jungfrau_calib/data/Module_575_Calib/BP_M575_2025-01-27 /mnt/sls_det_storage/jungfrau_calib/ana/M575_CalibAna/
./CS_analysis 575 /mnt/sls_det_storage/jungfrau_calib/data/Module_575_Calib/ CS_M575_2025-01-27 /mnt/sls_det_storage/jungfrau_calib/ana/M575_CalibAna/
./CuFluo_analysis 575 G0 /mnt/sls_det_storage/jungfrau_calib/data/Module_575_Calib/ pedeG0_M575_2025-02-03 CuFluoG0_M575_2025-02-03 /mnt/sls_det_storage/jungfrau_calib/ana/M575_CalibAna/
./CuFluo_analysis 575 HG0 /mnt/sls_det_storage/jungfrau_calib/data/Module_575_Calib/ pedeHG0_M575_2025-02-03 CuFluoHG0_M575_2025-02-03 /mnt/sls_det_storage/jungfrau_calib/ana/M575_CalibAna/
./JFMC_CalibWriter_wBP 575
Module 575_fullspeed
./BP_analysis 575_fullspeed /mnt/sls_det_storage/jungfrau_calib/data/Module_575_fullspeed_Calib/BP_M575_fullspeed_2025-01-27 /mnt/sls_det_storage/jungfrau_calib/ana/M575_fullspeed_CalibAna/
./CS_analysis 575_fullspeed /mnt/sls_det_storage/jungfrau_calib/data/Module_575_fullspeed_Calib/ CS_M575_fullspeed_2025-01-27 /mnt/sls_det_storage/jungfrau_calib/ana/M575_fullspeed_CalibAna/
./CuFluo_analysis 575_fullspeed G0 /mnt/sls_det_storage/jungfrau_calib/data/Module_575_fullspeed_Calib/ pedeG0_M575_fullspeed_2025-02-05 CuFluoG0_M575_fullspeed_2025-02-05 /mnt/sls_det_storage/jungfrau_calib/ana/M575_fullspeed_CalibAna/
./CuFluo_analysis 575_fullspeed HG0 /mnt/sls_det_storage/jungfrau_calib/data/Module_575_fullspeed_Calib/ pedeHG0_M575_fullspeed_2025-02-03 CuFluoHG0_M575_fullspeed_2025-02-03 /mnt/sls_det_storage/jungfrau_calib/ana/M575_fullspeed_CalibAna/
./JFMC_CalibWriter_wBP 575_fullspeed
Module 576
./BP_analysis 576 /mnt/sls_det_storage/jungfrau_calib/data/Module_576_Calib/BP_M576_2025-01-27 /mnt/sls_det_storage/jungfrau_calib/ana/M576_CalibAna/
./CS_analysis 576 /mnt/sls_det_storage/jungfrau_calib/data/Module_576_Calib/ CS_M576_2025-01-27 /mnt/sls_det_storage/jungfrau_calib/ana/M576_CalibAna/
./CuFluo_analysis 576 G0 /mnt/sls_det_storage/jungfrau_calib/data/Module_576_Calib/ pedeG0_M576_2025-02-03 CuFluoG0_M576_2025-02-03 /mnt/sls_det_storage/jungfrau_calib/ana/M576_CalibAna/
./CuFluo_analysis 576 HG0 /mnt/sls_det_storage/jungfrau_calib/data/Module_576_Calib/ pedeHG0_M576_2025-02-03 CuFluoHG0_M576_2025-02-03 /mnt/sls_det_storage/jungfrau_calib/ana/M576_CalibAna/
./JFMC_CalibWriter_wBP 576
Module 576_fullspeed
./BP_analysis 576_fullspeed /mnt/sls_det_storage/jungfrau_calib/data/Module_576_fullspeed_Calib/BP_M576_fullspeed_2025-01-27 /mnt/sls_det_storage/jungfrau_calib/ana/M576_fullspeed_CalibAna/
./CS_analysis 576_fullspeed /mnt/sls_det_storage/jungfrau_calib/data/Module_576_fullspeed_Calib/ CS_M576_fullspeed_2025-01-27 /mnt/sls_det_storage/jungfrau_calib/ana/M576_fullspeed_CalibAna/
./CuFluo_analysis 576_fullspeed G0 /mnt/sls_det_storage/jungfrau_calib/data/Module_576_fullspeed_Calib/ pedeG0_M576_fullspeed_2025-02-05 CuFluoG0_M576_fullspeed_2025-02-05 /mnt/sls_det_storage/jungfrau_calib/ana/M576_fullspeed_CalibAna/
./CuFluo_analysis 576_fullspeed HG0 /mnt/sls_det_storage/jungfrau_calib/data/Module_576_fullspeed_Calib/ pedeHG0_M576_fullspeed_2025-02-03 CuFluoHG0_M576_fullspeed_2025-02-03 /mnt/sls_det_storage/jungfrau_calib/ana/M576_fullspeed_CalibAna/
./JFMC_CalibWriter_wBP 576_fullspeed
Module 577
./BP_analysis 577 /mnt/sls_det_storage/jungfrau_calib/data/Module_577_Calib/BP_M577_2025-01-27 /mnt/sls_det_storage/jungfrau_calib/ana/M577_CalibAna/
./CS_analysis 577 /mnt/sls_det_storage/jungfrau_calib/data/Module_577_Calib/ CS_M577_2025-01-27 /mnt/sls_det_storage/jungfrau_calib/ana/M577_CalibAna/
./CuFluo_analysis 577 G0 /mnt/sls_det_storage/jungfrau_calib/data/Module_577_Calib/ pedeG0_M577_2025-02-03 CuFluoG0_M577_2025-02-03 /mnt/sls_det_storage/jungfrau_calib/ana/M577_CalibAna/
./CuFluo_analysis 577 HG0 /mnt/sls_det_storage/jungfrau_calib/data/Module_577_Calib/ pedeHG0_M577_2025-02-03 CuFluoHG0_M577_2025-02-03 /mnt/sls_det_storage/jungfrau_calib/ana/M577_CalibAna/
./JFMC_CalibWriter_wBP 577
Module 577_fullspeed
./BP_analysis 577_fullspeed /mnt/sls_det_storage/jungfrau_calib/data/Module_577_fullspeed_Calib/BP_M577_fullspeed_2025-01-27 /mnt/sls_det_storage/jungfrau_calib/ana/M577_fullspeed_CalibAna/
./CS_analysis 577_fullspeed /mnt/sls_det_storage/jungfrau_calib/data/Module_577_fullspeed_Calib/ CS_M577_fullspeed_2025-01-27 /mnt/sls_det_storage/jungfrau_calib/ana/M577_fullspeed_CalibAna/
./CuFluo_analysis 577_fullspeed G0 /mnt/sls_det_storage/jungfrau_calib/data/Module_577_fullspeed_Calib/ pedeG0_M577_fullspeed_2025-02-03 CuFluoG0_M577_fullspeed_2025-02-03 /mnt/sls_det_storage/jungfrau_calib/ana/M577_fullspeed_CalibAna/
./CuFluo_analysis 577_fullspeed HG0 /mnt/sls_det_storage/jungfrau_calib/data/Module_577_fullspeed_Calib/ pedeHG0_M577_fullspeed_2025-02-03 CuFluoHG0_M577_fullspeed_2025-02-03 /mnt/sls_det_storage/jungfrau_calib/ana/M577_fullspeed_CalibAna/
./JFMC_CalibWriter_wBP 577_fullspeed
Module 579 (QUAD 150 thin sensor)
./BP_analysis_thin 579 /mnt/sls_det_storage/jungfrau_calib/data/Module_579_Calib/BP_M579_2025-02-06 /mnt/sls_det_storage/jungfrau_calib/ana/M579_CalibAna/
./CS_analysis 579 /mnt/sls_det_storage/jungfrau_calib/data/Module_579_Calib/ CS_M579_2025-02-06 /mnt/sls_det_storage/jungfrau_calib/ana/M579_CalibAna/
./CuFluo_analysis 579 G0 /mnt/sls_det_storage/jungfrau_calib/data/Module_579_Calib/ pedeG0_M579_2025-02-07 CuFluoG0_M579_2025-02-07 /mnt/sls_det_storage/jungfrau_calib/ana/M579_CalibAna/
./CuFluo_analysis 579 HG0 /mnt/sls_det_storage/jungfrau_calib/data/Module_579_Calib/ pedeHG0_M579_2025-02-07 CuFluoHG0_M579_2025-02-07 /mnt/sls_det_storage/jungfrau_calib/ana/M579_CalibAna/
./JFMC_CalibWriter_wBP 579
Module 579_fullspeed (QUAD 150 thin sensor)
./BP_analysis_thin 579_fullspeed /mnt/sls_det_storage/jungfrau_calib/data/Module_579_fullspeed_Calib/BP_M579_fullspeed_2025-02-06 /mnt/sls_det_storage/jungfrau_calib/ana/M579_fullspeed_CalibAna/
./CS_analysis 579_fullspeed /mnt/sls_det_storage/jungfrau_calib/data/Module_579_fullspeed_Calib/ CS_M579_fullspeed_2025-02-06 /mnt/sls_det_storage/jungfrau_calib/ana/M579_fullspeed_CalibAna/
./CuFluo_analysis 579_fullspeed G0 /mnt/sls_det_storage/jungfrau_calib/data/Module_579_fullspeed_Calib/ pedeG0_M579_fullspeed_2025-02-07 CuFluoG0_M579_fullspeed_2025-02-07 /mnt/sls_det_storage/jungfrau_calib/ana/M579_fullspeed_CalibAna/
./CuFluo_analysis 579_fullspeed HG0 /mnt/sls_det_storage/jungfrau_calib/data/Module_579_fullspeed_Calib/ pedeHG0_M579_fullspeed_2025-02-07 CuFluoHG0_M579_fullspeed_2025-02-07 /mnt/sls_det_storage/jungfrau_calib/ana/M579_fullspeed_CalibAna/
./JFMC_CalibWriter_wBP 579_fullspeed
Module 563
./BP_analysis 563 /mnt/sls_det_storage/jungfrau_calib/data/Module_563_Calib/BP_M563_2025-02-06 /mnt/sls_det_storage/jungfrau_calib/ana/M563_CalibAna/
./CS_analysis 563 /mnt/sls_det_storage/jungfrau_calib/data/Module_563_Calib/ CS_M563_2025-02-06 /mnt/sls_det_storage/jungfrau_calib/ana/M563_CalibAna/
./CuFluo_analysis 563 G0 /mnt/sls_det_storage/jungfrau_calib/data/Module_563_Calib/ pedeG0_M563_2025-02-07 CuFluoG0_M563_2025-02-07 /mnt/sls_det_storage/jungfrau_calib/ana/M563_CalibAna/
./CuFluo_analysis 563 HG0 /mnt/sls_det_storage/jungfrau_calib/data/Module_563_Calib/ pedeHG0_M563_2025-02-07 CuFluoHG0_M563_2025-02-07 /mnt/sls_det_storage/jungfrau_calib/ana/M563_CalibAna/
./JFMC_CalibWriter_wBP 563
Module 563_fullspeed
./BP_analysis 563_fullspeed /mnt/sls_det_storage/jungfrau_calib/data/Module_563_fullspeed_Calib/BP_M563_fullspeed_2025-02-06 /mnt/sls_det_storage/jungfrau_calib/ana/M563_fullspeed_CalibAna/
./CS_analysis 563_fullspeed /mnt/sls_det_storage/jungfrau_calib/data/Module_563_fullspeed_Calib/ CS_M563_fullspeed_2025-02-06 /mnt/sls_det_storage/jungfrau_calib/ana/M563_fullspeed_CalibAna/
./CuFluo_analysis 563_fullspeed G0 /mnt/sls_det_storage/jungfrau_calib/data/Module_563_fullspeed_Calib/ pedeG0_M563_fullspeed_2025-02-07 CuFluoG0_M563_fullspeed_2025-02-07 /mnt/sls_det_storage/jungfrau_calib/ana/M563_fullspeed_CalibAna/
./CuFluo_analysis 563_fullspeed HG0 /mnt/sls_det_storage/jungfrau_calib/data/Module_563_fullspeed_Calib/ pedeHG0_M563_fullspeed_2025-02-07 CuFluoHG0_M563_fullspeed_2025-02-07 /mnt/sls_det_storage/jungfrau_calib/ana/M563_fullspeed_CalibAna/
./JFMC_CalibWriter_wBP 563_fullspeed
Module 564
./BP_analysis 564 /mnt/sls_det_storage/jungfrau_calib/data/Module_564_Calib/BP_M564_2025-02-06 /mnt/sls_det_storage/jungfrau_calib/ana/M564_CalibAna/
./CS_analysis 564 /mnt/sls_det_storage/jungfrau_calib/data/Module_564_Calib/ CS_M564_2025-02-06 /mnt/sls_det_storage/jungfrau_calib/ana/M564_CalibAna/
./CuFluo_analysis 564 G0 /mnt/sls_det_storage/jungfrau_calib/data/Module_564_Calib/ pedeG0_M564_2025-02-07 CuFluoG0_M564_2025-02-07 /mnt/sls_det_storage/jungfrau_calib/ana/M564_CalibAna/
./CuFluo_analysis 564 HG0 /mnt/sls_det_storage/jungfrau_calib/data/Module_564_Calib/ pedeHG0_M564_2025-02-07 CuFluoHG0_M564_2025-02-07 /mnt/sls_det_storage/jungfrau_calib/ana/M564_CalibAna/
./JFMC_CalibWriter_wBP 564
Module 564_fullspeed
./BP_analysis 564_fullspeed /mnt/sls_det_storage/jungfrau_calib/data/Module_564_fullspeed_Calib/BP_M564_fullspeed_2025-02-06 /mnt/sls_det_storage/jungfrau_calib/ana/M564_fullspeed_CalibAna/
./CS_analysis 564_fullspeed /mnt/sls_det_storage/jungfrau_calib/data/Module_564_fullspeed_Calib/ CS_M564_fullspeed_2025-02-06 /mnt/sls_det_storage/jungfrau_calib/ana/M564_fullspeed_CalibAna/
./CuFluo_analysis 564_fullspeed G0 /mnt/sls_det_storage/jungfrau_calib/data/Module_564_fullspeed_Calib/ pedeG0_M564_fullspeed_2025-02-07 CuFluoG0_M564_fullspeed_2025-02-07 /mnt/sls_det_storage/jungfrau_calib/ana/M564_fullspeed_CalibAna/
./CuFluo_analysis 564_fullspeed HG0 /mnt/sls_det_storage/jungfrau_calib/data/Module_564_fullspeed_Calib/ pedeHG0_M564_fullspeed_2025-02-07 CuFluoHG0_M564_fullspeed_2025-02-07 /mnt/sls_det_storage/jungfrau_calib/ana/M564_fullspeed_CalibAna/
./JFMC_CalibWriter_wBP 564_fullspeed
Module 566
./BP_analysis 566 /mnt/sls_det_storage/jungfrau_calib/data/Module_566_Calib/BP_M566_2025-02-06 /mnt/sls_det_storage/jungfrau_calib/ana/M566_CalibAna/
./CS_analysis 566 /mnt/sls_det_storage/jungfrau_calib/data/Module_566_Calib/ CS_M566_2025-02-06 /mnt/sls_det_storage/jungfrau_calib/ana/M566_CalibAna/
./CuFluo_analysis 566 G0 /mnt/sls_det_storage/jungfrau_calib/data/Module_566_Calib/ pedeG0_M566_2025-02-07 CuFluoG0_M566_2025-02-07 /mnt/sls_det_storage/jungfrau_calib/ana/M566_CalibAna/
./CuFluo_analysis 566 HG0 /mnt/sls_det_storage/jungfrau_calib/data/Module_566_Calib/ pedeHG0_M566_2025-02-07 CuFluoHG0_M566_2025-02-07 /mnt/sls_det_storage/jungfrau_calib/ana/M566_CalibAna/
./JFMC_CalibWriter_wBP 566
Module 566_fullspeed
./BP_analysis 566_fullspeed /mnt/sls_det_storage/jungfrau_calib/data/Module_566_fullspeed_Calib/BP_M566_fullspeed_2025-02-06 /mnt/sls_det_storage/jungfrau_calib/ana/M566_fullspeed_CalibAna/
./CS_analysis 566_fullspeed /mnt/sls_det_storage/jungfrau_calib/data/Module_566_fullspeed_Calib/ CS_M566_fullspeed_2025-02-06 /mnt/sls_det_storage/jungfrau_calib/ana/M566_fullspeed_CalibAna/
./CuFluo_analysis 566_fullspeed G0 /mnt/sls_det_storage/jungfrau_calib/data/Module_566_fullspeed_Calib/ pedeG0_M566_fullspeed_2025-02-07 CuFluoG0_M566_fullspeed_2025-02-07 /mnt/sls_det_storage/jungfrau_calib/ana/M566_fullspeed_CalibAna/
./CuFluo_analysis 566_fullspeed HG0 /mnt/sls_det_storage/jungfrau_calib/data/Module_566_fullspeed_Calib/ pedeHG0_M566_fullspeed_2025-02-07 CuFluoHG0_M566_fullspeed_2025-02-07 /mnt/sls_det_storage/jungfrau_calib/ana/M566_fullspeed_CalibAna/
./JFMC_CalibWriter_wBP 566_fullspeed
Module 567
./BP_analysis 567 /mnt/sls_det_storage/jungfrau_calib/data/Module_567_Calib/BP_M567_2025-02-06 /mnt/sls_det_storage/jungfrau_calib/ana/M567_CalibAna/
./CS_analysis 567 /mnt/sls_det_storage/jungfrau_calib/data/Module_567_Calib/ CS_M567_2025-02-06 /mnt/sls_det_storage/jungfrau_calib/ana/M567_CalibAna/
./CuFluo_analysis 567 G0 /mnt/sls_det_storage/jungfrau_calib/data/Module_567_Calib/ pedeG0_M567_2025-02-07 CuFluoG0_M567_2025-02-07 /mnt/sls_det_storage/jungfrau_calib/ana/M567_CalibAna/
./CuFluo_analysis 567 HG0 /mnt/sls_det_storage/jungfrau_calib/data/Module_567_Calib/ pedeHG0_M567_2025-02-07 CuFluoHG0_M567_2025-02-07 /mnt/sls_det_storage/jungfrau_calib/ana/M567_CalibAna/
./JFMC_CalibWriter_wBP 567
Module 567_fullspeed
./BP_analysis 567_fullspeed /mnt/sls_det_storage/jungfrau_calib/data/Module_567_fullspeed_Calib/BP_M567_fullspeed_2025-02-06 /mnt/sls_det_storage/jungfrau_calib/ana/M567_fullspeed_CalibAna/
./CS_analysis 567_fullspeed /mnt/sls_det_storage/jungfrau_calib/data/Module_567_fullspeed_Calib/ CS_M567_fullspeed_2025-02-06 /mnt/sls_det_storage/jungfrau_calib/ana/M567_fullspeed_CalibAna/
./CuFluo_analysis 567_fullspeed G0 /mnt/sls_det_storage/jungfrau_calib/data/Module_567_fullspeed_Calib/ pedeG0_M567_fullspeed_2025-02-07 CuFluoG0_M567_fullspeed_2025-02-07 /mnt/sls_det_storage/jungfrau_calib/ana/M567_fullspeed_CalibAna/
./CuFluo_analysis 567_fullspeed HG0 /mnt/sls_det_storage/jungfrau_calib/data/Module_567_fullspeed_Calib/ pedeHG0_M567_fullspeed_2025-02-07 CuFluoHG0_M567_fullspeed_2025-02-07 /mnt/sls_det_storage/jungfrau_calib/ana/M567_fullspeed_CalibAna/
./JFMC_CalibWriter_wBP 567_fullspeed
Module 568
./BP_analysis 568 /mnt/sls_det_storage/jungfrau_calib/data/Module_568_Calib/BP_M568_2025-02-06 /mnt/sls_det_storage/jungfrau_calib/ana/M568_CalibAna/
./CS_analysis 568 /mnt/sls_det_storage/jungfrau_calib/data/Module_568_Calib/ CS_M568_2025-02-06 /mnt/sls_det_storage/jungfrau_calib/ana/M568_CalibAna/
./CuFluo_analysis 568 G0 /mnt/sls_det_storage/jungfrau_calib/data/Module_568_Calib/ pedeG0_M568_2025-02-07 CuFluoG0_M568_2025-02-07 /mnt/sls_det_storage/jungfrau_calib/ana/M568_CalibAna/
./CuFluo_analysis 568 HG0 /mnt/sls_det_storage/jungfrau_calib/data/Module_568_Calib/ pedeHG0_M568_2025-02-07 CuFluoHG0_M568_2025-02-07 /mnt/sls_det_storage/jungfrau_calib/ana/M568_CalibAna/
./JFMC_CalibWriter_wBP 568
Module 568_fullspeed
./BP_analysis 568_fullspeed /mnt/sls_det_storage/jungfrau_calib/data/Module_568_fullspeed_Calib/BP_M568_fullspeed_2025-02-06 /mnt/sls_det_storage/jungfrau_calib/ana/M568_fullspeed_CalibAna/
./CS_analysis 568_fullspeed /mnt/sls_det_storage/jungfrau_calib/data/Module_568_fullspeed_Calib/ CS_M568_fullspeed_2025-02-06 /mnt/sls_det_storage/jungfrau_calib/ana/M568_fullspeed_CalibAna/
./CuFluo_analysis 568_fullspeed G0 /mnt/sls_det_storage/jungfrau_calib/data/Module_568_fullspeed_Calib/ pedeG0_M568_fullspeed_2025-02-07 CuFluoG0_M568_fullspeed_2025-02-07 /mnt/sls_det_storage/jungfrau_calib/ana/M568_fullspeed_CalibAna/
./CuFluo_analysis 568_fullspeed HG0 /mnt/sls_det_storage/jungfrau_calib/data/Module_568_fullspeed_Calib/ pedeHG0_M568_fullspeed_2025-02-07 CuFluoHG0_M568_fullspeed_2025-02-07 /mnt/sls_det_storage/jungfrau_calib/ana/M568_fullspeed_CalibAna/
./JFMC_CalibWriter_wBP 568_fullspeed
Module 569
./BP_analysis 569 /mnt/sls_det_storage/jungfrau_calib/data/Module_569_Calib/BP_M569_2025-02-06 /mnt/sls_det_storage/jungfrau_calib/ana/M569_CalibAna/
./CS_analysis 569 /mnt/sls_det_storage/jungfrau_calib/data/Module_569_Calib/ CS_M569_2025-02-06 /mnt/sls_det_storage/jungfrau_calib/ana/M569_CalibAna/
./CuFluo_analysis 569 G0 /mnt/sls_det_storage/jungfrau_calib/data/Module_569_Calib/ pedeG0_M569_2025-02-07 CuFluoG0_M569_2025-02-07 /mnt/sls_det_storage/jungfrau_calib/ana/M569_CalibAna/
./CuFluo_analysis 569 HG0 /mnt/sls_det_storage/jungfrau_calib/data/Module_569_Calib/ pedeHG0_M569_2025-02-07 CuFluoHG0_M569_2025-02-07 /mnt/sls_det_storage/jungfrau_calib/ana/M569_CalibAna/
./JFMC_CalibWriter_wBP 569
Module 569_fullspeed
./BP_analysis 569_fullspeed /mnt/sls_det_storage/jungfrau_calib/data/Module_569_fullspeed_Calib/BP_M569_fullspeed_2025-02-06 /mnt/sls_det_storage/jungfrau_calib/ana/M569_fullspeed_CalibAna/
./CS_analysis 569_fullspeed /mnt/sls_det_storage/jungfrau_calib/data/Module_569_fullspeed_Calib/ CS_M569_fullspeed_2025-02-06 /mnt/sls_det_storage/jungfrau_calib/ana/M569_fullspeed_CalibAna/
./CuFluo_analysis 569_fullspeed G0 /mnt/sls_det_storage/jungfrau_calib/data/Module_569_fullspeed_Calib/ pedeG0_M569_fullspeed_2025-02-07 CuFluoG0_M569_fullspeed_2025-02-07 /mnt/sls_det_storage/jungfrau_calib/ana/M569_fullspeed_CalibAna/
./CuFluo_analysis 569_fullspeed HG0 /mnt/sls_det_storage/jungfrau_calib/data/Module_569_fullspeed_Calib/ pedeHG0_M569_fullspeed_2025-02-07 CuFluoHG0_M569_fullspeed_2025-02-07 /mnt/sls_det_storage/jungfrau_calib/ana/M569_fullspeed_CalibAna/
./JFMC_CalibWriter_wBP 569_fullspeed
Module 561
./BP_analysis 561 /mnt/sls_det_storage/jungfrau_calib/data/Module_561_Calib/BP_M561_2025-02-13 /mnt/sls_det_storage/jungfrau_calib/ana/M561_CalibAna/
./CS_analysis 561 /mnt/sls_det_storage/jungfrau_calib/data/Module_561_Calib/ CS_M561_2025-02-13 /mnt/sls_det_storage/jungfrau_calib/ana/M561_CalibAna/
./CuFluo_analysis 561 G0 /mnt/sls_det_storage/jungfrau_calib/data/Module_561_Calib/ pedeG0_M561_2025-02-12 CuFluoG0_M561_2025-02-12 /mnt/sls_det_storage/jungfrau_calib/ana/M561_CalibAna/
./CuFluo_analysis 561 HG0 /mnt/sls_det_storage/jungfrau_calib/data/Module_561_Calib/ pedeHG0_M561_2025-02-12 CuFluoHG0_M561_2025-02-12 /mnt/sls_det_storage/jungfrau_calib/ana/M561_CalibAna/
./JFMC_CalibWriter_wBP 561
Module 561_fullspeed
./BP_analysis 561_fullspeed /mnt/sls_det_storage/jungfrau_calib/data/Module_561_fullspeed_Calib/BP_M561_fullspeed_2025-02-13 /mnt/sls_det_storage/jungfrau_calib/ana/M561_fullspeed_CalibAna/
./CS_analysis 561_fullspeed /mnt/sls_det_storage/jungfrau_calib/data/Module_561_fullspeed_Calib/ CS_M561_fullspeed_2025-02-13 /mnt/sls_det_storage/jungfrau_calib/ana/M561_fullspeed_CalibAna/
./CuFluo_analysis 561_fullspeed G0 /mnt/sls_det_storage/jungfrau_calib/data/Module_561_fullspeed_Calib/ pedeG0_M561_fullspeed_2025-02-12 CuFluoG0_M561_fullspeed_2025-02-12 /mnt/sls_det_storage/jungfrau_calib/ana/M561_fullspeed_CalibAna/
./CuFluo_analysis 561_fullspeed HG0 /mnt/sls_det_storage/jungfrau_calib/data/Module_561_fullspeed_Calib/ pedeHG0_M561_fullspeed_2025-02-12 CuFluoHG0_M561_fullspeed_2025-02-12 /mnt/sls_det_storage/jungfrau_calib/ana/M561_fullspeed_CalibAna/
./JFMC_CalibWriter_wBP 561_fullspeed
Module 562
./BP_analysis 562 /mnt/sls_det_storage/jungfrau_calib/data/Module_562_Calib/BP_M562_2025-02-13 /mnt/sls_det_storage/jungfrau_calib/ana/M562_CalibAna/
./CS_analysis 562 /mnt/sls_det_storage/jungfrau_calib/data/Module_562_Calib/ CS_M562_2025-02-13 /mnt/sls_det_storage/jungfrau_calib/ana/M562_CalibAna/
./CuFluo_analysis 562 G0 /mnt/sls_det_storage/jungfrau_calib/data/Module_562_Calib/ pedeG0_M562_2025-02-12 CuFluoG0_M562_2025-02-12 /mnt/sls_det_storage/jungfrau_calib/ana/M562_CalibAna/
./CuFluo_analysis 562 HG0 /mnt/sls_det_storage/jungfrau_calib/data/Module_562_Calib/ pedeHG0_M562_2025-02-12 CuFluoHG0_M562_2025-02-12 /mnt/sls_det_storage/jungfrau_calib/ana/M562_CalibAna/
./JFMC_CalibWriter_wBP 562
Module 562_fullspeed
./BP_analysis 562_fullspeed /mnt/sls_det_storage/jungfrau_calib/data/Module_562_fullspeed_Calib/BP_M562_fullspeed_2025-02-13 /mnt/sls_det_storage/jungfrau_calib/ana/M562_fullspeed_CalibAna/
./CS_analysis 562_fullspeed /mnt/sls_det_storage/jungfrau_calib/data/Module_562_fullspeed_Calib/ CS_M562_fullspeed_2025-02-13 /mnt/sls_det_storage/jungfrau_calib/ana/M562_fullspeed_CalibAna/
./CuFluo_analysis 562_fullspeed G0 /mnt/sls_det_storage/jungfrau_calib/data/Module_562_fullspeed_Calib/ pedeG0_M562_fullspeed_2025-02-12 CuFluoG0_M562_fullspeed_2025-02-12 /mnt/sls_det_storage/jungfrau_calib/ana/M562_fullspeed_CalibAna/
./CuFluo_analysis 562_fullspeed HG0 /mnt/sls_det_storage/jungfrau_calib/data/Module_562_fullspeed_Calib/ pedeHG0_M562_fullspeed_2025-02-12 CuFluoHG0_M562_fullspeed_2025-02-12 /mnt/sls_det_storage/jungfrau_calib/ana/M562_fullspeed_CalibAna/
./JFMC_CalibWriter_wBP 562_fullspeed
Module 038
./BP_analysis 038 /mnt/sls_det_storage/jungfrau_calib/data/Module_038_Calib/BP_M038_2025-02-13 /mnt/sls_det_storage/jungfrau_calib/ana/M038_CalibAna/
./CS_analysis 038 /mnt/sls_det_storage/jungfrau_calib/data/Module_038_Calib/ CS_M038_2025-02-13 /mnt/sls_det_storage/jungfrau_calib/ana/M038_CalibAna/
./CuFluo_analysis 038 G0 /mnt/sls_det_storage/jungfrau_calib/data/Module_038_Calib/ pedeG0_M038_2025-02-12 CuFluoG0_M038_2025-02-12 /mnt/sls_det_storage/jungfrau_calib/ana/M038_CalibAna/
./CuFluo_analysis 038 HG0 /mnt/sls_det_storage/jungfrau_calib/data/Module_038_Calib/ pedeHG0_M038_2025-02-12 CuFluoHG0_M038_2025-02-12 /mnt/sls_det_storage/jungfrau_calib/ana/M038_CalibAna/
./JFMC_CalibWriter_wBP 038
Module 038_fullspeed
./BP_analysis 038_fullspeed /mnt/sls_det_storage/jungfrau_calib/data/Module_038_fullspeed_Calib/BP_M038_fullspeed_2025-02-13 /mnt/sls_det_storage/jungfrau_calib/ana/M038_fullspeed_CalibAna/
./CS_analysis 038_fullspeed /mnt/sls_det_storage/jungfrau_calib/data/Module_038_fullspeed_Calib/ CS_M038_fullspeed_2025-02-13 /mnt/sls_det_storage/jungfrau_calib/ana/M038_fullspeed_CalibAna/
./CuFluo_analysis 038_fullspeed G0 /mnt/sls_det_storage/jungfrau_calib/data/Module_038_fullspeed_Calib/ pedeG0_M038_fullspeed_2025-02-12 CuFluoG0_M038_fullspeed_2025-02-12 /mnt/sls_det_storage/jungfrau_calib/ana/M038_fullspeed_CalibAna/
./CuFluo_analysis 038_fullspeed HG0 /mnt/sls_det_storage/jungfrau_calib/data/Module_038_fullspeed_Calib/ pedeHG0_M038_fullspeed_2025-02-12 CuFluoHG0_M038_fullspeed_2025-02-12 /mnt/sls_det_storage/jungfrau_calib/ana/M038_fullspeed_CalibAna/
./JFMC_CalibWriter_wBP 038_fullspeed