def create(self, shiftfile=None): members = {} row = 0 dshift = False abshift = False # Parse out shift file, if provided if shiftfile != None: sdict = ShiftFile(shiftfile) elif self.shiftfile != None: sdict = ShiftFile(self.shiftfile) shift_frame = sdict['frame'] shift_units = sdict['units'] refimage = sdict['refimage'] if sdict['form']=='delta': dshift = True else: abshift = True for f in self.input: xshift = sdict[f][0] yshift = sdict[f][1] rot = sdict[f][2] scale = sdict[f][3] #This may not be the right thing to do, may want to keep _flt in rootname # to distinguish between _c0h.fits, _c0f.fits and '.c0h' fname = fu.buildNewRootname(f) members[fname] = ASNMember(row=row, dshift=dshift, abshift=abshift, rot=rot, xshift=xshift, yshift=yshift, scale=scale, refimage=refimage, shift_frame=shift_frame, shift_units=shift_units) row+=1 else: for f in self.input: # also here fname = fu.buildNewRootname(f) members[fname] = ASNMember(row=row) row+=1 self['members'].update(members) self['order']=self.order
def __init__(self, inlist=None, output=None, shiftfile=None): """ Parameters =========== `inlist`: a list a python list of filenames `output` a string a user specified output name or 'final' `shiftfile`: a string a name of a shift file, if given, the association table will be updated with the values in the shift file """ if output == None: if len(inlist) == 1: self.output = fu.buildNewRootname(inlist[0]) else: self.output = 'final' else: self.output = fu.buildNewRootname(output) # Ensure that output name does not already contain '_drz' _indx = self.output.find('_drz') if _indx > 0: self.output = self.output[:_indx] self.order = [] if inlist != None: for fn in inlist: if fu.findFile(fu.buildRootname(fn)): self.order.append(fu.buildNewRootname(fn)) else: # This may mean corrupted asn table in which a file is listed as present # when it is missing. raise IOError, 'File %s not found.\n' %fn dict.__init__(self, output=self.output, order=[], members={}) if inlist != None: self.input = [fu.buildRootname(f) for f in inlist] self.shiftfile = shiftfile
def buildPrimary(self, fasn, output=None): _prihdr = fits.Header([fits.Card('SIMPLE', True, 'Fits standard'), fits.Card('BITPIX ', 16 ,' Bits per pixel'), fits.Card('NAXIS ', 0 ,' Number of axes'), fits.Card('ORIGIN ', 'NOAO-IRAF FITS Image Kernel July 1999' ,'FITS file originator'), fits.Card('IRAF-TLM', '18:26:13 (27/03/2000)' ,' Time of last modification'), fits.Card('EXTEND ', True ,' File may contain standard extensions'), fits.Card('NEXTEND ', 1 ,' Number of standard extensions'), fits.Card('DATE ', '2001-02-14T20:07:57',' date this file was written (yyyy-mm-dd)'), fits.Card('FILENAME', 'hr_box_asn.fits' ,' name of file'), fits.Card('FILETYPE', 'ASN_TABLE' ,' type of data found in data file'), fits.Card('TELESCOP', 'HST' ,' telescope used to acquire data'), fits.Card('INSTRUME', 'ACS ' ,' identifier for instrument used to acquire data'), fits.Card('EQUINOX ', 2000.0 ,' equinox of celestial coord. system'), fits.Card('ROOTNAME', 'hr_box ' ,' rootname of the observation set'), fits.Card('PRIMESI ', 'ACS ' ,' instrument designated as prime'), fits.Card('TARGNAME', 'SIM-DITHER' ,'proposer\'s target name'), fits.Card('RA_TARG ', 0. ,' right ascension of the target (deg) (J2000)'), fits.Card('DEC_TARG', 0. ,' declination of the target (deg) (J2000)'), fits.Card('DETECTOR', 'HRC ' ,' detector in use: WFC, HRC, or SBC'), fits.Card('ASN_ID ', 'hr_box ' ,' unique identifier assigned to association'), fits.Card('ASN_TAB ', 'hr_box_asn.fits' ,' name of the association table')]) # Format time values for keywords IRAF-TLM, and DATE _ltime = time.localtime(time.time()) tlm_str = time.strftime('%H:%M:%S (%d/%m/%Y)',_ltime) date_str = time.strftime('%Y-%m-%dT%H:%M:%S',_ltime) origin_str = 'FITS Version '+ astropy.__version__ # Build PRIMARY HDU _hdu = fits.PrimaryHDU(header=_prihdr) fasn.append(_hdu) newhdr = fasn['PRIMARY'].header mem0name = self['order'][0] refimg = self['members'][mem0name]['refimage'] shframe = self['members'][mem0name]['shift_frame'] fullname = fu.buildRootname(mem0name,ext=['_flt.fits', '_c0h.fits', '_c0f.fits']) try: # Open img1 to obtain keyword values for updating template fimg1 = fits.open(fullname) except: print 'File %s does not exist' % fullname kws = ['INSTRUME', 'PRIMESI', 'TARGNAME', 'DETECTOR', 'RA_TARG', 'DEC_TARG'] mem0hdr = fimg1['PRIMARY'].header default = 'UNKNOWN' for kw in kws: try: newhdr[kw] = mem0hdr[kw] except: newhdr[kw] = default fimg1.close() if not output: output = self['output'] outfilename = fu.buildNewRootname(output, extn='_asn.fits') newhdr['IRAF-TLM']=tlm_str newhdr['DATE'] = date_str newhdr['ORIGIN'] = origin_str newhdr['ROOTNAME'] = output newhdr['FILENAME'] = outfilename newhdr['ASN_ID'] = output newhdr['ASN_TAB'] = outfilename newhdr['SHFRAME'] = (shframe, "Frame which shifts are measured") newhdr['REFIMAGE'] = (refimg, "Image shifts were measured from")