Opened 6 years ago

Closed 6 years ago

Last modified 6 years ago

#2635 closed defect (not a bug)

self._positions is None

Reported by: Tristan Croll Owned by: Tom Goddard
Priority: normal Milestone:
Component: Graphics Version:
Keywords: Cc:
Blocked By: Blocking:
Notify when closed: Platform: all
Project: ChimeraX

Description (last modified by Eric Pettersen)

The following bug report has been submitted:
Platform:        Linux-3.10.0-957.12.2.el7.x86_64-x86_64-with-centos-7.6.1810-Core
ChimeraX Version: 0.91 (2019-11-28)
Description
This has to do with my ongoing efforts in making Clipper save/restore capable, and the trigger is certainly my own fault. I'm most of the way, but right now when I save a model with a cryo-EM map controlled by Clipper and then restore, I end up with an unparented Surface instance as model #2. Closing the restored model/map also closes the Surface, but borks the session with the string of "TypeError: object of type 'NoneType' has no len()" messages you see here - looks like ChimeraX is still trying to draw something (the Surface?) after its _delete_geometry() has been called. Will work out what I'm doing wrong - but would it be preferable to catch and gracefully handle this situation? 

Log:
UCSF ChimeraX version: 0.91 (2019-11-28)  
© 2016-2019 Regents of the University of California. All rights reserved.  
How to cite UCSF ChimeraX  

> open /run/media/tic20/storage/structure_dump/demo/6eoj/working.pdb

Summary of feedback from opening
/run/media/tic20/storage/structure_dump/demo/6eoj/working.pdb  
---  
notes | Adding Drawing atoms to working.pdb  
Adding Drawing metal coordination bonds to working.pdb  
Adding Drawing missing structure to working.pdb  
Adding Drawing pbonds to metal coordination bonds  
Adding Drawing pbonds to missing structure  
Adding Drawing ribbon to working.pdb  
  
Adding models: ['working.pdb']  
Parent is None!  
Parent name: root  
Adding Drawing working.pdb to root  
Adding models: ['metal coordination bonds', 'missing structure']  
Parent name: working.pdb  
Chain information for working.pdb #1  
---  
Chain | Description  
A | No description available  
B | No description available  
D | No description available  
  
Adding Drawing working.pdb /A MET 1 ribbons to ribbon  
Adding Drawing working.pdb #1 ribbon_tethers to ribbon  
Adding Drawing working.pdb /A LYS 193 ribbons to ribbon  
Adding Drawing working.pdb #1 ribbon_tethers to ribbon  
Adding Drawing working.pdb /A ASN 358 ribbons to ribbon  
Adding Drawing working.pdb #1 ribbon_tethers to ribbon  
Adding Drawing working.pdb /A PRO 496 ribbons to ribbon  
Adding Drawing working.pdb #1 ribbon_tethers to ribbon  
Adding Drawing working.pdb /A GLY 610 ribbons to ribbon  
Adding Drawing working.pdb #1 ribbon_tethers to ribbon  
Adding Drawing working.pdb /A SER 1303 ribbons to ribbon  
Adding Drawing working.pdb #1 ribbon_tethers to ribbon  
Adding Drawing working.pdb /A HIS 1334 ribbons to ribbon  
Adding Drawing working.pdb #1 ribbon_tethers to ribbon  
Adding Drawing working.pdb /B PRO 1 ribbons to ribbon  
Adding Drawing working.pdb #1 ribbon_tethers to ribbon  
Adding Drawing working.pdb /D VAL 27 ribbons to ribbon  
Adding Drawing working.pdb #1 ribbon_tethers to ribbon  
Adding Drawing working.pdb /D UNK 466 ribbons to ribbon  
Adding Drawing working.pdb #1 ribbon_tethers to ribbon  
Adding Drawing bonds to working.pdb  
Adding Drawing pbonds to metal coordination bonds  
Adding Drawing pbonds to missing structure  

> open 3908 fromDatabase emdb

Summary of feedback from opening 3908 fetched from emdb  
---  
notes | Adding Drawing surface to emd_3908.map  
  
Adding models: ['3908']  
Parent is None!  
Parent name: root  
Adding Drawing 3908 to root  
Adding models: ['surface']  
Parent name: 3908  
Opened emd_3908.map, grid size 160,160,160, pixel 1.4, shown at level 0.0816,
step 1, values float32  

> clipper associate #2 toModel #1

