servalcat 0.4.72__cp312-cp312-macosx_11_0_arm64.whl → 0.4.99__cp312-cp312-macosx_11_0_arm64.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 servalcat might be problematic. Click here for more details.

servalcat/xtal/twin.py ADDED
@@ -0,0 +1,121 @@
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 argparse
10
+ import gemmi
11
+ import numpy
12
+ import pandas
13
+ from servalcat.utils import logger
14
+ from servalcat import utils
15
+ from servalcat import ext
16
+
17
+ def find_twin_domains_from_data(hkldata, max_oblique=5, min_alpha=0.05):
18
+ logger.writeln("Finding possible twin operators from data")
19
+ ops = gemmi.find_twin_laws(hkldata.cell, hkldata.sg, max_oblique, False)
20
+ logger.writeln(f" {len(ops)} possible twin operator(s) found")
21
+ #for op in ops:
22
+ # logger.writeln(f" {op.triplet()}")
23
+ if not ops:
24
+ return
25
+ twin_data = ext.TwinData()
26
+ twin_data.setup(hkldata.miller_array(), hkldata.df.bin, hkldata.sg, hkldata.cell, ops)
27
+ if "I" in hkldata.df:
28
+ Io = hkldata.df.I.to_numpy()
29
+ else:
30
+ Io = hkldata.df.FP.to_numpy()**2
31
+ alphas = []
32
+ ccs, nums = [], []
33
+ for i_bin, bin_idxes in hkldata.binned():
34
+ ratios = [1.]
35
+ ccs.append([])
36
+ nums.append([])
37
+ for i_op, op in enumerate(ops):
38
+ ii = numpy.array(twin_data.pairs(i_op, i_bin))
39
+ val = numpy.all(numpy.isfinite(Io[ii]), axis=1)
40
+ if numpy.sum(val) == 0:
41
+ cc = numpy.nan
42
+ else:
43
+ cc = numpy.corrcoef(Io[ii][val].T)[0,1]
44
+ rr = (1 - numpy.sqrt(1 - cc**2)) / cc
45
+ ratios.append(rr)
46
+ ccs[-1].append(cc)
47
+ nums[-1].append(len(val))
48
+ alphas.append(numpy.array(ratios) / numpy.nansum(ratios))
49
+ alphas = numpy.maximum(0, numpy.mean(alphas, axis=0))
50
+ alphas /= numpy.nansum(alphas)
51
+ ccs = numpy.array(ccs)
52
+ nums = numpy.array(nums)
53
+ tmp = [{"Operator": gemmi.Op().triplet(),
54
+ "R_twin_obs": 0,
55
+ "CC_mean": 1,
56
+ "Alpha_from_CC": alphas[0]}]
57
+ for i_op, op in enumerate(ops):
58
+ ii = numpy.array(twin_data.pairs(i_op))
59
+ val = numpy.all(numpy.isfinite(Io[ii]), axis=1)
60
+ if numpy.sum(val) == 0:
61
+ r_obs = numpy.nan
62
+ else:
63
+ r_obs = numpy.sum(numpy.abs(Io[ii][val, 0] - Io[ii][val, 1])) / numpy.sum(Io[ii][val])
64
+ tmp.append({"Operator": op.triplet(),
65
+ "CC_mean": numpy.sum(nums[:,i_op] * ccs[:,i_op]) / numpy.sum(nums[:,i_op]),
66
+ "R_twin_obs": r_obs,
67
+ "Alpha_from_CC": alphas[i_op+1],
68
+ })
69
+ df = pandas.DataFrame(tmp)
70
+ logger.writeln(df.to_string(float_format="%.2f"))
71
+
72
+ sel_idxes = [i for i, a in enumerate(alphas) if i > 0 and a > min_alpha]
73
+ if not sel_idxes:
74
+ logger.writeln(" No twinning detected")
75
+ return
76
+
77
+ if len(sel_idxes) + 1 != len(alphas):
78
+ ops = [ops[i-1] for i in sel_idxes]
79
+ logger.writeln(" Twin operators after filtering small fractions")
80
+ alphas = numpy.array([alphas[0]] + [alphas[i] for i in sel_idxes])
81
+ alphas /= numpy.sum(alphas)
82
+ df = pandas.DataFrame({"Operator": [x.triplet() for x in [gemmi.Op()]+ops],
83
+ "Alpha": alphas})
84
+ logger.writeln(df.to_string(float_format="%.2f"))
85
+ twin_data = ext.TwinData()
86
+ twin_data.setup(hkldata.miller_array(), hkldata.df.bin, hkldata.sg, hkldata.cell, ops)
87
+ twin_data.alphas = alphas
88
+ if "I" not in hkldata.df:
89
+ logger.writeln('Generating "observed" intensities for twin refinement: Io = Fo**2, SigIo = 2*F*SigFo')
90
+ hkldata.df["I"] = hkldata.df.FP**2
91
+ hkldata.df["SIGI"] = 2 * hkldata.df.FP * hkldata.df.SIGFP
92
+ return twin_data
93
+
94
+ # find_twin_domains_from_data()
95
+
96
+ def estimate_twin_fractions_from_model(twin_data, hkldata):
97
+ logger.writeln("Estimating twin fractions")
98
+ Ic = numpy.abs(twin_data.f_calc.sum(axis=1))**2
99
+ Ic_all = Ic[twin_data.twin_related(hkldata.sg)]
100
+ rr = twin_data.obs_related_asu()
101
+ tmp = []
102
+ for i_bin, bin_idxes in hkldata.binned():
103
+ cc_o_c = []
104
+ i_tmp = Ic_all[numpy.asarray(twin_data.bin)==i_bin,:]
105
+ P = numpy.corrcoef(i_tmp.T)
106
+ iobs = hkldata.df.I.to_numpy()[bin_idxes]
107
+ ic_bin = Ic[rr[bin_idxes,:]]
108
+ val = numpy.isfinite(iobs) & numpy.isfinite(ic_bin).all(axis=1)
109
+ iobs, ic_bin = iobs[val], ic_bin[val,:]
110
+ cc_o_c = [numpy.corrcoef(iobs, ic_bin[:,i])[0,1] for i in range(len(twin_data.ops)+1)]
111
+ frac_est = numpy.dot(numpy.linalg.pinv(P), cc_o_c)
112
+ tmp.append(frac_est.tolist())
113
+
114
+ df = pandas.DataFrame(tmp)
115
+ df.iloc[:,:] /= df.sum(axis=1).to_numpy()[:,None]
116
+ mean_alphas = numpy.maximum(0, df.mean())
117
+ mean_alphas /= numpy.sum(mean_alphas)
118
+ logger.write(" Estimated fractions from data-model correlations: ")
119
+ logger.writeln(" ".join("%.2f"%x for x in mean_alphas))
120
+ twin_data.alphas = mean_alphas
121
+
@@ -1,16 +1,16 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: servalcat
3
- Version: 0.4.72
3
+ Version: 0.4.99
4
4
  Summary: Structure refinement and validation for crystallography and single particle analysis
