Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions cms/combine/cms_data.c
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// functions for handling cms component(+composite) score datastructures
// last updated: 1.10.17 vitti@broadinstitute.org
// last updated: 2.10.2017 vitti@broadinstitute.org

#include <stdio.h>
#include <string.h>
Expand Down Expand Up @@ -301,7 +301,7 @@ void get_ihs_data(ihs_data* data, char filename[]) {
else if (itoken == 5) {
data->ihs_unnormed[isnp] = atof(token);
}
else if (itoken == 10) {
else if (itoken == 6) {
data->ihs_normed[isnp] = atof(token);
}
//else if (itoken == 7) {
Expand Down
56 changes: 56 additions & 0 deletions cms/combine/input_func.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
## functions for composite
## last updated: 02.10.2017 vitti@broadinstitute.org

import sys

def get_likesfiles_frommaster(masterfile, modelselpop, vs="neut"):
"""assumes only one demographic model in master likes file, but there may be multiple pops or neut/linked comps"""
likesfiles = []
openfile = open(masterfile, 'r')
for line in openfile:
filename = line.strip('\n')
likesfiles.append(filename)
openfile.close()

print('master likesfile has a total of ' + str(len(likesfiles)) + " files..")
#print(likesfiles)
selpop_likesfiles = [item for item in likesfiles if "sel" + str(modelselpop) in item]
#print(selpop_likesfiles)
ihsfiles = [item for item in selpop_likesfiles if "/ihs/" in item]
nslfiles = [item for item in selpop_likesfiles if "/nsl/" in item]
delihhfiles = [item for item in selpop_likesfiles if "/delihh/" in item]
xpehhfiles = [item for item in selpop_likesfiles if "/xpehh/" in item]
fstfiles = [item for item in selpop_likesfiles if "/fst/" in item]
deldaffiles = [item for item in selpop_likesfiles if "/deldaf/" in item]

ihs_selfiles = [item for item in ihsfiles if "causal" in item]
nsl_selfiles = [item for item in nslfiles if "causal" in item]
delihh_selfiles = [item for item in delihhfiles if "causal" in item]
xpehh_selfiles = [item for item in xpehhfiles if "causal" in item]
fst_selfiles = [item for item in fstfiles if "causal" in item]
deldaf_selfiles = [item for item in deldaffiles if "causal" in item]

ihs_neutfiles = [item for item in ihsfiles if vs in item]
nsl_neutfiles = [item for item in nslfiles if vs in item]
delihh_neutfiles = [item for item in delihhfiles if vs in item]
xpehh_neutfiles = [item for item in xpehhfiles if vs in item]
fst_neutfiles = [item for item in fstfiles if vs in item]
deldaf_neutfiles = [item for item in deldaffiles if vs in item]

for filelist in [ihs_selfiles, ihs_neutfiles, nsl_selfiles, nsl_neutfiles, delihh_selfiles, delihh_neutfiles, xpehh_selfiles, xpehh_neutfiles, fst_selfiles, fst_neutfiles, deldaf_selfiles, deldaf_neutfiles]:
#print(filelist)
if len(filelist) >1:
print('conflicting distributions found...')
sys.exit()
elif len(filelist) == 0:
print('missing distributions for population ' + str(modelselpop))
sys.exit()

else:
ihs_hit_filename, ihs_miss_filename = ihs_selfiles[0], ihs_neutfiles[0]
nsl_hit_filename, nsl_miss_filename = nsl_selfiles[0], nsl_neutfiles[0]
delihh_hit_filename, delihh_miss_filename = delihh_selfiles[0], delihh_neutfiles[0]
xpehh_hit_filename, xpehh_miss_filename = xpehh_selfiles[0], xpehh_neutfiles[0]
fst_hit_filename, fst_miss_filename = fst_selfiles[0], fst_neutfiles[0]
deldaf_hit_filename, deldaf_miss_filename = deldaf_selfiles[0], deldaf_neutfiles[0]
return ihs_hit_filename, ihs_miss_filename, nsl_hit_filename, nsl_miss_filename, delihh_hit_filename, delihh_miss_filename, xpehh_hit_filename, xpehh_miss_filename, fst_hit_filename, fst_miss_filename, deldaf_hit_filename, deldaf_miss_filename
28 changes: 25 additions & 3 deletions cms/combine/likes_func.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
## functions for composite
## 11.24.16 vitti@broadinstitute.org
## last updated: 02.10.2017 vitti@broadinstitute.org

import sys

Expand Down Expand Up @@ -54,5 +54,27 @@ def get_likesfiles_frommaster(masterfile, modelselpop, vs="neut"):
fst_hit_filename, fst_miss_filename = fst_selfiles[0], fst_neutfiles[0]
deldaf_hit_filename, deldaf_miss_filename = deldaf_selfiles[0], deldaf_neutfiles[0]
return ihs_hit_filename, ihs_miss_filename, nsl_hit_filename, nsl_miss_filename, delihh_hit_filename, delihh_miss_filename, xpehh_hit_filename, xpehh_miss_filename, fst_hit_filename, fst_miss_filename, deldaf_hit_filename, deldaf_miss_filename


def write_pair_sourcefile(writefilename, ihsfilename, delihhfilename, nslfilename, xpehhfilename, freqsfilename):
if not os.path.isfile(writefilename):
openfile = open(writefilename, 'w')
openfile.write(ihsfilename+ "\n")
openfile.write(delihhfilename+ "\n")
openfile.write(nslfilename+ "\n")
openfile.write(xpehhfilename+ "\n")
openfile.write(freqsfilename+ "\n")
openfile.close()
return writefilename
def write_run_paramfile(writefilename, ihs_master_likesfile, nsl_master_likesfile, delihh_master_likesfile, xpehh_master_likesfile,
fst_master_likesfile, deldaf_master_likesfile, cutoffline, includeline):
if not os.path.isfile(writefilename):
openfile = open(writefilename, 'w')
openfile.write(ihs_master_likesfile + "\n")
openfile.write(nsl_master_likesfile + "\n") #CHANGE ORDER
openfile.write(delihh_master_likesfile + "\n")
openfile.write(xpehh_master_likesfile + "\n")
openfile.write(fst_master_likesfile + "\n")
openfile.write(deldaf_master_likesfile + "\n")
openfile.write(cutoffline + "\n")
openfile.write(includeline + "\n")
openfile.close()
return writefilename
187 changes: 0 additions & 187 deletions cms/combine/recalc_func.py

This file was deleted.

63 changes: 16 additions & 47 deletions cms/composite.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
#!/usr/bin/env python
## top-level script for combining scores into composite statistics as part of CMS 2.0.
## last updated: 12.16.16 vitti@broadinstitute.org
## last updated: 02.10.2017 vitti@broadinstitute.org

import matplotlib
matplotlib.use('agg')
import matplotlib.pyplot as plt
from combine.recalc_func import interpolate_haps, windows, interpolate_from_windows
from combine.likes_func import get_likesfiles_frommaster
from combine.input_func import get_likesfiles_frommaster, write_pair_sourcefile, write_run_paramfile
from combine.viz_func import hapSort_coreallele, hapSort, hapViz, readAnnotations, find_snp_index, pullRegion, load_from_hap
from dists.scores_func import calc_fst_deldaf, calc_delihh
import subprocess
Expand Down Expand Up @@ -179,14 +178,6 @@ def execute_win_haps(args):
writefilename = args.writefilename
windows(windowsize, jumplen, infilename, writefilename)
return
def execute_interpolate_hapscores(args):
''' strike '''
inputTpedFilename = args.intpedfilename
inputIhsFilename = args.inihsfilename
inputWinihsFilename = args.inwinihsfilename
outputFilename = args.outfilename
interpolate_from_windows(inputTpedFilename, inputIhsFilename, inputWinihsFilename, outputFilename)
return
def execute_delihh_from_ihs(args):
calc_delihh(args.readfile, args.writefile)
return
Expand All @@ -203,31 +194,10 @@ def execute_xp_from_ihh(args):
else:
subprocess.check_call( cmdstring.split() )
return
def execute_poppair(args):
if args.cmsdir is not None:
cmd = args.cmsdir
else:
cmd = ""
cmd += "combine/combine_scores_poppair"
if args.xp_reverse_pops:
xp_reversed = 0
else:
xp_reversed = 1
if args.fst_deldaf_reverse_pops:
deldaf_reversed = 0
else:
deldaf_reversed = 1
argstring = args.in_ihs_file + " " + args.in_nsl_file + " " + args.in_delihh_file + " " + args.in_xp_file + " " + str(xp_reversed) + " " + args.in_fst_deldaf_file + " " + str(deldaf_reversed) + " " + args.outfile
cmdstring = cmd + " " + argstring
if args.printOnly:
print(cmdstring)
else:
subprocess.check_call( cmdstring.split() )
return
def execute_outgroups(args):

''' nix this? execute_composite in power.py '''
''' composites scores from input components and likelihood tables '''
ihs_hit_hi_filename, ihs_miss_hi_filename, nsl_hit_hi_filename, nsl_miss_hi_filename, delihh_hit_hi_filename, delihh_miss_hi_filename, xpehh_hit_hi_filename, xpehh_miss_hi_filename, fst_hit_hi_filename, fst_miss_hi_filename, deldaf_hit_hi_filename, deldaf_miss_hi_filename = get_likesfiles_frommaster(args.likesfile, args.selpop_likes)

usefreqs = []
if args.likesfile_low is not None:
ihs_hit_low_filename, ihs_miss_low_filename, nsl_hit_low_filename, nsl_miss_low_filename, delihh_hit_low_filename, delihh_miss_low_filename, xpehh_hit_low_filename, xpehh_miss_low_filename, fst_hit_low_filename, fst_miss_low_filename, deldaf_hit_low_filename, deldaf_miss_low_filename = get_likesfiles_frommaster(args.likesfile_low, args.selpop_likes)
Expand All @@ -242,23 +212,22 @@ def execute_outgroups(args):
cmd = args.cmsdir
else:
cmd = ""
cmd += "combine/combine_scores"
argstring = args.outfile


if not args.region: #GENOME-WIDE
cmd += "combine/combine_scores_multiplepops_filtermaf"
argstring = args.outfile
else: #WITHIN REGION
cmd += "combine/combine_scores_multiplepops_region"
argstring = args.outfile + " " + str(args.startBp) + " " + str(args.endBp) + " "

for score in ['ihs', 'nsl', 'delihh', 'xpehh', 'fst', 'deldaf']:
for dist_type in ['hit', 'miss']:
for freq in usefreqs: #['low', 'mid', 'hi']:
argument = eval(score + "_" + dist_type + "_" + freq + "_filename")
argstring += " " + argument
#for score in ['ihs', 'nsl', 'delihh', 'xpehh', 'fst', 'deldaf']:
# for dist_type in ['hit', 'miss']:
# for freq in usefreqs: #['low', 'mid', 'hi']:
# argument = eval(score + "_" + dist_type + "_" + freq + "_filename")
# argstring += " " + argument

argstring += " " + cms_run_paramfilename


#write_pair_sourcefile(writefilename, ihsfilename, delihhfilename, nslfilename, xpehhfilename, freqsfilename):
for pairfile in args.infiles.split(','):
argstring += " " + pairfile

cmdstring = cmd + " " + argstring
if args.printOnly:
print(cmdstring)
Expand Down
Loading