#include <sortalgo.h>
Inheritance diagram for SortAlgo:
Public Member Functions | |
SortAlgo (TrapperDoc *pDoc_, std::set< db_recno_t > &recnoList, AlgoParam *param) | |
void | start () |
void | old_start () |
Classes | |
struct | compBeg |
struct | compEnd |
struct | sort_struct |
Definition at line 6 of file sortalgo.h.
|
Definition at line 9 of file sortalgo.h. 00009 : 00010 RWAlgo(pDoc_, recnoList, param) {}
|
|
Definition at line 66 of file sortalgo.cc. References SortAlgo::sort_struct::begin, SortAlgo::sort_struct::end, MAl_Readonly::get_num_seq(), MAl_Readonly::get_seq_begin_global(), MAl_Readonly::get_seq_end_global(), RWAlgo::getMAl(), SortAlgo::sort_struct::ID, SortAlgo::sort_struct::row, and MAl::set_seq_row(). 00067 { 00068 00069 if ( getMAl()->get_num_seq() == 0 ) { 00070 return; 00071 } 00072 bool ok; 00073 int res = QInputDialog::getInteger( 00074 "Compact reads", "Enter start row for selected reads:", 0, 1, numeric_limits<int>::max(), 1, 00075 &ok, 0 ); 00076 00077 size_t row(1); 00078 if ( ok ) { 00079 // user entered something and pressed OK 00080 row = res; 00081 } else { 00082 // user pressed Cancel 00083 return; 00084 } 00085 00086 multiset<sort_struct, compBeg> set_begin; 00087 00088 for( size_t i = 0; i < getMAl()->get_num_seq(); i++ ) { 00089 sort_struct s; 00090 s.begin = getMAl()->get_seq_begin_global(i); 00091 s.end = getMAl()->get_seq_end_global(i); 00092 s.ID = i; 00093 00094 set_begin.insert(s); 00095 00096 } 00097 00098 00099 00100 multiset<sort_struct, compBeg>::iterator it = set_begin.begin(); 00101 multiset<sort_struct, compEnd> set_end; 00102 sort_struct tmp(*it); 00103 tmp.row = row; 00104 set_end.insert( tmp ); 00105 getMAl()->set_seq_row( (*it).ID, row ); 00106 ++it; 00107 ++row; 00108 00109 int debugnum(0); 00110 00111 for( ; it != set_begin.end(); ++it ) { 00112 00113 if ( (*it).begin >= (*(set_end.begin())).end ) { 00114 getMAl()->set_seq_row( (*it).ID, (*(set_end.begin())).row ); 00115 tmp = *(set_end.begin()); 00116 set_end.erase( set_end.begin() ); 00117 tmp.end = (*it).end; 00118 set_end.insert(tmp); 00119 debugnum++; 00120 // if (debugnum > 4 ) return; 00121 } 00122 else { 00123 getMAl()->set_seq_row( (*it).ID, row ); 00124 tmp = *it; 00125 tmp.row = row; 00126 set_end.insert(tmp); 00127 row++; 00128 } 00129 } 00130 }
|
|
Implements RWAlgo. Definition at line 6 of file sortalgo.cc. References SortAlgo::sort_struct::begin, SortAlgo::sort_struct::end, MAl_Readonly::get_num_seq(), MAl_Readonly::get_seq_begin_global(), MAl_Readonly::get_seq_end_global(), RWAlgo::getMAl(), SortAlgo::sort_struct::ID, and MAl::set_seq_row(). 00007 { 00008 00009 if ( getMAl()->get_num_seq() == 0 ) { 00010 return; 00011 } 00012 bool ok; 00013 int res = QInputDialog::getInteger( 00014 "Compact reads", "Enter start row for selected reads:", 0, 1, numeric_limits<int>::max(), 1, 00015 &ok, 0 ); 00016 00017 size_t row(1); 00018 if ( ok ) { 00019 // user entered something and pressed OK 00020 row = res; 00021 } else { 00022 // user pressed Cancel 00023 return; 00024 } 00025 00026 multiset<sort_struct, compBeg> set_begin; 00027 00028 for( size_t i = 0; i < getMAl()->get_num_seq(); i++ ) { 00029 sort_struct s; 00030 s.begin = getMAl()->get_seq_begin_global(i); 00031 s.end = getMAl()->get_seq_end_global(i); 00032 s.ID = i; 00033 00034 set_begin.insert(s); 00035 00036 } 00037 00038 multiset<sort_struct, compBeg>::iterator it = set_begin.begin(); 00039 sort_struct tmp(*it); 00040 tmp.begin = tmp.end; 00041 vector<sort_struct> row_vec; 00042 row_vec.push_back(tmp); 00043 getMAl()->set_seq_row( (*it).ID, row ); 00044 set_begin.erase( set_begin.begin() ); 00045 00046 while ( !set_begin.empty() ) { 00047 it = set_begin.lower_bound( row_vec[ row_vec.size() - 1 ] ); 00048 00049 if ( it == set_begin.end() ) { 00050 //New row 00051 00052 row_vec.clear(); 00053 ++row; 00054 it = set_begin.begin(); 00055 } 00056 00057 tmp = *it; 00058 tmp.begin = tmp.end; 00059 row_vec.push_back(tmp); 00060 getMAl()->set_seq_row( (*it).ID, row ); 00061 set_begin.erase(it); 00062 } 00063 00064 }
|