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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: msladder.hpp,v $
  4.  * PRODUCTION Revision 1000.3  2004/06/01 18:09:00  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.8
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /* $Id: msladder.hpp,v 1000.3 2004/06/01 18:09:00 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.  *    Classes to deal with ladders of m/z values
  38.  *
  39.  * ===========================================================================
  40.  */
  41. #ifndef MSLADDER__HPP
  42. #define MSLADDER__HPP
  43. #include <corelib/ncbimisc.hpp>
  44. #include <objects/omssa/omssa__.hpp>
  45. #include <set>
  46. #include <iostream>
  47. #include <vector>
  48. #include "msms.hpp"
  49. BEGIN_NCBI_SCOPE
  50. BEGIN_SCOPE(objects)
  51. BEGIN_SCOPE(omssa)
  52. // container for mass ladders
  53. typedef int THit;
  54. // max size of ladder
  55. const int kMSLadderMax = 10000;
  56. /////////////////////////////////////////////////////////////////////////////
  57. //
  58. //  CLadder::
  59. //
  60. //  Contains a theoretical m/z ladder
  61. //
  62. class NCBI_XOMSSA_EXPORT CLadder {
  63. public:
  64.     // 'tor's
  65.     ~CLadder();
  66.     CLadder(void);
  67.     CLadder(int SizeIn);
  68.     CLadder(const CLadder& Old);
  69.     // vector operations on the ladder
  70.     int& operator [] (int n);
  71.     unsigned size(void);
  72.     void push_back(int val);
  73.     void clear(void);
  74.     // make a ladder
  75.     bool CreateLadder(int IonType, int Charge, char *Sequence, int SeqIndex,
  76.       int start, int stop, int mass,
  77.       CMassArray& MassArray, CAA &AA,
  78.       unsigned ModMask,
  79.       const char **Site,
  80.       int *DeltaMass,
  81.       int NumMod);
  82.     // check if modification mask position is set
  83.     bool MaskSet(unsigned ModMask, int ModIndex);
  84.     // getter setters
  85.     THit * GetHit(void);
  86.     int GetStart(void);
  87.     int GetStop(void);
  88.     int GetSeqIndex(void);
  89.     int GetType(void);
  90.     int GetMass(void);
  91.     int GetCharge(void);
  92.     // sees if ladder contains the given mass value
  93.     bool Contains(int MassIndex, int Tolerance);
  94.     bool ContainsFast(int MassIndex, int Tolerance);
  95.     // or's hitlist with hitlist from other ladder
  96.     // takes into account direction
  97.     void Or(CLadder& LadderIn);
  98.     // count the number of matches
  99.     int HitCount(void);
  100.     // clear the Hitlist
  101.     void ClearHits(void);
  102. private:
  103.     int LadderIndex; // current end of the ladder
  104.     AutoPtr <int, ArrayDeleter<int> > Ladder;
  105.     AutoPtr <THit, ArrayDeleter<THit> > Hit;
  106.     unsigned LadderSize;  // size of allocated buffer
  107.     int Start, Stop;  // inclusive start and stop position in sequence
  108.     int Index;  // gi or position in blastdb
  109.     int Type;  // ion type
  110.     int Mass;  // *neutral* precursor mass (Mr)
  111.     int Charge;
  112. };
  113. /////////////////// CLadder inline methods
  114. inline int& CLadder::operator [] (int n) 
  115.     return *(Ladder.get() + n); 
  116. }
  117. inline unsigned CLadder::size(void) 
  118.     return LadderIndex; 
  119. }
  120. inline void CLadder::push_back(int val) 
  121.     *(Ladder.get() + LadderIndex) = val; 
  122.     LadderIndex++;
  123. }
  124. inline void CLadder::clear(void) 
  125.     LadderIndex = 0; 
  126. }
  127. inline THit * CLadder::GetHit(void) 
  128.     return Hit.get(); 
  129. }
  130. inline int CLadder::GetStart(void) 
  131.     return Start; 
  132. }
  133. inline int CLadder::GetStop(void) 
  134.     return Stop;
  135. }
  136. inline int CLadder::GetSeqIndex(void) 
  137.     return Index; 
  138. }
  139. inline int CLadder::GetType(void) 
  140.     return Type; 
  141. }
  142. inline int CLadder::GetMass(void) 
  143.     return Mass;
  144. }
  145. inline int CLadder::GetCharge(void) 
  146.     return Charge;
  147. }
  148. // count the number of matches
  149. inline int CLadder::HitCount(void)
  150. {
  151.     int i, retval(0);
  152.     for(i = 0; i < LadderIndex; i++)
  153. retval += *(Hit.get() + i);
  154.     return retval;
  155. }
  156. // clear the Hitlist
  157. inline void CLadder::ClearHits(void)
  158. {
  159.     int i;
  160.     for(i = 0; i < LadderIndex; i++)
  161. *(Hit.get() + i) = 0;
  162. }
  163. inline bool CLadder::MaskSet(unsigned ModMask, int ModIndex)
  164. {
  165.     return (bool) (ModMask & (1 << ModIndex));
  166. }
  167. /////////////////// end of CLadder inline methods
  168. END_SCOPE(omssa)
  169. END_SCOPE(objects)
  170. END_NCBI_SCOPE
  171. #endif
  172. /*
  173.   $Log: msladder.hpp,v $
  174.   Revision 1000.3  2004/06/01 18:09:00  gouriano
  175.   PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.8
  176.   Revision 1.8  2004/05/27 20:52:15  lewisg
  177.   better exception checking, use of AutoPtr, command line parsing
  178.   Revision 1.7  2004/03/30 19:36:59  lewisg
  179.   multiple mod code
  180.   Revision 1.6  2004/03/16 20:18:54  gorelenk
  181.   Changed includes of private headers.
  182.   Revision 1.5  2003/12/22 21:57:59  lewisg
  183.   top hit code and variable mod fixes
  184.   Revision 1.4  2003/11/18 18:16:03  lewisg
  185.   perf enhancements, ROCn adjusted params made default
  186.   Revision 1.3  2003/10/24 21:28:41  lewisg
  187.   add omssa, xomssa, omssacl to win32 build, including dll
  188.   Revision 1.2  2003/10/21 21:12:16  lewisg
  189.   reorder headers
  190.   Revision 1.1  2003/10/20 21:32:13  lewisg
  191.   ommsa toolkit version
  192.   Revision 1.10  2003/10/07 18:02:28  lewisg
  193.   prep for toolkit
  194.   Revision 1.9  2003/10/06 18:14:17  lewisg
  195.   threshold vary
  196.   Revision 1.8  2003/08/14 23:49:22  lewisg
  197.   first pass at variable mod
  198.   Revision 1.7  2003/07/17 18:45:49  lewisg
  199.   multi dta support
  200.   Revision 1.6  2003/07/07 16:17:51  lewisg
  201.   new poisson distribution and turn off histogram
  202.   Revision 1.5  2003/05/01 14:52:10  lewisg
  203.   fixes to scoring
  204.   Revision 1.4  2003/04/24 18:45:55  lewisg
  205.   performance enhancements to ladder creation and peak compare
  206.   Revision 1.3  2003/04/18 20:46:52  lewisg
  207.   add graphing to omssa
  208.   Revision 1.2  2003/04/02 18:49:50  lewisg
  209.   improved score, architectural changes
  210.   Revision 1.1  2003/03/21 21:14:40  lewisg
  211.   merge ming's code, other stuff
  212. */