Exemplo n.º 1
0
def imred(rawdir, prodir, cleanup=True):
    print rawdir
    print prodir

    #get the name of the files
    infile_list=glob.glob(rawdir+'*.fits')
    infiles=','.join(['%s' % x for x in infile_list])
    

    #get the current date for the files
    obsdate=os.path.basename(infile_list[0])[1:9]
    print obsdate

    #set up some files that will be needed
    logfile='imred'+obsdate+'.log'
    flatimage='FLAT%s.fits' % (obsdate)
    dbfile='spec%s.db' % obsdate

    #create the observation log
    obs_dict=obslog(infile_list)

 
    #prepare the data
    saltprepare(infiles, '', 'p', createvar=False, badpixelimage='', clobber=True, logfile=logfile, verbose=True)

    #bias subtract the data
    saltbias('pP*fits', '', 'b', subover=True, trim=True, subbias=False, masterbias='',  
              median=False, function='polynomial', order=5, rej_lo=3.0, rej_hi=5.0, 
              niter=10, plotover=False, turbo=False, 
              clobber=True, logfile=logfile, verbose=True)

    #gain correct the data
    saltgain('bpP*fits', '', 'g', usedb=False, mult=True, clobber=True, logfile=logfile, verbose=True)

    #cross talk correct the data
    saltxtalk('gbpP*fits', '', 'x', xtalkfile = "", usedb=False, clobber=True, logfile=logfile, verbose=True)

    #cosmic ray clean the data
    #only clean the object data
    for i in range(len(infile_list)):
      if obs_dict['CCDTYPE'][i].count('OBJECT') and obs_dict['INSTRUME'][i].count('RSS'):
          img='xgbp'+os.path.basename(infile_list[i])
          saltcrclean(img, img, '', crtype='edge', thresh=5, mbox=11, bthresh=5.0,
                flux_ratio=0.2, bbox=25, gain=1.0, rdnoise=5.0, fthresh=5.0, bfactor=2,
                gbox=3, maxiter=5, multithread=True,  clobber=True, logfile=logfile, verbose=True)
 
    #flat field correct the data
    flat_imgs=''
    for i in range(len(infile_list)):
        if obs_dict['CCDTYPE'][i].count('FLAT'):
           if flat_imgs: flat_imgs += ','
           flat_imgs += 'xgbp'+os.path.basename(infile_list[i])

    if len(flat_imgs)!=0:
         saltcombine(flat_imgs,flatimage, method='median', reject=None, mask=False,    \
                weight=True, blank=0, scale='average', statsec='[200:300, 600:800]', lthresh=3,    \
                hthresh=3, clobber=True, logfile=logfile, verbose=True)
         #saltillum(flatimage, flatimage, '', mbox=11, clobber=True, logfile=logfile, verbose=True)

         saltflat('xgbpP*fits', '', 'f', flatimage, minflat=500, clobber=True, logfile=logfile, verbose=True)
    else:
         flats=None
         imfiles=glob.glob('xgbpP*fits')
         for f in imfiles:
             shutil.copy(f, 'f'+f)

    #mosaic the data
    geomfile=iraf.osfn("pysalt$data/rss/RSSgeom.dat")
    saltmosaic('fxgbpP*fits', '', 'm', geomfile, interp='linear', cleanup=True, geotran=True, clobber=True, logfile=logfile, verbose=True)

    #clean up the images
    if cleanup:
           for f in glob.glob('p*fits'): os.remove(f)
           for f in glob.glob('bp*fits'): os.remove(f)
           for f in glob.glob('gbp*fits'): os.remove(f)
           for f in glob.glob('xgbp*fits'): os.remove(f)
           for f in glob.glob('fxgbp*fits'): os.remove(f)
Exemplo n.º 2
0
import os, sys
from astropy.io import fits

from pyraf import iraf
from iraf import pysalt

from saltprepare import saltprepare
from saltbias import saltbias

outfile = 'tmp.fits'

saltprepare(sys.argv[1],
            outfile,
            '',
            createvar=False,
            badpixelimage='',
            clobber=True,
            logfile='tmp.log',
            verbose=True)
