Quadrant<->CCD<->FocalPlane#

The ZTF camera has three levels of data: 1. the focal plane, made of 16 CCDs 2. the CCDs that are made of 4 read-out channel, called quadrants 3. the quadrants.


Concept#

ztfimg objects and their connections#

The data and header access is made at the Quadrant level. A CCD object is a collection of quadrants, while the FocalPlaneis a collection of CCDs.

Under usual ztfquery file structure environment, it is easy to retrieve the filepath of various elements of the CCD or focal plane given a quadrant filename. For instance, given any quadrant filename, the from_single_filename() method of CCD and FocalPlane uses ztfquery to access the 3 missing quadrants to form a CCD or the 63 ones to form the FocalPlane.

Conversely, since CCD is a collection of Quadrant, their .quadrants attribute is a dictionary of Quadrant and the get_quadrant(qid) method provides an easy access to any of them. Similarly, FocalPlane have a .ccds attribute and get_ccd(ccdid) and get_quadrant(rcid) methods enable to access a given CCD or Quadrant object. Careful, the CCD method get_quadrant(qid) expects a qid (1->4) while the FocalPlane get_quadrant(rcid) methods expects a rcid (0->63).

To conserve the symmetry, a Quadrant object has a get_ccd() method that calls CCD.from_single_filename() using it’s own filename and a get_focalplane that does the same for FocalPlane ; a CCD also has a get_focalplane doing the same using its first quadrant’s filename.

Base, Raw and Science#

The aforementioned connections between Quadrant, CCD and FocalPlane hold for any kind of Images (Base, Raw or Science). A ScienceQuadrant will build a ScienceCCD and ScienceFocalPlane when calling get_ccd() or get_focalplane() and so on.

Careful with memory#

A FocalPlane is made of 64 quadrants and ScienceQuadrant are made of image + mask data. So loading a FocalPlane can blow up your RAM. It is thus suggested to use dask when working with FocalPlanes and make sure not to compute too large data on a single memory node ; data from FocalPlane ~5GB.


ScienceQuadrant -> ScienceCCD -> ScienceFocalPlane#

[1]:
import ztfimg
qimg = ztfimg.ScienceQuadrant.from_filename("ztf_20200924431759_000655_zr_c13_o_q3_sciimg.fits",
                                   as_path=False)
[2]:
qimg.filename
[2]:
'ztf_20200924431759_000655_zr_c13_o_q3_sciimg.fits'
[3]:
_ = qimg.show()
../_images/notebooks_quadrant_ccd_focalplane_4_0.png

Now let’s get its CCD.#

you have two ways: 1. The manual version using from_single_filename

[4]:
# use as_path=False to make sure it download the missing data
ccd = ztfimg.ScienceCCD.from_single_filename(qimg.filename, as_path=False)
  1. The shortcut get_ccd() method. (it does the manual version for you)

[5]:
ccd = qimg.get_ccd()

let’s have a look

[6]:
ccd.get_data()
[6]:
array([[ 44.91321  , 167.88715  , 206.81393  , ..., 174.49977  ,
        135.91026  ,  48.02796  ],
       [ 16.670918 ,  78.78005  , 138.10672  , ..., 152.18134  ,
        103.460335 ,  18.992094 ],
       [ 17.609827 ,  87.123825 , 152.8368   , ..., 166.77153  ,
        105.01655  ,  25.638815 ],
       ...,
       [  4.8058763,  49.65675  ,  99.17695  , ..., 149.64104  ,
         96.56672  ,  16.636278 ],
       [  8.345967 ,  48.599697 ,  96.20216  , ..., 151.22047  ,
        100.14231  ,  20.201305 ],
       [  8.68024  ,  56.990013 , 116.7488   , ..., 162.11705  ,
        126.70934  ,  30.59527  ]], dtype=float32)
