servalcat 0.4.131__cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.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.
- servalcat/__init__.py +10 -0
- servalcat/__main__.py +120 -0
- servalcat/ext.cpython-314t-x86_64-linux-gnu.so +0 -0
- servalcat/refine/__init__.py +0 -0
- servalcat/refine/cgsolve.py +100 -0
- servalcat/refine/refine.py +1162 -0
- servalcat/refine/refine_geom.py +245 -0
- servalcat/refine/refine_spa.py +400 -0
- servalcat/refine/refine_xtal.py +339 -0
- servalcat/refine/spa.py +151 -0
- servalcat/refine/xtal.py +312 -0
- servalcat/refmac/__init__.py +0 -0
- servalcat/refmac/exte.py +191 -0
- servalcat/refmac/refmac_keywords.py +660 -0
- servalcat/refmac/refmac_wrapper.py +423 -0
- servalcat/spa/__init__.py +0 -0
- servalcat/spa/fofc.py +488 -0
- servalcat/spa/fsc.py +391 -0
- servalcat/spa/localcc.py +197 -0
- servalcat/spa/realspcc_from_var.py +128 -0
- servalcat/spa/run_refmac.py +979 -0
- servalcat/spa/shift_maps.py +293 -0
- servalcat/spa/shiftback.py +137 -0
- servalcat/spa/translate.py +129 -0
- servalcat/utils/__init__.py +35 -0
- servalcat/utils/commands.py +1629 -0
- servalcat/utils/fileio.py +836 -0
- servalcat/utils/generate_operators.py +296 -0
- servalcat/utils/hkl.py +811 -0
- servalcat/utils/logger.py +140 -0
- servalcat/utils/maps.py +345 -0
- servalcat/utils/model.py +933 -0
- servalcat/utils/refmac.py +759 -0
- servalcat/utils/restraints.py +888 -0
- servalcat/utils/symmetry.py +298 -0
- servalcat/xtal/__init__.py +0 -0
- servalcat/xtal/french_wilson.py +262 -0
- servalcat/xtal/run_refmac_small.py +240 -0
- servalcat/xtal/sigmaa.py +1954 -0
- servalcat/xtal/twin.py +316 -0
- servalcat-0.4.131.dist-info/METADATA +60 -0
- servalcat-0.4.131.dist-info/RECORD +45 -0
- servalcat-0.4.131.dist-info/WHEEL +6 -0
- servalcat-0.4.131.dist-info/entry_points.txt +4 -0
- servalcat-0.4.131.dist-info/licenses/LICENSE +373 -0
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Author: "Keitaro Yamashita, Garib N. Murshudov"
|
|
3
|
+
MRC Laboratory of Molecular Biology
|
|
4
|
+
|
|
5
|
+
This software is released under the
|
|
6
|
+
Mozilla Public License, version 2.0; see LICENSE.
|
|
7
|
+
"""
|
|
8
|
+
from __future__ import absolute_import, division, print_function, generators
|
|
9
|
+
import gemmi
|
|
10
|
+
import numpy
|
|
11
|
+
import scipy.integrate
|
|
12
|
+
import os
|
|
13
|
+
import argparse
|
|
14
|
+
from servalcat.utils import logger
|
|
15
|
+
from servalcat import utils
|
|
16
|
+
from servalcat import spa
|
|
17
|
+
|
|
18
|
+
def add_arguments(parser):
|
|
19
|
+
parser.description = 'Calculate real space correlation radius from variances in reciprocal space'
|
|
20
|
+
parser.add_argument("--halfmaps", nargs=2)
|
|
21
|
+
parser.add_argument('--pixel_size', type=float,
|
|
22
|
+
help='Override pixel size (A)')
|
|
23
|
+
parser.add_argument("-d", '--resolution', type=float, required=True)
|
|
24
|
+
parser.add_argument('-m', '--mask', help="mask file")
|
|
25
|
+
parser.add_argument('-w', '--weight', help="weight")
|
|
26
|
+
parser.add_argument('-f', choices=["noise", "signal", "total"], required=True)
|
|
27
|
+
parser.add_argument('--sharpen_signal', action="store_true", help="")
|
|
28
|
+
parser.add_argument('--x_max', type=float, default=20)
|
|
29
|
+
parser.add_argument("-B", type=float, help="Sharpening (negative)/blurring (positive) B value")
|
|
30
|
+
parser.add_argument('--find_B_at', type=float, help="")
|
|
31
|
+
parser.add_argument('-o','--output_prefix', default="cc",
|
|
32
|
+
help='output file name prefix')
|
|
33
|
+
# add_arguments()
|
|
34
|
+
|
|
35
|
+
def parse_args(arg_list):
|
|
36
|
+
parser = argparse.ArgumentParser()
|
|
37
|
+
add_arguments(parser)
|
|
38
|
+
return parser.parse_args(arg_list)
|
|
39
|
+
# parse_args()
|
|
40
|
+
|
|
41
|
+
def integ_var(x, s_list, w_list, B):
|
|
42
|
+
tinv = numpy.exp(-B*s_list**2/2) if B is not None else 1.
|
|
43
|
+
return scipy.integrate.simps(s_list**2 * tinv * w_list * numpy.sinc(2*numpy.abs(s_list)*numpy.abs(x)),
|
|
44
|
+
s_list)
|
|
45
|
+
|
|
46
|
+
def calc_var(hkldata, kind="noise", sharpen_signal=False, weight=None):
|
|
47
|
+
wsq = None
|
|
48
|
+
if kind == "noise":
|
|
49
|
+
wsq = hkldata.binned_df["ml"].var_noise.to_numpy(copy=True)
|
|
50
|
+
elif kind == "signal":
|
|
51
|
+
wsq = hkldata.binned_df["ml"].var_signal.to_numpy(copy=True)
|
|
52
|
+
elif kind == "total":
|
|
53
|
+
wsq = hkldata.binned_df["ml"].var_signal.to_numpy() + hkldata.binned_df["ml"].var_noise.to_numpy()
|
|
54
|
+
else:
|
|
55
|
+
raise RuntimeError("unknown kind")
|
|
56
|
+
|
|
57
|
+
if sharpen_signal:
|
|
58
|
+
wsq /= hkldata.binned_df["ml"].var_signal.to_numpy()
|
|
59
|
+
|
|
60
|
+
if weight is None:
|
|
61
|
+
wsq *= 1.
|
|
62
|
+
elif weight == "fscfull":
|
|
63
|
+
wsq *= hkldata.binned_df["ml"].FSCfull.to_numpy()**2
|
|
64
|
+
else:
|
|
65
|
+
raise RuntimeError("unknown weight")
|
|
66
|
+
|
|
67
|
+
return wsq
|
|
68
|
+
# calc_var()
|
|
69
|
+
|
|
70
|
+
def find_b(hkldata, smax, x, kind="noise", sharpen_signal=False, weight=None): # XXX unfinished
|
|
71
|
+
bin_s = 0.5*(1./hkldata.binned_df["ml"][["d_min", "d_max"]]).sum(axis=1).to_numpy() # 0.5 * (1/d_max + 1/d_min)
|
|
72
|
+
logger.writeln("kind= {} sharpen_signal={}, weight={}".format(kind, sharpen_signal, weight))
|
|
73
|
+
wsq = calc_var(hkldata, kind, sharpen_signal, weight)
|
|
74
|
+
for B in -numpy.arange(0,100,5):
|
|
75
|
+
cov_xx = integ_var(0., bin_s, wsq, B)
|
|
76
|
+
cov_xy = integ_var(x, bin_s, wsq, B)
|
|
77
|
+
print(B, cov_xy/cov_xx)
|
|
78
|
+
# find_b()
|
|
79
|
+
|
|
80
|
+
def calc_cc_from_var(hkldata, x_list, kind="noise", sharpen_signal=False, weight=None, B=None):
|
|
81
|
+
bin_s = 0.5*(1./hkldata.binned_df["ml"][["d_min", "d_max"]]).sum(axis=1).to_numpy() # 0.5 * (1/d_max + 1/d_min)
|
|
82
|
+
logger.writeln("kind= {} sharpen_signal={}, weight={}".format(kind, sharpen_signal, weight))
|
|
83
|
+
wsq = calc_var(hkldata, kind, sharpen_signal, weight)
|
|
84
|
+
cov_xx = integ_var(0., bin_s, wsq, B)
|
|
85
|
+
cov_xy = integ_var(x_list[:,None], bin_s, wsq, B)
|
|
86
|
+
cc_all = cov_xy / cov_xx
|
|
87
|
+
return cc_all
|
|
88
|
+
# calc_cc_from_var()
|
|
89
|
+
|
|
90
|
+
def main(args):
|
|
91
|
+
maps = utils.fileio.read_halfmaps(args.halfmaps, pixel_size=args.pixel_size)
|
|
92
|
+
if args.mask:
|
|
93
|
+
mask = utils.fileio.read_ccp4_map(args.mask)[0]
|
|
94
|
+
else:
|
|
95
|
+
mask = None
|
|
96
|
+
|
|
97
|
+
hkldata = utils.maps.mask_and_fft_maps(maps, args.resolution, mask)
|
|
98
|
+
hkldata.setup_relion_binning("ml")
|
|
99
|
+
utils.maps.calc_noise_var_from_halfmaps(hkldata)
|
|
100
|
+
|
|
101
|
+
smax = 1. / args.resolution
|
|
102
|
+
if args.find_B_at is not None:
|
|
103
|
+
find_b(hkldata, smax, args.find_B_at,
|
|
104
|
+
kind=args.f, sharpen_signal=args.sharpen_signal, weight=args.weight)
|
|
105
|
+
else:
|
|
106
|
+
x_all = numpy.arange(0, args.x_max, 0.1)
|
|
107
|
+
cc_all = calc_cc_from_var(hkldata, x_list=x_all, kind=args.f,
|
|
108
|
+
sharpen_signal=args.sharpen_signal, weight=args.weight,
|
|
109
|
+
B=args.B)
|
|
110
|
+
|
|
111
|
+
ofs = open("{}.dat".format(args.output_prefix), "w")
|
|
112
|
+
ofs.write("# smax= {}\n".format(smax))
|
|
113
|
+
ofs.write("# halfmaps= {}\n".format(*args.halfmaps))
|
|
114
|
+
ofs.write("# mask= {}\n".format(args.mask))
|
|
115
|
+
ofs.write("# weight= {}\n".format(args.weight))
|
|
116
|
+
ofs.write("# f= {}\n".format(args.f))
|
|
117
|
+
ofs.write("x cc dmin weight f sharpen b\n")
|
|
118
|
+
for x, cc in zip(x_all, cc_all):
|
|
119
|
+
ofs.write("{:.2f} {:.4f} {:.2f} {} {} {} {}\n".format(x, cc, args.resolution, args.weight, args.f,
|
|
120
|
+
"TRUE" if args.sharpen_signal else "FALSE",
|
|
121
|
+
args.B))
|
|
122
|
+
# main()
|
|
123
|
+
|
|
124
|
+
if __name__ == "__main__":
|
|
125
|
+
import sys
|
|
126
|
+
args = parse_args(sys.argv[1:])
|
|
127
|
+
main(args)
|
|
128
|
+
|