DiltheyLab / MetaMaps

Long-read metagenomic analysis
Other
98 stars 23 forks source link

Error in classify step #4

Closed silver1eaf closed 6 years ago

silver1eaf commented 6 years ago

Hi Alexander, I got the following error in the second step of MetaMaps. The command I ran was metamaps classify --mappings test10000.classification --DB databases/miniSeq+H

>>>>>>>>>>>>>>>>>>
DB = databases/miniSeq+H
Mappings = test10000.classification
Min. reads for 'U' = 10000
>>>>>>>>>>>>>>>>>>
Read taxonomy from databases/miniSeq+H/taxonomy -- have 17771 nodes.
Starting EM...
EM round 0
terminate called after throwing an instance of 'std::out_of_range'
  what():  stod

Thanks for any advice on this!

AlexanderDilthey commented 6 years ago

Hi silver1eaf, Thank you for spotting this - could you do a run in gdb to identify the line number?

silver1eaf commented 6 years ago

Ok, I've run in gdb and found this one: meta::getMappingLocations (taxonInfo=..., f=..., readLines=...) at src/meta/fEM.h:260 260 double mappingQuality = std::stod(line_fields.at(13));

AlexanderDilthey commented 6 years ago

Thank you! Could you do a pull from GitHub, recompile (make clean; make metamaps), and re-run? The output should now include the line that caused the problem - could you post this here?

silver1eaf commented 6 years ago
#6  0x000000000048bac7 in meta::getMappingLocations (taxonInfo=..., f=..., readLines=...) at src/meta/fEM.h:269
269                             throw;

#7  0x000000000048bbad in operator() (readLines=..., __closure=0xdd85d0) at src/meta/fEM.h:475
475                             std::vector<oneMappingLocation> mappingLocations = getMappingLocations(taxonInfo, f, readLines);

#8  std::_Function_handler<void(const std::vector<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> > > >&), meta::doEM(std::__cxx11::string, std::__cxx11::string, size_t)::<lambda(const std::vector<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> > > >&)> >::_M_invoke(const std::_Any_data &, const std::vector<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> > > > &) (
    __functor=..., __args#0=...) at /mnt/software/g/gcc/6.4.0/libc_2.5/x86_64-libc_2.5-linux-gnu/include/c++/6.4.0/functional:1731
1731            (*_Base::_M_get_pointer(__functor))(

#9  0x0000000000474688 in operator() (__args#0=..., this=0x7fffffffd570) at /mnt/software/g/gcc/6.4.0/libc_2.5/x86_64-libc_2.5-linux-gnu/include/c++/6.4.0/functional:2127
2127          return _M_invoker(_M_functor, std::forward<_ArgTypes>(__args)...);

#10 meta::callBackForAllReads(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<void (std::vector<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&)>&) (mappedFile=..., callbackFunction=...) at src/meta/fEM.h:1077
1077                                    callbackFunction(runningReadLines);

#11 0x00000000004917ef in meta::doEM (DBdir=..., mappedFile=..., minimumReadsPerBestContig=minimumReadsPerBestContig@entry=10000) at src/meta/fEM.h:490
490                     callBackForAllReads(mappedFile, processOneRead);

#12 0x00000000004721a8 in main (argc=5, argv=<optimized out>) at src/map/mash_map.cpp:296
296                     meta::doEM(parameters.DB, parameters.mappingsForClassification, parameters.minimumReadsForU);
AlexanderDilthey commented 6 years ago

Hi silver1eaf, it should also print an error message to STDERR - beginning with the string "Mapping quality is out of range for a double" - could you identify and post the details (the line of the output containing the beginning of the error message and the next line)?

silver1eaf commented 6 years ago

Here you go. The "Input line" is the first line of the input file test10000.classification

Mapping quality is out of range for a double
Input line: m54026_180612_063509/4850039/ccs 3174 0 3173 + C14893|kraken:taxid|1299044|NZ_CP005995.1 4783867 1133786
1136959 84.1644 15 363 85.3546 3.01251e-313
AlexanderDilthey commented 6 years ago

Thank you! I think I found the issue - if you do a 'pull' from GitHub and a 'make clean; make metamaps', the problem should be fixed.

silver1eaf commented 6 years ago

The process ran cleanly this time. Thanks a lot!

AlexanderDilthey commented 6 years ago

Great, thank you for letting me know!

jorgefriaslopez commented 3 years ago

Hi Alexander, I am trying to run metamaps with a custom database and everything runs smoothly until I get to the classification step. I followed your recommendation and I did a 'make clean' 'make metamaps' but the error does not go away. The command I am using is: $ metamaps classify --mappings classification_results_sample0 --DB databases/strains/

And I get:

DB = databases/strains/ Mappings = classification_results_sample0 Min. reads for 'U' = 10000 Threads = 1

metamaps: src/meta/taxonomy.h:229: meta::taxonomy::taxonomy(std::__cxx11::string): Assertion `T.count(id) == 0' failed. Aborted (core dumped)

Could you please help me to find out what I am doing wrong?

Thanks