Sensors¶
Base classes¶
- class Sensor[source]¶
Bases:
objectBase class to represent a generic sensor.
- Parameters:
name (str) – Human-readable name identifying the sensor.
- class LineScanner[source]¶
Bases:
SensorA pushbroom or whiskbroom line scanning imager.
Line scanners capture one cross-track line of pixels per frame, building up an image as the aircraft moves along-track.
- Parameters:
- swath_width(altitude_agl)[source]¶
Calculate swath width (m) for a given altitude above ground level.
- ground_sample_distance(altitude_agl, mode='nadir')[source]¶
Calculate the ground sample distance (GSD) for a given altitude above ground level.
- altitude_agl_for_ground_sample_distance(gsd, mode='nadir')[source]¶
Calculate the required altitude AGL for a given ground sample distance (GSD).
- critical_ground_speed(altitude_agl, along_track_sampling=1.0)[source]¶
Calculate the maximum allowable aircraft ground speed (m/s) to maintain proper along-track sampling.
- Parameters:
altitude_agl (Quantity) – Altitude above ground level in meters.
along_track_sampling (float) – The oversampling factor (default = 1.0).
- Returns:
Maximum allowable ground speed in meters per second.
- Return type:
Quantity
Line scanners¶
- class AVIRISClassic[source]¶
Bases:
LineScanner
- class AVIRISNextGen[source]¶
Bases:
LineScanner
- class AVIRIS3[source]¶
Bases:
LineScanner
- class AVIRIS4[source]¶
Bases:
LineScanner
- class HyTES[source]¶
Bases:
LineScanner
- class PRISM[source]¶
Bases:
LineScanner
- class MASTER[source]¶
Bases:
LineScanner
- class GLiHT_VNIR[source]¶
Bases:
LineScanner
- class GLiHT_Thermal[source]¶
Bases:
LineScanner
- class GLiHT_SIF[source]¶
Bases:
LineScanner
- class GCAS_UV_Vis[source]¶
Bases:
LineScanner
- class GCAS_VNIR[source]¶
Bases:
LineScanner
- class eMAS[source]¶
Bases:
LineScanner
- class PICARD[source]¶
Bases:
LineScanner
LVIS lidar¶
LVIS (Land, Vegetation, and Ice Sensor) airborne lidar.
Models the LVIS full-waveform scanning lidar for use with HyPlan’s flight planning tools (swath polygons, flight box generation, etc.).
The scanner geometry defines a maximum swath as a fixed fraction of altitude (±5.7 deg half-scan angle). Whether that full swath achieves contiguous ground coverage depends on the laser repetition rate, lens divergence (footprint size), and aircraft speed.
Formulas derived from NASA GSFC LVIS coverage planning spreadsheet (LVIScoveragecalcs-GVBioSCape.xlsx).
- class LVISLens[source]¶
Bases:
objectLVIS lens option defined by its beam divergence.
- class LVIS[source]¶
Bases:
SensorLVIS full-waveform airborne scanning lidar.
Provides the standard Sensor interface (half_angle, swath_width) so that LVIS works with generate_swath_polygon, generate_flight_lines, and other HyPlan tools. The swath_width returned is the geometric maximum; use effective_swath_width to account for contiguous-coverage constraints.
All altitude parameters expect AGL (above ground level).
- Parameters:
- swath_width(altitude_agl)[source]¶
Maximum swath width set by the scanner geometry.
This is the geometric limit: 2 * altitude_agl * tan(half_angle). Equivalent to 0.2 * altitude_agl.
Used by generate_swath_polygon and generate_flight_lines for swath polygon generation and line spacing.
- effective_fov(altitude_agl, speed)[source]¶
Effective field of view in degrees, accounting for contiguous coverage.
When the laser footprint can fill the full scanner swath, this equals the geometric max FOV (≈11.42°). When coverage is limited, the effective FOV narrows: 2 * atan(effective_swath / (2 * altitude)).
- footprint_diameter(altitude_agl)[source]¶
Laser footprint diameter on the ground for the configured lens.
footprint = tan(divergence_mrad / 1000) * altitude_agl
- coverage_rate(altitude_agl, speed)[source]¶
Area coverage rate at maximum swath.
coverage_rate = speed * max_swath
- footprint_for_max_swath(altitude_agl, speed)[source]¶
Minimum footprint diameter needed to fill the max swath contiguously.
footprint = sqrt(speed * max_swath / rep_rate)
- effective_swath_width(altitude_agl, speed)[source]¶
Achievable swath width accounting for contiguous coverage.
The effective swath is the minimum of: - the scanner’s max swath (geometric limit), and - footprint^2 * rep_rate / speed (contiguous-coverage limit)
When the footprint is too small relative to the flight speed, shots cannot tile the full max swath without gaps, and the effective swath narrows.
- is_contiguous(altitude_agl, speed)[source]¶
Check whether the current configuration fills the max swath.
Returns True if the footprint is large enough to tile the full scanner swath at the given speed.
- summary(altitude_agl, speed)[source]¶
Compute all LVIS coverage parameters for a given flight configuration.
Radar¶
- class SidelookingRadar[source]¶
Bases:
SensorRepresents a side-looking Synthetic Aperture Radar (SAR).
Models the slant-range geometry where the swath is offset from nadir, defined by near-range and far-range incidence angles. Supports stripmap SAR instruments like UAVSAR.
The swath lies entirely on one side of the flight track (typically left).
- __init__(name, frequency, bandwidth, near_range_angle, far_range_angle, azimuth_resolution, polarization, look_direction='left', peak_power=None, antenna_length=None)[source]¶
- property half_angle: float¶
Effective half-angle for swath calculations.
For a side-looking radar this is the angular extent from the swath center to either edge, i.e. half the angular swath width.
- swath_width(altitude_agl)[source]¶
Ground swath width for a given altitude AGL.
Computed from the difference in ground range at near and far incidence angles.
- ground_range_resolution(altitude_agl, incidence_angle=None)[source]¶
Ground-range resolution at a given incidence angle.
ground_range_res = slant_range_res / sin(incidence_angle)
- ground_sample_distance(altitude_agl)[source]¶
Ground sample distance at near range, center, and far range.
- slant_range(altitude_agl, incidence_angle=None)[source]¶
Slant range distance to target at given incidence angle.
- swath_offset_angles()[source]¶
Return the (port_angle, starboard_angle) for swath polygon generation.
For a left-looking radar, the swath is on the left (port) side. For a right-looking radar, the swath is on the right (starboard) side.
- Return type:
- Returns:
Tuple of (near_side_angle, far_side_angle) where the sign convention matches swath.py: port = left of track, starboard = right of track.
- class UAVSAR_Lband[source]¶
Bases:
SidelookingRadarNASA/JPL UAVSAR L-band fully polarimetric SAR.
Platform: Gulfstream III (C-20A) Typical altitude: ~12,500 m (41,000 ft)
- class UAVSAR_Pband[source]¶
Bases:
SidelookingRadarNASA/JPL UAVSAR P-band SAR (AirMOSS configuration).
Platform: Gulfstream III (C-20A) Typical altitude: ~12,500 m (41,000 ft)
- class UAVSAR_Kaband[source]¶
Bases:
SidelookingRadarNASA/JPL GLISTIN-A Ka-band single-pass cross-track interferometric SAR.
Platform: Gulfstream III (C-20A) Typical altitude: ~12,500 m (41,000 ft)
Frame camera¶
- class FrameCamera[source]¶
Bases:
SensorA frame (area-array) camera sensor.
Unlike line scanners, frame cameras capture a full 2D image per frame. The footprint is determined by both horizontal and vertical fields of view.
- Parameters:
name (str) – Sensor name.
sensor_width (Quantity) – Physical sensor width in mm.
sensor_height (Quantity) – Physical sensor height in mm.
focal_length (Quantity) – Lens focal length in mm.
resolution_x (int) – Number of pixels across-track (horizontal).
resolution_y (int) – Number of pixels along-track (vertical).
frame_rate (Quantity) – Frame acquisition rate in Hz.
f_speed (float) – Lens f-number (focal length / aperture diameter).
- __init__(name, sensor_width, sensor_height, focal_length, resolution_x, resolution_y, frame_rate, f_speed)[source]¶
- ground_sample_distance(altitude_agl)[source]¶
Calculate the ground sample distance (GSD) at nadir for a given altitude AGL.
- Parameters:
altitude_agl (Quantity) – Altitude above ground level in meters.
- Returns:
Ground sample distances in meters for both x (across-track) and y (along-track).
- Return type:
Dict[str, Quantity]
- altitude_agl_for_ground_sample_distance(gsd_x, gsd_y)[source]¶
Calculate the required altitude AGL for a given ground sample distance (GSD) at nadir.
- Parameters:
gsd_x (Quantity) – Desired ground sample distance in meters along the x-axis (across-track).
gsd_y (Quantity) – Desired ground sample distance in meters along the y-axis (along-track).
- Returns:
The required altitude AGL in meters.
- Return type:
Quantity
- footprint_at(altitude_agl)[source]¶
Calculate the footprint dimensions (m) for a given altitude AGL.
- critical_ground_speed(altitude_agl)[source]¶
Calculate the maximum ground speed (m/s) to maintain proper along-track sampling.
- Parameters:
altitude_agl (Quantity) – Altitude above ground level in meters.
- Returns:
Maximum allowable ground speed in meters per second.
- Return type:
Quantity
- static footprint_corners(lat, lon, altitude_msl, fov_x, fov_y, dem_file)[source]¶
Calculate the lat/lon/elevation of the four corners of a FrameCamera’s ground footprint.
- Parameters:
lat (
float) – Latitude of the FrameCamera in degrees.lon (
float) – Longitude of the FrameCamera in degrees.altitude_msl (
float) – Altitude MSL of the FrameCamera in meters.fov_x (
float) – Horizontal Field of View (FoV) of the camera in degrees.fov_y (
float) – Vertical Field of View (FoV) of the camera in degrees.dem_file (
str) – Path to the DEM file for terrain elevation data.
- Return type:
- Returns:
List of four (lat, lon, elevation) tuples for each corner.
Factory function¶
- create_sensor(sensor_type)[source]¶
Factory function to create and return an instance of a sensor.
- Parameters:
sensor_type (str) – The name of the sensor class to instantiate. Must be one of the keys in SENSOR_REGISTRY.
- Returns:
An instance of the requested sensor type.
- Return type:
- Raises:
ValueError – If the specified sensor_type is not found in SENSOR_REGISTRY.