Selecting Pixels#
The MeDDEA instrument is comprised of 4 individuals detectors each with 12 pixels for a total of 48 pixels.
Each detector has 8 large pixels and 4 small pixels.
It is frequently the case that it is necessary to consider sets of pixels.
For example, all large pixels on one detector or all small pixels across all detectors.
To faciliate this task, the PixelList is provided.
Each pixel is identified by its asic number, 0 to 3, and pixel number, 0 to 11.
>>> from padre_meddea.util import PixelList
We can create a PixelList in a variety of ways. First by just manually specifying each asic and pixel number pair:
>>> pixel_list = PixelList(asics=[0, 1], pixels=[0, 1])
>>> pixel_list
<PixelList length=2>
asic pixel channel id label
uint8 uint8 uint8 uint16 str11
----- ----- ------- ------ -----------
0 0 26 51738 Det0Pixel0L
1 1 15 51759 Det1Pixel1L
The channel column provides an internal specifier for how the detector identifies a pixel. The id column provides a unique identifier for each pixel and the label provides a human-readable string.
Note that this object is a subclass of a Table which means you can, for example, easily iterate over each element:
>>> asics = [this_pixel['asic'] for this_pixel in pixel_list]
>>> asics
[np.uint8(0), np.uint8(1)]
>>> pixels = pixel_list['pixel']
>>> pixels
<Column name='pixel' dtype='uint8' length=2>
0
1
This also works for just one pixel:
>>> pixel_list = PixelList(asics=[3], pixels=[11])
>>> pixel_list
<PixelList length=1>
asic pixel channel id label
uint8 uint8 uint8 uint16 str12
----- ----- ------- ------ ------------
3 11 3 51811 Det3Pixel11S
A few class methods make it easier to generate lists of pixels. For example, to get a list of all pixels:
>>> pixel_list = PixelList().all()
>>> pixel_list
<PixelList length=48>
asic pixel channel id label
uint8 uint8 uint8 uint16 str12
----- ----- ------- ------ ------------
0 0 26 51738 Det0Pixel0L
0 1 15 51727 Det0Pixel1L
0 2 8 51720 Det0Pixel2L
0 3 1 51713 Det0Pixel3L
0 4 29 51741 Det0Pixel4L
... ... ... ... ...
3 7 0 51808 Det3Pixel7L
3 8 30 51838 Det3Pixel8S
3 9 21 51829 Det3Pixel9S
3 10 11 51819 Det3Pixel10S
3 11 3 51811 Det3Pixel11S
You can also get a list of all large pixels or all small pixels:
>>> all_large = PixelList().all_large()
>>> print(len(all_large))
32
>>> all_small = PixelList().all_small()
>>> print(len(all_small))
16
It is also possible to get all large pixels or all small pixels from a set of asics:
>>> all_large_det0 = PixelList().all_large(asics=[0])
>>> print(len(all_large_det0))
8
>>> all_small_det1 = PixelList().all_small(asics=[1])
>>> all_small_det1
<PixelList length=4>
asic pixel channel id label
uint8 uint8 uint8 uint16 str12
----- ----- ------- ------ ------------
1 8 30 51774 Det1Pixel8S
1 9 21 51765 Det1Pixel9S
1 10 11 51755 Det1Pixel10S
1 11 3 51747 Det1Pixel11S
Finally, if given an existing pixel list, it is possible to select out a subset of pixels. This is most useful to select a subset of the pixels that are monitored through the summary spectrum data.
>>> from padre_meddea.spectrum.spectrum import DEFAULT_SPEC_PIXEL_LIST
>>> DEFAULT_SPEC_PIXEL_LIST.select_small()
<PixelList length=8>
asic pixel channel id label
uint8 uint8 uint8 uint16 str12
----- ----- ------- ------ ------------
0 9 21 51733 Det0Pixel9S
0 11 3 51715 Det0Pixel11S
1 9 21 51765 Det1Pixel9S
1 11 3 51747 Det1Pixel11S
2 9 21 51797 Det2Pixel9S
2 11 3 51779 Det2Pixel11S
3 9 21 51829 Det3Pixel9S
3 11 3 51811 Det3Pixel11S
Both the PhotonList and SpectrumList provide pixel_list attributes which give a list of all pixels in the data set.