servalcat 0.4.72__cp312-cp312-macosx_11_0_arm64.whl → 0.4.88__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,115 @@
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().to_numpy(), 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
+ cc = numpy.corrcoef(Io[ii][val].T)[0,1]
41
+ rr = (1 - numpy.sqrt(1 - cc**2)) / cc
42
+ ratios.append(rr)
43
+ ccs[-1].append(cc)
44
+ nums[-1].append(len(val))
45
+ alphas.append(numpy.array(ratios) / sum(ratios))
46
+ alphas = numpy.maximum(0, numpy.mean(alphas, axis=0))
47
+ alphas /= numpy.sum(alphas)
48
+ ccs = numpy.array(ccs)
49
+ nums = numpy.array(nums)
50
+ tmp = [{"Operator": gemmi.Op().triplet(),
51
+ "R_twin_obs": 0,
52
+ "CC_mean": 1,
53
+ "Alpha_from_CC": alphas[0]}]
54
+ for i_op, op in enumerate(ops):
55
+ ii = numpy.array(twin_data.pairs(i_op))
56
+ val = numpy.all(numpy.isfinite(Io[ii]), axis=1)
57
+ r_obs = numpy.sum(numpy.abs(Io[ii][val, 0] - Io[ii][val, 1])) / numpy.sum(Io[ii][val])
58
+ tmp.append({"Operator": op.triplet(),
59
+ "CC_mean": numpy.sum(nums[:,i_op] * ccs[:,i_op]) / numpy.sum(nums[:,i_op]),
60
+ "R_twin_obs": r_obs,
61
+ "Alpha_from_CC": alphas[i_op+1],
62
+ })
63
+ df = pandas.DataFrame(tmp)
64
+ logger.writeln(df.to_string(float_format="%.2f"))
65
+
66
+ sel_idxes = [i for i, a in enumerate(alphas) if i > 0 and a > min_alpha]
67
+ if not sel_idxes:
68
+ logger.writeln(" No twinning detected")
69
+ return
70
+
71
+ if len(sel_idxes) + 1 != len(alphas):
72
+ ops = [ops[i-1] for i in sel_idxes]
73
+ logger.writeln(" Twin operators after filtering small fractions")
74
+ alphas = numpy.array([alphas[0]] + [alphas[i] for i in sel_idxes])
75
+ alphas /= numpy.sum(alphas)
76
+ df = pandas.DataFrame({"Operator": [x.triplet() for x in [gemmi.Op()]+ops],
77
+ "Alpha": alphas})
78
+ logger.writeln(df.to_string(float_format="%.2f"))
79
+ twin_data = ext.TwinData()
80
+ twin_data.setup(hkldata.miller_array().to_numpy(), hkldata.df.bin, hkldata.sg, hkldata.cell, ops)
81
+ twin_data.alphas = alphas
82
+ if "I" not in hkldata.df:
83
+ logger.writeln('Generating "observed" intensities for twin refinement: Io = Fo**2, SigIo = 2*F*SigFo')
84
+ hkldata.df["I"] = hkldata.df.FP**2
85
+ hkldata.df["SIGI"] = 2 * hkldata.df.FP * hkldata.df.SIGFP
86
+ return twin_data
87
+
88
+ # find_twin_domains_from_data()
89
+
90
+ def estimate_twin_fractions_from_model(twin_data, hkldata):
91
+ logger.writeln("Estimating twin fractions")
92
+ Ic = numpy.abs(twin_data.f_calc.sum(axis=1))**2
93
+ Ic_all = Ic[twin_data.twin_related(hkldata.sg)]
94
+ rr = twin_data.obs_related_asu()
95
+ tmp = []
96
+ for i_bin, bin_idxes in hkldata.binned():
97
+ cc_o_c = []
98
+ i_tmp = Ic_all[numpy.asarray(twin_data.bin)==i_bin,:]
99
+ P = numpy.corrcoef(i_tmp.T)
100
+ iobs = hkldata.df.I.to_numpy()[bin_idxes]
101
+ ic_bin = Ic[rr[bin_idxes,:]]
102
+ val = numpy.isfinite(iobs) & numpy.isfinite(ic_bin).all(axis=1)
103
+ iobs, ic_bin = iobs[val], ic_bin[val,:]
104
+ cc_o_c = [numpy.corrcoef(iobs, ic_bin[:,i])[0,1] for i in range(len(twin_data.ops)+1)]
105
+ frac_est = numpy.dot(numpy.linalg.pinv(P), cc_o_c)
106
+ tmp.append(frac_est.tolist())
107
+
108
+ df = pandas.DataFrame(tmp)
109
+ df.iloc[:,:] /= df.sum(axis=1).to_numpy()[:,None]
110
+ mean_alphas = numpy.maximum(0, df.mean())
111
+ mean_alphas /= numpy.sum(mean_alphas)
112
+ logger.write(" Estimated fractions from data-model correlations: ")
113
+ logger.writeln(" ".join("%.2f"%x for x in mean_alphas))
114
+ twin_data.alphas = mean_alphas
115
+
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: servalcat
3
- Version: 0.4.72
3
+ Version: 0.4.88
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
@@ -10,7 +10,7 @@ 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.6.7
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.6.7](https://github.com/project-gemmi/gemmi/releases/tag/v0.6.7). 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.88.dist-info/RECORD,,
2
+ servalcat-0.4.88.dist-info/WHEEL,sha256=1MNIlynTwkwwhETLr2_rT6EoaGjOw8ZJmXs1JD1RAw4,114
3
+ servalcat-0.4.88.dist-info/entry_points.txt,sha256=G1mDxhOCdF3umYz4k0kfwJbSdYSKqhvQdGCmrP8FRAY,111
4
+ servalcat-0.4.88.dist-info/METADATA,sha256=B0VVGu-KUJy9euhZEeDrZ_mIlwvMBeKh3e8Pz8zm_ww,2741
5
+ servalcat-0.4.88.dist-info/licenses/LICENSE,sha256=HyVuytGSiAUQ6ErWBHTqt1iSGHhLmlC8fO7jTCuR8dU,16725
6
+ servalcat/__init__.py,sha256=6hLXc7c2AoM0dJqaoKHAGlmleut4b6M7aAbDE0byRG4,231
7
+ servalcat/ext.cpython-312-darwin.so,sha256=pWiZmt-i8GMjurYxZcEsq_FTyPsXBPJOYgakCHkgjgo,2131640
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=iZvHZRpFKrdxx0ggT9AFUmjnuBXyfZBdJ69ZnN0_zkQ,18130
13
+ servalcat/xtal/twin.py,sha256=Q1lbYm17w75KohvOS5blyp8TEGviWJ9zJlmmy8zSnU8,4741
14
+ servalcat/xtal/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
15
+ servalcat/xtal/sigmaa.py,sha256=LvRu76y0AqrT_n7LpDQnqcKm4NDkslroCkWowmIs5lk,74185
16
+ servalcat/xtal/french_wilson.py,sha256=pL97K22WIkHHy_IexGPFhCan2WRHHemdWO0x7glTT7s,11656
17
+ servalcat/xtal/run_refmac_small.py,sha256=Yg-bEPuOdQxCwdwY8StCvXabcWHrRl6A22gJgLsypeU,10394
18
+ servalcat/utils/symmetry.py,sha256=H-5RBiQOp0MlWJE8LGJWvqe-YzmtzzrXfLO_2E_OpZU,11937
19
+ servalcat/utils/generate_operators.py,sha256=fCrcTcciRn-6fpFtHYvf1oPXAObjuqR3WQejz5d0RrA,10980
20
+ servalcat/utils/maps.py,sha256=ZoB3wwZZTLHYuwC4HBGFAYX4zmkZ8CdxD9wSLftL48c,13217
21
+ servalcat/utils/__init__.py,sha256=j-fMAqHvzyMMQXb2Sf7Urnk4oQ31pT-g_NXf3K-NM4c,1137
22
+ servalcat/utils/logger.py,sha256=oQcoKcM81fSsoQt_dKgwfUekJN5CcLMbti_kLb2loXM,3828
23
+ servalcat/utils/model.py,sha256=_XpYd1WKtI1ErCXzNCxIukYClhJWl8BcFUfTgu-NB4E,30272
24
+ servalcat/utils/restraints.py,sha256=IookRqipmUQlEgYRbt9lhzSuRHPuIq0QputfN87cEms,36911
25
+ servalcat/utils/refmac.py,sha256=SFIReNexBpBBMgBUX67V_63NY8Yy8mOmAn9rYBPiDIo,30921
26
+ servalcat/utils/commands.py,sha256=zkSFmdXIthC4ogvxgiHsVUyhBLZaiwflJAwP0CCBnZ8,64037
27
+ servalcat/utils/hkl.py,sha256=3sw5NVJTKAp-7KzZmKsgGCpeRLKih4Wdf1kPK1JR4fM,28170
28
+ servalcat/utils/fileio.py,sha256=NROzr_mpgc5qbvhaoEsIOHEFnN0uthabqKUiINE8Xnw,29085
29
+ servalcat/spa/shiftback.py,sha256=A9OfaZ8r2BC6A2uGXxNNhmyBNORUB_MeqJC29ZRebnw,4664
30
+ servalcat/spa/localcc.py,sha256=0otKfGKH33cFsD6Qvh8iL1mINlWqb3gqAbVKqy8fQPY,7985
31
+ servalcat/spa/translate.py,sha256=InePz9d38KaUK4wr8uk06_6v4y80T3HYcURWp8c21zM,5091
32
+ servalcat/spa/run_refmac.py,sha256=KWl7Cc6MLlsJdEsJ6MXBP8_2FiWeDZ66xmk04Ka-cVY,49196
33
+ servalcat/spa/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
34
+ servalcat/spa/fsc.py,sha256=lRkNRRBSIcVlnoF5mvCKNXTxasp73a7SCLth4hTnWzE,17419
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=7ZG7wXtbcaeHG9dVZvYofNb75cbqthhE7O_XTVx-y70,22762
38
+ servalcat/refine/xtal.py,sha256=YRZusmJXcMp1HtrKZiUd6JF-igS6MbHvOIuyFSPOVv0,14384
39
+ servalcat/refine/refine.py,sha256=4ly66LSUNHbT6hqRnp-J-0G0CXOwLu_UKHW0LzT9CUw,38290
40
+ servalcat/refine/refine_spa.py,sha256=J6LS8efSQ6sHEp5VH4It8TT734CQ5SVknP5AiQW9p0U,17896
41
+ servalcat/refine/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
42
+ servalcat/refine/spa.py,sha256=P_IkA291ocl92SpZ8Uagcab_Usqj2JzW8cAw_aCPmpg,6238
43
+ servalcat/refine/cgsolve.py,sha256=tHuWXr76x4sRAMUQ4dGVJzyHF_n1LiwKHTjAwh8iFMg,3072
44
+ servalcat/refine/refine_geom.py,sha256=GNVyll5LVoEmAzzenikg-nKjJXCtJ8B8Gd13q5nMtCk,10757
45
+ servalcat/refine/refine_xtal.py,sha256=tW4AC1O8esxls6MS6YMiya-R41-daIROGxZscLf2b4c,13843
@@ -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.6
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