Skip to content

Commit

Permalink
Issue/14/all targets (#16)
Browse files Browse the repository at this point in the history
* fix ssoft columns names

* all good

* fix import ssptools

* add aspect_angle_extrema method

* add H extrem to phase plot

* add possibilities to save plot, add new plots

* pep8 requirements

* refactoring and backward compatibility with old version of matplotlib for the notebook 2_compare_models.ipynb

* merge conflict

---------

Co-authored-by: JulienPeloton <[email protected]>
  • Loading branch information
FusRoman and JulienPeloton authored Aug 9, 2023
1 parent e3ea7ca commit 005e5fa
Show file tree
Hide file tree
Showing 8 changed files with 2,847 additions and 1,929 deletions.
74 changes: 59 additions & 15 deletions fink_spins/model.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,20 @@ class Model(ABC):
data_fink = "../"
# ZTF Colors and Colors
colors = ["#15284F", "#F5622E"]
__dict_band = {"g": 1, "r": 2}
dict_band = {"g": 1, "r": 2}

def __init__(self, band: str, target: str) -> None:
def __init__(self, band: str, target: str = None) -> None:
self.data = pd.read_parquet(f"{Model.data_fink}data/ztf/sso_ZTF.parquet")
self.target = target
self.reset_filter(band)
self.reset_target(self.target)
if target is not None:
self.reset_target(self.target)

def reset_target(self, target):
if target is None:
raise Exception(
f"target is None, use 'reset_target' to set a target for this model {self}"
)
# Get ZTF observations
r = requests.post(
"https://fink-portal.org/api/v1/sso",
Expand All @@ -46,7 +51,7 @@ def reset_target(self, target):

def reset_filter(self, band):
self.filter = band
self.int_filter = Model.__dict_band[self.filter]
self.int_filter = Model.dict_band[self.filter]

# From apparent magnitude to unit distance
def dist_reduction(d_obs, d_sun):
Expand Down Expand Up @@ -75,14 +80,23 @@ def residuals(self):
cond = self.ztf["i:fid"] == self.int_filter
return self.ztf.loc[cond, "i:magpsf"] - self.mag_dist_ztf()

def get_chi2red(self):
return self.data.loc[
self.data.ssnamenr == self.target, f"{self.model_name}_chi2red"
].values[0]


class HG(Model):
def __init__(self, band: str, target: str = None) -> None:
super().__init__(band, target)
self.model_name = "HG"

def get_data_model(self):
H = self.data.loc[
self.data.ssnamenr == self.target, "HG_H_{}".format(self.filter)
self.data.ssnamenr == self.target, f"{self.model_name}_H_{self.filter}"
].values[0]
G = self.data.loc[
self.data.ssnamenr == self.target, "HG_G_{}".format(self.filter)
self.data.ssnamenr == self.target, f"{self.model_name}_G_{self.filter}"
].values[0]
return H, G

Expand All @@ -92,15 +106,19 @@ def mag_model(self, x):


class HG1G2(Model):
def __init__(self, band: str, target: str = None) -> None:
super().__init__(band, target)
self.model_name = "HG1G2"

def get_data_model(self):
H = self.data.loc[
self.data.ssnamenr == self.target, "HG1G2_H_{}".format(self.filter)
self.data.ssnamenr == self.target, f"{self.model_name}_H_{self.filter}"
].values[0]
G1 = self.data.loc[
self.data.ssnamenr == self.target, "HG1G2_G1_{}".format(self.filter)
self.data.ssnamenr == self.target, f"{self.model_name}_G1_{self.filter}"
].values[0]
G2 = self.data.loc[
self.data.ssnamenr == self.target, "HG1G2_G2_{}".format(self.filter)
self.data.ssnamenr == self.target, f"{self.model_name}_G2_{self.filter}"
].values[0]
return H, G1, G2

Expand All @@ -110,19 +128,29 @@ def mag_model(self, x):


class sHG1G2(Model):
def __init__(self, band: str, target: str = None) -> None:
super().__init__(band, target)
self.model_name = "sHG1G2"

def get_data_model(self):
H = self.data.loc[
self.data.ssnamenr == self.target, f"sHG1G2_H_{self.filter}"
self.data.ssnamenr == self.target, f"{self.model_name}_H_{self.filter}"
].values[0]
G1 = self.data.loc[
self.data.ssnamenr == self.target, f"sHG1G2_G1_{self.filter}"
self.data.ssnamenr == self.target, f"{self.model_name}_G1_{self.filter}"
].values[0]
G2 = self.data.loc[
self.data.ssnamenr == self.target, f"sHG1G2_G2_{self.filter}"
self.data.ssnamenr == self.target, f"{self.model_name}_G2_{self.filter}"
].values[0]
sRA = self.data.loc[
self.data.ssnamenr == self.target, f"{self.model_name}_RA0"
].values[0]
sDEC = self.data.loc[
self.data.ssnamenr == self.target, f"{self.model_name}_DEC0"
].values[0]
R = self.data.loc[
self.data.ssnamenr == self.target, f"{self.model_name}_R"
].values[0]
sRA = self.data.loc[self.data.ssnamenr == self.target, "sHG1G2_RA0"].values[0]
sDEC = self.data.loc[self.data.ssnamenr == self.target, "sHG1G2_DEC0"].values[0]
R = self.data.loc[self.data.ssnamenr == self.target, "sHG1G2_R"].values[0]
return H, G1, G2, sRA, sDEC, R

def pha_eph(self):
Expand Down Expand Up @@ -172,3 +200,19 @@ def mag_dist_ztf(self):

def mag_dist_eph(self):
return self.mag_dist(self.pha_eph(), (self.eph["Dobs"], self.eph["Dhelio"]))

def aspect_angle_extrema(self):
ph = np.radians(self.eph.Phase)
H, G1, G2, sRA, sDEC, R = self.get_data_model()
g = finkus.func_hg1g2(ph, H, G1, G2)

coords_eph = SkyCoord(self.eph.RA, self.eph.DEC, unit=(u.hourangle, u.deg))
cosL = finkus.spin_angle(
coords_eph.ra.radian,
coords_eph.dec.radian,
np.radians(sRA),
np.radians(sDEC),
)
s = 2.5 * np.log10(1 - (1 - R) * np.abs(cosL))

return g + np.min(s), g + np.max(s)
Loading

0 comments on commit 005e5fa

Please sign in to comment.