def find_test_data(): """Search location of test data folder.""" dirs = data_search_dirs() folder_name = "pyplis_etna_testdata" for data_path in dirs: if folder_name in listdir(data_path): print_log.info("Found test data at location: %s" % data_path) return join(data_path, folder_name) try: with open(join(data_path, "_paths.txt"), "r") as f: lines = f.readlines() for line in lines: p = line.split("\n")[0] if exists(p) and folder_name in listdir(p): print_log.info( "Found test data at default location: %s" % p) f.close() return join(p, folder_name) except: pass raise IOError("pyplis test data could not be found, please download" "testdata first, using method " "pyplis.inout.download_test_data or" "specify the local path where the test data is stored using" "pyplis.inout.set_test_data_path")
def save_default_source(info_dict): """Add a new default source to file source_info.txt.""" if not all(k in info_dict for k in ("name", "lon", "lat", "altitude")): raise ValueError("Cannot save source information, require at least " "name, lon, lat and altitude") dirs = data_search_dirs() path = join(dirs[0], "my_sources.txt") if not exists(path): path = join(dirs[1], "my_sources.txt") if info_dict["name"] in get_source_ids(): raise NameError("A source with name %s already exists in database" % info_dict["name"]) source_file_temp = create_temporary_copy(path) with open(source_file_temp, "a") as info_file: info_file.write("\n\nsource_ids:%s\n" % info_dict["name"]) for k, v in six.iteritems(info_dict): info_file.write("%s:%s\n" % (k, v)) info_file.write("END") info_file.close() # Writing ended without errors: replace data base file "cam_info.txt" with # the temporary file and delete the temporary file copy2(source_file_temp, path) remove(source_file_temp) print_log.info( "Successfully added new default source %s to database file at %s" % (info_dict["name"], path))
def set_test_data_path(save_path): """Set local path where test data is stored.""" if save_path.lower() in all_test_data_paths(): logger.info("Path is already in search tree") return dirs = data_search_dirs() fp = join(dirs[0], "_paths.txt") if not exists(fp): fp = join(dirs[1], "_paths.txt") save_path = abspath(save_path) try: if not exists(save_path): raise IOError("Could not set test data path: specified location " "does not exist: %s" % save_path) with open(fp, "a") as f: f.write("\n" + save_path + "\n") print_log.info("Adding new path for test data location in " "file _paths.txt: %s" % save_path) f.close() if "pyplis_etna_testdata" not in listdir(save_path): logger.warning( "WARNING: test data folder (name: pyplis_etna_testdata) " "could not be found at specified location, please download " "test data, unzip and save at: %s" % save_path) except: raise
def print_mode_info(self): """Print information about the different correction modes.""" print_log.info( "Available modes for automatic plume background retrieval") for k, v in six.iteritems(self.mode_info_dict): print_log.info("Mode %s: %s" % (k, v))
def save_new_default_camera(info_dict): """Save new default camera to data file *cam_info.txt*. :param dict info_dict: dictionary containing camera default information Only valid keys will be added to the """ dirs = data_search_dirs() cam_file = join(dirs[0], "cam_info.txt") if not exists(cam_file): cam_file = join(dirs[1], "cam_info.txt") keys = get_camera_info("ecII").keys() for key in keys: logger.info("%s (in input: %s)" % (key, key in info_dict)) if "cam_id" not in info_dict: raise KeyError("Missing specification of cam_id") try: cam_ids = info_dict["cam_ids"] except: info_dict["cam_ids"] = [info_dict["cam_id"]] cam_ids = [info_dict["cam_id"]] if not all([x in info_dict.keys() for x in keys]): raise KeyError("Input dictionary does not include all required keys " "for creating a new default camera type, required " "keys are %s" % keys) ids = get_all_valid_cam_ids() if any([x in ids for x in info_dict["cam_ids"]]): raise KeyError("Cam ID conflict: one of the provided IDs already " "exists in database...") cam_file_temp = create_temporary_copy(cam_file) with open(cam_file_temp, "a") as info_file: info_file.write("\n\nNEWCAM\ncam_ids:") cam_ids = [str(x) for x in cam_ids] info_file.write(",".join(cam_ids)) info_file.write("\n") for k, v in six.iteritems(info_dict): if k in keys: if k == "default_filters": for finfo in v: info_file.write("filter:") finfo = [str(x) for x in finfo] info_file.write(",".join(finfo)) info_file.write("\n") elif k == "dark_info": for finfo in v: info_file.write("dark_info:") finfo = [str(x) for x in finfo] info_file.write(",".join(finfo)) info_file.write("\n") elif k == "io_opts": s = "io_opts:" for opt, val in six.iteritems(v): s += "%s=%d," % (opt, val) s = s[:-1] + "\n" info_file.write(s) elif k == "reg_shift_off": info_file.write("%s:%.2f,%.2f\n" % (k, v[0], v[1])) elif k == "cam_ids": pass else: info_file.write("%s:%s\n" % (k, v)) info_file.write("ENDCAM") info_file.close() # Writing ended without errors: replace data base file "cam_info.txt" with # the temporary file and delete the temporary file copy2(cam_file_temp, cam_file) remove(cam_file_temp) print_log.info( "Successfully added new default camera %s to database at %s" % (info_dict["cam_id"], cam_file))
def download_test_data(save_path=None): """Download pyplis test data. :param save_path: location where path is supposed to be stored Code for progress bar was "stolen" `here <http://stackoverflow.com/ questions/11143767/how-to-make-a-download-with>`_ (last access date: 11/01/2017) -progress-bar-in-python """ from pyplis import URL_TESTDATA url = URL_TESTDATA dirs = data_search_dirs() where = dirs[0] fp = join(where, "_paths.txt") if not exists(fp): where = dirs[1] fp = join(where, "_paths.txt") if save_path is None or not exists(save_path): save_path = where logger.info("Save path unspecified") else: with open(fp, "a") as f: f.write("\n" + save_path + "\n") logger.info("Adding new path for test data location in " "file _paths.txt: %s" % save_path) f.close() print_log.info("installing test data at %s" % save_path) filename = mktemp('.zip') if PGBAR_AVAILABLE: widgets = [ 'Downloading pyplis test data: ', Percentage(), ' ', Bar(marker=RotatingMarker()), ' ', ETA(), ' ', FileTransferSpeed() ] pbar = ProgressBar(widgets=widgets) def dl_progress(count, block_size, total_size): if pbar.maxval is None: pbar.maxval = total_size pbar.start() pbar.update(min(count * block_size, total_size)) urlretrieve(url, filename, reporthook=dl_progress) pbar.finish() else: print_log.info( "Downloading Pyplis testdata (this can take a while, install" "Progressbar package if you want to receive download info") urlretrieve(url, filename) thefile = ZipFile(filename) print_log.info("Extracting data at: %s (this may take a while)" % save_path) thefile.extractall(save_path) thefile.close() remove(filename) print_log.info( "Download successfully finished, deleted temporary data file" "at: %s" % filename)
def stop(self, val): self.setup.stop = val print_log.info("Stop time stamp was updated in Dataset, please call class " "method ``init_image_lists`` in order to apply the changes")
def LINK_OFF_TO_ON(self, val): self.setup.LINK_OFF_TO_ON = val print_log.info("Option INCLUDE_SUB_DIRS was updated in Dataset, please call " "class method ``init_image_lists`` in order " "to apply the changes")
def INCLUDE_SUB_DIRS(self, val): self.setup.INCLUDE_SUB_DIRS = val print_log.info("Option INCLUDE_SUB_DIRS was updated in Dataset, please call " "class method ``init_image_lists`` to apply the changes")
def USE_ALL_FILE_TYPES(self, val): self.setup.USE_ALL_FILE_TYPES = val print_log.info("Option USE_ALL_FILE_TYPES was updated in Dataset, please call " "class method ``init_image_lists`` in order " "to apply the changes")