Changeset 639
- Timestamp:
- Mar 21, 2008, 2:55:09 PM (15 years ago)
- 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 6 6 - check in Charles' code 7 7 8 features: 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) 8 12 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 13 fixes: 15 14 - job progress bar does not report job progress but import progress for each individual file 16 15 - 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 17 18 18 19 19 extension: autogenerate mode 20 extensions: 21 1.autogenerate mode 20 22 - 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) 21 23 - add support for users using their own name bases for samples and perhaps extracts 22 23 extension: support for BASE 2.5 + 24 2.support for BASE 2.5 + -
plugins/base2/uk.ac.ebi.tab2mage/branches/tab2mageimporter/build.xml
r558 r639 62 62 63 63 <target name="copyJSPs"> 64 <copy todir="${tomcat.home}\webapps\base\plugins\" verbose=" true">64 <copy todir="${tomcat.home}\webapps\base\plugins\" verbose="false"> 65 65 <fileset dir="${jspDir}" /> 66 66 </copy> … … 69 69 70 70 <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" /> 73 73 <!-- now restart tomcat to reload the application --> 74 74 <echo message="tomcat home = "/> -
plugins/base2/uk.ac.ebi.tab2mage/branches/tab2mageimporter/html/userchoice3.html
r550 r639 6 6 7 7 <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 8 31 </head> 9 32 <body> … … 40 63 </table> 41 64 65 42 66 </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 43 88 44 89 </body> -
plugins/base2/uk.ac.ebi.tab2mage/branches/tab2mageimporter/jsp/uk/ac/ebi/nugo/plugins/experiment.jsp
r558 r639 185 185 <table class="noBorder" cellspacing="0" cellpadding="5"> 186 186 <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> 188 190 <td style="border-style: none;"> 189 191 <div class="buttonclass" … … 455 457 <td class="plainLabel" style="border-style: none;">Title:</td> 456 458 <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> 458 460 <td style="border-style: none;"></td> 459 461 </tr> -
plugins/base2/uk.ac.ebi.tab2mage/branches/tab2mageimporter/jsp/uk/ac/ebi/nugo/plugins/hybridizations.jsp
r558 r639 159 159 <select name="platform"> 160 160 <option onclick="hideTwoChannelQuestions();">Affymetrix</option> 161 <option onclick="showTwoChannelQuestions();" selected="selected">Agilent</option>161 <option onclick="showTwoChannelQuestions();">Agilent</option> 162 162 <option onclick="showTwoChannelQuestions();">AIDA</option> 163 163 <option onclick="showTwoChannelQuestions();">BZScan</option> 164 164 <option onclick="showTwoChannelQuestions();">ChipSkipper</option> 165 <option onclick="showTwoChannelQuestions();" >GenePix</option>165 <option onclick="showTwoChannelQuestions();" selected="selected" >GenePix</option> 166 166 <option onclick="showTwoChannelQuestions();">GeneTAC</option> 167 167 <option onclick="showTwoChannelQuestions();">Illumina</option> … … 178 178 <tr> 179 179 <td class="boldText">Experimental organism:<font color="red"><b> *</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> 181 181 <td>The full scientific name of the experimental organism used.</td> 182 182 </tr> 183 183 184 <!-- num array designs --> 185 <tr> 186 <td class="boldText">Number of different arrays designs used:<font color="red"><b> *</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> *</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> *</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> 199 189 </td> 200 190 </tr> … … 203 193 <tr> 204 194 <td class="boldText">Experimental factors:<font color="red"><b> *</b></font> </td> 205 <td class="input"><textarea rows="7" cols="3 2" 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> 206 196 <td>Please list all experimental factors and value ranges using the following format (one per 207 197 line):<br> 208 <i>Factor 1(value1,value2,...valueN)<br></i>198 <i>FactorName(value1,value2,...valueN)<br></i> 209 199 <p>Example: <i><br> 210 200 Compound(aspirin,ibuprofen) <br> … … 213 203 </td> 214 204 </tr> 215 216 <!-- num subjects -->217 <tr>218 <td class="boldText">Number of subjects per group:<font color="red"><b> *</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>222 205 223 206 <!-- subject labels --> 224 207 <tr> 225 208 <td class="boldText">Subject (replicate) labels:<font color="red"><b> *</b></font></td> 226 <td class="input"><textarea rows="8" cols="3 2" name="subjectNames"></textarea></td>209 <td class="input"><textarea rows="8" cols="35" name="subjectNames"></textarea></td> 227 210 <td>Please provide a list of labels(names) for the experimental subjects, one per line, 228 211 in no particular order (copy and paste from Excel works).</td> … … 233 216 <td class="boldText">Target tissues:<font color="red"><b> *</b></font></td> 234 217 <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> *</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> *</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> *</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> 294 219 </tr> 295 220 -
plugins/base2/uk.ac.ebi.tab2mage/branches/tab2mageimporter/jsp/uk/ac/ebi/nugo/plugins/mappings.jsp
r558 r639 19 19 <html> 20 20 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"> 29 29 30 30 //submits form … … 92 92 </script> 93 93 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 247 115 <% 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); 250 203 %> 251 204 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 298 242 if (!singleChannel) 299 243 { 300 %> 301 <option>Cy3</option> 302 <option>Cy5</option> 303 <% 244 %> 245 <td class="header"> 246 <h3> 247 Dye 248 </h3> 249 </td> 250 <% 304 251 } 305 else 252 %> 253 254 <!-- for each factor --> 255 <% 256 for (String factorName : factorMap.keySet()) 306 257 { 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++) 328 271 { 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 <% 334 361 } 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 <% 335 392 } 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> 370 460 </html> -
plugins/base2/uk.ac.ebi.tab2mage/branches/tab2mageimporter/jsp/uk/ac/ebi/nugo/plugins/submit.jsp
r558 r639 171 171 <input type="hidden"name="parameter:timePoints" value="<%= inputDataBean.getTimePoints()%>"/> 172 172 <input type="hidden"name="parameter:proceed" value="<%= inputDataBean.getProceed()%>"/> 173 <input type="hidden"name="parameter:numHybs" value="<%= inputDataBean.getNumHybs()%>"/> 173 174 174 175 -
plugins/base2/uk.ac.ebi.tab2mage/branches/tab2mageimporter/jsp/uk/ac/ebi/nugo/plugins/userchoice1.jsp
r552 r639 5 5 6 6 <jsp:useBean id="inputDataBean" class="uk.ac.ebi.nugo.plugins.DataBean" scope="session"/> 7 7 8 <!-- 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 --> 8 9 <jsp:setProperty name="inputDataBean" property="*"/> -
plugins/base2/uk.ac.ebi.tab2mage/branches/tab2mageimporter/jsp/uk/ac/ebi/nugo/plugins/userchoice3.jsp
r552 r639 22 22 23 23 <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 24 27 <script language="JavaScript" type="text/javascript"> 25 28 … … 51 54 } 52 55 } 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 } 53 64 54 65 </script> … … 83 94 <tr> 84 95 <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> 86 97 </tr> 87 98 </table> … … 95 106 96 107 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 --> 97 121 <table align="center" class="noBorder" cellspacing="5" cellpadding="5"> 98 122 <tr class="noBorder"> 99 123 <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> 101 125 <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> 102 126 </tr> 103 127 </table> 128 129 104 130 105 131 </body> -
plugins/base2/uk.ac.ebi.tab2mage/branches/tab2mageimporter/src/uk/ac/ebi/nugo/plugins/DataBean.java
r558 r639 62 62 public String timePoints; 63 63 public String proceed; 64 public String numHybs; 64 65 65 66 public DataBean() … … 68 69 } 69 70 70 //initializes all String vars in the bean to emtpy Strings 71 72 //initializes all String vars in the bean to empty Strings 71 73 //this is necessary because the plugin will not accept any null values and in some submissions not all vars will have values 72 74 private void initDefaults() … … 555 557 this.combinationList = combinationList; 556 558 } 559 560 public String getNumHybs() 561 { 562 return numHybs; 563 } 564 565 public void setNumHybs(String numHybs) 566 { 567 this.numHybs = numHybs; 568 } 557 569 558 570 -
plugins/base2/uk.ac.ebi.tab2mage/branches/tab2mageimporter/src/uk/ac/ebi/nugo/plugins/Tab2MageImporter.java
r558 r639 94 94 "numDesigns","dyeSwap","refSample","numTreatmentGroups","expFactors","numReplicates", 95 95 "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"}; 97 97 98 98 -
plugins/base2/uk.ac.ebi.tab2mage/branches/tab2mageimporter/src/uk/ac/ebi/nugo/plugins/Tab2MageUtils.java
r550 r639 1 1 package uk.ac.ebi.nugo.plugins; 2 3 import java.util.Arrays; 4 import java.util.HashMap; 5 import java.util.List; 2 6 3 7 public class Tab2MageUtils 4 8 { 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 5 38 // ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 6 39 -
plugins/base2/uk.ac.ebi.tab2mage/branches/tab2mageimporter/src/uk/ac/ebi/nugo/plugins/Tab2MageWriterTest.java
r558 r639 16 16 { 17 17 //org.junit.runner.JUnitCore.main("uk.ac.ebi.nugo.plugins.Tab2MageWriterTest"); 18 //test0();18 test0(); 19 19 //test1(); 20 20 //test2(); 21 test3();21 //test3(); 22 22 } 23 23 … … 46 46 writer.subjectList = "subject1\tsubject2\tsubject3\tsubject4\tsubject5\tsubject6\tsubject7\tsubject8"; 47 47 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";49 48 writer.mappingsMode = "copyPaste"; 50 49 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"; … … 190 189 // ---------------------------------------------------------------------------------------------------------------------- 191 190 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 192 318 }//end class
Note: See TracChangeset
for help on using the changeset viewer.