[7]:
ccd.filenames
[7]:
['ztf_20200924431759_000655_zr_c13_o_q1_sciimg.fits',
 'ztf_20200924431759_000655_zr_c13_o_q2_sciimg.fits',
 'ztf_20200924431759_000655_zr_c13_o_q3_sciimg.fits',
 'ztf_20200924431759_000655_zr_c13_o_q4_sciimg.fits']
[8]:
_ = ccd.show()
../_images/notebooks_quadrant_ccd_focalplane_12_0.png
[9]:
ccd.quadrants
[9]:
{1: <ztfimg.science.ScienceQuadrant at 0x15a8faeb0>,
 2: <ztfimg.science.ScienceQuadrant at 0x15a918070>,
 3: <ztfimg.science.ScienceQuadrant at 0x15a95ccd0>,
 4: <ztfimg.science.ScienceQuadrant at 0x15a91dc10>}

Now let’s get the FocalPlane#

We will use dask to manage the RAM.

[11]:
import dask
from dask.distributed import Client
client = Client()

As for quadrant->ccd, the manual loading exists as well as the shortcut get_focalplane() method ; let’s use this one

[12]:
# you could have used qimg.get_focalplane(use_dask=True), it is strictly equivalent
fp = ccd.get_focalplane(use_dask=True)
[13]:
fp.filenames
[13]:
['ztf_20200924431759_000655_zr_c01_o_q1_sciimg.fits',
 'ztf_20200924431759_000655_zr_c01_o_q2_sciimg.fits',
 'ztf_20200924431759_000655_zr_c01_o_q3_sciimg.fits',
 'ztf_20200924431759_000655_zr_c01_o_q4_sciimg.fits',
 'ztf_20200924431759_000655_zr_c02_o_q1_sciimg.fits',
 'ztf_20200924431759_000655_zr_c02_o_q2_sciimg.fits',
 'ztf_20200924431759_000655_zr_c02_o_q3_sciimg.fits',
 'ztf_20200924431759_000655_zr_c02_o_q4_sciimg.fits',
 'ztf_20200924431759_000655_zr_c03_o_q1_sciimg.fits',
 'ztf_20200924431759_000655_zr_c03_o_q2_sciimg.fits',
 'ztf_20200924431759_000655_zr_c03_o_q3_sciimg.fits',
 'ztf_20200924431759_000655_zr_c03_o_q4_sciimg.fits',
 'ztf_20200924431759_000655_zr_c04_o_q1_sciimg.fits',
 'ztf_20200924431759_000655_zr_c04_o_q2_sciimg.fits',
 'ztf_20200924431759_000655_zr_c04_o_q3_sciimg.fits',
 'ztf_20200924431759_000655_zr_c04_o_q4_sciimg.fits',
 'ztf_20200924431759_000655_zr_c05_o_q1_sciimg.fits',
 'ztf_20200924431759_000655_zr_c05_o_q2_sciimg.fits',
 'ztf_20200924431759_000655_zr_c05_o_q3_sciimg.fits',
 'ztf_20200924431759_000655_zr_c05_o_q4_sciimg.fits',
 'ztf_20200924431759_000655_zr_c06_o_q1_sciimg.fits',
 'ztf_20200924431759_000655_zr_c06_o_q2_sciimg.fits',
 'ztf_20200924431759_000655_zr_c06_o_q3_sciimg.fits',
 'ztf_20200924431759_000655_zr_c06_o_q4_sciimg.fits',
 'ztf_20200924431759_000655_zr_c07_o_q1_sciimg.fits',
 'ztf_20200924431759_000655_zr_c07_o_q2_sciimg.fits',
 'ztf_20200924431759_000655_zr_c07_o_q3_sciimg.fits',
 'ztf_20200924431759_000655_zr_c07_o_q4_sciimg.fits',
 'ztf_20200924431759_000655_zr_c08_o_q1_sciimg.fits',
 'ztf_20200924431759_000655_zr_c08_o_q2_sciimg.fits',
 'ztf_20200924431759_000655_zr_c08_o_q3_sciimg.fits',
 'ztf_20200924431759_000655_zr_c08_o_q4_sciimg.fits',
 'ztf_20200924431759_000655_zr_c09_o_q1_sciimg.fits',
 'ztf_20200924431759_000655_zr_c09_o_q2_sciimg.fits',
 'ztf_20200924431759_000655_zr_c09_o_q3_sciimg.fits',
 'ztf_20200924431759_000655_zr_c09_o_q4_sciimg.fits',
 'ztf_20200924431759_000655_zr_c10_o_q1_sciimg.fits',
 'ztf_20200924431759_000655_zr_c10_o_q2_sciimg.fits',
 'ztf_20200924431759_000655_zr_c10_o_q3_sciimg.fits',
 'ztf_20200924431759_000655_zr_c10_o_q4_sciimg.fits',
 'ztf_20200924431759_000655_zr_c11_o_q1_sciimg.fits',
 'ztf_20200924431759_000655_zr_c11_o_q2_sciimg.fits',
 'ztf_20200924431759_000655_zr_c11_o_q3_sciimg.fits',
 'ztf_20200924431759_000655_zr_c11_o_q4_sciimg.fits',
 'ztf_20200924431759_000655_zr_c12_o_q1_sciimg.fits',
 'ztf_20200924431759_000655_zr_c12_o_q2_sciimg.fits',
 'ztf_20200924431759_000655_zr_c12_o_q3_sciimg.fits',
 'ztf_20200924431759_000655_zr_c12_o_q4_sciimg.fits',
 'ztf_20200924431759_000655_zr_c13_o_q1_sciimg.fits',
 'ztf_20200924431759_000655_zr_c13_o_q2_sciimg.fits',
 'ztf_20200924431759_000655_zr_c13_o_q3_sciimg.fits',
 'ztf_20200924431759_000655_zr_c13_o_q4_sciimg.fits',
 'ztf_20200924431759_000655_zr_c14_o_q1_sciimg.fits',
 'ztf_20200924431759_000655_zr_c14_o_q2_sciimg.fits',
 'ztf_20200924431759_000655_zr_c14_o_q3_sciimg.fits',
 'ztf_20200924431759_000655_zr_c14_o_q4_sciimg.fits',
 'ztf_20200924431759_000655_zr_c15_o_q1_sciimg.fits',
 'ztf_20200924431759_000655_zr_c15_o_q2_sciimg.fits',
 'ztf_20200924431759_000655_zr_c15_o_q3_sciimg.fits',
 'ztf_20200924431759_000655_zr_c15_o_q4_sciimg.fits',
 'ztf_20200924431759_000655_zr_c16_o_q1_sciimg.fits',
 'ztf_20200924431759_000655_zr_c16_o_q2_sciimg.fits',
 'ztf_20200924431759_000655_zr_c16_o_q3_sciimg.fits',
 'ztf_20200924431759_000655_zr_c16_o_q4_sciimg.fits']
