13 #include <boost/filesystem/path.hpp>
14 namespace fs = boost::filesystem;
16 //#include "qui/mussa_setup_dialog/SequenceSetupWidget.hpp"
17 #include "qui/mussa_setup_dialog/SequenceSetupFrame.hpp"
18 #include "qui/mussa_setup_dialog/MussaSetupWidget.hpp"
19 #include "qui/mussa_setup_dialog/SetupInfo.hpp"
20 #include "alg/mussa.hpp"
21 #include "mussa_exceptions.hpp"
23 MussaSetupWidget::MussaSetupWidget(QWidget *parent)
25 createPushButton(tr("Create")),
26 cancelPushButton(tr("Cancel")),
31 QLabel *analysisNameLabel = new QLabel(tr("Analysis Name"));
32 analysisNameLabel->setBuddy(&analysisNameLineEdit);
35 QLabel *windowLabel = new QLabel(tr("Window (nt)"));
36 windowLabel->setBuddy(&windowLineEdit);
39 QLabel *thresholdLabel = new QLabel(tr("Threshold (nt)"));
40 thresholdLabel->setBuddy(&thresholdLineEdit);
42 // Number of sequences
43 QLabel *numOfSequencesLabel = new QLabel(tr("Number of sequences"));
44 numOfSequencesLabel->setBuddy(&numOfSequencesSpinBox);
45 numOfSequencesSpinBox.setMinimum(1);
47 //Sequence setup frame
48 seqSetupFrame = new SequenceSetupFrame;
50 connect(&numOfSequencesSpinBox, SIGNAL(valueChanged(int)),
51 seqSetupFrame, SLOT(changeSequenceCount(int)));
53 numOfSequencesSpinBox.setValue(2);
55 // Create Experiment Button
56 connect(&createPushButton, SIGNAL(pressed()),
57 this, SLOT(mussaCreatePushed()));
60 connect(&cancelPushButton, SIGNAL(pressed()),
61 this, SLOT(mussaCancelPushed()));
64 QHBoxLayout *row1Layout = new QHBoxLayout;
65 QHBoxLayout *row2Layout = new QHBoxLayout;
66 QVBoxLayout *mainLayout = new QVBoxLayout;
67 QHBoxLayout *buttonLayout = new QHBoxLayout;
69 row1Layout->addWidget(analysisNameLabel);
70 row1Layout->addWidget(&analysisNameLineEdit);
72 row2Layout->addWidget(windowLabel);
73 row2Layout->addWidget(&windowLineEdit);
74 row2Layout->addWidget(thresholdLabel);
75 row2Layout->addWidget(&thresholdLineEdit);
76 row2Layout->addWidget(numOfSequencesLabel);
77 row2Layout->addWidget(&numOfSequencesSpinBox);
79 buttonLayout->addWidget(&createPushButton);
80 buttonLayout->addWidget(&cancelPushButton);
82 mainLayout->addLayout(row1Layout);
83 mainLayout->addLayout(row2Layout);
84 mainLayout->addWidget(seqSetupFrame);
85 mainLayout->addLayout(buttonLayout);
86 setLayout(mainLayout);
90 void MussaSetupWidget::mussaCreatePushed()
92 emit createButtonPushed();
95 void MussaSetupWidget::mussaCancelPushed()
97 emit cancelButtonPushed();
100 MussaRef MussaSetupWidget::getMussaObject()
102 MussaRef mussa(new Mussa);
108 list<SetupInfo *> setupInfoList = seqSetupFrame->getSetupInfo();
110 for (list<SetupInfo *>::reverse_iterator setup_item = setupInfoList.rbegin();
111 setup_item != setupInfoList.rend();
114 std::string seqName = (*setup_item)->getName();
115 std::string seqNative = (*setup_item)->getSeqFile();
116 std::string annotNative = (*setup_item)->getAnnotFile();
117 fastaIndex = (*setup_item)->getFastaIndex();
118 start = (*setup_item)->getSubSeqStart();
119 end = (*setup_item)->getSubSeqEnd();
121 fs::path seqFile(seqNative, fs::native);
122 fs::path annotFile(annotNative, fs::native);
123 mussa->load_sequence(seqFile, annotFile, fastaIndex, start, end, &seqName);
125 setupInfoList.clear();
127 int win_size = windowLineEdit.text().toInt();
128 int threshold = thresholdLineEdit.text().toInt();
129 std::string name = analysisNameLineEdit.text().toStdString();
130 if (win_size == 0 or threshold == 0) {
131 throw mussa_load_error("must set analysis parameters");
133 mussa->set_name(name);
134 mussa->set_window(win_size);
135 mussa->set_threshold(threshold);
136 mussa->set_analysis_mode(Mussa::TransitiveNway);
137 //mussa->set_entropy(0); // might want to add this at some point
144 //MussaSetupWidget::MussaSetupWidget(const MussaSetupWidget& msw)
145 // : analysisNameLineEdit(msw.analysisNameLineEdit),
146 // windowLineEdit(msw.windowLineEdit),
147 // thresholdLineEdit(msw.thresholdLineEdit),
148 // numOfSequencesLineEdit(msw.numOfSequencesLineEdit),
149 // seqSetupFrame(msw.seqSetupFrame)