Adding Drawing working.pdb to Data manager (working.pdb)  
Adding Drawing metal coordination bonds to working.pdb  
Adding Drawing missing structure to working.pdb  
Adding Drawing Map Manager to Data manager (working.pdb)  
Adding Drawing Pivot indicator to root  
Adding Drawing Atomic symmetry to Data manager (working.pdb)  
Adding Drawing Symmetry atoms to Atomic symmetry  
Adding Drawing Symmetry bonds to Atomic symmetry  
Adding Drawing working.pdb /A MET 1 ribbons to Symmetry ribbons  
Adding Drawing working.pdb #1 ribbon_tethers to Symmetry ribbons  
Adding Drawing working.pdb /A LYS 193 ribbons to Symmetry ribbons  
Adding Drawing working.pdb #1 ribbon_tethers to Symmetry ribbons  
Adding Drawing working.pdb /A ASN 358 ribbons to Symmetry ribbons  
Adding Drawing working.pdb #1 ribbon_tethers to Symmetry ribbons  
Adding Drawing working.pdb /A PRO 496 ribbons to Symmetry ribbons  
Adding Drawing working.pdb #1 ribbon_tethers to Symmetry ribbons  
Adding Drawing working.pdb /A GLY 610 ribbons to Symmetry ribbons  
Adding Drawing working.pdb #1 ribbon_tethers to Symmetry ribbons  
Adding Drawing working.pdb /A SER 1303 ribbons to Symmetry ribbons  
Adding Drawing working.pdb #1 ribbon_tethers to Symmetry ribbons  
Adding Drawing working.pdb /A HIS 1334 ribbons to Symmetry ribbons  
Adding Drawing working.pdb #1 ribbon_tethers to Symmetry ribbons  
Adding Drawing working.pdb /B PRO 1 ribbons to Symmetry ribbons  
Adding Drawing working.pdb #1 ribbon_tethers to Symmetry ribbons  
Adding Drawing working.pdb /D VAL 27 ribbons to Symmetry ribbons  
Adding Drawing working.pdb #1 ribbon_tethers to Symmetry ribbons  
Adding Drawing working.pdb /D UNK 466 ribbons to Symmetry ribbons  
Adding Drawing working.pdb #1 ribbon_tethers to Symmetry ribbons  
Adding Drawing Symmetry ribbons to Atomic symmetry  
Adding Drawing Non-crystallographic maps to Map Manager  
Adding Drawing 3908 to Non-crystallographic maps  
Adding Drawing surface to 3908  
Adding models: ['Data manager (working.pdb)']  
Parent is None!  
Parent name: root  
Adding Drawing Data manager (working.pdb) to root  
Adding models: ['working.pdb', 'Map Manager', 'Atomic symmetry']  
Parent name: Data manager (working.pdb)  
Adding models: ['metal coordination bonds', 'missing structure']  
Parent name: working.pdb  
Adding models: ['Non-crystallographic maps']  
Parent name: Map Manager  
Adding models: ['3908']  
Parent name: Non-crystallographic maps  
Adding models: ['surface']  
Parent name: 3908  
Adding Drawing Depth Indicator to root  
Chain information for working.pdb  
---  
Chain | Description  
1.1/A | No description available  
1.1/B | No description available  
1.1/D | No description available  
  
Adding Drawing working.pdb /A MET 1 ribbons to Symmetry ribbons  
Adding Drawing working.pdb #1 ribbon_tethers to Symmetry ribbons  
Adding Drawing working.pdb /A LYS 193 ribbons to Symmetry ribbons  
Adding Drawing working.pdb #1 ribbon_tethers to Symmetry ribbons  
Adding Drawing working.pdb /A ASN 358 ribbons to Symmetry ribbons  
Adding Drawing working.pdb #1 ribbon_tethers to Symmetry ribbons  
Adding Drawing working.pdb /A PRO 496 ribbons to Symmetry ribbons  
Adding Drawing working.pdb #1 ribbon_tethers to Symmetry ribbons  
Adding Drawing working.pdb /A GLY 610 ribbons to Symmetry ribbons  
Adding Drawing working.pdb #1 ribbon_tethers to Symmetry ribbons  
Adding Drawing working.pdb /A SER 1303 ribbons to Symmetry ribbons  
Adding Drawing working.pdb #1 ribbon_tethers to Symmetry ribbons  
Adding Drawing working.pdb /A HIS 1334 ribbons to Symmetry ribbons  
Adding Drawing working.pdb #1 ribbon_tethers to Symmetry ribbons  
Adding Drawing working.pdb /B PRO 1 ribbons to Symmetry ribbons  
Adding Drawing working.pdb #1 ribbon_tethers to Symmetry ribbons  
Adding Drawing working.pdb /D VAL 27 ribbons to Symmetry ribbons  
Adding Drawing working.pdb #1 ribbon_tethers to Symmetry ribbons  
Adding Drawing working.pdb /D UNK 466 ribbons to Symmetry ribbons  
Adding Drawing working.pdb #1 ribbon_tethers to Symmetry ribbons  
Adding Drawing working.pdb /A MET 1 ribbons to ribbon  
Adding Drawing working.pdb #1.1 ribbon_tethers to ribbon  
Adding Drawing working.pdb /A LYS 193 ribbons to ribbon  
Adding Drawing working.pdb #1.1 ribbon_tethers to ribbon  
Adding Drawing working.pdb /A ASN 358 ribbons to ribbon  
Adding Drawing working.pdb #1.1 ribbon_tethers to ribbon  
Adding Drawing working.pdb /A PRO 496 ribbons to ribbon  
Adding Drawing working.pdb #1.1 ribbon_tethers to ribbon  
Adding Drawing working.pdb /A GLY 610 ribbons to ribbon  
Adding Drawing working.pdb #1.1 ribbon_tethers to ribbon  
Adding Drawing working.pdb /A SER 1303 ribbons to ribbon  
Adding Drawing working.pdb #1.1 ribbon_tethers to ribbon  
Adding Drawing working.pdb /A HIS 1334 ribbons to ribbon  
Adding Drawing working.pdb #1.1 ribbon_tethers to ribbon  
Adding Drawing working.pdb /B PRO 1 ribbons to ribbon  
Adding Drawing working.pdb #1.1 ribbon_tethers to ribbon  
Adding Drawing working.pdb /D VAL 27 ribbons to ribbon  
Adding Drawing working.pdb #1.1 ribbon_tethers to ribbon  
Adding Drawing working.pdb /D UNK 466 ribbons to ribbon  
Adding Drawing working.pdb #1.1 ribbon_tethers to ribbon  
Adding Drawing working.pdb /A MET 1 ribbons to Symmetry ribbons  
Adding Drawing working.pdb #1.1 ribbon_tethers to Symmetry ribbons  
Adding Drawing working.pdb /A LYS 193 ribbons to Symmetry ribbons  
Adding Drawing working.pdb #1.1 ribbon_tethers to Symmetry ribbons  
Adding Drawing working.pdb /A ASN 358 ribbons to Symmetry ribbons  
Adding Drawing working.pdb #1.1 ribbon_tethers to Symmetry ribbons  
Adding Drawing working.pdb /A PRO 496 ribbons to Symmetry ribbons  
Adding Drawing working.pdb #1.1 ribbon_tethers to Symmetry ribbons  
Adding Drawing working.pdb /A GLY 610 ribbons to Symmetry ribbons  
Adding Drawing working.pdb #1.1 ribbon_tethers to Symmetry ribbons  
Adding Drawing working.pdb /A SER 1303 ribbons to Symmetry ribbons  
Adding Drawing working.pdb #1.1 ribbon_tethers to Symmetry ribbons  
Adding Drawing working.pdb /A HIS 1334 ribbons to Symmetry ribbons  
Adding Drawing working.pdb #1.1 ribbon_tethers to Symmetry ribbons  
Adding Drawing working.pdb /B PRO 1 ribbons to Symmetry ribbons  
Adding Drawing working.pdb #1.1 ribbon_tethers to Symmetry ribbons  
Adding Drawing working.pdb /D VAL 27 ribbons to Symmetry ribbons  
Adding Drawing working.pdb #1.1 ribbon_tethers to Symmetry ribbons  
Adding Drawing working.pdb /D UNK 466 ribbons to Symmetry ribbons  
Adding Drawing working.pdb #1.1 ribbon_tethers to Symmetry ribbons  

