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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: omssa.hpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/04/12 17:52:04  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.10
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /* $Id: omssa.hpp,v 1000.1 2004/04/12 17:52:04 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.  *    code to do the ms/ms search and score matches
  38.  *
  39.  * ===========================================================================
  40.  */
  41. #ifndef OMSSA__HPP
  42. #define OMSSA__HPP
  43. #include <objects/omssa/omssa__.hpp>
  44. #include "msms.hpp"
  45. #include "msladder.hpp"
  46. #include "mspeak.hpp"
  47. #include <readdb.h>
  48. BEGIN_NCBI_SCOPE
  49. BEGIN_SCOPE(objects)
  50. BEGIN_SCOPE(omssa)
  51. // max number missed cleavages + 1
  52. #define MAXMISSEDCLEAVE 4
  53. // max variable mods in peptide
  54. // should be no bigger than the number of bits in unsigned
  55. #define MAXMOD 32
  56. // maximum number of calculable ladders
  57. #define MAXMOD2 64
  58. /////////////////////////////////////////////////////////////////////////////
  59. //
  60. //  TMassMask::
  61. //
  62. //  Handy container for holding masses and modification masks
  63. //
  64. typedef struct _MassMask {
  65.     unsigned Mass, Mask;
  66. } TMassMask;
  67. /////////////////////////////////////////////////////////////////////////////
  68. //
  69. // for holding hits sorted by score
  70. //
  71. typedef multimap <double, CMSHit *> TScoreList;
  72. /////////////////////////////////////////////////////////////////////////////
  73. //
  74. //  CSearch::
  75. //
  76. //  Performs the ms/ms search
  77. //
  78. class NCBI_XOMSSA_EXPORT CSearch {
  79. public:
  80.     CSearch(void);
  81.     ~CSearch(void);
  82.     // init blast databases.  stream thru db if InitDB true
  83.     int InitBlast(const char *blastdb, bool InitDb);
  84.     // loads spectra into peaks
  85.     void Spectrum2Peak(CMSRequest& MyRequest, CMSPeakSet& PeakSet);
  86.     int Search(CMSRequest& MyRequest, CMSResponse& MyResponse);
  87.     // create the ladders from sequence
  88.     int CreateLadders(unsigned char *Sequence, int iSearch, int position,
  89.       int endposition,
  90.       int *Masses, int iMissed, CAA& AA, 
  91.       CLadder& BLadder,
  92.       CLadder& YLadder, CLadder& B2Ladder,
  93.       CLadder& Y2Ladder,
  94.       unsigned ModMask,
  95.       const char **Site,
  96.       int *DeltaMass,
  97.       int NumMod);
  98.     // compare ladders to experiment
  99.     int CompareLadders(CLadder& BLadder,
  100.        CLadder& YLadder, CLadder& B2Ladder,
  101.        CLadder& Y2Ladder, CMSPeak *Peaks,
  102.        bool OrLadders,  TMassPeak *MassPeak);
  103.     bool CompareLaddersTop(CLadder& BLadder,
  104.        CLadder& YLadder, CLadder& B2Ladder,
  105.        CLadder& Y2Ladder, CMSPeak *Peaks,
  106.        TMassPeak *MassPeak);
  107.     void InitModIndex(int *ModIndex, int& iMod);
  108.     unsigned MakeBoolMask(int *ModIndex, int& iMod);
  109.     void MakeBoolMap(bool *ModMask, int *ModIndex, int& iMod, int& NumMod);
  110.     bool CalcModIndex(int *ModIndex, int& iMod, int& NumMod);
  111.     unsigned MakeIntFromBoolMap(bool *ModMask,  int& NumMod);
  112.     ReadDBFILEPtr Getrdfp(void) { return rdfp; }
  113.     int Getnumseq(void) { return numseq; }
  114.     double CalcPoisson(double Mean, int i);
  115.     double CalcPoissonMean(int Start, int Stop, int Mass, CMSPeak *Peaks,
  116.    int Charge, double Threshold);
  117.     double CalcPvalue(double Mean, int Hits, int n);
  118.     double CalcPvalueTopHit(double Mean, int Hits, int n, double Normal, double TopHitProb);
  119.     double CalcNormalTopHit(double Mean, double TopHitProb);
  120.     double CalcPoissonTopHit(double Mean, int i, double TopHitProb);
  121.     // take hitlist for a peak and insert it into the response
  122.     void SetResult(CMSPeakSet& PeakSet, CMSResponse& MyResponse,
  123.    double ThreshStart, double ThreshEnd,
  124.    double ThreshInc);
  125.     // calculate the evalues of the top hits and sort
  126.     void CalcNSort(TScoreList& ScoreList, double Threshold, CMSPeak* Peaks,
  127.    bool NewScore);
  128.     // update sites and masses for new peptide
  129.     void UpdateWithNewPep(int Missed,
  130.   const char *PepStart[],
  131.   const char *PepEnd[], 
  132.   int NumMod[], 
  133.   const char *Site[][MAXMOD],
  134.   int DeltaMass[][MAXMOD],
  135.   int Masses[],
  136.   int EndMasses[]);
  137.     // create the various combinations of mods
  138.     void CreateModCombinations(int Missed,
  139.        const char *PepStart[],
  140.        TMassMask MassAndMask[][MAXMOD2],
  141.        int Masses[],
  142.        int EndMasses[],
  143.        int NumMod[],
  144.        int DeltaMass[][MAXMOD],
  145.        unsigned NumMassAndMask[]);
  146. private:
  147.     ReadDBFILEPtr rdfp; 
  148.     //    CMSHistSet HistSet;  // score arrays
  149.     CMassArray MassArray;  // amino acid mass arrays
  150.     CMSMod VariableMods;  // categorized variable mods
  151.     int numseq; // number of sequences in blastdb
  152. };
  153. ///////////////////  CSearch inline methods
  154. // ModIndex contains the positions of the modified sites (aka set bits).
  155. // InitModIndex points ModIndex to all of the lower sites.
  156. inline void CSearch::InitModIndex(int *ModIndex, int& iMod)
  157. {
  158.     // pack all the mods to the first possible sites
  159.     int j;
  160.     for(j = 0; j <= iMod; j++) ModIndex[j] = j;
  161. }
  162. // makes a bool map where each bit represents a site that can be modified
  163. // ModIndex contains the position of the set bit (aka modified sites)
  164. inline void CSearch::MakeBoolMap(bool *ModMask, int *ModIndex, int& iMod, int& NumMod)
  165. {
  166.     int j;
  167.     // zero out mask
  168.     for(j = 0; j < NumMod - 1; j++)
  169. ModMask[j] = false;
  170.     // mask at the possible sites according to the index
  171.     for(j = 0; j < iMod; j++) 
  172. ModMask[ModIndex[j]] = true;
  173. }
  174. // makes a bool mask  where each bit represents a site that can be modified
  175. inline unsigned CSearch::MakeBoolMask(int *ModIndex, int& iMod)
  176. {
  177.     int j(0);
  178.     unsigned retval(0);
  179.     // mask at the possible sites according to the index
  180.     for(; j <= iMod; j++) 
  181. retval |= 1 << ModIndex[j];
  182.     return retval;
  183. }
  184. // creates a unique int for a given mod map.  used to track ladders
  185. inline unsigned CSearch::MakeIntFromBoolMap(bool *ModMask,  int& NumMod)
  186. {
  187.     int j, retval(0);
  188.     for(j = 0; j < NumMod - 1; j++)
  189. if(ModMask[j]) retval |= 1 << j;
  190.     return retval;
  191. }
  192. // CalcModIndex moves the set bits through all possible sites.  
  193. // site position is given by ModIndex
  194. inline bool CSearch::CalcModIndex(int *ModIndex, int& iMod, int& NumMod)
  195. {
  196.     int j;
  197.     // iterate over indices
  198.     for(j = iMod; j >= 0; j--) {
  199. if(ModIndex[j] < NumMod - (iMod - j) - 1) {
  200.     ModIndex[j]++;
  201.     return true;
  202. }
  203.     }
  204.     return false;
  205. }
  206. /////////////////// end of CSearch inline methods
  207. END_SCOPE(omssa)
  208. END_SCOPE(objects)
  209. END_NCBI_SCOPE
  210. #endif
  211. /*
  212.   $Log: omssa.hpp,v $
  213.   Revision 1000.1  2004/04/12 17:52:04  gouriano
  214.   PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.10
  215.   Revision 1.10  2004/04/05 20:49:16  lewisg
  216.   fix missed mass bug and reorganize code
  217.   Revision 1.9  2004/03/30 19:36:59  lewisg
  218.   multiple mod code
  219.   Revision 1.8  2004/03/16 20:18:54  gorelenk
  220.   Changed includes of private headers.
  221.   Revision 1.7  2004/03/12 16:25:07  lewisg
  222.   add comments
  223.   Revision 1.6  2004/03/01 18:24:08  lewisg
  224.   better mod handling
  225.   Revision 1.5  2003/12/22 21:58:00  lewisg
  226.   top hit code and variable mod fixes
  227.   Revision 1.4  2003/12/04 23:39:08  lewisg
  228.   no-overlap hits and various bugfixes
  229.   Revision 1.3  2003/10/24 21:28:41  lewisg
  230.   add omssa, xomssa, omssacl to win32 build, including dll
  231.   Revision 1.2  2003/10/21 21:12:17  lewisg
  232.   reorder headers
  233.   Revision 1.1  2003/10/20 21:32:13  lewisg
  234.   ommsa toolkit version
  235.   Revision 1.8  2003/10/07 18:02:28  lewisg
  236.   prep for toolkit
  237.   Revision 1.7  2003/10/06 18:14:17  lewisg
  238.   threshold vary
  239.   Revision 1.6  2003/08/14 23:49:22  lewisg
  240.   first pass at variable mod
  241.   Revision 1.5  2003/07/17 18:45:50  lewisg
  242.   multi dta support
  243.   Revision 1.4  2003/07/07 16:17:51  lewisg
  244.   new poisson distribution and turn off histogram
  245.   Revision 1.3  2003/04/18 20:46:52  lewisg
  246.   add graphing to omssa
  247.   Revision 1.2  2003/04/02 18:49:51  lewisg
  248.   improved score, architectural changes
  249.   Revision 1.1  2003/02/03 20:39:03  lewisg
  250.   omssa cgi
  251.   *
  252.   */