gwaslab 3.6.2__py3-none-any.whl → 3.6.4__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of gwaslab might be problematic. Click here for more details.
- gwaslab/bd_get_hapmap3.py +27 -2
- gwaslab/g_Sumstats.py +11 -6
- gwaslab/g_SumstatsMulti.py +4 -1
- gwaslab/g_version.py +4 -2
- gwaslab/hm_casting_polars.py +97 -22
- gwaslab/io_preformat_input.py +33 -7
- gwaslab/qc_fix_sumstats.py +2 -0
- gwaslab/util_ex_run_clumping.py +8 -4
- gwaslab/util_ex_run_scdrs.py +1 -1
- gwaslab/viz_aux_quickfix.py +0 -1
- gwaslab/viz_plot_compare_effect.py +15 -11
- gwaslab/viz_plot_miamiplot2.py +40 -15
- gwaslab/viz_plot_mqqplot.py +14 -3
- {gwaslab-3.6.2.dist-info → gwaslab-3.6.4.dist-info}/METADATA +2 -1
- {gwaslab-3.6.2.dist-info → gwaslab-3.6.4.dist-info}/RECORD +19 -19
- {gwaslab-3.6.2.dist-info → gwaslab-3.6.4.dist-info}/WHEEL +1 -1
- {gwaslab-3.6.2.dist-info → gwaslab-3.6.4.dist-info}/licenses/LICENSE +0 -0
- {gwaslab-3.6.2.dist-info → gwaslab-3.6.4.dist-info}/licenses/LICENSE_before_v3.4.39 +0 -0
- {gwaslab-3.6.2.dist-info → gwaslab-3.6.4.dist-info}/top_level.txt +0 -0
gwaslab/bd_get_hapmap3.py
CHANGED
|
@@ -42,14 +42,39 @@ def gethapmap3(sumstats,rsid="rsID",chrom="CHR", pos="POS", ea="EA", nea="NEA",b
|
|
|
42
42
|
additional_cols= ["A1","A2"]
|
|
43
43
|
else:
|
|
44
44
|
additional_cols=[]
|
|
45
|
+
|
|
45
46
|
hapmap3_ref = pd.read_csv(data_path,sep="\s+",usecols=["#CHROM","POS","rsid"]+additional_cols, dtype={"#CHROM":"string","POS":"string"})
|
|
47
|
+
|
|
46
48
|
#rsid A1 A2 #CHROM POS
|
|
47
49
|
#rs3094315 G A 1 752566
|
|
48
50
|
|
|
49
51
|
if rsid in sumstats.columns:
|
|
50
52
|
log.write(" -rsID will be used for matching...", verbose=verbose)
|
|
51
|
-
|
|
52
|
-
|
|
53
|
+
hapmap3_ref = hapmap3_ref.rename(columns={"rsid":rsid})
|
|
54
|
+
|
|
55
|
+
output = sumstats.loc[sumstats[rsid].isin(hapmap3_ref[rsid].values),:].copy()
|
|
56
|
+
|
|
57
|
+
output = pd.merge(output, hapmap3_ref, on = rsid, how=how, suffixes=('', '_hapmap3'))
|
|
58
|
+
|
|
59
|
+
raw_rsid_count= len(output)
|
|
60
|
+
log.write(f" -Raw input contains {raw_rsid_count} Hapmap3 variants based on rsID...", verbose=verbose)
|
|
61
|
+
|
|
62
|
+
if match_allele:
|
|
63
|
+
log.write(" -Checking if alleles are same...")
|
|
64
|
+
is_matched = ((output[ea].astype("string") == output["A1"]) & (output[nea].astype("string") == output["A2"])) \
|
|
65
|
+
| ((output[ea].astype("string") == output["A2"]) & (output[nea].astype("string") == output["A1"]))
|
|
66
|
+
if how=="right":
|
|
67
|
+
is_matched = ((output[ea].astype("string") == output["A1"]) & (output[nea].astype("string") == output["A2"])) \
|
|
68
|
+
| ((output[ea].astype("string") == output["A2"]) & (output[nea].astype("string") == output["A1"])) | output[ea].isna()
|
|
69
|
+
output = output.loc[is_matched,:]
|
|
70
|
+
output = output.drop(columns=["#CHROM","A1","A2"] )
|
|
71
|
+
log.write(f" -Filtered {raw_rsid_count - len(output)} Hapmap3 variants due to unmatech alleles...", verbose=verbose)
|
|
72
|
+
|
|
73
|
+
for i in ["#CHROM","A1","A2","POS_hapmap3"]:
|
|
74
|
+
todrop=[]
|
|
75
|
+
if i in output.columns:
|
|
76
|
+
todrop.append(i)
|
|
77
|
+
output = output.drop(columns=todrop)
|
|
53
78
|
return output
|
|
54
79
|
|
|
55
80
|
elif chrom in sumstats.columns and pos in sumstats.columns:
|
gwaslab/g_Sumstats.py
CHANGED
|
@@ -102,7 +102,7 @@ from gwaslab.util_ex_run_scdrs import _run_scdrs
|
|
|
102
102
|
#20220309
|
|
103
103
|
class Sumstats():
|
|
104
104
|
def __init__(self,
|
|
105
|
-
sumstats,
|
|
105
|
+
sumstats=None,
|
|
106
106
|
fmt=None,
|
|
107
107
|
tab_fmt="tsv",
|
|
108
108
|
snpid=None,
|
|
@@ -144,10 +144,11 @@ class Sumstats():
|
|
|
144
144
|
dof=None,
|
|
145
145
|
snpr2=None,
|
|
146
146
|
status=None,
|
|
147
|
-
other=
|
|
147
|
+
other=None,
|
|
148
|
+
exclude=None,
|
|
149
|
+
include=None,
|
|
148
150
|
chrom_pat=None,
|
|
149
151
|
snpid_pat=None,
|
|
150
|
-
usekeys=None,
|
|
151
152
|
direction=None,
|
|
152
153
|
verbose=True,
|
|
153
154
|
study="Study_1",
|
|
@@ -238,7 +239,8 @@ class Sumstats():
|
|
|
238
239
|
trait=trait,
|
|
239
240
|
status=status,
|
|
240
241
|
other=other,
|
|
241
|
-
|
|
242
|
+
exclude=exclude,
|
|
243
|
+
include=include,
|
|
242
244
|
chrom_pat=chrom_pat,
|
|
243
245
|
snpid_pat=snpid_pat,
|
|
244
246
|
verbose=verbose,
|
|
@@ -912,10 +914,13 @@ class Sumstats():
|
|
|
912
914
|
verbose=verbose,
|
|
913
915
|
**kwargs)
|
|
914
916
|
|
|
915
|
-
def estimate_rg_by_ldsc(self, build=None, verbose=True, match_allele=True, how="right",**kwargs):
|
|
917
|
+
def estimate_rg_by_ldsc(self, build=None, verbose=True, match_allele=True, how="right", get_hm3=True,**kwargs):
|
|
916
918
|
if build is None:
|
|
917
919
|
build = self.meta["gwaslab"]["genome_build"]
|
|
918
|
-
|
|
920
|
+
if get_hm3==True:
|
|
921
|
+
insumstats = gethapmap3(self.data.copy(), build=build, verbose=verbose , match_allele=match_allele, how=how )
|
|
922
|
+
else:
|
|
923
|
+
insumstats = self.data
|
|
919
924
|
ldsc_rg = _estimate_rg_by_ldsc(insumstats=insumstats,
|
|
920
925
|
meta=self.meta,
|
|
921
926
|
log=self.log,
|
gwaslab/g_SumstatsMulti.py
CHANGED
|
@@ -53,6 +53,7 @@ class SumstatsMulti( ):
|
|
|
53
53
|
build="99",
|
|
54
54
|
engine="pandas",
|
|
55
55
|
merge_mode="outer",
|
|
56
|
+
merge_by_id=False,
|
|
56
57
|
verbose=True ):
|
|
57
58
|
|
|
58
59
|
for i,sumstatsObject in enumerate(sumstatsObjects):
|
|
@@ -152,7 +153,7 @@ class SumstatsMulti( ):
|
|
|
152
153
|
for i, sumstatsObject in enumerate(sumstatsObjects):
|
|
153
154
|
if i >0:
|
|
154
155
|
self.log.write("Merging Sumstats #{} to main DataFrame...".format(i+1))
|
|
155
|
-
self.data = self._merge_two_sumstats(sumstatsObject.data,i=i,merge_mode=merge_mode,engine=engine)
|
|
156
|
+
self.data = self._merge_two_sumstats(sumstatsObject.data,i=i,merge_mode=merge_mode,engine=engine,merge_by_id=merge_by_id)
|
|
156
157
|
self.log.write("Finished merging Sumstats #{} to main DataFrame.".format(i+1))
|
|
157
158
|
else:
|
|
158
159
|
for i, sumstatsObject in enumerate(sumstatsObjects):
|
|
@@ -167,6 +168,7 @@ class SumstatsMulti( ):
|
|
|
167
168
|
verbose=True,
|
|
168
169
|
merge_mode="outer",
|
|
169
170
|
engine="pandas",
|
|
171
|
+
merge_by_id=False,
|
|
170
172
|
i=0):
|
|
171
173
|
|
|
172
174
|
# _1 _2
|
|
@@ -184,6 +186,7 @@ class SumstatsMulti( ):
|
|
|
184
186
|
log=self.log,
|
|
185
187
|
verbose=verbose,
|
|
186
188
|
merge_mode=merge_mode,
|
|
189
|
+
merge_by_id=merge_by_id,
|
|
187
190
|
stats_cols1 = self.other_cols[0],
|
|
188
191
|
stats_cols2 = self.other_cols[i],
|
|
189
192
|
suffixes=("_1",""),
|
gwaslab/g_version.py
CHANGED
|
@@ -2,11 +2,13 @@ from gwaslab.g_Log import Log
|
|
|
2
2
|
import subprocess
|
|
3
3
|
import os
|
|
4
4
|
import numpy as np
|
|
5
|
+
import sys
|
|
5
6
|
|
|
6
7
|
def _show_version(log=Log(), verbose=True):
|
|
7
8
|
# show version when loading sumstats
|
|
8
9
|
log.write("GWASLab v{} https://cloufield.github.io/gwaslab/".format(gwaslab_info()["version"]),verbose=verbose)
|
|
9
10
|
log.write("(C) 2022-2025, Yunye He, Kamatani Lab, GPL-3.0 license, gwaslab@gmail.com",verbose=verbose)
|
|
11
|
+
log.write(f"Python version: {sys.version}",verbose=verbose)
|
|
10
12
|
|
|
11
13
|
def _get_version():
|
|
12
14
|
# return short version string like v3.4.33
|
|
@@ -15,8 +17,8 @@ def _get_version():
|
|
|
15
17
|
def gwaslab_info():
|
|
16
18
|
# version meta information
|
|
17
19
|
dic={
|
|
18
|
-
"version":"3.6.
|
|
19
|
-
"release_date":"
|
|
20
|
+
"version":"3.6.4",
|
|
21
|
+
"release_date":"20250624"
|
|
20
22
|
}
|
|
21
23
|
return dic
|
|
22
24
|
|
gwaslab/hm_casting_polars.py
CHANGED
|
@@ -18,30 +18,95 @@ def _merge_mold_with_sumstats_by_chrposp(mold, sumstats, ref_path=None,add_raw_i
|
|
|
18
18
|
log=Log(),
|
|
19
19
|
suffixes=("_MOLD",""),
|
|
20
20
|
merge_mode="full",
|
|
21
|
+
merge_by_id=False,
|
|
21
22
|
verbose=True,
|
|
22
23
|
return_not_matched_mold =False):
|
|
23
24
|
|
|
24
25
|
log.write("Start to merge sumstats...", verbose=verbose)
|
|
25
26
|
if merge_mode=="full":
|
|
27
|
+
|
|
26
28
|
sumstats = sumstats.rename({
|
|
27
29
|
"SNPID":"_SNPID_RIGHT",
|
|
28
30
|
"rsID":"_rsID_RIGHT"
|
|
29
31
|
}, strict=False) #,
|
|
32
|
+
|
|
30
33
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
34
|
+
if merge_by_id==False:
|
|
35
|
+
# drop old ids
|
|
36
|
+
cols_to_drop = []
|
|
37
|
+
for i in sumstats.columns:
|
|
38
|
+
if i in ["SNPID","rsID"]:
|
|
39
|
+
cols_to_drop.append(i)
|
|
40
|
+
if len(cols_to_drop)>0:
|
|
41
|
+
log.write(" -Dropping old IDs:{}".format(cols_to_drop), verbose=verbose)
|
|
42
|
+
sumstats = sumstats.drop(columns=cols_to_drop)
|
|
43
|
+
|
|
44
|
+
##################################################################################################################
|
|
45
|
+
|
|
46
|
+
# mold sumffix + mold
|
|
47
|
+
# add ASET
|
|
48
|
+
mold = mold.with_columns(
|
|
49
|
+
pl.when( pl.col("EA_1") > pl.col("NEA_1") )
|
|
50
|
+
.then( pl.col("EA_1") + ":" + pl.col("NEA_1") )
|
|
51
|
+
.otherwise( pl.col("NEA_1") + ":" + pl.col("EA_1") )
|
|
52
|
+
.alias("ASET")
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
sumstats = sumstats.with_columns(
|
|
56
|
+
pl.when( pl.col("EA") > pl.col("NEA") )
|
|
57
|
+
.then( pl.col("EA") + ":" + pl.col("NEA") )
|
|
58
|
+
.otherwise( pl.col("NEA") + ":" + pl.col("EA") )
|
|
59
|
+
.alias("ASET"))
|
|
60
|
+
|
|
61
|
+
sumstats_len = len(sumstats)
|
|
62
|
+
mold_len = len(mold)
|
|
63
|
+
sumstats = sumstats.unique(subset=["CHR","POS","ASET"])
|
|
64
|
+
mold = mold.unique(subset=["CHR","POS","ASET"])
|
|
65
|
+
|
|
66
|
+
log.write(f' -Left: dropping duplicated variants based on CHR,POS,ASET: {sumstats_len - len(sumstats)}')
|
|
67
|
+
log.write(f' -Right: dropping duplicated variants based on CHR,POS,ASET: {mold_len - len(mold)}')
|
|
39
68
|
|
|
40
|
-
|
|
69
|
+
mold = mold.with_columns(
|
|
70
|
+
pl.when( pl.col("NEA_1").str.len_chars() != pl.col("EA_1").str.len_chars() )
|
|
71
|
+
.then(
|
|
72
|
+
pl.when( pl.col("EAF_1")<0.5 ).then(
|
|
73
|
+
pl.col("ASET") + ":" + pl.col("EA_1")
|
|
74
|
+
).otherwise( pl.col("ASET") + ":" + pl.col("NEA_1") )
|
|
75
|
+
.alias("ASET")
|
|
76
|
+
)
|
|
77
|
+
.otherwise( pl.col("ASET") )
|
|
78
|
+
.alias("ASET")
|
|
79
|
+
)
|
|
80
|
+
|
|
81
|
+
sumstats = sumstats.with_columns(
|
|
82
|
+
pl.when( pl.col("NEA").str.len_chars() != pl.col("EA").str.len_chars() )
|
|
83
|
+
.then(
|
|
84
|
+
pl.when( pl.col("EAF")<0.5 ).then(
|
|
85
|
+
pl.col("ASET") + ":" + pl.col("EA")
|
|
86
|
+
).otherwise( pl.col("ASET") + ":" + pl.col("NEA") )
|
|
87
|
+
.alias("ASET")
|
|
88
|
+
)
|
|
89
|
+
.otherwise( pl.col("ASET"))
|
|
90
|
+
.alias("ASET")
|
|
91
|
+
)
|
|
92
|
+
|
|
93
|
+
mold_sumstats = mold.join(sumstats, on=["CHR","POS","ASET"], how=merge_mode, suffix="_", coalesce=True)
|
|
94
|
+
|
|
95
|
+
elif merge_by_id==True:
|
|
96
|
+
|
|
97
|
+
sumstats = sumstats.rename({
|
|
98
|
+
"_SNPID_RIGHT":"SNPID",
|
|
99
|
+
}, strict=False)
|
|
100
|
+
|
|
41
101
|
|
|
42
|
-
|
|
102
|
+
sumstats_len = len(sumstats)
|
|
103
|
+
mold_len = len(mold)
|
|
104
|
+
sumstats = sumstats.unique(subset=["SNPID","CHR","POS"])
|
|
105
|
+
mold = mold.unique(subset=["SNPID","CHR","POS"])
|
|
106
|
+
log.write(f' -Left: dropping duplicated variants based on CHR,POS,SNPID: {sumstats_len - len(sumstats)}')
|
|
107
|
+
log.write(f' -Right: dropping duplicated variants based on CHR,POS,SNPID: {mold_len - len(mold)}')
|
|
108
|
+
mold_sumstats = mold.join(sumstats, on=["SNPID","CHR","POS"], how=merge_mode, suffix="_", coalesce=True)
|
|
43
109
|
|
|
44
|
-
mold_sumstats = mold.join(sumstats, on=["CHR","POS"], how=merge_mode, suffix="_", coalesce=True)
|
|
45
110
|
|
|
46
111
|
if merge_mode=="full":
|
|
47
112
|
is_temp_na = mold_sumstats["EA_1"].is_null()
|
|
@@ -50,13 +115,17 @@ def _merge_mold_with_sumstats_by_chrposp(mold, sumstats, ref_path=None,add_raw_i
|
|
|
50
115
|
for i in ["EA_1","NEA_1","EA","NEA"]:
|
|
51
116
|
mold_sumstats = mold_sumstats.with_columns(pl.col(i).cast(pl.String).alias(i))
|
|
52
117
|
|
|
53
|
-
|
|
54
|
-
|
|
118
|
+
if merge_by_id==False:
|
|
119
|
+
mold_sumstats = mold_sumstats.with_columns(
|
|
55
120
|
pl.when( is_temp_na )
|
|
56
121
|
.then( pl.col("_SNPID_RIGHT") )
|
|
57
122
|
.otherwise( pl.col("SNPID") )
|
|
58
123
|
.alias("SNPID")
|
|
59
|
-
|
|
124
|
+
)
|
|
125
|
+
mold_sumstats = mold_sumstats.drop(["_SNPID_RIGHT"])
|
|
126
|
+
|
|
127
|
+
# for variants not in template, copy snp info
|
|
128
|
+
mold_sumstats = mold_sumstats.with_columns(
|
|
60
129
|
pl.when( is_temp_na )
|
|
61
130
|
.then( pl.col("EA") )
|
|
62
131
|
.otherwise( pl.col("EA_1") )
|
|
@@ -66,12 +135,18 @@ def _merge_mold_with_sumstats_by_chrposp(mold, sumstats, ref_path=None,add_raw_i
|
|
|
66
135
|
.then( pl.col("NEA") )
|
|
67
136
|
.otherwise( pl.col("NEA_1") )
|
|
68
137
|
.alias("NEA_1")
|
|
138
|
+
).with_columns(
|
|
139
|
+
pl.when( is_temp_na )
|
|
140
|
+
.then( pl.col("EAF") )
|
|
141
|
+
.otherwise( pl.col("EAF_1"))
|
|
142
|
+
.alias("EAF_1")
|
|
69
143
|
).with_columns(
|
|
70
144
|
pl.when( is_temp_na )
|
|
71
145
|
.then( pl.col("STATUS") )
|
|
72
146
|
.otherwise( pl.col("STATUS_1") )
|
|
73
147
|
.alias("STATUS_1")
|
|
74
148
|
)
|
|
149
|
+
|
|
75
150
|
#
|
|
76
151
|
if "_rsID_RIGHT" in mold_sumstats.columns:
|
|
77
152
|
mold_sumstats = mold_sumstats.with_columns(
|
|
@@ -87,7 +162,7 @@ def _merge_mold_with_sumstats_by_chrposp(mold, sumstats, ref_path=None,add_raw_i
|
|
|
87
162
|
|
|
88
163
|
mold_sumstats = mold_sumstats.with_columns(
|
|
89
164
|
pl.when( is_temp_na_2 )
|
|
90
|
-
.then( pl.col("EA_1")
|
|
165
|
+
.then( pl.col("EA_1") )
|
|
91
166
|
.otherwise( pl.col("EA") )
|
|
92
167
|
.alias("EA")
|
|
93
168
|
).with_columns(
|
|
@@ -97,10 +172,14 @@ def _merge_mold_with_sumstats_by_chrposp(mold, sumstats, ref_path=None,add_raw_i
|
|
|
97
172
|
.alias("NEA")
|
|
98
173
|
)
|
|
99
174
|
|
|
100
|
-
|
|
175
|
+
|
|
176
|
+
if merge_by_id==False:
|
|
177
|
+
mold_sumstats = mold_sumstats.unique(subset=["CHR","POS","ASET"])
|
|
178
|
+
log.write(" -After merging by CHR, POS and ASET:{}".format(len(mold_sumstats)), verbose=verbose)
|
|
179
|
+
else:
|
|
180
|
+
mold_sumstats = mold_sumstats.unique(subset=["SNPID","CHR","POS"])
|
|
181
|
+
log.write(" -After merging by SNPID, CHR and POS:{}".format(len(mold_sumstats)), verbose=verbose)
|
|
101
182
|
|
|
102
|
-
log.write(" -After merging by CHR and POS:{}".format(len(mold_sumstats)), verbose=verbose)
|
|
103
|
-
|
|
104
183
|
mold_sumstats = _keep_variants_with_same_allele_setp(mold_sumstats,suffixes=suffixes)
|
|
105
184
|
|
|
106
185
|
log.write(" -Matched variants:{}".format(len(mold_sumstats)), verbose=verbose)
|
|
@@ -116,13 +195,9 @@ def _keep_variants_with_same_allele_setp(sumstats, log=Log(),verbose=True,suffix
|
|
|
116
195
|
|
|
117
196
|
is_perfect_match = (sumstats[ea2] == sumstats[ea1]) & (sumstats[nea2] == sumstats[nea1])
|
|
118
197
|
is_flipped_match = (sumstats[ea2] == sumstats[nea1]) & (sumstats[nea2] == sumstats[ea1])
|
|
119
|
-
is_allele_set_match = is_flipped_match | is_perfect_match
|
|
120
198
|
|
|
121
|
-
log.write(" -Matching alleles and keeping only variants with same allele set: ", verbose=verbose)
|
|
122
199
|
log.write(" -Perfect match: {}".format(sum(is_perfect_match)), verbose=verbose)
|
|
123
200
|
log.write(" -Flipped match: {}".format(sum(is_flipped_match)), verbose=verbose)
|
|
124
|
-
log.write(" -Unmatched : {}".format(sum(~is_allele_set_match)), verbose=verbose)
|
|
125
|
-
sumstats = sumstats.filter(is_allele_set_match)
|
|
126
201
|
return sumstats
|
|
127
202
|
|
|
128
203
|
def _align_with_moldp(sumstats, log=Log(),verbose=True, suffixes=("_MOLD","")):
|
gwaslab/io_preformat_input.py
CHANGED
|
@@ -58,8 +58,9 @@ def preformat(sumstats,
|
|
|
58
58
|
study=None,
|
|
59
59
|
trait=None,
|
|
60
60
|
build=None,
|
|
61
|
-
other=
|
|
62
|
-
|
|
61
|
+
other=None,
|
|
62
|
+
exclude=None,
|
|
63
|
+
include=None,
|
|
63
64
|
chrom_pat=None,
|
|
64
65
|
snpid_pat=None,
|
|
65
66
|
verbose=False,
|
|
@@ -68,15 +69,22 @@ def preformat(sumstats,
|
|
|
68
69
|
|
|
69
70
|
#renaming dictionary
|
|
70
71
|
rename_dictionary = {}
|
|
71
|
-
usecols =
|
|
72
|
-
|
|
72
|
+
usecols = list()
|
|
73
|
+
if other is None:
|
|
74
|
+
other = list()
|
|
75
|
+
if exclude is None:
|
|
76
|
+
exclude = list()
|
|
77
|
+
if include is None:
|
|
78
|
+
include = list()
|
|
79
|
+
|
|
80
|
+
dtype_dictionary = {}
|
|
73
81
|
if readargs is None:
|
|
74
82
|
readargs={}
|
|
75
83
|
#######################################################################################################################################################
|
|
76
84
|
# workflow:
|
|
77
85
|
# 1. formatbook
|
|
78
86
|
# 2. user specified header
|
|
79
|
-
# 3.
|
|
87
|
+
# 3. include & exclude
|
|
80
88
|
if tab_fmt=="parquet":
|
|
81
89
|
if type(sumstats) is str:
|
|
82
90
|
log.write("Start to load data from parquet file....",verbose=verbose)
|
|
@@ -316,18 +324,36 @@ def preformat(sumstats,
|
|
|
316
324
|
study = raw_cols[9]
|
|
317
325
|
usecols = usecols + [study]
|
|
318
326
|
|
|
319
|
-
if
|
|
327
|
+
if len(include)>0:
|
|
320
328
|
# extract only specified keys
|
|
321
329
|
usecols_new =[]
|
|
322
|
-
for i in
|
|
330
|
+
for i in include:
|
|
331
|
+
# rename_dictionary: sumstats to gwaslab
|
|
323
332
|
for k, v in rename_dictionary.items():
|
|
324
333
|
if i == v:
|
|
334
|
+
# get list of sumstats header
|
|
325
335
|
usecols_new.append(k)
|
|
326
336
|
usecols_valid =[]
|
|
327
337
|
for i in usecols_new:
|
|
328
338
|
if i in usecols:
|
|
329
339
|
usecols_valid.append(i)
|
|
340
|
+
log.write(f' -Include columns :{",".join(usecols_valid)}' ,verbose=verbose)
|
|
330
341
|
usecols = usecols_valid
|
|
342
|
+
|
|
343
|
+
if len(exclude)>0:
|
|
344
|
+
# exclude specified keys
|
|
345
|
+
exclude_cols =[]
|
|
346
|
+
for i in exclude:
|
|
347
|
+
# rename_dictionary: sumstats to gwaslab
|
|
348
|
+
for k, v in rename_dictionary.items():
|
|
349
|
+
if i == v:
|
|
350
|
+
# get list of sumstats header
|
|
351
|
+
exclude_cols.append(k)
|
|
352
|
+
log.write(f' -Exclude columns :{",".join(exclude_cols)}' ,verbose=verbose)
|
|
353
|
+
for i in exclude_cols:
|
|
354
|
+
if i in usecols:
|
|
355
|
+
usecols.remove(i)
|
|
356
|
+
|
|
331
357
|
#loading data ##########################################################################################################
|
|
332
358
|
|
|
333
359
|
try:
|
gwaslab/qc_fix_sumstats.py
CHANGED
|
@@ -107,6 +107,7 @@ def fixID(sumstats,
|
|
|
107
107
|
except:
|
|
108
108
|
log.write(" -Force converting rsID to pd.string data type...",verbose=verbose)
|
|
109
109
|
sumstats[rsid] = sumstats[rsid].astype("string")
|
|
110
|
+
|
|
110
111
|
if snpid in sumstats.columns:
|
|
111
112
|
# convert to string datatype
|
|
112
113
|
try:
|
|
@@ -147,6 +148,7 @@ def fixID(sumstats,
|
|
|
147
148
|
log.write(" -A look at the unrecognized rsID :",set(sumstats.loc[(~is_rsid)&(~is_rs_chrpos),rsid].head()),"...", verbose=verbose)
|
|
148
149
|
|
|
149
150
|
############################ fixing chr pos###################################################
|
|
151
|
+
|
|
150
152
|
if fixchrpos == True:
|
|
151
153
|
# from snpid or rsid, extract CHR:POS to fix CHR and POS
|
|
152
154
|
if snpid in sumstats.columns:
|
gwaslab/util_ex_run_clumping.py
CHANGED
|
@@ -9,7 +9,7 @@ from gwaslab.util_ex_process_ref import _process_plink_input_files
|
|
|
9
9
|
from gwaslab.g_version import _checking_plink_version
|
|
10
10
|
|
|
11
11
|
def _clump(insumstats, vcf=None, scaled=False, out="clumping_plink2",
|
|
12
|
-
p="P",mlog10p="MLOG10P", overwrite=False, study=None, bfile=None,
|
|
12
|
+
p="P",mlog10p="MLOG10P", overwrite=False, study=None, bfile=None, pfile=None,
|
|
13
13
|
n_cores=1, memory=None, chrom=None, clump_p1=5e-8, clump_p2=5e-8, clump_r2=0.01, clump_kb=250,
|
|
14
14
|
log=Log(),verbose=True,plink="plink",plink2="plink2"):
|
|
15
15
|
##start function with col checking##########################################################
|
|
@@ -54,6 +54,7 @@ def _clump(insumstats, vcf=None, scaled=False, out="clumping_plink2",
|
|
|
54
54
|
# process reference file
|
|
55
55
|
bfile, plink_log, ref_bim,filetype = _process_plink_input_files(chrlist=sumstats["CHR"].unique(),
|
|
56
56
|
bfile=bfile,
|
|
57
|
+
pfile=pfile,
|
|
57
58
|
vcf=vcf,
|
|
58
59
|
n_cores=n_cores,
|
|
59
60
|
plink_log=plink_log,
|
|
@@ -162,9 +163,12 @@ def _clump(insumstats, vcf=None, scaled=False, out="clumping_plink2",
|
|
|
162
163
|
log.write(e.output)
|
|
163
164
|
#os.system(script)
|
|
164
165
|
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
166
|
+
try:
|
|
167
|
+
clumped = pd.read_csv("{}.clumps".format(out_single_chr),sep="\s+")
|
|
168
|
+
results = pd.concat([results,clumped],ignore_index=True)
|
|
169
|
+
|
|
170
|
+
except:
|
|
171
|
+
log.write(f"Clumping failed for chr{i}")
|
|
168
172
|
# remove temp SNPIDP file
|
|
169
173
|
os.remove(clump)
|
|
170
174
|
|
gwaslab/util_ex_run_scdrs.py
CHANGED
|
@@ -84,7 +84,7 @@ def _run_scdrs( scdrs="scdrs",
|
|
|
84
84
|
bash_script+=f'''
|
|
85
85
|
{python} {scdrs} perform-downstream {analysis_string} \
|
|
86
86
|
--h5ad-file {h5ad_file} \
|
|
87
|
-
--score-file {trait}.full_score.gz \
|
|
87
|
+
--score-file ./{trait}.full_score.gz \
|
|
88
88
|
--out-folder {out_folder} \
|
|
89
89
|
--min_genes 250 \
|
|
90
90
|
--min_cells 50 \
|
gwaslab/viz_aux_quickfix.py
CHANGED
|
@@ -199,7 +199,6 @@ def _quick_assign_i_with_rank(sumstats, chrpad, use_rank=False, chrom="CHR",pos=
|
|
|
199
199
|
posdiccul[i]= posdiccul[i-1] + posdiccul[i] + sumstats[pos].max()*chrpad
|
|
200
200
|
else:
|
|
201
201
|
posdiccul = _posdiccul
|
|
202
|
-
|
|
203
202
|
# convert base pair postion to x axis position using the cumulative sum dictionary
|
|
204
203
|
sumstats["_ADD"]=sumstats[chrom].apply(lambda x : posdiccul[int(x)-1])
|
|
205
204
|
|
|
@@ -985,6 +985,7 @@ def test_q(df,beta1,se1,beta2,se2,q_level=0.05,is_q_mc=False, log=Log(), verbose
|
|
|
985
985
|
log.write(" -Bonferroni correction applied...", verbose=verbose)
|
|
986
986
|
df[rawpq] = df[pq]
|
|
987
987
|
df[pq] = df[pq] * len(df[pq])
|
|
988
|
+
df.loc[df[pq]>1,pq] = 1
|
|
988
989
|
|
|
989
990
|
df.loc[df[pq]<q_level,"Edge_color"]="black"
|
|
990
991
|
df.drop(columns=["Weight_1","Weight_2","BETA_FE"],inplace=True)
|
|
@@ -1330,17 +1331,20 @@ def configure_legend(fig, ax, legend_mode, is_q, is_q_mc, legend_elements, legen
|
|
|
1330
1331
|
# handle.set_edgecolor("white")
|
|
1331
1332
|
|
|
1332
1333
|
## Move titles to the left
|
|
1333
|
-
|
|
1334
|
-
|
|
1335
|
-
|
|
1336
|
-
|
|
1337
|
-
|
|
1338
|
-
|
|
1339
|
-
if
|
|
1340
|
-
|
|
1341
|
-
|
|
1342
|
-
|
|
1343
|
-
|
|
1334
|
+
try:
|
|
1335
|
+
for item, label in zip(L.legendHandles, L.texts):
|
|
1336
|
+
if label._text in legend_elements:
|
|
1337
|
+
item.set_edgecolor("white")
|
|
1338
|
+
#item._legmarker.set_markersize(scatterargs["s"]*1.5)
|
|
1339
|
+
item._sizes = [scatterargs["s"]*2]
|
|
1340
|
+
if legend_mode == "full":
|
|
1341
|
+
if label._text in [legend_title, legend_title2]:
|
|
1342
|
+
width=item.get_window_extent(fig.canvas.get_renderer()).width
|
|
1343
|
+
label.set_ha('left')
|
|
1344
|
+
label.set_position((-8*width,0))
|
|
1345
|
+
except:
|
|
1346
|
+
pass
|
|
1347
|
+
|
|
1344
1348
|
ax.tick_params(axis='both', labelsize=font_kwargs["fontsize"])
|
|
1345
1349
|
plt.setp(L.texts,**font_kwargs)
|
|
1346
1350
|
plt.setp(L.get_title(),**font_kwargs)
|
gwaslab/viz_plot_miamiplot2.py
CHANGED
|
@@ -70,8 +70,9 @@ def plot_miami2(
|
|
|
70
70
|
region_hspace = 0.1,
|
|
71
71
|
dpi=100,
|
|
72
72
|
fontsize = 10,
|
|
73
|
+
xtick_label_size = 10,
|
|
73
74
|
font_family="Arial",
|
|
74
|
-
xlabel_coords=
|
|
75
|
+
xlabel_coords=None,
|
|
75
76
|
xtick_label_pad=None,
|
|
76
77
|
verbose=True,
|
|
77
78
|
xtickpad=None,
|
|
@@ -142,9 +143,12 @@ def plot_miami2(
|
|
|
142
143
|
scatter_args={}
|
|
143
144
|
|
|
144
145
|
if fig_args is None:
|
|
145
|
-
fig_args= {"figsize":(15,
|
|
146
|
+
fig_args= {"figsize":(15,10),"dpi":100}
|
|
146
147
|
if save_args is None:
|
|
147
148
|
save_args={"dpi":100,"facecolor":"white"}
|
|
149
|
+
|
|
150
|
+
if xlabel_coords is None:
|
|
151
|
+
xlabel_coords = (-0.01,- region_hspace/2 )
|
|
148
152
|
|
|
149
153
|
# figure out mqq args
|
|
150
154
|
mqq_args1,mqq_args2 = _sort_args_to_12(mqq_args)
|
|
@@ -157,19 +161,10 @@ def plot_miami2(
|
|
|
157
161
|
|
|
158
162
|
if dpi!=100:
|
|
159
163
|
fig_args["dpi"] = dpi
|
|
160
|
-
if xtickpad is None:
|
|
161
|
-
if "figsize" not in fig_args.keys():
|
|
162
|
-
fig_args["figsize"] = (15,5)
|
|
163
|
-
xtickpad = fig_args["figsize"][1] * region_hspace *72 / 6
|
|
164
|
-
if xtick_label_pad is None:
|
|
165
|
-
if "figsize" not in fig_args.keys():
|
|
166
|
-
fig_args["figsize"] = (15,5)
|
|
167
|
-
xtick_label_pad = 72 * fig_args["figsize"][1] * region_hspace / 6
|
|
168
164
|
|
|
169
165
|
if titles is None:
|
|
170
166
|
titles=["",""]
|
|
171
167
|
|
|
172
|
-
|
|
173
168
|
titles_pad_adjusted=[1,0]
|
|
174
169
|
if titles_pad is None:
|
|
175
170
|
titles_pad=[0.2,0.2]
|
|
@@ -242,11 +237,12 @@ def plot_miami2(
|
|
|
242
237
|
# P_1 scaled_P_1 P_2 scaled_P_2 TCHR+POS CHR POS
|
|
243
238
|
log.write(" -Columns in merged sumstats: {}".format(",".join(merged_sumstats.columns)), verbose=verbose)
|
|
244
239
|
|
|
245
|
-
|
|
246
240
|
del(sumstats1)
|
|
247
241
|
del(sumstats2)
|
|
248
242
|
garbage_collect.collect()
|
|
249
243
|
#####################################################################################################################
|
|
244
|
+
|
|
245
|
+
|
|
250
246
|
##plotting
|
|
251
247
|
if figax is None:
|
|
252
248
|
#fig_args["figsize"] = (15,10)
|
|
@@ -254,7 +250,30 @@ def plot_miami2(
|
|
|
254
250
|
plt.subplots_adjust(hspace=region_hspace)
|
|
255
251
|
else:
|
|
256
252
|
fig, ax1, ax5 = figax
|
|
253
|
+
##########################################################################################################################
|
|
254
|
+
bbox1 = ax1.get_position()
|
|
255
|
+
bbox5 = ax5.get_position()
|
|
256
|
+
|
|
257
257
|
|
|
258
|
+
|
|
259
|
+
fig_height_inches = fig.get_figheight()
|
|
260
|
+
ax_height_inches = (bbox1.height + bbox5.height) * fig_height_inches /2
|
|
261
|
+
ax_height_points = ax_height_inches * 72
|
|
262
|
+
tick = ax1.xaxis.get_major_ticks()[0].tick1line
|
|
263
|
+
# Tick length is determined by its 'markersize' (in points)
|
|
264
|
+
tick_length = tick.get_markersize()
|
|
265
|
+
|
|
266
|
+
tick_points_to_pixels = tick_length * fig.dpi / 72.0
|
|
267
|
+
ax_height_pixels = bbox1.height * fig.get_figheight() * fig.dpi
|
|
268
|
+
tick_axes_length = tick_points_to_pixels / ax_height_pixels
|
|
269
|
+
|
|
270
|
+
if xtick_label_pad is None:
|
|
271
|
+
if "figsize" not in fig_args.keys():
|
|
272
|
+
fig_args["figsize"] = (15,10)
|
|
273
|
+
# (total hsapce - tick label font size) / 2
|
|
274
|
+
xtick_label_pad = 0
|
|
275
|
+
#xtick_label_pad = ((ax_height_points * region_hspace) - 2*tick_length - xtick_label_size) / 2
|
|
276
|
+
########################################################################################################################
|
|
258
277
|
#if same_ylim==True:
|
|
259
278
|
#maxy = merged_sumstats[["scaled_P_1","scaled_P_2"]].max().max()
|
|
260
279
|
|
|
@@ -307,17 +326,23 @@ def plot_miami2(
|
|
|
307
326
|
#ax5.set_xticks(chrom_df)
|
|
308
327
|
ax5.set_xticklabels([])
|
|
309
328
|
ax5.xaxis.set_ticks_position("top")
|
|
329
|
+
ax5.tick_params(axis='x', which='major', pad=0)
|
|
310
330
|
|
|
311
331
|
# Ad#just the visibility for spines #######################################################
|
|
312
332
|
ax1, ax5 = _set_spine_visibility(ax1, ax5)
|
|
313
333
|
######################################################################################################################
|
|
314
334
|
#####################################################################################################################
|
|
315
335
|
# set labels
|
|
316
|
-
ax1.set_xlabel("Chromosome",fontsize=fontsize,family=font_family)
|
|
336
|
+
ax1.set_xlabel("Chromosome",fontsize=fontsize,family=font_family,labelpad=0, va="center",ha="center")
|
|
317
337
|
ax1.xaxis.set_label_coords(xlabel_coords[0],xlabel_coords[1])
|
|
338
|
+
|
|
339
|
+
#ax1.tick_params(axis='x', which='major', pad=xtick_label_pad, labelsize = xtick_label_size)
|
|
318
340
|
|
|
319
|
-
ax1.
|
|
320
|
-
|
|
341
|
+
for label in ax1.get_xticklabels():
|
|
342
|
+
label.set_y( xlabel_coords[1] + tick_axes_length )
|
|
343
|
+
ax1.tick_params(axis='x', which='major', pad=xtick_label_pad, labelsize = xtick_label_size)
|
|
344
|
+
plt.setp(ax1.get_xticklabels(), ha='center',va="center")
|
|
345
|
+
|
|
321
346
|
ax1.set_ylabel("$\mathregular{-log_{10}(P)}$",fontsize=fontsize,family=font_family)
|
|
322
347
|
ax5.set_ylabel("$\mathregular{-log_{10}(P)}$",fontsize=fontsize,family=font_family)
|
|
323
348
|
|
gwaslab/viz_plot_mqqplot.py
CHANGED
|
@@ -1178,22 +1178,33 @@ def _add_pad_to_x_axis(ax1, xpad, xpadl, xpadr, sumstats, pos, chrpad, xtight, l
|
|
|
1178
1178
|
|
|
1179
1179
|
else:
|
|
1180
1180
|
chrpad_to_remove = sumstats[pos].max()*chrpad
|
|
1181
|
+
|
|
1181
1182
|
if ax1 is not None:
|
|
1182
|
-
xmin, xmax = ax1.get_xlim()
|
|
1183
|
+
#xmin, xmax = ax1.get_xlim()
|
|
1184
|
+
xmax = sumstats["i"].max()
|
|
1185
|
+
xmin= sumstats["i"].min()
|
|
1186
|
+
|
|
1187
|
+
#length = xmax - xmin
|
|
1183
1188
|
length = xmax - xmin
|
|
1184
1189
|
|
|
1185
1190
|
if xpad is not None:
|
|
1186
1191
|
log.write(" -Adjusting X padding on both side: {}".format(xpad), verbose=verbose)
|
|
1187
1192
|
pad = xpad* length #sumstats["i"].max()
|
|
1188
1193
|
ax1.set_xlim([xmin - pad + chrpad_to_remove, xmax + pad - chrpad_to_remove])
|
|
1194
|
+
|
|
1189
1195
|
if xpad is None and xpadl is not None:
|
|
1190
1196
|
log.write(" -Adjusting X padding on left side: {}".format(xpadl), verbose=verbose)
|
|
1191
|
-
|
|
1197
|
+
|
|
1198
|
+
xmax = ax1.get_xlim()[1]
|
|
1199
|
+
|
|
1192
1200
|
pad = xpadl*length # sumstats["i"].max()
|
|
1193
1201
|
ax1.set_xlim([xmin - pad + chrpad_to_remove ,xmax])
|
|
1202
|
+
|
|
1194
1203
|
if xpad is None and xpadr is not None:
|
|
1195
1204
|
log.write(" -Adjusting X padding on right side: {}".format(xpadr), verbose=verbose)
|
|
1196
|
-
|
|
1205
|
+
|
|
1206
|
+
xmin = ax1.get_xlim()[0]
|
|
1207
|
+
|
|
1197
1208
|
pad = xpadr*length # sumstats["i"].max()
|
|
1198
1209
|
ax1.set_xlim([xmin, xmax + pad - chrpad_to_remove])
|
|
1199
1210
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: gwaslab
|
|
3
|
-
Version: 3.6.
|
|
3
|
+
Version: 3.6.4
|
|
4
4
|
Summary: A collection of handy tools for GWAS SumStats
|
|
5
5
|
Author-email: Yunye <gwaslab@gmail.com>
|
|
6
6
|
Project-URL: Homepage, https://cloufield.github.io/gwaslab/
|
|
@@ -26,6 +26,7 @@ Requires-Dist: pyensembl==2.2.3
|
|
|
26
26
|
Requires-Dist: gtfparse==1.3.0
|
|
27
27
|
Requires-Dist: h5py>=3.10.0
|
|
28
28
|
Requires-Dist: pyarrow
|
|
29
|
+
Requires-Dist: polars>=1.27.0
|
|
29
30
|
Dynamic: license-file
|
|
30
31
|
|
|
31
32
|
# GWASLab
|
|
@@ -2,12 +2,12 @@ gwaslab/__init__.py,sha256=Lpa15i924wRu1jZ9_B2Tz5724FQkdb9O5Wg3tQPWR68,2683
|
|
|
2
2
|
gwaslab/bd_common_data.py,sha256=jqkdKib-tc8RKyYMPy8z2KF3YwCWIr-6STMCi4xR7KY,13899
|
|
3
3
|
gwaslab/bd_config.py,sha256=TP-r-DPhJD3XnRYZbw9bQHXaDIkiRgK8bG9HCt-UaLc,580
|
|
4
4
|
gwaslab/bd_download.py,sha256=cDDk2C5IvjeAzvPvVYGTkI4Ss33DUtEDjGo8eAbQRvY,15663
|
|
5
|
-
gwaslab/bd_get_hapmap3.py,sha256=
|
|
5
|
+
gwaslab/bd_get_hapmap3.py,sha256=1y_mt3Sj-D6Fm4NvVAYJKfE-BPaKPI-8wX93OkmxYbE,5402
|
|
6
6
|
gwaslab/cache_manager.py,sha256=HOTnSkCOyGEPLRl90WT8D_6pAdI8d8AzenMIDGuCeWc,28113
|
|
7
7
|
gwaslab/g_Log.py,sha256=C3Zv-_6c3C9ms8bgQ-ytplz22sjk7euqXYkWr9zNeAs,1573
|
|
8
8
|
gwaslab/g_Phenotypes.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
9
|
-
gwaslab/g_Sumstats.py,sha256=
|
|
10
|
-
gwaslab/g_SumstatsMulti.py,sha256=
|
|
9
|
+
gwaslab/g_Sumstats.py,sha256=BKHF4YWPXZBW9XXU9KKkvkhInXZYducvDdC8q7kstbI,43930
|
|
10
|
+
gwaslab/g_SumstatsMulti.py,sha256=kYlbmvq3_PLnr4Car6DV5RIItmvCvznfUAjlYguu-2o,14016
|
|
11
11
|
gwaslab/g_SumstatsPair.py,sha256=PmVPGU32degDuU5RDG9igyT1sFAbEDh6alrRulUphyk,13181
|
|
12
12
|
gwaslab/g_SumstatsSet.py,sha256=AiTISWPfmu8NTGa8j9Yuts8DNw1pEUENYyPoS0HXp5I,29866
|
|
13
13
|
gwaslab/g_SumstatsT.py,sha256=u_DighLMnMxwTLnqm-B58pA0G6WXRj6pudPyKMVKjSU,2133
|
|
@@ -18,13 +18,13 @@ gwaslab/g_meta.py,sha256=pXtSsQfFPv2UJmOxKMmLtcsp_Ku_H73YP7PnlfMd0sg,6472
|
|
|
18
18
|
gwaslab/g_meta_update.py,sha256=dWgz4kcq9bvsXycCjfhoYtcJHlEP4HRdYoQ8KFqMyTQ,2490
|
|
19
19
|
gwaslab/g_vchange_status.py,sha256=w3zsYYOcCaI3PTeboonvkQjudzUAfVIgATzRdiPViZs,1939
|
|
20
20
|
gwaslab/g_vchange_status_polars.py,sha256=kxyGQCur0ibVFBCyZghA-XNf_kLDXKK-l7VC-Om2IdA,1839
|
|
21
|
-
gwaslab/g_version.py,sha256=
|
|
21
|
+
gwaslab/g_version.py,sha256=YdDG4Pd2xl9SjNiP8yq5slF3aQ4KCaQj83-AWW_edBk,1964
|
|
22
22
|
gwaslab/hm_casting.py,sha256=xoq1E4Tp5VC4aLWfq9-_AfiQzb1WZAHrnZG33W4sCOE,14178
|
|
23
|
-
gwaslab/hm_casting_polars.py,sha256=
|
|
23
|
+
gwaslab/hm_casting_polars.py,sha256=CAPfCucj-ARtwP80EuHc9q2gLdj8TL_XQ7_sEC9LxA0,11440
|
|
24
24
|
gwaslab/hm_harmonize_sumstats.py,sha256=2MeWnWmMHpLWjUMTVqExpg_3mE1VIaBsh6Mz3ffJCMc,84761
|
|
25
25
|
gwaslab/hm_rsid_to_chrpos.py,sha256=ODWREO0jPN0RAfNzL5fRzSRANfhiksOvUVPuEsFZQqA,6552
|
|
26
26
|
gwaslab/io_load_ld.py,sha256=pJemMmHn5GrEbIloqGPX3tBStjkA6DVrAoerGOUBbqc,21827
|
|
27
|
-
gwaslab/io_preformat_input.py,sha256=
|
|
27
|
+
gwaslab/io_preformat_input.py,sha256=jIacIVymCfHVBlonUCFRmUJobLcxMWn2w_vWqXjESPg,26538
|
|
28
28
|
gwaslab/io_preformat_input_polars.py,sha256=HGdi6rXPQnYjTW8fMUds-uF6Lt8uElL3Er_Afv3OjTc,24767
|
|
29
29
|
gwaslab/io_process_args.py,sha256=TIv0DyaVEcHnLBGdOD52GBZiO6nAQJycAmmVdEYPmRE,1918
|
|
30
30
|
gwaslab/io_read_ldsc.py,sha256=9tV4AfQZmCAyiNSR9uALmXWOytWhBdT0pfMAY5Mx_QQ,13407
|
|
@@ -44,7 +44,7 @@ gwaslab/prscs_parse_genet.py,sha256=N7UmyvdO--yTKvbjMNQCVucRIs4PbRGf93maGkh8PP4,
|
|
|
44
44
|
gwaslab/qc_build.py,sha256=oeJqV-zbn-9FZ7SsmT4DPuYTt_IIeXw0XtmEkSzN5qA,2145
|
|
45
45
|
gwaslab/qc_check_datatype.py,sha256=XuL4sg-OkdIiGaHg98JHZems0Uo-OyF5DlUTyE9gUd4,4580
|
|
46
46
|
gwaslab/qc_check_datatype_polars.py,sha256=rJ1dIruxclHi37zd5xpS1ml30-200NI-FoEAVTe9_Eo,4218
|
|
47
|
-
gwaslab/qc_fix_sumstats.py,sha256=
|
|
47
|
+
gwaslab/qc_fix_sumstats.py,sha256=qjIJxBr_6HpKQLkKRPrbLZEEOr5DzP8Go82AOxgDadY,98448
|
|
48
48
|
gwaslab/qc_fix_sumstats_polars.py,sha256=5DY2PkWiZdfY-k8jXW69YnYPUmJiAw8uaolG8Oztr5g,9600
|
|
49
49
|
gwaslab/run_script.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
50
50
|
gwaslab/util_abf_finemapping.py,sha256=LRcopjtkT-iXtKPAJIzR4qjPdhD7nrS_BGit4EW89FM,3054
|
|
@@ -60,14 +60,14 @@ gwaslab/util_ex_process_h5.py,sha256=ynFvo3zxgvOxWYL565v2IQf8P6iEuq7UlKQ_ULxrd6Y
|
|
|
60
60
|
gwaslab/util_ex_process_ref.py,sha256=GQ0ZEWLxGpHLdBs3tqnAqKn3Pqx1A1YvNbYrBLBvXeg,17126
|
|
61
61
|
gwaslab/util_ex_run_2samplemr.py,sha256=eIw-bHlYpgqgRnAhWIWNTbMplVbH4Dbj9kDyDBtzkT0,10423
|
|
62
62
|
gwaslab/util_ex_run_ccgwas.py,sha256=8uOAaJ44zAhlxj_A2vth5AzRLk2_BYlYBXEccFbB6T0,5959
|
|
63
|
-
gwaslab/util_ex_run_clumping.py,sha256=
|
|
63
|
+
gwaslab/util_ex_run_clumping.py,sha256=7JdHP2XmJS1b0yJObxXDKvEXuZ6wezHvvUMFEzVcswY,8081
|
|
64
64
|
gwaslab/util_ex_run_coloc.py,sha256=evLJ_ct_RV7UKLnYGJ_VfT6MeuGeYDtj8M8xqqk-X-U,6297
|
|
65
65
|
gwaslab/util_ex_run_hyprcoloc.py,sha256=sElGLXsBKx3PpDTOET7ulvjBShtDOJ3OyDuOp3Yl_y0,4722
|
|
66
66
|
gwaslab/util_ex_run_magma.py,sha256=40Mr9IIkUXTHa3bBfROORr-5iVre-W8SeoZhHjh7aTo,2436
|
|
67
67
|
gwaslab/util_ex_run_mesusie.py,sha256=g0x7-zwoN9fbHYJQAue3vAMIeFu3x8H9KjgiYI1u9Mk,5532
|
|
68
68
|
gwaslab/util_ex_run_mtag.py,sha256=TxfDwjbGy5C1SiTVDMNopcSjl9p5mgCjJVBfeLq__bg,2952
|
|
69
69
|
gwaslab/util_ex_run_prscs.py,sha256=_BOUqX3fgALdGx-xDyWlREXCafZZddhcK8ufoESUaac,3396
|
|
70
|
-
gwaslab/util_ex_run_scdrs.py,sha256=
|
|
70
|
+
gwaslab/util_ex_run_scdrs.py,sha256=cs1-6QMB2uixa7j97vN7xe3NQ8aQwZ1QAmfj_cc-Kec,3024
|
|
71
71
|
gwaslab/util_ex_run_susie.py,sha256=YbHishvu7rT83JSHw_Tb_FKzfkZ296YpvNhBesveYR4,6332
|
|
72
72
|
gwaslab/util_in_calculate_gc.py,sha256=MWOXVzJv7SZx4i2_ncRiqsiEOADc7EfghaUzgGy4jaE,2219
|
|
73
73
|
gwaslab/util_in_calculate_power.py,sha256=JfHJFg3tNF0f4NHgWlzVW2mSxCiP07mAHIyEfVfxTak,10360
|
|
@@ -85,17 +85,17 @@ gwaslab/util_in_snphwe.py,sha256=-KpIDx6vn_nah6H55IkV2OyjXQVXV13XyBL069WE1wM,175
|
|
|
85
85
|
gwaslab/viz_aux_annotate_plot.py,sha256=IyGhqFQofrVW9A8UxJ5oNVH96czQ-2_i4s1lVvf2hww,25696
|
|
86
86
|
gwaslab/viz_aux_chromatin.py,sha256=aWZaXOSvGyZY7wQcoFDaqHRYCSHZbi_K4Q70HruN9ts,4125
|
|
87
87
|
gwaslab/viz_aux_property.py,sha256=UIaivghnLXYpTwkKnXRK0F28Jbn9L6OaICk3K73WZaU,33
|
|
88
|
-
gwaslab/viz_aux_quickfix.py,sha256=
|
|
88
|
+
gwaslab/viz_aux_quickfix.py,sha256=v_ZYM2KO39qvk38t0SwopVG3yHjW5MB9DzHX6kvdh1k,18692
|
|
89
89
|
gwaslab/viz_aux_reposition_text.py,sha256=iRIP-Rkltlei068HekJcVubiqPrunBqvAoSQ1eHk04M,4304
|
|
90
90
|
gwaslab/viz_aux_save_figure.py,sha256=HwIRDMYpeXfkBgb7mqzLN7OVPMz163U-ZVOlQJABzeg,2811
|
|
91
91
|
gwaslab/viz_plot_compare_af.py,sha256=qtXW45-Sq_ugK8ZfqBYMpmf58SKi3lB3YyHnzn_akcE,5344
|
|
92
|
-
gwaslab/viz_plot_compare_effect.py,sha256
|
|
92
|
+
gwaslab/viz_plot_compare_effect.py,sha256=QC3TsxKLk1bpiNNO0xh5fQRVcTcETmG3Zr5PXSUX3QY,69480
|
|
93
93
|
gwaslab/viz_plot_credible_sets.py,sha256=RC5ZsuW8-0w0S1h4c--PZrYwfHfgZ3clM-9JcoMLJWk,5841
|
|
94
94
|
gwaslab/viz_plot_effect.py,sha256=qbM6c1IB2HlUlMNgFZlJ5G8ODQJ8-oSWD8t0Q8DDuz8,10653
|
|
95
95
|
gwaslab/viz_plot_forestplot.py,sha256=xgOnefh737CgdQxu5naVyRNBX1NQXPFKzf51fbh6afs,6771
|
|
96
96
|
gwaslab/viz_plot_miamiplot.py,sha256=rCFEp7VNuVqeBBG3WRkmFAtFklbF79BvIQQYiSY70VY,31238
|
|
97
|
-
gwaslab/viz_plot_miamiplot2.py,sha256=
|
|
98
|
-
gwaslab/viz_plot_mqqplot.py,sha256=
|
|
97
|
+
gwaslab/viz_plot_miamiplot2.py,sha256=5O4Ho8_FsSkBcunFVlbAkYuLAMxNqE6swLVtmvkoR6c,17495
|
|
98
|
+
gwaslab/viz_plot_mqqplot.py,sha256=W0rKC8I0KrUvv5zakiTcPTEF_ttrUucrwoFS5MHLIyQ,71283
|
|
99
99
|
gwaslab/viz_plot_phe_heatmap.py,sha256=qoXVeFTIm-n8IinNbDdPFVBSz2yGCGK6QzTstXv6aj4,9532
|
|
100
100
|
gwaslab/viz_plot_qqplot.py,sha256=cB4vRlFv69zWY9NMLfSkfAbirYp3_EEW2kQiBTEMDoc,7483
|
|
101
101
|
gwaslab/viz_plot_regional2.py,sha256=BoL1V56ww9B2_vFkABgln_f6OrzobiFjUISI5X6XXMM,43146
|
|
@@ -112,9 +112,9 @@ gwaslab/data/hapmap3_SNPs/hapmap3_db150_hg19.snplist.gz,sha256=qD9RsC5S2h6l-OdpW
|
|
|
112
112
|
gwaslab/data/hapmap3_SNPs/hapmap3_db151_hg38.snplist.gz,sha256=Y8ZT2FIAhbhlgCJdE9qQVAiwnV_fcsPt72usBa7RSBM,10225828
|
|
113
113
|
gwaslab/data/high_ld/high_ld_hla_hg19.bed.gz,sha256=R7IkssKu0L4WwkU9SrS84xCMdrkkKL0gnTNO_OKbG0Y,219
|
|
114
114
|
gwaslab/data/high_ld/high_ld_hla_hg38.bed.gz,sha256=76CIU0pibDJ72Y6UY-TbIKE9gEPwTELAaIbCXyjm80Q,470
|
|
115
|
-
gwaslab-3.6.
|
|
116
|
-
gwaslab-3.6.
|
|
117
|
-
gwaslab-3.6.
|
|
118
|
-
gwaslab-3.6.
|
|
119
|
-
gwaslab-3.6.
|
|
120
|
-
gwaslab-3.6.
|
|
115
|
+
gwaslab-3.6.4.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
|
116
|
+
gwaslab-3.6.4.dist-info/licenses/LICENSE_before_v3.4.39,sha256=GhLOU_1UDEKeOacYhsRN_m9u-eIuVTazSndZPeNcTZA,1066
|
|
117
|
+
gwaslab-3.6.4.dist-info/METADATA,sha256=0-B3gOWawfkr19AO_m-H8S-Mgtxe5o_yvCAGCJx59_Y,7073
|
|
118
|
+
gwaslab-3.6.4.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
119
|
+
gwaslab-3.6.4.dist-info/top_level.txt,sha256=PyY6hWtrALpv2MAN3kjkIAzJNmmBTH5a2risz9KwH08,8
|
|
120
|
+
gwaslab-3.6.4.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|