コード例 #1
0
    def setUpClass(cls):
        np.random.seed(1111)
        num = 1000
        level = np.array([134, 53, 261, 111])
        noise = 0.01 * level

        # create standard noise
        wave = np.linspace(100, 200, num=num)
        flux1 = np.random.normal(level[0], noise[0], num)
        flux2 = np.random.normal(level[1], noise[1], num)
        flux3 = np.random.normal(level[2], noise[2], num)
        flux4 = np.random.normal(level[3], noise[3], num)

        # create cosmics
        flux1[467] *= 2.5
        flux2[197] *= 2.6
        flux3[816] *= 2.4
        flux4[23] *= 2.8

        # create spectral feature
        flux1[365] *= 1.40
        flux2[365] *= 1.43
        flux3[365] *= 1.38
        flux4[365] *= 1.39

        waves = np.array([wave, wave, wave, wave])
        fluxes = np.array([flux1, flux2, flux3, flux4])
        vrads = [555., 565., 545., 560.]

        wave1, flux1, accepted, rejected = tools.merge_cosmic_clipping(
            waves,
            fluxes,
            sigma=2.0,
            base='median',
            offset='std',
            window=51,
            runs=2,
            full_output=True)
        wave2, flux2 = tools.merge_cosmic_clipping(waves,
                                                   fluxes,
                                                   vrads=vrads,
                                                   sigma=2.0,
                                                   base='median',
                                                   offset='std',
                                                   window=51,
                                                   runs=2)

        cls.wave1 = wave1
        cls.flux1 = flux1
        cls.wave2 = wave2
        cls.flux2 = flux2
        cls.accepted = accepted
        cls.rejected = rejected
        cls.waves = waves
        cls.fluxes = fluxes
        cls.vrads = vrads
        cls.num = num
        cls.avg = np.sum(level) * 1.05
コード例 #2
0
 def setUpClass(cls):
     np.random.seed(1111)
     num = 1000
     level = np.array([134, 53, 261, 111])
     noise = 0.01 * level
     
     # create standard noise
     wave = np.linspace(100,200, num=num)
     flux1 = np.random.normal(level[0], noise[0], num)
     flux2 = np.random.normal(level[1], noise[1], num)
     flux3 = np.random.normal(level[2], noise[2], num)
     flux4 = np.random.normal(level[3], noise[3], num)
     
     # create cosmics
     flux1[467] *= 2.5
     flux2[197] *= 2.6
     flux3[816] *= 2.4
     flux4[23] *= 2.8
     
     # create spectral feature
     flux1[365] *= 1.40
     flux2[365] *= 1.43
     flux3[365] *= 1.38
     flux4[365] *= 1.39
     
     waves = np.array([wave, wave, wave, wave])
     fluxes = np.array([flux1, flux2, flux3, flux4])
     vrads = [555., 565., 545., 560.]
     
     wave1, flux1, accepted, rejected = tools.merge_cosmic_clipping(waves, fluxes,
                                  sigma=2.0, base='median', offset='std', window=51,
                                  runs=2, full_output=True)
     wave2, flux2 = tools.merge_cosmic_clipping(waves, fluxes, vrads=vrads, 
                         sigma=2.0, base='median', offset='std', window=51, runs=2)
     
     cls.wave1 = wave1
     cls.flux1 = flux1
     cls.wave2 = wave2
     cls.flux2 = flux2
     cls.accepted = accepted
     cls.rejected = rejected
     cls.waves = waves
     cls.fluxes = fluxes
     cls.vrads = vrads
     cls.num = num
     cls.avg = np.sum(level) * 1.05
