Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Namespace Members | Class Members | File Members

SortAlgo Class Reference

#include <sortalgo.h>

Inheritance diagram for SortAlgo:

Inheritance graph
[legend]
Collaboration diagram for SortAlgo:

Collaboration graph
[legend]
List of all members.

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

Detailed Description

Definition at line 6 of file sortalgo.h.


Constructor & Destructor Documentation

SortAlgo::SortAlgo TrapperDoc pDoc_,
std::set< db_recno_t > &  recnoList,
AlgoParam param
[inline]
 

Definition at line 9 of file sortalgo.h.

00009                                                                                   : 
00010     RWAlgo(pDoc_, recnoList, param) {}


Member Function Documentation

void SortAlgo::old_start  ) 
 

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 }

void SortAlgo::start  )  [virtual]
 

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 }


The documentation for this class was generated from the following files:
Generated on Fri Mar 17 17:45:01 2006 for trapper by  doxygen 1.4.4