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:
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
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