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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: msms.hpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/04/12 17:51:53  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.6
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /* $Id: msms.hpp,v 1000.1 2004/04/12 17:51:53 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 authors in any work or product based on this material.
  31.  *
  32.  * ===========================================================================
  33.  *
  34.  * Authors:  Lewis Y. Geer
  35.  *
  36.  * File Description:
  37.  *    Helper classes for ms search algorithms
  38.  *
  39.  * ===========================================================================
  40.  */
  41. #ifndef MSMS__HPP
  42. #define MSMS__HPP
  43. #ifdef WIN32
  44. #pragma warning(disable:4786)
  45. #endif
  46. #include <list>
  47. #include <iostream>
  48. #include <fstream>
  49. #include <string>
  50. #include <set>
  51. #include <deque>
  52. #include <map>
  53. #include <objects/omssa/MSRequest.hpp>
  54. #include "Mod.hpp"
  55. // #include <corelib/ncbistd.hpp>
  56. BEGIN_NCBI_SCOPE
  57. BEGIN_SCOPE(objects)
  58. BEGIN_SCOPE(omssa)
  59. const int kNumUniqueAA = 26;
  60. // U is selenocystine
  61. // this is NCBIstdAA.  Doesn't seem to be a central location to get this.
  62. // all blast protein databases are encoded with this.
  63. // U is selenocystine
  64. const char * const UniqueAA = "-ABCDEFGHIKLMNPQRSTVWXYZU*";
  65. //                                            01234567890123456789012345
  66. // non-redundified integer intervals of amino acids
  67. const int kNumAAIntervals = 19;
  68. // ABCXYZ ion mass calculation constants.  See Papayannopoulos, pg 63.
  69. // need to add proton * charge also.
  70. const int kAIon = 0, kBIon = 1, kCIon = 2, kXIon = 3, kYIon = 4,
  71.     kZIon = 5;
  72. const int kIonTypes = 6;
  73. // proton mass
  74. const double kProton = 1.008;
  75. // direction.  1 = N->C, -1 = C->N
  76. const double kWater = 18.015; 
  77. const double AAAbundance[] = {1.0, 0.0758, 1.0, 0.0167, 0.0528, 0.0635, 0.0408, 0.0683, 0.0224, 0.058, 0.0593, 0.0943, 0.0237, 0.0447, 0.0491, 0.0399, 0.0514, 0.0715, 0.0569, 0.0656, 0.0124, 1.0, 0.0318, 1.0, 1.0, 1.0, 0.0}; 
  78. // masses taken from Papayannopoulos, IA, Mass Spectrometry Reviews, 1995, 14, 49-73.
  79. // monoisotopic mass
  80. // C = 103.00919
  81. const double MonoMass[] = {0.0, 71.03711, 115.02694, 103.00919, 115.02694, 129.04259, 147.06841, 57.02147, 137.05891, 113.08406, 128.09496, 113.08406, 131.04049, 114.04293, 97.05276, 128.05858, 156.10111, 87.03203, 101.04768, 99.06841, 186.07931, 0.0, 163.06333, 128.05858, 149.903 , 0.0, 0.0 };
  82. // average mass
  83. const double AverageMass[] = {0.0, 71.08, 0.0, 103.15, 115.09, 129.12, 147.18, 57.05, 137.14, 113.16, 128.17, 113.16, 131.20, 114.10, 97.12, 128.13, 156.19, 87.08, 101.11, 99.13, 186.21, 0.0, 163.18, 128.13, 150.034, 0.0, 0.0 };
  84. const int AAIntervals[] = { 57, 71, 87, 97, 99, 101, 103, 113, 114, 115, 128, 129, 131, 137, 147, 150, 156, 163, 186 };
  85. const double kTermMass[] =  {1.008, 1.008, 1.008, 17.007, 17.007, 17.007};
  86. const double kIonTypeMass[] = { -28.01, 0.0, 16.023, 28.01, 2.016, 15.015 };
  87. // direction.  1 = N->C, -1 = C->N
  88. const int kIonDirection[] = { 1, 1, 1, -1, -1, -1 };
  89. /////////////////////////////////////////////////////////////////////////////
  90. //
  91. //  CMassArray::
  92. //
  93. //  Holds AA indexed mass array
  94. //
  95. class NCBI_XOMSSA_EXPORT CMassArray {
  96. public:
  97.     CMassArray(void) {};
  98.     const double* GetMass(void);
  99.     const int* GetIntMass(void);
  100.     // initialize mass arrays
  101.     void Init(const CMSRequest::TSearchtype &SearchType);
  102.     // initialize mass arrays with fixed mods
  103.     void Init(const CMSRequest::TFixed &Mods, 
  104.       const CMSRequest::TSearchtype &SearchType);
  105. private:
  106.     // inits mass arrays
  107.     void x_Init(const CMSRequest::TSearchtype &SearchType);
  108.     // masses as doubles
  109.     double CalcMass[kNumUniqueAA];
  110.     // mass in scaled integer Daltons
  111.     int IntCalcMass[kNumUniqueAA];
  112.     // Se mass is 78.96, S is 32.066
  113. };
  114. ///////////////////   CMassArray inline methods
  115. inline const double* CMassArray::GetMass(void) 
  116.     return CalcMass; 
  117. }
  118. inline const int* CMassArray::GetIntMass(void) 
  119.     return IntCalcMass; 
  120. }
  121. /////////////////// end of CMassArray inline methods
  122. /////////////////////////////////////////////////////////////////////////////
  123. //
  124. //  CAA::
  125. //
  126. //  lookup table for AA index
  127. //
  128. // lookup table for reversing an AA character to AA number
  129. class NCBI_XOMSSA_EXPORT CAA {
  130. public:
  131.     CAA(void);
  132.     char *GetMap(void);
  133. private:
  134.     char AAMap[256];
  135. };
  136. ///////////////////    CAA inline methods
  137. inline char *CAA::GetMap(void) 
  138. {
  139.     return AAMap; 
  140. }
  141. /////////////////// end of CAA inline methods
  142. /////////////////////////////////////////////////////////////////////////////
  143. //
  144. //  CCleave::
  145. //
  146. //  Classes for cleaving sequences quickly and computing masses
  147. //
  148. typedef std::deque <int> TCleave;
  149. class NCBI_XOMSSA_EXPORT CCleave {
  150. public:
  151.     CCleave();
  152.     virtual ~CCleave() {};
  153.     // cleaves the sequence.  Note that output is 0 and the positions
  154.     // of the aa's to be cleaved.  Should be interpreted as [0, pos1],
  155.     // (pos1, pos2], ..., (posn, end].  This weirdness is historical --
  156.     // the C++ string class uses an identifier for end-of-string and has
  157.     // no identifier for before start of string.  
  158.     virtual void Cleave(char *Seq, int SeqLen, TCleave& Positions) = 0;
  159.     virtual bool CalcAndCut(const char *SeqStart, 
  160.     const char *SeqEnd,  // the end, not beyond the end
  161.     const char **PepStart,  // return value
  162.     int *Masses,  // Masses, indexed by miss cleav, mods
  163.     int& NumMod,   // num Mods
  164.     int MaxNumMod, // max num mods 
  165.     int *EndMasses,
  166.     CMSMod &VariableMods,
  167.     const char **Site,
  168.     int *DeltaMass,
  169.     const int *IntCalcMass  // array of int AA masses
  170.     ) { return false; }
  171.     
  172.     void CalcMass(char SeqChar,
  173.   int *Masses,
  174.   const int *IntCalcMass
  175.   );
  176.     
  177.     void EndMass(int *Masses
  178.  );
  179.     int findfirst(char* Seq, int Pos, int SeqLen);
  180. protected:
  181.     int ProtonMass; // mass of the proton
  182.     int TermMass;  // mass of h2o
  183.     CAA ReverseAA;
  184.     char *Reverse;
  185.     // where to cleave.  last two letters are in readdb format, assuming 
  186.     // it uses the UniqueAA alphabet
  187.     char *CleaveAt;
  188.     int kCleave;
  189. };
  190. ///////////////////    CCleave inline methods
  191. inline
  192. void CCleave::CalcMass(char SeqChar,
  193.        int *Masses,
  194.        const int *IntCalcMass
  195.        )
  196. {
  197.     //    int j;
  198.     //  for(i = 0; i < NumMasses; i++)
  199.     //    for(j = 0; j < NumMod; j++)
  200.     *Masses += IntCalcMass[Reverse[SeqChar]];
  201. }
  202. inline
  203. void CCleave::EndMass( int *EndMasses
  204.        )
  205. {
  206.     //  int i;
  207.     //  for(i = 0; i < NumEndMasses; i++)   
  208.     *EndMasses = TermMass;
  209. }
  210. /////////////////// end of CCleave inline methods
  211. class NCBI_XOMSSA_EXPORT CCNBr: public CCleave {
  212. public:
  213.     CCNBr();
  214.     ~CCNBr();
  215.     virtual void Cleave(char *Seq, int SeqLen, TCleave& Positions);
  216. };
  217. ///////////////////   CCNBr inline methods
  218. inline CCNBr::CCNBr() 
  219. {
  220.     CleaveAt = "x0c";
  221.     kCleave = 1;
  222. }
  223. inline CCNBr::~CCNBr() 
  224. {}
  225. /////////////////// end of  CCNBr inline methods
  226. class NCBI_XOMSSA_EXPORT CFormicAcid: public CCleave {
  227. public:
  228.     CFormicAcid();
  229.     ~CFormicAcid();
  230.     virtual void Cleave(char *Seq, int SeqLen, TCleave& Positions);
  231. };
  232. ///////////////////   CCNBr inline methods
  233. inline CFormicAcid::CFormicAcid()
  234. {
  235.     CleaveAt = "x04";
  236.     kCleave = 1;
  237. }
  238. inline CFormicAcid::~CFormicAcid()
  239. {}
  240. /////////////////// end of  CCNBr inline methods
  241. class NCBI_XOMSSA_EXPORT CTrypsin: public CCleave {
  242. public:
  243.     CTrypsin();
  244.     ~CTrypsin();
  245.     virtual void Cleave(char *Seq, int SeqLen, TCleave& Positions);
  246.     virtual bool CalcAndCut(const char *SeqStart, 
  247.     const char *SeqEnd,  // the end, not beyond the end
  248.     const char **PepStart,  // return value
  249.     int *Masses,
  250.     int& NumMod,
  251.     int MaxNumMod,
  252.     int *EndMasses,
  253.     CMSMod &VariableMods,
  254.     const char **Site,
  255.     int *DeltaMass,
  256.     const int *IntCalcMass  // array of int AA masses
  257.     );
  258. };
  259. ///////////////////  CCNBr  inline methods
  260. inline CTrypsin::CTrypsin() 
  261. {
  262.     CleaveAt = "x0ax10";
  263.     kCleave = 2;
  264. }
  265. inline CTrypsin::~CTrypsin()
  266. {}
  267. /////////////////// end of  CCNBr inline methods
  268. // used to scale all float masses into ints
  269. #define MSSCALE 100
  270. END_SCOPE(omssa)
  271. END_SCOPE(objects)
  272. END_NCBI_SCOPE
  273. #endif
  274. /*
  275.   $Log: msms.hpp,v $
  276.   Revision 1000.1  2004/04/12 17:51:53  gouriano
  277.   PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.6
  278.   Revision 1.6  2004/03/30 19:36:59  lewisg
  279.   multiple mod code
  280.   Revision 1.5  2004/03/16 20:18:54  gorelenk
  281.   Changed includes of private headers.
  282.   Revision 1.4  2004/03/01 18:24:07  lewisg
  283.   better mod handling
  284.   Revision 1.3  2003/10/24 21:28:41  lewisg
  285.   add omssa, xomssa, omssacl to win32 build, including dll
  286.   Revision 1.2  2003/10/21 21:12:17  lewisg
  287.   reorder headers
  288.   Revision 1.1  2003/10/20 21:32:13  lewisg
  289.   ommsa toolkit version
  290.   Revision 1.12  2003/10/07 18:02:28  lewisg
  291.   prep for toolkit
  292.   Revision 1.11  2003/08/14 23:49:22  lewisg
  293.   first pass at variable mod
  294.   Revision 1.10  2003/07/17 18:45:49  lewisg
  295.   multi dta support
  296.   Revision 1.9  2003/05/01 14:52:10  lewisg
  297.   fixes to scoring
  298.   Revision 1.8  2003/03/21 21:14:40  lewisg
  299.   merge ming's code, other stuff
  300.   Revision 1.7  2003/02/10 19:37:55  lewisg
  301.   perf and web page cleanup
  302.   Revision 1.6  2003/01/21 21:55:51  lewisg
  303.   fixes
  304.   Revision 1.5  2003/01/21 21:46:13  lewisg
  305.   *** empty log message ***
  306.   Revision 1.4  2002/11/26 00:41:57  lewisg
  307.   changes for msfilter
  308.   Revision 1.3  2002/09/20 20:19:34  lewisg
  309.   msms search update
  310.   Revision 1.2  2002/07/16 13:26:23  lewisg
  311.   *** empty log message ***
  312.   Revision 1.1.1.1  2002/02/14 02:14:02  lewisg
  313. */