> close #1

> open test.cxs

Summary of feedback from opening test.cxs  
---  
notes | Adding Drawing atoms to structure  
Adding Drawing ribbon to structure  
Adding Drawing working.pdb to Data manager (working.pdb)  
Adding Drawing metal coordination bonds to working.pdb  
Adding Drawing missing structure to working.pdb  
Adding Drawing metal coordination bonds to working.pdb  
Adding Drawing missing structure to working.pdb  
Adding Drawing Map Manager to Data manager (working.pdb)  
Adding Drawing to Map Manager  
Adding Drawing Non-crystallographic maps to Map Manager  
Adding Drawing 3908 to Non-crystallographic maps  
Adding models: ['Data manager (working.pdb)']  
Parent is None!  
Parent name: root  
Adding Drawing Data manager (working.pdb) to root  
Adding models: ['working.pdb', 'Map Manager']  
Parent name: Data manager (working.pdb)  
Adding models: ['metal coordination bonds', 'missing structure']  
Parent name: working.pdb  
Adding models: ['Non-crystallographic maps']  
Parent name: Map Manager  
Adding models: ['3908']  
Parent name: Non-crystallographic maps  
Adding Drawing Depth Indicator to root  
Adding models: ['surface']  
Parent is None!  
Parent name: root  
Adding Drawing surface to root  
Adding models: ['Atomic symmetry']  
Parent name: Data manager (working.pdb)  
Adding Drawing Atomic symmetry to Data manager (working.pdb)  
Adding Drawing Symmetry atoms to Atomic symmetry  
Adding Drawing Symmetry bonds to Atomic symmetry  
Adding Drawing Symmetry ribbons to Atomic symmetry  
  
