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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: readresult.cpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/06/01 18:09:16  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.3
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /* $Id: readresult.cpp,v 1000.1 2004/06/01 18:09:16 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. * Author:  Lewis Y. Geer
  35. *  
  36. * File Description:
  37. *    reads in an omssa search result, which is formatted in ASN.1,
  38. *    iterates through the results and prints them.
  39. *
  40. * ===========================================================================
  41. */
  42. #include <ncbi_pch.hpp>
  43. #include <corelib/ncbiargs.hpp>
  44. #include <corelib/ncbiapp.hpp>
  45. #include <corelib/ncbienv.hpp>
  46. #include <corelib/ncbistre.hpp>
  47. #include <serial/serial.hpp>
  48. #include <serial/objistrasn.hpp>
  49. #include <serial/objistrasnb.hpp>
  50. #include <serial/objostrasn.hpp>
  51. #include <serial/objostrasnb.hpp>
  52. #include <serial/iterator.hpp>
  53. #include <objects/omssa/omssa__.hpp>
  54. #include <string>
  55. USING_NCBI_SCOPE;
  56. USING_SCOPE(objects);
  57. // subclass of standard NCBI application class
  58. class CReadresult : public CNcbiApplication {
  59. public:
  60.     virtual int Run();
  61.     virtual void Init();
  62. };
  63. // initialize application
  64. void CReadresult::Init()
  65. {
  66.     auto_ptr<CArgDescriptions> argDesc(new CArgDescriptions);
  67. // set up command line arguments
  68.     argDesc->AddDefaultKey("o", "omssafile", 
  69. "file with results from omssa",
  70. CArgDescriptions::eString, "");
  71.     SetupArgDescriptions(argDesc.release());
  72.     SetDiagPostLevel(eDiag_Info);
  73. }
  74. int main(int argc, const char* argv[]) 
  75. {
  76.     CReadresult theTestApp;
  77.     return theTestApp.AppMain(argc, argv);
  78. }
  79. // run application
  80. int CReadresult::Run()
  81. {    
  82.     CArgs args = GetArgs();
  83.     try {
  84. // read in omssa files
  85. if(args["o"].AsString().size() > 0) {
  86. // input stream (specialized for ASN.1)
  87. auto_ptr<CObjectIStream> 
  88. in(CObjectIStream::Open(args["o"].AsString().c_str(),
  89. eSerial_AsnText));
  90. // object to hold input
  91. CMSResponse Response;
  92. // read it in
  93. in->Read(ObjectInfo(Response));
  94. CMSResponse::THitsets::const_iterator iHits;
  95. iHits = Response.GetHitsets().begin();
  96. // iterate through sets of hits, where each set corresponds
  97. // to a spectrum
  98. for(; iHits != Response.GetHitsets().end(); iHits++) {
  99. CRef< CMSHitSet > HitSet =  *iHits;
  100. // ERR_POST macro writes to error log, which is usually cerr
  101. ERR_POST(Info << "Hitset: " << HitSet->GetNumber());
  102. if( HitSet-> CanGetError() && HitSet->GetError() ==
  103. eMSHitError_notenuffpeaks) {
  104. ERR_POST(Info << "Hitset Empty");
  105. continue;
  106. }
  107. // iterate through peptide hits for each spectrum
  108. CMSHitSet::THits::const_iterator iHit; 
  109. CMSHits::TPephits::const_iterator iPephit;
  110. for(iHit = HitSet->GetHits().begin();
  111. iHit != HitSet->GetHits().end(); iHit++) {
  112. ERR_POST(Info << (*iHit)->GetPepstring() << ": " << "P = " << 
  113. (*iHit)->GetPvalue() << " E = " <<
  114. (*iHit)->GetEvalue());    
  115. // iterate through each sequence that contains the peptide hit
  116. for(iPephit = (*iHit)->GetPephits().begin();
  117. iPephit != (*iHit)->GetPephits().end();
  118. iPephit++) {
  119. ERR_POST(Info << (*iPephit)->GetGi() << ": " << (*iPephit)->GetStart() << "-" << (*iPephit)->GetStop() << ":" << (*iPephit)->GetDefline());
  120. }
  121. }
  122. }
  123. }
  124.     } catch (exception& e) {
  125. ERR_POST(Fatal << e.what());
  126. return 1;
  127.     }
  128.     return 0;
  129. }
  130. /*
  131. $Log: readresult.cpp,v $
  132. Revision 1000.1  2004/06/01 18:09:16  gouriano
  133. PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.3
  134. Revision 1.3  2004/05/21 21:41:03  gorelenk
  135. Added PCH ncbi_pch.hpp
  136. Revision 1.2  2003/10/29 22:22:50  lewisg
  137. added comments
  138. Revision 1.1  2003/10/27 20:10:56  lewisg
  139. demo program to read out omssa results
  140.   
  141. */