Magnitude Systems

SNCosmo has facilities for converting synthetic model photometry to magnitudes in a variety of magnitude systems (or equivalently, scaling fluxes to a given zeropoint in a given magnitude system). For example, in the following code snippet, the string 'ab' specifies that we want magnitudes on the AB magnitude system:

>>> model.bandmag('desr', 'ab', [54990., 55000., 55020.])

The string 'ab' here refers to a built-in magnitude system ('vega' is another option). Behind the scenes magnitude systems are represented with MagSystem objects. As with Bandpass objects, most places in SNCosmo that require a magnitude system can take either the name of a magnitude system in the registry or an actual MagSystem instance. You can access these objects directly or create your own.

MagSystem objects represent the spectral flux density corresponding to magnitude zero in the given system and can be used to convert physical fluxes (in photons/s/cm^2) to magnitudes. Here’s an example:

>>> ab = sncosmo.get_magsystem('ab')
>>> ab.zpbandflux('sdssg')

This example gives the number of counts (in photons) when integrating the AB spectrum (which happens to be F_nu = 3631 Jansky at all wavelengths) through the SDSS g band. This works similarly for other magnitude systems:

>>> vega = sncosmo.get_magsystem('vega')
>>> vega.zpbandflux('sdssg')

You can see that the Vega spectrum is a bit brighter than the AB spectrum in this particular bandpass. Therefore, SDSS g magnitudes given in Vega will be larger than if given in AB.

There are convenience methods for converting an observed flux in a bandpass to a magnitude:

>>> ab.band_flux_to_mag(1., 'sdssg')
>>> ab.band_mag_to_flux(14.344175725172901, 'sdssg')

So, one count per second in this band is equivalent to an AB magnitude of about 14.34.

“Composite” magnitude systems

Sometimes, photometric data is reported in “magnitude systems” that don’t correspond directly to any spectrophotometric standard. One example is “SDSS magnitudes” which are like AB magnitudes but with an offset in each band. These are represented in SNCosmo with the CompositeMagSystem class. For example:

>>> magsys = sncosmo.CompositeMagSystem(bands={'sdssg': ('ab', 0.01),
...                                            'sdssr': ('ab', 0.02)})

This defines a new magnitude system that knows about only two bandpasses. In this magnitude system, an object with magnitude zero in AB would have a magntide of 0.01 in SDSS g and 0.02 in SDSS r. Indeed, you can see that the flux corresponding to magnitude zero is slightly higher in this magnitude system than in AB:

>>> magsys.zpbandflux('sdssr')

>>> ab.zpbandflux('sdssr')

Since we’ve only defined the offsets for this magnitude system in a couple bands, using other bandpasses results in an error:

>>> magsys.zpbandflux('bessellb')
ValueError: band not defined in composite magnitude system