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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: showalign.hpp,v $
  4.  * PRODUCTION Revision 1000.3  2004/04/15 15:04:28  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.18
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef SHOWALIGN_HPP
  10. #define SHOWALIGN_HPP
  11. /*  $Id: showalign.hpp,v 1000.3 2004/04/15 15:04:28 gouriano Exp $
  12.  * ===========================================================================
  13.  *
  14.  *                            PUBLIC DOMAIN NOTICE
  15.  *               National Center for Biotechnology Information
  16.  *
  17.  *  This software/database is a "United States Government Work" under the
  18.  *  terms of the United States Copyright Act.  It was written as part of
  19.  *  the author's official duties as a United States Government employee and
  20.  *  thus cannot be copyrighted.  This software/database is freely available
  21.  *  to the public for use. The National Library of Medicine and the U.S.
  22.  *  Government have not placed any restriction on its use or reproduction.
  23.  *
  24.  *  Although all reasonable efforts have been taken to ensure the accuracy
  25.  *  and reliability of the software and data, the NLM and the U.S.
  26.  *  Government do not and cannot warrant the performance or results that
  27.  *  may be obtained by using this software or data. The NLM and the U.S.
  28.  *  Government disclaim all warranties, express or implied, including
  29.  *  warranties of performance, merchantability or fitness for any particular
  30.  *  purpose.
  31.  *
  32.  *  Please cite the author in any work or product based on this material.
  33.  *
  34.  * ===========================================================================
  35.  *
  36.  * Author:  Jian Ye
  37.  *
  38.  * File Description:
  39.  *   Sequence alignment display
  40.  *
  41.  */
  42. #include <corelib/ncbireg.hpp>
  43. #include <objects/seqalign/Seq_align.hpp>
  44. #include <objects/seqloc/Seq_loc.hpp>
  45. #include <objtools/alnmgr/alnvec.hpp>
  46. #include <objects/blastdb/Blast_def_line_set.hpp>
  47. #include <objects/seqfeat/SeqFeatData.hpp>
  48. BEGIN_NCBI_SCOPE BEGIN_SCOPE(objects)
  49.   
  50. class NCBI_XALNUTIL_EXPORT CDisplaySeqalign {
  51.   public:
  52.     // Defines
  53.     // frame defines for translated alignment
  54.     enum TranslatedFrames {
  55.         eFrameNotSet = 0,
  56.         ePlusStrand1 = 1,
  57.         ePlusStrand2 = 2,
  58.         ePlusStrand3 = 3,
  59.         eMinusStrand1 = -1,
  60.         eMinusStrand2 = -2,
  61.         eMinusStrand3 = -3
  62.     };
  63.     // Alignment display type, specific for showing blast-related info
  64.     enum AlignType {
  65.         eNotSet = 0,            // Default
  66.         eNuc = 1,
  67.         eProt = 2
  68.     };
  69.     struct SeqlocInfo {
  70.         CRef < CSeq_loc > seqloc;       // must be seqloc int
  71.         TranslatedFrames frame; // For translated nucleotide sequence
  72.     };
  73.     struct FeatureInfo {
  74.         CConstRef < CSeq_loc > seqloc;  // must be seqloc int
  75.         char featureChar;       // Character for feature
  76.         string featureId;       // ID for feature
  77.     };
  78.     enum {
  79.         kPMatrixSize = 23       // number of amino acid for matrix
  80.     };
  81.     enum DisplayOption {
  82.         eHtml = (1 << 0),               // Html output. Default text.
  83.         eLinkout = (1 << 1),            // Linkout gifs. 
  84.         eSequenceRetrieval = (1 << 2),  // Get sequence feature
  85.         eMultiAlign = (1 << 3),         // Multiple alignment view. 
  86.                                         // default pairwise
  87.         eShowMiddleLine = (1 << 4),     // Show line that indicates identity 
  88.                                         // between query and hit. 
  89.         eShowGi = (1 << 6),
  90.         eShowIdentity = (1 << 7),       // Show dot as identity to master
  91.         eShowBlastInfo = (1 << 8),      // Show defline and score info for 
  92.                                         // blast pairwise alignment
  93.         eShowBlastStyleId = (1 << 9),   // Show seqid as "Query" and "Sbjct" 
  94.                                         // respectively for pairwise 
  95.                                         // alignment. Default shows seqid as 
  96.                                         // is
  97.         eNewTargetWindow = (1 << 10),   // Clicking url link will open a new 
  98.                                         // window
  99.         eShowCdsFeature = (1 << 11),    // Show cds encoded protein seq for 
  100.                                         // sequence. Need to fetch from id 
  101.                                         // server, a bit slow. Only available
  102.                                         // for non-anchored alignment 
  103.         eShowGeneFeature = (1 << 12),   // Show gene for sequence. Need to 
  104.                                         // fetch from id server, a bit slow.
  105.                                         // Only available for non-anchored 
  106.                                         // alignment
  107.         eMasterAnchored = (1 << 13),    // Query anchored, for 
  108.                                         // multialignment only, default not 
  109.                                         // anchored
  110.         eColorDifferentBases = (1 << 14),       // Coloring mismatches for
  111.                                                 // subject seq
  112.         eTranslateNucToNucAlignment = (1 << 15) //Show nuecleotide to nucleotide
  113.                                                 //alignment as translated
  114.     };
  115.     // Need to set eShowMiddleLine to get this
  116.     enum MiddleLineStyle {
  117.         eChar = 0,              // show character as identity between query
  118.                                 // and hit. Default
  119.         eBar                    // show bar as identity between query and hit
  120.     };
  121.     // character used to display seqloc, such as masked sequence
  122.     enum SeqLocCharOption {
  123.         eX = 0,                 // use X to replace sequence character.
  124.                                 // Default 
  125.         eN,                     // use n to replace sequence character
  126.         eLowerCase              // use lower case of the original sequence
  127.                                 // letter
  128.     };
  129.     // color for seqloc
  130.     enum SeqLocColorOption {
  131.         eBlack = 0,             // Default
  132.         eGrey,
  133.         eRed
  134.     };
  135.     // Constructors
  136.     /* CSeq_align_set: seqalign to display. maskSeqloc: seqloc to be
  137.        displayed with different characters such as masked sequence.  Must be
  138.        seqloc-int externalFeature: Feature to display such as phiblast
  139.        pattern.  Must be seqloc-int matrix: customized matrix for computing
  140.        positive protein matchs.  Note the matrix must exactly consist of
  141.        "ARNDCQEGHILKMFPSTWYVBZX", default matrix is blosum62 scope: scope to
  142.        fetch your sequence */
  143.     CDisplaySeqalign(const CSeq_align_set & seqalign,
  144.                      list < SeqlocInfo * >&maskSeqloc,
  145.                      list < FeatureInfo * >&externalFeature,
  146.                      const int matrix[][kPMatrixSize], CScope & scope);
  147.     // Destructor
  148.     ~CDisplaySeqalign();
  149.     // Set functions
  150.     /* These are for all alignment display */
  151.     // Set according to DsiplayOption
  152.     void SetAlignOption(int option)
  153.     {
  154.         m_AlignOption = option;
  155.     } 
  156.     void SetSeqLocChar(SeqLocCharOption option = eX) {
  157.         m_SeqLocChar = option;
  158.     }
  159.     void SetSeqLocColor(SeqLocColorOption option = eBlack) {
  160.         m_SeqLocColor = option;
  161.     }
  162.       // number of bases or amino acids per line
  163.     void SetLineLen(int len) {
  164.         m_LineLen = len;
  165.     }
  166.       // Display top num seqalign
  167.     void SetNumAlignToShow(int num) {
  168.         m_NumAlignToShow = num;
  169.     }
  170.     void SetMiddleLineStyle(MiddleLineStyle option = eBar) {
  171.         m_MidLineStyle = option;
  172.     }
  173.       /* These are for blast alignment style display only */
  174.       // Needed only if you want to display positives and strand 
  175.     void SetAlignType(AlignType type) {
  176.         m_AlignType = type;
  177.     }
  178.       // blastdb name.  
  179.     void SetDbName(string name) {
  180.         m_DbName = name;
  181.     }
  182.       // for seq fetching from blast db
  183.     void SetDbType(bool isNa) {
  184.         m_IsDbNa = isNa;
  185.     }
  186.       // type for query sequence
  187.     void SetQueryType(bool isNa) {
  188.         m_IsQueryNa = isNa;
  189.     }
  190.       // blast request id
  191.     void SetRid(string rid) {
  192.         m_Rid = rid;
  193.     }
  194.       // CDD rid for constructing linkout
  195.     void SetCddRid(string cddRid) {
  196.         m_CddRid = cddRid;
  197.     }
  198.       // for constructing structure linkout
  199.     void SetEntrezTerm(string term) {
  200.         m_EntrezTerm = term;
  201.     }
  202.       // for linking to mapviewer
  203.     void SetQueryNumber(int number) {
  204.         m_QueryNumber = number;
  205.     }
  206.       // refer to blobj->adm->trace->created_by
  207.     void SetBlastType(string type) {
  208.         m_BlastType = type;
  209.     }
  210.       // static
  211.       /* Need to call this if the seqalign is stdseg or dendiag for ungapped
  212.          blast alignment display as each stdseg ro dendiag is a distinct
  213.          alignment.  Don't call it for other case as it's a waste of time. */
  214.     static CRef < CSeq_align_set >
  215.         PrepareBlastUngappedSeqalign(CSeq_align_set & alnset);
  216.       // display seqalign
  217.     void DisplaySeqalign(CNcbiOstream & out);
  218. private:
  219.     struct insertInformation {
  220.         int alnStart;               // aln coords. insert right after this
  221.                                     // position
  222.         int seqStart;
  223.         int insertLen;
  224.     };
  225.     struct alnInfo {                // store alnvec and score info
  226.         CRef < CAlnVec > alnVec;
  227.         int score;
  228.         double bits;
  229.         double eValue;
  230.     };
  231.     struct alnFeatureInfo {
  232.         FeatureInfo *feature;
  233.         string featureString;
  234.         CRange < TSignedSeqPos > alnRange;
  235.     };
  236.     struct alnSeqlocInfo {
  237.         SeqlocInfo *seqloc;
  238.         CRange < TSignedSeqPos > alnRange;
  239.     };
  240.     CConstRef < CSeq_align_set > m_SeqalignSetRef;  // reference to seqalign set
  241.                                                     // for displaying
  242.     list < SeqlocInfo * >&m_Seqloc; // display character option for list of
  243.                                     // seqloc 
  244.     list < FeatureInfo * >&m_QueryFeature;  // external feature such as phiblast
  245.                                             // pattern
  246.     CScope & m_Scope;
  247.     CAlnVec *m_AV;                  // current aln vector
  248.     int **m_Matrix;                 // matrix used to compute the midline
  249.     int m_AlignOption;              // Display options
  250.     AlignType m_AlignType;          // alignment type, used for displaying
  251.                                     //blast info
  252.     int m_NumAlignToShow;           // number of alignment to display
  253.     SeqLocCharOption m_SeqLocChar;  // character for seqloc display
  254.     SeqLocColorOption m_SeqLocColor;        // clolor for seqloc display
  255.     int m_LineLen;                  // number of sequence character per line
  256.     int m_IdStartMargin;            // margin between seqid and start number
  257.     int m_StartSequenceMargin;      // margin between start number and sequence
  258.     int m_SeqStopMargin;            // margin between sequence and stop number
  259.     bool m_IsDbNa;
  260.     bool m_IsQueryNa;
  261.     bool m_IsDbGi;
  262.     string m_DbName;
  263.     string m_BlastType;
  264.     string m_Rid;
  265.     string m_CddRid;
  266.     string m_EntrezTerm;
  267.     int m_QueryNumber;
  268.     CNcbiIfstream *m_ConfigFile;
  269.     CNcbiRegistry *m_Reg;
  270.     map < string, string > m_Segs;
  271.     CRef < CObjectManager > m_FeatObj;      // used for fetching feature
  272.     CRef < CScope > m_featScope;    // used for fetching feature
  273.     list < alnSeqlocInfo * >m_Alnloc;       // seqloc display info (i.e., mask)
  274.                                             // for current alnvec
  275.     MiddleLineStyle m_MidLineStyle;
  276.       // helper functions
  277.     void DisplayAlnvec(CNcbiOstream & out);
  278.     const void PrintDefLine(const CBioseq_Handle & bspHandle,
  279.                             CNcbiOstream & out) const;
  280.     // display sequence, start is seqalign coodinate
  281.     const void OutputSeq(string & sequence, const CSeq_id & id, int start, 
  282.                          int len, int frame, bool colorMismatch, 
  283.                          CNcbiOstream & out) const;
  284.     int getNumGaps();               // Count number of total gaps
  285.     const CRef < CBlast_def_line_set >
  286.         GetBlastDefline(const CBioseq_Handle& handle) const;
  287.     void AddLinkout(const CBioseq & cbsp, const CBlast_def_line & bdl,
  288.                     int firstGi, int gi, CNcbiOstream & out) const;
  289.     string getUrl(const list < CRef < CSeq_id > >&ids, int row) const;
  290.     string getDumpgnlLink(const list < CRef < CSeq_id > >&ids, int row,
  291.                           const string & alternativeUrl) const;
  292.     void getFeatureInfo(list < alnFeatureInfo * >&feature, CScope & scope,
  293.                         CSeqFeatData::E_Choice choice, int row,
  294.                         string & sequence) const;
  295.     void fillInserts(int row, CAlnMap::TSignedRange & alnRange, int alnStart,
  296.                      list < string > &inserts, string & insertPosString,
  297.                      list < insertInformation * >&insertList) const;
  298.     void doFills(int row, CAlnMap::TSignedRange & alnRange, int alnStart,
  299.                  list < insertInformation * >&insertList,
  300.                  list < string > &inserts) const;
  301.     string getSegs(int row) const;
  302.     const void fillIdentityInfo(const string & sequenceStandard,
  303.                                 const string & sequence, int &match,
  304.                                 int &positive, string & middleLine);
  305.     void setFeatureInfo(alnFeatureInfo * featInfo, const CSeq_loc & seqloc,
  306.                         int alnFrom, int alnTo, int alnStop, char patternChar,
  307.                         string patternId, string & alternativeFeatStr) const;
  308.     void setDbGi();
  309.     void GetInserts(list < insertInformation * >&insertList,
  310.                     CAlnMap::TSeqPosList & insertAlnStart,
  311.                     CAlnMap::TSeqPosList & insertSeqStart,
  312.                     CAlnMap::TSeqPosList & insertLength, int lineAlnStop);
  313.     void x_DisplayAlnvecList(CNcbiOstream & out, list < alnInfo * >&avList);
  314. };
  315. /***********************Inlines************************/
  316. END_SCOPE(objects)
  317. END_NCBI_SCOPE
  318. /* 
  319. *===========================================
  320. *$Log: showalign.hpp,v $
  321. *Revision 1000.3  2004/04/15 15:04:28  gouriano
  322. *PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.18
  323. *
  324. *Revision 1.18  2004/04/14 16:29:46  jianye
  325. *change GetBlastDefline parameter
  326. *
  327. *Revision 1.17  2004/02/10 22:00:05  jianye
  328. *Clean up some defs
  329. *
  330. *Revision 1.16  2003/12/29 18:37:22  jianye
  331. *Added nuc to nuc translation
  332. *
  333. *Revision 1.15  2003/12/22 21:05:55  camacho
  334. *Add const qualifier for Seq-align-set, indent
  335. *
  336. *Revision 1.14  2003/12/11 22:28:16  jianye
  337. *get rid of m_Blosum62
  338. *
  339. *Revision 1.13  2003/12/01 23:15:56  jianye
  340. *Added showing CDR product
  341. *
  342. *Revision 1.12  2003/10/28 22:41:57  jianye
  343. *Added downloading sub seq capability for long seq
  344. *
  345. *Revision 1.11  2003/10/27 20:59:37  jianye
  346. *Added color mismatches capability
  347. *
  348. *Revision 1.10  2003/10/09 15:06:11  jianye
  349. *Change int to enum defs in SeqlocInfo
  350. *
  351. *Revision 1.9  2003/10/08 17:45:13  jianye
  352. *Added translated frame defs
  353. *===========================================
  354. */
  355. #endif