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
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]
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
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
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
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
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")
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')
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
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]
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
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
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()
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()
#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" ############################################################################################################################################## ##############################################################################################################################################
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
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