aboutsummaryrefslogtreecommitdiff
path: root/wqflask
diff options
context:
space:
mode:
Diffstat (limited to 'wqflask')
-rw-r--r--wqflask/wqflask/static/new/javascript/trait_data_and_analysis.coffee47
-rw-r--r--wqflask/wqflask/static/new/javascript/trait_data_and_analysis.js43
-rw-r--r--wqflask/wqflask/templates/search_result_page.html16
-rw-r--r--wqflask/wqflask/templates/trait_data_and_analysis.html154
4 files changed, 111 insertions, 149 deletions
diff --git a/wqflask/wqflask/static/new/javascript/trait_data_and_analysis.coffee b/wqflask/wqflask/static/new/javascript/trait_data_and_analysis.coffee
index c44582db..fcd9e255 100644
--- a/wqflask/wqflask/static/new/javascript/trait_data_and_analysis.coffee
+++ b/wqflask/wqflask/static/new/javascript/trait_data_and_analysis.coffee
@@ -21,6 +21,7 @@ $ ->
change_stats_value = (category, value_type, the_value)->
id = "#" + process_id(category, value_type)
+ console.log("the_id:", id)
in_box = $(id).html
current_value = parseFloat($(in_box)).toFixed(2)
@@ -33,50 +34,30 @@ $ ->
# Number of samples
n_of_samples = sample_sets[category].n_of_samples()
- id = "#" + process_id(category, "n_of_samples")
- current_n_of_samples = $(id).html()
- if n_of_samples != current_n_of_samples
- $(id).html(n_of_samples).effect("highlight")
+ change_stats_value(category, "n_of_samples", n_of_samples)
# Mean
- #id = "#" + process_id(category, "mean")
-
the_mean = sample_sets[category].mean()
the_mean = the_mean.toFixed(2)
change_stats_value(category, "mean", the_mean)
- #in_box = $(id).html
-
- #current_mean = parseFloat($(in_box)).toFixed(2)
-
- #if the_mean != current_mean
- # $(id).html(the_mean).effect("highlight")
# Median
- id = "#" + process_id(category, "median")
+ #id = "#" + process_id(category, "median")
the_median = sample_sets[category].median()
the_median = the_median.toFixed(2)
- in_box = $(id).html
-
- current_median = parseFloat($(in_box)).toFixed(2)
-
- if the_median != current_median
- $(id).html(the_median).effect("highlight")
+ change_stats_value(category, "median", the_median)
# Todo: Compare stat values to genenetwork.org current code / sample vs. population
# Standard deviation
- sum = 0
- for value in sample_sets[category]
- step_a = Math.pow(value - the_mean, 2)
- sum += step_a
- step_b = sum / sample_sets[category].length
- sd = Math.sqrt(step_b)
- sd = sd.toFixed(2)
-
- id = "#" + process_id(category, "sd")
- current_sd = $(id).html()
- if sd != current_sd
- $(id).html(sd).effect("highlight")
+ the_std_dev = sample_sets[category].std_dev()
+ the_std_dev = the_std_dev.toFixed(2)
+ change_stats_value(category, "std_dev", the_std_dev)
+ # Standard Error
+ the_std_error = sample_sets[category].std_error()
+ the_std_error = the_std_error.toFixed(2)
+ change_stats_value(category, "std_error", the_std_error)
+
edit_data_change = ->
sample_sets =
@@ -130,11 +111,11 @@ $ ->
pretty: "Median"
},
{
- vn: "se"
+ vn: "std_error"
pretty: "Standard Error (SE)"
},
{
- vn: "sd"
+ vn: "std_dev"
pretty: "Standard Deviation (SD)"
}
]
diff --git a/wqflask/wqflask/static/new/javascript/trait_data_and_analysis.js b/wqflask/wqflask/static/new/javascript/trait_data_and_analysis.js
index b4eed350..170d6e4f 100644
--- a/wqflask/wqflask/static/new/javascript/trait_data_and_analysis.js
+++ b/wqflask/wqflask/static/new/javascript/trait_data_and_analysis.js
@@ -30,6 +30,7 @@
change_stats_value = function(category, value_type, the_value) {
var current_value, id, in_box;
id = "#" + process_id(category, value_type);
+ console.log("the_id:", id);
in_box = $(id).html;
current_value = parseFloat($(in_box)).toFixed(2);
if (the_value !== current_value) {
@@ -37,45 +38,25 @@
}
};
update_stat_values = function(sample_sets) {
- var category, current_median, current_n_of_samples, current_sd, id, in_box, n_of_samples, sd, step_a, step_b, sum, the_mean, the_median, value, _i, _j, _len, _len1, _ref, _ref1, _results;
+ var category, n_of_samples, the_mean, the_median, the_std_dev, the_std_error, _i, _len, _ref, _results;
_ref = ['primary_only', 'other_only', 'all_cases'];
_results = [];
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
category = _ref[_i];
n_of_samples = sample_sets[category].n_of_samples();
- id = "#" + process_id(category, "n_of_samples");
- current_n_of_samples = $(id).html();
- if (n_of_samples !== current_n_of_samples) {
- $(id).html(n_of_samples).effect("highlight");
- }
+ change_stats_value(category, "n_of_samples", n_of_samples);
the_mean = sample_sets[category].mean();
the_mean = the_mean.toFixed(2);
change_stats_value(category, "mean", the_mean);
- id = "#" + process_id(category, "median");
the_median = sample_sets[category].median();
the_median = the_median.toFixed(2);
- in_box = $(id).html;
- current_median = parseFloat($(in_box)).toFixed(2);
- if (the_median !== current_median) {
- $(id).html(the_median).effect("highlight");
- }
- sum = 0;
- _ref1 = sample_sets[category];
- for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {
- value = _ref1[_j];
- step_a = Math.pow(value - the_mean, 2);
- sum += step_a;
- }
- step_b = sum / sample_sets[category].length;
- sd = Math.sqrt(step_b);
- sd = sd.toFixed(2);
- id = "#" + process_id(category, "sd");
- current_sd = $(id).html();
- if (sd !== current_sd) {
- _results.push($(id).html(sd).effect("highlight"));
- } else {
- _results.push(void 0);
- }
+ change_stats_value(category, "median", the_median);
+ the_std_dev = sample_sets[category].std_dev();
+ the_std_dev = the_std_dev.toFixed(2);
+ change_stats_value(category, "std_dev", the_std_dev);
+ the_std_error = sample_sets[category].std_error();
+ the_std_error = the_std_error.toFixed(2);
+ _results.push(change_stats_value(category, "std_error", the_std_error));
}
return _results;
};
@@ -133,10 +114,10 @@
vn: "median",
pretty: "Median"
}, {
- vn: "se",
+ vn: "std_error",
pretty: "Standard Error (SE)"
}, {
- vn: "sd",
+ vn: "std_dev",
pretty: "Standard Deviation (SD)"
}
];
diff --git a/wqflask/wqflask/templates/search_result_page.html b/wqflask/wqflask/templates/search_result_page.html
index afcd06d0..572f7fcc 100644
--- a/wqflask/wqflask/templates/search_result_page.html
+++ b/wqflask/wqflask/templates/search_result_page.html
@@ -2,8 +2,8 @@
{% block title %}Search Results{% endblock %}
{% block content %}
<!-- Start of body -->
- <TR>
- <TD bgColor=#eeeeee class="solidBorder">
+ <TR>
+ <TD bgColor=#eeeeee class="solidBorder">
<Table width= "100%" cellSpacing=0 cellPadding=5>
<TR>
<TD valign="top" height="200" width="100%" bgcolor="#eeeeee">
@@ -172,10 +172,10 @@
<INPUT TYPE="checkbox" NAME="searchResult" class="checkbox" VALUE="{{ thisTrait }}" onClick="highlight(this)">
</TD>
<TD class="fs12 fwn b1 c222">
- {# <A HREF="javascript:showDatabase3('{{ thisFormName }}','{{thisTrait.db.name}}','{{ thisTrait.name }}','{{ thisTrait.cellid }}')" class="fs12 fwn"> - </a> #}
- <a href="{{ url_for('show_trait', database=thisTrait.db.name, ProbeSetID=thisTrait.name, incparentsf1='ON', RISet='BXD')}}" class="fs12 fwn">
- {{ thisTrait.name.upper() }}
- </a>
+ {# <A HREF="javascript:showDatabase3('{{ thisFormName }}','{{thisTrait.db.name}}','{{ thisTrait.name }}','{{ thisTrait.cellid }}')" class="fs12 fwn"> - </a> #}
+ <a href="{{ url_for('show_trait', database=thisTrait.db.name, ProbeSetID=thisTrait.name, incparentsf1='ON', RISet='BXD')}}" class="fs12 fwn">
+ {{ thisTrait.name.upper() }}
+ </a>
</TD>
<TD class="fs12 fwn b1 c222 fsI">
<A HREF="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?db=gene&cmd=Retrieve&dopt=Graphics&list_uids={{thisTrait.geneid}}" TARGET="_blank" class="font_black fs12 fwn">
@@ -199,8 +199,8 @@
</TD>
</TR>
</TABLE>
- </TD>
- </TR>
+ </TD>
+ </TR>
<!-- End of body -->
{% endblock %}
diff --git a/wqflask/wqflask/templates/trait_data_and_analysis.html b/wqflask/wqflask/templates/trait_data_and_analysis.html
index 110559bc..3d2ec636 100644
--- a/wqflask/wqflask/templates/trait_data_and_analysis.html
+++ b/wqflask/wqflask/templates/trait_data_and_analysis.html
@@ -18,39 +18,39 @@
<input type="hidden" name="additiveCheck" value="ON">
<input type="hidden" name="incparentsf1" value="ON">
<input type="hidden" name="strainNames" value="_">
- <input type="hidden" name="submitID" value="">
- <input type="hidden" name="scale" value="physic">
- <input type="hidden" name="intervalAnalystCheck" value="ON">
- <input type="hidden" name="topten" value="">
- <input type="hidden" name="parentsf14regression" value="OFF">
- <input type="hidden" name="identification" value="Hippocampus M430v2 BXD 06/06 PDNN : 1441186_at">
+ <input type="hidden" name="submitID" value="">
+ <input type="hidden" name="scale" value="physic">
+ <input type="hidden" name="intervalAnalystCheck" value="ON">
+ <input type="hidden" name="topten" value="">
+ <input type="hidden" name="parentsf14regression" value="OFF">
+ <input type="hidden" name="identification" value="Hippocampus M430v2 BXD 06/06 PDNN : 1441186_at">
<input type="hidden" name="mappingMethodId" value="1">
- <input type="hidden" name="criteria">
- <input type="hidden" name="other_extra_attributes" is it value="_">
- <input type="hidden" name="otherStrainNames" value="_">
- <input type="hidden" name="method">
- <input type="hidden" name="showGenes" value="ON">
- <input type="hidden" name="attribute_names" value="">
- <input type="hidden" name="chromosomes" value="-1">
- <input type="hidden" name="allstrainlist" value="B6D2F1 D2B6F1 C57BL/6J DBA/2J BXD1 BXD2 BXD5 BXD6 BXD8 BXD9 BXD11 BXD12 BXD13 BXD14 BXD15 BXD16 BXD18 BXD19 BXD20 BXD21 BXD22 BXD23 BXD24a BXD24 BXD25 BXD27 BXD28 BXD29 BXD30 BXD31 BXD32 BXD33 BXD34 BXD35 BXD36 BXD37 BXD38 BXD39 BXD40 BXD41 BXD42 BXD43 BXD44 BXD45 BXD48 BXD49 BXD50 BXD51 BXD52 BXD53 BXD54 BXD55 BXD56 BXD59 BXD60 BXD61 BXD62 BXD63 BXD64 BXD65 BXD66 BXD67 BXD68 BXD69 BXD70 BXD71 BXD72 BXD73 BXD74 BXD75 BXD76 BXD77 BXD78 BXD79 BXD80 BXD81 BXD83 BXD84 BXD85 BXD86 BXD87 BXD88 BXD89 BXD90 BXD91 BXD92 BXD93 BXD94 BXD95 BXD96 BXD97 BXD98 BXD99 BXD100 BXD101 BXD102 BXD103 BALB/cByJ PWK/PhJ A/J KK/HlJ LG/J 129S1/SvImJ NZO/HlLtJ CAST/EiJ PWD/PhJ AKR/J CXB13 CXB12 CXB11 CXB10 WSB/EiJ C3H/HeJ CXB7 CXB6 CXB5 CXB4 CXB3 CXB2 CXB1 CXB9 CXB8 NOD/ShiLtJ C57BL/6ByJ BALB/cJ">
+ <input type="hidden" name="criteria">
+ <input type="hidden" name="other_extra_attributes" is it value="_">
+ <input type="hidden" name="otherStrainNames" value="_">
+ <input type="hidden" name="method">
+ <input type="hidden" name="showGenes" value="ON">
+ <input type="hidden" name="attribute_names" value="">
+ <input type="hidden" name="chromosomes" value="-1">
+ <input type="hidden" name="allstrainlist" value="B6D2F1 D2B6F1 C57BL/6J DBA/2J BXD1 BXD2 BXD5 BXD6 BXD8 BXD9 BXD11 BXD12 BXD13 BXD14 BXD15 BXD16 BXD18 BXD19 BXD20 BXD21 BXD22 BXD23 BXD24a BXD24 BXD25 BXD27 BXD28 BXD29 BXD30 BXD31 BXD32 BXD33 BXD34 BXD35 BXD36 BXD37 BXD38 BXD39 BXD40 BXD41 BXD42 BXD43 BXD44 BXD45 BXD48 BXD49 BXD50 BXD51 BXD52 BXD53 BXD54 BXD55 BXD56 BXD59 BXD60 BXD61 BXD62 BXD63 BXD64 BXD65 BXD66 BXD67 BXD68 BXD69 BXD70 BXD71 BXD72 BXD73 BXD74 BXD75 BXD76 BXD77 BXD78 BXD79 BXD80 BXD81 BXD83 BXD84 BXD85 BXD86 BXD87 BXD88 BXD89 BXD90 BXD91 BXD92 BXD93 BXD94 BXD95 BXD96 BXD97 BXD98 BXD99 BXD100 BXD101 BXD102 BXD103 BALB/cByJ PWK/PhJ A/J KK/HlJ LG/J 129S1/SvImJ NZO/HlLtJ CAST/EiJ PWD/PhJ AKR/J CXB13 CXB12 CXB11 CXB10 WSB/EiJ C3H/HeJ CXB7 CXB6 CXB5 CXB4 CXB3 CXB2 CXB1 CXB9 CXB8 NOD/ShiLtJ C57BL/6ByJ BALB/cJ">
<input type="hidden" name="applyVarianceSE">
- <input type="hidden" name="MDPChoice">
- <input type="hidden" name="otherStrainVars" value="_">
+ <input type="hidden" name="MDPChoice">
+ <input type="hidden" name="otherStrainVars" value="_">
<input type="hidden" name="strainVals" value="_">
- <input type="hidden" name="showSNP" value="ON">
- <input type="hidden" name="bootCheck">
+ <input type="hidden" name="showSNP" value="ON">
+ <input type="hidden" name="bootCheck">
<input type="hidden" name="GeneId" value="20689">
- <input type="hidden" name="extra_attributes" value="_">
- <input type="hidden" name="stats_method" value="1">
- <input type="hidden" name="heritability" value="None">
- <input type="hidden" name="database" value="">
- <input type="hidden" name="viewLegend" value="ON">
- <input type="hidden" name="fromDataEditingPage" value="1">
- <input type="hidden" name="trait_type" value="ProbeSet">
- <input type="hidden" name="valsHidden" value="OFF">
- <input type="hidden" name="fullname" value="HC_M2_0606_P::1441186_at">
+ <input type="hidden" name="extra_attributes" value="_">
+ <input type="hidden" name="stats_method" value="1">
+ <input type="hidden" name="heritability" value="None">
+ <input type="hidden" name="database" value="">
+ <input type="hidden" name="viewLegend" value="ON">
+ <input type="hidden" name="fromDataEditingPage" value="1">
+ <input type="hidden" name="trait_type" value="ProbeSet">
+ <input type="hidden" name="valsHidden" value="OFF">
+ <input type="hidden" name="fullname" value="HC_M2_0606_P::1441186_at">
<input type="hidden" name="RISet" value="BXD">
- #}
+ #}
{% for key in hddn %}
<input type="hidden" name="{{ key }}" value="{{ hddn[key] }}">
{% endfor %}
@@ -103,13 +103,13 @@
<td valign="top" width="10"></td>
<td valign="top">
- <span class="fs13">
- <a href="/blatInfo.html" target="_blank" class="non_bold" title="Values higher than 2 for the specificity are good">
- BLAT specificity
- </a>: {{ "%.1f" % (thisTrait.probe_set_specificity) }}&nbsp;&nbsp;&nbsp;
- Score: {{ "%i" % (thisTrait.probe_set_blat_score) }}&nbsp;&nbsp;
- </span>
- </td>
+ <span class="fs13">
+ <a href="/blatInfo.html" target="_blank" class="non_bold" title="Values higher than 2 for the specificity are good">
+ BLAT specificity
+ </a>: {{ "%.1f" % (thisTrait.probe_set_specificity) }}&nbsp;&nbsp;&nbsp;
+ Score: {{ "%i" % (thisTrait.probe_set_blat_score) }}&nbsp;&nbsp;
+ </span>
+ </td>
</tr>
<tr>
@@ -126,8 +126,8 @@
<td valign="top" width="10"></td>
<td valign="top">
- <a href="{{ thisTrait.database.url }}" target="_blank" class="fs13 fwn non_bold">{{ thisTrait.database.name }}</a>
- </td>
+ <a href="{{ thisTrait.database.url }}" target="_blank" class="fs13 fwn non_bold">{{ thisTrait.database.name }}</a>
+ </td>
</tr>
<tr>
@@ -140,14 +140,14 @@
<td valign="top" width="10"></td>
<td valign="top">
- <span class="fs13">
- <span style="background:#dddddd;padding:2">
- <a href="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?db=gene&amp;cmd=Retrieve&amp;dopt=Graphics&amp;list_uids=20689" target="_blank" class=
+ <span class="fs13">
+ <span style="background:#dddddd;padding:2">
+ <a href="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?db=gene&amp;cmd=Retrieve&amp;dopt=Graphics&amp;list_uids=20689" target="_blank" class=
"fs14 fwn" title="Info from NCBI Entrez Gene">
- Gene
- </a>
- </span>
- &nbsp;&nbsp;<span style="background:#dddddd;padding:2"><a href=
+ Gene
+ </a>
+ </span>
+ &nbsp;&nbsp;<span style="background:#dddddd;padding:2"><a href=
"http://www.ncbi.nlm.nih.gov/UniGene/clust.cgi?ORG=Mm&amp;CID=215917" target="_blank" class="fs14 fwn" title=
"UniGene ID">UniGene</a></span>&nbsp;&nbsp;<span style="background:#dddddd;padding:2"><a href=
"http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?db=Nucleotide&amp;cmd=search&amp;doptcmdl=DocSum&amp;term=BM119035" target="_blank" class=
@@ -260,12 +260,12 @@
//-->
</script>
- <table cellpadding="0" cellspacing="0" border="0" class="display" id="stats_dyn"></table>
+ <table cellpadding="0" cellspacing="0" border="0" class="display" id="stats_dyn"></table>
<table class="target2" cellpadding="0" cellspacing="0" width="100%">
<tr>
<td>
- {% for sd in stats_data %}
+ {% for sd in stats_data %}
<div class="ui-tabs" id="{{ 'stats_tabs%i' % loop.index0 }}">
<ul>
<li><a href="#statstabs-1" class="stats_tab">Basic Table</a></li>
@@ -401,8 +401,8 @@
</table>
</div>
</div>
- {% endfor %}
- {# Not used now - Todo: Delete after we're sure this is right.
+ {% endfor %}
+ {# Not used now - Todo: Delete after we're sure this is right.
<div class="ui-tabs" id="stats_tabs1">
<ul>
<li><a href="#statstabs-1" class="stats_tab">Basic Table</a></li>
@@ -679,7 +679,7 @@
</td>
</tr>
</table>
- #}
+ #}
<p class="sectionheader" id="title3" style="border-radius: 5px;">&nbsp;&nbsp;Calculate Correlations</p>
@@ -1200,7 +1200,7 @@
<p class="sectionheader" id="title5" style="border-radius: 5px;">&nbsp;&nbsp;Review and Edit Data</p>
- <table id="stats_table" class="one-column-emphasis" />
+ <table id="stats_table" class="one-column-emphasis" />
<p id="sectionbody5"></p>
@@ -1252,8 +1252,8 @@
<div id="{{ strain_type.strains[0]['this_id'].lower().partition('_')[0] }}"> {# Slightly tortuous, but best way to get the id we need #}
<table class="not_tablesorter" {# Todo: Turn tablesorter back on #}
- id="{{ 'sortable%i' % (loop.index) }}"
- cellpadding="0" cellspacing="0">
+ id="{{ 'sortable%i' % (loop.index) }}"
+ cellpadding="0" cellspacing="0">
<tr>
<th class="fs13 fwb ff1 b1 cw cbrb" align="right" width="60">Index</th>
@@ -1266,46 +1266,46 @@
<th class="fs13 fwb ff1 b1 cw cbrb" align="right" width="80">SE</th>
</tr>
- {% for strain in strain_type.strains %}
+ {% for strain in strain_type.strains %}
<tr class="{{ strain.class_outlier }} value_se" id="{{ strain.this_id }}">
<td class="fs13 b1 c222" align="right" width="45">
- {{ loop.index }}
- <input type="checkbox" name="selectCheck" class="checkbox edit_strain_checkbox" value="{{ strain.name }}" checked="checked">
- </td>
+ {{ loop.index }}
+ <input type="checkbox" name="selectCheck" class="checkbox edit_strain_checkbox" value="{{ strain.name }}" checked="checked">
+ </td>
<td class="fs13 b1 c222" align="right" width="100">
- <span class="fs14 fwn ffl edit_strain_strain_name">{{ strain.name }}</span>
- </td>
+ <span class="fs14 fwn ffl edit_strain_strain_name">{{ strain.name }}</span>
+ </td>
- {# Todo: Add IDs #}
+ {# Todo: Add IDs #}
<td class="fs13 b1 c222" align="right" width="70">
- <input type="text" name="{{ strain.name }}" class="fs13 b1 c222 edit_strain_value valueField"
- value="{{ strain.display_value }}" size="8" maxlength="8"
- style="text-align:right; background-color:#FFFFFF;">
- </td>
+ <input type="text" name="{{ strain.name }}" class="fs13 b1 c222 edit_strain_value valueField"
+ value="{{ strain.display_value }}" size="8" maxlength="8"
+ style="text-align:right; background-color:#FFFFFF;">
+ </td>
<td class="fs13 b1 c222" align="center" width="20">
- ±
- </td>
+ ±
+ </td>
- {# Todo: Add IDs #}
+ {# Todo: Add IDs #}
<td class="fs13 b1 c222" align="right" width="80">
- <input type="text" name=""{{ 'V' + strain.name}}" class="fs13 b1 c222 valueField edit_strain_se"
- value="{{ strain.display_variance }}"
- size="8" maxlength="8" style="text-align:right"></td>
+ <input type="text" name=""{{ 'V' + strain.name}}" class="fs13 b1 c222 valueField edit_strain_se"
+ value="{{ strain.display_variance }}"
+ size="8" maxlength="8" style="text-align:right"></td>
</tr>
- {% endfor %}
+ {% endfor %}
</table>
</div>
</div>
- {% endfor %}
+ {% endfor %}
</div>
</div>
</td>
</tr>
</table>
- <input type="hidden" name="Default_Name">
+ <input type="hidden" name="Default_Name">
</form>
</td>
</tr>
@@ -1317,15 +1317,15 @@
js_data = {{ js_data | safe }}
</script>
- <script type="text/javascript" src="/static/new/js_external/underscore-min.js"></script>-->
- <script type="text/javascript" src="/static/new/js_external/underscore.string.min.js"></script>
+ <script type="text/javascript" src="/static/new/js_external/underscore-min.js"></script>-->
+ <script type="text/javascript" src="/static/new/js_external/underscore.string.min.js"></script>
<script type="text/javascript" src="/static/new/javascript/stats.js"></script>
- <script type="text/javascript" src="/static/new/javascript/trait_data_and_analysis.js"></script>
+ <script type="text/javascript" src="/static/new/javascript/trait_data_and_analysis.js"></script>
- <!-- End of body -->
-
+ <!-- End of body -->
+