コード例 #3
0
    def setUpClass(cls):
        temp = '/STER/mercator/hermes/%s/reduced/%s_HRF_OBJ_ext_CosmicsRemoved_log_merged_c.fits'
        objlist = [('20090619', '237033'), ('20090701', '240226'),
                   ('20090712', '241334'), ('20090712', '241335'),
                   ('20100107', '00268012'), ('20100120', '00272619'),
                   ('20100120', '00272620'), ('20100203', '00273577'),
                   ('20100203', '00273578'), ('20100303', '00275671'),
                   ('20100303', '00275672'), ('20100410', '00281505'),
                   ('20100519', '00284636'), ('20110222', '00334558'),
                   ('20110319', '00336547'), ('20110324', '00339848'),
                   ('20110401', '00342273'), ('20110402', '00342363'),
                   ('20110406', '00342699'), ('20110408', '00342896'),
                   ('20120107', '00391289'), ('20120110', '00391633'),
                   ('20120116', '00392217'), ('20120127', '00393151'),
                   ('20120209', '00394175'), ('20120330', '00399697'),
                   ('20120420', '00404769'), ('20120506', '00406531'),
                   ('20130106', '00445346'), ('20130215', '00452556'),
                   ('20130406', '00457718'), ('20130530', '00474128')]
        mergeList = [temp % o for o in objlist]

        waves, fluxes = [], []
        for ifile in mergeList:
            w, f = fits.read_spectrum(ifile)
            f = f[(w > 5000) & (w < 7000)]
            w = w[(w > 5000) & (w < 7000)]
            waves.append(w)
            fluxes.append(f)

        wave, flux, accepted, rejected = tools.merge_cosmic_clipping(
            waves,
            fluxes,
            sigma=5.0,
            base='average',
            offset='std',
            window=51,
            runs=2,
            full_output=True)

        cls.nspek = len(objlist)
        cls.wave = wave
        cls.flux = flux
        cls.accepted = accepted
        cls.rejected = rejected
コード例 #4
0
 def setUpClass(cls):
     temp = '/STER/mercator/hermes/%s/reduced/%s_HRF_OBJ_ext_CosmicsRemoved_log_merged_c.fits'
     objlist = [('20090619','237033'), ('20090701','240226'),
                 ('20090712','241334'), ('20090712','241335'),
                 ('20100107','00268012'), ('20100120','00272619'),
                 ('20100120','00272620'), ('20100203','00273577'),
                 ('20100203','00273578'), ('20100303','00275671'),
                 ('20100303','00275672'), ('20100410','00281505'),
                 ('20100519','00284636'), ('20110222','00334558'),
                 ('20110319','00336547'), ('20110324','00339848'),
                 ('20110401','00342273'), ('20110402','00342363'),
                 ('20110406','00342699'), ('20110408','00342896'),
                 ('20120107','00391289'), ('20120110','00391633'),
                 ('20120116','00392217'), ('20120127','00393151'),
                 ('20120209','00394175'), ('20120330','00399697'),
                 ('20120420','00404769'), ('20120506','00406531'),
                 ('20130106','00445346'), ('20130215','00452556'),
                 ('20130406','00457718'), ('20130530','00474128')]
     mergeList = [temp%o for o in objlist]
     
     waves, fluxes = [], []
     for ifile in mergeList:
         w, f = fits.read_spectrum(ifile)
         f = f[(w>5000) & (w<7000)]
         w = w[(w>5000) & (w<7000)]
         waves.append(w)
         fluxes.append(f)
      
     wave, flux, accepted, rejected = tools.merge_cosmic_clipping(waves, fluxes, sigma=5.0,
                         base='average', offset='std', window=51, runs=2, full_output=True)
     
     cls.nspek = len(objlist)
     cls.wave = wave
     cls.flux = flux
     cls.accepted = accepted
     cls.rejected = rejected
