Merge ssh://jumpgate.caltech.edu/var/htsworkflow/htsworkflow
authorDiane Trout <diane@caltech.edu>
Thu, 21 Jun 2012 18:13:04 +0000 (11:13 -0700)
committerDiane Trout <diane@caltech.edu>
Thu, 21 Jun 2012 18:13:04 +0000 (11:13 -0700)
95 files changed:
encode_submission/encode_find.py
encode_submission/find-lib-by-cell.sparql
encode_submission/ucsc_gather.py
htsworkflow/frontend/experiments/admin.py
htsworkflow/frontend/experiments/fixtures/initial_data.json
htsworkflow/frontend/experiments/fixtures/test_flowcells.json
htsworkflow/frontend/experiments/models.py
htsworkflow/frontend/experiments/tests.py
htsworkflow/frontend/experiments/views.py
htsworkflow/frontend/samples/fixtures/initial_data.json
htsworkflow/frontend/templates/experiments/flowcell_header.html
htsworkflow/frontend/templates/experiments/sequencer.html [new file with mode: 0644]
htsworkflow/frontend/urls.py
htsworkflow/pipelines/bustard.py
htsworkflow/pipelines/eland.py
htsworkflow/pipelines/firecrest.py
htsworkflow/pipelines/gerald.py
htsworkflow/pipelines/ipar.py
htsworkflow/pipelines/runfolder.py
htsworkflow/pipelines/summary.py
htsworkflow/pipelines/test/simulate_runfolder.py
htsworkflow/pipelines/test/test_runfolder026.py
htsworkflow/pipelines/test/test_runfolder030.py
htsworkflow/pipelines/test/test_runfolder110.py
htsworkflow/pipelines/test/test_runfolder_casava_1_7.py
htsworkflow/pipelines/test/test_runfolder_ipar100.py
htsworkflow/pipelines/test/test_runfolder_ipar130.py
htsworkflow/pipelines/test/test_runfolder_pair.py
htsworkflow/pipelines/test/test_runfolder_rta.py
htsworkflow/pipelines/test/test_runfolder_rta160.py
htsworkflow/pipelines/test/test_runfolder_rta180.py
htsworkflow/pipelines/test/test_runfolder_rta1_12.py
htsworkflow/pipelines/test/test_summary.py
htsworkflow/pipelines/test/testdata/1_12/Status.htm [new file with mode: 0755]
htsworkflow/pipelines/test/testdata/1_12/Status_Files/ByCycle.htm [new file with mode: 0755]
htsworkflow/pipelines/test/testdata/1_12/Status_Files/ByCycle.js [new file with mode: 0755]
htsworkflow/pipelines/test/testdata/1_12/Status_Files/ByCycleFrame.htm [new file with mode: 0755]
htsworkflow/pipelines/test/testdata/1_12/Status_Files/ByLane.htm [new file with mode: 0755]
htsworkflow/pipelines/test/testdata/1_12/Status_Files/ByLane.js [new file with mode: 0755]
htsworkflow/pipelines/test/testdata/1_12/Status_Files/Charts.htm [new file with mode: 0755]
htsworkflow/pipelines/test/testdata/1_12/Status_Files/Charts.js [new file with mode: 0755]
htsworkflow/pipelines/test/testdata/1_12/Status_Files/Controls.htm [new file with mode: 0755]
htsworkflow/pipelines/test/testdata/1_12/Status_Files/Controls.js [new file with mode: 0755]
htsworkflow/pipelines/test/testdata/1_12/Status_Files/Controls.xsl [new file with mode: 0755]
htsworkflow/pipelines/test/testdata/1_12/Status_Files/Error.htm [new file with mode: 0755]
htsworkflow/pipelines/test/testdata/1_12/Status_Files/RefreshBtn/r1.png [new file with mode: 0755]
htsworkflow/pipelines/test/testdata/1_12/Status_Files/RefreshBtn/r2.png [new file with mode: 0755]
htsworkflow/pipelines/test/testdata/1_12/Status_Files/RefreshBtn/r3.png [new file with mode: 0755]
htsworkflow/pipelines/test/testdata/1_12/Status_Files/RunInfo.htm [new file with mode: 0755]
htsworkflow/pipelines/test/testdata/1_12/Status_Files/RunInfo.xsl [new file with mode: 0755]
htsworkflow/pipelines/test/testdata/1_12/Status_Files/RunName.xsl [new file with mode: 0755]
htsworkflow/pipelines/test/testdata/1_12/Status_Files/Status.css [new file with mode: 0755]
htsworkflow/pipelines/test/testdata/1_12/Status_Files/Status.js [new file with mode: 0755]
htsworkflow/pipelines/test/testdata/1_12/Status_Files/StatusError.htm [new file with mode: 0755]
htsworkflow/pipelines/test/testdata/1_12/Status_Files/StatusUpdate.xsl [new file with mode: 0755]
htsworkflow/pipelines/test/testdata/1_12/Status_Files/Summary.htm [new file with mode: 0755]
htsworkflow/pipelines/test/testdata/1_12/Status_Files/Summary.js [new file with mode: 0755]
htsworkflow/pipelines/test/testdata/1_12/Status_Files/Summary.xsl [new file with mode: 0755]
htsworkflow/pipelines/test/testdata/1_12/Status_Files/TilesPerLane.xsl [new file with mode: 0755]
htsworkflow/pipelines/test/testdata/1_12/Status_Files/illumina.png [new file with mode: 0755]
htsworkflow/pipelines/test/testdata/1_12/Summary-rta1_12.htm [new file with mode: 0755]
htsworkflow/pipelines/test/testdata/1_12/aligned_config_1_12.xml [new file with mode: 0644]
htsworkflow/pipelines/test/testdata/1_12/demultiplex_1.12.4.2.xml [new file with mode: 0644]
htsworkflow/pipelines/test/testdata/1_12/demultiplexed_bustard_1.12.4.2.xml [new file with mode: 0644]
htsworkflow/pipelines/test/testdata/1_12/demultiplexed_summary_1.12.4.2.xml [new file with mode: 0644]
htsworkflow/pipelines/test/testdata/1_12/reports/Process Control.png [new file with mode: 0755]
htsworkflow/pipelines/test/testdata/1_12/reports/Status.xml [new file with mode: 0755]
htsworkflow/pipelines/test/testdata/1_12/reports/StatusUpdate.xml [new file with mode: 0755]
htsworkflow/pipelines/test/testdata/1_12/reports/Summary/read1.xml [new file with mode: 0755]
htsworkflow/pipelines/test/testdata/1_12/reports/Summary/read2.xml [new file with mode: 0755]
htsworkflow/pipelines/test/testdata/1_12/rta_basecalls_config_1.12.4.2.xml [new file with mode: 0755]
htsworkflow/pipelines/test/testdata/1_12/rta_intensities_config_1.12.4.2.xml [new file with mode: 0755]
htsworkflow/pipelines/test/testdata/aligned_config_1_12.xml [deleted file]
htsworkflow/pipelines/test/testdata/demultiplex_1.12.4.2.xml [deleted file]
htsworkflow/pipelines/test/testdata/demultiplexed_bustard_1.12.4.2.xml [deleted file]
htsworkflow/pipelines/test/testdata/demultiplexed_summary_1.12.4.2.xml [deleted file]
htsworkflow/pipelines/test/testdata/rta_basecalls_config_1.12.4.2.xml [deleted file]
htsworkflow/pipelines/test/testdata/rta_intensities_config_1.12.4.2.xml [deleted file]
htsworkflow/submission/daf.py
htsworkflow/submission/geo.py
htsworkflow/submission/ncbi.py [new file with mode: 0644]
htsworkflow/submission/submission.py
htsworkflow/templates/geo_files.sparql [new file with mode: 0644]
htsworkflow/templates/geo_platform.sparql [new file with mode: 0644]
htsworkflow/templates/geo_samples.sparql [new file with mode: 0644]
htsworkflow/templates/geo_series.sparql [new file with mode: 0644]
htsworkflow/templates/geo_submission.soft
htsworkflow/templates/geo_submission.sparql [deleted file]
htsworkflow/templates/rdf_report.html [new file with mode: 0644]
htsworkflow/templates/sra.rdfxml.xsl [new file with mode: 0644]
htsworkflow/util/alphanum.py
htsworkflow/util/rdfhelp.py
htsworkflow/util/test/extra.turtle [new file with mode: 0644]
htsworkflow/util/test/test_alphanum.py
htsworkflow/util/test/test_rdfhelp.py

index 24ed16872cf7654d25cd40f5b0ad977976512e52..9b65fdef57f58f1635e6d1dea7dc84023bd6bc76 100644 (file)
@@ -20,6 +20,9 @@ import sys
 import urllib
 import urlparse
 
+if not 'DJANGO_SETTINGS_MODULE' in os.environ:
+    os.environ['DJANGO_SETTINGS_MODULE'] = 'htsworkflow.settings'
+
 from htsworkflow.submission import daf, ucsc
 
 from htsworkflow.util import api
@@ -124,7 +127,7 @@ def main(cmdline=None):
             load_encodedcc_files(model, **track_info )
 
     if opts.sparql is not None:
-        sparql_query(model, opts.sparql)
+        sparql_query(model, opts.sparql, 'html')
 
     if opts.find_submission_with_no_library:
         report_submissions_with_no_library(model)
@@ -183,7 +186,7 @@ def make_parser():
 
 
 def load_my_submissions(model, limit=None, cookie=None):
-    """Parse all the submissions from UCSC into model
+    """Parse all of my submissions from encodesubmit into model
     It will look at the global USER_URL to figure out who to scrape
     cookie contains the session cookie, if none, will attempt to login
     """
index c4585c5bd4ce6cd7d038a85c64c993b2fee94934..70bd1457e388274021cde64f8d8b0eae232482c5 100644 (file)
@@ -6,12 +6,15 @@ PREFIX libraryOntology:<http://jumpgate.caltech.edu/wiki/LibraryOntology#>
 
 SELECT distinct ?liburn ?cell ?replicate ?subid ?name ?submission_date
 WHERE {
-    ?subid ucscSubmission:name ?name .
-    OPTIONAL { ?subid ucscSubmission:library_urn ?liburn ;
-                       libraryOntology:date ?submission_date .
-               ?liburn libraryOntology:cell_line ?cell ;
-                       libraryOntology:replicate ?replicate . }
+    ?subid ucscSubmission:name ?name ;
+           ucscSubmission:library_urn ?liburn ;
+           libraryOntology:date ?submission_date.
+    ?liburn libraryOntology:cell_line ?cell ;
+            libraryOntology:replicate ?replicate ;
+            libraryOntology:species ?species .
+    OPTIONAL { ?liburn libraryOntology:treatement ?treatment . }
+    FILTER(regex(?species, "Homo sapiens", "i"))
     #filter(?submission_date > "2011-04-01T00:00:00Z"^^xsd:dateTime)
     #filter(!bound(?liburn))
 }
-ORDER BY ?submission_date ?cell ?replicate ?liburn
+ORDER BY ?cell ?replicate ?liburn ?submission_date
index 1cdf0118f6f990943adec84ab90492be44f360fe..c45e3820bbc8b9f146684bef9ed8f5443fb03f8e 100644 (file)
@@ -39,11 +39,19 @@ from htsworkflow.submission.condorfastq import CondorFastqExtract
 
 logger = logging.getLogger('ucsc_gather')
 
+TAR = '/bin/tar'
+LFTP = '/usr/bin/lftp'
+
 def main(cmdline=None):
     parser = make_parser()
     opts, args = parser.parse_args(cmdline)
     submission_uri = None
 
+    global TAR
+    global LFTP
+    TAR = opts.tar
+    LFTP = opts.lftp
+
     if opts.debug:
         logging.basicConfig(level = logging.DEBUG )
     elif opts.verbose:
@@ -56,7 +64,7 @@ def main(cmdline=None):
     model = get_model(opts.model, opts.db_path)
     mapper = None
     if opts.name:
-        mapper = UCSCSubmssion(opts.name, opts.daf,  model)
+        mapper = UCSCSubmission(opts.name, opts.daf,  model)
         if opts.library_url is not None:
             mapper.library_url = opts.library_url
         submission_uri = get_submission_uri(opts.name)
@@ -93,6 +101,10 @@ def main(cmdline=None):
         mapper.scan_submission_dirs(results)
 
     if opts.make_ddf:
+        if not os.path.exists(TAR):
+            parser.error("%s does not exist, please specify --tar" % (TAR,))
+        if not os.path.exists(LFTP):
+            parser.error("%s does not exist, please specify --lftp" % (LFTP,))
         make_all_ddfs(mapper, results, opts.daf, force=opts.force)
 
     if opts.zip_ddf:
@@ -120,6 +132,10 @@ def make_parser():
     model.add_option('--sparql', default=None, help="execute sparql query")
     model.add_option('--print-rdf', action="store_true", default=False,
       help="print ending model state")
+    model.add_option('--tar', default=TAR,
+                     help="override path to tar command")
+    model.add_option('--lftp', default=LFTP,
+                     help="override path to lftp command")
     parser.add_option_group(model)
     # commands
     commands = OptionGroup(parser, 'commands')
@@ -157,7 +173,7 @@ def make_parser():
 
 def make_all_ddfs(view_map, library_result_map, daf_name, make_condor=True, force=False):
     dag_fragment = []
-    for lib_id, result_dir in library_result_map:
+    for lib_id, result_dir in library_result_map.items():
         submissionNode = view_map.get_submission_node(result_dir)
         dag_fragment.extend(
             make_ddf(view_map, submissionNode, daf_name, make_condor, result_dir)
@@ -301,7 +317,7 @@ def zip_ddfs(view_map, library_result_map, daf_name):
 def make_condor_archive_script(name, files, outdir=None):
     script = """Universe = vanilla
 
-Executable = /bin/tar
+Executable = %(tar)s
 arguments = czvhf ../%(archivename)s %(filelist)s
 
 Error = compress.out.$(Process).log
@@ -323,7 +339,8 @@ queue
     context = {'archivename': make_submission_name(name),
                'filelist': " ".join(files),
                'initialdir': os.path.abspath(outdir),
-               'user': os.getlogin()}
+               'user': os.getlogin(),
+               'tar': TAR}
 
     condor_script = os.path.join(outdir, make_condor_name(name, 'archive'))
     condor_stream = open(condor_script,'w')
@@ -332,11 +349,11 @@ queue
     return condor_script
 
 
-def make_condor_upload_script(name, outdir=None):
+def make_condor_upload_script(name, lftp, outdir=None):
     script = """Universe = vanilla
 
-Executable = /usr/bin/lftp
-arguments = -c put ../%(archivename)s -o ftp://%(ftpuser)s:%(ftppassword)s@%(ftphost)s/%(archivename)s
+Executable = %(lftp)s
+arguments = -c put %(archivename)s -o ftp://%(ftpuser)s:%(ftppassword)s@%(ftphost)s/%(archivename)s
 
 Error = upload.out.$(Process).log
 Output = upload.out.$(Process).log
@@ -358,7 +375,8 @@ queue
                'user': os.getlogin(),
                'ftpuser': ftpuser,
                'ftppassword': ftppassword,
-               'ftphost': encodeftp}
+               'ftphost': encodeftp,
+               'lftp': LFTP}
 
     condor_script = os.path.join(outdir, make_condor_name(name, 'upload'))
     condor_stream = open(condor_script,'w')
index fa0f15d0141a4473fc02098049d47bea1c3f2900..318625f9405d96cb39c88f985bc89a933f02d2f0 100644 (file)
@@ -45,12 +45,12 @@ admin.site.register(DataRun, DataRunOptions)
 class FileTypeAdmin(admin.ModelAdmin):
     list_display = ('name', 'mimetype', 'regex')
 admin.site.register(FileType, FileTypeAdmin)
-  
+
 # lane form setup needs to come before Flowcell form config
 # as flowcell refers to the LaneInline class
 class LaneForm(ModelForm):
     comment = CharField(widget=TextInput(attrs={'size':'80'}), required=False)
-    
+
     class Meta:
         model = Lane
 
@@ -89,7 +89,7 @@ class LaneOptions(admin.ModelAdmin):
       }),
     )
 admin.site.register(Lane, LaneOptions)
-    
+
 class FlowCellOptions(admin.ModelAdmin):
     date_hierarchy = "run_date"
     save_on_top = True
@@ -126,6 +126,9 @@ class ClusterStationOptions(admin.ModelAdmin):
 admin.site.register(ClusterStation, ClusterStationOptions)
 
 class SequencerOptions(admin.ModelAdmin):
-    list_display = ('name', )
-    fieldsets = ( ( None, { 'fields': ( 'name', ) } ), )
+    list_display = ('name', 'instrument_name', 'model')
+    fieldsets = ( ( None,
+                    { 'fields': (
+                        'name', 'instrument_name', 'serial_number',
+                        'model', 'comment') } ), )
 admin.site.register(Sequencer, SequencerOptions)
index 67a6393cf0f1b939dfb46950c5755c354e3192ca..3b4d1d57fec7df03be3723188c44d66a2d87aae3 100644 (file)
       "name": "QSEQ tarfile",
       "regex": ".*_l(?P<lane>[1-8])_r(?P<end>[1-4])\\.tar\\.bz2\\Z(?ms)"
     }
+  },
+  { "model": "experiments.Sequencer",
+    "pk": 1,
+    "fields": {
+      "name": "Rotifer",
+      "instrument_name": "ILLUMINA-33A494",
+      "serial_number": "",
+      "model": "Illumina Genome Analyzer II",
+      "comment": "after 2010 pipeline name, was exchanged for hiseq"
+    }
+  },
+  { "model": "experiments.Sequencer",
+    "pk": 2,
+    "fields": {
+      "name": "Tardigrade",
+      "instrument_name": "ILLUMINA-EC5D15",
+      "serial_number": "",
+      "model": "Illumina Genome Analyzer IIx",
+      "comment": "after 2010 pipeline name"
+    }
+  },
+  { "model": "experiments.Sequencer",
+    "pk": 3,
+    "fields": {
+      "name": "Elsewhere",
+      "instrument_name": "",
+      "serial_number": "",
+      "model": "Unknown",
+      "comment": "Sequenced somewhere else"
+    }
+  },
+  { "model": "experiments.Sequencer",
+    "pk": 4,
+    "fields": {
+      "name": "Volvox",
+      "instrument_name": "HWI-ST0787",
+      "serial_number": "",
+      "model": "Illumina HiSeq 2000",
+      "comment": ""
+    }
+  },
+  { "model": "experiments.Sequencer",
+    "pk": 5,
+    "fields": {
+      "name": "Tardigrade (older)",
+      "instrument_name": "HWUSI-EAS627",
+      "serial_number": "",
+      "model": "Illumina Genome Analyzer II",
+      "comment": "earlier version of tardigrade"
+    }
+  },
+  { "model": "experiments.Sequencer",
+    "pk": 6,
+    "fields": {
+      "name": "Rotifer (older)",
+      "instrument_name": "HWUSI-EAS229",
+      "serial_number": "",
+      "model": "Illumina Genome Analyzer II",
+      "comment": "earlier rotifer name"
+    }
+  },
+  { "model": "experiments.Sequencer",
+    "pk": 7,
+    "fields": {
+      "name": "First sequencer",
+      "instrument_name": "USI-EAS44",
+      "serial_number": "",
+      "model": "Illumina Genome Analyzer I",
+      "comment": "our first sequencer"
+    }
   }
-
 ]
\ No newline at end of file
index 63cf30bcab89bd77b788fd296140ba95e7f712f7..59d5afee450538635e336256d2e044df312fb161 100644 (file)
  {"pk": 1, "model": "experiments.clusterstation", "fields": {"name": "old"}},
  {"pk": 2, "model": "experiments.clusterstation", "fields": {"name": "loaner"}},
  {"pk": 3, "model": "experiments.clusterstation", "fields": {"name": "new"}},
- {"pk": 1, "model": "experiments.sequencer", "fields": {"name": "Rotifer (HWI-EAS229)"}},
- {"pk": 2, "model": "experiments.sequencer", "fields": {"name": "Tardigrade"}},
+ {"pk": 1, "model": "experiments.sequencer",
+  "fields": { "name": "Rotifer (HWI-EAS229)" }},
+ {"pk": 2, "model": "experiments.sequencer",
+  "fields": {"name": "Tardigrade",
+             "instrument_name": "ILLUMINA-EC5D15",
+             "model": "Illumina Genome Analyzer IIx"}
+ },
  {"pk": 3, "model": "experiments.sequencer", "fields": {"name": "Sequenced somewhere else."}},
  {"pk": 153, "model": "experiments.flowcell",
   "fields": {
index bd92eb4037269bf8a9e5c24ca70b2671057a1878..2f97f155de06e50cca7924422a69e916f14263ac 100644 (file)
@@ -51,10 +51,23 @@ class ClusterStation(models.Model):
     return unicode(self.name)
 
 class Sequencer(models.Model):
-  name = models.CharField(max_length=50, unique=True)
+  name = models.CharField(max_length=50, db_index=True)
+  instrument_name = models.CharField(max_length=50, db_index=True)
+  serial_number = models.CharField(max_length=50, db_index=True)
+  model = models.CharField(max_length=255)
+  comment = models.CharField(max_length=255)
 
   def __unicode__(self):
-    return unicode(self.name)
+      name = [unicode(self.name)]
+      if self.instrument_name is not None:
+          name.append("(%s)" % (unicode(self.instrument_name),))
+      return " ".join(name)
+
+  @models.permalink
+  def get_absolute_url(self):
+      return ('htsworkflow.frontend.experiments.views.sequencer',
+              [self.id])
+
 
 class FlowCell(models.Model):
   flowcell_id = models.CharField(max_length=20, unique=True, db_index=True)
index 8ec46e0619aa6749bd0b7e631c27d2b226b77bac..e54d630497e2f3b9c412b7364f50d06dcf659cd3 100644 (file)
@@ -409,3 +409,43 @@ def multi_lane_to_dict(lane):
     """Convert a list of lane entries into a dictionary indexed by library ID
     """
     return dict( ((x['library_id'],x) for x in lane) )
+
+class TestSequencer(TestCase):
+    fixtures = ['test_flowcells.json',
+                ]
+
+    def test_name_generation(self):
+        seq = models.Sequencer()
+        seq.name = "Seq1"
+        seq.instrument_name = "HWI-SEQ1"
+        seq.model = "Imaginary 5000"
+
+        self.failUnlessEqual(unicode(seq), "Seq1 (HWI-SEQ1)")
+
+    def test_lookup(self):
+        fc = models.FlowCell.objects.get(pk=153)
+        self.failUnlessEqual(fc.sequencer.model,
+                             "Illumina Genome Analyzer IIx")
+        self.failUnlessEqual(fc.sequencer.instrument_name,
+                             "ILLUMINA-EC5D15")
+
+    def test_rdf(self):
+        response = self.client.get('/flowcell/FC12150/', apidata)
+        tree = fromstring(response.content)
+        divs = tree.xpath('//div[@rel="libns:sequenced_by"]',
+                          namespaces=NSMAP)
+        self.failUnlessEqual(len(divs), 1)
+        self.failUnlessEqual(divs[0].attrib['rel'], 'libns:sequenced_by')
+        self.failUnlessEqual(divs[0].attrib['resource'], '/sequencer/2')
+
+        name = divs[0].xpath('./span[@property="libns:sequencer_name"]')
+        self.failUnlessEqual(len(name), 1)
+        self.failUnlessEqual(name[0].text, 'Tardigrade')
+        instrument = divs[0].xpath(
+            './span[@property="libns:sequencer_instrument"]')
+        self.failUnlessEqual(len(instrument), 1)
+        self.failUnlessEqual(instrument[0].text, 'ILLUMINA-EC5D15')
+        model = divs[0].xpath(
+            './span[@property="libns:sequencer_model"]')
+        self.failUnlessEqual(len(model), 1)
+        self.failUnlessEqual(model[0].text, 'Illumina Genome Analyzer IIx')
index 08ce6f0e93d0255b72fac17b9ddb39655d081d57..20dd554217547b5476579decf39188d06f77fbb4 100644 (file)
@@ -17,7 +17,8 @@ from htsworkflow.frontend.experiments.models import \
      DataRun, \
      DataFile, \
      FlowCell, \
-     Lane
+     Lane, \
+     Sequencer
 from htsworkflow.frontend.experiments.experiments import \
      estimateFlowcellDuration, \
      estimateFlowcellTimeRemaining, \
@@ -31,10 +32,10 @@ def index(request):
     #c = Context({
     #    'data_run_list': all_runs,
     #})
-    #return HttpResponse(t.render(c)) 
+    #return HttpResponse(t.render(c))
     # shortcut to the above module usage
-    return render_to_response('experiments/index.html',{'data_run_list': all_runs}) 
-    
+    return render_to_response('experiments/index.html',{'data_run_list': all_runs})
+
 def detail(request, run_folder):
     html_str = '<h2>Exp Track Details Page</h2>'
     html_str += 'Run Folder: '+run_folder
@@ -89,7 +90,7 @@ def startedEmail(request, pk):
         if user.email is None or len(user.email) == 0:
             warnings.append((user.admin_url(), user.username))
     user=None
-    
+
     for user_email in email_lane.keys():
         sending = ""
         # build body
@@ -99,7 +100,7 @@ def startedEmail(request, pk):
                                   u'runfolder': 'blank',
                                   u'finish_low': estimate_low,
                                   u'finish_high': estimate_high,
-                                  u'now': datetime.now(),        
+                                  u'now': datetime.now(),
                                   })
 
         # build view
@@ -126,7 +127,7 @@ def startedEmail(request, pk):
           'warnings': warnings,
         })
     return HttpResponse(email_verify.render(verify_context))
-    
+
 def finishedEmail(request, pk):
     """
     """
@@ -137,7 +138,7 @@ def flowcell_detail(request, flowcell_id, lane_number=None):
     fc = get_object_or_404(FlowCell, flowcell_id__startswith=flowcell_id)
     fc.update_data_runs()
 
-    
+
     if lane_number is not None:
         lanes = fc.lane_set.filter(lane_number=lane_number)
     else:
@@ -146,7 +147,7 @@ def flowcell_detail(request, flowcell_id, lane_number=None):
     context = RequestContext(request,
                              {'flowcell': fc,
                               'lanes': lanes})
-    
+
     return render_to_response('experiments/flowcell_detail.html',
                               context)
 
@@ -157,13 +158,13 @@ def flowcell_lane_detail(request, lane_pk):
     dataruns = []
     for run in lane.flowcell.datarun_set.all():
         dataruns.append((run, lane.lane_number, run.lane_files()[lane.lane_number]))
-        
+
     context = RequestContext(request,
                              {'lib': lane.library,
                               'lane': lane,
                               'flowcell': lane.flowcell,
                               'filtered_dataruns': dataruns})
-    
+
     return render_to_response('experiments/flowcell_lane_detail.html',
                               context)
 
@@ -171,7 +172,7 @@ def read_result_file(self, key):
     """Return the contents of filename if everything is approved
     """
     data_file = get_object_or_404(DataFile, random_key = key)
-    
+
     mimetype = 'application/octet-stream'
     if data_file.file_type.mimetype is not None:
         mimetype = data_file.file_type.mimetype
@@ -181,5 +182,10 @@ def read_result_file(self, key):
                             mimetype=mimetype)
 
     raise Http404
-      
-  
+
+
+def sequencer(request, sequencer_id):
+    sequencer = get_object_or_404(Sequencer, id=sequencer_id)
+    context = RequestContext(request,
+                             {'sequencer': sequencer})
+    return render_to_response('experiments/sequencer.html', context)
index 76a221e029f920d1181b969017b4a273c61ca2ab..de3ad89a6211bc51319833ad45c5c4b0ab5dd9b8 100644 (file)
@@ -11,7 +11,7 @@
      "model": "samples.Cellline",
      "pk": 2,
      "fields": {
-        "cellline_name": "C2C12 Exponential",
+        "cellline_name": "C2C12",
         "notes": ""
      }
   },
index 15ccdae05e5cd0eae02476fe8d36d193c5832c15..458619b93efe12def2f0d09850177f40baf78545 100644 (file)
@@ -3,6 +3,18 @@
   <b>Flowcell</b>:
     <a href="{{flowcell.get_absolute_url}}" property="libns:flowcell_id">{{flowcell.flowcell_id}}</a>{% if user.is_staff %}<a href="{{flowcell.get_admin_url}}"><img class="icon_button" src="/media/img/admin/icon_changelink.gif" alt="Edit"/></a>{% endif%}
   <br property="rdf:type" content="libns:illumina_flowcell"/>
+  <div rel="libns:sequenced_by"
+       resource="{{flowcell.sequencer.get_absolute_url}}">
+  <b>Instrument</b>:
+    <span property="libns:sequencer_name">{{ flowcell.sequencer.name }}</span>
+    {% if flowcell.sequencer.instrument_name %}
+    (<span property="libns:sequencer_instrument">{{ flowcell.sequencer.instrument_name}}</span>)
+    {% endif %}
+    <br/>
+  <b>Instrument Model</b>:
+    <span property="libns:sequencer_model">{{flowcell.sequencer.model}}</span>
+    <br/>
+  </div>
   <b>Run Date</b>:
     <span property="libns:date" content="{{flowcell.run_date|date:'Y-m-d\TH:i:s'}}" datatype="xsd:dateTime">{{ flowcell.run_date }}</span><br/>
   <b>Type</b>:
diff --git a/htsworkflow/frontend/templates/experiments/sequencer.html b/htsworkflow/frontend/templates/experiments/sequencer.html
new file mode 100644 (file)
index 0000000..e4a6e0b
--- /dev/null
@@ -0,0 +1,24 @@
+{% extends "base_site.html" %}
+{% load adminmedia humanize i18n %}
+{% block extrahead %}
+    <!-- App Stuff -->
+    <link type="text/css" rel="stylesheet" href="/static/css/app.css" />
+    <script type="text/javascript" src="/static/js/jquery.min.js"></script>
+
+    {% block additional_javascript %}
+    {% endblock %}
+{% endblock %}
+
+{% block content %}
+    <h1>Sequencer</h1>
+    <dl about="{{sequencer.get_absolute_url}}" typeof="libns:sequencer">
+      <dt>Name</dt>
+      <dl property="libns:sequencer_name">{{sequencer.name}}</dl>
+      <dt>Instrument Name</dt>
+      <dl property="libns:insrument_name">{{sequencer.instrument_name}}</dl>
+      <dt>Model</dt>
+      <dl property="libns:model">{{sequencer.model}}</dl>
+      <dt>Comment</dt>
+      <dl></dl>
+    </dl>
+{% endblock %}
index 6c3bfa6da6bf12d98f6e0eaa61454a1aa57fc369..a03330436e72343d668911aeda5bcdac5659263a 100644 (file)
@@ -49,6 +49,8 @@ urlpatterns = patterns('',
      'htsworkflow.frontend.samples.views.library_id_to_admin_url'),
     # sample / library information
     (r'^samples/', include('htsworkflow.frontend.samples.urls')),
+    (r'^sequencer/(?P<sequencer_id>\w+)',
+       'htsworkflow.frontend.experiments.views.sequencer'),
     # Raw result files
     (r'^results/(?P<flowcell_id>\w+)/(?P<cnm>C[0-9]+-[0-9]+)/summary/',
       'htsworkflow.frontend.samples.views.summaryhtm_fc_cnm'),
index 5ebde3901cea490dedb3c1d4067d1e2f01edab8b..2c68f674ad77a7d1cfdc637e2553fc57ffcbd87f 100644 (file)
@@ -208,7 +208,7 @@ class Bustard(object):
     BUSTARD_CONFIG = 'BaseCallAnalysis'
 
     def __init__(self, xml=None):
-        self.version = None
+        self._path_version = None # version number from directory name
         self.date = None
         self.user = None
         self.phasing = {}
@@ -219,6 +219,54 @@ class Bustard(object):
         if xml is not None:
             self.set_elements(xml)
 
+    def update_attributes_from_pathname(self):
+        """Update version, date, user from bustard directory names
+        Obviously this wont work for BaseCalls or later runfolders
+        """
+        if self.pathname is None:
+            raise ValueError(
+                "Set pathname before calling update_attributes_from_pathname")
+        path, name = os.path.split(self.pathname)
+
+        if not re.match('bustard', name, re.IGNORECASE):
+            return
+
+        groups = name.split("_")
+        version = re.search(VERSION_RE, groups[0])
+        self._path_version = version.group(1)
+        t = time.strptime(groups[1], EUROPEAN_STRPTIME)
+        self.date = date(*t[0:3])
+        self.user = groups[2]
+
+    def _get_software_version(self):
+        """return software name, version tuple"""
+        if self.bustard_config is None:
+            if self._path_version is not None:
+                return 'Bustard', self._path_version
+            else:
+                return None
+        software_nodes = self.bustard_config.xpath('Run/Software')
+        if len(software_nodes) == 0:
+            return None
+        elif len(software_nodes) > 1:
+            raise RuntimeError("Too many software XML elements for bustard.py")
+        else:
+            return (software_nodes[0].attrib['Name'],
+                    software_nodes[0].attrib['Version'])
+
+    def _get_software(self):
+        """Return software name"""
+        software_version = self._get_software_version()
+        return software_version[0] if software_version is not None else None
+    software = property(_get_software)
+
+    def _get_version(self):
+        """Return software name"""
+        software_version = self._get_software_version()
+        return software_version[1] if software_version is not None else None
+    version = property(_get_version)
+
+
     def _get_time(self):
         if self.date is None:
             return None
@@ -264,7 +312,7 @@ class Bustard(object):
             LOGGER.warn('Bustard XML tree is a higher version than this class')
         for element in list(tree):
             if element.tag == Bustard.SOFTWARE_VERSION:
-                self.version = element.text
+                self._path_version = element.text
             elif element.tag == Bustard.DATE:
                 self.date = date.fromtimestamp(float(element.text))
             elif element.tag == Bustard.USER:
@@ -290,47 +338,88 @@ def bustard(pathname):
     :Return:
       Fully initialized Bustard object.
     """
-    b = Bustard()
     pathname = os.path.abspath(pathname)
+    bustard_filename = os.path.join(pathname, 'config.xml')
+    demultiplexed_filename = os.path.join(pathname,
+                                          'DemultiplexedBustardConfig.xml')
+
+    if os.path.exists(demultiplexed_filename):
+        b = bustard_from_hiseq(pathname, demultiplexed_filename)
+    elif os.path.exists(bustard_filename):
+        b = bustard_from_ga2(pathname, bustard_filename)
+    else:
+        b = bustard_from_ga1(pathname)
+
+    return b
+
+def bustard_from_ga1(pathname):
+    """Initialize bustard class from ga1 era runfolders.
+    """
     path, name = os.path.split(pathname)
+
     groups = name.split("_")
-    if groups[0].lower().startswith('bustard'):
-        version = re.search(VERSION_RE, groups[0])
-        b.version = version.group(1)
-        t = time.strptime(groups[1], EUROPEAN_STRPTIME)
-        b.date = date(*t[0:3])
-        b.user = groups[2]
-    elif groups[0] == 'BaseCalls':
-        # stub values
-        b.version = None
-        b.date = None
-        b.user = None
+    if len(groups) < 3:
+        msg = "Not enough information to create attributes"\
+              " from directory name: %s"
+        LOGGER.error(msg % (self.pathname,))
+        return None
 
+    b = Bustard()
     b.pathname = pathname
-    bustard_config_filename = os.path.join(pathname, 'config.xml')
-    paramfiles = glob(os.path.join(pathname, "params?.xml"))
-    for paramfile in paramfiles:
-        phasing = Phasing(paramfile)
-        assert (phasing.lane >= 1 and phasing.lane <= 8)
-        b.phasing[phasing.lane] = phasing
+    b.update_attributes_from_pathname()
+    version = re.search(VERSION_RE, groups[0])
+    b._path_version = version.group(1)
+    t = time.strptime(groups[1], EUROPEAN_STRPTIME)
+    b.date = date(*t[0:3])
+    b.user = groups[2]
+
     # I only found these in Bustard1.9.5/1.9.6 directories
     if b.version in ('1.9.5', '1.9.6'):
         # at least for our runfolders for 1.9.5 and 1.9.6 matrix[1-8].txt are always the same
         crosstalk_file = os.path.join(pathname, "matrix1.txt")
         b.crosstalk = CrosstalkMatrix(crosstalk_file)
+
+    add_phasing(b)
+    return b
+
+
+def bustard_from_ga2(pathname, config_filename):
+    """Initialize bustard class from ga2-era runfolder
+    Actually I don't quite remember if it is exactly the GA2s, but
+    its after the original runfolder style and before the HiSeq.
+    """
     # for version 1.3.2 of the pipeline the bustard version number went down
     # to match the rest of the pipeline. However there's now a nifty
     # new (useful) bustard config file.
-    elif os.path.exists(bustard_config_filename):
-        bustard_config_root = ElementTree.parse(bustard_config_filename)
-        b.bustard_config = bustard_config_root.getroot()
-        b.crosstalk = crosstalk_matrix_from_bustard_config(b.pathname, b.bustard_config)
-        software = bustard_config_root.find('*/Software')
-        b.version = software.attrib['Version']
-        #b.version = software.attrib['Name'] + "-" + software.attrib['Version']
 
+    # stub values
+    b = Bustard()
+    b.pathname = pathname
+    b.update_attributes_from_pathname()
+    bustard_config_root = ElementTree.parse(config_filename)
+    b.bustard_config = bustard_config_root.getroot()
+    b.crosstalk = crosstalk_matrix_from_bustard_config(b.pathname,
+                                                       b.bustard_config)
+    add_phasing(b)
+
+    return b
+
+def bustard_from_hiseq(pathname, config_filename):
+    b = Bustard()
+    b.pathname = pathname
+    bustard_config_root = ElementTree.parse(config_filename)
+    b.bustard_config = bustard_config_root.getroot()
+    add_phasing(b)
     return b
 
+def add_phasing(bustard_obj):
+    paramfiles = glob(os.path.join(bustard_obj.pathname,
+                                   "params?.xml"))
+    for paramfile in paramfiles:
+        phasing = Phasing(paramfile)
+        assert (phasing.lane >= 1 and phasing.lane <= 8)
+        bustard_obj.phasing[phasing.lane] = phasing
+
 def fromxml(tree):
     """
     Reconstruct a htsworkflow.pipelines.Bustard object from an xml block
index c3aa3274f70cc348edbedd5e168610fcf51bce57..cf6de6c55a05f867c01bd595c57ae931957a66b6 100644 (file)
@@ -133,7 +133,7 @@ class ElandLane(ResultLane):
         if os.stat(self.pathname)[stat.ST_SIZE] == 0:
             raise RuntimeError("Eland isn't done, try again later.")
 
-        LOGGER.info("summarizing results for %s" % (self.pathname))
+        LOGGER.debug("summarizing results for %s" % (self.pathname))
 
         stream = autoopen(self.pathname, 'r')
         if self.eland_type == ELAND_SINGLE:
@@ -582,7 +582,7 @@ def check_for_eland_file(basedir, pattern, lane_id, end):
       full_lane_id = "%d_%d" % ( lane_id, end )
 
    basename = pattern % (full_lane_id,)
-   LOGGER.info("Eland pattern: %s" %(basename,))
+   LOGGER.debug("Eland pattern: %s" %(basename,))
    pathname = os.path.join(basedir, basename)
    if os.path.exists(pathname):
        LOGGER.info('found eland file in %s' % (pathname,))
index 7d92050866369f70892b4e2b969f5a3bc16af4cf..de6b042a5ddd7cc06d0b7c28e99841edc5579ce9 100644 (file)
@@ -49,6 +49,10 @@ class Firecrest(object):
         if xml is not None:
             self.set_elements(xml)
 
+    def _get_software(self):
+        return "Firecrest"
+    software = property(_get_software)
+
     def _get_time(self):
         return time.mktime(self.date.timetuple())
     time = property(_get_time, doc='return run time as seconds since epoch')
index 06fc94b5433cfb00a131a8aee5e6ab78684e0cc4..f768b227e260cea6d82febfc638793055b48178c 100644 (file)
@@ -4,9 +4,11 @@ Provide access to information stored in the GERALD directory.
 from datetime import datetime, date
 import logging
 import os
+import re
+import stat
 import time
 
-from htsworkflow.pipelines.summary import Summary
+from htsworkflow.pipelines.summary import Summary, SummaryGA, SummaryHiSeq
 from htsworkflow.pipelines.eland import eland, ELAND
 
 from htsworkflow.pipelines.runfolder import \
@@ -18,115 +20,20 @@ from htsworkflow.util.ethelp import indent, flatten
 
 LOGGER = logging.getLogger(__name__)
 
-class Gerald(object):
+class Alignment(object):
     """
     Capture meaning out of the GERALD directory
     """
     XML_VERSION = 1
-    GERALD='Gerald'
     RUN_PARAMETERS='RunParameters'
     SUMMARY='Summary'
 
-    class LaneParameters(object):
-        """
-        Make it easy to access elements of LaneSpecificRunParameters from python
-        """
-        def __init__(self, gerald, lane_id):
-            self._gerald = gerald
-            self._lane_id = lane_id
-
-        def __get_attribute(self, xml_tag):
-            subtree = self._gerald.tree.find('LaneSpecificRunParameters')
-            container = subtree.find(xml_tag)
-            if container is None:
-                return None
-            if len(container.getchildren()) > LANES_PER_FLOWCELL:
-                raise RuntimeError('GERALD config.xml file changed')
-            lanes = [x.tag.split('_')[1] for x in container.getchildren()]
-            try:
-                index = lanes.index(self._lane_id)
-            except ValueError, e:
-                return None
-            element = container[index]
-            return element.text
-        def _get_analysis(self):
-            return self.__get_attribute('ANALYSIS')
-        analysis = property(_get_analysis)
-
-        def _get_eland_genome(self):
-            genome = self.__get_attribute('ELAND_GENOME')
-            # default to the chipwide parameters if there isn't an
-            # entry in the lane specific paramaters
-            if genome is None:
-                genome = self._gerald._get_chip_attribute('ELAND_GENOME')
-            # ignore flag value
-            if genome == 'Need_to_specify_ELAND_genome_directory':
-                genome = None
-            return genome
-        eland_genome = property(_get_eland_genome)
-
-        def _get_read_length(self):
-            read_length = self.__get_attribute('READ_LENGTH')
-            if read_length is None:
-                read_length = self._gerald._get_chip_attribute('READ_LENGTH')
-            return read_length
-        read_length = property(_get_read_length)
-
-        def _get_use_bases(self):
-            return self.__get_attribute('USE_BASES')
-        use_bases = property(_get_use_bases)
-
-    class LaneSpecificRunParameters(object):
-        """
-        Provide access to LaneSpecificRunParameters
-        """
-        def __init__(self, gerald):
-            self._gerald = gerald
-            self._lane = None
-
-        def _initalize_lanes(self):
-            """
-            build dictionary of LaneParameters
-            """
-            self._lanes = {}
-            tree = self._gerald.tree
-            analysis = tree.find('LaneSpecificRunParameters/ANALYSIS')
-            # according to the pipeline specs I think their fields
-            # are sampleName_laneID, with sampleName defaulting to s
-            # since laneIDs are constant lets just try using
-            # those consistently.
-            for element in analysis:
-                sample, lane_id = element.tag.split('_')
-                self._lanes[int(lane_id)] = Gerald.LaneParameters(
-                                              self._gerald, lane_id)
-
-        def __getitem__(self, key):
-            if self._lane is None:
-                self._initalize_lanes()
-            return self._lanes[key]
-        def keys(self):
-            if self._lane is None:
-                self._initalize_lanes()
-            return self._lanes.keys()
-        def values(self):
-            if self._lane is None:
-                self._initalize_lanes()
-            return self._lanes.values()
-        def items(self):
-            if self._lane is None:
-                self._initalize_lanes()
-            return self._lanes.items()
-        def __len__(self):
-            if self._lane is None:
-                self._initalize_lanes()
-            return len(self._lanes)
-
-    def __init__(self, xml=None):
-        self.pathname = None
-        self.tree = None
+    def __init__(self, xml=None, pathname=None, tree=None):
+        self.pathname = pathname
+        self.tree = tree
 
         # parse lane parameters out of the config.xml file
-        self.lanes = Gerald.LaneSpecificRunParameters(self)
+        self.lanes = LaneSpecificRunParameters(self)
 
         self.summary = None
         self.eland_results = None
@@ -134,50 +41,10 @@ class Gerald(object):
         if xml is not None:
             self.set_elements(xml)
 
-    def _get_date(self):
-        if self.tree is None:
-            return datetime.today()
-        timestamp = self.tree.findtext('ChipWideRunParameters/TIME_STAMP')
-        epochstamp = time.mktime(time.strptime(timestamp, '%c'))
-        return datetime.fromtimestamp(epochstamp)
-    date = property(_get_date)
-
     def _get_time(self):
         return time.mktime(self.date.timetuple())
     time = property(_get_time, doc='return run time as seconds since epoch')
 
-    def _get_experiment_root(self):
-        if self.tree is None:
-            return None
-        return self.tree.findtext('ChipWideRunParameters/EXPT_DIR_ROOT')
-
-    def _get_runfolder_name(self):
-        if self.tree is None:
-            return None
-
-        root = self._get_experiment_root()
-        if root is None:
-            root = ''
-        else:
-            root = os.path.join(root,'')
-
-        experiment_dir = self.tree.findtext('ChipWideRunParameters/EXPT_DIR')
-        if experiment_dir is None:
-            return None
-        experiment_dir = experiment_dir.replace(root, '')
-        if len(experiment_dir) == 0:
-            return None
-
-        dirnames = experiment_dir.split(os.path.sep)
-        return dirnames[0]
-    runfolder_name = property(_get_runfolder_name)
-
-    def _get_version(self):
-        if self.tree is None:
-            return None
-        return self.tree.findtext('ChipWideRunParameters/SOFTWARE_VERSION')
-    version = property(_get_version)
-
     def _get_chip_attribute(self, value):
         return self.tree.findtext('ChipWideRunParameters/%s' % (value,))
 
@@ -185,9 +52,10 @@ class Gerald(object):
         """
         Debugging function, report current object
         """
-        print 'Gerald version:', self.version
-        print 'Gerald run date:', self.date
-        print 'Gerald config.xml:', self.tree
+        print 'Software:'. self.__class__.__name__
+        print 'Alignment version:', self.version
+        print 'Run date:', self.date
+        print 'config.xml:', self.tree
         self.summary.dump()
 
     def get_elements(self):
@@ -203,8 +71,8 @@ class Gerald(object):
         return gerald
 
     def set_elements(self, tree):
-        if tree.tag !=  Gerald.GERALD:
-            raise ValueError('exptected GERALD')
+        if tree.tag !=  self.__class__.GERALD:
+            raise ValueError('expected GERALD')
         xml_version = int(tree.attrib.get('version', 0))
         if xml_version > Gerald.XML_VERSION:
             LOGGER.warn('XML tree is a higher version than this class')
@@ -220,24 +88,320 @@ class Gerald(object):
             else:
                 LOGGER.warn("Unrecognized tag %s" % (element.tag,))
 
+class Gerald(Alignment):
+    GERALD='Gerald'
+
+    def _get_date(self):
+        if self.tree is None:
+            return datetime.today()
+        timestamp = self.tree.findtext('ChipWideRunParameters/TIME_STAMP')
+        if timestamp is not None:
+            epochstamp = time.mktime(time.strptime(timestamp, '%c'))
+            return datetime.fromtimestamp(epochstamp)
+        if self.pathname is not None:
+            epochstamp = os.stat(self.pathname)[stat.ST_MTIME]
+            return datetime.fromtimestamp(epochstamp)
+        return datetime.today()
+    date = property(_get_date)
+
+    def _get_experiment_root(self):
+        if self.tree is None:
+            return None
+        return self.tree.findtext('ChipWideRunParameters/EXPT_DIR_ROOT')
+
+    def _get_runfolder_name(self):
+        if self.tree is None:
+            return None
+
+        expt_root = os.path.normpath(self._get_experiment_root())
+        chip_expt_dir = self.tree.findtext('ChipWideRunParameters/EXPT_DIR')
+
+        if expt_root is not None and chip_expt_dir is not None:
+            experiment_dir = chip_expt_dir.replace(expt_root+os.path.sep, '')
+            experiment_dir = experiment_dir.split(os.path.sep)[0]
+
+        if experiment_dir is None or len(experiment_dir) == 0:
+            return None
+        return experiment_dir
+
+    runfolder_name = property(_get_runfolder_name)
+
+    def _get_software_version(self):
+        if self.tree is None:
+            return None
+        ga_version = self.tree.findtext(
+            'ChipWideRunParameters/SOFTWARE_VERSION')
+        if ga_version is not None:
+            gerald = re.match("@.*GERALD.pl,v (?P<version>\d+(\.\d+)+)",
+                             ga_version)
+            if gerald:
+                return ('GERALD', gerald.group('version'))
+            casava = re.match('CASAVA-(?P<version>\d+[.\d]*)',
+                              ga_version)
+            if casava:
+                return ('CASAVA', casava.group('version'))
+
+    def _get_software(self):
+        """Return name of analysis software package"""
+        software_version = self._get_software_version()
+        return software_version[0] if software_version is not None else None
+    software = property(_get_software)
+
+    def _get_version(self):
+        """Return version number of software package"""
+        software_version = self._get_software_version()
+        return software_version[1] if software_version is not None else None
+    version = property(_get_version)
+
+class CASAVA(Alignment):
+    GERALD='Casava'
+
+    def _get_runfolder_name(self):
+        if self.tree is None:
+            return None
+
+        # hiseqs renamed the experiment dir location
+        defaults_expt_dir = self.tree.findtext('Defaults/EXPT_DIR')
+        _, experiment_dir = os.path.split(defaults_expt_dir)
+
+        if experiment_dir is None or len(experiment_dir) == 0:
+            return None
+        return experiment_dir
+
+    runfolder_name = property(_get_runfolder_name)
+
+    def _get_software_version(self):
+        if self.tree is None:
+            return None
+        if self.tree is None:
+            return None
+        hiseq_software_node = self.tree.find('Software')
+        software_version = hiseq_software_node.attrib.get('Version',None)
+        if software_version is None:
+            return None
+        return software_version.split('-')
+
+    def _get_software(self):
+        software_version = self._get_software_version()
+        if software_version is None:
+            return None
+        return software_version[0]
+    software = property(_get_software)
+
+    def _get_version(self):
+        software_version = self._get_software_version()
+        if software_version is None:
+            return None
+        return software_version[1]
+    version = property(_get_version)
+
+
+class LaneParameters(object):
+    """
+    Make it easy to access elements of LaneSpecificRunParameters from python
+    """
+    def __init__(self, gerald, lane_id):
+        self._gerald = gerald
+        self._lane_id = lane_id
+
+    def _get_analysis(self):
+        raise NotImplemented("abstract class")
+    analysis = property(_get_analysis)
+
+    def _get_eland_genome(self):
+        raise NotImplemented("abstract class")
+    eland_genome = property(_get_eland_genome)
+
+    def _get_read_length(self):
+        raise NotImplemented("abstract class")
+    read_length = property(_get_read_length)
+
+    def _get_use_bases(self):
+        raise NotImplemented("abstract class")
+    use_bases = property(_get_use_bases)
+
+
+class LaneParametersGA(LaneParameters):
+    """
+    Make it easy to access elements of LaneSpecificRunParameters from python
+    """
+    def __init__(self, gerald, lane_id):
+        super(LaneParametersGA, self).__init__(gerald, lane_id)
+
+    def __get_attribute(self, xml_tag):
+        subtree = self._gerald.tree.find('LaneSpecificRunParameters')
+        container = subtree.find(xml_tag)
+        if container is None:
+            return None
+        if len(container.getchildren()) > LANES_PER_FLOWCELL:
+            raise RuntimeError('GERALD config.xml file changed')
+        lanes = [x.tag.split('_')[1] for x in container.getchildren()]
+        try:
+            index = lanes.index(self._lane_id)
+        except ValueError, e:
+            return None
+        element = container[index]
+        return element.text
+    def _get_analysis(self):
+        return self.__get_attribute('ANALYSIS')
+    analysis = property(_get_analysis)
+
+    def _get_eland_genome(self):
+        genome = self.__get_attribute('ELAND_GENOME')
+        # default to the chipwide parameters if there isn't an
+        # entry in the lane specific paramaters
+        if genome is None:
+            genome = self._gerald._get_chip_attribute('ELAND_GENOME')
+        # ignore flag value
+        if genome == 'Need_to_specify_ELAND_genome_directory':
+            genome = None
+        return genome
+    eland_genome = property(_get_eland_genome)
+
+    def _get_read_length(self):
+        read_length = self.__get_attribute('READ_LENGTH')
+        if read_length is None:
+            read_length = self._gerald._get_chip_attribute('READ_LENGTH')
+        return read_length
+    read_length = property(_get_read_length)
+
+    def _get_use_bases(self):
+        return self.__get_attribute('USE_BASES')
+    use_bases = property(_get_use_bases)
+
+
+class LaneParametersHiSeq(LaneParameters):
+    """
+    Make it easy to access elements of LaneSpecificRunParameters from python
+    """
+    def __init__(self, gerald, lane_id, element):
+        super(LaneParametersHiSeq, self).__init__(gerald, lane_id)
+        self.element = element
+
+    def __get_attribute(self, xml_tag):
+        container = self.element.find(xml_tag)
+        if container is None:
+            return None
+        return container.text
+
+    def _get_analysis(self):
+        return self.__get_attribute('ANALYSIS')
+    analysis = property(_get_analysis)
+
+    def _get_eland_genome(self):
+        genome = self.__get_attribute('ELAND_GENOME')
+        # default to the chipwide parameters if there isn't an
+        # entry in the lane specific paramaters
+        if genome is None:
+            genome = self._gerald._get_chip_attribute('ELAND_GENOME')
+        # ignore flag value
+        if genome == 'Need_to_specify_ELAND_genome_directory':
+            genome = None
+        return genome
+    eland_genome = property(_get_eland_genome)
+
+    def _get_read_length(self):
+        return self.__get_attribute('READ_LENGTH1')
+    read_length = property(_get_read_length)
+
+    def _get_use_bases(self):
+        return self.__get_attribute('USE_BASES1')
+    use_bases = property(_get_use_bases)
+
+class LaneSpecificRunParameters(object):
+    """
+    Provide access to LaneSpecificRunParameters
+    """
+    def __init__(self, gerald):
+        self._gerald = gerald
+        self._lane = None
+
+    def _initalize_lanes(self):
+        """
+        build dictionary of LaneParameters
+        """
+        self._lanes = {}
+        tree = self._gerald.tree
+        analysis = tree.find('LaneSpecificRunParameters/ANALYSIS')
+        if analysis is not None:
+            self._extract_ga_analysis_type(analysis)
+        analysis = tree.find('Projects')
+        if analysis is not None:
+            self._extract_hiseq_analysis_type(analysis)
+
+    def _extract_ga_analysis_type(self, analysis):
+        # according to the pipeline specs I think their fields
+        # are sampleName_laneID, with sampleName defaulting to s
+        # since laneIDs are constant lets just try using
+        # those consistently.
+        for element in analysis:
+            sample, lane_id = element.tag.split('_')
+            self._lanes[int(lane_id)] = LaneParametersGA(
+                                          self._gerald, lane_id)
+
+    def _extract_hiseq_analysis_type(self, analysis):
+        """Extract from HiSeq style multiplexed analysis types"""
+        for element in analysis:
+            name = element.attrib['name']
+            self._lanes[name] = LaneParametersHiSeq(self._gerald,
+                                                    name,
+                                                    element)
+
+    def __iter__(self):
+        return self._lanes.iterkeys()
+    def __getitem__(self, key):
+        if self._lane is None:
+            self._initalize_lanes()
+        return self._lanes[key]
+    def get(self, key, default):
+        if self._lane is None:
+            self._initalize_lanes()
+        return self._lanes.get(key, None)
+    def keys(self):
+        if self._lane is None:
+            self._initalize_lanes()
+        return self._lanes.keys()
+    def values(self):
+        if self._lane is None:
+            self._initalize_lanes()
+        return self._lanes.values()
+    def items(self):
+        if self._lane is None:
+            self._initalize_lanes()
+        return self._lanes.items()
+    def __len__(self):
+        if self._lane is None:
+            self._initalize_lanes()
+        return len(self._lanes)
+
+
 def gerald(pathname):
-    g = Gerald()
-    g.pathname = os.path.expanduser(pathname)
-    path, name = os.path.split(g.pathname)
     LOGGER.info("Parsing gerald config.xml")
-    config_pathname = os.path.join(g.pathname, 'config.xml')
-    g.tree = ElementTree.parse(config_pathname).getroot()
+    pathname = os.path.expanduser(pathname)
+    config_pathname = os.path.join(pathname, 'config.xml')
+    config_tree = ElementTree.parse(config_pathname).getroot()
 
     # parse Summary.htm file
-    summary_pathname = os.path.join(g.pathname, 'Summary.xml')
-    if os.path.exists(summary_pathname):
+    summary_xml = os.path.join(pathname, 'Summary.xml')
+    summary_htm = os.path.join(pathname, 'Summary.htm')
+    report_summary = os.path.join(pathname, '..', 'Data',
+                                  'reports', 'Summary', )
+    if os.path.exists(summary_xml):
+        g = Gerald(pathname = pathname, tree=config_tree)
         LOGGER.info("Parsing Summary.xml")
-    else:
-        summary_pathname = os.path.join(g.pathname, 'Summary.htm')
+        g.summary = SummaryGA(summary_xml)
+        g.eland_results = eland(g.pathname, g)
+    elif os.path.exists(summary_htm):
+        g = Gerald(pathname=pathname, tree=config_tree)
         LOGGER.info("Parsing Summary.htm")
-    g.summary = Summary(summary_pathname)
+        g.summary = SummaryGA(summary_htm)
+        g.eland_results = eland(g.pathname, g)
+    elif os.path.isdir(report_summary):
+        g = CASAVA(pathname=pathname, tree=config_tree)
+        LOGGER.info("Parsing %s" % (report_summary,))
+        g.summary = SummaryHiSeq(report_summary)
+
     # parse eland files
-    g.eland_results = eland(g.pathname, g)
     return g
 
 if __name__ == "__main__":
index e17db4b86c6844ae7d0575c3754f05005773a75c..7a55fa249cefd05e69c1cac4ac06b1ce229ace82 100644 (file)
@@ -75,6 +75,19 @@ class IPAR(object):
         if xml is not None:
             self.set_elements(xml)
 
+    def _get_software(self):
+        """Return software name"""
+        if self.tree is None:
+            raise ValueError("Can't determine software name, please load a run")
+        software = self.tree.xpath('Software')
+        if len(software) == 0:
+          return None
+        elif len(software) > 1:
+            raise RuntimeError("Too many software tags, please update ipar.py")
+        else:
+            return software[0].attrib['Name']
+    software = property(_get_software)
+
     def _get_time(self):
         return time.mktime(self.date.timetuple())
     def _set_time(self, value):
index 3389c2d9ab8ad6f3ffc4b2378c0c8fcd7ff8139a..0fce8f840f49cd5c6ca3aea92e203051ff40d45f 100644 (file)
@@ -12,10 +12,7 @@ import sys
 import tarfile
 import time
 
-try:
-    from xml.etree import ElementTree
-except ImportError, e:
-    from elementtree import ElementTree
+import lxml.etree as ElementTree
 
 LOGGER = logging.getLogger(__name__)
 
@@ -47,6 +44,7 @@ class PipelineRun(object):
           self.pathname = None
         self._name = None
         self._flowcell_id = flowcell_id
+        self.datadir = None
         self.image_analysis = None
         self.bustard = None
         self.gerald = None
@@ -122,6 +120,8 @@ class PipelineRun(object):
             self.bustard = bustard.Bustard(xml=element)
           elif tag == gerald.Gerald.GERALD.lower():
             self.gerald = gerald.Gerald(xml=element)
+          elif tag == gerald.CASAVA.GERALD.lower():
+            self.gerald = gerald.CASAVA(xml=element)
           else:
             LOGGER.warn('PipelineRun unrecognized tag %s' % (tag,))
 
@@ -177,7 +177,7 @@ def get_runs(runfolder, flowcell_id=None):
     from htsworkflow.pipelines import bustard
     from htsworkflow.pipelines import gerald
 
-    def scan_post_image_analysis(runs, runfolder, image_analysis, pathname):
+    def scan_post_image_analysis(runs, runfolder, datadir, image_analysis, pathname):
         LOGGER.info("Looking for bustard directories in %s" % (pathname,))
         bustard_dirs = glob(os.path.join(pathname, "Bustard*"))
         # RTA BaseCalls looks enough like Bustard.
@@ -185,19 +185,41 @@ def get_runs(runfolder, flowcell_id=None):
         for bustard_pathname in bustard_dirs:
             LOGGER.info("Found bustard directory %s" % (bustard_pathname,))
             b = bustard.bustard(bustard_pathname)
-            gerald_glob = os.path.join(bustard_pathname, 'GERALD*')
-            LOGGER.info("Looking for gerald directories in %s" % (pathname,))
-            for gerald_pathname in glob(gerald_glob):
-                LOGGER.info("Found gerald directory %s" % (gerald_pathname,))
-                try:
-                    g = gerald.gerald(gerald_pathname)
-                    p = PipelineRun(runfolder, flowcell_id)
-                    p.image_analysis = image_analysis
-                    p.bustard = b
-                    p.gerald = g
-                    runs.append(p)
-                except IOError, e:
-                    LOGGER.error("Ignoring " + str(e))
+            build_gerald_runs(runs, b, image_analysis, bustard_pathname, datadir, pathname, runfolder)
+
+            build_aligned_runs(image_analysis, runs, b, datadir, runfolder)
+
+    def build_gerald_runs(runs, b, image_analysis, bustard_pathname, datadir, pathname, runfolder):
+        gerald_glob = os.path.join(bustard_pathname, 'GERALD*')
+        LOGGER.info("Looking for gerald directories in %s" % (pathname,))
+        for gerald_pathname in glob(gerald_glob):
+            LOGGER.info("Found gerald directory %s" % (gerald_pathname,))
+            try:
+                g = gerald.gerald(gerald_pathname)
+                p = PipelineRun(runfolder, flowcell_id)
+                p.datadir = datadir
+                p.image_analysis = image_analysis
+                p.bustard = b
+                p.gerald = g
+                runs.append(p)
+            except IOError, e:
+                LOGGER.error("Ignoring " + str(e))
+
+
+    def build_aligned_runs(image_analysis, runs, b, datadir, runfolder):
+        aligned_glob = os.path.join(runfolder, 'Aligned*')
+        for aligned in glob(aligned_glob):
+            LOGGER.info("Found aligned directory %s" % (aligned,))
+            try:
+                g = gerald.HiSeq(aligned)
+                p = PipelineRun(runfolder, flowcell_id)
+                p.datadir = datadir
+                p.image_analysis = image_analysis
+                p.bustard = b
+                p.gerald = g
+                runs.append(p)
+            except IOError, e:
+                LOGGER.error("Ignoring " + str(e))
 
     datadir = os.path.join(runfolder, 'Data')
 
@@ -213,7 +235,7 @@ def get_runs(runfolder, flowcell_id=None):
             )
         else:
             scan_post_image_analysis(
-                runs, runfolder, image_analysis, firecrest_pathname
+                runs, runfolder, datadir, image_analysis, firecrest_pathname
             )
     # scan for IPAR directories
     ipar_dirs = glob(os.path.join(datadir, "IPAR_*"))
@@ -228,7 +250,7 @@ def get_runs(runfolder, flowcell_id=None):
             )
         else:
             scan_post_image_analysis(
-                runs, runfolder, image_analysis, ipar_pathname
+                runs, runfolder, datadir, image_analysis, ipar_pathname
             )
 
     return runs
@@ -407,12 +429,17 @@ def save_flowcell_reports(data_dir, cycle_dir):
         os.chdir(cwd)
 
 
-def save_summary_file(gerald_object, cycle_dir):
+def save_summary_file(pipeline, cycle_dir):
     # Copy Summary.htm
-    summary_path = os.path.join(gerald_object.pathname, 'Summary.htm')
-    if os.path.exists(summary_path):
-        LOGGER.info('Copying %s to %s' % (summary_path, cycle_dir))
-        shutil.copy(summary_path, cycle_dir)
+    gerald_object = pipeline.gerald
+    gerald_summary = os.path.join(gerald_object.pathname, 'Summary.htm')
+    status_files_summary = os.path.join(pipeline.datadir, 'Status_Files', 'Summary.htm')
+    if os.path.exists(gerald_summary):
+        LOGGER.info('Copying %s to %s' % (gerald_summary, cycle_dir))
+        shutil.copy(gerald_summary, cycle_dir)
+    elif os.path.exists(status_files_summary):
+        LOGGER.info('Copying %s to %s' % (status_files_summary, cycle_dir))
+        shutil.copy(status_files_summary, cycle_dir)
     else:
         LOGGER.info('Summary file %s was not found' % (summary_path,))
 
@@ -551,13 +578,17 @@ def extract_results(runs, output_base_dir=None, site="individual", num_jobs=1, r
       if site is not None:
         lanes = []
         for lane in range(1, 9):
-          if r.gerald.lanes[lane].analysis != 'none':
+          lane_parameters = r.gerald.lanes.get(lane, None)
+          if lane_parameters is not None and lane_parameters.analysis != 'none':
             lanes.append(lane)
 
         run_name = srf.pathname_to_run_name(r.pathname)
         seq_cmds = []
+        LOGGER.info("Raw Format is: %s" % (raw_format, ))
         if raw_format == 'fastq':
-            srf.copy_hiseq_project_fastqs(run_name, r.bustard.pathname, site, cycle_dir)
+            rawpath = os.path.join(r.pathname, r.gerald.runfolder_name)
+            LOGGER.info("raw data = %s" % (rawpath,))
+            srf.copy_hiseq_project_fastqs(run_name, rawpath, site, cycle_dir)
         elif raw_format == 'qseq':
             seq_cmds = srf.make_qseq_commands(run_name, r.bustard.pathname, lanes, site, cycle_dir)
         elif raw_format == 'srf':
@@ -571,7 +602,7 @@ def extract_results(runs, output_base_dir=None, site="individual", num_jobs=1, r
       g = r.gerald
 
       # save summary file
-      save_summary_file(g, cycle_dir)
+      save_summary_file(r, cycle_dir)
 
       # compress eland result files
       compress_eland_results(g, cycle_dir, num_jobs)
index 8c5ab7f91215d7c38198c124e1014b6637dd738a..6fdda43cf8b4abcee39100e4204df7182fa4a48b 100644 (file)
@@ -1,6 +1,7 @@
 """
 Analyze the Summary.htm file produced by GERALD
 """
+import os
 import logging
 import re
 import types
@@ -21,138 +22,6 @@ class Summary(object):
     XML_VERSION = 3
     SUMMARY = 'Summary'
 
-    class LaneResultSummary(object):
-        """
-        Parse the LaneResultSummary table out of Summary.htm
-        Mostly for the cluster number
-        """
-        LANE_RESULT_SUMMARY = 'LaneResultSummary'
-        TAGS = {
-          'LaneYield': 'lane_yield',
-          'Cluster': 'cluster', # Raw
-          'ClusterPF': 'cluster_pass_filter',
-          'AverageFirstCycleIntensity': 'average_first_cycle_intensity',
-          'PercentIntensityAfter20Cycles': 'percent_intensity_after_20_cycles',
-          'PercentPassFilterClusters': 'percent_pass_filter_clusters',
-          'PercentPassFilterAlign': 'percent_pass_filter_align',
-          'AverageAlignmentScore': 'average_alignment_score',
-          'PercentErrorRate': 'percent_error_rate'
-        }
-        # These are tags that have mean/stdev as found in the GERALD Summary.xml file
-        GERALD_TAGS = {
-          #'laneYield': 'lane_yield', #this is just a number
-          'clusterCountRaw': 'cluster', # Raw
-          'clusterCountPF': 'cluster_pass_filter',
-          'oneSig': 'average_first_cycle_intensity',
-          'signal20AsPctOf1': 'percent_intensity_after_20_cycles',
-          'percentClustersPF': 'percent_pass_filter_clusters',
-          'percentUniquelyAlignedPF': 'percent_pass_filter_align',
-          'averageAlignScorePF': 'average_alignment_score',
-          'errorPF': 'percent_error_rate'
-        }
-
-        def __init__(self, html=None, xml=None):
-            self.lane = None
-            self.end = 0
-            self.lane_yield = None
-            self.cluster = None
-            self.cluster_pass_filter = None
-            self.average_first_cycle_intensity = None
-            self.percent_intensity_after_20_cycles = None
-            self.percent_pass_filter_clusters = None
-            self.percent_pass_filter_align = None
-            self.average_alignment_score = None
-            self.percent_error_rate = None
-
-            if html is not None:
-                self.set_elements_from_source(html)
-            if xml is not None:
-                self.set_elements(xml)
-
-        def set_elements_from_source(self, data):
-            """Read from an initial summary data file. Either xml or html
-            """
-            if not len(data) in (8,10):
-                raise RuntimeError("Summary.htm file format changed, len(data)=%d" % (len(data),))
-
-            # same in pre-0.3.0 Summary file and 0.3 summary file
-            self.lane = int(data[0])
-
-            if len(data) == 8:
-                parsed_data = [ parse_mean_range(x) for x in data[1:] ]
-                # this is the < 0.3 Pipeline version
-                self.cluster = parsed_data[0]
-                self.average_first_cycle_intensity = parsed_data[1]
-                self.percent_intensity_after_20_cycles = parsed_data[2]
-                self.percent_pass_filter_clusters = parsed_data[3]
-                self.percent_pass_filter_align = parsed_data[4]
-                self.average_alignment_score = parsed_data[5]
-                self.percent_error_rate = parsed_data[6]
-            elif len(data) == 10:
-                parsed_data = [ parse_mean_range(x) for x in data[2:] ]
-                # this is the >= 0.3 summary file
-                self.lane_yield = data[1]
-                self.cluster = parsed_data[0]
-                self.cluster_pass_filter = parsed_data[1]
-                self.average_first_cycle_intensity = parsed_data[2]
-                self.percent_intensity_after_20_cycles = parsed_data[3]
-                self.percent_pass_filter_clusters = parsed_data[4]
-                self.percent_pass_filter_align = parsed_data[5]
-                self.average_alignment_score = parsed_data[6]
-                self.percent_error_rate = parsed_data[7]
-
-        def set_elements_from_gerald_xml(self, read, element):
-            self.lane = int(element.find('laneNumber').text)
-            self.end = read
-            lane_yield_node = element.find('laneYield')
-            if lane_yield_node is not None:
-                self.lane_yield = int(lane_yield_node.text)
-            else:
-                self.lane_yield = None
-
-            for GeraldName, LRSName in Summary.LaneResultSummary.GERALD_TAGS.items():
-                node = element.find(GeraldName)
-                if node is None:
-                    LOGGER.info("Couldn't find %s" % (GeraldName))
-                setattr(self, LRSName, parse_xml_mean_range(node))
-
-        def get_elements(self):
-            lane_result = etree.Element(
-                            Summary.LaneResultSummary.LANE_RESULT_SUMMARY,
-                            {'lane': unicode(self.lane), 'end': unicode(self.end)})
-            for tag, variable_name in Summary.LaneResultSummary.TAGS.items():
-                value = getattr(self, variable_name)
-                if value is None:
-                    continue
-                # it looks like a sequence
-                elif type(value) in (types.TupleType, types.ListType):
-                    element = make_mean_range_element(
-                      lane_result,
-                      tag,
-                      *value
-                    )
-                else:
-                    element = etree.SubElement(lane_result, tag)
-                    element.text = unicode(value)
-            return lane_result
-
-        def set_elements(self, tree):
-            if tree.tag != Summary.LaneResultSummary.LANE_RESULT_SUMMARY:
-                raise ValueError('Expected %s' % (
-                        Summary.LaneResultSummary.LANE_RESULT_SUMMARY))
-            self.lane = int(tree.attrib['lane'])
-            # default to the first end, for the older summary files
-            # that are single ended
-            self.end = int(tree.attrib.get('end', 0))
-            tags = Summary.LaneResultSummary.TAGS
-            for element in list(tree):
-                try:
-                    variable_name = tags[element.tag]
-                    setattr(self, variable_name,
-                            parse_summary_element(element))
-                except KeyError, e:
-                    LOGGER.warn('Unrecognized tag %s' % (element.tag,))
-
     def __init__(self, filename=None, xml=None):
         # lane results is a list of 1 or 2 ends containing
         # a dictionary of all the lanes reported in this
@@ -170,6 +39,41 @@ class Summary(object):
     def __len__(self):
         return len(self.lane_results)
 
+    def get_elements(self):
+        summary = etree.Element(Summary.SUMMARY,
+                                      {'version': unicode(Summary.XML_VERSION)})
+        for end in self.lane_results:
+            for lane in end.values():
+                summary.append(lane.get_elements())
+        return summary
+
+    def set_elements(self, tree):
+        if tree.tag != Summary.SUMMARY:
+            return ValueError("Expected %s" % (Summary.SUMMARY,))
+        xml_version = int(tree.attrib.get('version', 0))
+        if xml_version > Summary.XML_VERSION:
+            LOGGER.warn('Summary XML tree is a higher version than this class')
+        for element in list(tree):
+            lrs = LaneResultSummaryGA()
+            lrs.set_elements(element)
+            if len(self.lane_results) < (lrs.end + 1):
+              self.lane_results.append({})
+            self.lane_results[lrs.end][lrs.lane] = lrs
+
+    def is_paired_end(self):
+      return len(self.lane_results) == 2
+
+    def dump(self):
+        """
+        Debugging function, report current object
+        """
+        tree = self.get_elements()
+        print etree.tostring(tree)
+
+class SummaryGA(Summary):
+    def __init__(self, filename=None, xml=None):
+        super(SummaryGA, self).__init__(filename, xml)
+
     def _flattened_row(self, row):
         """
         flatten the children of a <tr>...</tr>
@@ -249,7 +153,7 @@ class Summary(object):
                 read = int(read_tree.find('readNumber').text)-1
                 for element in read_tree.getchildren():
                     if element.tag.lower() == "lane":
-                        lrs = Summary.LaneResultSummary()
+                        lrs = LaneResultSummaryGA()
                         lrs.set_elements_from_gerald_xml(read, element)
                         self.lane_results[lrs.end][lrs.lane] = lrs
         # probably not useful
@@ -299,41 +203,211 @@ class Summary(object):
           self.lane_results.append({})
 
         for r in lane_summary:
-            lrs = Summary.LaneResultSummary(html=r)
+            lrs = LaneResultSummaryGA(html=r)
             lrs.end = end
             self.lane_results[lrs.end][lrs.lane] = lrs
     ###### END HTML Table Extraction ########
 
+
+class SummaryHiSeq(Summary):
+    def __init__(self, filename=None, xml=None):
+        super(SummaryHiSeq, self).__init__(filename, xml)
+
+    def _extract_lane_results(self, filename):
+        read1 = os.path.join(filename, 'read1.xml')
+        read2 = os.path.join(filename, 'read2.xml')
+
+        if os.path.exists(read1):
+            self._extract_lane_results_for_end(read1, 0)
+        else:
+            LOGGER.warn("No read1.xml at %s." % (read1,))
+        if os.path.exists(read2):
+            self.lane_results.append({})
+            self._extract_lane_results_for_end(read2, 1)
+
+    def _extract_lane_results_for_end(self, filename, end):
+        self.tree = etree.parse(filename)
+        root = self.tree.getroot()
+        for lane in root.getchildren():
+            lrs = LaneResultSummaryHiSeq(data=lane)
+            lrs.end = end
+            self.lane_results[lrs.end][lrs.lane] = lrs
+
+
+class LaneResultSummary(object):
+    """
+    Parse the LaneResultSummary table out of Summary.htm
+    Mostly for the cluster number
+    """
+    LANE_RESULT_SUMMARY = 'LaneResultSummary'
+    TAGS = {
+      'LaneYield': 'lane_yield',
+      'Cluster': 'cluster', # Raw
+      'ClusterPF': 'cluster_pass_filter',
+      'AverageFirstCycleIntensity': 'average_first_cycle_intensity',
+      'PercentIntensityAfter20Cycles': 'percent_intensity_after_20_cycles',
+      'PercentPassFilterClusters': 'percent_pass_filter_clusters',
+      'PercentPassFilterAlign': 'percent_pass_filter_align',
+      'AverageAlignmentScore': 'average_alignment_score',
+      'PercentErrorRate': 'percent_error_rate'
+    }
+    # These are tags that have mean/stdev as found in the GERALD Summary.xml file
+    GERALD_TAGS = {
+      #'laneYield': 'lane_yield', #this is just a number
+      'clusterCountRaw': 'cluster', # Raw
+      'clusterCountPF': 'cluster_pass_filter',
+      'oneSig': 'average_first_cycle_intensity',
+      'signal20AsPctOf1': 'percent_intensity_after_20_cycles',
+      'percentClustersPF': 'percent_pass_filter_clusters',
+      'percentUniquelyAlignedPF': 'percent_pass_filter_align',
+      'averageAlignScorePF': 'average_alignment_score',
+      'errorPF': 'percent_error_rate'
+    }
+
+    def __init__(self, html=None, xml=None):
+        self.lane = None
+        self.end = 0
+        self.lane_yield = None
+        self.cluster = None
+        self.cluster_pass_filter = None
+        self.average_first_cycle_intensity = None
+        self.percent_intensity_after_20_cycles = None
+        self.percent_pass_filter_clusters = None
+        self.percent_pass_filter_align = None
+        self.average_alignment_score = None
+        self.percent_error_rate = None
+
+
     def get_elements(self):
-        summary = etree.Element(Summary.SUMMARY,
-                                      {'version': unicode(Summary.XML_VERSION)})
-        for end in self.lane_results:
-            for lane in end.values():
-                summary.append(lane.get_elements())
-        return summary
+        lane_result = etree.Element(
+                        LaneResultSummary.LANE_RESULT_SUMMARY,
+                        {'lane': unicode(self.lane), 'end': unicode(self.end)})
+        for tag, variable_name in LaneResultSummary.TAGS.items():
+            value = getattr(self, variable_name)
+            if value is None:
+                continue
+            # it looks like a sequence
+            elif type(value) in (types.TupleType, types.ListType):
+                element = make_mean_range_element(
+                  lane_result,
+                  tag,
+                  *value
+                )
+            else:
+                element = etree.SubElement(lane_result, tag)
+                element.text = unicode(value)
+        return lane_result
 
     def set_elements(self, tree):
-        if tree.tag != Summary.SUMMARY:
-            return ValueError("Expected %s" % (Summary.SUMMARY,))
-        xml_version = int(tree.attrib.get('version', 0))
-        if xml_version > Summary.XML_VERSION:
-            LOGGER.warn('Summary XML tree is a higher version than this class')
+        if tree.tag != LaneResultSummary.LANE_RESULT_SUMMARY:
+            raise ValueError('Expected %s' % (
+                    LaneResultSummary.LANE_RESULT_SUMMARY))
+        self.lane = int(tree.attrib['lane'])
+        # default to the first end, for the older summary files
+        # that are single ended
+        self.end = int(tree.attrib.get('end', 0))
+        tags = LaneResultSummary.TAGS
         for element in list(tree):
-            lrs = Summary.LaneResultSummary()
-            lrs.set_elements(element)
-            if len(self.lane_results) < (lrs.end + 1):
-              self.lane_results.append({})
-            self.lane_results[lrs.end][lrs.lane] = lrs
+            try:
+                variable_name = tags[element.tag]
+                setattr(self, variable_name,
+                        parse_summary_element(element))
+            except KeyError, e:
+                LOGGER.warn('Unrecognized tag %s' % (element.tag,))
 
-    def is_paired_end(self):
-      return len(self.lane_results) == 2
 
-    def dump(self):
+class LaneResultSummaryGA(LaneResultSummary):
+    def __init__(self, html=None, xml=None):
+        super(LaneResultSummaryGA, self).__init__(html, xml)
+
+        if html is not None:
+            self.set_elements_from_source(html)
+        if xml is not None:
+            self.set_elements(xml)
+
+    def set_elements_from_gerald_xml(self, read, element):
+        self.lane = int(element.find('laneNumber').text)
+        self.end = read
+        lane_yield_node = element.find('laneYield')
+        if lane_yield_node is not None:
+            self.lane_yield = int(lane_yield_node.text)
+        else:
+            self.lane_yield = None
+
+        for GeraldName, LRSName in LaneResultSummary.GERALD_TAGS.items():
+            node = element.find(GeraldName)
+            if node is None:
+                LOGGER.info("Couldn't find %s" % (GeraldName))
+            setattr(self, LRSName, parse_xml_mean_range(node))
+
+    def set_elements_from_source(self, data):
+        """Read from an initial summary data file. Either xml or html
         """
-        Debugging function, report current object
+        if not len(data) in (8,10):
+            raise RuntimeError("Summary.htm file format changed, len(data)=%d" % (len(data),))
+
+        # same in pre-0.3.0 Summary file and 0.3 summary file
+        self.lane = int(data[0])
+
+        if len(data) == 8:
+            parsed_data = [ parse_mean_range(x) for x in data[1:] ]
+            # this is the < 0.3 Pipeline version
+            self.cluster = parsed_data[0]
+            self.average_first_cycle_intensity = parsed_data[1]
+            self.percent_intensity_after_20_cycles = parsed_data[2]
+            self.percent_pass_filter_clusters = parsed_data[3]
+            self.percent_pass_filter_align = parsed_data[4]
+            self.average_alignment_score = parsed_data[5]
+            self.percent_error_rate = parsed_data[6]
+        elif len(data) == 10:
+            parsed_data = [ parse_mean_range(x) for x in data[2:] ]
+            # this is the >= 0.3 summary file
+            self.lane_yield = data[1]
+            self.cluster = parsed_data[0]
+            self.cluster_pass_filter = parsed_data[1]
+            self.average_first_cycle_intensity = parsed_data[2]
+            self.percent_intensity_after_20_cycles = parsed_data[3]
+            self.percent_pass_filter_clusters = parsed_data[4]
+            self.percent_pass_filter_align = parsed_data[5]
+            self.average_alignment_score = parsed_data[6]
+            self.percent_error_rate = parsed_data[7]
+
+
+class LaneResultSummaryHiSeq(LaneResultSummary):
+    def __init__(self, data=None, xml=None):
+        super(LaneResultSummaryHiSeq, self).__init__(data, xml)
+
+        if data is not None:
+            self.set_elements_from_source(data)
+        if xml is not None:
+            self.set_elements(xml)
+
+    def set_elements_from_source(self, element):
+        """Read from an initial summary data file. Either xml or html
         """
-        tree = self.get_elements()
-        print etree.tostring(tree)
+        # same in pre-0.3.0 Summary file and 0.3 summary file
+        lane = element.attrib
+        self.lane = int(lane['key'])
+        #self.lane_yield = data[1]
+        self.cluster = (int(lane['ClustersRaw']),
+                        float(lane['ClustersRawSD']))
+        self.cluster_pass_filter = (int(lane['ClustersPF']),
+                                    float(lane['ClustersPFSD']))
+        self.average_first_cycle_intensity = (int(lane['FirstCycleIntPF']),
+                                              float(lane['FirstCycleIntPFSD']))
+        self.percent_intensity_after_20_cycles = (
+            float(lane['PrcIntensityAfter20CyclesPF']),
+            float(lane['PrcIntensityAfter20CyclesPFSD']))
+        self.percent_pass_filter_clusters = (
+            float(lane['PrcPFClusters']),
+            float(lane['PrcPFClustersSD']))
+        self.percent_pass_filter_align = (
+            float(lane['PrcAlign']),
+            float(lane['PrcAlignSD']))
+        self.percent_error_rate = (
+            float(lane['ErrRatePhiX']),
+            float(lane['ErrRatePhiXSD']),)
+
 
 def tonumber(v):
     """
index 42cf421587b227bc466b8248e4b58124a775ac65..c6b4d587bbc245daa638b81971a2bee49c4bfd72 100644 (file)
@@ -57,19 +57,21 @@ def make_bustard_config132(image_dir):
 
 def make_aligned_config_1_12(aligned_dir):
     """This is rouglhly equivalent to the old gerald file"""
-    source = os.path.join(TESTDATA_DIR, 'aligned_config_1_12.xml')
+    source = os.path.join(TESTDATA_DIR, '1_12', 'aligned_config_1_12.xml')
     destination = os.path.join(aligned_dir, 'config.xml')
     shutil.copy(source, destination)
 
 def make_unaligned_config_1_12(unaligned_dir):
     demultiplex_pairs = [ # (src,
       # dest),
-        (os.path.join(TESTDATA_DIR, 'demultiplex_1.12.4.2.xml'),
-         os.path.join(unaligned_dir, 'DemultiplexConfig.xml')),
-        (os.path.join(TESTDATA_DIR, 'demultiplexed_bustard_1.12.4.2.xml'),
-         os.path.join(unaligned_dir, 'DemultiplexConfig.xml')),
-        (os.path.join(TESTDATA_DIR, 'demultiplexed_summary_1.12.4.2.xml'),
+        (os.path.join(TESTDATA_DIR, '1_12', 'demultiplex_1.12.4.2.xml'),
          os.path.join(unaligned_dir, 'DemultiplexConfig.xml')),
+        (os.path.join(TESTDATA_DIR, '1_12',
+                      'demultiplexed_bustard_1.12.4.2.xml'),
+         os.path.join(unaligned_dir, 'DemultiplexedBustardConfig.xml')),
+        (os.path.join(TESTDATA_DIR, '1_12',
+                      'demultiplexed_summary_1.12.4.2.xml'),
+         os.path.join(unaligned_dir, 'DemultiplexedBustardSummary.xml')),
     ]
     for src, dest in demultiplex_pairs:
         shutil.copy(src, dest)
@@ -134,7 +136,8 @@ def make_rta_intensities_1_12(data_dir, version='1.12.4.2'):
     if not os.path.exists(intensities_dir):
       os.mkdir(intensities_dir)
 
-    param_file = os.path.join(TESTDATA_DIR, 'rta_intensities_config_1.12.4.2.xml')
+    param_file = os.path.join(TESTDATA_DIR, '1_12',
+                              'rta_intensities_config_1.12.4.2.xml')
     shutil.copy(param_file, os.path.join(intensities_dir, 'RTAConfig.xml'))
 
     return intensities_dir
@@ -175,7 +178,8 @@ def make_rta_basecalls_1_12(intensities_dir):
         os.mkdir(basecalls_dir)
 
     make_qseqs(basecalls_dir, basecall_info=ABXX_BASE_CALL_INFO)
-    param_file = os.path.join(TESTDATA_DIR, 'rta_basecalls_config_1.12.4.2.xml')
+    param_file = os.path.join(TESTDATA_DIR, '1_12',
+                              'rta_basecalls_config_1.12.4.2.xml')
     shutil.copy(param_file, os.path.join(basecalls_dir, 'config.xml'))
 
     return basecalls_dir
@@ -357,6 +361,19 @@ def make_summary_casava1_7_xml(gerald_dir):
     destination = os.path.join(gerald_dir, 'Summary.xml')
     shutil.copy(source, destination)
 
+def make_status_rta1_12(datadir):
+    sourcedir = os.path.join(TESTDATA_DIR, '1_12')
+    status_htm = os.path.join(sourcedir, 'Status.htm')
+    destination = os.path.join(datadir, 'Status.htm')
+    shutil.copy(status_htm, destination)
+
+    status_dir = os.path.join(datadir, 'Status_Files')
+    status_source_dir = os.path.join(sourcedir, 'Status_Files')
+    shutil.copytree(status_source_dir, status_dir)
+
+    report_source_dir = os.path.join(sourcedir, 'reports')
+    report_dir = os.path.join(datadir, 'reports')
+    shutil.copytree(report_source_dir, report_dir)
 
 def make_eland_results(gerald_dir):
     eland_result = """>HWI-EAS229_24_207BTAAXX:1:7:599:759    ACATAGNCACAGACATAAACATAGACATAGAC U0      1       1       3       chrUextra.fa    28189829        R       D.
index f8160ed51b3df985be2598a8296bbfd1cd043143..218ba44e9318ad0d74bc253c583102972c7ef1f4 100644 (file)
@@ -222,12 +222,12 @@ def make_eland_results(gerald_dir):
 >HWI-EAS229_24_207BTAAXX:1:7:205:842    AAACAANNCTCCCAAACACGTAAACTGGAAAA        U1      0       1       0       Lambda.fa        8796855 R       DD      24T
 """
     for i in range(1,9):
-        pathname = os.path.join(gerald_dir, 
+        pathname = os.path.join(gerald_dir,
                                 's_%d_eland_result.txt' % (i,))
         f = open(pathname, 'w')
         f.write(eland_result)
         f.close()
-                     
+
 class RunfolderTests(unittest.TestCase):
     """
     Test components of the runfolder processing code
@@ -237,14 +237,14 @@ class RunfolderTests(unittest.TestCase):
         # make a fake runfolder directory
         self.temp_dir = tempfile.mkdtemp(prefix='tmp_runfolder_')
 
-        self.runfolder_dir = os.path.join(self.temp_dir, 
+        self.runfolder_dir = os.path.join(self.temp_dir,
                                           '080102_HWI-EAS229_0010_207BTAAXX')
         os.mkdir(self.runfolder_dir)
 
         self.data_dir = os.path.join(self.runfolder_dir, 'Data')
         os.mkdir(self.data_dir)
 
-        self.firecrest_dir = os.path.join(self.data_dir, 
+        self.firecrest_dir = os.path.join(self.data_dir,
                                'C1-33_Firecrest1.8.28_12-04-2008_diane'
                              )
         os.mkdir(self.firecrest_dir)
@@ -253,11 +253,11 @@ class RunfolderTests(unittest.TestCase):
         matrix_filename = os.path.join(self.matrix_dir, 's_matrix')
         make_matrix(matrix_filename)
 
-        self.bustard_dir = os.path.join(self.firecrest_dir, 
+        self.bustard_dir = os.path.join(self.firecrest_dir,
                                         'Bustard1.8.28_12-04-2008_diane')
         os.mkdir(self.bustard_dir)
         make_phasing_params(self.bustard_dir)
-        
+
         self.gerald_dir = os.path.join(self.bustard_dir,
                                        'GERALD_12-04-2008_diane')
         os.mkdir(self.gerald_dir)
@@ -273,6 +273,7 @@ class RunfolderTests(unittest.TestCase):
         Construct a firecrest object
         """
         f = firecrest.firecrest(self.firecrest_dir)
+        self.failUnlessEqual(f.software, 'Firecrest')
         self.failUnlessEqual(f.version, '1.8.28')
         self.failUnlessEqual(f.start, 1)
         self.failUnlessEqual(f.stop, 33)
@@ -284,49 +285,52 @@ class RunfolderTests(unittest.TestCase):
         xml_str = ElementTree.tostring(xml)
 
         f2 = firecrest.Firecrest(xml=xml)
-        self.failUnlessEqual(f.version, f2.version)
-        self.failUnlessEqual(f.start,   f2.start)
-        self.failUnlessEqual(f.stop,    f2.stop)
-        self.failUnlessEqual(f.user,    f2.user)
-        self.failUnlessEqual(f.date,    f2.date)
+        self.failUnlessEqual(f.software, f2.software)
+        self.failUnlessEqual(f.version,  f2.version)
+        self.failUnlessEqual(f.start,    f2.start)
+        self.failUnlessEqual(f.stop,     f2.stop)
+        self.failUnlessEqual(f.user,     f2.user)
+        self.failUnlessEqual(f.date,     f2.date)
 
     def test_bustard(self):
         """
         construct a bustard object
         """
         b = bustard.bustard(self.bustard_dir)
+        self.failUnlessEqual(b.software, 'Bustard')
         self.failUnlessEqual(b.version, '1.8.28')
         self.failUnlessEqual(b.date,    date(2008,4,12))
         self.failUnlessEqual(b.user,    'diane')
         self.failUnlessEqual(len(b.phasing), 8)
         self.failUnlessAlmostEqual(b.phasing[8].phasing, 0.0099)
-        
+
         xml = b.get_elements()
         b2 = bustard.Bustard(xml=xml)
-        self.failUnlessEqual(b.version, b2.version)
-        self.failUnlessEqual(b.date,    b2.date )
-        self.failUnlessEqual(b.user,    b2.user)
+        self.failUnlessEqual(b.software, b2.software)
+        self.failUnlessEqual(b.version,  b2.version)
+        self.failUnlessEqual(b.date,     b2.date )
+        self.failUnlessEqual(b.user,     b2.user)
         self.failUnlessEqual(len(b.phasing), len(b2.phasing))
         for key in b.phasing.keys():
-            self.failUnlessEqual(b.phasing[key].lane, 
+            self.failUnlessEqual(b.phasing[key].lane,
                                  b2.phasing[key].lane)
-            self.failUnlessEqual(b.phasing[key].phasing, 
+            self.failUnlessEqual(b.phasing[key].phasing,
                                  b2.phasing[key].phasing)
-            self.failUnlessEqual(b.phasing[key].prephasing, 
+            self.failUnlessEqual(b.phasing[key].prephasing,
                                  b2.phasing[key].prephasing)
 
     def test_gerald(self):
         # need to update gerald and make tests for it
-        g = gerald.gerald(self.gerald_dir) 
+        g = gerald.gerald(self.gerald_dir)
 
-        self.failUnlessEqual(g.version, 
-            '@(#) Id: GERALD.pl,v 1.68.2.2 2007/06/13 11:08:49 km Exp')
+        self.failUnlessEqual(g.software, 'GERALD')
+        self.failUnlessEqual(g.version, '1.68.2.2')
         self.failUnlessEqual(g.date, datetime(2008,4,19,19,8,30))
         self.failUnlessEqual(len(g.lanes), len(g.lanes.keys()))
         self.failUnlessEqual(len(g.lanes), len(g.lanes.items()))
 
-        
-        # list of genomes, matches what was defined up in 
+
+        # list of genomes, matches what was defined up in
         # make_gerald_config.
         # the first None is to offset the genomes list to be 1..9
         # instead of pythons default 0..8
@@ -342,7 +346,7 @@ class RunfolderTests(unittest.TestCase):
             self.failUnlessEqual(cur_lane.use_bases, 'Y'*32)
 
         # test data extracted from summary file
-        clusters = [None, 
+        clusters = [None,
                     (17421, 2139), (20311, 2402), (20193, 2399), (15537, 2531),
                     (32047, 3356), (32946, 4753), (39504, 4171), (37998, 3792)]
 
@@ -385,15 +389,15 @@ class RunfolderTests(unittest.TestCase):
             for lane in g_eland.results[0].keys():
                 g_results = g_eland.results[0][lane]
                 g2_results = g2_eland.results[0][lane]
-                self.failUnlessEqual(g_results.reads, 
+                self.failUnlessEqual(g_results.reads,
                                      g2_results.reads)
-                self.failUnlessEqual(len(g_results.mapped_reads), 
+                self.failUnlessEqual(len(g_results.mapped_reads),
                                      len(g2_results.mapped_reads))
                 for k in g_results.mapped_reads.keys():
                     self.failUnlessEqual(g_results.mapped_reads[k],
                                          g2_results.mapped_reads[k])
 
-                self.failUnlessEqual(len(g_results.match_codes), 
+                self.failUnlessEqual(len(g_results.match_codes),
                                      len(g2_results.match_codes))
                 for k in g_results.match_codes.keys():
                     self.failUnlessEqual(g_results.match_codes[k],
@@ -407,7 +411,7 @@ class RunfolderTests(unittest.TestCase):
         genome_maps = { 1:dm3_map, 2:dm3_map, 3:dm3_map, 4:dm3_map,
                         5:dm3_map, 6:dm3_map, 7:dm3_map, 8:dm3_map }
         eland = gerald.eland(self.gerald_dir, genome_maps=genome_maps)
-        
+
         for i in range(1,9):
             lane = eland.results[0][i]
             self.failUnlessEqual(lane.reads, 4)
@@ -439,12 +443,12 @@ class RunfolderTests(unittest.TestCase):
             self.failUnlessEqual(len(l1.match_codes), 9)
             self.failUnlessEqual(len(l1.match_codes), len(l2.match_codes))
             for k in l1.match_codes.keys():
-                self.failUnlessEqual(l1.match_codes[k], 
+                self.failUnlessEqual(l1.match_codes[k],
                                      l2.match_codes[k])
 
     def test_runfolder(self):
         runs = runfolder.get_runs(self.runfolder_dir)
-        
+
         # do we get the flowcell id from the filename?
         self.failUnlessEqual(len(runs), 1)
         self.failUnlessEqual(runs[0].name, 'run_207BTAAXX_2008-04-19.xml')
@@ -454,7 +458,7 @@ class RunfolderTests(unittest.TestCase):
         runs = runfolder.get_runs(self.runfolder_dir)
         self.failUnlessEqual(len(runs), 1)
         self.failUnlessEqual(runs[0].name, 'run_207BTAAXY_2008-04-19.xml')
-        
+
         r1 = runs[0]
         xml = r1.get_elements()
         xml_str = ElementTree.tostring(xml)
@@ -464,11 +468,11 @@ class RunfolderTests(unittest.TestCase):
         self.failIfEqual(r2.image_analysis, None)
         self.failIfEqual(r2.bustard, None)
         self.failIfEqual(r2.gerald, None)
-        
+
 
 def suite():
     return unittest.makeSuite(RunfolderTests,'test')
 
 if __name__ == "__main__":
     unittest.main(defaultTest="suite")
-    
+
index 0691308229959889fac17ec1149e9b6044c34644..2958d1df5439577a30a7fee88ad32f4a893171f4 100644 (file)
@@ -14,7 +14,7 @@ from htsworkflow.pipelines.runfolder import ElementTree
 
 from htsworkflow.pipelines.test.simulate_runfolder import *
 
-    
+
 def make_summary_htm(gerald_dir):
     summary_htm="""<!--RUN_TIME Wed Jul  2 06:47:44 2008 -->
 <!--SOFTWARE_VERSION @(#) $Id: jerboa.pl,v 1.94 2007/12/04 09:59:07 rshaw Exp $-->
@@ -627,7 +627,7 @@ def make_eland_results(gerald_dir):
 >HWI-EAS229_24_207BTAAXX:1:7:205:842    AAACAANNCTCCCAAACACGTAAACTGGAAAA        U1      0       1       0       Lambda.fa        8796855 R       DD      24T
 """
     for i in range(1,9):
-        pathname = os.path.join(gerald_dir, 
+        pathname = os.path.join(gerald_dir,
                                 's_%d_eland_result.txt' % (i,))
         f = open(pathname, 'w')
         f.write(eland_result)
@@ -640,14 +640,14 @@ def make_runfolder(obj=None):
     # make a fake runfolder directory
     temp_dir = tempfile.mkdtemp(prefix='tmp_runfolder_')
 
-    runfolder_dir = os.path.join(temp_dir, 
+    runfolder_dir = os.path.join(temp_dir,
                                  '080102_HWI-EAS229_0010_207BTAAXX')
     os.mkdir(runfolder_dir)
 
     data_dir = os.path.join(runfolder_dir, 'Data')
     os.mkdir(data_dir)
 
-    firecrest_dir = os.path.join(data_dir, 
+    firecrest_dir = os.path.join(data_dir,
                                  'C1-33_Firecrest1.8.28_12-04-2008_diane'
                                  )
     os.mkdir(firecrest_dir)
@@ -656,7 +656,7 @@ def make_runfolder(obj=None):
     matrix_filename = os.path.join(matrix_dir, 's_matrix.txt')
     make_matrix(matrix_filename)
 
-    bustard_dir = os.path.join(firecrest_dir, 
+    bustard_dir = os.path.join(firecrest_dir,
                                'Bustard1.8.28_12-04-2008_diane')
     os.mkdir(bustard_dir)
     make_phasing_params(bustard_dir)
@@ -676,8 +676,8 @@ def make_runfolder(obj=None):
         obj.matrix_dir = matrix_dir
         obj.bustard_dir = bustard_dir
         obj.gerald_dir = gerald_dir
-        
-                     
+
+
 class RunfolderTests(unittest.TestCase):
     """
     Test components of the runfolder processing code
@@ -695,6 +695,7 @@ class RunfolderTests(unittest.TestCase):
         Construct a firecrest object
         """
         f = firecrest.firecrest(self.firecrest_dir)
+        self.failUnlessEqual(f.software, 'Firecrest')
         self.failUnlessEqual(f.version, '1.8.28')
         self.failUnlessEqual(f.start, 1)
         self.failUnlessEqual(f.stop, 33)
@@ -706,49 +707,52 @@ class RunfolderTests(unittest.TestCase):
         xml_str = ElementTree.tostring(xml)
 
         f2 = firecrest.Firecrest(xml=xml)
-        self.failUnlessEqual(f.version, f2.version)
-        self.failUnlessEqual(f.start,   f2.start)
-        self.failUnlessEqual(f.stop,    f2.stop)
-        self.failUnlessEqual(f.user,    f2.user)
-        self.failUnlessEqual(f.date,    f2.date)
+        self.failUnlessEqual(f.software, f2.software)
+        self.failUnlessEqual(f.version,  f2.version)
+        self.failUnlessEqual(f.start,    f2.start)
+        self.failUnlessEqual(f.stop,     f2.stop)
+        self.failUnlessEqual(f.user,     f2.user)
+        self.failUnlessEqual(f.date,     f2.date)
 
     def test_bustard(self):
         """
         construct a bustard object
         """
         b = bustard.bustard(self.bustard_dir)
+        self.failUnlessEqual(b.software, 'Bustard')
         self.failUnlessEqual(b.version, '1.8.28')
         self.failUnlessEqual(b.date,    date(2008,4,12))
         self.failUnlessEqual(b.user,    'diane')
         self.failUnlessEqual(len(b.phasing), 8)
         self.failUnlessAlmostEqual(b.phasing[8].phasing, 0.0099)
-        
+
         xml = b.get_elements()
         b2 = bustard.Bustard(xml=xml)
-        self.failUnlessEqual(b.version, b2.version)
-        self.failUnlessEqual(b.date,    b2.date )
-        self.failUnlessEqual(b.user,    b2.user)
+        self.failUnlessEqual(b.software, b2.software)
+        self.failUnlessEqual(b.version,  b2.version)
+        self.failUnlessEqual(b.date,     b2.date )
+        self.failUnlessEqual(b.user,     b2.user)
         self.failUnlessEqual(len(b.phasing), len(b2.phasing))
         for key in b.phasing.keys():
-            self.failUnlessEqual(b.phasing[key].lane, 
+            self.failUnlessEqual(b.phasing[key].lane,
                                  b2.phasing[key].lane)
-            self.failUnlessEqual(b.phasing[key].phasing, 
+            self.failUnlessEqual(b.phasing[key].phasing,
                                  b2.phasing[key].phasing)
-            self.failUnlessEqual(b.phasing[key].prephasing, 
+            self.failUnlessEqual(b.phasing[key].prephasing,
                                  b2.phasing[key].prephasing)
 
     def test_gerald(self):
         # need to update gerald and make tests for it
-        g = gerald.gerald(self.gerald_dir) 
+        g = gerald.gerald(self.gerald_dir)
 
-        self.failUnlessEqual(g.version, 
-            '@(#) Id: GERALD.pl,v 1.68.2.2 2007/06/13 11:08:49 km Exp')
+        self.failUnlessEqual(g.software, 'GERALD')
+        self.failUnlessEqual(g.version, '1.68.2.2')
         self.failUnlessEqual(g.date, datetime(2008,4,19,19,8,30))
         self.failUnlessEqual(len(g.lanes), len(g.lanes.keys()))
         self.failUnlessEqual(len(g.lanes), len(g.lanes.items()))
 
-        
-        # list of genomes, matches what was defined up in 
+
+        # list of genomes, matches what was defined up in
         # make_gerald_config.
         # the first None is to offset the genomes list to be 1..9
         # instead of pythons default 0..8
@@ -764,9 +768,9 @@ class RunfolderTests(unittest.TestCase):
             self.failUnlessEqual(cur_lane.use_bases, 'Y'*32)
 
         # test data extracted from summary file
-        clusters = [None, 
-                    (96483, 9074), (133738, 7938), 
-                    (152142, 10002), (15784, 2162), 
+        clusters = [None,
+                    (96483, 9074), (133738, 7938),
+                    (152142, 10002), (15784, 2162),
                     (119735, 8465), (152177, 8146),
                     (84649, 7325), (54622, 4812),]
 
@@ -809,15 +813,15 @@ class RunfolderTests(unittest.TestCase):
             for lane in g_eland.results[0].keys():
                 g_results = g_eland.results[0][lane]
                 g2_results = g2_eland.results[0][lane]
-                self.failUnlessEqual(g_results.reads, 
+                self.failUnlessEqual(g_results.reads,
                                      g2_results.reads)
-                self.failUnlessEqual(len(g_results.mapped_reads), 
+                self.failUnlessEqual(len(g_results.mapped_reads),
                                      len(g2_results.mapped_reads))
                 for k in g_results.mapped_reads.keys():
                     self.failUnlessEqual(g_results.mapped_reads[k],
                                          g2_results.mapped_reads[k])
 
-                self.failUnlessEqual(len(g_results.match_codes), 
+                self.failUnlessEqual(len(g_results.match_codes),
                                      len(g2_results.match_codes))
                 for k in g_results.match_codes.keys():
                     self.failUnlessEqual(g_results.match_codes[k],
@@ -831,7 +835,7 @@ class RunfolderTests(unittest.TestCase):
         genome_maps = { 1:dm3_map, 2:dm3_map, 3:dm3_map, 4:dm3_map,
                         5:dm3_map, 6:dm3_map, 7:dm3_map, 8:dm3_map }
         eland = gerald.eland(self.gerald_dir, genome_maps=genome_maps)
-        
+
         for i in range(1,9):
             lane = eland.results[0][i]
             self.failUnlessEqual(lane.reads, 4)
@@ -863,12 +867,12 @@ class RunfolderTests(unittest.TestCase):
             self.failUnlessEqual(len(l1.match_codes), 9)
             self.failUnlessEqual(len(l1.match_codes), len(l2.match_codes))
             for k in l1.match_codes.keys():
-                self.failUnlessEqual(l1.match_codes[k], 
+                self.failUnlessEqual(l1.match_codes[k],
                                      l2.match_codes[k])
 
     def test_runfolder(self):
         runs = runfolder.get_runs(self.runfolder_dir)
-        
+
         # do we get the flowcell id from the filename?
         self.failUnlessEqual(len(runs), 1)
         self.failUnlessEqual(runs[0].name, 'run_207BTAAXX_2008-04-19.xml')
@@ -878,7 +882,7 @@ class RunfolderTests(unittest.TestCase):
         runs = runfolder.get_runs(self.runfolder_dir)
         self.failUnlessEqual(len(runs), 1)
         self.failUnlessEqual(runs[0].name, 'run_207BTAAXY_2008-04-19.xml')
-        
+
         r1 = runs[0]
         xml = r1.get_elements()
         xml_str = ElementTree.tostring(xml)
@@ -888,11 +892,11 @@ class RunfolderTests(unittest.TestCase):
         self.failIfEqual(r2.image_analysis, None)
         self.failIfEqual(r2.bustard, None)
         self.failIfEqual(r2.gerald, None)
-        
+
 
 def suite():
     return unittest.makeSuite(RunfolderTests,'test')
 
 if __name__ == "__main__":
     unittest.main(defaultTest="suite")
-    
+
index fc91ce43ee3e32e23db57a0dae650cb66f15c438..f9508b4b8873fb438549c814e4abd174f194381a 100644 (file)
@@ -75,6 +75,7 @@ class RunfolderTests(unittest.TestCase):
         Construct a firecrest object
         """
         f = firecrest.firecrest(self.image_analysis_dir)
+        self.failUnlessEqual(f.software, 'Firecrest')
         self.failUnlessEqual(f.version, '1.9.6')
         self.failUnlessEqual(f.start, 1)
         self.failUnlessEqual(f.stop, 37)
@@ -86,6 +87,7 @@ class RunfolderTests(unittest.TestCase):
         xml_str = ElementTree.tostring(xml)
 
         f2 = firecrest.Firecrest(xml=xml)
+        self.failUnlessEqual(f.software, f2.software)
         self.failUnlessEqual(f.version, f2.version)
         self.failUnlessEqual(f.start,   f2.start)
         self.failUnlessEqual(f.stop,    f2.stop)
@@ -96,6 +98,7 @@ class RunfolderTests(unittest.TestCase):
         construct a bustard object
         """
         b = bustard.bustard(self.bustard_dir)
+        self.failUnlessEqual(b.software, 'Bustard')
         self.failUnlessEqual(b.version, '1.9.6')
         self.failUnlessEqual(b.date,    date(2008,10,20))
         self.failUnlessEqual(b.user,    'diane')
@@ -104,6 +107,7 @@ class RunfolderTests(unittest.TestCase):
 
         xml = b.get_elements()
         b2 = bustard.Bustard(xml=xml)
+        self.failUnlessEqual(b.software, b2.software)
         self.failUnlessEqual(b.version, b2.version)
         self.failUnlessEqual(b.date,    b2.date )
         self.failUnlessEqual(b.user,    b2.user)
@@ -120,8 +124,8 @@ class RunfolderTests(unittest.TestCase):
         # need to update gerald and make tests for it
         g = gerald.gerald(self.gerald_dir)
 
-        self.failUnlessEqual(g.version,
-            '@(#) Id: GERALD.pl,v 1.171 2008/05/19 17:36:14 mzerara Exp')
+        self.failUnlessEqual(g.software, 'GERALD')
+        self.failUnlessEqual(g.version, '1.171')
         self.failUnlessEqual(g.date, datetime(2009,2,22,21,15,59))
         self.failUnlessEqual(len(g.lanes), len(g.lanes.keys()))
         self.failUnlessEqual(len(g.lanes), len(g.lanes.items()))
@@ -131,14 +135,14 @@ class RunfolderTests(unittest.TestCase):
         # make_gerald_config.
         # the first None is to offset the genomes list to be 1..9
         # instead of pythons default 0..8
-        genomes = [None, 
-                   '/g/mm9', 
-                   '/g/mm9', 
-                   '/g/elegans190', 
+        genomes = [None,
+                   '/g/mm9',
+                   '/g/mm9',
+                   '/g/elegans190',
                    '/g/arabidopsis01222004',
-                   '/g/mm9', 
-                   '/g/mm9', 
-                   '/g/mm9', 
+                   '/g/mm9',
+                   '/g/mm9',
+                   '/g/mm9',
                    '/g/mm9', ]
 
         # test lane specific parameters from gerald config file
@@ -176,6 +180,7 @@ class RunfolderTests(unittest.TestCase):
         g2 = gerald.Gerald(xml=xml)
 
         # do it all again after extracting from the xml file
+        self.failUnlessEqual(g.software, g2.software)
         self.failUnlessEqual(g.version, g2.version)
         self.failUnlessEqual(g.date, g2.date)
         self.failUnlessEqual(len(g.lanes.keys()), len(g2.lanes.keys()))
index 5a792d729fcc9722861760facf70c9ecb9fb9ef9..9f26a43d84648fcc40f4b24b665b393a1da480cf 100644 (file)
@@ -71,6 +71,7 @@ class RunfolderTests(unittest.TestCase):
     def test_bustard(self):
         """Construct a bustard object"""
         b = bustard.bustard(self.bustard_dir)
+        self.failUnlessEqual(b.software, 'RTA')
         self.failUnlessEqual(b.version, '1.10.36.0')
         self.failUnlessEqual(b.date,    None)
         self.failUnlessEqual(b.user,    None)
@@ -78,16 +79,17 @@ class RunfolderTests(unittest.TestCase):
 
         xml = b.get_elements()
         b2 = bustard.Bustard(xml=xml)
-        self.failUnlessEqual(b.version, b2.version)
-        self.failUnlessEqual(b.date,    b2.date )
-        self.failUnlessEqual(b.user,    b2.user)
+        self.failUnlessEqual(b.software, b2.software)
+        self.failUnlessEqual(b.version,  b2.version)
+        self.failUnlessEqual(b.date,     b2.date )
+        self.failUnlessEqual(b.user,     b2.user)
 
     def test_gerald(self):
         # need to update gerald and make tests for it
         g = gerald.gerald(self.gerald_dir)
 
-        self.failUnlessEqual(g.version,
-            'CASAVA-1.7.0')
+        self.failUnlessEqual(g.software, 'CASAVA')
+        self.failUnlessEqual(g.version, '1.7.0')
         self.failUnlessEqual(g.date, datetime(2011,5,2,19,19,49))
         self.failUnlessEqual(len(g.lanes), len(g.lanes.keys()))
         self.failUnlessEqual(len(g.lanes), len(g.lanes.items()))
@@ -150,6 +152,7 @@ class RunfolderTests(unittest.TestCase):
         g2 = gerald.Gerald(xml=xml)
 
         # do it all again after extracting from the xml file
+        self.failUnlessEqual(g.software, g2.software)
         self.failUnlessEqual(g.version, g2.version)
         self.failUnlessEqual(g.date, g2.date)
         self.failUnlessEqual(len(g.lanes.keys()), len(g2.lanes.keys()))
index d58a70d991f0b9d384693b65edb9c811f074762f..7913ed079a045c64e910a51addf625a4132c223b 100644 (file)
@@ -75,6 +75,7 @@ class RunfolderTests(unittest.TestCase):
         Construct a firecrest object
         """
         i = ipar.ipar(self.image_analysis_dir)
+        self.failUnlessEqual(i.software, 'IPAR')
         self.failUnlessEqual(i.version, '2.01.192.0')
         self.failUnlessEqual(i.start, 1)
         self.failUnlessEqual(i.stop, 37)
@@ -84,6 +85,7 @@ class RunfolderTests(unittest.TestCase):
         xml_str = ElementTree.tostring(xml)
 
         i2 = ipar.IPAR(xml=xml)
+        self.failUnlessEqual(i.software, i2.software)
         self.failUnlessEqual(i.version, i2.version)
         self.failUnlessEqual(i.start,   i2.start)
         self.failUnlessEqual(i.stop,    i2.stop)
@@ -95,6 +97,7 @@ class RunfolderTests(unittest.TestCase):
         construct a bustard object
         """
         b = bustard.bustard(self.bustard_dir)
+        self.failUnlessEqual(b.software, 'Bustard')
         self.failUnlessEqual(b.version, '1.8.28')
         self.failUnlessEqual(b.date,    date(2008,4,12))
         self.failUnlessEqual(b.user,    'diane')
@@ -103,6 +106,7 @@ class RunfolderTests(unittest.TestCase):
 
         xml = b.get_elements()
         b2 = bustard.Bustard(xml=xml)
+        self.failUnlessEqual(b.software, b2.software)
         self.failUnlessEqual(b.version, b2.version)
         self.failUnlessEqual(b.date,    b2.date )
         self.failUnlessEqual(b.user,    b2.user)
@@ -119,8 +123,8 @@ class RunfolderTests(unittest.TestCase):
         # need to update gerald and make tests for it
         g = gerald.gerald(self.gerald_dir)
 
-        self.failUnlessEqual(g.version,
-            '@(#) Id: GERALD.pl,v 1.171 2008/05/19 17:36:14 mzerara Exp')
+        self.failUnlessEqual(g.software, 'GERALD')
+        self.failUnlessEqual(g.version, '1.171')
         self.failUnlessEqual(g.date, datetime(2009,2,22,21,15,59))
         self.failUnlessEqual(len(g.lanes), len(g.lanes.keys()))
         self.failUnlessEqual(len(g.lanes), len(g.lanes.items()))
@@ -130,14 +134,14 @@ class RunfolderTests(unittest.TestCase):
         # make_gerald_config.
         # the first None is to offset the genomes list to be 1..9
         # instead of pythons default 0..8
-        genomes = [None, 
-                   '/g/mm9', 
-                   '/g/mm9', 
-                   '/g/elegans190', 
+        genomes = [None,
+                   '/g/mm9',
+                   '/g/mm9',
+                   '/g/elegans190',
                    '/g/arabidopsis01222004',
-                   '/g/mm9', 
-                   '/g/mm9', 
-                   '/g/mm9', 
+                   '/g/mm9',
+                   '/g/mm9',
+                   '/g/mm9',
                    '/g/mm9', ]
 
         # test lane specific parameters from gerald config file
@@ -173,6 +177,7 @@ class RunfolderTests(unittest.TestCase):
         g2 = gerald.Gerald(xml=xml)
 
         # do it all again after extracting from the xml file
+        self.failUnlessEqual(g.software, g2.software)
         self.failUnlessEqual(g.version, g2.version)
         self.failUnlessEqual(g.date, g2.date)
         self.failUnlessEqual(len(g.lanes.keys()), len(g2.lanes.keys()))
index 13011bacf4916b9ef14cd2dc9b848c0188d82483..011a993a484339d7eff1ca88876ca0af73b00f8b 100644 (file)
@@ -73,6 +73,7 @@ class RunfolderTests(unittest.TestCase):
         Construct a firecrest object
         """
         i = ipar.ipar(self.image_analysis_dir)
+        self.failUnlessEqual(i.software, 'IPAR')
         self.failUnlessEqual(i.version, '2.01.192.0')
         self.failUnlessEqual(i.start, 1)
         self.failUnlessEqual(i.stop, 37)
@@ -82,6 +83,7 @@ class RunfolderTests(unittest.TestCase):
         xml_str = ElementTree.tostring(xml)
 
         i2 = ipar.IPAR(xml=xml)
+        self.failUnlessEqual(i.software, i2.software)
         self.failUnlessEqual(i.version, i2.version)
         self.failUnlessEqual(i.start,   i2.start)
         self.failUnlessEqual(i.stop,    i2.stop)
@@ -114,6 +116,7 @@ class RunfolderTests(unittest.TestCase):
             self.failUnlessAlmostEqual(crosstalk.base['G'][3], -0.02)
 
         b = bustard.bustard(self.bustard_dir)
+        self.failUnlessEqual(b.software, 'Bustard')
         self.failUnlessEqual(b.version, '1.3.2')
         self.failUnlessEqual(b.date,    date(2008,3,15))
         self.failUnlessEqual(b.user,    'diane')
@@ -124,6 +127,7 @@ class RunfolderTests(unittest.TestCase):
 
         xml = b.get_elements()
         b2 = bustard.Bustard(xml=xml)
+        self.failUnlessEqual(b.software, b2.software)
         self.failUnlessEqual(b.version, b2.version)
         self.failUnlessEqual(b.date,    b2.date )
         self.failUnlessEqual(b.user,    b2.user)
@@ -141,8 +145,8 @@ class RunfolderTests(unittest.TestCase):
         # need to update gerald and make tests for it
         g = gerald.gerald(self.gerald_dir)
 
-        self.failUnlessEqual(g.version,
-            '@(#) Id: GERALD.pl,v 1.171 2008/05/19 17:36:14 mzerara Exp')
+        self.failUnlessEqual(g.software, 'GERALD')
+        self.failUnlessEqual(g.version, '1.171')
         self.failUnlessEqual(g.date, datetime(2009,2,22,21,15,59))
         self.failUnlessEqual(len(g.lanes), len(g.lanes.keys()))
         self.failUnlessEqual(len(g.lanes), len(g.lanes.items()))
@@ -152,14 +156,14 @@ class RunfolderTests(unittest.TestCase):
         # make_gerald_config.
         # the first None is to offset the genomes list to be 1..9
         # instead of pythons default 0..8
-        genomes = [None, 
-                   '/g/mm9', 
-                   '/g/mm9', 
-                   '/g/elegans190', 
+        genomes = [None,
+                   '/g/mm9',
+                   '/g/mm9',
+                   '/g/elegans190',
                    '/g/arabidopsis01222004',
-                   '/g/mm9', 
-                   '/g/mm9', 
-                   '/g/mm9', 
+                   '/g/mm9',
+                   '/g/mm9',
+                   '/g/mm9',
                    '/g/mm9', ]
 
         # test lane specific parameters from gerald config file
@@ -195,6 +199,7 @@ class RunfolderTests(unittest.TestCase):
         g2 = gerald.Gerald(xml=xml)
 
         # do it all again after extracting from the xml file
+        self.failUnlessEqual(g.software, g2.software)
         self.failUnlessEqual(g.version, g2.version)
         self.failUnlessEqual(g.date, g2.date)
         self.failUnlessEqual(len(g.lanes.keys()), len(g2.lanes.keys()))
index c0fb6842071c794389145bb36326f9b67b400a56..7483fe2887c1dcaa2f8d9b4f283d2496c8f66231 100644 (file)
@@ -75,11 +75,12 @@ class RunfolderTests(unittest.TestCase):
         Construct a firecrest object
         """
         f = firecrest.firecrest(self.image_analysis_dir)
+        self.failUnlessEqual(f.software, 'Firecrest')
         self.failUnlessEqual(f.version, '1.9.6')
         self.failUnlessEqual(f.start, 1)
         self.failUnlessEqual(f.stop, 152)
         self.failUnlessEqual(f.user, 'diane')
-        # As of 2008-12-8, the date was being set in 
+        # As of 2008-12-8, the date was being set in
         # simulate_runfolder.make_firecrest_dir
         self.failUnlessEqual(f.date, date(2008,4,12))
 
@@ -88,6 +89,7 @@ class RunfolderTests(unittest.TestCase):
         xml_str = ElementTree.tostring(xml)
 
         f2 = firecrest.Firecrest(xml=xml)
+        self.failUnlessEqual(f.software, f2.software)
         self.failUnlessEqual(f.version, f2.version)
         self.failUnlessEqual(f.start,   f2.start)
         self.failUnlessEqual(f.stop,    f2.stop)
@@ -98,6 +100,7 @@ class RunfolderTests(unittest.TestCase):
         construct a bustard object
         """
         b = bustard.bustard(self.bustard_dir)
+        self.failUnlessEqual(b.software, 'Bustard')
         self.failUnlessEqual(b.version, '1.8.28')
         self.failUnlessEqual(b.date,    date(2008,4,12))
         self.failUnlessEqual(b.user,    'diane')
@@ -106,6 +109,7 @@ class RunfolderTests(unittest.TestCase):
 
         xml = b.get_elements()
         b2 = bustard.Bustard(xml=xml)
+        self.failUnlessEqual(b.software, b2.software)
         self.failUnlessEqual(b.version, b2.version)
         self.failUnlessEqual(b.date,    b2.date )
         self.failUnlessEqual(b.user,    b2.user)
@@ -122,8 +126,8 @@ class RunfolderTests(unittest.TestCase):
         # need to update gerald and make tests for it
         g = gerald.gerald(self.gerald_dir)
 
-        self.failUnlessEqual(g.version,
-            '@(#) Id: GERALD.pl,v 1.171 2008/05/19 17:36:14 mzerara Exp')
+        self.failUnlessEqual(g.software, 'GERALD')
+        self.failUnlessEqual(g.version, '1.171')
         self.failUnlessEqual(g.date, datetime(2009,2,22,21,15,59))
         self.failUnlessEqual(len(g.lanes), len(g.lanes.keys()))
         self.failUnlessEqual(len(g.lanes), len(g.lanes.items()))
@@ -133,14 +137,14 @@ class RunfolderTests(unittest.TestCase):
         # make_gerald_config.
         # the first None is to offset the genomes list to be 1..9
         # instead of pythons default 0..8
-        genomes = [None, 
-                   '/g/mm9', 
-                   '/g/mm9', 
-                   '/g/elegans190', 
+        genomes = [None,
+                   '/g/mm9',
+                   '/g/mm9',
+                   '/g/elegans190',
                    '/g/arabidopsis01222004',
-                   '/g/mm9', 
-                   '/g/mm9', 
-                   '/g/mm9', 
+                   '/g/mm9',
+                   '/g/mm9',
+                   '/g/mm9',
                    '/g/mm9', ]
 
         # test lane specific parameters from gerald config file
@@ -181,6 +185,7 @@ class RunfolderTests(unittest.TestCase):
         g2 = gerald.Gerald(xml=xml)
 
         # do it all again after extracting from the xml file
+        self.failUnlessEqual(g.software, g2.software)
         self.failUnlessEqual(g.version, g2.version)
         self.failUnlessEqual(g.date, g2.date)
         self.failUnlessEqual(len(g.lanes.keys()), len(g2.lanes.keys()))
index 08db8e26db740e1c2e67e8cc5ec93e2acc0de89b..02b8e4424354b30bbe509be4df1caef392213ec2 100644 (file)
@@ -106,8 +106,7 @@ class RunfolderTests(unittest.TestCase):
         # need to update gerald and make tests for it
         g = gerald.gerald(self.gerald_dir)
 
-        self.failUnlessEqual(g.version,
-            '@(#) Id: GERALD.pl,v 1.171 2008/05/19 17:36:14 mzerara Exp')
+        self.failUnlessEqual(g.version, '1.171')
         self.failUnlessEqual(g.date, datetime(2009,2,22,21,15,59))
         self.failUnlessEqual(len(g.lanes), len(g.lanes.keys()))
         self.failUnlessEqual(len(g.lanes), len(g.lanes.items()))
@@ -117,14 +116,14 @@ class RunfolderTests(unittest.TestCase):
         # make_gerald_config.
         # the first None is to offset the genomes list to be 1..9
         # instead of pythons default 0..8
-        genomes = [None, 
-                   '/g/mm9', 
-                   '/g/mm9', 
-                   '/g/elegans190', 
+        genomes = [None,
+                   '/g/mm9',
+                   '/g/mm9',
+                   '/g/elegans190',
                    '/g/arabidopsis01222004',
-                   '/g/mm9', 
-                   '/g/mm9', 
-                   '/g/mm9', 
+                   '/g/mm9',
+                   '/g/mm9',
+                   '/g/mm9',
                    '/g/mm9', ]
 
         # test lane specific parameters from gerald config file
index d446e49065c3ebea72f6eba1eb75fe5d6784efc2..137fc4115247cead0f823c183c3a7bf8a0637201 100644 (file)
@@ -70,13 +70,13 @@ class RunfolderTests(unittest.TestCase):
     # The only thing different from the previous RTA version is
     # I'm processing the Summary.xml file
 
-    
+
     def test_gerald(self):
         # need to update gerald and make tests for it
         g = gerald.gerald(self.gerald_dir)
 
-        self.failUnlessEqual(g.version,
-            '@(#) Id: GERALD.pl,v 1.171 2008/05/19 17:36:14 mzerara Exp')
+        self.failUnlessEqual(g.software, 'GERALD')
+        self.failUnlessEqual(g.version, '1.171')
         self.failUnlessEqual(g.date, datetime(2009,2,22,21,15,59))
         self.failUnlessEqual(len(g.lanes), len(g.lanes.keys()))
         self.failUnlessEqual(len(g.lanes), len(g.lanes.items()))
@@ -86,14 +86,14 @@ class RunfolderTests(unittest.TestCase):
         # make_gerald_config.
         # the first None is to offset the genomes list to be 1..9
         # instead of pythons default 0..8
-        genomes = [None, 
-                   '/g/mm9', 
-                   '/g/mm9', 
-                   '/g/elegans190', 
+        genomes = [None,
+                   '/g/mm9',
+                   '/g/mm9',
+                   '/g/elegans190',
                    '/g/arabidopsis01222004',
-                   '/g/mm9', 
-                   '/g/mm9', 
-                   '/g/mm9', 
+                   '/g/mm9',
+                   '/g/mm9',
+                   '/g/mm9',
                    '/g/mm9', ]
 
         # test lane specific parameters from gerald config file
@@ -130,6 +130,7 @@ class RunfolderTests(unittest.TestCase):
         return
 
         # do it all again after extracting from the xml file
+        self.failUnlessEqual(g.software, g2.software)
         self.failUnlessEqual(g.version, g2.version)
         self.failUnlessEqual(g.date, g2.date)
         self.failUnlessEqual(len(g.lanes.keys()), len(g2.lanes.keys()))
index 7475b3662786fc9c2edeb29210985fddbc40a4c4..83400643acd10af00caf5d6afe7501093631a894 100644 (file)
@@ -68,6 +68,7 @@ class RunfolderTests(unittest.TestCase):
     def test_bustard(self):
         """Construct a bustard object"""
         b = bustard.bustard(self.bustard_dir)
+        self.failUnlessEqual(b.software, 'RTA')
         self.failUnlessEqual(b.version, '1.8.70.0')
         self.failUnlessEqual(b.date,    None)
         self.failUnlessEqual(b.user,    None)
@@ -75,16 +76,17 @@ class RunfolderTests(unittest.TestCase):
 
         xml = b.get_elements()
         b2 = bustard.Bustard(xml=xml)
+        self.failUnlessEqual(b.software, b2.software)
         self.failUnlessEqual(b.version, b2.version)
         self.failUnlessEqual(b.date,    b2.date )
         self.failUnlessEqual(b.user,    b2.user)
-        
+
     def test_gerald(self):
         # need to update gerald and make tests for it
         g = gerald.gerald(self.gerald_dir)
 
-        self.failUnlessEqual(g.version,
-            '@(#) Id: GERALD.pl,v 1.171 2008/05/19 17:36:14 mzerara Exp')
+        self.failUnlessEqual(g.software, 'GERALD')
+        self.failUnlessEqual(g.version, '1.171')
         self.failUnlessEqual(g.date, datetime(2009,2,22,21,15,59))
         self.failUnlessEqual(len(g.lanes), len(g.lanes.keys()))
         self.failUnlessEqual(len(g.lanes), len(g.lanes.items()))
@@ -94,14 +96,14 @@ class RunfolderTests(unittest.TestCase):
         # make_gerald_config.
         # the first None is to offset the genomes list to be 1..9
         # instead of pythons default 0..8
-        genomes = [None, 
-                   '/g/mm9', 
-                   '/g/mm9', 
-                   '/g/elegans190', 
+        genomes = [None,
+                   '/g/mm9',
+                   '/g/mm9',
+                   '/g/elegans190',
                    '/g/arabidopsis01222004',
-                   '/g/mm9', 
-                   '/g/mm9', 
-                   '/g/mm9', 
+                   '/g/mm9',
+                   '/g/mm9',
+                   '/g/mm9',
                    '/g/mm9', ]
 
         # test lane specific parameters from gerald config file
@@ -138,6 +140,7 @@ class RunfolderTests(unittest.TestCase):
         return
 
         # do it all again after extracting from the xml file
+        self.failUnlessEqual(g.software, g2.version)
         self.failUnlessEqual(g.version, g2.version)
         self.failUnlessEqual(g.date, g2.date)
         self.failUnlessEqual(len(g.lanes.keys()), len(g2.lanes.keys()))
index 927cf61072f038eb626f4a07deecd937dbbd71b6..0f4676102ebe71fb7005b15220c7c0510f5f5ed1 100644 (file)
@@ -1,6 +1,7 @@
 #!/usr/bin/env python
 
 from datetime import datetime, date
+import logging
 import os
 import tempfile
 import shutil
@@ -32,6 +33,7 @@ def make_runfolder(obj=None):
     os.mkdir(data_dir)
 
     intensities_dir = make_rta_intensities_1_12(data_dir)
+    make_status_rta1_12(data_dir)
 
     basecalls_dir = make_rta_basecalls_1_12(intensities_dir)
     make_matrix_dir_rta_1_12(basecalls_dir)
@@ -70,64 +72,54 @@ class RunfolderTests(unittest.TestCase):
     def test_bustard(self):
         """Construct a bustard object"""
         b = bustard.bustard(self.bustard_dir)
-        self.failUnlessEqual(b.version, '1.8.70.0')
+        self.failUnlessEqual(b.software, 'RTA')
+        self.failUnlessEqual(b.version, '1.12.4.2')
         self.failUnlessEqual(b.date,    None)
         self.failUnlessEqual(b.user,    None)
         self.failUnlessEqual(len(b.phasing), 0)
 
         xml = b.get_elements()
         b2 = bustard.Bustard(xml=xml)
-        self.failUnlessEqual(b.version, b2.version)
-        self.failUnlessEqual(b.date,    b2.date )
-        self.failUnlessEqual(b.user,    b2.user)
+        self.failUnlessEqual(b.software, b2.software)
+        self.failUnlessEqual(b.version,  b2.version)
+        self.failUnlessEqual(b.date,     b2.date )
+        self.failUnlessEqual(b.user,     b2.user)
 
     def test_gerald(self):
         # need to update gerald and make tests for it
         g = gerald.gerald(self.gerald_dir)
 
-        self.failUnlessEqual(g.version,
-            '@(#) Id: GERALD.pl,v 1.171 2008/05/19 17:36:14 mzerara Exp')
-        self.failUnlessEqual(g.date, datetime(2009,2,22,21,15,59))
+        self.failUnlessEqual(g.software, 'CASAVA')
+        self.failUnlessEqual(g.version, '1.8.1')
         self.failUnlessEqual(len(g.lanes), len(g.lanes.keys()))
         self.failUnlessEqual(len(g.lanes), len(g.lanes.items()))
 
-
         # list of genomes, matches what was defined up in
         # make_gerald_config.
         # the first None is to offset the genomes list to be 1..9
         # instead of pythons default 0..8
-        genomes = [None,
-                   '/g/mm9',
-                   '/g/mm9',
-                   '/g/elegans190',
-                   '/g/arabidopsis01222004',
-                   '/g/mm9',
-                   '/g/mm9',
-                   '/g/mm9',
-                   '/g/mm9', ]
-
         # test lane specific parameters from gerald config file
-        for i in range(1,9):
-            cur_lane = g.lanes[i]
-            self.failUnlessEqual(cur_lane.analysis, 'eland_extended')
-            self.failUnlessEqual(cur_lane.eland_genome, genomes[i])
-            self.failUnlessEqual(cur_lane.read_length, '37')
-            self.failUnlessEqual(cur_lane.use_bases, 'Y'*37)
-
-        # I want to be able to use a simple iterator
-        for l in g.lanes.values():
-          self.failUnlessEqual(l.analysis, 'eland_extended')
-          self.failUnlessEqual(l.read_length, '37')
-          self.failUnlessEqual(l.use_bases, 'Y'*37)
+
+        undetermined = g.lanes['Undetermined_indices']
+        self.failUnlessEqual(undetermined.analysis, 'none')
+        self.failUnlessEqual(undetermined.read_length, None)
+        self.failUnlessEqual(undetermined.use_bases, None)
+
+        project = g.lanes['12383']
+        self.failUnlessEqual(project.analysis, 'eland_extended')
+        self.failUnlessEqual(project.eland_genome, '/g/hg18/chromosomes/')
+        self.failUnlessEqual(project.read_length, '49')
+        self.failUnlessEqual(project.use_bases, 'y'*49+'n')
 
         # test data extracted from summary file
         clusters = [None,
-                    (281331, 11169), (203841, 13513),
-                    (220889, 15653), (137294, 14666),
-                    (129388, 14525), (262092, 10751),
-                    (185754, 13503), (233765, 9537),]
+                    (3878755,  579626.0), (3920639, 1027332.4),
+                    (5713049,  876187.3), (5852907,  538640.6),
+                    (4006751, 1265247.4), (5678021,  627070.7),
+                    (1854131,  429053.2), (4777517,  592904.0),
+                   ]
 
-        self.failUnlessEqual(len(g.summary), 1)
+        self.failUnlessEqual(len(g.summary), 2)
         for i in range(1,9):
             summary_lane = g.summary[0][i]
             self.failUnlessEqual(summary_lane.cluster, clusters[i])
@@ -140,6 +132,7 @@ class RunfolderTests(unittest.TestCase):
         return
 
         # do it all again after extracting from the xml file
+        self.failUnlessEqual(g.software, g2.software)
         self.failUnlessEqual(g.version, g2.version)
         self.failUnlessEqual(g.date, g2.date)
         self.failUnlessEqual(len(g.lanes.keys()), len(g2.lanes.keys()))
@@ -283,9 +276,6 @@ def suite():
     return unittest.makeSuite(RunfolderTests,'test')
 
 if __name__ == "__main__":
-    #unittest.main(defaultTest="suite")
-    class Test(object): pass
-    t = Test()
-    make_runfolder(t)
-    print ('path ' + t.runfolder_dir)
+    logging.basicConfig(level=logging.WARN)
+    unittest.main(defaultTest="suite")
 
index ab9f96239a63ccd69ce633cd11d36b28e0fe7e4e..af0e90854bf30310b764f8ba75ae4ac5e0200813 100644 (file)
@@ -20,19 +20,19 @@ class SummaryTests(unittest.TestCase):
 
     def test_xml_summary_file(self):
         pathname = os.path.join(TESTDATA_DIR, 'Summary-casava1.7.xml')
-        s = summary.Summary(pathname)
+        s = summary.SummaryGA(pathname)
         self.failUnlessEqual(len(s.lane_results[0]), 8)
         self.failUnlessEqual(s.lane_results[0][1].cluster, (1073893, 146344))
 
     def test_html_summary_file(self):
         pathname = os.path.join(TESTDATA_DIR, 'Summary-ipar130.htm')
-        s = summary.Summary(pathname)
+        s = summary.SummaryGA(pathname)
         self.failUnlessEqual(len(s.lane_results[0]), 8)
         self.failUnlessEqual(s.lane_results[0][1].cluster, (126910, 4300))
 
     def test_hiseq_sample_summary_file(self):
         pathname = os.path.join(TESTDATA_DIR, 'sample_summary_1_12.htm')
-        s = summary.Summary(pathname)
+        s = summary.SummaryGA(pathname)
 
 def suite():
     return unittest.makeSuite(SummaryTests,'test')
diff --git a/htsworkflow/pipelines/test/testdata/1_12/Status.htm b/htsworkflow/pipelines/test/testdata/1_12/Status.htm
new file mode 100755 (executable)
index 0000000..ccc9395
--- /dev/null
@@ -0,0 +1,39 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+       <link rel="stylesheet" href="./Status_Files/Status.css" type="text/css" media="screen"/>\r
+       <script src="./Status_Files/Status.js" type="text/javascript"></script>\r
+       <title>Status</title>\r
+</head>\r
+<body>\r
+<table style="border:none"><tr>\r
+       <td><img alt="Refresh" title="Refresh" name="RefreshBtn" height="25" width="25" src="./Status_Files/RefreshBtn/r1.png"  onmouseout="this.src='./Status_Files/RefreshBtn/r1.png'" onmouseover="this.src='./Status_Files/RefreshBtn/r2.png'" onmousedown="this.src='./Status_Files/RefreshBtn/r3.png'" onmouseup="this.src='./Status_Files/RefreshBtn/r2.png'" onclick="window.location.reload(true)" />&#160;</td>\r
+       <td id="StatUpdateDiv" >\r
+               <table class="StatusTable"><tr>\r
+                       <th>Total:</th><td>0</td><th>Extracted:</th><td>0</td><th>Called:</th><td>0</td>\r
+                       <th>Scored:</th><td>0</td><th>Copied:</th><td>0</td><th>Err.Rated:</th><td>0</td>\r
+               </tr></table></td> \r
+       <td id="RunNameTD">Loading Run Data ...</td>\r
+       </tr></table>\r
+       <script type="text/javascript">\r
+               loadXSLTable('./reports/StatusUpdate.xml', './Status_Files/StatusUpdate.xsl', 'StatUpdateDiv');\r
+               runName = xslTransform(loadXMLDoc('./reports/Status.xml'), loadXMLDoc('./Status_Files/RunName.xsl'));\r
+               document.getElementById("RunNameTD").innerHTML = runName;\r
+               document.title = runName + " Status";\r
+</script>\r
+<ul id="tabmenu">\r
+       <li><a href="./Status_Files/RunInfo.htm">Run Info</a></li>\r
+       <li><a class="selected" href="Status.htm">Tile Status</a></li>\r
+       <li><a href="./Status_Files/Charts.htm">Charts</a></li>\r
+       <li><a href="./Status_Files/Summary.htm">Summary</a></li>\r
+  <li><a class="space">Plots:</a></li>\r
+       <li><a href="./Status_Files/ByLane.htm">Cluster Density</a></li>\r
+       <li><a href="./Status_Files/ByCycle.htm">Data By Cycle</a></li>\r
+</ul>\r
+<div id="container">\r
+  <img class="Chart" id="ProcessControlImg" src="./reports/Process Control.png" alt="Cannot display image"/>\r
+</div>\r
\r
+</body>\r
+</html>\r
+\r
diff --git a/htsworkflow/pipelines/test/testdata/1_12/Status_Files/ByCycle.htm b/htsworkflow/pipelines/test/testdata/1_12/Status_Files/ByCycle.htm
new file mode 100755 (executable)
index 0000000..f652cca
--- /dev/null
@@ -0,0 +1,107 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+       <link rel="stylesheet" href="./Status.css" type="text/css" media="screen"/>\r
+       <script src="./Status.js" type="text/javascript"></script>\r
+       <script src="./ByCycle.js" type="text/javascript"></script>\r
+       <title>Status</title>\r
+</head>\r
\r
+<body>\r
+ <table style="border:none"><tr>\r
+       <td><img alt="Refresh" title="Refresh" name="RefreshBtn" height="25" width="25" src="./RefreshBtn/r1.png"  onmouseout="this.src='./RefreshBtn/r1.png'" onmouseover="this.src='./RefreshBtn/r2.png'" onmousedown="this.src='./RefreshBtn/r3.png'" onmouseup="this.src='./RefreshBtn/r2.png'" onclick="window.location.reload(true)" />&#160;</td>\r
+       <td id="StatUpdateDiv" >\r
+               <table class="StatusTable"><tr>\r
+                       <th>Total:</th><td>0</td><th>Extracted:</th><td>0</td><th>Called:</th><td>0</td>\r
+                       <th>Scored:</th><td>0</td><th>Copied:</th><td>0</td><th>Err.Rated:</th><td>0</td>\r
+               </tr></table></td> \r
+       <td id="RunNameTD">Loading Run Data ...</td>\r
+ </tr></table>\r
+       <script type="text/javascript">\r
+               loadXSLTable('../reports/StatusUpdate.xml', './StatusUpdate.xsl', 'StatUpdateDiv');\r
+               var runName = xslTransform(loadXMLDoc('../reports/Status.xml'), loadXMLDoc('./RunName.xsl'));\r
+               document.getElementById("RunNameTD").innerHTML = runName;\r
+               document.title = runName + " Status";\r
+       </script>\r
+\r
+<ul id="tabmenu">\r
+\r
+\r
+       <li><a href="./RunInfo.htm">Run Info</a></li>\r
+       <li><a href="../Status.htm">Tile Status</a></li>\r
+       <li><a href="./Charts.htm">Charts</a></li>\r
+       <li><a href="./Summary.htm">Summary</a></li>\r
+       <li><a class="space">Plots:</a></li>\r
+       <li><a href="./ByLane.htm">Cluster Density</a></li>\r
+       <li><a class="selected" href="./ByCycle.htm">Data By Cycle</a></li>\r
+</ul>\r
\r
+<div id="container">\r
+   <form action="" name="Plot1" id="Plot1" style="margin: 0px 0px 0px 0px;">\r
+               <table style="border:none"><tr>\r
+               <td><img style="margin: 0px 0px -5px 0px;" alt="Refresh" name="RefreshBtn" height="25" width="25" src="./RefreshBtn/r1.png"  onmouseout="this.src='./RefreshBtn/r1.png'" onmouseover="this.src='./RefreshBtn/r2.png'" onmousedown="this.src='./RefreshBtn/r3.png'" onmouseup="this.src='./RefreshBtn/r2.png'" onclick="changeFrameSrc(Plot1)" />&#160;</td>\r
+               <td><select size="1" name="QCOptDropDown"  onchange="changeFrameSrc(this.form)">\r
+                       <option value="Intensity" selected="selected">Intensity</option>\r
+         <option value="FWHM">Focus Quality</option>\r
+                       <option value="QScore">Quality Score</option>\r
+                       <option value="NumGT30">%Q>=30</option>\r
+                       <option value="ErrRate">Error Rate</option>\r
+               </select> &#160;</td>                                                           \r
+               <td><select size="1" name="lanesDropDown"  style="display:inline" onchange="changeFrameSrc(this.form)">\r
+                       <option value="L0" selected="selected">All Lanes</option>\r
+                       <option value="L1">Lane 1</option>\r
+                       <option value="L2">Lane 2</option>\r
+                       <option value="L3">Lane 3</option>\r
+                       <option value="L4">Lane 4</option>\r
+                       <option value="L5">Lane 5</option>\r
+                       <option value="L6">Lane 6</option>\r
+                       <option value="L7">Lane 7</option>\r
+                       <option value="L8">Lane 8</option>\r
+               </select>&#160;&#160;</td>\r
+      <td><select size="1" name="baseDropDown" style="display:inline" onchange="changeFrameSrc(this.form)">\r
+         <option value="A">Base A</option>\r
+         <option value="C">Base C</option>\r
+         <option value="G">Base G</option>\r
+         <option value="T">Base T</option>\r
+      </select></td>\r
+      </tr></table> \r
+               <iframe name="Plot1Fr" src="./ByCycleFrame.htm?../reports/ByCycle/Intensity_L0a.png" height="387" width="95%" frameborder="0" >\r
+                  <img name="imgPlot" alt="No Data" src="../reports/ByCycle/Intensity_L0a.png"/>\r
+               </iframe >\r
+       </form >\r
+   <form action="" name="Plot2" id="Plot2" style="margin: 0px 0px 0px 0px;">\r
+               <table style="border:none"><tr>\r
+               <td><img style="margin: 0px 0px -5px 0px;" alt="Refresh" name="RefreshBtn" height="25" width="25" src="./RefreshBtn/r1.png"  onmouseout="this.src='./RefreshBtn/r1.png'" onmouseover="this.src='./RefreshBtn/r2.png'" onmousedown="this.src='./RefreshBtn/r3.png'" onmouseup="this.src='./RefreshBtn/r2.png'" onclick="changeFrameSrc(Plot2)" />&#160;</td>\r
+               <td><select size="1" name="QCOptDropDown"  onchange="changeFrameSrc(this.form)">\r
+                       <option value="Intensity">Intensity</option>\r
+         <option value="FWHM" selected="selected">Focus Quality</option>\r
+                       <option value="QScore">Quality Score</option>\r
+                       <option value="NumGT30">%Q>=30</option>\r
+                       <option value="ErrRate">Error Rate</option>\r
+               </select> &#160;</td>                                                           \r
+               <td><select size="1" name="lanesDropDown"  style="display:inline" onchange="changeFrameSrc(this.form)">\r
+                       <option value="L0" selected="selected">All Lanes</option>\r
+                       <option value="L1">Lane 1</option>\r
+                       <option value="L2">Lane 2</option>\r
+                       <option value="L3">Lane 3</option>\r
+                       <option value="L4">Lane 4</option>\r
+                       <option value="L5">Lane 5</option>\r
+                       <option value="L6">Lane 6</option>\r
+                       <option value="L7">Lane 7</option>\r
+                       <option value="L8">Lane 8</option>\r
+               </select>&#160;&#160;</td>\r
+      <td><select size="1" name="baseDropDown" style="display:inline" onchange="changeFrameSrc(this.form)">\r
+         <option value="A">Base A</option>\r
+         <option value="C">Base C</option>\r
+         <option value="G">Base G</option>\r
+         <option value="T">Base T</option>\r
+      </select></td>\r
+      </tr></table> \r
+               <iframe name="Plot2Fr" src="./ByCycleFrame.htm?../reports/ByCycle/FWHM_L0a.png" height="387" width="95%" frameborder="0">\r
+         <img name="imgPlot" alt="No Data" src="../reports/ByCycle/FWHM_L0a.png"/>\r
+               </iframe >\r
+       </form >\r
+</div>\r
+</body>\r
+</html>\r
+\r
diff --git a/htsworkflow/pipelines/test/testdata/1_12/Status_Files/ByCycle.js b/htsworkflow/pipelines/test/testdata/1_12/Status_Files/ByCycle.js
new file mode 100755 (executable)
index 0000000..14af70e
--- /dev/null
@@ -0,0 +1,23 @@
+\r
+window.onerror = function() {\r
+       parent.location = './Error.htm';\r
+}\r
+\r
+function changeFrameSrc(form) {\r
+       var imgName = null;\r
+       var base = "";\r
+       var qc = form.QCOptDropDown.value;\r
+       if (qc == 'QScore' || qc == 'NumGT30' || qc == 'ErrRate') {\r
+               form.baseDropDown.style.display = 'none';\r
+       } else {\r
+               form.baseDropDown.style.display = 'inline';\r
+               base = form.baseDropDown.value.toLowerCase();\r
+       };\r
+       var intensityURL = "../reports/IntensityFrame.htm?";\r
+\r
+       imgName = "../reports/ByCycle/" + form.QCOptDropDown.value + "_" + form.lanesDropDown.value + base + ".png";\r
+       if (window.frames[form.name + "Fr"] != null) window.frames[form.name + "Fr"].location = "./ByCycleFrame.htm?" + imgName;\r
+       if (form.imgPlot != null) form.imgPlot.src = "../reports/" + imgName;\r
+}\r
+\r
+\r
diff --git a/htsworkflow/pipelines/test/testdata/1_12/Status_Files/ByCycleFrame.htm b/htsworkflow/pipelines/test/testdata/1_12/Status_Files/ByCycleFrame.htm
new file mode 100755 (executable)
index 0000000..81b0419
--- /dev/null
@@ -0,0 +1,18 @@
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+<script type="text/javascript">\r
+    function setupImage() {\r
+       document.PlotImage.src = getParam() + "?" + (new Date().getMilliseconds());\r
+        document.PlotImage.style.display = "block"\r
+    }\r
+    function getParam() {\r
+       return location.href.substring(location.href.indexOf('?') + 1, location.href.length);\r
+    }\r
+</script>\r
+</head>\r
+<body onload='try{setupImage()}catch(err){};'>\r
+    <img name="PlotImage" id="PlotImage" title="Data by cycle" style="display:none" src="#" alt="No data"/>\r
+</body>\r
+</html>\r
+\r
+\r
diff --git a/htsworkflow/pipelines/test/testdata/1_12/Status_Files/ByLane.htm b/htsworkflow/pipelines/test/testdata/1_12/Status_Files/ByLane.htm
new file mode 100755 (executable)
index 0000000..26e4d60
--- /dev/null
@@ -0,0 +1,49 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+       <link rel="stylesheet" href="./Status.css" type="text/css" media="screen"/>\r
+       <script src="./Status.js" type="text/javascript"></script>\r
+       <script src="./ByLane.js" type="text/javascript"></script>\r
+       <title>Status</title>\r
+</head>\r
\r
+<body>\r
+ <table style="border:none"><tr>\r
+       <td><img alt="Refresh" title="Refresh" name="RefreshBtn" height="25" width="25" src="./RefreshBtn/r1.png"  onmouseout="this.src='./RefreshBtn/r1.png'" onmouseover="this.src='./RefreshBtn/r2.png'" onmousedown="this.src='./RefreshBtn/r3.png'" onmouseup="this.src='./RefreshBtn/r2.png'" onclick="window.location.reload(true)" />&#160;</td>\r
+       <td id="StatUpdateDiv" >\r
+               <table class="StatusTable"><tr>\r
+                       <th>Total:</th><td>0</td><th>Extracted:</th><td>0</td><th>Called:</th><td>0</td>\r
+                       <th>Scored:</th><td>0</td><th>Copied:</th><td>0</td><th>Err.Rated:</th><td>0</td>\r
+               </tr></table></td> \r
+       <td id="RunNameTD">Loading Run Data ...</td>\r
+ </tr></table>\r
+       <script type="text/javascript">\r
+               loadXSLTable('../reports/StatusUpdate.xml', './StatusUpdate.xsl', 'StatUpdateDiv');\r
+               var runName = xslTransform(loadXMLDoc('../reports/Status.xml'), loadXMLDoc('./RunName.xsl'));\r
+               document.getElementById("RunNameTD").innerHTML = runName;\r
+               document.title = runName + " Status";\r
+       </script>\r
+\r
+<ul id="tabmenu">\r
+       <li><a href="./RunInfo.htm">Run Info</a></li>\r
+       <li><a href="../Status.htm">Tile Status</a></li>\r
+       <li><a href="./Charts.htm">Charts</a></li>\r
+       <li><a href="./Summary.htm">Summary</a></li>\r
+    <li><a class="space">Plots:</a></li>\r
+       <li><a class="selected" href="./ByLane.htm">Cluster Density</a></li>\r
+       <li><a href="./ByCycle.htm">Data By Cycle</a></li>\r
+\r
+</ul>\r
\r
+<div id="container">\r
+   <p style="margin: 0px 0px 0px 120px;">\r
+       <input type="checkbox" name="PFOnlyBox" id="PFOnlyBox" title="Show only PF clusters" onclick="loadClustersByLane()"/>\r
+    Show PF only\r
+   </p>\r
+   <img class="Chart" alt="No Data" id="NumClustersImg" src="../reports/NumClusters By Lane.png"/>\r
+   <table class="DataTable" style="margin: 0px 0px 0px 20px" id="NumClustersTbl"></table >\r
+       <script type="text/javascript">loadClustersByLane();</script>\r
+</div>\r
+</body>\r
+</html>\r
+\r
diff --git a/htsworkflow/pipelines/test/testdata/1_12/Status_Files/ByLane.js b/htsworkflow/pipelines/test/testdata/1_12/Status_Files/ByLane.js
new file mode 100755 (executable)
index 0000000..db2cf17
--- /dev/null
@@ -0,0 +1,55 @@
+window.onerror = function() {\r
+       parent.location = './Error.htm';\r
+}\r
+\r
+function loadClustersByLane() {\r
+       name = name0 = '../reports/NumClusters By Lane';\r
+       if (document.getElementById('PFOnlyBox').checked) {\r
+               name = name0 + " PF";\r
+               try {\r
+                       xmlDoc = loadXMLDoc(name + '.xml');\r
+               } catch (e) { xmlDoc = null; };\r
+               if (xmlDoc == null || xmlDoc.getElementsByTagName('Data') == null) {\r
+                       name = name0;\r
+                       alert("No data available!");\r
+                       document.getElementById('PFOnlyBox').checked = false;\r
+               }\r
+       }\r
+       document.getElementById('NumClustersImg').src = name + ".png";\r
+       imgRefresh('NumClustersImg');\r
+       loadNumClustersTable(name + '.xml', 'NumClustersTbl', 'Lane');\r
+}\r
+\r
+function loadNumClustersTable(xmlName, tblName, tagsName) {\r
+       tbl = document.getElementById(tblName);\r
+       xmlDoc = loadXMLDoc(xmlName);\r
+       if (xmlDoc == null) return;\r
+       xmlRows = xmlDoc.getElementsByTagName(tagsName);\r
+       if (xmlRows == null) return;\r
+       while (tbl.rows.length > 0) tbl.deleteRow(tbl.rows.length - 1);\r
+       if (xmlRows.length > 0 && xmlRows[0].attributes.length > 0) {\r
+               tbl.insertRow(0);\r
+               for (j = xmlRows[0].attributes.length - 1; j >= 1; j--)\r
+                       tbl.insertRow(0);\r
+               for (i = xmlRows.length - 1; i >= 0; i--) {\r
+                       for (j = xmlRows[i].attributes.length - 1; j >= 1; j--) {\r
+                               tbl.rows[j].insertCell(0);\r
+                               val = new Number(xmlRows[i].attributes[j].value);\r
+                               if (val < 1000) strVal = val.toFixed(0);\r
+                               else strVal = (val / 1000).toFixed(0) + "K";\r
+                               tbl.rows[j].cells[0].innerHTML = strVal;\r
+                       }\r
+               }\r
+               for (j = xmlRows[0].attributes.length - 1; j >= 1; j--) {\r
+                       tbl.rows[j].insertCell(0);\r
+                       tbl.rows[j].cells[0].innerHTML = xmlRows[0].attributes[j].name.toUpperCase();\r
+                       //tbl.rows[j].insertCell(0); tbl.rows[j].insertCell(0);\r
+               }\r
+               for (i = xmlRows.length - 1; i >= 0; i--) {\r
+                       tbl.rows[0].insertCell(0);\r
+                       tbl.rows[j].cells[0].innerHTML = tagsName + " " + xmlRows[i].attributes[0].value;\r
+               }\r
+               tbl.rows[0].insertCell(0); //tbl.rows[0].insertCell(0); tbl.rows[0].insertCell(0);\r
+       }\r
+}\r
+\r
diff --git a/htsworkflow/pipelines/test/testdata/1_12/Status_Files/Charts.htm b/htsworkflow/pipelines/test/testdata/1_12/Status_Files/Charts.htm
new file mode 100755 (executable)
index 0000000..d0f1319
--- /dev/null
@@ -0,0 +1,100 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+       <link rel="stylesheet" href="./Status.css" type="text/css" media="screen"/>\r
+       <script src="./Status.js" type="text/javascript"></script>\r
+       <script src="./Charts.js" type="text/javascript"></script>\r
+       <title>Status</title>\r
+</head>\r
\r
+<body>\r
+ <table style="border:none"><tr>\r
+               <td><img alt="Refresh" title="Refresh" name="RefreshBtn" height="25" width="25" src="./RefreshBtn/r1.png"  onmouseout="this.src='./RefreshBtn/r1.png'" onmouseover="this.src='./RefreshBtn/r2.png'" onmousedown="this.src='./RefreshBtn/r3.png'" onmouseup="this.src='./RefreshBtn/r2.png'" onclick="window.location.reload(true)" />&#160;</td>\r
+       <td id="StatUpdateDiv" >\r
+               <table class="StatusTable"><tr>\r
+                       <th>Total:</th><td>0</td><th>Extracted:</th><td>0</td><th>Called:</th><td>0</td>\r
+                       <th>Scored:</th><td>0</td><th>Copied:</th><td>0</td><th>Err.Rated:</th><td>0</td>\r
+               </tr></table></td> \r
+       <td id="RunNameTD">Loading Run Data ...</td>\r
+ </tr></table>\r
+       <script type="text/javascript">\r
+               loadXSLTable('../reports/StatusUpdate.xml', './StatusUpdate.xsl', 'StatUpdateDiv');\r
+               var runName = xslTransform(loadXMLDoc('../reports/Status.xml'), loadXMLDoc('./RunName.xsl'));\r
+               document.getElementById("RunNameTD").innerHTML = runName;\r
+               document.title = runName + " Status";\r
+       </script>\r
+   <map name="tileMap" id = "tileMap"></map> \r
+       <script type="text/javascript">\r
+               var tilesPerLane = xslTransform(loadXMLDoc('../reports/Status.xml'), loadXMLDoc('./TilesPerLane.xsl'));\r
+               var tileMap = new TileMap(tilesPerLane);\r
+               var imgCycle = document.getElementById("ImgCycle");\r
+               if (imgCycle != null) imgCycle = imgCycle.innerHTML;\r
+               else imgCycle = 0;\r
+       </script>\r
+\r
+<ul id="tabmenu">\r
+       <li><a href="./RunInfo.htm">Run Info</a></li>\r
+       <li><a href="../Status.htm">Tile Status</a></li>\r
+       <li><a class="selected" href="./Charts.htm">Charts</a></li>\r
+       <li><a href="./Summary.htm">Summary</a></li>\r
+    <li><a class="space">Plots:</a></li>\r
+       <li><a href="./ByLane.htm">Cluster Density</a></li>\r
+       <li><a href="./ByCycle.htm">Data By Cycle</a></li>\r
+</ul>\r
\r
+<div id="container">\r
+   <table class="GreenLife" ><tr>\r
+   <td><form name="imgChartForm1" action="">\r
+       <select size="1" name="QCOptDropDown"  onchange="changeImage(this.form)">\r
+                       <option value="NumClusters"  selected="selected">Cluster Density</option>\r
+         <option value="PassedFilter25">%Cluster PF</option>\r
+         <option value="NumPassedFilter25">Cluster PF Density</option>\r
+       </select> \r
+        &#160;&#160;&#160;&#160;&#160;<label id="autoscale1lbl" for='autoscale1'>Autoscale </label><input type="checkbox" name="autoscale" id="autoscale1" title="Autoscale" onclick="changeImage(this.form)"/>\r
+                       <img name="Chart" class="Chart" id="imgChart1" src="../reports/NumClusters_Chart.png" usemap="#tileMap" onmouseover="tileMap.resetMap(this)" onerror="try{{if(this.src.indexOf('blank.png') == -1)showBlank('imgChart1'); /*setTimeout('imgReload(\'imgChart1\')',20000)*/}}catch(err){{errorPrint(err)}}" alt= "No Data"/>\r
+   </form ></td>\r
+   <td><form name="imgChartForm2" action="">  \r
+       <select size="1" name="QCOptDropDown" onchange="changeImage(this.form)">\r
+                       <option  value="Intensity" selected="selected">Intensity  </option>\r
+         <option value="FWHM">Focus Quality</option>\r
+         <option value="NumGT30">%Q>=30</option>\r
+         <option value="ErrorRate">Error Rate</option>\r
+       </select> \r
+       <select size="1" name="cyDropDown"  onchange="changeImage(this.form)"></select>\r
+                       <script type="text/javascript">\r
+                               fillCycles(document.imgChartForm2.cyDropDown, imgCycle);\r
+                       </script>\r
+      <select size="1" name="baseDropDown" onchange="changeImage(this.form)">\r
+         <option value="A" selected="selected">Base A</option>\r
+         <option value="C">Base C</option>\r
+         <option value="G">Base G</option>\r
+         <option value="T">Base T</option>\r
+       </select>\r
+                &#160;&#160;<label id="autoscale2lbl" for='autoscale2' style ="display :none ">Autoscale </label><input type="checkbox" name="autoscale" id="autoscale2" title="Autoscale" onclick="changeImage(this.form)"/>\r
+       <img name="Chart" class="Chart" id="imgChart2" src="../reports/Intensity/Chart_1_a.png" usemap="#tileMap" onmouseover="tileMap.resetMap(this)" onerror="try{{if(this.src.indexOf('blank.png') == -1)showBlank('imgChart2'); /*setTimeout('imgReload(\'imgChart2\')',20000)*/}}catch(err){{errorPrint(err)}}" alt ="No Data"/>\r
+   </form ></td>\r
+   <td><form name="imgChartForm3" action="">  \r
+       <select size="1" name="QCOptDropDown" onchange="changeImage(this.form)">\r
+                       <option  value="Intensity">Intensity  </option>\r
+         <option value="FWHM" selected="selected">Focus Quality</option>\r
+         <option value="NumGT30">%Q>=30</option>\r
+         <option value="ErrorRate">Error Rate</option>\r
+       </select> \r
+       <select size="1" name="cyDropDown"  onchange="changeImage(this.form)"></select>\r
+                       <script type="text/javascript">\r
+                               fillCycles(document.imgChartForm3.cyDropDown, imgCycle);\r
+                       </script>\r
+      <select size="1" name="baseDropDown" onchange="changeImage(this.form)">\r
+         <option value="A" selected="selected">Base A</option>\r
+         <option value="C">Base C</option>\r
+         <option value="G">Base G</option>\r
+         <option value="T">Base T</option>\r
+       </select>\r
+                &#160;&#160;<label id="autoscale3lbl" for='autoscale3' style ="display :none">Autoscale</label><input type="checkbox" name="autoscale" id="autoscale3" title="Autoscale" onclick="changeImage(this.form)"/>\r
+       <img name="Chart" class="Chart" id="imgChart3" src="../reports/FWHM/Chart_1_a.png" usemap="#tileMap" onmouseover="tileMap.resetMap(this)" onerror="try{{if(this.src.indexOf('blank.png') == -1)showBlank('imgChart3'); /*setTimeout('imgReload(\'imgChart3\')',20000)*/}}catch(err){{errorPrint(err)}}" alt ="No Data"/>\r
+   </form></td>\r
+  </tr></table>\r
+</div> \r
+</body>\r
+</html>\r
+\r
diff --git a/htsworkflow/pipelines/test/testdata/1_12/Status_Files/Charts.js b/htsworkflow/pipelines/test/testdata/1_12/Status_Files/Charts.js
new file mode 100755 (executable)
index 0000000..4e7eca7
--- /dev/null
@@ -0,0 +1,140 @@
+window.onerror = function() {\r
+       parent.location = './Error.htm';\r
+}\r
+\r
+var imageOnFocusId = null;\r
+function TileMap(nTiles) {\r
+       var numLanes = 8;\r
+       var numTiles = nTiles;\r
+       var width = 200;\r
+       var height = 750;\r
+       var X0 = 18;\r
+       var Y0 = 26;\r
+       var dL = width / numLanes;\r
+       var numCols = 2;\r
+       var numRows = numTiles / numCols;\r
+       var dX = width / (numCols * numLanes);\r
+       var dY = height / numRows;\r
+       var map = document.getElementById("tileMap");\r
+       var tileMapXML;\r
+       this.changeLayout = function(layoutNode) {\r
+               nCols = layoutNode.getAttribute("ColsPerLane");\r
+               if (nCols > 0) numCols = nCols;\r
+               nRows = layoutNode.getAttribute("RowsPerLane");\r
+               if (nRows > 0) numRows = nRows;\r
+               dX = width / (numCols * numLanes);\r
+               dY = height / numRows;\r
+       }\r
+       this.newToolTip = function(lane, idx) {\r
+               var area = document.createElement("area");\r
+               area.shape = "rect";\r
+               var col = Math.floor((idx - 1) / numRows);\r
+               var row = (idx - 1) % numRows;\r
+               if (idx - numRows <= 0) row = numRows - row - 1;\r
+               var X1 = Math.round(X0 + dX * col + (lane - 1) * dL);\r
+               var Y1 = Math.round(Y0 + dY * row);\r
+               var X2 = Math.round(X1 + dX);\r
+               var Y2 = Math.round(Y1 + dY);\r
+               area.coords = "'" + X1 + "," + Y1 + "," + X2 + "," + Y2 + "'";\r
+               area.title = "L:" + lane + " T:" + idx;\r
+               map.appendChild(area);\r
+       }\r
+\r
+       this.newToolTipVal = function(tile, base) {\r
+               var area = document.createElement("area");\r
+               area.shape = "rect";\r
+               key = tile.getAttribute("Key");\r
+               if (base == null) base = "Val";\r
+               val = tile.getAttribute(base);\r
+               lane = key.substring(0, 1);\r
+               idx = key.substring(2);\r
+               var col = Math.floor((idx - 1) / numRows);\r
+               var row = (idx - 1) % numRows;\r
+               if (idx - numRows <= 0) row = numRows - row - 1;\r
+               var X1 = Math.round(X0 + dX * col + (lane - 1) * dL);\r
+               var Y1 = Math.round(Y0 + dY * row);\r
+               var X2 = Math.round(X1 + dX);\r
+               var Y2 = Math.round(Y1 + dY);\r
+               area.coords = "'" + X1 + "," + Y1 + "," + X2 + "," + Y2 + "'";\r
+               area.title = "L:" + lane + " T:" + idx + "\n" + "Val= " + val;\r
+               map.appendChild(area);\r
+       }\r
+       this.resetMap = function(image) {\r
+               if (image.id == imageOnFocusId) return;\r
+               xmlName = image.src;\r
+               xmlName = xmlName.replace("@.png", ".png");\r
+               xmlName = xmlName.substring(0, xmlName.lastIndexOf('.')) + ".xml";\r
+               var base = null;\r
+               if (xmlName.lastIndexOf('_a.xml') > 0) base = 'A';\r
+               else if (xmlName.lastIndexOf('_c.xml') > 0) base = 'C';\r
+               else if (xmlName.lastIndexOf('_g.xml') > 0) base = 'G';\r
+               else if (xmlName.lastIndexOf('_t.xml') > 0) base = 'T';\r
+               if (base != null) xmlName = xmlName.substring(0, xmlName.lastIndexOf('_')) + ".xml";\r
+               try {\r
+                       this.tileMapXML = loadXMLDoc(xmlName);\r
+                       layout = this.tileMapXML.getElementsByTagName("Layout");\r
+                       if (layout != null && layout.length > 0) this.changeLayout(layout[0]);\r
+                       tiles = this.tileMapXML.getElementsByTagName("TL");\r
+                       while (map.lastChild != null) map.removeChild(map.lastChild);\r
+                       for (i = 0; i < tiles.length; i++) tileMap.newToolTipVal(tiles[i], base);\r
+               } catch (e) { this.blankMap(); }\r
+               imageOnFocusId = image.id;\r
+       }\r
+\r
+\r
+       this.blankMap = function() {\r
+               while (map.lastChild != null) map.removeChild(map.lastChild);\r
+               for (var l = 1; l <= numLanes; l++) {\r
+                       for (var i = 1; i <= numTiles; i++) {\r
+                               this.newToolTip(l, i);\r
+                       }\r
+               }\r
+       }\r
+}\r
+\r
+function fillCycles(CyBox, maxCy) {\r
+       for (var cy = 1; cy <= maxCy; cy++) {\r
+               var option = document.createElement('option');\r
+               option.setAttribute('value', cy);\r
+               option.appendChild(document.createTextNode(cy));\r
+               CyBox.appendChild(option);\r
+       }\r
+}\r
+\r
+function changeImage(form) {\r
+       var qc = form.QCOptDropDown.value;\r
+       var base = "";\r
+       var cycle = "";\r
+       //alert(form.autoscale.id);\r
+       //return;\r
+       if (form.baseDropDown != null) {\r
+          if (qc == "ErrorRate" || qc == "NumGT30") {\r
+             form.baseDropDown.style.display = 'none';\r
+             document.getElementById(form.autoscale.id.toString() + 'lbl').style.display = 'inline';\r
+          }\r
+          else {\r
+             form.baseDropDown.style.display = 'inline';\r
+             base = "_" + form.baseDropDown.value.toLowerCase();\r
+             document.getElementById(form.autoscale.id.toString() + 'lbl').style.display = 'none';\r
+\r
+          }\r
+       }\r
+       if (form.cyDropDown != null) {\r
+               form.cyDropDown.disabled = false;\r
+               if (form.cyDropDown != null && !form.cyDropDown.disabled) {\r
+                       cycle = "_" + form.cyDropDown.value.toLowerCase();\r
+                       qc = qc + "/";\r
+               }\r
+       } else qc = qc + "_";\r
+       auto = "";\r
+       if (form.autoscale.checked) auto = "@";\r
+       var suff = cycle + base + auto + ".png";\r
+       form.Chart.src = "../reports/" + qc + "Chart" + suff;\r
+       form.Chart.lowsrc = form.Chart.src;\r
+       imageOnFocusId = null;\r
+}\r
+\r
+function showBlank(imgId) {\r
+       document.getElementById(imgId).lowsrc = document.getElementById(imgId).src;\r
+       document.getElementById(imgId).src = "../reports/blank.png";\r
+}\r
diff --git a/htsworkflow/pipelines/test/testdata/1_12/Status_Files/Controls.htm b/htsworkflow/pipelines/test/testdata/1_12/Status_Files/Controls.htm
new file mode 100755 (executable)
index 0000000..1740921
--- /dev/null
@@ -0,0 +1,44 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+       <link rel="stylesheet" href="./Status.css" type="text/css" media="screen"/>\r
+       <script src="./Status.js" type="text/javascript"></script>\r
+       <script src="./Controls.js" type="text/javascript"></script>\r
+       <title>Status</title>\r
+</head>\r
\r
+<body>\r
+       <table style="border:none"><tr>\r
+               <td><img alt="Refresh" title="Refresh" name="RefreshBtn" height="25" width="25" src="./RefreshBtn/r1.png"  onmouseout="this.src='./RefreshBtn/r1.png'" onmouseover="this.src='./RefreshBtn/r2.png'" onmousedown="this.src='./RefreshBtn/r3.png'" onmouseup="this.src='./RefreshBtn/r2.png'" onclick="window.location.reload(true)" />&#160;</td>\r
+               <td id="StatUpdateDiv" >\r
+                       <table class="StatusTable"><tr>\r
+                               <th>Total:</th><td>0</td><th>Extracted:</th><td>0</td><th>Called:</th><td>0</td>\r
+                               <th>Scored:</th><td>0</td><th>Copied:</th><td>0</td><th>Err.Rated:</th><td>0</td>\r
+                       </tr></table></td> \r
+               <td id="RunNameTD">Loading Run Data ...</td>\r
+       </tr></table>\r
+       <script type="text/javascript">\r
+               loadXSLTable('../reports/StatusUpdate.xml', './StatusUpdate.xsl', 'StatUpdateDiv');\r
+               runName = xslTransform(loadXMLDoc('../reports/Status.xml'), loadXMLDoc('./RunName.xsl'));\r
+               document.getElementById("RunNameTD").innerHTML = runName;\r
+               document.title = runName + " Status";\r
+       </script>\r
+<ul id="tabmenu">\r
+       <li><a href="./RunInfo.htm">Run Info</a></li>\r
+       <li><a href="../Status.htm">Tile Status</a></li>\r
+       <li><a href="./Charts.htm">Charts</a></li>\r
+       <li><a href="./Summary.htm">Summary</a></li>\r
+       <li><a class="selected" href="./Controls.htm">Controls</a></li>\r
+       <li><a class="space">Plots:</a></li>\r
+       <li><a href="./ByLane.htm">Cluster Density</a></li>\r
+       <li><a href="./ByCycle.htm">Data By Cycle</a></li>\r
+</ul>\r
\r
+<div id="container">\r
+       <div id="ControlsTbl" ><p> No data available yet.</p></div>\r
+       <script type="text/javascript">loadControls()</script>\r
+</div>\r
\r
+</body>\r
+</html>\r
+\r
diff --git a/htsworkflow/pipelines/test/testdata/1_12/Status_Files/Controls.js b/htsworkflow/pipelines/test/testdata/1_12/Status_Files/Controls.js
new file mode 100755 (executable)
index 0000000..10c3f78
--- /dev/null
@@ -0,0 +1,7 @@
+window.onerror = function() {\r
+       parent.location = './Error.htm';\r
+}\r
+\r
+function loadControls() {\r
+   loadXSLTable('../reports/controls.xml', './controls.xsl', 'ControlsTbl');\r
+}
\ No newline at end of file
diff --git a/htsworkflow/pipelines/test/testdata/1_12/Status_Files/Controls.xsl b/htsworkflow/pipelines/test/testdata/1_12/Status_Files/Controls.xsl
new file mode 100755 (executable)
index 0000000..7fc53e7
--- /dev/null
@@ -0,0 +1,25 @@
+<?xml version="1.0"?> \r
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" \r
+version="1.0"> \r
+<xsl:output method="html" indent="yes" omit-xml-declaration="yes"/>\r
+<xsl:template match="/">\r
+       <table class="DataTable" >\r
+        <tr>\r
+     <th>Control</th>\r
+     <th >Lane 1</th><th >Lane 2</th><th >Lane 3</th><th >Lane 4</th>\r
+     <th >Lane 5</th><th >Lane 6</th><th >Lane 7</th><th >Lane 8</th>\r
+    </tr>\r
+    <xsl:for-each select="Controls/ctl"><tr>\r
+     <td><xsl:value-of select="@Key"/></td>         \r
+     <td><xsl:value-of select="@L1"/></td>         \r
+     <td><xsl:value-of select="@L2"/></td>         \r
+     <td><xsl:value-of select="@L3"/></td>         \r
+     <td><xsl:value-of select="@L4"/></td>         \r
+     <td><xsl:value-of select="@L5"/></td>         \r
+     <td><xsl:value-of select="@L6"/></td>         \r
+     <td><xsl:value-of select="@L7"/></td>         \r
+     <td><xsl:value-of select="@L8"/></td>\r
+    </tr></xsl:for-each>\r
+  </table >\r
+</xsl:template>\r
+</xsl:stylesheet>\r
diff --git a/htsworkflow/pipelines/test/testdata/1_12/Status_Files/Error.htm b/htsworkflow/pipelines/test/testdata/1_12/Status_Files/Error.htm
new file mode 100755 (executable)
index 0000000..100c67c
--- /dev/null
@@ -0,0 +1,8 @@
+<html xmlns="http://www.w3.org/1999/xhtml" >\r
+<head></head> \r
+<body>\r
+<p>There was a problem loading the file.</p>\r
+<p>Please click a link below to try again</p>\r
+<p><a href="..\Status.htm">Status.htm</a></p>\r
+</body>\r
+</html>\r
diff --git a/htsworkflow/pipelines/test/testdata/1_12/Status_Files/RefreshBtn/r1.png b/htsworkflow/pipelines/test/testdata/1_12/Status_Files/RefreshBtn/r1.png
new file mode 100755 (executable)
index 0000000..a05af5a
Binary files /dev/null and b/htsworkflow/pipelines/test/testdata/1_12/Status_Files/RefreshBtn/r1.png differ
diff --git a/htsworkflow/pipelines/test/testdata/1_12/Status_Files/RefreshBtn/r2.png b/htsworkflow/pipelines/test/testdata/1_12/Status_Files/RefreshBtn/r2.png
new file mode 100755 (executable)
index 0000000..a62f2b4
Binary files /dev/null and b/htsworkflow/pipelines/test/testdata/1_12/Status_Files/RefreshBtn/r2.png differ
diff --git a/htsworkflow/pipelines/test/testdata/1_12/Status_Files/RefreshBtn/r3.png b/htsworkflow/pipelines/test/testdata/1_12/Status_Files/RefreshBtn/r3.png
new file mode 100755 (executable)
index 0000000..bfdd95f
Binary files /dev/null and b/htsworkflow/pipelines/test/testdata/1_12/Status_Files/RefreshBtn/r3.png differ
diff --git a/htsworkflow/pipelines/test/testdata/1_12/Status_Files/RunInfo.htm b/htsworkflow/pipelines/test/testdata/1_12/Status_Files/RunInfo.htm
new file mode 100755 (executable)
index 0000000..995919f
--- /dev/null
@@ -0,0 +1,43 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+       <link rel="stylesheet" href="./Status.css" type="text/css" media="screen"/>\r
+       <script src="./Status.js" type="text/javascript"></script>\r
+       <title>Status</title>\r
+</head>\r
\r
+<body>\r
+       <table style="border:none"><tr>\r
+               <td><img alt="Refresh" title="Refresh" name="RefreshBtn" height="25" width="25" src="./RefreshBtn/r1.png"  onmouseout="this.src='./RefreshBtn/r1.png'" onmouseover="this.src='./RefreshBtn/r2.png'" onmousedown="this.src='./RefreshBtn/r3.png'" onmouseup="this.src='./RefreshBtn/r2.png'" onclick="window.location.reload(true)" />&#160;</td>\r
+               <td id="StatUpdateDiv" >\r
+                       <table class="StatusTable"><tr>\r
+                               <th>Total:</th><td>0</td><th>Extracted:</th><td>0</td><th>Called:</th><td>0</td>\r
+                               <th>Scored:</th><td>0</td><th>Copied:</th><td>0</td><th>Err.Rated:</th><td>0</td>\r
+                       </tr></table></td> \r
+               <td id="RunNameTD">Loading Run Data ...</td>\r
+       </tr></table>\r
+       <script type="text/javascript">\r
+               loadXSLTable('../reports/StatusUpdate.xml', './StatusUpdate.xsl', 'StatUpdateDiv');\r
+               runName = xslTransform(loadXMLDoc('../reports/Status.xml'), loadXMLDoc('./RunName.xsl'));\r
+               document.getElementById("RunNameTD").innerHTML = runName;\r
+               document.title = runName + " Status";\r
+       </script>\r
+<ul id="tabmenu">\r
+       <li><a class="selected" href="./RunInfo.htm">Run Info</a></li>\r
+       <li><a href="../Status.htm">Tile Status</a></li>\r
+       <li><a href="./Charts.htm">Charts</a></li>\r
+       <li><a href="./Summary.htm">Summary</a></li>\r
+   <li><a class="space">Plots:</a></li>\r
+       <li><a href="./ByLane.htm">Cluster Density</a></li>\r
+       <li><a href="./ByCycle.htm">Data By Cycle</a></li>\r
+</ul>\r
\r
+<div id="container">\r
+       <script type="text/javascript" >\r
+               loadXSLTable('../reports/Status.xml', './RunInfo.xsl', 'container');\r
+       </script>\r
+</div>\r
\r
+</body>\r
+</html>\r
+\r
diff --git a/htsworkflow/pipelines/test/testdata/1_12/Status_Files/RunInfo.xsl b/htsworkflow/pipelines/test/testdata/1_12/Status_Files/RunInfo.xsl
new file mode 100755 (executable)
index 0000000..7443e44
--- /dev/null
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"\r
+    xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"\r
+                xmlns:lxslt="http://xml.apache.org/xslt">\r
+<xsl:output method="html" indent="yes"/>\r
+       <xsl:template match="/">\r
+                  <table class="InfoTable">\r
+                     <tr style="text-align: center;">Run Description<p/></tr>\r
+                     <tr><th>Software:</th><td><xsl:value-of select="/Status/Software"/></td></tr>\r
+                     <tr><th>Run name:</th><td><xsl:value-of select="/Status/RunName"/></td></tr>\r
+                     <tr><th>Cycles:</th><td><xsl:value-of select="/Status/NumCycles"/></td></tr>\r
+                     <tr><th>Instrument name:</th><td><xsl:value-of select="/Status/InstrumentName"/></td></tr>\r
+                     <tr><th>Run Started (Estimated):</th><td><xsl:value-of select="/Status/RunStarted"/></td></tr>\r
+                     <tr><th>Input Directory:</th><td><xsl:value-of select="/Status/InputDir"/></td></tr>\r
+                     <tr><th>Output Directory:</th><td><xsl:value-of select="/Status/OutputDir"/></td></tr>\r
+                     <tr><p/></tr>\r
+                  </table >\r
+      <p/>\r
+                  <table class="InfoTable">\r
+                     <tr style="text-align: center;">Configuration Settings<p/></tr>\r
+                     <tr><th><li type="square">Copy all run files:</li></th><td><xsl:value-of select="/Status/Configuration/CopyAllFiles"/></td></tr>\r
+                     <tr><th><li type="square">Copy images:</li></th><td><xsl:value-of select="/Status/Configuration/CopyImages"/></td></tr>\r
+                     <tr><th><li type="square">Delete image files:</li></th><td><xsl:value-of select="/Status/Configuration/DeleteImages"/></td></tr>\r
+                     <tr><th><li type="square">Delete intensity files:</li></th><td><xsl:value-of select="/Status/Configuration/DeleteIntensity"/></td></tr>\r
+                     <tr><th><li type="square">Run info file exists:</li></th><td><xsl:value-of select="/Status/Configuration/RunInfoExists"/></td></tr>\r
+                     <tr><th><li type="square">Is this a paired end run:</li></th><td><xsl:value-of select="/Status/Configuration/IsPairedEndRun"/></td></tr>\r
+                     <tr><th><li type="square">Total number of reads:</li></th><td><xsl:value-of select="/Status/Configuration/NumberOfReads"/></td></tr>\r
+                     <tr><th><li type="square">Number of lanes:</li></th><td><xsl:value-of select="/Status/Configuration/NumberOfLanes"/></td></tr>\r
+                     <tr><th><li type="square">Number of tiles per lane:</li></th><td><xsl:value-of select="/Status/Configuration/TilesPerLane"/></td></tr>\r
+                     <tr><th><li type="square">Control lane:</li></th>\r
+                        <td>\r
+                           <xsl:if test="/Status/Configuration/ControlLane = 0"> None</xsl:if>\r
+                           <xsl:if test="/Status/Configuration/ControlLane &gt; 0 ">\r
+                              <xsl:value-of select="/Status/Configuration/ControlLane"/>\r
+                           </xsl:if>\r
+                        </td>\r
+                     </tr>                     \r
+                  </table>\r
+  </xsl:template>\r
+</xsl:stylesheet>\r
diff --git a/htsworkflow/pipelines/test/testdata/1_12/Status_Files/RunName.xsl b/htsworkflow/pipelines/test/testdata/1_12/Status_Files/RunName.xsl
new file mode 100755 (executable)
index 0000000..a054fe8
--- /dev/null
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"\r
+    xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"\r
+                xmlns:lxslt="http://xml.apache.org/xslt">\r
+<xsl:output method="html" indent="yes"/>\r
+       <xsl:template match="/">\r
+               <xsl:value-of select="/Status/RunName"/>\r
+  </xsl:template>\r
+</xsl:stylesheet>\r
diff --git a/htsworkflow/pipelines/test/testdata/1_12/Status_Files/Status.css b/htsworkflow/pipelines/test/testdata/1_12/Status_Files/Status.css
new file mode 100755 (executable)
index 0000000..9544549
--- /dev/null
@@ -0,0 +1,230 @@
+body\r
+{\r
+   margin: 0px;\r
+   font-family: Arial, Helvetica, sans-serif;\r
+   background-color: #F4F5F5;\r
+   border-top-style: solid;\r
+   border-top-color: #FF9900;\r
+   border-top-width: 10px;\r
+   padding-top: 3px;\r
+   background-image: url('../Status_Files/illumina.png');\r
+   background-repeat: no-repeat;\r
+   background-position: top right;\r
+   color: #555;\r
+   font-weight: bold;\r
+}\r
+\r
+#tabmenu\r
+{\r
+   font: normal 14px Arial, Helvetica, sans-serif;\r
+   list-style-type: none;\r
+   border-bottom: 1px solid #BB5500;\r
+   margin: 12px 0px 0px 0px;\r
+   padding-left: 0;\r
+   padding-right: 0;\r
+   padding-bottom: 26px;\r
+   font-weight: bold;\r
+}\r
+\r
+#tabmenu li\r
+{\r
+   display: inline;\r
+   float: left;\r
+   height: 24px;\r
+   min-width: 80px;\r
+   text-align: center;\r
+   padding: 0;\r
+}\r
+\r
+#tabmenu li a\r
+{\r
+   float: left;\r
+   color: #777;\r
+   text-decoration: none;\r
+   padding: 4px;\r
+   text-align: center;\r
+   background-color: #ddd;\r
+   min-width: 80px;\r
+   border: 1px solid gray;\r
+   border-bottom: none;\r
+   margin: 0px 1px 0px 1px;\r
+\r
+}\r
+\r
+#tabmenu li a.selected\r
+{\r
+   background-color: #F7F8f8;\r
+   color: #000;\r
+   font-size: 100%;\r
+   border:  1px solid #BB5500;\r
+       border-bottom: 2px solid #F7F8f8;\r
+\r
+}\r
+\r
+#tabmenu li a:hover\r
+{\r
+       color: #BB5500;\r
+       font-size :120%;\r
+   border:  1px solid #BB5500;\r
+}\r
+#tabmenu li a.selected:hover\r
+{\r
+       border-bottom: 2px solid #F7F8f8;\r
+}\r
+\r
+#container\r
+{\r
+       border: 1px solid #BB5500;\r
+       border-top: none;\r
+       padding: 10px;\r
+       left: 0;\r
+       top: 0;\r
+       background-color: #F7F8f8;\r
+       min-width: 1100px;\r
+}\r
+\r
+\r
+\r
+#tabmenu li a.space\r
+{\r
+       font-weight: normal;\r
+       font-size :100%;\r
+       color: #000;\r
+       background-color: #F5F5F5;\r
+       border: none;\r
+       text-align: right;\r
+}\r
+\r
+table.DataTable\r
+{\r
+       border-collapse: collapse;\r
+       background-color: #e0e0e0;\r
+   border: 1px dotted #BB5500;\r
+   padding: 10px;\r
+   padding:50px;\r
+\r
+}\r
+\r
+table.DataTable td, table.DataTable th\r
+{\r
+   font-family: Arial, Helvetica, sans-serif;\r
+   font-size: smaller;\r
+   font-weight: bold;\r
+   font-variant: normal;\r
+   text-transform: none;\r
+   padding: 3px; \r
+   border-right: dotted 1px #BB5500;\r
+   border-left: dotted 1px #BB5500;\r
+   color: #555555;\r
+}\r
+\r
+table.DataTable tr:hover td, table.DataTable tr:hover td a, table.DataTable tr:hover th a\r
+{\r
+       color: #BB5500;\r
+}\r
+\r
+table.DataTable th\r
+{\r
+   padding: 5px;\r
+   border: dotted 1px #BB5500;\r
+   color: #000000;\r
+}\r
+\r
+table.InfoTable\r
+{\r
+   margin: 20px;\r
+   border-style: none;\r
+   border-collapse: collapse;\r
+   background-color: #e0e0e0;\r
+   padding: 50px;\r
+   outline-style: solid;\r
+   outline-color: #e0e0e0;\r
+   outline-width: 10px;\r
+}\r
+\r
+table.InfoTable td, table.InfoTable th\r
+{\r
+   border-style: none;\r
+   font-family: Arial, Helvetica, sans-serif;\r
+   font-size: smaller;\r
+   font-weight: bold;\r
+   font-variant: normal;\r
+   text-transform: none;\r
+   padding: 5px 30px 5px 20px;\r
+   color: #555555;\r
+   text-align: left;\r
+}\r
+\r
+table.InfoTable tr:hover td, table.InfoTable tr:hover td a, table.InfoTable tr:hover th a\r
+{\r
+   color: #BB5500;\r
+}\r
+\r
+table.InfoTable th\r
+{\r
+   color: #000000;\r
+}\r
+\r
+table.StatusTable\r
+{\r
+   margin: 0px 0px 0px 0px;\r
+   border-collapse: collapse;\r
+   background-color: #e0e0e0;\r
+   padding: 1px;\r
+   /*outline-style: solid;\r
+   outline-color: #e0e0e0;\r
+   outline-width: 2px;*/\r
+   border: 1px dotted #BB5500;\r
+\r
+}\r
+\r
+table.StatusTable td, table.StatusTable th\r
+{\r
+   border: 1px dotted #BB5500;\r
+   font-family: Arial, Helvetica, sans-serif;\r
+   font-size: small;\r
+   font-weight: bold;\r
+   font-variant: normal;\r
+   text-transform: none;\r
+   color: #555555;\r
+   text-align: left;\r
+}\r
+table.StatusTable th\r
+{\r
+       border-right: none;\r
+       padding-right: 5px;\r
+}\r
+\r
+table.StatusTable td\r
+{\r
+       border-left: none;\r
+       padding-right: 5px;\r
+       color: #BB5500;\r
+}\r
+\r
+table.StatusTable tr:hover td, table.StatusTable tr:hover td a, table.StatusTable tr:hover th a\r
+{\r
+   color: #ff8800;\r
+}\r
+\r
+label\r
+{\r
+   font-size: smaller;\r
+   font-weight: normal;\r
+   color: #000000;\r
+}\r
+\r
+image.Chart\r
+{\r
+   border: 1px solid #BB5500;\r
+       margin: 5px 0px 0px 0px;\r
+}\r
+\r
+iframe\r
+{ \r
+       margin: 5px 0px 0px 0px;\r
+       border: 1px solid #BB5500;\r
+}\r
+\r
+#RunNameTD\r
+{font-size :100%; padding-left: 20px}
\ No newline at end of file
diff --git a/htsworkflow/pipelines/test/testdata/1_12/Status_Files/Status.js b/htsworkflow/pipelines/test/testdata/1_12/Status_Files/Status.js
new file mode 100755 (executable)
index 0000000..da12baf
--- /dev/null
@@ -0,0 +1,168 @@
+window.onerror = function() {\r
+       parent.location = "./Status_Files/StatusError.htm"\r
+}\r
+\r
+//Reading XML file\r
+var xmlhttp = false;\r
+/* running locally on IE5.5, IE6, IE7 */; /*@cc_on\r
+if (location.protocol == "file:") {\r
+   if (!xmlhttp) try { xmlhttp = new ActiveXObject("MSXML2.XMLHTTP"); } catch (e) { xmlhttp = false; }\r
+   if (!xmlhttp) try { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) { xmlhttp = false; }\r
+}\r
+/* IE7, Firefox, Safari, Opera...  */\r
+if (!xmlhttp) try { xmlhttp = new XMLHttpRequest(); } catch (e) { xmlhttp = false; }\r
+/* IE6 */\r
+if (typeof ActiveXObject != "undefined") {\r
+   if (!xmlhttp) try { xmlhttp = new ActiveXObject("MSXML2.XMLHTTP"); } catch (e) { xmlhttp = false; }\r
+   if (!xmlhttp) try { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) { xmlhttp = false; }\r
+}\r
+/* IceBrowser */\r
+if (!xmlhttp) try { xmlhttp = createRequest(); } catch (e) { xmlhttp = false; }\r
+\r
+function loadXMLDoc(dname) {\r
+   var xmlDoc = null;\r
+       try {\r
+               if (!xmlhttp) return "Your browser doesn't seem to support XMLHttpRequests.";\r
+               xmlhttp.open("GET", dname, false); //make sure open appears before onreadystatechange lest IE will encounter issues beyond the first request\r
+               xmlhttp.send(null);\r
+               var parser = false;\r
+               try {\r
+                       parser = new DOMParser();\r
+                       xmlDoc = parser.parseFromString(xmlhttp.responseText, "text/xml");\r
+               } catch (e) { parser = false }\r
+               if (!parser) {\r
+                       xmlDoc = new ActiveXObject("Microsoft.XMLDOM");\r
+                       //xmlDoc = new ActiveXObject("Msxml2.DOMDocument.6.0");\r
+                       xmlDoc.async = "false";\r
+                       xmlDoc.loadXML(xmlhttp.responseText);\r
+               }\r
+               if(xmlDoc.childNodes.length == 0)xmlDoc= null;\r
+       } catch(e){};\r
+   return xmlDoc;\r
+}\r
+//End of reading XML file\r
+\r
+\r
+function errorPrint(err) {\r
+   document.writeln(err.description);\r
+   document.writeln("<p>There was a problem loading the file.</p>");\r
+   document.writeln("<p>Please click a link below to try again</p>");\r
+   document.writeln("<p><a href='Status.htm'>Status.htm</a></p>");\r
+  }\r
+\r
+function imgRefresh(imgId) {\r
+   var s = document.getElementById(imgId).src;\r
+   if (s.indexOf('?') > 0) s = s.substring(0, s.indexOf('?'));\r
+   document.getElementById(imgId).src = s + "?" + (new Date().getMilliseconds());\r
+}\r
+\r
+function imgReload(imgId) {\r
+   document.getElementById(imgId).src = document.getElementById(imgId).lowsrc;\r
+}\r
+\r
+function getNodeText(node) {\r
+   var txt = "";\r
+   if (node.textContent != undefined) txt = node.textContent;\r
+   else if (node.text != undefined) txt = node.text;\r
+   return txt;\r
+}\r
+\r
+//  Cookie functions\r
+function setCookie(name, value, expires, path, domain, secure) {\r
+   document.cookie = name + "=" + escape(value) +\r
+        ((expires) ? "; expires=" + expires.toGMTString() : "") +\r
+        ((path) ? "; path=" + path : "") +\r
+        ((domain) ? "; domain=" + domain : "") +\r
+        ((secure) ? "; secure" : "");\r
+}\r
+\r
+function getCookie(name) {\r
+   var dc = document.cookie;\r
+   var prefix = name + "=";\r
+   var begin = dc.indexOf("; " + prefix);\r
+   if (begin == -1) {\r
+      begin = dc.indexOf(prefix);\r
+      if (begin != 0) return null;\r
+   } else {\r
+      begin += 2;\r
+   }\r
+   var end = document.cookie.indexOf(";", begin);\r
+   if (end == -1) {\r
+      end = dc.length;\r
+   }\r
+   return unescape(dc.substring(begin + prefix.length, end));\r
+}\r
+\r
+function deleteCookie(name, path, domain) {\r
+   if (getCookie(name)) {\r
+      document.cookie = name + "=" +\r
+            ((path) ? "; path=" + path : "") +\r
+            ((domain) ? "; domain=" + domain : "") +\r
+            "; expires=Thu, 01-Jan-70 00:00:01 GMT";\r
+   }\r
+}\r
+\r
+function loadNumClustersTableByLane(xmlName, tblName, tagsName) {\r
+   tbl = document.getElementById(tblName);\r
+   xmlDoc = loadXMLDoc(xmlName);\r
+   if (xmlDoc == null) return;\r
+   xmlRows = xmlDoc.getElementsByTagName(tagsName);\r
+   while (tbl.rows.length > 0) tbl.deleteRow(tbl.rows.length - 1);\r
+   if (xmlRows.length > 0 && xmlRows[0].attributes.length > 0) {\r
+      for (i = 0; i < xmlRows.length; i++) {\r
+         tbl.insertRow(0);\r
+         for (j = xmlRows[i].attributes.length - 1; j >= 0; j--) {\r
+            tbl.rows[0].insertCell(0);\r
+            tbl.rows[0].cells[0].innerHTML = xmlRows[i].attributes[j].value;\r
+         }\r
+         //create column titles\r
+         tbl.insertRow(0);\r
+      }\r
+      for (j = xmlRows[0].attributes.length - 1; j >= 0; j--) {\r
+         tbl.rows[0].insertCell(0);\r
+         tbl.rows[0].cells[0].innerHTML = xmlRows[0].attributes[j].name;\r
+      }\r
+      tbl.rows[0].cells[0].innerHTML = tagsName + "#"\r
+   }\r
+}\r
+\r
+function loadXSLTable(xmlName, xslName, tblName) {\r
+       tbl = document.getElementById(tblName);\r
+       xmlDoc = loadXMLDoc(xmlName);\r
+       xslDoc = loadXMLDoc(xslName);\r
+       if (xmlDoc == null || xslDoc == null) return false;\r
+       // code for IE\r
+       if (window.ActiveXObject) {\r
+               ex = xmlDoc.transformNode(xslDoc);\r
+               tbl.innerHTML = ex;\r
+       }\r
+       // code for Mozilla, Firefox, Opera, etc.\r
+       else if (document.implementation && document.implementation.createDocument) {\r
+               xsltProcessor = new XSLTProcessor();\r
+               xsltProcessor.importStylesheet(xslDoc);\r
+               resultDocument = xsltProcessor.transformToFragment(xmlDoc, document);\r
+               if ( tbl.hasChildNodes() )\r
+                       while ( tbl.childNodes.length >= 1 ) \r
+                               tbl.removeChild( tbl.firstChild );\r
+               tbl.appendChild(resultDocument);\r
+               return true;\r
+       }\r
+}\r
+\r
+function xslTransform(xmlDoc, xslDoc) {\r
+       resultDocument = null;\r
+       if (xmlDoc != null && xslDoc != null) {\r
+               // code for IE\r
+               if (window.ActiveXObject) {\r
+                       ex = xmlDoc.transformNode(xslDoc);\r
+                       resultDocument = ex;\r
+               }\r
+               // code for Mozilla, Firefox, Opera, etc.\r
+               else if (document.implementation && document.implementation.createDocument) {\r
+                       xsltProcessor = new XSLTProcessor();\r
+                       xsltProcessor.importStylesheet(xslDoc);\r
+                       resultDocument = xsltProcessor.transformToFragment(xmlDoc, document).textContent;\r
+               }\r
+       }\r
+       return resultDocument;\r
+}\r
diff --git a/htsworkflow/pipelines/test/testdata/1_12/Status_Files/StatusError.htm b/htsworkflow/pipelines/test/testdata/1_12/Status_Files/StatusError.htm
new file mode 100755 (executable)
index 0000000..705d39c
--- /dev/null
@@ -0,0 +1,8 @@
+<html xmlns="http://www.w3.org/1999/xhtml" >\r
+<head></head> \r
+<body>\r
+<p>There was a problem loading the file.</p>\r
+<p>Please click a link below to try again</p>\r
+<p><a href=".\Status.htm">Status.htm</a></p>\r
+</body>\r
+</html>\r
diff --git a/htsworkflow/pipelines/test/testdata/1_12/Status_Files/StatusUpdate.xsl b/htsworkflow/pipelines/test/testdata/1_12/Status_Files/StatusUpdate.xsl
new file mode 100755 (executable)
index 0000000..9d86eb9
--- /dev/null
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"\r
+    xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"\r
+                xmlns:lxslt="http://xml.apache.org/xslt">\r
+<xsl:output method="html" indent="yes"/>\r
+       <xsl:template match="/">\r
+               <table class="StatusTable"><tr>\r
+                       <th>Total:</th><td id="NumCycles"><xsl:value-of select="/Status/NumCycles"/></td>\r
+                       <th>Extracted:</th><td id="ImgCycle"><xsl:value-of select="/Status/ImgCycle"/></td>\r
+                       <th>Called:</th><td id="CallCycle"><xsl:value-of select="/Status/CallCycle"/></td>\r
+                       <th>Scored:</th><td id="ScoreCycle"><xsl:value-of select="/Status/ScoreCycle"/></td>\r
+                       <th>Copied:</th><td id="CopyCycle"><xsl:value-of select="/Status/CopyCycle"/></td>\r
+               </tr></table>\r
+  </xsl:template>\r
+</xsl:stylesheet>\r
diff --git a/htsworkflow/pipelines/test/testdata/1_12/Status_Files/Summary.htm b/htsworkflow/pipelines/test/testdata/1_12/Status_Files/Summary.htm
new file mode 100755 (executable)
index 0000000..b11632d
--- /dev/null
@@ -0,0 +1,53 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+       <link rel="stylesheet" href="./Status.css" type="text/css" media="screen"/>\r
+       <script src="./Status.js" type="text/javascript"></script>\r
+       <script src="./Summary.js" type="text/javascript"></script>\r
+       <title>Status</title>\r
+</head>\r
\r
+<body>\r
+       <table style="border:none"><tr>\r
+               <td><img alt="Refresh" title="Refresh" name="RefreshBtn" height="25" width="25" src="./RefreshBtn/r1.png"  onmouseout="this.src='./RefreshBtn/r1.png'" onmouseover="this.src='./RefreshBtn/r2.png'" onmousedown="this.src='./RefreshBtn/r3.png'" onmouseup="this.src='./RefreshBtn/r2.png'" onclick="window.location.reload(true)" />&#160;</td>\r
+               <td id="StatUpdateDiv" >\r
+                       <table class="StatusTable"><tr>\r
+                               <th>Total:</th><td>0</td><th>Extracted:</th><td>0</td><th>Called:</th><td>0</td>\r
+                               <th>Scored:</th><td>0</td><th>Copied:</th><td>0</td><th>Err.Rated:</th><td>0</td>\r
+                       </tr></table></td> \r
+               <td id="RunNameTD">Loading Run Data ...</td>\r
+       </tr></table>\r
+       <script type="text/javascript">\r
+               loadXSLTable('../reports/StatusUpdate.xml', './StatusUpdate.xsl', 'StatUpdateDiv');\r
+               runName = xslTransform(loadXMLDoc('../reports/Status.xml'), loadXMLDoc('./RunName.xsl'));\r
+               document.getElementById("RunNameTD").innerHTML = runName;\r
+               document.title = runName + " Status";\r
+       </script>\r
+<ul id="tabmenu">\r
+       <li><a href="./RunInfo.htm">Run Info</a></li>\r
+       <li><a href="../Status.htm">Tile Status</a></li>\r
+       <li><a href="./Charts.htm">Charts</a></li>\r
+       <li><a class="selected" href="./Summary.htm">Summary</a></li>\r
+  <li><a class="space">Plots:</a></li>\r
+       <li><a href="./ByLane.htm">Cluster Density</a></li>\r
+       <li><a href="./ByCycle.htm">Data By Cycle</a></li>\r
+</ul>\r
\r
+<div id="container">\r
+       <div id="SumTbl1" ><p> No data available yet.</p></div>\r
+       <div id="SumTbl2"></div>\r
+       <div id="SumTbl3"></div>\r
+       <div id="SumTbl4"></div>\r
+       <div id="SumTbl5"></div>\r
+       <div id="SumTbl6"></div>\r
+       <div id="SumTbl7"></div>\r
+       <div id="SumTbl8"></div>\r
+       <div id="SumTbl9"></div>\r
+       <div id="SumTbl10"></div>\r
+       <div id="SumTbl11"></div>\r
+       <script type="text/javascript">loadSumTable()</script>\r
+</div>\r
\r
+</body>\r
+</html>\r
+\r
diff --git a/htsworkflow/pipelines/test/testdata/1_12/Status_Files/Summary.js b/htsworkflow/pipelines/test/testdata/1_12/Status_Files/Summary.js
new file mode 100755 (executable)
index 0000000..39b8884
--- /dev/null
@@ -0,0 +1,8 @@
+window.onerror = function() {\r
+       parent.location = './Error.htm';\r
+}\r
+\r
+function loadSumTable() {\r
+    for (i = 1; i < 12; i++)\r
+        loadXSLTable('../reports/Summary/read' + i + '.xml', './Summary.xsl', 'SumTbl' + i);\r
+}
\ No newline at end of file
diff --git a/htsworkflow/pipelines/test/testdata/1_12/Status_Files/Summary.xsl b/htsworkflow/pipelines/test/testdata/1_12/Status_Files/Summary.xsl
new file mode 100755 (executable)
index 0000000..8ebf359
--- /dev/null
@@ -0,0 +1,49 @@
+<?xml version="1.0"?> \r
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" \r
+version="1.0"> \r
+<xsl:output method="html" indent="yes" omit-xml-declaration="yes"/>\r
+<xsl:template match="/">\r
+               <p/>&#160;&#160;&#160;<b>Read #<xsl:value-of select="Summary/@Read"/></b>\r
+                <i><xsl:value-of select="Summary/@ReadType"/></i>\r
+       <table class="DataTable" >\r
+        <tr>\r
+      <th >Lane</th> <th>Tiles</th> <th>Clu.Dens. (#/mm<sup>2</sup>)</th>\r
+      <th>% PF Clusters </th> <th>Clusters PF (#/mm<sup>2</sup>)</th> <th>% Phas./Preph.</th>\r
+                <th>Cycles<br/>Err Rated</th> <th>% Aligned</th> <th>% Error Rate</th> \r
+               <th>% Error Rate<br/> 35 cycle</th > <th>% Error Rate<br/> 75 cycle</th > <th>% Error Rate<br/> 100 cycle</th > <th>1<sup>st</sup> Cycle Int</th>\r
+      <th>% Intensity<br/> Cycle 20</th>\r
+    </tr>\r
+    <xsl:variable name="densityRatio" select="Summary/@densityRatio"/>\r
+      <xsl:for-each select="Summary/Lane">\r
+                                       <tr>\r
+         <td><xsl:value-of select="@key"/></td>         \r
+         <td><xsl:value-of select="@TileCount"/></td>         \r
+         <td><xsl:value-of select="format-number(@ClustersRaw * $densityRatio div 1000,'#')"/>K +/- \r
+                               <xsl:value-of select="format-number(@ClustersRawSD * $densityRatio div 1000,'#.0')"/>K</td>         \r
+         <td><xsl:value-of select="@PrcPFClusters"/> +/- \r
+                               <xsl:value-of select="@PrcPFClustersSD"/></td>         \r
+         <td><xsl:value-of select="format-number(@ClustersPF* $densityRatio div 1000,'#.0')"/>K +/- \r
+                               <xsl:value-of select="format-number(@ClustersPFSD* $densityRatio div 1000,'#.00')"/>K</td>         \r
+         <td><xsl:value-of select="@Phasing"/> /\r
+                               <xsl:value-of select="@Prephasing"/></td>\r
+         <td><xsl:value-of select="@CalledCyclesMin"/>\r
+            <xsl:if test="@CalledCyclesMax &gt; @CalledCyclesMin">-<xsl:value-of select="@CalledCyclesMax"/></xsl:if></td>\r
+         <td><xsl:value-of select="@PrcAlign"/> +/-\r
+                               <xsl:value-of select="@PrcAlignSD"/></td>         \r
+         <td><xsl:value-of select="@ErrRatePhiX"/> +/-\r
+           <xsl:value-of select="@ErrRatePhiXSD"/></td>\r
+         <td><xsl:value-of select="@ErrRate35"/> +/-\r
+           <xsl:value-of select="@ErrRate35SD"/></td>\r
+         <td><xsl:value-of select="@ErrRate75"/> +/-\r
+           <xsl:value-of select="@ErrRate75SD"/></td>\r
+         <td><xsl:value-of select="@ErrRate100"/> +/-\r
+           <xsl:value-of select="@ErrRate100SD"/></td>\r
+         <td><xsl:value-of select="format-number(@FirstCycleIntPF,'#')"/> +/-\r
+             <xsl:value-of select="format-number(@FirstCycleIntPFSD,'#.0')"/></td>\r
+         <td><xsl:value-of select="format-number(@PrcIntensityAfter20CyclesPF,'#.0')"/> +/-\r
+             <xsl:value-of select="format-number(@PrcIntensityAfter20CyclesPFSD,'#.00')"/></td>\r
+                                       </tr>\r
+      </xsl:for-each>\r
+  </table >\r
+</xsl:template>\r
+</xsl:stylesheet>\r
diff --git a/htsworkflow/pipelines/test/testdata/1_12/Status_Files/TilesPerLane.xsl b/htsworkflow/pipelines/test/testdata/1_12/Status_Files/TilesPerLane.xsl
new file mode 100755 (executable)
index 0000000..550a4af
--- /dev/null
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"\r
+    xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"\r
+                xmlns:lxslt="http://xml.apache.org/xslt">\r
+<xsl:output method="html" indent="yes"/>\r
+       <xsl:template match="/">\r
+               <xsl:value-of select="/Status/Configuration/TilesPerLane"/>\r
+  </xsl:template>\r
+</xsl:stylesheet>\r
diff --git a/htsworkflow/pipelines/test/testdata/1_12/Status_Files/illumina.png b/htsworkflow/pipelines/test/testdata/1_12/Status_Files/illumina.png
new file mode 100755 (executable)
index 0000000..4add57c
Binary files /dev/null and b/htsworkflow/pipelines/test/testdata/1_12/Status_Files/illumina.png differ
diff --git a/htsworkflow/pipelines/test/testdata/1_12/Summary-rta1_12.htm b/htsworkflow/pipelines/test/testdata/1_12/Summary-rta1_12.htm
new file mode 100755 (executable)
index 0000000..b11632d
--- /dev/null
@@ -0,0 +1,53 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+       <link rel="stylesheet" href="./Status.css" type="text/css" media="screen"/>\r
+       <script src="./Status.js" type="text/javascript"></script>\r
+       <script src="./Summary.js" type="text/javascript"></script>\r
+       <title>Status</title>\r
+</head>\r
\r
+<body>\r
+       <table style="border:none"><tr>\r
+               <td><img alt="Refresh" title="Refresh" name="RefreshBtn" height="25" width="25" src="./RefreshBtn/r1.png"  onmouseout="this.src='./RefreshBtn/r1.png'" onmouseover="this.src='./RefreshBtn/r2.png'" onmousedown="this.src='./RefreshBtn/r3.png'" onmouseup="this.src='./RefreshBtn/r2.png'" onclick="window.location.reload(true)" />&#160;</td>\r
+               <td id="StatUpdateDiv" >\r
+                       <table class="StatusTable"><tr>\r
+                               <th>Total:</th><td>0</td><th>Extracted:</th><td>0</td><th>Called:</th><td>0</td>\r
+                               <th>Scored:</th><td>0</td><th>Copied:</th><td>0</td><th>Err.Rated:</th><td>0</td>\r
+                       </tr></table></td> \r
+               <td id="RunNameTD">Loading Run Data ...</td>\r
+       </tr></table>\r
+       <script type="text/javascript">\r
+               loadXSLTable('../reports/StatusUpdate.xml', './StatusUpdate.xsl', 'StatUpdateDiv');\r
+               runName = xslTransform(loadXMLDoc('../reports/Status.xml'), loadXMLDoc('./RunName.xsl'));\r
+               document.getElementById("RunNameTD").innerHTML = runName;\r
+               document.title = runName + " Status";\r
+       </script>\r
+<ul id="tabmenu">\r
+       <li><a href="./RunInfo.htm">Run Info</a></li>\r
+       <li><a href="../Status.htm">Tile Status</a></li>\r
+       <li><a href="./Charts.htm">Charts</a></li>\r
+       <li><a class="selected" href="./Summary.htm">Summary</a></li>\r
+  <li><a class="space">Plots:</a></li>\r
+       <li><a href="./ByLane.htm">Cluster Density</a></li>\r
+       <li><a href="./ByCycle.htm">Data By Cycle</a></li>\r
+</ul>\r
\r
+<div id="container">\r
+       <div id="SumTbl1" ><p> No data available yet.</p></div>\r
+       <div id="SumTbl2"></div>\r
+       <div id="SumTbl3"></div>\r
+       <div id="SumTbl4"></div>\r
+       <div id="SumTbl5"></div>\r
+       <div id="SumTbl6"></div>\r
+       <div id="SumTbl7"></div>\r
+       <div id="SumTbl8"></div>\r
+       <div id="SumTbl9"></div>\r
+       <div id="SumTbl10"></div>\r
+       <div id="SumTbl11"></div>\r
+       <script type="text/javascript">loadSumTable()</script>\r
+</div>\r
\r
+</body>\r
+</html>\r
+\r
diff --git a/htsworkflow/pipelines/test/testdata/1_12/aligned_config_1_12.xml b/htsworkflow/pipelines/test/testdata/1_12/aligned_config_1_12.xml
new file mode 100644 (file)
index 0000000..18b5714
--- /dev/null
@@ -0,0 +1,234 @@
+<?xml version="1.0"?>
+<RunParameters>
+  <Barcodes>
+  </Barcodes>
+  <Defaults>
+    <ANALYSIS>none</ANALYSIS>
+    <CHROM_NAME_SOURCE>fileName</CHROM_NAME_SOURCE>
+    <CHROM_NAME_VALIDATION>on</CHROM_NAME_VALIDATION>
+    <CMDPREFIX></CMDPREFIX>
+    <DATASET_POST_RUN_COMMAND></DATASET_POST_RUN_COMMAND>
+    <ELAND_EXTENDED_MULTI_READS>off</ELAND_EXTENDED_MULTI_READS>
+    <ELAND_FASTQ_FILES_PER_PROCESS>3</ELAND_FASTQ_FILES_PER_PROCESS>
+    <ELAND_GENOME></ELAND_GENOME>
+    <ELAND_GENOME_MASK>*.fa</ELAND_GENOME_MASK>
+    <ELAND_MAX_MATCHES></ELAND_MAX_MATCHES>
+    <ELAND_PARAMS></ELAND_PARAMS>
+    <ELAND_REPEAT></ELAND_REPEAT>
+    <ELAND_RNA_GENE_MD_GROUP_LABEL></ELAND_RNA_GENE_MD_GROUP_LABEL>
+    <ELAND_RNA_GENOME_ANNOTATION></ELAND_RNA_GENOME_ANNOTATION>
+    <ELAND_RNA_GENOME_CONTAM></ELAND_RNA_GENOME_CONTAM>
+    <ELAND_RNA_GENOME_CONTAM_MASK>*.fa</ELAND_RNA_GENOME_CONTAM_MASK>
+    <ELAND_RNA_MULTI_READS>off</ELAND_RNA_MULTI_READS>
+    <ELAND_SEED_LENGTH1>32</ELAND_SEED_LENGTH1>
+    <ELAND_SEED_LENGTH2></ELAND_SEED_LENGTH2>
+    <EMAIL_DOMAIN>domain.com</EMAIL_DOMAIN>
+    <EMAIL_LIST>${logName}</EMAIL_LIST>
+    <EMAIL_SERVER>localhost:25</EMAIL_SERVER>
+    <EXPT_DIR>/mmjggl/nicodemus/data01/sequencer/110815_SN787_0101_AD07K6ACXX/Unaligned_1MM</EXPT_DIR>
+    <FLAT_TXT_GZ_SUFFIX>Flat.txt.gz</FLAT_TXT_GZ_SUFFIX>
+    <FLOWCELL>D07K6ACXX</FLOWCELL>
+    <GENE_MD_GZ_SUFFIX>_gene.md.gz</GENE_MD_GZ_SUFFIX>
+    <INCREASED_SENSITIVITY></INCREASED_SENSITIVITY>
+    <KAGU_PAIR_PARAMS>--muf 0</KAGU_PAIR_PARAMS>
+    <KAGU_PARAMS>--mmaq 4</KAGU_PARAMS>
+    <NUM_LEADING_DIRS_TO_STRIP>2</NUM_LEADING_DIRS_TO_STRIP>
+    <OA_SUFFIX>.oa</OA_SUFFIX>
+    <ORIGINAL_READS>1</ORIGINAL_READS>
+    <ORIGINAL_READ_LENGTH1>50</ORIGINAL_READ_LENGTH1>
+    <ORPHAN_ALIGNER_PARAMS>2</ORPHAN_ALIGNER_PARAMS>
+    <OUT_DIR>/mmjggl/nicodemus/data01/sequencer/110815_SN787_0101_AD07K6ACXX/Aligned_1MM</OUT_DIR>
+    <PAS_PARAMS></PAS_PARAMS>
+    <RAMM_REPORT_TYPE></RAMM_REPORT_TYPE>
+    <READS>1</READS>
+    <READ_LENGTH1>49</READ_LENGTH1>
+    <RNAQC_COUNT_CLUSTERS_CMD>$(WC) -l</RNAQC_COUNT_CLUSTERS_CMD>
+    <RNAQC_COUNT_CLUSTERS_NAME>totalClusters</RNAQC_COUNT_CLUSTERS_NAME>
+    <RNAQC_COUNT_GENOME_CMD>($(GREP) -cvE '^((NM|QC|RM|[0-9]+:[0-9]+:[0-9]+)$$|splice_sites)' || exit 0)</RNAQC_COUNT_GENOME_CMD>
+    <RNAQC_COUNT_GENOME_NAME>genomeUsable</RNAQC_COUNT_GENOME_NAME>
+    <RNAQC_COUNT_NM_CMD>($(FGREP) -wc NM || exit 0)</RNAQC_COUNT_NM_CMD>
+    <RNAQC_COUNT_NM_NAME>noMatch</RNAQC_COUNT_NM_NAME>
+    <RNAQC_COUNT_PF_CMD>$(WC) -l</RNAQC_COUNT_PF_CMD>
+    <RNAQC_COUNT_PF_NAME>PFClusters</RNAQC_COUNT_PF_NAME>
+    <RNAQC_COUNT_QC_CMD>($(FGREP) -wc QC || exit 0)</RNAQC_COUNT_QC_CMD>
+    <RNAQC_COUNT_QC_NAME>QC</RNAQC_COUNT_QC_NAME>
+    <RNAQC_COUNT_RM_CMD>($(FGREP) -wc RM || exit 0)</RNAQC_COUNT_RM_CMD>
+    <RNAQC_COUNT_RM_NAME>repeatMasked</RNAQC_COUNT_RM_NAME>
+    <RNAQC_COUNT_SPLICE_CMD>($(FGREP) -c splice_sites || exit 0)</RNAQC_COUNT_SPLICE_CMD>
+    <RNAQC_COUNT_SPLICE_NAME>spliceUsable</RNAQC_COUNT_SPLICE_NAME>
+    <RNAQC_COUNT_USABLE_CMD>$(CUT) -f13 |($(EGREP) [0-9] || exit 0)|$(WC) -l</RNAQC_COUNT_USABLE_CMD>
+    <RNAQC_COUNT_USABLE_NAME>usable</RNAQC_COUNT_USABLE_NAME>
+    <RNAQC_FIND_CONTAMS_CMD>($(GREP) -vE '^(NM|QC|RM|[0-9]+:[0-9]+:[0-9]+)$$' || exit 0)</RNAQC_FIND_CONTAMS_CMD>
+    <SAMTOOLS_GENOME></SAMTOOLS_GENOME>
+    <SEQGENEMD2REFFLAT_PARAMS></SEQGENEMD2REFFLAT_PARAMS>
+    <SINGLESEED></SINGLESEED>
+    <SPLCSTS_PARAMS>-v $(CASAVA_LOG_LEVEL)</SPLCSTS_PARAMS>
+    <SQUASH_GENOME_PARAMS></SQUASH_GENOME_PARAMS>
+    <UNGAPPED></UNGAPPED>
+    <USE_BASES>y*n</USE_BASES>
+    <USE_BASES1>yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyn</USE_BASES1>
+    <WEB_DIR_ROOT>http://host.domain.com/yourshare/</WEB_DIR_ROOT>
+    <WITH_ORPHAN_ALIGNER>true</WITH_ORPHAN_ALIGNER>
+  </Defaults>
+  <Lanes>
+    <Lane index="1">
+      <Barcodes></Barcodes>
+      <Defaults>
+        <ANALYSIS>eland_extended</ANALYSIS>
+        <CHROM_NAME_SOURCE>fileName</CHROM_NAME_SOURCE>
+        <ELAND_GENOME>/mmjggl/nicodemus/data01/genomes/elegans190/chromosomes/</ELAND_GENOME>
+        <ELAND_GENOME_MASK>*.fa</ELAND_GENOME_MASK>
+        <ELAND_SEED_LENGTH1>32</ELAND_SEED_LENGTH1>
+        <READS>1</READS>
+        <READ_LENGTH1>49</READ_LENGTH1>
+        <Tiles>1101 1102 1103 1104 1105 1106 1107 1108 1201 1202 1203 1204 1205 1206 1207 1208 1301 1302 1303 1304 1305 1306 1307 1308 2101 2102 2103 2104 2105 2106 2107 2108 2201 2202 2203 2204 2205 2206 2207 2208 2301 2302 2303 2304 2305 2306 2307 2308</Tiles>
+        <USE_BASES>Y*n</USE_BASES>
+        <USE_BASES1>yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyn</USE_BASES1>
+      </Defaults>
+      <Projects></Projects>
+      <References></References>
+      <Samples></Samples>
+    </Lane>
+    <Lane index="2">
+      <Barcodes></Barcodes>
+      <Defaults>
+        <ANALYSIS>eland_extended</ANALYSIS>
+        <CHROM_NAME_SOURCE>fileName</CHROM_NAME_SOURCE>
+        <ELAND_GENOME>/mmjggl/nicodemus/data01/genomes/elegans190/chromosomes/</ELAND_GENOME>
+        <ELAND_GENOME_MASK>*.fa</ELAND_GENOME_MASK>
+        <ELAND_SEED_LENGTH1>32</ELAND_SEED_LENGTH1>
+        <READS>1</READS>
+        <READ_LENGTH1>49</READ_LENGTH1>
+        <Tiles>1101 1102 1103 1104 1105 1106 1107 1108 1201 1202 1203 1204 1205 1206 1207 1208 1301 1302 1303 1304 1305 1306 1307 1308 2101 2102 2103 2104 2105 2106 2107 2108 2201 2202 2203 2204 2205 2206 2207 2208 2301 2302 2303 2304 2305 2306 2307 2308</Tiles>
+        <USE_BASES>Y*n</USE_BASES>
+        <USE_BASES1>yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyn</USE_BASES1>
+      </Defaults>
+      <Projects></Projects>
+      <References></References>
+      <Samples></Samples>
+    </Lane>
+    <Lane index="4">
+      <Barcodes></Barcodes>
+      <Defaults>
+        <ANALYSIS>eland_extended</ANALYSIS>
+        <CHROM_NAME_SOURCE>fileName</CHROM_NAME_SOURCE>
+        <ELAND_GENOME>/mmjggl/nicodemus/data01/genomes/hg18/chromosomes/</ELAND_GENOME>
+        <ELAND_GENOME_MASK>*.fa</ELAND_GENOME_MASK>
+        <ELAND_SEED_LENGTH1>32</ELAND_SEED_LENGTH1>
+        <READS>1</READS>
+        <READ_LENGTH1>49</READ_LENGTH1>
+        <Tiles>1101 1102 1103 1104 1105 1106 1107 1108 1201 1202 1203 1204 1205 1206 1207 1208 1301 1302 1303 1304 1305 1306 1307 1308 2101 2102 2103 2104 2105 2106 2107 2108 2201 2202 2203 2204 2205 2206 2207 2208 2301 2302 2303 2304 2305 2306 2307 2308</Tiles>
+        <USE_BASES>Y*n</USE_BASES>
+        <USE_BASES1>yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyn</USE_BASES1>
+      </Defaults>
+      <Projects></Projects>
+      <References></References>
+      <Samples></Samples>
+    </Lane>
+    <Lane index="5">
+      <Barcodes></Barcodes>
+      <Defaults>
+        <ANALYSIS>eland_extended</ANALYSIS>
+        <CHROM_NAME_SOURCE>fileName</CHROM_NAME_SOURCE>
+        <ELAND_GENOME>/mmjggl/nicodemus/data01/genomes/hg18/chromosomes/</ELAND_GENOME>
+        <ELAND_GENOME_MASK>*.fa</ELAND_GENOME_MASK>
+        <ELAND_SEED_LENGTH1>32</ELAND_SEED_LENGTH1>
+        <READS>1</READS>
+        <READ_LENGTH1>49</READ_LENGTH1>
+        <Tiles>1101 1102 1103 1104 1105 1106 1107 1108 1201 1202 1203 1204 1205 1206 1207 1208 1301 1302 1303 1304 1305 1306 1307 1308 2101 2102 2103 2104 2105 2106 2107 2108 2201 2202 2203 2204 2205 2206 2207 2208 2301 2302 2303 2304 2305 2306 2307 2308</Tiles>
+        <USE_BASES>Y*n</USE_BASES>
+        <USE_BASES1>yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyn</USE_BASES1>
+      </Defaults>
+      <Projects></Projects>
+      <References></References>
+      <Samples></Samples>
+    </Lane>
+    <Lane index="6">
+      <Barcodes></Barcodes>
+      <Defaults>
+        <ANALYSIS>eland_extended</ANALYSIS>
+        <CHROM_NAME_SOURCE>fileName</CHROM_NAME_SOURCE>
+        <ELAND_GENOME>/mmjggl/nicodemus/data01/genomes/hg18/chromosomes/</ELAND_GENOME>
+        <ELAND_GENOME_MASK>*.fa</ELAND_GENOME_MASK>
+        <ELAND_SEED_LENGTH1>32</ELAND_SEED_LENGTH1>
+        <READS>1</READS>
+        <READ_LENGTH1>49</READ_LENGTH1>
+        <Tiles>1101 1102 1103 1104 1105 1106 1107 1108 1201 1202 1203 1204 1205 1206 1207 1208 1301 1302 1303 1304 1305 1306 1307 1308 2101 2102 2103 2104 2105 2106 2107 2108 2201 2202 2203 2204 2205 2206 2207 2208 2301 2302 2303 2304 2305 2306 2307 2308</Tiles>
+        <USE_BASES>Y*n</USE_BASES>
+        <USE_BASES1>yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyn</USE_BASES1>
+      </Defaults>
+      <Projects></Projects>
+      <References></References>
+      <Samples></Samples>
+    </Lane>
+    <Lane index="7">
+      <Barcodes></Barcodes>
+      <Defaults>
+        <ANALYSIS>none</ANALYSIS>
+        <Tiles>1101 1102 1103 1104 1105 1106 1107 1108 1201 1202 1203 1204 1205 1206 1207 1208 1301 1302 1303 1304 1305 1306 1307 1308 2101 2102 2103 2104 2105 2106 2107 2108 2201 2202 2203 2204 2205 2206 2207 2208 2301 2302 2303 2304 2305 2306 2307 2308</Tiles>
+      </Defaults>
+      <Projects></Projects>
+      <References></References>
+      <Samples></Samples>
+    </Lane>
+    <Lane index="8">
+      <Barcodes></Barcodes>
+      <Defaults>
+        <ANALYSIS>none</ANALYSIS>
+        <Tiles>1101 1102 1103 1104 1105 1106 1107 1108 1201 1202 1203 1204 1205 1206 1207 1208 1301 1302 1303 1304 1305 1306 1307 1308 2101 2102 2103 2104 2105 2106 2107 2108 2201 2202 2203 2204 2205 2206 2207 2208 2301 2302 2303 2304 2305 2306 2307 2308</Tiles>
+      </Defaults>
+      <Projects></Projects>
+      <References></References>
+      <Samples></Samples>
+    </Lane>
+    <Lane index="3">
+      <Barcodes></Barcodes>
+      <Defaults>
+        <Tiles>1101 1102 1103 1104 1105 1106 1107 1108 1201 1202 1203 1204 1205 1206 1207 1208 1301 1302 1303 1304 1305 1306 1307 1308 2101 2102 2103 2104 2105 2106 2107 2108 2201 2202 2203 2204 2205 2206 2207 2208 2301 2302 2303 2304 2305 2306 2307 2308</Tiles>
+      </Defaults>
+      <Projects></Projects>
+      <References></References>
+      <Samples></Samples>
+    </Lane>
+  </Lanes>
+  <Projects>
+    <Project name="12383">
+      <ANALYSIS>eland_extended</ANALYSIS>
+      <CHROM_NAME_SOURCE>fileName</CHROM_NAME_SOURCE>
+      <ELAND_GENOME>/g/hg18/chromosomes/</ELAND_GENOME>
+      <ELAND_GENOME_MASK>*.fa</ELAND_GENOME_MASK>
+      <ELAND_SEED_LENGTH1>32</ELAND_SEED_LENGTH1>
+      <READS>1</READS>
+      <READ_LENGTH1>49</READ_LENGTH1>
+      <USE_BASES>Y*n</USE_BASES>
+      <USE_BASES1>yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyn</USE_BASES1>
+    </Project>
+    <Project name="Undetermined_indices">
+      <ANALYSIS>none</ANALYSIS>
+    </Project>
+  </Projects>
+  <References>
+    <Reference name="mm9">
+      <ANALYSIS>eland_extended</ANALYSIS>
+      <CHROM_NAME_SOURCE>fileName</CHROM_NAME_SOURCE>
+      <ELAND_GENOME>/mmjggl/nicodemus/data01/genomes/mm9/chromosomes/</ELAND_GENOME>
+      <ELAND_GENOME_MASK>*.fa</ELAND_GENOME_MASK>
+      <ELAND_SEED_LENGTH1>32</ELAND_SEED_LENGTH1>
+      <READS>1</READS>
+      <READ_LENGTH1>49</READ_LENGTH1>
+      <USE_BASES>Y*n</USE_BASES>
+      <USE_BASES1>yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyn</USE_BASES1>
+    </Reference>
+  </References>
+  <Samples>
+  </Samples>
+  <Software CmdAndArgs="/mmjggl/nicodemus/data01/casava-v1.8.1/bin/configureAlignment.pl config.txt --EXPT_DIR /mmjggl/nicodemus/data01/sequencer/110815_SN787_0101_AD07K6ACXX/Unaligned_1MM/ --OUT_DIR /mmjggl/nicodemus/data01/sequencer/110815_SN787_0101_AD07K6ACXX/Aligned_1MM -make" Name="configureAlignment.pl" Version="CASAVA-1.8.1">
+    <Software CmdAndArgs="/mmjggl/nicodemus/data01/casava-v1.8.1/bin/configureBclToFastq.pl --input-dir Data/Intensities/BaseCalls/ --output-dir Unaligned_1MM --sample-sheet Data/Intensities/BaseCalls/SampleSheet.csv --mismatches 1" Name="configureBclToFastq.pl" Version="CASAVA-1.8.1">
+      <Software Name="RTA" Version="1.12.4.2">
+        <Software Name="RTA" Version="1.12.4.2">
+          <Software Name="HiSeq Control Software" Platform="HiSeq" Version="1.4.8" />
+        </Software>
+      </Software>
+    </Software>
+  </Software>
+</RunParameters>
diff --git a/htsworkflow/pipelines/test/testdata/1_12/demultiplex_1.12.4.2.xml b/htsworkflow/pipelines/test/testdata/1_12/demultiplex_1.12.4.2.xml
new file mode 100644 (file)
index 0000000..e7ee38d
--- /dev/null
@@ -0,0 +1,71 @@
+<DemultiplexConfig>
+  <Software Version="CASAVA-1.8.1" CmdAndArgs="/mmjggl/nicodemus/data01/casava-v1.8.1/bin/configureBclToFastq.pl --input-dir Data/Intensities/BaseCalls/ --output-dir Unaligned --sample-sheet Data/Intensities/BaseCalls/SampleSheet.csv" Name="configureBclToFastq.pl">
+    <Software Version="1.12.4.2" Name="RTA">
+      <Software Version="1.12.4.2" Name="RTA">
+        <Software Version="1.4.8" Platform="HiSeq" Name="HiSeq Control Software" />
+      </Software>
+    </Software>
+  </Software>
+  <FlowcellInfo ID="D07K6ACXX" Operator="Lorian" Recipe="SR_indexing" Desc="">
+    <Lane Number="1">
+      <Sample ProjectId="12281" Control="N" Index="ACAGTG" SampleId="12281" Desc="Index #5 AWCon cell#3_N2" Ref="elegans190" />
+      <Sample ProjectId="12279" Control="N" Index="CGATGT" SampleId="12279" Desc="Index #2 AWCon cell#1_N2" Ref="elegans190" />
+      <Sample ProjectId="12280" Control="N" Index="TGACCA" SampleId="12280" Desc="Index #4 AWCon cell#2_N2" Ref="elegans190" />
+      <Sample ProjectId="Undetermined_indices" Control="N" Index="Undetermined" SampleId="lane1" Desc="Clusters with unmatched barcodes for lane 1" Ref="unknown" />
+    </Lane>
+    <Lane Number="2">
+      <Sample ProjectId="12345" Control="N" Index="ACAGTG" SampleId="12345" Desc="Index #5 3 AWC ablated CX3695" Ref="elegans190" />
+      <Sample ProjectId="12283" Control="N" Index="CAGATC" SampleId="12283" Desc="Index #7 AWCon cell#5_N2" Ref="elegans190" />
+      <Sample ProjectId="12282" Control="N" Index="GCCAAT" SampleId="12282" Desc="Index #6 AWCon cell#4_N2" Ref="elegans190" />
+      <Sample ProjectId="Undetermined_indices" Control="N" Index="Undetermined" SampleId="lane2" Desc="Clusters with unmatched barcodes for lane 2" Ref="unknown" />
+    </Lane>
+    <Lane Number="3">
+      <Sample ProjectId="12331" Control="N" Index="ACAGTG" SampleId="12331" Desc="Index #5 060111 FLDN2b(d8.5) H3K4me3 ChIP" Ref="mm9" />
+      <Sample ProjectId="12383" Control="N" Index="CGATGT" SampleId="12383" Desc="Index #2 jwp ix-65 ni 16h" Ref="hg18" />
+      <Sample ProjectId="12330" Control="N" Index="TGACCA" SampleId="12330" Desc="Index #4 060111 Bcl11bKO DL4 FLDN2a H3K4me3 ChIP" Ref="mm9" />
+      <Sample ProjectId="Undetermined_indices" Control="N" Index="Undetermined" SampleId="lane3" Desc="Clusters with unmatched barcodes for lane 3" Ref="unknown" />
+    </Lane>
+    <Lane Number="4">
+      <Sample ProjectId="12385" Control="N" Index="ACAGTG" SampleId="12385" Desc="Index #5 jwp ix-65 i 16h" Ref="hg18" />
+      <Sample ProjectId="12386" Control="N" Index="GCCAAT" SampleId="12386" Desc="Index #6 jwp ix-71 NI 16h" Ref="hg18" />
+      <Sample ProjectId="12384" Control="N" Index="TGACCA" SampleId="12384" Desc="index #4 jwp ix-65 RD 16h" Ref="hg18" />
+      <Sample ProjectId="Undetermined_indices" Control="N" Index="Undetermined" SampleId="lane4" Desc="Clusters with unmatched barcodes for lane 4" Ref="unknown" />
+    </Lane>
+    <Lane Number="5">
+      <Sample ProjectId="12387" Control="N" Index="CAGATC" SampleId="12387" Desc="Index #7 jwp ix-71 RD 16h" Ref="hg18" />
+      <Sample ProjectId="12388" Control="N" Index="CTTGTA" SampleId="12388" Desc="Index #12 jwp ix-71 i 16h" Ref="hg18" />
+      <Sample ProjectId="Undetermined_indices" Control="N" Index="Undetermined" SampleId="lane5" Desc="Clusters with unmatched barcodes for lane 5" Ref="unknown" />
+    </Lane>
+    <Lane Number="6">
+      <Sample ProjectId="12391" Control="N" Index="ACTTGA" SampleId="12391" Desc="Index #8 jwp ix-63 NI 4h" Ref="hg18" />
+      <Sample ProjectId="12392" Control="N" Index="GATCAG" SampleId="12392" Desc="Index #9 jwp ix-63 DHT 10uM PA 4h" Ref="hg18" />
+      <Sample ProjectId="12393" Control="N" Index="TAGCTT" SampleId="12393" Desc="Index #10 jwp ix-63 DHT 4h" Ref="hg18" />
+      <Sample ProjectId="Undetermined_indices" Control="N" Index="Undetermined" SampleId="lane6" Desc="Clusters with unmatched barcodes for lane 6" Ref="unknown" />
+    </Lane>
+    <Lane Number="7">
+      <Sample ProjectId="12348_Index5" Control="N" Index="ACAGTG" SampleId="12348" Desc="Indices #1-9 Small RNA OSS TJ-GFP and constr.E-H" Ref="dm3" />
+      <Sample ProjectId="12348_Index8" Control="N" Index="ACTTGA" SampleId="12348" Desc="Indices #1-9 Small RNA OSS TJ-GFP and constr.E-H" Ref="dm3" />
+      <Sample ProjectId="12348_Index1" Control="N" Index="ATCACG" SampleId="12348" Desc="Indices #1-9 Small RNA OSS TJ-GFP and constr.E-H" Ref="dm3" />
+      <Sample ProjectId="12348_Index7" Control="N" Index="CAGATC" SampleId="12348" Desc="Indices #1-9 Small RNA OSS TJ-GFP and constr.E-H" Ref="dm3" />
+      <Sample ProjectId="12348_Index2" Control="N" Index="CGATGT" SampleId="12348" Desc="Indices #1-9 Small RNA OSS TJ-GFP and constr.E-H" Ref="dm3" />
+      <Sample ProjectId="12348_Index9" Control="N" Index="GATCAG" SampleId="12348" Desc="Indices #1-9 Small RNA OSS TJ-GFP and constr.E-H" Ref="dm3" />
+      <Sample ProjectId="12348_Index6" Control="N" Index="GCCAAT" SampleId="12348" Desc="Indices #1-9 Small RNA OSS TJ-GFP and constr.E-H" Ref="dm3" />
+      <Sample ProjectId="12348_Index4" Control="N" Index="TGACCA" SampleId="12348" Desc="Indices #1-9 Small RNA OSS TJ-GFP and constr.E-H" Ref="dm3" />
+      <Sample ProjectId="12348_Index3" Control="N" Index="TTAGGC" SampleId="12348" Desc="Indices #1-9 Small RNA OSS TJ-GFP and constr.E-H" Ref="dm3" />
+      <Sample ProjectId="Undetermined_indices" Control="N" Index="Undetermined" SampleId="lane7" Desc="Clusters with unmatched barcodes for lane 7" Ref="unknown" />
+    </Lane>
+    <Lane Number="8">
+      <Sample ProjectId="12382_Index5" Control="N" Index="ACAGTG" SampleId="12382" Desc="Small RNA Index #RPI1-RPI10 Human bladder cancer small RNA" Ref="hg18" />
+      <Sample ProjectId="12382_Index8" Control="N" Index="ACTTGA" SampleId="12382" Desc="Small RNA Index #RPI1-RPI10 Human bladder cancer small RNA" Ref="hg18" />
+      <Sample ProjectId="12382_Index1" Control="N" Index="ATCACG" SampleId="12382" Desc="Small RNA Index #RPI1-RPI10 Human bladder cancer small RNA" Ref="hg18" />
+      <Sample ProjectId="12382_Index7" Control="N" Index="CAGATC" SampleId="12382" Desc="Small RNA Index #RPI1-RPI10 Human bladder cancer small RNA" Ref="hg18" />
+      <Sample ProjectId="12382_Index2" Control="N" Index="CGATGT" SampleId="12382" Desc="Small RNA Index #RPI1-RPI10 Human bladder cancer small RNA" Ref="hg18" />
+      <Sample ProjectId="12382_Index9" Control="N" Index="GATCAG" SampleId="12382" Desc="Small RNA Index #RPI1-RPI10 Human bladder cancer small RNA" Ref="hg18" />
+      <Sample ProjectId="12382_Index6" Control="N" Index="GCCAAT" SampleId="12382" Desc="Small RNA Index #RPI1-RPI10 Human bladder cancer small RNA" Ref="hg18" />
+      <Sample ProjectId="12382_Index10" Control="N" Index="TAGCTT" SampleId="12382" Desc="Small RNA Index #RPI1-RPI10 Human bladder cancer small RNA" Ref="hg18" />
+      <Sample ProjectId="12382_Index4" Control="N" Index="TGACCA" SampleId="12382" Desc="Small RNA Index #RPI1-RPI10 Human bladder cancer small RNA" Ref="hg18" />
+      <Sample ProjectId="12382_Index3" Control="N" Index="TTAGGC" SampleId="12382" Desc="Small RNA Index #RPI1-RPI10 Human bladder cancer small RNA" Ref="hg18" />
+      <Sample ProjectId="Undetermined_indices" Control="N" Index="Undetermined" SampleId="lane8" Desc="Clusters with unmatched barcodes for lane 8" Ref="unknown" />
+    </Lane>
+  </FlowcellInfo>
+</DemultiplexConfig>
diff --git a/htsworkflow/pipelines/test/testdata/1_12/demultiplexed_bustard_1.12.4.2.xml b/htsworkflow/pipelines/test/testdata/1_12/demultiplexed_bustard_1.12.4.2.xml
new file mode 100644 (file)
index 0000000..ea6a596
--- /dev/null
@@ -0,0 +1,503 @@
+<?xml version="1.0"?>
+<BaseCallAnalysis xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <Run Name="BaseCalls">
+    <BaseCallParameters>
+      <ChastityThreshold>0.6</ChastityThreshold>
+      <Matrix Path="">
+        <AutoFlag>2</AutoFlag>
+        <AutoLane>0</AutoLane>
+        <Cycle>1</Cycle>
+        <CycleOffset>0</CycleOffset>
+        <FirstCycle>1</FirstCycle>
+        <LastCycle>50</LastCycle>
+        <Read>1</Read>
+      </Matrix>
+      <Matrix Path="">
+        <AutoFlag>2</AutoFlag>
+        <AutoLane>0</AutoLane>
+        <Cycle>51</Cycle>
+        <CycleOffset>0</CycleOffset>
+        <FirstCycle>51</FirstCycle>
+        <LastCycle>57</LastCycle>
+        <Read>2</Read>
+      </Matrix>
+      <Phasing Path="">
+        <AutoFlag>2</AutoFlag>
+        <AutoLane>0</AutoLane>
+        <Cycle>2</Cycle>
+        <CycleOffset>1</CycleOffset>
+        <FirstCycle>1</FirstCycle>
+        <LastCycle>50</LastCycle>
+        <PhasingRate>0</PhasingRate>
+        <PrephasingRate>0</PrephasingRate>
+        <Read>1</Read>
+      </Phasing>
+      <Phasing Path="">
+        <AutoFlag>2</AutoFlag>
+        <AutoLane>0</AutoLane>
+        <Cycle>52</Cycle>
+        <CycleOffset>1</CycleOffset>
+        <FirstCycle>51</FirstCycle>
+        <LastCycle>57</LastCycle>
+        <PhasingRate>0</PhasingRate>
+        <PrephasingRate>0</PrephasingRate>
+        <Read>2</Read>
+      </Phasing>
+      <PureBases>0</PureBases>
+      <SmtFilter>failed-chastity</SmtFilter>
+      <SmtRelation>le</SmtRelation>
+      <SmtThreshold>1.0</SmtThreshold>
+    </BaseCallParameters>
+    <Cycles First="1" Last="57" Number="57"/>
+    <RunParameters>
+      <AutoCycleFlag>0</AutoCycleFlag>
+      <Barcode>
+        <Cycle Use="true">51</Cycle>
+        <Cycle Use="true">52</Cycle>
+        <Cycle Use="true">53</Cycle>
+        <Cycle Use="true">54</Cycle>
+        <Cycle Use="true">55</Cycle>
+        <Cycle Use="true">56</Cycle>
+        <Cycle Use="true">57</Cycle>
+      </Barcode>
+      <BasecallFlag>0</BasecallFlag>
+      <Deblocked>0</Deblocked>
+      <DebugFlag>0</DebugFlag>
+      <FirstRunOnlyFlag>0</FirstRunOnlyFlag>
+      <ImagingReads Index="1">
+        <FirstCycle>1</FirstCycle>
+        <LastCycle>50</LastCycle>
+      </ImagingReads>
+      <ImagingReads Index="2">
+        <FirstCycle>51</FirstCycle>
+        <LastCycle>57</LastCycle>
+        <RunFolder>110815_SN787_0101_AD07K6ACXX</RunFolder>
+      </ImagingReads>
+      <Instrument>HWI-ST0787</Instrument>
+      <IterativeMatrixFlag>0</IterativeMatrixFlag>
+      <MakeFlag>0</MakeFlag>
+      <MaxCycle>0</MaxCycle>
+      <MinCycle>0</MinCycle>
+      <QTableVersion>New6</QTableVersion>
+      <RunFlowcellId>D07K6ACXX</RunFlowcellId>
+      <RunFolder>110815_SN787_0101_AD07K6ACXX</RunFolder>
+      <RunFolderDate>110815</RunFolderDate>
+      <RunFolderId>0101</RunFolderId>
+      <Reads Index="1">
+        <FirstCycle>1</FirstCycle>
+        <LastCycle>50</LastCycle>
+      </Reads>
+    </RunParameters>
+    <Software Name="RTA" Version="1.12.4.2"/>
+    <TileSelection>
+      <Lane Index="1">
+        <Sample>s</Sample>
+        <Tile>1102</Tile>
+        <Tile>1101</Tile>
+        <Tile>1103</Tile>
+        <Tile>1106</Tile>
+        <Tile>1104</Tile>
+        <Tile>1105</Tile>
+        <Tile>1108</Tile>
+        <Tile>1107</Tile>
+        <Tile>1202</Tile>
+        <Tile>1201</Tile>
+        <Tile>1206</Tile>
+        <Tile>1204</Tile>
+        <Tile>1203</Tile>
+        <Tile>1205</Tile>
+        <Tile>1302</Tile>
+        <Tile>1208</Tile>
+        <Tile>1207</Tile>
+        <Tile>1301</Tile>
+        <Tile>1306</Tile>
+        <Tile>1304</Tile>
+        <Tile>1305</Tile>
+        <Tile>2102</Tile>
+        <Tile>1303</Tile>
+        <Tile>1308</Tile>
+        <Tile>2101</Tile>
+        <Tile>1307</Tile>
+        <Tile>2106</Tile>
+        <Tile>2104</Tile>
+        <Tile>2105</Tile>
+        <Tile>2103</Tile>
+        <Tile>2202</Tile>
+        <Tile>2108</Tile>
+        <Tile>2201</Tile>
+        <Tile>2206</Tile>
+        <Tile>2107</Tile>
+        <Tile>2205</Tile>
+        <Tile>2204</Tile>
+        <Tile>2203</Tile>
+        <Tile>2302</Tile>
+        <Tile>2301</Tile>
+        <Tile>2208</Tile>
+        <Tile>2306</Tile>
+        <Tile>2207</Tile>
+        <Tile>2305</Tile>
+        <Tile>2303</Tile>
+        <Tile>2304</Tile>
+        <Tile>2308</Tile>
+        <Tile>2307</Tile>
+      </Lane>
+      <Lane Index="2">
+        <Sample>s</Sample>
+        <Tile>1101</Tile>
+        <Tile>1102</Tile>
+        <Tile>1105</Tile>
+        <Tile>1106</Tile>
+        <Tile>1104</Tile>
+        <Tile>1103</Tile>
+        <Tile>1201</Tile>
+        <Tile>1202</Tile>
+        <Tile>1108</Tile>
+        <Tile>1206</Tile>
+        <Tile>1107</Tile>
+        <Tile>1205</Tile>
+        <Tile>1302</Tile>
+        <Tile>1204</Tile>
+        <Tile>1301</Tile>
+        <Tile>1203</Tile>
+        <Tile>1208</Tile>
+        <Tile>1306</Tile>
+        <Tile>1305</Tile>
+        <Tile>1207</Tile>
+        <Tile>1304</Tile>
+        <Tile>2101</Tile>
+        <Tile>2102</Tile>
+        <Tile>1308</Tile>
+        <Tile>2105</Tile>
+        <Tile>1303</Tile>
+        <Tile>2201</Tile>
+        <Tile>2106</Tile>
+        <Tile>2104</Tile>
+        <Tile>1307</Tile>
+        <Tile>2205</Tile>
+        <Tile>2202</Tile>
+        <Tile>2108</Tile>
+        <Tile>2206</Tile>
+        <Tile>2103</Tile>
+        <Tile>2301</Tile>
+        <Tile>2204</Tile>
+        <Tile>2208</Tile>
+        <Tile>2107</Tile>
+        <Tile>2302</Tile>
+        <Tile>2305</Tile>
+        <Tile>2304</Tile>
+        <Tile>2203</Tile>
+        <Tile>2306</Tile>
+        <Tile>2308</Tile>
+        <Tile>2207</Tile>
+        <Tile>2303</Tile>
+        <Tile>2307</Tile>
+      </Lane>
+      <Lane Index="3">
+        <Sample>s</Sample>
+        <Tile>1101</Tile>
+        <Tile>1102</Tile>
+        <Tile>1105</Tile>
+        <Tile>1104</Tile>
+        <Tile>1108</Tile>
+        <Tile>1106</Tile>
+        <Tile>1201</Tile>
+        <Tile>1103</Tile>
+        <Tile>1204</Tile>
+        <Tile>1202</Tile>
+        <Tile>1205</Tile>
+        <Tile>1107</Tile>
+        <Tile>1208</Tile>
+        <Tile>1206</Tile>
+        <Tile>1301</Tile>
+        <Tile>1304</Tile>
+        <Tile>1203</Tile>
+        <Tile>1302</Tile>
+        <Tile>1308</Tile>
+        <Tile>1305</Tile>
+        <Tile>1207</Tile>
+        <Tile>2101</Tile>
+        <Tile>2104</Tile>
+        <Tile>1306</Tile>
+        <Tile>1303</Tile>
+        <Tile>2102</Tile>
+        <Tile>2105</Tile>
+        <Tile>2108</Tile>
+        <Tile>1307</Tile>
+        <Tile>2106</Tile>
+        <Tile>2204</Tile>
+        <Tile>2201</Tile>
+        <Tile>2103</Tile>
+        <Tile>2208</Tile>
+        <Tile>2202</Tile>
+        <Tile>2107</Tile>
+        <Tile>2205</Tile>
+        <Tile>2301</Tile>
+        <Tile>2304</Tile>
+        <Tile>2203</Tile>
+        <Tile>2206</Tile>
+        <Tile>2207</Tile>
+        <Tile>2305</Tile>
+        <Tile>2308</Tile>
+        <Tile>2302</Tile>
+        <Tile>2303</Tile>
+        <Tile>2307</Tile>
+        <Tile>2306</Tile>
+      </Lane>
+      <Lane Index="4">
+        <Sample>s</Sample>
+        <Tile>1101</Tile>
+        <Tile>1104</Tile>
+        <Tile>1103</Tile>
+        <Tile>1102</Tile>
+        <Tile>1108</Tile>
+        <Tile>1105</Tile>
+        <Tile>1107</Tile>
+        <Tile>1106</Tile>
+        <Tile>1204</Tile>
+        <Tile>1201</Tile>
+        <Tile>1203</Tile>
+        <Tile>1202</Tile>
+        <Tile>1208</Tile>
+        <Tile>1205</Tile>
+        <Tile>1207</Tile>
+        <Tile>1206</Tile>
+        <Tile>1304</Tile>
+        <Tile>1301</Tile>
+        <Tile>1302</Tile>
+        <Tile>1308</Tile>
+        <Tile>1303</Tile>
+        <Tile>1305</Tile>
+        <Tile>1306</Tile>
+        <Tile>1307</Tile>
+        <Tile>2104</Tile>
+        <Tile>2101</Tile>
+        <Tile>2108</Tile>
+        <Tile>2102</Tile>
+        <Tile>2103</Tile>
+        <Tile>2105</Tile>
+        <Tile>2204</Tile>
+        <Tile>2106</Tile>
+        <Tile>2107</Tile>
+        <Tile>2201</Tile>
+        <Tile>2208</Tile>
+        <Tile>2202</Tile>
+        <Tile>2203</Tile>
+        <Tile>2304</Tile>
+        <Tile>2205</Tile>
+        <Tile>2206</Tile>
+        <Tile>2207</Tile>
+        <Tile>2308</Tile>
+        <Tile>2301</Tile>
+        <Tile>2302</Tile>
+        <Tile>2303</Tile>
+        <Tile>2305</Tile>
+        <Tile>2307</Tile>
+        <Tile>2306</Tile>
+      </Lane>
+      <Lane Index="5">
+        <Sample>s</Sample>
+        <Tile>1104</Tile>
+        <Tile>1108</Tile>
+        <Tile>1101</Tile>
+        <Tile>1204</Tile>
+        <Tile>1102</Tile>
+        <Tile>1103</Tile>
+        <Tile>1106</Tile>
+        <Tile>1105</Tile>
+        <Tile>1107</Tile>
+        <Tile>1208</Tile>
+        <Tile>1201</Tile>
+        <Tile>1202</Tile>
+        <Tile>1203</Tile>
+        <Tile>1304</Tile>
+        <Tile>1205</Tile>
+        <Tile>1206</Tile>
+        <Tile>1301</Tile>
+        <Tile>1308</Tile>
+        <Tile>1207</Tile>
+        <Tile>1302</Tile>
+        <Tile>2104</Tile>
+        <Tile>1303</Tile>
+        <Tile>1305</Tile>
+        <Tile>1306</Tile>
+        <Tile>2101</Tile>
+        <Tile>2102</Tile>
+        <Tile>1307</Tile>
+        <Tile>2108</Tile>
+        <Tile>2204</Tile>
+        <Tile>2103</Tile>
+        <Tile>2105</Tile>
+        <Tile>2107</Tile>
+        <Tile>2106</Tile>
+        <Tile>2201</Tile>
+        <Tile>2208</Tile>
+        <Tile>2203</Tile>
+        <Tile>2202</Tile>
+        <Tile>2304</Tile>
+        <Tile>2206</Tile>
+        <Tile>2205</Tile>
+        <Tile>2207</Tile>
+        <Tile>2302</Tile>
+        <Tile>2301</Tile>
+        <Tile>2303</Tile>
+        <Tile>2308</Tile>
+        <Tile>2305</Tile>
+        <Tile>2307</Tile>
+        <Tile>2306</Tile>
+      </Lane>
+      <Lane Index="6">
+        <Sample>s</Sample>
+        <Tile>1104</Tile>
+        <Tile>1101</Tile>
+        <Tile>1103</Tile>
+        <Tile>1102</Tile>
+        <Tile>1108</Tile>
+        <Tile>1107</Tile>
+        <Tile>1105</Tile>
+        <Tile>1106</Tile>
+        <Tile>1204</Tile>
+        <Tile>1203</Tile>
+        <Tile>1201</Tile>
+        <Tile>1202</Tile>
+        <Tile>1208</Tile>
+        <Tile>1207</Tile>
+        <Tile>1205</Tile>
+        <Tile>1206</Tile>
+        <Tile>1304</Tile>
+        <Tile>1303</Tile>
+        <Tile>1301</Tile>
+        <Tile>1302</Tile>
+        <Tile>1308</Tile>
+        <Tile>1307</Tile>
+        <Tile>1305</Tile>
+        <Tile>2104</Tile>
+        <Tile>1306</Tile>
+        <Tile>2103</Tile>
+        <Tile>2101</Tile>
+        <Tile>2102</Tile>
+        <Tile>2108</Tile>
+        <Tile>2107</Tile>
+        <Tile>2105</Tile>
+        <Tile>2106</Tile>
+        <Tile>2204</Tile>
+        <Tile>2203</Tile>
+        <Tile>2202</Tile>
+        <Tile>2201</Tile>
+        <Tile>2208</Tile>
+        <Tile>2207</Tile>
+        <Tile>2206</Tile>
+        <Tile>2205</Tile>
+        <Tile>2304</Tile>
+        <Tile>2303</Tile>
+        <Tile>2302</Tile>
+        <Tile>2301</Tile>
+        <Tile>2307</Tile>
+        <Tile>2308</Tile>
+        <Tile>2306</Tile>
+        <Tile>2305</Tile>
+      </Lane>
+      <Lane Index="7">
+        <Sample>s</Sample>
+        <Tile>1103</Tile>
+        <Tile>1107</Tile>
+        <Tile>1104</Tile>
+        <Tile>1108</Tile>
+        <Tile>1203</Tile>
+        <Tile>1101</Tile>
+        <Tile>1102</Tile>
+        <Tile>1204</Tile>
+        <Tile>1105</Tile>
+        <Tile>1207</Tile>
+        <Tile>1106</Tile>
+        <Tile>1208</Tile>
+        <Tile>1201</Tile>
+        <Tile>1202</Tile>
+        <Tile>1303</Tile>
+        <Tile>1205</Tile>
+        <Tile>1206</Tile>
+        <Tile>1307</Tile>
+        <Tile>1304</Tile>
+        <Tile>1301</Tile>
+        <Tile>1302</Tile>
+        <Tile>1305</Tile>
+        <Tile>1308</Tile>
+        <Tile>2103</Tile>
+        <Tile>1306</Tile>
+        <Tile>2101</Tile>
+        <Tile>2107</Tile>
+        <Tile>2104</Tile>
+        <Tile>2105</Tile>
+        <Tile>2102</Tile>
+        <Tile>2108</Tile>
+        <Tile>2203</Tile>
+        <Tile>2201</Tile>
+        <Tile>2106</Tile>
+        <Tile>2205</Tile>
+        <Tile>2207</Tile>
+        <Tile>2202</Tile>
+        <Tile>2204</Tile>
+        <Tile>2301</Tile>
+        <Tile>2303</Tile>
+        <Tile>2206</Tile>
+        <Tile>2208</Tile>
+        <Tile>2305</Tile>
+        <Tile>2307</Tile>
+        <Tile>2302</Tile>
+        <Tile>2304</Tile>
+        <Tile>2306</Tile>
+        <Tile>2308</Tile>
+      </Lane>
+      <Lane Index="8">
+        <Sample>s</Sample>
+        <Tile>1101</Tile>
+        <Tile>1103</Tile>
+        <Tile>1102</Tile>
+        <Tile>1105</Tile>
+        <Tile>1107</Tile>
+        <Tile>1104</Tile>
+        <Tile>1106</Tile>
+        <Tile>1201</Tile>
+        <Tile>1108</Tile>
+        <Tile>1203</Tile>
+        <Tile>1202</Tile>
+        <Tile>1205</Tile>
+        <Tile>1207</Tile>
+        <Tile>1204</Tile>
+        <Tile>1206</Tile>
+        <Tile>1301</Tile>
+        <Tile>1208</Tile>
+        <Tile>1303</Tile>
+        <Tile>1302</Tile>
+        <Tile>1305</Tile>
+        <Tile>1307</Tile>
+        <Tile>1304</Tile>
+        <Tile>1306</Tile>
+        <Tile>2101</Tile>
+        <Tile>1308</Tile>
+        <Tile>2103</Tile>
+        <Tile>2105</Tile>
+        <Tile>2102</Tile>
+        <Tile>2107</Tile>
+        <Tile>2106</Tile>
+        <Tile>2104</Tile>
+        <Tile>2201</Tile>
+        <Tile>2205</Tile>
+        <Tile>2202</Tile>
+        <Tile>2203</Tile>
+        <Tile>2108</Tile>
+        <Tile>2206</Tile>
+        <Tile>2301</Tile>
+        <Tile>2207</Tile>
+        <Tile>2204</Tile>
+        <Tile>2305</Tile>
+        <Tile>2302</Tile>
+        <Tile>2303</Tile>
+        <Tile>2208</Tile>
+        <Tile>2306</Tile>
+        <Tile>2307</Tile>
+        <Tile>2304</Tile>
+        <Tile>2308</Tile>
+      </Lane>
+    </TileSelection>
+  </Run>
+</BaseCallAnalysis>
diff --git a/htsworkflow/pipelines/test/testdata/1_12/demultiplexed_summary_1.12.4.2.xml b/htsworkflow/pipelines/test/testdata/1_12/demultiplexed_summary_1.12.4.2.xml
new file mode 100644 (file)
index 0000000..ebc9f4a
--- /dev/null
@@ -0,0 +1,3669 @@
+<?xml version="1.0"?>
+<BustardSummary>
+  <ChipResultsSummary>
+    <clusterCountPF>454185731</clusterCountPF>
+    <clusterCountRaw>781064977</clusterCountRaw>
+    <yield>25888586667</yield>
+  </ChipResultsSummary>
+  <ChipSummary>
+    <ChipID>unknown</ChipID>
+    <Machine>HWI-ST0787</Machine>
+    <RunFolder>110815_SN787_0101_AD07K6ACXX</RunFolder>
+  </ChipSummary>
+  <Date>2011-08-18 20:18:19</Date>
+  <ExpandedLaneSummary>
+    <Read>
+      <Lane>
+        <clusterCountRaw>
+          <mean>3707807.14</mean>
+          <stdev>573671.11</stdev>
+          <sumsq>393825007132852.00</sumsq>
+        </clusterCountRaw>
+        <laneNumber>1</laneNumber>
+        <percentClustersPF>
+          <mean>47.64</mean>
+          <stdev>19.64</stdev>
+          <sumsq>73957.00</sumsq>
+        </percentClustersPF>
+        <phasingApplied>0.3810</phasingApplied>
+        <prephasingApplied>0.0844</prephasingApplied>
+        <signalAverage1to3>
+          <mean>677.00</mean>
+          <stdev>148.48</stdev>
+          <sumsq>13428576.43</sumsq>
+        </signalAverage1to3>
+        <signalAverage2to4>
+          <mean>908.15</mean>
+          <stdev>81.51</stdev>
+          <sumsq>23271897.61</sumsq>
+        </signalAverage2to4>
+        <signalLoss10to20>
+          <mean>-0.30</mean>
+          <stdev>0.38</stdev>
+          <sumsq>6.33</sumsq>
+        </signalLoss10to20>
+        <signalLoss2to10>
+          <mean>-34.61</mean>
+          <stdev>26.97</stdev>
+          <sumsq>53175.44</sumsq>
+        </signalLoss2to10>
+      </Lane>
+      <Lane>
+        <clusterCountRaw>
+          <mean>3329777.81</mean>
+          <stdev>1102200.81</stdev>
+          <sumsq>318644092316267.00</sumsq>
+        </clusterCountRaw>
+        <laneNumber>2</laneNumber>
+        <percentClustersPF>
+          <mean>24.71</mean>
+          <stdev>17.39</stdev>
+          <sumsq>23436.66</sumsq>
+        </percentClustersPF>
+        <phasingApplied>0.3694</phasingApplied>
+        <prephasingApplied>0.2507</prephasingApplied>
+        <signalAverage1to3>
+          <mean>820.85</mean>
+          <stdev>175.96</stdev>
+          <sumsq>18292849.43</sumsq>
+        </signalAverage1to3>
+        <signalAverage2to4>
+          <mean>864.16</mean>
+          <stdev>95.34</stdev>
+          <sumsq>19643349.08</sumsq>
+        </signalAverage2to4>
+        <signalLoss10to20>
+          <mean>-5.69</mean>
+          <stdev>12.59</stdev>
+          <sumsq>4807.74</sumsq>
+        </signalLoss10to20>
+        <signalLoss2to10>
+          <mean>-34.31</mean>
+          <stdev>22.59</stdev>
+          <sumsq>43354.50</sumsq>
+        </signalLoss2to10>
+      </Lane>
+      <Lane>
+        <clusterCountRaw>
+          <mean>6268934.50</mean>
+          <stdev>241767.87</stdev>
+          <sumsq>314805480030044.00</sumsq>
+        </clusterCountRaw>
+        <laneNumber>3</laneNumber>
+        <percentClustersPF>
+          <mean>36.04</mean>
+          <stdev>12.81</stdev>
+          <sumsq>11541.60</sumsq>
+        </percentClustersPF>
+        <phasingApplied>0.2469</phasingApplied>
+        <prephasingApplied>0.2002</prephasingApplied>
+        <signalAverage1to3>
+          <mean>1094.84</mean>
+          <stdev>135.96</stdev>
+          <sumsq>9718779.89</sumsq>
+        </signalAverage1to3>
+        <signalAverage2to4>
+          <mean>1114.24</mean>
+          <stdev>57.49</stdev>
+          <sumsq>9955389.55</sumsq>
+        </signalAverage2to4>
+        <signalLoss10to20>
+          <mean>-4.20</mean>
+          <stdev>13.18</stdev>
+          <sumsq>1357.57</sumsq>
+        </signalLoss10to20>
+        <signalLoss2to10>
+          <mean>-53.53</mean>
+          <stdev>38.21</stdev>
+          <sumsq>33143.61</sumsq>
+        </signalLoss2to10>
+      </Lane>
+      <Lane>
+        <clusterCountRaw>
+          <mean>6055508.12</mean>
+          <stdev>166741.39</stdev>
+          <sumsq>293548048051419.00</sumsq>
+        </clusterCountRaw>
+        <laneNumber>4</laneNumber>
+        <percentClustersPF>
+          <mean>32.69</mean>
+          <stdev>7.60</stdev>
+          <sumsq>8952.16</sumsq>
+        </percentClustersPF>
+        <phasingApplied>0.2104</phasingApplied>
+        <prephasingApplied>0.1803</prephasingApplied>
+        <signalAverage1to3>
+          <mean>1106.96</mean>
+          <stdev>62.20</stdev>
+          <sumsq>9829917.93</sumsq>
+        </signalAverage1to3>
+        <signalAverage2to4>
+          <mean>1036.31</mean>
+          <stdev>128.16</stdev>
+          <sumsq>8706439.16</sumsq>
+        </signalAverage2to4>
+        <signalLoss10to20>
+          <mean>-9.55</mean>
+          <stdev>18.68</stdev>
+          <sumsq>3171.25</sumsq>
+        </signalLoss10to20>
+        <signalLoss2to10>
+          <mean>-44.30</mean>
+          <stdev>34.27</stdev>
+          <sumsq>23924.49</sumsq>
+        </signalLoss2to10>
+      </Lane>
+      <Lane>
+        <clusterCountRaw>
+          <mean>5643648.67</mean>
+          <stdev>137235.86</stdev>
+          <sumsq>95589978179428.00</sumsq>
+        </clusterCountRaw>
+        <laneNumber>5</laneNumber>
+        <percentClustersPF>
+          <mean>14.96</mean>
+          <stdev>10.60</stdev>
+          <sumsq>895.87</sumsq>
+        </percentClustersPF>
+        <phasingApplied>0.0000</phasingApplied>
+        <prephasingApplied>0.0000</prephasingApplied>
+        <signalAverage1to3>
+          <mean>-593.62</mean>
+          <stdev>74.55</stdev>
+          <sumsq>1068254.69</sumsq>
+        </signalAverage1to3>
+        <signalAverage2to4>
+          <mean>-623.07</mean>
+          <stdev>71.93</stdev>
+          <sumsq>1174981.61</sumsq>
+        </signalAverage2to4>
+        <signalLoss10to20>
+          <mean>100.00</mean>
+          <stdev>0.00</stdev>
+          <sumsq>30000.00</sumsq>
+        </signalLoss10to20>
+        <signalLoss2to10>
+          <mean>100.00</mean>
+          <stdev>0.00</stdev>
+          <sumsq>30000.00</sumsq>
+        </signalLoss2to10>
+      </Lane>
+      <Lane>
+        <clusterCountRaw>
+          <mean>5707954.48</mean>
+          <stdev>553352.88</stdev>
+          <sumsq>953415170485172.00</sumsq>
+        </clusterCountRaw>
+        <laneNumber>6</laneNumber>
+        <percentClustersPF>
+          <mean>42.22</mean>
+          <stdev>22.39</stdev>
+          <sumsq>65737.40</sumsq>
+        </percentClustersPF>
+        <phasingApplied>0.2670</phasingApplied>
+        <prephasingApplied>0.2116</prephasingApplied>
+        <signalAverage1to3>
+          <mean>976.36</mean>
+          <stdev>216.47</stdev>
+          <sumsq>28956965.77</sumsq>
+        </signalAverage1to3>
+        <signalAverage2to4>
+          <mean>1054.88</mean>
+          <stdev>90.27</stdev>
+          <sumsq>32498684.57</sumsq>
+        </signalAverage2to4>
+        <signalLoss10to20>
+          <mean>0.20</mean>
+          <stdev>0.11</stdev>
+          <sumsq>1.47</sumsq>
+        </signalLoss10to20>
+        <signalLoss2to10>
+          <mean>-79.61</mean>
+          <stdev>16.62</stdev>
+          <sumsq>191509.02</sumsq>
+        </signalLoss2to10>
+      </Lane>
+      <Lane>
+        <clusterCountRaw>
+          <mean>1867305.95</mean>
+          <stdev>444617.44</stdev>
+          <sumsq>158236511701682.00</sumsq>
+        </clusterCountRaw>
+        <laneNumber>7</laneNumber>
+        <percentClustersPF>
+          <mean>94.84</mean>
+          <stdev>11.12</stdev>
+          <sumsq>391931.07</sumsq>
+        </percentClustersPF>
+        <phasingApplied>0.1329</phasingApplied>
+        <prephasingApplied>0.2410</prephasingApplied>
+        <signalAverage1to3>
+          <mean>1399.64</mean>
+          <stdev>129.00</stdev>
+          <sumsq>84935084.50</sumsq>
+        </signalAverage1to3>
+        <signalAverage2to4>
+          <mean>1377.83</mean>
+          <stdev>128.32</stdev>
+          <sumsq>82324018.13</sumsq>
+        </signalAverage2to4>
+        <signalLoss10to20>
+          <mean>0.28</mean>
+          <stdev>0.09</stdev>
+          <sumsq>3.65</sumsq>
+        </signalLoss10to20>
+        <signalLoss2to10>
+          <mean>-4.22</mean>
+          <stdev>14.27</stdev>
+          <sumsq>9317.43</sumsq>
+        </signalLoss2to10>
+      </Lane>
+      <Lane>
+        <clusterCountRaw>
+          <mean>4777517.31</mean>
+          <stdev>599178.35</stdev>
+          <sumsq>1112457930812391.00</sumsq>
+        </clusterCountRaw>
+        <laneNumber>8</laneNumber>
+        <percentClustersPF>
+          <mean>86.54</mean>
+          <stdev>7.43</stdev>
+          <sumsq>362059.12</sumsq>
+        </percentClustersPF>
+        <phasingApplied>0.2192</phasingApplied>
+        <prephasingApplied>0.2346</prephasingApplied>
+        <signalAverage1to3>
+          <mean>1256.98</mean>
+          <stdev>106.05</stdev>
+          <sumsq>76368309.15</sumsq>
+        </signalAverage1to3>
+        <signalAverage2to4>
+          <mean>1233.08</mean>
+          <stdev>110.91</stdev>
+          <sumsq>73561027.92</sumsq>
+        </signalAverage2to4>
+        <signalLoss10to20>
+          <mean>0.63</mean>
+          <stdev>0.08</stdev>
+          <sumsq>19.47</sumsq>
+        </signalLoss10to20>
+        <signalLoss2to10>
+          <mean>-3.98</mean>
+          <stdev>11.04</stdev>
+          <sumsq>6489.36</sumsq>
+        </signalLoss2to10>
+      </Lane>
+      <readNumber>1</readNumber>
+    </Read>
+    
+  </ExpandedLaneSummary>
+  <LaneResultsSummary>
+    <Read>
+      <Lane>
+        <clusterCountPF>
+          <mean>1783290</mean>
+          <stdev>789504</stdev>
+          <sumsq>105873063750160</sumsq>
+        </clusterCountPF>
+        <clusterCountRaw>
+          <mean>3707807</mean>
+          <stdev>573671</stdev>
+          <sumsq>393825007132852</sumsq>
+        </clusterCountRaw>
+        <laneNumber>1</laneNumber>
+        <laneYield>2496606</laneYield>
+        <oneSig>
+          <mean>164</mean>
+          <stdev>410</stdev>
+          <sumsq>5304965</sumsq>
+        </oneSig>
+        <percentClustersPF>
+          <mean>47.64</mean>
+          <stdev>19.64</stdev>
+          <sumsq>73957.00</sumsq>
+        </percentClustersPF>
+        <signal20AsPctOf1>
+          <mean>9.00</mean>
+          <stdev>22.48</stdev>
+          <sumsq>15909.69</sumsq>
+        </signal20AsPctOf1>
+      </Lane>
+      <Lane>
+        <clusterCountPF>
+          <mean>875778</mean>
+          <stdev>826947</stdev>
+          <sumsq>37037748584192</sumsq>
+        </clusterCountPF>
+        <clusterCountRaw>
+          <mean>3329777</mean>
+          <stdev>1102200</stdev>
+          <sumsq>318644092316267</sumsq>
+        </clusterCountRaw>
+        <laneNumber>2</laneNumber>
+        <laneYield>1138512</laneYield>
+        <oneSig>
+          <mean>702</mean>
+          <stdev>480</stdev>
+          <sumsq>18627652</sumsq>
+        </oneSig>
+        <percentClustersPF>
+          <mean>24.71</mean>
+          <stdev>17.39</stdev>
+          <sumsq>23436.66</sumsq>
+        </percentClustersPF>
+        <signal20AsPctOf1>
+          <mean>56.49</mean>
+          <stdev>38.83</stdev>
+          <sumsq>120674.01</sumsq>
+        </signal20AsPctOf1>
+      </Lane>
+      <Lane>
+        <clusterCountPF>
+          <mean>2259006</mean>
+          <stdev>798869</stdev>
+          <sumsq>45292218394019</sumsq>
+        </clusterCountPF>
+        <clusterCountRaw>
+          <mean>6268934</mean>
+          <stdev>241767</stdev>
+          <sumsq>314805480030044</sumsq>
+        </clusterCountRaw>
+        <laneNumber>3</laneNumber>
+        <laneYield>903602</laneYield>
+        <oneSig>
+          <mean>1031</mean>
+          <stdev>419</stdev>
+          <sumsq>9747483</sumsq>
+        </oneSig>
+        <percentClustersPF>
+          <mean>36.04</mean>
+          <stdev>12.81</stdev>
+          <sumsq>11541.60</sumsq>
+        </percentClustersPF>
+        <signal20AsPctOf1>
+          <mean>75.63</mean>
+          <stdev>30.73</stdev>
+          <sumsq>52366.46</sumsq>
+        </signal20AsPctOf1>
+      </Lane>
+      <Lane>
+        <clusterCountPF>
+          <mean>1978985</mean>
+          <stdev>462424</stdev>
+          <sumsq>32827917903219</sumsq>
+        </clusterCountPF>
+        <clusterCountRaw>
+          <mean>6055508</mean>
+          <stdev>166741</stdev>
+          <sumsq>293548048051419</sumsq>
+        </clusterCountRaw>
+        <laneNumber>4</laneNumber>
+        <laneYield>791594</laneYield>
+        <oneSig>
+          <mean>1161</mean>
+          <stdev>61</stdev>
+          <sumsq>10827946</sumsq>
+        </oneSig>
+        <percentClustersPF>
+          <mean>32.69</mean>
+          <stdev>7.60</stdev>
+          <sumsq>8952.16</sumsq>
+        </percentClustersPF>
+        <signal20AsPctOf1>
+          <mean>63.64</mean>
+          <stdev>39.29</stdev>
+          <sumsq>43206.11</sumsq>
+        </signal20AsPctOf1>
+      </Lane>
+      <Lane>
+        <clusterCountPF>
+          <mean>834976</mean>
+          <stdev>570615</stdev>
+          <sumsq>2742761639691</sumsq>
+        </clusterCountPF>
+        <clusterCountRaw>
+          <mean>5643648</mean>
+          <stdev>137235</stdev>
+          <sumsq>95589978179428</sumsq>
+        </clusterCountRaw>
+        <laneNumber>5</laneNumber>
+        <laneYield>125246</laneYield>
+        <oneSig>
+          <mean>-596</mean>
+          <stdev>79</stdev>
+          <sumsq>1080823</sumsq>
+        </oneSig>
+        <percentClustersPF>
+          <mean>14.96</mean>
+          <stdev>10.60</stdev>
+          <sumsq>895.87</sumsq>
+        </percentClustersPF>
+        <signal20AsPctOf1>
+          <mean>147.21</mean>
+          <stdev>7.83</stdev>
+          <sumsq>65137.15</sumsq>
+        </signal20AsPctOf1>
+      </Lane>
+      <Lane>
+        <clusterCountPF>
+          <mean>2467696</mean>
+          <stdev>1423659</stdev>
+          <sumsq>233346910460595</sumsq>
+        </clusterCountPF>
+        <clusterCountRaw>
+          <mean>5707954</mean>
+          <stdev>553352</stdev>
+          <sumsq>953415170485172</sumsq>
+        </clusterCountRaw>
+        <laneNumber>6</laneNumber>
+        <laneYield>3578160</laneYield>
+        <oneSig>
+          <mean>820</mean>
+          <stdev>521</stdev>
+          <sumsq>27135464</sumsq>
+        </oneSig>
+        <percentClustersPF>
+          <mean>42.22</mean>
+          <stdev>22.39</stdev>
+          <sumsq>65737.40</sumsq>
+        </percentClustersPF>
+        <signal20AsPctOf1>
+          <mean>64.69</mean>
+          <stdev>40.68</stdev>
+          <sumsq>167697.34</sumsq>
+        </signal20AsPctOf1>
+      </Lane>
+      <Lane>
+        <clusterCountPF>
+          <mean>1769448</mean>
+          <stdev>464939</stdev>
+          <sumsq>143709845032850</sumsq>
+        </clusterCountPF>
+        <clusterCountRaw>
+          <mean>1867305</mean>
+          <stdev>444617</stdev>
+          <sumsq>158236511701682</sumsq>
+        </clusterCountRaw>
+        <laneNumber>7</laneNumber>
+        <laneYield>3804314</laneYield>
+        <oneSig>
+          <mean>1442</mean>
+          <stdev>84</stdev>
+          <sumsq>89752104</sumsq>
+        </oneSig>
+        <percentClustersPF>
+          <mean>94.84</mean>
+          <stdev>11.12</stdev>
+          <sumsq>391931.07</sumsq>
+        </percentClustersPF>
+        <signal20AsPctOf1>
+          <mean>91.96</mean>
+          <stdev>1.75</stdev>
+          <sumsq>363782.22</sumsq>
+        </signal20AsPctOf1>
+      </Lane>
+      <Lane>
+        <clusterCountPF>
+          <mean>4113020</mean>
+          <stdev>444275</stdev>
+          <sumsq>821290075103817</sumsq>
+        </clusterCountPF>
+        <clusterCountRaw>
+          <mean>4777517</mean>
+          <stdev>599178</stdev>
+          <sumsq>1112457930812391</sumsq>
+        </clusterCountRaw>
+        <laneNumber>8</laneNumber>
+        <laneYield>9871250</laneYield>
+        <oneSig>
+          <mean>1334</mean>
+          <stdev>72</stdev>
+          <sumsq>85708238</sumsq>
+        </oneSig>
+        <percentClustersPF>
+          <mean>86.54</mean>
+          <stdev>7.43</stdev>
+          <sumsq>362059.12</sumsq>
+        </percentClustersPF>
+        <signal20AsPctOf1>
+          <mean>88.24</mean>
+          <stdev>1.70</stdev>
+          <sumsq>373841.88</sumsq>
+        </signal20AsPctOf1>
+      </Lane>
+      <readNumber>1</readNumber>
+    </Read>
+    
+  </LaneResultsSummary>
+  <Software>CASAVA-1.8.1</Software>
+  <TileResultsByLane>
+    <Lane>
+      <Read>
+        <Tile>
+          <clusterCountPF>2195814</clusterCountPF>
+          <clusterCountRaw>3782916</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>58.05</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1101</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>2278273</clusterCountPF>
+          <clusterCountRaw>3732743</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>61.03</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1102</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>4020211</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1103</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>3895725</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1104</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>4134124</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1105</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>4304874</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1106</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>4406771</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1107</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>4057296</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1108</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>2235184</clusterCountPF>
+          <clusterCountRaw>3576569</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>62.50</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1201</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>2303817</clusterCountPF>
+          <clusterCountRaw>3670759</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>62.76</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1202</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>2228868</clusterCountPF>
+          <clusterCountRaw>3917599</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>56.89</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1203</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>4063543</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1204</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>4018922</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1205</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>2207175</clusterCountPF>
+          <clusterCountRaw>4204009</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>52.50</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1206</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>4440729</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1207</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>768164</clusterCountPF>
+          <clusterCountRaw>3715012</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>20.68</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1208</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>2261727</clusterCountPF>
+          <clusterCountRaw>3621480</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>62.45</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1301</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>2347049</clusterCountPF>
+          <clusterCountRaw>3868987</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>60.66</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1302</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>4029778</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1303</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>4153522</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1304</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>4253486</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1305</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>598571</clusterCountPF>
+          <clusterCountRaw>1511883</clusterCountRaw>
+          <oneSig>1096.02</oneSig>
+          <percentClustersPF>39.59</percentClustersPF>
+          <signal20AsPctOf1>63.03</signal20AsPctOf1>
+          <tileNumber>1306</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>4540851</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1307</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>762937</clusterCountPF>
+          <clusterCountRaw>3797909</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>20.09</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1308</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>2212968</clusterCountPF>
+          <clusterCountRaw>3718396</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>59.51</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2101</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>2340883</clusterCountPF>
+          <clusterCountRaw>3785970</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>61.83</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2102</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>2181836</clusterCountPF>
+          <clusterCountRaw>3995288</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>54.61</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2103</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>4140850</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2104</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>344088</clusterCountPF>
+          <clusterCountRaw>3742840</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>9.19</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2105</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>4417907</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2106</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>633399</clusterCountPF>
+          <clusterCountRaw>3982483</clusterCountRaw>
+          <oneSig>1075.65</oneSig>
+          <percentClustersPF>15.90</percentClustersPF>
+          <signal20AsPctOf1>64.87</signal20AsPctOf1>
+          <tileNumber>2107</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>4249399</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2108</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>2273067</clusterCountPF>
+          <clusterCountRaw>3616092</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>62.86</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2201</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>2371559</clusterCountPF>
+          <clusterCountRaw>3725669</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>63.65</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2202</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>2333375</clusterCountPF>
+          <clusterCountRaw>3836500</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>60.82</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2203</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>2185419</clusterCountPF>
+          <clusterCountRaw>3910181</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>55.89</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2204</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>2311644</clusterCountPF>
+          <clusterCountRaw>4017955</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>57.53</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2205</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>4331923</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2206</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>2238184</clusterCountPF>
+          <clusterCountRaw>4417665</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>50.66</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2207</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>4514102</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2208</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>2087282</clusterCountPF>
+          <clusterCountRaw>3641497</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>57.32</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2301</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>2372969</clusterCountPF>
+          <clusterCountRaw>3752096</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>63.24</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2302</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>2356197</clusterCountPF>
+          <clusterCountRaw>3904880</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>60.34</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2303</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>334562</clusterCountPF>
+          <clusterCountRaw>2147785</clusterCountRaw>
+          <oneSig>1289.76</oneSig>
+          <percentClustersPF>15.58</percentClustersPF>
+          <signal20AsPctOf1>59.07</signal20AsPctOf1>
+          <tileNumber>2304</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>2020376</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2305</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>4367266</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2306</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>906827</clusterCountPF>
+          <clusterCountRaw>4298608</clusterCountRaw>
+          <oneSig>1132.79</oneSig>
+          <percentClustersPF>21.10</percentClustersPF>
+          <signal20AsPctOf1>65.11</signal20AsPctOf1>
+          <tileNumber>2307</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>260294</clusterCountPF>
+          <clusterCountRaw>3924829</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>6.63</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2308</tileNumber>
+        </Tile>
+        <readNumber>1</readNumber>
+      </Read>
+      
+      <laneNumber>1</laneNumber>
+    </Lane>
+    <Lane>
+      <Read>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>4448159</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1101</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>2773172</clusterCountPF>
+          <clusterCountRaw>4366122</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>63.52</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1102</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>4564670</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1103</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>4585876</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1104</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>4635377</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1105</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>669217</clusterCountPF>
+          <clusterCountRaw>4420397</clusterCountRaw>
+          <oneSig>930.85</oneSig>
+          <percentClustersPF>15.14</percentClustersPF>
+          <signal20AsPctOf1>76.28</signal20AsPctOf1>
+          <tileNumber>1106</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>4676917</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1107</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>4535868</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1108</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>4334415</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1201</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>640314</clusterCountPF>
+          <clusterCountRaw>2059919</clusterCountRaw>
+          <oneSig>1000.53</oneSig>
+          <percentClustersPF>31.08</percentClustersPF>
+          <signal20AsPctOf1>85.05</signal20AsPctOf1>
+          <tileNumber>1202</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>2607069</clusterCountPF>
+          <clusterCountRaw>4434379</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>58.79</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1203</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>775741</clusterCountPF>
+          <clusterCountRaw>3750712</clusterCountRaw>
+          <oneSig>996.69</oneSig>
+          <percentClustersPF>20.68</percentClustersPF>
+          <signal20AsPctOf1>74.98</signal20AsPctOf1>
+          <tileNumber>1204</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>440909</clusterCountPF>
+          <clusterCountRaw>4058935</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>10.86</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1205</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>214300</clusterCountPF>
+          <clusterCountRaw>1790590</clusterCountRaw>
+          <oneSig>927.63</oneSig>
+          <percentClustersPF>11.97</percentClustersPF>
+          <signal20AsPctOf1>74.32</signal20AsPctOf1>
+          <tileNumber>1206</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>4699049</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1207</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>4541983</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1208</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>504330</clusterCountPF>
+          <clusterCountRaw>1946513</clusterCountRaw>
+          <oneSig>1041.75</oneSig>
+          <percentClustersPF>25.91</percentClustersPF>
+          <signal20AsPctOf1>73.96</signal20AsPctOf1>
+          <tileNumber>1301</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>4553087</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1302</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>1143910</clusterCountPF>
+          <clusterCountRaw>3886939</clusterCountRaw>
+          <oneSig>1001.45</oneSig>
+          <percentClustersPF>29.43</percentClustersPF>
+          <signal20AsPctOf1>79.86</signal20AsPctOf1>
+          <tileNumber>1303</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>394814</clusterCountPF>
+          <clusterCountRaw>1620637</clusterCountRaw>
+          <oneSig>903.30</oneSig>
+          <percentClustersPF>24.36</percentClustersPF>
+          <signal20AsPctOf1>85.19</signal20AsPctOf1>
+          <tileNumber>1304</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>751155</clusterCountPF>
+          <clusterCountRaw>3901741</clusterCountRaw>
+          <oneSig>924.69</oneSig>
+          <percentClustersPF>19.25</percentClustersPF>
+          <signal20AsPctOf1>82.04</signal20AsPctOf1>
+          <tileNumber>1305</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>279109</clusterCountPF>
+          <clusterCountRaw>4312437</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>6.47</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1306</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>4877078</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1307</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>4716643</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1308</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>621210</clusterCountPF>
+          <clusterCountRaw>2055906</clusterCountRaw>
+          <oneSig>1083.69</oneSig>
+          <percentClustersPF>30.22</percentClustersPF>
+          <signal20AsPctOf1>80.10</signal20AsPctOf1>
+          <tileNumber>2101</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>4511240</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2102</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>967970</clusterCountPF>
+          <clusterCountRaw>4049067</clusterCountRaw>
+          <oneSig>1094.71</oneSig>
+          <percentClustersPF>23.91</percentClustersPF>
+          <signal20AsPctOf1>81.54</signal20AsPctOf1>
+          <tileNumber>2103</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>610322</clusterCountPF>
+          <clusterCountRaw>4256141</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>14.34</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2104</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>945727</clusterCountPF>
+          <clusterCountRaw>4036212</clusterCountRaw>
+          <oneSig>1045.43</oneSig>
+          <percentClustersPF>23.43</percentClustersPF>
+          <signal20AsPctOf1>81.22</signal20AsPctOf1>
+          <tileNumber>2105</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>4826884</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2106</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>4806977</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2107</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>4634388</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2108</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>522871</clusterCountPF>
+          <clusterCountRaw>3978361</clusterCountRaw>
+          <oneSig>991.67</oneSig>
+          <percentClustersPF>13.14</percentClustersPF>
+          <signal20AsPctOf1>97.22</signal20AsPctOf1>
+          <tileNumber>2201</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>699409</clusterCountPF>
+          <clusterCountRaw>4040193</clusterCountRaw>
+          <oneSig>1042.31</oneSig>
+          <percentClustersPF>17.31</percentClustersPF>
+          <signal20AsPctOf1>91.73</signal20AsPctOf1>
+          <tileNumber>2202</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>234576</clusterCountPF>
+          <clusterCountRaw>1982322</clusterCountRaw>
+          <oneSig>1097.76</oneSig>
+          <percentClustersPF>11.83</percentClustersPF>
+          <signal20AsPctOf1>91.23</signal20AsPctOf1>
+          <tileNumber>2203</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>312538</clusterCountPF>
+          <clusterCountRaw>1846815</clusterCountRaw>
+          <oneSig>1060.29</oneSig>
+          <percentClustersPF>16.92</percentClustersPF>
+          <signal20AsPctOf1>81.85</signal20AsPctOf1>
+          <tileNumber>2204</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>4877670</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2205</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>4352080</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2206</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>4565158</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2207</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>4595892</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2208</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>2688747</clusterCountPF>
+          <clusterCountRaw>4326152</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>62.15</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2301</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>2702172</clusterCountPF>
+          <clusterCountRaw>4401275</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>61.40</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2302</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>375919</clusterCountPF>
+          <clusterCountRaw>1897193</clusterCountRaw>
+          <oneSig>1064.46</oneSig>
+          <percentClustersPF>19.81</percentClustersPF>
+          <signal20AsPctOf1>73.90</signal20AsPctOf1>
+          <tileNumber>2303</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>170457</clusterCountPF>
+          <clusterCountRaw>1856395</clusterCountRaw>
+          <oneSig>970.76</oneSig>
+          <percentClustersPF>9.18</percentClustersPF>
+          <signal20AsPctOf1>86.28</signal20AsPctOf1>
+          <tileNumber>2304</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>464174</clusterCountPF>
+          <clusterCountRaw>3035669</clusterCountRaw>
+          <oneSig>1098.56</oneSig>
+          <percentClustersPF>15.29</percentClustersPF>
+          <signal20AsPctOf1>72.01</signal20AsPctOf1>
+          <tileNumber>2305</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>4768558</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2306</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>260108</clusterCountPF>
+          <clusterCountRaw>4263201</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>6.10</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2307</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>4508484</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2308</tileNumber>
+        </Tile>
+        <readNumber>1</readNumber>
+      </Read>
+      
+      <laneNumber>2</laneNumber>
+    </Lane>
+    <Lane>
+      <Read>
+        <Tile>
+          <clusterCountPF>2375385</clusterCountPF>
+          <clusterCountRaw>6313330</clusterCountRaw>
+          <oneSig>1139.10</oneSig>
+          <percentClustersPF>37.62</percentClustersPF>
+          <signal20AsPctOf1>85.17</signal20AsPctOf1>
+          <tileNumber>1101</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>6286613</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1102</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>5994999</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1103</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>3262679</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1104</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>6237718</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1105</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>6033743</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1106</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>6120542</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1107</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>5567004</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1108</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>2986982</clusterCountPF>
+          <clusterCountRaw>6143687</clusterCountRaw>
+          <oneSig>1179.26</oneSig>
+          <percentClustersPF>48.62</percentClustersPF>
+          <signal20AsPctOf1>83.37</signal20AsPctOf1>
+          <tileNumber>1201</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>6160371</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1202</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>6336417</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1203</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>5941459</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1204</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>6294748</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1205</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>5833916</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1206</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>5913050</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1207</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>5886712</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1208</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>3249310</clusterCountPF>
+          <clusterCountRaw>6355086</clusterCountRaw>
+          <oneSig>1175.05</oneSig>
+          <percentClustersPF>51.13</percentClustersPF>
+          <signal20AsPctOf1>86.62</signal20AsPctOf1>
+          <tileNumber>1301</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>2482602</clusterCountPF>
+          <clusterCountRaw>6345936</clusterCountRaw>
+          <oneSig>1114.27</oneSig>
+          <percentClustersPF>39.12</percentClustersPF>
+          <signal20AsPctOf1>86.48</signal20AsPctOf1>
+          <tileNumber>1302</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>6391130</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1303</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>6306326</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1304</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>3278126</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1305</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>3954980</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1306</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>4991640</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1307</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>4731299</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1308</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>2363698</clusterCountPF>
+          <clusterCountRaw>6670949</clusterCountRaw>
+          <oneSig>1261.88</oneSig>
+          <percentClustersPF>35.43</percentClustersPF>
+          <signal20AsPctOf1>82.59</signal20AsPctOf1>
+          <tileNumber>2101</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>1287696</clusterCountPF>
+          <clusterCountRaw>6380853</clusterCountRaw>
+          <oneSig>1205.05</oneSig>
+          <percentClustersPF>20.18</percentClustersPF>
+          <signal20AsPctOf1>87.75</signal20AsPctOf1>
+          <tileNumber>2102</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>3299242</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2103</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>6024321</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2104</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>6041139</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2105</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>6065842</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2106</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>5924388</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2107</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>5810177</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2108</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>6081345</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2201</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>6434511</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2202</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>4547035</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2203</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>5924309</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2204</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>5981859</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2205</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>5706415</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2206</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>6033825</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2207</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>6078240</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2208</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>2447011</clusterCountPF>
+          <clusterCountRaw>5856223</clusterCountRaw>
+          <oneSig>1180.01</oneSig>
+          <percentClustersPF>41.78</percentClustersPF>
+          <signal20AsPctOf1>93.05</signal20AsPctOf1>
+          <tileNumber>2301</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>879365</clusterCountPF>
+          <clusterCountRaw>6085412</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>14.45</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2302</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>3459940</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2303</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>6354552</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2304</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>5912596</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2305</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>5914029</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2306</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>5058019</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2307</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>5899621</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2308</tileNumber>
+        </Tile>
+        <readNumber>1</readNumber>
+      </Read>
+      
+      <laneNumber>3</laneNumber>
+    </Lane>
+    <Lane>
+      <Read>
+        <Tile>
+          <clusterCountPF>2890389</clusterCountPF>
+          <clusterCountRaw>6154619</clusterCountRaw>
+          <oneSig>1106.26</oneSig>
+          <percentClustersPF>46.96</percentClustersPF>
+          <signal20AsPctOf1>84.42</signal20AsPctOf1>
+          <tileNumber>1101</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>3859115</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1102</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>6150759</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1103</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>6062610</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1104</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>6041213</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1105</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>6048818</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1106</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>5891349</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1107</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>5878432</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1108</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>2392573</clusterCountPF>
+          <clusterCountRaw>5835186</clusterCountRaw>
+          <oneSig>1125.79</oneSig>
+          <percentClustersPF>41.00</percentClustersPF>
+          <signal20AsPctOf1>83.06</signal20AsPctOf1>
+          <tileNumber>1201</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>1735497</clusterCountPF>
+          <clusterCountRaw>5951872</clusterCountRaw>
+          <oneSig>1071.67</oneSig>
+          <percentClustersPF>29.16</percentClustersPF>
+          <signal20AsPctOf1>86.07</signal20AsPctOf1>
+          <tileNumber>1202</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>5968968</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1203</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>5974093</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1204</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>6089365</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1205</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>5465613</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1206</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>6034569</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1207</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>4926479</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1208</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>1813170</clusterCountPF>
+          <clusterCountRaw>6065205</clusterCountRaw>
+          <oneSig>1134.80</oneSig>
+          <percentClustersPF>29.89</percentClustersPF>
+          <signal20AsPctOf1>83.87</signal20AsPctOf1>
+          <tileNumber>1301</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>6072760</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1302</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>6022433</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1303</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>5914380</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1304</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>6035108</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1305</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>6110769</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1306</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>5874705</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1307</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>5932065</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1308</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>1933417</clusterCountPF>
+          <clusterCountRaw>6057448</clusterCountRaw>
+          <oneSig>1230.29</oneSig>
+          <percentClustersPF>31.92</percentClustersPF>
+          <signal20AsPctOf1>85.88</signal20AsPctOf1>
+          <tileNumber>2101</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>5897444</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2102</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>6389435</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2103</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>3815684</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2104</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>6071732</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2105</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>5821758</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2106</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>5873744</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2107</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>6008801</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2108</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>1611899</clusterCountPF>
+          <clusterCountRaw>5880262</clusterCountRaw>
+          <oneSig>1241.48</oneSig>
+          <percentClustersPF>27.41</percentClustersPF>
+          <signal20AsPctOf1>0.00</signal20AsPctOf1>
+          <tileNumber>2201</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>1996737</clusterCountPF>
+          <clusterCountRaw>6347857</clusterCountRaw>
+          <oneSig>1188.53</oneSig>
+          <percentClustersPF>31.46</percentClustersPF>
+          <signal20AsPctOf1>0.00</signal20AsPctOf1>
+          <tileNumber>2202</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>6362861</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2203</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>5852976</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2204</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>6177697</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2205</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>6022917</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2206</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>6123053</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2207</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>4798958</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2208</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>4627342</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2301</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>1458201</clusterCountPF>
+          <clusterCountRaw>6151616</clusterCountRaw>
+          <oneSig>1197.06</oneSig>
+          <percentClustersPF>23.70</percentClustersPF>
+          <signal20AsPctOf1>85.80</signal20AsPctOf1>
+          <tileNumber>2302</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>6007566</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2303</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>6300233</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2304</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>5970238</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2305</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>5954738</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2306</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>6046864</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2307</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>6017839</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2308</tileNumber>
+        </Tile>
+        <readNumber>1</readNumber>
+      </Read>
+      
+      <laneNumber>4</laneNumber>
+    </Lane>
+    <Lane>
+      <Read>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>5631135</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1101</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>2681269</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1102</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>2607227</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1103</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>5940868</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1104</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>3300266</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1105</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>3183165</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1106</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>3168588</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1107</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>3105604</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1108</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>3054041</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1201</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>4779051</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1202</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>5324239</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1203</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>5972215</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1204</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>3287230</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1205</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>2762623</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1206</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>3156192</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1207</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>2971658</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1208</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>496907</clusterCountPF>
+          <clusterCountRaw>5676984</clusterCountRaw>
+          <oneSig>-685.71</oneSig>
+          <percentClustersPF>8.75</percentClustersPF>
+          <signal20AsPctOf1>138.72</signal20AsPctOf1>
+          <tileNumber>1301</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>5350372</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1302</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>5418521</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1303</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>5941481</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1304</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>3314554</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1305</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>3168898</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1306</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>3124790</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1307</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>3116740</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1308</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>1493791</clusterCountPF>
+          <clusterCountRaw>5492816</clusterCountRaw>
+          <oneSig>-532.02</oneSig>
+          <percentClustersPF>27.20</percentClustersPF>
+          <signal20AsPctOf1>148.77</signal20AsPctOf1>
+          <tileNumber>2101</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>514231</clusterCountPF>
+          <clusterCountRaw>5761146</clusterCountRaw>
+          <oneSig>-572.34</oneSig>
+          <percentClustersPF>8.93</percentClustersPF>
+          <signal20AsPctOf1>154.15</signal20AsPctOf1>
+          <tileNumber>2102</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>3834974</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2103</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>6041237</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2104</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>3371454</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2105</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>3271578</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2106</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>3145886</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2107</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>2812963</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2108</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>5714487</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2201</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>4323735</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2202</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>5689972</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2203</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>5590891</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2204</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>2565274</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2205</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>3103834</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2206</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>2775071</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2207</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>2721788</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2208</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>2808679</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2301</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>5740118</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2302</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>2710478</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2303</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>6053923</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2304</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>3311585</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2305</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>3229925</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2306</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>3052698</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2307</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>3161815</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2308</tileNumber>
+        </Tile>
+        <readNumber>1</readNumber>
+      </Read>
+      
+      <laneNumber>5</laneNumber>
+    </Lane>
+    <Lane>
+      <Read>
+        <Tile>
+          <clusterCountPF>4328250</clusterCountPF>
+          <clusterCountRaw>6108747</clusterCountRaw>
+          <oneSig>1170.17</oneSig>
+          <percentClustersPF>70.85</percentClustersPF>
+          <signal20AsPctOf1>85.98</signal20AsPctOf1>
+          <tileNumber>1101</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>3763550</clusterCountPF>
+          <clusterCountRaw>5974162</clusterCountRaw>
+          <oneSig>1171.51</oneSig>
+          <percentClustersPF>63.00</percentClustersPF>
+          <signal20AsPctOf1>85.49</signal20AsPctOf1>
+          <tileNumber>1102</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>3376849</clusterCountPF>
+          <clusterCountRaw>5986042</clusterCountRaw>
+          <oneSig>1127.66</oneSig>
+          <percentClustersPF>56.41</percentClustersPF>
+          <signal20AsPctOf1>86.28</signal20AsPctOf1>
+          <tileNumber>1103</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>1454678</clusterCountPF>
+          <clusterCountRaw>5553026</clusterCountRaw>
+          <oneSig>1038.63</oneSig>
+          <percentClustersPF>26.20</percentClustersPF>
+          <signal20AsPctOf1>90.35</signal20AsPctOf1>
+          <tileNumber>1104</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>836786</clusterCountPF>
+          <clusterCountRaw>5751374</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>14.55</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1105</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>1008081</clusterCountPF>
+          <clusterCountRaw>5436595</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>18.54</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1106</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>1089073</clusterCountPF>
+          <clusterCountRaw>4720242</clusterCountRaw>
+          <oneSig>970.77</oneSig>
+          <percentClustersPF>23.07</percentClustersPF>
+          <signal20AsPctOf1>87.99</signal20AsPctOf1>
+          <tileNumber>1107</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>5628492</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1108</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>4255350</clusterCountPF>
+          <clusterCountRaw>6074637</clusterCountRaw>
+          <oneSig>1111.85</oneSig>
+          <percentClustersPF>70.05</percentClustersPF>
+          <signal20AsPctOf1>90.15</signal20AsPctOf1>
+          <tileNumber>1201</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>3764335</clusterCountPF>
+          <clusterCountRaw>5992750</clusterCountRaw>
+          <oneSig>1122.60</oneSig>
+          <percentClustersPF>62.81</percentClustersPF>
+          <signal20AsPctOf1>87.23</signal20AsPctOf1>
+          <tileNumber>1202</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>2949541</clusterCountPF>
+          <clusterCountRaw>5863819</clusterCountRaw>
+          <oneSig>1041.75</oneSig>
+          <percentClustersPF>50.30</percentClustersPF>
+          <signal20AsPctOf1>91.25</signal20AsPctOf1>
+          <tileNumber>1203</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>1960969</clusterCountPF>
+          <clusterCountRaw>5759754</clusterCountRaw>
+          <oneSig>985.74</oneSig>
+          <percentClustersPF>34.05</percentClustersPF>
+          <signal20AsPctOf1>94.16</signal20AsPctOf1>
+          <tileNumber>1204</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>1458718</clusterCountPF>
+          <clusterCountRaw>5348340</clusterCountRaw>
+          <oneSig>973.95</oneSig>
+          <percentClustersPF>27.27</percentClustersPF>
+          <signal20AsPctOf1>92.07</signal20AsPctOf1>
+          <tileNumber>1205</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>6188127</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1206</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>6029568</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1207</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>5783284</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1208</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>4164137</clusterCountPF>
+          <clusterCountRaw>6062113</clusterCountRaw>
+          <oneSig>1111.15</oneSig>
+          <percentClustersPF>68.69</percentClustersPF>
+          <signal20AsPctOf1>90.64</signal20AsPctOf1>
+          <tileNumber>1301</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>3807278</clusterCountPF>
+          <clusterCountRaw>6009706</clusterCountRaw>
+          <oneSig>1103.05</oneSig>
+          <percentClustersPF>63.35</percentClustersPF>
+          <signal20AsPctOf1>89.93</signal20AsPctOf1>
+          <tileNumber>1302</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>2646889</clusterCountPF>
+          <clusterCountRaw>5860357</clusterCountRaw>
+          <oneSig>1047.72</oneSig>
+          <percentClustersPF>45.17</percentClustersPF>
+          <signal20AsPctOf1>91.04</signal20AsPctOf1>
+          <tileNumber>1303</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>618116</clusterCountPF>
+          <clusterCountRaw>5936009</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>10.41</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1304</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>966704</clusterCountPF>
+          <clusterCountRaw>5780730</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>16.72</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1305</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>985185</clusterCountPF>
+          <clusterCountRaw>5442490</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>18.10</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1306</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>5865063</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1307</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>5759999</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>1308</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>4457818</clusterCountPF>
+          <clusterCountRaw>6178104</clusterCountRaw>
+          <oneSig>1290.91</oneSig>
+          <percentClustersPF>72.16</percentClustersPF>
+          <signal20AsPctOf1>87.89</signal20AsPctOf1>
+          <tileNumber>2101</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>4135701</clusterCountPF>
+          <clusterCountRaw>6067338</clusterCountRaw>
+          <oneSig>1270.47</oneSig>
+          <percentClustersPF>68.16</percentClustersPF>
+          <signal20AsPctOf1>87.91</signal20AsPctOf1>
+          <tileNumber>2102</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>3142805</clusterCountPF>
+          <clusterCountRaw>5915123</clusterCountRaw>
+          <oneSig>1190.65</oneSig>
+          <percentClustersPF>53.13</percentClustersPF>
+          <signal20AsPctOf1>91.67</signal20AsPctOf1>
+          <tileNumber>2103</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>2857800</clusterCountPF>
+          <clusterCountRaw>5959413</clusterCountRaw>
+          <oneSig>1192.35</oneSig>
+          <percentClustersPF>47.95</percentClustersPF>
+          <signal20AsPctOf1>88.82</signal20AsPctOf1>
+          <tileNumber>2104</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>1231733</clusterCountPF>
+          <clusterCountRaw>5733754</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>21.48</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2105</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>2633715</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2106</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>719661</clusterCountPF>
+          <clusterCountRaw>5147810</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>13.98</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2107</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>5662637</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2108</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>5811788</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2201</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>5919142</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2202</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>5921326</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2203</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>5683685</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2204</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>5369472</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2205</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>5594894</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2206</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>5888075</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2207</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>5533822</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2208</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>4347658</clusterCountPF>
+          <clusterCountRaw>6149228</clusterCountRaw>
+          <oneSig>1270.97</oneSig>
+          <percentClustersPF>70.70</percentClustersPF>
+          <signal20AsPctOf1>87.57</signal20AsPctOf1>
+          <tileNumber>2301</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>3927517</clusterCountPF>
+          <clusterCountRaw>6038155</clusterCountRaw>
+          <oneSig>1260.11</oneSig>
+          <percentClustersPF>65.04</percentClustersPF>
+          <signal20AsPctOf1>88.09</signal20AsPctOf1>
+          <tileNumber>2302</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>1031548</clusterCountPF>
+          <clusterCountRaw>3463054</clusterCountRaw>
+          <oneSig>1223.05</oneSig>
+          <percentClustersPF>29.79</percentClustersPF>
+          <signal20AsPctOf1>88.74</signal20AsPctOf1>
+          <tileNumber>2303</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>464073</clusterCountPF>
+          <clusterCountRaw>6006755</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>7.73</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2304</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>1812404</clusterCountPF>
+          <clusterCountRaw>5211053</clusterCountRaw>
+          <oneSig>1109.48</oneSig>
+          <percentClustersPF>34.78</percentClustersPF>
+          <signal20AsPctOf1>92.72</signal20AsPctOf1>
+          <tileNumber>2305</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>6128662</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2306</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>5927816</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2307</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>5684780</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2308</tileNumber>
+        </Tile>
+        <readNumber>1</readNumber>
+      </Read>
+      
+      <laneNumber>6</laneNumber>
+    </Lane>
+    <Lane>
+      <Read>
+        <Tile>
+          <clusterCountPF>1290892</clusterCountPF>
+          <clusterCountRaw>1318384</clusterCountRaw>
+          <oneSig>1457.61</oneSig>
+          <percentClustersPF>97.91</percentClustersPF>
+          <signal20AsPctOf1>93.12</signal20AsPctOf1>
+          <tileNumber>1101</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>1405177</clusterCountPF>
+          <clusterCountRaw>1435753</clusterCountRaw>
+          <oneSig>1428.15</oneSig>
+          <percentClustersPF>97.87</percentClustersPF>
+          <signal20AsPctOf1>93.14</signal20AsPctOf1>
+          <tileNumber>1102</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>1518681</clusterCountPF>
+          <clusterCountRaw>1553867</clusterCountRaw>
+          <oneSig>1415.45</oneSig>
+          <percentClustersPF>97.74</percentClustersPF>
+          <signal20AsPctOf1>93.14</signal20AsPctOf1>
+          <tileNumber>1103</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>1674083</clusterCountPF>
+          <clusterCountRaw>1713366</clusterCountRaw>
+          <oneSig>1397.13</oneSig>
+          <percentClustersPF>97.71</percentClustersPF>
+          <signal20AsPctOf1>91.75</signal20AsPctOf1>
+          <tileNumber>1104</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>1848975</clusterCountPF>
+          <clusterCountRaw>1894031</clusterCountRaw>
+          <oneSig>1453.02</oneSig>
+          <percentClustersPF>97.62</percentClustersPF>
+          <signal20AsPctOf1>87.65</signal20AsPctOf1>
+          <tileNumber>1105</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>2036288</clusterCountPF>
+          <clusterCountRaw>2089577</clusterCountRaw>
+          <oneSig>1351.03</oneSig>
+          <percentClustersPF>97.45</percentClustersPF>
+          <signal20AsPctOf1>92.96</signal20AsPctOf1>
+          <tileNumber>1106</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>2235825</clusterCountPF>
+          <clusterCountRaw>2300996</clusterCountRaw>
+          <oneSig>1330.80</oneSig>
+          <percentClustersPF>97.17</percentClustersPF>
+          <signal20AsPctOf1>92.09</signal20AsPctOf1>
+          <tileNumber>1107</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>2451380</clusterCountPF>
+          <clusterCountRaw>2541307</clusterCountRaw>
+          <oneSig>1293.67</oneSig>
+          <percentClustersPF>96.46</percentClustersPF>
+          <signal20AsPctOf1>91.71</signal20AsPctOf1>
+          <tileNumber>1108</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>1248007</clusterCountPF>
+          <clusterCountRaw>1271398</clusterCountRaw>
+          <oneSig>1456.86</oneSig>
+          <percentClustersPF>98.16</percentClustersPF>
+          <signal20AsPctOf1>92.75</signal20AsPctOf1>
+          <tileNumber>1201</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>1353214</clusterCountPF>
+          <clusterCountRaw>1379519</clusterCountRaw>
+          <oneSig>1373.11</oneSig>
+          <percentClustersPF>98.09</percentClustersPF>
+          <signal20AsPctOf1>92.92</signal20AsPctOf1>
+          <tileNumber>1202</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>1476775</clusterCountPF>
+          <clusterCountRaw>1506069</clusterCountRaw>
+          <oneSig>1406.85</oneSig>
+          <percentClustersPF>98.05</percentClustersPF>
+          <signal20AsPctOf1>92.17</signal20AsPctOf1>
+          <tileNumber>1203</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>1596576</clusterCountPF>
+          <clusterCountRaw>1629689</clusterCountRaw>
+          <oneSig>1395.32</oneSig>
+          <percentClustersPF>97.97</percentClustersPF>
+          <signal20AsPctOf1>90.76</signal20AsPctOf1>
+          <tileNumber>1204</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>1802357</clusterCountPF>
+          <clusterCountRaw>1838238</clusterCountRaw>
+          <oneSig>1383.42</oneSig>
+          <percentClustersPF>98.05</percentClustersPF>
+          <signal20AsPctOf1>91.84</signal20AsPctOf1>
+          <tileNumber>1205</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>1985501</clusterCountPF>
+          <clusterCountRaw>2028373</clusterCountRaw>
+          <oneSig>1355.39</oneSig>
+          <percentClustersPF>97.89</percentClustersPF>
+          <signal20AsPctOf1>91.43</signal20AsPctOf1>
+          <tileNumber>1206</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>2182408</clusterCountPF>
+          <clusterCountRaw>2237640</clusterCountRaw>
+          <oneSig>1326.23</oneSig>
+          <percentClustersPF>97.53</percentClustersPF>
+          <signal20AsPctOf1>91.95</signal20AsPctOf1>
+          <tileNumber>1207</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>2412726</clusterCountPF>
+          <clusterCountRaw>2498414</clusterCountRaw>
+          <oneSig>1284.50</oneSig>
+          <percentClustersPF>96.57</percentClustersPF>
+          <signal20AsPctOf1>91.14</signal20AsPctOf1>
+          <tileNumber>1208</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>1329553</clusterCountPF>
+          <clusterCountRaw>1353194</clusterCountRaw>
+          <oneSig>1500.38</oneSig>
+          <percentClustersPF>98.25</percentClustersPF>
+          <signal20AsPctOf1>90.00</signal20AsPctOf1>
+          <tileNumber>1301</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>1448646</clusterCountPF>
+          <clusterCountRaw>1475015</clusterCountRaw>
+          <oneSig>1426.92</oneSig>
+          <percentClustersPF>98.21</percentClustersPF>
+          <signal20AsPctOf1>91.04</signal20AsPctOf1>
+          <tileNumber>1302</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>1584849</clusterCountPF>
+          <clusterCountRaw>1618578</clusterCountRaw>
+          <oneSig>1418.87</oneSig>
+          <percentClustersPF>97.92</percentClustersPF>
+          <signal20AsPctOf1>90.98</signal20AsPctOf1>
+          <tileNumber>1303</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>1703358</clusterCountPF>
+          <clusterCountRaw>1738426</clusterCountRaw>
+          <oneSig>1408.33</oneSig>
+          <percentClustersPF>97.98</percentClustersPF>
+          <signal20AsPctOf1>90.65</signal20AsPctOf1>
+          <tileNumber>1304</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>1962537</clusterCountPF>
+          <clusterCountRaw>2003605</clusterCountRaw>
+          <oneSig>1417.26</oneSig>
+          <percentClustersPF>97.95</percentClustersPF>
+          <signal20AsPctOf1>88.90</signal20AsPctOf1>
+          <tileNumber>1305</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>2155571</clusterCountPF>
+          <clusterCountRaw>2205956</clusterCountRaw>
+          <oneSig>1353.91</oneSig>
+          <percentClustersPF>97.72</percentClustersPF>
+          <signal20AsPctOf1>91.89</signal20AsPctOf1>
+          <tileNumber>1306</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>2371794</clusterCountPF>
+          <clusterCountRaw>2438582</clusterCountRaw>
+          <oneSig>1349.40</oneSig>
+          <percentClustersPF>97.26</percentClustersPF>
+          <signal20AsPctOf1>87.65</signal20AsPctOf1>
+          <tileNumber>1307</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>2609442</clusterCountPF>
+          <clusterCountRaw>2697578</clusterCountRaw>
+          <oneSig>1273.05</oneSig>
+          <percentClustersPF>96.73</percentClustersPF>
+          <signal20AsPctOf1>89.13</signal20AsPctOf1>
+          <tileNumber>1308</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>1274462</clusterCountPF>
+          <clusterCountRaw>1301586</clusterCountRaw>
+          <oneSig>1601.86</oneSig>
+          <percentClustersPF>97.92</percentClustersPF>
+          <signal20AsPctOf1>92.97</signal20AsPctOf1>
+          <tileNumber>2101</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>1383611</clusterCountPF>
+          <clusterCountRaw>1413798</clusterCountRaw>
+          <oneSig>1567.26</oneSig>
+          <percentClustersPF>97.86</percentClustersPF>
+          <signal20AsPctOf1>92.72</signal20AsPctOf1>
+          <tileNumber>2102</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>1500886</clusterCountPF>
+          <clusterCountRaw>1538148</clusterCountRaw>
+          <oneSig>1575.16</oneSig>
+          <percentClustersPF>97.58</percentClustersPF>
+          <signal20AsPctOf1>91.30</signal20AsPctOf1>
+          <tileNumber>2103</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>1658029</clusterCountPF>
+          <clusterCountRaw>1695613</clusterCountRaw>
+          <oneSig>1551.84</oneSig>
+          <percentClustersPF>97.78</percentClustersPF>
+          <signal20AsPctOf1>92.03</signal20AsPctOf1>
+          <tileNumber>2104</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>1833421</clusterCountPF>
+          <clusterCountRaw>1876931</clusterCountRaw>
+          <oneSig>1525.11</oneSig>
+          <percentClustersPF>97.68</percentClustersPF>
+          <signal20AsPctOf1>92.43</signal20AsPctOf1>
+          <tileNumber>2105</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>2026973</clusterCountPF>
+          <clusterCountRaw>2078853</clusterCountRaw>
+          <oneSig>1509.17</oneSig>
+          <percentClustersPF>97.50</percentClustersPF>
+          <signal20AsPctOf1>91.91</signal20AsPctOf1>
+          <tileNumber>2106</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>2259381</clusterCountPF>
+          <clusterCountRaw>2325032</clusterCountRaw>
+          <oneSig>1467.69</oneSig>
+          <percentClustersPF>97.18</percentClustersPF>
+          <signal20AsPctOf1>92.25</signal20AsPctOf1>
+          <tileNumber>2107</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>2558255</clusterCountPF>
+          <clusterCountRaw>2655400</clusterCountRaw>
+          <oneSig>1444.06</oneSig>
+          <percentClustersPF>96.34</percentClustersPF>
+          <signal20AsPctOf1>91.44</signal20AsPctOf1>
+          <tileNumber>2108</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>970653</clusterCountPF>
+          <clusterCountRaw>1235179</clusterCountRaw>
+          <oneSig>1584.09</oneSig>
+          <percentClustersPF>78.58</percentClustersPF>
+          <signal20AsPctOf1>93.93</signal20AsPctOf1>
+          <tileNumber>2201</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>1342455</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2202</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>1465297</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2203</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>675140</clusterCountPF>
+          <clusterCountRaw>1582751</clusterCountRaw>
+          <oneSig>1505.46</oneSig>
+          <percentClustersPF>42.66</percentClustersPF>
+          <signal20AsPctOf1>94.13</signal20AsPctOf1>
+          <tileNumber>2204</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>1775056</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2205</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>1957270</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2206</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>0</clusterCountPF>
+          <clusterCountRaw>2164043</clusterCountRaw>
+          <oneSig>0.00</oneSig>
+          <percentClustersPF>0.00</percentClustersPF>
+          <signal20AsPctOf1>N/A</signal20AsPctOf1>
+          <tileNumber>2207</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>1254733</clusterCountPF>
+          <clusterCountRaw>2441653</clusterCountRaw>
+          <oneSig>1444.53</oneSig>
+          <percentClustersPF>51.39</percentClustersPF>
+          <signal20AsPctOf1>93.17</signal20AsPctOf1>
+          <tileNumber>2208</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>1296622</clusterCountPF>
+          <clusterCountRaw>1325781</clusterCountRaw>
+          <oneSig>1494.17</oneSig>
+          <percentClustersPF>97.80</percentClustersPF>
+          <signal20AsPctOf1>98.31</signal20AsPctOf1>
+          <tileNumber>2301</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>1424658</clusterCountPF>
+          <clusterCountRaw>1452340</clusterCountRaw>
+          <oneSig>1528.87</oneSig>
+          <percentClustersPF>98.09</percentClustersPF>
+          <signal20AsPctOf1>93.49</signal20AsPctOf1>
+          <tileNumber>2302</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>1569437</clusterCountPF>
+          <clusterCountRaw>1602067</clusterCountRaw>
+          <oneSig>1539.36</oneSig>
+          <percentClustersPF>97.96</percentClustersPF>
+          <signal20AsPctOf1>93.10</signal20AsPctOf1>
+          <tileNumber>2303</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>1682427</clusterCountPF>
+          <clusterCountRaw>1720505</clusterCountRaw>
+          <oneSig>1521.03</oneSig>
+          <percentClustersPF>97.79</percentClustersPF>
+          <signal20AsPctOf1>92.61</signal20AsPctOf1>
+          <tileNumber>2304</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>1939141</clusterCountPF>
+          <clusterCountRaw>1979800</clusterCountRaw>
+          <oneSig>1523.67</oneSig>
+          <percentClustersPF>97.95</percentClustersPF>
+          <signal20AsPctOf1>91.62</signal20AsPctOf1>
+          <tileNumber>2305</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>2134547</clusterCountPF>
+          <clusterCountRaw>2184095</clusterCountRaw>
+          <oneSig>1486.10</oneSig>
+          <percentClustersPF>97.73</percentClustersPF>
+          <signal20AsPctOf1>92.33</signal20AsPctOf1>
+          <tileNumber>2306</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>2356389</clusterCountPF>
+          <clusterCountRaw>2421537</clusterCountRaw>
+          <oneSig>1466.46</oneSig>
+          <percentClustersPF>97.31</percentClustersPF>
+          <signal20AsPctOf1>91.63</signal20AsPctOf1>
+          <tileNumber>2307</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>2602908</clusterCountPF>
+          <clusterCountRaw>2695532</clusterCountRaw>
+          <oneSig>1428.19</oneSig>
+          <percentClustersPF>96.56</percentClustersPF>
+          <signal20AsPctOf1>92.25</signal20AsPctOf1>
+          <tileNumber>2308</tileNumber>
+        </Tile>
+        <readNumber>1</readNumber>
+      </Read>
+      
+      <laneNumber>7</laneNumber>
+    </Lane>
+    <Lane>
+      <Read>
+        <Tile>
+          <clusterCountPF>3672425</clusterCountPF>
+          <clusterCountRaw>3999929</clusterCountRaw>
+          <oneSig>1359.39</oneSig>
+          <percentClustersPF>91.81</percentClustersPF>
+          <signal20AsPctOf1>88.45</signal20AsPctOf1>
+          <tileNumber>1101</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>3843360</clusterCountPF>
+          <clusterCountRaw>4214896</clusterCountRaw>
+          <oneSig>1338.54</oneSig>
+          <percentClustersPF>91.19</percentClustersPF>
+          <signal20AsPctOf1>88.01</signal20AsPctOf1>
+          <tileNumber>1102</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>3985275</clusterCountPF>
+          <clusterCountRaw>4432069</clusterCountRaw>
+          <oneSig>1321.41</oneSig>
+          <percentClustersPF>89.92</percentClustersPF>
+          <signal20AsPctOf1>88.40</signal20AsPctOf1>
+          <tileNumber>1103</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>4195701</clusterCountPF>
+          <clusterCountRaw>4688257</clusterCountRaw>
+          <oneSig>1298.99</oneSig>
+          <percentClustersPF>89.49</percentClustersPF>
+          <signal20AsPctOf1>87.97</signal20AsPctOf1>
+          <tileNumber>1104</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>4416383</clusterCountPF>
+          <clusterCountRaw>4972645</clusterCountRaw>
+          <oneSig>1283.87</oneSig>
+          <percentClustersPF>88.81</percentClustersPF>
+          <signal20AsPctOf1>88.72</signal20AsPctOf1>
+          <tileNumber>1105</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>4542437</clusterCountPF>
+          <clusterCountRaw>5209248</clusterCountRaw>
+          <oneSig>1258.05</oneSig>
+          <percentClustersPF>87.20</percentClustersPF>
+          <signal20AsPctOf1>87.14</signal20AsPctOf1>
+          <tileNumber>1106</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>4596548</clusterCountPF>
+          <clusterCountRaw>5399922</clusterCountRaw>
+          <oneSig>1230.54</oneSig>
+          <percentClustersPF>85.12</percentClustersPF>
+          <signal20AsPctOf1>87.31</signal20AsPctOf1>
+          <tileNumber>1107</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>4316902</clusterCountPF>
+          <clusterCountRaw>5826697</clusterCountRaw>
+          <oneSig>1182.73</oneSig>
+          <percentClustersPF>74.09</percentClustersPF>
+          <signal20AsPctOf1>87.01</signal20AsPctOf1>
+          <tileNumber>1108</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>3559633</clusterCountPF>
+          <clusterCountRaw>3873994</clusterCountRaw>
+          <oneSig>1365.15</oneSig>
+          <percentClustersPF>91.89</percentClustersPF>
+          <signal20AsPctOf1>87.07</signal20AsPctOf1>
+          <tileNumber>1201</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>3742085</clusterCountPF>
+          <clusterCountRaw>4103838</clusterCountRaw>
+          <oneSig>1345.87</oneSig>
+          <percentClustersPF>91.19</percentClustersPF>
+          <signal20AsPctOf1>87.69</signal20AsPctOf1>
+          <tileNumber>1202</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>3809926</clusterCountPF>
+          <clusterCountRaw>4219389</clusterCountRaw>
+          <oneSig>1314.55</oneSig>
+          <percentClustersPF>90.30</percentClustersPF>
+          <signal20AsPctOf1>88.34</signal20AsPctOf1>
+          <tileNumber>1203</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>4095946</clusterCountPF>
+          <clusterCountRaw>4572435</clusterCountRaw>
+          <oneSig>1296.18</oneSig>
+          <percentClustersPF>89.58</percentClustersPF>
+          <signal20AsPctOf1>88.12</signal20AsPctOf1>
+          <tileNumber>1204</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>4329806</clusterCountPF>
+          <clusterCountRaw>4852097</clusterCountRaw>
+          <oneSig>1291.90</oneSig>
+          <percentClustersPF>89.24</percentClustersPF>
+          <signal20AsPctOf1>87.70</signal20AsPctOf1>
+          <tileNumber>1205</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>4484284</clusterCountPF>
+          <clusterCountRaw>5103542</clusterCountRaw>
+          <oneSig>1271.54</oneSig>
+          <percentClustersPF>87.87</percentClustersPF>
+          <signal20AsPctOf1>86.33</signal20AsPctOf1>
+          <tileNumber>1206</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>4545978</clusterCountPF>
+          <clusterCountRaw>5322851</clusterCountRaw>
+          <oneSig>1240.07</oneSig>
+          <percentClustersPF>85.40</percentClustersPF>
+          <signal20AsPctOf1>86.60</signal20AsPctOf1>
+          <tileNumber>1207</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>4236437</clusterCountPF>
+          <clusterCountRaw>5399609</clusterCountRaw>
+          <oneSig>1200.52</oneSig>
+          <percentClustersPF>78.46</percentClustersPF>
+          <signal20AsPctOf1>82.29</signal20AsPctOf1>
+          <tileNumber>1208</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>3745093</clusterCountPF>
+          <clusterCountRaw>4091803</clusterCountRaw>
+          <oneSig>1377.26</oneSig>
+          <percentClustersPF>91.53</percentClustersPF>
+          <signal20AsPctOf1>85.86</signal20AsPctOf1>
+          <tileNumber>1301</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>3938377</clusterCountPF>
+          <clusterCountRaw>4338397</clusterCountRaw>
+          <oneSig>1338.33</oneSig>
+          <percentClustersPF>90.78</percentClustersPF>
+          <signal20AsPctOf1>87.63</signal20AsPctOf1>
+          <tileNumber>1302</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>3963514</clusterCountPF>
+          <clusterCountRaw>4395406</clusterCountRaw>
+          <oneSig>1308.84</oneSig>
+          <percentClustersPF>90.17</percentClustersPF>
+          <signal20AsPctOf1>88.08</signal20AsPctOf1>
+          <tileNumber>1303</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>4282045</clusterCountPF>
+          <clusterCountRaw>4835601</clusterCountRaw>
+          <oneSig>1287.81</oneSig>
+          <percentClustersPF>88.55</percentClustersPF>
+          <signal20AsPctOf1>87.58</signal20AsPctOf1>
+          <tileNumber>1304</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>4498474</clusterCountPF>
+          <clusterCountRaw>5114668</clusterCountRaw>
+          <oneSig>1282.81</oneSig>
+          <percentClustersPF>87.95</percentClustersPF>
+          <signal20AsPctOf1>87.46</signal20AsPctOf1>
+          <tileNumber>1305</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>4602295</clusterCountPF>
+          <clusterCountRaw>5337911</clusterCountRaw>
+          <oneSig>1257.03</oneSig>
+          <percentClustersPF>86.22</percentClustersPF>
+          <signal20AsPctOf1>86.97</signal20AsPctOf1>
+          <tileNumber>1306</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>4600782</clusterCountPF>
+          <clusterCountRaw>5501477</clusterCountRaw>
+          <oneSig>1225.51</oneSig>
+          <percentClustersPF>83.63</percentClustersPF>
+          <signal20AsPctOf1>86.53</signal20AsPctOf1>
+          <tileNumber>1307</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>4145380</clusterCountPF>
+          <clusterCountRaw>5872929</clusterCountRaw>
+          <oneSig>1175.25</oneSig>
+          <percentClustersPF>70.58</percentClustersPF>
+          <signal20AsPctOf1>83.85</signal20AsPctOf1>
+          <tileNumber>1308</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>3654318</clusterCountPF>
+          <clusterCountRaw>3969110</clusterCountRaw>
+          <oneSig>1467.08</oneSig>
+          <percentClustersPF>92.07</percentClustersPF>
+          <signal20AsPctOf1>90.01</signal20AsPctOf1>
+          <tileNumber>2101</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>3839864</clusterCountPF>
+          <clusterCountRaw>4184268</clusterCountRaw>
+          <oneSig>1439.99</oneSig>
+          <percentClustersPF>91.77</percentClustersPF>
+          <signal20AsPctOf1>90.66</signal20AsPctOf1>
+          <tileNumber>2102</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>3969051</clusterCountPF>
+          <clusterCountRaw>4413583</clusterCountRaw>
+          <oneSig>1422.63</oneSig>
+          <percentClustersPF>89.93</percentClustersPF>
+          <signal20AsPctOf1>90.66</signal20AsPctOf1>
+          <tileNumber>2103</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>4219627</clusterCountPF>
+          <clusterCountRaw>4681613</clusterCountRaw>
+          <oneSig>1403.97</oneSig>
+          <percentClustersPF>90.13</percentClustersPF>
+          <signal20AsPctOf1>90.49</signal20AsPctOf1>
+          <tileNumber>2104</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>4414065</clusterCountPF>
+          <clusterCountRaw>4956383</clusterCountRaw>
+          <oneSig>1386.15</oneSig>
+          <percentClustersPF>89.06</percentClustersPF>
+          <signal20AsPctOf1>89.95</signal20AsPctOf1>
+          <tileNumber>2105</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>4579204</clusterCountPF>
+          <clusterCountRaw>5232590</clusterCountRaw>
+          <oneSig>1365.53</oneSig>
+          <percentClustersPF>87.51</percentClustersPF>
+          <signal20AsPctOf1>89.26</signal20AsPctOf1>
+          <tileNumber>2106</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>4682961</clusterCountPF>
+          <clusterCountRaw>5469205</clusterCountRaw>
+          <oneSig>1333.32</oneSig>
+          <percentClustersPF>85.62</percentClustersPF>
+          <signal20AsPctOf1>89.03</signal20AsPctOf1>
+          <tileNumber>2107</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>3928926</clusterCountPF>
+          <clusterCountRaw>5870004</clusterCountRaw>
+          <oneSig>1286.80</oneSig>
+          <percentClustersPF>66.93</percentClustersPF>
+          <signal20AsPctOf1>87.34</signal20AsPctOf1>
+          <tileNumber>2108</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>3556282</clusterCountPF>
+          <clusterCountRaw>3852699</clusterCountRaw>
+          <oneSig>1457.50</oneSig>
+          <percentClustersPF>92.31</percentClustersPF>
+          <signal20AsPctOf1>88.49</signal20AsPctOf1>
+          <tileNumber>2201</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>3741136</clusterCountPF>
+          <clusterCountRaw>4072130</clusterCountRaw>
+          <oneSig>1441.42</oneSig>
+          <percentClustersPF>91.87</percentClustersPF>
+          <signal20AsPctOf1>89.42</signal20AsPctOf1>
+          <tileNumber>2202</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>3842742</clusterCountPF>
+          <clusterCountRaw>4212391</clusterCountRaw>
+          <oneSig>1415.97</oneSig>
+          <percentClustersPF>91.22</percentClustersPF>
+          <signal20AsPctOf1>89.95</signal20AsPctOf1>
+          <tileNumber>2203</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>4140127</clusterCountPF>
+          <clusterCountRaw>4577001</clusterCountRaw>
+          <oneSig>1387.43</oneSig>
+          <percentClustersPF>90.46</percentClustersPF>
+          <signal20AsPctOf1>89.88</signal20AsPctOf1>
+          <tileNumber>2204</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>4372303</clusterCountPF>
+          <clusterCountRaw>4862284</clusterCountRaw>
+          <oneSig>1384.77</oneSig>
+          <percentClustersPF>89.92</percentClustersPF>
+          <signal20AsPctOf1>88.76</signal20AsPctOf1>
+          <tileNumber>2205</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>4531801</clusterCountPF>
+          <clusterCountRaw>5119662</clusterCountRaw>
+          <oneSig>1367.26</oneSig>
+          <percentClustersPF>88.52</percentClustersPF>
+          <signal20AsPctOf1>88.81</signal20AsPctOf1>
+          <tileNumber>2206</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>4148375</clusterCountPF>
+          <clusterCountRaw>5301292</clusterCountRaw>
+          <oneSig>1326.28</oneSig>
+          <percentClustersPF>78.25</percentClustersPF>
+          <signal20AsPctOf1>89.46</signal20AsPctOf1>
+          <tileNumber>2207</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>3747919</clusterCountPF>
+          <clusterCountRaw>5523881</clusterCountRaw>
+          <oneSig>1328.04</oneSig>
+          <percentClustersPF>67.85</percentClustersPF>
+          <signal20AsPctOf1>85.54</signal20AsPctOf1>
+          <tileNumber>2208</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>3685991</clusterCountPF>
+          <clusterCountRaw>4034260</clusterCountRaw>
+          <oneSig>1437.04</oneSig>
+          <percentClustersPF>91.37</percentClustersPF>
+          <signal20AsPctOf1>88.87</signal20AsPctOf1>
+          <tileNumber>2301</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>3894450</clusterCountPF>
+          <clusterCountRaw>4285846</clusterCountRaw>
+          <oneSig>1425.73</oneSig>
+          <percentClustersPF>90.87</percentClustersPF>
+          <signal20AsPctOf1>89.86</signal20AsPctOf1>
+          <tileNumber>2302</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>3941822</clusterCountPF>
+          <clusterCountRaw>4382141</clusterCountRaw>
+          <oneSig>1397.98</oneSig>
+          <percentClustersPF>89.95</percentClustersPF>
+          <signal20AsPctOf1>90.41</signal20AsPctOf1>
+          <tileNumber>2303</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>4299760</clusterCountPF>
+          <clusterCountRaw>4825173</clusterCountRaw>
+          <oneSig>1380.92</oneSig>
+          <percentClustersPF>89.11</percentClustersPF>
+          <signal20AsPctOf1>89.99</signal20AsPctOf1>
+          <tileNumber>2304</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>4523197</clusterCountPF>
+          <clusterCountRaw>5101827</clusterCountRaw>
+          <oneSig>1374.81</oneSig>
+          <percentClustersPF>88.66</percentClustersPF>
+          <signal20AsPctOf1>89.72</signal20AsPctOf1>
+          <tileNumber>2305</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>4658536</clusterCountPF>
+          <clusterCountRaw>5357124</clusterCountRaw>
+          <oneSig>1362.66</oneSig>
+          <percentClustersPF>86.96</percentClustersPF>
+          <signal20AsPctOf1>88.93</signal20AsPctOf1>
+          <tileNumber>2306</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>4706753</clusterCountPF>
+          <clusterCountRaw>5569616</clusterCountRaw>
+          <oneSig>1336.27</oneSig>
+          <percentClustersPF>84.51</percentClustersPF>
+          <signal20AsPctOf1>89.15</signal20AsPctOf1>
+          <tileNumber>2307</tileNumber>
+        </Tile>
+        <Tile>
+          <clusterCountPF>2196707</clusterCountPF>
+          <clusterCountRaw>3787138</clusterCountRaw>
+          <oneSig>1265.29</oneSig>
+          <percentClustersPF>58.00</percentClustersPF>
+          <signal20AsPctOf1>89.55</signal20AsPctOf1>
+          <tileNumber>2308</tileNumber>
+        </Tile>
+        <readNumber>1</readNumber>
+      </Read>
+      
+      <laneNumber>8</laneNumber>
+    </Lane>
+  </TileResultsByLane>
+</BustardSummary>
diff --git a/htsworkflow/pipelines/test/testdata/1_12/reports/Process Control.png b/htsworkflow/pipelines/test/testdata/1_12/reports/Process Control.png
new file mode 100755 (executable)
index 0000000..24c0ecf
Binary files /dev/null and b/htsworkflow/pipelines/test/testdata/1_12/reports/Process Control.png differ
diff --git a/htsworkflow/pipelines/test/testdata/1_12/reports/Status.xml b/htsworkflow/pipelines/test/testdata/1_12/reports/Status.xml
new file mode 100755 (executable)
index 0000000..0560a05
--- /dev/null
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!--Illumina RTA Status Report-->\r
+<Status>\r
+  <Software>Illumina RTA 1.12.4.2</Software>\r
+  <RunName>110815_SN787_0101_AD07K6ACXX</RunName>\r
+  <InstrumentName>HWI-ST0787</InstrumentName>\r
+  <RunStarted>Thursday, August 18, 2011 12:33 PM</RunStarted>\r
+  <NumCycles>57</NumCycles>\r
+  <ImgCycle>57</ImgCycle>\r
+  <ScoreCycle>57</ScoreCycle>\r
+  <CallCycle>57</CallCycle>\r
+  <InputDir>D:\Illumina\HiSeqTemp\110815_SN787_0101_AD07K6ACXX</InputDir>\r
+  <OutputDir>\\NICODEMUS\volvox\110815_SN787_0101_AD07K6ACXX</OutputDir>\r
+  <Configuration>\r
+    <CopyAllFiles>true</CopyAllFiles>\r
+    <CopyImages>False</CopyImages>\r
+    <DeleteImages>True</DeleteImages>\r
+    <RunInfoExists>True</RunInfoExists>\r
+    <IsPairedEndRun>False</IsPairedEndRun>\r
+    <NumberOfReads>2</NumberOfReads>\r
+    <NumberOfLanes>8</NumberOfLanes>\r
+    <TilesPerLane>48</TilesPerLane>\r
+    <ControlLane>0</ControlLane>\r
+  </Configuration>\r
+</Status>
\ No newline at end of file
diff --git a/htsworkflow/pipelines/test/testdata/1_12/reports/StatusUpdate.xml b/htsworkflow/pipelines/test/testdata/1_12/reports/StatusUpdate.xml
new file mode 100755 (executable)
index 0000000..a6a0121
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><!--Illumina RTA Status Report--><Status><NumCycles>57</NumCycles><ImgCycle>57</ImgCycle><ScoreCycle>57</ScoreCycle><CopyCycle>57</CopyCycle><CallCycle>57</CallCycle><ErrRateCycle>57</ErrRateCycle></Status>
\ No newline at end of file
diff --git a/htsworkflow/pipelines/test/testdata/1_12/reports/Summary/read1.xml b/htsworkflow/pipelines/test/testdata/1_12/reports/Summary/read1.xml
new file mode 100755 (executable)
index 0000000..c84b3bd
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><!--Illumina RTA Data--><Summary Read="1" densityRatio="0.173619792"><Lane key="1" TileCount="48" ClustersRaw="3878755" ClustersRawSD="579626.0" ClustersPF="1040253" ClustersPFSD="1059982.5" PrcPFClusters="27.8" PrcPFClustersSD="27.72" Phasing="0.381" Prephasing="0.084" CalledCyclesMin="0" CalledCyclesMax="0" PrcAlign="0.00" PrcAlignSD="0.000" ErrRatePhiX="0.00" ErrRatePhiXSD="0.000" ErrRate35="0.00" ErrRate35SD="0.000" ErrRate75="0.00" ErrRate75SD="0.000" ErrRate100="0.00" ErrRate100SD="0.000" FirstCycleIntPF="707" FirstCycleIntPFSD="2076.1" PrcIntensityAfter20CyclesPF="60.0" PrcIntensityAfter20CyclesPFSD="6.61" /><Lane key="2" TileCount="48" ClustersRaw="3920639" ClustersRawSD="1027332.4" ClustersPF="474380" ClustersPFSD="739312.7" PrcPFClusters="13.4" PrcPFClustersSD="17.58" Phasing="0.369" Prephasing="0.251" CalledCyclesMin="0" CalledCyclesMax="0" PrcAlign="0.00" PrcAlignSD="0.000" ErrRatePhiX="0.00" ErrRatePhiXSD="0.000" ErrRate35="0.00" ErrRate35SD="0.000" ErrRate75="0.00" ErrRate75SD="0.000" ErrRate100="0.00" ErrRate100SD="0.000" FirstCycleIntPF="2617" FirstCycleIntPFSD="3391.7" PrcIntensityAfter20CyclesPF="60.0" PrcIntensityAfter20CyclesPFSD="5.30" /><Lane key="3" TileCount="48" ClustersRaw="5713049" ClustersRawSD="876187.3" ClustersPF="376501" ClustersPFSD="895452.3" PrcPFClusters="6.0" PrcPFClustersSD="14.30" Phasing="0.247" Prephasing="0.200" CalledCyclesMin="0" CalledCyclesMax="0" PrcAlign="0.00" PrcAlignSD="0.000" ErrRatePhiX="0.00" ErrRatePhiXSD="0.000" ErrRate35="0.00" ErrRate35SD="0.000" ErrRate75="0.00" ErrRate75SD="0.000" ErrRate100="0.00" ErrRate100SD="0.000" FirstCycleIntPF="5279" FirstCycleIntPFSD="1974.8" PrcIntensityAfter20CyclesPF="21.8" PrcIntensityAfter20CyclesPFSD="35.10" /><Lane key="4" TileCount="48" ClustersRaw="5852907" ClustersRawSD="538640.6" ClustersPF="329831" ClustersPFSD="758370.9" PrcPFClusters="5.4" PrcPFClustersSD="12.52" Phasing="0.210" Prephasing="0.180" CalledCyclesMin="0" CalledCyclesMax="0" PrcAlign="0.00" PrcAlignSD="0.000" ErrRatePhiX="0.00" ErrRatePhiXSD="0.000" ErrRate35="0.00" ErrRate35SD="0.000" ErrRate75="0.00" ErrRate75SD="0.000" ErrRate100="0.00" ErrRate100SD="0.000" FirstCycleIntPF="4181" FirstCycleIntPFSD="1283.3" PrcIntensityAfter20CyclesPF="29.0" PrcIntensityAfter20CyclesPFSD="45.34" /><Lane key="5" TileCount="48" ClustersRaw="4006751" ClustersRawSD="1265247.4" ClustersPF="52186" ClustersPFSD="233275.6" PrcPFClusters="0.9" PrcPFClustersSD="4.22" Phasing="0.000" Prephasing="0.000" CalledCyclesMin="0" CalledCyclesMax="0" PrcAlign="0.00" PrcAlignSD="0.000" ErrRatePhiX="0.00" ErrRatePhiXSD="0.000" ErrRate35="0.00" ErrRate35SD="0.000" ErrRate75="0.00" ErrRate75SD="0.000" ErrRate100="0.00" ErrRate100SD="0.000" FirstCycleIntPF="2579" FirstCycleIntPFSD="2952.5" PrcIntensityAfter20CyclesPF="16.0" PrcIntensityAfter20CyclesPFSD="29.57" /><Lane key="6" TileCount="48" ClustersRaw="5678021" ClustersRawSD="627070.7" ClustersPF="1490900" ClustersPFSD="1624380.0" PrcPFClusters="25.5" PrcPFClustersSD="26.81" Phasing="0.267" Prephasing="0.212" CalledCyclesMin="0" CalledCyclesMax="0" PrcAlign="0.00" PrcAlignSD="0.000" ErrRatePhiX="0.00" ErrRatePhiXSD="0.000" ErrRate35="0.00" ErrRate35SD="0.000" ErrRate75="0.00" ErrRate75SD="0.000" ErrRate100="0.00" ErrRate100SD="0.000" FirstCycleIntPF="6221" FirstCycleIntPFSD="675.5" PrcIntensityAfter20CyclesPF="76.9" PrcIntensityAfter20CyclesPFSD="4.87" /><Lane key="7" TileCount="48" ClustersRaw="1854131" ClustersRawSD="429053.2" ClustersPF="1585131" ClustersPFSD="693768.5" PrcPFClusters="85.0" PrcPFClustersSD="30.78" Phasing="0.133" Prephasing="0.241" CalledCyclesMin="0" CalledCyclesMax="0" PrcAlign="0.00" PrcAlignSD="0.000" ErrRatePhiX="0.00" ErrRatePhiXSD="0.000" ErrRate35="0.00" ErrRate35SD="0.000" ErrRate75="0.00" ErrRate75SD="0.000" ErrRate100="0.00" ErrRate100SD="0.000" FirstCycleIntPF="6584" FirstCycleIntPFSD="455.9" PrcIntensityAfter20CyclesPF="109.1" PrcIntensityAfter20CyclesPFSD="4.78" /><Lane key="8" TileCount="48" ClustersRaw="4777517" ClustersRawSD="592904.0" ClustersPF="4113021" ClustersPFSD="439623.7" PrcPFClusters="86.5" PrcPFClustersSD="7.36" Phasing="0.219" Prephasing="0.235" CalledCyclesMin="0" CalledCyclesMax="0" PrcAlign="0.00" PrcAlignSD="0.000" ErrRatePhiX="0.00" ErrRatePhiXSD="0.000" ErrRate35="0.00" ErrRate35SD="0.000" ErrRate75="0.00" ErrRate75SD="0.000" ErrRate100="0.00" ErrRate100SD="0.000" FirstCycleIntPF="6314" FirstCycleIntPFSD="760.7" PrcIntensityAfter20CyclesPF="37.3" PrcIntensityAfter20CyclesPFSD="9.19" /></Summary>
\ No newline at end of file
diff --git a/htsworkflow/pipelines/test/testdata/1_12/reports/Summary/read2.xml b/htsworkflow/pipelines/test/testdata/1_12/reports/Summary/read2.xml
new file mode 100755 (executable)
index 0000000..97b691e
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><!--Illumina RTA Data--><Summary Read="2" ReadType=" (Index)" densityRatio="0.173619792"><Lane key="1" TileCount="48" ClustersRaw="3878755" ClustersRawSD="579626.0" ClustersPF="1040253" ClustersPFSD="1059982.5" PrcPFClusters="27.8" PrcPFClustersSD="27.72" Phasing="0.000" Prephasing="0.000" CalledCyclesMin="0" CalledCyclesMax="0" PrcAlign="0.00" PrcAlignSD="0.000" ErrRatePhiX="0.00" ErrRatePhiXSD="0.000" ErrRate35="0.00" ErrRate35SD="0.000" ErrRate75="0.00" ErrRate75SD="0.000" ErrRate100="0.00" ErrRate100SD="0.000" FirstCycleIntPF="991" FirstCycleIntPFSD="2165.9" PrcIntensityAfter20CyclesPF="0.0" PrcIntensityAfter20CyclesPFSD="0.00" /><Lane key="2" TileCount="48" ClustersRaw="3920639" ClustersRawSD="1027332.4" ClustersPF="474380" ClustersPFSD="739312.7" PrcPFClusters="13.4" PrcPFClustersSD="17.58" Phasing="0.000" Prephasing="0.000" CalledCyclesMin="0" CalledCyclesMax="0" PrcAlign="0.00" PrcAlignSD="0.000" ErrRatePhiX="0.00" ErrRatePhiXSD="0.000" ErrRate35="0.00" ErrRate35SD="0.000" ErrRate75="0.00" ErrRate75SD="0.000" ErrRate100="0.00" ErrRate100SD="0.000" FirstCycleIntPF="925" FirstCycleIntPFSD="2096.4" PrcIntensityAfter20CyclesPF="0.0" PrcIntensityAfter20CyclesPFSD="0.00" /><Lane key="3" TileCount="48" ClustersRaw="5713049" ClustersRawSD="876187.3" ClustersPF="376501" ClustersPFSD="895452.3" PrcPFClusters="6.0" PrcPFClustersSD="14.30" Phasing="0.000" Prephasing="0.000" CalledCyclesMin="0" CalledCyclesMax="0" PrcAlign="0.00" PrcAlignSD="0.000" ErrRatePhiX="0.00" ErrRatePhiXSD="0.000" ErrRate35="0.00" ErrRate35SD="0.000" ErrRate75="0.00" ErrRate75SD="0.000" ErrRate100="0.00" ErrRate100SD="0.000" FirstCycleIntPF="1181" FirstCycleIntPFSD="1800.6" PrcIntensityAfter20CyclesPF="0.0" PrcIntensityAfter20CyclesPFSD="0.00" /><Lane key="4" TileCount="48" ClustersRaw="5852907" ClustersRawSD="538640.6" ClustersPF="329831" ClustersPFSD="758370.9" PrcPFClusters="5.4" PrcPFClustersSD="12.52" Phasing="0.000" Prephasing="0.000" CalledCyclesMin="0" CalledCyclesMax="0" PrcAlign="0.00" PrcAlignSD="0.000" ErrRatePhiX="0.00" ErrRatePhiXSD="0.000" ErrRate35="0.00" ErrRate35SD="0.000" ErrRate75="0.00" ErrRate75SD="0.000" ErrRate100="0.00" ErrRate100SD="0.000" FirstCycleIntPF="483" FirstCycleIntPFSD="1007.8" PrcIntensityAfter20CyclesPF="0.0" PrcIntensityAfter20CyclesPFSD="0.00" /><Lane key="5" TileCount="48" ClustersRaw="4006751" ClustersRawSD="1265247.4" ClustersPF="52186" ClustersPFSD="233275.6" PrcPFClusters="0.9" PrcPFClustersSD="4.22" Phasing="0.000" Prephasing="0.000" CalledCyclesMin="0" CalledCyclesMax="0" PrcAlign="0.00" PrcAlignSD="0.000" ErrRatePhiX="0.00" ErrRatePhiXSD="0.000" ErrRate35="0.00" ErrRate35SD="0.000" ErrRate75="0.00" ErrRate75SD="0.000" ErrRate100="0.00" ErrRate100SD="0.000" FirstCycleIntPF="1592" FirstCycleIntPFSD="1930.7" PrcIntensityAfter20CyclesPF="0.0" PrcIntensityAfter20CyclesPFSD="0.00" /><Lane key="6" TileCount="48" ClustersRaw="5678021" ClustersRawSD="627070.7" ClustersPF="1490900" ClustersPFSD="1624380.0" PrcPFClusters="25.5" PrcPFClustersSD="26.81" Phasing="0.000" Prephasing="0.000" CalledCyclesMin="0" CalledCyclesMax="0" PrcAlign="0.00" PrcAlignSD="0.000" ErrRatePhiX="0.00" ErrRatePhiXSD="0.000" ErrRate35="0.00" ErrRate35SD="0.000" ErrRate75="0.00" ErrRate75SD="0.000" ErrRate100="0.00" ErrRate100SD="0.000" FirstCycleIntPF="2308" FirstCycleIntPFSD="2746.0" PrcIntensityAfter20CyclesPF="0.0" PrcIntensityAfter20CyclesPFSD="0.00" /><Lane key="7" TileCount="48" ClustersRaw="1854131" ClustersRawSD="429053.2" ClustersPF="1585131" ClustersPFSD="693768.5" PrcPFClusters="85.0" PrcPFClustersSD="30.78" Phasing="0.000" Prephasing="0.000" CalledCyclesMin="0" CalledCyclesMax="0" PrcAlign="0.00" PrcAlignSD="0.000" ErrRatePhiX="0.00" ErrRatePhiXSD="0.000" ErrRate35="0.00" ErrRate35SD="0.000" ErrRate75="0.00" ErrRate75SD="0.000" ErrRate100="0.00" ErrRate100SD="0.000" FirstCycleIntPF="5761" FirstCycleIntPFSD="3328.6" PrcIntensityAfter20CyclesPF="0.0" PrcIntensityAfter20CyclesPFSD="0.00" /><Lane key="8" TileCount="48" ClustersRaw="4777517" ClustersRawSD="592904.0" ClustersPF="4113021" ClustersPFSD="439623.7" PrcPFClusters="86.5" PrcPFClustersSD="7.36" Phasing="0.000" Prephasing="0.000" CalledCyclesMin="0" CalledCyclesMax="0" PrcAlign="0.00" PrcAlignSD="0.000" ErrRatePhiX="0.00" ErrRatePhiXSD="0.000" ErrRate35="0.00" ErrRate35SD="0.000" ErrRate75="0.00" ErrRate75SD="0.000" ErrRate100="0.00" ErrRate100SD="0.000" FirstCycleIntPF="2791" FirstCycleIntPFSD="3369.4" PrcIntensityAfter20CyclesPF="0.0" PrcIntensityAfter20CyclesPFSD="0.00" /></Summary>
\ No newline at end of file
diff --git a/htsworkflow/pipelines/test/testdata/1_12/rta_basecalls_config_1.12.4.2.xml b/htsworkflow/pipelines/test/testdata/1_12/rta_basecalls_config_1.12.4.2.xml
new file mode 100755 (executable)
index 0000000..9da5d01
--- /dev/null
@@ -0,0 +1,511 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<BaseCallAnalysis xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">\r
+  <Run Name="BaseCalls">\r
+    <BaseCallParameters>\r
+      <ChastityThreshold>0.6</ChastityThreshold>\r
+      <Matrix Path="">\r
+        <AutoFlag>2</AutoFlag>\r
+        <AutoLane>0</AutoLane>\r
+        <Cycle>1</Cycle>\r
+        <CycleOffset>0</CycleOffset>\r
+        <FirstCycle>1</FirstCycle>\r
+        <LastCycle>50</LastCycle>\r
+        <Read>1</Read>\r
+      </Matrix>\r
+      <Matrix Path="">\r
+        <AutoFlag>2</AutoFlag>\r
+        <AutoLane>0</AutoLane>\r
+        <Cycle>51</Cycle>\r
+        <CycleOffset>0</CycleOffset>\r
+        <FirstCycle>51</FirstCycle>\r
+        <LastCycle>57</LastCycle>\r
+        <Read>2</Read>\r
+      </Matrix>\r
+      <Phasing Path="">\r
+        <AutoFlag>2</AutoFlag>\r
+        <AutoLane>0</AutoLane>\r
+        <Cycle>2</Cycle>\r
+        <CycleOffset>1</CycleOffset>\r
+        <FirstCycle>1</FirstCycle>\r
+        <LastCycle>50</LastCycle>\r
+        <Read>1</Read>\r
+        <PhasingRate>0</PhasingRate>\r
+        <PrephasingRate>0</PrephasingRate>\r
+      </Phasing>\r
+      <Phasing Path="">\r
+        <AutoFlag>2</AutoFlag>\r
+        <AutoLane>0</AutoLane>\r
+        <Cycle>52</Cycle>\r
+        <CycleOffset>1</CycleOffset>\r
+        <FirstCycle>51</FirstCycle>\r
+        <LastCycle>57</LastCycle>\r
+        <Read>2</Read>\r
+        <PhasingRate>0</PhasingRate>\r
+        <PrephasingRate>0</PrephasingRate>\r
+      </Phasing>\r
+      <PureBases>0</PureBases>\r
+      <SmtFilter>failed-chastity</SmtFilter>\r
+      <SmtRelation>le</SmtRelation>\r
+      <SmtThreshold>1.0</SmtThreshold>\r
+    </BaseCallParameters>\r
+    <Cycles First="1" Last="57" Number="57" />\r
+    <Input />\r
+    <RunParameters>\r
+      <AutoCycleFlag>0</AutoCycleFlag>\r
+      <BasecallFlag>0</BasecallFlag>\r
+      <Deblocked>0</Deblocked>\r
+      <DebugFlag>0</DebugFlag>\r
+      <FirstRunOnlyFlag>0</FirstRunOnlyFlag>\r
+      <ImagingReads Index="1">\r
+        <FirstCycle>1</FirstCycle>\r
+        <LastCycle>50</LastCycle>\r
+      </ImagingReads>\r
+      <ImagingReads Index="2">\r
+        <FirstCycle>51</FirstCycle>\r
+        <LastCycle>57</LastCycle>\r
+        <RunFolder>110815_SN787_0101_AD07K6ACXX</RunFolder>\r
+      </ImagingReads>\r
+      <Instrument>HWI-ST0787</Instrument>\r
+      <IterativeMatrixFlag>0</IterativeMatrixFlag>\r
+      <MakeFlag>0</MakeFlag>\r
+      <MaxCycle>0</MaxCycle>\r
+      <MinCycle>0</MinCycle>\r
+      <Reads Index="1">\r
+        <FirstCycle>1</FirstCycle>\r
+        <LastCycle>50</LastCycle>\r
+      </Reads>\r
+      <Reads Index="2">\r
+        <FirstCycle>51</FirstCycle>\r
+        <LastCycle>57</LastCycle>\r
+        <RunFolder>110815_SN787_0101_AD07K6ACXX</RunFolder>\r
+      </Reads>\r
+      <RunFolder>110815_SN787_0101_AD07K6ACXX</RunFolder>\r
+      <RunFolderDate>110815</RunFolderDate>\r
+      <RunFolderId>0101</RunFolderId>\r
+      <RunFlowcellId>D07K6ACXX</RunFlowcellId>\r
+      <Barcode>\r
+        <Cycle Use="true">51</Cycle>\r
+        <Cycle Use="true">52</Cycle>\r
+        <Cycle Use="true">53</Cycle>\r
+        <Cycle Use="true">54</Cycle>\r
+        <Cycle Use="true">55</Cycle>\r
+        <Cycle Use="true">56</Cycle>\r
+        <Cycle Use="true">57</Cycle>\r
+      </Barcode>\r
+      <QTableVersion>New6</QTableVersion>\r
+    </RunParameters>\r
+    <Software Name="RTA" Version="1.12.4.2" />\r
+    <TileSelection>\r
+      <Lane Index="1">\r
+        <Sample>s</Sample>\r
+        <Tile>1102</Tile>\r
+        <Tile>1101</Tile>\r
+        <Tile>1103</Tile>\r
+        <Tile>1106</Tile>\r
+        <Tile>1104</Tile>\r
+        <Tile>1105</Tile>\r
+        <Tile>1108</Tile>\r
+        <Tile>1107</Tile>\r
+        <Tile>1202</Tile>\r
+        <Tile>1201</Tile>\r
+        <Tile>1206</Tile>\r
+        <Tile>1204</Tile>\r
+        <Tile>1203</Tile>\r
+        <Tile>1205</Tile>\r
+        <Tile>1302</Tile>\r
+        <Tile>1208</Tile>\r
+        <Tile>1207</Tile>\r
+        <Tile>1301</Tile>\r
+        <Tile>1306</Tile>\r
+        <Tile>1304</Tile>\r
+        <Tile>1305</Tile>\r
+        <Tile>2102</Tile>\r
+        <Tile>1303</Tile>\r
+        <Tile>1308</Tile>\r
+        <Tile>2101</Tile>\r
+        <Tile>1307</Tile>\r
+        <Tile>2106</Tile>\r
+        <Tile>2104</Tile>\r
+        <Tile>2105</Tile>\r
+        <Tile>2103</Tile>\r
+        <Tile>2202</Tile>\r
+        <Tile>2108</Tile>\r
+        <Tile>2201</Tile>\r
+        <Tile>2206</Tile>\r
+        <Tile>2107</Tile>\r
+        <Tile>2205</Tile>\r
+        <Tile>2204</Tile>\r
+        <Tile>2203</Tile>\r
+        <Tile>2302</Tile>\r
+        <Tile>2301</Tile>\r
+        <Tile>2208</Tile>\r
+        <Tile>2306</Tile>\r
+        <Tile>2207</Tile>\r
+        <Tile>2305</Tile>\r
+        <Tile>2303</Tile>\r
+        <Tile>2304</Tile>\r
+        <Tile>2308</Tile>\r
+        <Tile>2307</Tile>\r
+      </Lane>\r
+      <Lane Index="2">\r
+        <Sample>s</Sample>\r
+        <Tile>1101</Tile>\r
+        <Tile>1102</Tile>\r
+        <Tile>1105</Tile>\r
+        <Tile>1106</Tile>\r
+        <Tile>1104</Tile>\r
+        <Tile>1103</Tile>\r
+        <Tile>1201</Tile>\r
+        <Tile>1202</Tile>\r
+        <Tile>1108</Tile>\r
+        <Tile>1206</Tile>\r
+        <Tile>1107</Tile>\r
+        <Tile>1205</Tile>\r
+        <Tile>1302</Tile>\r
+        <Tile>1204</Tile>\r
+        <Tile>1301</Tile>\r
+        <Tile>1203</Tile>\r
+        <Tile>1208</Tile>\r
+        <Tile>1306</Tile>\r
+        <Tile>1305</Tile>\r
+        <Tile>1207</Tile>\r
+        <Tile>1304</Tile>\r
+        <Tile>2101</Tile>\r
+        <Tile>2102</Tile>\r
+        <Tile>1308</Tile>\r
+        <Tile>2105</Tile>\r
+        <Tile>1303</Tile>\r
+        <Tile>2201</Tile>\r
+        <Tile>2106</Tile>\r
+        <Tile>2104</Tile>\r
+        <Tile>1307</Tile>\r
+        <Tile>2205</Tile>\r
+        <Tile>2202</Tile>\r
+        <Tile>2108</Tile>\r
+        <Tile>2206</Tile>\r
+        <Tile>2103</Tile>\r
+        <Tile>2301</Tile>\r
+        <Tile>2204</Tile>\r
+        <Tile>2208</Tile>\r
+        <Tile>2107</Tile>\r
+        <Tile>2302</Tile>\r
+        <Tile>2305</Tile>\r
+        <Tile>2304</Tile>\r
+        <Tile>2203</Tile>\r
+        <Tile>2306</Tile>\r
+        <Tile>2308</Tile>\r
+        <Tile>2207</Tile>\r
+        <Tile>2303</Tile>\r
+        <Tile>2307</Tile>\r
+      </Lane>\r
+      <Lane Index="3">\r
+        <Sample>s</Sample>\r
+        <Tile>1101</Tile>\r
+        <Tile>1102</Tile>\r
+        <Tile>1105</Tile>\r
+        <Tile>1104</Tile>\r
+        <Tile>1108</Tile>\r
+        <Tile>1106</Tile>\r
+        <Tile>1201</Tile>\r
+        <Tile>1103</Tile>\r
+        <Tile>1204</Tile>\r
+        <Tile>1202</Tile>\r
+        <Tile>1205</Tile>\r
+        <Tile>1107</Tile>\r
+        <Tile>1208</Tile>\r
+        <Tile>1206</Tile>\r
+        <Tile>1301</Tile>\r
+        <Tile>1304</Tile>\r
+        <Tile>1203</Tile>\r
+        <Tile>1302</Tile>\r
+        <Tile>1308</Tile>\r
+        <Tile>1305</Tile>\r
+        <Tile>1207</Tile>\r
+        <Tile>2101</Tile>\r
+        <Tile>2104</Tile>\r
+        <Tile>1306</Tile>\r
+        <Tile>1303</Tile>\r
+        <Tile>2102</Tile>\r
+        <Tile>2105</Tile>\r
+        <Tile>2108</Tile>\r
+        <Tile>1307</Tile>\r
+        <Tile>2106</Tile>\r
+        <Tile>2204</Tile>\r
+        <Tile>2201</Tile>\r
+        <Tile>2103</Tile>\r
+        <Tile>2208</Tile>\r
+        <Tile>2202</Tile>\r
+        <Tile>2107</Tile>\r
+        <Tile>2205</Tile>\r
+        <Tile>2301</Tile>\r
+        <Tile>2304</Tile>\r
+        <Tile>2203</Tile>\r
+        <Tile>2206</Tile>\r
+        <Tile>2207</Tile>\r
+        <Tile>2305</Tile>\r
+        <Tile>2308</Tile>\r
+        <Tile>2302</Tile>\r
+        <Tile>2303</Tile>\r
+        <Tile>2307</Tile>\r
+        <Tile>2306</Tile>\r
+      </Lane>\r
+      <Lane Index="4">\r
+        <Sample>s</Sample>\r
+        <Tile>1101</Tile>\r
+        <Tile>1104</Tile>\r
+        <Tile>1103</Tile>\r
+        <Tile>1102</Tile>\r
+        <Tile>1108</Tile>\r
+        <Tile>1105</Tile>\r
+        <Tile>1107</Tile>\r
+        <Tile>1106</Tile>\r
+        <Tile>1204</Tile>\r
+        <Tile>1201</Tile>\r
+        <Tile>1203</Tile>\r
+        <Tile>1202</Tile>\r
+        <Tile>1208</Tile>\r
+        <Tile>1205</Tile>\r
+        <Tile>1207</Tile>\r
+        <Tile>1206</Tile>\r
+        <Tile>1304</Tile>\r
+        <Tile>1301</Tile>\r
+        <Tile>1302</Tile>\r
+        <Tile>1308</Tile>\r
+        <Tile>1303</Tile>\r
+        <Tile>1305</Tile>\r
+        <Tile>1306</Tile>\r
+        <Tile>1307</Tile>\r
+        <Tile>2104</Tile>\r
+        <Tile>2101</Tile>\r
+        <Tile>2108</Tile>\r
+        <Tile>2102</Tile>\r
+        <Tile>2103</Tile>\r
+        <Tile>2105</Tile>\r
+        <Tile>2204</Tile>\r
+        <Tile>2106</Tile>\r
+        <Tile>2107</Tile>\r
+        <Tile>2201</Tile>\r
+        <Tile>2208</Tile>\r
+        <Tile>2202</Tile>\r
+        <Tile>2203</Tile>\r
+        <Tile>2304</Tile>\r
+        <Tile>2205</Tile>\r
+        <Tile>2206</Tile>\r
+        <Tile>2207</Tile>\r
+        <Tile>2308</Tile>\r
+        <Tile>2301</Tile>\r
+        <Tile>2302</Tile>\r
+        <Tile>2303</Tile>\r
+        <Tile>2305</Tile>\r
+        <Tile>2307</Tile>\r
+        <Tile>2306</Tile>\r
+      </Lane>\r
+      <Lane Index="5">\r
+        <Sample>s</Sample>\r
+        <Tile>1104</Tile>\r
+        <Tile>1108</Tile>\r
+        <Tile>1101</Tile>\r
+        <Tile>1204</Tile>\r
+        <Tile>1102</Tile>\r
+        <Tile>1103</Tile>\r
+        <Tile>1106</Tile>\r
+        <Tile>1105</Tile>\r
+        <Tile>1107</Tile>\r
+        <Tile>1208</Tile>\r
+        <Tile>1201</Tile>\r
+        <Tile>1202</Tile>\r
+        <Tile>1203</Tile>\r
+        <Tile>1304</Tile>\r
+        <Tile>1205</Tile>\r
+        <Tile>1206</Tile>\r
+        <Tile>1301</Tile>\r
+        <Tile>1308</Tile>\r
+        <Tile>1207</Tile>\r
+        <Tile>1302</Tile>\r
+        <Tile>2104</Tile>\r
+        <Tile>1303</Tile>\r
+        <Tile>1305</Tile>\r
+        <Tile>1306</Tile>\r
+        <Tile>2101</Tile>\r
+        <Tile>2102</Tile>\r
+        <Tile>1307</Tile>\r
+        <Tile>2108</Tile>\r
+        <Tile>2204</Tile>\r
+        <Tile>2103</Tile>\r
+        <Tile>2105</Tile>\r
+        <Tile>2107</Tile>\r
+        <Tile>2106</Tile>\r
+        <Tile>2201</Tile>\r
+        <Tile>2208</Tile>\r
+        <Tile>2203</Tile>\r
+        <Tile>2202</Tile>\r
+        <Tile>2304</Tile>\r
+        <Tile>2206</Tile>\r
+        <Tile>2205</Tile>\r
+        <Tile>2207</Tile>\r
+        <Tile>2302</Tile>\r
+        <Tile>2301</Tile>\r
+        <Tile>2303</Tile>\r
+        <Tile>2308</Tile>\r
+        <Tile>2305</Tile>\r
+        <Tile>2307</Tile>\r
+        <Tile>2306</Tile>\r
+      </Lane>\r
+      <Lane Index="6">\r
+        <Sample>s</Sample>\r
+        <Tile>1104</Tile>\r
+        <Tile>1101</Tile>\r
+        <Tile>1103</Tile>\r
+        <Tile>1102</Tile>\r
+        <Tile>1108</Tile>\r
+        <Tile>1107</Tile>\r
+        <Tile>1105</Tile>\r
+        <Tile>1106</Tile>\r
+        <Tile>1204</Tile>\r
+        <Tile>1203</Tile>\r
+        <Tile>1201</Tile>\r
+        <Tile>1202</Tile>\r
+        <Tile>1208</Tile>\r
+        <Tile>1207</Tile>\r
+        <Tile>1205</Tile>\r
+        <Tile>1206</Tile>\r
+        <Tile>1304</Tile>\r
+        <Tile>1303</Tile>\r
+        <Tile>1301</Tile>\r
+        <Tile>1302</Tile>\r
+        <Tile>1308</Tile>\r
+        <Tile>1307</Tile>\r
+        <Tile>1305</Tile>\r
+        <Tile>2104</Tile>\r
+        <Tile>1306</Tile>\r
+        <Tile>2103</Tile>\r
+        <Tile>2101</Tile>\r
+        <Tile>2102</Tile>\r
+        <Tile>2108</Tile>\r
+        <Tile>2107</Tile>\r
+        <Tile>2105</Tile>\r
+        <Tile>2106</Tile>\r
+        <Tile>2204</Tile>\r
+        <Tile>2203</Tile>\r
+        <Tile>2202</Tile>\r
+        <Tile>2201</Tile>\r
+        <Tile>2208</Tile>\r
+        <Tile>2207</Tile>\r
+        <Tile>2206</Tile>\r
+        <Tile>2205</Tile>\r
+        <Tile>2304</Tile>\r
+        <Tile>2303</Tile>\r
+        <Tile>2302</Tile>\r
+        <Tile>2301</Tile>\r
+        <Tile>2307</Tile>\r
+        <Tile>2308</Tile>\r
+        <Tile>2306</Tile>\r
+        <Tile>2305</Tile>\r
+      </Lane>\r
+      <Lane Index="7">\r
+        <Sample>s</Sample>\r
+        <Tile>1103</Tile>\r
+        <Tile>1107</Tile>\r
+        <Tile>1104</Tile>\r
+        <Tile>1108</Tile>\r
+        <Tile>1203</Tile>\r
+        <Tile>1101</Tile>\r
+        <Tile>1102</Tile>\r
+        <Tile>1204</Tile>\r
+        <Tile>1105</Tile>\r
+        <Tile>1207</Tile>\r
+        <Tile>1106</Tile>\r
+        <Tile>1208</Tile>\r
+        <Tile>1201</Tile>\r
+        <Tile>1202</Tile>\r
+        <Tile>1303</Tile>\r
+        <Tile>1205</Tile>\r
+        <Tile>1206</Tile>\r
+        <Tile>1307</Tile>\r
+        <Tile>1304</Tile>\r
+        <Tile>1301</Tile>\r
+        <Tile>1302</Tile>\r
+        <Tile>1305</Tile>\r
+        <Tile>1308</Tile>\r
+        <Tile>2103</Tile>\r
+        <Tile>1306</Tile>\r
+        <Tile>2101</Tile>\r
+        <Tile>2107</Tile>\r
+        <Tile>2104</Tile>\r
+        <Tile>2105</Tile>\r
+        <Tile>2102</Tile>\r
+        <Tile>2108</Tile>\r
+        <Tile>2203</Tile>\r
+        <Tile>2201</Tile>\r
+        <Tile>2106</Tile>\r
+        <Tile>2205</Tile>\r
+        <Tile>2207</Tile>\r
+        <Tile>2202</Tile>\r
+        <Tile>2204</Tile>\r
+        <Tile>2301</Tile>\r
+        <Tile>2303</Tile>\r
+        <Tile>2206</Tile>\r
+        <Tile>2208</Tile>\r
+        <Tile>2305</Tile>\r
+        <Tile>2307</Tile>\r
+        <Tile>2302</Tile>\r
+        <Tile>2304</Tile>\r
+        <Tile>2306</Tile>\r
+        <Tile>2308</Tile>\r
+      </Lane>\r
+      <Lane Index="8">\r
+        <Sample>s</Sample>\r
+        <Tile>1101</Tile>\r
+        <Tile>1103</Tile>\r
+        <Tile>1102</Tile>\r
+        <Tile>1105</Tile>\r
+        <Tile>1107</Tile>\r
+        <Tile>1104</Tile>\r
+        <Tile>1106</Tile>\r
+        <Tile>1201</Tile>\r
+        <Tile>1108</Tile>\r
+        <Tile>1203</Tile>\r
+        <Tile>1202</Tile>\r
+        <Tile>1205</Tile>\r
+        <Tile>1207</Tile>\r
+        <Tile>1204</Tile>\r
+        <Tile>1206</Tile>\r
+        <Tile>1301</Tile>\r
+        <Tile>1208</Tile>\r
+        <Tile>1303</Tile>\r
+        <Tile>1302</Tile>\r
+        <Tile>1305</Tile>\r
+        <Tile>1307</Tile>\r
+        <Tile>1304</Tile>\r
+        <Tile>1306</Tile>\r
+        <Tile>2101</Tile>\r
+        <Tile>1308</Tile>\r
+        <Tile>2103</Tile>\r
+        <Tile>2105</Tile>\r
+        <Tile>2102</Tile>\r
+        <Tile>2107</Tile>\r
+        <Tile>2106</Tile>\r
+        <Tile>2104</Tile>\r
+        <Tile>2201</Tile>\r
+        <Tile>2205</Tile>\r
+        <Tile>2202</Tile>\r
+        <Tile>2203</Tile>\r
+        <Tile>2108</Tile>\r
+        <Tile>2206</Tile>\r
+        <Tile>2301</Tile>\r
+        <Tile>2207</Tile>\r
+        <Tile>2204</Tile>\r
+        <Tile>2305</Tile>\r
+        <Tile>2302</Tile>\r
+        <Tile>2303</Tile>\r
+        <Tile>2208</Tile>\r
+        <Tile>2306</Tile>\r
+        <Tile>2307</Tile>\r
+        <Tile>2304</Tile>\r
+        <Tile>2308</Tile>\r
+      </Lane>\r
+    </TileSelection>\r
+    <Time />\r
+    <User />\r
+  </Run>\r
+</BaseCallAnalysis>
\ No newline at end of file
diff --git a/htsworkflow/pipelines/test/testdata/1_12/rta_intensities_config_1.12.4.2.xml b/htsworkflow/pipelines/test/testdata/1_12/rta_intensities_config_1.12.4.2.xml
new file mode 100755 (executable)
index 0000000..6d43157
--- /dev/null
@@ -0,0 +1,472 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<ImageAnalysis xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">\r
+  <Run Name="Intensities">\r
+    <Cycles First="1" Last="57" Number="57" />\r
+    <ImageParameters>\r
+      <AutoOffsetFlag>0</AutoOffsetFlag>\r
+      <AutoSizeFlag>0</AutoSizeFlag>\r
+      <Fwhm>0</Fwhm>\r
+      <RemappingDistance>0</RemappingDistance>\r
+      <Threshold>0</Threshold>\r
+    </ImageParameters>\r
+    <RunParameters>\r
+      <AutoCycleFlag>0</AutoCycleFlag>\r
+      <BasecallFlag>0</BasecallFlag>\r
+      <Deblocked>0</Deblocked>\r
+      <DebugFlag>0</DebugFlag>\r
+      <FirstRunOnlyFlag>0</FirstRunOnlyFlag>\r
+      <ImagingReads Index="1">\r
+        <FirstCycle>1</FirstCycle>\r
+        <LastCycle>50</LastCycle>\r
+        <RunFolder>110815_SN787_0101_AD07K6ACXX</RunFolder>\r
+      </ImagingReads>\r
+      <ImagingReads Index="2">\r
+        <FirstCycle>51</FirstCycle>\r
+        <LastCycle>57</LastCycle>\r
+        <RunFolder>110815_SN787_0101_AD07K6ACXX</RunFolder>\r
+      </ImagingReads>\r
+      <Instrument>HWI-ST0787</Instrument>\r
+      <IterativeMatrixFlag>0</IterativeMatrixFlag>\r
+      <MakeFlag>0</MakeFlag>\r
+      <MaxCycle>0</MaxCycle>\r
+      <MinCycle>0</MinCycle>\r
+      <Reads Index="1">\r
+        <FirstCycle>1</FirstCycle>\r
+        <LastCycle>50</LastCycle>\r
+        <RunFolder>110815_SN787_0101_AD07K6ACXX</RunFolder>\r
+      </Reads>\r
+      <Reads Index="2">\r
+        <FirstCycle>51</FirstCycle>\r
+        <LastCycle>57</LastCycle>\r
+        <RunFolder>110815_SN787_0101_AD07K6ACXX</RunFolder>\r
+      </Reads>\r
+      <RunFolder>110815_SN787_0101_AD07K6ACXX</RunFolder>\r
+      <RunFolderDate>110815</RunFolderDate>\r
+      <RunFolderId>0101</RunFolderId>\r
+      <RunFlowcellId>D07K6ACXX</RunFlowcellId>\r
+      <Barcode>\r
+        <Cycle Use="true">51</Cycle>\r
+        <Cycle Use="true">52</Cycle>\r
+        <Cycle Use="true">53</Cycle>\r
+        <Cycle Use="true">54</Cycle>\r
+        <Cycle Use="true">55</Cycle>\r
+        <Cycle Use="true">56</Cycle>\r
+        <Cycle Use="true">57</Cycle>\r
+      </Barcode>\r
+      <QTableVersion>New6</QTableVersion>\r
+    </RunParameters>\r
+    <Software Name="RTA" Version="1.12.4.2" />\r
+    <TileSelection>\r
+      <Lane Index="1">\r
+        <Sample>s</Sample>\r
+        <Tile>1101</Tile>\r
+        <Tile>1102</Tile>\r
+        <Tile>1104</Tile>\r
+        <Tile>1103</Tile>\r
+        <Tile>1106</Tile>\r
+        <Tile>1105</Tile>\r
+        <Tile>1108</Tile>\r
+        <Tile>1107</Tile>\r
+        <Tile>1201</Tile>\r
+        <Tile>1204</Tile>\r
+        <Tile>1202</Tile>\r
+        <Tile>1205</Tile>\r
+        <Tile>1206</Tile>\r
+        <Tile>1208</Tile>\r
+        <Tile>1301</Tile>\r
+        <Tile>1302</Tile>\r
+        <Tile>1304</Tile>\r
+        <Tile>1203</Tile>\r
+        <Tile>1305</Tile>\r
+        <Tile>1306</Tile>\r
+        <Tile>1308</Tile>\r
+        <Tile>2102</Tile>\r
+        <Tile>2101</Tile>\r
+        <Tile>1207</Tile>\r
+        <Tile>2105</Tile>\r
+        <Tile>2106</Tile>\r
+        <Tile>2104</Tile>\r
+        <Tile>1303</Tile>\r
+        <Tile>2201</Tile>\r
+        <Tile>2202</Tile>\r
+        <Tile>1307</Tile>\r
+        <Tile>2206</Tile>\r
+        <Tile>2205</Tile>\r
+        <Tile>2108</Tile>\r
+        <Tile>2302</Tile>\r
+        <Tile>2103</Tile>\r
+        <Tile>2301</Tile>\r
+        <Tile>2204</Tile>\r
+        <Tile>2305</Tile>\r
+        <Tile>2107</Tile>\r
+        <Tile>2203</Tile>\r
+        <Tile>2208</Tile>\r
+        <Tile>2306</Tile>\r
+        <Tile>2207</Tile>\r
+        <Tile>2304</Tile>\r
+        <Tile>2303</Tile>\r
+        <Tile>2308</Tile>\r
+        <Tile>2307</Tile>\r
+      </Lane>\r
+      <Lane Index="2">\r
+        <Sample>s</Sample>\r
+        <Tile>1101</Tile>\r
+        <Tile>1105</Tile>\r
+        <Tile>1102</Tile>\r
+        <Tile>1106</Tile>\r
+        <Tile>1201</Tile>\r
+        <Tile>1103</Tile>\r
+        <Tile>1104</Tile>\r
+        <Tile>1202</Tile>\r
+        <Tile>1205</Tile>\r
+        <Tile>1107</Tile>\r
+        <Tile>1206</Tile>\r
+        <Tile>1108</Tile>\r
+        <Tile>1203</Tile>\r
+        <Tile>1302</Tile>\r
+        <Tile>1204</Tile>\r
+        <Tile>1301</Tile>\r
+        <Tile>1208</Tile>\r
+        <Tile>1207</Tile>\r
+        <Tile>1305</Tile>\r
+        <Tile>1306</Tile>\r
+        <Tile>1304</Tile>\r
+        <Tile>2101</Tile>\r
+        <Tile>1303</Tile>\r
+        <Tile>2102</Tile>\r
+        <Tile>1308</Tile>\r
+        <Tile>2105</Tile>\r
+        <Tile>1307</Tile>\r
+        <Tile>2106</Tile>\r
+        <Tile>2201</Tile>\r
+        <Tile>2104</Tile>\r
+        <Tile>2103</Tile>\r
+        <Tile>2202</Tile>\r
+        <Tile>2205</Tile>\r
+        <Tile>2107</Tile>\r
+        <Tile>2108</Tile>\r
+        <Tile>2206</Tile>\r
+        <Tile>2301</Tile>\r
+        <Tile>2203</Tile>\r
+        <Tile>2204</Tile>\r
+        <Tile>2208</Tile>\r
+        <Tile>2207</Tile>\r
+        <Tile>2302</Tile>\r
+        <Tile>2305</Tile>\r
+        <Tile>2303</Tile>\r
+        <Tile>2304</Tile>\r
+        <Tile>2306</Tile>\r
+        <Tile>2307</Tile>\r
+        <Tile>2308</Tile>\r
+      </Lane>\r
+      <Lane Index="3">\r
+        <Sample>s</Sample>\r
+        <Tile>1101</Tile>\r
+        <Tile>1103</Tile>\r
+        <Tile>1102</Tile>\r
+        <Tile>1104</Tile>\r
+        <Tile>1105</Tile>\r
+        <Tile>1106</Tile>\r
+        <Tile>1107</Tile>\r
+        <Tile>1108</Tile>\r
+        <Tile>1201</Tile>\r
+        <Tile>1204</Tile>\r
+        <Tile>1202</Tile>\r
+        <Tile>1203</Tile>\r
+        <Tile>1205</Tile>\r
+        <Tile>1206</Tile>\r
+        <Tile>1207</Tile>\r
+        <Tile>1208</Tile>\r
+        <Tile>1302</Tile>\r
+        <Tile>1301</Tile>\r
+        <Tile>1303</Tile>\r
+        <Tile>1304</Tile>\r
+        <Tile>1306</Tile>\r
+        <Tile>1305</Tile>\r
+        <Tile>1308</Tile>\r
+        <Tile>2101</Tile>\r
+        <Tile>2102</Tile>\r
+        <Tile>2105</Tile>\r
+        <Tile>1307</Tile>\r
+        <Tile>2104</Tile>\r
+        <Tile>2106</Tile>\r
+        <Tile>2201</Tile>\r
+        <Tile>2108</Tile>\r
+        <Tile>2103</Tile>\r
+        <Tile>2107</Tile>\r
+        <Tile>2202</Tile>\r
+        <Tile>2205</Tile>\r
+        <Tile>2204</Tile>\r
+        <Tile>2301</Tile>\r
+        <Tile>2206</Tile>\r
+        <Tile>2305</Tile>\r
+        <Tile>2203</Tile>\r
+        <Tile>2208</Tile>\r
+        <Tile>2302</Tile>\r
+        <Tile>2207</Tile>\r
+        <Tile>2304</Tile>\r
+        <Tile>2306</Tile>\r
+        <Tile>2303</Tile>\r
+        <Tile>2308</Tile>\r
+        <Tile>2307</Tile>\r
+      </Lane>\r
+      <Lane Index="4">\r
+        <Sample>s</Sample>\r
+        <Tile>1101</Tile>\r
+        <Tile>1105</Tile>\r
+        <Tile>1201</Tile>\r
+        <Tile>1102</Tile>\r
+        <Tile>1106</Tile>\r
+        <Tile>1205</Tile>\r
+        <Tile>1104</Tile>\r
+        <Tile>1202</Tile>\r
+        <Tile>1103</Tile>\r
+        <Tile>1301</Tile>\r
+        <Tile>1206</Tile>\r
+        <Tile>1108</Tile>\r
+        <Tile>1107</Tile>\r
+        <Tile>1305</Tile>\r
+        <Tile>1302</Tile>\r
+        <Tile>2101</Tile>\r
+        <Tile>1203</Tile>\r
+        <Tile>1306</Tile>\r
+        <Tile>1204</Tile>\r
+        <Tile>1207</Tile>\r
+        <Tile>2102</Tile>\r
+        <Tile>1208</Tile>\r
+        <Tile>2105</Tile>\r
+        <Tile>1303</Tile>\r
+        <Tile>2106</Tile>\r
+        <Tile>1304</Tile>\r
+        <Tile>2201</Tile>\r
+        <Tile>1307</Tile>\r
+        <Tile>1308</Tile>\r
+        <Tile>2202</Tile>\r
+        <Tile>2103</Tile>\r
+        <Tile>2104</Tile>\r
+        <Tile>2205</Tile>\r
+        <Tile>2206</Tile>\r
+        <Tile>2302</Tile>\r
+        <Tile>2108</Tile>\r
+        <Tile>2301</Tile>\r
+        <Tile>2107</Tile>\r
+        <Tile>2305</Tile>\r
+        <Tile>2306</Tile>\r
+        <Tile>2204</Tile>\r
+        <Tile>2203</Tile>\r
+        <Tile>2208</Tile>\r
+        <Tile>2207</Tile>\r
+        <Tile>2303</Tile>\r
+        <Tile>2304</Tile>\r
+        <Tile>2308</Tile>\r
+        <Tile>2307</Tile>\r
+      </Lane>\r
+      <Lane Index="5">\r
+        <Sample>s</Sample>\r
+        <Tile>1102</Tile>\r
+        <Tile>1101</Tile>\r
+        <Tile>1106</Tile>\r
+        <Tile>1105</Tile>\r
+        <Tile>1202</Tile>\r
+        <Tile>1201</Tile>\r
+        <Tile>1205</Tile>\r
+        <Tile>1206</Tile>\r
+        <Tile>1301</Tile>\r
+        <Tile>1104</Tile>\r
+        <Tile>1302</Tile>\r
+        <Tile>1103</Tile>\r
+        <Tile>1108</Tile>\r
+        <Tile>1305</Tile>\r
+        <Tile>1306</Tile>\r
+        <Tile>1107</Tile>\r
+        <Tile>2102</Tile>\r
+        <Tile>1203</Tile>\r
+        <Tile>1204</Tile>\r
+        <Tile>2101</Tile>\r
+        <Tile>2106</Tile>\r
+        <Tile>1207</Tile>\r
+        <Tile>2202</Tile>\r
+        <Tile>1303</Tile>\r
+        <Tile>1208</Tile>\r
+        <Tile>2105</Tile>\r
+        <Tile>2201</Tile>\r
+        <Tile>1304</Tile>\r
+        <Tile>1307</Tile>\r
+        <Tile>2206</Tile>\r
+        <Tile>2103</Tile>\r
+        <Tile>2205</Tile>\r
+        <Tile>2302</Tile>\r
+        <Tile>2107</Tile>\r
+        <Tile>1308</Tile>\r
+        <Tile>2301</Tile>\r
+        <Tile>2203</Tile>\r
+        <Tile>2104</Tile>\r
+        <Tile>2305</Tile>\r
+        <Tile>2207</Tile>\r
+        <Tile>2108</Tile>\r
+        <Tile>2306</Tile>\r
+        <Tile>2303</Tile>\r
+        <Tile>2204</Tile>\r
+        <Tile>2307</Tile>\r
+        <Tile>2208</Tile>\r
+        <Tile>2304</Tile>\r
+        <Tile>2308</Tile>\r
+      </Lane>\r
+      <Lane Index="6">\r
+        <Sample>s</Sample>\r
+        <Tile>1101</Tile>\r
+        <Tile>1102</Tile>\r
+        <Tile>1103</Tile>\r
+        <Tile>1106</Tile>\r
+        <Tile>1105</Tile>\r
+        <Tile>1107</Tile>\r
+        <Tile>1202</Tile>\r
+        <Tile>1201</Tile>\r
+        <Tile>1203</Tile>\r
+        <Tile>1207</Tile>\r
+        <Tile>1205</Tile>\r
+        <Tile>1206</Tile>\r
+        <Tile>1301</Tile>\r
+        <Tile>1303</Tile>\r
+        <Tile>1302</Tile>\r
+        <Tile>1104</Tile>\r
+        <Tile>1305</Tile>\r
+        <Tile>1306</Tile>\r
+        <Tile>2101</Tile>\r
+        <Tile>1108</Tile>\r
+        <Tile>2102</Tile>\r
+        <Tile>1307</Tile>\r
+        <Tile>2103</Tile>\r
+        <Tile>2105</Tile>\r
+        <Tile>1204</Tile>\r
+        <Tile>2106</Tile>\r
+        <Tile>2107</Tile>\r
+        <Tile>2201</Tile>\r
+        <Tile>2202</Tile>\r
+        <Tile>1208</Tile>\r
+        <Tile>2203</Tile>\r
+        <Tile>2206</Tile>\r
+        <Tile>2205</Tile>\r
+        <Tile>1304</Tile>\r
+        <Tile>2302</Tile>\r
+        <Tile>2207</Tile>\r
+        <Tile>2301</Tile>\r
+        <Tile>1308</Tile>\r
+        <Tile>2306</Tile>\r
+        <Tile>2303</Tile>\r
+        <Tile>2305</Tile>\r
+        <Tile>2307</Tile>\r
+        <Tile>2104</Tile>\r
+        <Tile>2108</Tile>\r
+        <Tile>2204</Tile>\r
+        <Tile>2208</Tile>\r
+        <Tile>2304</Tile>\r
+        <Tile>2308</Tile>\r
+      </Lane>\r
+      <Lane Index="7">\r
+        <Sample>s</Sample>\r
+        <Tile>1102</Tile>\r
+        <Tile>1106</Tile>\r
+        <Tile>1101</Tile>\r
+        <Tile>1105</Tile>\r
+        <Tile>1202</Tile>\r
+        <Tile>1201</Tile>\r
+        <Tile>1206</Tile>\r
+        <Tile>1205</Tile>\r
+        <Tile>1103</Tile>\r
+        <Tile>1302</Tile>\r
+        <Tile>1301</Tile>\r
+        <Tile>1107</Tile>\r
+        <Tile>1306</Tile>\r
+        <Tile>1305</Tile>\r
+        <Tile>1203</Tile>\r
+        <Tile>2101</Tile>\r
+        <Tile>2102</Tile>\r
+        <Tile>2105</Tile>\r
+        <Tile>1207</Tile>\r
+        <Tile>2106</Tile>\r
+        <Tile>2201</Tile>\r
+        <Tile>2202</Tile>\r
+        <Tile>2205</Tile>\r
+        <Tile>1303</Tile>\r
+        <Tile>1307</Tile>\r
+        <Tile>2206</Tile>\r
+        <Tile>2301</Tile>\r
+        <Tile>2103</Tile>\r
+        <Tile>2305</Tile>\r
+        <Tile>2302</Tile>\r
+        <Tile>2107</Tile>\r
+        <Tile>2306</Tile>\r
+        <Tile>2203</Tile>\r
+        <Tile>2207</Tile>\r
+        <Tile>2303</Tile>\r
+        <Tile>2307</Tile>\r
+        <Tile>1104</Tile>\r
+        <Tile>1108</Tile>\r
+        <Tile>1204</Tile>\r
+        <Tile>1208</Tile>\r
+        <Tile>1304</Tile>\r
+        <Tile>1308</Tile>\r
+        <Tile>2104</Tile>\r
+        <Tile>2108</Tile>\r
+        <Tile>2204</Tile>\r
+        <Tile>2208</Tile>\r
+        <Tile>2304</Tile>\r
+        <Tile>2308</Tile>\r
+      </Lane>\r
+      <Lane Index="8">\r
+        <Sample>s</Sample>\r
+        <Tile>1101</Tile>\r
+        <Tile>1102</Tile>\r
+        <Tile>1105</Tile>\r
+        <Tile>1106</Tile>\r
+        <Tile>1201</Tile>\r
+        <Tile>1202</Tile>\r
+        <Tile>1103</Tile>\r
+        <Tile>1205</Tile>\r
+        <Tile>1206</Tile>\r
+        <Tile>1107</Tile>\r
+        <Tile>1301</Tile>\r
+        <Tile>1302</Tile>\r
+        <Tile>1203</Tile>\r
+        <Tile>1306</Tile>\r
+        <Tile>1305</Tile>\r
+        <Tile>1207</Tile>\r
+        <Tile>2101</Tile>\r
+        <Tile>1303</Tile>\r
+        <Tile>2102</Tile>\r
+        <Tile>1307</Tile>\r
+        <Tile>2105</Tile>\r
+        <Tile>2103</Tile>\r
+        <Tile>2106</Tile>\r
+        <Tile>2201</Tile>\r
+        <Tile>2107</Tile>\r
+        <Tile>2205</Tile>\r
+        <Tile>2202</Tile>\r
+        <Tile>2206</Tile>\r
+        <Tile>2203</Tile>\r
+        <Tile>2301</Tile>\r
+        <Tile>2305</Tile>\r
+        <Tile>2302</Tile>\r
+        <Tile>2306</Tile>\r
+        <Tile>1104</Tile>\r
+        <Tile>2207</Tile>\r
+        <Tile>1108</Tile>\r
+        <Tile>1204</Tile>\r
+        <Tile>2303</Tile>\r
+        <Tile>2307</Tile>\r
+        <Tile>1208</Tile>\r
+        <Tile>1304</Tile>\r
+        <Tile>1308</Tile>\r
+        <Tile>2104</Tile>\r
+        <Tile>2108</Tile>\r
+        <Tile>2204</Tile>\r
+        <Tile>2208</Tile>\r
+        <Tile>2304</Tile>\r
+        <Tile>2308</Tile>\r
+      </Lane>\r
+    </TileSelection>\r
+    <Time />\r
+    <User />\r
+  </Run>\r
+</ImageAnalysis>
\ No newline at end of file
diff --git a/htsworkflow/pipelines/test/testdata/aligned_config_1_12.xml b/htsworkflow/pipelines/test/testdata/aligned_config_1_12.xml
deleted file mode 100644 (file)
index 2b7f3af..0000000
+++ /dev/null
@@ -1,234 +0,0 @@
-<?xml version="1.0"?>
-<RunParameters>
-  <Barcodes>
-  </Barcodes>
-  <Defaults>
-    <ANALYSIS>none</ANALYSIS>
-    <CHROM_NAME_SOURCE>fileName</CHROM_NAME_SOURCE>
-    <CHROM_NAME_VALIDATION>on</CHROM_NAME_VALIDATION>
-    <CMDPREFIX></CMDPREFIX>
-    <DATASET_POST_RUN_COMMAND></DATASET_POST_RUN_COMMAND>
-    <ELAND_EXTENDED_MULTI_READS>off</ELAND_EXTENDED_MULTI_READS>
-    <ELAND_FASTQ_FILES_PER_PROCESS>3</ELAND_FASTQ_FILES_PER_PROCESS>
-    <ELAND_GENOME></ELAND_GENOME>
-    <ELAND_GENOME_MASK>*.fa</ELAND_GENOME_MASK>
-    <ELAND_MAX_MATCHES></ELAND_MAX_MATCHES>
-    <ELAND_PARAMS></ELAND_PARAMS>
-    <ELAND_REPEAT></ELAND_REPEAT>
-    <ELAND_RNA_GENE_MD_GROUP_LABEL></ELAND_RNA_GENE_MD_GROUP_LABEL>
-    <ELAND_RNA_GENOME_ANNOTATION></ELAND_RNA_GENOME_ANNOTATION>
-    <ELAND_RNA_GENOME_CONTAM></ELAND_RNA_GENOME_CONTAM>
-    <ELAND_RNA_GENOME_CONTAM_MASK>*.fa</ELAND_RNA_GENOME_CONTAM_MASK>
-    <ELAND_RNA_MULTI_READS>off</ELAND_RNA_MULTI_READS>
-    <ELAND_SEED_LENGTH1>32</ELAND_SEED_LENGTH1>
-    <ELAND_SEED_LENGTH2></ELAND_SEED_LENGTH2>
-    <EMAIL_DOMAIN>domain.com</EMAIL_DOMAIN>
-    <EMAIL_LIST>${logName}</EMAIL_LIST>
-    <EMAIL_SERVER>localhost:25</EMAIL_SERVER>
-    <EXPT_DIR>/mmjggl/nicodemus/data01/sequencer/110815_SN787_0101_AD07K6ACXX/Unaligned_1MM</EXPT_DIR>
-    <FLAT_TXT_GZ_SUFFIX>Flat.txt.gz</FLAT_TXT_GZ_SUFFIX>
-    <FLOWCELL>D07K6ACXX</FLOWCELL>
-    <GENE_MD_GZ_SUFFIX>_gene.md.gz</GENE_MD_GZ_SUFFIX>
-    <INCREASED_SENSITIVITY></INCREASED_SENSITIVITY>
-    <KAGU_PAIR_PARAMS>--muf 0</KAGU_PAIR_PARAMS>
-    <KAGU_PARAMS>--mmaq 4</KAGU_PARAMS>
-    <NUM_LEADING_DIRS_TO_STRIP>2</NUM_LEADING_DIRS_TO_STRIP>
-    <OA_SUFFIX>.oa</OA_SUFFIX>
-    <ORIGINAL_READS>1</ORIGINAL_READS>
-    <ORIGINAL_READ_LENGTH1>50</ORIGINAL_READ_LENGTH1>
-    <ORPHAN_ALIGNER_PARAMS>2</ORPHAN_ALIGNER_PARAMS>
-    <OUT_DIR>/mmjggl/nicodemus/data01/sequencer/110815_SN787_0101_AD07K6ACXX/Aligned_1MM</OUT_DIR>
-    <PAS_PARAMS></PAS_PARAMS>
-    <RAMM_REPORT_TYPE></RAMM_REPORT_TYPE>
-    <READS>1</READS>
-    <READ_LENGTH1>49</READ_LENGTH1>
-    <RNAQC_COUNT_CLUSTERS_CMD>$(WC) -l</RNAQC_COUNT_CLUSTERS_CMD>
-    <RNAQC_COUNT_CLUSTERS_NAME>totalClusters</RNAQC_COUNT_CLUSTERS_NAME>
-    <RNAQC_COUNT_GENOME_CMD>($(GREP) -cvE '^((NM|QC|RM|[0-9]+:[0-9]+:[0-9]+)$$|splice_sites)' || exit 0)</RNAQC_COUNT_GENOME_CMD>
-    <RNAQC_COUNT_GENOME_NAME>genomeUsable</RNAQC_COUNT_GENOME_NAME>
-    <RNAQC_COUNT_NM_CMD>($(FGREP) -wc NM || exit 0)</RNAQC_COUNT_NM_CMD>
-    <RNAQC_COUNT_NM_NAME>noMatch</RNAQC_COUNT_NM_NAME>
-    <RNAQC_COUNT_PF_CMD>$(WC) -l</RNAQC_COUNT_PF_CMD>
-    <RNAQC_COUNT_PF_NAME>PFClusters</RNAQC_COUNT_PF_NAME>
-    <RNAQC_COUNT_QC_CMD>($(FGREP) -wc QC || exit 0)</RNAQC_COUNT_QC_CMD>
-    <RNAQC_COUNT_QC_NAME>QC</RNAQC_COUNT_QC_NAME>
-    <RNAQC_COUNT_RM_CMD>($(FGREP) -wc RM || exit 0)</RNAQC_COUNT_RM_CMD>
-    <RNAQC_COUNT_RM_NAME>repeatMasked</RNAQC_COUNT_RM_NAME>
-    <RNAQC_COUNT_SPLICE_CMD>($(FGREP) -c splice_sites || exit 0)</RNAQC_COUNT_SPLICE_CMD>
-    <RNAQC_COUNT_SPLICE_NAME>spliceUsable</RNAQC_COUNT_SPLICE_NAME>
-    <RNAQC_COUNT_USABLE_CMD>$(CUT) -f13 |($(EGREP) [0-9] || exit 0)|$(WC) -l</RNAQC_COUNT_USABLE_CMD>
-    <RNAQC_COUNT_USABLE_NAME>usable</RNAQC_COUNT_USABLE_NAME>
-    <RNAQC_FIND_CONTAMS_CMD>($(GREP) -vE '^(NM|QC|RM|[0-9]+:[0-9]+:[0-9]+)$$' || exit 0)</RNAQC_FIND_CONTAMS_CMD>
-    <SAMTOOLS_GENOME></SAMTOOLS_GENOME>
-    <SEQGENEMD2REFFLAT_PARAMS></SEQGENEMD2REFFLAT_PARAMS>
-    <SINGLESEED></SINGLESEED>
-    <SPLCSTS_PARAMS>-v $(CASAVA_LOG_LEVEL)</SPLCSTS_PARAMS>
-    <SQUASH_GENOME_PARAMS></SQUASH_GENOME_PARAMS>
-    <UNGAPPED></UNGAPPED>
-    <USE_BASES>y*n</USE_BASES>
-    <USE_BASES1>yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyn</USE_BASES1>
-    <WEB_DIR_ROOT>http://host.domain.com/yourshare/</WEB_DIR_ROOT>
-    <WITH_ORPHAN_ALIGNER>true</WITH_ORPHAN_ALIGNER>
-  </Defaults>
-  <Lanes>
-    <Lane index="1">
-      <Barcodes></Barcodes>
-      <Defaults>
-        <ANALYSIS>eland_extended</ANALYSIS>
-        <CHROM_NAME_SOURCE>fileName</CHROM_NAME_SOURCE>
-        <ELAND_GENOME>/mmjggl/nicodemus/data01/genomes/elegans190/chromosomes/</ELAND_GENOME>
-        <ELAND_GENOME_MASK>*.fa</ELAND_GENOME_MASK>
-        <ELAND_SEED_LENGTH1>32</ELAND_SEED_LENGTH1>
-        <READS>1</READS>
-        <READ_LENGTH1>49</READ_LENGTH1>
-        <Tiles>1101 1102 1103 1104 1105 1106 1107 1108 1201 1202 1203 1204 1205 1206 1207 1208 1301 1302 1303 1304 1305 1306 1307 1308 2101 2102 2103 2104 2105 2106 2107 2108 2201 2202 2203 2204 2205 2206 2207 2208 2301 2302 2303 2304 2305 2306 2307 2308</Tiles>
-        <USE_BASES>Y*n</USE_BASES>
-        <USE_BASES1>yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyn</USE_BASES1>
-      </Defaults>
-      <Projects></Projects>
-      <References></References>
-      <Samples></Samples>
-    </Lane>
-    <Lane index="2">
-      <Barcodes></Barcodes>
-      <Defaults>
-        <ANALYSIS>eland_extended</ANALYSIS>
-        <CHROM_NAME_SOURCE>fileName</CHROM_NAME_SOURCE>
-        <ELAND_GENOME>/mmjggl/nicodemus/data01/genomes/elegans190/chromosomes/</ELAND_GENOME>
-        <ELAND_GENOME_MASK>*.fa</ELAND_GENOME_MASK>
-        <ELAND_SEED_LENGTH1>32</ELAND_SEED_LENGTH1>
-        <READS>1</READS>
-        <READ_LENGTH1>49</READ_LENGTH1>
-        <Tiles>1101 1102 1103 1104 1105 1106 1107 1108 1201 1202 1203 1204 1205 1206 1207 1208 1301 1302 1303 1304 1305 1306 1307 1308 2101 2102 2103 2104 2105 2106 2107 2108 2201 2202 2203 2204 2205 2206 2207 2208 2301 2302 2303 2304 2305 2306 2307 2308</Tiles>
-        <USE_BASES>Y*n</USE_BASES>
-        <USE_BASES1>yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyn</USE_BASES1>
-      </Defaults>
-      <Projects></Projects>
-      <References></References>
-      <Samples></Samples>
-    </Lane>
-    <Lane index="4">
-      <Barcodes></Barcodes>
-      <Defaults>
-        <ANALYSIS>eland_extended</ANALYSIS>
-        <CHROM_NAME_SOURCE>fileName</CHROM_NAME_SOURCE>
-        <ELAND_GENOME>/mmjggl/nicodemus/data01/genomes/hg18/chromosomes/</ELAND_GENOME>
-        <ELAND_GENOME_MASK>*.fa</ELAND_GENOME_MASK>
-        <ELAND_SEED_LENGTH1>32</ELAND_SEED_LENGTH1>
-        <READS>1</READS>
-        <READ_LENGTH1>49</READ_LENGTH1>
-        <Tiles>1101 1102 1103 1104 1105 1106 1107 1108 1201 1202 1203 1204 1205 1206 1207 1208 1301 1302 1303 1304 1305 1306 1307 1308 2101 2102 2103 2104 2105 2106 2107 2108 2201 2202 2203 2204 2205 2206 2207 2208 2301 2302 2303 2304 2305 2306 2307 2308</Tiles>
-        <USE_BASES>Y*n</USE_BASES>
-        <USE_BASES1>yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyn</USE_BASES1>
-      </Defaults>
-      <Projects></Projects>
-      <References></References>
-      <Samples></Samples>
-    </Lane>
-    <Lane index="5">
-      <Barcodes></Barcodes>
-      <Defaults>
-        <ANALYSIS>eland_extended</ANALYSIS>
-        <CHROM_NAME_SOURCE>fileName</CHROM_NAME_SOURCE>
-        <ELAND_GENOME>/mmjggl/nicodemus/data01/genomes/hg18/chromosomes/</ELAND_GENOME>
-        <ELAND_GENOME_MASK>*.fa</ELAND_GENOME_MASK>
-        <ELAND_SEED_LENGTH1>32</ELAND_SEED_LENGTH1>
-        <READS>1</READS>
-        <READ_LENGTH1>49</READ_LENGTH1>
-        <Tiles>1101 1102 1103 1104 1105 1106 1107 1108 1201 1202 1203 1204 1205 1206 1207 1208 1301 1302 1303 1304 1305 1306 1307 1308 2101 2102 2103 2104 2105 2106 2107 2108 2201 2202 2203 2204 2205 2206 2207 2208 2301 2302 2303 2304 2305 2306 2307 2308</Tiles>
-        <USE_BASES>Y*n</USE_BASES>
-        <USE_BASES1>yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyn</USE_BASES1>
-      </Defaults>
-      <Projects></Projects>
-      <References></References>
-      <Samples></Samples>
-    </Lane>
-    <Lane index="6">
-      <Barcodes></Barcodes>
-      <Defaults>
-        <ANALYSIS>eland_extended</ANALYSIS>
-        <CHROM_NAME_SOURCE>fileName</CHROM_NAME_SOURCE>
-        <ELAND_GENOME>/mmjggl/nicodemus/data01/genomes/hg18/chromosomes/</ELAND_GENOME>
-        <ELAND_GENOME_MASK>*.fa</ELAND_GENOME_MASK>
-        <ELAND_SEED_LENGTH1>32</ELAND_SEED_LENGTH1>
-        <READS>1</READS>
-        <READ_LENGTH1>49</READ_LENGTH1>
-        <Tiles>1101 1102 1103 1104 1105 1106 1107 1108 1201 1202 1203 1204 1205 1206 1207 1208 1301 1302 1303 1304 1305 1306 1307 1308 2101 2102 2103 2104 2105 2106 2107 2108 2201 2202 2203 2204 2205 2206 2207 2208 2301 2302 2303 2304 2305 2306 2307 2308</Tiles>
-        <USE_BASES>Y*n</USE_BASES>
-        <USE_BASES1>yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyn</USE_BASES1>
-      </Defaults>
-      <Projects></Projects>
-      <References></References>
-      <Samples></Samples>
-    </Lane>
-    <Lane index="7">
-      <Barcodes></Barcodes>
-      <Defaults>
-        <ANALYSIS>none</ANALYSIS>
-        <Tiles>1101 1102 1103 1104 1105 1106 1107 1108 1201 1202 1203 1204 1205 1206 1207 1208 1301 1302 1303 1304 1305 1306 1307 1308 2101 2102 2103 2104 2105 2106 2107 2108 2201 2202 2203 2204 2205 2206 2207 2208 2301 2302 2303 2304 2305 2306 2307 2308</Tiles>
-      </Defaults>
-      <Projects></Projects>
-      <References></References>
-      <Samples></Samples>
-    </Lane>
-    <Lane index="8">
-      <Barcodes></Barcodes>
-      <Defaults>
-        <ANALYSIS>none</ANALYSIS>
-        <Tiles>1101 1102 1103 1104 1105 1106 1107 1108 1201 1202 1203 1204 1205 1206 1207 1208 1301 1302 1303 1304 1305 1306 1307 1308 2101 2102 2103 2104 2105 2106 2107 2108 2201 2202 2203 2204 2205 2206 2207 2208 2301 2302 2303 2304 2305 2306 2307 2308</Tiles>
-      </Defaults>
-      <Projects></Projects>
-      <References></References>
-      <Samples></Samples>
-    </Lane>
-    <Lane index="3">
-      <Barcodes></Barcodes>
-      <Defaults>
-        <Tiles>1101 1102 1103 1104 1105 1106 1107 1108 1201 1202 1203 1204 1205 1206 1207 1208 1301 1302 1303 1304 1305 1306 1307 1308 2101 2102 2103 2104 2105 2106 2107 2108 2201 2202 2203 2204 2205 2206 2207 2208 2301 2302 2303 2304 2305 2306 2307 2308</Tiles>
-      </Defaults>
-      <Projects></Projects>
-      <References></References>
-      <Samples></Samples>
-    </Lane>
-  </Lanes>
-  <Projects>
-    <Project name="12383">
-      <ANALYSIS>eland_extended</ANALYSIS>
-      <CHROM_NAME_SOURCE>fileName</CHROM_NAME_SOURCE>
-      <ELAND_GENOME>/mmjggl/nicodemus/data01/genomes/hg18/chromosomes/</ELAND_GENOME>
-      <ELAND_GENOME_MASK>*.fa</ELAND_GENOME_MASK>
-      <ELAND_SEED_LENGTH1>32</ELAND_SEED_LENGTH1>
-      <READS>1</READS>
-      <READ_LENGTH1>49</READ_LENGTH1>
-      <USE_BASES>Y*n</USE_BASES>
-      <USE_BASES1>yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyn</USE_BASES1>
-    </Project>
-    <Project name="Undetermined_indices">
-      <ANALYSIS>none</ANALYSIS>
-    </Project>
-  </Projects>
-  <References>
-    <Reference name="mm9">
-      <ANALYSIS>eland_extended</ANALYSIS>
-      <CHROM_NAME_SOURCE>fileName</CHROM_NAME_SOURCE>
-      <ELAND_GENOME>/mmjggl/nicodemus/data01/genomes/mm9/chromosomes/</ELAND_GENOME>
-      <ELAND_GENOME_MASK>*.fa</ELAND_GENOME_MASK>
-      <ELAND_SEED_LENGTH1>32</ELAND_SEED_LENGTH1>
-      <READS>1</READS>
-      <READ_LENGTH1>49</READ_LENGTH1>
-      <USE_BASES>Y*n</USE_BASES>
-      <USE_BASES1>yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyn</USE_BASES1>
-    </Reference>
-  </References>
-  <Samples>
-  </Samples>
-  <Software CmdAndArgs="/mmjggl/nicodemus/data01/casava-v1.8.1/bin/configureAlignment.pl config.txt --EXPT_DIR /mmjggl/nicodemus/data01/sequencer/110815_SN787_0101_AD07K6ACXX/Unaligned_1MM/ --OUT_DIR /mmjggl/nicodemus/data01/sequencer/110815_SN787_0101_AD07K6ACXX/Aligned_1MM -make" Name="configureAlignment.pl" Version="CASAVA-1.8.1">
-    <Software CmdAndArgs="/mmjggl/nicodemus/data01/casava-v1.8.1/bin/configureBclToFastq.pl --input-dir Data/Intensities/BaseCalls/ --output-dir Unaligned_1MM --sample-sheet Data/Intensities/BaseCalls/SampleSheet.csv --mismatches 1" Name="configureBclToFastq.pl" Version="CASAVA-1.8.1">
-      <Software Name="RTA" Version="1.12.4.2">
-        <Software Name="RTA" Version="1.12.4.2">
-          <Software Name="HiSeq Control Software" Platform="HiSeq" Version="1.4.8" />
-        </Software>
-      </Software>
-    </Software>
-  </Software>
-</RunParameters>
diff --git a/htsworkflow/pipelines/test/testdata/demultiplex_1.12.4.2.xml b/htsworkflow/pipelines/test/testdata/demultiplex_1.12.4.2.xml
deleted file mode 100644 (file)
index e7ee38d..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-<DemultiplexConfig>
-  <Software Version="CASAVA-1.8.1" CmdAndArgs="/mmjggl/nicodemus/data01/casava-v1.8.1/bin/configureBclToFastq.pl --input-dir Data/Intensities/BaseCalls/ --output-dir Unaligned --sample-sheet Data/Intensities/BaseCalls/SampleSheet.csv" Name="configureBclToFastq.pl">
-    <Software Version="1.12.4.2" Name="RTA">
-      <Software Version="1.12.4.2" Name="RTA">
-        <Software Version="1.4.8" Platform="HiSeq" Name="HiSeq Control Software" />
-      </Software>
-    </Software>
-  </Software>
-  <FlowcellInfo ID="D07K6ACXX" Operator="Lorian" Recipe="SR_indexing" Desc="">
-    <Lane Number="1">
-      <Sample ProjectId="12281" Control="N" Index="ACAGTG" SampleId="12281" Desc="Index #5 AWCon cell#3_N2" Ref="elegans190" />
-      <Sample ProjectId="12279" Control="N" Index="CGATGT" SampleId="12279" Desc="Index #2 AWCon cell#1_N2" Ref="elegans190" />
-      <Sample ProjectId="12280" Control="N" Index="TGACCA" SampleId="12280" Desc="Index #4 AWCon cell#2_N2" Ref="elegans190" />
-      <Sample ProjectId="Undetermined_indices" Control="N" Index="Undetermined" SampleId="lane1" Desc="Clusters with unmatched barcodes for lane 1" Ref="unknown" />
-    </Lane>
-    <Lane Number="2">
-      <Sample ProjectId="12345" Control="N" Index="ACAGTG" SampleId="12345" Desc="Index #5 3 AWC ablated CX3695" Ref="elegans190" />
-      <Sample ProjectId="12283" Control="N" Index="CAGATC" SampleId="12283" Desc="Index #7 AWCon cell#5_N2" Ref="elegans190" />
-      <Sample ProjectId="12282" Control="N" Index="GCCAAT" SampleId="12282" Desc="Index #6 AWCon cell#4_N2" Ref="elegans190" />
-      <Sample ProjectId="Undetermined_indices" Control="N" Index="Undetermined" SampleId="lane2" Desc="Clusters with unmatched barcodes for lane 2" Ref="unknown" />
-    </Lane>
-    <Lane Number="3">
-      <Sample ProjectId="12331" Control="N" Index="ACAGTG" SampleId="12331" Desc="Index #5 060111 FLDN2b(d8.5) H3K4me3 ChIP" Ref="mm9" />
-      <Sample ProjectId="12383" Control="N" Index="CGATGT" SampleId="12383" Desc="Index #2 jwp ix-65 ni 16h" Ref="hg18" />
-      <Sample ProjectId="12330" Control="N" Index="TGACCA" SampleId="12330" Desc="Index #4 060111 Bcl11bKO DL4 FLDN2a H3K4me3 ChIP" Ref="mm9" />
-      <Sample ProjectId="Undetermined_indices" Control="N" Index="Undetermined" SampleId="lane3" Desc="Clusters with unmatched barcodes for lane 3" Ref="unknown" />
-    </Lane>
-    <Lane Number="4">
-      <Sample ProjectId="12385" Control="N" Index="ACAGTG" SampleId="12385" Desc="Index #5 jwp ix-65 i 16h" Ref="hg18" />
-      <Sample ProjectId="12386" Control="N" Index="GCCAAT" SampleId="12386" Desc="Index #6 jwp ix-71 NI 16h" Ref="hg18" />
-      <Sample ProjectId="12384" Control="N" Index="TGACCA" SampleId="12384" Desc="index #4 jwp ix-65 RD 16h" Ref="hg18" />
-      <Sample ProjectId="Undetermined_indices" Control="N" Index="Undetermined" SampleId="lane4" Desc="Clusters with unmatched barcodes for lane 4" Ref="unknown" />
-    </Lane>
-    <Lane Number="5">
-      <Sample ProjectId="12387" Control="N" Index="CAGATC" SampleId="12387" Desc="Index #7 jwp ix-71 RD 16h" Ref="hg18" />
-      <Sample ProjectId="12388" Control="N" Index="CTTGTA" SampleId="12388" Desc="Index #12 jwp ix-71 i 16h" Ref="hg18" />
-      <Sample ProjectId="Undetermined_indices" Control="N" Index="Undetermined" SampleId="lane5" Desc="Clusters with unmatched barcodes for lane 5" Ref="unknown" />
-    </Lane>
-    <Lane Number="6">
-      <Sample ProjectId="12391" Control="N" Index="ACTTGA" SampleId="12391" Desc="Index #8 jwp ix-63 NI 4h" Ref="hg18" />
-      <Sample ProjectId="12392" Control="N" Index="GATCAG" SampleId="12392" Desc="Index #9 jwp ix-63 DHT 10uM PA 4h" Ref="hg18" />
-      <Sample ProjectId="12393" Control="N" Index="TAGCTT" SampleId="12393" Desc="Index #10 jwp ix-63 DHT 4h" Ref="hg18" />
-      <Sample ProjectId="Undetermined_indices" Control="N" Index="Undetermined" SampleId="lane6" Desc="Clusters with unmatched barcodes for lane 6" Ref="unknown" />
-    </Lane>
-    <Lane Number="7">
-      <Sample ProjectId="12348_Index5" Control="N" Index="ACAGTG" SampleId="12348" Desc="Indices #1-9 Small RNA OSS TJ-GFP and constr.E-H" Ref="dm3" />
-      <Sample ProjectId="12348_Index8" Control="N" Index="ACTTGA" SampleId="12348" Desc="Indices #1-9 Small RNA OSS TJ-GFP and constr.E-H" Ref="dm3" />
-      <Sample ProjectId="12348_Index1" Control="N" Index="ATCACG" SampleId="12348" Desc="Indices #1-9 Small RNA OSS TJ-GFP and constr.E-H" Ref="dm3" />
-      <Sample ProjectId="12348_Index7" Control="N" Index="CAGATC" SampleId="12348" Desc="Indices #1-9 Small RNA OSS TJ-GFP and constr.E-H" Ref="dm3" />
-      <Sample ProjectId="12348_Index2" Control="N" Index="CGATGT" SampleId="12348" Desc="Indices #1-9 Small RNA OSS TJ-GFP and constr.E-H" Ref="dm3" />
-      <Sample ProjectId="12348_Index9" Control="N" Index="GATCAG" SampleId="12348" Desc="Indices #1-9 Small RNA OSS TJ-GFP and constr.E-H" Ref="dm3" />
-      <Sample ProjectId="12348_Index6" Control="N" Index="GCCAAT" SampleId="12348" Desc="Indices #1-9 Small RNA OSS TJ-GFP and constr.E-H" Ref="dm3" />
-      <Sample ProjectId="12348_Index4" Control="N" Index="TGACCA" SampleId="12348" Desc="Indices #1-9 Small RNA OSS TJ-GFP and constr.E-H" Ref="dm3" />
-      <Sample ProjectId="12348_Index3" Control="N" Index="TTAGGC" SampleId="12348" Desc="Indices #1-9 Small RNA OSS TJ-GFP and constr.E-H" Ref="dm3" />
-      <Sample ProjectId="Undetermined_indices" Control="N" Index="Undetermined" SampleId="lane7" Desc="Clusters with unmatched barcodes for lane 7" Ref="unknown" />
-    </Lane>
-    <Lane Number="8">
-      <Sample ProjectId="12382_Index5" Control="N" Index="ACAGTG" SampleId="12382" Desc="Small RNA Index #RPI1-RPI10 Human bladder cancer small RNA" Ref="hg18" />
-      <Sample ProjectId="12382_Index8" Control="N" Index="ACTTGA" SampleId="12382" Desc="Small RNA Index #RPI1-RPI10 Human bladder cancer small RNA" Ref="hg18" />
-      <Sample ProjectId="12382_Index1" Control="N" Index="ATCACG" SampleId="12382" Desc="Small RNA Index #RPI1-RPI10 Human bladder cancer small RNA" Ref="hg18" />
-      <Sample ProjectId="12382_Index7" Control="N" Index="CAGATC" SampleId="12382" Desc="Small RNA Index #RPI1-RPI10 Human bladder cancer small RNA" Ref="hg18" />
-      <Sample ProjectId="12382_Index2" Control="N" Index="CGATGT" SampleId="12382" Desc="Small RNA Index #RPI1-RPI10 Human bladder cancer small RNA" Ref="hg18" />
-      <Sample ProjectId="12382_Index9" Control="N" Index="GATCAG" SampleId="12382" Desc="Small RNA Index #RPI1-RPI10 Human bladder cancer small RNA" Ref="hg18" />
-      <Sample ProjectId="12382_Index6" Control="N" Index="GCCAAT" SampleId="12382" Desc="Small RNA Index #RPI1-RPI10 Human bladder cancer small RNA" Ref="hg18" />
-      <Sample ProjectId="12382_Index10" Control="N" Index="TAGCTT" SampleId="12382" Desc="Small RNA Index #RPI1-RPI10 Human bladder cancer small RNA" Ref="hg18" />
-      <Sample ProjectId="12382_Index4" Control="N" Index="TGACCA" SampleId="12382" Desc="Small RNA Index #RPI1-RPI10 Human bladder cancer small RNA" Ref="hg18" />
-      <Sample ProjectId="12382_Index3" Control="N" Index="TTAGGC" SampleId="12382" Desc="Small RNA Index #RPI1-RPI10 Human bladder cancer small RNA" Ref="hg18" />
-      <Sample ProjectId="Undetermined_indices" Control="N" Index="Undetermined" SampleId="lane8" Desc="Clusters with unmatched barcodes for lane 8" Ref="unknown" />
-    </Lane>
-  </FlowcellInfo>
-</DemultiplexConfig>
diff --git a/htsworkflow/pipelines/test/testdata/demultiplexed_bustard_1.12.4.2.xml b/htsworkflow/pipelines/test/testdata/demultiplexed_bustard_1.12.4.2.xml
deleted file mode 100644 (file)
index ea6a596..0000000
+++ /dev/null
@@ -1,503 +0,0 @@
-<?xml version="1.0"?>
-<BaseCallAnalysis xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-  <Run Name="BaseCalls">
-    <BaseCallParameters>
-      <ChastityThreshold>0.6</ChastityThreshold>
-      <Matrix Path="">
-        <AutoFlag>2</AutoFlag>
-        <AutoLane>0</AutoLane>
-        <Cycle>1</Cycle>
-        <CycleOffset>0</CycleOffset>
-        <FirstCycle>1</FirstCycle>
-        <LastCycle>50</LastCycle>
-        <Read>1</Read>
-      </Matrix>
-      <Matrix Path="">
-        <AutoFlag>2</AutoFlag>
-        <AutoLane>0</AutoLane>
-        <Cycle>51</Cycle>
-        <CycleOffset>0</CycleOffset>
-        <FirstCycle>51</FirstCycle>
-        <LastCycle>57</LastCycle>
-        <Read>2</Read>
-      </Matrix>
-      <Phasing Path="">
-        <AutoFlag>2</AutoFlag>
-        <AutoLane>0</AutoLane>
-        <Cycle>2</Cycle>
-        <CycleOffset>1</CycleOffset>
-        <FirstCycle>1</FirstCycle>
-        <LastCycle>50</LastCycle>
-        <PhasingRate>0</PhasingRate>
-        <PrephasingRate>0</PrephasingRate>
-        <Read>1</Read>
-      </Phasing>
-      <Phasing Path="">
-        <AutoFlag>2</AutoFlag>
-        <AutoLane>0</AutoLane>
-        <Cycle>52</Cycle>
-        <CycleOffset>1</CycleOffset>
-        <FirstCycle>51</FirstCycle>
-        <LastCycle>57</LastCycle>
-        <PhasingRate>0</PhasingRate>
-        <PrephasingRate>0</PrephasingRate>
-        <Read>2</Read>
-      </Phasing>
-      <PureBases>0</PureBases>
-      <SmtFilter>failed-chastity</SmtFilter>
-      <SmtRelation>le</SmtRelation>
-      <SmtThreshold>1.0</SmtThreshold>
-    </BaseCallParameters>
-    <Cycles First="1" Last="57" Number="57"/>
-    <RunParameters>
-      <AutoCycleFlag>0</AutoCycleFlag>
-      <Barcode>
-        <Cycle Use="true">51</Cycle>
-        <Cycle Use="true">52</Cycle>
-        <Cycle Use="true">53</Cycle>
-        <Cycle Use="true">54</Cycle>
-        <Cycle Use="true">55</Cycle>
-        <Cycle Use="true">56</Cycle>
-        <Cycle Use="true">57</Cycle>
-      </Barcode>
-      <BasecallFlag>0</BasecallFlag>
-      <Deblocked>0</Deblocked>
-      <DebugFlag>0</DebugFlag>
-      <FirstRunOnlyFlag>0</FirstRunOnlyFlag>
-      <ImagingReads Index="1">
-        <FirstCycle>1</FirstCycle>
-        <LastCycle>50</LastCycle>
-      </ImagingReads>
-      <ImagingReads Index="2">
-        <FirstCycle>51</FirstCycle>
-        <LastCycle>57</LastCycle>
-        <RunFolder>110815_SN787_0101_AD07K6ACXX</RunFolder>
-      </ImagingReads>
-      <Instrument>HWI-ST0787</Instrument>
-      <IterativeMatrixFlag>0</IterativeMatrixFlag>
-      <MakeFlag>0</MakeFlag>
-      <MaxCycle>0</MaxCycle>
-      <MinCycle>0</MinCycle>
-      <QTableVersion>New6</QTableVersion>
-      <RunFlowcellId>D07K6ACXX</RunFlowcellId>
-      <RunFolder>110815_SN787_0101_AD07K6ACXX</RunFolder>
-      <RunFolderDate>110815</RunFolderDate>
-      <RunFolderId>0101</RunFolderId>
-      <Reads Index="1">
-        <FirstCycle>1</FirstCycle>
-        <LastCycle>50</LastCycle>
-      </Reads>
-    </RunParameters>
-    <Software Name="RTA" Version="1.12.4.2"/>
-    <TileSelection>
-      <Lane Index="1">
-        <Sample>s</Sample>
-        <Tile>1102</Tile>
-        <Tile>1101</Tile>
-        <Tile>1103</Tile>
-        <Tile>1106</Tile>
-        <Tile>1104</Tile>
-        <Tile>1105</Tile>
-        <Tile>1108</Tile>
-        <Tile>1107</Tile>
-        <Tile>1202</Tile>
-        <Tile>1201</Tile>
-        <Tile>1206</Tile>
-        <Tile>1204</Tile>
-        <Tile>1203</Tile>
-        <Tile>1205</Tile>
-        <Tile>1302</Tile>
-        <Tile>1208</Tile>
-        <Tile>1207</Tile>
-        <Tile>1301</Tile>
-        <Tile>1306</Tile>
-        <Tile>1304</Tile>
-        <Tile>1305</Tile>
-        <Tile>2102</Tile>
-        <Tile>1303</Tile>
-        <Tile>1308</Tile>
-        <Tile>2101</Tile>
-        <Tile>1307</Tile>
-        <Tile>2106</Tile>
-        <Tile>2104</Tile>
-        <Tile>2105</Tile>
-        <Tile>2103</Tile>
-        <Tile>2202</Tile>
-        <Tile>2108</Tile>
-        <Tile>2201</Tile>
-        <Tile>2206</Tile>
-        <Tile>2107</Tile>
-        <Tile>2205</Tile>
-        <Tile>2204</Tile>
-        <Tile>2203</Tile>
-        <Tile>2302</Tile>
-        <Tile>2301</Tile>
-        <Tile>2208</Tile>
-        <Tile>2306</Tile>
-        <Tile>2207</Tile>
-        <Tile>2305</Tile>
-        <Tile>2303</Tile>
-        <Tile>2304</Tile>
-        <Tile>2308</Tile>
-        <Tile>2307</Tile>
-      </Lane>
-      <Lane Index="2">
-        <Sample>s</Sample>
-        <Tile>1101</Tile>
-        <Tile>1102</Tile>
-        <Tile>1105</Tile>
-        <Tile>1106</Tile>
-        <Tile>1104</Tile>
-        <Tile>1103</Tile>
-        <Tile>1201</Tile>
-        <Tile>1202</Tile>
-        <Tile>1108</Tile>
-        <Tile>1206</Tile>
-        <Tile>1107</Tile>
-        <Tile>1205</Tile>
-        <Tile>1302</Tile>
-        <Tile>1204</Tile>
-        <Tile>1301</Tile>
-        <Tile>1203</Tile>
-        <Tile>1208</Tile>
-        <Tile>1306</Tile>
-        <Tile>1305</Tile>
-        <Tile>1207</Tile>
-        <Tile>1304</Tile>
-        <Tile>2101</Tile>
-        <Tile>2102</Tile>
-        <Tile>1308</Tile>
-        <Tile>2105</Tile>
-        <Tile>1303</Tile>
-        <Tile>2201</Tile>
-        <Tile>2106</Tile>
-        <Tile>2104</Tile>
-        <Tile>1307</Tile>
-        <Tile>2205</Tile>
-        <Tile>2202</Tile>
-        <Tile>2108</Tile>
-        <Tile>2206</Tile>
-        <Tile>2103</Tile>
-        <Tile>2301</Tile>
-        <Tile>2204</Tile>
-        <Tile>2208</Tile>
-        <Tile>2107</Tile>
-        <Tile>2302</Tile>
-        <Tile>2305</Tile>
-        <Tile>2304</Tile>
-        <Tile>2203</Tile>
-        <Tile>2306</Tile>
-        <Tile>2308</Tile>
-        <Tile>2207</Tile>
-        <Tile>2303</Tile>
-        <Tile>2307</Tile>
-      </Lane>
-      <Lane Index="3">
-        <Sample>s</Sample>
-        <Tile>1101</Tile>
-        <Tile>1102</Tile>
-        <Tile>1105</Tile>
-        <Tile>1104</Tile>
-        <Tile>1108</Tile>
-        <Tile>1106</Tile>
-        <Tile>1201</Tile>
-        <Tile>1103</Tile>
-        <Tile>1204</Tile>
-        <Tile>1202</Tile>
-        <Tile>1205</Tile>
-        <Tile>1107</Tile>
-        <Tile>1208</Tile>
-        <Tile>1206</Tile>
-        <Tile>1301</Tile>
-        <Tile>1304</Tile>
-        <Tile>1203</Tile>
-        <Tile>1302</Tile>
-        <Tile>1308</Tile>
-        <Tile>1305</Tile>
-        <Tile>1207</Tile>
-        <Tile>2101</Tile>
-        <Tile>2104</Tile>
-        <Tile>1306</Tile>
-        <Tile>1303</Tile>
-        <Tile>2102</Tile>
-        <Tile>2105</Tile>
-        <Tile>2108</Tile>
-        <Tile>1307</Tile>
-        <Tile>2106</Tile>
-        <Tile>2204</Tile>
-        <Tile>2201</Tile>
-        <Tile>2103</Tile>
-        <Tile>2208</Tile>
-        <Tile>2202</Tile>
-        <Tile>2107</Tile>
-        <Tile>2205</Tile>
-        <Tile>2301</Tile>
-        <Tile>2304</Tile>
-        <Tile>2203</Tile>
-        <Tile>2206</Tile>
-        <Tile>2207</Tile>
-        <Tile>2305</Tile>
-        <Tile>2308</Tile>
-        <Tile>2302</Tile>
-        <Tile>2303</Tile>
-        <Tile>2307</Tile>
-        <Tile>2306</Tile>
-      </Lane>
-      <Lane Index="4">
-        <Sample>s</Sample>
-        <Tile>1101</Tile>
-        <Tile>1104</Tile>
-        <Tile>1103</Tile>
-        <Tile>1102</Tile>
-        <Tile>1108</Tile>
-        <Tile>1105</Tile>
-        <Tile>1107</Tile>
-        <Tile>1106</Tile>
-        <Tile>1204</Tile>
-        <Tile>1201</Tile>
-        <Tile>1203</Tile>
-        <Tile>1202</Tile>
-        <Tile>1208</Tile>
-        <Tile>1205</Tile>
-        <Tile>1207</Tile>
-        <Tile>1206</Tile>
-        <Tile>1304</Tile>
-        <Tile>1301</Tile>
-        <Tile>1302</Tile>
-        <Tile>1308</Tile>
-        <Tile>1303</Tile>
-        <Tile>1305</Tile>
-        <Tile>1306</Tile>
-        <Tile>1307</Tile>
-        <Tile>2104</Tile>
-        <Tile>2101</Tile>
-        <Tile>2108</Tile>
-        <Tile>2102</Tile>
-        <Tile>2103</Tile>
-        <Tile>2105</Tile>
-        <Tile>2204</Tile>
-        <Tile>2106</Tile>
-        <Tile>2107</Tile>
-        <Tile>2201</Tile>
-        <Tile>2208</Tile>
-        <Tile>2202</Tile>
-        <Tile>2203</Tile>
-        <Tile>2304</Tile>
-        <Tile>2205</Tile>
-        <Tile>2206</Tile>
-        <Tile>2207</Tile>
-        <Tile>2308</Tile>
-        <Tile>2301</Tile>
-        <Tile>2302</Tile>
-        <Tile>2303</Tile>
-        <Tile>2305</Tile>
-        <Tile>2307</Tile>
-        <Tile>2306</Tile>
-      </Lane>
-      <Lane Index="5">
-        <Sample>s</Sample>
-        <Tile>1104</Tile>
-        <Tile>1108</Tile>
-        <Tile>1101</Tile>
-        <Tile>1204</Tile>
-        <Tile>1102</Tile>
-        <Tile>1103</Tile>
-        <Tile>1106</Tile>
-        <Tile>1105</Tile>
-        <Tile>1107</Tile>
-        <Tile>1208</Tile>
-        <Tile>1201</Tile>
-        <Tile>1202</Tile>
-        <Tile>1203</Tile>
-        <Tile>1304</Tile>
-        <Tile>1205</Tile>
-        <Tile>1206</Tile>
-        <Tile>1301</Tile>
-        <Tile>1308</Tile>
-        <Tile>1207</Tile>
-        <Tile>1302</Tile>
-        <Tile>2104</Tile>
-        <Tile>1303</Tile>
-        <Tile>1305</Tile>
-        <Tile>1306</Tile>
-        <Tile>2101</Tile>
-        <Tile>2102</Tile>
-        <Tile>1307</Tile>
-        <Tile>2108</Tile>
-        <Tile>2204</Tile>
-        <Tile>2103</Tile>
-        <Tile>2105</Tile>
-        <Tile>2107</Tile>
-        <Tile>2106</Tile>
-        <Tile>2201</Tile>
-        <Tile>2208</Tile>
-        <Tile>2203</Tile>
-        <Tile>2202</Tile>
-        <Tile>2304</Tile>
-        <Tile>2206</Tile>
-        <Tile>2205</Tile>
-        <Tile>2207</Tile>
-        <Tile>2302</Tile>
-        <Tile>2301</Tile>
-        <Tile>2303</Tile>
-        <Tile>2308</Tile>
-        <Tile>2305</Tile>
-        <Tile>2307</Tile>
-        <Tile>2306</Tile>
-      </Lane>
-      <Lane Index="6">
-        <Sample>s</Sample>
-        <Tile>1104</Tile>
-        <Tile>1101</Tile>
-        <Tile>1103</Tile>
-        <Tile>1102</Tile>
-        <Tile>1108</Tile>
-        <Tile>1107</Tile>
-        <Tile>1105</Tile>
-        <Tile>1106</Tile>
-        <Tile>1204</Tile>
-        <Tile>1203</Tile>
-        <Tile>1201</Tile>
-        <Tile>1202</Tile>
-        <Tile>1208</Tile>
-        <Tile>1207</Tile>
-        <Tile>1205</Tile>
-        <Tile>1206</Tile>
-        <Tile>1304</Tile>
-        <Tile>1303</Tile>
-        <Tile>1301</Tile>
-        <Tile>1302</Tile>
-        <Tile>1308</Tile>
-        <Tile>1307</Tile>
-        <Tile>1305</Tile>
-        <Tile>2104</Tile>
-        <Tile>1306</Tile>
-        <Tile>2103</Tile>
-        <Tile>2101</Tile>
-        <Tile>2102</Tile>
-        <Tile>2108</Tile>
-        <Tile>2107</Tile>
-        <Tile>2105</Tile>
-        <Tile>2106</Tile>
-        <Tile>2204</Tile>
-        <Tile>2203</Tile>
-        <Tile>2202</Tile>
-        <Tile>2201</Tile>
-        <Tile>2208</Tile>
-        <Tile>2207</Tile>
-        <Tile>2206</Tile>
-        <Tile>2205</Tile>
-        <Tile>2304</Tile>
-        <Tile>2303</Tile>
-        <Tile>2302</Tile>
-        <Tile>2301</Tile>
-        <Tile>2307</Tile>
-        <Tile>2308</Tile>
-        <Tile>2306</Tile>
-        <Tile>2305</Tile>
-      </Lane>
-      <Lane Index="7">
-        <Sample>s</Sample>
-        <Tile>1103</Tile>
-        <Tile>1107</Tile>
-        <Tile>1104</Tile>
-        <Tile>1108</Tile>
-        <Tile>1203</Tile>
-        <Tile>1101</Tile>
-        <Tile>1102</Tile>
-        <Tile>1204</Tile>
-        <Tile>1105</Tile>
-        <Tile>1207</Tile>
-        <Tile>1106</Tile>
-        <Tile>1208</Tile>
-        <Tile>1201</Tile>
-        <Tile>1202</Tile>
-        <Tile>1303</Tile>
-        <Tile>1205</Tile>
-        <Tile>1206</Tile>
-        <Tile>1307</Tile>
-        <Tile>1304</Tile>
-        <Tile>1301</Tile>
-        <Tile>1302</Tile>
-        <Tile>1305</Tile>
-        <Tile>1308</Tile>
-        <Tile>2103</Tile>
-        <Tile>1306</Tile>
-        <Tile>2101</Tile>
-        <Tile>2107</Tile>
-        <Tile>2104</Tile>
-        <Tile>2105</Tile>
-        <Tile>2102</Tile>
-        <Tile>2108</Tile>
-        <Tile>2203</Tile>
-        <Tile>2201</Tile>
-        <Tile>2106</Tile>
-        <Tile>2205</Tile>
-        <Tile>2207</Tile>
-        <Tile>2202</Tile>
-        <Tile>2204</Tile>
-        <Tile>2301</Tile>
-        <Tile>2303</Tile>
-        <Tile>2206</Tile>
-        <Tile>2208</Tile>
-        <Tile>2305</Tile>
-        <Tile>2307</Tile>
-        <Tile>2302</Tile>
-        <Tile>2304</Tile>
-        <Tile>2306</Tile>
-        <Tile>2308</Tile>
-      </Lane>
-      <Lane Index="8">
-        <Sample>s</Sample>
-        <Tile>1101</Tile>
-        <Tile>1103</Tile>
-        <Tile>1102</Tile>
-        <Tile>1105</Tile>
-        <Tile>1107</Tile>
-        <Tile>1104</Tile>
-        <Tile>1106</Tile>
-        <Tile>1201</Tile>
-        <Tile>1108</Tile>
-        <Tile>1203</Tile>
-        <Tile>1202</Tile>
-        <Tile>1205</Tile>
-        <Tile>1207</Tile>
-        <Tile>1204</Tile>
-        <Tile>1206</Tile>
-        <Tile>1301</Tile>
-        <Tile>1208</Tile>
-        <Tile>1303</Tile>
-        <Tile>1302</Tile>
-        <Tile>1305</Tile>
-        <Tile>1307</Tile>
-        <Tile>1304</Tile>
-        <Tile>1306</Tile>
-        <Tile>2101</Tile>
-        <Tile>1308</Tile>
-        <Tile>2103</Tile>
-        <Tile>2105</Tile>
-        <Tile>2102</Tile>
-        <Tile>2107</Tile>
-        <Tile>2106</Tile>
-        <Tile>2104</Tile>
-        <Tile>2201</Tile>
-        <Tile>2205</Tile>
-        <Tile>2202</Tile>
-        <Tile>2203</Tile>
-        <Tile>2108</Tile>
-        <Tile>2206</Tile>
-        <Tile>2301</Tile>
-        <Tile>2207</Tile>
-        <Tile>2204</Tile>
-        <Tile>2305</Tile>
-        <Tile>2302</Tile>
-        <Tile>2303</Tile>
-        <Tile>2208</Tile>
-        <Tile>2306</Tile>
-        <Tile>2307</Tile>
-        <Tile>2304</Tile>
-        <Tile>2308</Tile>
-      </Lane>
-    </TileSelection>
-  </Run>
-</BaseCallAnalysis>
diff --git a/htsworkflow/pipelines/test/testdata/demultiplexed_summary_1.12.4.2.xml b/htsworkflow/pipelines/test/testdata/demultiplexed_summary_1.12.4.2.xml
deleted file mode 100644 (file)
index ebc9f4a..0000000
+++ /dev/null
@@ -1,3669 +0,0 @@
-<?xml version="1.0"?>
-<BustardSummary>
-  <ChipResultsSummary>
-    <clusterCountPF>454185731</clusterCountPF>
-    <clusterCountRaw>781064977</clusterCountRaw>
-    <yield>25888586667</yield>
-  </ChipResultsSummary>
-  <ChipSummary>
-    <ChipID>unknown</ChipID>
-    <Machine>HWI-ST0787</Machine>
-    <RunFolder>110815_SN787_0101_AD07K6ACXX</RunFolder>
-  </ChipSummary>
-  <Date>2011-08-18 20:18:19</Date>
-  <ExpandedLaneSummary>
-    <Read>
-      <Lane>
-        <clusterCountRaw>
-          <mean>3707807.14</mean>
-          <stdev>573671.11</stdev>
-          <sumsq>393825007132852.00</sumsq>
-        </clusterCountRaw>
-        <laneNumber>1</laneNumber>
-        <percentClustersPF>
-          <mean>47.64</mean>
-          <stdev>19.64</stdev>
-          <sumsq>73957.00</sumsq>
-        </percentClustersPF>
-        <phasingApplied>0.3810</phasingApplied>
-        <prephasingApplied>0.0844</prephasingApplied>
-        <signalAverage1to3>
-          <mean>677.00</mean>
-          <stdev>148.48</stdev>
-          <sumsq>13428576.43</sumsq>
-        </signalAverage1to3>
-        <signalAverage2to4>
-          <mean>908.15</mean>
-          <stdev>81.51</stdev>
-          <sumsq>23271897.61</sumsq>
-        </signalAverage2to4>
-        <signalLoss10to20>
-          <mean>-0.30</mean>
-          <stdev>0.38</stdev>
-          <sumsq>6.33</sumsq>
-        </signalLoss10to20>
-        <signalLoss2to10>
-          <mean>-34.61</mean>
-          <stdev>26.97</stdev>
-          <sumsq>53175.44</sumsq>
-        </signalLoss2to10>
-      </Lane>
-      <Lane>
-        <clusterCountRaw>
-          <mean>3329777.81</mean>
-          <stdev>1102200.81</stdev>
-          <sumsq>318644092316267.00</sumsq>
-        </clusterCountRaw>
-        <laneNumber>2</laneNumber>
-        <percentClustersPF>
-          <mean>24.71</mean>
-          <stdev>17.39</stdev>
-          <sumsq>23436.66</sumsq>
-        </percentClustersPF>
-        <phasingApplied>0.3694</phasingApplied>
-        <prephasingApplied>0.2507</prephasingApplied>
-        <signalAverage1to3>
-          <mean>820.85</mean>
-          <stdev>175.96</stdev>
-          <sumsq>18292849.43</sumsq>
-        </signalAverage1to3>
-        <signalAverage2to4>
-          <mean>864.16</mean>
-          <stdev>95.34</stdev>
-          <sumsq>19643349.08</sumsq>
-        </signalAverage2to4>
-        <signalLoss10to20>
-          <mean>-5.69</mean>
-          <stdev>12.59</stdev>
-          <sumsq>4807.74</sumsq>
-        </signalLoss10to20>
-        <signalLoss2to10>
-          <mean>-34.31</mean>
-          <stdev>22.59</stdev>
-          <sumsq>43354.50</sumsq>
-        </signalLoss2to10>
-      </Lane>
-      <Lane>
-        <clusterCountRaw>
-          <mean>6268934.50</mean>
-          <stdev>241767.87</stdev>
-          <sumsq>314805480030044.00</sumsq>
-        </clusterCountRaw>
-        <laneNumber>3</laneNumber>
-        <percentClustersPF>
-          <mean>36.04</mean>
-          <stdev>12.81</stdev>
-          <sumsq>11541.60</sumsq>
-        </percentClustersPF>
-        <phasingApplied>0.2469</phasingApplied>
-        <prephasingApplied>0.2002</prephasingApplied>
-        <signalAverage1to3>
-          <mean>1094.84</mean>
-          <stdev>135.96</stdev>
-          <sumsq>9718779.89</sumsq>
-        </signalAverage1to3>
-        <signalAverage2to4>
-          <mean>1114.24</mean>
-          <stdev>57.49</stdev>
-          <sumsq>9955389.55</sumsq>
-        </signalAverage2to4>
-        <signalLoss10to20>
-          <mean>-4.20</mean>
-          <stdev>13.18</stdev>
-          <sumsq>1357.57</sumsq>
-        </signalLoss10to20>
-        <signalLoss2to10>
-          <mean>-53.53</mean>
-          <stdev>38.21</stdev>
-          <sumsq>33143.61</sumsq>
-        </signalLoss2to10>
-      </Lane>
-      <Lane>
-        <clusterCountRaw>
-          <mean>6055508.12</mean>
-          <stdev>166741.39</stdev>
-          <sumsq>293548048051419.00</sumsq>
-        </clusterCountRaw>
-        <laneNumber>4</laneNumber>
-        <percentClustersPF>
-          <mean>32.69</mean>
-          <stdev>7.60</stdev>
-          <sumsq>8952.16</sumsq>
-        </percentClustersPF>
-        <phasingApplied>0.2104</phasingApplied>
-        <prephasingApplied>0.1803</prephasingApplied>
-        <signalAverage1to3>
-          <mean>1106.96</mean>
-          <stdev>62.20</stdev>
-          <sumsq>9829917.93</sumsq>
-        </signalAverage1to3>
-        <signalAverage2to4>
-          <mean>1036.31</mean>
-          <stdev>128.16</stdev>
-          <sumsq>8706439.16</sumsq>
-        </signalAverage2to4>
-        <signalLoss10to20>
-          <mean>-9.55</mean>
-          <stdev>18.68</stdev>
-          <sumsq>3171.25</sumsq>
-        </signalLoss10to20>
-        <signalLoss2to10>
-          <mean>-44.30</mean>
-          <stdev>34.27</stdev>
-          <sumsq>23924.49</sumsq>
-        </signalLoss2to10>
-      </Lane>
-      <Lane>
-        <clusterCountRaw>
-          <mean>5643648.67</mean>
-          <stdev>137235.86</stdev>
-          <sumsq>95589978179428.00</sumsq>
-        </clusterCountRaw>
-        <laneNumber>5</laneNumber>
-        <percentClustersPF>
-          <mean>14.96</mean>
-          <stdev>10.60</stdev>
-          <sumsq>895.87</sumsq>
-        </percentClustersPF>
-        <phasingApplied>0.0000</phasingApplied>
-        <prephasingApplied>0.0000</prephasingApplied>
-        <signalAverage1to3>
-          <mean>-593.62</mean>
-          <stdev>74.55</stdev>
-          <sumsq>1068254.69</sumsq>
-        </signalAverage1to3>
-        <signalAverage2to4>
-          <mean>-623.07</mean>
-          <stdev>71.93</stdev>
-          <sumsq>1174981.61</sumsq>
-        </signalAverage2to4>
-        <signalLoss10to20>
-          <mean>100.00</mean>
-          <stdev>0.00</stdev>
-          <sumsq>30000.00</sumsq>
-        </signalLoss10to20>
-        <signalLoss2to10>
-          <mean>100.00</mean>
-          <stdev>0.00</stdev>
-          <sumsq>30000.00</sumsq>
-        </signalLoss2to10>
-      </Lane>
-      <Lane>
-        <clusterCountRaw>
-          <mean>5707954.48</mean>
-          <stdev>553352.88</stdev>
-          <sumsq>953415170485172.00</sumsq>
-        </clusterCountRaw>
-        <laneNumber>6</laneNumber>
-        <percentClustersPF>
-          <mean>42.22</mean>
-          <stdev>22.39</stdev>
-          <sumsq>65737.40</sumsq>
-        </percentClustersPF>
-        <phasingApplied>0.2670</phasingApplied>
-        <prephasingApplied>0.2116</prephasingApplied>
-        <signalAverage1to3>
-          <mean>976.36</mean>
-          <stdev>216.47</stdev>
-          <sumsq>28956965.77</sumsq>
-        </signalAverage1to3>
-        <signalAverage2to4>
-          <mean>1054.88</mean>
-          <stdev>90.27</stdev>
-          <sumsq>32498684.57</sumsq>
-        </signalAverage2to4>
-        <signalLoss10to20>
-          <mean>0.20</mean>
-          <stdev>0.11</stdev>
-          <sumsq>1.47</sumsq>
-        </signalLoss10to20>
-        <signalLoss2to10>
-          <mean>-79.61</mean>
-          <stdev>16.62</stdev>
-          <sumsq>191509.02</sumsq>
-        </signalLoss2to10>
-      </Lane>
-      <Lane>
-        <clusterCountRaw>
-          <mean>1867305.95</mean>
-          <stdev>444617.44</stdev>
-          <sumsq>158236511701682.00</sumsq>
-        </clusterCountRaw>
-        <laneNumber>7</laneNumber>
-        <percentClustersPF>
-          <mean>94.84</mean>
-          <stdev>11.12</stdev>
-          <sumsq>391931.07</sumsq>
-        </percentClustersPF>
-        <phasingApplied>0.1329</phasingApplied>
-        <prephasingApplied>0.2410</prephasingApplied>
-        <signalAverage1to3>
-          <mean>1399.64</mean>
-          <stdev>129.00</stdev>
-          <sumsq>84935084.50</sumsq>
-        </signalAverage1to3>
-        <signalAverage2to4>
-          <mean>1377.83</mean>
-          <stdev>128.32</stdev>
-          <sumsq>82324018.13</sumsq>
-        </signalAverage2to4>
-        <signalLoss10to20>
-          <mean>0.28</mean>
-          <stdev>0.09</stdev>
-          <sumsq>3.65</sumsq>
-        </signalLoss10to20>
-        <signalLoss2to10>
-          <mean>-4.22</mean>
-          <stdev>14.27</stdev>
-          <sumsq>9317.43</sumsq>
-        </signalLoss2to10>
-      </Lane>
-      <Lane>
-        <clusterCountRaw>
-          <mean>4777517.31</mean>
-          <stdev>599178.35</stdev>
-          <sumsq>1112457930812391.00</sumsq>
-        </clusterCountRaw>
-        <laneNumber>8</laneNumber>
-        <percentClustersPF>
-          <mean>86.54</mean>
-          <stdev>7.43</stdev>
-          <sumsq>362059.12</sumsq>
-        </percentClustersPF>
-        <phasingApplied>0.2192</phasingApplied>
-        <prephasingApplied>0.2346</prephasingApplied>
-        <signalAverage1to3>
-          <mean>1256.98</mean>
-          <stdev>106.05</stdev>
-          <sumsq>76368309.15</sumsq>
-        </signalAverage1to3>
-        <signalAverage2to4>
-          <mean>1233.08</mean>
-          <stdev>110.91</stdev>
-          <sumsq>73561027.92</sumsq>
-        </signalAverage2to4>
-        <signalLoss10to20>
-          <mean>0.63</mean>
-          <stdev>0.08</stdev>
-          <sumsq>19.47</sumsq>
-        </signalLoss10to20>
-        <signalLoss2to10>
-          <mean>-3.98</mean>
-          <stdev>11.04</stdev>
-          <sumsq>6489.36</sumsq>
-        </signalLoss2to10>
-      </Lane>
-      <readNumber>1</readNumber>
-    </Read>
-    
-  </ExpandedLaneSummary>
-  <LaneResultsSummary>
-    <Read>
-      <Lane>
-        <clusterCountPF>
-          <mean>1783290</mean>
-          <stdev>789504</stdev>
-          <sumsq>105873063750160</sumsq>
-        </clusterCountPF>
-        <clusterCountRaw>
-          <mean>3707807</mean>
-          <stdev>573671</stdev>
-          <sumsq>393825007132852</sumsq>
-        </clusterCountRaw>
-        <laneNumber>1</laneNumber>
-        <laneYield>2496606</laneYield>
-        <oneSig>
-          <mean>164</mean>
-          <stdev>410</stdev>
-          <sumsq>5304965</sumsq>
-        </oneSig>
-        <percentClustersPF>
-          <mean>47.64</mean>
-          <stdev>19.64</stdev>
-          <sumsq>73957.00</sumsq>
-        </percentClustersPF>
-        <signal20AsPctOf1>
-          <mean>9.00</mean>
-          <stdev>22.48</stdev>
-          <sumsq>15909.69</sumsq>
-        </signal20AsPctOf1>
-      </Lane>
-      <Lane>
-        <clusterCountPF>
-          <mean>875778</mean>
-          <stdev>826947</stdev>
-          <sumsq>37037748584192</sumsq>
-        </clusterCountPF>
-        <clusterCountRaw>
-          <mean>3329777</mean>
-          <stdev>1102200</stdev>
-          <sumsq>318644092316267</sumsq>
-        </clusterCountRaw>
-        <laneNumber>2</laneNumber>
-        <laneYield>1138512</laneYield>
-        <oneSig>
-          <mean>702</mean>
-          <stdev>480</stdev>
-          <sumsq>18627652</sumsq>
-        </oneSig>
-        <percentClustersPF>
-          <mean>24.71</mean>
-          <stdev>17.39</stdev>
-          <sumsq>23436.66</sumsq>
-        </percentClustersPF>
-        <signal20AsPctOf1>
-          <mean>56.49</mean>
-          <stdev>38.83</stdev>
-          <sumsq>120674.01</sumsq>
-        </signal20AsPctOf1>
-      </Lane>
-      <Lane>
-        <clusterCountPF>
-          <mean>2259006</mean>
-          <stdev>798869</stdev>
-          <sumsq>45292218394019</sumsq>
-        </clusterCountPF>
-        <clusterCountRaw>
-          <mean>6268934</mean>
-          <stdev>241767</stdev>
-          <sumsq>314805480030044</sumsq>
-        </clusterCountRaw>
-        <laneNumber>3</laneNumber>
-        <laneYield>903602</laneYield>
-        <oneSig>
-          <mean>1031</mean>
-          <stdev>419</stdev>
-          <sumsq>9747483</sumsq>
-        </oneSig>
-        <percentClustersPF>
-          <mean>36.04</mean>
-          <stdev>12.81</stdev>
-          <sumsq>11541.60</sumsq>
-        </percentClustersPF>
-        <signal20AsPctOf1>
-          <mean>75.63</mean>
-          <stdev>30.73</stdev>
-          <sumsq>52366.46</sumsq>
-        </signal20AsPctOf1>
-      </Lane>
-      <Lane>
-        <clusterCountPF>
-          <mean>1978985</mean>
-          <stdev>462424</stdev>
-          <sumsq>32827917903219</sumsq>
-        </clusterCountPF>
-        <clusterCountRaw>
-          <mean>6055508</mean>
-          <stdev>166741</stdev>
-          <sumsq>293548048051419</sumsq>
-        </clusterCountRaw>
-        <laneNumber>4</laneNumber>
-        <laneYield>791594</laneYield>
-        <oneSig>
-          <mean>1161</mean>
-          <stdev>61</stdev>
-          <sumsq>10827946</sumsq>
-        </oneSig>
-        <percentClustersPF>
-          <mean>32.69</mean>
-          <stdev>7.60</stdev>
-          <sumsq>8952.16</sumsq>
-        </percentClustersPF>
-        <signal20AsPctOf1>
-          <mean>63.64</mean>
-          <stdev>39.29</stdev>
-          <sumsq>43206.11</sumsq>
-        </signal20AsPctOf1>
-      </Lane>
-      <Lane>
-        <clusterCountPF>
-          <mean>834976</mean>
-          <stdev>570615</stdev>
-          <sumsq>2742761639691</sumsq>
-        </clusterCountPF>
-        <clusterCountRaw>
-          <mean>5643648</mean>
-          <stdev>137235</stdev>
-          <sumsq>95589978179428</sumsq>
-        </clusterCountRaw>
-        <laneNumber>5</laneNumber>
-        <laneYield>125246</laneYield>
-        <oneSig>
-          <mean>-596</mean>
-          <stdev>79</stdev>
-          <sumsq>1080823</sumsq>
-        </oneSig>
-        <percentClustersPF>
-          <mean>14.96</mean>
-          <stdev>10.60</stdev>
-          <sumsq>895.87</sumsq>
-        </percentClustersPF>
-        <signal20AsPctOf1>
-          <mean>147.21</mean>
-          <stdev>7.83</stdev>
-          <sumsq>65137.15</sumsq>
-        </signal20AsPctOf1>
-      </Lane>
-      <Lane>
-        <clusterCountPF>
-          <mean>2467696</mean>
-          <stdev>1423659</stdev>
-          <sumsq>233346910460595</sumsq>
-        </clusterCountPF>
-        <clusterCountRaw>
-          <mean>5707954</mean>
-          <stdev>553352</stdev>
-          <sumsq>953415170485172</sumsq>
-        </clusterCountRaw>
-        <laneNumber>6</laneNumber>
-        <laneYield>3578160</laneYield>
-        <oneSig>
-          <mean>820</mean>
-          <stdev>521</stdev>
-          <sumsq>27135464</sumsq>
-        </oneSig>
-        <percentClustersPF>
-          <mean>42.22</mean>
-          <stdev>22.39</stdev>
-          <sumsq>65737.40</sumsq>
-        </percentClustersPF>
-        <signal20AsPctOf1>
-          <mean>64.69</mean>
-          <stdev>40.68</stdev>
-          <sumsq>167697.34</sumsq>
-        </signal20AsPctOf1>
-      </Lane>
-      <Lane>
-        <clusterCountPF>
-          <mean>1769448</mean>
-          <stdev>464939</stdev>
-          <sumsq>143709845032850</sumsq>
-        </clusterCountPF>
-        <clusterCountRaw>
-          <mean>1867305</mean>
-          <stdev>444617</stdev>
-          <sumsq>158236511701682</sumsq>
-        </clusterCountRaw>
-        <laneNumber>7</laneNumber>
-        <laneYield>3804314</laneYield>
-        <oneSig>
-          <mean>1442</mean>
-          <stdev>84</stdev>
-          <sumsq>89752104</sumsq>
-        </oneSig>
-        <percentClustersPF>
-          <mean>94.84</mean>
-          <stdev>11.12</stdev>
-          <sumsq>391931.07</sumsq>
-        </percentClustersPF>
-        <signal20AsPctOf1>
-          <mean>91.96</mean>
-          <stdev>1.75</stdev>
-          <sumsq>363782.22</sumsq>
-        </signal20AsPctOf1>
-      </Lane>
-      <Lane>
-        <clusterCountPF>
-          <mean>4113020</mean>
-          <stdev>444275</stdev>
-          <sumsq>821290075103817</sumsq>
-        </clusterCountPF>
-        <clusterCountRaw>
-          <mean>4777517</mean>
-          <stdev>599178</stdev>
-          <sumsq>1112457930812391</sumsq>
-        </clusterCountRaw>
-        <laneNumber>8</laneNumber>
-        <laneYield>9871250</laneYield>
-        <oneSig>
-          <mean>1334</mean>
-          <stdev>72</stdev>
-          <sumsq>85708238</sumsq>
-        </oneSig>
-        <percentClustersPF>
-          <mean>86.54</mean>
-          <stdev>7.43</stdev>
-          <sumsq>362059.12</sumsq>
-        </percentClustersPF>
-        <signal20AsPctOf1>
-          <mean>88.24</mean>
-          <stdev>1.70</stdev>
-          <sumsq>373841.88</sumsq>
-        </signal20AsPctOf1>
-      </Lane>
-      <readNumber>1</readNumber>
-    </Read>
-    
-  </LaneResultsSummary>
-  <Software>CASAVA-1.8.1</Software>
-  <TileResultsByLane>
-    <Lane>
-      <Read>
-        <Tile>
-          <clusterCountPF>2195814</clusterCountPF>
-          <clusterCountRaw>3782916</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>58.05</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1101</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>2278273</clusterCountPF>
-          <clusterCountRaw>3732743</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>61.03</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1102</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>4020211</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1103</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>3895725</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1104</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>4134124</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1105</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>4304874</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1106</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>4406771</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1107</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>4057296</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1108</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>2235184</clusterCountPF>
-          <clusterCountRaw>3576569</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>62.50</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1201</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>2303817</clusterCountPF>
-          <clusterCountRaw>3670759</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>62.76</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1202</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>2228868</clusterCountPF>
-          <clusterCountRaw>3917599</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>56.89</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1203</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>4063543</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1204</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>4018922</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1205</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>2207175</clusterCountPF>
-          <clusterCountRaw>4204009</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>52.50</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1206</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>4440729</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1207</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>768164</clusterCountPF>
-          <clusterCountRaw>3715012</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>20.68</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1208</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>2261727</clusterCountPF>
-          <clusterCountRaw>3621480</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>62.45</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1301</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>2347049</clusterCountPF>
-          <clusterCountRaw>3868987</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>60.66</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1302</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>4029778</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1303</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>4153522</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1304</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>4253486</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1305</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>598571</clusterCountPF>
-          <clusterCountRaw>1511883</clusterCountRaw>
-          <oneSig>1096.02</oneSig>
-          <percentClustersPF>39.59</percentClustersPF>
-          <signal20AsPctOf1>63.03</signal20AsPctOf1>
-          <tileNumber>1306</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>4540851</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1307</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>762937</clusterCountPF>
-          <clusterCountRaw>3797909</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>20.09</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1308</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>2212968</clusterCountPF>
-          <clusterCountRaw>3718396</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>59.51</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2101</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>2340883</clusterCountPF>
-          <clusterCountRaw>3785970</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>61.83</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2102</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>2181836</clusterCountPF>
-          <clusterCountRaw>3995288</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>54.61</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2103</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>4140850</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2104</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>344088</clusterCountPF>
-          <clusterCountRaw>3742840</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>9.19</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2105</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>4417907</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2106</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>633399</clusterCountPF>
-          <clusterCountRaw>3982483</clusterCountRaw>
-          <oneSig>1075.65</oneSig>
-          <percentClustersPF>15.90</percentClustersPF>
-          <signal20AsPctOf1>64.87</signal20AsPctOf1>
-          <tileNumber>2107</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>4249399</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2108</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>2273067</clusterCountPF>
-          <clusterCountRaw>3616092</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>62.86</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2201</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>2371559</clusterCountPF>
-          <clusterCountRaw>3725669</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>63.65</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2202</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>2333375</clusterCountPF>
-          <clusterCountRaw>3836500</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>60.82</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2203</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>2185419</clusterCountPF>
-          <clusterCountRaw>3910181</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>55.89</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2204</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>2311644</clusterCountPF>
-          <clusterCountRaw>4017955</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>57.53</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2205</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>4331923</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2206</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>2238184</clusterCountPF>
-          <clusterCountRaw>4417665</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>50.66</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2207</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>4514102</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2208</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>2087282</clusterCountPF>
-          <clusterCountRaw>3641497</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>57.32</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2301</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>2372969</clusterCountPF>
-          <clusterCountRaw>3752096</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>63.24</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2302</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>2356197</clusterCountPF>
-          <clusterCountRaw>3904880</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>60.34</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2303</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>334562</clusterCountPF>
-          <clusterCountRaw>2147785</clusterCountRaw>
-          <oneSig>1289.76</oneSig>
-          <percentClustersPF>15.58</percentClustersPF>
-          <signal20AsPctOf1>59.07</signal20AsPctOf1>
-          <tileNumber>2304</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>2020376</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2305</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>4367266</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2306</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>906827</clusterCountPF>
-          <clusterCountRaw>4298608</clusterCountRaw>
-          <oneSig>1132.79</oneSig>
-          <percentClustersPF>21.10</percentClustersPF>
-          <signal20AsPctOf1>65.11</signal20AsPctOf1>
-          <tileNumber>2307</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>260294</clusterCountPF>
-          <clusterCountRaw>3924829</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>6.63</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2308</tileNumber>
-        </Tile>
-        <readNumber>1</readNumber>
-      </Read>
-      
-      <laneNumber>1</laneNumber>
-    </Lane>
-    <Lane>
-      <Read>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>4448159</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1101</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>2773172</clusterCountPF>
-          <clusterCountRaw>4366122</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>63.52</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1102</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>4564670</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1103</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>4585876</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1104</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>4635377</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1105</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>669217</clusterCountPF>
-          <clusterCountRaw>4420397</clusterCountRaw>
-          <oneSig>930.85</oneSig>
-          <percentClustersPF>15.14</percentClustersPF>
-          <signal20AsPctOf1>76.28</signal20AsPctOf1>
-          <tileNumber>1106</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>4676917</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1107</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>4535868</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1108</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>4334415</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1201</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>640314</clusterCountPF>
-          <clusterCountRaw>2059919</clusterCountRaw>
-          <oneSig>1000.53</oneSig>
-          <percentClustersPF>31.08</percentClustersPF>
-          <signal20AsPctOf1>85.05</signal20AsPctOf1>
-          <tileNumber>1202</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>2607069</clusterCountPF>
-          <clusterCountRaw>4434379</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>58.79</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1203</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>775741</clusterCountPF>
-          <clusterCountRaw>3750712</clusterCountRaw>
-          <oneSig>996.69</oneSig>
-          <percentClustersPF>20.68</percentClustersPF>
-          <signal20AsPctOf1>74.98</signal20AsPctOf1>
-          <tileNumber>1204</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>440909</clusterCountPF>
-          <clusterCountRaw>4058935</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>10.86</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1205</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>214300</clusterCountPF>
-          <clusterCountRaw>1790590</clusterCountRaw>
-          <oneSig>927.63</oneSig>
-          <percentClustersPF>11.97</percentClustersPF>
-          <signal20AsPctOf1>74.32</signal20AsPctOf1>
-          <tileNumber>1206</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>4699049</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1207</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>4541983</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1208</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>504330</clusterCountPF>
-          <clusterCountRaw>1946513</clusterCountRaw>
-          <oneSig>1041.75</oneSig>
-          <percentClustersPF>25.91</percentClustersPF>
-          <signal20AsPctOf1>73.96</signal20AsPctOf1>
-          <tileNumber>1301</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>4553087</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1302</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>1143910</clusterCountPF>
-          <clusterCountRaw>3886939</clusterCountRaw>
-          <oneSig>1001.45</oneSig>
-          <percentClustersPF>29.43</percentClustersPF>
-          <signal20AsPctOf1>79.86</signal20AsPctOf1>
-          <tileNumber>1303</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>394814</clusterCountPF>
-          <clusterCountRaw>1620637</clusterCountRaw>
-          <oneSig>903.30</oneSig>
-          <percentClustersPF>24.36</percentClustersPF>
-          <signal20AsPctOf1>85.19</signal20AsPctOf1>
-          <tileNumber>1304</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>751155</clusterCountPF>
-          <clusterCountRaw>3901741</clusterCountRaw>
-          <oneSig>924.69</oneSig>
-          <percentClustersPF>19.25</percentClustersPF>
-          <signal20AsPctOf1>82.04</signal20AsPctOf1>
-          <tileNumber>1305</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>279109</clusterCountPF>
-          <clusterCountRaw>4312437</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>6.47</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1306</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>4877078</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1307</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>4716643</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1308</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>621210</clusterCountPF>
-          <clusterCountRaw>2055906</clusterCountRaw>
-          <oneSig>1083.69</oneSig>
-          <percentClustersPF>30.22</percentClustersPF>
-          <signal20AsPctOf1>80.10</signal20AsPctOf1>
-          <tileNumber>2101</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>4511240</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2102</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>967970</clusterCountPF>
-          <clusterCountRaw>4049067</clusterCountRaw>
-          <oneSig>1094.71</oneSig>
-          <percentClustersPF>23.91</percentClustersPF>
-          <signal20AsPctOf1>81.54</signal20AsPctOf1>
-          <tileNumber>2103</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>610322</clusterCountPF>
-          <clusterCountRaw>4256141</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>14.34</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2104</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>945727</clusterCountPF>
-          <clusterCountRaw>4036212</clusterCountRaw>
-          <oneSig>1045.43</oneSig>
-          <percentClustersPF>23.43</percentClustersPF>
-          <signal20AsPctOf1>81.22</signal20AsPctOf1>
-          <tileNumber>2105</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>4826884</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2106</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>4806977</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2107</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>4634388</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2108</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>522871</clusterCountPF>
-          <clusterCountRaw>3978361</clusterCountRaw>
-          <oneSig>991.67</oneSig>
-          <percentClustersPF>13.14</percentClustersPF>
-          <signal20AsPctOf1>97.22</signal20AsPctOf1>
-          <tileNumber>2201</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>699409</clusterCountPF>
-          <clusterCountRaw>4040193</clusterCountRaw>
-          <oneSig>1042.31</oneSig>
-          <percentClustersPF>17.31</percentClustersPF>
-          <signal20AsPctOf1>91.73</signal20AsPctOf1>
-          <tileNumber>2202</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>234576</clusterCountPF>
-          <clusterCountRaw>1982322</clusterCountRaw>
-          <oneSig>1097.76</oneSig>
-          <percentClustersPF>11.83</percentClustersPF>
-          <signal20AsPctOf1>91.23</signal20AsPctOf1>
-          <tileNumber>2203</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>312538</clusterCountPF>
-          <clusterCountRaw>1846815</clusterCountRaw>
-          <oneSig>1060.29</oneSig>
-          <percentClustersPF>16.92</percentClustersPF>
-          <signal20AsPctOf1>81.85</signal20AsPctOf1>
-          <tileNumber>2204</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>4877670</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2205</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>4352080</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2206</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>4565158</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2207</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>4595892</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2208</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>2688747</clusterCountPF>
-          <clusterCountRaw>4326152</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>62.15</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2301</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>2702172</clusterCountPF>
-          <clusterCountRaw>4401275</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>61.40</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2302</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>375919</clusterCountPF>
-          <clusterCountRaw>1897193</clusterCountRaw>
-          <oneSig>1064.46</oneSig>
-          <percentClustersPF>19.81</percentClustersPF>
-          <signal20AsPctOf1>73.90</signal20AsPctOf1>
-          <tileNumber>2303</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>170457</clusterCountPF>
-          <clusterCountRaw>1856395</clusterCountRaw>
-          <oneSig>970.76</oneSig>
-          <percentClustersPF>9.18</percentClustersPF>
-          <signal20AsPctOf1>86.28</signal20AsPctOf1>
-          <tileNumber>2304</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>464174</clusterCountPF>
-          <clusterCountRaw>3035669</clusterCountRaw>
-          <oneSig>1098.56</oneSig>
-          <percentClustersPF>15.29</percentClustersPF>
-          <signal20AsPctOf1>72.01</signal20AsPctOf1>
-          <tileNumber>2305</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>4768558</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2306</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>260108</clusterCountPF>
-          <clusterCountRaw>4263201</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>6.10</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2307</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>4508484</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2308</tileNumber>
-        </Tile>
-        <readNumber>1</readNumber>
-      </Read>
-      
-      <laneNumber>2</laneNumber>
-    </Lane>
-    <Lane>
-      <Read>
-        <Tile>
-          <clusterCountPF>2375385</clusterCountPF>
-          <clusterCountRaw>6313330</clusterCountRaw>
-          <oneSig>1139.10</oneSig>
-          <percentClustersPF>37.62</percentClustersPF>
-          <signal20AsPctOf1>85.17</signal20AsPctOf1>
-          <tileNumber>1101</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>6286613</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1102</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>5994999</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1103</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>3262679</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1104</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>6237718</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1105</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>6033743</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1106</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>6120542</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1107</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>5567004</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1108</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>2986982</clusterCountPF>
-          <clusterCountRaw>6143687</clusterCountRaw>
-          <oneSig>1179.26</oneSig>
-          <percentClustersPF>48.62</percentClustersPF>
-          <signal20AsPctOf1>83.37</signal20AsPctOf1>
-          <tileNumber>1201</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>6160371</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1202</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>6336417</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1203</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>5941459</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1204</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>6294748</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1205</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>5833916</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1206</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>5913050</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1207</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>5886712</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1208</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>3249310</clusterCountPF>
-          <clusterCountRaw>6355086</clusterCountRaw>
-          <oneSig>1175.05</oneSig>
-          <percentClustersPF>51.13</percentClustersPF>
-          <signal20AsPctOf1>86.62</signal20AsPctOf1>
-          <tileNumber>1301</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>2482602</clusterCountPF>
-          <clusterCountRaw>6345936</clusterCountRaw>
-          <oneSig>1114.27</oneSig>
-          <percentClustersPF>39.12</percentClustersPF>
-          <signal20AsPctOf1>86.48</signal20AsPctOf1>
-          <tileNumber>1302</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>6391130</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1303</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>6306326</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1304</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>3278126</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1305</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>3954980</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1306</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>4991640</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1307</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>4731299</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1308</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>2363698</clusterCountPF>
-          <clusterCountRaw>6670949</clusterCountRaw>
-          <oneSig>1261.88</oneSig>
-          <percentClustersPF>35.43</percentClustersPF>
-          <signal20AsPctOf1>82.59</signal20AsPctOf1>
-          <tileNumber>2101</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>1287696</clusterCountPF>
-          <clusterCountRaw>6380853</clusterCountRaw>
-          <oneSig>1205.05</oneSig>
-          <percentClustersPF>20.18</percentClustersPF>
-          <signal20AsPctOf1>87.75</signal20AsPctOf1>
-          <tileNumber>2102</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>3299242</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2103</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>6024321</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2104</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>6041139</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2105</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>6065842</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2106</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>5924388</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2107</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>5810177</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2108</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>6081345</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2201</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>6434511</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2202</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>4547035</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2203</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>5924309</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2204</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>5981859</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2205</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>5706415</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2206</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>6033825</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2207</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>6078240</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2208</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>2447011</clusterCountPF>
-          <clusterCountRaw>5856223</clusterCountRaw>
-          <oneSig>1180.01</oneSig>
-          <percentClustersPF>41.78</percentClustersPF>
-          <signal20AsPctOf1>93.05</signal20AsPctOf1>
-          <tileNumber>2301</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>879365</clusterCountPF>
-          <clusterCountRaw>6085412</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>14.45</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2302</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>3459940</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2303</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>6354552</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2304</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>5912596</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2305</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>5914029</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2306</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>5058019</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2307</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>5899621</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2308</tileNumber>
-        </Tile>
-        <readNumber>1</readNumber>
-      </Read>
-      
-      <laneNumber>3</laneNumber>
-    </Lane>
-    <Lane>
-      <Read>
-        <Tile>
-          <clusterCountPF>2890389</clusterCountPF>
-          <clusterCountRaw>6154619</clusterCountRaw>
-          <oneSig>1106.26</oneSig>
-          <percentClustersPF>46.96</percentClustersPF>
-          <signal20AsPctOf1>84.42</signal20AsPctOf1>
-          <tileNumber>1101</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>3859115</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1102</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>6150759</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1103</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>6062610</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1104</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>6041213</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1105</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>6048818</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1106</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>5891349</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1107</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>5878432</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1108</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>2392573</clusterCountPF>
-          <clusterCountRaw>5835186</clusterCountRaw>
-          <oneSig>1125.79</oneSig>
-          <percentClustersPF>41.00</percentClustersPF>
-          <signal20AsPctOf1>83.06</signal20AsPctOf1>
-          <tileNumber>1201</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>1735497</clusterCountPF>
-          <clusterCountRaw>5951872</clusterCountRaw>
-          <oneSig>1071.67</oneSig>
-          <percentClustersPF>29.16</percentClustersPF>
-          <signal20AsPctOf1>86.07</signal20AsPctOf1>
-          <tileNumber>1202</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>5968968</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1203</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>5974093</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1204</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>6089365</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1205</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>5465613</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1206</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>6034569</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1207</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>4926479</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1208</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>1813170</clusterCountPF>
-          <clusterCountRaw>6065205</clusterCountRaw>
-          <oneSig>1134.80</oneSig>
-          <percentClustersPF>29.89</percentClustersPF>
-          <signal20AsPctOf1>83.87</signal20AsPctOf1>
-          <tileNumber>1301</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>6072760</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1302</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>6022433</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1303</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>5914380</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1304</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>6035108</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1305</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>6110769</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1306</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>5874705</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1307</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>5932065</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1308</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>1933417</clusterCountPF>
-          <clusterCountRaw>6057448</clusterCountRaw>
-          <oneSig>1230.29</oneSig>
-          <percentClustersPF>31.92</percentClustersPF>
-          <signal20AsPctOf1>85.88</signal20AsPctOf1>
-          <tileNumber>2101</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>5897444</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2102</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>6389435</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2103</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>3815684</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2104</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>6071732</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2105</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>5821758</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2106</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>5873744</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2107</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>6008801</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2108</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>1611899</clusterCountPF>
-          <clusterCountRaw>5880262</clusterCountRaw>
-          <oneSig>1241.48</oneSig>
-          <percentClustersPF>27.41</percentClustersPF>
-          <signal20AsPctOf1>0.00</signal20AsPctOf1>
-          <tileNumber>2201</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>1996737</clusterCountPF>
-          <clusterCountRaw>6347857</clusterCountRaw>
-          <oneSig>1188.53</oneSig>
-          <percentClustersPF>31.46</percentClustersPF>
-          <signal20AsPctOf1>0.00</signal20AsPctOf1>
-          <tileNumber>2202</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>6362861</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2203</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>5852976</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2204</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>6177697</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2205</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>6022917</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2206</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>6123053</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2207</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>4798958</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2208</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>4627342</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2301</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>1458201</clusterCountPF>
-          <clusterCountRaw>6151616</clusterCountRaw>
-          <oneSig>1197.06</oneSig>
-          <percentClustersPF>23.70</percentClustersPF>
-          <signal20AsPctOf1>85.80</signal20AsPctOf1>
-          <tileNumber>2302</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>6007566</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2303</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>6300233</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2304</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>5970238</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2305</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>5954738</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2306</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>6046864</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2307</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>6017839</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2308</tileNumber>
-        </Tile>
-        <readNumber>1</readNumber>
-      </Read>
-      
-      <laneNumber>4</laneNumber>
-    </Lane>
-    <Lane>
-      <Read>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>5631135</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1101</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>2681269</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1102</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>2607227</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1103</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>5940868</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1104</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>3300266</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1105</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>3183165</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1106</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>3168588</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1107</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>3105604</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1108</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>3054041</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1201</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>4779051</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1202</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>5324239</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1203</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>5972215</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1204</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>3287230</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1205</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>2762623</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1206</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>3156192</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1207</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>2971658</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1208</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>496907</clusterCountPF>
-          <clusterCountRaw>5676984</clusterCountRaw>
-          <oneSig>-685.71</oneSig>
-          <percentClustersPF>8.75</percentClustersPF>
-          <signal20AsPctOf1>138.72</signal20AsPctOf1>
-          <tileNumber>1301</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>5350372</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1302</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>5418521</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1303</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>5941481</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1304</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>3314554</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1305</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>3168898</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1306</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>3124790</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1307</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>3116740</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1308</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>1493791</clusterCountPF>
-          <clusterCountRaw>5492816</clusterCountRaw>
-          <oneSig>-532.02</oneSig>
-          <percentClustersPF>27.20</percentClustersPF>
-          <signal20AsPctOf1>148.77</signal20AsPctOf1>
-          <tileNumber>2101</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>514231</clusterCountPF>
-          <clusterCountRaw>5761146</clusterCountRaw>
-          <oneSig>-572.34</oneSig>
-          <percentClustersPF>8.93</percentClustersPF>
-          <signal20AsPctOf1>154.15</signal20AsPctOf1>
-          <tileNumber>2102</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>3834974</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2103</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>6041237</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2104</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>3371454</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2105</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>3271578</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2106</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>3145886</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2107</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>2812963</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2108</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>5714487</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2201</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>4323735</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2202</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>5689972</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2203</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>5590891</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2204</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>2565274</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2205</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>3103834</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2206</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>2775071</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2207</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>2721788</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2208</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>2808679</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2301</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>5740118</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2302</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>2710478</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2303</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>6053923</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2304</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>3311585</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2305</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>3229925</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2306</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>3052698</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2307</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>3161815</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2308</tileNumber>
-        </Tile>
-        <readNumber>1</readNumber>
-      </Read>
-      
-      <laneNumber>5</laneNumber>
-    </Lane>
-    <Lane>
-      <Read>
-        <Tile>
-          <clusterCountPF>4328250</clusterCountPF>
-          <clusterCountRaw>6108747</clusterCountRaw>
-          <oneSig>1170.17</oneSig>
-          <percentClustersPF>70.85</percentClustersPF>
-          <signal20AsPctOf1>85.98</signal20AsPctOf1>
-          <tileNumber>1101</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>3763550</clusterCountPF>
-          <clusterCountRaw>5974162</clusterCountRaw>
-          <oneSig>1171.51</oneSig>
-          <percentClustersPF>63.00</percentClustersPF>
-          <signal20AsPctOf1>85.49</signal20AsPctOf1>
-          <tileNumber>1102</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>3376849</clusterCountPF>
-          <clusterCountRaw>5986042</clusterCountRaw>
-          <oneSig>1127.66</oneSig>
-          <percentClustersPF>56.41</percentClustersPF>
-          <signal20AsPctOf1>86.28</signal20AsPctOf1>
-          <tileNumber>1103</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>1454678</clusterCountPF>
-          <clusterCountRaw>5553026</clusterCountRaw>
-          <oneSig>1038.63</oneSig>
-          <percentClustersPF>26.20</percentClustersPF>
-          <signal20AsPctOf1>90.35</signal20AsPctOf1>
-          <tileNumber>1104</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>836786</clusterCountPF>
-          <clusterCountRaw>5751374</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>14.55</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1105</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>1008081</clusterCountPF>
-          <clusterCountRaw>5436595</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>18.54</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1106</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>1089073</clusterCountPF>
-          <clusterCountRaw>4720242</clusterCountRaw>
-          <oneSig>970.77</oneSig>
-          <percentClustersPF>23.07</percentClustersPF>
-          <signal20AsPctOf1>87.99</signal20AsPctOf1>
-          <tileNumber>1107</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>5628492</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1108</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>4255350</clusterCountPF>
-          <clusterCountRaw>6074637</clusterCountRaw>
-          <oneSig>1111.85</oneSig>
-          <percentClustersPF>70.05</percentClustersPF>
-          <signal20AsPctOf1>90.15</signal20AsPctOf1>
-          <tileNumber>1201</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>3764335</clusterCountPF>
-          <clusterCountRaw>5992750</clusterCountRaw>
-          <oneSig>1122.60</oneSig>
-          <percentClustersPF>62.81</percentClustersPF>
-          <signal20AsPctOf1>87.23</signal20AsPctOf1>
-          <tileNumber>1202</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>2949541</clusterCountPF>
-          <clusterCountRaw>5863819</clusterCountRaw>
-          <oneSig>1041.75</oneSig>
-          <percentClustersPF>50.30</percentClustersPF>
-          <signal20AsPctOf1>91.25</signal20AsPctOf1>
-          <tileNumber>1203</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>1960969</clusterCountPF>
-          <clusterCountRaw>5759754</clusterCountRaw>
-          <oneSig>985.74</oneSig>
-          <percentClustersPF>34.05</percentClustersPF>
-          <signal20AsPctOf1>94.16</signal20AsPctOf1>
-          <tileNumber>1204</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>1458718</clusterCountPF>
-          <clusterCountRaw>5348340</clusterCountRaw>
-          <oneSig>973.95</oneSig>
-          <percentClustersPF>27.27</percentClustersPF>
-          <signal20AsPctOf1>92.07</signal20AsPctOf1>
-          <tileNumber>1205</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>6188127</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1206</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>6029568</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1207</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>5783284</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1208</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>4164137</clusterCountPF>
-          <clusterCountRaw>6062113</clusterCountRaw>
-          <oneSig>1111.15</oneSig>
-          <percentClustersPF>68.69</percentClustersPF>
-          <signal20AsPctOf1>90.64</signal20AsPctOf1>
-          <tileNumber>1301</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>3807278</clusterCountPF>
-          <clusterCountRaw>6009706</clusterCountRaw>
-          <oneSig>1103.05</oneSig>
-          <percentClustersPF>63.35</percentClustersPF>
-          <signal20AsPctOf1>89.93</signal20AsPctOf1>
-          <tileNumber>1302</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>2646889</clusterCountPF>
-          <clusterCountRaw>5860357</clusterCountRaw>
-          <oneSig>1047.72</oneSig>
-          <percentClustersPF>45.17</percentClustersPF>
-          <signal20AsPctOf1>91.04</signal20AsPctOf1>
-          <tileNumber>1303</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>618116</clusterCountPF>
-          <clusterCountRaw>5936009</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>10.41</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1304</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>966704</clusterCountPF>
-          <clusterCountRaw>5780730</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>16.72</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1305</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>985185</clusterCountPF>
-          <clusterCountRaw>5442490</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>18.10</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1306</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>5865063</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1307</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>5759999</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>1308</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>4457818</clusterCountPF>
-          <clusterCountRaw>6178104</clusterCountRaw>
-          <oneSig>1290.91</oneSig>
-          <percentClustersPF>72.16</percentClustersPF>
-          <signal20AsPctOf1>87.89</signal20AsPctOf1>
-          <tileNumber>2101</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>4135701</clusterCountPF>
-          <clusterCountRaw>6067338</clusterCountRaw>
-          <oneSig>1270.47</oneSig>
-          <percentClustersPF>68.16</percentClustersPF>
-          <signal20AsPctOf1>87.91</signal20AsPctOf1>
-          <tileNumber>2102</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>3142805</clusterCountPF>
-          <clusterCountRaw>5915123</clusterCountRaw>
-          <oneSig>1190.65</oneSig>
-          <percentClustersPF>53.13</percentClustersPF>
-          <signal20AsPctOf1>91.67</signal20AsPctOf1>
-          <tileNumber>2103</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>2857800</clusterCountPF>
-          <clusterCountRaw>5959413</clusterCountRaw>
-          <oneSig>1192.35</oneSig>
-          <percentClustersPF>47.95</percentClustersPF>
-          <signal20AsPctOf1>88.82</signal20AsPctOf1>
-          <tileNumber>2104</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>1231733</clusterCountPF>
-          <clusterCountRaw>5733754</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>21.48</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2105</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>2633715</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2106</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>719661</clusterCountPF>
-          <clusterCountRaw>5147810</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>13.98</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2107</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>5662637</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2108</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>5811788</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2201</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>5919142</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2202</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>5921326</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2203</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>5683685</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2204</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>5369472</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2205</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>5594894</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2206</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>5888075</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2207</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>5533822</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2208</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>4347658</clusterCountPF>
-          <clusterCountRaw>6149228</clusterCountRaw>
-          <oneSig>1270.97</oneSig>
-          <percentClustersPF>70.70</percentClustersPF>
-          <signal20AsPctOf1>87.57</signal20AsPctOf1>
-          <tileNumber>2301</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>3927517</clusterCountPF>
-          <clusterCountRaw>6038155</clusterCountRaw>
-          <oneSig>1260.11</oneSig>
-          <percentClustersPF>65.04</percentClustersPF>
-          <signal20AsPctOf1>88.09</signal20AsPctOf1>
-          <tileNumber>2302</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>1031548</clusterCountPF>
-          <clusterCountRaw>3463054</clusterCountRaw>
-          <oneSig>1223.05</oneSig>
-          <percentClustersPF>29.79</percentClustersPF>
-          <signal20AsPctOf1>88.74</signal20AsPctOf1>
-          <tileNumber>2303</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>464073</clusterCountPF>
-          <clusterCountRaw>6006755</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>7.73</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2304</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>1812404</clusterCountPF>
-          <clusterCountRaw>5211053</clusterCountRaw>
-          <oneSig>1109.48</oneSig>
-          <percentClustersPF>34.78</percentClustersPF>
-          <signal20AsPctOf1>92.72</signal20AsPctOf1>
-          <tileNumber>2305</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>6128662</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2306</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>5927816</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2307</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>5684780</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2308</tileNumber>
-        </Tile>
-        <readNumber>1</readNumber>
-      </Read>
-      
-      <laneNumber>6</laneNumber>
-    </Lane>
-    <Lane>
-      <Read>
-        <Tile>
-          <clusterCountPF>1290892</clusterCountPF>
-          <clusterCountRaw>1318384</clusterCountRaw>
-          <oneSig>1457.61</oneSig>
-          <percentClustersPF>97.91</percentClustersPF>
-          <signal20AsPctOf1>93.12</signal20AsPctOf1>
-          <tileNumber>1101</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>1405177</clusterCountPF>
-          <clusterCountRaw>1435753</clusterCountRaw>
-          <oneSig>1428.15</oneSig>
-          <percentClustersPF>97.87</percentClustersPF>
-          <signal20AsPctOf1>93.14</signal20AsPctOf1>
-          <tileNumber>1102</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>1518681</clusterCountPF>
-          <clusterCountRaw>1553867</clusterCountRaw>
-          <oneSig>1415.45</oneSig>
-          <percentClustersPF>97.74</percentClustersPF>
-          <signal20AsPctOf1>93.14</signal20AsPctOf1>
-          <tileNumber>1103</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>1674083</clusterCountPF>
-          <clusterCountRaw>1713366</clusterCountRaw>
-          <oneSig>1397.13</oneSig>
-          <percentClustersPF>97.71</percentClustersPF>
-          <signal20AsPctOf1>91.75</signal20AsPctOf1>
-          <tileNumber>1104</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>1848975</clusterCountPF>
-          <clusterCountRaw>1894031</clusterCountRaw>
-          <oneSig>1453.02</oneSig>
-          <percentClustersPF>97.62</percentClustersPF>
-          <signal20AsPctOf1>87.65</signal20AsPctOf1>
-          <tileNumber>1105</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>2036288</clusterCountPF>
-          <clusterCountRaw>2089577</clusterCountRaw>
-          <oneSig>1351.03</oneSig>
-          <percentClustersPF>97.45</percentClustersPF>
-          <signal20AsPctOf1>92.96</signal20AsPctOf1>
-          <tileNumber>1106</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>2235825</clusterCountPF>
-          <clusterCountRaw>2300996</clusterCountRaw>
-          <oneSig>1330.80</oneSig>
-          <percentClustersPF>97.17</percentClustersPF>
-          <signal20AsPctOf1>92.09</signal20AsPctOf1>
-          <tileNumber>1107</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>2451380</clusterCountPF>
-          <clusterCountRaw>2541307</clusterCountRaw>
-          <oneSig>1293.67</oneSig>
-          <percentClustersPF>96.46</percentClustersPF>
-          <signal20AsPctOf1>91.71</signal20AsPctOf1>
-          <tileNumber>1108</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>1248007</clusterCountPF>
-          <clusterCountRaw>1271398</clusterCountRaw>
-          <oneSig>1456.86</oneSig>
-          <percentClustersPF>98.16</percentClustersPF>
-          <signal20AsPctOf1>92.75</signal20AsPctOf1>
-          <tileNumber>1201</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>1353214</clusterCountPF>
-          <clusterCountRaw>1379519</clusterCountRaw>
-          <oneSig>1373.11</oneSig>
-          <percentClustersPF>98.09</percentClustersPF>
-          <signal20AsPctOf1>92.92</signal20AsPctOf1>
-          <tileNumber>1202</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>1476775</clusterCountPF>
-          <clusterCountRaw>1506069</clusterCountRaw>
-          <oneSig>1406.85</oneSig>
-          <percentClustersPF>98.05</percentClustersPF>
-          <signal20AsPctOf1>92.17</signal20AsPctOf1>
-          <tileNumber>1203</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>1596576</clusterCountPF>
-          <clusterCountRaw>1629689</clusterCountRaw>
-          <oneSig>1395.32</oneSig>
-          <percentClustersPF>97.97</percentClustersPF>
-          <signal20AsPctOf1>90.76</signal20AsPctOf1>
-          <tileNumber>1204</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>1802357</clusterCountPF>
-          <clusterCountRaw>1838238</clusterCountRaw>
-          <oneSig>1383.42</oneSig>
-          <percentClustersPF>98.05</percentClustersPF>
-          <signal20AsPctOf1>91.84</signal20AsPctOf1>
-          <tileNumber>1205</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>1985501</clusterCountPF>
-          <clusterCountRaw>2028373</clusterCountRaw>
-          <oneSig>1355.39</oneSig>
-          <percentClustersPF>97.89</percentClustersPF>
-          <signal20AsPctOf1>91.43</signal20AsPctOf1>
-          <tileNumber>1206</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>2182408</clusterCountPF>
-          <clusterCountRaw>2237640</clusterCountRaw>
-          <oneSig>1326.23</oneSig>
-          <percentClustersPF>97.53</percentClustersPF>
-          <signal20AsPctOf1>91.95</signal20AsPctOf1>
-          <tileNumber>1207</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>2412726</clusterCountPF>
-          <clusterCountRaw>2498414</clusterCountRaw>
-          <oneSig>1284.50</oneSig>
-          <percentClustersPF>96.57</percentClustersPF>
-          <signal20AsPctOf1>91.14</signal20AsPctOf1>
-          <tileNumber>1208</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>1329553</clusterCountPF>
-          <clusterCountRaw>1353194</clusterCountRaw>
-          <oneSig>1500.38</oneSig>
-          <percentClustersPF>98.25</percentClustersPF>
-          <signal20AsPctOf1>90.00</signal20AsPctOf1>
-          <tileNumber>1301</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>1448646</clusterCountPF>
-          <clusterCountRaw>1475015</clusterCountRaw>
-          <oneSig>1426.92</oneSig>
-          <percentClustersPF>98.21</percentClustersPF>
-          <signal20AsPctOf1>91.04</signal20AsPctOf1>
-          <tileNumber>1302</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>1584849</clusterCountPF>
-          <clusterCountRaw>1618578</clusterCountRaw>
-          <oneSig>1418.87</oneSig>
-          <percentClustersPF>97.92</percentClustersPF>
-          <signal20AsPctOf1>90.98</signal20AsPctOf1>
-          <tileNumber>1303</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>1703358</clusterCountPF>
-          <clusterCountRaw>1738426</clusterCountRaw>
-          <oneSig>1408.33</oneSig>
-          <percentClustersPF>97.98</percentClustersPF>
-          <signal20AsPctOf1>90.65</signal20AsPctOf1>
-          <tileNumber>1304</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>1962537</clusterCountPF>
-          <clusterCountRaw>2003605</clusterCountRaw>
-          <oneSig>1417.26</oneSig>
-          <percentClustersPF>97.95</percentClustersPF>
-          <signal20AsPctOf1>88.90</signal20AsPctOf1>
-          <tileNumber>1305</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>2155571</clusterCountPF>
-          <clusterCountRaw>2205956</clusterCountRaw>
-          <oneSig>1353.91</oneSig>
-          <percentClustersPF>97.72</percentClustersPF>
-          <signal20AsPctOf1>91.89</signal20AsPctOf1>
-          <tileNumber>1306</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>2371794</clusterCountPF>
-          <clusterCountRaw>2438582</clusterCountRaw>
-          <oneSig>1349.40</oneSig>
-          <percentClustersPF>97.26</percentClustersPF>
-          <signal20AsPctOf1>87.65</signal20AsPctOf1>
-          <tileNumber>1307</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>2609442</clusterCountPF>
-          <clusterCountRaw>2697578</clusterCountRaw>
-          <oneSig>1273.05</oneSig>
-          <percentClustersPF>96.73</percentClustersPF>
-          <signal20AsPctOf1>89.13</signal20AsPctOf1>
-          <tileNumber>1308</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>1274462</clusterCountPF>
-          <clusterCountRaw>1301586</clusterCountRaw>
-          <oneSig>1601.86</oneSig>
-          <percentClustersPF>97.92</percentClustersPF>
-          <signal20AsPctOf1>92.97</signal20AsPctOf1>
-          <tileNumber>2101</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>1383611</clusterCountPF>
-          <clusterCountRaw>1413798</clusterCountRaw>
-          <oneSig>1567.26</oneSig>
-          <percentClustersPF>97.86</percentClustersPF>
-          <signal20AsPctOf1>92.72</signal20AsPctOf1>
-          <tileNumber>2102</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>1500886</clusterCountPF>
-          <clusterCountRaw>1538148</clusterCountRaw>
-          <oneSig>1575.16</oneSig>
-          <percentClustersPF>97.58</percentClustersPF>
-          <signal20AsPctOf1>91.30</signal20AsPctOf1>
-          <tileNumber>2103</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>1658029</clusterCountPF>
-          <clusterCountRaw>1695613</clusterCountRaw>
-          <oneSig>1551.84</oneSig>
-          <percentClustersPF>97.78</percentClustersPF>
-          <signal20AsPctOf1>92.03</signal20AsPctOf1>
-          <tileNumber>2104</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>1833421</clusterCountPF>
-          <clusterCountRaw>1876931</clusterCountRaw>
-          <oneSig>1525.11</oneSig>
-          <percentClustersPF>97.68</percentClustersPF>
-          <signal20AsPctOf1>92.43</signal20AsPctOf1>
-          <tileNumber>2105</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>2026973</clusterCountPF>
-          <clusterCountRaw>2078853</clusterCountRaw>
-          <oneSig>1509.17</oneSig>
-          <percentClustersPF>97.50</percentClustersPF>
-          <signal20AsPctOf1>91.91</signal20AsPctOf1>
-          <tileNumber>2106</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>2259381</clusterCountPF>
-          <clusterCountRaw>2325032</clusterCountRaw>
-          <oneSig>1467.69</oneSig>
-          <percentClustersPF>97.18</percentClustersPF>
-          <signal20AsPctOf1>92.25</signal20AsPctOf1>
-          <tileNumber>2107</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>2558255</clusterCountPF>
-          <clusterCountRaw>2655400</clusterCountRaw>
-          <oneSig>1444.06</oneSig>
-          <percentClustersPF>96.34</percentClustersPF>
-          <signal20AsPctOf1>91.44</signal20AsPctOf1>
-          <tileNumber>2108</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>970653</clusterCountPF>
-          <clusterCountRaw>1235179</clusterCountRaw>
-          <oneSig>1584.09</oneSig>
-          <percentClustersPF>78.58</percentClustersPF>
-          <signal20AsPctOf1>93.93</signal20AsPctOf1>
-          <tileNumber>2201</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>1342455</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2202</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>1465297</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2203</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>675140</clusterCountPF>
-          <clusterCountRaw>1582751</clusterCountRaw>
-          <oneSig>1505.46</oneSig>
-          <percentClustersPF>42.66</percentClustersPF>
-          <signal20AsPctOf1>94.13</signal20AsPctOf1>
-          <tileNumber>2204</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>1775056</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2205</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>1957270</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2206</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>0</clusterCountPF>
-          <clusterCountRaw>2164043</clusterCountRaw>
-          <oneSig>0.00</oneSig>
-          <percentClustersPF>0.00</percentClustersPF>
-          <signal20AsPctOf1>N/A</signal20AsPctOf1>
-          <tileNumber>2207</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>1254733</clusterCountPF>
-          <clusterCountRaw>2441653</clusterCountRaw>
-          <oneSig>1444.53</oneSig>
-          <percentClustersPF>51.39</percentClustersPF>
-          <signal20AsPctOf1>93.17</signal20AsPctOf1>
-          <tileNumber>2208</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>1296622</clusterCountPF>
-          <clusterCountRaw>1325781</clusterCountRaw>
-          <oneSig>1494.17</oneSig>
-          <percentClustersPF>97.80</percentClustersPF>
-          <signal20AsPctOf1>98.31</signal20AsPctOf1>
-          <tileNumber>2301</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>1424658</clusterCountPF>
-          <clusterCountRaw>1452340</clusterCountRaw>
-          <oneSig>1528.87</oneSig>
-          <percentClustersPF>98.09</percentClustersPF>
-          <signal20AsPctOf1>93.49</signal20AsPctOf1>
-          <tileNumber>2302</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>1569437</clusterCountPF>
-          <clusterCountRaw>1602067</clusterCountRaw>
-          <oneSig>1539.36</oneSig>
-          <percentClustersPF>97.96</percentClustersPF>
-          <signal20AsPctOf1>93.10</signal20AsPctOf1>
-          <tileNumber>2303</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>1682427</clusterCountPF>
-          <clusterCountRaw>1720505</clusterCountRaw>
-          <oneSig>1521.03</oneSig>
-          <percentClustersPF>97.79</percentClustersPF>
-          <signal20AsPctOf1>92.61</signal20AsPctOf1>
-          <tileNumber>2304</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>1939141</clusterCountPF>
-          <clusterCountRaw>1979800</clusterCountRaw>
-          <oneSig>1523.67</oneSig>
-          <percentClustersPF>97.95</percentClustersPF>
-          <signal20AsPctOf1>91.62</signal20AsPctOf1>
-          <tileNumber>2305</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>2134547</clusterCountPF>
-          <clusterCountRaw>2184095</clusterCountRaw>
-          <oneSig>1486.10</oneSig>
-          <percentClustersPF>97.73</percentClustersPF>
-          <signal20AsPctOf1>92.33</signal20AsPctOf1>
-          <tileNumber>2306</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>2356389</clusterCountPF>
-          <clusterCountRaw>2421537</clusterCountRaw>
-          <oneSig>1466.46</oneSig>
-          <percentClustersPF>97.31</percentClustersPF>
-          <signal20AsPctOf1>91.63</signal20AsPctOf1>
-          <tileNumber>2307</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>2602908</clusterCountPF>
-          <clusterCountRaw>2695532</clusterCountRaw>
-          <oneSig>1428.19</oneSig>
-          <percentClustersPF>96.56</percentClustersPF>
-          <signal20AsPctOf1>92.25</signal20AsPctOf1>
-          <tileNumber>2308</tileNumber>
-        </Tile>
-        <readNumber>1</readNumber>
-      </Read>
-      
-      <laneNumber>7</laneNumber>
-    </Lane>
-    <Lane>
-      <Read>
-        <Tile>
-          <clusterCountPF>3672425</clusterCountPF>
-          <clusterCountRaw>3999929</clusterCountRaw>
-          <oneSig>1359.39</oneSig>
-          <percentClustersPF>91.81</percentClustersPF>
-          <signal20AsPctOf1>88.45</signal20AsPctOf1>
-          <tileNumber>1101</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>3843360</clusterCountPF>
-          <clusterCountRaw>4214896</clusterCountRaw>
-          <oneSig>1338.54</oneSig>
-          <percentClustersPF>91.19</percentClustersPF>
-          <signal20AsPctOf1>88.01</signal20AsPctOf1>
-          <tileNumber>1102</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>3985275</clusterCountPF>
-          <clusterCountRaw>4432069</clusterCountRaw>
-          <oneSig>1321.41</oneSig>
-          <percentClustersPF>89.92</percentClustersPF>
-          <signal20AsPctOf1>88.40</signal20AsPctOf1>
-          <tileNumber>1103</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>4195701</clusterCountPF>
-          <clusterCountRaw>4688257</clusterCountRaw>
-          <oneSig>1298.99</oneSig>
-          <percentClustersPF>89.49</percentClustersPF>
-          <signal20AsPctOf1>87.97</signal20AsPctOf1>
-          <tileNumber>1104</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>4416383</clusterCountPF>
-          <clusterCountRaw>4972645</clusterCountRaw>
-          <oneSig>1283.87</oneSig>
-          <percentClustersPF>88.81</percentClustersPF>
-          <signal20AsPctOf1>88.72</signal20AsPctOf1>
-          <tileNumber>1105</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>4542437</clusterCountPF>
-          <clusterCountRaw>5209248</clusterCountRaw>
-          <oneSig>1258.05</oneSig>
-          <percentClustersPF>87.20</percentClustersPF>
-          <signal20AsPctOf1>87.14</signal20AsPctOf1>
-          <tileNumber>1106</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>4596548</clusterCountPF>
-          <clusterCountRaw>5399922</clusterCountRaw>
-          <oneSig>1230.54</oneSig>
-          <percentClustersPF>85.12</percentClustersPF>
-          <signal20AsPctOf1>87.31</signal20AsPctOf1>
-          <tileNumber>1107</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>4316902</clusterCountPF>
-          <clusterCountRaw>5826697</clusterCountRaw>
-          <oneSig>1182.73</oneSig>
-          <percentClustersPF>74.09</percentClustersPF>
-          <signal20AsPctOf1>87.01</signal20AsPctOf1>
-          <tileNumber>1108</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>3559633</clusterCountPF>
-          <clusterCountRaw>3873994</clusterCountRaw>
-          <oneSig>1365.15</oneSig>
-          <percentClustersPF>91.89</percentClustersPF>
-          <signal20AsPctOf1>87.07</signal20AsPctOf1>
-          <tileNumber>1201</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>3742085</clusterCountPF>
-          <clusterCountRaw>4103838</clusterCountRaw>
-          <oneSig>1345.87</oneSig>
-          <percentClustersPF>91.19</percentClustersPF>
-          <signal20AsPctOf1>87.69</signal20AsPctOf1>
-          <tileNumber>1202</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>3809926</clusterCountPF>
-          <clusterCountRaw>4219389</clusterCountRaw>
-          <oneSig>1314.55</oneSig>
-          <percentClustersPF>90.30</percentClustersPF>
-          <signal20AsPctOf1>88.34</signal20AsPctOf1>
-          <tileNumber>1203</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>4095946</clusterCountPF>
-          <clusterCountRaw>4572435</clusterCountRaw>
-          <oneSig>1296.18</oneSig>
-          <percentClustersPF>89.58</percentClustersPF>
-          <signal20AsPctOf1>88.12</signal20AsPctOf1>
-          <tileNumber>1204</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>4329806</clusterCountPF>
-          <clusterCountRaw>4852097</clusterCountRaw>
-          <oneSig>1291.90</oneSig>
-          <percentClustersPF>89.24</percentClustersPF>
-          <signal20AsPctOf1>87.70</signal20AsPctOf1>
-          <tileNumber>1205</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>4484284</clusterCountPF>
-          <clusterCountRaw>5103542</clusterCountRaw>
-          <oneSig>1271.54</oneSig>
-          <percentClustersPF>87.87</percentClustersPF>
-          <signal20AsPctOf1>86.33</signal20AsPctOf1>
-          <tileNumber>1206</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>4545978</clusterCountPF>
-          <clusterCountRaw>5322851</clusterCountRaw>
-          <oneSig>1240.07</oneSig>
-          <percentClustersPF>85.40</percentClustersPF>
-          <signal20AsPctOf1>86.60</signal20AsPctOf1>
-          <tileNumber>1207</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>4236437</clusterCountPF>
-          <clusterCountRaw>5399609</clusterCountRaw>
-          <oneSig>1200.52</oneSig>
-          <percentClustersPF>78.46</percentClustersPF>
-          <signal20AsPctOf1>82.29</signal20AsPctOf1>
-          <tileNumber>1208</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>3745093</clusterCountPF>
-          <clusterCountRaw>4091803</clusterCountRaw>
-          <oneSig>1377.26</oneSig>
-          <percentClustersPF>91.53</percentClustersPF>
-          <signal20AsPctOf1>85.86</signal20AsPctOf1>
-          <tileNumber>1301</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>3938377</clusterCountPF>
-          <clusterCountRaw>4338397</clusterCountRaw>
-          <oneSig>1338.33</oneSig>
-          <percentClustersPF>90.78</percentClustersPF>
-          <signal20AsPctOf1>87.63</signal20AsPctOf1>
-          <tileNumber>1302</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>3963514</clusterCountPF>
-          <clusterCountRaw>4395406</clusterCountRaw>
-          <oneSig>1308.84</oneSig>
-          <percentClustersPF>90.17</percentClustersPF>
-          <signal20AsPctOf1>88.08</signal20AsPctOf1>
-          <tileNumber>1303</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>4282045</clusterCountPF>
-          <clusterCountRaw>4835601</clusterCountRaw>
-          <oneSig>1287.81</oneSig>
-          <percentClustersPF>88.55</percentClustersPF>
-          <signal20AsPctOf1>87.58</signal20AsPctOf1>
-          <tileNumber>1304</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>4498474</clusterCountPF>
-          <clusterCountRaw>5114668</clusterCountRaw>
-          <oneSig>1282.81</oneSig>
-          <percentClustersPF>87.95</percentClustersPF>
-          <signal20AsPctOf1>87.46</signal20AsPctOf1>
-          <tileNumber>1305</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>4602295</clusterCountPF>
-          <clusterCountRaw>5337911</clusterCountRaw>
-          <oneSig>1257.03</oneSig>
-          <percentClustersPF>86.22</percentClustersPF>
-          <signal20AsPctOf1>86.97</signal20AsPctOf1>
-          <tileNumber>1306</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>4600782</clusterCountPF>
-          <clusterCountRaw>5501477</clusterCountRaw>
-          <oneSig>1225.51</oneSig>
-          <percentClustersPF>83.63</percentClustersPF>
-          <signal20AsPctOf1>86.53</signal20AsPctOf1>
-          <tileNumber>1307</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>4145380</clusterCountPF>
-          <clusterCountRaw>5872929</clusterCountRaw>
-          <oneSig>1175.25</oneSig>
-          <percentClustersPF>70.58</percentClustersPF>
-          <signal20AsPctOf1>83.85</signal20AsPctOf1>
-          <tileNumber>1308</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>3654318</clusterCountPF>
-          <clusterCountRaw>3969110</clusterCountRaw>
-          <oneSig>1467.08</oneSig>
-          <percentClustersPF>92.07</percentClustersPF>
-          <signal20AsPctOf1>90.01</signal20AsPctOf1>
-          <tileNumber>2101</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>3839864</clusterCountPF>
-          <clusterCountRaw>4184268</clusterCountRaw>
-          <oneSig>1439.99</oneSig>
-          <percentClustersPF>91.77</percentClustersPF>
-          <signal20AsPctOf1>90.66</signal20AsPctOf1>
-          <tileNumber>2102</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>3969051</clusterCountPF>
-          <clusterCountRaw>4413583</clusterCountRaw>
-          <oneSig>1422.63</oneSig>
-          <percentClustersPF>89.93</percentClustersPF>
-          <signal20AsPctOf1>90.66</signal20AsPctOf1>
-          <tileNumber>2103</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>4219627</clusterCountPF>
-          <clusterCountRaw>4681613</clusterCountRaw>
-          <oneSig>1403.97</oneSig>
-          <percentClustersPF>90.13</percentClustersPF>
-          <signal20AsPctOf1>90.49</signal20AsPctOf1>
-          <tileNumber>2104</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>4414065</clusterCountPF>
-          <clusterCountRaw>4956383</clusterCountRaw>
-          <oneSig>1386.15</oneSig>
-          <percentClustersPF>89.06</percentClustersPF>
-          <signal20AsPctOf1>89.95</signal20AsPctOf1>
-          <tileNumber>2105</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>4579204</clusterCountPF>
-          <clusterCountRaw>5232590</clusterCountRaw>
-          <oneSig>1365.53</oneSig>
-          <percentClustersPF>87.51</percentClustersPF>
-          <signal20AsPctOf1>89.26</signal20AsPctOf1>
-          <tileNumber>2106</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>4682961</clusterCountPF>
-          <clusterCountRaw>5469205</clusterCountRaw>
-          <oneSig>1333.32</oneSig>
-          <percentClustersPF>85.62</percentClustersPF>
-          <signal20AsPctOf1>89.03</signal20AsPctOf1>
-          <tileNumber>2107</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>3928926</clusterCountPF>
-          <clusterCountRaw>5870004</clusterCountRaw>
-          <oneSig>1286.80</oneSig>
-          <percentClustersPF>66.93</percentClustersPF>
-          <signal20AsPctOf1>87.34</signal20AsPctOf1>
-          <tileNumber>2108</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>3556282</clusterCountPF>
-          <clusterCountRaw>3852699</clusterCountRaw>
-          <oneSig>1457.50</oneSig>
-          <percentClustersPF>92.31</percentClustersPF>
-          <signal20AsPctOf1>88.49</signal20AsPctOf1>
-          <tileNumber>2201</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>3741136</clusterCountPF>
-          <clusterCountRaw>4072130</clusterCountRaw>
-          <oneSig>1441.42</oneSig>
-          <percentClustersPF>91.87</percentClustersPF>
-          <signal20AsPctOf1>89.42</signal20AsPctOf1>
-          <tileNumber>2202</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>3842742</clusterCountPF>
-          <clusterCountRaw>4212391</clusterCountRaw>
-          <oneSig>1415.97</oneSig>
-          <percentClustersPF>91.22</percentClustersPF>
-          <signal20AsPctOf1>89.95</signal20AsPctOf1>
-          <tileNumber>2203</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>4140127</clusterCountPF>
-          <clusterCountRaw>4577001</clusterCountRaw>
-          <oneSig>1387.43</oneSig>
-          <percentClustersPF>90.46</percentClustersPF>
-          <signal20AsPctOf1>89.88</signal20AsPctOf1>
-          <tileNumber>2204</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>4372303</clusterCountPF>
-          <clusterCountRaw>4862284</clusterCountRaw>
-          <oneSig>1384.77</oneSig>
-          <percentClustersPF>89.92</percentClustersPF>
-          <signal20AsPctOf1>88.76</signal20AsPctOf1>
-          <tileNumber>2205</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>4531801</clusterCountPF>
-          <clusterCountRaw>5119662</clusterCountRaw>
-          <oneSig>1367.26</oneSig>
-          <percentClustersPF>88.52</percentClustersPF>
-          <signal20AsPctOf1>88.81</signal20AsPctOf1>
-          <tileNumber>2206</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>4148375</clusterCountPF>
-          <clusterCountRaw>5301292</clusterCountRaw>
-          <oneSig>1326.28</oneSig>
-          <percentClustersPF>78.25</percentClustersPF>
-          <signal20AsPctOf1>89.46</signal20AsPctOf1>
-          <tileNumber>2207</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>3747919</clusterCountPF>
-          <clusterCountRaw>5523881</clusterCountRaw>
-          <oneSig>1328.04</oneSig>
-          <percentClustersPF>67.85</percentClustersPF>
-          <signal20AsPctOf1>85.54</signal20AsPctOf1>
-          <tileNumber>2208</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>3685991</clusterCountPF>
-          <clusterCountRaw>4034260</clusterCountRaw>
-          <oneSig>1437.04</oneSig>
-          <percentClustersPF>91.37</percentClustersPF>
-          <signal20AsPctOf1>88.87</signal20AsPctOf1>
-          <tileNumber>2301</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>3894450</clusterCountPF>
-          <clusterCountRaw>4285846</clusterCountRaw>
-          <oneSig>1425.73</oneSig>
-          <percentClustersPF>90.87</percentClustersPF>
-          <signal20AsPctOf1>89.86</signal20AsPctOf1>
-          <tileNumber>2302</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>3941822</clusterCountPF>
-          <clusterCountRaw>4382141</clusterCountRaw>
-          <oneSig>1397.98</oneSig>
-          <percentClustersPF>89.95</percentClustersPF>
-          <signal20AsPctOf1>90.41</signal20AsPctOf1>
-          <tileNumber>2303</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>4299760</clusterCountPF>
-          <clusterCountRaw>4825173</clusterCountRaw>
-          <oneSig>1380.92</oneSig>
-          <percentClustersPF>89.11</percentClustersPF>
-          <signal20AsPctOf1>89.99</signal20AsPctOf1>
-          <tileNumber>2304</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>4523197</clusterCountPF>
-          <clusterCountRaw>5101827</clusterCountRaw>
-          <oneSig>1374.81</oneSig>
-          <percentClustersPF>88.66</percentClustersPF>
-          <signal20AsPctOf1>89.72</signal20AsPctOf1>
-          <tileNumber>2305</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>4658536</clusterCountPF>
-          <clusterCountRaw>5357124</clusterCountRaw>
-          <oneSig>1362.66</oneSig>
-          <percentClustersPF>86.96</percentClustersPF>
-          <signal20AsPctOf1>88.93</signal20AsPctOf1>
-          <tileNumber>2306</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>4706753</clusterCountPF>
-          <clusterCountRaw>5569616</clusterCountRaw>
-          <oneSig>1336.27</oneSig>
-          <percentClustersPF>84.51</percentClustersPF>
-          <signal20AsPctOf1>89.15</signal20AsPctOf1>
-          <tileNumber>2307</tileNumber>
-        </Tile>
-        <Tile>
-          <clusterCountPF>2196707</clusterCountPF>
-          <clusterCountRaw>3787138</clusterCountRaw>
-          <oneSig>1265.29</oneSig>
-          <percentClustersPF>58.00</percentClustersPF>
-          <signal20AsPctOf1>89.55</signal20AsPctOf1>
-          <tileNumber>2308</tileNumber>
-        </Tile>
-        <readNumber>1</readNumber>
-      </Read>
-      
-      <laneNumber>8</laneNumber>
-    </Lane>
-  </TileResultsByLane>
-</BustardSummary>
diff --git a/htsworkflow/pipelines/test/testdata/rta_basecalls_config_1.12.4.2.xml b/htsworkflow/pipelines/test/testdata/rta_basecalls_config_1.12.4.2.xml
deleted file mode 100755 (executable)
index 9da5d01..0000000
+++ /dev/null
@@ -1,511 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<BaseCallAnalysis xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">\r
-  <Run Name="BaseCalls">\r
-    <BaseCallParameters>\r
-      <ChastityThreshold>0.6</ChastityThreshold>\r
-      <Matrix Path="">\r
-        <AutoFlag>2</AutoFlag>\r
-        <AutoLane>0</AutoLane>\r
-        <Cycle>1</Cycle>\r
-        <CycleOffset>0</CycleOffset>\r
-        <FirstCycle>1</FirstCycle>\r
-        <LastCycle>50</LastCycle>\r
-        <Read>1</Read>\r
-      </Matrix>\r
-      <Matrix Path="">\r
-        <AutoFlag>2</AutoFlag>\r
-        <AutoLane>0</AutoLane>\r
-        <Cycle>51</Cycle>\r
-        <CycleOffset>0</CycleOffset>\r
-        <FirstCycle>51</FirstCycle>\r
-        <LastCycle>57</LastCycle>\r
-        <Read>2</Read>\r
-      </Matrix>\r
-      <Phasing Path="">\r
-        <AutoFlag>2</AutoFlag>\r
-        <AutoLane>0</AutoLane>\r
-        <Cycle>2</Cycle>\r
-        <CycleOffset>1</CycleOffset>\r
-        <FirstCycle>1</FirstCycle>\r
-        <LastCycle>50</LastCycle>\r
-        <Read>1</Read>\r
-        <PhasingRate>0</PhasingRate>\r
-        <PrephasingRate>0</PrephasingRate>\r
-      </Phasing>\r
-      <Phasing Path="">\r
-        <AutoFlag>2</AutoFlag>\r
-        <AutoLane>0</AutoLane>\r
-        <Cycle>52</Cycle>\r
-        <CycleOffset>1</CycleOffset>\r
-        <FirstCycle>51</FirstCycle>\r
-        <LastCycle>57</LastCycle>\r
-        <Read>2</Read>\r
-        <PhasingRate>0</PhasingRate>\r
-        <PrephasingRate>0</PrephasingRate>\r
-      </Phasing>\r
-      <PureBases>0</PureBases>\r
-      <SmtFilter>failed-chastity</SmtFilter>\r
-      <SmtRelation>le</SmtRelation>\r
-      <SmtThreshold>1.0</SmtThreshold>\r
-    </BaseCallParameters>\r
-    <Cycles First="1" Last="57" Number="57" />\r
-    <Input />\r
-    <RunParameters>\r
-      <AutoCycleFlag>0</AutoCycleFlag>\r
-      <BasecallFlag>0</BasecallFlag>\r
-      <Deblocked>0</Deblocked>\r
-      <DebugFlag>0</DebugFlag>\r
-      <FirstRunOnlyFlag>0</FirstRunOnlyFlag>\r
-      <ImagingReads Index="1">\r
-        <FirstCycle>1</FirstCycle>\r
-        <LastCycle>50</LastCycle>\r
-      </ImagingReads>\r
-      <ImagingReads Index="2">\r
-        <FirstCycle>51</FirstCycle>\r
-        <LastCycle>57</LastCycle>\r
-        <RunFolder>110815_SN787_0101_AD07K6ACXX</RunFolder>\r
-      </ImagingReads>\r
-      <Instrument>HWI-ST0787</Instrument>\r
-      <IterativeMatrixFlag>0</IterativeMatrixFlag>\r
-      <MakeFlag>0</MakeFlag>\r
-      <MaxCycle>0</MaxCycle>\r
-      <MinCycle>0</MinCycle>\r
-      <Reads Index="1">\r
-        <FirstCycle>1</FirstCycle>\r
-        <LastCycle>50</LastCycle>\r
-      </Reads>\r
-      <Reads Index="2">\r
-        <FirstCycle>51</FirstCycle>\r
-        <LastCycle>57</LastCycle>\r
-        <RunFolder>110815_SN787_0101_AD07K6ACXX</RunFolder>\r
-      </Reads>\r
-      <RunFolder>110815_SN787_0101_AD07K6ACXX</RunFolder>\r
-      <RunFolderDate>110815</RunFolderDate>\r
-      <RunFolderId>0101</RunFolderId>\r
-      <RunFlowcellId>D07K6ACXX</RunFlowcellId>\r
-      <Barcode>\r
-        <Cycle Use="true">51</Cycle>\r
-        <Cycle Use="true">52</Cycle>\r
-        <Cycle Use="true">53</Cycle>\r
-        <Cycle Use="true">54</Cycle>\r
-        <Cycle Use="true">55</Cycle>\r
-        <Cycle Use="true">56</Cycle>\r
-        <Cycle Use="true">57</Cycle>\r
-      </Barcode>\r
-      <QTableVersion>New6</QTableVersion>\r
-    </RunParameters>\r
-    <Software Name="RTA" Version="1.12.4.2" />\r
-    <TileSelection>\r
-      <Lane Index="1">\r
-        <Sample>s</Sample>\r
-        <Tile>1102</Tile>\r
-        <Tile>1101</Tile>\r
-        <Tile>1103</Tile>\r
-        <Tile>1106</Tile>\r
-        <Tile>1104</Tile>\r
-        <Tile>1105</Tile>\r
-        <Tile>1108</Tile>\r
-        <Tile>1107</Tile>\r
-        <Tile>1202</Tile>\r
-        <Tile>1201</Tile>\r
-        <Tile>1206</Tile>\r
-        <Tile>1204</Tile>\r
-        <Tile>1203</Tile>\r
-        <Tile>1205</Tile>\r
-        <Tile>1302</Tile>\r
-        <Tile>1208</Tile>\r
-        <Tile>1207</Tile>\r
-        <Tile>1301</Tile>\r
-        <Tile>1306</Tile>\r
-        <Tile>1304</Tile>\r
-        <Tile>1305</Tile>\r
-        <Tile>2102</Tile>\r
-        <Tile>1303</Tile>\r
-        <Tile>1308</Tile>\r
-        <Tile>2101</Tile>\r
-        <Tile>1307</Tile>\r
-        <Tile>2106</Tile>\r
-        <Tile>2104</Tile>\r
-        <Tile>2105</Tile>\r
-        <Tile>2103</Tile>\r
-        <Tile>2202</Tile>\r
-        <Tile>2108</Tile>\r
-        <Tile>2201</Tile>\r
-        <Tile>2206</Tile>\r
-        <Tile>2107</Tile>\r
-        <Tile>2205</Tile>\r
-        <Tile>2204</Tile>\r
-        <Tile>2203</Tile>\r
-        <Tile>2302</Tile>\r
-        <Tile>2301</Tile>\r
-        <Tile>2208</Tile>\r
-        <Tile>2306</Tile>\r
-        <Tile>2207</Tile>\r
-        <Tile>2305</Tile>\r
-        <Tile>2303</Tile>\r
-        <Tile>2304</Tile>\r
-        <Tile>2308</Tile>\r
-        <Tile>2307</Tile>\r
-      </Lane>\r
-      <Lane Index="2">\r
-        <Sample>s</Sample>\r
-        <Tile>1101</Tile>\r
-        <Tile>1102</Tile>\r
-        <Tile>1105</Tile>\r
-        <Tile>1106</Tile>\r
-        <Tile>1104</Tile>\r
-        <Tile>1103</Tile>\r
-        <Tile>1201</Tile>\r
-        <Tile>1202</Tile>\r
-        <Tile>1108</Tile>\r
-        <Tile>1206</Tile>\r
-        <Tile>1107</Tile>\r
-        <Tile>1205</Tile>\r
-        <Tile>1302</Tile>\r
-        <Tile>1204</Tile>\r
-        <Tile>1301</Tile>\r
-        <Tile>1203</Tile>\r
-        <Tile>1208</Tile>\r
-        <Tile>1306</Tile>\r
-        <Tile>1305</Tile>\r
-        <Tile>1207</Tile>\r
-        <Tile>1304</Tile>\r
-        <Tile>2101</Tile>\r
-        <Tile>2102</Tile>\r
-        <Tile>1308</Tile>\r
-        <Tile>2105</Tile>\r
-        <Tile>1303</Tile>\r
-        <Tile>2201</Tile>\r
-        <Tile>2106</Tile>\r
-        <Tile>2104</Tile>\r
-        <Tile>1307</Tile>\r
-        <Tile>2205</Tile>\r
-        <Tile>2202</Tile>\r
-        <Tile>2108</Tile>\r
-        <Tile>2206</Tile>\r
-        <Tile>2103</Tile>\r
-        <Tile>2301</Tile>\r
-        <Tile>2204</Tile>\r
-        <Tile>2208</Tile>\r
-        <Tile>2107</Tile>\r
-        <Tile>2302</Tile>\r
-        <Tile>2305</Tile>\r
-        <Tile>2304</Tile>\r
-        <Tile>2203</Tile>\r
-        <Tile>2306</Tile>\r
-        <Tile>2308</Tile>\r
-        <Tile>2207</Tile>\r
-        <Tile>2303</Tile>\r
-        <Tile>2307</Tile>\r
-      </Lane>\r
-      <Lane Index="3">\r
-        <Sample>s</Sample>\r
-        <Tile>1101</Tile>\r
-        <Tile>1102</Tile>\r
-        <Tile>1105</Tile>\r
-        <Tile>1104</Tile>\r
-        <Tile>1108</Tile>\r
-        <Tile>1106</Tile>\r
-        <Tile>1201</Tile>\r
-        <Tile>1103</Tile>\r
-        <Tile>1204</Tile>\r
-        <Tile>1202</Tile>\r
-        <Tile>1205</Tile>\r
-        <Tile>1107</Tile>\r
-        <Tile>1208</Tile>\r
-        <Tile>1206</Tile>\r
-        <Tile>1301</Tile>\r
-        <Tile>1304</Tile>\r
-        <Tile>1203</Tile>\r
-        <Tile>1302</Tile>\r
-        <Tile>1308</Tile>\r
-        <Tile>1305</Tile>\r
-        <Tile>1207</Tile>\r
-        <Tile>2101</Tile>\r
-        <Tile>2104</Tile>\r
-        <Tile>1306</Tile>\r
-        <Tile>1303</Tile>\r
-        <Tile>2102</Tile>\r
-        <Tile>2105</Tile>\r
-        <Tile>2108</Tile>\r
-        <Tile>1307</Tile>\r
-        <Tile>2106</Tile>\r
-        <Tile>2204</Tile>\r
-        <Tile>2201</Tile>\r
-        <Tile>2103</Tile>\r
-        <Tile>2208</Tile>\r
-        <Tile>2202</Tile>\r
-        <Tile>2107</Tile>\r
-        <Tile>2205</Tile>\r
-        <Tile>2301</Tile>\r
-        <Tile>2304</Tile>\r
-        <Tile>2203</Tile>\r
-        <Tile>2206</Tile>\r
-        <Tile>2207</Tile>\r
-        <Tile>2305</Tile>\r
-        <Tile>2308</Tile>\r
-        <Tile>2302</Tile>\r
-        <Tile>2303</Tile>\r
-        <Tile>2307</Tile>\r
-        <Tile>2306</Tile>\r
-      </Lane>\r
-      <Lane Index="4">\r
-        <Sample>s</Sample>\r
-        <Tile>1101</Tile>\r
-        <Tile>1104</Tile>\r
-        <Tile>1103</Tile>\r
-        <Tile>1102</Tile>\r
-        <Tile>1108</Tile>\r
-        <Tile>1105</Tile>\r
-        <Tile>1107</Tile>\r
-        <Tile>1106</Tile>\r
-        <Tile>1204</Tile>\r
-        <Tile>1201</Tile>\r
-        <Tile>1203</Tile>\r
-        <Tile>1202</Tile>\r
-        <Tile>1208</Tile>\r
-        <Tile>1205</Tile>\r
-        <Tile>1207</Tile>\r
-        <Tile>1206</Tile>\r
-        <Tile>1304</Tile>\r
-        <Tile>1301</Tile>\r
-        <Tile>1302</Tile>\r
-        <Tile>1308</Tile>\r
-        <Tile>1303</Tile>\r
-        <Tile>1305</Tile>\r
-        <Tile>1306</Tile>\r
-        <Tile>1307</Tile>\r
-        <Tile>2104</Tile>\r
-        <Tile>2101</Tile>\r
-        <Tile>2108</Tile>\r
-        <Tile>2102</Tile>\r
-        <Tile>2103</Tile>\r
-        <Tile>2105</Tile>\r
-        <Tile>2204</Tile>\r
-        <Tile>2106</Tile>\r
-        <Tile>2107</Tile>\r
-        <Tile>2201</Tile>\r
-        <Tile>2208</Tile>\r
-        <Tile>2202</Tile>\r
-        <Tile>2203</Tile>\r
-        <Tile>2304</Tile>\r
-        <Tile>2205</Tile>\r
-        <Tile>2206</Tile>\r
-        <Tile>2207</Tile>\r
-        <Tile>2308</Tile>\r
-        <Tile>2301</Tile>\r
-        <Tile>2302</Tile>\r
-        <Tile>2303</Tile>\r
-        <Tile>2305</Tile>\r
-        <Tile>2307</Tile>\r
-        <Tile>2306</Tile>\r
-      </Lane>\r
-      <Lane Index="5">\r
-        <Sample>s</Sample>\r
-        <Tile>1104</Tile>\r
-        <Tile>1108</Tile>\r
-        <Tile>1101</Tile>\r
-        <Tile>1204</Tile>\r
-        <Tile>1102</Tile>\r
-        <Tile>1103</Tile>\r
-        <Tile>1106</Tile>\r
-        <Tile>1105</Tile>\r
-        <Tile>1107</Tile>\r
-        <Tile>1208</Tile>\r
-        <Tile>1201</Tile>\r
-        <Tile>1202</Tile>\r
-        <Tile>1203</Tile>\r
-        <Tile>1304</Tile>\r
-        <Tile>1205</Tile>\r
-        <Tile>1206</Tile>\r
-        <Tile>1301</Tile>\r
-        <Tile>1308</Tile>\r
-        <Tile>1207</Tile>\r
-        <Tile>1302</Tile>\r
-        <Tile>2104</Tile>\r
-        <Tile>1303</Tile>\r
-        <Tile>1305</Tile>\r
-        <Tile>1306</Tile>\r
-        <Tile>2101</Tile>\r
-        <Tile>2102</Tile>\r
-        <Tile>1307</Tile>\r
-        <Tile>2108</Tile>\r
-        <Tile>2204</Tile>\r
-        <Tile>2103</Tile>\r
-        <Tile>2105</Tile>\r
-        <Tile>2107</Tile>\r
-        <Tile>2106</Tile>\r
-        <Tile>2201</Tile>\r
-        <Tile>2208</Tile>\r
-        <Tile>2203</Tile>\r
-        <Tile>2202</Tile>\r
-        <Tile>2304</Tile>\r
-        <Tile>2206</Tile>\r
-        <Tile>2205</Tile>\r
-        <Tile>2207</Tile>\r
-        <Tile>2302</Tile>\r
-        <Tile>2301</Tile>\r
-        <Tile>2303</Tile>\r
-        <Tile>2308</Tile>\r
-        <Tile>2305</Tile>\r
-        <Tile>2307</Tile>\r
-        <Tile>2306</Tile>\r
-      </Lane>\r
-      <Lane Index="6">\r
-        <Sample>s</Sample>\r
-        <Tile>1104</Tile>\r
-        <Tile>1101</Tile>\r
-        <Tile>1103</Tile>\r
-        <Tile>1102</Tile>\r
-        <Tile>1108</Tile>\r
-        <Tile>1107</Tile>\r
-        <Tile>1105</Tile>\r
-        <Tile>1106</Tile>\r
-        <Tile>1204</Tile>\r
-        <Tile>1203</Tile>\r
-        <Tile>1201</Tile>\r
-        <Tile>1202</Tile>\r
-        <Tile>1208</Tile>\r
-        <Tile>1207</Tile>\r
-        <Tile>1205</Tile>\r
-        <Tile>1206</Tile>\r
-        <Tile>1304</Tile>\r
-        <Tile>1303</Tile>\r
-        <Tile>1301</Tile>\r
-        <Tile>1302</Tile>\r
-        <Tile>1308</Tile>\r
-        <Tile>1307</Tile>\r
-        <Tile>1305</Tile>\r
-        <Tile>2104</Tile>\r
-        <Tile>1306</Tile>\r
-        <Tile>2103</Tile>\r
-        <Tile>2101</Tile>\r
-        <Tile>2102</Tile>\r
-        <Tile>2108</Tile>\r
-        <Tile>2107</Tile>\r
-        <Tile>2105</Tile>\r
-        <Tile>2106</Tile>\r
-        <Tile>2204</Tile>\r
-        <Tile>2203</Tile>\r
-        <Tile>2202</Tile>\r
-        <Tile>2201</Tile>\r
-        <Tile>2208</Tile>\r
-        <Tile>2207</Tile>\r
-        <Tile>2206</Tile>\r
-        <Tile>2205</Tile>\r
-        <Tile>2304</Tile>\r
-        <Tile>2303</Tile>\r
-        <Tile>2302</Tile>\r
-        <Tile>2301</Tile>\r
-        <Tile>2307</Tile>\r
-        <Tile>2308</Tile>\r
-        <Tile>2306</Tile>\r
-        <Tile>2305</Tile>\r
-      </Lane>\r
-      <Lane Index="7">\r
-        <Sample>s</Sample>\r
-        <Tile>1103</Tile>\r
-        <Tile>1107</Tile>\r
-        <Tile>1104</Tile>\r
-        <Tile>1108</Tile>\r
-        <Tile>1203</Tile>\r
-        <Tile>1101</Tile>\r
-        <Tile>1102</Tile>\r
-        <Tile>1204</Tile>\r
-        <Tile>1105</Tile>\r
-        <Tile>1207</Tile>\r
-        <Tile>1106</Tile>\r
-        <Tile>1208</Tile>\r
-        <Tile>1201</Tile>\r
-        <Tile>1202</Tile>\r
-        <Tile>1303</Tile>\r
-        <Tile>1205</Tile>\r
-        <Tile>1206</Tile>\r
-        <Tile>1307</Tile>\r
-        <Tile>1304</Tile>\r
-        <Tile>1301</Tile>\r
-        <Tile>1302</Tile>\r
-        <Tile>1305</Tile>\r
-        <Tile>1308</Tile>\r
-        <Tile>2103</Tile>\r
-        <Tile>1306</Tile>\r
-        <Tile>2101</Tile>\r
-        <Tile>2107</Tile>\r
-        <Tile>2104</Tile>\r
-        <Tile>2105</Tile>\r
-        <Tile>2102</Tile>\r
-        <Tile>2108</Tile>\r
-        <Tile>2203</Tile>\r
-        <Tile>2201</Tile>\r
-        <Tile>2106</Tile>\r
-        <Tile>2205</Tile>\r
-        <Tile>2207</Tile>\r
-        <Tile>2202</Tile>\r
-        <Tile>2204</Tile>\r
-        <Tile>2301</Tile>\r
-        <Tile>2303</Tile>\r
-        <Tile>2206</Tile>\r
-        <Tile>2208</Tile>\r
-        <Tile>2305</Tile>\r
-        <Tile>2307</Tile>\r
-        <Tile>2302</Tile>\r
-        <Tile>2304</Tile>\r
-        <Tile>2306</Tile>\r
-        <Tile>2308</Tile>\r
-      </Lane>\r
-      <Lane Index="8">\r
-        <Sample>s</Sample>\r
-        <Tile>1101</Tile>\r
-        <Tile>1103</Tile>\r
-        <Tile>1102</Tile>\r
-        <Tile>1105</Tile>\r
-        <Tile>1107</Tile>\r
-        <Tile>1104</Tile>\r
-        <Tile>1106</Tile>\r
-        <Tile>1201</Tile>\r
-        <Tile>1108</Tile>\r
-        <Tile>1203</Tile>\r
-        <Tile>1202</Tile>\r
-        <Tile>1205</Tile>\r
-        <Tile>1207</Tile>\r
-        <Tile>1204</Tile>\r
-        <Tile>1206</Tile>\r
-        <Tile>1301</Tile>\r
-        <Tile>1208</Tile>\r
-        <Tile>1303</Tile>\r
-        <Tile>1302</Tile>\r
-        <Tile>1305</Tile>\r
-        <Tile>1307</Tile>\r
-        <Tile>1304</Tile>\r
-        <Tile>1306</Tile>\r
-        <Tile>2101</Tile>\r
-        <Tile>1308</Tile>\r
-        <Tile>2103</Tile>\r
-        <Tile>2105</Tile>\r
-        <Tile>2102</Tile>\r
-        <Tile>2107</Tile>\r
-        <Tile>2106</Tile>\r
-        <Tile>2104</Tile>\r
-        <Tile>2201</Tile>\r
-        <Tile>2205</Tile>\r
-        <Tile>2202</Tile>\r
-        <Tile>2203</Tile>\r
-        <Tile>2108</Tile>\r
-        <Tile>2206</Tile>\r
-        <Tile>2301</Tile>\r
-        <Tile>2207</Tile>\r
-        <Tile>2204</Tile>\r
-        <Tile>2305</Tile>\r
-        <Tile>2302</Tile>\r
-        <Tile>2303</Tile>\r
-        <Tile>2208</Tile>\r
-        <Tile>2306</Tile>\r
-        <Tile>2307</Tile>\r
-        <Tile>2304</Tile>\r
-        <Tile>2308</Tile>\r
-      </Lane>\r
-    </TileSelection>\r
-    <Time />\r
-    <User />\r
-  </Run>\r
-</BaseCallAnalysis>
\ No newline at end of file
diff --git a/htsworkflow/pipelines/test/testdata/rta_intensities_config_1.12.4.2.xml b/htsworkflow/pipelines/test/testdata/rta_intensities_config_1.12.4.2.xml
deleted file mode 100755 (executable)
index 6d43157..0000000
+++ /dev/null
@@ -1,472 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<ImageAnalysis xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">\r
-  <Run Name="Intensities">\r
-    <Cycles First="1" Last="57" Number="57" />\r
-    <ImageParameters>\r
-      <AutoOffsetFlag>0</AutoOffsetFlag>\r
-      <AutoSizeFlag>0</AutoSizeFlag>\r
-      <Fwhm>0</Fwhm>\r
-      <RemappingDistance>0</RemappingDistance>\r
-      <Threshold>0</Threshold>\r
-    </ImageParameters>\r
-    <RunParameters>\r
-      <AutoCycleFlag>0</AutoCycleFlag>\r
-      <BasecallFlag>0</BasecallFlag>\r
-      <Deblocked>0</Deblocked>\r
-      <DebugFlag>0</DebugFlag>\r
-      <FirstRunOnlyFlag>0</FirstRunOnlyFlag>\r
-      <ImagingReads Index="1">\r
-        <FirstCycle>1</FirstCycle>\r
-        <LastCycle>50</LastCycle>\r
-        <RunFolder>110815_SN787_0101_AD07K6ACXX</RunFolder>\r
-      </ImagingReads>\r
-      <ImagingReads Index="2">\r
-        <FirstCycle>51</FirstCycle>\r
-        <LastCycle>57</LastCycle>\r
-        <RunFolder>110815_SN787_0101_AD07K6ACXX</RunFolder>\r
-      </ImagingReads>\r
-      <Instrument>HWI-ST0787</Instrument>\r
-      <IterativeMatrixFlag>0</IterativeMatrixFlag>\r
-      <MakeFlag>0</MakeFlag>\r
-      <MaxCycle>0</MaxCycle>\r
-      <MinCycle>0</MinCycle>\r
-      <Reads Index="1">\r
-        <FirstCycle>1</FirstCycle>\r
-        <LastCycle>50</LastCycle>\r
-        <RunFolder>110815_SN787_0101_AD07K6ACXX</RunFolder>\r
-      </Reads>\r
-      <Reads Index="2">\r
-        <FirstCycle>51</FirstCycle>\r
-        <LastCycle>57</LastCycle>\r
-        <RunFolder>110815_SN787_0101_AD07K6ACXX</RunFolder>\r
-      </Reads>\r
-      <RunFolder>110815_SN787_0101_AD07K6ACXX</RunFolder>\r
-      <RunFolderDate>110815</RunFolderDate>\r
-      <RunFolderId>0101</RunFolderId>\r
-      <RunFlowcellId>D07K6ACXX</RunFlowcellId>\r
-      <Barcode>\r
-        <Cycle Use="true">51</Cycle>\r
-        <Cycle Use="true">52</Cycle>\r
-        <Cycle Use="true">53</Cycle>\r
-        <Cycle Use="true">54</Cycle>\r
-        <Cycle Use="true">55</Cycle>\r
-        <Cycle Use="true">56</Cycle>\r
-        <Cycle Use="true">57</Cycle>\r
-      </Barcode>\r
-      <QTableVersion>New6</QTableVersion>\r
-    </RunParameters>\r
-    <Software Name="RTA" Version="1.12.4.2" />\r
-    <TileSelection>\r
-      <Lane Index="1">\r
-        <Sample>s</Sample>\r
-        <Tile>1101</Tile>\r
-        <Tile>1102</Tile>\r
-        <Tile>1104</Tile>\r
-        <Tile>1103</Tile>\r
-        <Tile>1106</Tile>\r
-        <Tile>1105</Tile>\r
-        <Tile>1108</Tile>\r
-        <Tile>1107</Tile>\r
-        <Tile>1201</Tile>\r
-        <Tile>1204</Tile>\r
-        <Tile>1202</Tile>\r
-        <Tile>1205</Tile>\r
-        <Tile>1206</Tile>\r
-        <Tile>1208</Tile>\r
-        <Tile>1301</Tile>\r
-        <Tile>1302</Tile>\r
-        <Tile>1304</Tile>\r
-        <Tile>1203</Tile>\r
-        <Tile>1305</Tile>\r
-        <Tile>1306</Tile>\r
-        <Tile>1308</Tile>\r
-        <Tile>2102</Tile>\r
-        <Tile>2101</Tile>\r
-        <Tile>1207</Tile>\r
-        <Tile>2105</Tile>\r
-        <Tile>2106</Tile>\r
-        <Tile>2104</Tile>\r
-        <Tile>1303</Tile>\r
-        <Tile>2201</Tile>\r
-        <Tile>2202</Tile>\r
-        <Tile>1307</Tile>\r
-        <Tile>2206</Tile>\r
-        <Tile>2205</Tile>\r
-        <Tile>2108</Tile>\r
-        <Tile>2302</Tile>\r
-        <Tile>2103</Tile>\r
-        <Tile>2301</Tile>\r
-        <Tile>2204</Tile>\r
-        <Tile>2305</Tile>\r
-        <Tile>2107</Tile>\r
-        <Tile>2203</Tile>\r
-        <Tile>2208</Tile>\r
-        <Tile>2306</Tile>\r
-        <Tile>2207</Tile>\r
-        <Tile>2304</Tile>\r
-        <Tile>2303</Tile>\r
-        <Tile>2308</Tile>\r
-        <Tile>2307</Tile>\r
-      </Lane>\r
-      <Lane Index="2">\r
-        <Sample>s</Sample>\r
-        <Tile>1101</Tile>\r
-        <Tile>1105</Tile>\r
-        <Tile>1102</Tile>\r
-        <Tile>1106</Tile>\r
-        <Tile>1201</Tile>\r
-        <Tile>1103</Tile>\r
-        <Tile>1104</Tile>\r
-        <Tile>1202</Tile>\r
-        <Tile>1205</Tile>\r
-        <Tile>1107</Tile>\r
-        <Tile>1206</Tile>\r
-        <Tile>1108</Tile>\r
-        <Tile>1203</Tile>\r
-        <Tile>1302</Tile>\r
-        <Tile>1204</Tile>\r
-        <Tile>1301</Tile>\r
-        <Tile>1208</Tile>\r
-        <Tile>1207</Tile>\r
-        <Tile>1305</Tile>\r
-        <Tile>1306</Tile>\r
-        <Tile>1304</Tile>\r
-        <Tile>2101</Tile>\r
-        <Tile>1303</Tile>\r
-        <Tile>2102</Tile>\r
-        <Tile>1308</Tile>\r
-        <Tile>2105</Tile>\r
-        <Tile>1307</Tile>\r
-        <Tile>2106</Tile>\r
-        <Tile>2201</Tile>\r
-        <Tile>2104</Tile>\r
-        <Tile>2103</Tile>\r
-        <Tile>2202</Tile>\r
-        <Tile>2205</Tile>\r
-        <Tile>2107</Tile>\r
-        <Tile>2108</Tile>\r
-        <Tile>2206</Tile>\r
-        <Tile>2301</Tile>\r
-        <Tile>2203</Tile>\r
-        <Tile>2204</Tile>\r
-        <Tile>2208</Tile>\r
-        <Tile>2207</Tile>\r
-        <Tile>2302</Tile>\r
-        <Tile>2305</Tile>\r
-        <Tile>2303</Tile>\r
-        <Tile>2304</Tile>\r
-        <Tile>2306</Tile>\r
-        <Tile>2307</Tile>\r
-        <Tile>2308</Tile>\r
-      </Lane>\r
-      <Lane Index="3">\r
-        <Sample>s</Sample>\r
-        <Tile>1101</Tile>\r
-        <Tile>1103</Tile>\r
-        <Tile>1102</Tile>\r
-        <Tile>1104</Tile>\r
-        <Tile>1105</Tile>\r
-        <Tile>1106</Tile>\r
-        <Tile>1107</Tile>\r
-        <Tile>1108</Tile>\r
-        <Tile>1201</Tile>\r
-        <Tile>1204</Tile>\r
-        <Tile>1202</Tile>\r
-        <Tile>1203</Tile>\r
-        <Tile>1205</Tile>\r
-        <Tile>1206</Tile>\r
-        <Tile>1207</Tile>\r
-        <Tile>1208</Tile>\r
-        <Tile>1302</Tile>\r
-        <Tile>1301</Tile>\r
-        <Tile>1303</Tile>\r
-        <Tile>1304</Tile>\r
-        <Tile>1306</Tile>\r
-        <Tile>1305</Tile>\r
-        <Tile>1308</Tile>\r
-        <Tile>2101</Tile>\r
-        <Tile>2102</Tile>\r
-        <Tile>2105</Tile>\r
-        <Tile>1307</Tile>\r
-        <Tile>2104</Tile>\r
-        <Tile>2106</Tile>\r
-        <Tile>2201</Tile>\r
-        <Tile>2108</Tile>\r
-        <Tile>2103</Tile>\r
-        <Tile>2107</Tile>\r
-        <Tile>2202</Tile>\r
-        <Tile>2205</Tile>\r
-        <Tile>2204</Tile>\r
-        <Tile>2301</Tile>\r
-        <Tile>2206</Tile>\r
-        <Tile>2305</Tile>\r
-        <Tile>2203</Tile>\r
-        <Tile>2208</Tile>\r
-        <Tile>2302</Tile>\r
-        <Tile>2207</Tile>\r
-        <Tile>2304</Tile>\r
-        <Tile>2306</Tile>\r
-        <Tile>2303</Tile>\r
-        <Tile>2308</Tile>\r
-        <Tile>2307</Tile>\r
-      </Lane>\r
-      <Lane Index="4">\r
-        <Sample>s</Sample>\r
-        <Tile>1101</Tile>\r
-        <Tile>1105</Tile>\r
-        <Tile>1201</Tile>\r
-        <Tile>1102</Tile>\r
-        <Tile>1106</Tile>\r
-        <Tile>1205</Tile>\r
-        <Tile>1104</Tile>\r
-        <Tile>1202</Tile>\r
-        <Tile>1103</Tile>\r
-        <Tile>1301</Tile>\r
-        <Tile>1206</Tile>\r
-        <Tile>1108</Tile>\r
-        <Tile>1107</Tile>\r
-        <Tile>1305</Tile>\r
-        <Tile>1302</Tile>\r
-        <Tile>2101</Tile>\r
-        <Tile>1203</Tile>\r
-        <Tile>1306</Tile>\r
-        <Tile>1204</Tile>\r
-        <Tile>1207</Tile>\r
-        <Tile>2102</Tile>\r
-        <Tile>1208</Tile>\r
-        <Tile>2105</Tile>\r
-        <Tile>1303</Tile>\r
-        <Tile>2106</Tile>\r
-        <Tile>1304</Tile>\r
-        <Tile>2201</Tile>\r
-        <Tile>1307</Tile>\r
-        <Tile>1308</Tile>\r
-        <Tile>2202</Tile>\r
-        <Tile>2103</Tile>\r
-        <Tile>2104</Tile>\r
-        <Tile>2205</Tile>\r
-        <Tile>2206</Tile>\r
-        <Tile>2302</Tile>\r
-        <Tile>2108</Tile>\r
-        <Tile>2301</Tile>\r
-        <Tile>2107</Tile>\r
-        <Tile>2305</Tile>\r
-        <Tile>2306</Tile>\r
-        <Tile>2204</Tile>\r
-        <Tile>2203</Tile>\r
-        <Tile>2208</Tile>\r
-        <Tile>2207</Tile>\r
-        <Tile>2303</Tile>\r
-        <Tile>2304</Tile>\r
-        <Tile>2308</Tile>\r
-        <Tile>2307</Tile>\r
-      </Lane>\r
-      <Lane Index="5">\r
-        <Sample>s</Sample>\r
-        <Tile>1102</Tile>\r
-        <Tile>1101</Tile>\r
-        <Tile>1106</Tile>\r
-        <Tile>1105</Tile>\r
-        <Tile>1202</Tile>\r
-        <Tile>1201</Tile>\r
-        <Tile>1205</Tile>\r
-        <Tile>1206</Tile>\r
-        <Tile>1301</Tile>\r
-        <Tile>1104</Tile>\r
-        <Tile>1302</Tile>\r
-        <Tile>1103</Tile>\r
-        <Tile>1108</Tile>\r
-        <Tile>1305</Tile>\r
-        <Tile>1306</Tile>\r
-        <Tile>1107</Tile>\r
-        <Tile>2102</Tile>\r
-        <Tile>1203</Tile>\r
-        <Tile>1204</Tile>\r
-        <Tile>2101</Tile>\r
-        <Tile>2106</Tile>\r
-        <Tile>1207</Tile>\r
-        <Tile>2202</Tile>\r
-        <Tile>1303</Tile>\r
-        <Tile>1208</Tile>\r
-        <Tile>2105</Tile>\r
-        <Tile>2201</Tile>\r
-        <Tile>1304</Tile>\r
-        <Tile>1307</Tile>\r
-        <Tile>2206</Tile>\r
-        <Tile>2103</Tile>\r
-        <Tile>2205</Tile>\r
-        <Tile>2302</Tile>\r
-        <Tile>2107</Tile>\r
-        <Tile>1308</Tile>\r
-        <Tile>2301</Tile>\r
-        <Tile>2203</Tile>\r
-        <Tile>2104</Tile>\r
-        <Tile>2305</Tile>\r
-        <Tile>2207</Tile>\r
-        <Tile>2108</Tile>\r
-        <Tile>2306</Tile>\r
-        <Tile>2303</Tile>\r
-        <Tile>2204</Tile>\r
-        <Tile>2307</Tile>\r
-        <Tile>2208</Tile>\r
-        <Tile>2304</Tile>\r
-        <Tile>2308</Tile>\r
-      </Lane>\r
-      <Lane Index="6">\r
-        <Sample>s</Sample>\r
-        <Tile>1101</Tile>\r
-        <Tile>1102</Tile>\r
-        <Tile>1103</Tile>\r
-        <Tile>1106</Tile>\r
-        <Tile>1105</Tile>\r
-        <Tile>1107</Tile>\r
-        <Tile>1202</Tile>\r
-        <Tile>1201</Tile>\r
-        <Tile>1203</Tile>\r
-        <Tile>1207</Tile>\r
-        <Tile>1205</Tile>\r
-        <Tile>1206</Tile>\r
-        <Tile>1301</Tile>\r
-        <Tile>1303</Tile>\r
-        <Tile>1302</Tile>\r
-        <Tile>1104</Tile>\r
-        <Tile>1305</Tile>\r
-        <Tile>1306</Tile>\r
-        <Tile>2101</Tile>\r
-        <Tile>1108</Tile>\r
-        <Tile>2102</Tile>\r
-        <Tile>1307</Tile>\r
-        <Tile>2103</Tile>\r
-        <Tile>2105</Tile>\r
-        <Tile>1204</Tile>\r
-        <Tile>2106</Tile>\r
-        <Tile>2107</Tile>\r
-        <Tile>2201</Tile>\r
-        <Tile>2202</Tile>\r
-        <Tile>1208</Tile>\r
-        <Tile>2203</Tile>\r
-        <Tile>2206</Tile>\r
-        <Tile>2205</Tile>\r
-        <Tile>1304</Tile>\r
-        <Tile>2302</Tile>\r
-        <Tile>2207</Tile>\r
-        <Tile>2301</Tile>\r
-        <Tile>1308</Tile>\r
-        <Tile>2306</Tile>\r
-        <Tile>2303</Tile>\r
-        <Tile>2305</Tile>\r
-        <Tile>2307</Tile>\r
-        <Tile>2104</Tile>\r
-        <Tile>2108</Tile>\r
-        <Tile>2204</Tile>\r
-        <Tile>2208</Tile>\r
-        <Tile>2304</Tile>\r
-        <Tile>2308</Tile>\r
-      </Lane>\r
-      <Lane Index="7">\r
-        <Sample>s</Sample>\r
-        <Tile>1102</Tile>\r
-        <Tile>1106</Tile>\r
-        <Tile>1101</Tile>\r
-        <Tile>1105</Tile>\r
-        <Tile>1202</Tile>\r
-        <Tile>1201</Tile>\r
-        <Tile>1206</Tile>\r
-        <Tile>1205</Tile>\r
-        <Tile>1103</Tile>\r
-        <Tile>1302</Tile>\r
-        <Tile>1301</Tile>\r
-        <Tile>1107</Tile>\r
-        <Tile>1306</Tile>\r
-        <Tile>1305</Tile>\r
-        <Tile>1203</Tile>\r
-        <Tile>2101</Tile>\r
-        <Tile>2102</Tile>\r
-        <Tile>2105</Tile>\r
-        <Tile>1207</Tile>\r
-        <Tile>2106</Tile>\r
-        <Tile>2201</Tile>\r
-        <Tile>2202</Tile>\r
-        <Tile>2205</Tile>\r
-        <Tile>1303</Tile>\r
-        <Tile>1307</Tile>\r
-        <Tile>2206</Tile>\r
-        <Tile>2301</Tile>\r
-        <Tile>2103</Tile>\r
-        <Tile>2305</Tile>\r
-        <Tile>2302</Tile>\r
-        <Tile>2107</Tile>\r
-        <Tile>2306</Tile>\r
-        <Tile>2203</Tile>\r
-        <Tile>2207</Tile>\r
-        <Tile>2303</Tile>\r
-        <Tile>2307</Tile>\r
-        <Tile>1104</Tile>\r
-        <Tile>1108</Tile>\r
-        <Tile>1204</Tile>\r
-        <Tile>1208</Tile>\r
-        <Tile>1304</Tile>\r
-        <Tile>1308</Tile>\r
-        <Tile>2104</Tile>\r
-        <Tile>2108</Tile>\r
-        <Tile>2204</Tile>\r
-        <Tile>2208</Tile>\r
-        <Tile>2304</Tile>\r
-        <Tile>2308</Tile>\r
-      </Lane>\r
-      <Lane Index="8">\r
-        <Sample>s</Sample>\r
-        <Tile>1101</Tile>\r
-        <Tile>1102</Tile>\r
-        <Tile>1105</Tile>\r
-        <Tile>1106</Tile>\r
-        <Tile>1201</Tile>\r
-        <Tile>1202</Tile>\r
-        <Tile>1103</Tile>\r
-        <Tile>1205</Tile>\r
-        <Tile>1206</Tile>\r
-        <Tile>1107</Tile>\r
-        <Tile>1301</Tile>\r
-        <Tile>1302</Tile>\r
-        <Tile>1203</Tile>\r
-        <Tile>1306</Tile>\r
-        <Tile>1305</Tile>\r
-        <Tile>1207</Tile>\r
-        <Tile>2101</Tile>\r
-        <Tile>1303</Tile>\r
-        <Tile>2102</Tile>\r
-        <Tile>1307</Tile>\r
-        <Tile>2105</Tile>\r
-        <Tile>2103</Tile>\r
-        <Tile>2106</Tile>\r
-        <Tile>2201</Tile>\r
-        <Tile>2107</Tile>\r
-        <Tile>2205</Tile>\r
-        <Tile>2202</Tile>\r
-        <Tile>2206</Tile>\r
-        <Tile>2203</Tile>\r
-        <Tile>2301</Tile>\r
-        <Tile>2305</Tile>\r
-        <Tile>2302</Tile>\r
-        <Tile>2306</Tile>\r
-        <Tile>1104</Tile>\r
-        <Tile>2207</Tile>\r
-        <Tile>1108</Tile>\r
-        <Tile>1204</Tile>\r
-        <Tile>2303</Tile>\r
-        <Tile>2307</Tile>\r
-        <Tile>1208</Tile>\r
-        <Tile>1304</Tile>\r
-        <Tile>1308</Tile>\r
-        <Tile>2104</Tile>\r
-        <Tile>2108</Tile>\r
-        <Tile>2204</Tile>\r
-        <Tile>2208</Tile>\r
-        <Tile>2304</Tile>\r
-        <Tile>2308</Tile>\r
-      </Lane>\r
-    </TileSelection>\r
-    <Time />\r
-    <User />\r
-  </Run>\r
-</ImageAnalysis>
\ No newline at end of file
index 96037b9647c93146a9887334c3ec1ebdf9266b0d..a74d71a667d1cb788cbdaab24cdf8661738c9413 100644 (file)
@@ -24,7 +24,7 @@ from htsworkflow.util.rdfhelp import \
      fromTypedNode
 from htsworkflow.util.hashfile import make_md5sum
 
-logger = logging.getLogger(__name__)
+LOGGER = logging.getLogger(__name__)
 
 DAF_VARIABLE_NAMES = ("variables", "extraVariables")
 VARIABLES_TERM_NAME = 'variables'
@@ -130,7 +130,7 @@ def parse_stream(stream):
     if view_name is not None:
         attributes['views'][view_name] = view_attributes
 
-    logger.debug("DAF Attributes" + pformat(attributes))
+    LOGGER.debug("DAF Attributes" + pformat(attributes))
     return attributes
 
 
@@ -254,7 +254,7 @@ class UCSCSubmission(object):
              otherwise specifies model to use
         """
         if daf_file is None and model is None:
-            logger.error("We need a DAF or Model containing a DAF to work")
+            LOGGER.error("We need a DAF or Model containing a DAF to work")
 
         self.name = name
         self.submissionSet = get_submission_uri(self.name)
@@ -297,11 +297,11 @@ class UCSCSubmission(object):
         """Examine files in our result directory
         """
         for lib_id, result_dir in result_map.items():
-            logger.info("Importing %s from %s" % (lib_id, result_dir))
+            LOGGER.info("Importing %s from %s" % (lib_id, result_dir))
             try:
                 self.import_submission_dir(result_dir, lib_id)
             except MetadataLookupException, e:
-                logger.error("Skipping %s: %s" % (lib_id, str(e)))
+                LOGGER.error("Skipping %s: %s" % (lib_id, str(e)))
 
     def import_submission_dir(self, submission_dir, library_id):
         """Import a submission directories and update our model as needed
@@ -324,10 +324,10 @@ class UCSCSubmission(object):
         """
         path, filename = os.path.split(pathname)
 
-        logger.debug("Searching for view")
+        LOGGER.debug("Searching for view")
         view = self.find_view(filename)
         if view is None:
-            logger.warn("Unrecognized file: {0}".format(pathname))
+            LOGGER.warn("Unrecognized file: {0}".format(pathname))
             return None
         if str(view) == str(libraryOntology['ignore']):
             return None
@@ -339,7 +339,7 @@ class UCSCSubmission(object):
                                        dafTermOntology['name']))
         if view_name is None:
             errmsg = 'Could not find view name for {0}'
-            logger.warning(errmsg.format(str(view)))
+            LOGGER.warning(errmsg.format(str(view)))
             return
 
         view_name = str(view_name)
@@ -349,7 +349,7 @@ class UCSCSubmission(object):
             RDF.Statement(self.submissionSet,
                           dafTermOntology['has_submission'],
                           submissionNode))
-        logger.debug("Adding statements to {0}".format(str(submissionNode)))
+        LOGGER.debug("Adding statements to {0}".format(str(submissionNode)))
         self.model.add_statement(RDF.Statement(submissionNode,
                                                submissionOntology['has_view'],
                                                submissionView))
@@ -364,7 +364,7 @@ class UCSCSubmission(object):
                                                submissionOntology['library'],
                                                libNode))
 
-        logger.debug("Adding statements to {0}".format(str(submissionView)))
+        LOGGER.debug("Adding statements to {0}".format(str(submissionView)))
         # add track specific information
         self.model.add_statement(
             RDF.Statement(submissionView, dafTermOntology['view'], view))
@@ -380,11 +380,11 @@ class UCSCSubmission(object):
         # add file specific information
         self.create_file_attributes(filename, submissionView, submission_uri, submission_dir)
 
-        logger.debug("Done.")
+        LOGGER.debug("Done.")
 
     def create_file_attributes(self, filename, submissionView, submission_uri, submission_dir):
         # add file specific information
-        logger.debug("Updating file md5sum")
+        LOGGER.debug("Updating file md5sum")
         fileNode = RDF.Node(RDF.Uri(submission_uri + '/' + filename))
         submission_pathname = os.path.join(submission_dir, filename)
         self.model.add_statement(
@@ -399,7 +399,7 @@ class UCSCSubmission(object):
         md5 = make_md5sum(submission_pathname)
         if md5 is None:
             errmsg = "Unable to produce md5sum for {0}"
-            logger.warning(errmsg.format(submission_pathname))
+            LOGGER.warning(errmsg.format(submission_pathname))
         else:
             self.model.add_statement(
                 RDF.Statement(fileNode, dafTermOntology['md5sum'], md5))
@@ -513,7 +513,7 @@ class UCSCSubmission(object):
         else:
             msg = "Found wrong number of view names for {0} len = {1}"
             msg = msg.format(str(view), len(names))
-            logger.error(msg)
+            LOGGER.error(msg)
             raise RuntimeError(msg)
 
     def _get_filename_view_map(self):
@@ -528,11 +528,11 @@ class UCSCSubmission(object):
         for s in self.model.find_statements(filename_query):
             view_name = s.subject
             literal_re = s.object.literal_value['string']
-            logger.debug("Found: %s" % (literal_re,))
+            LOGGER.debug("Found: %s" % (literal_re,))
             try:
                 filename_re = re.compile(literal_re)
             except re.error, e:
-                logger.error("Unable to compile: %s" % (literal_re,))
+                LOGGER.error("Unable to compile: %s" % (literal_re,))
             patterns[literal_re] = view_name
         return patterns
 
index 737b1bb353458ceb0d961adf551a680cc1f9399f..8ff349fe9ae7444c5cc82f20c15e8458d6cc0599 100644 (file)
@@ -1,4 +1,5 @@
 import logging
+import os
 
 import RDF
 
@@ -6,6 +7,8 @@ from htsworkflow.submission.submission import Submission
 
 from htsworkflow.util.rdfhelp import \
      fromTypedNode, \
+     geoSoftNS, \
+     simplifyUri, \
      submissionOntology
 
 from django.conf import settings
@@ -19,13 +22,33 @@ class GEOSubmission(Submission):
 
     def make_soft(self, result_map):
         samples = []
+        platform = self.get_platform_metadata()
+        platform_attribs = dict(platform)
+        platform_id = platform_attribs['^platform']
+        series = self.get_series_metadata()
+        series_attribs = dict(series)
+        series_id = series_attribs['^series']
         for lib_id, result_dir in result_map.items():
             an_analysis = self.get_submission_node(result_dir)
-            samples.append(self.get_sample_metadata(an_analysis))
+            metadata = self.get_sample_metadata(an_analysis)
+            if len(metadata) > 1:
+                errmsg = 'Confused there are more than one samples for %s'
+                LOGGER.debug(errmsg % (str(an_analysis,)))
+            metadata = metadata[0]
+            metadata['raw'] = self.get_sample_files(an_analysis,
+                                                    geoSoftNS['raw'])
+            metadata['supplimental'] = self.get_sample_files(
+                an_analysis,
+                geoSoftNS['supplemental'])
+            samples.append(metadata)
 
         soft_template = loader.get_template('geo_submission.soft')
         context = Context({
-            'samples': samples
+            'platform': platform,
+            'series': series,
+            'samples': samples,
+            'platform_id': platform_id,
+            'series_id': series_id,
         })
         print str(soft_template.render(context))
 
@@ -39,19 +62,69 @@ class GEOSubmission(Submission):
         else:
             return True
 
+    def get_platform_metadata(self):
+        """Gather information for filling out sample section of a SOFT file
+        """
+        query_template = loader.get_template('geo_platform.sparql')
+        submission = str(self.submissionSetNS[''].uri)
+        context = Context({
+            'submission': submission,
+            })
+
+        results = self.execute_query(query_template, context)
+        return self.query_to_soft_dictionary(results, 'platform')
+
+    def get_series_metadata(self):
+        """Gather information for filling out sample section of a SOFT file
+        """
+        query_template = loader.get_template('geo_series.sparql')
+        submission = str(self.submissionSetNS[''].uri)
+        context = Context({
+            'submission': submission,
+            })
+
+        results = self.execute_query(query_template, context)
+        return self.query_to_soft_dictionary(results, 'series')
+
     def get_sample_metadata(self, analysis_node):
         """Gather information for filling out sample section of a SOFT file
         """
-        query_template = loader.get_template('geo_submission.sparql')
+        query_template = loader.get_template('geo_samples.sparql')
 
         context = Context({
             'submission': str(analysis_node.uri),
+            'submissionSet': str(self.submissionSetNS[''].uri),
             })
 
-        formatted_query = query_template.render(context)
-        query = RDF.SPARQLQuery(str(formatted_query))
-        rdfstream = query.execute(self.model)
-        results = []
-        for r in rdfstream:
-            results.append(r)
+        results = self.execute_query(query_template, context)
+        for r in results:
+
+            r['dataProtocol'] = str(r['dataProtocol']).replace('\n', ' ')
         return results
+
+    def get_sample_files(self, analysis_node, file_class):
+        """Gather files
+        """
+        query_template = loader.get_template('geo_files.sparql')
+
+        context = Context({
+            'submission': str(analysis_node.uri),
+            'file_class': str(file_class)
+            })
+
+        return self.execute_query(query_template, context)
+
+    def query_to_soft_dictionary(self, results, heading):
+        attributes = []
+        for r in results:
+            name = simplifyUri(geoSoftNS, r['name'])
+            if name is not None:
+                if name.lower() == heading.lower():
+                    name = '^' + name
+                else:
+                    name = '!' + name
+                for v in fromTypedNode(r['value']).split(os.linesep):
+                    v = v.strip()
+                    if len(v) > 0:
+                        attributes.append((name, v))
+        return attributes
diff --git a/htsworkflow/submission/ncbi.py b/htsworkflow/submission/ncbi.py
new file mode 100644 (file)
index 0000000..3cc8736
--- /dev/null
@@ -0,0 +1,120 @@
+"""Start extracting information out of NCBI SRA
+
+It probably could be extended to extract other NCBI information.
+But at the time I just needed to look up things in the short read archive.
+"""
+
+import logging
+from lxml.etree import parse, XSLT, tostring, fromstring
+from optparse import OptionParser
+import os
+import RDF
+import urllib
+
+from htsworkflow.util.rdfhelp import get_model, dump_model
+
+from django.conf import settings
+from django.template import Context, loader
+
+if not 'DJANGO_SETTINGS_MODULE' in os.environ:
+    os.environ['DJANGO_SETTINGS_MODULE'] = 'htsworkflow.settings'
+
+LOGGER = logging.getLogger(__name__)
+
+ESEARCH_URL="http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?"
+EFETCH_URL="http://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?"
+DB = 'sra'
+DEFAULT_QUERY = 'wgEncodeCaltechRnaSeq OR wgEncodeCaltechHist OR wgEncodeCaltechTfbs'
+
+def search_ncbi_ids(database, term, return_max=200):
+    """Return list of IDs from a NCBI database
+    database - which ncbi database to search
+    term - ncbi query string
+    return_max - maximum records to return
+    """
+    search = {'db': database,
+              'term': term,
+              'retmax': return_max}
+    tree = parse(ESEARCH_URL + urllib.urlencode(search))
+    root = tree.getroot()
+    count = get_node_scalar(root, '/eSearchResult/Count', int)
+    retmax_node = get_node_scalar(root, '/eSearchResult/RetMax', int)
+
+    if count > retmax_node:
+        raise ValueError("Too many values returned please adjust query")
+
+    id_nodes = tree.xpath('/eSearchResult/IdList/Id')
+    if len(id_nodes) != count:
+        errmsg = "Weird. Length of ID list ({0}) doesn't match count ({1})"
+        raise ValueError(errmsg.format(len(id_nodes), count))
+
+    ids = [ x.text for x in id_nodes ]
+    return ids
+
+def parse_sra_metadata_into_model(model, ncbi_id):
+    """Extract SRA data by looking up a NCBI ID.
+    """
+    search = {'db':DB,
+              'id': ncbi_id}
+    url = EFETCH_URL + urllib.urlencode(search)
+    tree = parse(url)
+
+    context = Context()
+    sra_rdf_template = loader.get_template('sra.rdfxml.xsl')
+    sra_rdf_stylesheet = sra_rdf_template.render(context)
+    sra_rdf_transform = XSLT(fromstring(sra_rdf_stylesheet))
+    rdfdata = tostring(sra_rdf_transform(tree))
+    rdfparser = RDF.Parser(name='rdfxml')
+    rdfparser.parse_string_into_model(model, rdfdata, url)
+
+def get_node_scalar(parent, xpath, target_type=None):
+    """Return a single value from an xpath search, possibily type converted
+
+    target_type pass a constructor that takes a string to convert result
+    of search
+    """
+    node = parent.xpath(xpath)
+    if node is None or len(node) != 1:
+        raise ValueError("Wrong response, incorrect number of {0} tags".xpath)
+    if target_type is not None:
+        return target_type(node[0].text)
+    else:
+        return node[0].text
+
+def main(cmdline=None):
+    """Quick driver for importing data from SRA"""
+    parser = make_parser()
+    opts, args = parser.parse_args(cmdline)
+
+    if opts.debug:
+        logging.basicConfig(level=logging.DEBUG)
+    elif opts.verbose:
+        logging.basicConfig(level=logging.INFO)
+    else:
+        logging.basicConfig(level=logging.WARN)
+
+    model = get_model(opts.database, opts.dbpath)
+
+    ids = search_ncbi_ids('sra', opts.query)
+    for count, encode_id in enumerate(ids[:1]):
+        LOGGER.info("processing %s %d / %d", encode_id, count+1, len(ids))
+        parse_sra_metadata_into_model(model, encode_id)
+
+    if opts.dump:
+        dump_model(model)
+
+def make_parser():
+    parser = OptionParser()
+    parser.add_option('--dbpath', help="Database directory",
+                      default=os.getcwd())
+    parser.add_option('--database', help="Database name", default=None)
+    parser.add_option('--dump', help="dump database", default=False,
+                      action="store_true")
+    parser.add_option('--query', help='specify NCBI search terms',
+                      default=DEFAULT_QUERY)
+    parser.add_option("-v", "--verbose", action="store_true", default=False)
+    parser.add_option("--debug", action="store_true", default=False)
+    return parser
+
+if __name__ == "__main__":
+    main()
index 98c25d57befc4047c4cc846ecd72f26fe02c740d..e4ce90c73b073287913ec2f76f5f1d5f0d9bd887 100644 (file)
@@ -24,7 +24,7 @@ from htsworkflow.submission.daf import \
      MetadataLookupException, \
      get_submission_uri
 
-logger = logging.getLogger(__name__)
+LOGGER = logging.getLogger(__name__)
 
 class Submission(object):
     def __init__(self, name, model):
@@ -32,7 +32,7 @@ class Submission(object):
         self.model = model
 
         self.submissionSet = get_submission_uri(self.name)
-        self.submissionSetNS = RDF.NS(str(self.submissionSet) + '/')
+        self.submissionSetNS = RDF.NS(str(self.submissionSet) + '#')
         self.libraryNS = RDF.NS('http://jumpgate.caltech.edu/library/')
 
         self.__view_map = None
@@ -41,11 +41,11 @@ class Submission(object):
         """Examine files in our result directory
         """
         for lib_id, result_dir in result_map.items():
-            logger.info("Importing %s from %s" % (lib_id, result_dir))
+            LOGGER.info("Importing %s from %s" % (lib_id, result_dir))
             try:
                 self.import_analysis_dir(result_dir, lib_id)
             except MetadataLookupException, e:
-                logger.error("Skipping %s: %s" % (lib_id, str(e)))
+                LOGGER.error("Skipping %s: %s" % (lib_id, str(e)))
 
     def import_analysis_dir(self, analysis_dir, library_id):
         """Import a submission directories and update our model as needed
@@ -68,18 +68,28 @@ class Submission(object):
         """
         path, filename = os.path.split(pathname)
 
-        logger.debug("Searching for view")
-        file_classification = self.find_best_match(filename)
-        if file_classification is None:
-            logger.warn("Unrecognized file: {0}".format(pathname))
+        LOGGER.debug("Searching for view")
+        file_type = self.find_best_match(filename)
+        if file_type is None:
+            LOGGER.warn("Unrecognized file: {0}".format(pathname))
             return None
-        if str(file_classification) == str(libraryOntology['ignore']):
+        if str(file_type) == str(libraryOntology['ignore']):
             return None
 
         an_analysis_name = self.make_submission_name(analysis_dir)
         an_analysis = self.get_submission_node(analysis_dir)
         an_analysis_uri = str(an_analysis.uri)
+        file_classification = self.model.get_target(file_type,
+                                                    rdfNS['type'])
+        if file_classification is None:
+            errmsg = 'Could not find class for {0}'
+            logger.warning(errmsg.format(str(file_type)))
+            return
 
+        self.model.add_statement(
+            RDF.Statement(self.submissionSetNS[''],
+                          submissionOntology['has_submission'],
+                          an_analysis))
         self.model.add_statement(RDF.Statement(an_analysis,
                                                submissionOntology['name'],
                                                toTypedNode(an_analysis_name)))
@@ -91,7 +101,7 @@ class Submission(object):
                                                submissionOntology['library'],
                                                libNode))
 
-        logger.debug("Adding statements to {0}".format(str(an_analysis)))
+        LOGGER.debug("Adding statements to {0}".format(str(an_analysis)))
         # add track specific information
         self.model.add_statement(
             RDF.Statement(an_analysis,
@@ -108,8 +118,11 @@ class Submission(object):
                                              an_analysis_uri,
                                              analysis_dir)
         self.add_md5s(filename, fileNode, analysis_dir)
-
-        logger.debug("Done.")
+        self.model.add_statement(
+            RDF.Statement(fileNode,
+                          rdfNS['type'],
+                          file_type))
+        LOGGER.debug("Done.")
 
     def link_file_to_classes(self, filename, submissionNode, submission_uri, analysis_dir):
         # add file specific information
@@ -125,12 +138,12 @@ class Submission(object):
         return fileNode
 
     def add_md5s(self, filename, fileNode, analysis_dir):
-        logger.debug("Updating file md5sum")
+        LOGGER.debug("Updating file md5sum")
         submission_pathname = os.path.join(analysis_dir, filename)
         md5 = make_md5sum(submission_pathname)
         if md5 is None:
             errmsg = "Unable to produce md5sum for {0}"
-            logger.warning(errmsg.format(submission_pathname))
+            LOGGER.warning(errmsg.format(submission_pathname))
         else:
             self.model.add_statement(
                 RDF.Statement(fileNode, dafTermOntology['md5sum'], md5))
@@ -178,11 +191,11 @@ class Submission(object):
         for s in self.model.find_statements(filename_query):
             view_name = s.subject
             literal_re = s.object.literal_value['string']
-            logger.debug("Found: %s" % (literal_re,))
+            LOGGER.debug("Found: %s" % (literal_re,))
             try:
                 filename_re = re.compile(literal_re)
             except re.error, e:
-                logger.error("Unable to compile: %s" % (literal_re,))
+                LOGGER.error("Unable to compile: %s" % (literal_re,))
             patterns[literal_re] = view_name
         return patterns
 
@@ -254,3 +267,14 @@ class Submission(object):
                 "Unrecognized library type %s for %s" % \
                 (library_type, str(libNode)))
 
+    def execute_query(self, template, context):
+        """Execute the query, returning the results
+        """
+        formatted_query = template.render(context)
+        LOGGER.debug(formatted_query)
+        query = RDF.SPARQLQuery(str(formatted_query))
+        rdfstream = query.execute(self.model)
+        results = []
+        for r in rdfstream:
+            results.append(r)
+        return results
diff --git a/htsworkflow/templates/geo_files.sparql b/htsworkflow/templates/geo_files.sparql
new file mode 100644 (file)
index 0000000..7b66f4f
--- /dev/null
@@ -0,0 +1,18 @@
+PREFIX libraryOntology: <http://jumpgate.caltech.edu/wiki/LibraryOntology#>
+PREFIX submissionOntology: <http://jumpgate.caltech.edu/wiki/UcscSubmissionOntology#>
+PREFIX ucscDaf: <http://jumpgate.caltech.edu/wiki/UcscDaf#>
+PREFIX ncbiTaxon: <http://www.ncbi.nlm.nih.gov/Taxonomy/Browser/wwwtax.cgi?id=>
+PREFIX geoSoft: <http://www.ncbi.nlm.nih.gov/geo/info/soft2.html#>
+
+select distinct ?filename, ?md5sum, ?file_type ?file_type_label
+WHERE {
+  <{{submission}}> ucscDaf:has_file ?file ;
+                   a submissionOntology:submission .
+
+  ?file ucscDaf:filename ?filename ;
+        ucscDaf:md5sum ?md5sum ;
+        a ?file_type .
+  ?file_type a <{{file_class}}> ;
+             geoSoft:fileTypeLabel ?file_type_label .
+
+}
\ No newline at end of file
diff --git a/htsworkflow/templates/geo_platform.sparql b/htsworkflow/templates/geo_platform.sparql
new file mode 100644 (file)
index 0000000..4d224d7
--- /dev/null
@@ -0,0 +1,14 @@
+PREFIX libraryOntology: <http://jumpgate.caltech.edu/wiki/LibraryOntology#>
+PREFIX submissionOntology: <http://jumpgate.caltech.edu/wiki/UcscSubmissionOntology#>
+PREFIX ucscDaf: <http://jumpgate.caltech.edu/wiki/UcscDaf#>
+PREFIX ncbiTaxon: <http://www.ncbi.nlm.nih.gov/Taxonomy/Browser/wwwtax.cgi?id=>
+PREFIX geoSoft: <http://www.ncbi.nlm.nih.gov/geo/info/soft2.html#>
+
+
+select distinct ?name ?value
+WHERE {
+  <{{submission}}> submissionOntology:has_platform ?platform .
+  ?platform a geoSoft:platform .
+
+  ?platform ?name ?value .
+}
diff --git a/htsworkflow/templates/geo_samples.sparql b/htsworkflow/templates/geo_samples.sparql
new file mode 100644 (file)
index 0000000..850d99a
--- /dev/null
@@ -0,0 +1,41 @@
+PREFIX libraryOntology: <http://jumpgate.caltech.edu/wiki/LibraryOntology#>
+PREFIX submissionOntology: <http://jumpgate.caltech.edu/wiki/UcscSubmissionOntology#>
+PREFIX ucscDaf: <http://jumpgate.caltech.edu/wiki/UcscDaf#>
+PREFIX ncbiTaxon: <http://www.ncbi.nlm.nih.gov/Taxonomy/Browser/wwwtax.cgi?id=>
+PREFIX geoSoft: <http://www.ncbi.nlm.nih.gov/geo/info/soft2.html#>
+PREFIX cells: <http://encodewiki.ucsc.edu/EncodeDCC/index.php/Cell_lines#>
+
+select distinct ?name ?cell ?antibody ?sex ?control ?strain ?controlId ?library_id ?treatment ?protocol ?readType ?insertLength ?replicate, ?mapAlgorithm ?species_name ?taxon_id ?extractMolecule ?growthProtocol ?extractProtocol ?dataProtocol ?experiment_type ?library_selection ?library_source
+WHERE {
+  <{{submission}}> a submissionOntology:submission .
+
+  OPTIONAL { <{{submission}}> ucscDaf:control ?control }
+  OPTIONAL { <{{submission}}> ucscDaf:controlId ?controlId }
+  OPTIONAL { ?library libraryOntology:antibody ?antibody }
+  OPTIONAL { ?library libraryOntology:cell_line ?cell .
+             ?cell_line cells:cell ?cell ;
+                        cells:documents ?growthProtocol . }
+  OPTIONAL { ?library ucscDaf:sex ?sex }
+  OPTIONAL { ?library libraryOntology:library_id ?library_id }
+  OPTIONAL { ?library libraryOntology:replicate ?replicate }
+  OPTIONAL { ?library libraryOntology:species ?species_name }
+  OPTIONAL { ?library libraryOntology:condition_term ?treatment }
+  OPTIONAL { ?library libraryOntology:experiment_type ?experiment_type }
+  OPTIONAL { ?library libraryOntology:librarySelection ?library_selection }
+  OPTIONAL { ?library libraryOntology:librarySource ?library_source }
+  OPTIONAL { <{{submissionSet}}> geoSoft:data_processing ?dataProtocol }
+  OPTIONAL { ?library libraryOntology:extractMolecule ?extractMolecule }
+  OPTIONAL { ?library libraryOntology:extractProtocol ?extractProtocol }
+  OPTIONAL { ?library ucscDaf:protocol ?protocol }
+  OPTIONAL { ?library ucscDaf:readType ?readType }
+  OPTIONAL { ?library ucscDaf:strain ?strain }
+  OPTIONAL { ?library libraryOntology:insert_size ?insertLength }
+  OPTIONAL { ?library ucscDaf:mapAlgorithm ?mapAlgorithm }
+
+  <{{submission}}> submissionOntology:library ?library ;
+                   submissionOntology:name ?name .
+  ?species libraryOntology:species ?species_name ;
+           libraryOntology:taxon_id ?taxon_id .
+
+
+}
\ No newline at end of file
diff --git a/htsworkflow/templates/geo_series.sparql b/htsworkflow/templates/geo_series.sparql
new file mode 100644 (file)
index 0000000..815f311
--- /dev/null
@@ -0,0 +1,14 @@
+PREFIX libraryOntology: <http://jumpgate.caltech.edu/wiki/LibraryOntology#>
+PREFIX submissionOntology: <http://jumpgate.caltech.edu/wiki/UcscSubmissionOntology#>
+PREFIX ucscDaf: <http://jumpgate.caltech.edu/wiki/UcscDaf#>
+PREFIX ncbiTaxon: <http://www.ncbi.nlm.nih.gov/Taxonomy/Browser/wwwtax.cgi?id=>
+PREFIX geoSoft: <http://www.ncbi.nlm.nih.gov/geo/info/soft2.html#>
+
+
+select distinct ?name ?value
+WHERE {
+  <{{submission}}> submissionOntology:has_series ?series.
+  ?series a geoSoft:series .
+
+  ?series ?name ?value .
+}
index ae2ac5760946a14d414fd87730812e477bdafb87..00c0b4dc77818789bfea8950507fbd1dba0c13fb 100644 (file)
@@ -1,11 +1,39 @@
-Soft template
-!Platform_title = Illumina Genome Analyzer (Homo sapiens)
-!Platform_geo_accession = GPL9052
-{% for sample in samples %}{% for row in sample %}{%if forloop.first %}
+{% for name, value in series %}{{name}} = {{value}}
+{% endfor %}!Series_platform_id = {{ platform_id }}
+{% for row in samples %}
 ^SAMPLE={{row.name}}
+!Sample_type=SRA
 !Sample_title={{row.name}}
+!Sample_series_id = {{ series_id }}
+!Sample_instrument_model = Illumina Genome Analyzer
+!Sample_instrument_model = Illumina Genome Analyzer II
+!Sample_instrument_model = Illumina Genome Analyzer IIx
+!Sample_instrument_model = Illumina HiSeq 2000
+!Sample_channel_count = 1
 !Sample_organism_ch1 = {{ row.species_name }}
 !Sample_taxid_ch1 = {{ row.taxon_id }}
-{% spaceless %}{% if row.cell %}!Sample_characteristics_ch1 = cell: {{ row.cell }}
-{% endif %}{% endspaceless %}{% endif %}
-!Sample_supplementary_file_{{forloop.counter}}={{row.filename}}{% endfor %}{% endfor %}
\ No newline at end of file
+!Sample_platform_id = {{ platform_id }}
+!Sample_source_name_ch1={{row.cell}}
+!Sample_library_strategy={{ row.experiment_type }}
+!Sample_library_source={{row.library_source}}
+!Sample_library_selection={{ row.library_selection }}
+!Sample_growth_protocol_ch1={{ row.growthProtocol|safe }}
+!Sample_extract_protocol={{ row.extractProtocol|safe }}
+!Sample_data_processing={{ row.dataProtocol|safe }}
+!Sample_molecule_ch1 = {{ row.extractMolecule }}
+!Sample_characteristics_ch1 = labExpId: {{ row.library_id }}
+!Sample_characteristics_ch1 = replicate: {{ row.replicate }}
+{% if row.cell %}{% spaceless %}
+!Sample_characteristics_ch1 = cell: {{ row.cell }}
+{% endspaceless %}{% endif %}
+{% if row.readType %}{% spaceless %}
+!Sample_characteristics_ch1 = readType: {{ row.readType }}
+{% endspaceless %}{% endif %}{% if row.antibody %}{% spaceless %}
+!Sample_characteristics_ch1 = cell: {{ row.antibody }}
+{% endspaceless %}{% endif %}{% for raw in row.raw %}
+!Sample_raw_file_{{forloop.counter}}={{raw.filename}}
+!Sample_raw_file_type_{{forloop.counter}}={{raw.file_type_label}}
+!Sample_raw_file_checksum_{{forloop.counter}}={{raw.md5sum}}{% endfor %}{% for sup in row.supplimental %}
+!Sample_supplementary_file_{{forloop.counter}}={{sup.filename}}
+!Sample_supplementary_file_checksum_{{forloop.counter}}={{sup.md5sum}}
+{% endfor %}{% endfor %}
\ No newline at end of file
diff --git a/htsworkflow/templates/geo_submission.sparql b/htsworkflow/templates/geo_submission.sparql
deleted file mode 100644 (file)
index 1d7cbb1..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-PREFIX libraryOntology: <http://jumpgate.caltech.edu/wiki/LibraryOntology#>
-PREFIX submissionOntology: <http://jumpgate.caltech.edu/wiki/UcscSubmissionOntology#>
-PREFIX ucscDaf: <http://jumpgate.caltech.edu/wiki/UcscDaf#>
-PREFIX ncbiTaxon: <http://www.ncbi.nlm.nih.gov/Taxonomy/Browser/wwwtax.cgi?id=>
-
-select distinct ?name ?filename ?md5sum ?cell ?antibody ?sex ?control ?strain ?controlId ?labExpId ?labVersion ?treatment ?protocol ?readType ?insertLength ?replicate, ?mapAlgorithm ?species_name ?taxon_id
-WHERE {
-  <{{submission}}> a submissionOntology:submission .
-
-  OPTIONAL { ?submission ucscDaf:control ?control }
-  #OPTIONAL { ?submission ucscDaf:controlId ?controlId }
-  #OPTIONAL { ?library libraryOntology:antibody ?antibody }
-  OPTIONAL { ?library libraryOntology:cell_line ?cell } .
-  #OPTIONAL { ?library ucscDaf:sex ?sex }
-  OPTIONAL { ?library libraryOntology:library_id ?labExpId }
-  OPTIONAL { ?library libraryOntology:library_id ?labVersion }
-  OPTIONAL { ?library libraryOntology:replicate ?replicate }
-  OPTIONAL { ?library libraryOntology:species ?species_name }
-  
-  #OPTIONAL { ?library libraryOntology:condition_term ?treatment }
-  #OPTIONAL { ?library ucscDaf:protocol ?protocol }
-  #OPTIONAL { ?library ucscDaf:readType ?readType }
-  #OPTIONAL { ?library ucscDaf:strain ?strain }
-  #OPTIONAL { ?library libraryOntology:insert_size ?insertLength }
-  #OPTIONAL { ?library ucscDaf:mapAlgorithm ?mapAlgorithm }
-
-  <{{submission}}> submissionOntology:library ?library ;
-                   ucscDaf:has_file ?file ;
-                   submissionOntology:name ?name .
-  ?species libraryOntology:species ?species_name ;
-           libraryOntology:taxon_id ?taxon_id .
-  ?file ucscDaf:filename ?filename .
-}
diff --git a/htsworkflow/templates/rdf_report.html b/htsworkflow/templates/rdf_report.html
new file mode 100644 (file)
index 0000000..298e93a
--- /dev/null
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>Report</title>
+    <style>
+table {
+    border-spacing: 0;
+}
+
+table, td {
+    border-style: solid;
+}
+
+td { margin: 0;
+     border-width: 1px 1px 0 0;
+     padding: 4px;
+}    </style>
+  </head>
+  <body>
+    <table>
+      <thead>
+        <tr>{% for k in results.0 %}
+          <td>{{k}}</td>{% endfor %}
+        </tr>
+      </thead>
+      <tbody>
+        {% for row in results %}<tr>{% for value in row.values %}
+          <td>{% spaceless %}
+            {% if value.url %}<a href="{{ value.url }}">{% endif%}
+            {{value.simple}}
+            {% if value.url %}</a>{% endif %}</td>{% endspaceless %}{% endfor %}
+        </tr>
+      {% endfor %}
+      </tbody>
+    </table>
+  </body>
+</html>
diff --git a/htsworkflow/templates/sra.rdfxml.xsl b/htsworkflow/templates/sra.rdfxml.xsl
new file mode 100644 (file)
index 0000000..88e5a5f
--- /dev/null
@@ -0,0 +1,179 @@
+<?xml version="1.0"?>
+<xsl:stylesheet version="1.0"
+                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+                xmlns:xs="http://www.w3.org/2001/XMLSchema#"
+                xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+               xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
+                xmlns:submission="http://jumpgate.caltech.edu/wiki/UcscSubmissionOntology#"
+                xmlns:sra="http://www.ncbi.nlm.nih.gov/sra"
+                xmlns:sras="http://www.ncbi.nlm.nih.gov/viewvc/v1/trunk/sra/doc/SRA_1-3/SRA.package.xsd#"
+                xmlns:sraa="http://www.ncbi.nlm.nih.gov/viewvc/v1/trunk/sra/doc/SRA_1-3/SRA.attribute#"
+                >
+
+<xsl:output method="xml" indent="yes"/>
+
+<xsl:template match="/">
+  <rdf:RDF xmlns:ddf="http://encodesubmit.ucsc.edu/pipeline/download_ddf#"
+           xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+          xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
+           xmlns:submission="http://jumpgate.caltech.edu/wiki/UcscSubmissionOntology#"
+           xmlns:pipeline="http://encodesubmit.ucsc.edu/pipeline/"
+           xmlns:sra="http://www.ncbi.nlm.nih.gov/sra"
+           xmlns:sras="http://www.ncbi.nlm.nih.gov/viewvc/v1/trunk/sra/doc/SRA_1-3/SRA.package.xsd#"
+           xmlns:sraa="http://www.ncbi.nlm.nih.gov/viewvc/v1/trunk/sra/doc/SRA_1-3/SRA.attribute#"
+>
+    <xsl:apply-templates select="*"/>
+  </rdf:RDF>
+</xsl:template>
+
+<xsl:template match="EXPERIMENT_PACKAGE">
+  <xsl:apply-templates select="./EXPERIMENT"/>
+  <!-- xsl:for-each select="./EXPERIMENT/EXPERIMENT_ATTRIBUTES/EXPERIMENT_ATTRIBUTE">
+    <xsl:call-template name="node_detail"/>
+  </xsl:for-each -->
+  <xsl:apply-templates select="./SUBMISSION"/>
+  <xsl:apply-templates select="./STUDY"/>
+  <xsl:apply-templates select="./SAMPLE"/>
+  <!-- xsl:for-each select="./SAMPLE/SAMPLE_ATTRIBUTES/SAMPLE_ATTRIBUTE">
+    <xsl:call-template name="node_detail"/>
+  </xsl:for-each -->
+  <xsl:apply-templates select="./RUN_SET"/>
+</xsl:template>
+
+<xsl:template match="EXPERIMENT">
+  <sras:experiment>
+    <xsl:attribute name="rdf:about">http://www.ncbi.nlm.nih.gov/sra/<xsl:value-of select="@accession"/></xsl:attribute>
+    <sras:experiment_alias><xsl:value-of select="@alias"/></sras:experiment_alias>
+    <sras:center_name><xsl:value-of select="@center_name"/></sras:center_name>
+    <xsl:apply-templates select="STUDY_REF"/>
+    <xsl:apply-templates select="DESIGN"/>
+    <xsl:apply-templates select="PLATFORM"/>
+    <xsl:for-each select="./EXPERIMENT_ATTRIBUTES/EXPERIMENT_ATTRIBUTE">
+      <xsl:call-template name="node_simple"/>
+    </xsl:for-each>
+    <sras:submission>
+      <xsl:attribute name="rdf:resource">http://www.ncbi.nlm.nih.gov/sra/<xsl:value-of select="../SUBMISSION/@accession"/></xsl:attribute>
+    </sras:submission>
+  </sras:experiment>
+</xsl:template>
+
+<xsl:template match="STUDY_REF">
+  <sras:study>
+    <xsl:attribute name="rdf:resource">http://www.ncbi.nlm.nih.gov/sra/<xsl:value-of select="@accession"/></xsl:attribute>
+  </sras:study>
+</xsl:template>
+
+<xsl:template match="DESIGN">
+  <xsl:apply-templates select="SAMPLE_DESCRIPTOR"/>
+  <xsl:apply-templates select="LIBRARY_DESCRIPTOR"/>
+</xsl:template>
+
+<xsl:template match="SAMPLE_DESCRIPTOR">
+  <sras:sample>
+    <xsl:attribute name="rdf:resource">http://www.ncbi.nlm.nih.gov/sra/<xsl:value-of select="@accession"/></xsl:attribute>
+  </sras:sample>
+</xsl:template>
+
+<xsl:template match="LIBRARY_DESCRIPTOR">
+  <sras:library_name><xsl:value-of select="LIBRARY_NAME"/></sras:library_name>
+  <sras:library_strategy><xsl:value-of select="LIBRARY_STRATEGY"/></sras:library_strategy>
+  <sras:library_source><xsl:value-of select="LIBRARY_SOURCE"/></sras:library_source>
+  <sras:library_selection><xsl:value-of select="LIBRARY_SELECTION"/></sras:library_selection>
+  <sras:library_protocol>
+    <xsl:attribute name="rdf:resource">http:<xsl:value-of select="substring-after(LIBRARY_CONSTRUCTION_PROTOCOL, 'http')"/></xsl:attribute></sras:library_protocol>
+</xsl:template>
+
+<xsl:template match="PLATFORM">
+  <sras:instrument_model><xsl:value-of select="ILLUMINA/INSTRUMENT_MODEL"/></sras:instrument_model>
+  <sras:sequence_length rdf:datatype="http://www.w3.org/2001/XMLSchema#decimal"><xsl:value-of select="ILLUMINA/SEQUENCE_LENGTH"/></sras:sequence_length>
+</xsl:template>
+
+<!-- xsl:template select="EXPERIMENT" mode="ref" -->
+<xsl:template name="node_ref">
+  <sras:has_attribute>
+    <xsl:attribute rdf:name="rdf:nodeID"><xsl:value-of select="generate-id(node())"/></xsl:attribute>
+  </sras:has_attribute>
+</xsl:template>
+
+<!-- xsl:template name="attribute" mode="nodedetail" -->
+<xsl:template name="node_detail">
+  <sras:attribute>
+    <xsl:attribute rdf:name="rdf:nodeID"><xsl:value-of select="generate-id(node())"/></xsl:attribute>
+    <sras:attribute_name><xsl:value-of select="TAG"/></sras:attribute_name>
+  </sras:attribute>
+  <sras:attribute>
+    <xsl:attribute rdf:name="rdf:nodeID"><xsl:value-of select="generate-id(node())"/></xsl:attribute>
+    <sras:attribute_value><xsl:value-of select="VALUE"/></sras:attribute_value>
+  </sras:attribute>
+</xsl:template>
+
+<!-- try to generate attributes with non blank nodes -->
+<xsl:template name="node_simple">
+  <xsl:variable name="spacelessTag">
+    <xsl:call-template name="string-replace-all">
+      <xsl:with-param name="text" select="TAG" />
+      <xsl:with-param name="replace" select="' '" />
+      <xsl:with-param name="by" select="'_'" />
+    </xsl:call-template>
+  </xsl:variable>
+  <xsl:element name="sraa:{$spacelessTag}"><xsl:value-of select="VALUE"/></xsl:element>
+</xsl:template>
+
+<!-- SUBMISSION TOP LEVEL -->
+<xsl:template match="SUBMISSION">
+  <sras:submission>
+    <xsl:attribute name="rdf:about">http://www.ncbi.nlm.nih.gov/sra/<xsl:value-of select="@accession"/></xsl:attribute>
+    <sras:alias><xsl:value-of select="@alias"/></sras:alias>
+    <sras:comment><xsl:value-of select="@submission_comment"/></sras:comment>
+    <sras:date rdf:datatype="http://www.w3.org/2001/XMLSchema#dateTime"><xsl:value-of select="@submission_date"/></sras:date>
+    <sras:lab_name><xsl:value-of select="@lab_name"/></sras:lab_name>
+    <sras:accession><xsl:value-of select="@accession"/></sras:accession>
+  </sras:submission>
+</xsl:template>
+
+<xsl:template match="STUDY">
+  <sras:study>
+    <xsl:attribute name="rdf:about">http://www.ncbi.nlm.nih.gov/sra/<xsl:value-of select="@accession"/></xsl:attribute>
+    <sras:study_alias><xsl:value-of select="@alias"/></sras:study_alias>
+    <sras:title><xsl:value-of select="DESCRIPTOR/STUDY_TITLE"/></sras:title>
+    <sras:description><xsl:value-of select="normalize-space(DESCRIPTOR/STUDY_DESCRIPTION)"/></sras:description>
+  </sras:study>
+</xsl:template>
+
+<xsl:template match="SAMPLE">
+  <sras:sample>
+    <xsl:attribute name="rdf:about">http://www.ncbi.nlm.nih.gov/sra/<xsl:value-of select="@accession"/></xsl:attribute>
+    <sras:sample_alias><xsl:value-of select="@alias"/></sras:sample_alias>
+    <sras:common_name><xsl:value-of select="SAMPLE_NAME/COMMON_NAME"/></sras:common_name>
+    <sras:description><xsl:value-of select="DESCRIPTION"/></sras:description>
+    <xsl:for-each select="./SAMPLE_ATTRIBUTES/SAMPLE_ATTRIBUTE">
+      <xsl:call-template name="node_simple"/>
+    </xsl:for-each>
+  </sras:sample>
+</xsl:template>
+<xsl:template match="RUN_SET">
+</xsl:template>
+
+<!-- from http://geekswithblogs.net/Erik/archive/2008/04/01/120915.aspx -->
+<xsl:template name="string-replace-all">
+    <xsl:param name="text" />
+    <xsl:param name="replace" />
+    <xsl:param name="by" />
+    <xsl:choose>
+      <xsl:when test="contains($text, $replace)">
+        <xsl:value-of select="substring-before($text,$replace)" />
+        <xsl:value-of select="$by" />
+        <xsl:call-template name="string-replace-all">
+          <xsl:with-param name="text"
+          select="substring-after($text,$replace)" />
+          <xsl:with-param name="replace" select="$replace" />
+          <xsl:with-param name="by" select="$by" />
+        </xsl:call-template>
+      </xsl:when>
+      <xsl:otherwise>
+        <xsl:value-of select="$text" />
+      </xsl:otherwise>
+    </xsl:choose>
+  </xsl:template>
+
+</xsl:stylesheet>
index 5e2560659bef32454415fa8d091023a540e428cf..c9d66495e76fe672a5c41019ce378358c4ee736b 100644 (file)
@@ -35,10 +35,10 @@ def chunkify(str):
     return a list of numbers and non-numeric substrings of +str+
     the numeric substrings are converted to integer, non-numeric are left as is
     """
-    if type(str) in types.StringTypes: 
+    if type(str) in types.StringTypes:
         chunks = re.findall("(\d+|\D+)",str)
         #convert numeric strings to numbers
-        chunks = [re.match('\d',x) and int(x) or x for x in chunks] 
+        chunks = [re.match('\d',x) and int(x) or x for x in chunks]
         return chunks
     elif type(str) in [types.IntType, types.LongType, types.FloatType]:
         return [str]
@@ -58,12 +58,3 @@ def alphanum(a,b):
     bChunks = chunkify(b)
 
     return cmp(aChunks,bChunks) #built in comparison works once data is prepared
-
-
-
-if __name__ == "__main__":
-       unsorted = ["1000X Radonius Maximus","10X Radonius","200X Radonius","20X Radonius","20X Radonius Prime","30X Radonius","40X Radonius","Allegia 50 Clasteron","Allegia 500 Clasteron","Allegia 51 Clasteron","Allegia 51B Clasteron","Allegia 52 Clasteron","Allegia 60 Clasteron","Alpha 100","Alpha 2","Alpha 200","Alpha 2A","Alpha 2A-8000","Alpha 2A-900","Callisto Morphamax","Callisto Morphamax 500","Callisto Morphamax 5000","Callisto Morphamax 600","Callisto Morphamax 700","Callisto Morphamax 7000","Callisto Morphamax 7000 SE","Callisto Morphamax 7000 SE2","QRS-60 Intrinsia Machine","QRS-60F Intrinsia Machine","QRS-62 Intrinsia Machine","QRS-62F Intrinsia Machine","Xiph Xlater 10000","Xiph Xlater 2000","Xiph Xlater 300","Xiph Xlater 40","Xiph Xlater 5","Xiph Xlater 50","Xiph Xlater 500","Xiph Xlater 5000","Xiph Xlater 58"]
-       sorted = unsorted[:]
-       sorted.sort(alphanum)
-       print '+++++Sorted...++++'
-       print '\n'.join(sorted)
index 1f9ec6179f2f933d1b52a1afefd7cdbe2e873537..3ca27fb97315b968644724a977e55aedd1bb5443 100644 (file)
@@ -1,10 +1,15 @@
 """Helper features for working with librdf
 """
+import collections
 from datetime import datetime
+from urlparse import urlparse, urlunparse
+from urllib2 import urlopen
 import logging
 import os
 import types
 
+import lxml.html
+import lxml.html.clean
 import RDF
 
 logger = logging.getLogger(__name__)
@@ -13,37 +18,72 @@ logger = logging.getLogger(__name__)
 owlNS = RDF.NS('http://www.w3.org/2002/07/owl#')
 dublinCoreNS = RDF.NS("http://purl.org/dc/elements/1.1/")
 rdfNS = RDF.NS("http://www.w3.org/1999/02/22-rdf-syntax-ns#")
-rdfsNS= RDF.NS("http://www.w3.org/2000/01/rdf-schema#")
+rdfsNS = RDF.NS("http://www.w3.org/2000/01/rdf-schema#")
 xsdNS = RDF.NS("http://www.w3.org/2001/XMLSchema#")
 
 # internal ontologies
-submissionOntology = RDF.NS("http://jumpgate.caltech.edu/wiki/UcscSubmissionOntology#")
+submissionOntology = RDF.NS(
+    "http://jumpgate.caltech.edu/wiki/UcscSubmissionOntology#")
 dafTermOntology = RDF.NS("http://jumpgate.caltech.edu/wiki/UcscDaf#")
 libraryOntology = RDF.NS("http://jumpgate.caltech.edu/wiki/LibraryOntology#")
-inventoryOntology = RDF.NS("http://jumpgate.caltech.edu/wiki/InventoryOntology#")
+inventoryOntology = RDF.NS(
+    "http://jumpgate.caltech.edu/wiki/InventoryOntology#")
 submissionLog = RDF.NS("http://jumpgate.caltech.edu/wiki/SubmissionsLog/")
+geoSoftNS = RDF.NS('http://www.ncbi.nlm.nih.gov/geo/info/soft2.html#')
 
 ISOFORMAT_MS = "%Y-%m-%dT%H:%M:%S.%f"
 ISOFORMAT_SHORT = "%Y-%m-%dT%H:%M:%S"
 
-def sparql_query(model, query_filename):
+
+def sparql_query(model, query_filename, output_format='text'):
     """Execute sparql query from file
     """
     logger.info("Opening: %s" % (query_filename,))
-    query_body = open(query_filename,'r').read()
+    query_body = open(query_filename, 'r').read()
     query = RDF.SPARQLQuery(query_body)
     results = query.execute(model)
-    display_query_results(results)
+    if output_format == 'html':
+        html_query_results(results)
+    else:
+        display_query_results(results)
+
 
 def display_query_results(results):
+    """A very simple display of sparql query results showing name value pairs
+    """
     for row in results:
-        output = []
-        for k,v in row.items()[::-1]:
-            print "{0}: {1}".format(k,v)
+        for k, v in row.items()[::-1]:
+            print "{0}: {1}".format(k, v)
         print
 
+def html_query_results(result_stream):
+    from django.conf import settings
+    from django.template import Context, loader
+
+    # I did this because I couldn't figure out how to
+    # get simplify_rdf into the django template as a filter
+    class Simplified(object):
+        def __init__(self, value):
+            self.simple = simplify_rdf(value)
+            if value.is_resource():
+                self.url = value
+            else:
+                self.url = None
+
+    template = loader.get_template('rdf_report.html')
+    results = []
+    for row in result_stream:
+        new_row = collections.OrderedDict()
+        row_urls = []
+        for k,v in row.items():
+            new_row[k] = Simplified(v)
+        results.append(new_row)
+    context = Context({'results': results,})
+    print template.render(context)
 
 def blankOrUri(value=None):
+    """Return a blank node for None or a resource node for strings.
+    """
     node = None
     if value is None:
         node = RDF.Node()
@@ -56,6 +96,8 @@ def blankOrUri(value=None):
 
 
 def toTypedNode(value):
+    """Convert a python variable to a RDF Node with its closest xsd type
+    """
     if type(value) == types.BooleanType:
         value_type = xsdNS['boolean'].uri
         if value:
@@ -84,13 +126,14 @@ def toTypedNode(value):
         node = RDF.Node(literal=unicode(value).encode('utf-8'))
     return node
 
+
 def fromTypedNode(node):
+    """Convert a typed RDF Node to its closest python equivalent
+    """
     if node is None:
         return None
 
-    value_type = str(node.literal_value['datatype'])
-    # chop off xml schema declaration
-    value_type = value_type.replace(str(xsdNS[''].uri),'')
+    value_type = get_node_type(node)
     literal = node.literal_value['string']
     literal_lower = literal.lower()
 
@@ -112,11 +155,83 @@ def fromTypedNode(node):
     elif value_type in ('dateTime'):
         try:
             return datetime.strptime(literal, ISOFORMAT_MS)
-        except ValueError, e:
+        except ValueError, _:
             return datetime.strptime(literal, ISOFORMAT_SHORT)
     return literal
 
 
+def get_node_type(node):
+    """Return just the base name of a XSD datatype:
+    e.g. http://www.w3.org/2001/XMLSchema#integer -> integer
+    """
+    # chop off xml schema declaration
+    value_type = node.literal_value['datatype']
+    if value_type is None:
+        return "string"
+    else:
+        value_type = str(value_type)
+        return value_type.replace(str(xsdNS[''].uri), '')
+
+
+def simplify_rdf(value):
+    """Return a short name for a RDF object
+    e.g. The last part of a URI or an untyped string.
+    """
+    if isinstance(value, RDF.Node):
+        if value.is_resource():
+            name = simplify_uri(str(value.uri))
+        elif value.is_blank():
+            name = '<BLANK>'
+        else:
+            name = value.literal_value['string']
+    elif isinstance(value, RDF.Uri):
+        name = split_uri(str(value))
+    else:
+        name = value
+    return str(name)
+
+
+def simplify_uri(uri):
+    """Split off the end of a uri
+
+    >>> simplify_uri('http://asdf.org/foo/bar')
+    'bar'
+    >>> simplify_uri('http://asdf.org/foo/bar#bleem')
+    'bleem'
+    >>> simplify_uri('http://asdf.org/foo/bar/')
+    'bar'
+    >>> simplify_uri('http://asdf.org/foo/bar?was=foo')
+    'was=foo'
+    """
+    parsed = urlparse(uri)
+    if len(parsed.query) > 0:
+        return parsed.query
+    elif len(parsed.fragment) > 0:
+        return parsed.fragment
+    elif len(parsed.path) > 0:
+        for element in reversed(parsed.path.split('/')):
+            if len(element) > 0:
+                return element
+    raise ValueError("Unable to simplify %s" % (uri,))
+
+def simplifyUri(namespace, term):
+    """Remove the namespace portion of a term
+
+    returns None if they aren't in common
+    """
+    if isinstance(term, RDF.Node):
+        if  term.is_resource():
+            term = term.uri
+        else:
+            raise ValueError("This works on resources")
+    elif not isinstance(term, RDF.Uri):
+        raise ValueError("This works on resources")
+    term_s = str(term)
+    if not term_s.startswith(namespace._prefix):
+        return None
+    return term_s.replace(namespace._prefix, "")
+
+
 def get_model(model_name=None, directory=None):
     if directory is None:
         directory = os.getcwd()
@@ -133,21 +248,79 @@ def get_model(model_name=None, directory=None):
     return model
 
 
-def load_into_model(model, parser_name, filename, ns=None):
-    if not os.path.exists(filename):
-        raise IOError("Can't find {0}".format(filename))
-
-    data = open(filename, 'r').read()
+def load_into_model(model, parser_name, path, ns=None):
+    url_parts = list(urlparse(path))
+    if len(url_parts[0]) == 0:
+        url_parts[0] = 'file'
+        url_parts[2] = os.path.abspath(url_parts[2])
+    url = urlunparse(url_parts)
+    logger.info("Opening %s" % (url,))
+    req = urlopen(url)
+    logger.debug("request status: %s" % (req.code,))
+    if parser_name is None:
+        content_type = req.headers.get('Content-Type', None)
+        parser_name = guess_parser(content_type, path)
+        logger.debug("Guessed parser: %s" % (parser_name,))
+    data = req.read()
     load_string_into_model(model, parser_name, data, ns)
 
 
 def load_string_into_model(model, parser_name, data, ns=None):
     if ns is None:
-        ns = "http://localhost/"
-
+        ns = RDF.NS("http://localhost/")
+    imports = owlNS['imports']
     rdf_parser = RDF.Parser(name=parser_name)
-    rdf_parser.parse_string_into_model(model, data, ns)
+    for s in rdf_parser.parse_string_as_stream(data, ns):
+        if s.predicate == imports:
+            obj = str(s.object)
+            logger.info("Importing %s" % (obj,))
+            load_into_model(model, None, obj, ns)
+        if s.object.is_literal():
+            value_type = get_node_type(s.object)
+            if value_type == 'string':
+                s.object = sanitize_literal(s.object)
+        model.add_statement(s)
+
+
+def sanitize_literal(node):
+    """Clean up a literal string
+    """
+    if not isinstance(node, RDF.Node):
+        raise ValueError("sanitize_literal only works on RDF.Nodes")
 
+    element = lxml.html.fromstring(node.literal_value['string'])
+    cleaner = lxml.html.clean.Cleaner(page_structure=False)
+    element = cleaner.clean_html(element)
+    text = lxml.html.tostring(element)
+    p_len = 3
+    slash_p_len = 4
+
+    args = {'literal': text[p_len:-slash_p_len]}
+    datatype = node.literal_value['datatype']
+    if datatype is not None:
+        args['datatype'] = datatype
+    language = node.literal_value['language']
+    if language is not None:
+        args['language'] = language
+    return RDF.Node(**args)
+
+
+def guess_parser(content_type, pathname):
+    if content_type in ('application/rdf+xml'):
+        return 'rdfxml'
+    elif content_type in ('application/x-turtle'):
+        return 'turtle'
+    elif content_type in ('text/html'):
+        return 'rdfa'
+    elif content_type is None:
+        _, ext = os.path.splitext(pathname)
+        if ext in ('xml', 'rdf'):
+            return 'rdfxml'
+        elif ext in ('html'):
+            return 'rdfa'
+        elif ext in ('turtle'):
+            return 'turtle'
+    return 'guess'
 
 def get_serializer(name='turtle'):
     """Return a serializer with our standard prefixes loaded
@@ -165,6 +338,7 @@ def get_serializer(name='turtle'):
     writer.set_namespace('ucscDaf', dafTermOntology._prefix)
     return writer
 
+
 def dump_model(model):
     serializer = get_serializer()
     print serializer.serialize_model_to_string(model)
diff --git a/htsworkflow/util/test/extra.turtle b/htsworkflow/util/test/extra.turtle
new file mode 100644 (file)
index 0000000..9e77f14
--- /dev/null
@@ -0,0 +1,6 @@
+@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
+@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
+@prefix owl: <http://www.w3.org/2002/07/owl#> .
+
+<http://jumpgate.caltech.edu/wiki/TestCase>
+        rdfs:label "TestCase" .
\ No newline at end of file
index f7b488d0b5cf575f04ec525c0b74bfd55b2bc659..3fd60250cbe392f9208c077076253fd6aed10f94 100644 (file)
@@ -27,6 +27,19 @@ class testAlphanum(unittest.TestCase):
       for i in xrange(len(scratch)):
         self.failUnlessEqual(scratch[i], sorted[i])
 
+    def test_long_names(self):
+        unsorted = ["1000X Radonius Maximus","10X Radonius","200X Radonius","20X Radonius","20X Radonius Prime","30X Radonius","40X Radonius","Allegia 50 Clasteron","Allegia 500 Clasteron","Allegia 51 Clasteron","Allegia 51B Clasteron","Allegia 52 Clasteron","Allegia 60 Clasteron","Alpha 100","Alpha 2","Alpha 200","Alpha 2A","Alpha 2A-8000","Alpha 2A-900","Callisto Morphamax","Callisto Morphamax 500","Callisto Morphamax 5000","Callisto Morphamax 600","Callisto Morphamax 700","Callisto Morphamax 7000","Callisto Morphamax 7000 SE","Callisto Morphamax 7000 SE2","QRS-60 Intrinsia Machine","QRS-60F Intrinsia Machine","QRS-62 Intrinsia Machine","QRS-62F Intrinsia Machine","Xiph Xlater 10000","Xiph Xlater 2000","Xiph Xlater 300","Xiph Xlater 40","Xiph Xlater 5","Xiph Xlater 50","Xiph Xlater 500","Xiph Xlater 5000","Xiph Xlater 58"]
+        expected = ['10X Radonius', '20X Radonius', '20X Radonius Prime', '30X Radonius', '40X Radonius', '200X Radonius', '1000X Radonius Maximus', 'Allegia 50 Clasteron', 'Allegia 51 Clasteron', 'Allegia 51B Clasteron', 'Allegia 52 Clasteron', 'Allegia 60 Clasteron', 'Allegia 500 Clasteron', 'Alpha 2', 'Alpha 2A', 'Alpha 2A-900', 'Alpha 2A-8000', 'Alpha 100', 'Alpha 200', 'Callisto Morphamax', 'Callisto Morphamax 500', 'Callisto Morphamax 600', 'Callisto Morphamax 700', 'Callisto Morphamax 5000', 'Callisto Morphamax 7000', 'Callisto Morphamax 7000 SE', 'Callisto Morphamax 7000 SE2', 'QRS-60 Intrinsia Machine', 'QRS-60F Intrinsia Machine', 'QRS-62 Intrinsia Machine', 'QRS-62F Intrinsia Machine', 'Xiph Xlater 5', 'Xiph Xlater 40', 'Xiph Xlater 50', 'Xiph Xlater 58', 'Xiph Xlater 300', 'Xiph Xlater 500', 'Xiph Xlater 2000', 'Xiph Xlater 5000', 'Xiph Xlater 10000']
+
+        s = unsorted[:]
+        s.sort(alphanum)
+        self.failUnlessEqual(s, expected)
+
+    def test_bad_input(self):
+        unsorted = [object(), (1,3j)]
+        s = unsorted[:]
+        self.failUnlessRaises(ValueError, s.sort, alphanum)
+
 
 def suite():
     return unittest.makeSuite(testAlphanum, 'test')
index df275edd095b818301308816589000405e67833d..4fe6769f827b0636cccfdbdd63307981018e7423 100644 (file)
+import os
 import unittest
 import types
 
+
 from datetime import datetime
 
 from htsworkflow.util.rdfhelp import \
      blankOrUri, \
-     toTypedNode, \
+     dump_model, \
      fromTypedNode, \
+     get_model, \
+     load_string_into_model, \
+     rdfsNS, \
+     toTypedNode, \
+     simplifyUri, \
+     sanitize_literal, \
      xsdNS
 
 try:
-  import RDF
-
-  class TestRDFHelp(unittest.TestCase):
-      def test_typed_node_boolean(self):
-          node = toTypedNode(True)
-          self.failUnlessEqual(node.literal_value['string'], u'1')
-          self.failUnlessEqual(str(node.literal_value['datatype']),
-                               'http://www.w3.org/2001/XMLSchema#boolean')
-
-      def test_typed_node_string(self):
-          node = toTypedNode('hello')
-          self.failUnlessEqual(node.literal_value['string'], u'hello')
-          self.failUnless(node.literal_value['datatype'] is None)
-
-      def test_blank_or_uri_blank(self):
-          node = blankOrUri()
-          self.failUnlessEqual(node.is_blank(), True)
-
-      def test_blank_or_uri_url(self):
-          s = 'http://google.com'
-          node = blankOrUri(s)
-          self.failUnlessEqual(node.is_resource(), True)
-          self.failUnlessEqual(str(node.uri), s)
-
-      def test_blank_or_uri_node(self):
-          s = RDF.Node(RDF.Uri('http://google.com'))
-          node = blankOrUri(s)
-          self.failUnlessEqual(node.is_resource(), True)
-          self.failUnlessEqual(node, s)
-
-      def test_unicode_node_roundtrip(self):
-          literal = u'\u5927'
-          roundtrip = fromTypedNode(toTypedNode(literal))
-          self.failUnlessEqual(roundtrip, literal)
-          self.failUnlessEqual(type(roundtrip), types.UnicodeType)
-
-      def test_datetime_no_microsecond(self):
-          dateTimeType = xsdNS['dateTime'].uri
-          short_isostamp = '2011-12-20T11:44:25'
-          short_node = RDF.Node(literal=short_isostamp,
-                               datatype=dateTimeType)
-          short_datetime = datetime(2011,12,20,11,44,25)
-
-          self.assertEqual(fromTypedNode(short_node), short_datetime)
-          self.assertEqual(toTypedNode(short_datetime), short_node)
-          self.assertEqual(fromTypedNode(toTypedNode(short_datetime)),
-                           short_datetime)
-
-      def test_datetime_with_microsecond(self):
-          dateTimeType = xsdNS['dateTime'].uri
-          long_isostamp = '2011-12-20T11:44:25.081776'
-          long_node = RDF.Node(literal=long_isostamp,
-                               datatype=dateTimeType)
-          long_datetime = datetime(2011,12,20,11,44,25,81776)
-
-          self.assertEqual(fromTypedNode(long_node), long_datetime)
-          self.assertEqual(toTypedNode(long_datetime), long_node)
-          self.assertEqual(fromTypedNode(toTypedNode(long_datetime)),
-                           long_datetime)
-
-  def suite():
-      return unittest.makeSuite(testRdfHelp, 'test')
+    import RDF
+
+    class TestRDFHelp(unittest.TestCase):
+        def test_from_none(self):
+          self.failUnlessEqual(fromTypedNode(None), None)
+
+        def test_typed_node_boolean(self):
+            node = toTypedNode(True)
+            self.failUnlessEqual(node.literal_value['string'], u'1')
+            self.failUnlessEqual(str(node.literal_value['datatype']),
+                                 'http://www.w3.org/2001/XMLSchema#boolean')
+
+        def test_bad_boolean(self):
+            node = RDF.Node(literal='bad', datatype=xsdNS['boolean'].uri)
+            self.failUnlessRaises(ValueError, fromTypedNode, node)
+
+        def test_typed_node_string(self):
+            node = toTypedNode('hello')
+            self.failUnlessEqual(node.literal_value['string'], u'hello')
+            self.failUnless(node.literal_value['datatype'] is None)
+
+        def test_typed_real_like(self):
+            num = 3.14
+            node = toTypedNode(num)
+            self.failUnlessEqual(fromTypedNode(node), num)
+
+        def test_typed_integer(self):
+            num = 3
+            node = toTypedNode(num)
+            self.failUnlessEqual(fromTypedNode(node), num)
+            self.failUnlessEqual(type(fromTypedNode(node)), type(num))
+
+        def test_typed_node_string(self):
+            s = "Argh matey"
+            node = toTypedNode(s)
+            self.failUnlessEqual(fromTypedNode(node), s)
+            self.failUnlessEqual(type(fromTypedNode(node)), types.UnicodeType)
+
+        def test_blank_or_uri_blank(self):
+            node = blankOrUri()
+            self.failUnlessEqual(node.is_blank(), True)
+
+        def test_blank_or_uri_url(self):
+            s = 'http://google.com'
+            node = blankOrUri(s)
+            self.failUnlessEqual(node.is_resource(), True)
+            self.failUnlessEqual(str(node.uri), s)
+
+        def test_blank_or_uri_node(self):
+            s = RDF.Node(RDF.Uri('http://google.com'))
+            node = blankOrUri(s)
+            self.failUnlessEqual(node.is_resource(), True)
+            self.failUnlessEqual(node, s)
+
+        def test_unicode_node_roundtrip(self):
+            literal = u'\u5927'
+            roundtrip = fromTypedNode(toTypedNode(literal))
+            self.failUnlessEqual(roundtrip, literal)
+            self.failUnlessEqual(type(roundtrip), types.UnicodeType)
+
+        def test_datetime_no_microsecond(self):
+            dateTimeType = xsdNS['dateTime'].uri
+            short_isostamp = '2011-12-20T11:44:25'
+            short_node = RDF.Node(literal=short_isostamp,
+                                 datatype=dateTimeType)
+            short_datetime = datetime(2011,12,20,11,44,25)
+
+            self.assertEqual(fromTypedNode(short_node), short_datetime)
+            self.assertEqual(toTypedNode(short_datetime), short_node)
+            self.assertEqual(fromTypedNode(toTypedNode(short_datetime)),
+                             short_datetime)
+
+        def test_datetime_with_microsecond(self):
+            dateTimeType = xsdNS['dateTime'].uri
+            long_isostamp = '2011-12-20T11:44:25.081776'
+            long_node = RDF.Node(literal=long_isostamp,
+                                 datatype=dateTimeType)
+            long_datetime = datetime(2011,12,20,11,44,25,81776)
+
+            self.assertEqual(fromTypedNode(long_node), long_datetime)
+            self.assertEqual(toTypedNode(long_datetime), long_node)
+            self.assertEqual(fromTypedNode(toTypedNode(long_datetime)),
+                             long_datetime)
+
+        def test_simplify_uri(self):
+            nsOrg = RDF.NS('example.org/example#')
+            nsCom = RDF.NS('example.com/example#')
+
+            term = 'foo'
+            node = nsOrg[term]
+            self.failUnlessEqual(simplifyUri(nsOrg, node), term)
+            self.failUnlessEqual(simplifyUri(nsCom, node), None)
+            self.failUnlessEqual(simplifyUri(nsOrg, node.uri), term)
+
+        def test_simplify_uri_exceptions(self):
+            nsOrg = RDF.NS('example.org/example#')
+            nsCom = RDF.NS('example.com/example#')
+
+            node = toTypedNode('bad')
+            self.failUnlessRaises(ValueError, simplifyUri, nsOrg, node)
+            self.failUnlessRaises(ValueError, simplifyUri, nsOrg, nsOrg)
+
+        def test_owl_import(self):
+            path, name = os.path.split(__file__)
+            loc = 'file://'+os.path.abspath(path)+'/'
+            model = get_model()
+            fragment = '''
+@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
+@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
+@prefix owl: <http://www.w3.org/2002/07/owl#> .
+
+_:a owl:imports "{loc}extra.turtle" .
+'''.format(loc=loc)
+            load_string_into_model(model, 'turtle', fragment, loc)
+            tc = RDF.Node(RDF.Uri('http://jumpgate.caltech.edu/wiki/TestCase'))
+            query = RDF.Statement(tc, rdfsNS['label'], None)
+            result = list(model.find_statements(query))
+            self.failUnlessEqual(len(result), 1)
+            self.failUnlessEqual(str(result[0].object), 'TestCase')
+
+        def test_sanitize_literal_text(self):
+            self.failUnlessRaises(ValueError, sanitize_literal, "hi")
+            hello_text = "hello"
+            hello_none = RDF.Node(hello_text)
+            self.failUnlessEqual(str(sanitize_literal(hello_none)),
+                                 hello_text)
+            hello_str = RDF.Node(literal=hello_text,
+                                 datatype=xsdNS['string'].uri)
+            hello_clean = sanitize_literal(hello_str)
+            self.failUnlessEqual(hello_clean.literal_value['string'],
+                                 hello_text)
+
+        def test_sanitize_literal_html(self):
+            hello = "hello <a onload='javascript:alert(\"foo\");' href='http://google.com'>google.com</a>, whats up?"
+            hello_clean = 'hello <a href="http://google.com">google.com</a>, whats up?'
+            hello_node = RDF.Node(literal=hello,
+                                  datatype=xsdNS['string'].uri)
+            hello_sanitized = sanitize_literal(hello_node)
+            self.failUnlessEqual(hello_sanitized.literal_value['string'],
+                                 hello_clean)
+
+            hostile = "hi <b>there</b><script type='text/javascript>alert('boo');</script><a href='javascript:alert('poke')>evil</a> scammer"
+            hostile_node = RDF.Node(hostile)
+            hostile_sanitized = sanitize_literal(hostile_node)
+            # so it drops the stuff after the javascript link.
+            # I suppose it could be worse
+            hostile_result = """hi <b>there</b>"""
+            self.failUnlessEqual(str(hostile_sanitized), hostile_result)
+
+
+    def suite():
+        return unittest.makeSuite(TestRDFHelp, 'test')
 except ImportError, e:
     print "Unable to test rdfhelp"