almlab/angst

View on GitHub
angst_lib/AnGSTInput.py

Summary

Maintainability
B
5 hrs
Test Coverage
# input method

import os
import sys
import pdb

class input_obj:

    def __init__(self,filename):
        self.species_tree_filename = None
        self.ultra_tree_bool = False
        self.boots_file = None
        self.output_dir = None
        self.penalties_filename = None
        self.special = None
        self.outgroup = None
        self.luca = None
        self.hr_scaling = 0.0
        self.iterate = None
        self.penalty_weight = 0.0
        self.event_guide_fn = None

        # read input data
        self.ReadInput(filename)

    def ReadInput(self,filename):
        '''store arguments from input datafile'''
        input_file = open(filename,'r')
        for line in input_file:

            # skip comments
            if line[0] == "#":
                continue

            line = line.strip()
            arg_parts = line.split('=')
            code = arg_parts[0]
            arg = arg_parts[1]
            if code == 'species':
                self.species_tree_filename = arg
            elif code == 'gene':
                self.boots_file = arg
            elif code == 'output':
                self.output_dir = arg
                if os.path.isdir(self.output_dir):
                    print "Output directory exists.  Overwrite?"
                    overwrite_s = sys.stdin.readline().strip().lower()
                    if overwrite_s == 'y' or overwrite_s == 'yes':
                        print "Overwriting"
                        continue
                    else:
                        print "Not overwriting.  Quitting."
                        sys.exit(1)
                    #endif
                #endif
            elif code == 'event_guide':
                if arg == 'None':
                    self.event_guide_fn = None
                else:
                    self.event_guide_fn = arg
            elif code == 'penalties':
                self.penalties_filename = arg
            elif code == 'ultrametric':
                self.ultra_tree_bool = eval(arg)
            elif code == 'special':
                self.special = arg
            elif code == 'outgroup':
                if arg == "None":
                    self.outgroup = None
                else:
                    self.outgroup = arg
            elif code == 'luca':
                self.luca = arg
            elif code == 'hr_scaling':
                self.hr_scaling = float(arg)
            elif code == 'iterate':
                if arg == "None":
                    self.iterate = None
                else:
                    self.iterate = float(arg)

        # make sure that if you're doing HR, you've got your outgroup
        if self.special == 'hr':
            if self.outgroup is None:
                print "if you're doing HR, you need an outgroup"
                sys.exit(1)

        input_file.close()