From e41eec3edf37ca2ac7859b29f22c52579df94a7d Mon Sep 17 00:00:00 2001 From: AlexanderKabui Date: Mon, 7 Nov 2022 20:23:40 +0300 Subject: init code refactoring --- wqflask/wqflask/correlation/show_corr_results.py | 113 ++++++++++++++++++++--- 1 file changed, 98 insertions(+), 15 deletions(-) (limited to 'wqflask') diff --git a/wqflask/wqflask/correlation/show_corr_results.py b/wqflask/wqflask/correlation/show_corr_results.py index d3e50972..ab8781cb 100644 --- a/wqflask/wqflask/correlation/show_corr_results.py +++ b/wqflask/wqflask/correlation/show_corr_results.py @@ -74,6 +74,95 @@ def set_template_vars(start_vars, correlation_data): return correlation_data +def generate_table_metadata(all_traits, dataset_metadata, dataset_obj): + + def __fetch_trait_data__(trait, dataset_obj): + target_trait_ob = create_trait(dataset=dataset_obj, + name=trait, + get_qtl_info=True) + return jsonable(target_trait_ob, dataset_obj) + + metadata = [__fetch_trait_data__(trait, dataset_obj) for + trait in (all_traits ^ dataset_metadata.keys())] + return (dataset_metadata | ({trait["name"]: trait for trait in metadata})) + + +def populate_table(dataset_metadata,target_dataset,corr_results): + def __populate_trait__(idx, target_trait, target_dataset): + results_dict = {} + results_dict['index'] = idx + 1 # + results_dict['trait_id'] = target_trait['name'] + results_dict['dataset'] = target_dataset['name'] + results_dict['hmac'] = hmac.data_hmac( + '{}:{}'.format(target_trait['name'], target_dataset['name'])) + results_dict['sample_r'] = f"{float(trait.get('corr_coefficient',0.0)):.3f}" + results_dict['num_overlap'] = trait.get('num_overlap', 0) + results_dict['sample_p'] = f"{float(trait.get('p_value',0)):.3e}" + if target_dataset['type'] == "ProbeSet": + results_dict['symbol'] = target_trait['symbol'] + results_dict['description'] = "N/A" + results_dict['location'] = target_trait['location'] + results_dict['mean'] = "N/A" + results_dict['additive'] = "N/A" + if target_trait['description']: + results_dict['description'] = target_trait['description'] + if target_trait['mean']: + results_dict['mean'] = f"{float(target_trait['mean']):.3f}" + try: + results_dict['lod_score'] = f"{float(target_trait['lrs_score']) / 4.61:.1f}" + except: + results_dict['lod_score'] = "N/A" + results_dict['lrs_location'] = target_trait['lrs_location'] + if target_trait['additive']: + results_dict['additive'] = f"{float(target_trait['additive']):.3f}" + results_dict['lit_corr'] = "--" + results_dict['tissue_corr'] = "--" + results_dict['tissue_pvalue'] = "--" + if this_dataset['type'] == "ProbeSet": + if 'lit_corr' in trait: + results_dict['lit_corr'] = f"{float(trait['lit_corr']):.3f}" + if 'tissue_corr' in trait: + results_dict['tissue_corr'] = f"{float(trait['tissue_corr']):.3f}" + results_dict['tissue_pvalue'] = f"{float(trait['tissue_p_val']):.3e}" + elif target_dataset['type'] == "Publish": + results_dict['abbreviation_display'] = "N/A" + results_dict['description'] = "N/A" + results_dict['mean'] = "N/A" + results_dict['authors_display'] = "N/A" + results_dict['additive'] = "N/A" + results_dict['pubmed_link'] = "N/A" + results_dict['pubmed_text'] = target_trait["pubmed_text"] + + if target_trait["abbreviation"]: + results_dict = target_trait['abbreviation'] + + if target_trait["description"] == target_trait['description']: + results_dict['description'] = target_trait['description'] + + if target_trait["mean"]: + results_dict['mean'] = f"{float(target_trait['mean']):.3f}" + + if target_trait["authors"]: + authors_list = target_trait['authors'].split(',') + results_dict['authors_display'] = ", ".join( + authors_list[:6]) + ", et al." if len(authors_list) > 6 else target_trait['authors'] + + if "pubmed_id" in target_trait: + results_dict['pubmed_link'] = target_trait['pubmed_link'] + results_dict['pubmed_text'] = target_trait['pubmed_text'] + try: + results_dict["lod_score"] = f"{float(target_trait['lrs_score']) / 4.61:.1f}" + except ValueError: + results_dict['lod_score'] = "N/A" + else: + results_dict['lrs_location'] = target_trait['lrs_location'] + + return results_dict + + return [__populate_trait__(idx, target_trait, target_dataset) + for (idx, target_trait) in enumerate(corr_results)] + + def correlation_json_for_table(start_vars, correlation_data, this_trait, this_dataset, target_dataset_ob): """Return JSON data for use with the DataTable in the correlation result page @@ -87,12 +176,12 @@ def correlation_json_for_table(start_vars, correlation_data, this_trait, this_da this_dataset = correlation_data['this_dataset'] target_dataset = target_dataset_ob.as_dict() - corr_results = correlation_data['correlation_results'] results_list = [] - new_traits_metadata = {} - - dataset_metadata = correlation_data["traits_metadata"] + dataset_metadata = generate_table_metadata({name for trait in corr_results + for (name, _val) in trait.items()}, + correlation_data["traits_metadata"], + target_dataset_ob) min_expr = get_float(start_vars, 'min_expr') p_range_lower = get_float(start_vars, 'p_range_lower', -1.0) @@ -100,7 +189,7 @@ def correlation_json_for_table(start_vars, correlation_data, this_trait, this_da if ('loc_chr' in start_vars and 'min_loc_mb' in start_vars and - 'max_loc_mb' in start_vars): + 'max_loc_mb' in start_vars): location_chr = get_string(start_vars, 'loc_chr') min_location_mb = get_int(start_vars, 'min_loc_mb') @@ -113,15 +202,8 @@ def correlation_json_for_table(start_vars, correlation_data, this_trait, this_da trait = trait_dict[trait_name] target_trait = dataset_metadata.get(trait_name) - if target_trait is None: - target_trait_ob = create_trait(dataset=target_dataset_ob, - name=trait_name, - get_qtl_info=True) - target_trait = jsonable(target_trait_ob, target_dataset_ob) - new_traits_metadata[trait_name] = target_trait - - if (float(trait.get('corr_coefficient',0.0)) >= p_range_lower and - float(trait.get('corr_coefficient',0.0)) <= p_range_upper): + if (float(trait.get('corr_coefficient', 0.0)) >= p_range_lower and + float(trait.get('corr_coefficient', 0.0)) <= p_range_upper): if (target_dataset['type'] == "ProbeSet" or target_dataset['type'] == "Publish") and bool(target_trait['mean']): if (min_expr != None) and (float(target_trait['mean']) < min_expr): @@ -146,6 +228,7 @@ def correlation_json_for_table(start_vars, correlation_data, this_trait, this_da else: continue + results_dict = {} results_dict['index'] = i + 1 results_dict['trait_id'] = target_trait['name'] @@ -153,7 +236,7 @@ def correlation_json_for_table(start_vars, correlation_data, this_trait, this_da results_dict['hmac'] = hmac.data_hmac( '{}:{}'.format(target_trait['name'], target_dataset['name'])) results_dict['sample_r'] = f"{float(trait.get('corr_coefficient',0.0)):.3f}" - results_dict['num_overlap'] = trait.get('num_overlap',0) + results_dict['num_overlap'] = trait.get('num_overlap', 0) results_dict['sample_p'] = f"{float(trait.get('p_value',0)):.3e}" if target_dataset['type'] == "ProbeSet": results_dict['symbol'] = target_trait['symbol'] -- cgit v1.2.3