opened ChimeraX session  
Adding Drawing working.pdb /A MET 1 ribbons to ribbon  
Adding Drawing working.pdb #1.1 ribbon_tethers to ribbon  
Adding Drawing working.pdb /A LYS 193 ribbons to ribbon  
Adding Drawing working.pdb #1.1 ribbon_tethers to ribbon  
Adding Drawing working.pdb /A ASN 358 ribbons to ribbon  
Adding Drawing working.pdb #1.1 ribbon_tethers to ribbon  
Adding Drawing working.pdb /A PRO 496 ribbons to ribbon  
Adding Drawing working.pdb #1.1 ribbon_tethers to ribbon  
Adding Drawing working.pdb /A GLY 610 ribbons to ribbon  
Adding Drawing working.pdb #1.1 ribbon_tethers to ribbon  
Adding Drawing working.pdb /A SER 1303 ribbons to ribbon  
Adding Drawing working.pdb #1.1 ribbon_tethers to ribbon  
Adding Drawing working.pdb /A HIS 1334 ribbons to ribbon  
Adding Drawing working.pdb #1.1 ribbon_tethers to ribbon  
Adding Drawing working.pdb /B PRO 1 ribbons to ribbon  
Adding Drawing working.pdb #1.1 ribbon_tethers to ribbon  
Adding Drawing working.pdb /D VAL 27 ribbons to ribbon  
Adding Drawing working.pdb #1.1 ribbon_tethers to ribbon  
Adding Drawing working.pdb /D UNK 466 ribbons to ribbon  
Adding Drawing working.pdb #1.1 ribbon_tethers to ribbon  
Adding Drawing bonds to working.pdb  
Adding Drawing pbonds to metal coordination bonds  
Adding Drawing pbonds to missing structure  
Adding Drawing working.pdb /A MET 1 ribbons to Symmetry ribbons  
Adding Drawing working.pdb #1.1 ribbon_tethers to Symmetry ribbons  
Adding Drawing working.pdb /A LYS 193 ribbons to Symmetry ribbons  
Adding Drawing working.pdb #1.1 ribbon_tethers to Symmetry ribbons  
Adding Drawing working.pdb /A ASN 358 ribbons to Symmetry ribbons  
Adding Drawing working.pdb #1.1 ribbon_tethers to Symmetry ribbons  
Adding Drawing working.pdb /A PRO 496 ribbons to Symmetry ribbons  
Adding Drawing working.pdb #1.1 ribbon_tethers to Symmetry ribbons  
Adding Drawing working.pdb /A GLY 610 ribbons to Symmetry ribbons  
Adding Drawing working.pdb #1.1 ribbon_tethers to Symmetry ribbons  
Adding Drawing working.pdb /A SER 1303 ribbons to Symmetry ribbons  
Adding Drawing working.pdb #1.1 ribbon_tethers to Symmetry ribbons  
Adding Drawing working.pdb /A HIS 1334 ribbons to Symmetry ribbons  
Adding Drawing working.pdb #1.1 ribbon_tethers to Symmetry ribbons  
Adding Drawing working.pdb /B PRO 1 ribbons to Symmetry ribbons  
Adding Drawing working.pdb #1.1 ribbon_tethers to Symmetry ribbons  
Adding Drawing working.pdb /D VAL 27 ribbons to Symmetry ribbons  
Adding Drawing working.pdb #1.1 ribbon_tethers to Symmetry ribbons  
Adding Drawing working.pdb /D UNK 466 ribbons to Symmetry ribbons  
Adding Drawing working.pdb #1.1 ribbon_tethers to Symmetry ribbons  
Adding Drawing working.pdb /A MET 1 ribbons to Symmetry ribbons  
Adding Drawing working.pdb #1.1 ribbon_tethers to Symmetry ribbons  
Adding Drawing working.pdb /A LYS 193 ribbons to Symmetry ribbons  
Adding Drawing working.pdb #1.1 ribbon_tethers to Symmetry ribbons  
Adding Drawing working.pdb /A ASN 358 ribbons to Symmetry ribbons  
Adding Drawing working.pdb #1.1 ribbon_tethers to Symmetry ribbons  
Adding Drawing working.pdb /A PRO 496 ribbons to Symmetry ribbons  
Adding Drawing working.pdb #1.1 ribbon_tethers to Symmetry ribbons  
Adding Drawing working.pdb /A GLY 610 ribbons to Symmetry ribbons  
Adding Drawing working.pdb #1.1 ribbon_tethers to Symmetry ribbons  
Adding Drawing working.pdb /A SER 1303 ribbons to Symmetry ribbons  
Adding Drawing working.pdb #1.1 ribbon_tethers to Symmetry ribbons  
Adding Drawing working.pdb /A HIS 1334 ribbons to Symmetry ribbons  
Adding Drawing working.pdb #1.1 ribbon_tethers to Symmetry ribbons  
Adding Drawing working.pdb /B PRO 1 ribbons to Symmetry ribbons  
Adding Drawing working.pdb #1.1 ribbon_tethers to Symmetry ribbons  
Adding Drawing working.pdb /D VAL 27 ribbons to Symmetry ribbons  
Adding Drawing working.pdb #1.1 ribbon_tethers to Symmetry ribbons  
Adding Drawing working.pdb /D UNK 466 ribbons to Symmetry ribbons  
Adding Drawing working.pdb #1.1 ribbon_tethers to Symmetry ribbons  

> close #2

> close #1

> open /run/media/tic20/storage/structure_dump/test_session_save/test.cxs

Summary of feedback from opening
/run/media/tic20/storage/structure_dump/test_session_save/test.cxs  
---  
notes | Adding Drawing atoms to structure  
Adding Drawing ribbon to structure  
Adding Drawing working.pdb to Data manager (working.pdb)  
Adding Drawing metal coordination bonds to working.pdb  
Adding Drawing missing structure to working.pdb  
Adding Drawing metal coordination bonds to working.pdb  
Adding Drawing missing structure to working.pdb  
Adding Drawing Map Manager to Data manager (working.pdb)  
Adding Drawing to Map Manager  
Adding Drawing Non-crystallographic maps to Map Manager  
Adding Drawing 3908 to Non-crystallographic maps  
Adding models: ['Data manager (working.pdb)']  
Parent is None!  
Parent name: root  
Adding Drawing Data manager (working.pdb) to root  
Adding models: ['working.pdb', 'Map Manager']  
Parent name: Data manager (working.pdb)  
Adding models: ['metal coordination bonds', 'missing structure']  
Parent name: working.pdb  
Adding models: ['Non-crystallographic maps']  
Parent name: Map Manager  
Adding models: ['3908']  
Parent name: Non-crystallographic maps  
Adding Drawing Depth Indicator to root  
Adding models: ['surface']  
Parent is None!  
Parent name: root  
Adding Drawing surface to root  
Adding models: ['Atomic symmetry']  
Parent name: Data manager (working.pdb)  
Adding Drawing Atomic symmetry to Data manager (working.pdb)  
Adding Drawing Symmetry atoms to Atomic symmetry  
Adding Drawing Symmetry bonds to Atomic symmetry  
Adding Drawing Symmetry ribbons to Atomic symmetry  
  
