Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Front and back side of the new detector epix10ka2m.1 from mfxc00118 2020-07-dd

Image AddedImage Added

2020-10-04 MEC epix10kaquad 0 at optical metrology

Image Added

2020-10-06 MEC epix10kaquad 0 front and back

Image AddedImage Added

2021-04-10 UED epix10kaquad

Image AddedImage Added

Comments on orientation of epix10ka2m parts from Matt

Code Block
title2018-1011-09 19 orientation schema
collapsetrue
Weaver, Matt 
Tue 10/92018-11-19, 37:0737 PMO'Grady, Paul Christopher;Dubrovin, Mikhail;Damiani, Daniel S.           

Hi Mikhail,
We took radioactive source test
Also, here'sruns sometoday descriptionto ofverify the nominal geometry. 
Pay closeWe attentionfound tothat thewe lastwere part that describes the positioning of 
ASICs within an "element".  I think this might be different than before.
-Matt

  //
  //   Hard code the array's geometry for now
  //
  //  (Epix10ka2m)
  //         |
  //  Quad 3 | Quad 0rotated by 90
 degrees, which matches the labeling on the back of the detector as well
 as the metrology picture from Chris Kenney. 
The runs are 
/reg/d/psdm/det/detdaq17/e968-r0131   - source unmasked (up to ~ event 10000), then masked vertically after ~ event 15000
/reg/d/psdm/det/detdaq17/e968-r0132   - source masked horizontally at bottom after ~ event 15000.

So, the picture is...
  //  (Epix10ka2m)
  //         |
  //  Quad 0 | Quad 1      Quad 12 is rotated  90d clockwise
  //  -------+--------     Quad 23 is rotated 180d clockwise
  //  Quad 23 | Quad 12      Quad 30 is rotated 270d clockwise
  //         |
  //
  //  (Quad 01)
  //         |
  //  Elem 0 | Elem 1
  //  -------+--------     No rotations
  //  Elem 2 | Elem 3
  //         |
  //
  //  (Elem 0)
  //         |
  //  ASIC 0 | ASIC 3
  //  -------+--------     No rotations
  //  ASIC 1 | ASIC 2
  //         |
Code Block
title2018-11-18 orientation schema
collapsetrue
Weaver, Matt 2018-11-18, 6:14 PMDubrovin, Mikhail;O'Grady, Paul Christopher
Here's the geometry I'm now using (below).  Note that pixel(0,0) 
for each of the elements below is in the lower right hand corner.
We'll know the quadrant layout for sure when we get the radioactive source exposure on Monday.
  //  (Epix10ka2m)
  //  //
  //  (Elem 0-3 pixel array)
  //                    row increasing
  //                          |^
  //  Quad 3 | Quad 0      Quad 1 is rotated  90d clockwise
  //  -------+--------     Quad 2 is rotated 180d clockwise|
  //  Quad 2 | Quad 1      Quad 3 is rotated 270d clockwise
  //         |
  //
  //column increasing (Quad<-- (0)
  //         |
  //  Elem 0 | Elem 1
  //  -------+--------     No rotations
  //  Elem 2 | Elem 3
  //         |
  //
The ASICs did not move. The change is that the (352,384) 
array has pixel (0,0) in the lower right hand corner (in ASIC2).
  //  (Elem 0)
  //         |
  //  ASIC 0 | ASIC 3
  //  -------+--------     No rotations
  //  ASIC 1 | ASIC 2
  //         |
  //
  //  (Elem 0-3 pixel array)
  //                    row increasing
  //                          ^
  //      ,0)

Preliminary geometry

in /reg/g/psdm/detector/data_test/calib/

Code Block
/reg/g/psdm/detector/data_test/calib/Epix10ka2M::CalibV1/NoDetector.0:Epix10ka2M.0/geometry/0-end.data @      (epix10ka2m - entire detector)
/reg/g/psdm/detector/data_test/calib/Epix10kaQuad::CalibV1/NoDetector.0:Epix10kaQuad.0/geometry/0-end.data @  (epix10kaquad - one quad)
/reg/g/psdm/detector/data_test/calib/Epix10ka::CalibV1/MecTargetChamber.0:Epix10ka.1/geometry/0-end.data @    (epix10ka - one panel)

