def specrate(parlist): """Return the countrate of the spectrum as observed through the obsmode, based on the binned wavelength set; and write the resulting spectrum to a file, returning the filename.""" d=getparms(parlist) sp=parse_spec(d['spectrum']) bp=ObsBandpass(d['instrument']) #Check overlap status & proceed accordingly ostat=bp.check_overlap(sp) try: obs=Observation(sp,bp,force=odict[ostat]) except KeyError: obs=Observation(sp,bp,bp.wave,force=odict[ostat]) obs.convert('counts') try: obs.writefits(d['output'],binned=True) except KeyError: d['output']=None if ostat == 'full': return "%g;%s"%(obs.countrate(),d['output']) else: return "%g;%s;%s"%(obs.countrate(),d['output'],owarn[ostat])
def get_filter_info(name, vega=vega): if name.startswith('nirc2'): from nirc2 import synthetic as nirc2syn tmp = name.split(',') filterName = tmp[-1] filt = nirc2syn.FilterNIRC2(filterName) else: filt = ObsBandpass(name) # Convert to ArraySpectralElement for resampling. filt = spectrum.ArraySpectralElement(filt.wave, filt.throughput, waveunits=filt.waveunits, name=filt.name) # Resample the filter to have 1500 points across. More is excessive. if len(filt.wave) > 1500: idx = np.where(filt.throughput > 0.001)[0] new_wave = np.linspace(filt.wave[idx[0]], filt.wave[idx[-1]], 1500, dtype=float) filt = filt.resample(new_wave) vega_obs = obs.Observation(vega, filt, binset=filt.wave, force='taper') vega_flux = vega_obs.binflux.sum() vega_mag = 0.03 filt.flux0 = vega_flux filt.mag0 = vega_mag return filt
def test_photbw_acs_wfc1_f775w_pol_v(): mode = 'acs,wfc1,f775w,pol_v' # from Synphot ref_photbw = 444.05 band = ObsBandpass(mode) test_photbw = band.photbw() np.testing.assert_allclose(ref_photbw, test_photbw, rtol=0.001)
def test_photbw_cos_boa_nuv_mirrora(): mode = 'cos,boa,nuv,mirrora' # from Synphot ref_photbw = 370.65 band = ObsBandpass(mode) test_photbw = band.photbw() np.testing.assert_allclose(ref_photbw, test_photbw, rtol=0.001)
def test_photbw_wfc3_ir_f164n(): mode = 'wfc3,ir,f164n' # from Synphot ref_photbw = 700.05 band = ObsBandpass(mode) test_photbw = band.photbw() np.testing.assert_allclose(ref_photbw, test_photbw, rtol=0.001)
def test_photbw_acs_sbc_f122m(): mode = 'acs,sbc,f122m' # from Synphot ref_photbw = 91.063 band = ObsBandpass(mode) test_photbw = band.photbw() np.testing.assert_allclose(ref_photbw, test_photbw, rtol=0.001)
def test_photbw_wfc3_uvis2_f336w(): mode = 'wfc3,uvis2,f336w' # from Synphot ref_photbw = 158.36 band = ObsBandpass(mode) test_photbw = band.photbw() np.testing.assert_allclose(ref_photbw, test_photbw, rtol=0.001)
def test_photbw_acs_hrc_f555w(): mode = 'acs,hrc,f555w' # from Synphot ref_photbw = 357.17 band = ObsBandpass(mode) test_photbw = band.photbw() np.testing.assert_allclose(ref_photbw, test_photbw, rtol=0.001)
def get_filter_info(name, vega=vega): filter = ObsBandpass(name) vega_obs = obs.Observation(vega, filter, binset=filter.wave, force='taper') vega_flux = vega_obs.binflux.sum() vega_mag = 0.03 filter.flux0 = vega_flux filter.mag0 = vega_mag return filter
def test_photbw_stis_02x29_mirror_fuvmama(): mode = 'stis,0.2x29,mirror,fuvmama' # from Synphot ref_photbw = 134.79 band = ObsBandpass(mode) test_photbw = band.photbw() np.testing.assert_allclose(ref_photbw, test_photbw, rtol=0.001)
def test_photbw_nicmos_1_f090m_dn(): mode = 'nicmos,1,f090m,dn' # from Synphot ref_photbw = 559.59 band = ObsBandpass(mode) test_photbw = band.photbw() np.testing.assert_allclose(ref_photbw, test_photbw, rtol=0.001)
def setparms(self): self.sp = parse_spec( 'rn(z(spec(qso_template.fits),0.2),box(1850.0,1.0),1.00E-14,flam)') self.bp = ObsBandpass('cos,nuv,g185m,c2010') self.ref_rate = 47.2336 self.cmd = 'SpecSourcerateSpec' self.fname = 'specAV93.fits'
def setparms(self): self.sp = parse_spec( 'rn(pl(4000.0,-1.5,flam),box(1850.0,1.0),1.00E-14,flam)') self.bp = ObsBandpass('cos,nuv,g185m,c2010') self.ref_rate = 71.8377 self.cmd = 'SpecSourcerateSpec' self.fname = 'specAV95.fits'
def setparms(self): self.sp = parse_spec( 'rn(icat(k93models,25400,0.0,3.9),box(2000.0,1.0),2.00E-13,flam)') self.bp = ObsBandpass('cos,nuv,g225m,c2186') self.ref_rate = 1460.12 self.cmd = 'SpecSourcerateSpec' self.fname = 'specAV105.fits'
def setparms(self): self.sp = parse_spec( 'rn(icat(k93models,44500,0.0,5.0),box(2000.0,1.0),2.00E-13,flam)') self.bp = ObsBandpass('cos,nuv,g185m,c1835') self.ref_rate = 1559.37 self.cmd = 'SpecSourcerateSpec' self.fname = 'specAV6.fits'
def etccalc(obsmode, spectrum, filename=None): bp=ObsBandpass(obsmode) sp=parse_spec(spectrum) try: obs=Observation(sp,bp) except KeyError: obs=Observation(sp,bp,bp.wave) obs.convert('counts') if (filename is not None): if not filename.endswith('.fits'): filename=filename+'.fits' obs.writefits(filename) sp.writefits(filename.replace('.fits','_sp.fits')) bp.writefits(filename.replace('.fits','_bp.fits')) return obs.countrate(), obs.efflam(), obs.pivot()
def setparms(self): self.sp = parse_spec( 'rn(icat(k93models,44500,0.0,5.0)*ebmvx(0.1,gal1),box(1850.0,1.0),2.00E-13,flam)' ) self.bp = ObsBandpass('cos,nuv,g185m,c1786') self.ref_rate = 1180.17 self.cmd = 'SpecSourcerateSpec' self.fname = 'specAV98.fits'
def setparms(self): self.sp = parse_spec( 'spec(earthshine.fits)*0.5+rn(spec(Zodi.fits),band(johnson,v),22.7,vegamag)+(spec(el1215a.fits)+spec(el1302a.fits)+spec(el1356a.fits)+spec(el2471a.fits))*0.5' ) self.bp = ObsBandpass('cos,nuv,g185m,c1850') self.ref_rate = 6.7e-05 self.cmd = 'SpecSourcerateSpec' self.fname = 'specAV7.fits' self.accuracy = 1e-2
def get_filter_info(name, vega=vega): if name.startswith('nirc2'): tmp = name.split(',') filterName = tmp[-1] filter = nirc2syn.filters[filterName] flux0 = nirc2syn.filter_flux0[filterName] mag0 = nirc2syn.filter_mag0[filterName] else: filter = ObsBandpass(name) vega_obs = obs.Observation(vega, filter, binset=filter.wave, force='taper') vega_flux = vega_obs.binflux.sum() vega_mag = 0.03 filter.flux0 = vega_flux filter.mag0 = vega_mag return filter
def setparms(self): self.sp = parse_spec( 'spec(earthshine.fits)*2.0+rn(spec(Zodi.fits),band(johnson,v),22.7,vegamag)+(spec(el1215a.fits)+spec(el1302a.fits)+spec(el1356a.fits)+spec(el2471a.fits))*0.5' ) self.bp = ObsBandpass('cos,nuv,g225m,c2186') self.ref_rate = 0.000906 self.cmd = 'SpecSourcerateSpec' self.fname = 'specAV109.fits' self.accuracy = 1e-2
def setUp(self): tmg = locations._refTable(os.path.join('mtab', 'u921351jm_tmg.fits')) tmc = locations._refTable(os.path.join('mtab', 'ub31649mm_tmc.fits')) spec = FlatSpectrum(1, fluxunits='flam') bandpass = ObsBandpass('acs,hrc,f555w', graphtable=tmg, comptable=tmc) self.obs = Observation(spec, bandpass) self.obs.initbinflux()
def ABtoVega(instrument, bandpass): bp = ObsBandpass(str(instrument) + ',wfc1,'\ + str(bandpass) + ',mjd#57754') spec_bb = BlackBody(10000) spec_bb_norm = spec_bb.renorm(1, 'counts', bp) obs = observation.Observation(spec_bb_norm, bp) # Get photometric calibration information. photflam = obs.effstim('flam') photplam = bp.pivot() zp_vega = obs.effstim('vegamag') zp_st = obs.effstim('stmag') zp_ab = obs.effstim('abmag') difference = zp_vega - zp_ab return difference
def calcphot(parlist): """Calculate either effstim or efflam, depending on the input argument""" d=getparms(parlist) sp=parse_spec(d['spectrum']) bp=ObsBandpass(d['obsmode']) # obs=bp.observe(sp) ostat=bp.check_overlap(sp) try: obs=Observation(sp,bp,force=odict[ostat]) except KeyError: obs=Observation(sp,bp,bp.wave,force=odict[ostat]) obs.convert('counts') ans=obs.efflam() if ostat == 'full': return ans else: return ans, owarn[ostat]
def countrate(parlist): """Return the pivot wavelength and countrate of the spectrum as observed through the obsmode, but based on the native waveset""" d=getparms(parlist) sp=parse_spec(d['spectrum']) bp=ObsBandpass(d['instrument']) #Check overlap status & proceed accordingly ostat=bp.check_overlap(sp) try: obs=Observation(sp,bp,force=odict[ostat]) except KeyError: obs=Observation(sp,bp,bp.wave,force=odict[ostat]) obs.convert('counts') efflam=obs.efflam() ans=obs.countrate(binned=False) if ostat == 'full': return ans,efflam else: return ans, efflam, owarn[ostat]
def setparms(self): self.sp = parse_spec('rn(bb(40000.0),box(1850.0,1.0),1.00E-14,flam)') self.bp = ObsBandpass('cos,nuv,g185m,c2010') self.ref_rate = 64.6011 self.cmd = 'SpecSourcerateSpec' self.fname = 'specAV97.fits'