make_cdr_prods.cpp
上传用户:yhdzpy8989
上传日期:2007-06-13
资源大小:13604k
文件大小:6k
源码类别:

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: make_cdr_prods.cpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/06/01 18:10:34  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.3
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: make_cdr_prods.cpp,v 1000.1 2004/06/01 18:10:34 gouriano Exp $
  10.  * ===========================================================================
  11.  *
  12.  *                            PUBLIC DOMAIN NOTICE
  13.  *               National Center for Biotechnology Information
  14.  *
  15.  *  This software/database is a "United States Government Work" under the
  16.  *  terms of the United States Copyright Act.  It was written as part of
  17.  *  the author's official duties as a United States Government employee and
  18.  *  thus cannot be copyrighted.  This software/database is freely available
  19.  *  to the public for use. The National Library of Medicine and the U.S.
  20.  *  Government have not placed any restriction on its use or reproduction.
  21.  *
  22.  *  Although all reasonable efforts have been taken to ensure the accuracy
  23.  *  and reliability of the software and data, the NLM and the U.S.
  24.  *  Government do not and cannot warrant the performance or results that
  25.  *  may be obtained by using this software or data. The NLM and the U.S.
  26.  *  Government disclaim all warranties, express or implied, including
  27.  *  warranties of performance, merchantability or fitness for any particular
  28.  *  purpose.
  29.  *
  30.  *  Please cite the author in any work or product based on this material.
  31.  *
  32.  * ===========================================================================
  33.  *
  34.  * Authors:  Josh Cherry
  35.  *
  36.  * File Description:  Make protein products of coding region features
  37.  *
  38.  */
  39. #include <ncbi_pch.hpp>
  40. #include <algo/sequence/make_cdr_prods.hpp>
  41. #include <objects/seq/Bioseq.hpp>
  42. #include <objects/seq/Seq_data.hpp>
  43. #include <objects/seq/Seq_descr.hpp>
  44. #include <objects/seq/Seq_inst.hpp>
  45. #include <objects/seq/Seqdesc.hpp>
  46. #include <objects/seqfeat/Cdregion.hpp>
  47. #include <objects/seqfeat/Genetic_code_table.hpp>
  48. #include <objects/seqfeat/Seq_feat.hpp>
  49. #include <objects/seqloc/Seq_id.hpp>
  50. #include <objects/seqloc/Seq_loc.hpp>
  51. #include <objects/seqset/Seq_entry.hpp>
  52. #include <objmgr/scope.hpp>
  53. #include <objmgr/util/feature.hpp>
  54. #include <objmgr/util/sequence.hpp>
  55. BEGIN_NCBI_SCOPE
  56. USING_SCOPE(objects);
  57. CAtomicCounter CMakeCdrProds::sm_Counter;
  58. CRef<CBioseq_set> CMakeCdrProds::MakeCdrProds(CRef<CSeq_annot> annot,
  59.                                               CBioseq_Handle handle)
  60. {
  61.     CRef<CBioseq_set> bioseq_set(new CBioseq_set);
  62.     if (!annot->GetData().IsFtable()) {
  63.         // Is this the right thing to do?
  64.         // Could throw, or could return null CRef instead.
  65.         return bioseq_set;
  66.     }
  67.     list<CRef<CSeq_feat> >& ftable = annot->SetData().SetFtable();
  68.     NON_CONST_ITERATE (list<CRef<CSeq_feat> >, feat, ftable) {
  69.         if (!(*feat)->GetData().IsCdregion()) {
  70.             // not interested if not a Cdregion
  71.             continue;
  72.         }
  73.         if ((*feat)->IsSetProduct()) {
  74.             // already has a product; don't make new one
  75.             continue;
  76.         }
  77.         const CSeq_loc& loc = (*feat)->GetLocation();
  78.         const CCdregion& cdr = (*feat)->GetData().GetCdregion();
  79.         string prot;
  80.         CCdregion_translate::TranslateCdregion(prot, handle, loc, cdr);
  81.         CRef<CSeq_data> seq_data(new CSeq_data(prot,
  82.                                                CSeq_data::e_Iupacaa));
  83.         CRef<CSeq_inst> seq_inst(new CSeq_inst);
  84.         seq_inst->SetSeq_data(*seq_data);
  85.         seq_inst->SetRepr(CSeq_inst_Base::eRepr_raw);
  86.         seq_inst->SetMol(CSeq_inst_Base::eMol_aa);
  87.         seq_inst->SetLength(prot.size());
  88.         CRef<CBioseq> bio_seq(new CBioseq);
  89.         string num = NStr::IntToString(sm_Counter.Add(1));
  90.         // pad to five digits
  91.         if (num.size() < 5) {
  92.             num.insert(SIZE_TYPE(0), 5 - num.size(), '0');
  93.         }
  94.         string acc = "tp" + num;
  95.         string full_acc = "lcl|" + acc;
  96.         CRef<CSeq_id> id(new CSeq_id(full_acc));
  97.         bio_seq->SetId().push_back(id);
  98.         // a title
  99.         CRef<CSeqdesc> title(new CSeqdesc);
  100.         title->SetTitle(string("Translation product ") + acc);
  101.         bio_seq->SetDescr().Set().push_back(title);
  102.         // Mol_type
  103.         CRef<CSeqdesc> mol_type(new CSeqdesc);
  104.         mol_type->SetMol_type( eGIBB_mol_peptide);
  105.         bio_seq->SetDescr().Set().push_back(mol_type);
  106.         
  107.         // set the instance
  108.         bio_seq->SetInst(*seq_inst);
  109.         
  110.         // wrap this Bio_seq in an entry
  111.         CRef<CSeq_entry> seq_entry(new CSeq_entry);
  112.         seq_entry->SetSeq(*bio_seq);
  113.         
  114.         // add this entry to our Bioseq_set
  115.         bioseq_set->SetSeq_set().push_back(seq_entry);
  116.         // record it as product in the annot we're handed
  117.         CRef<CSeq_loc> prod_loc(new CSeq_loc);
  118.         prod_loc->SetWhole(*id);
  119.         (*feat)->SetProduct(*prod_loc);
  120.     }
  121.     return bioseq_set;
  122. }
  123. END_NCBI_SCOPE
  124. /*
  125.  * ===========================================================================
  126.  * $Log: make_cdr_prods.cpp,v $
  127.  * Revision 1000.1  2004/06/01 18:10:34  gouriano
  128.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.3
  129.  *
  130.  * Revision 1.3  2004/05/21 21:41:04  gorelenk
  131.  * Added PCH ncbi_pch.hpp
  132.  *
  133.  * Revision 1.2  2003/11/10 18:23:10  ucko
  134.  * Tweak call to string::insert to address WorkShop-reported ambiguity.
  135.  *
  136.  * Revision 1.1  2003/11/10 16:37:06  jcherry
  137.  * Initial version
  138.  *
  139.  * ===========================================================================
  140.  */