def list_or_files(*args): """ Return the contents of *args as dict[name] = list pairs regardless of whether the user provided a filename or dict If a list is provided, it will be appended to the dict with key '' Returns a dict of name->list pairs WARNING: This function uses base names, not the full path! If the base names are the same, one will be ignored! """ ndict = {} for lst in args: if isinstance(lst, list): ndict.setdefault('', []).extend(lst) print("WARNING: List received! Multiple lists are concatenated!") elif isinstance(lst, dict): ndict.update(lst) else: name = os.path.basename(lst) ndict[name] = parsers.get_list_from_file(lst) return ndict
def km(timeconv, eventconv, *clusts): """ Draw the kaplan-meier curves for a number of clusters timeconv - file of tab-delim table of sample id -> survival time conversions eventconv - file of tab-delim table of sample id -> event conversions (ie, 1 for yes, 0 for no, anything else for NA) clusts - cluster filenames """ tc = parsers.read_table(timeconv) ec = parsers.read_table(eventconv) labels = [] times = [] events = [] for clust in clusts: cl = parsers.get_list_from_file(clust) ts = [] ev = [] for sam in cl: try: time = float(tc[sam]) event = int(ec[sam]) ts.append(time) ev.append(event) except: pass labels.append(clust) times.append(ts) events.append(ev) display.km(times, events, labels)