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 = {}
groups = name.split("_")
version = re.search(VERSION_RE, groups[0])
- self.version = version.group(1)
+ 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
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:
b.pathname = pathname
b.update_attributes_from_pathname()
version = re.search(VERSION_RE, groups[0])
- b.version = version.group(1)
+ b._path_version = version.group(1)
t = time.strptime(groups[1], EUROPEAN_STRPTIME)
b.date = date(*t[0:3])
b.user = groups[2]
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']
add_phasing(b)
return b
b.pathname = pathname
bustard_config_root = ElementTree.parse(config_filename)
b.bustard_config = bustard_config_root.getroot()
- software = bustard_config_root.find('*/Software')
- b.version = software.attrib['Version']
add_phasing(b)
return b
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')
runfolder_name = property(_get_runfolder_name)
- def _get_version(self):
+ 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:
- match = re.match("@.*GERALD.pl,v (?P<version>\d+(\.\d+)+)",
+ gerald = re.match("@.*GERALD.pl,v (?P<version>\d+(\.\d+)+)",
ga_version)
- if match:
- return match.group('version')
- return 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):
runfolder_name = property(_get_runfolder_name)
- def _get_version(self):
+ 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')
- hiseq_version = hiseq_software_node.attrib['Version']
- return hiseq_version
+ 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)
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):
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__)
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)
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')
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,
# need to update gerald and make tests for it
g = gerald.gerald(self.gerald_dir)
+ 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()))
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)
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')
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,
# need to update gerald and make tests for it
g = gerald.gerald(self.gerald_dir)
+ 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()))
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)
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)
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')
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)
# need to update gerald and make tests for it
g = gerald.gerald(self.gerald_dir)
+ 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()))
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()))
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)
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()))
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()))
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)
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)
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')
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)
# need to update gerald and make tests for it
g = gerald.gerald(self.gerald_dir)
+ 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()))
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()))
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)
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)
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')
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)
# need to update gerald and make tests for it
g = gerald.gerald(self.gerald_dir)
+ 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()))
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()))
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)
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)
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')
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)
# need to update gerald and make tests for it
g = gerald.gerald(self.gerald_dir)
+ 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()))
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()))
# need to update gerald and make tests for it
g = gerald.gerald(self.gerald_dir)
+ 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()))
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()))
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)
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)
# need to update gerald and make tests for it
g = gerald.gerald(self.gerald_dir)
+ 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()))
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()))
def test_bustard(self):
"""Construct a bustard object"""
b = bustard.bustard(self.bustard_dir)
+ self.failUnlessEqual(b.software, 'RTA')
self.failUnlessEqual(b.version, '1.12.4.2')
self.failUnlessEqual(b.date, None)
self.failUnlessEqual(b.user, None)
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.8.1')
+ 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()))
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()))