extensions/net.sf.basedb.reggie/trunk/resources/sampleproc/allprep_protocol2.jsp

Code
Comments
Other
Rev Date Author Line
1637 07 May 12 nicklas 1 <%@ page
1637 07 May 12 nicklas 2   pageEncoding="UTF-8"
1637 07 May 12 nicklas 3   session="false"
1637 07 May 12 nicklas 4   import="net.sf.basedb.core.User"
1637 07 May 12 nicklas 5   import="net.sf.basedb.core.DbControl"
1637 07 May 12 nicklas 6   import="net.sf.basedb.core.SessionControl"
1637 07 May 12 nicklas 7   import="net.sf.basedb.core.Application"
1637 07 May 12 nicklas 8   import="net.sf.basedb.core.Extract"
1662 22 May 12 nicklas 9   import="net.sf.basedb.core.BioMaterial"
1662 22 May 12 nicklas 10   import="net.sf.basedb.core.BioMaterialEventSource"
1637 07 May 12 nicklas 11   import="net.sf.basedb.core.BioPlate"
1637 07 May 12 nicklas 12   import="net.sf.basedb.core.BioWell"
4093 12 Sep 16 nicklas 13   import="net.sf.basedb.core.AnnotationSet"
3469 27 Aug 15 nicklas 14   import="net.sf.basedb.core.AnnotationType"
3740 11 Feb 16 nicklas 15   import="net.sf.basedb.core.Annotation"
1637 07 May 12 nicklas 16   import="net.sf.basedb.core.PermissionDeniedException"
1637 07 May 12 nicklas 17   import="net.sf.basedb.util.Values"
1637 07 May 12 nicklas 18   import="net.sf.basedb.util.extensions.Extension"
3467 26 Aug 15 nicklas 19   import="net.sf.basedb.util.formatter.WellCoordinateFormatter"
1637 07 May 12 nicklas 20   import="net.sf.basedb.clients.web.Base"  
1637 07 May 12 nicklas 21   import="net.sf.basedb.clients.web.util.HTML"
1637 07 May 12 nicklas 22   import="net.sf.basedb.clients.web.extensions.ExtensionsControl"
1637 07 May 12 nicklas 23   import="java.util.List"
1637 07 May 12 nicklas 24   import="java.util.ArrayList"
4097 13 Sep 16 nicklas 25   import="java.util.Arrays"
1637 07 May 12 nicklas 26 %>
2686 22 Sep 14 nicklas 27 <%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
3466 25 Aug 15 nicklas 28 <%!
3466 25 Aug 15 nicklas 29
3466 25 Aug 15 nicklas 30 static int[][] QIACUBE_POSITIONS = new int[][] {
3466 25 Aug 15 nicklas 31   new int[] {0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, // 1 sample; pos=1
3466 25 Aug 15 nicklas 32   new int[] {0, -1, -1, -1, -1, -1,  1, -1, -1, -1, -1, -1}, // 2 samples; pos=1,7
3466 25 Aug 15 nicklas 33   new int[] {0, -1, -1, -1,  1, -1, -1, -1,  2, -1, -1, -1}, // 3 samples; pos=1,5,9
3466 25 Aug 15 nicklas 34   new int[] {0,  1, -1, -1, -1, -1,  2,  3, -1, -1, -1, -1}, // 4 samples; pos=1,2,7,8
3466 25 Aug 15 nicklas 35   new int[] {0,  1, -1, -1,  2, -1, -1,  3,  4, -1, -1, -1}, // 5 samples; pos=1,2,5,8,9
3466 25 Aug 15 nicklas 36   new int[] {0,  1,  2, -1, -1, -1,  3,  4,  5, -1, -1, -1}, // 6 samples; pos=1,2,3,7,8,9
3497 18 Sep 15 nicklas 37   new int[] {0,  1,  2, -1, -1,  3,  4, -1,  5,  6, -1, -1}, // 7 samples; pos=1,2,3,6,7,9,10
3466 25 Aug 15 nicklas 38   new int[] {0,  1,  2,  3, -1, -1,  4,  5,  6,  7, -1, -1}, // 8 samples; pos=1,2,3,4,7,8,9,10
3466 25 Aug 15 nicklas 39   new int[] {0,  1,  2, -1,  3,  4,  5, -1,  6,  7,  8, -1}, // 9 samples; pos=1,2,3,5,6,7,9,10,11
3466 25 Aug 15 nicklas 40   new int[] {0,  1,  2,  3,  4, -1,  5,  6,  7,  8,  9, -1}, // 10 samples; pos=1,2,3,4,5,7,8,9,10,11
3466 25 Aug 15 nicklas 41   new int[] {0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, -1}, // 11 samples; pos=1,2,3,4,5,6,7,8,9,10,11
3466 25 Aug 15 nicklas 42   new int[] {0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11}  // 12 samples; pos=1,2,3,4,5,6,7,8,9,10,11,12
3466 25 Aug 15 nicklas 43 };
3466 25 Aug 15 nicklas 44
3479 04 Sep 15 nicklas 45 static int[] RNASE_FREE_WATER_VOLUME = new int[]
3479 04 Sep 15 nicklas 46   {
3479 04 Sep 15 nicklas 47     256, 256, 364, 472, 580, 688, 796, 904, 1012, 1120, 1336, 1336 
3479 04 Sep 15 nicklas 48   };
3479 04 Sep 15 nicklas 49
4093 12 Sep 16 nicklas 50 static LysateWithOptions getExtractForPos(int pos, List<LysateWithOptions> extracts)
3466 25 Aug 15 nicklas 51 {
3466 25 Aug 15 nicklas 52   int index = QIACUBE_POSITIONS[extracts.size()-1][pos-1];
3466 25 Aug 15 nicklas 53   return index < 0 ? null : extracts.get(index);
3466 25 Aug 15 nicklas 54 }
3466 25 Aug 15 nicklas 55
3466 25 Aug 15 nicklas 56 static boolean useCounterBalance(int pos, int numExtracts)
3466 25 Aug 15 nicklas 57 {
3466 25 Aug 15 nicklas 58   return numExtracts == 1 && pos == 7 || numExtracts == 11 && pos == 12;
3466 25 Aug 15 nicklas 59 }
4093 12 Sep 16 nicklas 60 static class LysateWithOptions
4093 12 Sep 16 nicklas 61 {
4093 12 Sep 16 nicklas 62   
4093 12 Sep 16 nicklas 63   final Extract lysate;
4093 12 Sep 16 nicklas 64   boolean isYellow = false;
4093 12 Sep 16 nicklas 65   boolean reProcessFromLysate = false;
6723 04 May 22 nicklas 66   String label;
4093 12 Sep 16 nicklas 67   
4093 12 Sep 16 nicklas 68   LysateWithOptions(Extract lysate)
4093 12 Sep 16 nicklas 69   {
4093 12 Sep 16 nicklas 70     this.lysate = lysate;
4093 12 Sep 16 nicklas 71   }
4093 12 Sep 16 nicklas 72   
4093 12 Sep 16 nicklas 73 }
3466 25 Aug 15 nicklas 74 %>
1637 07 May 12 nicklas 75 <%
3976 26 May 16 nicklas 76 final SessionControl sc = Base.getExistingSessionControl(request, "net.sf.basedb.reggie", true);
1637 07 May 12 nicklas 77 final String ID = sc.getId();
1637 07 May 12 nicklas 78 final float scale = Base.getScale(sc);
1637 07 May 12 nicklas 79 final String home = ExtensionsControl.getHomeUrl("net.sf.basedb.reggie");
1637 07 May 12 nicklas 80 final int BLOCKS_PER_PAGE = 3;
1637 07 May 12 nicklas 81 DbControl dc = null;
1637 07 May 12 nicklas 82 try
1637 07 May 12 nicklas 83 {
1637 07 May 12 nicklas 84   dc = sc.newDbControl();
1637 07 May 12 nicklas 85   final Extension reggie = ExtensionsControl.get(dc).getExtension("net.sf.basedb.reggie");
1637 07 May 12 nicklas 86   final User user = User.getById(dc, sc.getLoggedInUserId());
3469 27 Aug 15 nicklas 87   
4093 12 Sep 16 nicklas 88   List<LysateWithOptions> lysates = new ArrayList<LysateWithOptions>();
3469 27 Aug 15 nicklas 89   int reservedById = Values.getInt(request.getParameter("reserve"));
3740 11 Feb 16 nicklas 90   int yellowLabelId = Values.getInt(request.getParameter("YellowLabel"));
4093 12 Sep 16 nicklas 91   int autoProcessingId = Values.getInt(request.getParameter("AutoProcessing"));
6723 04 May 22 nicklas 92   int tubeLabelId = Values.getInt(request.getParameter("TubeLabel"));
3469 27 Aug 15 nicklas 93   AnnotationType reservedByType = reservedById > 0 ? AnnotationType.getById(dc, reservedById) : null;
3740 11 Feb 16 nicklas 94   AnnotationType yellowLabelType = yellowLabelId > 0 ? AnnotationType.getById(dc, yellowLabelId) : null;
4093 12 Sep 16 nicklas 95   AnnotationType autoProcessingType = autoProcessingId > 0 ? AnnotationType.getById(dc, autoProcessingId) : null;
6723 04 May 22 nicklas 96   AnnotationType tubeLabelType = tubeLabelId > 0 ? AnnotationType.getById(dc, tubeLabelId) : null;
3469 27 Aug 15 nicklas 97   String reservedByUser = user.getName();
4093 12 Sep 16 nicklas 98   boolean allLysatesAreReProcess = true;
6723 04 May 22 nicklas 99   boolean showLabelColumn = false;
4093 12 Sep 16 nicklas 100   
4097 13 Sep 16 nicklas 101   String[] selectedLysates = request.getParameterValues("lysates");
4097 13 Sep 16 nicklas 102   String[] selectedReextraction = request.getParameterValues("reextraction");
4097 13 Sep 16 nicklas 103   List<String> allSelected = new ArrayList();
4097 13 Sep 16 nicklas 104   if (selectedLysates != null) allSelected.addAll(Arrays.asList(selectedLysates));
4097 13 Sep 16 nicklas 105   if (selectedReextraction != null) allSelected.addAll(Arrays.asList(selectedReextraction));
4097 13 Sep 16 nicklas 106   
4097 13 Sep 16 nicklas 107   for (String id : allSelected)
1637 07 May 12 nicklas 108   {
3469 27 Aug 15 nicklas 109     Extract lysate = Extract.getById(dc, Values.getInt(id));
3469 27 Aug 15 nicklas 110     if (reservedByType != null)
3469 27 Aug 15 nicklas 111     {
5369 16 Apr 19 nicklas 112       lysate.getAnnotationSet().getAnnotation(reservedByType).setValueIfDifferent(reservedByUser, null);
3469 27 Aug 15 nicklas 113     }
4093 12 Sep 16 nicklas 114     LysateWithOptions lwo = new LysateWithOptions(lysate);
4093 12 Sep 16 nicklas 115     
4093 12 Sep 16 nicklas 116     if (yellowLabelType != null)
4093 12 Sep 16 nicklas 117     {
4093 12 Sep 16 nicklas 118       BioMaterial specimen = lysate.getParent();
4093 12 Sep 16 nicklas 119       lwo.isYellow = specimen.getAnnotationSet().hasAnnotation(yellowLabelType, Annotation.Source.PRIMARY);
4093 12 Sep 16 nicklas 120     }
6723 04 May 22 nicklas 121     AnnotationSet as = lysate.isAnnotated() ? lysate.getAnnotationSet() : null;
6723 04 May 22 nicklas 122     if (autoProcessingType != null && as != null && as.hasAnnotation(autoProcessingType, Annotation.Source.PRIMARY))
4093 12 Sep 16 nicklas 123     {
6723 04 May 22 nicklas 124       lwo.reProcessFromLysate = "ReProcess".equals(as.getAnnotation(autoProcessingType).getValues().get(0));
4093 12 Sep 16 nicklas 125     }
6723 04 May 22 nicklas 126     if (tubeLabelType != null && as != null && as.hasAnnotation(tubeLabelType, Annotation.Source.PRIMARY))
6723 04 May 22 nicklas 127     {
6723 04 May 22 nicklas 128       lwo.label = (String)as.getAnnotation(tubeLabelType).getValues().get(0);
6723 04 May 22 nicklas 129       if (lwo.label != null) showLabelColumn = true;
6723 04 May 22 nicklas 130     }
4093 12 Sep 16 nicklas 131     if (!lwo.reProcessFromLysate) allLysatesAreReProcess = false;
4093 12 Sep 16 nicklas 132     lysates.add(lwo);
1637 07 May 12 nicklas 133   }
1637 07 May 12 nicklas 134 %>
3026 11 Dec 14 nicklas 135 <base:page id="protocol" type="iframe" noskin="true"
2686 22 Sep 14 nicklas 136   favicon="<%=home+"/images/extraction.png"%>" 
2686 22 Sep 14 nicklas 137   title="Lab Tracking Protocol for Allprep isolation">
2686 22 Sep 14 nicklas 138 <base:head
2686 22 Sep 14 nicklas 139   scripts="~../reggie-2.js,~allprep_protocol.js" 
2686 22 Sep 14 nicklas 140   styles="~../css/reggie-2.css,~../css/printable.css"
2686 22 Sep 14 nicklas 141   >
1637 07 May 12 nicklas 142   <style>
1637 07 May 12 nicklas 143   
1637 07 May 12 nicklas 144   table.protocolheader
1637 07 May 12 nicklas 145   {
1637 07 May 12 nicklas 146     width: 100%;
2687 22 Sep 14 nicklas 147     border: 1px solid #000000;
2687 22 Sep 14 nicklas 148     border-collapse: collapse;
2687 22 Sep 14 nicklas 149     margin-bottom: 1em;
1637 07 May 12 nicklas 150   }
1637 07 May 12 nicklas 151
2687 22 Sep 14 nicklas 152   table.protocolheader tr
1637 07 May 12 nicklas 153   {
2687 22 Sep 14 nicklas 154     border-bottom: 1px solid #000000;
1637 07 May 12 nicklas 155   }
2687 22 Sep 14 nicklas 156   
2736 06 Oct 14 nicklas 157   table.protocolheader > tbody > tr > th
1637 07 May 12 nicklas 158   {
1637 07 May 12 nicklas 159     text-align: left;
2687 22 Sep 14 nicklas 160     font-size: 100%;
2687 22 Sep 14 nicklas 161     background-color: #F0F0F0;
2687 22 Sep 14 nicklas 162     padding: 4px;
2687 22 Sep 14 nicklas 163     border-right: 1px solid #000000;
2736 06 Oct 14 nicklas 164     width: 25%;
2687 22 Sep 14 nicklas 165   }
2687 22 Sep 14 nicklas 166   
2687 22 Sep 14 nicklas 167   table.protocolheader > tbody > tr > td
2687 22 Sep 14 nicklas 168   {
2687 22 Sep 14 nicklas 169     border-right: 1px solid #000000;
3168 05 Mar 15 nicklas 170     padding: 4px;
2736 06 Oct 14 nicklas 171     width: 25%;
2687 22 Sep 14 nicklas 172   }
2687 22 Sep 14 nicklas 173   
3466 25 Aug 15 nicklas 174   img.qiacube-map
3466 25 Aug 15 nicklas 175   {
3466 25 Aug 15 nicklas 176     margin: auto;
3466 25 Aug 15 nicklas 177   }
3466 25 Aug 15 nicklas 178   
1637 07 May 12 nicklas 179   table.samplelist
1637 07 May 12 nicklas 180   {
1637 07 May 12 nicklas 181     width: 100%;
1637 07 May 12 nicklas 182     border-collapse: collapse;
1637 07 May 12 nicklas 183     border: 1px solid #000000;
1637 07 May 12 nicklas 184   }
1637 07 May 12 nicklas 185   
1637 07 May 12 nicklas 186   table.samplelist > tbody > tr
1637 07 May 12 nicklas 187   {
2687 22 Sep 14 nicklas 188     height: 1.25cm;
1637 07 May 12 nicklas 189   }
1637 07 May 12 nicklas 190   
1637 07 May 12 nicklas 191   table.samplelist > tbody > tr > th
1637 07 May 12 nicklas 192   {
1637 07 May 12 nicklas 193     border: 1px solid #000000;
2687 22 Sep 14 nicklas 194     font-size: 1em;
1637 07 May 12 nicklas 195   }
1637 07 May 12 nicklas 196   
1637 07 May 12 nicklas 197   table.samplelist > tbody > tr > td
1637 07 May 12 nicklas 198   {
1637 07 May 12 nicklas 199     border: 1px solid #000000;
1637 07 May 12 nicklas 200     vertical-align: middle;
2687 22 Sep 14 nicklas 201     font-size: 1em;
1637 07 May 12 nicklas 202     padding: 0.5em;
1637 07 May 12 nicklas 203   }
1637 07 May 12 nicklas 204   
4093 12 Sep 16 nicklas 205   .all-are-reprocess .not-if-reprocess
4093 12 Sep 16 nicklas 206   {
4093 12 Sep 16 nicklas 207     color: #999999;
4093 12 Sep 16 nicklas 208   }
4093 12 Sep 16 nicklas 209   .all-are-reprocess .not-if-reprocess:after
4093 12 Sep 16 nicklas 210   {
4093 12 Sep 16 nicklas 211     content: 'n/a';
4093 12 Sep 16 nicklas 212   }
4093 12 Sep 16 nicklas 213   .all-are-reprocess .not-if-reprocess > span
4093 12 Sep 16 nicklas 214   {
4093 12 Sep 16 nicklas 215     display: none;
4093 12 Sep 16 nicklas 216   }
4093 12 Sep 16 nicklas 217   
1637 07 May 12 nicklas 218   .name
1637 07 May 12 nicklas 219   {
1637 07 May 12 nicklas 220     font-weight: bold;
6723 04 May 22 nicklas 221     width: 17%;
3466 25 Aug 15 nicklas 222     text-align: center;
1637 07 May 12 nicklas 223   }
6723 04 May 22 nicklas 224   .label
6723 04 May 22 nicklas 225   {
6723 04 May 22 nicklas 226     font-weight: bold;
6723 04 May 22 nicklas 227     text-align: center;
6723 04 May 22 nicklas 228     width: 17%;
6723 04 May 22 nicklas 229   }
3466 25 Aug 15 nicklas 230   .not-used
3466 25 Aug 15 nicklas 231   {
3466 25 Aug 15 nicklas 232     color: #999999;
3466 25 Aug 15 nicklas 233     font-style: italic;
3466 25 Aug 15 nicklas 234     font-weight: normal;
3466 25 Aug 15 nicklas 235     text-align: center;
3466 25 Aug 15 nicklas 236   }
1637 07 May 12 nicklas 237   .box
1637 07 May 12 nicklas 238   {
3466 25 Aug 15 nicklas 239     width: 15%;
3466 25 Aug 15 nicklas 240     text-align: center;
1637 07 May 12 nicklas 241   }
1637 07 May 12 nicklas 242   .qiacube
1637 07 May 12 nicklas 243   {
6723 04 May 22 nicklas 244     width: 8%;
1637 07 May 12 nicklas 245     text-align: center;
1637 07 May 12 nicklas 246   }
3466 25 Aug 15 nicklas 247   .nanodrop
3466 25 Aug 15 nicklas 248   {
6723 04 May 22 nicklas 249     width: 8%;
3466 25 Aug 15 nicklas 250     text-align: center;
3466 25 Aug 15 nicklas 251   }
1662 22 May 12 nicklas 252   table.samplelist > tbody > tr > td.remark
1637 07 May 12 nicklas 253   {
1637 07 May 12 nicklas 254     width: 45%;
1662 22 May 12 nicklas 255     font-size: 0.85em;
1662 22 May 12 nicklas 256     vertical-align: top;
1637 07 May 12 nicklas 257   }
1637 07 May 12 nicklas 258   
3168 05 Mar 15 nicklas 259   .hide-reagents .reagent
3168 05 Mar 15 nicklas 260   {
3168 05 Mar 15 nicklas 261     display: none;
3168 05 Mar 15 nicklas 262   }
6723 04 May 22 nicklas 263   #protocol-footer
6723 04 May 22 nicklas 264   {
6723 04 May 22 nicklas 265     margin-top: 0.5em;
6723 04 May 22 nicklas 266   }
1637 07 May 12 nicklas 267   </style>
2686 22 Sep 14 nicklas 268 </base:head>
2686 22 Sep 14 nicklas 269 <base:body>
2686 22 Sep 14 nicklas 270
1849 18 Feb 13 nicklas 271   <div class="paper">
2686 22 Sep 14 nicklas 272
2686 22 Sep 14 nicklas 273   <form name="reggie" id="wizard">
2686 22 Sep 14 nicklas 274
2686 22 Sep 14 nicklas 275   <div id="wizard-status"></div>
2686 22 Sep 14 nicklas 276
2686 22 Sep 14 nicklas 277   <div id="all-protocol" style="display: none;">
2686 22 Sep 14 nicklas 278
2686 22 Sep 14 nicklas 279   <div id="print-instructions" class="noprint fullwidth">
2970 24 Nov 14 nicklas 280     <base:button id="print-button" image="<%=home+"/images/print.png"%>" title="Print&hellip;" />
3168 05 Mar 15 nicklas 281     <label id="showLatestReagents" style="display: none;">
3168 05 Mar 15 nicklas 282       <input type="checkbox" id="showReagents" checked>
3466 25 Aug 15 nicklas 283       Include lot numbers from latest QIAcube run (<span id="latestQiaCubeDate"></span>)
3168 05 Mar 15 nicklas 284     </label>
2686 22 Sep 14 nicklas 285     <br clear="all">
1637 07 May 12 nicklas 286   </div>
2686 22 Sep 14 nicklas 287
2687 22 Sep 14 nicklas 288   <h1>Lab Tracking Protocol for Allprep isolation v.1.2 <span class="reggie">Reggie <%=reggie.getAbout().getVersion() %></span></h1>
1637 07 May 12 nicklas 289
4093 12 Sep 16 nicklas 290   <table class="protocolheader <%=allLysatesAreReProcess?"all-are-reprocess":""%>">
1637 07 May 12 nicklas 291   <tr>
2687 22 Sep 14 nicklas 292     <th>Lysis date</th>
4093 12 Sep 16 nicklas 293     <td class="not-if-reprocess"></td>
2687 22 Sep 14 nicklas 294     <th>Isolation date</th>
2687 22 Sep 14 nicklas 295     <td></td>
1637 07 May 12 nicklas 296   </tr>
1637 07 May 12 nicklas 297   <tr>
2687 22 Sep 14 nicklas 298     <th>Operator</th>
4093 12 Sep 16 nicklas 299     <td class="not-if-reprocess"></td>
2687 22 Sep 14 nicklas 300     <th>Operator</th>
2687 22 Sep 14 nicklas 301     <td></td>
1637 07 May 12 nicklas 302   </tr>
1637 07 May 12 nicklas 303   <tr>
2687 22 Sep 14 nicklas 304     <th>RLT Plus buffer</th>
4093 12 Sep 16 nicklas 305     <td class="not-if-reprocess"><span id="rltPlusBuffer" class="reagent"></span></td>
2687 22 Sep 14 nicklas 306     <th>AllPrep DNA/RNA Mini kit</th>
3168 05 Mar 15 nicklas 307     <td><span id="allPrepMiniKit" class="reagent"></span></td>
1637 07 May 12 nicklas 308   </tr>
2687 22 Sep 14 nicklas 309   <tr>
2687 22 Sep 14 nicklas 310     <th>Beta-Mercaptoetanol</th>
4093 12 Sep 16 nicklas 311     <td class="not-if-reprocess"><span id="betaMercaptoetanol" class="reagent"></span></td>
2687 22 Sep 14 nicklas 312     <th>ETOH 70%</th>
3168 05 Mar 15 nicklas 313     <td><span id="etoh70" class="reagent"></span></td>
2687 22 Sep 14 nicklas 314   </tr>
2687 22 Sep 14 nicklas 315   <tr>
2687 22 Sep 14 nicklas 316     <th>Reagent-DX</th>
4093 12 Sep 16 nicklas 317     <td class="not-if-reprocess"><span id="reagentDx" class="reagent"></span></td>
2687 22 Sep 14 nicklas 318     <th>Buffer RW1</th>
3168 05 Mar 15 nicklas 319     <td><span id="bufferRw1" class="reagent"></span></td>
2687 22 Sep 14 nicklas 320   </tr>
2687 22 Sep 14 nicklas 321   <tr>
2687 22 Sep 14 nicklas 322     <th>QIAshredder column</th>
4093 12 Sep 16 nicklas 323     <td class="not-if-reprocess"><span id="qiaShredderColumn" class="reagent"></span></td>
2687 22 Sep 14 nicklas 324     <th>Buffer RPE</th>
3168 05 Mar 15 nicklas 325     <td><span id="bufferRpe" class="reagent"></span></td>
2687 22 Sep 14 nicklas 326   </tr>
2687 22 Sep 14 nicklas 327   <tr>
3466 25 Aug 15 nicklas 328     <td colspan="2" rowspan="6" style="text-align: center; font-style: italic;">
3479 04 Sep 15 nicklas 329       <table style="width: 100%;">
3479 04 Sep 15 nicklas 330       <tr style="border-bottom-width: 0;">
3479 04 Sep 15 nicklas 331         <td style="vertical-align: top; text-align: left; font-weight: bold; font-style: normal;">
3479 04 Sep 15 nicklas 332           QIAcube<br>loading<br>chart
3479 04 Sep 15 nicklas 333         </td>
3479 04 Sep 15 nicklas 334         <td>
3479 04 Sep 15 nicklas 335           <img src="../images/qiacube-<%=lysates.size()%>.png"><br>
3479 04 Sep 15 nicklas 336           <b>A:</b> RNase free water <span id="rnaseFreeWaterVolume"><%=RNASE_FREE_WATER_VOLUME[lysates.size()-1] %> µl</span>
3479 04 Sep 15 nicklas 337         </td>
3479 04 Sep 15 nicklas 338       </tr>
3479 04 Sep 15 nicklas 339       </table>
3466 25 Aug 15 nicklas 340     </td>
2687 22 Sep 14 nicklas 341     <th>Buffer AW1</th>
3168 05 Mar 15 nicklas 342     <td><span id="bufferAw1" class="reagent"></td>
2687 22 Sep 14 nicklas 343   </tr>
2687 22 Sep 14 nicklas 344   <tr>
2687 22 Sep 14 nicklas 345     <th>Buffer AW2</th>
3168 05 Mar 15 nicklas 346     <td><span id="bufferAw2" class="reagent"></td>
2687 22 Sep 14 nicklas 347   </tr>
2687 22 Sep 14 nicklas 348   <tr>
2687 22 Sep 14 nicklas 349     <th>Buffer EB</th>
3168 05 Mar 15 nicklas 350     <td><span id="bufferEb" class="reagent"></td>
2687 22 Sep 14 nicklas 351   </tr>
2687 22 Sep 14 nicklas 352   <tr>
2687 22 Sep 14 nicklas 353     <th>RNase free water</th>
3168 05 Mar 15 nicklas 354     <td><span id="rnaseFreeWater" class="reagent"></td>
2687 22 Sep 14 nicklas 355   </tr>
2687 22 Sep 14 nicklas 356   <tr>
2687 22 Sep 14 nicklas 357     <th>AllPrep DNA Mini Spin Column</th>
3168 05 Mar 15 nicklas 358     <td><span id="allPrepDnaColumn" class="reagent"></td>
2687 22 Sep 14 nicklas 359   </tr>
2687 22 Sep 14 nicklas 360   <tr>
2687 22 Sep 14 nicklas 361     <th>RNeasy Mini Spin Column</th>
3168 05 Mar 15 nicklas 362     <td><span id="rneasyColumn" class="reagent"></td>
2687 22 Sep 14 nicklas 363   </tr>
2687 22 Sep 14 nicklas 364   </tbody>
1637 07 May 12 nicklas 365   </table>
3466 25 Aug 15 nicklas 366   
3466 25 Aug 15 nicklas 367   
1637 07 May 12 nicklas 368   <table style="width: 100%;" class="samplelist">
1637 07 May 12 nicklas 369   <tr>
1637 07 May 12 nicklas 370     <th class="name">Sample</th>
6723 04 May 22 nicklas 371     <%
6723 04 May 22 nicklas 372     if (showLabelColumn)
6723 04 May 22 nicklas 373     {
6723 04 May 22 nicklas 374       %>
6723 04 May 22 nicklas 375       <th class="label">Label¹</th>
6723 04 May 22 nicklas 376       <%
6723 04 May 22 nicklas 377     }
6723 04 May 22 nicklas 378     %>
1637 07 May 12 nicklas 379     <th class="box">Storage box</th>
3466 25 Aug 15 nicklas 380     <th class="qiacube">QIAcube<br>position</th>
3466 25 Aug 15 nicklas 381     <th class="nanodrop">NanoDrop<br>position</th>
1637 07 May 12 nicklas 382     <th class="remark">Remark</th>
1637 07 May 12 nicklas 383   </tr>
1637 07 May 12 nicklas 384   <%
3467 26 Aug 15 nicklas 385   // NanoDrop positions are filled without holes
3467 26 Aug 15 nicklas 386   // RNA always starts in a new column
3467 26 Aug 15 nicklas 387   // There is always a "blank" well after all samples
3467 26 Aug 15 nicklas 388   int ndCol = 0;
3467 26 Aug 15 nicklas 389   int ndRow = 0;
3467 26 Aug 15 nicklas 390   int rnaOffset = lysates.size() > 7 ? 2 : 1;
3467 26 Aug 15 nicklas 391   WellCoordinateFormatter rowF = new WellCoordinateFormatter(true);
3467 26 Aug 15 nicklas 392   WellCoordinateFormatter colF = new WellCoordinateFormatter(false);
3467 26 Aug 15 nicklas 393   
3466 25 Aug 15 nicklas 394   for (int qiacubePos = 1; qiacubePos <= 12; qiacubePos++)
1637 07 May 12 nicklas 395   {
4093 12 Sep 16 nicklas 396     LysateWithOptions lwo = getExtractForPos(qiacubePos, lysates);
4093 12 Sep 16 nicklas 397     if (lwo != null)
1662 22 May 12 nicklas 398     {
4093 12 Sep 16 nicklas 399       Extract lysate = lwo.lysate;
3466 25 Aug 15 nicklas 400       BioMaterial specimen = lysate.getParent();
3466 25 Aug 15 nicklas 401       Float usedQuantity = null;
3466 25 Aug 15 nicklas 402       if (specimen != null) 
3466 25 Aug 15 nicklas 403       {
3466 25 Aug 15 nicklas 404         BioMaterialEventSource source = lysate.getCreationEvent().getEventSource(specimen);
3466 25 Aug 15 nicklas 405         usedQuantity = source.getUsedQuantity();
3466 25 Aug 15 nicklas 406       }
3466 25 Aug 15 nicklas 407       BioWell well = lysate.getBioWell();
3466 25 Aug 15 nicklas 408       BioPlate plate = well.getPlate();
4093 12 Sep 16 nicklas 409       String img = lwo.isYellow ? "<img src=\"../images/yellow-label.png\">" : "";
3466 25 Aug 15 nicklas 410       %>
4093 12 Sep 16 nicklas 411       <tr class="<%=lwo.isYellow ? "yellow-specimen" : "" %>">
3740 11 Feb 16 nicklas 412         <td class="name if-yellow"><%=img+HTML.encodeTags(lysate.getName()) %></td>
6723 04 May 22 nicklas 413         <%
6723 04 May 22 nicklas 414         if (showLabelColumn)
6723 04 May 22 nicklas 415         {
6723 04 May 22 nicklas 416           %>
6723 04 May 22 nicklas 417           <td class="label"><%=HTML.encodeTags(lwo.label)%></td>
6723 04 May 22 nicklas 418           <%
6723 04 May 22 nicklas 419         }
6723 04 May 22 nicklas 420         %>
3466 25 Aug 15 nicklas 421         <td class="box"><%=HTML.encodeTags(plate.getName()) %> <%=well.getCoordinate() %></td>
3466 25 Aug 15 nicklas 422         <td class="qiacube"><%=qiacubePos %></td>
6723 04 May 22 nicklas 423         <td class="nanodrop"><%=rowF.format(ndRow)+colF.format(ndCol) %> / <%=rowF.format(ndRow)+colF.format(ndCol+rnaOffset) %></td>
3466 25 Aug 15 nicklas 424         <td class="remark">
3466 25 Aug 15 nicklas 425           <%
4093 12 Sep 16 nicklas 426           if (lwo.reProcessFromLysate)
3466 25 Aug 15 nicklas 427           {
3466 25 Aug 15 nicklas 428             %>
4093 12 Sep 16 nicklas 429             Re-extract from lysate!
4093 12 Sep 16 nicklas 430             <%
4093 12 Sep 16 nicklas 431           }
4093 12 Sep 16 nicklas 432           else if (usedQuantity != null)
4093 12 Sep 16 nicklas 433           {
4093 12 Sep 16 nicklas 434             %>
3466 25 Aug 15 nicklas 435             ApWeight: <%=Values.formatNumber(usedQuantity / 1000, 0, "mg") %>
3466 25 Aug 15 nicklas 436             <%
3466 25 Aug 15 nicklas 437           }
3466 25 Aug 15 nicklas 438           %>
3466 25 Aug 15 nicklas 439         </td>
3466 25 Aug 15 nicklas 440       </tr>
3466 25 Aug 15 nicklas 441       <%
3467 26 Aug 15 nicklas 442       ndRow++;
3467 26 Aug 15 nicklas 443       if (ndRow == 8)
3467 26 Aug 15 nicklas 444       {
3467 26 Aug 15 nicklas 445         ndRow = 0;
3467 26 Aug 15 nicklas 446         ndCol++;
3467 26 Aug 15 nicklas 447       }
1662 22 May 12 nicklas 448     }
3466 25 Aug 15 nicklas 449     else
3466 25 Aug 15 nicklas 450     {
3466 25 Aug 15 nicklas 451       boolean counterbalance = useCounterBalance(qiacubePos, lysates.size());
3466 25 Aug 15 nicklas 452       %>
3466 25 Aug 15 nicklas 453       <tr>
1662 22 May 12 nicklas 454         <%
3466 25 Aug 15 nicklas 455         if (counterbalance)
1662 22 May 12 nicklas 456         {
1662 22 May 12 nicklas 457           %>
3466 25 Aug 15 nicklas 458           <td class="name"><i>Counterbalance</i></td>
1662 22 May 12 nicklas 459           <%
1662 22 May 12 nicklas 460         }
3466 25 Aug 15 nicklas 461         else
3466 25 Aug 15 nicklas 462         {
3466 25 Aug 15 nicklas 463           %>
3466 25 Aug 15 nicklas 464           <td class="name not-used">Not used</td>
3466 25 Aug 15 nicklas 465           <%
3466 25 Aug 15 nicklas 466         }
1662 22 May 12 nicklas 467         %>
6724 04 May 22 nicklas 468         <%
6724 04 May 22 nicklas 469         if (showLabelColumn)
6724 04 May 22 nicklas 470         {
6724 04 May 22 nicklas 471           %>
6724 04 May 22 nicklas 472           <td class="label"></td>
6724 04 May 22 nicklas 473           <%
6724 04 May 22 nicklas 474         }
6724 04 May 22 nicklas 475         %>
3466 25 Aug 15 nicklas 476         <td class="box"></td>
3466 25 Aug 15 nicklas 477         <td class="qiacube <%=counterbalance ? "" : "not-used"%>"><%=qiacubePos %></td>
3466 25 Aug 15 nicklas 478         <td class="nanodrop"></td>
3466 25 Aug 15 nicklas 479         <td class="remark"></td>
3466 25 Aug 15 nicklas 480       </tr>
3466 25 Aug 15 nicklas 481       <%
3466 25 Aug 15 nicklas 482     }
1637 07 May 12 nicklas 483   }
1637 07 May 12 nicklas 484   %>
1637 07 May 12 nicklas 485   </table>
6723 04 May 22 nicklas 486   <%
6723 04 May 22 nicklas 487   if (showLabelColumn)
6723 04 May 22 nicklas 488   {
6723 04 May 22 nicklas 489     %>
6723 04 May 22 nicklas 490     <div id="protocol-footer">
6723 04 May 22 nicklas 491     ¹ Some SCAN-B tubes have a non-standard label.
6723 04 May 22 nicklas 492     </div>
6723 04 May 22 nicklas 493     <%
6723 04 May 22 nicklas 494   }
6723 04 May 22 nicklas 495   %>
2686 22 Sep 14 nicklas 496 </div>
2686 22 Sep 14 nicklas 497 </form>
2686 22 Sep 14 nicklas 498 </div>
2686 22 Sep 14 nicklas 499 </base:body>
2686 22 Sep 14 nicklas 500 </base:page>
1637 07 May 12 nicklas 501 <%
3469 27 Aug 15 nicklas 502   dc.commit();
1637 07 May 12 nicklas 503 }
1637 07 May 12 nicklas 504 finally
1637 07 May 12 nicklas 505 {
1637 07 May 12 nicklas 506   if (dc != null) dc.close();
1637 07 May 12 nicklas 507 }
1637 07 May 12 nicklas 508 %>