[15]:
fp.filepaths
[15]:
[Delayed('get_file-657d2953-f9c9-4dcc-ae85-e7a0e6516f83'),
 Delayed('get_file-45ffca97-7ec6-40c4-bfec-f99a015cf5ff'),
 Delayed('get_file-3beb5d3a-1a64-4fe0-9a57-d8237bd25143'),
 Delayed('get_file-fc42b1a2-e149-425c-ad8c-e8aa9684fb24'),
 Delayed('get_file-11873e8d-dfce-4918-934b-2a2e5fddd9ae'),
 Delayed('get_file-a9651282-db69-4d15-9c12-f0bc816d033b'),
 Delayed('get_file-5855294b-05f6-491c-b527-a9d7109227e0'),
 Delayed('get_file-2ad08299-fa64-4876-8edd-d0d34aeb0b6c'),
 Delayed('get_file-0cec1c8f-e79a-493f-bca5-7904847a5071'),
 Delayed('get_file-f48f8550-f367-4932-9961-4002c7bb2639'),
 Delayed('get_file-73b16f11-49fa-404d-9137-4109a74fbe5d'),
 Delayed('get_file-76081508-cfe5-45e7-b359-44c5cadc7280'),
 Delayed('get_file-8b71a591-393d-4777-b266-2b287c727151'),
 Delayed('get_file-9b3c7454-c4f0-4e62-9c34-5f397da0327f'),
 Delayed('get_file-0a38b821-c929-428c-8a39-e9e37cd085ee'),
 Delayed('get_file-8897271c-5e50-4dd6-b964-3fd29376fabf'),
 Delayed('get_file-af4c563a-9ea9-44a6-87d0-f440c1a7c093'),
 Delayed('get_file-b2a0671b-4c3c-44fa-a415-d01bf9ce5e96'),
 Delayed('get_file-3c339013-d444-43f7-ae51-e4d6460f582a'),
 Delayed('get_file-8eb061d2-87a1-43f6-8465-e301489edf35'),
 Delayed('get_file-614f199c-ea95-458d-b97f-520a557db8ed'),
 Delayed('get_file-c0bbcc44-51ef-434f-b018-cfcab8b818fb'),
 Delayed('get_file-bbc123a8-ce9b-4f94-bd1a-337d51587400'),
 Delayed('get_file-d76abd68-3ec4-4ce9-83f0-f97e68fa2683'),
 Delayed('get_file-aa4d972d-a488-41f5-8c6a-b4c1dea9be32'),
 Delayed('get_file-3ecd4e55-72f3-411d-8c73-8a844897524b'),
 Delayed('get_file-283cb9e7-7794-4b19-9f73-eaebd73ef562'),
 Delayed('get_file-7a122018-3a3a-4e68-88f5-0c00e48a6fad'),
 Delayed('get_file-1ae06a90-7bea-484e-b54b-1907165f547e'),
 Delayed('get_file-ded70144-cba1-45d9-8cb2-1cdc4031601e'),
 Delayed('get_file-d239a565-abe2-4d96-9221-4bfdfe3ba434'),
 Delayed('get_file-db491b66-205b-40fa-87b5-b07395293cca'),
 Delayed('get_file-626effd8-3612-404e-be40-bfc4fc7fab0f'),
 Delayed('get_file-b67e42ba-9a2f-4a6b-84b5-21e901dfaf72'),
 Delayed('get_file-b1e0f498-02bc-49fc-a5fe-dc932bbeee9d'),
 Delayed('get_file-1508a5be-3d7d-48a4-b3d9-2ee21991495e'),
 Delayed('get_file-60aa82ef-73c0-4c58-85a0-7b54d1247925'),
 Delayed('get_file-c13aa5ec-3598-4739-a969-1ea161916f9b'),
 Delayed('get_file-5577e14f-0374-40dd-aaf9-7fe0ea0b240c'),
 Delayed('get_file-8362c889-972c-4aa8-b4b2-9ede2e656470'),
 Delayed('get_file-1a18bc0c-5e82-4fe9-82f5-9dea7ce7c704'),
 Delayed('get_file-ea46cc53-a03c-4afc-9fb7-f9f70b73eb56'),
 Delayed('get_file-93af4095-d127-441d-9d6c-bc63ee6a9911'),
 Delayed('get_file-85736668-f390-4bf2-8450-85fe12e533e4'),
 Delayed('get_file-a541012b-a019-4aed-9258-d801255b008d'),
 Delayed('get_file-594a480e-e7e6-4ee5-9eb4-6624ee1f097d'),
 Delayed('get_file-9e2f1cc3-033e-44f1-8f31-3899660b12fe'),
 Delayed('get_file-e135d34d-2cab-4ab8-8e1b-56cff0cc4e45'),
 Delayed('get_file-baccc4f8-66e9-444c-97ae-ef68d854b223'),
 Delayed('get_file-5f39ab43-5d92-4fff-b76b-0d5286799772'),
 Delayed('get_file-f34aabe2-a1fb-44d9-94cd-dcac10ddef45'),
 Delayed('get_file-76271fba-24e3-4d97-afe0-124492da76ff'),
 Delayed('get_file-c61aaf4b-6176-44a0-9b72-5d2a20ee5f9d'),
 Delayed('get_file-f59fb19a-ff87-4742-a0a0-8b166dc332c2'),
 Delayed('get_file-dec3578b-7015-407b-8c38-07798304d765'),
 Delayed('get_file-dfc6c87c-ab01-4c94-b720-af258d7bac97'),
 Delayed('get_file-95620861-eae5-4fab-9d64-96e05d009538'),
 Delayed('get_file-25f0dd8c-cddc-4a00-86eb-519dc7b05662'),
 Delayed('get_file-631cbda5-a515-49c8-a777-3a83ead0c3ca'),
 Delayed('get_file-294762a3-738c-47a0-bff6-c6a1fea10126'),
 Delayed('get_file-37298179-4b58-4294-baf4-8f7d775fb719'),
 Delayed('get_file-3c18a153-27d3-4be6-a181-e12e318355f1'),
 Delayed('get_file-8dbb14cb-2520-48db-b351-869580cf6770'),
 Delayed('get_file-01239a3d-0086-4710-b428-5035497b00be')]
