def extract_spectrum(self): if not self.fit_params.get('model',False): popup = AlertDialog(text='Make sure you fit the trace centers first!') popup.open() return self.waiting.open() self.lamp = np.empty([2,2], dtype=np.float64) self.lamps = False if self.theapp.current_night.cals: self.lamp = self.theapp.current_night.cals if not self.current_flats \ else im_divide(self.theapp.current_night.cals, self.current_flats) self.lamp = self.lamp[self.region[1]:self.region[3]+1,self.region[0]:self.region[2]+1] self.lamps = True t = Thread(target=self.extract_wrapper) t.start()
def extract_spectrum(self): if not self.fit_params.get('model',False): popup = AlertDialog(text='Make sure you fit the trace centers first!') popup.open() return #need a calibration, too self.lamp = np.empty([2,2], dtype=np.float64) lamps = False if self.theapp.current_night.cals: self.lamp = self.theapp.current_night.cals if not self.current_flats \ else im_divide(self.theapp.current_night.cals, self.current_flats) self.lamp = self.lamp[self.region[1]:self.region[3]+1,self.region[0]:self.region[2]+1] lamps = True #im1, im2 = [x for x in copy.deepcopy(self.theapp.extract_pairs[self.pair_index])] #im1.load(); im2.load() #im1.data_array = extract.fix_distortion(im1.data_array, pdistort) #im2.data_array = extract.fix_distortion(im2.data_array, ndistort) #self.tell = make_region(im1, im2, self.region, flat=self.current_flats, telluric=True) #self.pextract = extract(self.fit_params['pmodel'], self.extractregion, self.tell, 'pos', lamp = self.lamp) #self.nextract = extract(self.fit_params['nmodel'], self.extractregion, self.tell, 'neg', lamp = self.lamp) self.current_extraction.fit_trace(self.fit_params['model'], self.lamp, lamps=lamps, extract=True) #if self.lamp.size > 0: # spectra, tellurics, lamps = self.current_extraction.extract(trace, # self.lamp, # False) #else: # spectra, telluric = self.current_extraction.extract(trace, self.lamp, True) #write uncalibrated spectra to fits files (will update after calibration) h1, h2 = fits.Header(), fits.Header() fitsimage(self.current_extraction.file1, h1) #im1 = FitsImage(self.current_extraction.file1, load=False) pstub = os.path.join(self.paths['out'], re.sub('.fits','-ap%i', os.path.basename(self.current_extraction.file1)))#im1.fitsfile) ext = ('.fits','-sky.fits','-lamp.fits') #h = im1.header h1['EXREGX1'] = (self.current_extraction.region[0], 'extraction region coordinate X1') h1['EXREGY1'] = (self.current_extraction.region[1], 'extraction region coordinate Y1') h1['EXREGX2'] = (self.current_extraction.region[2], 'extraction region coordinate X2') h1['EXREGY2'] = (self.current_extraction.region[3], 'extraction region coordinate Y2') fitsimage(self.current_extraction.file2, h2) nstub = os.path.join(self.paths['out'], re.sub('.fits','-ap%i', os.path.basename(self.current_extraction.file2)))#im2.fitsfile) #h = im2.header h2['EXREGX1'] = (self.current_extraction.region[0], 'extraction region coordinate X1') h2['EXREGY1'] = (self.current_extraction.region[1], 'extraction region coordinate Y1') h2['EXREGX2'] = (self.current_extraction.region[2], 'extraction region coordinate X2') h2['EXREGY2'] = (self.current_extraction.region[3], 'extraction region coordinate Y2') for j, typ in enumerate(['spec', 'tell']+['lamp']*lamps): specs = self.current_extraction.extracts[typ] if len(specs.shape) == 1: if self.fit_params['model'][0][0] > 0: fits.writeto((pstub+ext[j])%0, specs, header=h1) else: fits.writeto((nstub+ext[j])%0, specs*-1., header=h2) else: specs = specs.T for i, ap in enumerate(specs): if self.fit_params['model'][i][0] > 0: fits.writeto((pstub+ext[j])%i, ap, header=h1) else: fits.writeto((nstub+ext[j])%i, ap*-1., header=h2) return