@@ -40,21 +40,22 @@ class gamma_model_reconstruction : public reconstruction
4040 virtual void write_nexus_extensions (std::ostream& ost) override ;
4141
4242public:
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")
453454class Reconstruction
454455{
455456public:
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
472477TEST_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
491496TEST_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\t 0.3\t 0.9\t 1.4\t 2\t\n " );
498503 CHECK_STREAM_CONTAINS (ost, " Family5\t 0.01\t 0.03\0 .09\t 0.07" );
499504}
500505
501506TEST_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
525530TEST_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+
534540TEST_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\t Increase\t Decrease\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\t Increase\t Decrease" );
556558 CHECK_STREAM_CONTAINS (ost, " A<1>\t 1\t 0" );
557559 CHECK_STREAM_CONTAINS (ost, " B<2>\t 0\t 1" );
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\t Increase\t Decrease\n " );
576+ }
577+
560578TEST_CASE (" gamma_model_prune_returns_false_if_saturated" * doctest::skip (true ))
561579{
562580 vector<gene_transcript> families (1 );
0 commit comments