C++ ncbi C++;异常(在函数GetSeqEntry()中)

C++ ncbi C++;异常(在函数GetSeqEntry()中),c++,exception,ncbi,C++,Exception,Ncbi,windows10上的NCBI 我在命令行中输入以下命令并希望获得pssm: psiblast -in_msa 1.sequence.txt -db nr -comp_based_stats 0 -out_ascii_pssm seqpssm.txt 但我得到C++异常: Error: NCBI C++ Exception: T0 "..\..\..\..\..\..\src\objtools\readers\aln_reader.cpp", line 649: Error: ncbi

windows10上的NCBI

我在命令行中输入以下命令并希望获得pssm:

psiblast -in_msa 1.sequence.txt -db nr -comp_based_stats 0 -out_ascii_pssm seqpssm.txt

但我得到C++异常:

Error: NCBI C++ Exception:
    T0 "..\..\..\..\..\..\src\objtools\readers\aln_reader.cpp", line 649: Error: ncbi::CAlnReader::GetSeqEntry() - CAlnReader::GetSeqEntry(): Seq_entry is not available until after Read() (m_Pos = 0)
1.sequence.txt文件:

>VACUOLARMORPHOGENESISPROTEINVAM7;SWP:P32912;PDB:1KMDA
KMSEKLRIKVDDVKINPKYVLYGVSTPNKRLYKRYSEFWKLKTRLERDVGS
TIPYDFPEKPGVLDRRWQRRYDDPEMIDERRIGLERFLNELYNDRFDSRWR
DTKIAQDFLQLSKPN
我在第649行搜索GetSeqEntry()

  642 CRef<CSeq_entry> CAlnReader::GetSeqEntry(const TFastaFlags fasta_flags)
  643 {
  644     if (m_Entry) {
  645         return m_Entry;
  646     } else if ( !m_ReadDone ) {
  647         NCBI_THROW2(CObjReaderParseException, eFormat,
  648                    "CAlnReader::GetSeqEntry(): "
  649                    "Seq_entry is not available until after Read()", 0);
  650     }
  651     m_Entry = new CSeq_entry();
  652 
  653     CRef<CSeq_align> seq_align = GetSeqAlign(fasta_flags);
  654     const CDense_seg& denseg = seq_align->GetSegs().GetDenseg();
  655     _ASSERT(denseg.GetIds().size() == m_Dim);
  656 
  657     CRef<CSeq_annot> seq_annot (new CSeq_annot);
  658     seq_annot->SetData().SetAlign().push_back(seq_align);
  659 
  660     m_Entry->SetSet().SetClass(CBioseq_set::eClass_pop_set);
  661     m_Entry->SetSet().SetAnnot().push_back(seq_annot);
  662 
  663     CBioseq_set::TSeq_set& seq_set = m_Entry->SetSet().SetSeq_set();
  664 
  665     typedef CDense_seg::TDim TNumrow;
  666     for (TNumrow row_i = 0; row_i < m_Dim; row_i++) {
  667         const string& seq_str     = m_SeqVec[row_i];
  668         const size_t& seq_str_len = seq_str.size();
  669 
  670         CRef<CSeq_entry> seq_entry (new CSeq_entry);
  671 
  672         // seq-id(s)
  673         CBioseq::TId& ids = seq_entry->SetSeq().SetId();
  674         ids.push_back(denseg.GetIds()[row_i]);
  675 /*
  676         CSeq_id::ParseFastaIds(ids, m_Ids[row_i], true);
  677         if (ids.empty()) {
  678             ids.push_back(CRef<CSeq_id>(new CSeq_id(CSeq_id::e_Local,
  679                                                     m_Ids[row_i])));
  680         }
642 CRef CAlnReader::GetSeqEntry(常量TFastaFlags fasta_flags)
643 {
644如果(m_条目){
645返回m_条目;
646}如果(!m_ReadDone){
647 NCBI_THROW2(CObjReaderParseException,电子格式,
648“CAlnReader::GetSeqEntry():”
649“在读取()之前,序列项不可用”,0);
650     }
651 m_条目=新CSeq_条目();
652
653 CRef seq_align=GetSeq align(快速标记);
654 const CDense_seg&denseg=seq_align->GetSegs().GetDenseg();
655_断言(denseg.GetIds().size()=m_Dim);
656
657 CRef seq_annot(新CSeq_annot);
658 seq_annot->SetData().SetAlign().向后推(seq_align);
659
660 m_Entry->SetSet().SetClass(CBioseq_set::eClass_pop_set);
661 m_Entry->SetSet().SetAnnot().向后推(seq_annot);
662
663 CBioseq_set::TSeq_set&seq_set=m_Entry->SetSet().SetSeq_set();
664
665类型定义CDense_seg::TDim TNumrow;
666用于(TNumrow row_i=0;row_iSetSeq().SetId();
674 id.push_back(denseg.GetIds()[row_i]);
675 /*
676 CSeq_id::ParseFastaIds(id,m_id[row_i],true);
677如果(id.empty()){
678个id。推回(CRef)(新的CSeq\U id)(CSeq\U id::e\U本地,
679个m_id[第一排]);
680         }

如何解决此问题?

新版本的psiblast 2.8.0也存在同样的问题+

似乎序列中的终止密码子符号(*、#或+)破坏了你的心灵爆炸术正确读取序列的能力。简单地用间隙(-)替换它们似乎可以解决这个问题

sed -i -r "s/[\*\+\#]/-/g" <alignment_file>
sed-i-r“s/[\*\+\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\