about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--wqflask/wqflask/auwerx/__init__.py0
-rw-r--r--wqflask/wqflask/auwerx/ephewas_analysis.py83
-rw-r--r--wqflask/wqflask/auwerx/mediation_analysis.py40
-rw-r--r--wqflask/wqflask/auwerx/phewas_analysis.py132
-rw-r--r--wqflask/wqflask/static/new/javascript/show_trait_mapping_tools.js19
-rw-r--r--wqflask/wqflask/templates/ephewas_analysis.html15
-rw-r--r--wqflask/wqflask/templates/mediation_analysis.html15
-rw-r--r--wqflask/wqflask/templates/phewas_analysis.html41
-rw-r--r--wqflask/wqflask/templates/show_trait.html17
-rw-r--r--wqflask/wqflask/templates/show_trait_PheWAS_tools.html109
-rw-r--r--wqflask/wqflask/views.py22
11 files changed, 490 insertions, 3 deletions
diff --git a/wqflask/wqflask/auwerx/__init__.py b/wqflask/wqflask/auwerx/__init__.py
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/wqflask/wqflask/auwerx/__init__.py
diff --git a/wqflask/wqflask/auwerx/ephewas_analysis.py b/wqflask/wqflask/auwerx/ephewas_analysis.py
new file mode 100644
index 00000000..2f6d6061
--- /dev/null
+++ b/wqflask/wqflask/auwerx/ephewas_analysis.py
@@ -0,0 +1,83 @@
+# PheWAS analysis for GN2
+# Author / Maintainer: Li Hao & Danny Arends <Danny.Arends@gmail.com>
+import sys
+from numpy import *
+import scipy as sp                            # SciPy
+import rpy2.robjects as ro                    # R Objects
+import rpy2.rinterface as ri
+
+from base.webqtlConfig import GENERATED_IMAGE_DIR
+from utility import webqtlUtil                # Random number for the image
+from utility import genofile_parser           # genofile_parser
+
+import base64
+import array
+import csv
+import itertools
+
+from base import data_set
+from base import trait as TRAIT
+
+from utility import helper_functions
+from utility.tools import locate
+
+from rpy2.robjects.packages import importr
+utils = importr("utils")
+
+r_library       = ro.r["library"]             # Map the library function
+r_options       = ro.r["options"]             # Map the options function
+r_write_table   = ro.r["write.table"]         # Map the write.table function
+r_head          = ro.r["head"]                # Map the head function
+r_load          = ro.r["load"]                # Map the head function
+r_colnames      = ro.r["colnames"]            # Map the colnames function
+r_list          = ro.r["list"]                # Map the list function
+r_c             = ro.r["c"]                   # Map the c (combine) function
+r_print         = ro.r["print"]               # Map the print function
+r_seq           = ro.r["seq"]                 # Map the rep (repeat) function
+
+class EPheWAS(object):
+    def __init__(self):
+        print("Initialization of ePheWAS")
+        print(r_library("auwerx"))                                                         # Load the auwerx package
+        self.r_create_Pheno_aligner = ro.r["create.Pheno_aligner"]                         # Map the create.Pheno_aligner function
+        self.r_data_gatherer = ro.r["data.gatherer"]                                       # Map the data.gatherer function
+        print("Initialization of ePheWAS done !")
+
+    def run_analysis(self, requestform):
+        print("Starting ePheWAS analysis on dataset")
+        genofilelocation = locate("BXD.geno", "genotype")                                  # Get the location of the BXD genotypes
+        tissuealignerloc = locate("Tissue_color_aligner.csv", "auwerx")                       # Get the location of the Tissue_color_aligner
+
+        # Get user parameters, trait_id and dataset, and store/update them in self
+        self.trait_id = requestform["trait_id"]
+        self.datasetname = requestform["dataset"]
+        self.dataset = data_set.create_dataset(self.datasetname)
+
+        # Print some debug
+        print "self.trait_id:" + self.trait_id + "\n"
+        print "self.datasetname:" + self.datasetname + "\n"
+        print "self.dataset.type:" + self.dataset.type + "\n"
+
+        # Load in the genotypes file *sigh* to make the markermap
+        parser = genofile_parser.ConvertGenoFile(genofilelocation)
+        parser.process_csv()
+        snpinfo = []
+        for marker in parser.markers:
+          snpinfo.append(marker["name"]);
+          snpinfo.append(marker["chr"]);
+          snpinfo.append(marker["Mb"]);
+
+        rnames = r_seq(1, len(parser.markers))
+        # Create the snp aligner object out of the BXD genotypes
+        snpaligner = ro.r.matrix(snpinfo, nrow=len(parser.markers), dimnames = r_list(rnames, r_c("SNP", "Chr", "Pos")), ncol = 3, byrow=True)
+
+        # Create the phenotype aligner object using R
+        phenoaligner = self.r_create_Pheno_aligner()
+
+        print("Initialization of ePheWAS done !")
+
+    def process_results(self, results):
+        print("Processing ePheWAS output")
+        template_vars = {}
+        return(dict(template_vars))
+
diff --git a/wqflask/wqflask/auwerx/mediation_analysis.py b/wqflask/wqflask/auwerx/mediation_analysis.py
new file mode 100644
index 00000000..48d02dc2
--- /dev/null
+++ b/wqflask/wqflask/auwerx/mediation_analysis.py
@@ -0,0 +1,40 @@
+# PheWAS analysis for GN2
+# Author / Maintainer: Li Hao & Danny Arends <Danny.Arends@gmail.com>
+import sys
+from numpy import *
+import scipy as sp                            # SciPy
+import rpy2.robjects as ro                    # R Objects
+import rpy2.rinterface as ri
+
+from base.webqtlConfig import GENERATED_IMAGE_DIR
+from utility import webqtlUtil                # Random number for the image
+from utility import genofile_parser           # genofile_parser
+
+import base64
+import array
+import csv
+import itertools
+
+from base import data_set
+from base import trait as TRAIT
+
+from utility import helper_functions
+from utility.tools import locate
+
+from rpy2.robjects.packages import importr
+utils = importr("utils")
+
+class Mediation(object):
+    def __init__(self):
+        print("Initialization of Mediation")
+        print("Initialization of Mediation done !")
+
+    def run_analysis(self, requestform):
+        print("Starting Mediation analysis on dataset")
+        print("Initialization of Mediation done !")
+
+    def process_results(self, results):
+        print("Processing Mediation output")
+        template_vars = {}
+        return(dict(template_vars))
+
diff --git a/wqflask/wqflask/auwerx/phewas_analysis.py b/wqflask/wqflask/auwerx/phewas_analysis.py
new file mode 100644
index 00000000..e9455fba
--- /dev/null
+++ b/wqflask/wqflask/auwerx/phewas_analysis.py
@@ -0,0 +1,132 @@
+# PheWAS analysis for GN2
+# Author / Maintainer: Li Hao & Danny Arends <Danny.Arends@gmail.com>
+import sys
+from numpy import *
+import scipy as sp                            # SciPy
+import rpy2.robjects as ro                    # R Objects
+import rpy2.rinterface as ri
+from pprint import pprint
+
+from base.webqtlConfig import GENERATED_IMAGE_DIR
+from utility import webqtlUtil                # Random number for the image
+from utility import genofile_parser           # genofile_parser
+
+import base64
+import array
+import csv
+import itertools
+
+from base import data_set
+from base import trait as TRAIT
+from base.trait import GeneralTrait
+
+from utility import helper_functions
+from utility.tools import locate
+
+r_library       = ro.r["library"]             # Map the library function
+r_options       = ro.r["options"]             # Map the options function
+r_write_table   = ro.r["write.table"]         # Map the write.table function
+r_head          = ro.r["head"]                # Map the head function
+r_load          = ro.r["load"]                # Map the head function
+r_colnames      = ro.r["colnames"]            # Map the colnames function
+r_list          = ro.r["list"]                # Map the list function
+r_c             = ro.r["c"]                   # Map the c (combine) function
+r_print         = ro.r["print"]               # Map the print function
+r_seq           = ro.r["seq"]                 # Map the rep (repeat) function
+
+class PheWAS(object):
+    def __init__(self):
+        print("Initialization of PheWAS")
+        # TODO: Loading the package should only be done once, since it is quite expensive
+        print(r_library("auwerx"))                                                         # Load the auwerx package
+        self.r_create_Pheno_aligner = ro.r["create.Pheno_aligner"]                         # Map the create.Pheno_aligner function
+        self.r_calculate_all_pvalue_parallel = ro.r["calculate.all.pvalue.parallel"]       # Map the calculate.all.pvalue.parallel function
+        self.r_PheWASManhattan = ro.r["PheWASManhattan"]                                   # Map the PheWASManhattan function
+        self.r_Stop = ro.r["throwStopError"]                                   # Map the PheWASManhattan function
+        self.r_PyLoadData    = ro.r["PyLoadData"]          # Map the load function
+        print("Initialization of PheWAS done !")
+
+    def run_analysis(self, requestform):
+        print("Starting PheWAS analysis on dataset")
+        genofilelocation = locate("BXD.geno", "genotype")                                  # Get the location of the BXD genotypes
+        precompfile = locate("PheWAS_pval_EMMA_norm.RData", "auwerx")              # Get the location of the pre-computed EMMA results
+
+        # Get user parameters, trait_id and dataset, and store/update them in self
+        self.trait_id = requestform["trait_id"]
+        self.datasetname = requestform["dataset"]
+        self.dataset = data_set.create_dataset(self.datasetname)
+        self.region = int(requestform["num_region"])
+        self.mtadjust = str(requestform["sel_mtadjust"])
+
+        # Print some debug
+        print "self.trait_id:" + self.trait_id + "\n"
+        print "self.datasetname:" + self.datasetname + "\n"
+        print "self.dataset.type:" + self.dataset.type + "\n"
+
+        # GN Magic ?
+        self.this_trait = GeneralTrait(dataset=self.dataset, name = self.trait_id, get_qtl_info = False, get_sample_info=False) 
+        pprint(vars(self.this_trait))
+
+        # Set the values we need
+        self.chr = str(self.this_trait.chr);
+        self.mb = int(self.this_trait.mb);
+
+        # print some debug
+        print "location:" + self.chr + ":" + str(self.mb) + "+/-" + str(self.region) + "\n"
+
+        # Load in the genotypes file *sigh* to make the markermap
+        parser = genofile_parser.ConvertGenoFile(genofilelocation)
+        parser.process_csv()
+        snpinfo = []
+        for marker in parser.markers:
+          snpinfo.append(marker["name"]);
+          snpinfo.append(marker["chr"]);
+          snpinfo.append(marker["Mb"]);
+
+        rnames = r_seq(1, len(parser.markers))
+        # Create the snp aligner object out of the BXD genotypes
+        snpaligner = ro.r.matrix(snpinfo, nrow=len(parser.markers), dimnames = r_list(rnames, r_c("SNP", "Chr", "Pos")), ncol = 3, byrow=True)
+
+        # Create the phenotype aligner object using R
+        phenoaligner = self.r_create_Pheno_aligner()
+
+        self.results = {}
+        self.results['imgurl1'] = webqtlUtil.genRandStr("phewas_") + ".png"
+        self.results['imgloc1'] = GENERATED_IMAGE_DIR + self.results['imgurl1']
+        self.results['mtadjust'] = self.mtadjust
+        print("IMAGE AT:", self.results['imgurl1'] )
+        print("IMAGE AT:", self.results['imgloc1'] )
+        # Create the PheWAS plot (The gene/probe name, chromosome and gene/probe positions should come from the user input)
+        # TODO: generate the PDF in the temp folder, with a unique name
+        phewasres = self.r_PheWASManhattan("Test", precompfile, phenoaligner, snpaligner, "None", self.chr, self.mb, self.region, self.results['imgloc1'] , self.mtadjust)
+        self.results['phewas1'] = phewasres[0]
+        self.results['phewas2'] = phewasres[1]
+        self.results['tabulardata'] = phewasres[2]
+        self.results['R_debuglog'] = phewasres[3]
+
+        #self.r_PheWASManhattan(allpvalues)
+        #self.r_Stop()
+
+        print("Initialization of PheWAS done !")
+
+    def loadImage(self, path, name):
+        print("pre-loading imgage results:", self.results[path])
+        imgfile = open(self.results[path], 'rb')
+        imgdata = imgfile.read()
+        imgB64 = imgdata.encode("base64")
+        bytesarray = array.array('B', imgB64)
+        self.results[name] = bytesarray
+
+    def render_image(self, results):
+        self.loadImage("imgloc1", "imgdata1")
+
+    def process_results(self, results):
+        print("Processing PheWAS output")
+        # TODO: get the PDF in the temp folder, and display it to the user
+        template_vars = {}
+        template_vars["results"] = self.results
+        self.render_image(self.results)
+        template_vars["R_debuglog"] = self.results['R_debuglog']
+
+        return(dict(template_vars))
+
diff --git a/wqflask/wqflask/static/new/javascript/show_trait_mapping_tools.js b/wqflask/wqflask/static/new/javascript/show_trait_mapping_tools.js
index d6cd8134..03602d07 100644
--- a/wqflask/wqflask/static/new/javascript/show_trait_mapping_tools.js
+++ b/wqflask/wqflask/static/new/javascript/show_trait_mapping_tools.js
@@ -222,6 +222,25 @@
     };
   })(this));
 
