New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
POA index out of bounds #549
Comments
To add to this, running my code for many more loci, I see this happening more often:
|
Is it possible to provide the graph of any of these?
|
Certainly! I ran my tool single-threaded, and after 105 successful POAs, the panic happened. You can find a graph here: Feel free to let me know if there is anything else I can give you to help debug this. |
There is a cycle in the graph, which seems to be where the problem is coming from, |
Yes, but after rerunning the code to get the sequences too, it crashes on a different locus. Presumably the cause is the same... You can find the sequences and graph here: My code: let mut seqs_bytes = vec![];
for seq in seqs.iter() {
seqs_bytes.push(seq.to_string().bytes().collect::<Vec<u8>>());
}
let scoring = Scoring::new(-12, -6, |a: u8, b: u8| if a == b { 3 } else { -4 });
let mut aligner = Aligner::new(scoring, &seqs_bytes[0]);
for seq in seqs_bytes.iter().skip(1) {
aligner.global_banded(seq, 20).add_to_graph();
}
let consensus = aligner.consensus(); |
I tested this with latest rust bio and it ran without crashing. |
Yes indeed, but after updating I ran into a new error:
This was caused by the sequences below:
I was also able to reproduce this in a test outside of my application, with the sequences pasted above. |
It's not a complete fix, I ran into some bugs while testing. I need to debug them and update the fix. Thank you for pointing out the errors. |
Hi @lorewar2, do you have further ideas on how to fix those bugs? Is there anything I can do to help, or should I look for an alternative? |
Hi, |
Thanks for the suggestion, but I would prefer to have it in Rust to use it within a Rust tool. I am not familiar with creating bindings for things like that. |
I made a fix for the poa, hopefully it will work correctly now. |
Hi, Thanks for that, but I am afraid I still found a case that fails: let seqs = vec![
"TCTTTCTTTCTTTCTTTCCTTTCCTTTCCTTTCCTTTCCTTCCTTTCCTTCCTTCCTTCCTTCCTTCCTTCCTCCCTCACTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCCCTCTCCCTCTCCCTCTCCCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCCCTCCCTCTCCCTCTCTCTCTCTCTCTCCCTCTCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCTCTCCTCTCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCTCTCCTCTCCTCTCTCTCCTCTCCTCTCCTCTCCCTCTCCCTCTCCTCTCCCTCTCCCTCTCCTGCTCCCTCTCCTCTCCCTCTCCCTCCTCCTCCCTCTCCTCTCCCTCCCTCCTTTCTCCCTCTCTCCCTCTCCCTCTCCCTCTCCCCTCTCCTCTCCTCTCCCTCTCCCTCTCCCCTCTCCCTCTCCCTCCTCCCTCTCCTCTCCCTCTCCCTCTCCTCCTCCCTCTCCCTCTCCCTCTCTCCCTCTCCCTCTCCCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCCTCTCCCTCTCCCCTCTCCTCTCCTCTCCCCCTCTCCTCTCCTCTCCCTCTCCCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTTTCTTTCTTT".to_string(),
"TTCTTTCCTTCCTTTCCTTTCTTTCCTTTCCTTCCTTCCTTTCCTTCCTTCCTTCCTTCCTTCCTTCCTCCCTCCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCCCTCTCCCTCTCCCTCTCCCTCCCTCTCCCTCTCTCCCTCTCCCTCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCTCTCTCTCTCTCTCTCTCTCCCTCTCCCTCCCTCTCTCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCTCTCTCTCTCTCTCCCTCCTCTCCCTCTCCCTCTCCCTCTCTCCCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCCCTCTCCCTCTCCCTCCCTCTCCCTCCCTCTCCCTCTCCCTCTCCCTCTCTCCCTCTCCCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCCCTCCCTCCCTCCCTCTCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCTCCCTCCTCCCTCTCTCTCTCTCCCTCTCCCTCCCTCTCCCTCTCCCTCTCCCTCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTTTCTTTCTTTCTTTCTTCCC".to_string(),
"CTTTTCTTTCCTTTCCTTTCCTTTCCTTTCCTTTCCTTCCTTTCCTTCCTTCCTTCCTTCCTTCCTTCCCTCCCTCCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCCTTTCTCCTCTCCCTCCCTCCCTCTCCCTCTCCCCCCTCCCTCTCCCTCCCTCTCCCTCTCTCCCTCTCTCTCCCTCCTCCTCTCCTCCCTCCCTCCTCTCCTCTCCCTCCTCCTCTCCTCTCCTCTCTCCTCCTCTCCCTCTCCTCTCCTCCCTCCTCTCCTCCTCCCTCTCCTCTCCTCCTCTCCTCTCCTCTCCTCTCCTCCTCTCCTCTCTCCCTCCTCTCCTCCCTCCTCCCTCCCTCCTCCTCTTCCCTCCTCTCCTCCTCCTCCTCCTCTCCTCTCCTCCTCCTCCCTCCCTCCTCTTCCTCTCTCCCTCTCCTTCTCCCTCTCTCTCCCTCCCTCCTCTCCTCCTCTCCCTCTCCTCCTCTCCCTCTCCTCTCCTCCTCCTCTCCTCTCCTCTCCTCTCCTCTCCTCTCCCTCTCCCTCTCCCTCTCCCTCCCTCCCTCTCCCTCTCCCTCTCTCTCCCTCCCTCTCCCTCCCTCTCCTCTCTCTCTCTCTCTTCTTTTTCTTTCTTTCCTCG".to_string(),
"TCTTTCTTTCTTTCTTTTCCTTTCCTTTCCTTTCCTTTCCTTTCCTTCCTTTCCTTCCTTCCTTCCTTCCTTCCTTCCTCCCTCCCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCCCTCTCCCTCTCCCTCTCCCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCCCTCTCCCTCTCCCTCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCTCTCCCTCTCCCTCTCTCCCTCTCCCTCTCCCTCTCCCTCTCTCTCTCCCTCTCCCTCTCCCTCTCCCTCTCTCTCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCTCTCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCTCTCTCCCTCCCTCCCTCTCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCTCCCTCCCTCTCTCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTTTCTTTCTTT".to_string(),
"TCTTTCTTTCCTTTCCTTTCCTTTCTTTCTCCTTCCTTCCTTCCTTCCTTCCTTCCTTCCTTCCTCCCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCCCTCTCCCTCTCCCTCTCCCTCCCTCTCCCTCCCTCTCCCTCTCCCTCTCCCTCTCTCCCTCTCCCTCTCCCTCTCCCTCCTCTCCCTCTCCTCTCCCTCTCTCTCTCCCTCTCCCTCTCCCTCCCTTCCTCCCTCTCCTCCTCCCTCTCTCTCCTCTCCCTCTCTCTCTCTCCCTCTCCCTCTCCCTCTCTCTCTCTCCCCTCTCCCTCTCCCTCCTCCCTCTCCCTCTCCTTCTCTCTCCCTCTCCTCTCCCTCTCCCTCTCCCCTCCCTCTCCCTCTCCCTCTCCCTTCTCCCTCCTCTTCTCCTCTCCTCTCCTCTCCTCTCCCTCCTCCTCTCCTCCTCTCCTCTCCCTCTCCTCTCCCTCTCCCTCTCCTCTCCCCTCTCCTCTCCCTCTCCCTCTCCCTCTCCTCTCCCTCTCCCTCTCCTCTCCCTCTCCTCTCCTCTCCCTCTCCCTCTCCCTCCTCCCTCTCCCTCTCCTCCCTCTCCCTCCTCCCTCTCCCTCTCCTCCTCCCTCCCTCCCTCCCTCTCCCCTCTCCCTCTCCCTCCCTCCCTCTCCTCTCCCTCTCCTCTCCTCTCCTCCTCCCTCTCCCTCCCTCCCTCTCTCCCTCTCTCTCTCTCTCTCTCTCTTTCTTTCTTTCTTTTTC".to_string(),
"TCTTTCTTTCTTTCTTTCCTTTCCTTTCCTTTCTTTCCTTTCCTTCCTTTCCTTCCTTCCTTCCTTCCTTCCTTCCTCCCTCCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCCCTCTCCCTCTCCCTCTCCCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCCCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCTCTCCCTCTCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCCTCTCCTCTCCCTCTCCCTCTCCCTCTCCTCTCCCCTCTCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCTCTCCTCTCCTCTCCTCTCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTTTCTTTCTTT".to_string(),
"TCTTTCTTTCTTTCTTTCCTTTCCTTTCCTTTCCTTTCCTTTCCTTCCTTTTCCTTCCTTCCTTCCTTCCTTCCTTCCTCCCTCCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCCCTCTCCCTCTCCTCTCCCTCCCTCTCCCTCTCCCTCTCCCTCCTCCCTCTCCCTCTCCCTCTCCCTCTCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCCCTCTCCCTCTCCCTCTCCCTCTCCTCTCTCTCCCTCTCCCTCTCCCTCTTTCCCTCTCCCTCTCCCTCTCCCCTCTCCCTCTCCCTCTCCCTCCCTCTCCCTCCCTCTCCCTCTCCCTCCTCTCTCTCCCTCTCCCTCCTCCCTCTCCTCCTCCTCTCCCTTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTTCTCCCTCTCCCTCCTCTCCCTCTCCCTCTCTCTCCCTCTCCTCTCCCTCCCTCCCTTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCTCTCCCTCCCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCTCTCCTCTCCCTCTCCCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTTTCTTTCTTT".to_string(),
"TCTTCCTTTTCCTTCTTTCCTTTTCCTTTTCCTTCCTTCCTTCCTCCTTCCTTCCTTCCTTCCTCCCTCCCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCCCTCCCTCCCTCCCTCTCCCTCCCTTCTCCCTCTCCCTTCTTCCTTCCTTTTCTTCCTTTTTCTTCCTTCTTTCCTTCTTCCTTTCTTCTTTCTTTCCTTTCCTTTCTTTCTTTCTTTCTTCTTTTTCTTCTTTCTTTCTTTTTTCTTTCTTTCTTCCTTTTTTCTTTCTTTTTCTTTCCTTTTTCTTCTTTTTCTTTCTTTCTTTCTTCTTTTCTTTCTTTCTTTCTTTCTTTCCTTTTTCTTCCTTTCTTTCTTTCCTTTTTCTTTCTTTCTTCCTTCTTTCTTTCTTTCTTTCTTTTTCTTTCCTTCCTTTTCTTTCTTTCTTTCTTTCTTTCTTTCCTTTTTCTTCTTTCCTTCTCTCTTTTCTTCCTTTTTCCTTTCTTTCCTTCTTTTTCTTTCCTTTCTTTTTCTTCCTTTCTCTCTTTTTCTTTCTTTCCTTTTCTTTCCTTTCTCTCTTTCTTCCTTTTTCTTCCTTTTCTTTCTTCTTCTTTCTTTCCTTTTCTTTCCTTTCTTTCCTTTTTCTTCCTTTTCTTTCTTTCTTTCTTTCTTCCTTCTTTCTTTCCTTTCTTTCTTTCTTCTTTCTTTCCTTTCTTTCTTTCCTTTTTCTTCTTTCCTTCTTCTTTCCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTTTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCCCTCTCCCTCTCCCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTTTCTTCTTTCTTTCTTTCCTG".to_string(),
"TCTTTCTTTCTTTCTTTGCTTTCCTTTCTTTCCTTTCCTTTCCTTTCCTTCCTTCCTTCTTCCTTCCTTCCCTTCCTCCCTCCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCCCTCTCCCTCTCCCTCTCCCTCCCTCTCCCTCTCCCTCTCCCTCTCTCTCCCTCTCTCTGCCTCTCCCTCTCCCTCTCCCTCTCCTCTCCCTCTCCCTCCCTCCCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCTCTCCCTCCCTCCCTCTCTCTCCTCTCCCTCACCCTCTCCCTCTCCCTCTCCCTCTCCTCTCCCTCTCCCTCTCCTCTCCCTCCCTCTCCCCTCCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCTCTCCCTCTCCCTCTCCCTCTCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCTCTCCCTCTCCCTCTCCCCTCCTCCTCCCTCTCCTCTCCCTCTCCCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCTCTCCCTCTCCCTCTCCCTCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCCTCCCTCTCCCTCTCCCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTTTCTTTCTTT".to_string(),
"TCTTTCTTTCTTTCTTTCCTTTCCTTTCCTTTCCTTTCCTTTCCTTCCTTTCCTTCCTTCCTTCCTTCCTTCCTTCCTCCCTCCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCCCCTCTCCCTCTCCTCCTCCTCCTCTCCTCTCCTCTCCCTCTCCTCTCCTCTCCCTCTCTCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCCTCTCCCTCTCCTCTCCCTCTCCTCTCCTCTCCCTCTCCTCCTCTCCCTCTCCTCTCCCTCTCCTCTCCCCTCTCCTCTCCCTCTCCCTCTCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCTCTCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCTCTCCCTCTCCCCTCTCCCTCTCCCTCTCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCTCTCCTCTCCTCTCCTCTCCCTCTCCTCTCCCTCTCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCCCTCTCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTTTCTTTCTTT".to_string(),
"TCTTTCTTTTCTTTCTTTCCTTTCCTTTCCTTTCTTTCCTTTCCTTCCTTTCCTTCCTTCCTTCCTTCCTTCCTTCCTCCCTCCCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCCCTCTCCCTCTCCCTCCCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCTCCCTCTCCCTCTCTCCCTCTCCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCTCCCTCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCTCTCCCTCTCCCTCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCTCCCTCTCCTCTCTCCCTCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCTCCCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCTCTCTCTCTCCCTCTCCCTCTCCCTCTCCCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTTTCTTTTTCTTT".to_string(),
"TCTTTCTTTCTTTCTGCTTTCCTTTCCTTTCCTTTCCTTTCCTTTCCTTCCTTTCCTTCCTTCCTTCCTTCCTTCCTTCCTCCCTCCTCTCTCTCTCTCTCTCTCTCTCTCTTTCCTCCTCCCTCCCTCCCTCCCTCTCCCTCCCTCTCCCTCCTCCCTCTCCCTCTCCCTCCTCTCCCTCCCTCCCTCTCCCTCCCTCTCCCTCTCCCTCTCTCCCTCTCCTCTCCTCTCCCTCTCCCTCTCCTCTCCCTCCTCCCTCTCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCTCTCCCTCTCTCCCACCTCTCCCTCTCCCTCTCCCTCCCTCCCTCTCCTCTCCCTCTCCCTCCCTCCTCCCTCTCCCTCTCCCTCTCCCTCTCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCTCTCCTCTCCCCCTCTCCCTCTCCCTCTCCCTCCTCCCTCTCCCCTCTCCCCCACCCCTCTCCCCTCTCCCTCCCTCTCCCTCTCCCCTCTCCCTCTCCCTCTCCCTACTCCCTCCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCTCCCTCTCCCTCTCCCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTTTCTTTCTTT".to_string(),
"TCTTTCTTTCTTTCTTTCCTTCCTTTCCTTTTCCTTTCCTTTCCTTCCTTTCCTTCCTTCCTTCCTTCCTTCCTTCCTCCCTCCCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCCCTCTCCCTCCCTCTCTCCCTCCCTCTCCCTCTCTCCCTCCCTCTCCCTCTCCCTCTCCCTCTCTCTCTCCCTCCCTCTCCCTCTCCCTCTCTCTCCCTCCCTCTCCCTCCCTCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCTCCCTCCCTCTCCCTCTCCCTCTCTCCCTCTCCCTCTCCCTCTCCCTCTCTCCCTCTCCCTCCCTCTCCCTCTCCCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCTCCCTCTCCCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCCCTCTCCCTCTCTCTCTCTCTCTCCCTCTCCCTCTCTCCCTCCCTCCCTCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCCTCTCCCTCTCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTTTCTTTCTTT".to_string(),
"TCTTTCTTTCTTTCTTTCCTTTCCTTTCCTTTCCTTTCCTTTCCTTCCTTTCCTTCCTTCCTTCCTTCCTTCCTCCCTCCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCCCTCTCCCTCTCCCTCTCCCTCCCTCTCCCTCTCCCTCCTCTCCCTCTCCCTCTCCCTCTCCCTCCTCTCCTCTCCTCTCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCTTCTCCTCTCCTCTCCCTCTCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCCCCTCTCCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCTCTCCCTCTCCCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCTCCCTCTCCCTCCTCTCCCTCTCCCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTTTCTTTCTTT".to_string(),
"CTTTCTTTCTTTCTTTCTTTCCTTTCCTTTCCTTTCCTTTCCTTCCTTTCCTTCCTTCCTTCCTTCCTTCCTTCCTCCCTCCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCCCTCTCCCTCTCCCTCTCCCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCCCTCCTCTCCCTCCTCCTCTCCCTCTCCCTCTCCCTCTCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCTCTCCCTCTCCCTCTCCCTCCTCCCTCCCTCCCTCTCCCTCTCCCTCCTCCCTCTCCTCTCCTCTCCCTCTCCCTCTTTCCCTCTCCTCTCCCTCTCCTCTCCCTCTCCCCTCTCCCTCTCCTCTCCTCTCCCTCTCCTCTCCTCTCCCTCTCCTCTCCCTCTCCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCTCCCTCCCTCTCCTCTCCCTCTCCCTCTCCTCTCCCTCTCCTCTCCCTCTCCCTCTCCCCTCTCCCTCTCCCCTCTCCCTCTCCTCTCCTCTCCCTCTCCCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTTTCTTTCTTTTCTTTC".to_string(),
];
let mut seqs_bytes = vec![];
for seq in seqs.iter() {
seqs_bytes.push(seq.to_string().bytes().collect::<Vec<u8>>());
}
// I empirically determined the following parameters to be suitable,
// but further testing on other repeats would be good
// mainly have to make sure the consensus does not get longer than the individual insertions
let scoring = Scoring::new(-12, -6, |a: u8, b: u8| if a == b { 3 } else { -4 });
let mut aligner = Aligner::new(scoring, &seqs_bytes[0]);
for seq in seqs_bytes.iter().skip(1) {
aligner.global_banded(seq, 20).add_to_graph();
}
let consensus = aligner.consensus();
let score = aligner.global_banded(&consensus, 20).alignment().score;
println!("Consensus: {}", std::str::from_utf8(&consensus).unwrap());
println!("Consensus score: {}", score); resulting in |
Hi, |
Bingo! unbanded poa is doing fine. Thank you! Side note, I see the alignment score |
I am afraid I found another one: fn test_consensus_4() {
let seqs = vec![
"TTTCTTTCTTTCTTTCTTTCTT".to_string(),
"TTTCTTTCTTTCTTTCTTTCTTTCTTTTTTTT".to_string(),
"TTTCTTTCTTTCTTTCTTTCTTTCTTTTT".to_string(),
"TTTCTTTCTTTCTTTCTTTCTT".to_string(),
"TTTCTTTCTTTCTTTCTTTCTTTCTTT".to_string(),
"ACTTCTTTCTTTCTTTCTTTCTTTCTTTT".to_string(),
"TTTCTTTCTTTTCTTTCTTTCTTTCTT".to_string(),
"TTTTCTTTCTTTCTTTCTTTCTTTCTTTT".to_string(),
"TTTCTTTTCTTTCTTTCTTTCTTTCTTTTT".to_string(),
"TTTCTTTCTTTTCTTTCTTTCTTTCTTT".to_string(),
"TTTCTTTCTTTCTTTCTTTCTTTCT".to_string(),
"TTTCTTTCTTTCTTTCTTTCTTTCTTTT".to_string(),
"CTCTCTTTCTTTTCTTTCTTTCTTTTTCTTT".to_string(),
"TTTCTTTCTTTCTTTCTTTCTT".to_string(),
"TTTCTTTCTTTCTTTCTTTTCTTTCTTTT".to_string(),
"TCGTTTCTTTCTTTCTTTCTTTCTTTCTTT".to_string(),
"TTCTTTCTTTCTTTCTTTTTTTTTC".to_string(),
"TTTCTTTCTTTCTTTCTTTCTTTCTT".to_string(),
"TTTCTTTCTTTTTTTTCTTTCTTTCTTTCTTTT".to_string(),
"TTTCTTTCTTTCTTTCTTTCTTTCTTTTT".to_string()];
let mut seqs_bytes = vec![];
for seq in seqs.iter() {
seqs_bytes.push(seq.to_string().bytes().collect::<Vec<u8>>());
}
// I empirically determined the following parameters to be suitable,
// but further testing on other repeats would be good
// mainly have to make sure the consensus does not get longer than the individual insertions
let scoring = Scoring::new(-12, -6, |a: u8, b: u8| if a == b { 3 } else { -4 });
let mut aligner = Aligner::new(scoring, &seqs_bytes[0]);
for seq in seqs_bytes.iter().skip(1) {
aligner.global(seq).add_to_graph();
}
let consensus = aligner.consensus();
let score = aligner.global(&consensus).alignment().score;
println!("Consensus: {}", std::str::from_utf8(&consensus).unwrap());
println!("Consensus score: {}", score);
} resulting in
|
This code ran without panic on my machine, |
Everything seems fine now! |
I am very sorry, but I just found another example that results into an error: #[test]
fn test_consensus_5(){
let seqs = vec!["TATATATATATAAACATATATTATATATATAAAATATAACATATATAAACATATATATTATATATATA".to_string(),
"TATATATATATAAACATATATTATATATGTAATATAAACATATATAAACATATATTATATATA".to_string(),
"TATATATATATAAACATATATTATATATAATATAAACATATATAAACATATATTATATATATA".to_string(),
"TATATATATATAAACATATATTATATATGTAATATAAACATATATAAACATATATTATATATATA".to_string(),
"ATATATATAAACATATATTATATATGTAATATAAATATATATAAACATATATTTATATATATA".to_string(),
"TATATATATATAAACATATATTATATATGTAATATAAACATATATGTATACATATATATACA".to_string(),
"TATATATATATAAACATATATTATATATGTAATATAAATATATATAAACATATATTATATATATA".to_string(),
"TATATATATATAAACATATATTATATATGTAATATAAACATATATAAACATATATTATATATATA".to_string(),
"TATATATTTATAAACATATATTATGTATGTAATATAAACATATATAAACATATATTATATATA".to_string(),
"TATATATATATAAACATATATTATATATATATAAACATATATAAACATATATTATATATATA".to_string(),
"TATATATATATAAACATATATTCTATATATGTAATATAAACATATATAAACATATATTATCTATATA".to_string(),
"TATATATATATAAACATATATTATATATAATATAAACATATAAACATATATTATATATATA".to_string(),
"TATATATATATAAACATATATTATATATGTAATATAAACATATATAAACATATATTATATATATA".to_string(),
"TATATATATATAAACATATATTATATATGTAATATGTTTTCTATATGTTGCTATATTATACAACATA".to_string(),
"ATATATATATATAAACATATATTATATATGTAATATAAACATATATAAACATATATTATATATATATA".to_string(),
"TATATATATATAAACATATATTATATATGTAATATAACATATATAAACATATATTATATATATA".to_string(),
];
let mut seqs_bytes = vec![];
for seq in seqs.iter() {
seqs_bytes.push(seq.to_string().bytes().collect::<Vec<u8>>());
}
let scoring = Scoring::new(-12, -6, |a: u8, b: u8| if a == b { 3 } else { -4 });
let mut aligner = Aligner::new(scoring, &seqs_bytes[0]);
for seq in seqs_bytes.iter().skip(1) {
aligner.global(seq).add_to_graph();
}
let consensus = aligner.consensus();
let score = aligner.global(&consensus).alignment().score;
println!("Consensus: {}", std::str::from_utf8(&consensus).unwrap());
println!("Consensus score: {}", score);
} Results in
|
@wdecoster i made a fix for this reverse edge issue, could you test it out if possible? thanks. fix |
Thank you! Will do, but I will need some days, I am away for the weekend. |
There's no rush, thank you for your help. |
hi @lorewar2, this fixes the tests that used to fail and has (so far) not run into another error when testing more loci. So it seems to be fixed! Thank you! |
Great, thanks a lot. I think we can close this issue once the pull request gets merged. |
Hi,
I ran into the panic below while creating a consensus from poa:
thread '<unnamed>' panicked at 'index out of bounds: the len is 478 but the index is 478', /home/wdecoster/.cargo/registry/src/index.crates.io-6f17d22bba15001f/bio-1.3.1/src/alignment/poa.rs:339:28
That corresponds to https://github.com/rust-bio/rust-bio/blob/master/src/alignment/poa.rs#L339
I don't have much to help you reproduce the error, as random downsampling was used to limit the number of sequences for POA, and with a different random sampling the panic was not reproduced.
The text was updated successfully, but these errors were encountered: