00001 #include "foundation_AMOS.hh"
00002 #include "amp.hh"
00003 #include <cstdlib>
00004 #include <ctime>
00005 #include <sstream>
00006 #include <iostream>
00007 using namespace std;
00008 using namespace AMOS;
00009
00010 const string BANK_STORE_DIR = "_bank_";
00011 const string STREAM_STORE_DIR = "_stream_";
00012
00013 int main (int argc, char ** argv)
00014 {
00015 srand (time(NULL));
00016
00017 try {
00018
00019 ID_t N, i , j, step;
00020 Bank_t readbank (Read_t::NCODE);
00021 BankStream_t readstream (Read_t::NCODE);
00022 Read_t read;
00023 ostringstream ss;
00024
00025 if ( argc != 2 )
00026 {
00027 cerr << "USAGE: " << argv[0] << " #reads\n";
00028 return -1;
00029 }
00030
00031 N = atol (argv[1]);
00032 if ( N < 50 )
00033 step = 1;
00034 else
00035 step = N / 50;
00036
00037 read . setClearRange (Range_t(0,1080));
00038 read . setQualityClearRange (Range_t(1,1301));
00039 read . setVectorClearRange (Range_t(2,1032));
00040 read . setFragment (29373);
00041 read . setType (Read_t::END);
00042 read . compress( );
00043 read . setFlagA (false);
00044 read . setFlagB (true);
00045 read . setSequence (
00046 "acgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgacgtagctagctagttttcgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtaaaaaatcgatcgtaaaagtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacgtacg",
00047 "01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678443573456345523453444442345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789077757856846845623523454377777712345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012");
00048
00049
00050
00051 readbank . create (BANK_STORE_DIR);
00052 readstream . create (STREAM_STORE_DIR);
00053
00054
00055 cerr << "APPEND " << N << " reads\n" << Date( ) << endl << "begin";
00056 for ( i = 1; i <= N; i ++ )
00057 {
00058 ss . str (NULL_STRING);
00059 ss << 'a' << i;
00060 read . setIID (i);
00061 read . setEID (ss . str( ));
00062 read . setComment (ss . str( ) + 'c');
00063 readbank . append (read);
00064
00065 if ( i % step == 0 )
00066 cerr << '.';
00067 }
00068 cerr << "done.\n" << Date( ) << endl << endl;
00069
00070
00071 cerr << "SAPPEND " << N << " reads\n" << Date( ) << endl << "begin";
00072 for ( i = 1; i <= N; i ++ )
00073 {
00074 ss . str (NULL_STRING);
00075 ss << 'a' << i;
00076 read . setIID (i);
00077 read . setEID (ss . str( ));
00078 read . setComment (ss . str( ) + 'c');
00079 readstream << read;
00080
00081 if ( i % step == 0 )
00082 cerr << '.';
00083 }
00084 cerr << "done.\n" << Date( ) << endl << endl;
00085
00086
00087 cerr << "FETCH " << N
00088 << " random reads\n" << Date( ) << endl << "begin";
00089 for ( i = 1; i <= N; i ++ )
00090 {
00091 j = 1 + rand( ) % N;
00092 readbank . fetch (j, read);
00093
00094 if ( i % step == 0 )
00095 cerr << '.';
00096 }
00097 cerr << "done.\n" << Date( ) << endl << endl;
00098
00099
00100 cerr << "SFETCH " << N
00101 << " consecutive reads\n" << Date( ) << endl << "begin";
00102 for ( i = 1; readstream >> read; i ++ )
00103 {
00104 if ( i % step == 0 )
00105 cerr << '.';
00106 }
00107 cerr << "done.\n" << Date( ) << endl << endl;
00108
00109
00110 cerr << "REPLACE " << N
00111 << " random reads\n" << Date( ) << endl << "begin";
00112 for ( i = 1; i <= N; i ++ )
00113 {
00114 j = 1 + rand( ) % N;
00115
00116 ss . str (NULL_STRING);
00117 ss << 'r' << j;
00118 read . setIID (j);
00119 read . setEID (ss . str( ));
00120 read . setComment (ss . str( ) + 'c');
00121 readbank . replace (j, read);
00122
00123 if ( i % step == 0 )
00124 cerr << '.';
00125 }
00126 cerr << "done.\n" << Date( ) << endl << endl;
00127
00128
00129 cerr << "REMOVE " << N
00130 << " random reads\n" << Date( ) << endl << "begin";
00131 for ( i = 1; i <= N; i ++ )
00132 {
00133 j = 1 + rand( ) % N;
00134
00135 if ( readbank . getIDMap( ) . exists (j) )
00136 readbank . remove (j);
00137
00138 if ( i % step == 0 )
00139 cerr << '.';
00140 }
00141 cerr << "done.\n" << Date( ) << endl << endl;
00142
00143
00144 j = rand( ) % N;
00145 readstream . seekg (j, BankStream_t::BEGIN);
00146 if ( readstream >> read )
00147 {
00148 cerr << "SFETCH OFFSET " << j
00149 << " yeilds IID:" << read . getIID( )
00150 << " EID:" << read . getEID( )
00151 << " COMMENT:" << read . getComment( ) << endl << endl;
00152 }
00153
00154
00155 do {
00156 j = 1 + rand( ) % N;
00157 } while ( ! readbank . getIDMap( ) . exists (j) );
00158 readbank . fetch (j, read);
00159 cerr << "FETCH IID " << j
00160 << " bid:" << readbank . getIDMap() . lookupBID (j)
00161 << " yields IID:" << read . getIID( )
00162 << " EID:" << read . getEID( )
00163 << " COMMENT:" << read . getComment( ) << endl << endl;
00164
00165
00166 readbank . close( );
00167 readstream . close( );
00168
00169
00170 readstream . open (BANK_STORE_DIR);
00171 cerr << "SFETCH " << readstream . getSize( )
00172 << " consecutive reads\n" << Date( ) << endl << "begin";
00173 for ( i = 1; readstream >> read; i ++ )
00174 {
00175
00176
00177
00178
00179
00180 if ( i % step == 0 )
00181 cerr << '.';
00182 }
00183 cerr << "done.\n" << Date( ) << endl;
00184 cerr << i - 1 << " fetched" << endl << endl;
00185 readstream . close( );
00186
00187
00188 readbank . open (BANK_STORE_DIR);
00189 cerr << "CLEAN bank\n" << Date( ) << endl << "begin...";
00190 readbank . clean( );
00191 cerr << "done.\n" << Date( ) << endl << endl;
00192
00193
00194 readbank . fetch (j, read);
00195 cerr << "FETCH IID " << j
00196 << " bid:" << readbank . getIDMap() . lookupBID (j)
00197 << " yields IID:" << read . getIID( )
00198 << " EID:" << read . getEID( )
00199 << " COMMENT:" << read . getComment( ) << endl << endl;
00200 readbank . close( );
00201
00202
00203 readstream . open (BANK_STORE_DIR);
00204 cerr << "SFETCH " << readstream . getSize( )
00205 << " consecutive reads\n" << Date( ) << endl << "begin";
00206 for ( i = 1; readstream >> read; i ++ )
00207 {
00208
00209
00210
00211
00212
00213 if ( i % step == 0 )
00214 cerr << '.';
00215 }
00216 cerr << "done.\n" << Date( ) << endl;
00217 cerr << i - 1 << " fetched" << endl << endl;
00218 readstream . close( );
00219
00220
00221
00222
00223 }
00224 catch (const Exception_t & e) {
00225
00226 cerr << "ERROR: -- Fatal AMOS Exception --\n" << e;
00227 return -1;
00228 }
00229
00230 return 0;
00231 }