[cctbxbb] model selection

Oleg Sobolev osobolev at lbl.gov
Thu Aug 16 16:40:16 PDT 2018


Hi Pavel,


> Speaking of consistency, 'selection' of 'atom_selection_cache' uses
> 'string' as the argument, not selstr as in 'model', example:
>
Indeed this is not very consistent. I don't remember if it was in original
model, or I did it. Anyway, I'll change selstr to string for consistency.


> I see the different between these flavors of select*. Ok, I afraid I'll
> have to read the code each time I use these..
>
Forgetting to use atom_selection_cache() function at all should help with
this.

Oleg.


>
>
> Pavel
>
>
> On 8/16/18 16:01, Oleg Sobolev wrote:
>
> Hi Pavel,
>
> Currently model class has three selection methods:
>>
>> def selection(self, selstr, optional=True):
>>
> Takes selection string, returns bool selection
>
> def select(self, selection):
>>
> Takes selection (bool or iselection), applies it to self and returns
> selected part of model object.
>
> def iselection(self, selstr):
>>
> Same as first, but returns iselection.
>
>
> which is hideously confusing with zero chance to remember, and also
>> inconsistent with the rest.
>>
> Let me disagree on the point of inconsistency with the rest.
> selection and iselection functions are available with exactly same meaning
> for atom_selection_cache.
> select is available with exact same meaning (returning part of an object)
> in hierarchy, af_shared_atom, flex.vec3_double, xray_structure etc which
> you pointed out.
>
>
>> Can we consolidate all three into one ".select()" that would allow taking
>> bool or int or str?
>>
> No, because they are doing different things. Selection and iselection
> wraps atom_selection_cache functionality and not duplicating those of
> select() function. ".select()" function already has the described
> functionality.
>
>
>> Or you think there are philosophical arguments against it?
>>
> Yes, and practical ones as well. I'm caching atom_selection_cache inside
> model object, so you don't have to construct it again if you use wrappers
> available in model class. hierarchy.atom_selection_cache() is not a free
> function to the point I had to pass the cache around to avoid constructing
> it again to achieve measurable speedup. Especially for larger models.
>
> At the very least, please use model.get_atom_selection_cache() instead of
> constructing it.
>
> Best regards,
> Oleg Sobolev.
>
>
>>
>> Pavel
>>
>> On 8/16/18 15:00, CCTBX commit wrote:
>>
>> Repository : ssh://g18-sc-serv-04.diamond.ac.uk/cctbx
>> On branch  : master
>>
>> ------------------------------
>>
>>
>> commit c98b44997e8eb7bf53ee828f510b933cd5167758
>> Author: Oleg Sobolev <osobolev at lbl.gov> <osobolev at lbl.gov>
>> Date:   Thu Aug 16 15:00:20 2018 -0700
>>
>>     Proper use of model class
>>
>>
>> ------------------------------
>>
>>
>> c98b44997e8eb7bf53ee828f510b933cd5167758
>> mmtbx/model/model.py | 3 +--
>> 1 file changed, 1 insertion(+), 2 deletions(-)
>>
>> diff --git a/mmtbx/model/model.py b/mmtbx/model/model.py
>> index 6f2247452..87412f95c 100644
>> --- a/mmtbx/model/model.py
>> +++ b/mmtbx/model/model.py
>> @@ -2312,8 +2312,7 @@ class manager(object):
>>      sizes = flex.int()
>>      h = self.get_hierarchy()
>>      if(macro_molecule_only):
>> -      asc = h.atom_selection_cache()
>> -      s = asc.selection("protein or nucleotide")
>> +      s = self.selection("protein or nucleotide")
>>        h = h.select(s)
>>      for r in h.residue_groups():
>>        sizes.append(r.atoms().size())
>>
>>
>>
>> _______________________________________________
>> cctbxbb mailing list
>> cctbxbb at phenix-online.org
>> http://phenix-online.org/mailman/listinfo/cctbxbb
>>
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://phenix-online.org/pipermail/cctbxbb/attachments/20180816/f60b4006/attachment.htm>


More information about the cctbxbb mailing list