Exemplo n.º 1
0
def dered(
    sne,
    snname,
    wave,
    flux,
    ivar,
    source='not_swift_uv',
):
    corrected = False
    for j in range(len(sne)):  # go through list of SN parameters
        sn = sne[j][0]
        if (snname.lower()
                == sn.lower()[2:]) or (snname.lower() == sn.lower()) or (
                    snname.lower()[2:]
                    == sn.lower()):  # SN with parameter matches the path
            if not corrected:
                # print 'Milky Way correction...'
                if source != 'swift_uv' and source != 'foley_hst' and source != 'foundation':
                    b = sne[j][1].astype(float)
                    v = sne[j][2].astype(float)
                    bv = b - v
                    red = ex.reddening(wave,
                                       a_v=3.1 * bv,
                                       r_v=3.1,
                                       model='f99')
                    flux *= red
                    ivar *= 1. / (red**2.)
                    corrected = True
                else:
                    Av = sne[j][1].astype(float)
                    red = ex.reddening(wave, a_v=Av, r_v=3.1, model='f99')
                    flux *= red
                    ivar *= 1. / (red**2.)
                    corrected = True
    return flux, ivar
Exemplo n.º 2
0
def dered(sn_param,sne,filename,wave,flux):
    for j in range(len(sn_param)):#go through list of SN parameters
        sn = sn_param[j][0] #get relevent parameters needed for calculations
        z = sn_param[j][1]  # redshift value  
        if sn in filename:#SN with parameter matches the path
		print "\n##############################################################\nlooking at",sne[j],"matched with",sn
		b = sne[j][1].astype(float)
		v = sne[j][2].astype(float)
		bv = b-v
		r = v/bv
		print "B(%s)-V(%s)=%s"%(b,v,bv)
		print "R(v) =",r
		print "starting flux:\n",flux
		#or use fm07 model
		#test1 = spectra_data[i][:,1] * ex.reddening(spectra_data[i][:,0],ebv = bv, model='ccm89')
		#test2 = spectra_data[i][:,1] * ex.reddening(spectra_data[i][:,0],ebv = bv, model='od94')
		flux *= ex.reddening(wave,ebv = bv, r_v = 3.1, model='f99')
		print "de-reddened with specutils f99 model:\n",flux
		#print "de-reddened with specutils ccm89 model:\n",test1
		#print "de-reddened with specutils od94 model:\n",test2
		print "z:",z
		print "starting wavelength:\n",wave
		wave /= (1+z)
		print "de-red-shifted wavelength:\n",wave
			
		#print "de-reddened by host galaxy\n",flux*ex.reddening(wave,ebv = 0, r_v = r, model='f99')
		#host *= ex.reddening(wave,ebv = bv, r_v = r, model='f99')

    return [wave,flux]
Exemplo n.º 3
0
def host_correction(spec, undo=False):
    #TODO:finish, apply before scaling

    wave = spec.wavelength[spec.x1:spec.x2]
    flux = spec.flux[spec.x1:spec.x2]
    ivar = spec.ivar[spec.x1:spec.x2]
    if spec.av_25 != None:
        Av_host = spec.av_25
        rv = 2.5
    elif spec.av_mlcs31 != None:
        Av_host = spec.av_mlcs31
        rv = 3.1
    elif spec.av_mlcs17 != None:
        Av_host = spec.av_mlcs17
        rv = 1.7
    else:
        print 'No Host Correction'
        return spec

    wave_u = wave * u.Angstrom
    flux_u = flux * u.Unit('W m-2 angstrom-1 sr-1')
    spec1d = Spectrum1D.from_array(wave_u, flux_u)
    spec1d_ivar = Spectrum1D.from_array(wave_u, ivar)
    red = ex.reddening(spec1d.wavelength, a_v=Av_host, r_v=rv, model='f99')
    if not undo:
        flux_new = spec1d.flux * red
        ivar_new = spec1d_ivar.flux * (1. / (red**2.))
    else:
        flux_new = spec1d.flux / red
        ivar_new = spec1d_ivar.flux / (1. / (red**2.))

    spec.flux[spec.x1:spec.x2] = flux_new
    spec.ivar[spec.x1:spec.x2] = ivar_new

    return spec
