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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: SpectrumSet.cpp,v $
  4.  * PRODUCTION Revision 1000.2  2004/06/01 18:08:53  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.8
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /* $Id: SpectrumSet.cpp,v 1000.2 2004/06/01 18:08: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 author in any work or product based on this material.
  31.  *
  32.  * ===========================================================================
  33.  *
  34.  * Author:  Lewis Y. Geer
  35.  *
  36.  * File Description:
  37.  *   Contains code for reading in spectrum data sets.
  38.  *
  39.  * Remark:
  40.  *   This code was originally generated by application DATATOOL
  41.  *   using specifications from the data definition file
  42.  *   'omssa.asn'.
  43.  */
  44. // standard includes
  45. #include <ncbi_pch.hpp>
  46. #include <corelib/ncbistd.hpp>
  47. #include <corelib/ncbi_limits.h>
  48. #include <corelib/ncbistre.hpp>
  49. #include <corelib/ncbistr.hpp>
  50. #include <util/regexp.hpp>
  51. #include <objects/omssa/MSSpectrum.hpp>
  52. // generated includes
  53. #include "SpectrumSet.hpp"
  54. // added includes
  55. #include "msms.hpp"
  56. // generated classes
  57. BEGIN_NCBI_SCOPE
  58. BEGIN_objects_SCOPE // namespace ncbi::objects::
  59. /////////////////////////////////////////////////////////////////////////////
  60. //
  61. //  CSpectrumSet::
  62. //
  63. ///
  64. /// load multiple dta's in xml-like format
  65. ///
  66. int CSpectrumSet::LoadMultDTA(std::istream& DTA)
  67. {   
  68.     CRef <CMSSpectrum> MySpectrum;
  69.     int iIndex(-1); // the spectrum index
  70.     string Line;
  71.     //    double dummy;
  72.     bool GotOne(false);  // has a spectrum been read?
  73.     try {
  74. do {
  75.     do {
  76. getline(DTA, Line);
  77.     } while(NStr::Compare(Line, 0, 4, "<dta") != 0 && DTA && !DTA.eof());
  78.     if(!DTA || DTA.eof()) {
  79. if(GotOne) return 0;
  80. else return 1;
  81.     }
  82.     GotOne = true;
  83.     
  84.     MySpectrum = new CMSSpectrum;
  85.     CRegexp RxpGetNum("\sid\s*=\s*("(\S+)"|(\S+)b)");
  86.     string Match;
  87.     if((Match = RxpGetNum.GetMatch(Line.c_str(), 0, 2)) != "" ||
  88.        (Match = RxpGetNum.GetMatch(Line.c_str(), 0, 3)) != "") {
  89. MySpectrum->SetNumber(NStr::StringToInt(Match));
  90.     }
  91.     else {
  92. MySpectrum->SetNumber(iIndex);
  93. iIndex--;
  94.     }
  95.     CRegexp RxpGetName("\sname\s*=\s*("(\S+)"|(\S+)b)");
  96.     if((Match = RxpGetName.GetMatch(Line.c_str(), 0, 2)) != "" ||
  97.        (Match = RxpGetName.GetMatch(Line.c_str(), 0, 3)) != "") {
  98. MySpectrum->SetName(Match);
  99.     }
  100.     
  101.     GetDTAHeader(DTA, MySpectrum);
  102.     getline(DTA, Line);
  103.     getline(DTA, Line);
  104.     while(NStr::Compare(Line, 0, 5, "</dta") != 0) {
  105. CNcbiIstrstream istr(Line.c_str());
  106. if(!GetDTABody(istr, MySpectrum)) break;;
  107. getline(DTA, Line);
  108.     } 
  109.     Set().push_back(MySpectrum);
  110. } while(DTA && !DTA.eof());
  111.     } catch (NCBI_NS_STD::exception& e) {
  112. ERR_POST(Info << "Exception in CSpectrumSet::LoadMultDTA: " << e.what());
  113. throw;
  114.     }
  115.     return 0;
  116. }
  117. ///
  118. /// load multiple dta's separated by a blank line
  119. ///
  120. int CSpectrumSet::LoadMultBlankLineDTA(std::istream& DTA)
  121. {   
  122.     CRef <CMSSpectrum> MySpectrum;
  123.     int iIndex(0); // the spectrum index
  124.     string Line;
  125.     //    double dummy;
  126.     bool GotOne(false);  // has a spectrum been read?
  127.     try {
  128. while (DTA && !DTA.eof()){
  129.     GotOne = true;
  130.     
  131.     MySpectrum = new CMSSpectrum;
  132.     MySpectrum->SetNumber(iIndex);
  133.     iIndex++;
  134.     
  135.     GetDTAHeader(DTA, MySpectrum);
  136.     getline(DTA, Line);
  137.     getline(DTA, Line);
  138.     if(!DTA || DTA.eof()) {
  139. if(GotOne) return 0;
  140. else return 1;
  141.     }
  142.     while(Line != "") {
  143. CNcbiIstrstream istr(Line.c_str());
  144. if(!GetDTABody(istr, MySpectrum)) break;;
  145. getline(DTA, Line);
  146.     } 
  147.     Set().push_back(MySpectrum);
  148. } while(DTA && !DTA.eof());
  149. if(GotOne) return 0;
  150. else return 1;
  151.     } catch (NCBI_NS_STD::exception& e) {
  152. ERR_POST(Info << "Exception in CSpectrumSet::LoadMultDTA: " << e.what());
  153. throw;
  154.     }
  155.     return 0;
  156. }
  157. ///
  158. ///  Read in the header of a DTA file
  159. ///
  160. void CSpectrumSet::GetDTAHeader(std::istream& DTA, CRef <CMSSpectrum>& MySpectrum)
  161. {
  162.     double dummy;
  163.     MySpectrum->SetScale(MSSCALE);
  164.     DTA >> dummy;
  165.     MySpectrum->SetPrecursormz(static_cast <int> (dummy*MSSCALE));
  166.     DTA >> dummy;
  167.     MySpectrum->SetCharge().push_back(static_cast <int> (dummy)); 
  168. }
  169. ///
  170. /// Read in the body of a dta file
  171. ///
  172. bool CSpectrumSet::GetDTABody(std::istream& DTA, CRef <CMSSpectrum>& MySpectrum)
  173. {
  174.     double dummy(0.0L);
  175.     DTA >> dummy;
  176.     if(dummy == 0) return false;
  177.     MySpectrum->SetMz().push_back(static_cast <int> (dummy*MSSCALE));
  178.     // attenuate the really big peaks
  179.     DTA >> dummy;
  180.     if(dummy > kMax_UInt) dummy = kMax_UInt/MSSCALE;
  181.     MySpectrum->SetAbundance().push_back(static_cast <int> (dummy*MSSCALE));
  182.     return true;
  183. }
  184. ///
  185. /// load in a single dta file
  186. ///
  187. int CSpectrumSet::LoadDTA(std::istream& DTA)
  188. {   
  189.     CRef <CMSSpectrum> MySpectrum;
  190.     bool GotOne(false);  // has a spectrum been read?
  191.     try {
  192. MySpectrum = new CMSSpectrum;
  193. MySpectrum->SetNumber(1);
  194. MySpectrum->SetScale(MSSCALE);
  195. GetDTAHeader(DTA, MySpectrum);
  196.     
  197. while(DTA) {
  198.     if(!GetDTABody(DTA, MySpectrum)) break;
  199.     GotOne = true;
  200. Set().push_back(MySpectrum);
  201.     } catch (NCBI_NS_STD::exception& e) {
  202. ERR_POST(Info << "Exception in CSpectrumSet::LoadDTA: " << e.what());
  203. throw;
  204.     }
  205.     if(GotOne) return 0;
  206.     else return 1;
  207. }
  208. END_objects_SCOPE // namespace ncbi::objects::
  209. END_NCBI_SCOPE
  210. /*
  211.  * ===========================================================================
  212.  *
  213.  * $Log: SpectrumSet.cpp,v $
  214.  * Revision 1000.2  2004/06/01 18:08:53  gouriano
  215.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.8
  216.  *
  217.  * Revision 1.8  2004/05/27 20:52:15  lewisg
  218.  * better exception checking, use of AutoPtr, command line parsing
  219.  *
  220.  * Revision 1.7  2004/05/21 21:41:03  gorelenk
  221.  * Added PCH ncbi_pch.hpp
  222.  *
  223.  * Revision 1.6  2004/03/30 19:36:59  lewisg
  224.  * multiple mod code
  225.  *
  226.  * Revision 1.5  2004/03/16 20:18:54  gorelenk
  227.  * Changed includes of private headers.
  228.  *
  229.  * Revision 1.4  2003/10/22 15:03:32  lewisg
  230.  * limits and string compare changed for gcc 2.95 compatibility
  231.  *
  232.  * Revision 1.3  2003/10/21 21:20:57  lewisg
  233.  * use strstream instead of sstream for gcc 2.95
  234.  *
  235.  * Revision 1.2  2003/10/21 21:12:16  lewisg
  236.  * reorder headers
  237.  *
  238.  * Revision 1.1  2003/10/20 21:32:13  lewisg
  239.  * ommsa toolkit version
  240.  *
  241.  *
  242.  * ===========================================================================
  243.  */
  244. /* Original file checksum: lines: 56, chars: 1753, CRC32: bdc55e21 */