Opened 5 years ago

Closed 5 years ago

Last modified 5 years ago

#3589 closed defect (not a bug)

Saving instance in session

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

Description

The following bug report has been submitted:
Platform:        Linux-3.10.0-1127.13.1.el7.x86_64-x86_64-with-centos-7.8.2003-Core
ChimeraX Version: 1.0 (2020-06-04 23:15:07 UTC)
Description
I have a class, `ResidueStepper`, whose role is to handle smoothly "stepping" the view through a model one residue at a time. Currently on creation I add it as a property of the `AtomicStructure` it's attached to. It would be nice to be able to save and restore it with the session so the user can easily pick up where they left off. I've made it a subclass of `State` and implemented `take_snapshot()` and `restore_snapshot()`... but now I realise I don't know how to actually register it to take part in session save/restore (it seems all my other cases have been subclasses of classes for which this is already handled automatically). What do I need to do here? 

Log:
UCSF ChimeraX version: 1.0 (2020-06-04)  
© 2016-2020 Regents of the University of California. All rights reserved.  

> open test.cxs

Deleting atomic symmetry model...  
Deleting (LIVE) MDFF potential  
Deleting (LIVE) 2mFo-DFc_sharp_29  
Deleting (LIVE) 2mFo-DFc  
Deleting (LIVE) mFo-DFc  
Deleting Crystallographic maps (3io0-sf.mtz)  

restore_snapshot for "RotamerRestraintMgr" returned None  

Log from Mon Aug 3 18:15:24 2020UCSF ChimeraX version: 1.0 (2020-06-04)  
© 2016-2020 Regents of the University of California. All rights reserved.  

> open /home/tic20/test.cxs format session

restore_snapshot for "RotamerRestraintMgr" returned None  

Log from Mon Aug 3 18:11:42 2020UCSF ChimeraX version: 1.0 (2020-06-04)  
© 2016-2020 Regents of the University of California. All rights reserved.  

> open test.cxs

Deleting atomic symmetry model...  
Deleting (LIVE) 2mFo-DFc  
Deleting (LIVE) MDFF potential  
Deleting (LIVE) 2mFo-DFc_sharp_29  
Deleting (LIVE) mFo-DFc  
Deleting Crystallographic maps (3io0-sf.mtz)  

restore_snapshot for "RotamerRestraintMgr" returned None  

Log from Mon Aug 3 18:11:04 2020UCSF ChimeraX version: 1.0 (2020-06-04)  
© 2016-2020 Regents of the University of California. All rights reserved.  
How to cite UCSF ChimeraX  
Successfully installed 'ChimeraX_ISOLDE-1.0rc1-cp37-cp37m-linux_x86_64.whl'  
Looking in indexes: https://pypi.org/simple,
https://cxtoolshed.rbvi.ucsf.edu/pypi/  
Processing
./.cache/ChimeraX/1.0/installers/ChimeraX_ISOLDE-1.0rc1-cp37-cp37m-linux_x86_64.whl  
Requirement already satisfied, skipping upgrade: ChimeraX-Arrays~=1.0 in
/opt/UCSF/ChimeraX/lib/python3.7/site-packages (from ChimeraX-ISOLDE==1.0rc1)
(1.0)  
Requirement already satisfied, skipping upgrade: ChimeraX-Clipper~=0.13.0 in
./.local/share/ChimeraX/1.0/site-packages (from ChimeraX-ISOLDE==1.0rc1)
(0.13.0)  
Requirement already satisfied, skipping upgrade: ChimeraX-Atomic>=1.0 in
/opt/UCSF/ChimeraX/lib/python3.7/site-packages (from ChimeraX-ISOLDE==1.0rc1)
(1.0)  
Requirement already satisfied, skipping upgrade: ChimeraX-
Core~=1.0rc202005052344 in /opt/UCSF/ChimeraX/lib/python3.7/site-packages
(from ChimeraX-ISOLDE==1.0rc1) (1.0)  
Requirement already satisfied, skipping upgrade: ChimeraX-Graphics~=1.0 in
/opt/UCSF/ChimeraX/lib/python3.7/site-packages (from ChimeraX-
Atomic>=1.0->ChimeraX-ISOLDE==1.0rc1) (1.0)  
Requirement already satisfied, skipping upgrade: ChimeraX-Geometry~=1.0 in
/opt/UCSF/ChimeraX/lib/python3.7/site-packages (from ChimeraX-
Atomic>=1.0->ChimeraX-ISOLDE==1.0rc1) (1.0)  
Installing collected packages: ChimeraX-ISOLDE  
Attempting uninstall: ChimeraX-ISOLDE  
Found existing installation: ChimeraX-ISOLDE 1.0rc1  
Uninstalling ChimeraX-ISOLDE-1.0rc1:  
Successfully uninstalled ChimeraX-ISOLDE-1.0rc1  
Successfully installed ChimeraX-ISOLDE-1.0rc1  
Lock 139937780277904 acquired on
/home/tic20/.cache/ChimeraX/1.0/toolshed/bundle_info.cache.lock  
Lock 139937780277904 released on
/home/tic20/.cache/ChimeraX/1.0/toolshed/bundle_info.cache.lock  
  