copy of geometry files in alignment examples /reg/g/psdm/detector/alignment/

Code Block
/reg/g/psdm/detector/alignment/epix10ka2m/calib/Epix10ka2M::CalibV1/NoDetector.0:Epix10ka2M.0/geometry/0-end.data
/reg/g/psdm/detector/alignment/epix10kaquad/calib/Epix10kaQuad::CalibV1/NoDetector.0:Epix10kaQuad.0/geometry/0-end.data
/reg/g/psdm/detector/alignment/epix10ka/calib/Epix10ka::CalibV1/MecTargetChamber.0:Epix10ka.1/geometry/0-end.data

Image AddedImage AddedImage Added

Optical metrology processing

Scripts for processing

Code Block
CalibManager/app/
  optical_metrology_check
  optical_metrology_epix10ka2m

Results in

Code Block
/reg/g/psdm/detector/alignment/epix10ka2m/calib-mfx-epix10ka2m-01-2018-11-15/
  2018-11-15-Metrology-epix10ka2m.xlsx
  2018-11-15-Metrology-epix10ka2m.txt
  2018-11-15-Metrology-epix10ka2m-corr.txt
  2018-11-15-geometry-epix10ka2m.txt - geometry file accounting for optical metrology data
  README-2018-11-15

Image AddedImage Added

Gain

Code Block
titleGabriel's comments on gain factors
collapsetrue
Blaj, Gabriel 
2018-12-04, 2:08 PMO'Grady, Paul Christopher;Nelson, Silke;Dubrovin, Mikhail;Hart, Philip Adam                    |
  //                          |
  //  column increasing <-- (0,0)
Code Block
title2018-11-19 orientation schema
Weaver, Matt 
2018-11-19, 7:37 PMO'Grady, Paul Christopher;Dubrovin, Mikhail             

Hi Mikhail,
We took radioactive source test
 runs today to verify the geometry.  We found that we were rotated by 90
 degrees, which matches the labeling on the back of the detector as well
 as the metrology picture from Chris Kenney. 
The runs are 
/reg/d/psdm/det/detdaq17/e968-r0131   - source unmasked (up to ~ event 10000), then masked vertically after ~ event 15000
/reg/d/psdm/det/detdaq17/e968-r0132   - source masked horizontally at bottom after ~ event 15000.

So, the picture is...
  //  (Epix10ka2m)
  //         |
  //  Quad 0 | Quad 1      Quad 2 is rotated  90d clockwise
  //  -------+--------     Quad 3 is rotated 180d clockwise
  //  Quad 3 | Quad 2      Quad 0 is rotated 270d clockwise
  //         |
  //
  //  (Quad 1)
  //         |
  //  Elem 0 | Elem 1
  //  -------+--------     No rotations
  //  Elem 2 | Elem 3
  //         |
  //
  //  (Elem 0)
  //         |
  //  ASIC 0 | ASIC 3
  //  -------+--------     No rotations
  //  ASIC 1 | ASIC 2
  //         |
  //
  //  (Elem 0-3 pixel array)
  //                    row increasing
  //                          ^
  //                          |
  //                          |
  //  column increasing <-- (0,0)

Preliminary geometry

in /reg/g/psdm/detector/data_test/calib/

Code Block
/reg/g/psdm/detector/data_test/calib/Epix10ka2M::CalibV1/NoDetector.0:Epix10ka2M.0/geometry/0-end.data @      (epix10ka2m - entire detector)
/reg/g/psdm/detector/data_test/calib/Epix10kaQuad::CalibV1/NoDetector.0:Epix10kaQuad.0/geometry/0-end.data @  (epix10kaquad - one quad)
/reg/g/psdm/detector/data_test/calib/Epix10ka::CalibV1/MecTargetChamber.0:Epix10ka.1/geometry/0-end.data @    (epix10ka - one panel)

copy of geometry files in alignment examples /reg/g/psdm/detector/alignment/

