Files
2026-08-03 18:42:47 +08:00

65 lines
2.1 KiB
Python

'''
test side chain helper settings
cartoon_side_chain_helper
cartoon_nucleic_acid_mode
ribbon_side_chain_helper
ribbon_nucleic_acid_mode
'''
from pymol import cmd, testing
class TestSideChainHelper(testing.PyMOLTestCase):
@testing.foreach.product(
['cartoon', 'ribbon'], # backbone rep
['sticks', 'lines'], # sidechain rep
['cartoon', 'ribbon'], # for setting X_side_chain_helper and X_nucleic_acid_mode
[0, 1]) # X_nucleic_acid_mode
@testing.requires_version('1.7.7')
def test(self, bb_rep, sc_rep, bb_set, n_a_m):
cmd.viewport(100, 100)
# color classes
color = {'cartoon': 'blue', 'ribbon': 'red'}
sc_color = 'white'
op_color = 'green'
p_color = 'yellow'
# lighting setup for color testing
self.ambientOnly()
cmd.set('dynamic_width', 0)
cmd.set('line_width', 4)
cmd.set('ribbon_width', 4)
# settings setup
cmd.set(bb_set + '_side_chain_helper')
cmd.set(bb_set + '_nucleic_acid_mode', n_a_m)
cmd.set('ribbon_color', color['ribbon'])
cmd.set('cartoon_color', color['cartoon'])
# data
cmd.load(self.datafile('1ehz-5.pdb'))
cmd.orient()
# atom colors
cmd.color(sc_color)
cmd.color(op_color, "name OP1+OP2") # not visible with SCH
cmd.color(p_color, "name P+O3'+C5'+O5'") # not visible with SCH and NAM=1
# need to check for OP1 and O1P naming scheme, so alter some atoms
cmd.alter('name OP1 & resi 1-2', 'name="O1P"')
cmd.alter('name OP2 & resi 1-2', 'name="O2P"')
# reps
cmd.show_as(bb_rep)
cmd.show(sc_rep)
# test
img = self.get_imagearray()
self.assertImageHasColor(sc_color, img) # always visible
for bb_test in ['cartoon', 'ribbon']:
self._assertImageHasColor(bb_rep == bb_test, color[bb_test], img, 0, bb_test + ' wrong')
self._assertImageHasColor(not (bb_rep == bb_set), op_color, img, 0, 'OP wrong')
self._assertImageHasColor(not (bb_rep == bb_set and n_a_m == 1), p_color, img, 0, 'NAM=1 wrong')