2024-12-06 12:35:35 +01:00
2025-06-27 10:34:14 +02:00
2025-06-27 11:16:26 +02:00
2025-06-27 11:16:26 +02:00
2025-06-27 11:16:26 +02:00
2025-06-27 10:34:14 +02:00
2025-06-27 10:34:14 +02:00
2025-06-27 10:34:14 +02:00
2025-06-27 11:16:26 +02:00
2025-06-27 11:16:26 +02:00
2025-06-27 10:34:14 +02:00
2025-06-27 10:34:14 +02:00
2024-05-06 18:21:59 +02:00
2024-02-09 12:34:06 +01:00
2025-06-27 10:34:14 +02:00
2025-06-27 11:16:26 +02:00
2025-06-27 10:34:14 +02:00
2024-02-09 14:17:53 +01:00
2025-06-27 10:34:14 +02:00
2025-06-27 10:34:14 +02:00
2024-04-17 15:11:12 +02:00
2025-06-27 10:34:14 +02:00

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 box
  • CuFluo_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 box
  • CuFluo_analysis_sc_singlethread_data.cpp to read pixel spectra from a single storage cell into .root
  • CuFluo_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 scan
  • BP_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 scan
  • CS_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/ and plots/ (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 scan
  • DB_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
Description
No description provided
Readme 75 MiB
Languages
C++ 86.3%
C 7.9%
Shell 5%
Makefile 0.8%