00001 #include "subsetalgo.h"
00002 #include <fstream>
00003 #include "viewparam.h"
00004 #include <cassert>
00005 #include <qstring.h>
00006 #include <qfiledialog.h>
00007 #include <qdir.h>
00008 #include <qfile.h>
00009 #include <qmessagebox.h>
00010 #include "trapperview.h"
00011
00012 using namespace std;
00013
00014 void SubsetAlgo::start()
00015 {
00016 if ( getMAl()->get_num_seq() == 0 ) {
00017
00018 return;
00019 }
00020
00021 ViewParam* param = dynamic_cast<ViewParam*>(my_param);
00022 assert(param);
00023
00024 QString title = param->view()->getDocument()->title();
00025
00026 QString currdir = QDir::currentDirPath();
00027 QString contig = title.section( '/', -2 );
00028
00029 QString header = contig + ".subset.seq";
00030 QString default_file_name = currdir + '/' + header;
00031
00032
00033 QString filename = QFileDialog::getSaveFileName( default_file_name,
00034 0,
00035 0,
00036 "save seqs file dialog"
00037 "Choose a filename to save sequences under" );
00038
00039
00040 if ( filename.isEmpty() ) return;
00041
00042 if ( QFile::exists( filename ) &&
00043 QMessageBox::question(
00044 0,
00045 tr("Overwrite File? -- Trapper"),
00046 tr("A file called %1 already exists."
00047 "Do you want to overwrite it?")
00048 .arg( filename ),
00049 tr("&Yes"), tr("&No"),
00050 QString::null, 0, 1 ) ) {
00051
00052 return;
00053 }
00054
00055 default_file_name = filename + ".qual";
00056
00057 QString filename_qual = QFileDialog::getSaveFileName( default_file_name,
00058 0,
00059 0,
00060 "save quals file dialog"
00061 "Choose a filename to save quality values under" );
00062
00063
00064 if ( filename_qual.isEmpty() ) return;
00065
00066 if ( QFile::exists( filename_qual ) &&
00067 QMessageBox::question(
00068 0,
00069 tr("Overwrite File? -- Trapper"),
00070 tr("A file called %1 already exists."
00071 "Do you want to overwrite it?")
00072 .arg( filename_qual ),
00073 tr("&Yes"), tr("&No"),
00074 QString::null, 0, 1 ) ) {
00075
00076 return;
00077 }
00078
00079
00080 ofstream outFile(filename);
00081 ofstream outFileQ(filename_qual);
00082
00083
00084 for( size_t i = 0; i < getMAl()->get_num_seq(); i++ ) {
00085 outFile<<'>'<<getMAl()->get_name(i)<<'\n';
00086 outFileQ<<'>'<<getMAl()->get_name(i)<<'\n';
00087 int cnt(0);
00088 int cntQ(0);
00089 for( size_t j = 0; j < getMAl()->get_len(i); j++ ) {
00090 char base = getMAl()->get_base(i, j);
00091 if ( base == '*' || base == '-' ) {
00092 continue;
00093 }
00094 int qual = getMAl()->get_qual(i, j);
00095 cnt++;
00096 cntQ++;
00097 outFile<<base;
00098 outFileQ<<qual<<' ';
00099 if ( cnt % 50 == 0 ) {
00100 outFile<<'\n';
00101 }
00102 if ( cntQ % 15 == 0 ) {
00103 outFileQ<<'\n';
00104 }
00105
00106 }
00107 if ( cnt % 50 != 0 ) {
00108 outFile<<'\n';
00109 }
00110 if ( cntQ % 15 != 0 ) {
00111 outFileQ<<'\n';
00112 }
00113 }
00114
00115 outFile.close();
00116 outFileQ.close();
00117
00118
00119 }