Mercurial > repos > mvdbeek > tepid_merge_deletions
comparison merge_deletions.py @ 0:ff6683f8e9a1 draft
planemo upload for repository https://github.com/ListerLab/TEPID commit 82fd0448ff5baa9822a388aee78753e4b1cd94d7
| author | mvdbeek |
|---|---|
| date | Mon, 23 Jan 2017 10:05:02 -0500 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| -1:000000000000 | 0:ff6683f8e9a1 |
|---|---|
| 1 #! /usr/bin/env python | |
| 2 | |
| 3 import os | |
| 4 from argparse import ArgumentParser | |
| 5 | |
| 6 def create_master_dict(sample, fname): | |
| 7 with open(fname, 'r') as masterfile: | |
| 8 x = 0 | |
| 9 master_dict = {} | |
| 10 for line in masterfile: | |
| 11 field = line.rsplit() | |
| 12 if not line[0] == 'ins_chr': | |
| 13 coords = '\t'.join(field[:5]) | |
| 14 master_dict[x] = {'coords': coords, 'accessions': [sample]} | |
| 15 x += 1 | |
| 16 return master_dict | |
| 17 | |
| 18 | |
| 19 def merge_deletions(master, fname, sample): | |
| 20 with open(fname, 'r') as infile: | |
| 21 for line in infile: | |
| 22 field = line.rsplit() | |
| 23 coords = '\t'.join(field[:5]) | |
| 24 i = len(master)-1 | |
| 25 x = 0 | |
| 26 while x <= i: | |
| 27 if master[x]['coords'] == coords: | |
| 28 master[x]['accessions'].append(sample) | |
| 29 break | |
| 30 elif x == i: | |
| 31 master[x+1] = {'coords': coords, 'accessions': [sample]} | |
| 32 break | |
| 33 else: | |
| 34 x += 1 | |
| 35 | |
| 36 | |
| 37 def save_deletions(master, outf): | |
| 38 with open(outf, 'w+') as outfile: | |
| 39 for key, value in master.iteritems(): | |
| 40 accessions = set(value['accessions']) | |
| 41 outfile.write('{c}\t{a}\n'.format(c=value['coords'], a=','.join(accessions))) | |
| 42 | |
| 43 def get_name_from_filename(filename): | |
| 44 return os.path.basename(filename).rsplit('.', 1)[0] | |
| 45 | |
| 46 if __name__ == "__main__": | |
| 47 | |
| 48 parser = ArgumentParser(description='Merge TE deletions calls') | |
| 49 parser.add_argument('-o', '--output', help="File to write merged deletions to.", required=True) | |
| 50 parser.add_argument('-i', '--input', help='all files that should be merged', nargs="+", required=True) | |
| 51 options = parser.parse_args() | |
| 52 | |
| 53 first_file = options.input[0] | |
| 54 first_samplename = get_name_from_filename(first_file) | |
| 55 master_dictionary = create_master_dict(first_samplename, first_file) | |
| 56 for filename in options.input[1:]: | |
| 57 samplename = get_name_from_filename(filename) | |
| 58 merge_deletions(master_dictionary, filename, samplename) | |
| 59 save_deletions(master_dictionary, options.output) |