Code Block
/reg/g/psdm/detector/alignment/epix10ka2m/calib/Epix10ka2M::CalibV1/NoDetector.0:Epix10ka2M.0/geometry/0-end.data
/reg/g/psdm/detector/alignment/epix10kaquad/calib/Epix10kaQuad::CalibV1/NoDetector.0:Epix10kaQuad.0/geometry/0-end.data
/reg/g/psdm/detector/alignment/epix10ka/calib/Epix10ka::CalibV1/MecTargetChamber.0:Epix10ka.1/geometry/0-end.data

Image RemovedImage RemovedImage Removed

Gain

Code Block
titleGabriel's comments on gain factors
collapsetrue
Blaj, Gabriel 
2018-12-04, 2:08 PMO'Grady, Paul Christopher;Nelson, Silke;Dubrovin, Mikhail;Hart, Philip Adam             

Hi, 
You could try to use the gain files obtained with the pulser. They are not great but might work.

For a better gain calibration, we should use single photon data. 
There is sufficient 1 photon data taken during the first testing at XCS,
but it will take me a few days to calculate the gains.

I would actually advocate returning the number of photons (as we 
discussed in a meeting a few months ago). Even without a calibration it 
can be easily calculated from the (average) gains:

High (FH and AHL): 132 ADU/9.5 keV
Medium (FM and AML): 43 ADU/9.5 keV
Low (FL, AHL, AML): 1.32 ADU/9.5 keV

(Just a note, while the pulser is not great for calibrating gains, it works fine for offset calibration)

Thanks,
Gabriel

Gain factors from charge injection default and measured

gaincharge injectioncurrent defaultmeasured (ADU / keV)
L0.460.010.139
M15. 0.3(3)4.5
H46.7113.9

Image Removed

Gain factors default vs charge injection

  • Detector/examples/ex_epix10ka_images.py
  • XcsEndstation.0:Epix10ka2M.0
  • charge injection gain factors were generated from exp=xcsx35617:run=544
  • data with water ring for comparison exp=xcsx35617:run=528
  • account relative factor 46.7
  • selected rect [6, 120:170, 200:250]

gain default: H / M / L = 1 / 0.33333 / 0.01

Image RemovedImage Removed

gain from charge injection:

Image RemovedImage Removed

constantsMeanRMSRMS / MEAN
default1117.762.720.05618
charge injection1177.566.790.05672

Conclusion: in this test charge injection gainci constants do not improve gain factors comparing to default

Test of the gain switching modes

 

offset calibration: exp=xcsx35617:run=544; its timestamp 20181129124822 faked with by reference from 20180101000000

dark runs: 413, 416, 417, 420 of xcsx35617

gain factors M, H=1, L= 0.2, 0.25, 0.3, 0.33333, 0.4

gain map images show that lateral and central-most pixels in mode H, M, "water ring" region pixels switched to L

data:

  • AML: exp=xcsx35617:run=419, ev3

Image RemovedImage RemovedImage RemovedImage RemovedImage RemovedImage Removed

  • AHL: exp=xcsx35617:run=414, ev3

Image RemovedImage RemovedImage RemovedImage RemovedImage RemovedImage Removed

 

 

Masks

mask_geo

mask_geo = det.mask_geo(par, mbits=3, width=10, wcentral=5)

  • mbits = 1 - masks edges, +2 - masks central rows and columns.
  • width - number of edge rows or columns to mask, def=1
  • wcentral - number of central rows or columns to mask, def=1

plot for mask_geo + 1:

Image Removed

status_as_mask

  • use pixel_status for exp=xcsx35617:run=544
  • mask_status = det.status_as_mask(par, mode=0, indexes=(0,1,2,3,4))
  • mode 0/1/2 masks zero/four/eight neighbors around each bad pixel
  • indexes=(0,1,2,3,4) # indexes stand for FH, FM, FL, AHL-H, AML-M, respectively. Derived modes have the same status arrays.

found number of bad pixels

  • 2802 for F gain modes and
  • 3253 for all F + A mode

plots for mask_status + 1 for mode=0, 1 and 2:

Image RemovedImage RemovedImage Removed

Combined mask

mask = det.mask(par, calib=False, status=True, edges=True, central=True, width=10, wcentral=5, mode=0)

Image Removed

Calibrated data and mask

Image and spectrum for

  • nda = calib_epix10ka_any(det, evt)
  • nda *=  det.mask(par, calib=False, status=True, edges=True, central=True, width=1, wcentral=1, mode=0)

 