コード例 #5
0
def merge_hermes_spectra(objlist, wscalelist=None, **kwargs):
    """
    Combines HERMES spectra with sigma clipping to remove cosmics. The input spectra
    are given as a list of filenames for the objects and for the wavelength scales.
    The output is the wavelength scale of the first object, the merged and sigma clipped
    flux, and the adapted header of the object. In this adapted header, the exposure
    time is the sum of all individual exposure times, and the observing time is averaged.
    Uses the L{ivs.spectra.tools.merge_cosmic_clipping} method to merge the spectra.

    >>> data = search('KIC9540226')
    >>> objlist = data['filename']
    >>> wave, flux, header = merge_hermes_spectra(objlist, wscalelist=None)

    @param objlist: list of OBJ or order merged filenames
    @param wscalelist: list of wavelengthscale filenames
    @param vrads: list of radial velocities (optional)
    @param vrad_units: units of the radial velocities
    @param sigma: value used for sigma clipping
    @param window: window size used in median filter
    @param runs: number of iterations through the spectra

    @return: The combined spectrum, cosmic clipped. (wave, flux, header)
    @rtype: [array, array, dict]
    """
    kwargs['full_output'] = False

    if wscalelist == None:
        #-- Order Merged spectra are straight forward
        exptime, bjd = 0, np.zeros(len(objlist))
        waves, fluxes = [],[]
        for i, ofile in enumerate(objlist):
            w, f, h = fits.read_spectrum(ofile, return_header=True)
            waves.append(w)
            fluxes.append(f)
            exptime += h['exptime']
            #bjd[i] = h['bjd']

        waves, fluxes = np.array(waves), np.array(fluxes)
        mwave, mflux = sptools.merge_cosmic_clipping(waves, fluxes, **kwargs)

    else:
        #-- The OBJ spectra need to be merged order per order
        # read all spectra
        exptime, bjd = 0, np.zeros(len(objlist))
        waves, fluxes = np.zeros((55,4608, len(objlist))), np.zeros((55,4608, len(wscalelist)))
        for i, (ofile, wfile) in enumerate(zip(objlist, wscalelist)):
            odata = pf.getdata(ofile, 0).T # The flux has format (4608, 55) thus is transposed
            oheader = pf.getheader(ofile, 0)
            wdata = pf.getdata(wfile, 0)
            fluxes[:,:,i] = odata
            waves[:,:,i] = wdata
            exptime += oheader['exptime']
            #bjd[i] = oheader['bjd']

        # merge the spectra
        mwave, mflux = waves[:,:,0], np.zeros((55, 4608))
        for i in range(55):
            wave, flux = sptools.merge_cosmic_clipping(waves[i,:,:].T, fluxes[i,:,:].T, **kwargs)
            mflux[i] = flux

    header = pf.getheader(objlist[0], 0)
    header['exptime'] = exptime
    #header['bjd'] = np.average(bjd)

    return mwave, mflux, header
コード例 #6
0
def merge_hermes_spectra(objlist, wscalelist=None, **kwargs):
    """
    Combines HERMES spectra with sigma clipping to remove cosmics. The input spectra
    are given as a list of filenames for the objects and for the wavelength scales.
    The output is the wavelength scale of the first object, the merged and sigma clipped
    flux, and the adapted header of the object. In this adapted header, the exposure
    time is the sum of all individual exposure times, and the observing time is averaged.
    Uses the L{ivs.spectra.tools.merge_cosmic_clipping} method to merge the spectra.

    >>> data = search('KIC9540226')
    >>> objlist = data['filename']
    >>> wave, flux, header = merge_hermes_spectra(objlist, wscalelist=None)

    @param objlist: list of OBJ or order merged filenames
    @param wscalelist: list of wavelengthscale filenames
    @param vrads: list of radial velocities (optional)
    @param vrad_units: units of the radial velocities
    @param sigma: value used for sigma clipping
    @param window: window size used in median filter
    @param runs: number of iterations through the spectra

    @return: The combined spectrum, cosmic clipped. (wave, flux, header)
    @rtype: [array, array, dict]
    """
    kwargs['full_output'] = False

    if wscalelist == None:
        #-- Order Merged spectra are straight forward
        exptime, bjd = 0, np.zeros(len(objlist))
        waves, fluxes = [],[]
        for i, ofile in enumerate(objlist):
            w, f, h = fits.read_spectrum(ofile, return_header=True)
            waves.append(w)
            fluxes.append(f)
            exptime += h['exptime']
            #bjd[i] = h['bjd']

        waves, fluxes = np.array(waves), np.array(fluxes)
        mwave, mflux = sptools.merge_cosmic_clipping(waves, fluxes, **kwargs)

    else:
        #-- The OBJ spectra need to be merged order per order
        # read all spectra
        exptime, bjd = 0, np.zeros(len(objlist))
        waves, fluxes = np.zeros((55,4608, len(objlist))), np.zeros((55,4608, len(wscalelist)))
        for i, (ofile, wfile) in enumerate(zip(objlist, wscalelist)):
            odata = pf.getdata(ofile, 0).T # The flux has format (4608, 55) thus is transposed
            oheader = pf.getheader(ofile, 0)
            wdata = pf.getdata(wfile, 0)
            fluxes[:,:,i] = odata
            waves[:,:,i] = wdata
            exptime += oheader['exptime']
            #bjd[i] = oheader['bjd']

        # merge the spectra
        mwave, mflux = waves[:,:,0], np.zeros((55, 4608))
        for i in range(55):
            wave, flux = sptools.merge_cosmic_clipping(waves[i,:,:].T, fluxes[i,:,:].T, **kwargs)
            mflux[i] = flux

    header = pf.getheader(objlist[0], 0)
    header['exptime'] = exptime
    #header['bjd'] = np.average(bjd)

    return mwave, mflux, header