Exemplo n.º 4
0
def correct_for_dust(wavelength, ra, dec):
    """Query IRSA dust map for E(B-V) value and returns reddening array
    ----------
    wavelength : numpy array-like
        Wavelength values for which to return reddening
    ra : float
        Right Ascencion in degrees
    dec : float
        Declination in degrees

    Returns
    -------
    reddening : numpy array

    Notes
    -----
    For info on the dust maps, see http://irsa.ipac.caltech.edu/applications/DUST/
    """

    from astroquery.irsa_dust import IrsaDust
    import astropy.coordinates as coord
    import astropy.units as u
    C = coord.SkyCoord(ra*u.deg, dec*u.deg, frame='fk5')
    dust_image = IrsaDust.get_images(C, radius=2 *u.deg, image_type='ebv')[0]
    ebv = np.mean(dust_image[0].data[40:42,40:42])
    # print(ebv)
    r_v = 3.1
    av =  r_v * ebv
    from specutils.extinction import reddening
    return reddening(wavelength* u.angstrom, av, r_v=r_v, model='ccm89'), ebv
Exemplo n.º 5
0
def correct_for_dust(wavelength, ra, dec):
    """Query IRSA dust map for E(B-V) value and returns reddening array
    ----------
    wavelength : numpy array-like
        Wavelength values for which to return reddening
    ra : float
        Right Ascencion in degrees
    dec : float
        Declination in degrees

    Returns
    -------
    reddening : numpy array

    Notes
    -----
    For info on the dust maps, see http://irsa.ipac.caltech.edu/applications/DUST/
    """

    from astroquery.irsa_dust import IrsaDust
    import astropy.coordinates as coord
    import astropy.units as u
    C = coord.SkyCoord(ra*u.deg, dec*u.deg, frame='fk5')
    dust_image = IrsaDust.get_images(C, radius=2 *u.deg, image_type='ebv', timeout=60)[0]
    ebv = np.mean(dust_image[0].data[40:42, 40:42])
    r_v = 3.1
    av =  r_v * ebv
    from specutils.extinction import reddening
    return reddening(wavelength* u.angstrom, av, r_v=r_v, model='ccm89'), ebv
Exemplo n.º 6
0
def host_correction(sne, snname, wave, flux):
    """This function is deprecated. composite.py now uses 
        test_dered.host_correction() (yes that is a dumb file name)
    """
    for j in range(len(sne)):  # go through list of SN parameters
        sn = sne[j][0]
        if sn in snname:  # SN with parameter matches the path
            a_v = sne[j][2].astype(float)
            flux *= ex.reddening(wave, ebv=3.1 * a_v, r_v=3.1, model='f99')
    return flux
Exemplo n.º 7
0
    def deredden_fluxes(self):
        """Deredden the observed fluxes using the ccm89 model

        The dereddening procedure is handled by the extinction.reddening method
        from specutils.
        """
        self.Av_gal = self.parameter_table.cols.Av_gal[0]
        self.Av_host = self.parameter_table.cols.Av_host[0]
        self.Av_tot = self.Av_gal + self.Av_host

        for obs in self.converted_obs:
            obs["flux"] = obs["flux"] * extinction.reddening(obs["wavelength"] * u.AA, self.Av_tot, model="ccm89")
Exemplo n.º 8
0
    def deredden_fluxes(self):
        """Deredden the observed fluxes using the ccm89 model

        The dereddening procedure is handled by the extinction.reddening method
        from specutils.
        """
        self.Av_gal = self.parameter_table.cols.Av_gal[0]
        self.Av_host = self.parameter_table.cols.Av_host[0]
        self.Av_tot = self.Av_gal + self.Av_host

        for obs in self.converted_obs:
            obs['flux'] = obs['flux'] * extinction.reddening(
                obs['wavelength'] * u.AA, self.Av_tot, model='ccm89')
Exemplo n.º 9
0
def calculate_fbol(key, magnitudes, av):
    wavelength_array, flux_array = build_flux_wl_array(key, magnitudes)

    flux_array_unred = flux_array * extinction.reddening(wavelength_array, av, model='ccm89')
    
    shortest_wl = np.amin(wavelength_array)
    longest_wl = np.amax(wavelength_array)

    fqbol = integrate_fqbol(wavelength_array, flux_array_unred)
    
    temperature, angular_radius = bb_fit_parameters(wavelength_array, 
                                                    flux_array_unred)
    ir_corr = ir_correction(temperature.value, angular_radius, longest_wl.value)[0]
    uv_corr = uv_correction_blackbody(temperature.value, angular_radius, 
                                            shortest_wl.value)[0]
    fbol = fqbol.value + ir_corr + uv_corr
    return fbol