Image RemovedImage Removed

Image RemovedImage Removed

 

References



Hi, 
You could try to use the gain files obtained with the pulser. They are not great but might work.

For a better gain calibration, we should use single photon data. 
There is sufficient 1 photon data taken during the first testing at XCS,
but it will take me a few days to calculate the gains.

I would actually advocate returning the number of photons (as we 
discussed in a meeting a few months ago). Even without a calibration it 
can be easily calculated from the (average) gains:

High (FH and AHL): 132 ADU/9.5 keV
Medium (FM and AML): 43 ADU/9.5 keV
Low (FL, AHL, AML): 1.32 ADU/9.5 keV

(Just a note, while the pulser is not great for calibrating gains, it works fine for offset calibration)

Thanks,
Gabriel

Gain factors from charge injection default and measured

gaincharge injectioncurrent defaultmeasured (ADU / keV)2020-08-03 Gabriel (ADU / keV) - use as default
L0.460.010.1390.164
M15. 0.3(3)4.55.466
H46.7113.916.40

Image Added

Gain factors default vs charge injection

  • Detector/examples/ex_epix10ka_images.py
  • XcsEndstation.0:Epix10ka2M.0
  • charge injection gain factors were generated from exp=xcsx35617:run=544
  • data with water ring for comparison exp=xcsx35617:run=528
  • account relative factor 46.7
  • selected rect [6, 120:170, 200:250]

gain default: H / M / L = 1 / 0.33333 / 0.01

Image AddedImage Added

gain from charge injection:

Image AddedImage Added

constantsMeanRMSRMS / MEAN
default1117.762.720.05618
charge injection1177.566.790.05672

Conclusion: in this test charge injection gainci constants do not improve gain factors comparing to default

Default gain correction factors

Code Block
title2020-08-03 Gabriel Blaj about ADU/keV default gain factors
collapsetrue
Blaj, Gabriel <blaj@slac.stanford.edu> Mon 8/3/2020 6:52 PM
To: Hart, Philip Adam;
 Dragone, Angelo;
 Kenney, Christopher J.;
 Dubrovin, Mikhail;
 O'Grady, Paul Christopher;
 Hansson, Conny;
 McKelvey, Mark E

Hi, Here are some good starting values for the ADC to keV conversion:

High gain: 132 ADU / 8.05 keV = 16.40 ADU/keV
Medium gain: 132 ADU / 8.05 keV / 3 = 5.466 ADU/keV
Low gain: 132 ADU / 8.05 keV / 100 = 0.164 ADU/keV

Of course, a gain calibration is preferable.
The same numbers work in both fixed and auto-ranging gain modes.
Thanks,
Gabriel

=========
Blaj, Gabriel <blaj@slac.stanford.edu> Mon 8/3/2020 7:13 PM

Hi, For the long integration time, I don't have a set of magic numbers, but this iterative procedure should yield optimal settings:

Cool the camera as low as possible, just a few degrees over the minimum temperature to allow temperature stabilization by the PID control loop (either the chiller PID for the large cameras, or the Peltier PID in the small cameras). Of course, the small cameras can be cooled much lower than the large ones.


Start with the default LCLS settings (I believe both AsicAcqWidth and R0toAcq are set to 100us by default)

0 AsicAcqWidth should be optimized for the experiment. With a very cold camera (e.g., < -15ºC) you could go to 5ms. A good starting value would be 1ms.

1 Set AsicAcqWidth to, e.g., 1 ms
2 Set R0toACQ time to 100us
3 Decrease frame rate until no frames are dropped
4 Set the X-ray source to a low flux (0.01-0.05 photons/pixel/frame?)
5 Try to get a uniform illumination
6 Repeat:
- Calibrate dark
- Take many frames and integrate them
- Look if the resulting image is uniform or has a strange sawtooth pattern over each ASIC
- If no, try reducing R0toACQ
- If yes, try increasing R0toAACQ
- Increase/decrease frame rate to the maximum frame rate that runs reliably (no dropped frames).
6 Until an optimum is found.

For an idea how the strange sawtooth pattern looks, you could try setting:
AsicAcqWidth = 1ms
 R0toAcq = 50us, or 20us.