opened ChimeraX session  
Adding Drawing working.pdb /A MET 1 ribbons to ribbon  
Adding Drawing working.pdb #1.1 ribbon_tethers to ribbon  
Adding Drawing working.pdb /A LYS 193 ribbons to ribbon  
Adding Drawing working.pdb #1.1 ribbon_tethers to ribbon  
Adding Drawing working.pdb /A ASN 358 ribbons to ribbon  
Adding Drawing working.pdb #1.1 ribbon_tethers to ribbon  
Adding Drawing working.pdb /A PRO 496 ribbons to ribbon  
Adding Drawing working.pdb #1.1 ribbon_tethers to ribbon  
Adding Drawing working.pdb /A GLY 610 ribbons to ribbon  
Adding Drawing working.pdb #1.1 ribbon_tethers to ribbon  
Adding Drawing working.pdb /A SER 1303 ribbons to ribbon  
Adding Drawing working.pdb #1.1 ribbon_tethers to ribbon  
Adding Drawing working.pdb /A HIS 1334 ribbons to ribbon  
Adding Drawing working.pdb #1.1 ribbon_tethers to ribbon  
Adding Drawing working.pdb /B PRO 1 ribbons to ribbon  
Adding Drawing working.pdb #1.1 ribbon_tethers to ribbon  
Adding Drawing working.pdb /D VAL 27 ribbons to ribbon  
Adding Drawing working.pdb #1.1 ribbon_tethers to ribbon  
Adding Drawing working.pdb /D UNK 466 ribbons to ribbon  
Adding Drawing working.pdb #1.1 ribbon_tethers to ribbon  
Adding Drawing bonds to working.pdb  
Adding Drawing pbonds to metal coordination bonds  
Adding Drawing pbonds to missing structure  
Adding Drawing working.pdb /A MET 1 ribbons to Symmetry ribbons  
Adding Drawing working.pdb #1.1 ribbon_tethers to Symmetry ribbons  
Adding Drawing working.pdb /A LYS 193 ribbons to Symmetry ribbons  
Adding Drawing working.pdb #1.1 ribbon_tethers to Symmetry ribbons  
Adding Drawing working.pdb /A ASN 358 ribbons to Symmetry ribbons  
Adding Drawing working.pdb #1.1 ribbon_tethers to Symmetry ribbons  
Adding Drawing working.pdb /A PRO 496 ribbons to Symmetry ribbons  
Adding Drawing working.pdb #1.1 ribbon_tethers to Symmetry ribbons  
Adding Drawing working.pdb /A GLY 610 ribbons to Symmetry ribbons  
Adding Drawing working.pdb #1.1 ribbon_tethers to Symmetry ribbons  
Adding Drawing working.pdb /A SER 1303 ribbons to Symmetry ribbons  
Adding Drawing working.pdb #1.1 ribbon_tethers to Symmetry ribbons  
Adding Drawing working.pdb /A HIS 1334 ribbons to Symmetry ribbons  
Adding Drawing working.pdb #1.1 ribbon_tethers to Symmetry ribbons  
Adding Drawing working.pdb /B PRO 1 ribbons to Symmetry ribbons  
Adding Drawing working.pdb #1.1 ribbon_tethers to Symmetry ribbons  
Adding Drawing working.pdb /D VAL 27 ribbons to Symmetry ribbons  
Adding Drawing working.pdb #1.1 ribbon_tethers to Symmetry ribbons  
Adding Drawing working.pdb /D UNK 466 ribbons to Symmetry ribbons  
Adding Drawing working.pdb #1.1 ribbon_tethers to Symmetry ribbons  
Adding Drawing working.pdb /A MET 1 ribbons to Symmetry ribbons  
Adding Drawing working.pdb #1.1 ribbon_tethers to Symmetry ribbons  
Adding Drawing working.pdb /A LYS 193 ribbons to Symmetry ribbons  
Adding Drawing working.pdb #1.1 ribbon_tethers to Symmetry ribbons  
Adding Drawing working.pdb /A ASN 358 ribbons to Symmetry ribbons  
Adding Drawing working.pdb #1.1 ribbon_tethers to Symmetry ribbons  
Adding Drawing working.pdb /A PRO 496 ribbons to Symmetry ribbons  
Adding Drawing working.pdb #1.1 ribbon_tethers to Symmetry ribbons  
Adding Drawing working.pdb /A GLY 610 ribbons to Symmetry ribbons  
Adding Drawing working.pdb #1.1 ribbon_tethers to Symmetry ribbons  
Adding Drawing working.pdb /A SER 1303 ribbons to Symmetry ribbons  
Adding Drawing working.pdb #1.1 ribbon_tethers to Symmetry ribbons  
Adding Drawing working.pdb /A HIS 1334 ribbons to Symmetry ribbons  
Adding Drawing working.pdb #1.1 ribbon_tethers to Symmetry ribbons  
Adding Drawing working.pdb /B PRO 1 ribbons to Symmetry ribbons  
Adding Drawing working.pdb #1.1 ribbon_tethers to Symmetry ribbons  
Adding Drawing working.pdb /D VAL 27 ribbons to Symmetry ribbons  
Adding Drawing working.pdb #1.1 ribbon_tethers to Symmetry ribbons  
Adding Drawing working.pdb /D UNK 466 ribbons to Symmetry ribbons  
Adding Drawing working.pdb #1.1 ribbon_tethers to Symmetry ribbons  

> close #1