Exemplo n.º 10
0
def dered(z,sne,snname,wave,flux):
    for j in range(len(sne)):#go through list of SN parameters
        sn = sne[j][0]
        if sn in snname:#SN with parameter matches the path
            b = sne[j][1].astype(float)
            v = sne[j][2].astype(float)
            bv = b-v
            r = v/bv
#            print "B(%s)-V(%s)=%s"%(b,v,bv)
#            print "R(v) =",r
            #or use fm07 model
            #test1 = spectra_data[i][:,1] * ex.reddening(spectra_data[i][:,0],ebv = bv, model='ccm89')
            #test2 = spectra_data[i][:,1] * ex.reddening(spectra_data[i][:,0],ebv = bv, model='od94')
            flux *= ex.reddening(wave,ebv = bv, r_v = 3.1, model='f99')
            wave /= (1+z)

            #print "de-reddened by host galaxy\n",flux*ex.reddening(wave,ebv = 0, r_v = r, model='f99')
            #host *= ex.reddening(wave,ebv = bv, r_v = r, model='f99')

    return [wave,flux]
Exemplo n.º 11
0
def MW_correction(spec, undo=False):
    #TODO:finish, apply before scaling

    wave = spec.wavelength[spec.x1:spec.x2]
    flux = spec.flux[spec.x1:spec.x2]
    ivar = spec.ivar[spec.x1:spec.x2]
    av_mw = spec.av_mw

    wave_u = wave * u.Angstrom
    flux_u = flux * u.Unit('W m-2 angstrom-1 sr-1')
    spec1d = Spectrum1D.from_array(wave_u, flux_u)
    spec1d_ivar = Spectrum1D.from_array(wave_u, ivar)
    red = ex.reddening(spec1d.wavelength, a_v=av_mw, r_v=3.1, model='f99')
    if not undo:
        flux_new = spec1d.flux * red
        ivar_new = spec1d_ivar.flux * (1. / (red**2.))
    else:
        flux_new = spec1d.flux / red
        ivar_new = spec1d_ivar.flux / (1. / (red**2.))

    spec.flux[spec.x1:spec.x2] = flux_new
    spec.ivar[spec.x1:spec.x2] = ivar_new

    return spec
Exemplo n.º 12
0
def dered(sne, snname, wave, flux):
    """This function is deprecated. compprep() now uses 
        test_dered.dered() (yes that is a dumb file name)
    """
    for j in range(len(sne)):  # go through list of SN parameters
        sn = sne[j][0]
        if sn in snname:  # SN with parameter matches the path
            b = sne[j][1].astype(float)
            v = sne[j][2].astype(float)
            bv = b - v
            #            print "B(%s)-V(%s)=%s"%(b,v,bv)
            #            print "R(v) =",r
            #or use fm07 model
            #test1 = spectra_data[i][:,1] * ex.reddening(spectra_data[i][:,0],ebv = bv, model='ccm89')
            #test2 = spectra_data[i][:,1] * ex.reddening(spectra_data[i][:,0],ebv = bv, model='od94')
            flux *= ex.reddening(wave, ebv=bv, r_v=3.1, model='f99')


#            wave /= (1+z)

#print "de-reddened by host galaxy\n",flux*ex.reddening(wave,ebv = 0, r_v = r, model='f99')
#host *= ex.reddening(wave,ebv = bv, r_v = r, model='f99')

    return flux
