Created
July 17, 2012 05:06
-
-
Save hanfeisun/3127287 to your computer and use it in GitHub Desktop.
DC
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import sys | |
import os | |
from ConfigParser import SafeConfigParser | |
from jinja2 import Environment, PackageLoader | |
from chilin.qc import MappingQC, PeakcallingQC | |
jinja_env = env = Environment(loader=PackageLoader('chilin', 'templates')) | |
def check_conf(conf): | |
if True: | |
return True | |
else: | |
return False | |
class PathFinder: | |
def __init__(self, conf): | |
# For more details about config file: | |
# See http://docsmei.readthedocs.org/en/latest/config_file.html | |
self.parser = SafeConfigParser() | |
self.parser.read(conf) | |
self.datasetID = self.parser.get("meta","dataset.ID") | |
tmpfolder = lambda self,tool: "%s_%s_tmp".%(self.datasetID, tool) | |
rstfolder = lambda self,tool: "%s_%s_result".%(self.datasetID, tool) | |
join_path = os.path.join | |
def qc_template(self): | |
return "qc.jinja2" | |
def macs2_summit(self, rep): | |
path = "%s_rep%s_summits.bed"%(self.datasetID, rep) | |
return join_path(rstfolder("macs"), | |
path) | |
def macs2_top1k(self): | |
# For SeqPos | |
path = "%s_top1000_summits.bed"%(self.datasetID) | |
return join_path(tmpfolder("macs"), | |
path) | |
def raw_fastq(self): | |
return "" | |
def mapped_sam(self): | |
return "" | |
class LogWriter: | |
def __init__(self, logfile): | |
self.logfile = logfile | |
pass | |
def info(self.exp): | |
with open(self.logfile) as lgf: | |
lgf.write(exp) | |
class PipeController(object): | |
def __init__(self, logwriter, conf): | |
self.logwriter = logwriter | |
self.pathfinder = PathFinder(conf) | |
self.parser = SafeConfigParser() | |
self.parser.read(conf) | |
def info(self.exp): | |
# use logwriter to delegate | |
self.logwriter.info(exp) | |
def run(self): | |
pass | |
class BowtieController(PipeController): | |
def __init__(self, logwriter, conf): | |
super(BowtieController, self).__init__ | |
self.mappingqc = MappingQC(conf) | |
self.bowtie_main = self.parser.get("bowtie","bowtie_main") | |
self.gene_index = self.parser.get("bowtie","bowtie_genome_index_path") | |
self.format_option= "-q" | |
self.max_align = 1 | |
def info(self,exp): | |
# use logwriter to delegate | |
self.logwriter.info(exp) | |
def run(self): | |
cmd = '{0} -S ${1} -m ${2} ${3} ${4} ${5}' | |
cmd = cmd.format( self.bowtie_main, | |
self.format_option, | |
self.max_align, | |
self.gene_index, | |
self.pathfinder.fastqfile(), | |
self.pathfinder.raw_fastq(), | |
self.pathfinder.mapped_sam()) | |
print cmd | |
def render(self): | |
return self.mappingqc.render() | |
def check(self): | |
return self.mappingqc.check() | |
class MacsController(PipeController): | |
def __init__(self, logwriter, conf): | |
super(MacsController, self).__init__ | |
self.peakcallingqc = PeakcallingQC(conf) | |
def info(self,exp): | |
self.logwriter.info(exp) | |
def run(self): | |
cmd = "demo" | |
print cmd | |
def render(self): | |
return self.peakcallingqc.render() | |
def check(self): | |
return self.peakcallingqc.check() | |
if check_conf("example.conf"): | |
lg = LogWriter("test.log") | |
bc = BowtieController("example.conf", lg) | |
bc.run() | |
bc.check() | |
print bc.render() | |
mc = MacsController("example.conf", lg) | |
mc.run() | |
mc.check() | |
print mc.render() | |
else: | |
sys.exit() | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
great design~