X-Git-Url: http://woldlab.caltech.edu/gitweb/?a=blobdiff_plain;f=htsworkflow%2Fpipelines%2Ftest%2Ftest_runfolder_ipar130.py;h=366f588b8b4472d5248a23ca777195ae656625d2;hb=d078bd2653d1d702d54a0ff12f91ef2bd85d8d0e;hp=c782e4f642920f01ee0cdeac830cb99f6c140101;hpb=52313afa681e8a64b2ce4d9ee148673e84821885;p=htsworkflow.git diff --git a/htsworkflow/pipelines/test/test_runfolder_ipar130.py b/htsworkflow/pipelines/test/test_runfolder_ipar130.py index c782e4f..366f588 100644 --- a/htsworkflow/pipelines/test/test_runfolder_ipar130.py +++ b/htsworkflow/pipelines/test/test_runfolder_ipar130.py @@ -4,13 +4,14 @@ from datetime import datetime, date import os import tempfile import shutil -import unittest +from unittest import TestCase +from htsworkflow.pipelines import eland from htsworkflow.pipelines import ipar from htsworkflow.pipelines import bustard from htsworkflow.pipelines import gerald from htsworkflow.pipelines import runfolder -from htsworkflow.pipelines.runfolder import ElementTree +from htsworkflow.pipelines import ElementTree from htsworkflow.pipelines.test.simulate_runfolder import * @@ -42,7 +43,9 @@ def make_runfolder(obj=None): os.mkdir(gerald_dir) make_gerald_config_100(gerald_dir) make_summary_ipar130_htm(gerald_dir) - make_eland_multi(gerald_dir) + make_eland_multi(gerald_dir, lane_list=[1,2,3,4,5,6,]) + make_scarf(gerald_dir, lane_list=[7,]) + make_fastq(gerald_dir, lane_list=[8,]) if obj is not None: obj.temp_dir = temp_dir @@ -53,7 +56,7 @@ def make_runfolder(obj=None): obj.gerald_dir = gerald_dir -class RunfolderTests(unittest.TestCase): +class RunfolderTests(TestCase): """ Test components of the runfolder processing code which includes firecrest, bustard, and gerald @@ -70,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) @@ -79,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) @@ -111,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') @@ -120,8 +126,8 @@ class RunfolderTests(unittest.TestCase): check_crosstalk(b.crosstalk) xml = b.get_elements() - print ElementTree.dump(xml) 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) @@ -139,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())) @@ -150,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 @@ -193,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())) @@ -217,22 +224,23 @@ class RunfolderTests(unittest.TestCase): g_eland = g.eland_results g2_eland = g2.eland_results - for lane in g_eland.results[0].keys(): - g_results = g_eland.results[0][lane] - g2_results = g2_eland.results[0][lane] + for key in g_eland: + g_results = g_eland[key] + g2_results = g2_eland[key] self.failUnlessEqual(g_results.reads, g2_results.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]) + if isinstance(g_results, eland.ElandLane): + 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), - len(g2_results.match_codes)) - for k in g_results.match_codes.keys(): - self.failUnlessEqual(g_results.match_codes[k], - g2_results.match_codes[k]) + 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], + g2_results.match_codes[k]) def test_eland(self): @@ -244,46 +252,63 @@ class RunfolderTests(unittest.TestCase): genome_maps = { 1:hg_map, 2:hg_map, 3:hg_map, 4:hg_map, 5:hg_map, 6:hg_map, 7:hg_map, 8:hg_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, 6) - self.failUnlessEqual(lane.sample_name, "s") - self.failUnlessEqual(lane.lane_id, i) - self.failUnlessEqual(len(lane.mapped_reads), 17) - self.failUnlessEqual(lane.mapped_reads['hg18/chr5.fa'], 4) - self.failUnlessEqual(lane.match_codes['U0'], 3) - self.failUnlessEqual(lane.match_codes['R0'], 2) - self.failUnlessEqual(lane.match_codes['U1'], 1) - self.failUnlessEqual(lane.match_codes['R1'], 9) - self.failUnlessEqual(lane.match_codes['U2'], 0) - self.failUnlessEqual(lane.match_codes['R2'], 12) - self.failUnlessEqual(lane.match_codes['NM'], 1) - self.failUnlessEqual(lane.match_codes['QC'], 0) - - xml = eland.get_elements() + eland_container = gerald.eland(self.gerald_dir, genome_maps=genome_maps) + + # I added sequence lanes to the last 2 lanes of this test case + for key in eland_container: + lane = eland_container[key] + if key.lane in [1,2,3,4,5,6]: + self.failUnlessEqual(lane.reads, 6) + self.failUnlessEqual(lane.sample_name, "s") + self.failUnlessEqual(lane.lane_id, key.lane) + self.failUnlessEqual(len(lane.mapped_reads), 17) + self.failUnlessEqual(lane.mapped_reads['hg18/chr5.fa'], 4) + self.failUnlessEqual(lane.match_codes['U0'], 3) + self.failUnlessEqual(lane.match_codes['R0'], 2) + self.failUnlessEqual(lane.match_codes['U1'], 1) + self.failUnlessEqual(lane.match_codes['R1'], 9) + self.failUnlessEqual(lane.match_codes['U2'], 0) + self.failUnlessEqual(lane.match_codes['R2'], 12) + self.failUnlessEqual(lane.match_codes['NM'], 1) + self.failUnlessEqual(lane.match_codes['QC'], 0) + elif key.lane == 7: + self.failUnlessEqual(lane.reads, 5) + self.failUnlessEqual(lane.sample_name, 's') + self.failUnlessEqual(lane.lane_id, 7) + self.failUnlessEqual(lane.sequence_type, + eland.SequenceLane.SCARF_TYPE) + elif key.lane == 8: + self.failUnlessEqual(lane.reads, 3) + self.failUnlessEqual(lane.sample_name, 's') + self.failUnlessEqual(lane.lane_id, 8) + self.failUnlessEqual(lane.sequence_type, + eland.SequenceLane.FASTQ_TYPE) + + xml = eland_container.get_elements() # just make sure that element tree can serialize the tree xml_str = ElementTree.tostring(xml) e2 = gerald.ELAND(xml=xml) - for i in range(1,9): - l1 = eland.results[0][i] - l2 = e2.results[0][i] + for key in eland_container: + l1 = eland_container[key] + l2 = e2[key] self.failUnlessEqual(l1.reads, l2.reads) self.failUnlessEqual(l1.sample_name, l2.sample_name) self.failUnlessEqual(l1.lane_id, l2.lane_id) - self.failUnlessEqual(len(l1.mapped_reads), len(l2.mapped_reads)) - self.failUnlessEqual(len(l1.mapped_reads), 17) - for k in l1.mapped_reads.keys(): - self.failUnlessEqual(l1.mapped_reads[k], - l2.mapped_reads[k]) - - 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], - l2.match_codes[k]) + if isinstance(l1, eland.ElandLane): + self.failUnlessEqual(len(l1.mapped_reads), len(l2.mapped_reads)) + self.failUnlessEqual(len(l1.mapped_reads), 17) + for k in l1.mapped_reads.keys(): + self.failUnlessEqual(l1.mapped_reads[k], + l2.mapped_reads[k]) + + 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], + l2.match_codes[k]) + elif isinstance(l1, eland.SequenceLane): + self.failUnlessEqual(l1.sequence_type, l2.sequence_type) def test_runfolder(self): runs = runfolder.get_runs(self.runfolder_dir) @@ -291,29 +316,33 @@ class RunfolderTests(unittest.TestCase): # do we get the flowcell id from the filename? self.failUnlessEqual(len(runs), 1) name = 'run_3021JAAXX_%s.xml' % ( date.today().strftime('%Y-%m-%d'),) - self.failUnlessEqual(runs[0].name, name) + self.failUnlessEqual(runs[0].serialization_filename, name) # do we get the flowcell id from the FlowcellId.xml file make_flowcell_id(self.runfolder_dir, '207BTAAXY') runs = runfolder.get_runs(self.runfolder_dir) self.failUnlessEqual(len(runs), 1) name = 'run_207BTAAXY_%s.xml' % ( date.today().strftime('%Y-%m-%d'),) - self.failUnlessEqual(runs[0].name, name) + self.failUnlessEqual(runs[0].serialization_filename, name) r1 = runs[0] xml = r1.get_elements() xml_str = ElementTree.tostring(xml) r2 = runfolder.PipelineRun(xml=xml) - self.failUnlessEqual(r1.name, r2.name) + self.failUnlessEqual(r1.serialization_filename, r2.serialization_filename) self.failIfEqual(r2.image_analysis, None) self.failIfEqual(r2.bustard, None) self.failIfEqual(r2.gerald, None) def suite(): - return unittest.makeSuite(RunfolderTests,'test') + from unittest import TestSuite, defaultTestLoader + suite = TestSuite() + suite.addTests(defaultTestLoader.loadTestsFromTestCase(RunfolderTests)) + return suite -if __name__ == "__main__": - unittest.main(defaultTest="suite") +if __name__ == "__main__": + from unittest import main + main(defaultTest="suite")