error:[Surjector] could not identify path position of surjected alignment
1
0
Entering edit mode
13 months ago
LilithElina ▴ 10

This question is a kind of follow-up to this one. I am trying to convert a GAM file output from vg map to BAM for analysis and end up with error:[Surjector] could not identify path position of surjected alignment.

The code I used is now adapted to vg version 1.22.0:

vg mod -X 32 graph.vg > graph_mod.vg
vg index -x graph_mod.xg graph_mod.vg
vg prune -k 16 -e 3 graph_mod.vg > graph_prune.vg
vg index -g graph_mod.gcsa -k 16 graph_prune.vg
vg map -d graph_mod -f reads.fastq.gz > graph_reads.gam
vg surject -x graph_mod.xg -b graph_reads.gam > graph_reads.bam

The mapping ran smoothly, and vg surject creates a BAM file, but still stops almost instantly with the mentioned error message. vg paths -L lists the five reference paths in the xg index and in the vg graph itself.

The stack trace file looks like this:

Crash report for vg v1.22.0 "Rotella"
Stack trace (most recent call last) in thread 6167:
#15   Object "", at 0xffffffffffffffff, in
#14   Object "/lib/x86_64-linux-gnu/libc-2.23.so", at 0x7fda8a74b41c, in __clone
#13   Object "/lib/x86_64-linux-gnu/libpthread-2.23.so", at 0x7fda8cfb36b9, in start_thread
#12   Object "/usr/lib/x86_64-linux-gnu/libgomp.so.1.0.0", at 0x7fda8ac3343d, in
#11   Object "/data3/genome_graphs/vg-v1.22.0/bin/vg", at 0xc4c2a8, in void vg::io::for_each_parallel_impl<vg::Alignment>(std::istream&, std::function<void (vg::Alignment&, vg::Alignment&)> const&, std::function<void (vg::Alignment&)> const&, std::function<bool ()> const&, unsigned long) [clone ._omp_fn.0]
    | Source "/data3/genome_graphs/vg-v1.22.0/include/vg/io/stream.hpp", line 210, in operator()
    |   208:                             handle(obj1.ParseFromString(batch->at(i)));
    |   209:                             handle(obj2.ParseFromString(batch->at(i+1)));
    | > 210:                             lambda2(obj1,obj2);
    |   211:                         }
    |   212:                     } // scope obj1 & obj2
      Source "/usr/include/c++/5/functional", line 2267, in _ZN2vg2io22for_each_parallel_implINS_9AlignmentEEEvRSiRKSt8functionIFvRT_S6_EERKS4_IFvS6_EERKS4_IFbvEEm._omp_fn.0 [0xc4c2a8]
       2264:     {
       2265:       if (_M_empty())
       2266:    __throw_bad_function_call();
      >2267:       return _M_invoker(_M_functor, std::forward<_ArgTypes>(__args)...);
       2268:     }
       2269:
       2270: #if __cpp_rtti