[16]:
fp.get_data()
[16]:
Array Chunk
Bytes 5.17 GiB 72.19 MiB
Shape (26656, 26040) (3080, 3072)
Dask graph 132 chunks in 415 graph layers
Data type float64 numpy.ndarray
26040 26656

tip: the rebin option averages the pixels N by N. It fastens a lot plotting (and reduce the local RAM usage) for quick look. N must be a multiple of the array shape, so 2, 4, 8, 16 works well

[17]:
_ = fp.show(rebin=2) # check you localhost:8787
../_images/notebooks_quadrant_ccd_focalplane_22_0.png

In the other direction#

Let’s get the quadrant 1 of the CCD.

[18]:
q1 = ccd.get_quadrant(1)
[19]:
_ = q1.show()
../_images/notebooks_quadrant_ccd_focalplane_25_0.png

The CCD 11 from the FocalPlane

[20]:
ccd11 = fp.get_ccd(11)

Remark that, since fp is dasked, ccd11 will also be.

[21]:
ccd11.get_data()
[21]:
Array Chunk
Bytes 144.38 MiB 36.09 MiB
Shape (6160, 6144) (3080, 3072)
Dask graph 4 chunks in 24 graph layers
Data type float32 numpy.ndarray
6144 6160
[22]:
_ = ccd11.show()
../_images/notebooks_quadrant_ccd_focalplane_30_0.png