Thanks,
Gabriel


Test of the gain switching modes

offset calibration: exp=xcsx35617:run=544; its timestamp 20181129124822 faked for earlier dark calibrations by reference from 20180101000000

dark runs: 413, 416, 417, 420 of xcsx35617

gain factors M, H=1, L= 0.2, 0.25, 0.3, 0.33333, 0.4

gain map images show that lateral and central-most pixels in mode H, M, "water ring" region pixels switched to L

data:

  • AML: exp=xcsx35617:run=419, event 3

Image AddedImage AddedImage AddedImage AddedImage AddedImage Added

  • AHL: exp=xcsx35617:run=414, event 3

Image AddedImage AddedImage AddedImage AddedImage AddedImage Added



Masks

mask_geo

mask_geo = det.mask_geo(par, mbits=3, width=10, wcentral=5)

  • mbits = 1 - masks edges, +2 - masks central rows and columns.
  • width - number of edge rows or columns to mask, def=1
  • wcentral - number of central rows or columns to mask, def=1

plot for mask_geo + 1:

Image Added

status_as_mask

  • use pixel_status for exp=xcsx35617:run=544
  • mask_status = det.status_as_mask(par, mode=0, indexes=(0,1,2,3,4))
  • mode 0/1/2 masks zero/four/eight neighbors around each bad pixel
  • indexes=(0,1,2,3,4) # indexes stand for FH, FM, FL, AHL-H, AML-M, respectively. Derived modes have the same status arrays.

found number of bad pixels

  • 2802 for F gain modes and
  • 3253 for all F + A mode

plots for mask_status + 1 for mode=0, 1 and 2:

Image AddedImage AddedImage Added

Combined mask

mask = det.mask(par, calib=False, status=True, edges=True, central=True, width=10, wcentral=5, mode=0)

Image Added

Calibrated data and mask

Image and spectrum for

  • nda = calib_epix10ka_any(det, evt)
  • nda *=  det.mask(par, calib=False, status=True, edges=True, central=True, width=1, wcentral=1, mode=0)


Image AddedImage Added

Image AddedImage Added


Manual alignment on 2019-05-06

Data

Ring-data (npy) arrays were provided for xcsx35617 run 400 by Silke, available under

  • /reg/g/psdm/detector/alignment/epix10ka2m/calib-mfx-epix10ka2m-01-2018-11-15/2019-05-06-geometry-alignment/

Alignment tool

Manual Detector alignment tool (geo) is used for alignment. There is no automated geometry optimization in this tool.

Initial geometry

Alignment is started with the best geometry file obtained after optical metrology measurements for two quads, like

/reg/g/psdm/detector/alignment/epix10ka2m/calib/Epix10ka2M::CalibV1/NoDetector.0:Epix10ka2M.0/geometry/geo-epix10ka2m-v180

or

/reg/d/psdm/xcs/xcsx35617/calib/Epix10ka2M::CalibV1/XcsEndstation.0:Epix10ka2M.0/geometry/398-398.data

Alignment procedure

Quads' x0,y0 - center positions ONLY have been tuned as explained here:

1) Q0 and Q1 were moved together relative to the image center, because their geometry is constrained from optical metrology.

2) then Q2 and Q3 were moved independently in order to get consistent "to my eye" image relative to a set of drown circles.

Geometry for panels inside Q2 and Q3 is set from design geometry, and I do not feel that could do better job moving panels in quad.

There are some regular alignment issues with this detector; if I tune nicely (with precision ~ pixel size) rings in the middle of radial range, 

then internal and external rings may be misaligned. This may be due to small tilt of the detector or non-accounted z position of panels 

w/o optical metrology.

Results

Resulting geometry for this data looks like on attached image.

Image Added

All files are available under 

  • /reg/g/psdm/detector/alignment/epix10ka2m/calib-mfx-epix10ka2m-01-2018-11-15/2019-05-06-geometry-alignment/

Recommendation for further geometry improvement

The only reliable procedure to get correct detector geometry is an 3-d optical metrology of entire detector.

After that one would need to adjust precisely 

1) detector center relative to image with rings

2) sample-to-detector distance

3) detector plane tilts.

References

...