예제 #1
0
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])
예제 #2
0
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
예제 #3
0
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)
예제 #4
0
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)
예제 #5
0
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)
예제 #6
0
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)
예제 #7
0
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)
예제 #8
0
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)
예제 #9
0
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
예제 #10
0
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
예제 #11
0
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)
예제 #12
0
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)
예제 #13
0
 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'
예제 #14
0
 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'
예제 #15
0
 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'
예제 #16
0
 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'
예제 #17
0
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()
예제 #18
0
 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'
예제 #19
0
 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
예제 #20
0
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
예제 #21
0
 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
예제 #22
0
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
예제 #23
0
    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()
예제 #24
0
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
예제 #25
0
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]
예제 #26
0
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]
예제 #27
0
 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'