Or any quadrant from the FocalPlane (rcid)

[23]:
q35 = fp.get_quadrant(35)
[24]:
_ = q35.show()
../_images/notebooks_quadrant_ccd_focalplane_33_0.png

call_quadrants() and call_ccds()#

The call methods from CCD and FocalPlane enables you to access information from lower structure of the camera. You can request any attribute or value accessible from the quadrant.get_value() (e.g. any header info) or you can call any method

[25]:
import ztfimg
qimg = ztfimg.ScienceQuadrant.from_filename("ztf_20200924431759_000655_zr_c13_o_q2_sciimg.fits",
                                   as_path=False)
[26]:
ccdimg = qimg.get_ccd()
[27]:
fpimg = qimg.get_focalplane()

For instance, let’s get the filenames for all the quadrants of the focalplane

[28]:
fpimg.call_quadrants("filename")
[28]:
['ztf_20200924431759_000655_zr_c01_o_q1_sciimg.fits',
 'ztf_20200924431759_000655_zr_c01_o_q2_sciimg.fits',
 'ztf_20200924431759_000655_zr_c01_o_q3_sciimg.fits',
 'ztf_20200924431759_000655_zr_c01_o_q4_sciimg.fits',
 'ztf_20200924431759_000655_zr_c02_o_q1_sciimg.fits',
 'ztf_20200924431759_000655_zr_c02_o_q2_sciimg.fits',
 'ztf_20200924431759_000655_zr_c02_o_q3_sciimg.fits',
 'ztf_20200924431759_000655_zr_c02_o_q4_sciimg.fits',
 'ztf_20200924431759_000655_zr_c03_o_q1_sciimg.fits',
 'ztf_20200924431759_000655_zr_c03_o_q2_sciimg.fits',
 'ztf_20200924431759_000655_zr_c03_o_q3_sciimg.fits',
 'ztf_20200924431759_000655_zr_c03_o_q4_sciimg.fits',
 'ztf_20200924431759_000655_zr_c04_o_q1_sciimg.fits',
 'ztf_20200924431759_000655_zr_c04_o_q2_sciimg.fits',
 'ztf_20200924431759_000655_zr_c04_o_q3_sciimg.fits',
 'ztf_20200924431759_000655_zr_c04_o_q4_sciimg.fits',
 'ztf_20200924431759_000655_zr_c05_o_q1_sciimg.fits',
 'ztf_20200924431759_000655_zr_c05_o_q2_sciimg.fits',
 'ztf_20200924431759_000655_zr_c05_o_q3_sciimg.fits',
 'ztf_20200924431759_000655_zr_c05_o_q4_sciimg.fits',
 'ztf_20200924431759_000655_zr_c06_o_q1_sciimg.fits',
 'ztf_20200924431759_000655_zr_c06_o_q2_sciimg.fits',
 'ztf_20200924431759_000655_zr_c06_o_q3_sciimg.fits',
 'ztf_20200924431759_000655_zr_c06_o_q4_sciimg.fits',
 'ztf_20200924431759_000655_zr_c07_o_q1_sciimg.fits',
 'ztf_20200924431759_000655_zr_c07_o_q2_sciimg.fits',
 'ztf_20200924431759_000655_zr_c07_o_q3_sciimg.fits',
 'ztf_20200924431759_000655_zr_c07_o_q4_sciimg.fits',
 'ztf_20200924431759_000655_zr_c08_o_q1_sciimg.fits',
 'ztf_20200924431759_000655_zr_c08_o_q2_sciimg.fits',
 'ztf_20200924431759_000655_zr_c08_o_q3_sciimg.fits',
 'ztf_20200924431759_000655_zr_c08_o_q4_sciimg.fits',
 'ztf_20200924431759_000655_zr_c09_o_q1_sciimg.fits',
 'ztf_20200924431759_000655_zr_c09_o_q2_sciimg.fits',
 'ztf_20200924431759_000655_zr_c09_o_q3_sciimg.fits',
 'ztf_20200924431759_000655_zr_c09_o_q4_sciimg.fits',
 'ztf_20200924431759_000655_zr_c10_o_q1_sciimg.fits',
 'ztf_20200924431759_000655_zr_c10_o_q2_sciimg.fits',
 'ztf_20200924431759_000655_zr_c10_o_q3_sciimg.fits',
 'ztf_20200924431759_000655_zr_c10_o_q4_sciimg.fits',
 'ztf_20200924431759_000655_zr_c11_o_q1_sciimg.fits',
 'ztf_20200924431759_000655_zr_c11_o_q2_sciimg.fits',
 'ztf_20200924431759_000655_zr_c11_o_q3_sciimg.fits',
 'ztf_20200924431759_000655_zr_c11_o_q4_sciimg.fits',
 'ztf_20200924431759_000655_zr_c12_o_q1_sciimg.fits',
 'ztf_20200924431759_000655_zr_c12_o_q2_sciimg.fits',
 'ztf_20200924431759_000655_zr_c12_o_q3_sciimg.fits',
 'ztf_20200924431759_000655_zr_c12_o_q4_sciimg.fits',
 'ztf_20200924431759_000655_zr_c13_o_q1_sciimg.fits',
 'ztf_20200924431759_000655_zr_c13_o_q2_sciimg.fits',
 'ztf_20200924431759_000655_zr_c13_o_q3_sciimg.fits',
 'ztf_20200924431759_000655_zr_c13_o_q4_sciimg.fits',
 'ztf_20200924431759_000655_zr_c14_o_q1_sciimg.fits',
 'ztf_20200924431759_000655_zr_c14_o_q2_sciimg.fits',
 'ztf_20200924431759_000655_zr_c14_o_q3_sciimg.fits',
 'ztf_20200924431759_000655_zr_c14_o_q4_sciimg.fits',
 'ztf_20200924431759_000655_zr_c15_o_q1_sciimg.fits',
 'ztf_20200924431759_000655_zr_c15_o_q2_sciimg.fits',
 'ztf_20200924431759_000655_zr_c15_o_q3_sciimg.fits',
 'ztf_20200924431759_000655_zr_c15_o_q4_sciimg.fits',
 'ztf_20200924431759_000655_zr_c16_o_q1_sciimg.fits',
 'ztf_20200924431759_000655_zr_c16_o_q2_sciimg.fits',
 'ztf_20200924431759_000655_zr_c16_o_q3_sciimg.fits',
 'ztf_20200924431759_000655_zr_c16_o_q4_sciimg.fits']

