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, mosaic_img, name='mosaic', fov_deg=0.2, num_threads=6, dr=None, merge=False): self.total_files = len(paths) if self.total_files == 0: return ingest_count = 0 self.start_time = time.time() groups = dp.split_n(paths, num_threads) self.num_groups = len(groups) self.logger.info("len groups=%d" % (self.num_groups)) ## tasks = [] for group in groups: ## self.fv.nongui_do(self.mosaic_some, group, mosaic_img, ## dr=dr, merge=merge) ## tasks.append(Task.FuncTask(self.mosaic_some, (group, mosaic_img), ## dict(dr=dr, merge=merge), ## logger=self.logger)) self.mosaic_some(group, mosaic_img, dr=dr, merge=merge) ## t = Task.ConcurrentAndTaskset(tasks) ## t.register_callback(self.__update_gui, args=[mosaic_img, ## self.total_files, ## self.start_time]) ## t.init_and_start(self.fv) self._update_gui(0, mosaic_img, self.total_files, self.start_time)