Skip to content

Commit 84a8d0b

Browse files
authored
Xia2 on Windows and AceDRG testing (#124)
1 parent 2c426e5 commit 84a8d0b

File tree

6 files changed

+65
-30
lines changed

6 files changed

+65
-30
lines changed

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
# CCP4i2 Changelog
22

3+
## [2.5.2] - 2026-02-06
4+
5+
- Xia2 DIALS only supports image directory on Windows
6+
- Testing AceDRG atom IDs do not contain spaces
7+
38
## [2.5.1] - 2026-02-05
49

510
- Fix to spaces/quoting in AceDRG atom name matching

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
v2.5.1
1+
v2.5.2

core/version.params.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
<function>PARAMS</function>
66
<pluginName>ccp4i2</pluginName>
77
<userId></userId>
8-
<creationTime>05/Feb/2026</creationTime>
9-
<ccp4iVersion>2.5.1</ccp4iVersion>
8+
<creationTime>06/Feb/2026</creationTime>
9+
<ccp4iVersion>2.5.2</ccp4iVersion>
1010
<pluginVersion></pluginVersion>
1111
</ccp4i2_header>
1212
</ccp4i2>

test/i2run/test_acedrg.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,9 @@ def check_output(job: Path, code: str):
9595
if len(code) <= 3:
9696
gemmi.read_pdb(str(job / f"{code}.pdb"))
9797
doc = gemmi.cif.read(str(job / f"{code}.cif"))
98-
gemmi.make_chemcomp_from_block(doc[-1])
98+
comp = gemmi.make_chemcomp_from_block(doc[-1])
99+
for atom in comp.atoms:
100+
assert " " not in atom.id
99101

100102

101103
# These tests crashes as acedrg or metalCoord crash themselves, not an i2 problem.

test/i2run/test_xia2.py

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,23 @@ def image_dir_fixture():
1717
yield tmpDir
1818

1919

20-
def run_test(task, image_dir):
20+
def run_test_from_image_file(task, image_dir):
2121
args = [task]
2222
args += ["--IMAGE_FILE"]
2323
args += ["imageFile/baseName=th_8_2_0001.cbf"]
2424
args += ["imageFile/relPath=" + image_dir]
2525
args += ["imageStart=1"]
2626
args += ["imageEnd=20"]
27+
run_test(args)
28+
29+
30+
def run_test_from_image_directory(task, image_dir):
31+
args = [task]
32+
args += ["--IMAGE_DIRECTORY", str(image_dir)]
33+
run_test(args)
34+
35+
36+
def run_test(args):
2737
with i2run(args) as job:
2838
for name in ("freer", "NATIVE_SWEEP1_INTEGRATE", "obs"):
2939
read_mtz_file(str(job / f"AUTOMATIC_DEFAULT_{name}.mtz"))
@@ -34,10 +44,15 @@ def run_test(task, image_dir):
3444
assert int(re.search(r"Total unique +(\d+)", log).group(1)) > 11000
3545

3646

37-
def test_xia2_dials(image_dir):
38-
run_test("xia2_dials", image_dir)
47+
@mark.skipif(platform == "win32", reason="Not supported on Windows with Python 3.9 xia2")
48+
def test_xia2_dials_file(image_dir):
49+
run_test_from_image_file("xia2_dials", image_dir)
50+
51+
52+
def test_xia2_dials_directory(image_dir):
53+
run_test_from_image_directory("xia2_dials", image_dir)
3954

4055

4156
@mark.skipif(platform == "win32", reason="Not supported on Windows")
42-
def test_xia2_xds(image_dir):
43-
run_test("xia2_xds", image_dir)
57+
def test_xia2_xds_file(image_dir):
58+
run_test_from_image_file("xia2_xds", image_dir)

wrappers/xia2_dials/script/xia2_dials_gui.py

Lines changed: 34 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
# Acknowledgements: based on code by Graeme Winter and Martin Noble.
66
#
77

8+
import platform
9+
810
from PySide2 import QtGui, QtWidgets, QtCore
911

1012
from qtgui.CCP4TaskWidget import CTaskWidget
@@ -27,25 +29,34 @@ def drawContents(self):
2729

2830
# Input data
2931
self.openFolder(folderFunction="inputData")
30-
self.createLine(
31-
[
32-
"tip",
33-
"Provide either the parent directory of the "
34-
"dataset(s), or pick one image from each",
35-
"subtitle",
36-
"Locate datasets",
37-
]
38-
)
39-
self.openSubFrame(frame=True)
40-
41-
self.createLine(
42-
["widget", "-title", "Choose one image from each dataset...", "IMAGE_FILE"]
43-
)
44-
self.createLine(
45-
["advice", "...Or let xia2 find datasets under a parent directory"]
46-
)
47-
self.createLine(["widget", "IMAGE_DIRECTORY"])
48-
self.closeSubFrame()
32+
# Python 3.9 xia2 only supports directories on Windows
33+
# This check should be removed when a newer version of xia2 is available
34+
if platform.system() == "Windows":
35+
self.createLine(["subtitle", "Locate datasets"])
36+
self.openSubFrame(frame=True)
37+
self.createLine(["advice", "Let xia2 find datasets under a parent directory"])
38+
self.createLine(["widget", "IMAGE_DIRECTORY"])
39+
self.closeSubFrame()
40+
else:
41+
self.createLine(
42+
[
43+
"tip",
44+
"Provide either the parent directory of the "
45+
"dataset(s), or pick one image from each",
46+
"subtitle",
47+
"Locate datasets",
48+
]
49+
)
50+
self.openSubFrame(frame=True)
51+
self.createLine(
52+
["widget", "-title", "Choose one image from each dataset...", "IMAGE_FILE"]
53+
)
54+
self.connectDataChanged("IMAGE_FILE", self.handleImageFile)
55+
self.createLine(
56+
["advice", "...Or let xia2 find datasets under a parent directory"]
57+
)
58+
self.createLine(["widget", "IMAGE_DIRECTORY"])
59+
self.closeSubFrame()
4960

5061
# Basic parameters
5162
self.createLine(
@@ -62,7 +73,6 @@ def drawContents(self):
6273
drawFolder=self.drawAdvanced,
6374
)
6475

65-
self.connectDataChanged("IMAGE_FILE", self.handleImageFile)
6676
self.connectDataChanged("IMAGE_DIRECTORY", self.handleImageDirectory)
6777
self.connectDataChanged("dials__index__method", self.handleIndexMethod)
6878
self.handleImageFile()
@@ -88,7 +98,10 @@ def handleImageDirectory(self):
8898
self.container.inputData.IMAGE_FILE.setQualifiers({"listMinLength": 0})
8999
else:
90100
self.container.inputData.IMAGE_FILE.setQualifiers({"listMinLength": 1})
91-
self.getWidget("IMAGE_FILE").validate()
101+
# Python 3.9 xia2 only supports directories on Windows
102+
# This check should be removed when a newer version of xia2 is available
103+
if platform.system() != "Windows":
104+
self.getWidget("IMAGE_FILE").validate()
92105

93106
@QtCore.Slot()
94107
def handleIndexMethod(self):

0 commit comments

Comments
 (0)