@@ -212,6 +212,12 @@ class Grid(object):
212212
213213 #: Default format for exporting with :meth:`export`.
214214 default_format = 'DX'
215+
216+ converter = {
217+ 'MRC' : mrc .MRC .from_grid ,
218+ 'VDB' : None ,
219+ 'DX' : OpenDX .field .from_grid ,
220+ }
215221
216222 def __init__ (self , grid = None , edges = None , origin = None , delta = None ,
217223 metadata = None , interpolation_spline_order = 3 ,
@@ -598,6 +604,32 @@ def _load_plt(self, filename, **kwargs):
598604 grid , edges = g .histogramdd ()
599605 self ._load (grid = grid , edges = edges , metadata = self .metadata )
600606
607+ def convert_to (self , format_specifier , tolerance = None , ** kwargs ):
608+ """Generates an instance of the native object for a given format
609+
610+ Implemented formats:
611+
612+ DX
613+ :mod:`OpenDX`
614+ MRC
615+ :mod:`mrc` MRC/CCP4 format
616+
617+ Parameters
618+ ----------
619+ format_specifier : str
620+
621+ tolerance : float (default is None)
622+
623+ Returns
624+ -------
625+ native object
626+
627+ """
628+ fmt_upper = format_specifier .upper ()
629+
630+ wrapper = self .converter [fmt_upper ](self , ** kwargs )
631+ return wrapper .native
632+
601633 def export (self , filename , file_format = None , type = None , typequote = '"' ):
602634 """export density to file using the given format.
603635
@@ -673,29 +705,8 @@ def _export_dx(self, filename, type=None, typequote='"', **kwargs):
673705 """
674706 root , ext = os .path .splitext (filename )
675707 filename = root + '.dx'
676-
677- comments = [
678- 'OpenDX density file written by gridDataFormats.Grid.export()' ,
679- 'File format: http://opendx.sdsc.edu/docs/html/pages/usrgu068.htm#HDREDF' ,
680- 'Data are embedded in the header and tied to the grid positions.' ,
681- 'Data is written in C array order: In grid[x,y,z] the axis z is fastest' ,
682- 'varying, then y, then finally x, i.e. z is the innermost loop.' ]
683-
684- # write metadata in comments section
685- if self .metadata :
686- comments .append ('Meta data stored with the python Grid object:' )
687- for k in self .metadata :
688- comments .append (' ' + str (k ) + ' = ' + str (self .metadata [k ]))
689- comments .append (
690- '(Note: the VMD dx-reader chokes on comments below this line)' )
691-
692- components = dict (
693- positions = OpenDX .gridpositions (1 , self .grid .shape , self .origin ,
694- self .delta ),
695- connections = OpenDX .gridconnections (2 , self .grid .shape ),
696- data = OpenDX .array (3 , self .grid , type = type , typequote = typequote ),
697- )
698- dx = OpenDX .field ('density' , components = components , comments = comments )
708+ dx = OpenDX .field .from_grid (self , type = type , typequote = typequote , ** kwargs )
709+
699710 if ext == '.gz' :
700711 filename = root + ext
701712 dx .write (filename )
@@ -721,16 +732,7 @@ def _export_mrc(self, filename, **kwargs):
721732
722733 .. versionadded:: 1.1.0
723734 """
724- # Create MRC object and populate with Grid data
725- mrc_file = mrc .MRC ()
726- mrc_file .array = self .grid
727- mrc_file .delta = numpy .diag (self .delta )
728- mrc_file .origin = self .origin
729- mrc_file .rank = 3
730-
731- # Transfer header if it exists (preserves axis ordering and other metadata)
732- if hasattr (self , '_mrc_header' ):
733- mrc_file .header = self ._mrc_header
735+ mrc_file = mrc .MRC .from_grid (self , ** kwargs )
734736
735737 # Write to file
736738 mrc_file .write (filename )
0 commit comments