Exemplo n.º 13
0
def main():
    #Generate data arrays
    composite = np.genfromtxt('../data/Selsing2015.dat')
    # composite = np.genfromtxt('../data/CompoM.dat')
    wl, flux, error = composite[:, 0], composite[:, 1], composite[:, 1]
    # dz = np.arange(1.2 , 2.7, 0.05)
    dz = np.arange(0, 3, 0.01)

    size_redshift = len(dz)

    # bands = ['u', 'g', 'r', 'i', 'z', 'Z2', 'Y', 'J', 'H', 'K']
    bands = ['g', 'r', 'J', 'K']

    AV = np.array([0.0, 0.4, 0.8, 1.2, 1.6])
    # AV = np.array([0.0, 0.5, 1.0])
    # AV = np.array([0.0])

    fig, ax = pl.subplots()

    for c, av in enumerate(AV):
        cmap = sns.cubehelix_palette(start=0.5 * c,
                                     rot=0.0,
                                     light=0.75,
                                     dark=0.25,
                                     as_cmap=True)
        mags = collections.defaultdict(list)

        #Loop through redshifts
        for ii in dz:
            #Redden at host
            flux_dered = flux / reddening(
                wl * u.angstrom, av, r_v=2.72, model='gcc09')
            # error_dered = error / reddening(wl* u.angstrom, av, r_v=2.72, model='gcc09')
            error_dered = 0
            #Move with redshift
            wl_z = wl * (1 + ii)

            #Loop through bands
            for k in bands:
                # mag = synth_mag(band=k, datapath='../data/filter_curves/', wave=wl_z, flux=flux_dered, error=error_dered)
                try:
                    mag = synth_mag_pysysp(wl_z,
                                           flux_dered,
                                           error_dered,
                                           bandpath='../data/filter_curves/',
                                           band=k)
                except ValueError:
                    print('Filter outside composite range for band: ' +
                          str(k) + ' for redshift' + str(ii))
                    mags[k].append(np.nan)
                    continue
                mags[k].append(mag)

        #Calculate colors
        JK = np.array(mags['J']) - np.array(mags['K'])
        gJ = np.array(mags['g']) - np.array(mags['J'])
        gr = np.array(mags['g']) - np.array(mags['r'])

        #Printing
        # print('J - K:', JK)
        # print('J:', np.array(mags['J']))
        # print('g - J:', gJ)

        #Make the plot
        ax.plot(JK,
                gJ,
                label=r'A$_{V}$ = ' + str(av),
                lw=0.3,
                zorder=1,
                color=cmap(0.5),
                alpha=1)

        sca = ax.scatter(JK,
                         gJ,
                         c=dz,
                         zorder=2,
                         edgecolor='none',
                         alpha=1,
                         s=5,
                         cmap=cmap)
        print(r'Plotted track for: A$_{V}$ = ' + str(av))
    # cmap = sns.cubehelix_palette(start=1, rot=0.0, light=0.75, dark=0.25, as_cmap=True)
    # sca = ax.scatter(JK, gJ, c=dz, zorder=2, edgecolor='none', alpha = 1, cmap=cmap)

    ax.set_xlim((-1.0, 2.0))
    ax.set_ylim((0.0, 4.0))

    cbar = fig.colorbar(sca, ax=ax)
    cbar.set_label('Redshift')

    ax.set_xlabel('J - K')
    ax.set_ylabel('g - J')
    # cbar.set_label('z')
    # set the linewidth of each legend object
    leg = ax.legend(loc=2)
    for legobj in leg.legendHandles:
        legobj.set_linewidth(2.0)

    pl.savefig('../figs/color_track_JKgJ.pdf')
    pl.show()
