Changeset 639


Ignore:
Timestamp:
Mar 21, 2008, 2:55:09 PM (15 years ago)
Author:
mbayer
Message:

simplified the workflow and inputs

Location:
plugins/base2/uk.ac.ebi.tab2mage/branches/tab2mageimporter
Files:
16 added
13 edited

Legend:

Unmodified
Added
Removed
  • plugins/base2/uk.ac.ebi.tab2mage/branches/tab2mageimporter/TODO.txt

    r558 r639  
    66- check in Charles' code
    77
     8features:
     9- better error handling
     10- replace spaces in tissue names with underscores for writing of file
     11- when doing manual mappings, have page return straight away until zip file is unzipped -- can take some time (or show progress bar)
    812
    9 features:
    10 - status report does not get written in all cases
    11 - error handling
    12 - fix "about" text problem / updating of plugin
    13 - replace spaces in tissue names with underscores for writing of file
    14 - when doing manual mappings, have page return straight away until zip file is unzipped -- can take some time
     13fixes:
    1514- job progress bar does not report job progress but import progress for each individual file
    1615- handle special characters in UI input, such as mu etc
     16- fix "about" text problem / updating of plugin
     17- status report does not get written in all cases
    1718
    1819
    19 extension: autogenerate mode
     20extensions:
     211.autogenerate mode
    2022- enable tab2mage autogenerate only mode where file gets written to account (in new folder as before) but then there is no data import or object creation (users then import their data later together with the file they created here)
    2123- add support for users using their own name bases for samples and perhaps extracts
    22 
    23 extension: support for BASE 2.5 +
     242.support for BASE 2.5 +
  • plugins/base2/uk.ac.ebi.tab2mage/branches/tab2mageimporter/build.xml

    r558 r639  
    6262
    6363  <target name="copyJSPs">
    64     <copy todir="${tomcat.home}\webapps\base\plugins\" verbose="true">
     64    <copy todir="${tomcat.home}\webapps\base\plugins\" verbose="false">
    6565      <fileset dir="${jspDir}" />
    6666    </copy>
     
    6969
    7070  <target name="copyToServer" depends="build.plugin,copyJSPs">
    71     <copy file="${plugin.name}.jar" todir="${tomcat.home}\webapps\base\WEB-INF\lib" verbose="true" />
    72     <copy file="${utils.name}.jar" todir="${tomcat.home}\webapps\base\WEB-INF\lib" verbose="true" />
     71    <copy file="${plugin.name}.jar" todir="${tomcat.home}\webapps\base\plugins" verbose="false" />
     72    <copy file="${utils.name}.jar" todir="${tomcat.home}\webapps\base\plugins" verbose="false" />
    7373    <!-- now restart tomcat to reload the application -->
    7474    <echo message="tomcat home = "/>
  • plugins/base2/uk.ac.ebi.tab2mage/branches/tab2mageimporter/html/userchoice3.html

    r550 r639  
    66
    77<link rel="stylesheet" type="text/css" href="../jsp/uk/ac/ebi/nugo/plugins/styles.css" />
     8
     9<script type="text/javascript" src="progressbar/progressbar.js"></script>
     10
     11
     12<script type="text/javascript">
     13
     14    function showProgressBar()
     15    {
     16       //this is the ID of the hidden item
     17      var pgBar = document.getElementById('progress2');
     18     pgBar.style.display = "block";
     19    }
     20   
     21   function hideProgressBar()
     22    {
     23       //this is the ID of the hidden item
     24      var pgBar = document.getElementById('progress2');
     25     pgBar.style.display = "none";
     26    }
     27</script>
     28
     29<link href="progressbar/progressbar.css" rel="stylesheet" type="text/css" />
     30
    831</head>
    932<body>
     
    4063</table>
    4164
     65
    4266</form>
     67
     68
     69<p>
     70
     71
     72<table class="noBorder" align="center">
     73  <tr class="noBorder">
     74    <td class="noBorder">
     75    <div id="progress2" style="display: none"><script type="text/javascript">var progressbar2 = new VistaProgressBar({id:'progress2',width:200,mode:'indeterminate',highlightspeed:1000});</script>
     76    <p>
     77    Please wait......</div>
     78    </td>
     79  </tr>
     80  <tr>
     81    <td class="noBorder"><a href="javascript:progressbar2.start();showProgressBar();">Start</a><br>
     82    <a href="javascript:progressbar2.stop();hideProgressBar();">Stop</a></td>
     83  </tr>
     84</table>
     85
     86
     87
    4388
    4489</body>
  • plugins/base2/uk.ac.ebi.tab2mage/branches/tab2mageimporter/jsp/uk/ac/ebi/nugo/plugins/experiment.jsp

    r558 r639  
    185185    <table class="noBorder"  cellspacing="0" cellpadding="5">
    186186      <tr class="noBorder">
    187         <td style="border-style: none;"><select name="accession" onchange="arrayDesignOnChange()"></select></td>
     187        <td style="border-style: none;"><select name="accession" onchange="arrayDesignOnChange()">
     188        <option selected="selected">Agilent potato POCI 1x44k</option>
     189        </select></td>
    188190        <td style="border-style: none;">
    189191        <div class="buttonclass"
     
    455457      <td class="plainLabel" style="border-style: none;">Title:</td>
    456458      <td class="input" style="border-style: none;"><textarea rows="3" cols="30"
    457         name="publicationTitle" ></textarea></td>
     459        name="publicationTitle" >My completely ropey paper</textarea></td>
    458460      <td style="border-style: none;"></td>
    459461    </tr>
  • plugins/base2/uk.ac.ebi.tab2mage/branches/tab2mageimporter/jsp/uk/ac/ebi/nugo/plugins/hybridizations.jsp

    r558 r639  
    159159    <select name="platform">
    160160    <option onclick="hideTwoChannelQuestions();">Affymetrix</option>
    161     <option onclick="showTwoChannelQuestions();"  selected="selected" >Agilent</option>
     161    <option onclick="showTwoChannelQuestions();">Agilent</option>
    162162    <option onclick="showTwoChannelQuestions();">AIDA</option>
    163163    <option onclick="showTwoChannelQuestions();">BZScan</option>
    164164    <option onclick="showTwoChannelQuestions();">ChipSkipper</option>
    165     <option onclick="showTwoChannelQuestions();">GenePix</option>
     165    <option onclick="showTwoChannelQuestions();"  selected="selected" >GenePix</option>
    166166    <option onclick="showTwoChannelQuestions();">GeneTAC</option>
    167167    <option onclick="showTwoChannelQuestions();">Illumina</option>
     
    178178  <tr>
    179179    <td class="boldText">Experimental organism:<font color="red"><b>&nbsp;*</b></font></td>
    180     <td class="input"><input type="text" size="50" name="organism" value="Homo sapiens"/></td>
     180    <td class="input"><input type="text" size="50" name="organism" value="Solanum spp."/></td>
    181181    <td>The full scientific name of the experimental organism used.</td>
    182182  </tr>
    183183
    184   <!-- num array designs -->
    185   <tr>
    186     <td class="boldText">Number of different arrays designs used:<font color="red"><b>&nbsp;*</b></font></td>
    187     <td class="input"><input type="text" size="3" name="numDesigns" value="1"/></td>
    188     <td>If more than one array design was used in parallel, please specify the number here.
    189     We assume that all samples are applied once to each array design</td>
    190   </tr>
    191 
    192 
    193   <!-- num treatment grps -->
    194   <tr>
    195     <td class="boldText">Number of treatment groups:<font color="red"><b>&nbsp;*</b></font></td>
    196     <td class="input"><input type="text" size="3" name="numTreatmentGroups" value="4"/></td>
    197     <td>The number of discrete combinations of factor values, i.e. the product of the number of factor levels(values) from all factors. <p>
    198     Example: an experiment with 2 factors and 3 factor values in each will have 6 treatment groups (2 X 3).
     184  <!-- total num hybridizations -->
     185  <tr>
     186    <td class="boldText">Number of hybridizations:<font color="red"><b>&nbsp;*</b></font></td>
     187    <td class="input"><input type="text" size="3" name="numHybs" value="4"/></td>
     188    <td>The total number of hybridizations in the experiment. <b>Please note: for two-channel experiments there are two hybridizations per chip.</b>
    199189    </td>
    200190  </tr>
     
    203193  <tr>
    204194    <td class="boldText">Experimental factors:<font color="red"><b>&nbsp;*</b></font> </td>
    205     <td class="input"><textarea rows="7" cols="32" name="expFactors">Genotype(wild type,PGC-1 beta transgenic)</textarea></td>
     195    <td class="input"><textarea rows="7" cols="35" name="expFactors" >Genotype(wild type,PGC-1 beta transgenic)</textarea></td>
    206196    <td>Please list all experimental factors and value ranges using the following format (one per
    207197    line):<br>
    208     <i>Factor 1(value1,value2,...valueN)<br></i>
     198    <i>FactorName(value1,value2,...valueN)<br></i>
    209199    <p>Example: <i><br>
    210200    Compound(aspirin,ibuprofen) <br>
     
    213203  </td>
    214204  </tr>
    215 
    216   <!-- num subjects -->
    217   <tr>
    218     <td class="boldText">Number of subjects per group:<font color="red"><b>&nbsp;*</b></font></td>
    219     <td class="input"><input type="text" size="3" name="numReplicates" value="2"/></td>
    220     <td>This is the number of biological replicates in each treatment group.</td>
    221   </tr>
    222205 
    223206  <!-- subject labels -->
    224207  <tr>
    225208    <td class="boldText">Subject (replicate) labels:<font color="red"><b>&nbsp;*</b></font></td>
    226     <td class="input"><textarea rows="8" cols="32" name="subjectNames"></textarea></td>
     209    <td class="input"><textarea rows="8" cols="35" name="subjectNames"></textarea></td>
    227210    <td>Please provide a list of labels(names) for the experimental subjects, one per line,
    228211     in no particular order (copy and paste from Excel works).</td>
     
    233216    <td class="boldText">Target tissues:<font color="red"><b>&nbsp;*</b></font></td>
    234217    <td class="input"><textarea rows="4" cols="32" name="tissues">enterocyte</textarea></td>
    235     <td>List all target tissues one per line, in no particular order (copy and paste from Excel works).</td>
    236   </tr>
    237 
    238 
    239   <!-- dye swap -->
    240   <tr id="dyeSwapRow"  style="display:none">
    241     <td class="boldText">Dye-swap?<font color="red"><b>&nbsp;*</b></font></td>
    242     <td class="input">
    243     <table class="noBorder" cellpadding="4">
    244       <tr>
    245         <td class="noBorder"><input type="radio" name="dyeSwap" id="dyeSwapYes" value="yes"  checked="checked"  onchange="checkRefSampleLogic();"/></td>
    246         <td class="noBorder">yes</td>
    247       </tr>
    248 
    249       <tr>
    250         <td class="noBorder"><input type="radio" name="dyeSwap" id="dyeSwapNo" value="no" onchange="checkRefSampleLogic();"/></td>
    251         <td class="noBorder">no</td>
    252       </tr>
    253     </table>     
    254     </td>
    255     <td>If you used a dye-swap design please indicate this here.</td>
    256   </tr>
    257 
    258   <!-- ref sample -->
    259   <tr id="refSampleRow"  style="display:none">
    260     <td class="boldText">Reference sample?<font color="red"><b>&nbsp;*</b></font></td>
    261     <td class="input"> 
    262     <table class="noBorder" cellpadding="4">
    263       <tr>
    264         <td class="noBorder"><input type="radio" name="refSample" id="refSampleYes" value="yes"  onchange="checkRefSampleLogic();"/></td>
    265         <td class="noBorder">yes</td>
    266       </tr>
    267 
    268       <tr>
    269         <td class="noBorder"><input type="radio"name="refSample" id="refSampleNo" value="no"  checked="checked"  onchange="checkRefSampleLogic();"/></td>
    270         <td class="noBorder">no</td>
    271       </tr>
    272     </table>       
    273     </td>
    274     <td>If you used a reference sample please indicate this here.</td>
    275   </tr>
    276  
    277   <!-- pooling -->
    278   <tr id="poolingRow"  style="display:none">
    279     <td class="boldText">Sample pooling?<font color="red"><b>&nbsp;*</b></font></td>
    280     <td class="input">
    281     <table class="noBorder" cellpadding="4">
    282       <tr>
    283         <td class="noBorder"><input type="radio" name="pooling" value="yes"></td>
    284         <td class="noBorder">yes</td>
    285       </tr>
    286 
    287       <tr>
    288         <td class="noBorder"><input type="radio" name="pooling" value="no" checked="checked"></td>
    289         <td class="noBorder">no</td>
    290       </tr>
    291     </table>   
    292     </td>
    293     <td>If the samples were pooled please indicate this here.</td>
     218    <td>List all target tissues -- one per line, in no particular order, each tissue once only.</td>
    294219  </tr>
    295220
  • plugins/base2/uk.ac.ebi.tab2mage/branches/tab2mageimporter/jsp/uk/ac/ebi/nugo/plugins/mappings.jsp

    r558 r639  
    1919<html>
    2020
    21 <head>
    22 
    23 <link rel="stylesheet" type="text/css" href="<%= request.getContextPath()%>/plugins/uk/ac/ebi/nugo/plugins/styles.css" />
    24 <link rel="stylesheet" type="text/css" href="/base/include/styles/main.css">
    25 <link rel="stylesheet" type="text/css" href="/base/include/styles/size_m.css">
    26 
    27 <script language="JavaScript" src="<%= request.getContextPath()%>/include/scripts/main.js" type="text/javascript"></script>
    28 <script language="JavaScript" type="text/javascript">
     21  <head>
     22
     23    <link rel="stylesheet" type="text/css" href="<%=request.getContextPath()%>/plugins/uk/ac/ebi/nugo/plugins/styles.css" />
     24    <link rel="stylesheet" type="text/css" href="/base/include/styles/main.css">
     25    <link rel="stylesheet" type="text/css" href="/base/include/styles/size_m.css">
     26
     27    <script language="JavaScript" src="<%=request.getContextPath()%>/include/scripts/main.js" type="text/javascript"></script>
     28    <script language="JavaScript" type="text/javascript">
    2929
    3030//submits form
     
    9292</script>
    9393
    94 </head>
    95 
    96 <body>
    97 
    98 
    99 
    100 <form name="mappings" action="<%= request.getContextPath()%>/plugins/uk/ac/ebi/nugo/plugins/submit.jsp?ID=<%=ID%>" method="post">
    101 
    102 <input type="hidden" name="ID" value="<%=ID%>">
    103 <input type="hidden" name="cmd" value="SetParameters">
    104 <input type="hidden" name="requestId" value="<%=requestId%>">
    105 
    106 <input type="hidden" id="fileList" name="fileList" value""/>
    107 <input type="hidden" id="subjectList" name="subjectList" value""/>
    108 <input type="hidden" id="tissueList" name="tissueList" value""/>
    109 <input type="hidden" id="dyeList" name="dyeList" value""/>
    110 <input type="hidden" id="combinationList" name="combinationList" value""/>
    111 
    112 
    113 
    114 <%
    115   //first extract the factor names and the possible values
    116   String expFactors = inputDataBean.getExpFactors().trim();
    117   String[] rawFactors = expFactors.split("\n");
    118 
    119   String[][] factorValues = new String[rawFactors.length][];
    120   String[] factorNames = new String[rawFactors.length];
    121 
    122   for (int i = 0; i < rawFactors.length; i++)
    123   {
    124     //extract the factor name
    125     String factorName = rawFactors[i].substring(0, rawFactors[i].indexOf("("));
    126     factorNames[i] = factorName;
    127     //extract the possible values from between the parentheses
    128     String allValues = rawFactors[i].substring(rawFactors[i].indexOf("(") + 1,
    129     rawFactors[i].indexOf(")"));
    130     String[] values = allValues.split(",");
    131     factorValues[i] = values;
    132   }
    133 
    134   //here we get hold of the cartesian product of all the factor values
    135   String[][] products = CartesianProduct.getCartesianProduct(factorValues);
    136 
    137   //now inspect the content of the zip file and list all the individual files therein
    138 
    139   //first parse the filepath from the input page 
    140   String zipFilePath = inputDataBean.getPath();
    141   System.out.println("zipFilePath = " + zipFilePath);
    142   String zipFileDirStr = zipFilePath.substring(0, zipFilePath.lastIndexOf("/"));
    143   String zipFileName = zipFilePath.substring(zipFilePath.lastIndexOf("/") + 1);
    144 
    145   //get hold of the appropriate BASE objects for this
    146   DbControl dc = sc.newDbControl();
    147   Directory zipFileDir = Directory.getByPath(dc, new Path(zipFileDirStr, Path.Type.DIRECTORY));
    148   File zipFile = File.getFile(dc, zipFileDir, zipFileName, false);
    149 
    150   //now inspect the file content and store the names in the List
    151   Vector<String> fileNames = new Vector<String>();
    152   ZipInputStream zipStream = new ZipInputStream(zipFile.getDownloadStream(0));
    153   ZipEntry entry = zipStream.getNextEntry();
    154   while (entry != null)
    155   {
    156     fileNames.add(entry.getName());
    157     entry = zipStream.getNextEntry();
    158   }
    159 
    160   String[] fileNamesArr = new String[fileNames.size()];
    161   fileNames.toArray(fileNamesArr);
    162   Arrays.sort(fileNamesArr);
    163 
    164   dc.close();
    165 
    166   //next get the subjectNames and make up select boxes with these
    167   //they too have to be mapped to filenames
    168   String[] subjectNames = inputDataBean.getSubjectNames().split("\n");
    169 
    170   //we also need to parse out the tissues string to produce another column of select boxes
    171   String[] tissueNames = inputDataBean.getTissues().split("\n");
    172 
    173   //work out the number of hybridizations
    174   String platform = inputDataBean.getPlatform();
    175   //work out whether this is a single or dual channel experiment
    176   boolean singleChannel = false;
    177   if (platform.equalsIgnoreCase("affymetrix"))
    178   {
    179     singleChannel = true;
    180   }
    181   int numReplicates = Integer.parseInt(inputDataBean.getNumReplicates());
    182   int numTreatmentGroups = Integer.parseInt(inputDataBean.getNumTreatmentGroups());
    183   int numTissues = inputDataBean.getTissues().split("\n").length;
    184   boolean dyeSwapBool = false;
    185   boolean poolingBool = false;
    186   if(inputDataBean.getDyeSwap().equals("yes"))
    187   {
    188     dyeSwapBool = true;
    189   }
    190   if(inputDataBean.getPooling().equals("yes"))
    191   {
    192     poolingBool = true;
    193   }
    194    
    195   int numHybs = Tab2MageUtils.calcNumHybs(dyeSwapBool,poolingBool,Integer.parseInt(inputDataBean.getNumDesigns()), numReplicates, numTreatmentGroups,numTissues);
    196 
    197   System.out.println("numHybs = " + numHybs);
    198   System.out.println("products.length = " + products.length);
    199 %>
    200 
    201 <h2>Tab2MAGE Import Wizard -- File Mappings</h2>
    202 <p>
    203 
    204 The table below allows you to configure your hybridizations as combinations of a subject/sample, tissue and factor values, and to then map them
    205 against a file name that corresponds to the hybridization..
    206 Please select, for each hybridization, the appropriate file, subject, tissue, factor value combination and -- where appropriate -- dye
    207  from the drop down menus.</p><p>
    208 
    209 <!-- this table holds the combination values-->
    210 
    211 <table align="center" cellpadding="15">
    212 
    213   <!-- column header row factor names -->
    214 
    215   <tr>
    216 
    217     <!-- file selector header -->
    218     <td class="header"><h3>File</h3></td>
    219     <td class="header"><h3>Subject</h3></td>
    220     <td class="header"><h3>Tissue</h3></td>
    221     <%
    222     //don't need a dye selector for single channel expts -- only one dye used
    223     if(!singleChannel)
    224     {
    225      %>
    226     <td class="header"><h3>Dye</h3></td>
    227     <%
    228     }
    229      %>
    230    
    231     <td class="header"><h3>Factor Value Combination</h3></td>
    232 
    233   </tr>
    234 
    235   <!-- now add as many rows as we have discrete combinations of factor values -->
    236 
    237   <%
    238       for (int i = 0; i < numHybs; i++)
    239       {
    240   %>
    241 
    242   <tr>
    243 
    244     <!-- first we need a cell with a drop down menu where we can select a filename to match the combination of factor values-->
    245 
    246     <td class="input" ><select id="fileInput<%=i %>">
     94  </head>
     95
     96  <body>
     97
     98
     99
     100    <form name="mappings" action="<%=request.getContextPath()%>/plugins/uk/ac/ebi/nugo/plugins/submit.jsp?ID=<%=ID%>"
     101      method="post">
     102
     103      <input type="hidden" name="ID" value="<%=ID%>">
     104      <input type="hidden" name="cmd" value="SetParameters">
     105      <input type="hidden" name="requestId" value="<%=requestId%>">
     106
     107      <input type="hidden" id="fileList" name="fileList" value""/>
     108      <input type="hidden" id="subjectList" name="subjectList" value""/>
     109      <input type="hidden" id="tissueList" name="tissueList" value""/>
     110      <input type="hidden" id="dyeList" name="dyeList" value""/>
     111      <input type="hidden" id="combinationList" name="combinationList" value""/>
     112
     113
     114
    247115      <%
    248             for (int k = 0; k < fileNamesArr.length; k++)
    249             {
     116        //first extract the factor names and the possible values
     117        String expFactors = inputDataBean.getExpFactors().trim();
     118        String[] rawFactors = expFactors.split("\n");
     119       
     120        String[][] factorValues = new String[rawFactors.length][];
     121        String[] factorNames = new String[rawFactors.length];
     122       
     123        for (int i = 0; i < rawFactors.length; i++)
     124        {
     125          //extract the factor name
     126          String factorName = rawFactors[i].substring(0, rawFactors[i].indexOf("("));
     127          factorNames[i] = factorName;
     128          //extract the possible values from between the parentheses
     129          String allValues = rawFactors[i].substring(rawFactors[i].indexOf("(") + 1,
     130                  rawFactors[i].indexOf(")"));
     131          String[] values = allValues.split(",");
     132          factorValues[i] = values;
     133        }
     134       
     135        //here we get hold of the cartesian product of all the factor values
     136        //String[][] products = CartesianProduct.getCartesianProduct(factorValues);
     137       
     138        //now inspect the content of the zip file and list all the individual files therein
     139       
     140        //first parse the filepath from the input page 
     141        String zipFilePath = inputDataBean.getPath();
     142        System.out.println("zipFilePath = " + zipFilePath);
     143        String zipFileDirStr = zipFilePath.substring(0, zipFilePath.lastIndexOf("/"));
     144        String zipFileName = zipFilePath.substring(zipFilePath.lastIndexOf("/") + 1);
     145       
     146        //get hold of the appropriate BASE objects for this
     147        DbControl dc = sc.newDbControl();
     148        Directory zipFileDir = Directory.getByPath(dc, new Path(zipFileDirStr, Path.Type.DIRECTORY));
     149        File zipFile = File.getFile(dc, zipFileDir, zipFileName, false);
     150       
     151        //now inspect the file content and store the names in the List
     152        Vector<String> fileNames = new Vector<String>();
     153        ZipInputStream zipStream = new ZipInputStream(zipFile.getDownloadStream(0));
     154        ZipEntry entry = zipStream.getNextEntry();
     155        while (entry != null)
     156        {
     157          fileNames.add(entry.getName());
     158          entry = zipStream.getNextEntry();
     159        }
     160       
     161        String[] fileNamesArr = new String[fileNames.size()];
     162        fileNames.toArray(fileNamesArr);
     163        Arrays.sort(fileNamesArr);
     164       
     165        dc.close();
     166       
     167        //next get the subjectNames and make up select boxes with these
     168        //they too have to be mapped to filenames
     169        String[] subjectNames = inputDataBean.getSubjectNames().split("\n");
     170       
     171        //we also need to parse out the tissues string to produce another column of select boxes
     172        String[] tissueNames = inputDataBean.getTissues().split("\n");
     173       
     174        //work out the number of hybridizations
     175        String platform = inputDataBean.getPlatform();
     176        //work out whether this is a single or dual channel experiment
     177        boolean singleChannel = false;
     178        if (platform.equalsIgnoreCase("affymetrix"))
     179        {
     180          singleChannel = true;
     181        }
     182        int numReplicates = Integer.parseInt(inputDataBean.getNumReplicates());
     183        int numTreatmentGroups = Integer.parseInt(inputDataBean.getNumTreatmentGroups());
     184        int numTissues = inputDataBean.getTissues().split("\n").length;
     185        boolean dyeSwapBool = false;
     186        boolean poolingBool = false;
     187        if (inputDataBean.getDyeSwap().equals("yes"))
     188        {
     189          dyeSwapBool = true;
     190        }
     191        if (inputDataBean.getPooling().equals("yes"))
     192        {
     193          poolingBool = true;
     194        }
     195       
     196        //we need the number of hybs so we can work out how many rows we have to print in the table of select boxes
     197        int numHybs = inputDataBean.getNumHybs();
     198        //this hash map contains all factor values - each entry represents a factor, with the factor name as key and a list of factor levels as the value
     199        //we iterate over this to get the factor value input boxes in the table
     200        HashMap factorMap = Tab2MageUtils.getAllFactorValues(inputDataBean.getExpFactors());
     201       
     202        System.out.println("numHybs = " + numHybs);
    250203      %>
    251204
    252       <option><%=fileNamesArr[k]%></option>
    253 
    254       <%
    255       }
    256       %>
    257     </select></td>
    258    
    259     <!-- next  we need a cell with a drop down menu where we can select a subject name to match the combination of factor values-->
    260 
    261     <td class="input" ><select id="subjectInput<%=i %>">
    262       <%
    263             for (int k = 0; k < subjectNames.length; k++)
    264             {
    265       %>
    266 
    267       <option><%=subjectNames[k]%></option>
    268 
    269       <%
    270       }
    271       %>
    272     </select></td>
    273    
    274     <!-- next  we need a cell with a drop down menu where we can select a tissue name to match the combination of factor values-->
    275 
    276     <td class="input" ><select id="tissueInput<%=i %>">
    277       <%
    278             for (int k = 0; k < tissueNames.length; k++)
    279             {
    280       %>
    281 
    282       <option><%=tissueNames[k]%></option>
    283 
    284       <%
    285       }
    286       %>
    287     </select></td>
    288 
    289     <%
    290     //don't need a dye selector for single channel expts -- only one dye used
    291     if(!singleChannel)
    292     {
    293      %>
    294     <!-- select your dye here-->
    295 
    296     <td class="input"><select id="dyeInput<%=i %>">
    297       <%
     205      <h2>
     206        Tab2MAGE Import Wizard -- File Mappings
     207      </h2>
     208      <p>
     209
     210        The table below allows you to configure your hybridizations as combinations of a subject/sample, tissue and factor
     211        values, and to then map them against a file name that corresponds to the hybridization.. Please select, for each
     212        hybridization, the appropriate file, subject, tissue, factor value combination and -- where appropriate -- dye from
     213        the drop down menus.
     214      </p>
     215      <p>
     216
     217        <!-- this table holds the combination values-->
     218      <table align="center" cellpadding="15">
     219
     220        <!-- column header row factor names -->
     221
     222        <tr>
     223
     224          <!-- file selector header -->
     225          <td class="header">
     226            <h3>
     227              File
     228            </h3>
     229          </td>
     230          <td class="header">
     231            <h3>
     232              Subject
     233            </h3>
     234          </td>
     235          <td class="header">
     236            <h3>
     237              Tissue
     238            </h3>
     239          </td>
     240          <%
     241            //don't need a dye selector for single channel expts -- only one dye used
    298242            if (!singleChannel)
    299243            {
    300       %>
    301       <option>Cy3</option>
    302       <option>Cy5</option>
    303       <%
     244          %>
     245          <td class="header">
     246            <h3>
     247              Dye
     248            </h3>
     249          </td>
     250          <%
    304251            }
    305             else
     252          %>
     253
     254          <!-- for each factor -->
     255          <%
     256            for (String factorName : factorMap.keySet())
    306257            {
    307       %>
    308       <option>biotin</option>
    309       <%
    310       }
    311       %>
    312 
    313     </select></td>
    314     <%
    315     } %>
    316 
    317     <!-- need a single cell with a select box that lets the user select from a list of unique factor value combinations -->
    318 
    319     <td>
    320     <select id="combinationInput<%=i %>">
    321       <%
    322             for (int k = 0; k < products.length; k++)
    323             {
    324           //make a String with all the factor values in this combination
    325           //separate values in each combi with a space
    326           String combi = "";
    327           for (int j = 0; j < products[k].length; j++)
     258          %>
     259          <!-- have a  cell with the name of this factor -->
     260          <td><%=factorName%></td>
     261          <%
     262            }
     263          %>
     264
     265        </tr>
     266
     267        <!-- now add as many rows as we have hybridizations -->
     268
     269        <%
     270          for (int i = 0; i < numHybs; i++)
    328271          {
    329             combi += products[k][j];
    330             //add a comma to separate the factor values but do not add one after the last value
    331             if(!( j == (products[k].length -1)))
    332             {
    333               combi += ",";
     272        %>
     273
     274        <tr>
     275
     276          <!-- first we need a cell with a drop down menu where we can select a filename to match the combination of factor values-->
     277
     278          <td class="input">
     279            <select id="fileInput<%=i%>">
     280              <%
     281                for (int k = 0; k < fileNamesArr.length; k++)
     282                  {
     283              %>
     284
     285              <option><%=fileNamesArr[k]%></option>
     286
     287              <%
     288                }
     289              %>
     290            </select>
     291          </td>
     292
     293          <!-- next  we need a cell with a drop down menu where we can select a subject name to match the combination of factor values-->
     294
     295          <td class="input">
     296            <select id="subjectInput<%=i%>">
     297              <%
     298                for (int k = 0; k < subjectNames.length; k++)
     299                  {
     300              %>
     301
     302              <option><%=subjectNames[k]%></option>
     303
     304              <%
     305                }
     306              %>
     307            </select>
     308          </td>
     309
     310          <!-- next  we need a cell with a drop down menu where we can select a tissue name to match the combination of factor values-->
     311
     312          <td class="input">
     313            <select id="tissueInput<%=i%>">
     314              <%
     315                for (int k = 0; k < tissueNames.length; k++)
     316                  {
     317              %>
     318
     319              <option><%=tissueNames[k]%></option>
     320
     321              <%
     322                }
     323              %>
     324            </select>
     325          </td>
     326
     327          <%
     328            //don't need a dye selector for single channel expts -- only one dye used
     329              if (!singleChannel)
     330              {
     331          %>
     332          <!-- select your dye here-->
     333
     334          <td class="input">
     335            <select id="dyeInput<%=i%>">
     336              <%
     337                if (!singleChannel)
     338                    {
     339              %>
     340              <option>
     341                Cy3
     342              </option>
     343              <option>
     344                Cy5
     345              </option>
     346              <%
     347                }
     348                    else
     349                    {
     350              %>
     351              <option>
     352                biotin
     353              </option>
     354              <%
     355                }
     356              %>
     357
     358            </select>
     359          </td>
     360          <%
    334361            }
     362          %>
     363
     364          <!-- for each factor -->
     365          <%
     366            for (String factorName : factorMap.keySet())
     367              {
     368          %>
     369          <!-- have a  cell with a select box  with factor values for this factor -->
     370          <td>
     371            <select id="factorInput<%=i%>">
     372              <%
     373                for (String factorValue : factorMap.get(factorName))
     374                    {
     375              %>
     376
     377              <option><%=factorValue%></option>
     378
     379              <%
     380                }
     381              %>
     382            </select>
     383          </td>
     384
     385          <%
     386            }
     387          %>
     388
     389        </tr>
     390
     391        <%
    335392          }
    336       %>
    337 
    338       <option><%=combi%></option>
    339 
    340       <%
    341       }
    342       %>
    343     </select>
    344     </td>
    345 
    346   </tr>
    347 
    348   <%
    349   }
    350   %>
    351 
    352 </table>
    353 
    354 <p>
    355  
    356     <table align="center" class="noBorder" cellspacing="5"  cellpadding="5">
    357   <tr class="noBorder">
    358     <td id="back"  style="border-style: none;"><div class="buttons" onmouseover="this.className='buttons_hover';" onmouseout="this.className='buttons';" onclick="back()"><div class="buttons_inner"><table  class="noBorder" cellspacing="0" cellpadding="0"><tr  class="noBorder"><td style="border-style: none;"><img src="/base/images/goback.gif" border="0"></td><td style="border-style: none;">Back</td></tr></table></div></div></td> 
    359     <td id="next"  style="border-style: none;"><div class="buttons" onmouseover="this.className='buttons_hover';" onmouseout="this.className='buttons';" onclick="submit()"><div class="buttons_inner"><table  class="noBorder" cellspacing="0" cellpadding="0"><tr  class="noBorder"><td style="border-style: none;"><img src="/base/images/gonext.gif" border="0"></td><td style="border-style: none;">Next</td></tr></table></div></div></td>
    360     <td id="close"  style="border-style: none;"><div class="buttons" onmouseover="this.className='buttons_hover';" onmouseout="this.className='buttons';" onclick="window.close()"><div class="buttons_inner"><table  class="noBorder" cellspacing="0" cellpadding="0"><tr  class="noBorder"><td style="border-style: none;"><img src="/base/images/cancel.gif" border="0"></td><td style="border-style: none;">Cancel</td></tr></table></div></div></td>
    361   </tr>
    362   </table>
    363 
    364 
    365 </form>
    366 
    367 
    368 
    369 </body>
     393        %>
     394
     395      </table>
     396
     397      <p>
     398      <table align="center" class="noBorder" cellspacing="5" cellpadding="5">
     399        <tr class="noBorder">
     400          <td id="back" style="border-style: none;">
     401            <div class="buttons" onmouseover="this.className='buttons_hover';" onmouseout="this.className='buttons';"
     402              onclick="back()">
     403              <div class="buttons_inner">
     404                <table class="noBorder" cellspacing="0" cellpadding="0">
     405                  <tr class="noBorder">
     406                    <td style="border-style: none;">
     407                      <img src="/base/images/goback.gif" border="0">
     408                    </td>
     409                    <td style="border-style: none;">
     410                      Back
     411                    </td>
     412                  </tr>
     413                </table>
     414              </div>
     415            </div>
     416          </td>
     417          <td id="next" style="border-style: none;">
     418            <div class="buttons" onmouseover="this.className='buttons_hover';" onmouseout="this.className='buttons';"
     419              onclick="submit()">
     420              <div class="buttons_inner">
     421                <table class="noBorder" cellspacing="0" cellpadding="0">
     422                  <tr class="noBorder">
     423                    <td style="border-style: none;">
     424                      <img src="/base/images/gonext.gif" border="0">
     425                    </td>
     426                    <td style="border-style: none;">
     427                      Next
     428                    </td>
     429                  </tr>
     430                </table>
     431              </div>
     432            </div>
     433          </td>
     434          <td id="close" style="border-style: none;">
     435            <div class="buttons" onmouseover="this.className='buttons_hover';" onmouseout="this.className='buttons';"
     436              onclick="window.close()">
     437              <div class="buttons_inner">
     438                <table class="noBorder" cellspacing="0" cellpadding="0">
     439                  <tr class="noBorder">
     440                    <td style="border-style: none;">
     441                      <img src="/base/images/cancel.gif" border="0">
     442                    </td>
     443                    <td style="border-style: none;">
     444                      Cancel
     445                    </td>
     446                  </tr>
     447                </table>
     448              </div>
     449            </div>
     450          </td>
     451        </tr>
     452      </table>
     453
     454
     455    </form>
     456
     457
     458
     459  </body>
    370460</html>
  • plugins/base2/uk.ac.ebi.tab2mage/branches/tab2mageimporter/jsp/uk/ac/ebi/nugo/plugins/submit.jsp

    r558 r639  
    171171<input type="hidden"name="parameter:timePoints" value="<%= inputDataBean.getTimePoints()%>"/>
    172172<input type="hidden"name="parameter:proceed" value="<%= inputDataBean.getProceed()%>"/>
     173<input type="hidden"name="parameter:numHybs" value="<%= inputDataBean.getNumHybs()%>"/>
    173174
    174175
  • plugins/base2/uk.ac.ebi.tab2mage/branches/tab2mageimporter/jsp/uk/ac/ebi/nugo/plugins/userchoice1.jsp

    r552 r639  
    55
    66<jsp:useBean id="inputDataBean" class="uk.ac.ebi.nugo.plugins.DataBean" scope="session"/>
     7
    78<!-- submits the form data back to the bean assuming that each form element is matched to a variable in the bean by the same name -->
    89<jsp:setProperty name="inputDataBean" property="*"/>
  • plugins/base2/uk.ac.ebi.tab2mage/branches/tab2mageimporter/jsp/uk/ac/ebi/nugo/plugins/userchoice3.jsp

    r552 r639  
    2222
    2323<script language="JavaScript" src="<%= request.getContextPath()%>/include/scripts/main.js" type="text/javascript"></script>
     24
     25<script type="text/javascript" src="<%= request.getContextPath()%>/plugins/uk/ac/ebi/nugo/plugins/progressbar/progressbar.js"></script>
     26
    2427<script language="JavaScript" type="text/javascript">
    2528
     
    5154  }
    5255}
     56
     57
     58    function showProgressBar()
     59    {
     60       //this is the ID of the hidden item
     61      var pgBar = document.getElementById('progress2');
     62     pgBar.style.display = "block";
     63    }
    5364
    5465</script>
     
    8394      <tr>
    8495        <td class="noBorder"><input type="radio" id="mappingsModePaste" name="mappingsMode" value="copyPaste" ></td>
    85         <td class="noBorder">copy and paste a block of existing mappings from a spreadsheet</td>
     96        <td class="noBorder">copy and paste a block of existing mappings from a spreadsheet (best option for larger experiments)</td>
    8697      </tr>
    8798    </table>
     
    95106
    96107
     108<!-- indeterminate mode progress bar -- displays while files are being unzipped; hidden at first -->
     109<table class="noBorder" align="center">
     110  <tr class="noBorder">
     111    <td class="noBorder">
     112    <div id="progress2" style="display: none"><script type="text/javascript">var progressbar2 = new VistaProgressBar({id:'progress2',width:200,mode:'indeterminate',highlightspeed:1000});</script>
     113    <p>
     114    Examining zip file contents -- please wait......</div>
     115    </td>
     116  </tr>
     117</table>
     118
     119
     120<!-- navigation buttons -->
    97121  <table align="center" class="noBorder" cellspacing="5"  cellpadding="5">
    98122  <tr class="noBorder">
    99123    <td id="back"  style="border-style: none;"><div class="buttons" onmouseover="this.className='buttons_hover';" onmouseout="this.className='buttons';" onclick="back()"><div class="buttons_inner"><table  class="noBorder" cellspacing="0" cellpadding="0"><tr  class="noBorder"><td style="border-style: none;"><img src="/base/images/goback.gif" border="0"></td><td style="border-style: none;">Back</td></tr></table></div></div></td> 
    100     <td id="next"  style="border-style: none;"><div class="buttons" onmouseover="this.className='buttons_hover';" onmouseout="this.className='buttons';" onclick="submit()"><div class="buttons_inner"><table  class="noBorder" cellspacing="0" cellpadding="0"><tr  class="noBorder"><td style="border-style: none;"><img src="/base/images/gonext.gif" border="0"></td><td style="border-style: none;">Next</td></tr></table></div></div></td>
     124    <td id="next"  style="border-style: none;"><div class="buttons" onmouseover="this.className='buttons_hover';" onmouseout="this.className='buttons';" onclick="progressbar2.start();showProgressBar();submit();"><div class="buttons_inner"><table  class="noBorder" cellspacing="0" cellpadding="0"><tr  class="noBorder"><td style="border-style: none;"><img src="/base/images/gonext.gif" border="0"></td><td style="border-style: none;">Next</td></tr></table></div></div></td>
    101125    <td id="close"  style="border-style: none;"><div class="buttons" onmouseover="this.className='buttons_hover';" onmouseout="this.className='buttons';" onclick="window.close()"><div class="buttons_inner"><table  class="noBorder" cellspacing="0" cellpadding="0"><tr  class="noBorder"><td style="border-style: none;"><img src="/base/images/cancel.gif" border="0"></td><td style="border-style: none;">Cancel</td></tr></table></div></div></td>
    102126  </tr>
    103127  </table>
     128 
     129
    104130
    105131</body>
  • plugins/base2/uk.ac.ebi.tab2mage/branches/tab2mageimporter/src/uk/ac/ebi/nugo/plugins/DataBean.java

    r558 r639  
    6262  public String timePoints;
    6363  public String proceed;
     64  public String numHybs;
    6465 
    6566  public DataBean()
     
    6869  }
    6970 
    70   //initializes all String vars in the bean to emtpy Strings
     71 
     72  //initializes all String vars in the bean to empty Strings
    7173  //this is necessary because the plugin will not accept any null values and in some submissions not all vars will have values
    7274  private void initDefaults()
     
    555557    this.combinationList = combinationList;
    556558  }
     559
     560  public String getNumHybs()
     561  {
     562    return numHybs;
     563  }
     564
     565  public void setNumHybs(String numHybs)
     566  {
     567    this.numHybs = numHybs;
     568  }
    557569 
    558570 
  • plugins/base2/uk.ac.ebi.tab2mage/branches/tab2mageimporter/src/uk/ac/ebi/nugo/plugins/Tab2MageImporter.java

    r558 r639  
    9494    "numDesigns","dyeSwap","refSample","numTreatmentGroups","expFactors","numReplicates",
    9595    "tissues","pooling","path", "subjectNames", "fileList", "subjectList", "tissueList","dyeList", "combinationList", "useWizard",
    96     "legacyData","mappingsMode","spreadSheetMappings","samplePairing","timeCourse","timePoints","proceed"};
     96    "legacyData","mappingsMode","spreadSheetMappings","samplePairing","timeCourse","timePoints","proceed","numHybs"};
    9797
    9898
  • plugins/base2/uk.ac.ebi.tab2mage/branches/tab2mageimporter/src/uk/ac/ebi/nugo/plugins/Tab2MageUtils.java

    r550 r639  
    11package uk.ac.ebi.nugo.plugins;
     2
     3import java.util.Arrays;
     4import java.util.HashMap;
     5import java.util.List;
    26
    37public class Tab2MageUtils
    48{
     9  // -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
     10 
     11 
     12  public static HashMap<String, List<String>> getAllFactorValues(String expFactors)
     13  {
     14    HashMap<String, List<String>> hashMap = new HashMap<String, List<String>>();
     15   
     16    String[] rawFactors = expFactors.split("\n");
     17
     18    for (int i = 0; i < rawFactors.length; i++)
     19    {
     20      //extract the factor name
     21      String factorName = rawFactors[i].substring(0, rawFactors[i].indexOf("("));
     22
     23      //extract the possible values from between the parentheses
     24      String allValues = rawFactors[i].substring(rawFactors[i].indexOf("(") + 1,
     25              rawFactors[i].indexOf(")"));
     26      String[] values = allValues.split(",");
     27     
     28      //make new LinkedList with the values in it
     29      List<String> valueList = Arrays.asList(values);
     30     
     31      //add new entry to the hashmap
     32      hashMap.put(factorName, valueList);
     33
     34    }
     35    return hashMap;
     36  }
     37 
    538  // -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    639
  • plugins/base2/uk.ac.ebi.tab2mage/branches/tab2mageimporter/src/uk/ac/ebi/nugo/plugins/Tab2MageWriterTest.java

    r558 r639  
    1616  {
    1717    //org.junit.runner.JUnitCore.main("uk.ac.ebi.nugo.plugins.Tab2MageWriterTest");
    18     //test0();
     18    test0();
    1919    //test1();
    2020    //test2();
    21     test3();
     21    //test3();
    2222  }
    2323
     
    4646    writer.subjectList = "subject1\tsubject2\tsubject3\tsubject4\tsubject5\tsubject6\tsubject7\tsubject8";
    4747    writer.tissueList = "whole_organism\twhole_organism\twhole_organism\twhole_organism\twhole_organism\twhole_organism\twhole_organism\twhole_organism";
    48     writer.combinationList = "mutant treated\twildtype treated\tmutant control\twildtype control\tmutant treated\twildtype treated\tmutant control\twildtype control";
    4948    writer.mappingsMode = "copyPaste";
    5049    writer.spreadSheetMappings = "File\tSample\tTissue\tDye\tFactorValue[Strain]\tFactorValue(Treatment)\nfile1\tsubject1\twhole_plant\tbiotin\tmutant\ttreated\nfile2\tsubject2\twhole_plant\tbiotin\twildtype\ttreated\nfile3\tsubject3\twhole_plant\tbiotin\tmutant\tcontrol\nfile4\tsubject4\twhole_plant\tbiotin\twildtype\tcontrol\nfile5\tsubject5\twhole_plant\tbiotin\tmutant\ttreated\nfile6\tsubject6\twhole_plant\tbiotin\twildtype\ttreated\nfile7\tsubject7\twhole_plant\tbiotin\tmutant\tcontrol\nfile8\tsubject8\twhole_plant\tbiotin\twildtype\tcontrol";
     
    190189//  ----------------------------------------------------------------------------------------------------------------------
    191190 
     191  public static void test4()
     192  {
     193    /*
     194    experimentId = 2
     195    domain = scri.ac.uk
     196    accession = Agilent potato POCI 1x44k
     197    qualityControl = biological replicate
     198    experimentalDesign = strain_or_line_design,
     199    experimentName = LD1 experiment
     200    description = my test description
     201    releaseDate = 2007-05-15
     202    submissionDate = 2007-05-30
     203    submitter = Micha Bayer
     204    organization = SCRI
     205    publicationTitle = My completely ropey paper
     206    authors = Micha Bayer; Joe Bloggs
     207    journal = The Journal of Irreproducible Results
     208    volume = 1
     209    issue = 1
     210    pages = 112-122
     211    year = 2007
     212    pubmedId =
     213    treatmentProtocol = treatment protocol text
     214    poolingProtocol = pooling protocol text
     215    extractionProtocol = extraction protocol text
     216    labelingProtocol = labeling protocol text
     217    hybridizationProtocol = hybs protocol text
     218    scanningProtocol = scanning protocol text
     219    treatmentProtocolParams = medium;CO2;antibiotics
     220    hybridizationProtocolParams = temperature(degree_C) ; duration(hr)
     221    scanningProtocolParams =
     222    platform = GenePix
     223    organism = Solanum tuberosum
     224    numDesigns = 1
     225    dyeSwap = yes
     226    refSample = no
     227    numTreatmentGroups = 4
     228    expFactors = DevelopmentalStage(mature tubers (6 weeks post H3),golf ball size,2 weeks post H1,2 wee
     229    ks post H2)
     230    StrainOrLine(Maris Piper,Desiree,333-37,333-16)
     231    numReplicates = 2
     232    tissues = enterocyte
     233    pooling = no
     234    path = /home/michab/LD1_files.zip
     235    subjectNames = Solanum phureja cv. 337-37.H1_1
     236    Solanum phureja cv. 333-16.H1_1
     237    Solanum phureja cv. 333-16.H3_2
     238    Solanum tuberosum cv. Maris Piper.H3_1
     239    Solanum tuberosum cv. Maris Piper.H3_2
     240    Solanum tuberosum cv. Desiree.H3_1
     241    Solanum phureja cv. 337-37.H3_2
     242    Solanum tuberosum cv. Desiree.H3_2
     243    Solanum phureja cv. 333-16.H4_1
     244    Solanum phureja cv. 337-37.H4_1
     245    Solanum phureja cv. 333-16.H4_2
     246    Solanum tuberosum cv. Maris Piper.H4_1
     247    Solanum tuberosum cv. Maris Piper.H4_2
     248    Solanum tuberosum cv. Desiree.H4_1
     249    Solanum phureja cv. 337-37.H4_2
     250    Solanum tuberosum cv. Desiree.H4_2
     251    Solanum phureja cv. 333-16.H1_2
     252    Solanum tuberosum cv. Maris Piper.H1_1
     253    Solanum tuberosum cv. Maris Piper.H1_2
     254    Solanum tuberosum cv. Desiree.H1_1
     255    Solanum phureja cv. 337-37.H1_2
     256    Solanum tuberosum cv. Desiree.H1_2
     257    Solanum phureja cv. 333-16.H2_1
     258    Solanum phureja cv. 337-37.H2_1
     259    Solanum phureja cv. 333-16.H2_2
     260    Solanum tuberosum cv. Maris Piper.H2_1
     261    Solanum tuberosum cv. Maris Piper.H2_2
     262    Solanum tuberosum cv. Desiree.H2_1
     263    Solanum phureja cv. 337-37.H2_2
     264    Solanum tuberosum cv. Desiree.H2_2
     265    Solanum phureja cv. 337-37.H3_1
     266    Solanum phureja cv. 333-16.H3_1
     267
     268
     269    useWizard = yes
     270    legacyData = yes
     271    mappingsMode = copyPaste
     272    spreadSheetMappings = File      Subject Tissue  Dye     FactorValue[DevelopmentalStage] FactorValue[
     273    StrainOrLine]
     274    10d_7d_w685.gpr Solanum phureja cv. 337-37.H1_1 tuber   cy3     golf ball size  333-37
     275    10d_7d_w685.gpr Solanum phureja cv. 333-16.H1_1 tuber   cy5     golf ball size  333-16
     276    8b_13b_w685.gpr Solanum phureja cv. 333-16.H3_2 tuber   cy3     2 weeks post H2 333-16
     277    8b_13b_w685.gpr Solanum tuberosum cv. Maris Piper.H3_1  tuber   cy5     2 weeks post H2 Maris Piper
     278    14b_1b_w685.gpr Solanum tuberosum cv. Maris Piper.H3_2  tuber   cy3     2 weeks post H2 Maris Piper
     279    14b_1b_w685.gpr Solanum tuberosum cv. Desiree.H3_1      tuber   cy5     2 weeks post H2 Desiree
     280    2b_11b_w685.gpr Solanum phureja cv. 337-37.H3_2 tuber   cy5     2 weeks post H2 333-37
     281    2b_11b_w685.gpr Solanum tuberosum cv. Desiree.H3_2      tuber   cy3     2 weeks post H2 Desiree
     282    7a_10a_w685.gpr Solanum phureja cv. 333-16.H4_1 tuber   cy3     mature tubers (6 weeks post H3) 333-
     283    16
     284    7a_10a_w685.gpr Solanum phureja cv. 337-37.H4_1 tuber   cy5     mature tubers (6 weeks post H3) 333-
     285    37
     286    13a_8a_w685.gpr Solanum phureja cv. 333-16.H4_2 tuber   cy5     mature tubers (6 weeks post H3) 333-
     287    16
     288    13a_8a_w685.gpr Solanum tuberosum cv. Maris Piper.H4_1  tuber   cy3     mature tubers (6 weeks post
     289    H3)     Maris Piper
     290    1a_14a_w685.gpr Solanum tuberosum cv. Maris Piper.H4_2  tuber   cy5     mature tubers (6 weeks post
     291    H3)     Maris Piper
     292    1a_14a_w685.gpr Solanum tuberosum cv. Desiree.H4_1      tuber   cy3     mature tubers (6 weeks post
     293    H3)     Desiree
     294    11a_2a_w685.gpr Solanum phureja cv. 337-37.H4_2 tuber   cy5     mature tubers (6 weeks post H3) 333-
     295    37
     296    11a_2a_w685.gpr Solanum tuberosum cv. Desiree.H4_2      tuber   cy3     mature tubers (6 weeks post
     297    H3)     Desiree
     298    8d_13d_w685.gpr Solanum phureja cv. 333-16.H1_2 tuber   cy3     golf ball size  333-16
     299    8d_13d_w685.gpr Solanum tuberosum cv. Maris Piper.H1_1  tuber   cy5     golf ball size  Maris Piper
     300    14d_1d_w685.gpr Solanum tuberosum cv. Maris Piper.H1_2  tuber   cy3     golf ball size  Maris Piper
     301    14d_1d_w685.gpr Solanum tuberosum cv. Desiree.H1_1      tuber   cy5     golf ball size  Desiree
     302    2d_11d_w685.gpr Solanum phureja cv. 337-37.H1_2 tuber   cy5     golf ball size  333-37
     303    2d_11d_w685.gpr Solanum tuberosum cv. Desiree.H1_2      tuber   cy3     golf ball size  Desiree
     304    7c_10c_w685.gpr Solanum phureja cv. 333-16.H2_1 tuber   cy3     2 weeks post H1 333-16
     305    7c_10c_w685.gpr Solanum phureja cv. 337-37.H2_1 tuber   cy5     2 weeks post H1 333-37
     306    13c_8c_w685.gpr Solanum phureja cv. 333-16.H2_2 tuber   cy5     2 weeks post H1 333-16
     307    13c_8c_w685.gpr Solanum tuberosum cv. Maris Piper.H2_1  tuber   cy3     2 weeks post H1 Maris Piper
     308    1c_14c_w685.gpr Solanum tuberosum cv. Maris Piper.H2_2  tuber   cy5     2 weeks post H1 Maris Piper
     309    1c_14c_w685.gpr Solanum tuberosum cv. Desiree.H2_1      tuber   cy3     2 weeks post H1 Desiree
     310    11c_2c_w685.gpr Solanum phureja cv. 337-37.H2_2 tuber   cy5     2 weeks post H1 333-37
     311    11c_2c_w685.gpr Solanum tuberosum cv. Desiree.H2_2      tuber   cy3     2 weeks post H1 Desiree
     312    10b_7b_w685.gpr Solanum phureja cv. 337-37.H3_1 tuber   cy3     2 weeks post H2 333-37
     313    10b_7b_w685.gpr Solanum phureja cv. 333-16.H3_1 tuber   cy5     2 weeks post H2 333-16
     314    */
     315  }
     316 
     317 
    192318}//end class
Note: See TracChangeset for help on using the changeset viewer.