Traceback (most recent call last):  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/core/updateloop.py", line 134, in _redraw_timer_callback  
self.session.ui.mouse_modes.mouse_pause_tracking()  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/mouse_modes/mousemodes.py", line 356, in
mouse_pause_tracking  
self._mouse_pause()  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/mouse_modes/mousemodes.py", line 454, in _mouse_pause  
m.pause(self._mouse_pause_position)  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/mouse_modes/std_modes.py", line 490, in pause  
p = picked_object(x, y, self.view)  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/mouse_modes/mousemodes.py", line 596, in picked_object  
xyz1, xyz2 = view.clip_plane_points(window_x, window_y)  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/core/graphics/view.py", line 880, in clip_plane_points  
near, far = self.near_far_distances(c, view_num, include_clipping = False)  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/core/graphics/view.py", line 841, in near_far_distances  
near, far = self._near_far_bounds(cp, vd)  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/core/graphics/view.py", line 854, in _near_far_bounds  
b = self.drawing_bounds(allow_drawing_changes = False)  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/core/graphics/view.py", line 592, in drawing_bounds  
dm.cached_drawing_bounds = b = self.drawing.bounds()  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/core/graphics/drawing.py", line 908, in bounds  
dbounds = [d.bounds() for d in self.child_drawings()  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/core/graphics/drawing.py", line 909, in <listcomp>  
if d.display and not getattr(d, 'skip_bounds', False)]  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/core/graphics/drawing.py", line 335, in get_display  
return self._any_displayed_positions and len(self._positions) > 0  
TypeError: object of type 'NoneType' has no len()  
  
TypeError: object of type 'NoneType' has no len()  
  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/core/graphics/drawing.py", line 335, in get_display  
return self._any_displayed_positions and len(self._positions) > 0  
  
See log for complete Python traceback.  
  
Traceback (most recent call last):  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/core/updateloop.py", line 134, in _redraw_timer_callback  
self.session.ui.mouse_modes.mouse_pause_tracking()  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/mouse_modes/mousemodes.py", line 356, in
mouse_pause_tracking  
self._mouse_pause()  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/mouse_modes/mousemodes.py", line 454, in _mouse_pause  
m.pause(self._mouse_pause_position)  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/mouse_modes/std_modes.py", line 490, in pause  
p = picked_object(x, y, self.view)  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/mouse_modes/mousemodes.py", line 596, in picked_object  
xyz1, xyz2 = view.clip_plane_points(window_x, window_y)  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/core/graphics/view.py", line 880, in clip_plane_points  
near, far = self.near_far_distances(c, view_num, include_clipping = False)  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/core/graphics/view.py", line 841, in near_far_distances  
near, far = self._near_far_bounds(cp, vd)  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/core/graphics/view.py", line 854, in _near_far_bounds  
b = self.drawing_bounds(allow_drawing_changes = False)  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/core/graphics/view.py", line 592, in drawing_bounds  
dm.cached_drawing_bounds = b = self.drawing.bounds()  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/core/graphics/drawing.py", line 908, in bounds  
dbounds = [d.bounds() for d in self.child_drawings()  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/core/graphics/drawing.py", line 909, in <listcomp>  
if d.display and not getattr(d, 'skip_bounds', False)]  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/core/graphics/drawing.py", line 335, in get_display  
return self._any_displayed_positions and len(self._positions) > 0  
TypeError: object of type 'NoneType' has no len()  
  
TypeError: object of type 'NoneType' has no len()  
  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/core/graphics/drawing.py", line 335, in get_display  
return self._any_displayed_positions and len(self._positions) > 0  
  
See log for complete Python traceback.  
  
Traceback (most recent call last):  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/core/updateloop.py", line 134, in _redraw_timer_callback  
self.session.ui.mouse_modes.mouse_pause_tracking()  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/mouse_modes/mousemodes.py", line 356, in
mouse_pause_tracking  
self._mouse_pause()  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/mouse_modes/mousemodes.py", line 454, in _mouse_pause  
m.pause(self._mouse_pause_position)  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/mouse_modes/std_modes.py", line 490, in pause  
p = picked_object(x, y, self.view)  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/mouse_modes/mousemodes.py", line 596, in picked_object  
xyz1, xyz2 = view.clip_plane_points(window_x, window_y)  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/core/graphics/view.py", line 880, in clip_plane_points  
near, far = self.near_far_distances(c, view_num, include_clipping = False)  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/core/graphics/view.py", line 841, in near_far_distances  
near, far = self._near_far_bounds(cp, vd)  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/core/graphics/view.py", line 854, in _near_far_bounds  
b = self.drawing_bounds(allow_drawing_changes = False)  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/core/graphics/view.py", line 592, in drawing_bounds  
dm.cached_drawing_bounds = b = self.drawing.bounds()  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/core/graphics/drawing.py", line 908, in bounds  
dbounds = [d.bounds() for d in self.child_drawings()  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/core/graphics/drawing.py", line 909, in <listcomp>  
if d.display and not getattr(d, 'skip_bounds', False)]  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/core/graphics/drawing.py", line 335, in get_display  
return self._any_displayed_positions and len(self._positions) > 0  
TypeError: object of type 'NoneType' has no len()  
  
TypeError: object of type 'NoneType' has no len()  
  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/core/graphics/drawing.py", line 335, in get_display  
return self._any_displayed_positions and len(self._positions) > 0  
  
See log for complete Python traceback.  
  
