www/views/experiments/plotter/index.jsp

Code
Comments
Other
Rev Date Author Line
2097 21 Mar 06 nicklas 1 <%-- $Id$
2097 21 Mar 06 nicklas 2   ------------------------------------------------------------------
2097 21 Mar 06 nicklas 3   BioArray Software Environment (BASE) - http:// base.thep.lu.se/
2097 21 Mar 06 nicklas 4
2304 22 May 06 jari 5   This file is part of BASE - BioArray Software Environment.
2304 22 May 06 jari 6   Available at http://base.thep.lu.se/
2097 21 Mar 06 nicklas 7
2097 21 Mar 06 nicklas 8   BASE is free software; you can redistribute it and/or
2097 21 Mar 06 nicklas 9   modify it under the terms of the GNU General Public License
4476 05 Sep 08 jari 10   as published by the Free Software Foundation; either version 3
2097 21 Mar 06 nicklas 11   of the License, or (at your option) any later version.
2097 21 Mar 06 nicklas 12
2097 21 Mar 06 nicklas 13   BASE is distributed in the hope that it will be useful,
2097 21 Mar 06 nicklas 14   but WITHOUT ANY WARRANTY; without even the implied warranty of
2097 21 Mar 06 nicklas 15   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
2097 21 Mar 06 nicklas 16   GNU General Public License for more details.
2097 21 Mar 06 nicklas 17
2097 21 Mar 06 nicklas 18   You should have received a copy of the GNU General Public License
4511 11 Sep 08 jari 19   along with BASE. If not, see <http://www.gnu.org/licenses/>.
2097 21 Mar 06 nicklas 20   ------------------------------------------------------------------
2097 21 Mar 06 nicklas 21
2097 21 Mar 06 nicklas 22   @author Nicklas
2097 21 Mar 06 nicklas 23   @version 2.0
2097 21 Mar 06 nicklas 24 --%>
5426 24 Sep 10 nicklas 25 <%@ page pageEncoding="UTF-8" session="false"
2097 21 Mar 06 nicklas 26   import="net.sf.basedb.core.SessionControl"
2097 21 Mar 06 nicklas 27   import="net.sf.basedb.core.DbControl"
2704 04 Oct 06 nicklas 28   import="net.sf.basedb.core.Experiment"
2097 21 Mar 06 nicklas 29   import="net.sf.basedb.core.BioAssaySet"
2097 21 Mar 06 nicklas 30   import="net.sf.basedb.core.BioAssay"
2097 21 Mar 06 nicklas 31   import="net.sf.basedb.core.RawDataType"
2097 21 Mar 06 nicklas 32   import="net.sf.basedb.core.RawDataProperty"
2104 23 Mar 06 nicklas 33   import="net.sf.basedb.core.Formula"
4916 30 Apr 09 nicklas 34   import="net.sf.basedb.core.IntensityTransform"
2704 04 Oct 06 nicklas 35   import="net.sf.basedb.core.AnnotationType"
2104 23 Mar 06 nicklas 36   import="net.sf.basedb.core.ItemQuery"
2104 23 Mar 06 nicklas 37   import="net.sf.basedb.core.ItemResultList"
2104 23 Mar 06 nicklas 38   import="net.sf.basedb.core.Include"
2296 19 May 06 nicklas 39   import="net.sf.basedb.core.Permission"
2296 19 May 06 nicklas 40   import="net.sf.basedb.core.Item"
2104 23 Mar 06 nicklas 41   import="net.sf.basedb.core.query.Orders"
2104 23 Mar 06 nicklas 42   import="net.sf.basedb.core.query.Hql"
2892 10 Nov 06 nicklas 43   import="net.sf.basedb.core.query.Restrictions"
2892 10 Nov 06 nicklas 44   import="net.sf.basedb.core.query.Restriction"
2892 10 Nov 06 nicklas 45   import="net.sf.basedb.core.query.Expressions"
2097 21 Mar 06 nicklas 46   import="net.sf.basedb.clients.web.Base"
2222 09 May 06 nicklas 47   import="net.sf.basedb.clients.web.DynamicUtil"
2097 21 Mar 06 nicklas 48   import="net.sf.basedb.clients.web.util.HTML"
2753 20 Oct 06 nicklas 49   import="net.sf.basedb.util.Values"
2097 21 Mar 06 nicklas 50   import="net.sf.basedb.clients.web.WebException"
2222 09 May 06 nicklas 51   import="net.sf.basedb.clients.web.taglib.table.TableColumn"
2222 09 May 06 nicklas 52   import="java.util.List"
2222 09 May 06 nicklas 53   import="java.util.LinkedList"
2097 21 Mar 06 nicklas 54 %>
2097 21 Mar 06 nicklas 55 <%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
2111 24 Mar 06 nicklas 56 <%@ taglib prefix="t" uri="/WEB-INF/tab.tld" %>
2111 24 Mar 06 nicklas 57 <%!
2111 24 Mar 06 nicklas 58 private static void addFormulaOption(StringBuilder options, String formula, String title, String description)
2111 24 Mar 06 nicklas 59 {
2111 24 Mar 06 nicklas 60   options.append("<option value=\"").append(HTML.encodeTags(formula)).append("\"");
2111 24 Mar 06 nicklas 61   options.append(" title=\"").append(HTML.encodeTags(description)).append("\"");
2111 24 Mar 06 nicklas 62   options.append(">").append(HTML.encodeTags(title)).append("\n");
2111 24 Mar 06 nicklas 63 }
2111 24 Mar 06 nicklas 64
2111 24 Mar 06 nicklas 65 %>
2097 21 Mar 06 nicklas 66 <%
2097 21 Mar 06 nicklas 67 final SessionControl sc = Base.getExistingSessionControl(pageContext, true);
2111 24 Mar 06 nicklas 68 final float scale = Base.getScale(sc);
2097 21 Mar 06 nicklas 69 final String ID = sc.getId();
7954 12 May 21 nicklas 70 final DbControl dc = sc.newDbControl(":Experiment plotter");
2097 21 Mar 06 nicklas 71 try
2097 21 Mar 06 nicklas 72 {
2097 21 Mar 06 nicklas 73   int bioAssaySetId = Values.getInt(request.getParameter("bioassayset_id"));
2097 21 Mar 06 nicklas 74   int bioAssayId = Values.getInt(request.getParameter("bioassay_id"));
2097 21 Mar 06 nicklas 75   BioAssay ba = bioAssayId == 0 ? null : BioAssay.getById(dc, bioAssayId);
2097 21 Mar 06 nicklas 76   BioAssaySet bas = ba == null ? BioAssaySet.getById(dc, bioAssaySetId) : ba.getBioAssaySet();
2104 23 Mar 06 nicklas 77   RawDataType rdt = bas.getRawDataType();
2704 04 Oct 06 nicklas 78   Experiment experiment = bas.getExperiment();
2993 01 Dec 06 nicklas 79   int maxRawMappings = bas.getMaxRawMappingsForSpot();
4916 30 Apr 09 nicklas 80   IntensityTransform transform = bas.getIntensityTransform();
2097 21 Mar 06 nicklas 81   
2222 09 May 06 nicklas 82   List<TableColumn> formulas = new LinkedList<TableColumn>();
4916 30 Apr 09 nicklas 83   DynamicUtil.addSpotColumns(formulas, dc, rdt.getChannels(), transform);
4917 30 Apr 09 nicklas 84   DynamicUtil.addFormulaColumns(formulas, dc, rdt, Formula.Type.COLUMN_EXPRESSION, 
4917 30 Apr 09 nicklas 85       transform, "", "", maxRawMappings == 1);
2664 26 Sep 06 nicklas 86   DynamicUtil.addExtraColumns(formulas, dc, bas, "ev", "#", "[Xtra] ");
2993 01 Dec 06 nicklas 87   if (maxRawMappings == 1)
2993 01 Dec 06 nicklas 88   {
2993 01 Dec 06 nicklas 89     DynamicUtil.addRawDataColumns(formulas, dc, rdt, "", "", "[Raw] ");
2993 01 Dec 06 nicklas 90   }
2104 23 Mar 06 nicklas 91   
2104 23 Mar 06 nicklas 92   StringBuilder formulaOptions = new StringBuilder();
2222 09 May 06 nicklas 93   for (TableColumn tc : formulas)
2111 24 Mar 06 nicklas 94   {
2222 09 May 06 nicklas 95     if (tc.getJepExpression() != null && tc.getDatatype().isNumerical())
2111 24 Mar 06 nicklas 96     {
2993 01 Dec 06 nicklas 97       String jepExpression = tc.getJepExpression();
2993 01 Dec 06 nicklas 98       addFormulaOption(formulaOptions, jepExpression, tc.getTitle(), tc.getDescription());
2111 24 Mar 06 nicklas 99     }
2111 24 Mar 06 nicklas 100   }
2104 23 Mar 06 nicklas 101   
2296 19 May 06 nicklas 102   StringBuilder filterOptions = new StringBuilder();
4917 30 Apr 09 nicklas 103   ItemQuery<Formula> formulaQuery = Formula.getQuery(Formula.Type.COLUMN_RESTRICTION, rdt, transform);
2296 19 May 06 nicklas 104   formulaQuery.order(Orders.asc(Hql.property("name")));
2296 19 May 06 nicklas 105   formulaQuery.include(Include.MINE, Include.SHARED, Include.IN_PROJECT, Include.OTHERS);
2296 19 May 06 nicklas 106   for (Formula formula : formulaQuery.list(dc))
2296 19 May 06 nicklas 107   {
2993 01 Dec 06 nicklas 108     String f = formula.getFormulas().get(0);
2993 01 Dec 06 nicklas 109     if (maxRawMappings == 1 || !f.contains("raw("))
2993 01 Dec 06 nicklas 110     {
2993 01 Dec 06 nicklas 111       addFormulaOption(filterOptions, f, 
2993 01 Dec 06 nicklas 112         formula.getName(), formula.getDescription());
2993 01 Dec 06 nicklas 113     }
2296 19 May 06 nicklas 114   }
2296 19 May 06 nicklas 115   
2892 10 Nov 06 nicklas 116   // Annnotations -- experimental factors and bioassay annotations
2892 10 Nov 06 nicklas 117   final ItemQuery<AnnotationType> query = AnnotationType.getQuery(null);
2892 10 Nov 06 nicklas 118   query.join(Hql.leftJoin("experiments", Item.EXPERIMENT.getAlias()));
2892 10 Nov 06 nicklas 119   query.join(Hql.innerJoin("itemTypes", "itemType"));
2892 10 Nov 06 nicklas 120   Restriction ef = Restrictions.eq(
2892 10 Nov 06 nicklas 121     Hql.alias(Item.EXPERIMENT.getAlias()), 
2892 10 Nov 06 nicklas 122     Hql.entity(experiment)
2892 10 Nov 06 nicklas 123   );
2892 10 Nov 06 nicklas 124   Restriction baa = Restrictions.eq(
2892 10 Nov 06 nicklas 125     Hql.alias("itemType"),
2892 10 Nov 06 nicklas 126     Expressions.integer(Item.BIOASSAY.getValue())
2892 10 Nov 06 nicklas 127   );
2892 10 Nov 06 nicklas 128   query.restrict(Restrictions.or(ef, baa));
2704 04 Oct 06 nicklas 129   query.include(Include.MINE, Include.SHARED, Include.IN_PROJECT, Include.OTHERS);
2704 04 Oct 06 nicklas 130   query.order(Orders.asc(Hql.property("name")));
2704 04 Oct 06 nicklas 131   List<AnnotationType> experimentalFactors = query.list(dc);
2704 04 Oct 06 nicklas 132   
2097 21 Mar 06 nicklas 133   String title = HTML.encodeTags("Plot " + (ba == null ? bas.getName() : ba.getName()));
2296 19 May 06 nicklas 134   
2296 19 May 06 nicklas 135   final boolean hasCreateFilePermission = sc.hasPermission(Permission.CREATE, Item.FILE);
2097 21 Mar 06 nicklas 136   %>
2097 21 Mar 06 nicklas 137   <base:page type="popup" title="<%=title%>">
6315 06 Sep 13 nicklas 138   <base:head scripts="~plotter.js" />
6315 06 Sep 13 nicklas 139   <base:body>
6315 06 Sep 13 nicklas 140   <h1><%=title%> <base:help helpid="plotter" /></h1>
2116 27 Mar 06 nicklas 141   
6315 06 Sep 13 nicklas 142   <div id="page-data" class="datacontainer"
6315 06 Sep 13 nicklas 143     data-bioassayset="<%=bioAssaySetId %>"
6315 06 Sep 13 nicklas 144     data-bioassay="<%=bioAssayId %>"
6315 06 Sep 13 nicklas 145   ></div>
2111 24 Mar 06 nicklas 146   
5924 13 Jan 12 nicklas 147   <form name="plot">
5924 13 Jan 12 nicklas 148   <div class="content bottomborder">
5924 13 Jan 12 nicklas 149     <div class="absolutefull rightborder" style="right: 550px;">
5924 13 Jan 12 nicklas 150       <table class="fullform input100 smaller">
5924 13 Jan 12 nicklas 151       <tbody>
5924 13 Jan 12 nicklas 152         <tr>
5924 13 Jan 12 nicklas 153           <th>Plot title</th>
5924 13 Jan 12 nicklas 154           <td colspan="2"><input type="text" class="text" size="30" maxlength="255" name="title" 
5924 13 Jan 12 nicklas 155             value="<%=HTML.encodeTags(ba == null ? bas.getName() : ba.getName())%>"></td>
5924 13 Jan 12 nicklas 156         </tr>
5924 13 Jan 12 nicklas 157         <tr>
5924 13 Jan 12 nicklas 158           <th class="subprompt">Subtitle</th>
5924 13 Jan 12 nicklas 159           <td colspan="2"><input type="text" class="text" maxlength="255" name="subTitle" 
5924 13 Jan 12 nicklas 160             value=""></td>
5924 13 Jan 12 nicklas 161         </tr>
5924 13 Jan 12 nicklas 162         <tr>
5924 13 Jan 12 nicklas 163           <th>Width</th>
6315 06 Sep 13 nicklas 164           <td colspan="2"><input type="text" class="text" name="width" id="width"
6315 06 Sep 13 nicklas 165             style="width: 10em;" maxlength="10" value="900"> (not used by preview)</td>
5924 13 Jan 12 nicklas 166         </tr>
5924 13 Jan 12 nicklas 167         <tr>
5924 13 Jan 12 nicklas 168           <th>Height</th>
6315 06 Sep 13 nicklas 169           <td colspan="2"><input type="text" class="text" name="height" id="height"
6315 06 Sep 13 nicklas 170             style="width: 10em;" maxlength="10" value="600"></td>
5924 13 Jan 12 nicklas 171         </tr>
5924 13 Jan 12 nicklas 172         <tr>
5924 13 Jan 12 nicklas 173           <th class="subprompt"></th>
5924 13 Jan 12 nicklas 174           <td colspan="2"></td>
5924 13 Jan 12 nicklas 175         </tr>
5924 13 Jan 12 nicklas 176       </tbody>
5924 13 Jan 12 nicklas 177       <tbody class="sectionheader">
5924 13 Jan 12 nicklas 178         <tr>
5924 13 Jan 12 nicklas 179           <th>Plot type</th>
6612 21 Nov 14 nicklas 180           <th colspan="2">
6315 06 Sep 13 nicklas 181             <input type="radio" name="plotType" value="scatter" 
5924 13 Jan 12 nicklas 182               id="plotTypeScatter" checked><label for="plotTypeScatter">Scatter</label>
6315 06 Sep 13 nicklas 183             <input type="radio" name="plotType" value="histogram" 
5924 13 Jan 12 nicklas 184               id="plotTypeHistogram"><label for="plotTypeHistogram">Histogram</label>
6612 21 Nov 14 nicklas 185           </th>
5924 13 Jan 12 nicklas 186         </tr>
5924 13 Jan 12 nicklas 187       </tbody>
5924 13 Jan 12 nicklas 188       <tbody id="scatterSection">
5924 13 Jan 12 nicklas 189         <tr>
5924 13 Jan 12 nicklas 190           <th>Y-axis</th>
5924 13 Jan 12 nicklas 191           <td>
6315 06 Sep 13 nicklas 192           <select name="yPresetsScatter" id="yPresetsScatter"
6315 06 Sep 13 nicklas 193             class="auto-init"
6315 06 Sep 13 nicklas 194             data-auto-init="formula-presets"
6315 06 Sep 13 nicklas 195             data-formula-id="yFormulaScatter"
6315 06 Sep 13 nicklas 196             data-label-id="yLabelScatter"
6315 06 Sep 13 nicklas 197             style="width: 25em;"
5924 13 Jan 12 nicklas 198             >
5924 13 Jan 12 nicklas 199             <option value="">- select from list or enter formula below -
5924 13 Jan 12 nicklas 200             <%=formulaOptions.toString()%>
5924 13 Jan 12 nicklas 201           </select>
5924 13 Jan 12 nicklas 202           </td>
5924 13 Jan 12 nicklas 203           <td></td>
5924 13 Jan 12 nicklas 204         </tr>
5924 13 Jan 12 nicklas 205         <tr>
5924 13 Jan 12 nicklas 206           <th class="subprompt">Expression</th>
6315 06 Sep 13 nicklas 207           <td><input type="text" class="text required" maxlength="255" name="yFormulaScatter" id="yFormulaScatter"></td>
5924 13 Jan 12 nicklas 208           <td>
5924 13 Jan 12 nicklas 209             <base:icon
6315 06 Sep 13 nicklas 210               id="btnExpressionBuilderYScatter"
6315 06 Sep 13 nicklas 211               subclass="auto-init"
6315 06 Sep 13 nicklas 212               data-auto-init="expression-builder"
6315 06 Sep 13 nicklas 213               data-formula-id="yFormulaScatter"
6315 06 Sep 13 nicklas 214               data-title="Y-axis expression"
6315 06 Sep 13 nicklas 215               data-formula-type="COLUMN_EXPRESSION"
6315 06 Sep 13 nicklas 216               data-raw-data-type="<%=rdt.getId() %>"
6315 06 Sep 13 nicklas 217               data-channels="<%=rdt.getChannels() %>"
6315 06 Sep 13 nicklas 218               data-bioassayset="<%=bioAssaySetId %>"
5946 03 Feb 12 nicklas 219               image="expression_builder.png"
5924 13 Jan 12 nicklas 220               tooltip="Use the Expression builder"
5924 13 Jan 12 nicklas 221             />
5924 13 Jan 12 nicklas 222           </td>
5924 13 Jan 12 nicklas 223         </tr>
5924 13 Jan 12 nicklas 224         <tr>
5924 13 Jan 12 nicklas 225           <th class="subprompt">Y label</th>
6315 06 Sep 13 nicklas 226           <td><input type="text" class="text" maxlength="255" name="yLabelScatter" id="yLabelScatter" value=""></td>
5924 13 Jan 12 nicklas 227           <td></td>
5924 13 Jan 12 nicklas 228         </tr>
5924 13 Jan 12 nicklas 229         <tr>
5924 13 Jan 12 nicklas 230           <th class="subprompt"><label for="yLogScatter">Log scale</label></th>
5924 13 Jan 12 nicklas 231           <td><input type="checkbox" name="yLogScatter" id="yLogScatter" value="1"></td>
5924 13 Jan 12 nicklas 232           <td></td>
5924 13 Jan 12 nicklas 233         </tr>
5924 13 Jan 12 nicklas 234         <tr>
5924 13 Jan 12 nicklas 235           <th>X-axis</th>
5924 13 Jan 12 nicklas 236           <td>
6315 06 Sep 13 nicklas 237           <select name="xPresetsScatter" id="xPresetsScatter"
6315 06 Sep 13 nicklas 238             class="auto-init"
6315 06 Sep 13 nicklas 239             data-auto-init="formula-presets"
6315 06 Sep 13 nicklas 240             data-formula-id="xFormulaScatter"
6315 06 Sep 13 nicklas 241             data-label-id="xLabelScatter"
6315 06 Sep 13 nicklas 242             style="width: 25em;"
5924 13 Jan 12 nicklas 243             >
5924 13 Jan 12 nicklas 244             <option value="">- select from list or enter formula below -
5924 13 Jan 12 nicklas 245             <%=formulaOptions.toString()%>
5924 13 Jan 12 nicklas 246           </select>
5924 13 Jan 12 nicklas 247           </td>
5924 13 Jan 12 nicklas 248           <td></td>
5924 13 Jan 12 nicklas 249         </tr>
5924 13 Jan 12 nicklas 250         <tr>
5924 13 Jan 12 nicklas 251           <th class="subprompt">Expression</th>
6315 06 Sep 13 nicklas 252           <td><input type="text" class="text required" maxlength="255" name="xFormulaScatter" id="xFormulaScatter"></td>
5924 13 Jan 12 nicklas 253           <td>
5924 13 Jan 12 nicklas 254             <base:icon
6315 06 Sep 13 nicklas 255               id="btnExpressionBuilderXScatter"
6315 06 Sep 13 nicklas 256               subclass="auto-init"
6315 06 Sep 13 nicklas 257               data-auto-init="expression-builder"
6315 06 Sep 13 nicklas 258               data-formula-id="xFormulaScatter"
6315 06 Sep 13 nicklas 259               data-title="X-axis expression"
6315 06 Sep 13 nicklas 260               data-formula-type="COLUMN_EXPRESSION"
6315 06 Sep 13 nicklas 261               data-raw-data-type="<%=rdt.getId() %>"
6315 06 Sep 13 nicklas 262               data-channels="<%=rdt.getChannels() %>"
6315 06 Sep 13 nicklas 263               data-bioassayset="<%=bioAssaySetId %>"
5946 03 Feb 12 nicklas 264               image="expression_builder.png"
5924 13 Jan 12 nicklas 265               tooltip="Use the Expression builder"
5924 13 Jan 12 nicklas 266             />
5924 13 Jan 12 nicklas 267           </td>
5924 13 Jan 12 nicklas 268         </tr>
5924 13 Jan 12 nicklas 269         <tr>
5924 13 Jan 12 nicklas 270           <th class="subprompt">X label</th>
6315 06 Sep 13 nicklas 271           <td><input type="text" class="text" maxlength="255" name="xLabelScatter" id="xLabelScatter" value=""></td>
5924 13 Jan 12 nicklas 272           <td></td>
5924 13 Jan 12 nicklas 273         </tr>
5924 13 Jan 12 nicklas 274         <tr>
5924 13 Jan 12 nicklas 275           <th class="subprompt"><label for="xLogScatter">Log scale</label></th>
5924 13 Jan 12 nicklas 276           <td><input type="checkbox" name="xLogScatter" id="xLogScatter" value="1"></td>
5924 13 Jan 12 nicklas 277           <td></td>
5924 13 Jan 12 nicklas 278         </tr>
5924 13 Jan 12 nicklas 279       </tbody>
3015 11 Dec 06 nicklas 280       
5924 13 Jan 12 nicklas 281       <tbody id="histogramSection" style="display: none;">
5924 13 Jan 12 nicklas 282         <tr>
5924 13 Jan 12 nicklas 283           <th>Y-axis</th>
5924 13 Jan 12 nicklas 284           <td>
5924 13 Jan 12 nicklas 285             <input type="radio" name="yAggregate" id="yAggregateCount" value="count" checked 
6315 06 Sep 13 nicklas 286               ><label for="yAggregateCount">Count</label>
5924 13 Jan 12 nicklas 287             <input type="radio" name="yAggregate" id="yAggregateMean" value="mean"
6315 06 Sep 13 nicklas 288               ><label for="yAggregateMean">Mean</label>
5924 13 Jan 12 nicklas 289           </td>
5924 13 Jan 12 nicklas 290           <td></td>
5924 13 Jan 12 nicklas 291         </tr>
5924 13 Jan 12 nicklas 292         <tr>
5924 13 Jan 12 nicklas 293           <th class="subprompt">Hi-lo</th>
5924 13 Jan 12 nicklas 294           <td>
5924 13 Jan 12 nicklas 295             <input type="radio" name="hiloAggregate" id="hiloAggregateNone" value="" checked
5924 13 Jan 12 nicklas 296               ><label for="hiloAggregateNone">None</label>
5924 13 Jan 12 nicklas 297             <input type="radio" name="hiloAggregate" id="hiloAggregateMinMax" value="hilomaxmin"
5924 13 Jan 12 nicklas 298               ><label for="hiloAggregateMinMax">Min/Max</label>
5924 13 Jan 12 nicklas 299             <input type="radio" name="hiloAggregate" id="hiloAggregateStdev" value="hilostdev"
5924 13 Jan 12 nicklas 300               ><label for="hiloAggregateStdev">Stdev</label>
5924 13 Jan 12 nicklas 301           </td>
5924 13 Jan 12 nicklas 302           <td></td>
5924 13 Jan 12 nicklas 303         </tr>
5924 13 Jan 12 nicklas 304         <tr>
5924 13 Jan 12 nicklas 305           <th class="subprompt">Presets</th>
5924 13 Jan 12 nicklas 306           <td>
6315 06 Sep 13 nicklas 307           <select name="yPresetsHistogram" id="yPresetsHistogram"
6315 06 Sep 13 nicklas 308             class="auto-init"
6315 06 Sep 13 nicklas 309             data-auto-init="formula-presets"
6315 06 Sep 13 nicklas 310             data-formula-id="yFormulaHistogram"
6315 06 Sep 13 nicklas 311             data-label-id="yLabelHistogram"
6315 06 Sep 13 nicklas 312             style="width: 25em;"
5924 13 Jan 12 nicklas 313             disabled
5924 13 Jan 12 nicklas 314             >
5924 13 Jan 12 nicklas 315             <option value="">- select from list or enter formula below -
5924 13 Jan 12 nicklas 316             <%=formulaOptions.toString()%>
5924 13 Jan 12 nicklas 317           </select>
5924 13 Jan 12 nicklas 318           </td>
5924 13 Jan 12 nicklas 319           <td></td>
5924 13 Jan 12 nicklas 320         </tr>
5924 13 Jan 12 nicklas 321         <tr>
5924 13 Jan 12 nicklas 322           <th class="subprompt">Expression</th>
6315 06 Sep 13 nicklas 323           <td><input type="text" class="text" maxlength="255" name="yFormulaHistogram" id="yFormulaHistogram" disabled></td>
5924 13 Jan 12 nicklas 324           <td>
5924 13 Jan 12 nicklas 325             <base:icon
6315 06 Sep 13 nicklas 326               id="btnExpressionBuilderYHistogram"
6315 06 Sep 13 nicklas 327               subclass="auto-init"
6315 06 Sep 13 nicklas 328               data-auto-init="expression-builder"
6315 06 Sep 13 nicklas 329               data-formula-id="yFormulaHistogram"
6315 06 Sep 13 nicklas 330               data-title="Y-axis expression"
6315 06 Sep 13 nicklas 331               data-formula-type="COLUMN_EXPRESSION"
6315 06 Sep 13 nicklas 332               data-raw-data-type="<%=rdt.getId() %>"
6315 06 Sep 13 nicklas 333               data-channels="<%=rdt.getChannels() %>"
6315 06 Sep 13 nicklas 334               data-bioassayset="<%=bioAssaySetId %>"
5946 03 Feb 12 nicklas 335               image="expression_builder.png"
5924 13 Jan 12 nicklas 336               tooltip="Use the Expression builder"
5924 13 Jan 12 nicklas 337             />
5924 13 Jan 12 nicklas 338           </td>
5924 13 Jan 12 nicklas 339         </tr>
5924 13 Jan 12 nicklas 340         <tr>
5924 13 Jan 12 nicklas 341           <th class="subprompt">Y label</th>
6315 06 Sep 13 nicklas 342           <td><input type="text" class="text" maxlength="255" name="yLabelHistogram" id="yLabelHistogram" value="Count"></td>
5924 13 Jan 12 nicklas 343           <td></td>
5924 13 Jan 12 nicklas 344         </tr>
5924 13 Jan 12 nicklas 345         <tr>
5924 13 Jan 12 nicklas 346           <th class="subprompt"><label for="yLogHistogram">Log scale</label></th>
5924 13 Jan 12 nicklas 347           <td><input type="checkbox" name="yLogHistogram" id="yLogHistogram" value="1"></td>
5924 13 Jan 12 nicklas 348           <td></td>
5924 13 Jan 12 nicklas 349         </tr>
5924 13 Jan 12 nicklas 350         <tr>
5924 13 Jan 12 nicklas 351           <th>X-axis</th>
5924 13 Jan 12 nicklas 352           <td>
6315 06 Sep 13 nicklas 353           <select name="xPresetsHistogram" id="xPresetsHistogram"
6315 06 Sep 13 nicklas 354             class="auto-init"
6315 06 Sep 13 nicklas 355             data-auto-init="formula-presets"
6315 06 Sep 13 nicklas 356             data-formula-id="xFormulaHistogram"
6315 06 Sep 13 nicklas 357             data-label-id="xLabelHistogram"
6315 06 Sep 13 nicklas 358             style="width: 25em;"
5924 13 Jan 12 nicklas 359             >
5924 13 Jan 12 nicklas 360             <option value="">- select from list or enter formula below -
5924 13 Jan 12 nicklas 361             <%=formulaOptions.toString()%>
5924 13 Jan 12 nicklas 362           </select>
5924 13 Jan 12 nicklas 363           </td>
5924 13 Jan 12 nicklas 364           <td></td>
5924 13 Jan 12 nicklas 365         </tr>
5924 13 Jan 12 nicklas 366         <tr>
5924 13 Jan 12 nicklas 367           <th class="subprompt">Expression</th>
6315 06 Sep 13 nicklas 368           <td><input type="text" class="text required" maxlength="255" name="xFormulaHistogram" id="xFormulaHistogram"></td>
5924 13 Jan 12 nicklas 369           <td>
5924 13 Jan 12 nicklas 370             <base:icon
6315 06 Sep 13 nicklas 371               id="btnExpressionBuilderXHistogram"
6315 06 Sep 13 nicklas 372               subclass="auto-init"
6315 06 Sep 13 nicklas 373               data-auto-init="expression-builder"
6315 06 Sep 13 nicklas 374               data-formula-id="xFormulaHistogram"
6315 06 Sep 13 nicklas 375               data-title="X-axis expression"
6315 06 Sep 13 nicklas 376               data-formula-type="COLUMN_EXPRESSION"
6315 06 Sep 13 nicklas 377               data-raw-data-type="<%=rdt.getId() %>"
6315 06 Sep 13 nicklas 378               data-channels="<%=rdt.getChannels() %>"
6315 06 Sep 13 nicklas 379               data-bioassayset="<%=bioAssaySetId %>"
5946 03 Feb 12 nicklas 380               image="expression_builder.png"
5924 13 Jan 12 nicklas 381               tooltip="Use the Expression builder"
5924 13 Jan 12 nicklas 382             />
5924 13 Jan 12 nicklas 383           </td>
5924 13 Jan 12 nicklas 384         </tr>
5924 13 Jan 12 nicklas 385         <tr>
5924 13 Jan 12 nicklas 386           <th class="subprompt">X label</th>
6315 06 Sep 13 nicklas 387           <td><input type="text" class="text" maxlength="255" name="xLabelHistogram" id="xLabelHistogram" value=""></td>
5924 13 Jan 12 nicklas 388           <td></td>
5924 13 Jan 12 nicklas 389         </tr>
5924 13 Jan 12 nicklas 390         <tr>
5924 13 Jan 12 nicklas 391           <th class="subprompt"><label for="xLogHistogram">Log scale</label></th>
5924 13 Jan 12 nicklas 392           <td><input type="checkbox" name="xLogHistogram" id="xLogHistogram" value="1"></td>
5924 13 Jan 12 nicklas 393           <td></td>
5924 13 Jan 12 nicklas 394         </tr>
5924 13 Jan 12 nicklas 395         <tr>
5924 13 Jan 12 nicklas 396           <th class="subprompt">Bin size</th>
5924 13 Jan 12 nicklas 397           <td><input type="text" class="text" name="binSize" value="1" style="width: 10em;"></td>
5924 13 Jan 12 nicklas 398           <td></td>
5924 13 Jan 12 nicklas 399         </tr>
5924 13 Jan 12 nicklas 400       </tbody>
5924 13 Jan 12 nicklas 401       <tbody>
5924 13 Jan 12 nicklas 402         <tr>
5924 13 Jan 12 nicklas 403           <th class="subprompt"></th>
5924 13 Jan 12 nicklas 404           <td colspan="2"></td>
5924 13 Jan 12 nicklas 405         </tr>
5924 13 Jan 12 nicklas 406       </tbody>
5924 13 Jan 12 nicklas 407       <tbody class="sectionheader">
5924 13 Jan 12 nicklas 408         <tr>
5924 13 Jan 12 nicklas 409           <th colspan="3">Filter &amp; annotations</th>
5924 13 Jan 12 nicklas 410         </tr>
5924 13 Jan 12 nicklas 411       </tbody>
5924 13 Jan 12 nicklas 412       <tbody>
5924 13 Jan 12 nicklas 413         <tr>
5924 13 Jan 12 nicklas 414           <th>Filter</th>
5924 13 Jan 12 nicklas 415           <td colspan="2">
6315 06 Sep 13 nicklas 416             <select name="filterPresets" id="filterPresets"
6315 06 Sep 13 nicklas 417               class="auto-init"
6315 06 Sep 13 nicklas 418               data-auto-init="formula-presets"
6315 06 Sep 13 nicklas 419               data-formula-id="filter"
6315 06 Sep 13 nicklas 420               style="width: 25em;"
5924 13 Jan 12 nicklas 421               >
5924 13 Jan 12 nicklas 422               <option value="">- select from list or enter formula below -
5924 13 Jan 12 nicklas 423               <%=filterOptions.toString()%>
5924 13 Jan 12 nicklas 424             </select>
5924 13 Jan 12 nicklas 425           </td>
5924 13 Jan 12 nicklas 426         </tr>
5924 13 Jan 12 nicklas 427         <tr>
5924 13 Jan 12 nicklas 428           <th class="subprompt"></th>
6315 06 Sep 13 nicklas 429           <td><input type="text" class="text" maxlength="255" name="filter" id="filter" placeholder="leave empty to plot all values"></td>
5924 13 Jan 12 nicklas 430           <td>
5924 13 Jan 12 nicklas 431             <base:icon
6315 06 Sep 13 nicklas 432               id="btnExpressionBuilderFilter"
6315 06 Sep 13 nicklas 433               subclass="auto-init"
6315 06 Sep 13 nicklas 434               data-auto-init="expression-builder"
6315 06 Sep 13 nicklas 435               data-formula-id="filter"
6315 06 Sep 13 nicklas 436               data-title="Filter expression"
6315 06 Sep 13 nicklas 437               data-formula-type="COLUMN_RESTRICTION"
6315 06 Sep 13 nicklas 438               data-raw-data-type="<%=rdt.getId() %>"
6315 06 Sep 13 nicklas 439               data-channels="<%=rdt.getChannels() %>"
6315 06 Sep 13 nicklas 440               data-bioassayset="<%=bioAssaySetId %>"
5946 03 Feb 12 nicklas 441               image="expression_builder.png"
5924 13 Jan 12 nicklas 442               tooltip="Use the Expression builder"
5924 13 Jan 12 nicklas 443             />
5924 13 Jan 12 nicklas 444           </td>
5924 13 Jan 12 nicklas 445         </tr>
5924 13 Jan 12 nicklas 446         <tr>
5924 13 Jan 12 nicklas 447           <th>Annotation</th>
5924 13 Jan 12 nicklas 448           <td colspan="2">
6315 06 Sep 13 nicklas 449             <select name="annotationPresets" id="annotationPresets" style="width: 25em;">
5924 13 Jan 12 nicklas 450               <option value="$">- none -
5924 13 Jan 12 nicklas 451               <%
5924 13 Jan 12 nicklas 452               if (ba == null)
5924 13 Jan 12 nicklas 453               {
5924 13 Jan 12 nicklas 454                 %>
5924 13 Jan 12 nicklas 455                 <option value="$bioassay">Bioassay
5924 13 Jan 12 nicklas 456                 <option value="$spots">Spots
5924 13 Jan 12 nicklas 457                 <option value="$arrayDesign.name">Array design
5924 13 Jan 12 nicklas 458                 <option value="$software.name">Software
5924 13 Jan 12 nicklas 459                 <option value="$protocol.name">Protocol
5924 13 Jan 12 nicklas 460                 <option value="$scan.scanner.name">Scanner
5924 13 Jan 12 nicklas 461                 <option value="$scan.protocol.name">Scanning protocol
5924 13 Jan 12 nicklas 462                 <option value="$scan.hybridization.protocol.name">Hybridization protocol
5924 13 Jan 12 nicklas 463                 <option value="$scan.hybridization.creationEvent.eventDate">Hybridization date
5924 13 Jan 12 nicklas 464                 <option value="" disabled>- annotations -
5924 13 Jan 12 nicklas 465                 <%
5924 13 Jan 12 nicklas 466                 for (AnnotationType at : experimentalFactors)
5924 13 Jan 12 nicklas 467                 {
5924 13 Jan 12 nicklas 468                   %>
5924 13 Jan 12 nicklas 469                   <option value="$<%=at.getId()%>">[A] <%=HTML.encodeTags(at.getName())%>
5924 13 Jan 12 nicklas 470                   <%
5924 13 Jan 12 nicklas 471                 }
5924 13 Jan 12 nicklas 472               }
3015 11 Dec 06 nicklas 473               %>
5924 13 Jan 12 nicklas 474               <option value="" disabled>- expressions -
5924 13 Jan 12 nicklas 475               <%=filterOptions.toString()%>
5924 13 Jan 12 nicklas 476               <option value="">Other...
5924 13 Jan 12 nicklas 477             </select>
5924 13 Jan 12 nicklas 478           </td>
5924 13 Jan 12 nicklas 479         </tr>
5924 13 Jan 12 nicklas 480         <tr>
5924 13 Jan 12 nicklas 481           <th class="subprompt"></th>
6315 06 Sep 13 nicklas 482           <td><input type="text" class="text" maxlength="255" name="annotationExp" id="annotationExp" disabled></td>
5924 13 Jan 12 nicklas 483           <td>
5924 13 Jan 12 nicklas 484             <base:icon
6315 06 Sep 13 nicklas 485               id="btnExpressionBuilderAnnotation"
6315 06 Sep 13 nicklas 486               subclass="auto-init"
6315 06 Sep 13 nicklas 487               data-auto-init="expression-builder"
6315 06 Sep 13 nicklas 488               data-formula-id="annotationExp"
6315 06 Sep 13 nicklas 489               data-title="Annotation filter"
6315 06 Sep 13 nicklas 490               data-formula-type="COLUMN_RESTRICTION"
6315 06 Sep 13 nicklas 491               data-raw-data-type="<%=rdt.getId() %>"
6315 06 Sep 13 nicklas 492               data-channels="<%=rdt.getChannels() %>"
6315 06 Sep 13 nicklas 493               data-bioassayset="<%=bioAssaySetId %>"
5946 03 Feb 12 nicklas 494               image="expression_builder.png"
5924 13 Jan 12 nicklas 495               tooltip="Use the Expression builder"
5924 13 Jan 12 nicklas 496             />
5924 13 Jan 12 nicklas 497           </td>
5924 13 Jan 12 nicklas 498         </tr>
5924 13 Jan 12 nicklas 499       </tbody>
5924 13 Jan 12 nicklas 500       <tr class="dynamic">
5924 13 Jan 12 nicklas 501         <th></th>
5924 13 Jan 12 nicklas 502         <td colspan="2"></td>
3015 11 Dec 06 nicklas 503       </tr>
3015 11 Dec 06 nicklas 504       </table>
5924 13 Jan 12 nicklas 505     </div>
3015 11 Dec 06 nicklas 506     
6612 21 Nov 14 nicklas 507     <div class="absolutefull bg-filled-50" style="width: 550px; left: auto;">
5924 13 Jan 12 nicklas 508         
5924 13 Jan 12 nicklas 509           <img src="../../../images/plot_empty.png" id="preview" 
6143 20 Sep 12 nicklas 510             style="position: absolute; top: 5px; z-index: 1;" alt="">
5924 13 Jan 12 nicklas 511           <img src="../../../images/plot_select.png" id="overlay" 
6143 20 Sep 12 nicklas 512             style="position: absolute; top: 5px; z-index: 2;" alt="">
5924 13 Jan 12 nicklas 513     </div>
2097 21 Mar 06 nicklas 514   </div>
5924 13 Jan 12 nicklas 515   </form>
2097 21 Mar 06 nicklas 516   
5924 13 Jan 12 nicklas 517   <base:buttongroup subclass="dialogbuttons">
6315 06 Sep 13 nicklas 518     <base:button 
6315 06 Sep 13 nicklas 519       id="btnPreviewPlot"
6315 06 Sep 13 nicklas 520       title="Preview"  
6315 06 Sep 13 nicklas 521       image="plotter_preview.png" 
6315 06 Sep 13 nicklas 522       tooltip="Generate a preview of the plot" 
5924 13 Jan 12 nicklas 523     />
6315 06 Sep 13 nicklas 524     <base:button 
6315 06 Sep 13 nicklas 525       id="btnViewPlot"
6315 06 Sep 13 nicklas 526       title="View&hellip;"
6315 06 Sep 13 nicklas 527       image="plotter.png" 
6315 06 Sep 13 nicklas 528       tooltip="View a fullsized version of the plot (in a popup)" 
5924 13 Jan 12 nicklas 529     />
6315 06 Sep 13 nicklas 530     <base:button 
6315 06 Sep 13 nicklas 531       id="btnDownloadPlot"
6315 06 Sep 13 nicklas 532       title="Download&hellip;"
5946 03 Feb 12 nicklas 533       image="download.png"
5924 13 Jan 12 nicklas 534       tooltip="Downlad a fullsized version of the plot to your computer" 
5924 13 Jan 12 nicklas 535     />
6315 06 Sep 13 nicklas 536     <base:button 
6315 06 Sep 13 nicklas 537       id="btnSavePlot"
6315 06 Sep 13 nicklas 538       title="Save as&hellip;" 
5946 03 Feb 12 nicklas 539       image="saveas.png"
5924 13 Jan 12 nicklas 540       disabled="<%=!hasCreateFilePermission%>"
5924 13 Jan 12 nicklas 541       tooltip="<%=hasCreateFilePermission ? 
5924 13 Jan 12 nicklas 542         "Save a fullsized version of the plot on the BASE server" :
5924 13 Jan 12 nicklas 543         "You don't have permission to create files" %>" 
5924 13 Jan 12 nicklas 544     />
6315 06 Sep 13 nicklas 545     <base:button id="close" title="Close" />
5924 13 Jan 12 nicklas 546   </base:buttongroup>
5924 13 Jan 12 nicklas 547   
2097 21 Mar 06 nicklas 548   </base:body>
2097 21 Mar 06 nicklas 549   </base:page>
2097 21 Mar 06 nicklas 550   <%
2097 21 Mar 06 nicklas 551 }
2097 21 Mar 06 nicklas 552 finally
2097 21 Mar 06 nicklas 553 {
2097 21 Mar 06 nicklas 554   if (dc != null) dc.close();
2097 21 Mar 06 nicklas 555 }
2097 21 Mar 06 nicklas 556 %>