#10   Object "/data3/genome_graphs/vg-v1.22.0/bin/vg", at 0xa2dc0b, in std::_Function_handler<void (vg::Alignment&, vg::Alignment&), void vg::io::for_each_parallel<vg::Alignment>(std::istream&, std::function<void (vg::Alignment&)> const&, unsigned long)::{lambda(vg::Alignment&, vg::Alignment&)#1}>::_M_invoke(std::_Any_data const&, vg::Alignment&, vg::Alignment&)
    | Source "/usr/include/c++/5/functional", line 1871, in operator()
    |  1869:       _M_invoke(const _Any_data& __functor, _ArgTypes&&... __args)
    |  1870:       {
    | >1871:    (*_Base::_M_get_pointer(__functor))(
    |  1872:        std::forward<_ArgTypes>(__args)...);
    |  1873:       }
    | Source "/data3/genome_graphs/vg-v1.22.0/include/vg/io/stream.hpp", line 312, in operator()
    |   310:                        const std::function<void(T&)>& lambda1,
    |   311:                        size_t batch_size = 256) {
    | > 312:     std::function<void(T&,T&)> lambda2 = [&lambda1](T& o1, T& o2) { lambda1(o1); lambda1(o2); };
    |   313:     std::function<bool(void)> no_wait = [](void) {return true;};
    |   314:     for_each_parallel_impl(in, lambda2, lambda1, no_wait, batch_size);
      Source "/usr/include/c++/5/functional", line 2267, in _M_invoke [0xa2dc0b]
       2264:     {
       2265:       if (_M_empty())
       2266:    __throw_bad_function_call();
      >2267:       return _M_invoker(_M_functor, std::forward<_ArgTypes>(__args)...);
       2268:     }
       2269:
       2270: #if __cpp_rtti
#9    Object "/data3/genome_graphs/vg-v1.22.0/bin/vg", at 0xc4c794, in main_surject(int, char**)::{lambda(std::istream&)#4}::operator()(std::istream&) const::{lambda(vg::Alignment&)#2}::operator()(vg::Alignment) const [clone .constprop.285]
      Source "src/subcommand/surject_main.cpp", line 302, in operator() [0xc4c794]
#8    Object "/data3/genome_graphs/vg-v1.22.0/bin/vg", at 0xea2571, in vg::Surjector::surject(vg::Alignment const&, std::set<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, bool, bool) const
    | Source "src/surjector.cpp", line 26, in ~basic_string
    | Source "/usr/include/c++/5/bits/basic_string.h", line 543, in _M_dispose
    |   541:        */
    |   542:       ~basic_string()
    | > 543:       { _M_dispose(); }
    |   544:
    |   545:       /**
    | Source "/usr/include/c++/5/bits/basic_string.h", line 180, in _M_destroy
    |   178:       {
    |   179:    if (!_M_is_local())
    | > 180:      _M_destroy(_M_allocated_capacity);
    |   181:       }
    | Source "/usr/include/c++/5/bits/basic_string.h", line 185, in deallocate
    |   183:       void
    |   184:       _M_destroy(size_type __size) throw()
    | > 185:       { _Alloc_traits::deallocate(_M_get_allocator(), _M_data(), __size + 1); }
    |   186:
    |   187:       // _M_construct_aux is used to implement the 21.3.1 para 15 which
    | Source "/usr/include/c++/5/bits/alloc_traits.h", line 517, in deallocate
    |   515:       static void
    |   516:       deallocate(allocator_type& __a, pointer __p, size_type __n)
    | > 517:       { __a.deallocate(__p, __n); }
    |   518:
    |   519:       /**
      Source "/usr/include/c++/5/ext/new_allocator.h", line 110, in surject [0xea2571]
        107:       // __p is not permitted to be a null pointer.
        108:       void
        109:       deallocate(pointer __p, size_type)
      > 110:       { ::operator delete(__p); }
        111:
        112:       size_type
        113:       max_size() const _GLIBCXX_USE_NOEXCEPT
#7    Object "/lib/x86_64-linux-gnu/libgcc_s.so.1", at 0x7fda8aa1e486, in _Unwind_Resume
#6    Object "/lib/x86_64-linux-gnu/libgcc_s.so.1", at 0x7fda8aa1df82, in
#5    Object "/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.21", at 0x7fda8aed3004, in __gxx_personality_v0
#4    Object "/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.21", at 0x7fda8aed26a8, in
#3    Object "/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.21", at 0x7fda8aed36b5, in
#2    Object "/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.21", at 0x7fda8aed584c, in __gnu_cxx::__verbose_terminate_handler()
#1    Object "/lib/x86_64-linux-gnu/libc-2.23.so", at 0x7fda8a67b029, in abort
#0    Object "/lib/x86_64-linux-gnu/libc-2.23.so", at 0x7fda8a679428, in raise
vg • 334 views
ADD COMMENT
0
Entering edit mode
13 months ago
anovak ▴ 70

If there are actually no paths embedded in the graph, vg surject can't work. It uses the paths to define the linear coordinate space into which it is translating the mappings. If there are no paths, it doesn't know about any contigs on which the reads could be mapped in the output BAM file, and so it can't process the reads.

You need a graph annotated at least with the reference paths against which you want your reads mapped in your BAM.

ADD COMMENT
0
Entering edit mode

Thank you! I'm using the graph without added annotation, but the reference annotation is still present. I was just going to post yet another question about that. The reference paths have this format "refseq|NZ_CP020659.1|chromosome" which seems to give vg paths -Q a hard time. That shouldn't be a problem for vg surject, though, right? Anyway, with updating to the latest version I'm not even getting to the mapping step, as you know.

ADD REPLY
0
Entering edit mode

So, I was able to use the graph with the reference paths, but I still get the same error. I'll edit the original question with the workflow adapted to vg 1.22.0.

ADD REPLY

Login before adding your answer.

Traffic: 1622 users visited in the last hour
Help About
FAQ
Access RSS
API
Stats

Use of this site constitutes acceptance of our User Agreement and Privacy Policy.

Powered by the version 2.3.6