Update:

worked the same for me, but may have impact in other cases:

MIN_LEVEL = 0
MAX_LEVEL = 20
LEVEL_RANGE = np.arange(MIN_LEVEL, MAX_LEVEL+0.5, 0.5)

def _get_map(map_name):
    dump_fhandle, dump_fname = tempfile.mkstemp()
    open(dump_fhandle).close()

    try:
        levels = {}
        for level in LEVEL_RANGE:
            # dump level
            cmd.isodot('_i', map_name, level)
            cmd.dump(dump_fname, '_i')
            cmd.delete('_i')

            # load level
            with warnings.catch_warnings():
                xyz = np.loadtxt(dump_fname)
                warnings.simplefilter("ignore")

            # handle empty maps
            if len(xyz) == 0:
                xyz = np.ndarray((0, 3))

            xyz = xyz[:, :3]
            levels[level] = xyz

        return levels
    finally:
        os.unlink(dump_fname)

Em ter., 5 de nov. de 2019 às 11:13, Pedro Lacerda <pslace...@gmail.com>
escreveu:

> For the sake of completeness here is some working code.
>
> `dump` exports the surface of map representations. They are all surfaces.
>
> So I had to dump the map at each level (0.5 by 0.5 increment) in order to
> get a filled volume. If you concatenate all xyz arrays you get the filled
> volume of the level 20 surface.
>
> Thank you for the support.
>
>
> MIN_LEVEL = 0
> MAX_LEVEL = 20
> LEVEL_RANGE = np.arange(MIN_LEVEL, MAX_LEVEL+0.5, 0.5)
>
>
> def _get_map(map_name):
>     dump_fhandle, dump_fname = tempfile.mkstemp()
>     open(dump_fhandle).close()
>
>     try:
>         levels = {}
>         skip = False
>         for level in LEVEL_RANGE:
>             if not skip:
>                 # dump level
>                 cmd.isodot('_i', map_name, level)
>                 cmd.dump(dump_fname, '_i')
>                 cmd.delete('_i')
>
>                 # load level
>                 with warnings.catch_warnings():
>                     xyz = np.loadtxt(dump_fname)
>                     warnings.simplefilter("ignore")
>
>             # handle empty maps
>             if skip or len(xyz) == 0:
>                 xyz = np.ndarray((0, 3))
>                 skip = True
>
>             xyz = xyz[:, :3]
>             levels[level] = xyz
>
>         return levels
>     finally:
>         os.unlink(dump_fname)
>
> Em seg., 4 de nov. de 2019 às 01:38, Pedro Lacerda <pslace...@gmail.com>
> escreveu:
>
>> Hi Jared,
>>
>> So COLLADA exports some kind of already rendered 3D image.
>>
>> Took me some time to figure out if dump exports the map points or
>> something specific to the surface representation. In fact, it is yet to be
>> figured out.
>>
>> Dump can export at least map and surface objects.
>>
>> When I export two different overlapping surfaces of the same map there is
>> points of the outer surface that aren't in the inner. I expected all points
>> of the inner to be present in both dumps.
>>
>> So I guess that when I dump surface objects it exports newly created
>> points of the enclosed volume of that surface. Is it correct?
>>
>> To export the map directly would preserve the original points? (Which I
>> hope to be the original grid count of the server's method)
>>
>> Is overlap is defined for map objects?
>>
>>
>> Sorry maybe I'm not saying very clear.
>>
>> And about the get_volume_field(), if I remember correctly it returned on
>> a call an ndarray of shape (28, 26, 15) and on other call an ndarray of
>> shape (28, 28, 16). Something like that.
>>
>>
>> Cheers,
>>
>>
>> Em sex, 1 de nov de 2019 10:33, Jared Sampson <jared.samp...@columbia.edu>
>> escreveu:
>>
>>> Hi Pedro -
>>>
>>> The COLLADA option exports unlabeled mesh objects so I couldn't figure
>>> out which one is acceptor or donor.
>>>
>>> Yes, you're correct about that.  This is due to the fact that COLLADA
>>> export uses geometry after it is prepared for ray tracing, which doesn't
>>> know about object names (see the primary function call
>>> <https://github.com/schrodinger/pymol-open-source/blob/master/layer1/COLLADA.cpp#L667>).
>>> It might be interesting/useful to export things in a more granular way
>>> using pre-ray-tracing information as it is stored in the PyMOL session, but
>>> that would involve substantial effort, and wasn't included when we planned
>>> this export feature.
>>>
>>> If you wanted to know which mesh is which, you could export objects
>>> one-at-a-time by disabling all the others, although to me, the dump command
>>> output looks more helpful as it can be more easily parsed.
>>>
>>> Just one more question, what are these normal values?
>>>
>>>
>>> The normal values Thomas refers to are the 3 components of the vector
>>> indicating the direction toward the "outside" of the object, which is
>>> normal to the surface the triangle mesh attempts to approximate.  This is
>>> used in shading.
>>>
>>> https://en.wikipedia.org/wiki/Vertex_normal
>>>
>>> The cmd.get_volume_field() returns a sparse ndarray with unknow layout
>>> and all dimensions variables depending of the object. How to interpret such
>>> array?
>>> On PyMOL 1.x it returned -1 but in 2.x returned the array.
>>>
>>> The dump command worked (almost) like a charm.
>>> I expect to extract the "dump" array from get_volume_field() so don't
>>> need to write the file just to be read and deleted afterwards. Is it
>>> possible?
>>>
>>>
>>> I'm not familiar with `cmd.get_volume_field()`, so I'll defer to others
>>> on those questions.
>>>
>>> Hope that helps.
>>>
>>> Cheers,
>>> Jared
>>>
>>
>
> --
> Pedro Sousa Lacerda
>
>
> *Laboratório de Bioinformática e Modelagem Molecular*
> *Faculdade de Farmácia / UFBA*
>
> *@pslacerda*
>
> *+55 71 9 9981-1856*
>


-- 
Pedro Sousa Lacerda


*Laboratório de Bioinformática e Modelagem Molecular*
*Faculdade de Farmácia / UFBA*

*@pslacerda*

*+55 71 9 9981-1856*
_______________________________________________
PyMOL-users mailing list
Archives: http://www.mail-archive.com/pymol-users@lists.sourceforge.net
Unsubscribe: 
https://sourceforge.net/projects/pymol/lists/pymol-users/unsubscribe

Reply via email to