[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [IMP-users] basic map handling



Ben is currently using IMP 1.0 (as far as I know). Is the example likely to work on that? If so, Ben, you can just wait until tomorrow morning and then get it from the nightly build docs online.

On Aug 2, 2010, at 12:58 PM, Keren Lasker wrote:

Ben/Daniel - 
I agree that initializing a map from a bounding-box makes sense.
Please see revision 1644 that now contains an example on how to do that 
em/examples/generate_density_map_of_fixed_dimension.py

I have added a function that generates a header from a bounding box and show how to use it in the example.

Keren.
On Aug 2, 2010, at 7:57 AM, Daniel Russel wrote:

On Aug 1, 2010, at 10:07 PM, Keren Lasker wrote:

hi Ben - 
You can initiate a SampledDensityMap from a DensityHeader, which you can set to any dimension you want.
Does that make sense ?
What fields of the density header must be set in order for construction to work right?
set_number_of_voxels()
set_resolution()
set_{x,y,z}origin()
Objectpixelsize_ (there doesn't seem to be a set function, right?)
Anything else?


Our Ben - I am still for some reason not getting these messages, only after forwarding from Daniel :)
This message was old, I just revived it.


On Aug 1, 2010, at 12:31 PM, Daniel Russel wrote:

Keren? I have comments below.

On Jul 22, 2010, at 6:51 AM, Benjamin SCHWARZ wrote:

Hi list,

    I could not find how to Generate a density map from a structure with a *fixed* dimension :
When using IMP.em.SampledDensityMap(ps,resolution,apix) with a fixed size for apix, the grid size depends on the resolution. I would like to write a function that would allow me to generate maps with the same number of vertices (and the same space coverage) for different resolutions. I thus tried :

def pdbFile2dmap (pdbStream,densityFile,resolution,apix,sel,bboxCoverage=1.2):
    '''
    pdbStream       : where to read the structure
    densityFile     : name of the file where to drop the density map
    resolution      : resolution of the density map
    apix            : voxel size
    sel             : selector for reading structure
    bboxCoverage    : approximate bbox coverage of the density map 
    '''
    m= IMP.Model()
    # read protein
    mh              = IMP.atom.read_pdb(pdbStream,m,sel)
    # add radius info to each atom
    IMP.atom.add_radii(mh)
    # compute bbox, and map size in voxels
    bbox            = IMP.atom.get_bounding_box(mh)
    diag            = bbox.get_corner(0) - bbox.get_corner(1)
    nx              = int(bboxCoverage * diag[0] / apix)
    ny              = int(bboxCoverage * diag[1] / apix)
    nz              = int(bboxCoverage * diag[2] / apix)
    # compute origin
    origin          = bbox.get_corner(0) + (1-bboxCoverage)/2 * diag

    dmap            = IMP.em.SampledDensityMap()
#    dmap.CreateVoidMap(nx,ny,nz)
    ps              = IMP.Particles(IMP.core.get_leaves(mh))
    dmap.set_particles(ps)
    dmap.set_origin(origin)
    dmap.get_header_writable().set_number_of_voxels(nx,ny,nz)
    dmap.get_header_writable().set_resolution(resolution)
    dmap.update_voxel_size(apix)
    dmap.resample()
    dmap.calcRMS()      # computes statistic stuff about the map and insert it in the header
    print dmap.get_header().show(),"\n"
    IMP.em.write_map(dmap,densityFile,IMP.em.MRCReaderWriter())

that resulted in :

python(10802) malloc: *** mmap(size=18446744073709314048) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
Traceback (most recent call last):
  File "./pdb2density.py", line 181, in <module>
    pdbFile2dmap(pdbStream,densityFile,resolution,apix,sel,1.2)
  File "./pdb2density.py", line 75, in pdbFile2dmap
    dmap.update_voxel_size(apix)
  File "/usr/local/lib/python2.6/site-packages/IMP/em/__init__.py", line 428, in update_voxel_size
    def update_voxel_size(self, *args): return _IMP_em.DensityMap_update_voxel_size(self, *args)
MemoryError: std::bad_alloc


Can you tell me if my approach is OK, and how to solve my allocation problem ?
There DenistyMap/DensityHeader is still a bit finicky (that is, there are protocols which have to be followed, and, even worse, they don't tend to be documented). Keren is working on a cleaner version. My guess it the problem is due to not setting the "upper right" value or the length of the edge of each voxel. I don't see the function to do that offhand. Keren?


I would also like to know if there are easy means in IMP to 
1.) Strip a density map : out of an existing map, create a new map or restrict the existing one, so as to conserve only a central subset of voxels
There is get_transformed_into() which could be used. This may be a post 1.0 addition.

2.) Re-sample a map : Conserve the density map "box" size, and change the number of voxels that cover it
There is get_resampled(). Also may be a post 1.0 addition.

 
   --Ben
_______________________________________________
IMP-users mailing list
">
https://salilab.org/mailman/listinfo/imp-users

_______________________________________________
IMP-users mailing list
">
https://salilab.org/mailman/listinfo/imp-users

_______________________________________________
IMP-users mailing list
">
https://salilab.org/mailman/listinfo/imp-users

_______________________________________________
IMP-users mailing list
">
https://salilab.org/mailman/listinfo/imp-users

_______________________________________________
IMP-users mailing list
">
https://salilab.org/mailman/listinfo/imp-users