5.6 KiB
JUNGFRAU Calibration
This project details the JUNGFRAU calibration procedure.
Copper fluorescence
Provides an absolute calibration of high gain. Copper fluorescence is used to illuminate the sensor. The resulting noise and Kalpha peaks are fit with a gaussian and charge sharing model. The gain for 8 keV is the distance between the two peaks.
Scripts are:
CuFluo_exposure.sh
to perform the exposure in the X-ray boxCuFluo_analysis.cpp
to measure the peak-to-peak distance- Legacy:
CuFluo_Ka_KaKb_Comp.cpp
to quantify the difference between different fit models
For calibration of storage cells:
CuFluo_exposure_sc.sh
to perform the exposure in the X-ray boxCuFluo_analysis_sc_singlethread_data.cpp
to read pixel spectra from a single storage cell into .rootCuFluo_analysis_sc_singlethread_fits.cpp
to measure the peak-to-peak distance for a single storage cell
Not written multithreaded, but can be launched for multiple storage cells on multiple cores in parallel.
Backplane pulsing
Provides a relative calibration between high and medium gains. A seperate circuit board is used to pulse the voltage on the backplane of the sensor. By varying the size of the pulse, the response of high and medium gains can be measured and fit with linear functions. The ratio of the two gains is the ratio of fitted gradients.
Scripts are:
BP_scan.sh
to perform the scanBP_analysis.cpp
to calculate the response, fit the gradients and measure the ratio- Legacy:
BP_DB_Comp.cpp
to quantify the difference between the two methods
For calibration of storage cells, we assume that the relative gains behave the same for all storage cells and no extra data are taken or analysis performed.
Current source
Provides a relative calibration between medium and low gains. An internal current source is used to inject charge into the ASIC one column at a time. By varying the integration time, the amound of collected charge is varied and the response of medium and low gain can be measured. The ratio of the two gains is the ratio of fitted gradients.
Scripts are:
CS_scan.sh
to perform the scanCS_analysis.cpp
to calculate the response, fit the gradients and measure the ratio- Legacy:
CS_BaselineTest.cpp
to check that increasing the integratio time doesn't change the baseline
For calibration of storage cells, we assume that the relative gains behave the same for all storage cells and no extra data are taken or analysis performed.
Full dynamic range calibration
The full dynamic range can be calibrated by combining information from the various measurements.
- High gain = peak-to-peak difference [ADU] / 8 [keV]
- Medium gain = high gain [ADU / keV] * medium gain / high gain
- Low gain = high gain [ADU / keV] * medium gain / high gain * low gain / medium gain
Scripts are:
JFMC_CalibWriter_wBP.cpp
to perform the calibration
For calibration of storage cells:
JFMC_CalibWriter_wBP_sc.cpp
to perform the calibration
Workflow to perform the calibration
Data taking:
- Set up environment variables:
source setup_env.sh
- Set receiver PC:
source pccalib.sh <pc_name>
(either mpc2012 or pc-jungfrau-test) - Create receiver commands:
source filename_creator.sh <module_number>
(without preceeding M) - Make sure the client version
slsDetector_bin
points to is in line with the jungfrauDetectorServer on the readout board. sls_detector_put hostname jfcalib_x
(x=0..5)- If required: Set up pulse generator serial connection on pc8830 (BP_scan)
- If required: Set up X-ray box (CuFluo_exposure)
- Launch data taking script (
BP_scan.sh
,CS_scan.sh
,CuFluo_exposure.sh
) - Monitor if there is any significant package loss. (For BP_scan and CS_scan, there must not be any loss! CuFluo exposure tolerates some loss.)
- Data are saved to
/mnt/sls_det_storage/jungfrau_calib/data/Module_XXX_Calib/
Data analysis:
- Edit
CS_analysis.cpp
to add the module number(s) you want to calibrate (if they are not already included):scan_v6.push_back(<"module number">);
- Recompile:
make CS_analysis
(easiest to do it on mpc2012 to avoid running into issues with the version of ROOT) - Rerun
source filename_creator.sh <module_number>
to get the commands to launch scripts for the module - If required: Modify commands for storage cells
- Launch the analysis scripts (
JFMC_CalibWriter_wBP
only when all the other analyses have finished) - Output is saved to
data/
andplots/
(local)
Structure of JF gain map files
Gain maps are generated by JFMC_CalibWriter_wBP
and named gainMaps_MXXX_yyyy-mm-dd.bin, whereby MXXX denotes the module number. Every binary file contains six gain maps in the order G0, G1, G2, HG0, HG1, HG2. Every gain map is an array of doubles with size 8 bytes \times
512 \times
1024 (sizeof(double)
\times
rows \times
columns) corresponding to the gain factor in ADU/keV for every pixel of the module (i.e. double gainfactor[512*1024]
). The pixelnumber i
is related to the column x
and row y
position by i = y \times 1024 + x
. Inversely, x
and y
can be calculated from i
as x = i%1024
and y = int(i/1024)
.
Legacy: Direct beam
Provides a relative calibration between high and medium gains. The current in the X-ray box is varied to measure the response of high and medium gains. The ratio of the two gains is the ratio of fitted gradients.
Scripts are:
DB_scan.sh
to perform the scanDB_analysis.cpp
to calculate the response, fit the gradients and measure the ratio
References
- Calibration status and plans for the charge integrating JUNGFRAU pixel detector for SwissFEL, S. Redford et al 2016 JINST 11 C11013
- First full dynamic range calibration of the JUNGFRAU photon detector, S. Redford et al 2018 JINST 13 C01027