From 571050da6608686a9eaf32ef087d2f91d027c1af Mon Sep 17 00:00:00 2001 From: Impact <pascal.mouquet@ird.fr> Date: Tue, 17 Nov 2020 11:01:44 +0400 Subject: [PATCH] 3 new Library functions (compute_l2a, compute_cloudmasks, compute_indices) to multi-process a list of tiles --- sen2chain/library.py | 88 +++++++++++++++++++++++++++++++++++++++----- 1 file changed, 79 insertions(+), 9 deletions(-) diff --git a/sen2chain/library.py b/sen2chain/library.py index 1763980..42c7448 100644 --- a/sen2chain/library.py +++ b/sen2chain/library.py @@ -8,6 +8,7 @@ import os import shutil import logging import pathlib +from itertools import chain from pathlib import Path # type annotations @@ -17,6 +18,7 @@ from .config import Config, SHARED_DATA from .products import L1cProduct from .tiles import Tile from .utils import human_size, human_size_decimal +from .multi_processing import l2a_multiprocessing, cld_version_probability_iterations_reprocessing_multiprocessing, idx_multiprocessing s2_tiles_index = SHARED_DATA.get("tiles_index") @@ -207,24 +209,92 @@ class Library: for tile in set([val for sublist in [k for k in [getattr(self,t) for t in self.__dict__]] for val in sublist]): Tile(tile).init_md() - ####################### A FAIRE def compute_l2a(self, tile_list: list = [], + date_min: str = None, + date_max: str = None, + nb_proc: int = 4, ): - toto = 12 + l1c_process_list = [] + for tile in tile_list: + t = Tile(tile) + l1c_process_list.append(list(p.identifier for p in t.l2a_missings.filter_dates(date_min = date_min, date_max = date_max))) + l1c_process_list = list(chain.from_iterable(l1c_process_list)) + logger.info("l1c_process_list ({} files): \n{}".format(len(l1c_process_list), l1c_process_list)) + + if l1c_process_list: + l2a_res = l2a_multiprocessing(l1c_process_list, nb_proc=nb_proc) - ####################### A FAIRE def compute_cloudmasks(self, tile_list: list = [], + cm_version: str = "cm001", + probability: int = 1, + iterations: int = 5, + reprocess: bool = False, + date_min: str = None, + date_max: str = None, + nb_proc: int = 4, ): - toto = 15 - - ####################### A FAIRE + cld_l2a_process_list = [] + for tile in tile_list: + t = Tile(tile) + if not reprocess: + l2a_list = [p.identifier for p in t.cloudmasks_missing(cm_version = cm_version, + probability = probability, + iterations = iterations, + )\ + .filter_dates(date_min = date_min, date_max = date_max)] + else: + l2a_list = [p.identifier for p in t.l2a.filter_dates(date_min = date_min, date_max = date_max)] + for j in l2a_list: + cld_l2a_process_list.append([j, + cm_version, + probability, + iterations, + reprocess, + ]) + logger.info("cld_l2a_process_list ({} files): \n{}".format(len(cld_l2a_process_list), cld_l2a_process_list)) + if cld_l2a_process_list: + cld_res = cld_version_probability_iterations_reprocessing_multiprocessing(cld_l2a_process_list, nb_proc=8) + def compute_indices(self, tile_list: list = [], - ): - toto = 20 - + indice_list: list = [], + reprocess: bool = False, + nodata_clouds: bool = True, + quicklook: bool = False, + cm_version: list = "cm001", + probability: int = 1, + iterations: int = 5, + date_min: str = None, + date_max: str = None, + nb_proc: int = 4): + indices_l2a_process_list = [] + for tile in tile_list: + t = Tile(tile) + for i in indice_list: + if not reprocess: + l2a_list = [p.identifier for p in t.missing_indices(i, + nodata_clouds = nodata_clouds, + cm_version = cm_version, + probability = probability, + iterations = iterations, + ).filter_dates(date_min = date_min, date_max = date_max)] + else: + l2a_list = [p.identifier for p in t.l2a.filter_dates(date_min = date_min, date_max = date_max)] + + for j in l2a_list: + indices_l2a_process_list.append([j, + i, + reprocess, + nodata_clouds, + quicklook, + cm_version, + probability, + iterations]) + logger.info("indices_l2a_process_list ({} files): \n{}".format(len(indices_l2a_process_list), indices_l2a_process_list)) + if indices_l2a_process_list: + indices_res = idx_multiprocessing(indices_l2a_process_list, nb_proc=8) class TempContainer: -- GitLab