Add a method to return the runfolder name.
[htsworkflow.git] / htsworkflow / pipelines / test / test_run_xml.py
1 import os
2 import unittest
3 from StringIO import StringIO
4
5 from simulate_runfolder import TESTDATA_DIR
6 from htsworkflow.pipelines.runfolder import load_pipeline_run_xml
7
8 class testLoadRunXML(unittest.TestCase):
9
10     def _check_run_xml(self, run_xml_name, results):
11         run_xml_path = os.path.join(TESTDATA_DIR, run_xml_name)
12         run = load_pipeline_run_xml(run_xml_path)
13         
14         self.failUnlessEqual(run.image_analysis.start, results['cycle_start'])
15         self.failUnlessEqual(run.image_analysis.stop, results['cycle_stop'])
16         
17         eland_summary_by_lane = run.gerald.eland_results.results[0]
18         self.failUnlessEqual(len(eland_summary_by_lane), 8)
19
20         runfolder_name = results['runfolder_name']
21         self.failUnlessEqual(run.runfolder_name, runfolder_name)
22         self.failUnlessEqual(run.gerald.runfolder_name, runfolder_name)
23
24         for (end, lane), lane_results in results['lane_results'].items():
25             for name, test_value in lane_results.items():
26                 xml_value = getattr(run.gerald.summary[end][lane], name)
27                 
28                 self.failUnlessEqual(xml_value, test_value,
29                     "%s[%s][%s]: %s %s != %s" % (run_xml_name, end, lane, name, xml_value, test_value))
30         
31     def testVersion0(self):
32         run_xml_name = 'run_FC12150_2007-09-27.xml'
33         results = {'runfolder_name': '070924_USI-EAS44_0022_FC12150',
34                    'cycle_start': 1,
35                    'cycle_stop': 36,
36                    'lane_results': {
37                        # end, lane
38                        (0, 1): {
39                            'average_alignment_score': (12116.63, 596.07),
40                            'average_first_cycle_intensity': (500,36),
41                            'cluster': (31261, 6010),
42                            'cluster_pass_filter': None,
43                            'percent_error_rate': (2.07, 0.38),
44                            'percent_intensity_after_20_cycles': (74.74, 3.78),
45                            'percent_pass_filter_align': None,
46                            'percent_pass_filter_clusters': (27.38, 7.31),
47                            }
48                        }
49                    }
50         self._check_run_xml(run_xml_name, results)
51
52     def testVersion1(self):
53
54         run_xml_name = 'run_207B2AAXX_2008-04-12.xml'
55         results = {'runfolder_name': '080408_HWI-EAS229_0023_207B2AAXX',
56                    'cycle_start': 1,
57                    'cycle_stop': 33,
58                    'lane_results': {
59                        # end, lane
60                        }
61                    }
62         self._check_run_xml(run_xml_name, results)
63
64     def testVersion2(self):
65         run_xml_name = 'run_62DJMAAXX_2011-01-09.xml'
66         results = {'runfolder_name': '101229_ILLUMINA-EC5D15_00026_62DJMAAXX',
67                    'cycle_start': 1,
68                    'cycle_stop': 152,
69                    'lane_results': {
70                        # end, lane
71                        (0, 2): {
72                            'average_alignment_score': (171.98, 1.4),
73                            'average_first_cycle_intensity': (381, 5),
74                            'cluster': (443170, 10241),
75                            'cluster_pass_filter': (362709, 8335),
76                            'percent_error_rate': (4.13, 0.14),
77                            'percent_intensity_after_20_cycles': (85.89, 3.26),
78                            'percent_pass_filter_align': (79.73, 0.23),
79                            'percent_pass_filter_clusters': (81.85, 0.8),
80                            },
81                        (0, 5): {
82                            'average_alignment_score': None,
83                            'average_first_cycle_intensity': (362, 4),
84                            'cluster': (310619, 15946),
85                            'cluster_pass_filter': (277584, 13858),
86                            'percent_error_rate': None,
87                            'percent_intensity_after_20_cycles': (90.35, 1.12),
88                            'percent_pass_filter_align': None,
89                            'percent_pass_filter_clusters': (89.37, 0.25),
90                            }
91                        }
92                    }
93         self._check_run_xml(run_xml_name, results)
94
95 def suite():
96     return unittest.makeSuite(testLoadRunXML,'test')
97
98 if __name__ == "__main__":
99     unittest.main(defaultTest="suite")