def findtrans(name, atomdat): """ Given an ion and wavelength and list of transitions read with readatom(), return the best matching entry in atom.dat. >>> name, tr = findtrans('CIV 1550', atomdat) """ i = 0 name = name.strip() if name[:4] in ['H2J0','H2J1','H2J2','H2J3','H2J4','H2J5']: i = 4 else: while name[i].isalpha() or name[i] == '*': i += 1 ion = name[:i] wa = float(name[i:]) # must be sorted lowest to highest for indexnear isort = np.argsort(atomdat[ion].wa) sortwa = atomdat[ion].wa[isort] ind = indexnear(sortwa, wa) tr = atomdat[ion][isort[ind]] # Make a short string that describes the transition, like 'CIV 1550' wavstr = ('%.1f' % tr['wa']).split('.')[0] trstr = '%s %s' % (ion, wavstr) return trstr, atomdat[ion][isort[ind]]
def on_keypress(self, event): """ Add or remove a continuum point. Updates: self.contpoints """ if event.key == 'q': for item in self.connections: self.fig.canvas.mpl_disconnect(item) self.contpoints = None self.continuum = None self.finished = True return if event.key == 'k': for item in self.connections: self.fig.canvas.mpl_disconnect(item) self.finished = True return if event.inaxes != self.fig.axes[0]: return if event.key == 'a': # add a point to contpoints x,y = event.xdata,event.ydata if x not in zip(*self.contpoints)[0]: self.contpoints.append((x,y)) self.update() elif event.key == 'd': # remove a point from contpoints contx,conty = zip(*self.contpoints) sep = np.hypot(event.xdata - contx, event.ydata - conty) self.contpoints.remove(self.contpoints[sep.argmin()]) self.update() elif event.key == 'b': # Add a break to the continuum. self.breaks.append(event.xdata) self.breaks.sort() self.update() elif event.key == 'r': # remove a break i = indexnear(self.breaks, event.xdata) if i not in (0, len(self.breaks)-1): self.breaks.remove(self.breaks[i]) self.update() elif event.key == 's': c = raw_input('New FWHM in pixels of Gaussian to convolve with? ' '(blank for no smoothing) ') if c == '': # restore spectrum self.smoothby = None self.update() else: try: fwhm = float(c) except TypeError: print 'FWHM must be a floating point number >= 1' if fwhm < 1: self.smoothby = None else: self.smoothby = fwhm self.update() elif event.key == '?': print self.help_message