Traceback (most recent call last):  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/core/updateloop.py", line 134, in _redraw_timer_callback  
self.session.ui.mouse_modes.mouse_pause_tracking()  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/mouse_modes/mousemodes.py", line 356, in
mouse_pause_tracking  
self._mouse_pause()  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/mouse_modes/mousemodes.py", line 454, in _mouse_pause  
m.pause(self._mouse_pause_position)  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/mouse_modes/std_modes.py", line 490, in pause  
p = picked_object(x, y, self.view)  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/mouse_modes/mousemodes.py", line 596, in picked_object  
xyz1, xyz2 = view.clip_plane_points(window_x, window_y)  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/core/graphics/view.py", line 880, in clip_plane_points  
near, far = self.near_far_distances(c, view_num, include_clipping = False)  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/core/graphics/view.py", line 841, in near_far_distances  
near, far = self._near_far_bounds(cp, vd)  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/core/graphics/view.py", line 854, in _near_far_bounds  
b = self.drawing_bounds(allow_drawing_changes = False)  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/core/graphics/view.py", line 592, in drawing_bounds  
dm.cached_drawing_bounds = b = self.drawing.bounds()  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/core/graphics/drawing.py", line 908, in bounds  
dbounds = [d.bounds() for d in self.child_drawings()  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/core/graphics/drawing.py", line 909, in <listcomp>  
if d.display and not getattr(d, 'skip_bounds', False)]  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/core/graphics/drawing.py", line 335, in get_display  
return self._any_displayed_positions and len(self._positions) > 0  
TypeError: object of type 'NoneType' has no len()  
  
TypeError: object of type 'NoneType' has no len()  
  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/core/graphics/drawing.py", line 335, in get_display  
return self._any_displayed_positions and len(self._positions) > 0  
  
See log for complete Python traceback.  
  
Traceback (most recent call last):  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/core/updateloop.py", line 134, in _redraw_timer_callback  
self.session.ui.mouse_modes.mouse_pause_tracking()  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/mouse_modes/mousemodes.py", line 356, in
mouse_pause_tracking  
self._mouse_pause()  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/mouse_modes/mousemodes.py", line 454, in _mouse_pause  
m.pause(self._mouse_pause_position)  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/mouse_modes/std_modes.py", line 490, in pause  
p = picked_object(x, y, self.view)  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/mouse_modes/mousemodes.py", line 596, in picked_object  
xyz1, xyz2 = view.clip_plane_points(window_x, window_y)  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/core/graphics/view.py", line 880, in clip_plane_points  
near, far = self.near_far_distances(c, view_num, include_clipping = False)  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/core/graphics/view.py", line 841, in near_far_distances  
near, far = self._near_far_bounds(cp, vd)  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/core/graphics/view.py", line 854, in _near_far_bounds  
b = self.drawing_bounds(allow_drawing_changes = False)  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/core/graphics/view.py", line 592, in drawing_bounds  
dm.cached_drawing_bounds = b = self.drawing.bounds()  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/core/graphics/drawing.py", line 908, in bounds  
dbounds = [d.bounds() for d in self.child_drawings()  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/core/graphics/drawing.py", line 909, in <listcomp>  
if d.display and not getattr(d, 'skip_bounds', False)]  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/core/graphics/drawing.py", line 335, in get_display  
return self._any_displayed_positions and len(self._positions) > 0  
TypeError: object of type 'NoneType' has no len()  
  
TypeError: object of type 'NoneType' has no len()  
  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/core/graphics/drawing.py", line 335, in get_display  
return self._any_displayed_positions and len(self._positions) > 0  
  
See log for complete Python traceback.  
  

[_many_ of these deleted]

Traceback (most recent call last):  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/core/updateloop.py", line 134, in _redraw_timer_callback  
self.session.ui.mouse_modes.mouse_pause_tracking()  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/mouse_modes/mousemodes.py", line 356, in
mouse_pause_tracking  
self._mouse_pause()  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/mouse_modes/mousemodes.py", line 454, in _mouse_pause  
m.pause(self._mouse_pause_position)  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/mouse_modes/std_modes.py", line 490, in pause  
p = picked_object(x, y, self.view)  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/mouse_modes/mousemodes.py", line 596, in picked_object  
xyz1, xyz2 = view.clip_plane_points(window_x, window_y)  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/core/graphics/view.py", line 880, in clip_plane_points  
near, far = self.near_far_distances(c, view_num, include_clipping = False)  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/core/graphics/view.py", line 841, in near_far_distances  
near, far = self._near_far_bounds(cp, vd)  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/core/graphics/view.py", line 854, in _near_far_bounds  
b = self.drawing_bounds(allow_drawing_changes = False)  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/core/graphics/view.py", line 592, in drawing_bounds  
dm.cached_drawing_bounds = b = self.drawing.bounds()  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/core/graphics/drawing.py", line 908, in bounds  
dbounds = [d.bounds() for d in self.child_drawings()  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/core/graphics/drawing.py", line 909, in <listcomp>  
if d.display and not getattr(d, 'skip_bounds', False)]  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/core/graphics/drawing.py", line 335, in get_display  
return self._any_displayed_positions and len(self._positions) > 0  
TypeError: object of type 'NoneType' has no len()  
  
TypeError: object of type 'NoneType' has no len()  
  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/core/graphics/drawing.py", line 335, in get_display  
return self._any_displayed_positions and len(self._positions) > 0  
  
See log for complete Python traceback.  
  