saltbias(outfile,
         outfile,
         '',
         subover=True,
         trim=True,
         subbias=False,
         masterbias='',
         median=False,
         function='polynomial',
         order=5,
         rej_lo=3.0,
         rej_hi=5.0,
Exemplo n.º 3
0
def imred(rawdir, prodir, cleanup=True):
    print rawdir
    print prodir

    #get the name of the files
    infile_list = glob.glob(rawdir + '*.fits')
    infiles = ','.join(['%s' % x for x in infile_list])

    #get the current date for the files
    obsdate = os.path.basename(infile_list[0])[1:9]
    print obsdate

    #set up some files that will be needed
    logfile = 'imred' + obsdate + '.log'
    flatimage = 'FLAT%s.fits' % (obsdate)
    dbfile = 'spec%s.db' % obsdate

    #create the observation log
    obs_dict = obslog(infile_list)

    #prepare the data
    saltprepare(infiles,
                '',
                'p',
                createvar=False,
                badpixelimage='',
                clobber=True,
                logfile=logfile,
                verbose=True)

    #bias subtract the data
    saltbias('pP*fits',
             '',
             'b',
             subover=True,
             trim=True,
             subbias=False,
             masterbias='',
             median=False,
             function='polynomial',
             order=5,
             rej_lo=3.0,
             rej_hi=5.0,
             niter=10,
             plotover=False,
             turbo=False,
             clobber=True,
             logfile=logfile,
             verbose=True)

    #gain correct the data
    saltgain('bpP*fits',
             '',
             'g',
             usedb=False,
             mult=True,
             clobber=True,
             logfile=logfile,
             verbose=True)

    #cross talk correct the data
    saltxtalk('gbpP*fits',
              '',
              'x',
              xtalkfile="",
              usedb=False,
              clobber=True,
              logfile=logfile,
              verbose=True)

    #cosmic ray clean the data
    #only clean the object data
    for i in range(len(infile_list)):
        if obs_dict['CCDTYPE'][i].count(
                'OBJECT') and obs_dict['INSTRUME'][i].count('RSS'):
            img = 'xgbp' + os.path.basename(infile_list[i])
            saltcrclean(img,
                        img,
                        '',
                        crtype='edge',
                        thresh=5,
                        mbox=11,
                        bthresh=5.0,
                        flux_ratio=0.2,
                        bbox=25,
                        gain=1.0,
                        rdnoise=5.0,
                        fthresh=5.0,
                        bfactor=2,
                        gbox=3,
                        maxiter=5,
                        multithread=True,
                        clobber=True,
                        logfile=logfile,
                        verbose=True)

    #flat field correct the data
    flat_imgs = ''
    for i in range(len(infile_list)):
        if obs_dict['CCDTYPE'][i].count('FLAT'):
            if flat_imgs: flat_imgs += ','
            flat_imgs += 'xgbp' + os.path.basename(infile_list[i])

    if len(flat_imgs) != 0:
        saltcombine(flat_imgs,flatimage, method='median', reject=None, mask=False,    \
               weight=True, blank=0, scale='average', statsec='[200:300, 600:800]', lthresh=3,    \
               hthresh=3, clobber=True, logfile=logfile, verbose=True)
        #saltillum(flatimage, flatimage, '', mbox=11, clobber=True, logfile=logfile, verbose=True)

        saltflat('xgbpP*fits',
                 '',
                 'f',
                 flatimage,
                 minflat=500,
                 clobber=True,
                 logfile=logfile,
                 verbose=True)
    else:
        flats = None
        imfiles = glob.glob('xgbpP*fits')
        for f in imfiles:
            shutil.copy(f, 'f' + f)

    #mosaic the data
    geomfile = iraf.osfn("pysalt$data/rss/RSSgeom.dat")
    saltmosaic('fxgbpP*fits',
               '',
               'm',
               geomfile,
               interp='linear',
               cleanup=True,
               geotran=True,
               clobber=True,
               logfile=logfile,
               verbose=True)

    #clean up the images
    if cleanup:
        for f in glob.glob('p*fits'):
            os.remove(f)
        for f in glob.glob('bp*fits'):
            os.remove(f)
        for f in glob.glob('gbp*fits'):
            os.remove(f)
        for f in glob.glob('xgbp*fits'):
            os.remove(f)
        for f in glob.glob('fxgbp*fits'):
            os.remove(f)
Exemplo n.º 4
0
#Script for making BPM mask 

import os, sys
from astropy.io import fits

from pyraf import iraf
from iraf import pysalt

from saltprepare import saltprepare
from saltbias import saltbias

outfile = 'tmp.fits'

saltprepare(sys.argv[1], outfile, '', createvar=False, badpixelimage='', clobber=True, logfile='tmp.log', verbose=True)
saltbias(outfile, outfile, '', subover=True, trim=True, subbias=False, masterbias='', median=False, function='polynomial', order=5,rej_lo=3.0,rej_hi=5.0, niter=10, plotover=False, turbo=False, clobber=True, logfile='tmp.log', verbose=True)


hdu = fits.open(outfile)
limit = float(sys.argv[2])
for i in range(1,len(hdu)): 
    mask = (hdu[i].data < limit)
    hdu[i].data = hdu[i].data * 0.0
    hdu[i].data[mask] = 1


if os.path.isfile('bpm.fits'): os.remove('bpm.fits')
hdu.writeto('bpm.fits')

os.remove('tmp.fits')
os.remove('tmp.log')
Exemplo n.º 5
0
def specred(rawdir, prodir, imreduce=True, specreduce=True, calfile=None, lamp='Ar', automethod='Matchlines', skysection=[800,1000], cleanup=True):
    print rawdir
    print prodir

    #get the name of the files
    infile_list=glob.glob(rawdir+'*.fits')
    infiles=','.join(['%s' % x for x in infile_list])
    

    #get the current date for the files
    obsdate=os.path.basename(infile_list[0])[1:9]
    print obsdate

    #set up some files that will be needed
    logfile='spec'+obsdate+'.log'
    flatimage='FLAT%s.fits' % (obsdate)
    dbfile='spec%s.db' % obsdate

    #create the observation log
    obs_dict=obslog(infile_list)

 
    if imreduce:   
      #prepare the data
      saltprepare(infiles, '', 'p', createvar=False, badpixelimage='', clobber=True, logfile=logfile, verbose=True)

      #bias subtract the data
      saltbias('pP*fits', '', 'b', subover=True, trim=True, subbias=False, masterbias='',  
              median=False, function='polynomial', order=5, rej_lo=3.0, rej_hi=5.0, 
              niter=10, plotover=False, turbo=False, 
              clobber=True, logfile=logfile, verbose=True)

      #gain correct the data
      saltgain('bpP*fits', '', 'g', usedb=False, mult=True, clobber=True, logfile=logfile, verbose=True)

      #cross talk correct the data
      saltxtalk('gbpP*fits', '', 'x', xtalkfile = "", usedb=False, clobber=True, logfile=logfile, verbose=True)

      #cosmic ray clean the data
      #only clean the object data
      for i in range(len(infile_list)):
        if obs_dict['CCDTYPE'][i].count('OBJECT') and obs_dict['INSTRUME'][i].count('RSS'):
          img='xgbp'+os.path.basename(infile_list[i])
          saltcrclean(img, img, '', crtype='edge', thresh=5, mbox=11, bthresh=5.0,
                flux_ratio=0.2, bbox=25, gain=1.0, rdnoise=5.0, fthresh=5.0, bfactor=2,
                gbox=3, maxiter=5, multithread=True,  clobber=True, logfile=logfile, verbose=True)
 
      #flat field correct the data
      flat_imgs=''
      for i in range(len(infile_list)):
        if obs_dict['CCDTYPE'][i].count('FLAT'):
           if flat_imgs: flat_imgs += ','
           flat_imgs += 'xgbp'+os.path.basename(infile_list[i])

      if len(flat_imgs)!=0:
         saltcombine(flat_imgs,flatimage, method='median', reject=None, mask=False,    \
                weight=True, blank=0, scale='average', statsec='[200:300, 600:800]', lthresh=3,    \
                hthresh=3, clobber=True, logfile=logfile, verbose=True)
         saltillum(flatimage, flatimage, '', mbox=11, clobber=True, logfile=logfile, verbose=True)

         saltflat('xgbpP*fits', '', 'f', flatimage, minflat=500, clobber=True, logfile=logfile, verbose=True)
      else:
         flats=None
         imfiles=glob.glob('cxgbpP*fits')
         for f in imfiles:
             shutil.copy(f, 'f'+f)

      #mosaic the data
      geomfile=iraf.osfn("pysalt$data/rss/RSSgeom.dat")
      saltmosaic('fxgbpP*fits', '', 'm', geomfile, interp='linear', cleanup=True, geotran=True, clobber=True, logfile=logfile, verbose=True)

      #clean up the images
      if cleanup:
           for f in glob.glob('p*fits'): os.remove(f)
           for f in glob.glob('bp*fits'): os.remove(f)
           for f in glob.glob('gbp*fits'): os.remove(f)
           for f in glob.glob('xgbp*fits'): os.remove(f)
           for f in glob.glob('fxgbp*fits'): os.remove(f)


    #set up the name of the images
    if specreduce:
       for i in range(len(infile_list)):
           if obs_dict['OBJECT'][i].upper().strip()=='ARC':
               lamp=obs_dict['LAMPID'][i].strip().replace(' ', '')
               arcimage='mfxgbp'+os.path.basename(infile_list[i])
               lampfile=iraf.osfn("pysalt$data/linelists/%s.txt" % lamp)

               specidentify(arcimage, lampfile, dbfile, guesstype='rss', 
                  guessfile='', automethod=automethod,  function='legendre',  order=5, 
                  rstep=100, rstart='middlerow', mdiff=10, thresh=3, niter=5, 
                  inter=True, clobber=True, logfile=logfile, verbose=True)

               specrectify(arcimage, outimages='', outpref='x', solfile=dbfile, caltype='line', 
                   function='legendre',  order=3, inttype='interp', w1=None, w2=None, dw=None, nw=None,
                   blank=0.0, clobber=True, logfile=logfile, verbose=True)
     

    objimages=''
    for i in range(len(infile_list)):
       if obs_dict['CCDTYPE'][i].count('OBJECT') and obs_dict['INSTRUME'][i].count('RSS'):
          if objimages: objimages += ','
          objimages+='mfxgbp'+os.path.basename(infile_list[i])

    if specreduce:
      #run specidentify on the arc files

      specrectify(objimages, outimages='', outpref='x', solfile=dbfile, caltype='line', 
           function='legendre',  order=3, inttype='interp', w1=None, w2=None, dw=None, nw=None,
           blank=0.0, clobber=True, logfile=logfile, verbose=True)


    #create the spectra text files for all of our objects
    spec_list=[]
    for img in objimages.split(','):
       spec_list.extend(createspectra('x'+img, obsdate, smooth=False, skysection=skysection, clobber=True))
    print spec_list
 
    #determine the spectrophotometric standard
    extfile=iraf.osfn('pysalt$data/site/suth_extinct.dat')

    for spec, am, et, pc in spec_list:
        if pc=='CAL_SPST':
           stdstar=spec.split('.')[0]
           print stdstar, am, et
           stdfile=iraf.osfn('pysalt$data/standards/spectroscopic/m%s.dat' % stdstar.lower().replace('-', '_'))
           print stdfile
           ofile=spec.replace('txt', 'sens')
           calfile=ofile #assumes only one observations of a SP standard
           specsens(spec, ofile, stdfile, extfile, airmass=am, exptime=et,
                stdzp=3.68e-20, function='polynomial', order=3, thresh=3, niter=5,
                clobber=True, logfile='salt.log',verbose=True)
    

    for spec, am, et, pc in spec_list:
        if pc!='CAL_SPST':
           ofile=spec.replace('txt', 'spec')
           speccal(spec, ofile, calfile, extfile, airmass=am, exptime=et, 
                  clobber=True, logfile='salt.log',verbose=True)
           #clean up the spectra for bad pixels
           cleanspectra(ofile)