Opened 7 years ago
Closed 6 years ago
#1779 closed defect (fixed)
ISOLDE picking: unsupported operand type(s) for -: 'NoneType' and 'NoneType'
Reported by: | Owned by: | Tristan Croll | |
---|---|---|---|
Priority: | normal | Milestone: | |
Component: | Third Party | Version: | |
Keywords: | Cc: | Tom Goddard | |
Blocked By: | Blocking: | ||
Notify when closed: | Platform: | all | |
Project: | ChimeraX |
Description
The following bug report has been submitted: Platform: Windows-10-10.0.17763 ChimeraX Version: 0.8 (2018-12-17) Description Right click and drag in ISOLDE, showing demo data, produced this error. Log: Startup Messages --- warning | 'clip' is a prefix of an existing command 'clipper' note | Traceback (most recent call last): File "C:\Program Files\ChimeraX-0.8\bin\lib\site- packages\chimerax\core\toolshed\\\\__init__.py", line 338, in __init__ self.init_available_from_cache(logger) File "C:\Program Files\ChimeraX-0.8\bin\lib\site- packages\chimerax\core\toolshed\\\\__init__.py", line 445, in init_available_from_cache abc.load_from_cache() File "C:\Program Files\ChimeraX-0.8\bin\lib\site- packages\chimerax\core\toolshed\available.py", line 61, in load_from_cache b = _build_bundle(d) File "C:\Program Files\ChimeraX-0.8\bin\lib\site- packages\chimerax\core\toolshed\available.py", line 242, in _build_bundle keywords = _extract_extra_keywords(keywords) File "C:\Program Files\ChimeraX-0.8\bin\lib\site- packages\chimerax\core\toolshed\installed.py", line 270, in _extract_extra_keywords all_kwds = [k.strip() for k in kwds.split(',')] AttributeError: 'list' object has no attribute 'split' UCSF ChimeraX version: 0.8 (2018-12-17) How to cite UCSF ChimeraX Downloading bundle ChimeraX_ISOLDE-1.0b2-cp36-cp36m-win_amd64.whl unloading module chimerax.isolde Successfully installed ChimeraX-ISOLDE-1.0b2 Installed ChimeraX-ISOLDE (1.0b2) 'clip' is a prefix of an existing command 'clipper' > toolshed show ISOLDE Summary of feedback from opening C:\Program Files\ChimeraX-0.8\bin\lib\site- packages\chimerax\isolde\demo_data\3io0\before.pdb --- warning | Ignored bad PDB record found on line 3846 END before.pdb title: Crystal structure of etub from clostridium kluyveri [more info...] Chain information for before.pdb #1 --- Chain | Description A | predicted microcompartment protein before.pdb title: Crystal structure of etub from clostridium kluyveri [more info...] Chain information for before.pdb --- Chain | Description 1.3/A | predicted microcompartment protein > set bgColor black > ui mousemode rightMode zoom > ui mousemode rightMode zoom > vr on started SteamVR rendering > clip off VR mode select > vr off > vr off > select up 19 atoms, 18 bonds, 1 model selected > vr off reverting to start > ui mousemode rightMode zoom > select up 17 atoms, 16 bonds, 1 model selected > vr off > vr on started SteamVR rendering VR mode contour level > volume #1.1.1.3 level 0.2104 > volume #1.1.1.3 level 0.1786 > volume #1.1.1.3 level 0.1799 > volume #1.1.1.3 level 0.1752 > volume #1.1.1.3 level 0.4274 > volume #1.1.1.1 level 0.1753 Traceback (most recent call last): File "C:\Program Files\ChimeraX-0.8\bin\lib\site- packages\chimerax\mouse_modes\mousemodes.py", line 436, in <lambda> gw.mousePressEvent = lambda e, s=self: s._dispatch_mouse_event(e, "mouse_down") File "C:\Program Files\ChimeraX-0.8\bin\lib\site- packages\chimerax\mouse_modes\mousemodes.py", line 367, in _dispatch_mouse_event f(MouseEvent(event)) File "C:\Program Files\ChimeraX-0.8\bin\lib\site- packages\chimerax\isolde\tugging.py", line 95, in mouse_down pick = picking.pick_closest_to_line(self.session, x, y, self._atoms, 0.5) File "C:\Program Files\ChimeraX-0.8\bin\lib\site- packages\chimerax\isolde\picking.py", line 25, in pick_closest_to_line length = numpy.linalg.norm(xyz2-xyz1) TypeError: unsupported operand type(s) for -: 'NoneType' and 'NoneType' TypeError: unsupported operand type(s) for -: 'NoneType' and 'NoneType' File "C:\Program Files\ChimeraX-0.8\bin\lib\site- packages\chimerax\isolde\picking.py", line 25, in pick_closest_to_line length = numpy.linalg.norm(xyz2-xyz1) See log for complete Python traceback. OpenGL version: 3.3.0 NVIDIA 418.81 OpenGL renderer: Quadro P6000/PCIe/SSE2 OpenGL vendor: NVIDIA Corporation
Change History (6)
comment:2 by , 7 years ago
Component: | Unassigned → Third Party |
---|---|
Owner: | set to |
Platform: | → all |
Project: | → ChimeraX |
Status: | new → assigned |
Summary: | ChimeraX bug report submission → ISOLDE picking: unsupported operand type(s) for -: 'NoneType' and 'NoneType' |
follow-up: 3 comment:3 by , 7 years ago
Hmm, yes - my mouse picking mode expects there to be front and rear clipping planes. I’ve been meaning to give it a re-think. The reasons it exists at all are: (A) at the time I wrote it, it was impossible to make Volumes and other drawings non-pickable; and (B) while a simulation is running, it makes sense to limit selection to only the mobile atoms. Tristan Croll Research Fellow Cambridge Institute for Medical Research University of Cambridge CB2 0XY
comment:4 by , 7 years ago
Owner: | changed from | to
---|
This looks like it's actually a problem with stereo cameras, and will affect your own TugAtomsMode
in the same way. The problem is the call to View.clip_plane_points()
. In view.py, line 799:
def clip_plane_points(self, window_x, window_y, camera=None, view_num=None): ''' Return two scene points at the near and far clip planes at the specified window pixel position. The points are in scene coordinates. ''' c = camera if camera else self.camera origin, direction = c.ray(window_x, window_y, self.window_size) # Scene coords if origin is None: return (None, None)
... and in camera.py, only MonoCamera
and OrthoGraphicCamera
provide implementations of ray()
to override the base method:
def ray(self, window_x, window_y, window_size): ''' Return origin and direction in scene coordinates of sight line for the specified window pixel position. ''' return (None, None)
One possible approach would be for the stereo cameras to allow designation of a "dominant" eye to determine which of the two views the ray is calculated on?
comment:5 by , 6 years ago
Cc: | added |
---|---|
Owner: | changed from | to
View.clip_plane_points() can return None, None. Cameras do not need to support casting a ray from a window position (such as the VR camera where the mouse and window positions are not used). Code that uses clip_plane_points() needs to look for None return values.
comment:6 by , 6 years ago
Resolution: | → fixed |
---|---|
Status: | assigned → closed |
Long since fixed (sorry for not closing at the time). ISOLDE's tugging now uses the standard first_intercept()
rather than its own bespoke selection approach.