from siderust import (
Observer,
Star,
above_threshold,
below_threshold,
intersect_periods,
)
def main():
print("Star observability: altitude + azimuth constraints\n")
observer = Observer.roque_de_los_muchachos()
target = Star.catalog("Sirius")
t_0 = 60000.0
window_start = t_0
window_end = t_0 + 1.0
min_alt = 25.0
max_alt = 65.0
above_min = above_threshold(target, observer, window_start, window_end, min_alt)
below_max = below_threshold(target, observer, window_start, window_end, max_alt)
altitude_periods = intersect_periods(above_min, below_max)
min_az = 110.0
max_az = 220.0
print(f"Observer: {observer}")
print(f"Target: {target.name}")
print(f"Window: MJD {window_start:.1f} -> {window_end:.1f}\n")
print(f"Altitude range: {min_alt}°..{max_alt}°")
print(f"Azimuth range: {min_az}°..{max_az}°\n")
print(f"Altitude-constrained periods: {len(altitude_periods)}")
for idx, (start, end) in enumerate(altitude_periods):
hours = (end - start) * 24.0
print(f" {idx + 1}. MJD {start:.6f} -> {end:.6f} ({hours:.2f} h)")
total_hours = sum((end - start) * 24.0 for start, end in altitude_periods)
print(f"\nTotal time in altitude range: {total_hours:.2f} h")
if __name__ == "__main__":
main()