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.
Files changed (45) hide show
  1. servalcat/__init__.py +10 -0
  2. servalcat/__main__.py +120 -0
  3. servalcat/ext.cpython-314t-x86_64-linux-gnu.so +0 -0
  4. servalcat/refine/__init__.py +0 -0
  5. servalcat/refine/cgsolve.py +100 -0
  6. servalcat/refine/refine.py +1162 -0
  7. servalcat/refine/refine_geom.py +245 -0
  8. servalcat/refine/refine_spa.py +400 -0
  9. servalcat/refine/refine_xtal.py +339 -0
  10. servalcat/refine/spa.py +151 -0
  11. servalcat/refine/xtal.py +312 -0
  12. servalcat/refmac/__init__.py +0 -0
  13. servalcat/refmac/exte.py +191 -0
  14. servalcat/refmac/refmac_keywords.py +660 -0
  15. servalcat/refmac/refmac_wrapper.py +423 -0
  16. servalcat/spa/__init__.py +0 -0
  17. servalcat/spa/fofc.py +488 -0
  18. servalcat/spa/fsc.py +391 -0
  19. servalcat/spa/localcc.py +197 -0
  20. servalcat/spa/realspcc_from_var.py +128 -0
  21. servalcat/spa/run_refmac.py +979 -0
  22. servalcat/spa/shift_maps.py +293 -0
  23. servalcat/spa/shiftback.py +137 -0
  24. servalcat/spa/translate.py +129 -0
  25. servalcat/utils/__init__.py +35 -0
  26. servalcat/utils/commands.py +1629 -0
  27. servalcat/utils/fileio.py +836 -0
  28. servalcat/utils/generate_operators.py +296 -0
  29. servalcat/utils/hkl.py +811 -0
  30. servalcat/utils/logger.py +140 -0
  31. servalcat/utils/maps.py +345 -0
  32. servalcat/utils/model.py +933 -0
  33. servalcat/utils/refmac.py +759 -0
  34. servalcat/utils/restraints.py +888 -0
  35. servalcat/utils/symmetry.py +298 -0
  36. servalcat/xtal/__init__.py +0 -0
  37. servalcat/xtal/french_wilson.py +262 -0
  38. servalcat/xtal/run_refmac_small.py +240 -0
  39. servalcat/xtal/sigmaa.py +1954 -0
  40. servalcat/xtal/twin.py +316 -0
  41. servalcat-0.4.131.dist-info/METADATA +60 -0
  42. servalcat-0.4.131.dist-info/RECORD +45 -0
  43. servalcat-0.4.131.dist-info/WHEEL +6 -0
  44. servalcat-0.4.131.dist-info/entry_points.txt +4 -0
  45. 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
+