5
5
  Author: Keitaro Yamashita, Garib N. Murshudov
6
6
  License: MPL-2.0
7
7
  Project-URL: Repository, https://github.com/keitaroyam/servalcat
8
- Requires-Python: >=3.7
8
+ Requires-Python: >=3.8
9
9
  Requires-Dist: packaging
10
10
  Requires-Dist: numpy>=1.15
11
11
  Requires-Dist: scipy
12
12
  Requires-Dist: pandas>=1.1.0
13
- Requires-Dist: gemmi==0.6.6
13
+ Requires-Dist: gemmi==0.7.0
14
14
  Description-Content-Type: text/markdown
15
15
 
16
16
  # Servalcat
@@ -40,7 +40,7 @@ pip install servalcat
40
40
  ```
41
41
  will install the stable version.
42
42
 
43
- The required GEMMI version is now [v0.6.6](https://github.com/project-gemmi/gemmi/releases/tag/v0.6.6). It may not work with the latest gemmi code from the github. The policy is in the main branch I only push the code that works with the latest package of GEMMI.
43
+ The required GEMMI version is now [v0.7.0](https://github.com/project-gemmi/gemmi/releases/tag/v0.7.0). It may not work with the latest gemmi code from the github. The policy is in the main branch I only push the code that works with the latest package of GEMMI.
44
44
 
45
45
  To use the Refmac5 related commands, you also need to install [CCP4](https://www.ccp4.ac.uk/). For "No Refmac5" commands, you may just need [the monomer library](https://github.com/MonomerLibrary/monomers) if CCP4 is not installed.
46
46
 
@@ -0,0 +1,45 @@
1
+ servalcat-0.4.99.dist-info/RECORD,,
2
+ servalcat-0.4.99.dist-info/WHEEL,sha256=bS2kxwU1pioFffhNQmlfvjD0H1flBf5ZtxV4jDj8Nvc,114
3
+ servalcat-0.4.99.dist-info/entry_points.txt,sha256=G1mDxhOCdF3umYz4k0kfwJbSdYSKqhvQdGCmrP8FRAY,111
4
+ servalcat-0.4.99.dist-info/METADATA,sha256=OxT6LeODHswv4-Yg1Xtv6pjkvHjriRcZNFfq5asJObs,2741
5
+ servalcat-0.4.99.dist-info/licenses/LICENSE,sha256=HyVuytGSiAUQ6ErWBHTqt1iSGHhLmlC8fO7jTCuR8dU,16725
6
+ servalcat/__init__.py,sha256=Wzar8K8OYk-xh70qv6hGajtSKjXH3qL93fHLMDTEh4w,231
7
+ servalcat/ext.cpython-312-darwin.so,sha256=8LSy8m2v2-tK9zbONRrk2mHH2GVonTQNuKiQzGlJFdU,1219592
8
+ servalcat/__main__.py,sha256=bNEZKrG5765uOp32UiBAJmeJi3O0sk4I5QjrXUbngIE,4070
9
+ servalcat/refmac/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
+ servalcat/refmac/refmac_keywords.py,sha256=yzYSJELMjdTnf4pT0_8EdIOjCDncqkjpPJ3VNcsFDrU,26649
11
+ servalcat/refmac/exte.py,sha256=HtmlTHRzCeCN-vSJZdKCD1GIhQO6zTe1OKLUObC3gZ8,9019
12
+ servalcat/refmac/refmac_wrapper.py,sha256=euuhBv2F_ArmUvlfAA9fld4oCDkWMZENP73ioTtv118,17838
13
+ servalcat/xtal/twin.py,sha256=lmBz0no9lfjq6MNkK9Q-9R47a0xGkDfaBYrOWunqyBI,4900
14
+ servalcat/xtal/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
15
+ servalcat/xtal/sigmaa.py,sha256=mTGKfjnrZGAee-TNZUovOd5mTCDZ10Xri8t2mY4l8Tg,75326
16
+ servalcat/xtal/french_wilson.py,sha256=GE3WEPhuizDVSPq1Afyb1O-OPTlzKDXYhkDCIELWI_0,11787
17
+ servalcat/xtal/run_refmac_small.py,sha256=Yg-bEPuOdQxCwdwY8StCvXabcWHrRl6A22gJgLsypeU,10394
18
+ servalcat/utils/symmetry.py,sha256=ahMiaEDMyfV2YW0BkikF_ldMtIN4-usAGsNRCXGVbug,11869
19
+ servalcat/utils/generate_operators.py,sha256=fCrcTcciRn-6fpFtHYvf1oPXAObjuqR3WQejz5d0RrA,10980
20
+ servalcat/utils/maps.py,sha256=0hen0Pt9IxbGQOLZyZaGiNWBAttc6aMqb6NzrCKkZMQ,13225
21
+ servalcat/utils/__init__.py,sha256=j-fMAqHvzyMMQXb2Sf7Urnk4oQ31pT-g_NXf3K-NM4c,1137
22
+ servalcat/utils/logger.py,sha256=c84HQf7Hb1yzXZ3Syog0f5vNRnozl0OCpqi0qIMoBlY,4589
23
+ servalcat/utils/model.py,sha256=wmwYUacysc9zAXIS807sNlZGpc2cjJIa5QvUQb7eEYU,30177
24
+ servalcat/utils/restraints.py,sha256=V2QBfgSH636upbLtGany4QyBk3r05CLxqvJYiM1SLSQ,36960
25
+ servalcat/utils/refmac.py,sha256=LKwgCtLg7R5D8mjI7yCGd2lrjcjTeEJVAo1pey2u3IU,30922
26
+ servalcat/utils/commands.py,sha256=dxsbPMZl-1BVKKr0rXzGF08k-Aco5qwzEHRWxZlcxek,70956
27
+ servalcat/utils/hkl.py,sha256=aH2SMAccU-cdBqSgUJ7O6D7PpzO7m_1HlRVzg9Q_4Ds,28062
28
+ servalcat/utils/fileio.py,sha256=YytwlL0SeaxHCgIzFEjfS_tRpLDmvhVDjwEnkDXw1_E,29502
29
+ servalcat/spa/shiftback.py,sha256=A9OfaZ8r2BC6A2uGXxNNhmyBNORUB_MeqJC29ZRebnw,4664
30
+ servalcat/spa/localcc.py,sha256=0otKfGKH33cFsD6Qvh8iL1mINlWqb3gqAbVKqy8fQPY,7985
31
+ servalcat/spa/translate.py,sha256=BwmVcyDbqDehjtH7kA4wQFF4hJb9c1gcHu7JbGREUTU,5099
32
+ servalcat/spa/run_refmac.py,sha256=tX0a37-aTJgADZ_NCdKbT8aE4P9Bnmm1qrFW2jc9Hw4,49550
33
+ servalcat/spa/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
34
+ servalcat/spa/fsc.py,sha256=ISsBOl5JJZA6yT2yuDHNQ4I780TrmuYW6CPvimCwDqo,17454
35
+ servalcat/spa/realspcc_from_var.py,sha256=VpdvNEY4zRza08Vz727JI6Seq-ix-oujx4Gvzy_VkYI,5275
36
+ servalcat/spa/shift_maps.py,sha256=iP1w4LNXETvZblElJ64AFMcE-lPrhx1s4SfacGktg4o,13268
37
+ servalcat/spa/fofc.py,sha256=Q97XkJX_4KWmxCIzq16R5BTMUY28V_4CPdbzF6p5Oxo,23113
38
+ servalcat/refine/xtal.py,sha256=2Sr3sqO0nfIPNS4Ry_jmDimez3uRIWUsEExRC6ps1So,14617
39
+ servalcat/refine/refine.py,sha256=W3oduNRNgc05mqMO1wYUdgN3pRrUuR9kEJ3yhAJd9jQ,44035
40
+ servalcat/refine/refine_spa.py,sha256=Iq9lDvWC8IcOzHwx5FRylBUF3mb7YgtyzICsQTSm7Tw,19162
41
+ servalcat/refine/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
42
+ servalcat/refine/spa.py,sha256=lmh4P6nQNFIdaZUKFIc_ES6B6X-FG-JkxyfpqHgtk9g,6472
43
+ servalcat/refine/cgsolve.py,sha256=tHuWXr76x4sRAMUQ4dGVJzyHF_n1LiwKHTjAwh8iFMg,3072
44
+ servalcat/refine/refine_geom.py,sha256=uATaTCEVkPJw3DjpVX66j7mhYs9Mp21rDwBfumrpwfw,11352
45
+ servalcat/refine/refine_xtal.py,sha256=DFy7FFRBP3fhcHl8JzI0FqBfdfAHE2vJNyH7kp9lXtQ,14736
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: scikit-build-core 0.9.5
2
+ Generator: scikit-build-core 0.10.7
3
3
  Root-Is-Purelib: false
4
4
  Tag: cp312-cp312-macosx_11_0_arm64
5
5
 
@@ -1,44 +0,0 @@
1
- servalcat-0.4.72.dist-info/RECORD,,
2
- servalcat-0.4.72.dist-info/WHEEL,sha256=mgQAlqZn1gpBQ0zqn0f5_muqckw_PxmecVM-Qtn7Mi0,113
3
- servalcat-0.4.72.dist-info/entry_points.txt,sha256=G1mDxhOCdF3umYz4k0kfwJbSdYSKqhvQdGCmrP8FRAY,111
4
- servalcat-0.4.72.dist-info/METADATA,sha256=TZYkYT2ZTIau48irzZGbtp_ceVKiJm0iTG0N8x5MPn8,2741
5
- servalcat-0.4.72.dist-info/licenses/LICENSE,sha256=HyVuytGSiAUQ6ErWBHTqt1iSGHhLmlC8fO7jTCuR8dU,16725
6
- servalcat/__init__.py,sha256=FjeqVIsFlkCS8CNh8kLmauTGhRN3GKyJk1EzJT-OPa8,231
7
- servalcat/ext.cpython-312-darwin.so,sha256=wditWvvIiuQzxDlR8kWMDlBAJLHIGF2fOFfcfIe2qH8,1996232
8
- servalcat/__main__.py,sha256=bNEZKrG5765uOp32UiBAJmeJi3O0sk4I5QjrXUbngIE,4070
9
- servalcat/refmac/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
- servalcat/refmac/refmac_keywords.py,sha256=0l04qPfsjTu8Ipr2e1JwnBsmnQws3iVB_E0cnnaMHdo,26512
11
- servalcat/refmac/exte.py,sha256=jlRBlNslSKPC0Gt6DZ4JFw1l9SqPDalsOv5E-5M5WN8,8847
12
- servalcat/refmac/refmac_wrapper.py,sha256=e404-q0cd8_NeIkLKC9lzfjKxS9GFqxPVSUwtNUyM3s,16658
13
- servalcat/xtal/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
- servalcat/xtal/sigmaa.py,sha256=y2bfLbesfdvi8KS3nuUkAa6CPdWNIPY73nrL2svZJTw,64792
15
- servalcat/xtal/french_wilson.py,sha256=Y90X8AwgnwOZ3sTyOD1IIAWaOV4g69zDym3CcIPJEw8,11073
16
- servalcat/xtal/run_refmac_small.py,sha256=Yg-bEPuOdQxCwdwY8StCvXabcWHrRl6A22gJgLsypeU,10394
17
- servalcat/utils/symmetry.py,sha256=H-5RBiQOp0MlWJE8LGJWvqe-YzmtzzrXfLO_2E_OpZU,11937
18
- servalcat/utils/generate_operators.py,sha256=fCrcTcciRn-6fpFtHYvf1oPXAObjuqR3WQejz5d0RrA,10980
19
- servalcat/utils/maps.py,sha256=ZoB3wwZZTLHYuwC4HBGFAYX4zmkZ8CdxD9wSLftL48c,13217
20
- servalcat/utils/__init__.py,sha256=j-fMAqHvzyMMQXb2Sf7Urnk4oQ31pT-g_NXf3K-NM4c,1137
21
- servalcat/utils/logger.py,sha256=oQcoKcM81fSsoQt_dKgwfUekJN5CcLMbti_kLb2loXM,3828
22
- servalcat/utils/model.py,sha256=cijlnPeMFIBHEQYw_CtJd2nPZXUXdsHN83h4vvelMRw,29841
23
- servalcat/utils/restraints.py,sha256=mpW-v08cGyX21FseO6AIB0babQznQpeRYwDqJWkfe8k,36032
24
- servalcat/utils/refmac.py,sha256=y18HZkpxG8pJPipCZJB3E25NiqrCpEqt_DFGuHHc3aw,30073
25
- servalcat/utils/commands.py,sha256=zkSFmdXIthC4ogvxgiHsVUyhBLZaiwflJAwP0CCBnZ8,64037
26
- servalcat/utils/hkl.py,sha256=H0QnnvXFqhmnzXAcCeCcPmpiKy7W5AOqVUmB-np4n3E,27765
27
- servalcat/utils/fileio.py,sha256=6znifeyHQ0warGJrLR6L0nCgryActgkSPzkmXEMRra8,28975
28
- servalcat/spa/shiftback.py,sha256=A9OfaZ8r2BC6A2uGXxNNhmyBNORUB_MeqJC29ZRebnw,4664
29
- servalcat/spa/localcc.py,sha256=0otKfGKH33cFsD6Qvh8iL1mINlWqb3gqAbVKqy8fQPY,7985
30
- servalcat/spa/translate.py,sha256=InePz9d38KaUK4wr8uk06_6v4y80T3HYcURWp8c21zM,5091
31
- servalcat/spa/run_refmac.py,sha256=gQE4I-x_hzcU6DlDq5xW47fVMaDoCR5GlpOfjiv5s2A,48591
32
- servalcat/spa/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
33
- servalcat/spa/fsc.py,sha256=qTz8nS_KJpno0s0Hw7Isp2n_6PDzaYkBye5zSnO3Ufg,17278
34
- servalcat/spa/realspcc_from_var.py,sha256=VpdvNEY4zRza08Vz727JI6Seq-ix-oujx4Gvzy_VkYI,5275
35
- servalcat/spa/shift_maps.py,sha256=iP1w4LNXETvZblElJ64AFMcE-lPrhx1s4SfacGktg4o,13268
36
- servalcat/spa/fofc.py,sha256=OvF1_wUcUzG4JLkRsCj-1ea2ukbQrc6ki01vI9aTISo,22188
37
- servalcat/refine/xtal.py,sha256=VnrGjWgRfj9ALGfHXgLIYswMwqsqe4vO7nsqrAFm8XA,11848
38
- servalcat/refine/refine.py,sha256=KAzc8NSmhGunFqJD6SWcliEwtXSPULHNNxJF4W2LMuA,38227
39
- servalcat/refine/refine_spa.py,sha256=HTzhmUkoxzxeY5qFlW6-Ryla7a0-TwiBWR6P3AaxjRs,17340
40
- servalcat/refine/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
41
- servalcat/refine/spa.py,sha256=-7O6a0-1YCfyRtlKbAT5sFseg7XkDTybt9uFC4vDVAQ,6194
42
- servalcat/refine/cgsolve.py,sha256=tHuWXr76x4sRAMUQ4dGVJzyHF_n1LiwKHTjAwh8iFMg,3072
43
- servalcat/refine/refine_geom.py,sha256=nWeHjWG3ieKP9JDUi-4XAxNpELIPuxawA59_PM-4W9o,10366
44
- servalcat/refine/refine_xtal.py,sha256=UEx1fYHk9p23AaWTFYg8P1_TUetLmouqPGfCLcjOufc,12595