diff --git a/CHANGELOG.md b/CHANGELOG.md
index c53fbb974..78091e63e 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,6 +7,7 @@
- Fix for reflection CIF files containing both merged and unmerged data
- New Pointless options to remove lattice centering reflections
- Fix to Servalcat report type handling
+- Added option to do Tortoize Rama-Z calculation in Refmac & Servalcat pipelines
## [2.4.1] - 2025-10-07
diff --git a/pipelines/prosmart_refmac/script/prosmart_refmac.def.xml b/pipelines/prosmart_refmac/script/prosmart_refmac.def.xml
index 076cdadc6..076c6f48c 100644
--- a/pipelines/prosmart_refmac/script/prosmart_refmac.def.xml
+++ b/pipelines/prosmart_refmac/script/prosmart_refmac.def.xml
@@ -474,6 +474,12 @@
True
+
+ CBoolean
+
+ False
+
+
CBoolean
diff --git a/pipelines/prosmart_refmac/script/prosmart_refmac.py b/pipelines/prosmart_refmac/script/prosmart_refmac.py
index 7b02e2986..42197e246 100644
--- a/pipelines/prosmart_refmac/script/prosmart_refmac.py
+++ b/pipelines/prosmart_refmac/script/prosmart_refmac.py
@@ -639,11 +639,15 @@ def finishUp(self, refmacJob):
if hasattr(self.container.controlParameters,"VALIDATE_RAMACHANDRAN"):
validate_ramachandran = self.container.controlParameters.VALIDATE_RAMACHANDRAN
+ validate_tortoize = False
+ if hasattr(self.container.controlParameters,"VALIDATE_TORTOIZE"):
+ validate_tortoize = self.container.controlParameters.VALIDATE_TORTOIZE
+
validate_molprobity = False
if hasattr(self.container.controlParameters,"VALIDATE_MOLPROBITY"):
validate_molprobity = self.container.controlParameters.VALIDATE_MOLPROBITY
- if validate_baverage or validate_molprobity or validate_ramachandran or validate_iris:
+ if validate_baverage or validate_molprobity or validate_ramachandran or validate_tortoize or validate_iris:
xml_validation = etree.SubElement(self.xmlroot,"Validation")
xml_validation_status = etree.SubElement(xml_validation,"Success")
try:
@@ -670,6 +674,7 @@ def finishUp(self, refmacJob):
self.validate.container.controlParameters.DO_IRIS = validate_iris
self.validate.container.controlParameters.DO_BFACT = validate_baverage
self.validate.container.controlParameters.DO_RAMA = validate_ramachandran
+ self.validate.container.controlParameters.DO_TORTOIZE = validate_tortoize
self.validate.container.controlParameters.DO_MOLPROBITY = validate_molprobity
self.validate.doAsync = False
diff --git a/pipelines/prosmart_refmac/script/prosmart_refmac_gui.py b/pipelines/prosmart_refmac/script/prosmart_refmac_gui.py
index 1c9e438b2..04245bf77 100644
--- a/pipelines/prosmart_refmac/script/prosmart_refmac_gui.py
+++ b/pipelines/prosmart_refmac/script/prosmart_refmac_gui.py
@@ -533,9 +533,10 @@ def drawOutput( self ):
self.createLine( [ 'subtitle', 'Validation and Analysis' ] )
self.openSubFrame(frame=[True], toggleFunction=[self.ToggleRigidModeOff,['REFINEMENT_MODE']])
- self.createLine( [ 'widget', 'VALIDATE_IRIS', 'label', 'Generate Iris report' ] )
+ self.createLine( [ 'widget', 'VALIDATE_IRIS', 'label', 'Generate Iris validation report' ] )
self.createLine( [ 'widget', 'VALIDATE_BAVERAGE', 'label', 'Analyse B-factor distributions' ] )
self.createLine( [ 'widget', 'VALIDATE_RAMACHANDRAN', 'label', 'Generate Ramachandran plots' ] )
+ self.createLine( [ 'widget', 'VALIDATE_TORTOIZE', 'label', 'Calculate Rama-Z score using tortoize' ] )
self.createLine( [ 'widget', 'VALIDATE_MOLPROBITY', 'label', 'Run MolProbity to analyse geometry' ] )
#self.createLine( [ 'widget', 'RUN_MOLPROBITY', 'label', 'Run standalone MolProbity (to be deprecated)' ] )
self.closeSubFrame()
diff --git a/pipelines/servalcat_pipe/script/servalcat_pipe.def.xml b/pipelines/servalcat_pipe/script/servalcat_pipe.def.xml
index 395f370c2..61de86088 100644
--- a/pipelines/servalcat_pipe/script/servalcat_pipe.def.xml
+++ b/pipelines/servalcat_pipe/script/servalcat_pipe.def.xml
@@ -584,6 +584,12 @@
True
+
+ CBoolean
+
+ True
+
+
CBoolean
diff --git a/pipelines/servalcat_pipe/script/servalcat_pipe.py b/pipelines/servalcat_pipe/script/servalcat_pipe.py
index ed639b4db..36a277737 100644
--- a/pipelines/servalcat_pipe/script/servalcat_pipe.py
+++ b/pipelines/servalcat_pipe/script/servalcat_pipe.py
@@ -331,11 +331,15 @@ def multimericValidation(self):
if hasattr(self.container.controlParameters,"VALIDATE_RAMACHANDRAN"):
validate_ramachandran = self.container.controlParameters.VALIDATE_RAMACHANDRAN
+ validate_tortoize = False
+ if hasattr(self.container.controlParameters,"VALIDATE_TORTOIZE"):
+ validate_tortoize = self.container.controlParameters.VALIDATE_TORTOIZE
+
validate_molprobity = False
if hasattr(self.container.controlParameters,"VALIDATE_MOLPROBITY"):
validate_molprobity = self.container.controlParameters.VALIDATE_MOLPROBITY
- if validate_iris or validate_baverage or validate_molprobity or validate_ramachandran:
+ if validate_iris or validate_baverage or validate_molprobity or validate_ramachandran or validate_tortoize:
self.validate = self.makePluginObject('validate_protein')
self.validate.container.inputData.XYZIN_2.set(self.container.outputData.CIFFILE)
self.validate.container.inputData.XYZIN_1.set(self.container.inputData.XYZIN)
@@ -355,6 +359,7 @@ def multimericValidation(self):
self.validate.container.controlParameters.DO_IRIS.set(validate_iris)
self.validate.container.controlParameters.DO_BFACT.set(validate_baverage)
self.validate.container.controlParameters.DO_RAMA.set(validate_ramachandran)
+ self.validate.container.controlParameters.DO_TORTOIZE.set(validate_tortoize)
self.validate.container.controlParameters.DO_MOLPROBITY.set(validate_molprobity)
self.validate.doAsync = False
diff --git a/pipelines/servalcat_pipe/script/servalcat_pipe_gui.py b/pipelines/servalcat_pipe/script/servalcat_pipe_gui.py
index 8cbf76b9a..c132e1a28 100644
--- a/pipelines/servalcat_pipe/script/servalcat_pipe_gui.py
+++ b/pipelines/servalcat_pipe/script/servalcat_pipe_gui.py
@@ -459,6 +459,7 @@ def drawAdvanced( self ):
self.openSubFrame(frame=[True])
self.createLine( [ 'widget', 'VALIDATE_IRIS', 'label', 'Generate Iris validation report' ] )
self.createLine( [ 'widget', 'VALIDATE_RAMACHANDRAN', 'label', 'Generate Ramachandran plots' ] )
+ self.createLine( [ 'widget', 'VALIDATE_TORTOIZE', 'label', 'Calculate Rama-Z score using tortoize' ] )
self.createLine( [ 'widget', 'VALIDATE_MOLPROBITY', 'label', 'Run MolProbity to analyse geometry' ] )
self.createLine( [ 'widget', 'RUN_ADP_ANALYSIS', 'label', 'Run ADP analysis' ] )