e9ff77ee9cbb80af2b9e906d32987d8a8a7980e2
[htsworkflow.git] / htsworkflow / util / ucsc.py
1 """Wrap ucsc command line utilities
2 """
3
4 import logging
5 import os
6 from subprocess import Popen, PIPE
7
8 LOGGER = logging.getLogger(__name__)
9
10 def parseNumber(number):
11     buffer = []
12     isFloat = False
13     for n in number:
14         if n == ',':
15             continue
16         if n == '.':
17             isFloat = True
18             buffer.append(n)
19         else:
20             buffer.append(n)
21     if isFloat:
22         return float(''.join(buffer))
23     else:
24         return int(''.join(buffer))
25
26 def parseBoolean(value):
27     if value.lower() in ('yes', '1', 'true'):
28         return True
29     elif value.lower() in ('no', '0', 'false'):
30         return False
31         
32 class bigWigInfo:
33     def __init__(self, filename=None):
34         self.version = None
35         self.isCompressed = None
36         self.isSwapped = None
37         self.primaryDataSize = None
38         self.primaryIndexSize = None
39         self.zoomLevels = None
40         self.chromCount = None
41         self.basesCovered = None
42         self.mean = None
43         self.min = None
44         self.max = None
45         self.std = None
46         self.filename = None
47         if filename:
48             self.scan_file(filename)
49             self.filename = filename
50
51     def scan_file(self, filename):
52         cmd = ['bigWigInfo', 
53                filename]
54         p = Popen(cmd, stdout=PIPE)
55         stdout, _ = p.communicate()
56         for line in stdout.split(os.linesep):
57             if len(line) > 0:
58                 term, value = line.split(': ')
59                 if term in ('isCompressed', 'isSwapped'):
60                     value = parseBoolean(value)
61                 else:
62                     value = parseNumber(value)
63                 LOGGER.debug('%s: %s', term, str(value))
64                 setattr(self, term, value)
65                 
66                 
67