or the ccd corners. For that, let’s do call the ccd.get_corners() for each ccd using the system="uv" coordinates

[29]:
fpimg.call_ccds("get_corners", system="uv") #
[29]:
[array([[  7067.34041081, -13502.04719811],
        [ 13309.79781952, -13515.64724439],
        [ 13298.39604336,  -7248.73250961],
        [  7059.87779398,  -7240.51503095]]),
 array([[   388.10620559, -13532.09609067],
        [  6615.31027541, -13522.77866295],
        [  6593.72925773,  -7262.55203405],
        [   369.65335949,  -7274.79442487]]),
 array([[ -6301.48767828, -13537.95441246],
        [   -70.04811123, -13526.6149072 ],
        [   -77.33489454,  -7276.59090507],
        [ -6312.10277268,  -7276.63279551]]),
 array([[-13014.60885732, -13571.39913118],
        [ -6770.02986563, -13545.52926273],
        [ -6776.53309594,  -7287.87360575],
        [-13009.27267564,  -7301.34020039]]),
 array([[ 7075.05560694, -6591.8297521 ],
        [13300.48198996, -6592.11264198],
        [13285.84049177,  -343.37946812],
        [ 7050.12738922,  -357.6507713 ]]),
 array([[  355.34540863, -6617.35827238],
        [ 6589.02145272, -6605.31199652],
        [ 6574.36054339,  -368.64895186],
        [  344.25451176,  -385.63662582]]),
 array([[-6314.73162673, -6632.66789925],
        [  -80.62461412, -6601.57542213],
        [  -99.11568209,  -367.81939275],
        [-6325.22886579,  -392.5002264 ]]),
 array([[-13022.86708719,  -6660.37707634],
        [ -6775.14802673,  -6625.80345438],
        [ -6799.56509017,   -387.18498194],
        [-13037.04680462,   -412.85740682]]),
 array([[ 7053.7195673 ,   302.07845426],
        [13283.2526598 ,   307.64184152],
        [13272.32870116,  6555.51608974],
        [ 7035.95159325,  6533.54262528]]),
 array([[ 351.93437657,  293.468065  ],
        [6574.35132883,  304.10904049],
        [6561.23879352, 6541.64216778],
        [ 335.35932361, 6526.66519896]]),
 array([[-6318.33271353,   272.38057569],
        [  -90.23993915,   289.34559533],
        [ -103.51204085,  6527.54920891],
        [-6331.81909487,  6511.76028913]]),
 array([[-13006.13636759,    254.63442537],
        [ -6774.64962982,    279.3244236 ],
        [ -6800.49199335,   6517.30237249],
        [-13035.74827151,   6498.86056034]]),
 array([[ 7033.05326618,  7197.76885685],
        [13272.59253377,  7206.67239239],
        [13277.16547546, 13473.78824559],
        [ 7032.04394056, 13452.28201071]]),
 array([[  327.68576312,  7169.16855789],
        [ 6558.31210412,  7176.06994093],
        [ 6570.0278753 , 13435.24900315],
        [  336.08303977, 13432.99220619]]),
 array([[-6324.08242476,  7144.19526151],
        [  -92.73511963,  7181.18914295],
        [ -123.63305766, 13436.00988258],
        [-6356.070396  , 13406.97491262]]),
 array([[-13030.67709453,   7163.62063296],
        [ -6800.3913949 ,   7167.53626199],
        [ -6819.40818311,  13419.89144566],
        [-13071.20837163,  13417.25255853]])]

