""" NikonD5Camera """
from .SatelliteCamera import SatelliteCamera
from .static_tles import static_tles
[docs]
class NikonD5Camera:
""" NikonD5Camera """
def __init__(self, tle=None, focal_length:float=50.0):
self._obs_time = None
self._attitude = None
# Example distortion (small or none actually)
self._bcc = SatelliteCamera.BrownConradyCoeffs(k1=0.0, k2=0.0, p1=0.0, p2=0.0, k3=0.0)
# The Nikon D5 features a 20.8-megapixel full-frame (FX-format) CMOS sensor, measuring approximately 35.9 x 23.9 mm.
# This high-performance sensor is designed for professional photography,
# offering a maximum resolution of 5568 x 3712 pixels and a native ISO range up to 102,400
# Define camera
self._sc = SatelliteCamera(
focal_length_mm=focal_length,
sensor_size_x_mm = 35.9, sensor_size_y_mm = 23.9,
nx=5568, ny=3712,
bcc=self._bcc
)
if tle is None:
# Define satellite orbit from TLE from a static set
tle = static_tles[0].as_array
# map SatelliteCamera() into this class (yes - there's a more pythonic way to do this)
self.now = self._sc.now
self.datetime = self._sc.datetime
self.adjust_by_seconds = self._sc.adjust_by_seconds
self.choose_attitude = self._sc.choose_attitude
self.pixel_to_radec = self._sc.pixel_to_radec
self.sensor_to_radec = self._sc.sensor_to_radec
self.radec_to_pixel = self._sc.radec_to_pixel
self.sat_lon_lat_alt = self._sc.sat_lon_lat_alt
self.sat_in_eclipse = self._sc.sat_in_eclipse
self.earth_center_vector = self._sc.earth_center_vector
self.earth_center_vector_icrs = self._sc.earth_center_vector_icrs
self.earth_center_radec_simple = self._sc.earth_center_radec_simple
self.earth_center_radec = self._sc.earth_center_radec
self.earth_angular_radius = self._sc.earth_angular_radius
self.camera_fov_intercept_earth = self._sc.camera_fov_intercept_earth
# set everything up
self.tle = tle
self.now()
self.choose_attitude('vv')
@property
def obs_time(self):
""" obs_time """
return self._sc.obs_time
@property
def camera(self):
""" camera """
return self._sc
@property
def tle(self):
""" tle """
return self._sc.tle
@tle.setter
def tle(self, value=None):
""" tle """
self._sc.tle = value
[docs]
def find_tle(self, satellite_name):
""" find_tle """
ii = 0
for t in static_tles:
if satellite_name == t.name:
break
ii += 1
if ii >= len(static_tles):
raise ValueError('%s not in satellites list' % (satellite_name))
self.tle = static_tles[ii].as_array
[docs]
def camera_fov_radec_box(self):
""" camera_fov_radec_box """
self._box = self._sc.camera_fov_radec_box()
ra_deg = [float(v) for v in self._box['polygon'].ra.value.tolist()]
dec_deg = [float(v) for v in self._box['polygon'].dec.value.tolist()]
return self._box, [ra_deg, dec_deg]
[docs]
def camera_fov_angular_width_height(self):
""" camera_fov_angular_width_height """
self._angular_width, self._angular_height = self._sc.camera_fov_angular_width_height()
self._solid_angle_steradians = self._sc.camera_fov_solid_angle()
return self._angular_width.degree, self._angular_height.degree, self._solid_angle_steradians
[docs]
def camera_fov_convex_hull(self):
""" camera_fov_convex_hull """
hull_coords, _ = self._sc.camera_fov_convex_hull(border_step=100)
return [[v.ra.degree for v in hull_coords], [v.dec.degree for v in hull_coords]]
[docs]
def camera_fov_border_vectors(self, border_step:int):
""" camera_fov_border_vectors """
polygon = self._sc.camera_fov_border_vectors(border_step=border_step)
return [(float(v.ra.value), float(v.dec.value)) for v in polygon]