Closed hainm closed 8 years ago
trace
Program received signal SIGSEGV, Segmentation fault.
0x00002aaaaeddeb2a in DataIO_CCP4::WriteSet3D(__gnu_cxx::__normal_iterator<DataSet* const*, std::vector<DataSet*, std::allocator<DataSet*> > > const&, CpptrajFile&) ()
from /u1/haichit/pytraj_git/pytraj/cpptraj/lib/libcpptraj.so
(gdb) bt
#0 0x00002aaaaeddeb2a in DataIO_CCP4::WriteSet3D(__gnu_cxx::__normal_iterator<DataSet* const*, std::vector<DataSet*, std::allocator<DataSet*> > > const&, CpptrajFile&) ()
from /u1/haichit/pytraj_git/pytraj/cpptraj/lib/libcpptraj.so
#1 0x00002aaaaeddf541 in DataIO_CCP4::WriteData(FileName const&, DataSetList const&) () from /u1/haichit/pytraj_git/pytraj/cpptraj/lib/libcpptraj.so
#2 0x00002aaaaedd8fe3 in DataFile::WriteDataOut() () from /u1/haichit/pytraj_git/pytraj/cpptraj/lib/libcpptraj.so
#3 0x00002aaaaee33ba8 in Exec_WriteDataFile::Execute(CpptrajState&, ArgList&) () from /u1/haichit/pytraj_git/pytraj/cpptraj/lib/libcpptraj.so
#4 0x00002aaaaeec0137 in Command::Dispatch(CpptrajState&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) () from /u1/haichit/pytraj_git/pytraj/cpptraj/lib/libcpptraj.so
#5 0x00002aaabdb1127f in __pyx_pf_6pytraj_4core_6c_core_7Command_12dispatch (__pyx_v_cls=0x2aaabdd56f40, __pyx_v_state=0x2aaaae9adbc8, __pyx_v_line=0x2aaabf7ce300) at pytraj/core/c_core.cpp:7999
#6 0x00002aaabdb10eb0 in __pyx_pw_6pytraj_4core_6c_core_7Command_13dispatch (__pyx_v_cls=0x2aaabdd56f40, __pyx_args=0x2aaaae9b26c8, __pyx_kwds=0x0) at pytraj/core/c_core.cpp:7950
#7 0x00002aaaaab6d1e1 in PyCFunction_Call (func=0x2aaabf7b6948, args=0x2aaaae9b26c8, kwds=<value optimized out>) at Objects/methodobject.c:98
#8 0x00002aaaaabf4482 in call_function (f=<value optimized out>, throwflag=<value optimized out>) at Python/ceval.c:4655
#9 PyEval_EvalFrameEx (f=<value optimized out>, throwflag=<value optimized out>) at Python/ceval.c:3185
#10 0x00002aaaaabf5349 in _PyEval_EvalCodeWithName (_co=<value optimized out>, globals=<value optimized out>, locals=<value optimized out>, args=<value optimized out>, argcount=0, kws=0x0, kwcount=0,
defs=0x0, defcount=0, kwdefs=0x0, closure=0x0, name=0x0, qualname=0x0) at Python/ceval.c:3966
#11 0x00002aaaaabf54d8 in PyEval_EvalCodeEx (_co=<value optimized out>, globals=<value optimized out>, locals=<value optimized out>, args=<value optimized out>, argcount=<value optimized out>,
kws=<value optimized out>, kwcount=0, defs=0x0, defcount=0, kwdefs=0x0, closure=0x0) at Python/ceval.c:3987
#12 0x00002aaaaabf551b in PyEval_EvalCode (co=<value optimized out>, globals=<value optimized out>, locals=<value optimized out>) at Python/ceval.c:777
#13 0x00002aaaaac1a750 in run_mod (fp=0x6dbf50, filename_str=<value optimized out>, start=<value optimized out>, globals=0x2aaaae648208, locals=0x2aaaae648208, closeit=<value optimized out>,
flags=0x7fffffffe300) at Python/pythonrun.c:970
#14 PyRun_FileExFlags (fp=0x6dbf50, filename_str=<value optimized out>, start=<value optimized out>, globals=0x2aaaae648208, locals=0x2aaaae648208, closeit=<value optimized out>, flags=0x7fffffffe300)
at Python/pythonrun.c:923
#15 0x00002aaaaac1bd23 in PyRun_SimpleFileExFlags (fp=0x6dbf50, filename=<value optimized out>, closeit=1, flags=0x7fffffffe300) at Python/pythonrun.c:396
#16 0x00002aaaaac36e97 in run_file (argc=<value optimized out>, argv=<value optimized out>) at Modules/main.c:318
#17 Py_Main (argc=<value optimized out>, argv=<value optimized out>) at Modules/main.c:769
#18 0x0000000000400add in main (argc=2, argv=0x7fffffffe478) at ./Programs/python.c:69
I do see the output test.ccp4 but it's empty.
@hainm you should compile with debug symbols on in libcpptraj.so
as well so you can get exact line numbers.
@drroe uhm, I always forgot that. =)) thanks.
@drroe so I tracked down the issue. Here is the log
DataIO_CCP4::WriteSet3D (this=0xdb9f60, setIn=<value optimized out>, outfile=...) at
DataIO_CCP4.cpp:223
223 Vec3 OXYZ = grid.GridOrigin();
So given that I have a 3D numpy array and I want to write that to ccp4 or dx, I need to explicitly call
corresponding Allocate_...
method (e.g. Allocate_N_C_D
), right?
it's likely.
Example from DataIO_CCP4.cpp
// Add grid data set. Default to float for now.
DataSet* gridDS = datasetlist.AddSet( DataSet::GRID_FLT, dsname, "GRID" );
if (gridDS == 0) return 1;
DataSet_GridFlt& grid = static_cast<DataSet_GridFlt&>( *gridDS );
// Allocate grid from dims and spacing. FIXME OK to assume zero origin?
if (grid.Allocate_N_O_Box( buffer.i[7], buffer.i[8], buffer.i[9],
Vec3(0.0), Box(buffer.f + 10) ) != 0)
{
mprinterr("Error: Could not allocate grid.\n");
return 1;
}
Yes. All grid (i.e. DataSet_3D) classes need to be explicitly allocated, similar to DataSet_2D. Reason is unlike 1D data sets you can't just set up dimensions on the fly.
Thanks. I think I can close this issue now since I do not want to reimplement what cpptraj does.
(However I just added a method that uses cpptrajstate to convert file formats)