[docs]classStar(Fittable,Logger,Writeable,Citable):"""A base class that holds information on the star in the model. Its implementation is a star that has a blackbody spectrum. """def__init__(self,temperature:t.Optional[float]=5000,radius:t.Optional[float]=1.0,distance:t.Optional[float]=1,magnitudeK:t.Optional[float]=10.0,# noqa: N803mass:t.Optional[float]=1.0,metallicity:t.Optional[float]=1.0,):"""Initialize a star. Parameters ---------- temperature: float, optional Stellar temperature in Kelvin radius: float, optional Stellar radius in Solar radius metallicity: float, optional Metallicity in solar values mass: float, optional Stellar mass in solar mass distance: float, optional Distance from Earth in pc magnitudeK: float, optional Maginitude in K band """Logger.__init__(self,self.__class__.__name__)Fittable.__init__(self)self._temperature=temperatureself._radius=radius*RSOLself._mass=mass*MSOLself.debug("Star mass %s",self._mass)self.sed=Noneself.distance=distanceself.magnitudeK=magnitudeKself._metallicity=metallicity@propertydefradius(self)->float:"""Radius in metres."""returnself._radius@propertydeftemperature(self)->float:"""Blackbody temperature in Kelvin."""returnself._temperature@temperature.setterdeftemperature(self,value:float)->None:"""Set blackbody temperature in Kelvin."""self._temperature=value@propertydefmass(self)->float:"""Mass in kg."""returnself._mass@fitparam(param_name="distance",param_latex="$distance$",default_fit=False,default_bounds=[1,22],)defdistanceSystem(self)->float:"""Distance from Earth to the System (in pc)."""returnself.distance@distanceSystem.setterdefdistanceSystem(self,value:float)->None:"""Set distance from Earth to System (in pc)."""self.distance=value
[docs]definitialize(self,wngrid:npt.NDArray[np.float64])->None:"""Initializes the blackbody spectrum on the given wavenumber grid Parameters ---------- wngrid: :obj:`array` Wavenumber grid cm-1 to compute black body spectrum """self.sed=black_body(wngrid,self.temperature)
@propertydefspectralEmissionDensity(self)->npt.NDArray[np.float64]:# noqa: N802"""Spectral emmision density in W/m2/cm-1/sr."""returnself.sed
[docs]defwrite(self,output:OutputGroup)->OutputGroup:"""Write to output group."""star=output.create_group("Star")star.write_string("star_type",self.__class__.__name__)star.write_scalar("temperature",self.temperature)star.write_scalar("radius",self._radius/RSOL)star.write_scalar("distance",self.distance)star.write_scalar("mass",self._mass/MSOL)star.write_scalar("magnitudeK",self.magnitudeK)star.write_scalar("metallicity",self._metallicity)star.write_scalar("radius_m",self.radius)star.write_array("SED",self.spectralEmissionDensity)star.write_scalar("mass_kg",self._mass)returnstar
[docs]@classmethoddefinput_keywords(cls)->t.Tuple[str,...]:"""Input keywords for star."""raiseNotImplementedError
[docs]classBlackbodyStar(Star):"""Alias for the base star type"""