diff --git a/Data_submission/build_file_dicts.py b/Data_submission/build_file_dicts.py index ccbc2108e822921b613289a809a7b6aeef67fbba..f824b23b06a5699827008a189b75464ae13993bc 100755 --- a/Data_submission/build_file_dicts.py +++ b/Data_submission/build_file_dicts.py @@ -41,6 +41,13 @@ def dump_dicts(path, dicts): dump(d, pickle_file, HIGHEST_PROTOCOL) +# https://stackoverflow.com/a/1319675/1878788 +class TooManyValues(ValueError): + def __init__(self, message="Too many values.", value=None): + super().__init__(message) + self.value = value + + def unlist(l): try: (elem,) = set(l) @@ -48,6 +55,7 @@ def unlist(l): warnings.warn(f"There are more than one element in {l}.\n") warnings.warn("Selecting an arbitrary one.\n") (elem, *_) = set(l) + # raise TooManyValues(value=elem) from err return elem @@ -220,11 +228,14 @@ def main(): # #warnings.warn(f"{rawdat} is a link.\n") # rawdat = os.readlink(rawdat) rawdat = OPR(rawdat) - rawdat2condrep[libtype][rawdat].append((cond, rep)) - condrep2rawdat[libtype][(cond, rep)].append(rawdat) + #if rawdat in rawdat2lib: + if True: + rawdat2condrep[libtype][rawdat].append((cond, rep)) + condrep2rawdat[libtype][(cond, rep)].append(rawdat) bw = OPJ(from_folder, bw_pattern.format( lib=cond, rep=rep, - **libtype_info[libtype]["default_wildcards"]).format(genome=genome)) + **libtype_info[libtype]["default_wildcards"]).format( + genome=genome)) try: assert Path(bw).exists() except AssertionError as err: @@ -234,10 +245,55 @@ def main(): raise condrep2bw[libtype][(cond, rep)].append(bw) bw2condrep[libtype][bw].append((cond, rep)) + # print(libtype) + for (k, v) in rawdat2condrep[libtype].items(): + if len(v) > 1: + print(k) + print(v) + if k in rawdat2lib: + warnings.warn(f"Multiple {libtype} libraries for a submitted one.") + else: + warnings.warn(f"Not sure we should worry about the above multiple {libtype} libraries: They do not seem to match submitted raw data files.") ## # Transform lists into unique values ## + # for (k, d) in rawdat2lib.items(): + # try: + # rawdat2lib[k] = valmap(unlist, d) + # except TooManyValues as err: + # warnings.warn(f"rawdat2lib[{k}]\n{str(err)}") + # rawdat2lib[k] = err.value + # for (k, d) in lib2rawdat.items(): + # try: + # lib2rawdat[k] = valmap(unlist, d) + # except TooManyValues as err: + # warnings.warn(f"lib2rawdat[{k}]\n{str(err)}") + # lib2rawdat[k] = err.value + # for (k, d) in rawdat2condrep.items(): + # try: + # rawdat2condrep[k] = valmap(unlist, d) + # except TooManyValues as err: + # warnings.warn(f"rawdat2condrep[{k}]\n{str(err)}") + # rawdat2condrep[k] = err.value + # for (k, d) in condrep2rawdat.items(): + # try: + # condrep2rawdat[k] = valmap(unlist, d) + # except TooManyValues as err: + # warnings.warn(f"condrep2rawdat[{k}]\n{str(err)}") + # condrep2rawdat[k] = err.value + # for (k, d) in condrep2bw.items(): + # try: + # condrep2bw[k] = valmap(unlist, d) + # except TooManyValues as err: + # warnings.warn(f"condrep2bw[{k}]\n{str(err)}") + # condrep2bw[k] = err.value + # for (k, d) in bw2condrep.items(): + # try: + # bw2condrep[k] = valmap(unlist, d) + # except TooManyValues as err: + # warnings.warn(f"bw2condrep[{k}]\n{str(err)}") + # bw2condrep[k] = err.value for (k, d) in rawdat2lib.items(): rawdat2lib[k] = valmap(unlist, d) for (k, d) in lib2rawdat.items():