WARNING: You are using pip version 20.1; however, version 20.2 is available.  
You should consider upgrading via the '/usr/bin/chimerax -m pip install
--upgrade pip' command.  
  

> isolde demo crystal_intro

> set selectionWidth 4

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.2/A | predicted microcompartment protein  
  

WARNING: multiple experimental reflection datasets found:  
(dataset) FOBS, SIGFOBS,  
(dataset) IOBS, SIGIOBS,  
(dataset) DANO, SIGDANO,  
(dataset) F(+), SIGF(+), F(-), SIGF(-),  
(dataset) I(+), SIGI(+), I(-), SIGI(-)  
Automatically choosing "(dataset) IOBS, SIGIOBS".  

Reflection data provided as intensities. Performing French & Wilson scaling to
convert to amplitudes...  
Loaded crystallographic demo: PDB ID 3io0  
Done loading forcefield  

> save test.cxs

opened ChimeraX session  

> isolde stepto

> isolde stepto

> isolde stepto

> isolde stepto

> save test.cxs

opened ChimeraX session  

> isolde stepto

> isolde stepto

> isolde stepto

> isolde stepto

> save test.cxs

opened ChimeraX session  

> isolde stepto

> ui tool show Shell

/opt/UCSF/ChimeraX/lib/python3.7/site-packages/IPython/core/history.py:226:
UserWarning: IPython History requires SQLite, your history will not be saved  
warn("IPython History requires SQLite, your history will not be saved")  




OpenGL version: 3.3.0 NVIDIA 450.51.05
OpenGL renderer: TITAN Xp/PCIe/SSE2
OpenGL vendor: NVIDIA Corporation
Manufacturer: Dell Inc.
Model: Precision T5600
OS: CentOS Linux 7 Core
Architecture: 64bit ELF
CPU: 32 Intel(R) Xeon(R) CPU E5-2687W 0 @ 3.10GHz
Cache Size: 20480 KB
Memory:
	              total        used        free      shared  buff/cache   available
	Mem:            62G        6.0G         43G        207M         13G         56G
	Swap:          4.9G          0B        4.9G

Graphics:
	03:00.0 VGA compatible controller [0300]: NVIDIA Corporation GP102 [TITAN Xp] [10de:1b02] (rev a1)	
	Subsystem: NVIDIA Corporation Device [10de:11df]	
	Kernel driver in use: nvidia
PyQt version: 5.12.3
Compiled Qt version: 5.12.4
Runtime Qt version: 5.12.8

Change History (5)

comment:1 by pett, 5 years ago

Component: UnassignedSessions
Owner: set to pett
Platform: all
Project: ChimeraX
Status: newaccepted
Summary: ChimeraX bug report submissionSaving instance in session

comment:2 by pett, 5 years ago

Resolution: not a bug
Status: acceptedclosed

For this case, you need to inherit from chimerax.state.StateManager rather than State. It has take/restore_snaphot methods, which would be unchanged. Your class's init method would also need to call self.init_state_manager(session, description), where "description" is a string that identifies what your class does in a specific enough way that it is unlikely to collide with the descriptions of other StateManager classes. It doesn't need to describe what a specific _instance_ does -- init_state_manager() will append to the description as necessary to distinguish instances. In the unlikely case that your class has a destroy() method, it would need to call super().destroy().

There is an example of using a StateManager in cmd.py in the swap_res bundle. The class is _RotamerStateManager.

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

Thanks!


comment:4 by Tristan Croll, 5 years ago

There appears to be a severe bug in StateManager.init_state_manager() (that I only noticed *after* I uploaded the ISOLDE release...). On the creation of the third StateManager of the same name, it falls into an infinite loop, because in the following i is never incremented:

        else:
            i = 1
            while True:
                tag = "%s %d" % (base_tag, i)
                try:
                    session.get_state_manager(tag)
                except KeyError:
                    break

I haven't actually *announced* the ISOLDE 1.0 release yet... would it be possible to pull it off the Tool Shed so I can put in a workaround for the time being?

comment:5 by pett, 5 years ago

I have fixed the bug and pushed the fix, but it's in the core so it won't get into a release until 1.1. Haven't heard back from Greg yet about replacing the ISOLDE 1.0 release.

Note: See TracTickets for help on using tickets.