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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: test_seqport.cpp,v $
  4.  * PRODUCTION Revision 1000.3  2004/06/01 19:33:33  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.13
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: test_seqport.cpp,v 1000.3 2004/06/01 19:33:33 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:  Clifford Clausen
  35.  *          (also reviewed/fixed/groomed by Denis Vakatov)
  36.  * File Description:
  37.  *   
  38.  */
  39. #include <ncbi_pch.hpp>
  40. #include <corelib/ncbiapp.hpp>
  41. #include <corelib/ncbiargs.hpp>
  42. #include <corelib/ncbienv.hpp>
  43. #include <corelib/ncbireg.hpp>
  44. #include <serial/serial.hpp>
  45. #include <serial/objistr.hpp>
  46. #include <objects/seqset/Seq_entry.hpp>
  47. #include <objects/seqset/Bioseq_set.hpp>
  48. #include <objects/seqfeat/Genetic_code.hpp>
  49. #include <objects/seq/Bioseq.hpp>
  50. #include <objects/seq/NCBI2na.hpp>
  51. #include <objects/seq/NCBI4na.hpp>
  52. #include <objects/seq/IUPACna.hpp>
  53. #include <objects/seq/IUPACaa.hpp>
  54. #include <objects/seq/NCBIeaa.hpp>
  55. #include <objects/seq/NCBIstdaa.hpp>
  56. #include <objects/seq/Seq_inst.hpp>
  57. #include <objects/seq/seqport_util.hpp>
  58. USING_NCBI_SCOPE;
  59. USING_SCOPE(objects);
  60. #define MAX_DISPLAY 48
  61. /////////////////////////////////////////////////////////////////////////////
  62. //
  63. class CSeqportTestApp : public CNcbiApplication
  64. {
  65. public:
  66.     virtual void Init();
  67.     virtual int  Run(void);
  68.     virtual void Exit();
  69.     void DisplaySeq(const CSeq_data& seq, unsigned int uSize=48);
  70.     // Testing methods that require CSeq_data
  71.     void SeqDataTest();
  72.     void GetAmbigsTest(const CSeq_data&     in_seq,
  73.               CSeq_data*           out_seq,
  74.               CSeq_data::E_Choice  to_code,
  75.               TSeqPos              uBeginIdx,
  76.               TSeqPos              uLength);
  77.     void ConvertTest(const CSeq_data&     in_seq,
  78.               CSeq_data*           out_seq,
  79.               CSeq_data::E_Choice  to_code,
  80.               TSeqPos              uBeginIdx,
  81.               TSeqPos              uLength,
  82.               bool                 bAmbig);
  83.     void AppendTest(const CSeq_data&     in_seq,
  84.               CSeq_data*           out_seq,
  85.               TSeqPos              uBeginIdx,
  86.               TSeqPos              uLength);
  87.     void InPlaceReverseComplementTest(const CSeq_data&     in_seq,
  88.               CSeq_data*           out_seq,
  89.               TSeqPos              uBeginIdx,
  90.               TSeqPos              uLength);
  91.     void InCopyReverseComplementTest(const CSeq_data&     in_seq,
  92.               CSeq_data*           out_seq,
  93.               TSeqPos              uBeginIdx,
  94.               TSeqPos              uLength);
  95.     void InPlaceReverseTest(const CSeq_data&     in_seq,
  96.               CSeq_data*           out_seq,
  97.               TSeqPos              uBeginIdx,
  98.               TSeqPos              uLength);
  99.     void InCopyReverseTest(const CSeq_data&     in_seq,
  100.               CSeq_data*           out_seq,
  101.               TSeqPos              uBeginIdx,
  102.               TSeqPos              uLength);
  103.     void InPlaceComplementTest(const CSeq_data&     in_seq,
  104.               CSeq_data*           out_seq,
  105.               TSeqPos              uBeginIdx,
  106.               TSeqPos              uLength);
  107.     void InCopyComplementTest(const CSeq_data&     in_seq,
  108.               CSeq_data*           out_seq,
  109.               TSeqPos              uBeginIdx,
  110.               TSeqPos              uLength);
  111.     void FastValidateTest(const CSeq_data&     in_seq,
  112.               TSeqPos              uBeginIdx,
  113.               TSeqPos              uLength);
  114.     void ValidateTest(const CSeq_data&     in_seq,
  115.               TSeqPos              uBeginIdx,
  116.               TSeqPos              uLength);
  117.     void GetCopyTest(const CSeq_data&     in_seq,
  118.               CSeq_data*           out_seq,
  119.               TSeqPos              uBeginIdx,
  120.               TSeqPos              uLength);
  121.     void KeepTest(const CSeq_data&     in_seq,
  122.               CSeq_data*           out_seq,
  123.               TSeqPos         uBeginIdx,
  124.               TSeqPos         uLength);
  125.     void PackTest(const CSeq_data&     in_seq,
  126.               CSeq_data*           out_seq,
  127.               TSeqPos              uBeginIdx,
  128.               TSeqPos              uLength);
  129.     
  130.     
  131.     // Testing methods that do not require CSeq_data
  132.     void NonSeqDataTest();
  133.     void GetIupacaa3();
  134.     void GetCodeEChoice();
  135.     void GetCodeESeq();
  136.     void GetNameEChoice();    
  137.     void GetNameESeq();
  138.     void GetIndexEChoice();
  139.     void GetIndexESeq();
  140.     void IsCodeAvailableEChoice();
  141.     void IsCodeAvailableESeq();
  142.     void GetCodeIndexFromToEChoice();
  143.     void GetCodeIndexFromToESeq();
  144.     void GetIndexComplementEChoice();
  145.     void GetIndexComplementESeq();
  146.     void GetMapToIndexEChoice();
  147.     void GetMapToIndexESeq();       
  148. };
  149. /////////////////////////////////////////////////////////////////////////////
  150. //
  151. void CSeqportTestApp::Init()
  152. {
  153.     return;
  154. }
  155. int CSeqportTestApp::Run()
  156. {
  157.     while ( true ) {
  158.     
  159.         cout << "Enter type tests to run: " << endl
  160.              << "0) Done" << endl
  161.              << "1) Tests requiring CSeq_dat" << endl
  162.              << "2) Tests not requiring CSeq_dat" << endl; 
  163.         int resp;
  164.         cin >> resp;
  165.         
  166.         switch (resp) {
  167.         case 0:
  168.             return 0;
  169.         case 1:
  170.             SeqDataTest();
  171.             break;
  172.         case 2:
  173.             NonSeqDataTest();
  174.             break;
  175.         }
  176.     }
  177. }
  178. static int GetChoice()
  179. {
  180.     int choice = -1;
  181.     while ( (choice < 0 || choice > 11) && (choice != 99) ) {
  182.         cout << "Enter code type choice:" << endl
  183.              << "0:  Not set" << endl
  184.              << "1:  Iupacna" << endl
  185.              << "2:  Iupacaa" << endl
  186.              << "3:  Ncbi2na" << endl
  187.              << "4:  Ncbi4na" << endl
  188.              << "5:  Ncbi8na" << endl
  189.              << "6:  Ncbipna" << endl
  190.              << "7:  Ncbi8aa" << endl
  191.              << "8:  Ncbieaa" << endl
  192.              << "9:  Ncbipaa" << endl
  193.              << "10: Ncbistdaa" << endl
  194.              << "11: Iupacaa3" << endl
  195.              << "99: Done" << endl;
  196.         cin >> choice;
  197.     }    
  198.     return choice;  
  199. }
  200. static CSeq_data::E_Choice GetEChoice()
  201. {
  202.     int choice = GetChoice();
  203.     
  204.     switch (choice) {
  205.     case 0:
  206.         return CSeq_data::e_not_set;
  207.     case 1:
  208.         return CSeq_data::e_Iupacna;
  209.     case 2:
  210.         return CSeq_data::e_Iupacaa;
  211.     case 3:
  212.         return CSeq_data::e_Ncbi2na;
  213.     case 4:
  214.         return CSeq_data::e_Ncbi4na;
  215.     case 5:
  216.         return CSeq_data::e_Ncbi8na;
  217.     case 6:
  218.         return CSeq_data::e_Ncbipna;
  219.     case 7:
  220.         return CSeq_data::e_Ncbi8aa;
  221.     case 8:
  222.         return CSeq_data::e_Ncbieaa;
  223.     case 9:
  224.         return CSeq_data::e_Ncbipaa;
  225.     case 10:
  226.         return CSeq_data::e_Ncbistdaa;
  227.     case 99:
  228.         throw runtime_error("Done");
  229.     }
  230.     cout << "Requested code not CSeq_data:E_Choice" << endl;
  231.     cout << "Using CSeq_data::e_not_set" << endl;
  232.     return CSeq_data::e_not_set;
  233. }
  234. static ESeq_code_type GetESeqCodeType()
  235. {
  236.     int choice = GetChoice();
  237.     
  238.     switch (choice) {
  239.     case 1:
  240.         return eSeq_code_type_iupacna;
  241.     case 2:
  242.         return eSeq_code_type_iupacaa;
  243.     case 3:
  244.         return eSeq_code_type_ncbi2na;
  245.     case 4:
  246.         return eSeq_code_type_ncbi4na;
  247.     case 5:
  248.         return eSeq_code_type_ncbi8na;
  249.     case 6:
  250.         return eSeq_code_type_ncbipna;
  251.     case 7:
  252.         return eSeq_code_type_ncbi8aa;
  253.     case 8:
  254.         return eSeq_code_type_ncbieaa;
  255.     case 9:
  256.         return eSeq_code_type_ncbipaa;
  257.     case 10:
  258.         return eSeq_code_type_ncbistdaa;
  259.     case 11:
  260.         return eSeq_code_type_iupacaa3;
  261.     case 99:
  262.         throw runtime_error("Done");
  263.     }
  264.     cout << "Requested code no an ESeq_code_type. Using iupacna." << endl;
  265.     return eSeq_code_type_iupacna;
  266. }
  267. void CSeqportTestApp::GetIupacaa3()
  268. {
  269.     unsigned int ncbistdaa;
  270.     cout << "Enter Ncbistdaa index: ";
  271.     cin >> ncbistdaa;
  272.     string iupacaa3;
  273.     iupacaa3 = CSeqportUtil::GetIupacaa3(ncbistdaa);
  274.     cout << "Iupacaa3 is : " << iupacaa3 << endl;
  275.     throw runtime_error("Done");
  276. }
  277. void CSeqportTestApp::GetCodeEChoice()
  278. {   
  279.     CSeq_data::E_Choice code_type = GetEChoice();  
  280.     CSeqportUtil::TIndex idx;
  281.     cout << "Enter index: ";
  282.     cin >> idx;
  283.     string code;
  284.     code = CSeqportUtil::GetCode(code_type, idx);
  285.     cout << "Code is : " << code << endl;
  286. }
  287. void CSeqportTestApp::GetCodeESeq()
  288. {
  289.     ESeq_code_type code_type = GetESeqCodeType();
  290.     int idx;
  291.     cout << "Enter index: ";
  292.     cin >> idx;
  293.     string code;
  294.     code = CSeqportUtil::GetCode(code_type, idx);
  295.     cout << "Code is : " << code << endl;
  296. }
  297. void CSeqportTestApp::GetNameEChoice()
  298. {
  299.     CSeq_data::E_Choice code_type = GetEChoice();
  300.     int idx;
  301.     cout << "Enter index: ";
  302.     cin >> idx;
  303.     string code;
  304.     code = CSeqportUtil::GetName(code_type, idx);
  305.     cout << "Name is : " << code << endl;
  306. }
  307. void CSeqportTestApp::GetNameESeq()
  308. {
  309.     ESeq_code_type code_type = GetESeqCodeType();
  310.     int idx;
  311.     cout << "Enter index: ";
  312.     cin >> idx;
  313.     string code;
  314.     code = CSeqportUtil::GetName(code_type, idx);
  315.     cout << "Name is : " << code << endl;
  316. }
  317. void CSeqportTestApp::GetIndexEChoice()
  318. {
  319.     CSeq_data::E_Choice code_type = GetEChoice();
  320.     string code;
  321.     cout << "Enter code: ";
  322.     cin >> code;
  323.     int idx = CSeqportUtil::GetIndex(code_type, code);
  324.     cout << "Index is : " << idx << endl;
  325. }
  326. void CSeqportTestApp::GetIndexESeq()
  327. {
  328.     ESeq_code_type code_type = GetESeqCodeType();
  329.     string code;
  330.     cout << "Enter code: ";
  331.     cin >> code;
  332.     int idx = CSeqportUtil::GetIndex(code_type, code);
  333.     cout << "Index is : " << idx << endl;
  334. }
  335. void CSeqportTestApp::IsCodeAvailableEChoice()
  336. {
  337.     CSeq_data::E_Choice code_type = GetEChoice();
  338.     bool avail = CSeqportUtil::IsCodeAvailable(code_type);
  339.     cout << "Code availabe is " << avail << endl;
  340. }
  341. void CSeqportTestApp::IsCodeAvailableESeq()
  342. {
  343.     ESeq_code_type code_type = GetESeqCodeType();
  344.     bool avail= CSeqportUtil::IsCodeAvailable(code_type);
  345.     cout << "Code availabe is " << avail << endl;
  346. }
  347. void CSeqportTestApp::GetCodeIndexFromToEChoice()
  348. {
  349.     CSeq_data::E_Choice code_type = GetEChoice();
  350.     CSeqportUtil::TPair from_to = 
  351.         CSeqportUtil::GetCodeIndexFromTo(code_type);
  352.     cout << "From is " << from_to.first
  353.          << ": To is " << from_to.second << endl;
  354. }
  355. void CSeqportTestApp::GetCodeIndexFromToESeq()
  356. {
  357.     ESeq_code_type code_type = GetESeqCodeType();
  358.     CSeqportUtil::TPair from_to = 
  359.         CSeqportUtil::GetCodeIndexFromTo(code_type);
  360.     cout << "From is " << from_to.first
  361.          << ": To is " << from_to.second << endl;
  362. }
  363. void CSeqportTestApp::GetIndexComplementEChoice()
  364. {
  365.     CSeq_data::E_Choice code_type = GetEChoice();
  366.     cout << "Enter index: ";
  367.     int idx;
  368.     cin >> idx;
  369.     int c_idx = CSeqportUtil::GetIndexComplement(code_type, idx);
  370.     cout << "Complement for index " << idx << " is " << c_idx << endl;
  371. }
  372. void CSeqportTestApp::GetIndexComplementESeq()
  373. {
  374.     ESeq_code_type code_type = GetESeqCodeType();
  375.     cout << "Enter index: ";
  376.     int idx;
  377.     cin >> idx;
  378.     int c_idx = CSeqportUtil::GetIndexComplement(code_type, idx);
  379.     cout << "Complement for index " << idx << " is " << c_idx << endl;
  380. }
  381. void CSeqportTestApp::GetMapToIndexEChoice()
  382. {
  383.     cout << "From type: " << endl;
  384.     CSeq_data::E_Choice from_type = GetEChoice();
  385.     cout << "To type: " << endl;
  386.     CSeq_data::E_Choice to_type = GetEChoice();
  387.     cout << "Enter from index: ";
  388.     int from_idx;
  389.     cin >> from_idx;
  390.     int to_idx = CSeqportUtil::GetMapToIndex(from_type, to_type, from_idx);
  391.     cout << "From index maps to " << to_idx << endl;
  392. }
  393. void CSeqportTestApp::GetMapToIndexESeq()
  394. {
  395.     cout << "From type: " << endl;
  396.     ESeq_code_type from_type = GetESeqCodeType();
  397.     cout << "To type: " << endl;
  398.     ESeq_code_type to_type = GetESeqCodeType();
  399.     cout << "Enter from index: ";
  400.     int from_idx;
  401.     cin >> from_idx;
  402.     int to_idx = CSeqportUtil::GetMapToIndex(from_type, to_type, from_idx);
  403.     cout << "From index maps to " << to_idx << endl;
  404. }
  405. void CSeqportTestApp::NonSeqDataTest()
  406. {
  407.     while (true) {
  408.         cout << "Enter test to run: " << endl
  409.              << "0)  Done " << endl
  410.              << "1)  GetIupacaa3() " << endl
  411.              << "2)  GetCode(E_Choice) " << endl
  412.              << "3)  GetCode(ESeq_code_type) " << endl
  413.              << "4)  GetName(E_Choice) " << endl
  414.              << "5)  GetName(ESeq_code_type) " << endl
  415.              << "6)  GetIndex(E_Choice) " << endl
  416.              << "7)  GetIndex(ESeq_code_type) " << endl
  417.              << "8)  IsCodeAvailable(E_Choice) " << endl
  418.              << "9)  IsCodeAvailable(ESeq_code_type) " << endl
  419.              << "10) GetCodeIndexFromTo(E_Choice) " << endl
  420.              << "11) GetCodeIndexFromTo(ESeq_code_type) " << endl
  421.              << "12) GetIndexComplement(E_Choice) " << endl
  422.              << "13) GetIndexComplement(ESeq_code_type) " << endl
  423.              << "14) GetMapToIndex(E_Choice) " << endl
  424.              << "15) GetMapToIndex(ESeq) " << endl
  425.              << endl;
  426.         int resp;
  427.         cin >> resp;
  428.         while (true) {
  429.             try {
  430.                 switch (resp) {
  431.                 case 0:
  432.                     return;
  433.                 case 1:   
  434.                     GetIupacaa3();
  435.                     break;
  436.                 case 2:
  437.                     GetCodeEChoice();
  438.                     break;
  439.                 case 3:
  440.                     GetCodeESeq();
  441.                     break;
  442.                 case 4:
  443.                     GetNameEChoice();
  444.                     break;
  445.                 case 5:
  446.                     GetNameESeq();
  447.                     break;
  448.                 case 6:
  449.                     GetIndexEChoice();
  450.                     break;
  451.                 case 7:
  452.                     GetIndexESeq();
  453.                     break;
  454.                 case 8:
  455.                     IsCodeAvailableEChoice();
  456.                     break;
  457.                 case 9:
  458.                     IsCodeAvailableESeq();
  459.                     break;
  460.                 case 10:
  461.                     GetCodeIndexFromToEChoice();
  462.                     break;
  463.                 case 11:
  464.                     GetCodeIndexFromToESeq();
  465.                     break;
  466.                 case 12:
  467.                     GetIndexComplementEChoice();
  468.                     break;
  469.                 case 13:
  470.                     GetIndexComplementESeq();
  471.                     break;
  472.                 case 14:
  473.                     GetMapToIndexEChoice();
  474.                     break;
  475.                 case 15:
  476.                     GetMapToIndexESeq();
  477.                     break;
  478.                 }
  479.             } catch (runtime_error e) {
  480.                 string msg(e.what());
  481.                 if (msg == "Done") {
  482.                     break;
  483.                 }
  484.                 cout << msg << endl;
  485.             } 
  486.         }
  487.     }    
  488. }
  489. void CSeqportTestApp::SeqDataTest()
  490. {
  491.     //Declare local variables
  492.     unsigned int nTimes=0, uOverhang=0;
  493.     TSeqPos uSeqLen = 0, uCnt = 0;
  494.     int nInSeqType, nOutSeqType;
  495.     CSeq_data::E_Choice to_code = CSeq_data::e_not_set;
  496.     bool bAmbig;
  497.     //Create in CSeq_data 
  498.     CRef<CSeq_data> in_seq(new CSeq_data); 
  499.     
  500.     //Enter in sequence type
  501.     nInSeqType = -1;
  502.     while(nInSeqType<0) {
  503.         cout << "Enter input sequence type " << endl;
  504.         cout <<
  505.             "(0=ncbi2na, 1=ncbi4na, 2=iupacna, 3=ncbieaa,"
  506.             " 4=ncbistdaa, 5=iupacaa): ";
  507.         cin >> nInSeqType;
  508.         if(nInSeqType > 5)
  509.             nInSeqType = -1;
  510.     }  
  511.   
  512.     //Enter out sequence type
  513.     nOutSeqType = -1;
  514.     while(nOutSeqType<0) {
  515.         cout << "Enter output sequence type " << endl;
  516.         cout <<
  517.             "(0=ncbi2na, 1=ncbi4na, 2=iupacna, 3=ncbieaa,"
  518.             " 4=ncbistdaa, 5=iupacaa): ";
  519.         cin >> nOutSeqType;
  520.         if(nOutSeqType > 5)
  521.             nOutSeqType = -1;
  522.     } 
  523.     bAmbig = false;
  524.     if(((nInSeqType==1) || (nInSeqType==2)) && (nOutSeqType==0))
  525.         {
  526.             cout << "Randomly disambiguate (1 = Yes, 0 = No)? ";
  527.             unsigned int nAmbig = 0;
  528.             cin >> nAmbig;
  529.             if(nAmbig!=0)
  530.                 bAmbig = true;
  531.         }
  532.     switch(nOutSeqType){
  533.     case 0:
  534.         to_code = CSeq_data::e_Ncbi2na;
  535.         break;
  536.     case 1:
  537.         to_code = CSeq_data::e_Ncbi4na;
  538.         break;
  539.     case 2:
  540.         to_code = CSeq_data::e_Iupacna;
  541.         break;
  542.     case 3:
  543.         to_code = CSeq_data::e_Ncbieaa;
  544.         break;
  545.     case 4:
  546.         to_code = CSeq_data::e_Ncbistdaa;
  547.         break;
  548.     case 5:
  549.         to_code = CSeq_data::e_Iupacaa;
  550.         break;
  551.     }
  552.   
  553.     //Enter desired sequence length
  554.     uSeqLen = 0;
  555.     cout << "Enter desired sequence length: ";
  556.     cin >> uSeqLen;
  557.       
  558.     //Get input depending on type of input sequence
  559.     if(nInSeqType == 2 || nInSeqType == 3 || nInSeqType == 5) {
  560.         //Enter an in sequence string
  561.         string str = "";
  562.         cout << "Enter an input sequence string: " << endl;
  563.         cin >> str;
  564.         if(str.size() > 0) {
  565.             nTimes = uSeqLen/str.size();
  566.             uOverhang = uSeqLen % str.size();
  567.         }
  568.         in_seq->Reset();
  569.         int nSize = str.size();
  570.         const char* s = str.c_str();
  571.         switch(nInSeqType) {
  572.         case 2:
  573.             in_seq->SetIupacna().Set().resize(uSeqLen);
  574.             for(unsigned int i=0; i<nTimes; i++){               
  575.                 in_seq->SetIupacna().Set().replace
  576.                     (i*nSize,nSize,s);
  577.                 string tst = in_seq->SetIupacna().Set();
  578.             } 
  579.             if (uOverhang > 0) {         
  580.                 in_seq->SetIupacna().Set().replace
  581.                     (nTimes*str.size(),uOverhang,str.substr(0,uOverhang)); 
  582.             } 
  583.             break;
  584.         case 3:
  585.             in_seq->SetNcbieaa().Set().resize(uSeqLen);
  586.             for(unsigned int i=0; i<nTimes; i++) {
  587.                 in_seq->SetNcbieaa().Set().replace
  588.                     (i*nSize,nSize,s);
  589.             }
  590.             if (uOverhang > 0) {         
  591.                 in_seq->SetNcbieaa().Set().replace
  592.                     (nTimes*str.size(),uOverhang,str.substr(0,uOverhang)); 
  593.             }    
  594.             break;
  595.         case 5:
  596.             in_seq->SetIupacaa().Set().resize(uSeqLen);
  597.             for(unsigned int i=0; i<nTimes; i++) {
  598.                 in_seq->SetIupacaa().Set().replace
  599.                     (i*nSize,nSize,s);
  600.             }            
  601.             if (uOverhang > 0) {         
  602.                 in_seq->SetIupacaa().Set().replace
  603.                     (nTimes*str.size(),uOverhang,str.substr(0,uOverhang));
  604.             }
  605.             break;
  606.         }
  607.     }
  608.     else {
  609.         //Enter an in sequence vector
  610.         cout << "Enter an input sequence vector in hex (end with -1): "
  611.              << endl;
  612.         int nIn = 0;
  613.         vector<char> v;
  614.         uCnt = 0;
  615.         while(uCnt < uSeqLen)
  616.             {
  617.                 cin >> std::hex >> nIn;
  618.                 if(nIn < 0 || nIn > 255) {
  619.                     break;
  620.                 }
  621.                 v.push_back(nIn);
  622.                 switch(nInSeqType){
  623.                 case 0:
  624.                     uCnt+=4;
  625.                     break;
  626.                 case 1:
  627.                     uCnt+=2;
  628.                     break;
  629.                 default:
  630.                     uCnt++;
  631.                 }
  632.             }
  633.         if(v.size() == 0) {
  634.             cout << "No input sequence given. Setting to 0." << endl;
  635.             v.push_back(0);
  636.         }
  637.         TSeqPos uInSize;
  638.         switch(nInSeqType) {
  639.         case 0:
  640.             if((uSeqLen % 4) != 0) {
  641.                 uSeqLen += (4-(uSeqLen % 4));
  642.             }
  643.             uInSize = 4*v.size();
  644.             if(uSeqLen % uInSize == 0) {
  645.                 nTimes = uSeqLen/uInSize;
  646.             }
  647.             else {
  648.                 nTimes = uSeqLen/uInSize + 1;
  649.             }
  650.             break;
  651.         case 1:
  652.             if((uSeqLen % 2) != 0) {
  653.                 uSeqLen += (2-(uSeqLen % 2));
  654.             }
  655.             uInSize = 2*v.size();
  656.             if(uSeqLen % uInSize == 0) {
  657.                 nTimes = uSeqLen/uInSize;
  658.             }
  659.             else {
  660.                 nTimes = uSeqLen/uInSize + 1;
  661.             }
  662.             break;
  663.         case 4:
  664.             if(uSeqLen % v.size() == 0) {
  665.                 nTimes = uSeqLen/v.size();
  666.             }
  667.             else {
  668.                 nTimes = uSeqLen/v.size() + 1;
  669.             }
  670.             break;
  671.         }
  672.         
  673.         switch(nInSeqType){
  674.         case 0:
  675.             for(unsigned int i=0; i<nTimes; i++) {
  676.                 ITERATE (vector<char>, j, v) {
  677.                     in_seq->SetNcbi2na().Set().push_back(*j);
  678.                 }
  679.             }
  680.             break;
  681.         case 1:
  682.             for(unsigned int i=0; i<nTimes; i++) {
  683.                 ITERATE (vector<char>, j, v) {
  684.                     in_seq->SetNcbi4na().Set().push_back(*j);
  685.                 }
  686.             }
  687.             break;
  688.         case 4:
  689.             for(unsigned int i=0; i<nTimes; i++) {
  690.                 ITERATE (vector<char>, j, v) {
  691.                     in_seq->SetNcbistdaa().Set().push_back(*j);
  692.                 }
  693.             }
  694.             break;
  695.         }
  696.     }
  697.   
  698.     //Enter Begin Index (relative to biological sequence)
  699.     TSeqPos uBeginIdx = 0, uLength = 0;
  700.     cout << "Enter begin index to Convert: ";
  701.     cin >> std::dec >> uBeginIdx;
  702.     
  703.     //Enter Length of sequence to Convert
  704.     cout << "Enter length of sequence to Convert: ";
  705.     cin >> uLength;
  706.     
  707.     //Create out_seq
  708.     CRef<CSeq_data> out_seq(new CSeq_data);
  709.     
  710.     int nResponse;
  711.     
  712.     while (true) {
  713.         cout << "Enter test to run:" << endl
  714.              << "0)  Quit" << endl
  715.              << "1)  GetAmbigsTest" << endl
  716.              << "2)  ConvertTest" << endl
  717.              << "3)  AppendTest" << endl
  718.              << "4)  InPlaceReverseComplementTest" << endl
  719.              << "5)  InCopyReverseComplementTest" << endl
  720.              << "6)  InPlaceReverseTest" << endl
  721.              << "7)  InCopyReverseTest" << endl
  722.              << "8)  InPlaceComplementTest" << endl
  723.              << "9) InCopyComplementTest" << endl
  724.              << "10) FastValidateTest" << endl
  725.              << "11) ValidateTest" << endl
  726.              << "12) GetCopyTest" << endl
  727.              << "13) KeepTest" << endl
  728.              << "14) PackTest" << endl; 
  729.         cin >> nResponse;   
  730.          
  731.         switch (nResponse) {
  732.         case 0:
  733.             return;
  734.         case 1:
  735.             GetAmbigsTest
  736.                 (*in_seq, out_seq, to_code, uBeginIdx, uLength);
  737.             break;
  738.         case 2:
  739.             ConvertTest(*in_seq, out_seq, to_code, uBeginIdx, uLength, bAmbig);
  740.             break;
  741.         case 3:
  742.             AppendTest(*in_seq, out_seq, uBeginIdx, uLength);
  743.             break;
  744.         case 4:
  745.             InPlaceReverseComplementTest
  746.                 (*in_seq, out_seq, uBeginIdx, uLength);
  747.             break;
  748.         case 5:
  749.             InCopyReverseComplementTest
  750.                 (*in_seq, out_seq, uBeginIdx, uLength);
  751.             break;
  752.         case 6:
  753.             InPlaceReverseTest
  754.                 (*in_seq, out_seq, uBeginIdx, uLength);
  755.             break;
  756.         case 7:
  757.             InCopyReverseTest
  758.                 (*in_seq, out_seq, uBeginIdx, uLength);
  759.             break;
  760.         case 8:
  761.             InPlaceComplementTest
  762.                 (*in_seq, out_seq, uBeginIdx, uLength);
  763.             break;
  764.         case 9:
  765.             InCopyComplementTest
  766.                 (*in_seq, out_seq, uBeginIdx, uLength);
  767.             break;
  768.         case 10:
  769.             FastValidateTest
  770.                 (*in_seq, uBeginIdx, uLength);
  771.             break;
  772.         case 11:
  773.             ValidateTest
  774.                 (*in_seq, uBeginIdx, uLength);
  775.             break;
  776.         case 12:
  777.             GetCopyTest(*in_seq, out_seq, uBeginIdx, uLength);
  778.             break;
  779.         case 13:
  780.             KeepTest(*in_seq, out_seq, uBeginIdx, uLength);
  781.             break;
  782.         case 14:
  783.             PackTest(*in_seq, out_seq, uBeginIdx, uLength);
  784.             break;
  785.         default:
  786.             break;
  787.         }
  788.     }        
  789. }
  790.  
  791. void CSeqportTestApp::GetAmbigsTest(const CSeq_data&     in_seq,
  792.               CSeq_data*           out_seq,
  793.               CSeq_data::E_Choice  to_code,
  794.               TSeqPos              uBeginIdx,
  795.               TSeqPos              uLength)
  796. {
  797.     TSeqPos uSeqLen=0;
  798.     
  799.     try {
  800.         vector<TSeqPos> out_indices;
  801.     
  802.         TSeqPos uLen = CSeqportUtil::GetAmbigs
  803.             (in_seq,
  804.              out_seq,
  805.              &out_indices,
  806.              to_code,
  807.              uBeginIdx,
  808.              uLength);
  809.     
  810.     
  811.         cout << endl << "Results for GetAmbigs()" << endl;
  812.         cout << "uSeqLen = " << uSeqLen << endl;
  813.         cout << "(uBeginIdx, uLength) = (" << uBeginIdx
  814.              << ", " << uLength << ")" << endl;
  815.         cout << "Num ambigs = " << out_indices.size() << endl;
  816.         cout << "Return length = " << uLen << endl;
  817.   
  818.         if(out_seq->Which() == CSeq_data::e_Ncbi4na) {
  819.             if (out_indices.size() <= 24) {
  820.                 ITERATE (vector<TSeqPos>, i_idx, out_indices) {
  821.                     cout << (*i_idx) << " ";
  822.                 }
  823.                 cout << endl;
  824.                 const vector<char>& out_seq_data
  825.                     = out_seq->GetNcbi4na().Get();
  826.                 ITERATE (vector<char>, i_out, out_seq_data) {
  827.                     cout << std::hex
  828.                          << (unsigned short)(unsigned char) *i_out << " ";
  829.                 }
  830.                 cout << endl;
  831.             }
  832.         }
  833.         else if(out_seq->Which() == CSeq_data::e_Iupacna) {
  834.             if(out_indices.size() <= 24) {
  835.                 ITERATE (vector<TSeqPos>, i_idx, out_indices) {
  836.                     cout << (*i_idx) << " ";
  837.                 }
  838.                 cout << endl;
  839.                 string out_seq_data = out_seq->GetIupacna().Get();
  840.                 cout << out_seq_data << endl;
  841.             }
  842.         
  843.         }
  844.         out_indices.clear();
  845.         out_seq->Reset();   
  846.     }
  847.     STD_CATCH("");
  848. }
  849. void CSeqportTestApp::ConvertTest(const CSeq_data&     in_seq,
  850.               CSeq_data*           out_seq,
  851.               CSeq_data::E_Choice  to_code,
  852.               TSeqPos              uBeginIdx,
  853.               TSeqPos              uLength,
  854.               bool                 bAmbig)
  855. {
  856.     TSeqPos uSeqLen=0;
  857.     
  858.     try{ 
  859.         TSeqPos uLen = CSeqportUtil::Convert
  860.             (in_seq, out_seq, to_code, uBeginIdx, uLength, bAmbig);
  861.         cout << endl << "Conversion Results" << endl;
  862.         cout << "uSeqLen = " << uSeqLen  << endl;
  863.         cout << "Return length = " << uLen << endl;
  864.         
  865.         //Write input and ouput sequences if uSeqLen <= 50
  866.         //Print uBeginIdx and uLength
  867.         cout << "(uBeginIdx, uLength) = (" << uBeginIdx
  868.              << ", " << uLength << ")" << endl;
  869.         
  870.         //Print the in sequence
  871.         cout << "Input sequence is: " << endl;
  872.         DisplaySeq(in_seq, MAX_DISPLAY);
  873.       
  874.         //Print the out sequence
  875.         cout << "Output sequence is: " << endl;
  876.         DisplaySeq(*out_seq, MAX_DISPLAY);
  877.              
  878.         //Reset output sequence
  879.         out_seq->Reset();
  880.       
  881.     } 
  882.     STD_CATCH("");
  883. }
  884. void CSeqportTestApp::AppendTest(const CSeq_data&     in_seq,
  885.               CSeq_data*           out_seq,
  886.               TSeqPos              uBeginIdx,
  887.               TSeqPos              uLength)
  888. {
  889.     TSeqPos uSeqLen=0;
  890.     
  891.     try{
  892.         TSeqPos uBeginIdx2, uLength2;
  893.         cout << "(uBeginIdx1, uLength1) = (" 
  894.              << uBeginIdx << "," << uLength << ")" << endl;
  895.         cout << "Enter uBeginIdx2: ";
  896.         cin >> uBeginIdx2;
  897.         cout << "Enter uLength2: ";
  898.         cin >> uLength2;
  899.         CRef<CSeq_data> in_seq1(new CSeq_data);
  900.         CRef<CSeq_data> in_seq2(new CSeq_data);
  901.         CSeqportUtil::GetCopy(in_seq, in_seq1, uBeginIdx, uLength);
  902.         CSeqportUtil::GetCopy(in_seq, in_seq2, 0, 0);
  903.         TSeqPos uLen = CSeqportUtil::Append(out_seq,
  904.                                       *in_seq1.GetPointer(),
  905.                                       uBeginIdx, uLength,
  906.                                       *in_seq2.GetPointer(), 
  907.                                       uBeginIdx2, uLength2);
  908.     
  909.         cout << endl << "Append Results" << endl;
  910.         cout << "uSeqLen = " << uSeqLen << endl;
  911.         cout << "(uBeginIdx1, uLength1) = (" << uBeginIdx
  912.              << ", " << uLength << ")" << endl;
  913.         cout << "(uBeginIdx2, uLength2) = (" << uBeginIdx2
  914.              << ", " << uLength2 << ")" << endl;
  915.         cout << "Return length = " << uLen << endl;
  916.   
  917.         //Print the Append out_seq
  918.         cout << "Append output sequence is: " << endl;
  919.         DisplaySeq(*out_seq, MAX_DISPLAY);
  920.         
  921.         //Reset out_seq to free memory
  922.         out_seq->Reset();
  923.     }
  924.     STD_CATCH("");
  925. }
  926. void CSeqportTestApp::InPlaceReverseComplementTest(const CSeq_data&     in_seq,
  927.               CSeq_data*           out_seq,
  928.               TSeqPos              uBeginIdx,
  929.               TSeqPos              uLength)
  930. {
  931.     TSeqPos uSeqLen=0;
  932.     try{
  933.         CSeqportUtil::GetCopy(in_seq, out_seq, 0, 0);
  934.         TSeqPos uLen
  935.             = CSeqportUtil::ReverseComplement(out_seq, uBeginIdx, uLength);
  936.         cout << endl << "In-place reverse complement results" << endl;
  937.         cout << "uSeqLen = " << uSeqLen << endl;
  938.         cout << "(uBeginIdx, uLength) = (" << uBeginIdx
  939.              << ", " << uLength << ")" << endl;
  940.         cout << "Return length = " << uLen << endl;
  941.   
  942.         //Print the In-place reverse-complement sequence
  943.         cout << "In-place reverse-complement sequence is: " << endl;
  944.         DisplaySeq(*out_seq, MAX_DISPLAY);
  945.         
  946.         //Reset out_seq to free memory
  947.         out_seq->Reset();
  948.     }
  949.     STD_CATCH("");
  950. }
  951. void CSeqportTestApp::InCopyReverseComplementTest(const CSeq_data&     in_seq,
  952.               CSeq_data*           out_seq,
  953.               TSeqPos              uBeginIdx,
  954.               TSeqPos              uLength)
  955. {
  956.     TSeqPos uSeqLen=0;
  957.     try{
  958.         TSeqPos uLen = CSeqportUtil::ReverseComplement
  959.             (in_seq, out_seq, uBeginIdx, uLength);
  960.     
  961.         cout << endl << "Reverse-complement Results" << endl;
  962.         cout << "uSeqLen = " << uSeqLen << endl;
  963.         cout << "(uBeginIdx, uLength) = (" << uBeginIdx
  964.              << ", " << uLength << ")" << endl;
  965.         cout << "Return length = " << uLen << endl;
  966.   
  967.         //Print the reverse-complement sequence
  968.         cout << "Reverse-complement sequence is: " << endl;
  969.         DisplaySeq(*out_seq, MAX_DISPLAY);
  970.         
  971.         //Reset out_seq to free memory
  972.         out_seq->Reset();
  973.     }
  974.     STD_CATCH("");
  975. }
  976. void CSeqportTestApp::InPlaceReverseTest(const CSeq_data&     in_seq,
  977.               CSeq_data*           out_seq,
  978.               TSeqPos              uBeginIdx,
  979.               TSeqPos              uLength)
  980. {
  981.     TSeqPos uSeqLen=0;
  982.     try{
  983.         CSeqportUtil::GetCopy(in_seq, out_seq, 0, 0);
  984.         TSeqPos uLen = 
  985.             CSeqportUtil::Reverse(out_seq, uBeginIdx, uLength);
  986.     
  987.         cout << endl << "In-place Reverse Results" << endl;
  988.         cout << "uSeqLen = " << uSeqLen << endl;
  989.         cout << "(uBeginIdx, uLength) = (" << uBeginIdx
  990.              << ", " << uLength << ")" << endl;
  991.         cout << "Return length = " << uLen << endl;
  992.   
  993.         //Print the In-place reverse sequence
  994.         cout << "In-place reverse sequence is: " << endl;
  995.         DisplaySeq(*out_seq, MAX_DISPLAY);
  996.         
  997.         //Reset out_seq to free memory
  998.         out_seq->Reset();
  999.     }
  1000.     STD_CATCH("");
  1001. }
  1002. void CSeqportTestApp::InCopyReverseTest(const CSeq_data&     in_seq,
  1003.               CSeq_data*           out_seq,
  1004.               TSeqPos              uBeginIdx,
  1005.               TSeqPos              uLength)
  1006. {
  1007.     TSeqPos uSeqLen=0;
  1008.     try{
  1009.         TSeqPos uLen = CSeqportUtil::Reverse
  1010.             (in_seq, out_seq, uBeginIdx, uLength);
  1011.     
  1012.         cout << endl << "Reverse Results" << endl;
  1013.         cout << "uSeqLen = " << uSeqLen << endl;
  1014.         cout << "(uBeginIdx, uLength) = (" << uBeginIdx <<
  1015.             ", " << uLength << ")" << endl;
  1016.         cout << "Return length = " << uLen << endl;
  1017.   
  1018.         //Print the reverse sequence
  1019.         cout << "Reverse sequence is: " << endl;
  1020.         DisplaySeq(*out_seq, MAX_DISPLAY);
  1021.         
  1022.         //Reset out_seq to free memory
  1023.         out_seq->Reset();
  1024.     }
  1025.     STD_CATCH("");
  1026. }
  1027. void CSeqportTestApp::InPlaceComplementTest(const CSeq_data&     in_seq,
  1028.               CSeq_data*           out_seq,
  1029.               TSeqPos              uBeginIdx,
  1030.               TSeqPos              uLength)
  1031. {
  1032.     TSeqPos uSeqLen=0;
  1033.     try{
  1034.         CSeqportUtil::GetCopy(in_seq, out_seq, 0, 0);
  1035.         TSeqPos uLen = CSeqportUtil::Complement
  1036.             (out_seq, uBeginIdx, uLength);
  1037.     
  1038.         cout << endl << "In-place Complement Results" << endl;
  1039.         cout << "uSeqLen = " << uSeqLen << endl;
  1040.         cout << "(uBeginIdx, uLength) = (" << uBeginIdx <<
  1041.             ", " << uLength << ")" << endl;
  1042.         cout << "Return length = " << uLen << endl;
  1043.   
  1044.         //Print the In-place complement sequence
  1045.         cout << "In-place complement sequence is: " << endl;
  1046.         DisplaySeq(*out_seq, MAX_DISPLAY);
  1047.         
  1048.         //Reset out_seq to free memory
  1049.         out_seq->Reset();
  1050.     }
  1051.     STD_CATCH("");
  1052. }
  1053.  
  1054. void CSeqportTestApp::InCopyComplementTest(const CSeq_data&     in_seq,
  1055.               CSeq_data*           out_seq,
  1056.               TSeqPos              uBeginIdx,
  1057.               TSeqPos              uLength)
  1058. {
  1059.     TSeqPos uSeqLen=0;
  1060.     try{
  1061.         TSeqPos uLen = CSeqportUtil::Complement
  1062.             (in_seq, out_seq, uBeginIdx, uLength);
  1063.     
  1064.         cout << endl << "Complement Results" << endl;
  1065.         cout << "uSeqLen = " << uSeqLen << endl;
  1066.         cout << "(uBeginIdx, uLength) = (" << uBeginIdx <<
  1067.             ", " << uLength << ")" << endl;
  1068.         cout << "Return length = " << uLen << endl;
  1069.   
  1070.         //Print the complement sequence
  1071.         cout << "Complement sequence is: " << endl;
  1072.         DisplaySeq(*out_seq, MAX_DISPLAY);
  1073.         
  1074.         //Reset out_seq to free memory
  1075.         out_seq->Reset();
  1076.     }
  1077.     STD_CATCH("");      
  1078. }
  1079. void CSeqportTestApp::FastValidateTest(const CSeq_data&     in_seq,
  1080.               TSeqPos              uBeginIdx,
  1081.               TSeqPos              uLength)
  1082. {
  1083.     TSeqPos uSeqLen=0;
  1084.     try{
  1085.         bool isValid;
  1086.     
  1087.         isValid = 
  1088.             CSeqportUtil::FastValidate(in_seq, uBeginIdx, uLength);
  1089.     
  1090.         cout << endl << "Fast Validation Results" << endl;
  1091.         cout << "uSeqLen = " << uSeqLen << endl;
  1092.         cout << "(uBeginIdx, uLength) = (" << uBeginIdx
  1093.              << ", " << uLength << ")" <<
  1094.             endl;
  1095.         if(isValid)
  1096.             cout << "in_seq is VALID" << endl;
  1097.         else
  1098.             cout << "in_seq is NOT VALID" << endl;
  1099.     }
  1100.     STD_CATCH("");    
  1101. }
  1102. void CSeqportTestApp::ValidateTest(const CSeq_data&     in_seq,
  1103.               TSeqPos              uBeginIdx,
  1104.               TSeqPos              uLength)
  1105. {
  1106.     TSeqPos uSeqLen=0;
  1107.     try{
  1108.         vector<TSeqPos> badIdx;
  1109.         
  1110.         CSeqportUtil::Validate(in_seq, &badIdx, uBeginIdx, uLength);
  1111.     
  1112.     
  1113.         cout << endl << "Validation Results" << endl;
  1114.         cout << "uSeqLen = " << uSeqLen << endl;
  1115.         cout << "(uBeginIdx, uLength) = (" << uBeginIdx <<
  1116.             ", " << uLength << ")" << endl;
  1117.         if(badIdx.size() <= 50 && badIdx.size() > 0)
  1118.             {
  1119.                 cout << "Bad indices are:" << endl;
  1120.                 vector<TSeqPos>::iterator itor;
  1121.                 for(itor = badIdx.begin(); itor != badIdx.end(); ++itor)
  1122.                     cout << *itor << " ";
  1123.                 cout << endl;
  1124.             }
  1125.         else
  1126.             {
  1127.                 cout << "The number of bad indices are: " << badIdx.size()
  1128.                      << endl;
  1129.             }
  1130.         badIdx.clear();
  1131.     }
  1132.     STD_CATCH("");
  1133. }
  1134. void CSeqportTestApp::GetCopyTest(const CSeq_data&     in_seq,
  1135.               CSeq_data*           out_seq,
  1136.               TSeqPos              uBeginIdx,
  1137.               TSeqPos              uLength)
  1138. {
  1139.     TSeqPos uSeqLen=0;
  1140.     try{      
  1141.         TSeqPos uLen = CSeqportUtil::GetCopy
  1142.             (in_seq, out_seq, uBeginIdx, uLength);
  1143.   
  1144.         cout << endl << "Copy Results" << endl;
  1145.         cout << "uSeqLen = " << uSeqLen  << endl;
  1146.         cout << "Return length = " << uLen << endl;
  1147.   
  1148.         //Print the out sequence
  1149.         cout << "(uBeginIdx, uLength) = (" << uBeginIdx <<
  1150.             ", " << uLength << ")" << endl;
  1151.         cout << "out_seq is: " << endl;
  1152.         DisplaySeq(*out_seq, MAX_DISPLAY);
  1153.         
  1154.         out_seq->Reset();
  1155.     }
  1156.     STD_CATCH("");
  1157. }
  1158. void CSeqportTestApp::KeepTest(const CSeq_data&     in_seq,
  1159.               CSeq_data*           out_seq,
  1160.               TSeqPos              uBeginIdx,
  1161.               TSeqPos              uLength)
  1162. {
  1163.     try{
  1164.         CSeqportUtil::GetCopy(in_seq, out_seq, 0, 0);
  1165.   
  1166.         TSeqPos uLen
  1167.             = CSeqportUtil::Keep(out_seq, uBeginIdx, uLength);
  1168.   
  1169.         cout << endl << "Keep Results" << endl;
  1170.         cout << "uLength = " << uLength  << endl;
  1171.         cout << "Return length = " << uLen << endl;
  1172.   
  1173.         //Print the out sequence
  1174.         cout << "(uBeginIdx, uLength) = (" << uBeginIdx <<
  1175.             ", " << uLength << ")" << endl;
  1176.         cout << "out_seq is: " << endl;
  1177.         DisplaySeq(*out_seq, MAX_DISPLAY);
  1178.         out_seq->Reset();
  1179.     }
  1180.     STD_CATCH("");
  1181. }
  1182. void CSeqportTestApp::PackTest(const CSeq_data&     in_seq,
  1183.               CSeq_data*           out_seq,
  1184.               TSeqPos              uBeginIdx,
  1185.               TSeqPos              uLength)
  1186. {
  1187.     try{
  1188.         CSeqportUtil::GetCopy(in_seq, out_seq, 0, 0);
  1189.   
  1190.         TSeqPos uLen = CSeqportUtil::Pack(out_seq, uLength);
  1191.   
  1192.         cout << endl << "Pack Results" << endl;
  1193.         cout << "uLength = " << uLength  << endl;
  1194.         cout << "Return length = " << uLen << endl;
  1195.   
  1196.         //Print the out sequence
  1197.         cout << "(uBeginIdx, uLength) = (" << uBeginIdx <<
  1198.             ", " << uLength << ")" << endl;
  1199.         switch(out_seq->Which()){
  1200.         case CSeq_data::e_Iupacna:
  1201.             cout << "out_seq is Iupacna" << endl;
  1202.             break;
  1203.         case CSeq_data::e_Ncbi4na:
  1204.             cout << "out_seq is Ncbi4na" << endl;
  1205.             break;
  1206.         case CSeq_data::e_Ncbi2na:
  1207.             cout << "out_seq is Ncbi2na" << endl;
  1208.             break;
  1209.         case CSeq_data::e_Ncbieaa:
  1210.             cout << "out_seq is Ncbieaa" << endl;
  1211.             break;
  1212.         case CSeq_data::e_Ncbistdaa:
  1213.             cout << "out_seq is Ncbistdaa" << endl;
  1214.             break;
  1215.         case CSeq_data::e_Iupacaa:
  1216.             cout << "out_seq is Iupacaa" << endl;
  1217.             break;
  1218.         default:
  1219.             cout << "out_seq type is not supported." << endl;
  1220.             break;
  1221.         }
  1222.         cout << "out_seq is: " << endl;
  1223.         DisplaySeq(*out_seq, MAX_DISPLAY);
  1224.         
  1225.         out_seq->Reset();
  1226.     }
  1227.     STD_CATCH("");
  1228. }
  1229. void CSeqportTestApp::Exit() {
  1230.     return;
  1231. }
  1232. void CSeqportTestApp::DisplaySeq(const CSeq_data& seq, TSeqPos uSize)
  1233. {
  1234.     //Print the sequence
  1235.     switch (seq.Which()) {
  1236.     case CSeq_data::e_Ncbi2na:
  1237.         {
  1238.             const vector<char>& v = seq.GetNcbi2na().Get();
  1239.             if (v.size() <= 12) {
  1240.                 ITERATE (vector<char>, i, v) {
  1241.                     cout << std::hex << (unsigned short)(unsigned char) *i
  1242.                          << " " << endl;
  1243.                 }
  1244.             }
  1245.             cout << "seq size = " << v.size() << endl;
  1246.             break;
  1247.         }
  1248.     case CSeq_data::e_Ncbi4na:
  1249.         {
  1250.             const vector<char>& v = seq.GetNcbi4na().Get();
  1251.             if (v.size() <= 24) {
  1252.                 ITERATE (vector<char>, i, v) {
  1253.                     cout << std::hex << (unsigned short)(unsigned char) *i
  1254.                          << " " << endl;
  1255.                 }
  1256.             }
  1257.             cout << "seq size = " << v.size() << endl;
  1258.             break;
  1259.         }
  1260.     case CSeq_data::e_Iupacna:
  1261.         if(seq.GetIupacna().Get().size() <= uSize)
  1262.             cout << seq.GetIupacna().Get() << endl;
  1263.         cout << "seq size = " << seq.GetIupacna().Get().size() << endl;
  1264.         break;
  1265.     case CSeq_data::e_Ncbieaa:
  1266.         if(seq.GetNcbieaa().Get().size() <= uSize)
  1267.             cout << seq.GetNcbieaa().Get() << endl;;
  1268.         cout << "seq size = " << seq.GetNcbieaa().Get().size() << endl;
  1269.         break;
  1270.     case CSeq_data::e_Ncbistdaa:
  1271.         {
  1272.             const vector<char>& v = seq.GetNcbistdaa().Get();
  1273.             if (v.size() <= uSize) {
  1274.                 ITERATE (vector<char>, i, v) {
  1275.                     cout << std::hex << (unsigned short)(unsigned char) *i
  1276.                          << " " << endl;
  1277.                 }
  1278.             }
  1279.             cout << "seq size = " << v.size() << endl;
  1280.             break;
  1281.         }
  1282.     case CSeq_data::e_Iupacaa:
  1283.         if(seq.GetIupacaa().Get().size() <= uSize)
  1284.             cout << seq.GetIupacaa().Get() << endl;
  1285.         cout << "seq size = " << seq.GetIupacaa().Get().size() << endl;
  1286.         break;
  1287.     default: 
  1288.         cout << "Display of requested sequence type not supported" << endl;
  1289.     }
  1290. }
  1291. int main(int argc, const char* argv[])
  1292. {
  1293.     CSeqportTestApp theApp;
  1294.     return theApp.AppMain(argc, argv, 0, eDS_Default, 0, "seqport_test");
  1295. }
  1296.  /*
  1297.  * ---------------------------------------------------------------------------
  1298.  * $Log: test_seqport.cpp,v $
  1299.  * Revision 1000.3  2004/06/01 19:33:33  gouriano
  1300.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.13
  1301.  *
  1302.  * Revision 1.13  2004/05/19 17:25:27  gorelenk
  1303.  * Added include of PCH - ncbi_pch.hpp
  1304.  *
  1305.  * Revision 1.12  2004/01/30 17:21:24  shomrat
  1306.  * Removed TranslateTest due to deprecated translation code
  1307.  *
  1308.  * Revision 1.11  2003/11/06 16:13:59  shomrat
  1309.  * changed call to Pack due to change in its signature
  1310.  *
  1311.  * Revision 1.10  2003/04/15 19:48:06  vasilche
  1312.  * Fixed uninitialized variable.
  1313.  *
  1314.  * Revision 1.9  2003/03/11 15:53:25  kuznets
  1315.  * iterate -> ITERATE
  1316.  *
  1317.  * Revision 1.8  2002/07/01 16:15:08  clausen
  1318.  * Fixed defined but not used warnings
  1319.  *
  1320.  * Revision 1.7  2002/05/14 17:42:32  ucko
  1321.  * Fix type of from_to.
  1322.  *
  1323.  * Revision 1.6  2002/05/14 15:17:15  clausen
  1324.  * Reorganized code and added tests for new CSeqportUtil methods
  1325.  *
  1326.  * Revision 1.5  2002/05/03 21:28:15  ucko
  1327.  * Introduce T(Signed)SeqPos.
  1328.  *
  1329.  * Revision 1.4  2002/01/10 20:34:15  clausen
  1330.  * Added tests for GetIupacaa3, GetCode, and GetIndex
  1331.  *
  1332.  * Revision 1.3  2001/12/07 18:52:05  grichenk
  1333.  * Updated "#include"-s and forward declarations to work with the
  1334.  * new datatool version.
  1335.  *
  1336.  * Revision 1.2  2001/11/13 12:14:29  clausen
  1337.  * Changed call to CGencode::Translate to reflect new type for code breaks
  1338.  *
  1339.  * Revision 1.1  2001/08/24 00:44:05  vakatov
  1340.  * Initial revision
  1341.  *
  1342.  * ===========================================================================
  1343.  */