Skip to content

Commit 0e3a4f7

Browse files
author
befulton
committed
Make transcript vector a member of reconstruction
So callers don't try to pass a separate set of transcripts to the display methods
1 parent 181d452 commit 0e3a4f7

File tree

5 files changed

+160
-112
lines changed

5 files changed

+160
-112
lines changed

src/base_model.cpp

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ class base_model_reconstruction : public reconstruction
3333
{
3434
public:
3535

36-
base_model_reconstruction(replicate_model* p_model) : reconstruction(p_model)
36+
base_model_reconstruction(transcript_vector& transcripts, replicate_model* p_model) : reconstruction(transcripts, p_model)
3737
{
3838

3939
}
@@ -189,7 +189,7 @@ reconstruction* base_model::reconstruct_ancestral_states(const user_data& ud, ma
189189
{
190190
LOG(INFO) << "Starting reconstruction processes for Base model";
191191

192-
auto result = new base_model_reconstruction(ud.p_replicate_model);
192+
auto result = new base_model_reconstruction(ud.gene_transcripts, ud.p_replicate_model);
193193

194194
p_calc->precalculate_matrices(_p_sigma->get_values(), ud.p_tree->get_branch_lengths(), ud.bounds);
195195

@@ -331,7 +331,7 @@ TEST_CASE("base_model_reconstruction__print_reconstructed_states")
331331
const clade* t = p_tree.get();
332332
transform(nodes.begin(), nodes.end(), order.begin(), [t](string s) { return t->find_descendant(s); });
333333

334-
base_model_reconstruction bmr(nullptr);
334+
base_model_reconstruction bmr(transcripts, nullptr);
335335
auto& values = bmr._reconstructions[&transcripts[0]];
336336

337337
values[p_tree.get()].most_likely_value = pv::to_computational_space(7);
@@ -340,7 +340,7 @@ TEST_CASE("base_model_reconstruction__print_reconstructed_states")
340340

341341
ostringstream ost;
342342

343-
bmr.print_reconstructed_states(ost, transcripts, p_tree.get());
343+
bmr.print_reconstructed_states(ost, p_tree.get());
344344
CHECK_STREAM_CONTAINS(ost, "#nexus");
345345
CHECK_STREAM_CONTAINS(ost, "BEGIN TREES;");
346346
CHECK_STREAM_CONTAINS(ost, " TREE Family5 = ((A<1>_11:1,B<2>_2:3)<6>_8:7,(C<3>_5:11,D<4>_6:17)<7>_6:23)<5>_7;");
@@ -350,8 +350,12 @@ TEST_CASE("base_model_reconstruction__print_reconstructed_states")
350350

351351
TEST_CASE("increase_decrease")
352352
{
353-
base_model_reconstruction bmr(nullptr);
354353
gene_transcript gf("myid", "", "");
354+
gf.set_expression_value("A", pv::to_computational_space(4));
355+
gf.set_expression_value("B", pv::to_computational_space(2));
356+
357+
transcript_vector transcripts{ gf };
358+
base_model_reconstruction bmr(transcripts, nullptr);
355359

356360
unique_ptr<clade> p_tree(parse_newick("((A:1,B:3):7,(C:11,D:17):23);"));
357361

@@ -360,14 +364,12 @@ TEST_CASE("increase_decrease")
360364
auto ab = p_tree->find_descendant("AB");
361365
auto abcd = p_tree->find_descendant("ABCD");
362366

363-
gf.set_expression_value("A", pv::to_computational_space(4));
364-
gf.set_expression_value("B", pv::to_computational_space(2));
365-
bmr._reconstructions[&gf][ab].most_likely_value = pv::to_computational_space(3);
366-
bmr._reconstructions[&gf][abcd].most_likely_value = pv::to_computational_space(3);
367+
bmr._reconstructions[&transcripts[0]][ab].most_likely_value = pv::to_computational_space(3);
368+
bmr._reconstructions[&transcripts[0]][abcd].most_likely_value = pv::to_computational_space(3);
367369

368-
CHECK_EQ(doctest::Approx(1.0), bmr.get_difference_from_parent(gf, a));
369-
CHECK_EQ(doctest::Approx(-1.0), bmr.get_difference_from_parent(gf, b));
370-
CHECK_EQ(0, bmr.get_difference_from_parent(gf, ab));
370+
CHECK_EQ(doctest::Approx(1.0), bmr.get_difference_from_parent(transcripts[0], a));
371+
CHECK_EQ(doctest::Approx(-1.0), bmr.get_difference_from_parent(transcripts[0], b));
372+
CHECK_EQ(0, bmr.get_difference_from_parent(transcripts[0], ab));
371373
}
372374

373375

src/execute.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ void estimator::execute(std::vector<model *>& models)
131131

132132
std::unique_ptr<reconstruction> rec(p_model->reconstruct_ancestral_states(data, &cache));
133133

134-
rec->write_results(_user_input.output_prefix, data.p_tree, data.gene_transcripts, _user_input.count_all_changes);
134+
rec->write_results(_user_input.output_prefix, data.p_tree, _user_input.count_all_changes);
135135
}
136136
}
137137
catch (const OptimizerInitializationFailure& e )

src/gamma_core.cpp

Lines changed: 47 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -40,21 +40,22 @@ class gamma_model_reconstruction : public reconstruction
4040
virtual void write_nexus_extensions(std::ostream& ost) override;
4141

4242
public:
43-
gamma_model_reconstruction(const std::vector<double>& sigma_multipliers) :
43+
gamma_model_reconstruction(transcript_vector& transcripts, const std::vector<double>& sigma_multipliers) :
44+
reconstruction(transcripts),
4445
_sigma_multipliers(sigma_multipliers)
4546
{
4647

4748
}
4849

49-
gamma_model_reconstruction(replicate_model* p_model, const std::vector<double>& sigma_multipliers) :
50-
reconstruction(p_model),
50+
gamma_model_reconstruction(transcript_vector& transcripts, replicate_model* p_model, const std::vector<double>& sigma_multipliers) :
51+
reconstruction(transcripts, p_model),
5152
_sigma_multipliers(sigma_multipliers)
5253
{
5354
}
5455

55-
void print_additional_data(transcript_vector& gene_transcripts, std::string output_prefix) override;
56+
void print_additional_data(std::string output_prefix) override;
5657

57-
void print_category_likelihoods(std::ostream& ost, transcript_vector& gene_transcripts);
58+
void print_category_likelihoods(std::ostream& ost);
5859

5960
node_reconstruction get_internal_node_value(const gene_transcript& transcript, const clade* c) const;
6061

@@ -300,7 +301,7 @@ reconstruction* gamma_model::reconstruct_ancestral_states(const user_data& ud, m
300301

301302
calc->precalculate_matrices(_p_sigma->get_values(), ud.p_tree->get_branch_lengths(), ud.bounds);
302303

303-
gamma_model_reconstruction* result = new gamma_model_reconstruction(ud.p_replicate_model, _sigma_multipliers);
304+
gamma_model_reconstruction* result = new gamma_model_reconstruction(ud.gene_transcripts, ud.p_replicate_model, _sigma_multipliers);
304305
vector<gamma_model_reconstruction::gamma_reconstruction *> recs(ud.gene_transcripts.size());
305306
for (size_t i = 0; i < ud.gene_transcripts.size(); ++i)
306307
{
@@ -353,14 +354,14 @@ node_reconstruction gamma_model_reconstruction::get_internal_node_value(const ge
353354

354355
}
355356

356-
void gamma_model_reconstruction::print_category_likelihoods(std::ostream& ost, transcript_vector& transcripts)
357+
void gamma_model_reconstruction::print_category_likelihoods(std::ostream& ost)
357358
{
358359
ost << "Transcript ID\t";
359360
ostream_iterator<double> lm(ost, "\t");
360361
copy(_sigma_multipliers.begin(), _sigma_multipliers.end(), lm);
361362
ost << endl;
362363

363-
for (auto& gf : transcripts)
364+
for (auto& gf : _transcripts)
364365
{
365366
ost << gf.id() << '\t';
366367
auto rc = _reconstructions[gf.id()];
@@ -370,10 +371,10 @@ void gamma_model_reconstruction::print_category_likelihoods(std::ostream& ost, t
370371
}
371372
}
372373

373-
void gamma_model_reconstruction::print_additional_data(transcript_vector& gene_transcripts, std::string output_prefix)
374+
void gamma_model_reconstruction::print_additional_data(std::string output_prefix)
374375
{
375376
std::ofstream cat_likelihoods(filename("category_likelihoods", output_prefix));
376-
print_category_likelihoods(cat_likelihoods, gene_transcripts);
377+
print_category_likelihoods(cat_likelihoods);
377378

378379
}
379380

@@ -453,25 +454,29 @@ TEST_CASE("get_weighted_averages")
453454
class Reconstruction
454455
{
455456
public:
456-
gene_transcript fam;
457+
unique_ptr<transcript_vector> p_transcripts;
457458
unique_ptr<clade> p_tree;
458459

459-
Reconstruction() : fam("Family5", "", "")
460+
Reconstruction()
460461
{
462+
gene_transcript fam("Family5", "", "");
461463
p_tree.reset(parse_newick("((A:1,B:3):7,(C:11,D:17):23);"));
462464

463465
fam.set_expression_value("A", pv::to_computational_space(11));
464466
fam.set_expression_value("B", pv::to_computational_space(2));
465467
fam.set_expression_value("C", pv::to_computational_space(5));
466468
fam.set_expression_value("D", pv::to_computational_space(6));
469+
470+
p_transcripts.reset(new transcript_vector{fam});
471+
467472
}
468473
};
469474

470475
#define CHECK_STREAM_CONTAINS(x,y) CHECK_MESSAGE(x.str().find(y) != std::string::npos, x.str())
471476

472477
TEST_CASE_FIXTURE(Reconstruction, "gamma_model_reconstruction print_reconstructed_states")
473478
{
474-
gamma_model_reconstruction gmr(vector<double>({ 1.0 }));
479+
gamma_model_reconstruction gmr(*p_transcripts, vector<double>({ 1.0 }));
475480

476481
auto& rec = gmr._reconstructions["Family5"];
477482
rec.category_reconstruction.resize(1);
@@ -484,24 +489,24 @@ TEST_CASE_FIXTURE(Reconstruction, "gamma_model_reconstruction print_reconstructe
484489
rec.reconstruction[p_tree->find_descendant("CD")] = pv::to_computational_space(6);
485490

486491
ostringstream ost;
487-
gmr.print_reconstructed_states(ost, { fam }, p_tree.get());
492+
gmr.print_reconstructed_states(ost, p_tree.get());
488493
CHECK_STREAM_CONTAINS(ost, " TREE Family5 = ((A<1>_11:1,B<2>_2:3)<6>_8:7,(C<3>_5:11,D<4>_6:17)<7>_6:23)<5>_7;");
489494
}
490495

491496
TEST_CASE_FIXTURE(Reconstruction, "gamma_model_reconstruction__print_additional_data__prints_likelihoods")
492497
{
493-
gamma_model_reconstruction gmr(vector<double>({ 0.3, 0.9, 1.4, 2.0 }));
498+
gamma_model_reconstruction gmr(*p_transcripts, vector<double>({ 0.3, 0.9, 1.4, 2.0 }));
494499
gmr._reconstructions["Family5"]._category_likelihoods = { 0.01, 0.03, 0.09, 0.07 };
495500
ostringstream ost;
496-
gmr.print_category_likelihoods(ost, { fam });
501+
gmr.print_category_likelihoods(ost);
497502
CHECK_STREAM_CONTAINS(ost, "Transcript ID\t0.3\t0.9\t1.4\t2\t\n");
498503
CHECK_STREAM_CONTAINS(ost, "Family5\t0.01\t0.03\0.09\t0.07");
499504
}
500505

501506
TEST_CASE_FIXTURE(Reconstruction, "gamma_model_reconstruction__prints_sigma_multipiers")
502507
{
503508
vector<double> multipliers{ 0.13, 1.4 };
504-
gamma_model_reconstruction gmr(multipliers);
509+
gamma_model_reconstruction gmr(*p_transcripts, multipliers);
505510

506511
auto& rec = gmr._reconstructions["Family5"];
507512
rec.category_reconstruction.resize(1);
@@ -514,7 +519,7 @@ TEST_CASE_FIXTURE(Reconstruction, "gamma_model_reconstruction__prints_sigma_mult
514519
rec.reconstruction[p_tree->find_descendant("CD")] = 6;
515520

516521
std::ostringstream ost;
517-
gmr.print_reconstructed_states(ost, { fam }, p_tree.get());
522+
gmr.print_reconstructed_states(ost, p_tree.get());
518523

519524
CHECK_STREAM_CONTAINS(ost, "BEGIN SIGMA_MULTIPLIERS;");
520525
CHECK_STREAM_CONTAINS(ost, " 0.13;");
@@ -525,38 +530,51 @@ TEST_CASE_FIXTURE(Reconstruction, "gamma_model_reconstruction__prints_sigma_mult
525530
TEST_CASE_FIXTURE(Reconstruction, "gamma_model_reconstruction get_internal_node_value returns reconstruction value for internal nodes")
526531
{
527532
auto node = p_tree->find_descendant("CD");
528-
gamma_model_reconstruction gmr({ .5 });
533+
gamma_model_reconstruction gmr(*p_transcripts, { .5 });
529534
gmr._reconstructions["Family5"].reconstruction[node] = 7;
530535

531-
CHECK_EQ(7, gmr.get_internal_node_value(fam, node).most_likely_value);
536+
CHECK_EQ(7, gmr.get_internal_node_value(p_transcripts->at(0), node).most_likely_value);
532537

533538
}
539+
534540
TEST_CASE("Reconstruction: gamma_model_print_increases_decreases_by_clade")
535541
{
536542
unique_ptr<clade> p_tree(parse_newick("(A:1,B:3):7"));
537543

538-
ostringstream empty;
539-
540544
vector<double> multipliers({ .2, .75 });
541545
vector<double> em;
542-
gamma_model_reconstruction gmr(em);
543-
544-
gmr.print_increases_decreases_by_clade(empty, p_tree.get(), {}, true);
545-
CHECK_EQ(empty.str(), "#Taxon_ID\tIncrease\tDecrease\n");
546-
547-
gmr._reconstructions["myid"].reconstruction[p_tree->find_descendant("AB")] = 5;
548546

549547
gene_transcript gf("myid", "", "");
550548
gf.set_expression_value("A", 7);
551549
gf.set_expression_value("B", 2);
550+
transcript_vector transcripts{ gf };
551+
gamma_model_reconstruction gmr(transcripts, em);
552+
553+
gmr._reconstructions["myid"].reconstruction[p_tree->find_descendant("AB")] = 5;
552554

553555
ostringstream ost;
554-
gmr.print_increases_decreases_by_clade(ost, p_tree.get(), {gf}, true);
556+
gmr.print_increases_decreases_by_clade(ost, p_tree.get(), true);
555557
CHECK_STREAM_CONTAINS(ost, "#Taxon_ID\tIncrease\tDecrease");
556558
CHECK_STREAM_CONTAINS(ost, "A<1>\t1\t0");
557559
CHECK_STREAM_CONTAINS(ost, "B<2>\t0\t1");
558560
}
559561

562+
TEST_CASE("Reconstruction: gamma_model_print_increases_decreases_by_clade empty")
563+
{
564+
unique_ptr<clade> p_tree(parse_newick("(A:1,B:3):7"));
565+
566+
ostringstream empty;
567+
568+
vector<double> multipliers({ .2, .75 });
569+
vector<double> em;
570+
571+
transcript_vector transcripts;
572+
gamma_model_reconstruction gmr(transcripts, em);
573+
574+
gmr.print_increases_decreases_by_clade(empty, p_tree.get(), true);
575+
CHECK_EQ(empty.str(), "#Taxon_ID\tIncrease\tDecrease\n");
576+
}
577+
560578
TEST_CASE("gamma_model_prune_returns_false_if_saturated" * doctest::skip(true))
561579
{
562580
vector<gene_transcript> families(1);

0 commit comments

Comments
 (0)