Page History
Content
Table of Contents |
---|
Introduction
Cornell Stanford Pixel Array Detector (CSPAD) is a X-ray imaging detector made of silicon sensors (2x1) covering 20x20cm² surface, as shown in the plot
Although pixel coordinates in 2x1 sensor are known with sub-micrometer precision, construction of the detector allows significant freedom in relative positions of 2x1 sensors. To get precise measurement the 2x1 sensor coordinates needs to be calibrated. In this note we describe geometry of the CSPAD detector, alignment procedure, parameters and software providing access to precise geometry information.
2x1 Sensor Geometry
The 2x1 sensor geometry was tested with microscopic measurement. Two slides from Chris Kenney's presentation shows the pixel sizes:
The same presentation slides in PDF format: Pixels size.
Important 2x1 features:
- Number of rows x columns = 185 x 388. (In DAQ notation of rows and columns is interchanged...)
- Most of pixels have size 109.92 x 109.92 um².
- Gap between two ASICS is covered by the two rows of elongated pixels with size 109.92 x 274.8 um².
- Two versions of sensors have different dimensions between corners, so it is reasonable to define pixel coordinates w.r.t. the sensor center.
Optical measurement
Optical measurement is maintained by Chris Kenney. Detector or its quad is installed on microscope table and 3-d coordinates of all 2x1 sensor corners are measured with precision about 8um (RMS) in x-y plane. All corners in the measurement are numerated in arbitrary order. It is expected that numeration order should be the same for different measurements. This procedure depends on CSPAD construction;
...
Then, text table with "standard" numeration of points in quads is feed to the python script which provides quality check of optical measurement and evaluates the alignment parameters for quads. In the beginning, this script changes the numeration of points adopted in optical measurement to numeration of 2x1 used in DAQ. Further, all calibration parameters are associated with numeration of 2x1 sensors and quads in DAQ.
Quality Check Procedure
For quality check of optical measurement we calculate
S1 - 1st short side length of 2x1
S2 - 2nd short side length of 2x1
L1 - 1st long side length of 2x1
L2 - 2nd long side length of 2x1
D1 - 1st diagonal of 2x1 between corners 1 and 3
D2 - 2nd diagonal of 2x1 between corners 2 and 4
dS and dL are the deviations of the 1st and 2nd corner along the short and long sides, respectively. The sign of all dS are chosen in order to provide correct sign for the tilt angle (the same direction for all 2x1 sensors).
<dS/L> - the tilt angle of 2x1 averaged over two sides in radians.
angle(deg) - the same angle in degrees.
dD = D1 - D2
d(dS) = dS1 - dS2
d(dL) = dL1 - dL2
...
This quality check works well to catch significant typos in input table. In case of obvious typos input table can be corrected. When the quality check is passed successfully the alignment parameters are saved in deployed under the calib
directory as explained below.
Alignment of quads in the detector
For CSPad with fixed quad geometry (like in XPP) optical measurement of entire detector (should) produces complete information for geometry alignment.
For CSPad with moveable quads (like in CXI) quads relative position needs to be adjusted through the alignment parameters for quads. It is usually done using typical images with diffraction rings, wires or other shading objects:
Although few algorithms of automatic quad alignment were tried, we did not find good generic way for automated quad tuning. Currently, the quad tuning parameters in marg_gap_shift
and offset_corr
are adjusted manually for runs with specific images.
Alignment parameters
The official space for CSPad alignment parameters is
/reg/d/psdm/<INSTRUMENT>/<experiment>/calib/CsPad::Calib<VERSION>/<CSPad-name>/<type>/<run-range>.data
For example:
...
The file name consists of the run range followed by the .data
extension, for example, 0-end.data
, 11-end.data
, 47-52.data
, etc.
Description of types
All CSPAD geometry alignment parameters are split for 9 types:
...
All coordinates are defined in size of pixel, which is 109.92 x 109.92um² (and 274.80 x 109.92um² for two rows between two ASICs.) The quadrant size is pre-defined as 850x850. The margins, shifts and gaps are defined for these quads. The offset
and offset_corr
are defined for low-left angle of the rotated by n*90 degree quad. Size of entire CSPad image does not matter for this alignment.
center
Tail of the path: center/<run-range>.data
Parameters: x,y,z coordinates of 8 2x1 centers in 4 quads in pixels:
...
Code Block |
---|
199.14 198.05 310.67 98.22 629.71 629.68 711.87 499.32 198.52 198.08 311.50 98.69 627.27 627.27 712.35 499.77 198.32 198.04 310.53 97.43 626.68 628.45 710.86 498.01 198.26 198.04 308.70 96.42 627.66 628.04 711.12 498.25 308.25 95.11 625.60 625.70 515.02 727.37 198.53 199.30 307.18 95.08 622.98 623.51 514.99 727.35 199.27 198.94 307.68 95.09 623.95 625.29 512.32 724.63 198.04 200.35 307.39 95.12 627.57 626.65 518.03 730.95 200.02 199.70 0.31 0.12 0.05 0.12 0.28 0.24 0.40 0.27 0.45 0.36 0.62 0.33 1.02 0.92 1.30 1.07 0.23 0.22 0.11 0.15 0.24 0.20 0.60 0.42 0.25 0.21 0.12 0.10 0.35 0.28 0.66 0.40 |
center_corr
Tail of the path: center_corr/<run-range>.data
Parameters: x,y,z coordinate corrections of 8 2x1 centers in 4 quads in pixels:
...
Code Block |
---|
0 0 0 1 1 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 1 0 0 0 0 -1 0 -1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -1 -2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 |
offset
Tail of the path: offset/<run-range>.data
Parameters: x,y,z coordinates of 4 quad "origins" in CSPad pixel matrix:
...
Code Block |
---|
0 0 820 820 0 820 820 0 0 0 0 0 |
offset_corr
Tail of the path: offset_corr/<run-range>.data
Parameters: x,y,z coordinate corrections of 4 quad "origins" in CSPad pixel matrix:
...
Code Block |
---|
0 0 5 2 0 5 4 4 0 0 0 0 |
marg_gap_shift
Tail of the path: marg_gap_shift/<run-range>.data
Parameters:
...
Code Block |
---|
15 40 0 32 15 40 0 32 0 0 0 0 |
quad_rotation
Tail of the path: quad_rotation/<run-range>.data
Parameters: rotation angle of 4 quads in CSPad in n*90 degree:
...
Typical values:
Code Block |
---|
180 90 0 270 |
quad_tilt
Tail of the path: quad_tilt/<run-range>.data
Parameters: rotation angle correction (tilt) of 4 quads in CSPad in degree:
...
Typical values:
Code Block |
---|
0 0 0 0 |
rotation
Tail of the path: rotation/<run-range>.data
Parameters: rotation angle of 8 2x1 in 4 quads in n*90 degree:
...
Code Block |
---|
0 0 270 270 180 180 270 270 0 0 270 270 180 180 270 270 0 0 270 270 180 180 270 270 0 0 270 270 180 180 270 270 |
tilt
Tail of the path: tilt/<run-range>.data
Parameters: rotation angle correction (tilt) of 8 2x1 in 4 quads in degree:
...
Code Block |
---|
-0.33819 0.00132 0.31452 -0.03487 0.14738 0.07896 -0.21778 -0.10396 -0.27238 -0.00526 0.02545 0.03066 -0.03619 0.02434 0.08027 0.15067 -0.04803 -0.00592 0.11318 -0.07896 -0.36125 -0.31846 -0.16527 0.09200 0.12436 0.00263 0.44809 0.25794 -0.18029 -0.00117 0.32701 0.32439 |
Pixel coordinate reconstruction
The list of CSPad geometry alignment parameters is over-defined; different parameters can be used to get the same final effect on pixel coordinate. It is done intentionally in order to keep flexibility in the alignment stage.
...
Code Block |
---|
Xoffset_qi = XOffQ + xqi + dxqi + [-gapX+shiftX, -gapX-shiftX, +gapX-shiftX, +gapX+shiftX] Yoffset_qi = YOffQ + yqi + dyqi + [-gapY-shiftY, +gapY-shiftY, +gapY+shiftY, -gapY+shiftY] ... |
Software supporting CSPad geometry
There is a couple of packages which reconstruct CSPad pixel coordinates and images developed in C++ and python code;
- C++-based package: Psana Module Catalog.
- Python-based package: CSPad image producer in Python.
Other useful documents: - Description of C++ package supporting calibration types: Psana CSPad Geometry.
- Note about organization of the calibration database: CsPad calibration in translator.
References
Description of CSPAD layout from DAQ
CSPAD quad metrology
CSPad pixel layout in quads