def get_ruler_distances(self, viewer): mode = self.units.lower() points = self.get_points() x1, y1 = points[0] x2, y2 = points[1] try: image = viewer.get_image() if mode in ('arcmin', 'degrees'): # Calculate RA and DEC for the three points # origination point ra_org, dec_org = image.pixtoradec(x1, y1) # destination point ra_dst, dec_dst = image.pixtoradec(x2, y2) # "heel" point making a right triangle ra_heel, dec_heel = image.pixtoradec(x2, y1) if mode == 'arcmin': text_h = wcs.get_starsep_RaDecDeg(ra_org, dec_org, ra_dst, dec_dst) text_x = wcs.get_starsep_RaDecDeg(ra_org, dec_org, ra_heel, dec_heel) text_y = wcs.get_starsep_RaDecDeg(ra_heel, dec_heel, ra_dst, dec_dst) else: sep_h = wcs.deltaStarsRaDecDeg(ra_org, dec_org, ra_dst, dec_dst) text_h = ("%.8f" % sep_h) sep_x = wcs.deltaStarsRaDecDeg(ra_org, dec_org, ra_heel, dec_heel) text_x = ("%.8f" % sep_x) sep_y = wcs.deltaStarsRaDecDeg(ra_heel, dec_heel, ra_dst, dec_dst) text_y = ("%.8f" % sep_y) else: dx = abs(x2 - x1) dy = abs(y2 - y1) dh = np.sqrt(dx**2 + dy**2) text_x = ("%.3f" % dx) text_y = ("%.3f" % dy) text_h = ("%.3f" % dh) except Exception as e: text_h = 'BAD WCS' text_x = 'BAD WCS' text_y = 'BAD WCS' return (text_x, text_y, text_h)
def get_ruler_distances(self, viewer): mode = self.units.lower() points = self.get_points() x1, y1 = points[0] x2, y2 = points[1] try: image = viewer.get_image() if mode in ('arcmin', 'degrees'): # Calculate RA and DEC for the three points # origination point ra_org, dec_org = image.pixtoradec(x1, y1) # destination point ra_dst, dec_dst = image.pixtoradec(x2, y2) # "heel" point making a right triangle ra_heel, dec_heel = image.pixtoradec(x2, y1) if mode == 'arcmin': text_h = wcs.get_starsep_RaDecDeg(ra_org, dec_org, ra_dst, dec_dst) text_x = wcs.get_starsep_RaDecDeg(ra_org, dec_org, ra_heel, dec_heel) text_y = wcs.get_starsep_RaDecDeg(ra_heel, dec_heel, ra_dst, dec_dst) else: sep_h = wcs.deltaStarsRaDecDeg(ra_org, dec_org, ra_dst, dec_dst) text_h = str(sep_h) sep_x = wcs.deltaStarsRaDecDeg(ra_org, dec_org, ra_heel, dec_heel) text_x = str(sep_x) sep_y = wcs.deltaStarsRaDecDeg(ra_heel, dec_heel, ra_dst, dec_dst) text_y = str(sep_y) else: dx = abs(x2 - x1) dy = abs(y2 - y1) dh = math.sqrt(dx**2 + dy**2) text_x = str(dx) text_y = str(dy) text_h = ("%.3f" % dh) except Exception as e: text_h = 'BAD WCS' text_x = 'BAD WCS' text_y = 'BAD WCS' return (text_x, text_y, text_h)
def mosaic(self, paths, new_mosaic=False, name=None, image_loader=None): if image_loader is None: image_loader = self.fv.load_image # NOTE: this runs in a non-gui thread self.fv.assert_nongui_thread() # Initialize progress bar self.total_files = len(paths) if self.total_files == 0: return self.ingest_count = 0 self.images = [] self.ev_intr.clear() self.process_elapsed = 0.0 self.init_progress() self.start_time = time.time() image = image_loader(paths[0]) time_intr1 = time.time() fov_deg = self.settings.get('fov_deg', 0.2) max_center_deg_delta = self.settings.get('max_center_deg_delta', None) # If there is no current mosaic then prepare a new one if new_mosaic or (self.img_mosaic is None): self.prepare_mosaic(image, fov_deg, name=name) elif max_center_deg_delta is not None: # get our center position ctr_x, ctr_y = self.img_mosaic.get_center() ra1_deg, dec1_deg = self.img_mosaic.pixtoradec(ctr_x, ctr_y) # get new image's center position ctr_x, ctr_y = image.get_center() ra2_deg, dec2_deg = image.pixtoradec(ctr_x, ctr_y) # distance between our center and new image's center dist = wcs.deltaStarsRaDecDeg(ra1_deg, dec1_deg, ra2_deg, dec2_deg) # if distance is greater than trip setting, start a new mosaic if dist > max_center_deg_delta: self.prepare_mosaic(image, fov_deg, name=name) self.update_status("Loading images...") #self.fv.gui_call(self.fv.error_wrap, self.ingest_one, image) #self.update_progress(float(self.ingest_count)/self.total_files) time_intr2 = time.time() self.process_elapsed += time_intr2 - time_intr1 num_threads = self.settings.get('num_threads', 4) groups = dp.split_n(paths, num_threads) self.logger.info("len groups=%d" % (len(groups))) for group in groups: self.fv.nongui_do(self.mosaic_some, group, image_loader=image_loader) return self.img_mosaic
def mosaic(self, paths, new_mosaic=False): # NOTE: this runs in a non-gui thread self.fv.assert_nongui_thread() # Initialize progress bar self.total_files = len(paths) if self.total_files == 0: return self.ingest_count = 0 self.ev_intr.clear() self.process_elapsed = 0.0 self.init_progress() self.start_time = time.time() image = self.fv.load_image(paths[0]) time_intr1 = time.time() fov_deg = self.settings.get('fov_deg', 1.0) # If there is no current mosaic then prepare a new one if new_mosaic or (self.img_mosaic == None): self.prepare_mosaic(image, fov_deg) else: # get our center position ctr_x, ctr_y = self.img_mosaic.get_center() ra1_deg, dec1_deg = self.img_mosaic.pixtoradec(ctr_x, ctr_y) # get new image's center position ctr_x, ctr_y = image.get_center() ra2_deg, dec2_deg = image.pixtoradec(ctr_x, ctr_y) # distance between our center and new image's center dist = wcs.deltaStarsRaDecDeg(ra1_deg, dec1_deg, ra2_deg, dec2_deg) # if distance is greater than current fov, start a new mosaic if dist > fov_deg: self.prepare_mosaic(image, fov_deg) self.fv.gui_call(self.fv.error_wrap, self.ingest_one, image) self.update_progress(float(self.ingest_count)/self.total_files) time_intr2 = time.time() self.process_elapsed += time_intr2 - time_intr1 num_threads = self.settings.get('num_threads', 4) groups = self.split_n(paths[1:], num_threads) for group in groups: self.fv.nongui_do(self.mosaic_some, group)
def mosaic(self, paths, new_mosaic=False): # NOTE: this runs in a non-gui thread self.fv.assert_nongui_thread() # Initialize progress bar self.total_files = len(paths) if self.total_files == 0: return self.ingest_count = 0 self.ev_intr.clear() self.process_elapsed = 0.0 self.init_progress() self.start_time = time.time() image = self.fv.load_image(paths[0]) time_intr1 = time.time() fov_deg = self.settings.get('fov_deg', 1.0) # If there is no current mosaic then prepare a new one if new_mosaic or (self.img_mosaic == None): self.prepare_mosaic(image, fov_deg) else: # get our center position ctr_x, ctr_y = self.img_mosaic.get_center() ra1_deg, dec1_deg = self.img_mosaic.pixtoradec(ctr_x, ctr_y) # get new image's center position ctr_x, ctr_y = image.get_center() ra2_deg, dec2_deg = image.pixtoradec(ctr_x, ctr_y) # distance between our center and new image's center dist = wcs.deltaStarsRaDecDeg(ra1_deg, dec1_deg, ra2_deg, dec2_deg) # if distance is greater than current fov, start a new mosaic if dist > fov_deg: self.prepare_mosaic(image, fov_deg) #self.fv.gui_call(self.fv.error_wrap, self.ingest_one, image) #self.update_progress(float(self.ingest_count)/self.total_files) time_intr2 = time.time() self.process_elapsed += time_intr2 - time_intr1 num_threads = self.settings.get('num_threads', 4) groups = self.split_n(paths, num_threads) for group in groups: self.fv.nongui_do(self.mosaic_some, group)
def redo(self): obj = self.canvas.get_object_by_tag(self.areatag) if not obj.kind in ('rectangle', 'circle'): return True try: image = self.fitsimage.get_image() if obj.kind == 'rectangle': # if the object drawn is a rectangle, calculate the radius # of a circle necessary to cover the area # calculate center of bbox x1, y1, x2, y2 = obj.get_llur() wd = x2 - x1 dw = wd // 2 ht = y2 - y1 dh = ht // 2 ctr_x, ctr_y = x1 + dw, y1 + dh ra_ctr, dec_ctr = image.pixtoradec(ctr_x, ctr_y, format='str') # Calculate RA and DEC for the three points # origination point ra_org, dec_org = image.pixtoradec(x1, y1) # destination point ra_dst, dec_dst = image.pixtoradec(x2, y2) # "heel" point making a right triangle ra_heel, dec_heel = image.pixtoradec(x1, y2) ht_deg = wcs.deltaStarsRaDecDeg(ra_org, dec_org, ra_heel, dec_heel) wd_deg = wcs.deltaStarsRaDecDeg(ra_heel, dec_heel, ra_dst, dec_dst) radius_deg = wcs.deltaStarsRaDecDeg(ra_heel, dec_heel, ra_dst, dec_dst) else: # if the object drawn is a circle, calculate the box # enclosed by the circle ctr_x, ctr_y = obj.crdmap.to_data(obj.x, obj.y) ra_ctr, dec_ctr = image.pixtoradec(ctr_x, ctr_y) dst_x, dst_y = obj.crdmap.to_data(obj.x + obj.radius, obj.y) ra_dst, dec_dst = image.pixtoradec(dst_x, dst_y) radius_deg = wcs.deltaStarsRaDecDeg(ra_ctr, dec_ctr, ra_dst, dec_dst) # redo as str format for widget ra_ctr, dec_ctr = image.pixtoradec(ctr_x, ctr_y, format='str') wd = ht = math.fabs(dst_x - ctr_x) * 2.0 dw = wd // 2 dh = ht // 2 ra_org, dec_org = image.pixtoradec(ctr_x, ctr_y - dh) ra_dst, dec_dst = image.pixtoradec(ctr_x, ctr_y + dh) ht_deg = wcs.deltaStarsRaDecDeg(ra_org, dec_org, ra_dst, dec_dst) ra_org, dec_org = image.pixtoradec(ctr_x - dw, ctr_y) ra_dst, dec_dst = image.pixtoradec(ctr_x + dw, ctr_y) wd_deg = wcs.deltaStarsRaDecDeg(ra_org, dec_org, ra_dst, dec_dst) # width and height are specified in arcmin sgn, deg, mn, sec = wcs.degToDms(wd_deg) wd = deg * 60.0 + float(mn) + sec / 60.0 sgn, deg, mn, sec = wcs.degToDms(ht_deg) ht = deg * 60.0 + float(mn) + sec / 60.0 sgn, deg, mn, sec = wcs.degToDms(radius_deg) radius = deg * 60.0 + float(mn) + sec / 60.0 #wd, ht, radius = wd_deg, ht_deg, radius_deg except Exception as e: errmsg = 'Error calculating bounding box: %s' % str(e) self.logger.error(errmsg) self.fv.show_error(errmsg) return True # Copy the image parameters out to the widget d = { 'ra': ra_ctr, 'dec': dec_ctr, 'width': str(wd), 'height': ht, 'r': radius, 'r2': radius, 'r1': 0.0, } self._update_widgets(d) return True
def redo(self): obj = self.canvas.getObjectByTag(self.areatag) if not obj.kind in ('rectangle', 'circle'): return True try: image = self.fitsimage.get_image() if obj.kind == 'rectangle': # if the object drawn is a rectangle, calculate the radius # of a circle necessary to cover the area # calculate center of bbox x1, y1, x2, y2 = obj.get_llur() wd = x2 - x1 dw = wd // 2 ht = y2 - y1 dh = ht // 2 ctr_x, ctr_y = x1 + dw, y1 + dh ra_ctr, dec_ctr = image.pixtoradec(ctr_x, ctr_y, format='str') # Calculate RA and DEC for the three points # origination point ra_org, dec_org = image.pixtoradec(x1, y1) # destination point ra_dst, dec_dst = image.pixtoradec(x2, y2) # "heel" point making a right triangle ra_heel, dec_heel = image.pixtoradec(x1, y2) ht_deg = wcs.deltaStarsRaDecDeg(ra_org, dec_org, ra_heel, dec_heel) wd_deg = wcs.deltaStarsRaDecDeg(ra_heel, dec_heel, ra_dst, dec_dst) radius_deg = wcs.deltaStarsRaDecDeg(ra_heel, dec_heel, ra_dst, dec_dst) else: # if the object drawn is a circle, calculate the box # enclosed by the circle ctr_x, ctr_y = obj.crdmap.to_data(obj.x, obj.y) ra_ctr, dec_ctr = image.pixtoradec(ctr_x, ctr_y) dst_x, dst_y = obj.crdmap.to_data(obj.x + obj.radius, obj.y) ra_dst, dec_dst = image.pixtoradec(dst_x, dst_y) radius_deg = wcs.deltaStarsRaDecDeg(ra_ctr, dec_ctr, ra_dst, dec_dst) # redo as str format for widget ra_ctr, dec_ctr = image.pixtoradec(ctr_x, ctr_y, format='str') wd = ht = math.fabs(dst_x - ctr_x) * 2.0 dw = wd // 2 dh = ht // 2 ra_org, dec_org = image.pixtoradec(ctr_x, ctr_y - dh) ra_dst, dec_dst = image.pixtoradec(ctr_x, ctr_y + dh) ht_deg = wcs.deltaStarsRaDecDeg(ra_org, dec_org, ra_dst, dec_dst) ra_org, dec_org = image.pixtoradec(ctr_x - dw, ctr_y) ra_dst, dec_dst = image.pixtoradec(ctr_x + dw, ctr_y) wd_deg = wcs.deltaStarsRaDecDeg(ra_org, dec_org, ra_dst, dec_dst) # width and height are specified in arcmin sgn, deg, mn, sec = wcs.degToDms(wd_deg) wd = deg*60.0 + float(mn) + sec/60.0 sgn, deg, mn, sec = wcs.degToDms(ht_deg) ht = deg*60.0 + float(mn) + sec/60.0 sgn, deg, mn, sec = wcs.degToDms(radius_deg) radius = deg*60.0 + float(mn) + sec/60.0 #wd, ht, radius = wd_deg, ht_deg, radius_deg except Exception as e: errmsg = 'Error calculating bounding box: %s' % str(e) self.logger.error(errmsg) self.fv.show_error(errmsg) return True # Copy the image parameters out to the widget d = { 'ra': ra_ctr, 'dec': dec_ctr, 'width': str(wd), 'height': ht, 'r': radius, 'r2': radius, 'r1': 0.0, } self._update_widgets(d) return True
def redo(self): obj = self.canvas.getObjectByTag(self.areatag) if not obj.kind in ('rectangle', 'circle'): # !!? self.stop() return True try: image = self.fitsimage.get_image() if obj.kind == 'rectangle': # if the object drawn is a rectangle, calculate the radius # of a circle necessary to cover the area # calculate center of bbox wd = obj.x2 - obj.x1 dw = wd // 2 ht = obj.y2 - obj.y1 dh = ht // 2 ctr_x, ctr_y = obj.x1 + dw, obj.y1 + dh ra_ctr, dec_ctr = image.pixtoradec(ctr_x, ctr_y, format='str') # Calculate RA and DEC for the three points # origination point ra_org, dec_org = image.pixtoradec(obj.x1, obj.y1) # destination point ra_dst, dec_dst = image.pixtoradec(obj.x2, obj.y2) # "heel" point making a right triangle ra_heel, dec_heel = image.pixtoradec(obj.x1, obj.y2) ht_deg = wcs.deltaStarsRaDecDeg(ra_org, dec_org, ra_heel, dec_heel) wd_deg = wcs.deltaStarsRaDecDeg(ra_heel, dec_heel, ra_dst, dec_dst) radius_deg = wcs.deltaStarsRaDecDeg(ra_heel, dec_heel, ra_dst, dec_dst) else: # if the object drawn is a circle, calculate the box # enclosed by the circle ctr_x, ctr_y = obj.x, obj.y ra_ctr, dec_ctr = image.pixtoradec(ctr_x, ctr_y) ra_dst, dec_dst = image.pixtoradec(ctr_x + obj.radius, ctr_y) radius_deg = wcs.deltaStarsRaDecDeg(ra_ctr, dec_ctr, ra_dst, dec_dst) # redo as str format for widget ra_ctr, dec_ctr = image.pixtoradec(ctr_x, ctr_y, format='str') wd = ht = obj.radius * 2.0 dw = wd // 2 dh = ht // 2 ra_org, dec_org = image.pixtoradec(ctr_x, ctr_y - dh) ra_dst, dec_dst = image.pixtoradec(ctr_x, ctr_y + dh) ht_deg = wcs.deltaStarsRaDecDeg(ra_org, dec_org, ra_dst, dec_dst) ra_org, dec_org = image.pixtoradec(ctr_x - dw, ctr_y) ra_dst, dec_dst = image.pixtoradec(ctr_x + dw, ctr_y) wd_deg = wcs.deltaStarsRaDecDeg(ra_org, dec_org, ra_dst, dec_dst) # width and height are specified in arcmin sgn, deg, mn, sec = wcs.degToDms(wd_deg) wd = deg * 60.0 + float(mn) + sec / 60.0 sgn, deg, mn, sec = wcs.degToDms(ht_deg) ht = deg * 60.0 + float(mn) + sec / 60.0 sgn, deg, mn, sec = wcs.degToDms(radius_deg) radius = deg * 60.0 + float(mn) + sec / 60.0 #wd, ht, radius = wd_deg, ht_deg, radius_deg except Exception as e: self.fv.showStatus('BAD WCS: %s' % str(e)) return True # Copy the image parameters out to the widget d = { 'ra': ra_ctr, 'dec': dec_ctr, 'width': str(wd), 'height': ht, 'r': radius, 'r2': radius, 'r1': 0.0, } self._update_widgets(d) return True
def redo(self): obj = self.canvas.getObjectByTag(self.areatag) if not obj.kind in ('rectangle', 'circle'): # !!? self.stop() return True try: image = self.fitsimage.get_image() if obj.kind == 'rectangle': # if the object drawn is a rectangle, calculate the radius # of a circle necessary to cover the area # calculate center of bbox wd = obj.x2 - obj.x1 dw = wd // 2 ht = obj.y2 - obj.y1 dh = ht // 2 ctr_x, ctr_y = obj.x1 + dw, obj.y1 + dh ra_ctr, dec_ctr = image.pixtoradec(ctr_x, ctr_y, format='str') # Calculate RA and DEC for the three points # origination point ra_org, dec_org = image.pixtoradec(obj.x1, obj.y1) # destination point ra_dst, dec_dst = image.pixtoradec(obj.x2, obj.y2) # "heel" point making a right triangle ra_heel, dec_heel = image.pixtoradec(obj.x1, obj.y2) ht_deg = wcs.deltaStarsRaDecDeg(ra_org, dec_org, ra_heel, dec_heel) wd_deg = wcs.deltaStarsRaDecDeg(ra_heel, dec_heel, ra_dst, dec_dst) radius_deg = wcs.deltaStarsRaDecDeg(ra_heel, dec_heel, ra_dst, dec_dst) else: # if the object drawn is a circle, calculate the box # enclosed by the circle ctr_x, ctr_y = obj.x, obj.y ra_ctr, dec_ctr = image.pixtoradec(ctr_x, ctr_y) ra_dst, dec_dst = image.pixtoradec(ctr_x + obj.radius, ctr_y) radius_deg = wcs.deltaStarsRaDecDeg(ra_ctr, dec_ctr, ra_dst, dec_dst) # redo as str format for widget ra_ctr, dec_ctr = image.pixtoradec(ctr_x, ctr_y, format='str') wd = ht = obj.radius * 2.0 dw = wd // 2 dh = ht // 2 ra_org, dec_org = image.pixtoradec(ctr_x, ctr_y - dh) ra_dst, dec_dst = image.pixtoradec(ctr_x, ctr_y + dh) ht_deg = wcs.deltaStarsRaDecDeg(ra_org, dec_org, ra_dst, dec_dst) ra_org, dec_org = image.pixtoradec(ctr_x - dw, ctr_y) ra_dst, dec_dst = image.pixtoradec(ctr_x + dw, ctr_y) wd_deg = wcs.deltaStarsRaDecDeg(ra_org, dec_org, ra_dst, dec_dst) # width and height are specified in arcmin sgn, deg, mn, sec = wcs.degToDms(wd_deg) wd = deg*60.0 + float(mn) + sec/60.0 sgn, deg, mn, sec = wcs.degToDms(ht_deg) ht = deg*60.0 + float(mn) + sec/60.0 sgn, deg, mn, sec = wcs.degToDms(radius_deg) radius = deg*60.0 + float(mn) + sec/60.0 #wd, ht, radius = wd_deg, ht_deg, radius_deg except Exception, e: self.fv.showStatus('BAD WCS: %s' % str(e)) return True