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 >>>>> IMP-users@salilab.org >>>>> https://salilab.org/mailman/listinfo/imp-users >>>> >>>> _______________________________________________ >>>> IMP-users mailing list >>>> IMP-users@salilab.org >>>> https://salilab.org/mailman/listinfo/imp-users >>> >>> _______________________________________________ >>> IMP-users mailing list >>> IMP-users@salilab.org >>> https://salilab.org/mailman/listinfo/imp-users >> >> _______________________________________________ >> IMP-users mailing list >> IMP-users@salilab.org >> https://salilab.org/mailman/listinfo/imp-users > > _______________________________________________ > IMP-users mailing list > IMP-users@salilab.org > https://salilab.org/mailman/listinfo/imp-users