Skip to content

Commit 882f254

Browse files
committed
linear search for simulation
1 parent 9ae99af commit 882f254

File tree

6 files changed

+56
-53
lines changed

6 files changed

+56
-53
lines changed

mainwindow.cpp

Lines changed: 26 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -333,7 +333,7 @@ void MainWindow::on_simulate_clicked() {
333333
repeats = 1;
334334
QList<QString> genes = get_sorted_genes();
335335
for (int j = 0; j < genes.size(); ++j) {
336-
prior_distribution._simulated_counts[genes[j]] = {};
336+
prior_distribution._simulated_counts[genes[j]].clear();
337337
}
338338
control_threads();
339339
}
@@ -358,32 +358,41 @@ void MainWindow::control_threads() {
358358
void MainWindow::launch_mc_threaad(QList<QString> genes) {
359359
QThread *workerThread = new QThread;
360360
MCWorker *worker;
361-
worker = new MCWorker(prior_distribution._filtered_counts, genes,
362-
prior_distribution.fcount, ui->reads->value(), repeats);
361+
qRegisterMetaType<QMap<QString, unsigned long>>();
362+
363+
worker = new MCWorker(
364+
prior_distribution._filtered_counts, genes, prior_distribution.fcount,
365+
static_cast<unsigned long>(ui->reads->value()), repeats);
363366

364367
worker->moveToThread(workerThread);
365-
connect(workerThread, SIGNAL(started()), worker, SLOT(doWork()));
366-
connect(worker, SIGNAL(finished(int)), workerThread, SLOT(quit()));
367-
connect(worker, SIGNAL(finished(int)), worker, SLOT(deleteLater()));
368-
connect(worker, SIGNAL(finished(int)), this, SLOT(simulation_finished(int)));
368+
369+
connect(worker,
370+
SIGNAL(linear_search_finished(int, QMap<QString, unsigned long>)),
371+
this, SLOT(ls_finished(int, QMap<QString, unsigned long>)));
372+
373+
connect(worker,
374+
SIGNAL(linear_search_finished(int, QMap<QString, unsigned long>)),
375+
workerThread, SLOT(quit()));
376+
connect(worker,
377+
SIGNAL(linear_search_finished(int, QMap<QString, unsigned long>)),
378+
worker, SLOT(deleteLater()));
379+
380+
connect(workerThread, SIGNAL(started()), worker, SLOT(linearSearch()));
369381
connect(workerThread, SIGNAL(finished()), workerThread, SLOT(deleteLater()));
370-
connect(worker, SIGNAL(update_value(int, QString)), this,
371-
SLOT(partial_simulation_finished(int, QString)));
372382
workerThread->start();
373383
ui->simulate->setEnabled(false);
374384
}
375385

376-
void MainWindow::partial_simulation_finished(int value, QString gene) {
377-
prior_distribution._simulated_counts[gene].append(value);
378-
}
379-
380-
void MainWindow::simulation_finished(int thread) {
386+
void MainWindow::ls_finished(int thread,
387+
QMap<QString, unsigned long> gene_picks) {
381388
ui->simulate->setEnabled(true);
382-
if (thread == ui->runs->value()) {
389+
for (QString gene : gene_picks.keys()) {
390+
prior_distribution._simulated_counts[gene].append(gene_picks.value(gene));
391+
}
392+
if (thread >= ui->runs->value()) {
393+
qDebug() << thread << ui->runs->value();
383394
update_counts_table();
384395
update_table_colors(ui->count_table);
385-
// qDebug() << prior_distribution._simulated_counts;
386-
// qDebug() << "Simulation Finished";
387396
} else {
388397
control_threads();
389398
}

mainwindow.h

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -27,17 +27,11 @@ private slots:
2727
void on_confidence_valueChanged(double arg1);
2828
void showPointToolTip(QMouseEvent *event);
2929
void on_cutoff_editingFinished();
30-
3130
void on_simulate_clicked();
32-
void partial_simulation_finished(int, QString);
33-
void simulation_finished(int);
34-
31+
void ls_finished(int, QMap<QString, unsigned long>);
3532
void on_lower_slider_sliderReleased();
36-
3733
void on_upper_slider_sliderReleased();
38-
3934
void on_upper_slider_valueChanged(int value);
40-
4135
void on_lower_slider_valueChanged(int value);
4236

4337
private:

mainwindow.ui

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -286,7 +286,7 @@
286286
<item>
287287
<widget class="QLabel" name="label_3">
288288
<property name="text">
289-
<string>MC Picks</string>
289+
<string>Sim. Picks</string>
290290
</property>
291291
</widget>
292292
</item>
@@ -300,7 +300,7 @@
300300
<item>
301301
<widget class="QLabel" name="label_4">
302302
<property name="text">
303-
<string>MC Runs</string>
303+
<string>Sim. Runs</string>
304304
</property>
305305
</widget>
306306
</item>
@@ -309,8 +309,11 @@
309309
<property name="minimum">
310310
<number>1</number>
311311
</property>
312+
<property name="maximum">
313+
<number>1000</number>
314+
</property>
312315
<property name="value">
313-
<number>10</number>
316+
<number>100</number>
314317
</property>
315318
</widget>
316319
</item>
@@ -343,7 +346,7 @@
343346
</size>
344347
</property>
345348
<property name="currentIndex">
346-
<number>0</number>
349+
<number>1</number>
347350
</property>
348351
<widget class="QWidget" name="tab">
349352
<attribute name="title">
@@ -377,7 +380,7 @@
377380
</widget>
378381
<widget class="QWidget" name="tab_2">
379382
<attribute name="title">
380-
<string>Monte Carlo Counts</string>
383+
<string>Simulation Counts</string>
381384
</attribute>
382385
<layout class="QVBoxLayout" name="verticalLayout_2">
383386
<item>

mcworker.cpp

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
static std::mt19937
77
rng(std::chrono::high_resolution_clock::now().time_since_epoch().count());
88

9-
MCWorker::MCWorker(QMap<QString, double> a, QList<QString> g, unsigned long c,
9+
MCWorker::MCWorker(QMap<QString, double> a, QList<QString> g, double c,
1010
unsigned long t, int th) {
1111
map = a;
1212
genes = g;
@@ -16,26 +16,24 @@ MCWorker::MCWorker(QMap<QString, double> a, QList<QString> g, unsigned long c,
1616
counting = true;
1717
}
1818

19-
void MCWorker::doWork() {
19+
void MCWorker::linearSearch() {
20+
QMap<QString, unsigned long> gene_picks;
21+
QMap<double, QString> gene_prob;
22+
double cum_count = 0;
2023
for (int i = 0; i < genes.length(); i++) {
24+
gene_picks[genes[i]] = 0;
2125
double p = map[genes[i]] / count;
22-
int count = 0;
23-
for (unsigned long j = 0; j < trials; j++) {
24-
if (counting) {
25-
// double r = static_cast<double>(rand() /
26-
// static_cast<double>(RAND_MAX));
27-
double r =
28-
static_cast<double>(rng()) / (static_cast<double>(rng.max()));
29-
if (r < p) {
30-
count = count + 1;
31-
}
32-
} else {
33-
emit finished(thread);
34-
}
35-
}
36-
emit update_value(count, genes[i]);
26+
cum_count = cum_count + p;
27+
gene_prob[cum_count] = genes[i];
3728
}
38-
emit finished(thread);
29+
30+
for (unsigned long j = 0; j < trials; j++) {
31+
double random_number =
32+
static_cast<double>(rng()) / (static_cast<double>(rng.max()));
33+
QString picked_gene = gene_prob.upperBound(random_number).value();
34+
gene_picks[picked_gene] = gene_picks[picked_gene] + 1;
35+
}
36+
emit linear_search_finished(thread, gene_picks);
3937
}
4038

4139
void MCWorker::stopWork() { counting = false; }

mcworker.h

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,21 +6,20 @@
66
class MCWorker : public QObject {
77
Q_OBJECT
88
public:
9-
explicit MCWorker(QMap<QString, double>, QList<QString>, unsigned long c,
9+
explicit MCWorker(QMap<QString, double>, QList<QString>, double c,
1010
unsigned long t, int);
1111

1212
public slots:
13-
void doWork();
1413
void stopWork();
14+
void linearSearch();
1515

1616
signals:
17-
void update_value(int, QString);
18-
void finished(int);
17+
void linear_search_finished(int, QMap<QString, unsigned long>);
1918

2019
private:
2120
QMap<QString, double> map;
2221
QList<QString> genes;
23-
unsigned long count;
22+
double count;
2423
unsigned long trials;
2524
bool counting;
2625
int thread;

structs.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ struct prior {
1616
QMap<QString, double> _filtered_counts;
1717
QMap<QString, double> _bound_counts;
1818
QMap<QString, QList<double>> _simulated_counts;
19-
unsigned int fcount;
19+
double fcount;
2020
};
2121

2222
struct greater_comp {

0 commit comments

Comments
 (0)