refactor phenotypes brapi calls
[sgn.git] / mason / breeders_toolbox / selection_index.mas
blobcf78b758e96432c2fba7ea2e442c848b4bee79da
2 <%args>
3 $trial_id => undef
4 $trial_name => undef
5 </%args>
7 <script type="text/x-mathjax-config">
8   MathJax.Hub.Config({tex2jax: {inlineMath: [['$','$'], ['\\(','\\)']]}});
9 </script>
10 <script type="text/javascript" async
11   src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_CHTML">
12 </script>
13 <& /util/import_javascript.mas, classes => [ 'jqueryui', 'jquery.dataTables-min', 'jquery.dataTables-buttons-min', 'jszip-min', 'pdfmake.pdfmake-min', 'pdfmake.vfs_fonts', 'buttons.bootstrap-min', 'buttons.html5-min', 'buttons.print-min', 'buttons.colvis-min', 'CXGN.BreederSearch', 'CXGN.SelectionIndex' ] &>
14 <& /page/page_title.mas, title=>"Build a Selection Index" &>
16 <div class="panel panel-default">
17   <div class="panel-heading" data-toggle="collapse" data-parent="#accordion" data-target="#collapse1">
18     <div class="panel-title"><a href="#form" class="accordion-toggle">Parameters</a><span class="pull-right clickable" onmouseover="" style="cursor: pointer;"><i class="glyphicon glyphicon-chevron-up"></i></span></div>
19   </div>
20   <div id="collapse1" class="panel-collapse collapse in">
21     <div class="panel-body form-horizontal container-fluid" style="overflow:hidden">
22       <div class="col-sm-12 col-md-12 col-lg-12">
23           <label for="select_trial_for_selection_index">Trial: </label>
24           <select class="form-control" autofocus="autofocus" id="select_trial_for_selection_index"></select>
25       </div><br><br><br><br><br>
26       <div class="col-sm-12 col-md-12 col-lg-12 table-responsive" id="trait_table_div">
27         <label id="trait_table_label">Traits and coefficients: </label>
28           <table class="table table-bordered table-striped table-highlight">
29             <thead>
30               <th>Trait name</th>
31               <th>Trait synonym</th>
32               <th data-toggle="tooltip" title="Must be a positive or negative number.">Index coefficient</th>
33               <th data-toggle="tooltip" title="Select the trial name, or a control, to normalize means for this trait to the trial or control mean">Normalize with a control?</th>
34               <th>Remove?</th>
35             </thead>
36             <tbody id ="trait_table"></tbody>
37             <tfoot><td colspan="5">
38             <select class="form-control" id="trait_list"></select>
39             </td></tfoot>
40           </table>
41         </div>
43         <div class="col-sm-6 col-md-6 col-lg-6" id="sin_formula"><br>
44         <center><label>Selection Index (SIN) formula:</label></center><br>
45           <p id="ranking_formula"></p><br><br>
46           <center><button type="button" class="btn btn-primary disabled" id="calculate_rankings">Calculate Rankings</button></center>
47         </div><br><br><br><br><br>
49         <div class="col-sm-6 col-md-6 col-lg-6"><br>
50         <label>Options:</label><br>
51         <label>Load a saved formula:</label>
52         <div id="sin_list"></div><br>
53         <label>Save the current formula:</label>
54           <div class="input-group">
55             <input type='text' id='save_sin_name' class='form-control disabled' placeholder='Enter a name'></input>
56             <span class="input-group-btn">
57               <button class="btn btn-default disabled" id="save_sin" type="button">Save</button>
58             </span>
59           </div><br>
60             <label><input type="checkbox" id="allow_missing" value="">Include accessions with missing values in calculations</label>
61           <select class="form-control" id="control_list" style="display: none"></select>
62         </div><br><br><br><br><br>
63       </div>
64     </div>
65   </div>
68 <div class="panel panel-default">
69   <div class="panel-heading" data-toggle="collapse" data-parent="#accordion" data-target="#collapse2">
70     <div class="panel-title"><a href="#table_panel" class="accordion-toggle">Results</a><span class="pull-right clickable" onmouseover="" style="cursor: pointer;"><i class="glyphicon glyphicon-chevron-up"></i></span></div>
71   </div>
72   <div id="collapse2" class="panel-collapse collapse in">
73     <div class="panel-body" id="table_panel" style="overflow:hidden">
74       <ul class="nav nav-tabs"><li class="active"><a data-toggle="tab" href="#weighted_values_div">Rankings</a></li><li><a data-toggle="tab" href="#raw_avgs_div">Unweighted Means</a></li></ul>
75       <div class="tab-content">
76         <div id="weighted_values_div" class="tab-pane fade in active"></div>
77         <div id="raw_avgs_div" class="tab-pane fade"></div>
78       </div>
79     </div>
80   </div>
81 </div>
83 <div class="modal fade" id="selection_index_info_dialog" name="selection_index_info_dialog" tabindex="-1" role="dialog" aria-labelledby="selectionIndexInfoDialog">
84   <div class="modal-dialog modal-lg" role="document">
85     <div class="modal-content">
86       <div class="modal-header">
87         <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
88         <center><h3 class="modal-title" id="selectionIndexInfoDialog">How the Selection Index tool works</h3></center>
89       </div>
90       <div class="modal-body">
91         <div class="container-fluid">
93         <h4>
94           Background:
95         </h4>
96           <center><p>A selection index is a method of optimizing selection by acting on multiple traits simultaneously. An index can accomplish this because it incorporates multiple sources of information about an individual into a single best linear prediction of breeding value. This selection index tool combines phenotypic observations with index coefficients into a selection index, SIN, of the form:</p></center>
97           <center>\(SIN = b_1x_1 + b_2x_2\hspace{2mm}...\hspace{2mm}b_ix_i\)</center><br>
98           <center><p>where $x_i$ is the mean of observations on the $_i$th trait and $b_i$ is the selection index coefficient (or weight) for that trait.</p></center>
100         <h4>
101           Parameters:
102         </h4>
103         <dl>
104           <dt>Trial</dt>
105           <dd>One trial. Must be selected first. Multiple trial selection indices are not yet supported.</dd>
106           <dt>Traits</dt>
107           <dd>One or more traits. Must be traits that were measured in the trial. At maximum, all of the traits from the trial can be used.</dd>
108           <dt>Selection coefficients</dt>
109           <dd>One for each trait. Must be a positive or negative number, and should reflect the importance of the trait in the index. If left blank it defaults to 1.</dd>
110           <dt>Normalization</dt>
111           <dd>By default the unadjusted mean of phenotypic observations is used. For each trait, users have the option to normalize these means using a control mean or the overall trial mean.</dd>
112         </dl>
114         <h4>
115           Options:
116         </h4>
117         <dt>Save</dt>
118         <dd>The save option allows a user to enter a name, and save the current index formula as a dataset. It is then available for later use, and visible in their list manager where it can be edited or shared with others.</dd>
119         <dt>Select</dt>
120         <dd>The select option allows a user to load a saved formula, which will consist of a saved combination of traits, coefficients, and normalization options.</dd>
121         <dt>Include checkbox</dt>
122         <dd>Accessions with missing phenotypes are excluded by default. If the allow missing phenotypes option is enabled, the rankings will expand to include any accessions which were planted in the trial but which are missing observations for one or more of the traits in the index. Missing phenotypes will not contribute to the SIN score, so the final SIN interpretation should change accordingly.</dd>
124         <h4>
125           Results:
126         </h4>
127           <p>The <b>Calculate Rankings</b> button will produce a SIN score and ranking for each accession, based on the selected parameters and phenotype means. The rankings and phenotype means are displayed in the <b>Rankings</b> and <b>Unweighted Means</b> tabs of the results section, where they can be manipulated, copied and downloaded. Below the results table, users have the option to <b>save top ranked accessions to a list</b>.</p>
128         </div>
129       </div>
130       <div class="modal-footer">
131         <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
132       </div>
133     </div>
134   </div>
135 </div>
137 <div class="modal fade" id="selection_index_error_dialog" tabindex="-1" role="dialog" aria-labelledby="selectionIndexErrorDialog">
138     <div class="modal-dialog" role="document">
139         <div class="modal-content ui-front">
140             <div class="modal-header text-center">
141                 <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
142                 <h4 class="modal-title" id="selectionIndexErrorDialog"></h4>
143             </div>
144             <div class="modal-body" id="selection_index_error_body">
145               <ul class="list-group" id="selection_index_error_message"></ul>
146             </div>
147             <div class="modal-footer">
148                 <button id="selection_index_error_close_button" type="button" class="btn btn-default" data-dismiss="modal">Close</button>
149             </div>
150         </div>
151     </div>
152 </div>
154 <script>
155     jQuery(document).ready(function() {
156         jQuery('#ranking_formula').html("<center><i>Select a trial, then pick traits and weights (or load a saved formula).</i></center>");
157         get_select_box('trials', 'select_trial_for_selection_index', { 'name' : 'html_select_trial_for_selection_index', 'id' : 'html_select_trial_for_selection_index' , 'empty' : 1 });
158         var lo = new CXGN.List();
159         jQuery('#sin_list').html(lo.listSelect('sin_list', ['dataset'], 'Select a formula', 'refresh', undefined));
160         jQuery('#sin_list_list_select').change(
161           function() {
162             load_sin();
163         });
164     });
165 </script>