-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcreatePedMap.py
executable file
·70 lines (61 loc) · 1.87 KB
/
createPedMap.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#!/usr/bin/env python
import sys,os
from collections import defaultdict
import pickle
if len(sys.argv) < 3:
print("Usage: createPedMap.py <ped file> <pedigree file>")
exit(1)
pedFn=sys.argv[1]
#fmsFn=sys.argv[2]
pedigreeFn = sys.argv[2]
#md=defaultdict()
H='fam indId dad mom gender role'.split(' ')
"""
F = open(fmsFn)
families,badFamilies = pickle.load(F)
F.close()
"""
#NYGCSampleID sfid spid father mother sex asd role
md = defaultdict()
with open(pedigreeFn) as f:
hd = {v:i for i,v in enumerate(f.readline().strip("\n\r").split("\t"))}
for l in f:
cs = l.strip("\n\r").split("\t")
if "B01" in os.environ["PROJECT_DIR"] or "B02" in os.environ["PROJECT_DIR"]:
md[cs[hd["NYGCSampleID"]]] = cs
else:
md[cs[hd["spid"]]] = cs
"""
for fd in list(families.values()):
for pd in fd.memberInOrder:
smId = os.path.basename(pd.atts['bamF']).split(".")[0]
assert smId not in md
famId = fd.familyId
indId = pd.personId
dad = famId + '.fa' if pd.role in ['sib', 'prb'] else '0'
mom = famId + '.mo' if pd.role in ['sib', 'prb'] else '0'
gender = pd.gender
role = pd.role
md[smId] = {'fam': famId, 'indId':indId, 'dad':dad,
'mom':mom, 'gender':gender, 'role':role}
gMap = {'F':'2', 'M':'1'}
aMap = {'prb':'2', 'sib':'1'}
"""
n = 0
with open(pedFn, 'r') as f:
# #N sampleId
for l in f:
n += 1
cs = l.strip('\n\r').split('\t')
if cs[1] in md:
out = []
rec = md[cs[1]]
out.append(rec[hd["sfid"]])
out.append(rec[hd["spid"]])
out.append(rec[hd["father"]])
out.append(rec[hd["mother"]])
out.append(rec[hd["sex"]])
out.append(rec[hd["asd"]])
print('\t'.join(out + cs[6:]))
#if n == 30:
# break