ZTF Camera structure#

the ztffields package (https://ztffields.readthedocs.io/) enables you to quickly see the structure of the ztfcamera

[30]:
import ztffields
_ = ztffields.show_ztf_footprint()
../_images/notebooks_quadrant_ccd_focalplane_43_0.png
2023-03-10 12:34:10,545 - distributed.nanny - WARNING - Restarting worker
2023-03-10 12:34:10,556 - distributed.nanny - WARNING - Restarting worker
2023-03-10 12:34:10,560 - distributed.nanny - WARNING - Restarting worker
2023-03-10 12:34:10,562 - distributed.nanny - WARNING - Restarting worker
2023-03-10 12:34:10,570 - distributed.nanny - WARNING - Restarting worker
2023-03-10 12:34:10,652 - distributed.nanny - WARNING - Restarting worker
2023-03-10 12:34:10,654 - distributed.nanny - WARNING - Restarting worker
2023-03-10 12:34:10,655 - distributed.nanny - WARNING - Restarting worker
2023-03-10 12:34:10,662 - distributed.nanny - WARNING - Restarting worker
2023-03-10 12:34:10,674 - distributed.nanny - WARNING - Restarting worker
2023-03-10 12:34:10,962 - distributed.nanny - WARNING - Restarting worker
2023-03-10 12:34:10,963 - distributed.nanny - WARNING - Restarting worker
2023-03-10 12:34:10,965 - distributed.nanny - WARNING - Restarting worker
2023-03-10 12:34:10,965 - distributed.nanny - WARNING - Restarting worker
2023-03-10 12:34:10,975 - distributed.nanny - WARNING - Restarting worker
2023-03-10 12:34:11,258 - distributed.diskutils - INFO - Found stale lock file and directory '/var/folders/kt/dnsb_cyx445cbz2ht_3l2m6w00029p/T/dask-worker-space/worker-mljhf877', purging
2023-03-10 12:34:11,258 - distributed.diskutils - INFO - Found stale lock file and directory '/var/folders/kt/dnsb_cyx445cbz2ht_3l2m6w00029p/T/dask-worker-space/worker-voesqsw8', purging
2023-03-10 12:34:11,258 - distributed.diskutils - INFO - Found stale lock file and directory '/var/folders/kt/dnsb_cyx445cbz2ht_3l2m6w00029p/T/dask-worker-space/worker-zp3lg_ma', purging
2023-03-10 12:34:11,993 - distributed.nanny - WARNING - Restarting worker
2023-03-10 12:34:11,994 - distributed.nanny - WARNING - Restarting worker
2023-03-10 12:34:12,004 - distributed.nanny - WARNING - Restarting worker
2023-03-10 12:34:12,006 - distributed.nanny - WARNING - Restarting worker
2023-03-10 12:34:12,014 - distributed.nanny - WARNING - Restarting worker

Blod numbers are ccdid, white number are rcid and colors are qid (0:blue, 1:orange, 2:green, 3:red)