Exemple #1
0
import numpy
import pylab
import lsst.sims.catalogs.measures.photometry.Sed as Sed
import lsst.sims.catalogs.measures.photometry.Bandpass as Bandpass
import os

# read filters
filterdir = os.getenv("LSST_THROUGHPUTS_DEFAULT")
filterlist = ('u', 'g', 'r', 'i', 'z', 'y')
lsst = {}
for f in filterlist:
    lsst[f] = Bandpass()
    lsst[f].readThroughput(os.path.join(filterdir, "total_" + f + ".dat"))

# read base quasar sed
qso = Sed()
qso.readSED_flambda("quasar.dat")

# set redshift range
redshifts = numpy.arange(0, 6, 0.2)

# set up quasar seds for this redshift range
qsoz = {}
for z in redshifts:
    qsoz[z] = Sed(qso.wavelen, flambda=qso.flambda)
    qsoz[z].redshiftSED(z, dimming=True)
    qsoz[z].flambdaTofnu()

# calculate colors
mags = {}
for f in filterlist:
Exemple #2
0
filterdict = {'u': 0, 'g': 1, 'r': 2, 'i': 3, 'z': 4, 'y': 5}
rootdir = os.getenv("LSST_THROUGHPUTS_BASELINE")
lsst = {}
for f in filterlist:
    lsst[f] = Bandpass()
    lsst[f].readThroughput(rootdir + "/total_" + f + ".dat")
imsimband = Bandpass()
imsimband.imsimBandpass()

# set up colors of objects in all bandpasses
rootdir_sed = "."
sedlist = ('S.dat', 'C.dat')
simobjs = {}
simmags = {}
for sed in sedlist:
    simobjs[sed] = Sed()
    simobjs[sed].readSED_flambda(rootdir_sed + sed)
    simmags[sed] = {}
    for filter in filterlist:
        simmags[sed][filter] = simobjs[sed].calcMag(lsst[filter])
    simmags[sed]['ims'] = simobjs[sed].calcMag(imsimband)

# open and read file containing obshistids (key to catalog and to opsim)
infile = 'obsids'
f = open(infile, 'r')
outfile = 'obsinfo'

db, cursor = ui.sqlConnect()

printheader = True
newfile = True
Exemple #3
0
import copy
import numpy
import pylab
import lsst.sims.catalogs.measures.photometry.Sed as Sed


wavelen= numpy.arange(12, 1200, 1.0)
flat = Sed(wavelen, flambda=wavelen*0.0+1.0)
redshifts = numpy.arange(0.1, 6.0, 1.5)
#redshifts=[3.0,]
for z in redshifts:
    flat2 = copy.deepcopy(flat)
    flat2.redshiftSED(z)
    flat3 = copy.deepcopy(flat2)
    rtau = 0.50 #/ ((1+z)**(3/2))
    print z, rtau
    flat3.addIGMattenuation(z, rtau)

    pylab.plot(flat2.wavelen, flat2.flambda, 'k-')
    pylab.plot(flat3.wavelen, flat3.flambda, label='%.1f' %(z))
    pylab.axvline(91.2*(1+z), color='r', linestyle=':')
    