Exemplo n.º 14
0
def main():
	#Generate data arrays	
	composite = np.genfromtxt('../data/Selsing2015.dat')
	# composite = np.genfromtxt('../data/CompoM.dat')	
	wl, flux, error = composite[:,0], composite[:,1], composite[:,1]
	# dz = np.arange(1.2 , 2.7, 0.05)
	dz = np.arange(0 , 3, 0.01)

	size_redshift = len(dz)
	
	# bands = ['u', 'g', 'r', 'i', 'z', 'Z2', 'Y', 'J', 'H', 'K']
	bands = ['g', 'r', 'J', 'K']


	AV = np.array([0.0, 0.4, 0.8, 1.2, 1.6])
	# AV = np.array([0.0, 0.5, 1.0])
	# AV = np.array([0.0])


	fig, ax = pl.subplots()

	for c, av in enumerate(AV):
		cmap = sns.cubehelix_palette(start=0.5 * c, rot=0.0, light=0.75, dark=0.25, as_cmap=True)
		mags = collections.defaultdict(list)

		#Loop through redshifts
		for ii in dz:
			#Redden at host
			flux_dered =  flux / reddening(wl* u.angstrom, av, r_v=2.72, model='gcc09')
			# error_dered = error / reddening(wl* u.angstrom, av, r_v=2.72, model='gcc09')			
			error_dered= 0
			#Move with redshift
			wl_z = wl * (1+ii)

			#Loop through bands
			for k in bands:
				# mag = synth_mag(band=k, datapath='../data/filter_curves/', wave=wl_z, flux=flux_dered, error=error_dered)
				try:
					mag = synth_mag_pysysp(wl_z, flux_dered, error_dered, bandpath='../data/filter_curves/', band=k)
				except ValueError:
					print('Filter outside composite range for band: '+str(k)+' for redshift' + str(ii))
					mags[k].append(np.nan)
					continue
				mags[k].append(mag)


		#Calculate colors
		JK = np.array(mags['J']) - np.array(mags['K'])
		gJ =  np.array(mags['g']) - np.array(mags['J'])
		gr = np.array(mags['g']) - np.array(mags['r'])



		#Printing
		# print('J - K:', JK)
		# print('J:', np.array(mags['J']))
		# print('g - J:', gJ)

		#Make the plot
		ax.plot(JK, gJ, label= r'A$_{V}$ = '+str(av), lw=0.3, zorder=1, color=cmap(0.5), alpha= 1)

		sca = ax.scatter(JK, gJ, c=dz, zorder=2, edgecolor='none', alpha = 1, s=5, cmap=cmap)
		print(r'Plotted track for: A$_{V}$ = '+str(av))
	# cmap = sns.cubehelix_palette(start=1, rot=0.0, light=0.75, dark=0.25, as_cmap=True)
	# sca = ax.scatter(JK, gJ, c=dz, zorder=2, edgecolor='none', alpha = 1, cmap=cmap)

	ax.set_xlim((-1.0, 2.0))
	ax.set_ylim((0.0, 4.0))

	cbar = fig.colorbar(sca, ax=ax)
	cbar.set_label('Redshift')

	ax.set_xlabel('J - K')
	ax.set_ylabel('g - J')
	# cbar.set_label('z')
	# set the linewidth of each legend object
	leg = ax.legend(loc=2)
	for legobj in leg.legendHandles:
		legobj.set_linewidth(2.0)

	pl.savefig('../figs/color_track_JKgJ.pdf')
	pl.show()
Exemplo n.º 15
0
#deredden to host galaxy
for i in range(num):#go through selected spectra data
	for j in range(len(sn)):#go through list of SN parameters
		if sn[j] in file_path[i]:#SN with parameter matches the path
			print "\n##############################################################\nlooking at",sne[j],"matched with",sn[j]
			b = sne[j][1].astype(float)
			v = sne[j][2].astype(float)
			bv = b-v
			r = v/bv
			print "B(%s)-V(%s)=%s"%(b,v,bv)
			print "R(v) =",r
			print "starting flux:\n",spectra_data[i][:,1]
			#or use fm07 model
			#test1 = spectra_data[i][:,1] * ex.reddening(spectra_data[i][:,0],ebv = bv, model='ccm89')
			#test2 = spectra_data[i][:,1] * ex.reddening(spectra_data[i][:,0],ebv = bv, model='od94')
			spectra_data[i][:,1] *= ex.reddening(spectra_data[i][:,0],ebv = bv, r_v = 3.1, model='f99')
			print "de-reddened with specutils f99 model:\n",spectra_data[i][:,1]
			#print "de-reddened with specutils ccm89 model:\n",test1
			#print "de-reddened with specutils od94 model:\n",test2

			print "starting wavelength:\n",spectra_data[i][:,0]
			spectra_data[i][:,0] /= (1+z[j])
			print "z:",z[j]
			print "de-red-shifted wavelength:\n",spectra_data[i][:,0]
			
			#print "de-reddened by host galaxy\n",spectra_data[i][:,1]*ex.reddening(spectra_data[i][:,0],ebv = 0, r_v = r, model='f99')
			#host *= ex.reddening(spectra_data[i][:,0],ebv = bv, r_v = r, model='f99')

print "##############################################################\ndone de-reddening and de-redshifting"
##############################################################################################################################################
##############################################################################################################################################
Exemplo n.º 16
0
def host_correction(a_v, r_v, snname, wave, flux, ivar, model='f99'):
    # print 'Host correction...'
    red = ex.reddening(wave, a_v=a_v, r_v=r_v, model=model)
    flux *= red
    ivar *= 1. / (red**2.)  #correct ivar too
    return flux, ivar
Exemplo n.º 17
0
def dered(ebv, wave, flux):
    r_v = 3.1
    flux *= ex.reddening(wave, a_v=ebv * r_v, r_v=3.1, model='f99')
    #need to return just the array!
    return flux