﻿id	summary	reporter	owner	description	type	status	priority	milestone	component	version	resolution	keywords	cc	blockedby	blocking	notify_on_close	platform	project
1531	session.models.assign_id() failure	Tristan Croll	Tristan Croll	"Clipper's `Symmetry_Manager` class is designed to take over control of an `AtomicStructure` (taking over its ID if it's a top-level model) and some set of `Volume` subclasses:

{{{
class Symmetry_Manager(Model):
    '''
    Handles crystallographic symmetry and maps for an atomic model.
    '''
    def __init__(self, model, mtzfile=None, map_oversampling=1.5,
        min_voxel_size = 0.5, spotlight_mode = True, spotlight_radius=12,
        hydrogens='polar', ignore_model_symmetry=False,
        set_lighting_to_simple=True, debug=False):

        # A bunch of code irrelevant to the problem.

        id = model.id
        self.add([model])
        session.models.add([self])
        if len(id) == 1:
            session.models.assign_id(self, id)

}}}

The task of associating a map with a model is exposed to the command line as `clipper associate {VolumesArg} toModel {StructureArg}`.

... which seems to work fine at first:

{{{
open 6eyd
open 3983 from emdb
clipper assoc #2 to #1

# Success
}}}

but (in a fresh session)

{{{
open 6eyd
open 3983 from emdb
close #1
open 6eyd
clipper assoc #2 to #1

cxclipper associate #2 toModel #1Traceback (most recent call last):
  File ""/opt/UCSF/ChimeraX-daily/lib/python3.6/site-packages/chimerax/cmd_line/tool.py"", line 229, in execute
    cmd.run(cmd_text)
  File ""/opt/UCSF/ChimeraX-daily/lib/python3.6/site-packages/chimerax/core/commands/cli.py"", line 2586, in run
    result = ci.function(session, **kw_args)
  File ""/home/tic20/.local/share/ChimeraX/0.8/site-packages/chimerax/clipper/cmd.py"", line 52, in associate_volumes
    mgr = get_map_mgr(to_model, create=True)
  File ""/home/tic20/.local/share/ChimeraX/0.8/site-packages/chimerax/clipper/symmetry.py"", line 149, in get_map_mgr
    sh = get_symmetry_handler(structure, create=create)
  File ""/home/tic20/.local/share/ChimeraX/0.8/site-packages/chimerax/clipper/symmetry.py"", line 145, in get_symmetry_handler
    return Symmetry_Manager(structure)
  File ""/home/tic20/.local/share/ChimeraX/0.8/site-packages/chimerax/clipper/symmetry.py"", line 431, in __init__
    session.models.assign_id(self, id)
  File ""/opt/UCSF/ChimeraX-daily/lib/python3.6/site-packages/chimerax/core/models.py"", line 474, in assign_id
    del mt[model.id]
KeyError: (1,)

KeyError: (1,)

File ""/opt/UCSF/ChimeraX-daily/lib/python3.6/site-packages/chimerax/core/models.py"", line 474, in assign_id
del mt[model.id]

See log for complete Python traceback.

Traceback (most recent call last):
  File ""/opt/UCSF/ChimeraX-daily/lib/python3.6/site-packages/chimerax/core/triggerset.py"", line 130, in invoke
    return self._func(self._name, data)
  File ""/opt/UCSF/ChimeraX-daily/lib/python3.6/site-packages/chimerax/model_panel/tool.py"", line 127, in <lambda>
    lambda *args, ft=self._fill_tree: ft(always_rebuild=True))
  File ""/opt/UCSF/ChimeraX-daily/lib/python3.6/site-packages/chimerax/model_panel/tool.py"", line 160, in _fill_tree
    parent = item_stack[0] if len(item_stack) == 1 else item_stack[len_id-1]
IndexError: list index out of range

Error processing trigger ""frame drawn"": list index out of range:
IndexError: list index out of range

File ""/opt/UCSF/ChimeraX-daily/lib/python3.6/site-packages/chimerax/model_panel/tool.py"", line 160, in _fill_tree
parent = item_stack[0] if len(item_stack) == 1 else item_stack[len_id-1]


}}}

If in `models.assign_id()` I make the following substitution:

{{{
<        del mt[model.id]
>        mt.pop(model.id, None)
}}}

... then it works again - but then why does it work in the first instance above?
"	defect	closed	major		Core		fixed		Eric Pettersen Tom Goddard				all	ChimeraX
