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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: cav_main.cpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/06/01 19:41:24  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.3
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: cav_main.cpp,v 1000.1 2004/06/01 19:41:24 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. * Authors:  Paul Thiessen
  35. *
  36. * File Description:
  37. *      Main application class for CDDAlignmentViewer
  38. *
  39. * ===========================================================================
  40. */
  41. #include <ncbi_pch.hpp>
  42. #include <corelib/ncbienv.hpp>
  43. #include <corelib/ncbiargs.hpp>
  44. #include <corelib/ncbi_limits.h>
  45. #include <objtools/cddalignview/demo/cav_main.hpp>
  46. #include <objtools/cddalignview/cddalignview.h>
  47. BEGIN_NCBI_SCOPE
  48. void CAVApp::Init(void)
  49. {
  50.     // create command-line argument descriptions
  51.     CArgDescriptions *argDescr = new CArgDescriptions();
  52.     // usage
  53.     argDescr->SetUsageContext(GetArguments().GetProgramName(), "CDD Alignment Viewer");
  54.     // output type (required)
  55.     argDescr->AddKey("type", "type", "one of: 'text' (unformatted), 'HTML', or 'FASTA'", argDescr->eString);
  56.     argDescr->SetConstraint("type", (new CArgAllow_Strings())->Allow("text")->Allow("HTML")->Allow("FASTA"));
  57.     // lowercase flag for FASTA
  58.     argDescr->AddFlag("fasta_lc", "whether to show unaligned residues in lowercase in FASTA output");
  59.     // paragraph width (optional, default 60)
  60.     argDescr->AddDefaultKey("width", "integer", "paragraph width", argDescr->eInteger, "60");
  61.     argDescr->SetConstraint("width", new CArgAllow_Integers(1, kMax_Int));
  62.     // conservation threshhold (optional, default 2.0)
  63.     argDescr->AddDefaultKey("cons", "bits", "conservation threshhold (bit score)", argDescr->eDouble, "2.0");
  64.     argDescr->AddFlag("identity", "show identity, ignoring bit score");
  65.     // whether to output left/right tails
  66.     argDescr->AddFlag("lefttails", "whether to show left tails");
  67.     argDescr->AddFlag("righttails", "whether to show right tails");
  68.     // whether to do condensed display
  69.     argDescr->AddFlag("condensed", "condensed incompletely aligned columns (text/HTML only)");
  70.     // input file name (required)
  71.     argDescr->AddPositional("in", "name of input file", argDescr->eString);
  72.     SetupArgDescriptions(argDescr);
  73. }
  74. int CAVApp::Run(void)
  75. {
  76.     // process arguments
  77.     CArgs args = GetArgs();
  78.     // open input file
  79.     CNcbiIfstream *asnIfstream = new CNcbiIfstream(args["in"].AsString().c_str(), IOS_BASE::in | IOS_BASE::binary);
  80.     if (!asnIfstream) {
  81.         ERR_POST(Error << "Can't open input file " << args["in"].AsString());
  82.         return -1;
  83.     }
  84.     // load input file into memory
  85.     string asnString;
  86.     static const int bufSize = 65536;
  87.     char buf[bufSize];
  88.     asnString.resize(bufSize);  // start small...
  89.     int nBytes = 0, n, i;
  90.     while (!(asnIfstream->eof() || asnIfstream->fail() || asnIfstream->bad())) {
  91.         asnIfstream->read(buf, bufSize);
  92.         n = asnIfstream->gcount();
  93.         if (nBytes+n > asnString.size())    // ... then allocate new memory in 256k chunks
  94.             asnString.resize(asnString.size() + bufSize*4);
  95.         for (i=0; i<n; i++) asnString[nBytes + i] = buf[i];
  96.         nBytes += n;
  97.     }
  98.     delete asnIfstream;
  99.     // process options
  100.     unsigned int options = CAV_DEBUG;
  101.     if (args["type"].AsString() == "text")
  102.         options |= CAV_TEXT;
  103.     else if (args["type"].AsString() == "HTML")
  104.         options |= CAV_HTML | CAV_HTML_HEADER;
  105.     else if (args["type"].AsString() == "FASTA")
  106.         options |= CAV_FASTA;
  107.     if (args["lefttails"].HasValue()) options |= CAV_LEFTTAILS;
  108.     if (args["righttails"].HasValue()) options |= CAV_RIGHTTAILS;
  109.     if (args["condensed"].HasValue()) options |= CAV_CONDENSED;
  110.     if (args["identity"].HasValue()) options |= CAV_SHOW_IDENTITY;
  111.     if (args["fasta_lc"].HasValue()) options |= CAV_FASTA_LOWERCASE;
  112.     // for testing alignment features
  113. #if 0
  114.     AlignmentFeature feats[2];
  115.     int nFeats = 2;
  116.     feats[0].nLocations = 90/5;
  117.     feats[0].locations = new int[90/5];
  118.     for (i=5; i<=90; i+=5) feats[0].locations[i/5 - 1] = i - 1;
  119.     feats[0].shortName = "Feature 1";
  120.     feats[0].description = "Long description of Feature 1";
  121.     feats[0].featChar = '@';
  122.     feats[1].nLocations = 90/3;
  123.     feats[1].locations = new int[90/3];
  124.     for (i=3; i<=90; i+=3) feats[1].locations[i/3 - 1] = i - 1;
  125.     feats[1].shortName = "Feature 2";
  126.     feats[1].description = "Long description of Feature 2";
  127.     feats[1].featChar = '%';
  128.     options |= CAV_ANNOT_BOTTOM;
  129. #else
  130.     AlignmentFeature *feats = NULL;
  131.     int nFeats = 0;
  132. #endif
  133.     // actually do the function
  134.     return
  135.         CAV_DisplayMultiple(
  136.             static_cast<const void*>(asnString.data()),
  137.             options,
  138.             args["width"].AsInteger(),
  139.             args["cons"].AsDouble(),
  140.             "Alignment - created from command line",
  141.             nFeats, feats
  142.         );
  143. }
  144. END_NCBI_SCOPE
  145. USING_NCBI_SCOPE;
  146. int main(int argc, const char* argv[])
  147. {
  148.     SetDiagStream(&NcbiCerr); // send all diagnostic messages to cerr
  149.     SetDiagPostLevel(eDiag_Info);   // show all messages
  150.     CAVApp app;
  151.     return app.AppMain(argc, argv, NULL, eDS_Default, NULL);    // don't use config file
  152. }
  153. /*
  154. * ---------------------------------------------------------------------------
  155. * $Log: cav_main.cpp,v $
  156. * Revision 1000.1  2004/06/01 19:41:24  gouriano
  157. * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.3
  158. *
  159. * Revision 1.3  2004/05/21 21:42:51  gorelenk
  160. * Added PCH ncbi_pch.hpp
  161. *
  162. * Revision 1.2  2003/06/02 16:06:41  dicuccio
  163. * Rearranged src/objects/ subtree.  This includes the following shifts:
  164. *     - src/objects/asn2asn --> arc/app/asn2asn
  165. *     - src/objects/testmedline --> src/objects/ncbimime/test
  166. *     - src/objects/objmgr --> src/objmgr
  167. *     - src/objects/util --> src/objmgr/util
  168. *     - src/objects/alnmgr --> src/objtools/alnmgr
  169. *     - src/objects/flat --> src/objtools/flat
  170. *     - src/objects/validator --> src/objtools/validator
  171. *     - src/objects/cddalignview --> src/objtools/cddalignview
  172. * In addition, libseq now includes six of the objects/seq... libs, and libmmdb
  173. * replaces the three libmmdb? libs.
  174. *
  175. * Revision 1.1  2003/03/19 19:04:23  thiessen
  176. * move again
  177. *
  178. * Revision 1.1  2003/03/19 05:33:43  thiessen
  179. * move to src/app/cddalignview
  180. *
  181. * Revision 1.14  2003/02/03 17:52:03  thiessen
  182. * move CVS Log to end of file
  183. *
  184. * Revision 1.13  2003/01/21 18:01:07  thiessen
  185. * add condensed alignment display
  186. *
  187. * Revision 1.12  2002/11/08 19:38:11  thiessen
  188. * add option for lowercase unaligned in FASTA
  189. *
  190. * Revision 1.11  2002/02/12 12:54:11  thiessen
  191. * feature legend at bottom; annot only where aligned
  192. *
  193. * Revision 1.10  2002/02/08 19:53:17  thiessen
  194. * add annotation to text/HTML displays
  195. *
  196. * Revision 1.9  2001/03/02 01:19:25  thiessen
  197. * add FASTA output
  198. *
  199. * Revision 1.8  2001/02/15 19:23:44  thiessen
  200. * add identity coloring
  201. *
  202. * Revision 1.7  2001/02/14 16:06:10  thiessen
  203. * add block and conservation coloring to HTML display
  204. *
  205. * Revision 1.6  2001/01/29 18:13:34  thiessen
  206. * split into C-callable library + main
  207. *
  208. * Revision 1.5  2001/01/25 20:19:12  thiessen
  209. * fix in-memory asn read/write
  210. *
  211. * Revision 1.4  2001/01/25 00:51:20  thiessen
  212. * add command-line args; can read asn data from stdin
  213. *
  214. * Revision 1.3  2001/01/23 17:34:12  thiessen
  215. * add HTML output
  216. *
  217. * Revision 1.2  2001/01/22 15:55:11  thiessen
  218. * correctly set up ncbi namespacing
  219. *
  220. * Revision 1.1  2001/01/22 13:15:24  thiessen
  221. * initial checkin
  222. *
  223. */