Difference_Image_Analysis
Difference_Image_Analysis
import requests
import builtins
import getpass
import time
import pandas as pd
# === 3. Override ztfquery's cookie retrieval using IRSA SSO with cookie login ===
from ztfquery import io as ztfio
ztfio.get_cookie = get_irsa_cookie_wrapper
# Force the account setup (bypassing the initial test)
ztfio.set_account("irsa", token_based=False, force=True)
def parse_obj_name(obj_name):
"""
Convert an object name in the form 'SMDGhhmmss+ddmmss' into RA and Dec (in
decimal degrees).
For example: "SMDG1230327+063157" → RA ≈188.86250°, Dec ≈6.53250°.
"""
if obj_name.startswith("SMDG"):
obj_name = obj_name[4:]
for i, ch in enumerate(obj_name):
if ch in ['+', '-']:
split_index = i
break
else:
raise ValueError("Invalid object name format; no '+' or '-' found.")
ra_str = obj_name[:split_index]
dec_str = obj_name[split_index:]
hrs = int(ra_str[0:2])
mins = int(ra_str[2:4])
secs = float(ra_str[4:])
ra_deg = (hrs + mins/60.0 + secs/3600.0) * 15.0
sign = 1 if dec_str[0] == '+' else -1
deg = int(dec_str[1:3])
mins_dec = int(dec_str[3:5])
secs_dec = int(dec_str[5:7])
dec_deg = sign * (deg + mins_dec/60.0 + secs_dec/3600.0)
return ra_deg, dec_deg
def clean_lightcurve_data(lc_data):
"""
Apply basic cleaning to the lightcurve data.
- Remove points with bad quality flags.
- Remove outliers (e.g., points with large magnitude errors).
"""
# Example: Remove points with bad quality flags (you can customize this)
lc_data = lc_data[lc_data["catflags"] == 0]
# Example: Remove outliers based on magnitude error (you can customize this)
lc_data = lc_data[lc_data["sigmamag"] < 0.1]
return lc_data
def main():
# === Set the base output folder on Desktop ===
desktop = os.path.join(os.path.expanduser("~"), "Desktop")
base_folder = os.path.join(desktop, "ZTF_Downloads")
os.makedirs(base_folder, exist_ok=True)
print(f"Base output folder: {base_folder}")
if not object_names:
print("No valid object names provided. Exiting.")
return
for obj_name in object_names:
process_object(obj_name, base_folder)
time.sleep(2) # Optional pause between objects.
if __name__ == "__main__":
main()