11from typing import Any , Self , final
22
3- from astropy import coordinates
4- from astropy import units as u
5-
63from app .data .model import interface
7- from app .lib import astronomy
84
95
106@final
@@ -21,82 +17,15 @@ def __init__(
2117 self .e_ra = e_ra
2218 self .e_dec = e_dec
2319
24- @classmethod
25- def from_custom (
26- cls ,
27- ra : u .Quantity ,
28- dec : u .Quantity ,
29- e_ra : u .Quantity | None = None ,
30- e_dec : u .Quantity | None = None ,
31- ) -> Self :
32- if not interface .is_nan (ra ) and not interface .is_nan (dec ):
33- if ra .unit is not None :
34- ra_angle = coordinates .Angle (ra , unit = ra .unit )
35- else :
36- ra_angle = coordinates .Angle (ra )
37-
38- if dec .unit is not None :
39- dec_angle = coordinates .Angle (dec , unit = dec .unit )
40- else :
41- dec_angle = coordinates .Angle (dec )
42- else :
43- raise ValueError ("no ra or dec values" )
44-
45- if e_ra is None or e_dec is None :
46- raise ValueError ("no e_ra or e_dec specified" )
47-
48- coords = coordinates .ICRS (ra = ra_angle , dec = dec_angle )
49-
50- return cls (
51- astronomy .to (coords .ra , "deg" ),
52- astronomy .to (coords .dec , "deg" ),
53- astronomy .to (e_ra , "deg" ),
54- astronomy .to (e_dec , "deg" ),
55- )
56-
57- def layer0_data (self ) -> dict [str , Any ]:
58- return {
59- "ra" : self .ra ,
60- "dec" : self .dec ,
61- "e_ra" : self .e_ra ,
62- "e_dec" : self .e_dec ,
63- }
64-
6520 def __eq__ (self , value : object ) -> bool :
6621 if not isinstance (value , ICRSCatalogObject ):
6722 return False
6823
6924 return self .ra == value .ra and self .e_ra == value .e_ra and self .dec == value .dec and self .e_dec == value .e_dec
7025
71- @classmethod
72- def aggregate (cls , objects : list [Self ]) -> Self :
73- """
74- Aggregate coordinates are computed as the mean of all coordinates.
75- Errors are computed as the mean of all errors.
76- """
77- ras = [obj .ra for obj in objects ]
78- e_ras = [obj .e_ra for obj in objects ]
79- decs = [obj .dec for obj in objects ]
80- e_decs = [obj .e_dec for obj in objects ]
81-
82- ra = sum (ras ) / len (ras )
83- e_ra = sum (e_ras ) / len (e_ras )
84- dec = sum (decs ) / len (decs )
85- e_dec = sum (e_decs ) / len (e_decs )
86-
87- return cls (ra , dec , e_ra , e_dec )
88-
8926 def catalog (self ) -> interface .RawCatalog :
9027 return interface .RawCatalog .ICRS
9128
92- def layer1_data (self ) -> dict [str , Any ]:
93- return {
94- "ra" : self .ra ,
95- "dec" : self .dec ,
96- "e_ra" : self .e_ra ,
97- "e_dec" : self .e_dec ,
98- }
99-
10029 @classmethod
10130 def layer1_table (cls ) -> str :
10231 return "icrs.data"
0 commit comments