Traceback (most recent call last):  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/core/updateloop.py", line 134, in _redraw_timer_callback  
self.session.ui.mouse_modes.mouse_pause_tracking()  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/mouse_modes/mousemodes.py", line 356, in
mouse_pause_tracking  
self._mouse_pause()  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/mouse_modes/mousemodes.py", line 454, in _mouse_pause  
m.pause(self._mouse_pause_position)  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/mouse_modes/std_modes.py", line 490, in pause  
p = picked_object(x, y, self.view)  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/mouse_modes/mousemodes.py", line 596, in picked_object  
xyz1, xyz2 = view.clip_plane_points(window_x, window_y)  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/core/graphics/view.py", line 880, in clip_plane_points  
near, far = self.near_far_distances(c, view_num, include_clipping = False)  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/core/graphics/view.py", line 841, in near_far_distances  
near, far = self._near_far_bounds(cp, vd)  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/core/graphics/view.py", line 854, in _near_far_bounds  
b = self.drawing_bounds(allow_drawing_changes = False)  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/core/graphics/view.py", line 592, in drawing_bounds  
dm.cached_drawing_bounds = b = self.drawing.bounds()  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/core/graphics/drawing.py", line 908, in bounds  
dbounds = [d.bounds() for d in self.child_drawings()  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/core/graphics/drawing.py", line 909, in <listcomp>  
if d.display and not getattr(d, 'skip_bounds', False)]  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/core/graphics/drawing.py", line 335, in get_display  
return self._any_displayed_positions and len(self._positions) > 0  
TypeError: object of type 'NoneType' has no len()  
  
TypeError: object of type 'NoneType' has no len()  
  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/core/graphics/drawing.py", line 335, in get_display  
return self._any_displayed_positions and len(self._positions) > 0  
  
See log for complete Python traceback.  
  
Traceback (most recent call last):  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/core/updateloop.py", line 134, in _redraw_timer_callback  
self.session.ui.mouse_modes.mouse_pause_tracking()  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/mouse_modes/mousemodes.py", line 356, in
mouse_pause_tracking  
self._mouse_pause()  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/mouse_modes/mousemodes.py", line 454, in _mouse_pause  
m.pause(self._mouse_pause_position)  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/mouse_modes/std_modes.py", line 490, in pause  
p = picked_object(x, y, self.view)  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/mouse_modes/mousemodes.py", line 596, in picked_object  
xyz1, xyz2 = view.clip_plane_points(window_x, window_y)  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/core/graphics/view.py", line 880, in clip_plane_points  
near, far = self.near_far_distances(c, view_num, include_clipping = False)  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/core/graphics/view.py", line 841, in near_far_distances  
near, far = self._near_far_bounds(cp, vd)  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/core/graphics/view.py", line 854, in _near_far_bounds  
b = self.drawing_bounds(allow_drawing_changes = False)  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/core/graphics/view.py", line 592, in drawing_bounds  
dm.cached_drawing_bounds = b = self.drawing.bounds()  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/core/graphics/drawing.py", line 908, in bounds  
dbounds = [d.bounds() for d in self.child_drawings()  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/core/graphics/drawing.py", line 909, in <listcomp>  
if d.display and not getattr(d, 'skip_bounds', False)]  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/core/graphics/drawing.py", line 335, in get_display  
return self._any_displayed_positions and len(self._positions) > 0  
TypeError: object of type 'NoneType' has no len()  
  
TypeError: object of type 'NoneType' has no len()  
  
File "/opt/UCSF/ChimeraX-daily/lib/python3.7/site-
packages/chimerax/core/graphics/drawing.py", line 335, in get_display  
return self._any_displayed_positions and len(self._positions) > 0  
  
See log for complete Python traceback.  
  




OpenGL version: 3.3.0 NVIDIA 418.87.01
OpenGL renderer: TITAN Xp/PCIe/SSE2
OpenGL vendor: NVIDIA Corporation

Change History (6)

comment:1 by Eric Pettersen, 6 years ago

Component: UnassignedGraphics
Description: modified (diff)
Owner: set to Tom Goddard
Platform: all
Project: ChimeraX
Status: newassigned
Summary: ChimeraX bug report submissionself._positions is None

comment:2 by Eric Pettersen, 6 years ago

From Tristan (couldn't originally comment on ticket due to long description): "found my problem - I'd just forgotten to
call Model.set_state_from_snapshot() on the Surface instance"

comment:3 by Tom Goddard, 6 years ago

I guess what happened here is you created a model in a session restore and due to fault session restore model.parent was not set, and yet the parent did point to the child (which session restore did). So then if you close the model, it can't find its parent since the parent is None, so it doesn't remove it as a child from the parent. Then when the parent draws it tries to draw a closed model giving the observed traceback.

I'm not sure how to better handle this error condition -- a Model was half setup by faulty session restore code. I guess safety code could be put into the Model code that draws its children to first test each child to see if it has been deleted, and if it has to remove it and issue a warning. But this is should be a very rare condition, requires just the right buggy code, where a child got deleted and the parent was never told.

comment:4 by Tom Goddard, 6 years ago

Resolution: not a bug
Status: assignedclosed

I don't see anything to do here.

in reply to:  5 ; comment:5 by Tristan Croll, 6 years ago

All fair points. What I was thinking was to place a `try:/except:` where 
the `except:` would forcibly remove the offending model with a warning 
to the log, so the session is still recoverable. But you're right - it's 
a pretty rare case.

On 2019-12-03 19:38, ChimeraX wrote:

in reply to:  6 ; comment:6 by Tom Goddard, 6 years ago

There are a lot of ways session restore can put things in an inconsistent state, and just protecting against one rare case isn't likely to help.  If the same session restore failure is seen in different code though it could be worth putting in some recovery code.  For instance, I think if a tool throws an exception restoring a session we would ideally restore everything except that tool to make session restore more robust.  Likewise if a tool tries to save some unsavable state in a session it would be good to just warn and save all the other tools and models (I just made a ticket for that #2638).  But your case is session restore made inconsistent state that only produced an error later when you tried to close a model.  That is what I'm saying will be hard to protect against -- errors that were made by session restore but don't appear until later.


Note: See TracTickets for help on using tickets.