X-Git-Url: http://woldlab.caltech.edu/gitweb/?a=blobdiff_plain;f=qui%2Fmussa_setup_dialog%2FMussaSetupWidget.cpp;h=c116a9a2e12fc6e9983760a6f80f83906cd69961;hb=4c1d1e263deea85ab00823282c5ca5fc00fa8c26;hp=e896e538db653f748bc49b56e6808ae679df629d;hpb=ea28f8c00d598073c43907dbeef476514f310c0a;p=mussa.git diff --git a/qui/mussa_setup_dialog/MussaSetupWidget.cpp b/qui/mussa_setup_dialog/MussaSetupWidget.cpp index e896e53..c116a9a 100644 --- a/qui/mussa_setup_dialog/MussaSetupWidget.cpp +++ b/qui/mussa_setup_dialog/MussaSetupWidget.cpp @@ -8,44 +8,66 @@ #include +using namespace std; + +#include +namespace fs = boost::filesystem; + //#include "qui/mussa_setup_dialog/SequenceSetupWidget.hpp" #include "qui/mussa_setup_dialog/SequenceSetupFrame.hpp" #include "qui/mussa_setup_dialog/MussaSetupWidget.hpp" #include "qui/mussa_setup_dialog/SetupInfo.hpp" #include "alg/mussa.hpp" +#include "mussa_exceptions.hpp" MussaSetupWidget::MussaSetupWidget(QWidget *parent) : QWidget(parent), - analysisNameLineEdit(0), - windowLineEdit(0), - thresholdLineEdit(0), - numOfSequencesSpinBox(0), - createPushButton(0), - cancelPushButton(0), + analysisNameLineEdit(new QLineEdit), + windowEdit(new QSpinBox), + thresholdEdit(new QSpinBox), + numOfSequencesSpinBox(new QSpinBox), + createPushButton(new QPushButton(tr("Create"))), + cancelPushButton(new QPushButton(tr("Cancel"))), seqSetupFrame(0) { - - // Analysis name analysisNameLineEdit = new QLineEdit; + windowEdit = new QSpinBox; + thresholdEdit = new QSpinBox; + numOfSequencesSpinBox = new QSpinBox; + createPushButton = new QPushButton(tr("Create")); + cancelPushButton = new QPushButton(tr("Cancel")); + + // Analysis name QLabel *analysisNameLabel = new QLabel(tr("Analysis Name")); analysisNameLabel->setBuddy(analysisNameLineEdit); + analysisNameLabel->setWhatsThis("Meaningful name for your analysis "); + analysisNameLineEdit->setWhatsThis("Meaningful name for your analysis "); // Window - windowLineEdit = new QLineEdit; - QLabel *windowLabel = new QLabel(tr("Window")); - windowLabel->setBuddy(windowLineEdit); + windowEdit->setMinimum(1); + windowEdit->setValue(30); + windowEdit->setWhatsThis("Sliding window size to use in analysis.\n\nSee Mussagl Manual for more information by selecting the 'Help > Mussagl Manual' menu option. "); + QLabel *windowLabel = new QLabel(tr("Window (nt)")); + windowLabel->setBuddy(windowEdit); + windowLabel->setWhatsThis("Sliding window size to use in analysis.\n\nSee Mussagl Manual for more information by selecting the 'Help > Mussagl Manual' menu option. "); // Threshold - thresholdLineEdit = new QLineEdit; - QLabel *thresholdLabel = new QLabel(tr("Threshold")); - thresholdLabel->setBuddy(thresholdLineEdit); + thresholdEdit->setMinimum(1); + thresholdEdit->setMaximum(windowEdit->value()); + thresholdEdit->setValue(21); + thresholdEdit->setWhatsThis("Threshold of minimum number of matches required in a window to be considered a match.\n\nSee Mussagl Manual for more information by selecting the 'Help > Mussagl Manual' menu option. "); + QLabel *thresholdLabel = new QLabel(tr("Threshold (nt)")); + thresholdLabel->setBuddy(thresholdEdit); + thresholdLabel->setWhatsThis("Threshold of minimum number of matches required in a window to be considered a match.\n\nSee Mussagl Manual for more information by selecting the 'Help > Mussagl Manual' menu option. "); + connect(windowEdit, SIGNAL(valueChanged(int)), + this, SLOT(updateThreshold(int))); // Number of sequences - numOfSequencesSpinBox = new QSpinBox; QLabel *numOfSequencesLabel = new QLabel(tr("Number of sequences")); numOfSequencesLabel->setBuddy(numOfSequencesSpinBox); + numOfSequencesLabel->setWhatsThis("Number of sequences to include in analysis. "); numOfSequencesSpinBox->setMinimum(1); - + numOfSequencesSpinBox->setWhatsThis("Number of sequences to include in analysis. "); //Sequence setup frame seqSetupFrame = new SequenceSetupFrame; @@ -53,15 +75,13 @@ MussaSetupWidget::MussaSetupWidget(QWidget *parent) connect(numOfSequencesSpinBox, SIGNAL(valueChanged(int)), seqSetupFrame, SLOT(changeSequenceCount(int))); - numOfSequencesSpinBox->setValue(1); + numOfSequencesSpinBox->setValue(2); // Create Experiment Button - createPushButton = new QPushButton(tr("Create")); connect(createPushButton, SIGNAL(pressed()), this, SLOT(mussaCreatePushed())); // Cancle Button - cancelPushButton = new QPushButton(tr("Cancel")); connect(cancelPushButton, SIGNAL(pressed()), this, SLOT(mussaCancelPushed())); @@ -74,13 +94,14 @@ MussaSetupWidget::MussaSetupWidget(QWidget *parent) row1Layout->addWidget(analysisNameLabel); row1Layout->addWidget(analysisNameLineEdit); - row2Layout->addWidget(windowLabel); - row2Layout->addWidget(windowLineEdit); row2Layout->addWidget(thresholdLabel); - row2Layout->addWidget(thresholdLineEdit); + row2Layout->addWidget(thresholdEdit); + row2Layout->addWidget(windowLabel); + row2Layout->addWidget(windowEdit); row2Layout->addWidget(numOfSequencesLabel); row2Layout->addWidget(numOfSequencesSpinBox); + buttonLayout->addStretch(1); buttonLayout->addWidget(createPushButton); buttonLayout->addWidget(cancelPushButton); @@ -89,7 +110,6 @@ MussaSetupWidget::MussaSetupWidget(QWidget *parent) mainLayout->addWidget(seqSetupFrame); mainLayout->addLayout(buttonLayout); setLayout(mainLayout); - } void MussaSetupWidget::mussaCreatePushed() @@ -102,48 +122,52 @@ void MussaSetupWidget::mussaCancelPushed() emit cancelButtonPushed(); } -Mussa* MussaSetupWidget::getMussaObject() +void MussaSetupWidget::updateThreshold(int new_threshold) { - Mussa *mussa = new Mussa; - - + thresholdEdit->setMaximum(new_threshold); +} + +MussaRef MussaSetupWidget::getMussaObject() +{ + MussaRef mussa = Mussa::init(); - std::string seqFile; - std::string annotFile; int fastaIndex; int start; int end; - std::list setupInfoList = seqSetupFrame->getSetupInfo(); - - const int count = setupInfoList.size(); + list setupInfoList = seqSetupFrame->getSetupInfo(); - SetupInfo *setupInfo = 0; - for (int i=0; i < count; i++) + for (list::reverse_iterator setup_item = setupInfoList.rbegin(); + setup_item != setupInfoList.rend(); + ++setup_item) { - setupInfo = setupInfoList.back(); - setupInfoList.pop_back(); - - seqFile = setupInfo->getSeqFile(); - annotFile = setupInfo->getAnnotFile(); - fastaIndex = setupInfo->getFastaIndex(); - start = setupInfo->getSubSeqStart(); - end = setupInfo->getSubSeqEnd(); - - mussa->load_sequence(seqFile, annotFile, fastaIndex, start, end); - delete setupInfo; + std::string seqName = (*setup_item)->getName(); + std::string seqNative = (*setup_item)->getSeqFile(); + std::string annotNative = (*setup_item)->getAnnotFile(); + fastaIndex = (*setup_item)->getFastaIndex(); + start = (*setup_item)->getSubSeqStart(); + end = (*setup_item)->getSubSeqEnd(); + + fs::path seqFile(seqNative, fs::native); + fs::path annotFile(annotNative, fs::native); + mussa->load_sequence(seqFile, annotFile, fastaIndex, start, end, &seqName); + } + setupInfoList.clear(); + + int win_size = windowEdit->value(); + int threshold = thresholdEdit->value(); + std::string name = analysisNameLineEdit->text().toStdString(); + if (win_size == 0 or threshold == 0) { + throw mussa_load_error("must set analysis parameters"); + } else { + mussa->set_name(name); + mussa->set_window(win_size); + mussa->set_threshold(threshold); + mussa->set_analysis_mode(Mussa::TransitiveNway); + //mussa->set_entropy(0); // might want to add this at some point + mussa->analyze(); } - - mussa->analyze(0, 0, Mussa::TransitiveNway, 0.0); return mussa; } -//MussaSetupWidget::MussaSetupWidget(const MussaSetupWidget& msw) -// : analysisNameLineEdit(msw.analysisNameLineEdit), -// windowLineEdit(msw.windowLineEdit), -// thresholdLineEdit(msw.thresholdLineEdit), -// numOfSequencesLineEdit(msw.numOfSequencesLineEdit), -// seqSetupFrame(msw.seqSetupFrame) -//{ -//}