Skip to content

Commit 2985f46

Browse files
cfis module added
1 parent 671181f commit 2985f46

4 files changed

Lines changed: 218 additions & 2 deletions

File tree

cs_util/cat.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
55
:Description: This script contains methods to read and write galaxy catalogues.
66
7-
:Author: Martin Kilbinger
7+
:Author: Martin Kilbinger <martin.kilbinger@cea.fr>
88
99
"""
1010

cs_util/cfis.py

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
"""CFIS.
2+
3+
:Name: cfis.py
4+
5+
:Description: This script contains CFIS-specific methods.
6+
7+
:Author: Martin Kilbinger <martin.kilbinger@cea.fr>
8+
9+
"""
10+
11+
12+
import re
13+
import numpy as np
14+
from astropy import units
15+
from astropy import coordinates as coords
16+
17+
18+
class Cfis(object):
19+
"""Cfis
20+
21+
Class for CFIS image properties.
22+
23+
"""
24+
size = {'tile' : 0.5 * units.deg}
25+
26+
27+
def get_tile_number(tile_name):
28+
"""Get Tile Number.
29+
30+
Return tile number of given image tile name.
31+
32+
Parameters
33+
----------
34+
str
35+
tile name
36+
37+
Raises
38+
------
39+
ValueError
40+
if tile name does not match expected pipeline numbering scheme
41+
42+
Returns
43+
-------
44+
tuple
45+
tile number for x and tile number for y
46+
47+
"""
48+
m = re.search(r'(\d{3})[\.-](\d{3})', tile_name)
49+
if m is None or len(m.groups()) != 2:
50+
raise ValueError(
51+
f'Image name \'{tile_name}\' does not match tile name syntax'
52+
)
53+
54+
nix = m.groups()[0]
55+
niy = m.groups()[1]
56+
57+
return nix, niy
58+
59+
60+
def get_tile_coord_from_nixy(nix, niy):
61+
"""Get Tile Coord From Nixy.
62+
63+
Return coordinates corresponding to tile with number (nix,niy).
64+
65+
Parameters
66+
----------
67+
nix : str or int
68+
tile number for x, can be list
69+
niy : str or int
70+
tile number for y, can be list
71+
72+
See also
73+
--------
74+
get_tile_number_from_coord
75+
76+
Returns
77+
-------
78+
tuple
79+
right ascension and declination
80+
81+
"""
82+
if not np.isscalar(nix):
83+
# Transform to int
84+
xi = np.array(nix).astype(int)
85+
yi = np.array(niy).astype(int)
86+
else:
87+
xi = int(nix)
88+
yi = int(niy)
89+
90+
# Declination
91+
d = yi / 2 - 90
92+
dec = coords.Angle(d, unit='deg')
93+
94+
# Right ascension
95+
r = xi / 2 / np.cos(dec.radian)
96+
ra = coords.Angle(r, unit='deg')
97+
98+
return ra, dec

cs_util/tests/test_cfis.py

Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
# -*- coding: utf-8 -*-
2+
3+
"""UNIT TESTS FOR CFIS SUBPACKAGE.
4+
5+
This module contains unit tests for the cfis subpackage.
6+
7+
"""
8+
9+
import os
10+
11+
import numpy as np
12+
from numpy import testing as npt
13+
from astropy import units
14+
15+
from unittest import TestCase
16+
17+
from cs_util import cfis
18+
19+
20+
class CfisTestCase(TestCase):
21+
"""Test case for the ``cfis`` module."""
22+
23+
def setUp(self):
24+
"""Set test parameter values."""
25+
26+
self._size_tile = 0.5 * units.deg
27+
28+
self._tile_number_ok = ['270.283', '188-308']
29+
self._nix = ['270', '188']
30+
self._niy = ['283', '308']
31+
self._dec = [51.5, 64]
32+
self._ra = [216.86237, 214.43017]
33+
self._unit = units.deg
34+
35+
self._tile_number_nok = '12x.456'
36+
37+
def tearDown(self):
38+
"""Unset test parameter values."""
39+
self._tile_number_ok = None
40+
self._nix = None
41+
self._niy = None
42+
self._dec = None
43+
self._ra = None
44+
self._unit = None
45+
self._tile_number_nok = None
46+
47+
def test_Cfis(self):
48+
"""Test ``cs_util.Cfis`` class.
49+
50+
"""
51+
self.assertTrue(self._size_tile == cfis.Cfis().size['tile'])
52+
53+
def test_get_tile_number(self):
54+
"""Test ``cs_util.get_tile_number`` method.
55+
56+
"""
57+
58+
# Test return values for valid input tile numbers
59+
for idx, tile_number_ok in enumerate(self._tile_number_ok):
60+
nix, niy = cfis.get_tile_number(tile_number_ok)
61+
self.assertTrue(
62+
(nix == self._nix[idx]) and (niy == self._niy[idx]),
63+
msg=f'{nix}!={self._nix[idx]} or {niy}!={self._niy[idx]}',
64+
)
65+
66+
self.assertRaises(
67+
ValueError,
68+
cfis.get_tile_number,
69+
self._tile_number_nok
70+
)
71+
72+
def test_get_tile_coord_from_nixy(self):
73+
"""Test ``cs_util.get_tile_coord_from_nixy`` method.
74+
75+
"""
76+
77+
# Call with scalar arguments
78+
for idx in range(len(self._nix)):
79+
ra, dec = cfis.get_tile_coord_from_nixy(
80+
self._nix[idx],
81+
self._niy[idx],
82+
)
83+
84+
# Test values
85+
npt.assert_almost_equal(
86+
ra.value,
87+
self._ra[idx],
88+
err_msg=f'{ra}!={self._ra[idx]}',
89+
decimal=5,
90+
)
91+
npt.assert_almost_equal(
92+
dec.value,
93+
self._dec[idx],
94+
err_msg=f'{dec}!={self._dec[idx]}',
95+
)
96+
97+
# Test units
98+
self.assertTrue(ra.unit == self._unit)
99+
self.assertTrue(dec.unit == self._unit)
100+
101+
# Call with list arguments
102+
ra, dec = cfis.get_tile_coord_from_nixy(self._nix, self._niy)
103+
for idx in range(len(self._nix)):
104+
105+
# Test values
106+
npt.assert_almost_equal(
107+
ra[idx].value,
108+
self._ra[idx],
109+
err_msg=f'{ra[idx]}!={self._ra[idx]}',
110+
decimal=5,
111+
)
112+
npt.assert_almost_equal(
113+
dec[idx].value,
114+
self._dec[idx],
115+
err_msg=f'{dec[idx]}!={self._dec[idx]}',
116+
)
117+
# Test units
118+
self.assertTrue(ra[idx].unit == self._unit)
119+
self.assertTrue(dec[idx].unit == self._unit)

requirements.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
astropy
22
datetime
3-
jinja2==3.0
43
numpy
54
matplotlib
65
vos

0 commit comments

Comments
 (0)