aboutsummaryrefslogtreecommitdiff
path: root/wqflask/wqflask/api/mapping.py
diff options
context:
space:
mode:
Diffstat (limited to 'wqflask/wqflask/api/mapping.py')
-rw-r--r--wqflask/wqflask/api/mapping.py186
1 files changed, 0 insertions, 186 deletions
diff --git a/wqflask/wqflask/api/mapping.py b/wqflask/wqflask/api/mapping.py
deleted file mode 100644
index 5eacc83a..00000000
--- a/wqflask/wqflask/api/mapping.py
+++ /dev/null
@@ -1,186 +0,0 @@
-from base import data_set
-from base.trait import create_trait, retrieve_sample_data
-
-from wqflask.marker_regression import gemma_mapping, rqtl_mapping
-from wqflask.show_trait.show_trait import normf
-
-def do_mapping_for_api(start_vars):
- if ('db' not in start_vars) or ("trait_id" not in start_vars):
- raise ValueError("Mapping: db and trait_id are not in start_vars")
-
- dataset = data_set.create_dataset(dataset_name=start_vars['db'])
- dataset.group.get_markers()
- this_trait = create_trait(dataset=dataset, name=start_vars['trait_id'])
- this_trait = retrieve_sample_data(this_trait, dataset)
-
- samples = []
- vals = []
-
- mapping_params = initialize_parameters(start_vars, dataset, this_trait)
-
- genofile_samplelist = []
- if mapping_params.get('genofile'):
- dataset.group.genofile = mapping_params['genofile']
- genofile_samplelist = get_genofile_samplelist(dataset)
-
- if (len(genofile_samplelist) > 0):
- samplelist = genofile_samplelist
- for sample in samplelist:
- in_trait_data = False
- for item in this_trait.data:
- if this_trait.data[item].name == sample:
- value = str(this_trait.data[item].value)
- samples.append(item)
- vals.append(value)
- in_trait_data = True
- break
- if not in_trait_data:
- vals.append("x")
- else:
- samplelist = dataset.group.samplelist
- for sample in samplelist:
- in_trait_data = False
- for item in this_trait.data:
- if this_trait.data[item].name == sample:
- value = str(this_trait.data[item].value)
- samples.append(item)
- vals.append(value)
- in_trait_data = True
- break
- if not in_trait_data:
- vals.append("x")
-
- if mapping_params.get('transform') == "qnorm":
- vals_minus_x = [float(val) for val in vals if val != "x"]
- qnorm_vals = normf(vals_minus_x)
- qnorm_vals_with_x = []
- counter = 0
- for val in vals:
- if val == "x":
- qnorm_vals_with_x.append("x")
- else:
- qnorm_vals_with_x.append(qnorm_vals[counter])
- counter += 1
-
- vals = qnorm_vals_with_x
-
- # It seems to take an empty string as default. This should probably be changed.
- covariates = ""
-
- if mapping_params.get('mapping_method') == "gemma":
- header_row = ["name", "chr", "Mb", "lod_score", "p_value"]
- # gemma_mapping returns both results and the filename for LOCO, so need to only grab the former for api
- if mapping_params.get('use_loco') == "True":
- result_markers = gemma_mapping.run_gemma(
- this_trait, dataset, samples, vals, covariates, mapping_params['use_loco'], mapping_params['maf'])[0]
- else:
- result_markers = gemma_mapping.run_gemma(
- this_trait, dataset, samples, vals, covariates, mapping_params['use_loco'], mapping_params['maf'])
- elif mapping_params.get('mapping_method') == "rqtl":
- header_row = ["name", "chr", "cM", "lod_score"]
- if mapping_params['num_perm'] > 0:
- _sperm_output, _suggestive, _significant, result_markers = rqtl_mapping.run_rqtl(this_trait.name, vals, samples, dataset, None, "Mb", mapping_params['rqtl_model'],
- mapping_params['rqtl_method'], mapping_params['num_perm'], None,
- mapping_params['do_control'], mapping_params['control_marker'],
- mapping_params['manhattan_plot'], None)
- else:
- result_markers = rqtl_mapping.run_rqtl(this_trait.name, vals, samples, dataset, None, "Mb", mapping_params['rqtl_model'],
- mapping_params['rqtl_method'], mapping_params['num_perm'], None,
- mapping_params['do_control'], mapping_params['control_marker'],
- mapping_params['manhattan_plot'], None)
-
- if mapping_params.get('limit_to'):
- result_markers = result_markers[:mapping_params['limit_to']]
-
- if mapping_params.get('format') == "csv":
- output_rows = []
- output_rows.append(header_row)
- for marker in result_markers:
- this_row = [marker[header] for header in header_row]
- output_rows.append(this_row)
-
- return output_rows, mapping_params['format']
- elif mapping_params['format'] == "json":
- return result_markers, mapping_params['format']
- else:
- return result_markers, None
-
-
-def initialize_parameters(start_vars, dataset, this_trait):
- mapping_params = {}
-
- mapping_params['format'] = "json"
- if 'format' in start_vars:
- mapping_params['format'] = start_vars['format']
-
- mapping_params['limit_to'] = False
- if 'limit_to' in start_vars:
- if start_vars['limit_to'].isdigit():
- mapping_params['limit_to'] = int(start_vars['limit_to'])
-
- mapping_params['mapping_method'] = "gemma"
- if 'method' in start_vars:
- mapping_params['mapping_method'] = start_vars['method']
-
- if mapping_params['mapping_method'] == "rqtl":
- mapping_params['rqtl_method'] = "hk"
- mapping_params['rqtl_model'] = "normal"
- mapping_params['do_control'] = False
- mapping_params['control_marker'] = ""
- mapping_params['manhattan_plot'] = True
- mapping_params['pair_scan'] = False
- if 'rqtl_method' in start_vars:
- mapping_params['rqtl_method'] = start_vars['rqtl_method']
- if 'rqtl_model' in start_vars:
- mapping_params['rqtl_model'] = start_vars['rqtl_model']
- if 'control_marker' in start_vars:
- mapping_params['control_marker'] = start_vars['control_marker']
- mapping_params['do_control'] = True
- if 'pair_scan' in start_vars:
- if start_vars['pair_scan'].lower() == "true":
- mapping_params['pair_scan'] = True
-
- if 'interval_mapping' in start_vars:
- if start_vars['interval_mapping'].lower() == "true":
- mapping_params['manhattan_plot'] = False
- elif 'manhattan_plot' in start_vars:
- if start_vars['manhattan_plot'].lower() != "true":
- mapping_params['manhattan_plot'] = False
-
- mapping_params['maf'] = 0.01
- if 'maf' in start_vars:
- mapping_params['maf'] = start_vars['maf'] # Minor allele frequency
-
- mapping_params['use_loco'] = True
- if 'use_loco' in start_vars:
- if (start_vars['use_loco'].lower() == "false") or (start_vars['use_loco'].lower() == "no"):
- mapping_params['use_loco'] = False
-
- mapping_params['num_perm'] = 0
- mapping_params['perm_check'] = False
- if 'num_perm' in start_vars:
- try:
- mapping_params['num_perm'] = int(start_vars['num_perm'])
- mapping_params['perm_check'] = "ON"
- except:
- mapping_params['perm_check'] = False
-
- mapping_params['transform'] = False
- if 'transform' in start_vars:
- mapping_params['transform'] = start_vars['transform']
-
- mapping_params['genofile'] = False
- if 'genofile' in start_vars:
- mapping_params['genofile'] = start_vars['genofile']
-
- return mapping_params
-
-def get_genofile_samplelist(dataset):
- genofile_samplelist = []
-
- genofile_json = dataset.group.get_genofiles()
- for genofile in genofile_json:
- if genofile['location'] == dataset.group.genofile and 'sample_list' in genofile:
- genofile_samplelist = genofile['sample_list']
-
- return genofile_samplelist