+
+  $("#phewas_compute").on("click", (function(_this) {
+    return function() {
+      return submit_special("/phewas");
+    };
+  })(this));
+
+  $("#ephewas_compute").on("click", (function(_this) {
+    return function() {
+      return submit_special("/ephewas");
+    };
+  })(this));
+
+  $("#mediation_compute").on("click", (function(_this) {
+    return function() {
+      return submit_special("/mediation");
+    };
+  })(this));
+
   $("#gemma_compute").on("click", (function(_this) {
     return function() {
       var form_data, url;
diff --git a/wqflask/wqflask/templates/ephewas_analysis.html b/wqflask/wqflask/templates/ephewas_analysis.html
new file mode 100644
index 00000000..f49ec44f
--- /dev/null
+++ b/wqflask/wqflask/templates/ephewas_analysis.html
@@ -0,0 +1,15 @@
+{% extends "base.html" %}
+{% block title %}PheWAS analysis{% endblock %}
+
+{% block content %} <!-- Start of body -->
+<div class="container">
+  <h1>ePheWAS analysis results</h1>
+  <h2>Top 10 ePheWAS hits</h2>
+  <table width="80%">
+      <tr><th>Phenotype</th><th>Phenosome</th><th>Additional</th><th>LOD</th><th>LOD<sub>BH</sub></th></tr>
+      <tr><td>Phenotype 1</td><td>Phenosome 1</td><td>Additional 1</td><td>LOD 1</td><td>BH 1</td></tr>
+  </table>
+  <h2>Download all ePheWAS results</h2>
+  <a href="" class="btn submit_special btn-primary">Download CSV</a> <a href="" class="btn submit_special btn-primary">Download RData</a>
+</div>
+{% endblock %}
diff --git a/wqflask/wqflask/templates/mediation_analysis.html b/wqflask/wqflask/templates/mediation_analysis.html
new file mode 100644
index 00000000..2804a14f
--- /dev/null
+++ b/wqflask/wqflask/templates/mediation_analysis.html
@@ -0,0 +1,15 @@
+{% extends "base.html" %}
+{% block title %}PheWAS analysis{% endblock %}
+
+{% block content %} <!-- Start of body -->
+<div class="container">
+  <h1>Mediation analysis results</h1>
+  <h2>Top 10 Mediation hits</h2>
+  <table width="80%">
+      <tr><th>With</th><th>Phenosome</th><th>Additional</th><th>LOD</th><th>LOD<sub>BH</sub></th></tr>
+      <tr><td>Phenotype</td><td>Phenosome</td><td>Additional 1</td><td>LOD 1</td><td>BH 1</td><td><a href="" class="btn submit_special btn-primary">Mediate</a></td></tr>
+  </table>
+  <h2>Download all Mediation results</h2>
+  <a href="" class="btn submit_special btn-primary">Download CSV</a> <a href="" class="btn submit_special btn-primary">Download RData</a>
+</div>
+{% endblock %}
diff --git a/wqflask/wqflask/templates/phewas_analysis.html b/wqflask/wqflask/templates/phewas_analysis.html
new file mode 100644
index 00000000..91c47a10
--- /dev/null
+++ b/wqflask/wqflask/templates/phewas_analysis.html
@@ -0,0 +1,41 @@
+{% extends "base.html" %}
+{% block title %}PheWAS analysis{% endblock %}
+
+{% block content %} <!-- Start of body -->
+<div class="container">
+  <h1>PheWAS analysis results</h1>
+  <h3>R debug log</h3>
+    {% for i in range(results['R_debuglog']|length) %}
+      {{ results['R_debuglog'][i]}}<br>
+    {%- endfor %}
+  <h2>Top 5 PheWAS hits</h2>
+  <table width="100%">
+  <tr><th>GN ID</th><th width="60%">Phenotype</th><th>Phenosome</th><th>LOD</th><th>LOD<sub>( {{ results['mtadjust'] }} )</sub></th></tr>
+  {% for r in range(5) %}
+    <tr>
+    {% for c in range(results['tabulardata']|length) %}
+      <td>
+      {% if c >= 3 %}
+      {{results['tabulardata'][c][r]|float|round(2)}}
+      {% else %}
+      {{results['tabulardata'][c][r]}}
+      {% endif %}
+      </td>
+    {%- endfor %}
+  {%- endfor %}
+
+  </table>
+<!--  {{ results['phewas1'] }}
+  {{ results['phewas2'] }}
+  {{ results['phewas3'] }} -->
+  <h2>Download PheWAS results</h2>
+  <a href="" class="btn submit_special btn-primary">Download CSV</a> <a href="" class="btn submit_special btn-primary">Download RData</a>
+  <h3>PheWAS manhattan plot</h3>
+  <a href="/tmp/{{ results['imgurl1'] }}">
+      <img alt="Embedded Image" src="data:image/png;base64,
+      {% for elem in results['imgdata1'] -%}
+      {% print("%c"|format(elem)) %}
+      {%- endfor %}
+      " /></a>
+</div>
+{% endblock %}
diff --git a/wqflask/wqflask/templates/show_trait.html b/wqflask/wqflask/templates/show_trait.html
index 772c4314..d9566df1 100644
--- a/wqflask/wqflask/templates/show_trait.html
+++ b/wqflask/wqflask/templates/show_trait.html
@@ -93,12 +93,25 @@
                     </div>
                 </div>                
                 <div class="panel panel-default">
-                    <div class="panel-heading" data-toggle="collapse" data-parent="#accordion" data-target="#collapseFive" aria-expanded="true">
+                    <div class="panel-heading" data-toggle="collapse" data-parent="#accordion" data-target="#collapseFive">
+                        <h3 class="panel-title">
+                             <span class="glyphicon glyphicon-chevron-down"></span> PheWAS
+                        </h3>
+                    </div>
+                    <div id="collapseFive" class="panel-collapse collapse in">
+                        <div class="panel-body">
+                            {% include 'show_trait_PheWAS_tools.html' %}
+                        </div>
+                        <div id="alert_placeholder"></div>
+                    </div>
+                </div>                
+                <div class="panel panel-default">
+                    <div class="panel-heading" data-toggle="collapse" data-parent="#accordion" data-target="#collapseSix" aria-expanded="true">
                         <h3 class="panel-title">
                              <span class="glyphicon glyphicon-chevron-up"></span> Review and Edit Data
                         </h3>
                     </div>
-                    <div id="collapseFive" class="panel-collapse collapse" aria-expanded="true">
+                    <div id="collapseSix" class="panel-collapse collapse" aria-expanded="true">
                         <div class="panel-body">
                             {% include 'show_trait_edit_data.html' %}
                         </div>
diff --git a/wqflask/wqflask/templates/show_trait_PheWAS_tools.html b/wqflask/wqflask/templates/show_trait_PheWAS_tools.html
new file mode 100644
index 00000000..c284c456
--- /dev/null
+++ b/wqflask/wqflask/templates/show_trait_PheWAS_tools.html
@@ -0,0 +1,109 @@
+<div>
+  <div class="col-xs-4">
+    <div class="tabbable"> <!-- Only required for left/right tabs -->
+
+      <ul class="nav nav-pills">
+        <li class="active">
+            <a href="#PheWAS" data-toggle="tab">PheWAS</a>
+        </li>
+        <li>
+            <a href="#ePheWAS" data-toggle="tab">ePheWAS</a>
+        </li>
+        <li>
+            <a href="#mediation" data-toggle="tab">Mediation</a>
+        </li>
+
+        <div class="tab-content">
+          <div class="tab-pane active" id="PheWAS">
+            <div style="margin-top: 25px" class="form-horizontal">
+                <br>PheWAS options:
+<!--
+                <div class="mapping_method_fields form-group">
+                    <label for="num_strain_limit" style="text-align:left;" class="col-xs-3 control-label">Strain&nbsp;limit</label>
+                    <div style="margin-left: 20px;" class="col-xs-4 controls">
+                        <input name="num_strain_limit" value="15" type="text" class="form-control">
+                    </div>
+                </div> -->
+                <div class="mapping_method_fields form-group">
+                    <label for="num_region" style="text-align:left;" class="col-xs-3 control-label">Region&nbsp;size</label>
+                    <div style="margin-left: 20px;" class="col-xs-4 controls">
+                        <input name="num_region" value="2" type="text" class="form-control">
+                    </div>
+                </div>
+                <div class="mapping_method_fields form-group">
+                  <label for="mtadjust" style="text-align:left;" class="col-xs-3 control-label">P&nbsp;adjustment</label>
+                  <div style="margin-left: 20px;width: 225px;" class="col-xs-4 controls">
+                    <select name="sel_mtadjust" class="form-control">
+                      <option value="fdr">False Discovery Rate</option>
+                      <option value="BH">Benjamini Hochberg</option>
+                      <option value="holm">Holm</option>
+                      <option value="hochberg">Hochberg</option>
+                      <option value="hommel">Hommel</option>
+                      <option value="bonferroni">Bonferroni</option>
+
+                    </select>
+                  </div>
+                </div>
+                <div class="form-group">
+                  <div style="padding-left:15px;" class="controls">
+                    <button id="phewas_compute" class="btn btn-primary submit_special" title="Compute PheWAS">
+                      <i class="icon-ok-circle icon-white"></i> Compute
+                    </button>
+                  </div>
+                </div>
+            </div>
+          </div> <!-- end of the PheWAS tab -->
+
+          <div class="tab-pane" id="ePheWAS">
+            <div style="margin-top: 25px" class="form-horizontal">
+                <br>ePheWAS options:
+                <div class="mapping_method_fields form-group">
+                    <label for="strain_limit" style="text-align:left;" class="col-xs-3 control-label">ePheWAS&nbsp;opt&nbsp;1</label>
+                    <div style="margin-left: 20px;" class="col-xs-4 controls">
+                        <input name="num_strain_limit" value="15" type="text" class="form-control">
+                    </div>
+                </div>
+                <div class="form-group">
+                  <div style="padding-left:15px;" class="controls">
+                    <button id="ephewas_compute" class="btn submit_special btn-primary" title="Compute ePheWAS">
+                      <i class="icon-ok-circle icon-white"></i> Compute
+                    </button>
+                  </div>
+                </div>
+            </div>
+          </div> <!-- end of the ePheWAS tab -->
+
+          <div class="tab-pane" id="mediation">
+            <div style="margin-top: 25px" class="form-horizontal">
+                <br>Mediation options:
+                <div class="mapping_method_fields form-group">
+                    <label for="strain_limit" style="text-align:left;" class="col-xs-3 control-label">Mediation&nbsp;opt&nbsp;1</label>
+                    <div style="margin-left: 20px;" class="col-xs-4 controls">
+                        <input name="num_strain_limit" value="15" type="text" class="form-control">
+                    </div>
+                </div>
+                <div class="form-group">
+                  <div style="padding-left:15px;" class="controls">
+                    <button id="mediation_compute" class="btn submit_special btn-primary" title="Run mediation analysis">
+                      <i class="icon-ok-circle icon-white"></i> Compute
+                    </button>
+                  </div>
+                </div>
+            </div>
+          </div> <!-- end of the Mediation tab -->
+
+        </div>
+      </ul>
+    </div>
+  </div>
+  <div class="col-xs-6">
+      <dl>
+           <dt>Phewas</dt>
+           <dd>PLaceholder.</dd>
+           <dt>ePhewas</dt>
+           <dd>PLaceholder.</dd>
+           <dt>Mediation</dt>
+           <dd>PLaceholder.</dd>
+      </dl>
+  </div>
+</div>
diff --git a/wqflask/wqflask/views.py b/wqflask/wqflask/views.py
index c3b91c6e..ee135d4c 100644
--- a/wqflask/wqflask/views.py
+++ b/wqflask/wqflask/views.py
@@ -51,7 +51,8 @@ from wqflask.correlation_matrix import show_corr_matrix
 from wqflask.correlation import corr_scatter_plot
 from wqflask.wgcna import wgcna_analysis
 from wqflask.ctl import ctl_analysis
-#from wqflask.trait_submission import submit_trait
+from wqflask.auwerx import phewas_analysis
+from wqflask.auwerx import ephewas_analysis
 
 from utility import webqtlUtil
 from utility import temp_data
@@ -265,6 +266,25 @@ def wcgna_results():
     result = wgcna.process_results(wgcnaA)                        # After the analysis is finished store the result
     return render_template("wgcna_results.html", **result)        # Display them using the template
 
+@app.route("/phewas", methods=('POST',))
+def phewas():
+    logger.info("In phewas, request.form is:", request.form)             # We are going to get additional user input for the analysis
+    phewasO = phewas_analysis.PheWAS()                                            # Start R, load the package and pointers and create the analysis
+    phewasA = phewasO.run_analysis(request.form)
+    result  = phewasO.process_results(phewasA)                           # After the analysis is finished store the result
+    return render_template("phewas_analysis.html", **result)             # Display them using the template
+
+@app.route("/ephewas", methods=('POST',))
+def ephewas():
+    logger.info("In ephewas, request.form is:", request.form)             # We are going to get additional user input for the analysis
+    ephewasO = ephewas_analysis.EPheWAS()                                            # Start R, load the package and pointers and create the analysis
+    return render_template("ephewas_analysis.html", **request.form)          # Display them using the template
+
+@app.route("/mediation", methods=('POST',))
+def mediation():
+    logger.info("In mediation, request.form is:", request.form)             # We are going to get additional user input for the analysis
+    return render_template("mediation_analysis.html", **request.form)          # Display them using the template
+
 @app.route("/ctl_setup", methods=('POST',))
 def ctl_setup():
     logger.info("In ctl, request.form is:", request.form)             # We are going to get additional user input for the analysis