gatk-3.8/python/igvController.py

79 lines
2.9 KiB
Python
Executable File

# Echo server program
import socket, re
from os.path import join
from time import sleep
from farm_commands2 import *
import os.path
import sys
from optparse import OptionParser
from datetime import date
import glob
import operator
import faiReader
import math
import shutil
import string
import time
from madPipelineUtils import *
HOST = 'vm0e0-052.broadinstitute.org' # Symbolic name meaning the local host
PORT = 60151 # Arbitrary non-privileged port
LOCAL_DIR = "/Users/depristo/Desktop/IGV_screenshots"
SLEEP_TIME = 1
def main():
global OPTIONS
usage = """usage: %prog [options] sites
Automatically captures IGV PNG screenshots at each site in the file sites (of the form chrX:start-stop or chrX:pos) by connecting to
an IGV session. See http://www.broadinstitute.org/igv/?q=PortCommands. Make sure you enable ports in the IGV preferences"""
parser = OptionParser(usage=usage)
parser.add_option("-w", "--wait", dest="wait",
action='store_true', default=False,
help="If provided, instead of taking screenshots we will prompt the user on the command line to press return and then jump to the new location")
parser.add_option("", "--host", dest="host",
type='string', default=HOST,
help="The host running the port enabled IGV server")
parser.add_option("-d", "--dir", dest="dir",
type='string', default=LOCAL_DIR,
help="The local directory on the host machine that screenshots should be written to")
parser.add_option("-s", "--sort", dest="sort",
type='string', default="base",
help="The sort order for the bases, currently can be one of base, position, strand, quality, sample, and readGroup.")
(OPTIONS, args) = parser.parse_args()
if len(args) != 1:
parser.error("incorrect number of arguments")
sites = args[0]
#It might ignore the first line..
print "Be sure to turn on ports"
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
def sendCommand(cmd):
s.send(cmd)
print cmd.strip(), '=>', s.recv(512).strip()
s.connect((OPTIONS.host, PORT))
sendCommand("snapshotDirectory " + OPTIONS.dir + "\n")
c = 0
for line in open(sites):
site = line.split()[0]
print site
c+=1
sendCommand("goto %s\n" % site)
sendCommand("sort " + OPTIONS.sort + "\n")
if OPTIONS.wait:
raw_input("Enter To Continue")
else:
print 'sleep', SLEEP_TIME, 'secs'
time.sleep(SLEEP_TIME)
sendCommand("snapshot\n") # %s.png\n" % re.sub("-","_",re.sub(':', '_', site)))
print c
if __name__ == "__main__":
main()