Skip to content

Commit 9ba2211

Browse files
committed
new MutationBlock class for per-species mutation storage
1 parent 4dcaf8f commit 9ba2211

43 files changed

Lines changed: 1010 additions & 618 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

QtSLiM/QtSLiMAppDelegate.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -244,7 +244,7 @@ QtSLiMAppDelegate::QtSLiMAppDelegate(QObject *p_parent) : QObject(p_parent)
244244

245245
// This lambda (1) ensures that visible top-level windows remain on screen;
246246
// (2) raises the active window to the front on the appropriate screen, if appropriate.
247-
auto ensureOnScreen = [this]() {
247+
auto ensureOnScreen = []() {
248248
const auto topLevels = QApplication::topLevelWidgets();
249249
QWidget *active = qApp->activeWindow();
250250
for (QWidget *w : topLevels)

QtSLiM/QtSLiMChromosomeWidget_GL.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@
3030
#include <algorithm>
3131
#include <vector>
3232

33+
#include "mutation_block.h"
34+
3335

3436
//
3537
// OpenGL-based drawing; maintain this in parallel with the Qt-based drawing!
@@ -178,7 +180,7 @@ void QtSLiMChromosomeWidget::glDrawMutations(QRect &interiorRect, Chromosome *ch
178180
{
179181
int registry_size;
180182
const MutationIndex *registry = pop.MutationRegistry(&registry_size);
181-
Mutation *mut_block_ptr = gSLiM_Mutation_Block;
183+
Mutation *mut_block_ptr = displaySpecies->SpeciesMutationBlock()->mutation_buffer_;
182184
slim_chromosome_index_t chromosome_index = chromosome->Index();
183185

184186
for (int registry_index = 0; registry_index < registry_size; ++registry_index)

QtSLiM/QtSLiMChromosomeWidget_QT.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424

2525
#include <QtDebug>
2626

27+
#include "mutation_block.h"
28+
2729
#include <map>
2830
#include <algorithm>
2931
#include <vector>
@@ -174,7 +176,7 @@ void QtSLiMChromosomeWidget::qtDrawMutations(QRect &interiorRect, Chromosome *ch
174176
{
175177
int registry_size;
176178
const MutationIndex *registry = pop.MutationRegistry(&registry_size);
177-
Mutation *mut_block_ptr = gSLiM_Mutation_Block;
179+
Mutation *mut_block_ptr = displaySpecies->SpeciesMutationBlock()->mutation_buffer_;
178180
slim_chromosome_index_t chromosome_index = chromosome->Index();
179181

180182
for (int registry_index = 0; registry_index < registry_size; ++registry_index)

QtSLiM/QtSLiMGraphView.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
#include "subpopulation.h"
4949
#include "haplosome.h"
5050
#include "mutation_run.h"
51+
#include "mutation_block.h"
5152

5253

5354
QFont QtSLiMGraphView::labelFontOfPointSize(double size)
@@ -2551,7 +2552,7 @@ size_t QtSLiMGraphView::tallyGUIMutationReferences(slim_objectid_t subpop_id, in
25512552
Population &population = graphSpecies->population_;
25522553
size_t subpop_total_haplosome_count = 0;
25532554

2554-
Mutation *mut_block_ptr = gSLiM_Mutation_Block;
2555+
Mutation *mut_block_ptr = graphSpecies->SpeciesMutationBlock()->mutation_buffer_;
25552556

25562557
{
25572558
int registry_size;
@@ -2618,7 +2619,7 @@ size_t QtSLiMGraphView::tallyGUIMutationReferences(const std::vector<Haplosome *
26182619

26192620
Population &population = graphSpecies->population_;
26202621

2621-
Mutation *mut_block_ptr = gSLiM_Mutation_Block;
2622+
Mutation *mut_block_ptr = graphSpecies->SpeciesMutationBlock()->mutation_buffer_;
26222623

26232624
{
26242625
int registry_size;

QtSLiM/QtSLiMGraphView_1DPopulationSFS.cpp

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323

2424
#include <string>
2525

26+
#include "mutation_block.h"
27+
2628

2729
QtSLiMGraphView_1DPopulationSFS::QtSLiMGraphView_1DPopulationSFS(QWidget *p_parent, QtSLiMWindow *controller) : QtSLiMGraphView(p_parent, controller)
2830
{
@@ -89,9 +91,10 @@ double *QtSLiMGraphView_1DPopulationSFS::populationSFS(int mutationTypeCount)
8991
Population &pop = graphSpecies->population_;
9092

9193
pop.TallyMutationReferencesAcrossPopulation(/* p_clock_for_mutrun_experiments */ false); // update tallies; usually this will just use the cache set up by Population::MaintainRegistry()
92-
93-
Mutation *mut_block_ptr = gSLiM_Mutation_Block;
94-
slim_refcount_t *refcount_block_ptr = gSLiM_Mutation_Refcounts;
94+
95+
MutationBlock *mutation_block = graphSpecies->SpeciesMutationBlock();
96+
Mutation *mut_block_ptr = mutation_block->mutation_buffer_;
97+
slim_refcount_t *refcount_block_ptr = mutation_block->refcount_buffer_;
9598
int registry_size;
9699
const MutationIndex *registry = pop.MutationRegistry(&registry_size);
97100

@@ -101,7 +104,7 @@ double *QtSLiMGraphView_1DPopulationSFS::populationSFS(int mutationTypeCount)
101104
Chromosome *mut_chromosome = graphSpecies->Chromosomes()[mutation->chromosome_index_];
102105
double totalHaplosomeCount = ((mut_chromosome->total_haplosome_count_ == 0) ? 1 : mut_chromosome->total_haplosome_count_); // prevent a zero count from producing NAN frequencies below
103106

104-
slim_refcount_t mutationRefCount = *(refcount_block_ptr + mutation->BlockIndex());
107+
slim_refcount_t mutationRefCount = *(refcount_block_ptr + mutation_block->IndexInBlock(mutation));
105108
double mutationFrequency = mutationRefCount / totalHaplosomeCount;
106109
int mutationBin = static_cast<int>(floor(mutationFrequency * binCount));
107110
int mutationTypeIndex = mutation->mutation_type_ptr_->mutation_type_index_;

QtSLiM/QtSLiMGraphView_1DSampleSFS.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
#include "QtSLiMWindow.h"
3434
#include "subpopulation.h"
3535
#include "mutation_type.h"
36+
#include "mutation_block.h"
3637

3738

3839
QtSLiMGraphView_1DSampleSFS::QtSLiMGraphView_1DSampleSFS(QWidget *p_parent, QtSLiMWindow *controller) : QtSLiMGraphView(p_parent, controller)
@@ -300,7 +301,7 @@ uint64_t *QtSLiMGraphView_1DSampleSFS::mutation1DSFS(void)
300301

301302
// Tally into our bins
302303
sfs1dbuf_ = static_cast<uint64_t *>(calloc(histogramBinCount_, sizeof(uint64_t)));
303-
Mutation *mut_block_ptr = gSLiM_Mutation_Block;
304+
Mutation *mut_block_ptr = graphSpecies->SpeciesMutationBlock()->mutation_buffer_;
304305
int registry_size;
305306
const MutationIndex *registry = population.MutationRegistry(&registry_size);
306307

QtSLiM/QtSLiMGraphView_2DPopulationSFS.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
#include <vector>
2828

2929
#include "mutation_type.h"
30+
#include "mutation_block.h"
3031

3132

3233
QtSLiMGraphView_2DPopulationSFS::QtSLiMGraphView_2DPopulationSFS(QWidget *p_parent, QtSLiMWindow *controller) : QtSLiMGraphView(p_parent, controller)
@@ -232,7 +233,7 @@ double *QtSLiMGraphView_2DPopulationSFS::mutation2DSFS(void)
232233
return nullptr;
233234

234235
// Get frequencies in subpop1 and subpop2
235-
Mutation *mut_block_ptr = gSLiM_Mutation_Block;
236+
Mutation *mut_block_ptr = graphSpecies->SpeciesMutationBlock()->mutation_buffer_;
236237
std::vector<slim_refcount_t> refcounts1, refcounts2;
237238
size_t subpop1_total_haplosome_count, subpop2_total_haplosome_count;
238239

QtSLiM/QtSLiMGraphView_2DSampleSFS.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
#include "QtSLiMWindow.h"
3434
#include "subpopulation.h"
3535
#include "mutation_type.h"
36+
#include "mutation_block.h"
3637

3738

3839
QtSLiMGraphView_2DSampleSFS::QtSLiMGraphView_2DSampleSFS(QWidget *p_parent, QtSLiMWindow *controller) : QtSLiMGraphView(p_parent, controller)
@@ -347,7 +348,7 @@ uint64_t *QtSLiMGraphView_2DSampleSFS::mutation2DSFS(void)
347348
int registry_size;
348349
const MutationIndex *registry = population.MutationRegistry(&registry_size);
349350
const MutationIndex *registry_iter_end = registry + registry_size;
350-
Mutation *mut_block_ptr = gSLiM_Mutation_Block;
351+
Mutation *mut_block_ptr = graphSpecies->SpeciesMutationBlock()->mutation_buffer_;
351352

352353
// Find our subpops and mutation type
353354
Subpopulation *subpop1 = graphSpecies->SubpopulationWithID(selectedSubpopulation1ID_);

QtSLiM/QtSLiMGraphView_FrequencyTrajectory.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030

3131
#include "QtSLiMWindow.h"
3232
#include "subpopulation.h"
33+
#include "mutation_block.h"
3334

3435

3536
QtSLiMGraphView_FrequencyTrajectory::QtSLiMGraphView_FrequencyTrajectory(QWidget *p_parent, QtSLiMWindow *controller) : QtSLiMGraphView(p_parent, controller)
@@ -137,7 +138,7 @@ void QtSLiMGraphView_FrequencyTrajectory::fetchDataForFinishedTick(void)
137138
subpop_total_haplosome_count = 1; // refcounts will all be zero; prevent NAN values below, make them 0 instead
138139

139140
// Now we can run through the mutations and use the tallies in gui_scratch_reference_count to update our histories
140-
Mutation *mut_block_ptr = gSLiM_Mutation_Block;
141+
Mutation *mut_block_ptr = graphSpecies->SpeciesMutationBlock()->mutation_buffer_;
141142

142143
for (const MutationIndex *registry_iter = registry; registry_iter != registry_iter_end; ++registry_iter)
143144
{

QtSLiM/QtSLiMHaplotypeManager.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
#include "eidos_globals.h"
4747
#include "subpopulation.h"
4848
#include "species.h"
49+
#include "mutation_block.h"
4950

5051

5152
const int QtSLiM_SubpopulationStripWidth = 5;
@@ -480,7 +481,7 @@ void QtSLiMHaplotypeManager::configureMutationInfoBuffer(Chromosome *chromosome)
480481
mutationPositions = static_cast<slim_position_t *>(malloc(sizeof(slim_position_t) * mutationIndexCount));
481482

482483
// Copy the information we need on each mutation in use
483-
Mutation *mut_block_ptr = gSLiM_Mutation_Block;
484+
Mutation *mut_block_ptr = graphSpecies->SpeciesMutationBlock()->mutation_buffer_;
484485

485486
for (const MutationIndex *reg_ptr = registry; reg_ptr != reg_end_ptr; ++reg_ptr)
486487
{

0 commit comments

Comments
 (0)