Open not-a-feature opened 5 months ago
All modified and coverable lines are covered by tests :white_check_mark:
Project coverage is 91.30%. Comparing base (
0b7e04d
) to head (9fd4538
).
:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.
This looks very cool @not-a-feature, thanks! I'll need a bit of time to digest, and I think it would probably help to have a call about it. @fbaumdicker - I assume you're involved here somewhere?
Yes, I am. @not-a-feature and I are incorporating a) mutation models representing gene presence-absence evolution, b) fixed clonal backbone phylogenies (this PR), and c) simulating gene transfer instead of conversion. A call would be great. Let's find a time in Slack.
As discussed loading the common ancestor events from a TreeSequence
file is now supported.
Currently it is only tested on well defined trees without gene conversion or recombination.
Either use the --ce-from-ts
option to provide a file path or Simulator(..., coalescent_events_ts)
and provide a TreeSequnce object directly.
It raises an error if it is used in combination with --ce-from-nwk
.
I was thinking more about providing this information as part of the initial state, rather than as something extrinsic. So, we provide the "backbone" of the simulation pre-done as some nodes and edges, and (importantly) these edges are not subsequently altered. Is this possible, or does that break the model?
This PR will add an option (
--ce-from-nwk
) to provide a tree in newick format that will be respected during simulation (hudson model).The aim is to make sure that the given tree is present and that regular simulation (gene conversion and recombination) is still possible. The main idea is that each segment has an origin set (in the beginning only the id of the leaf), which is passed through and merged with the origins of the other segment at each coalescence event. When a regular event occurs, the algorithm checks if the selected segment is needed later, if so, the event is ignored.
Changes:
The following structural changes will be made:
General
Tuple[float, set, set]
). Each tuple represents the time and two lineages to coalesce.Segment class
Population class
get_emerged_from_lineage
that returns the indices of the lineages that have emerged from a given one.Simulator class
alloc_segment
andcopy_segment
to use theorigin
attribute.hudson_simulate
.self.coalescent_events[0][0] < self.t
)is_blocked_ancestor
method to check if a lineage id is used in a later fixed coalescence event.common_ancestor_event
Example:
The command
will produce following tree:
Event though the first coalescence events (at Node 10-14) should happen at the same time (0.005), the events are slightly postponed as no two events can happen at the same time.
Todo / Open Tasks