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

[IMP-dev] Problem when reading a Spider EM map in Python



Hi  everybody.

I've written a class to read and write EM maps in Spider format in IMP. Runs perfect in C++ when combined with DensityMap and MRCReaderWriter from EMbed:

#include "IMP/em/SpiderReaderWriter.h"
#include "DensityMap.h"
#include "MRCReaderWriter.h"

int main() {
  // Constructor
  IMP::em::SpiderMapReaderWriter rw("media_mon_iter3.xmp",false,false,true);
  MRCReaderWriter rw2;
  DensityMap m;
  m.Read("media_mon_iter3.xmp",rw);
  m.Write("test.xmp",rw);
  m.Write("test.mrc",rw2);
}

When wrapped in Python, after modifying modules/em/pyext/em.i with this:
%import "MapReaderWriter.h"
%include "IMP/em/SpiderReaderWriter.h"

And trying to do exactly the same thing:
    def test_em_maps(self):
        """Check volume reading and writing"""
        rw1=em.SpiderMapReaderWriter("media_mon_iter3.xmp",False,False,True)
        rw2=EM.MRCReaderWriter()
        m=EM.DensityMap()
        m.Read("media_mon_iter3.xmp",rw1)
        m.Write("test.mrc",rw2)
        m.Write("test.xmp",rw1)

I obtain this error:

======================================================================
ERROR: Check volume reading and writing
----------------------------------------------------------------------
Traceback (most recent call last):
  File "test_volumes_and_images.py", line 74, in test_em_maps
    m.Read("media_mon_iter3.xmp",rw1)
  File "/diva1/home/modeller/SVN/modlib/EM.py", line 698, in Read
    def Read(*args): return _EM.DensityMap_Read(*args)
TypeError: in method 'DensityMap_Read', argument 3 of type 'MapReaderWriter &'

----------------------------------------------------------------------

Seems that SWIG is not wrapping properly MapReaderWriter or is getting confused by passing a IMP object like SpiderMapReaderWriter to the EMbed class DensityMap. Any help?

Thanks