pylab.legend(loc='upper right')
pylab.xlabel("Wavelength (nm)")
pylab.ylabel("Flambda .. ==attenuation")
pylab.xlim(30, 1200)
pylab.show()

    def calcAllMags(self,
                    filt,
                    mjdTaiList,
                    rootSEDdir,
                    rootFILTERdir=None,
                    withErrors=True,
                    fiveSigmaLimitingMag=None):
        """ Calculate the magnitude of all objects in the movingObjectList. 

        Give the filter, the mjd (to find the ephemeris info) and the root directory of SEDS. Calculates magnitudes.
        Individual objects already know their SED and their expected V magnitude (part of ephemeris info). """
        # Set up data needed to calculate magnitudes for each moving object.
        # First find location of lsst filter throughput curves, if not specified.
        import os
        if rootFILTERdir == None:
            # (assumes throughputs is setup)
            # Just use the default directory of the throughputs as this is probably correct.
            rootFILTERdir = os.getenv("LSST_THROUGHPUTS_DEFAULT")
        # Now rootFILTERdir should be defined.
        if rootFILTERdir == None:
            raise Exception(
                "Ack: rootFILTERdir is undefined and it seems that 'throughputs' is not setup."
            )
        # Import Sed and Bandpass for calculating magnitudes. (assumes catalogs_measures is setup)
        import lsst.sims.catalogs.measures.photometry.Sed as Sed
        import lsst.sims.catalogs.measures.photometry.Bandpass as Bandpass
        # read in and set up filter files
        bandpass = {}
        filterlist = ('V', 'imsim', filt)
        for f in filterlist:
            if f == 'V':
                filename = os.path.join(rootSEDdir, 'harris_V.dat')
                # Instantiate and read the throughput file.
                bandpass[f] = Bandpass()
                bandpass[f].readThroughput(filename)
            elif f == 'imsim':
                filename = 'imsim'
                bandpass[f] = Bandpass()
                bandpass[f].imsimBandpass()
            else:
                filename = os.path.join(rootFILTERdir, 'total_' + f + '.dat')
                # Instantiate and read the throughput file.
                bandpass[f] = Bandpass()
                bandpass[f].readThroughput(filename)
        # Read in and set up sed files. Assumes asteroid SEDS end in .dat
        possiblesedtypes = os.listdir(rootSEDdir)
        sedtypes = []
        for p in possiblesedtypes:
            if p.endswith('.dat'):
                sedtypes.append(p)
        sed = {}
        sedmag = {}
        sedcol = {}
        for sedfile in sedtypes:
            # read sed files
            filename = os.path.join(rootSEDdir, sedfile)
            sed[sedfile] = Sed()
            sed[sedfile].readSED_flambda(filename)
            # set up magnitudes for color calculation.
            sedmag[sedfile] = {}
            sedcol[sedfile] = {}
            for f in filterlist:
                sedmag[sedfile][f] = sed[sedfile].calcMag(bandpass[f])
                sedcol[sedfile][f] = sedmag[sedfile][f] - sedmag[sedfile]['V']
        # set up mjdTaiListStr for access to ephemeris dictionaries
        movingobj = self._mObjects[0]
        mjdTaiListStr = []
        if isinstance(mjdTaiList, list) == False:
            mjdTaiList = [mjdTaiList]
        for mjdTai in mjdTaiList:
            mjdTaiListStr.append(movingobj.mjdTaiStr(mjdTai))
            # mjdTaiListStr will be the same for all objects.

        # now loop through each object and assign appropriate magnitudes values for this observation
        for movingobj in self._mObjects:
            # loop through mjdTaiList
            for mjdTaiStr in mjdTaiListStr:
                try:  # check ephemerides exist
                    movingobj.Ephemerides[mjdTaiStr]
                except AttributeError:
                    raise Exception("Do not have an ephemeride on date %s" %
                                    (mjdTaiStr))
                vmag = movingobj.Ephemerides[mjdTaiStr].getmagV()
                sedname = movingobj.getsedname()
                # Check if sedname in list of known seds.
                if sed.has_key(sedname) == False:
                    # HACK  - FIX when catalogs updated
                    sedname = 'S.dat'
                    #raise Exception("SED (%s) of moving object (#%d) not in movingObjectList's directory."
                    #                %(sedname, movingobj.getobjid()))
                # calculate magnitudes
                filtmag = vmag + sedcol[sedname][filt]
                imsimmag = vmag + sedcol[sedname]['imsim']
                # set filter magnitude in ephemeris
                movingobj.Ephemerides[mjdTaiStr].setmagFilter(filtmag)
                movingobj.Ephemerides[mjdTaiStr].setmagImsim(imsimmag)
                # Add SNR measurement if given 5-sigma limiting mag for exposure.
                if fiveSigmaLimitingMag != None:
                    flux_ratio = n.power(
                        10, 0.4 * (fiveSigmaLimitingMag - filtmag))
                    snr = 5 * (flux_ratio)
                    movingobj.Ephemerides[mjdTaiStr].setsnr(snr)
                # Calculate approx errors in ra/dec/mag from magnitude/m5.
                if withErrors:
                    if fiveSigmaLimitingMag == None:
                        raise Exception(
                            "To calculate errors, fiveSigmaLimitingMag is needed."
                        )
                    # calculate error in ra/dec
                    rgamma = 0.039
                    # average seeing is 0.7" (or 700 mas)
                    error_rand = n.sqrt((0.04 - rgamma) * flux_ratio +
                                        rgamma * flux_ratio * flux_ratio)
                    ast_error_rand = 700.0 * error_rand
                    ast_error_sys = 10.0
                    astrom_error = n.sqrt(ast_error_sys**2 + ast_error_rand**2)
                    # convert from mas to deg
                    astrom_error = astrom_error / 100.0 / 60.0 / 60.0
                    movingobj.Ephemerides[mjdTaiStr].setastErr(astrom_error)
                    mag_error_sys = 0.005
                    mag_error = n.sqrt(error_rand**2 + mag_error_sys**2)
                    movingobj.Ephemerides[mjdTaiStr].setmagErr(mag_error)
            # end of mjdTaiList loop
        return