rusty-needle
This rust programme is a toy programme to do a Needleman Wunch alignment[^1].
Vector of vectors uses N+1 separate allocations. One of the oldest tricks in programming is to replace array of same-size arrays with a single flat array of size WH, and index elements with XH+Y (or Y*W+X).
Class diagramme
classDiagram
Protein <-- Sequence
Dna <-- Sequence
class Sequence {
- get_sequence()
- set_sequence()
+ length()
+ reverse()
}
Usage
time ./target/release/rusty-needle -a "MGLLCSRSRHHTEDTDENAQAAEIERRIEQEAKAEKHIRKLLLLGAGESGKSTIFKQASSDKRKIIKLLFQTGFDEGELKSYVPVIHANVLLLGAYQTIKLLHDGTKEFAQNETDPAKYTLSSENMAIGEKLSEIGARLDYPRLTKDLAEGIETLWNDPAIQETCSRGNELQVPDCTKYLMENLKRLSDVNYIPTKEDVLYARVRTTGVVEIQFSPVGENKKSGEVYRLFDVGGQRNERRKWIHLFEGVTAVIFCAAISEYDQTLFEDEQKNRMMETKELFDWVLKQPCFEKTSIMLFLNKFDIFEKKVLDVPLNVCEWFRDYQPVSSGKQEIEHAYEFVKKKFEELYYQNTAPDRVDRVFKIYRTTALDQKLVKKTFKLVDETLRRRNLLEAGLLMGLLCSRSRHHTEDTDENAQAAEIERRIEQEAKAEKHIRKLLLLGAGESGKSTIFKQASSDKRKIIKLLFQTGFDEGELKSYVPVIHANVYQTIKLLHDGTKEFAQNETDPAKYTLSSENMAIGEKLSEIGARLDYPRLTKDLAEGIETLWNDPAIQETCSRGNELQVPDCTKYLMENLKRLSDVNYIPTKEDVLYARVRTTGVVEIQFSPVGENKKSGEVYRLFDVGGQRNERRKWIHLFEGVTAVIFCAAISEYDQTLFEDEQKNRMMETKELFDWVLKQPCFEKTSIMLFLNKFDIFEKKVLDVPLNVCEWFRDYQPVSSGKQEIEHAYEFVKKKFEELYYQNTAPDRVDRVFKIYRTTALDQKLVKKTFKLVDETLRRRNLLEAGLLMGLLCSRSRHHTEDTDENAQAAEIERRIEQEAKAEKHIRKLLLLGAGESGKSTIFKQASSDKRKIIKLLFQTGFDEGELKSYVPVIHANVYQTIKLLHDGTKEFAQNETDPAKYTLSSENMAIGEKLSEIGARLDYPRLTKDLAEGIETLWNDPAIQETCSRGNELQVPDCTKYLMENLKRLSDVNYIPTKEDVLYARVRTTGVVEIQFSPVGENKKSGEVYRLFDVGGQRNERRKWIHLFEGVTAVIFCAAISEYDQTLFEDEQKNRMMETKELFDWVLKQPCFEKTSIMLFLNKFDIFEKKVLDVPLNVCEWFRDYQPVSSGKQEIEHAYEFVKKKFEELYYQNTAPDRVDRVFKIYRTTALDQKLVKKTFKLVDETLRRRNLLEAGLL" -b "MGLLCSRSRHHTEDTDENAQAAEIERRIEQEAKAEKHIRKLLLLGAGESGKSTIFKQALLLGASSDKRKIIKLLFQTGFDLLLGAEGELKSYVLLLGAPVIHANLLLGAVYQTIKLLHDGTKEFAQNETDPAKYTLSSENMAIGEKLSEIGARLDYPRLTKDLAEGIETLWNDPAIQETCSRGNELQVPDCTKYLMENLKRLSDVNYIPTKEDVLYARVRTTGVVEIQFSPVGENKKSGEVYRLFDVGGQRNERRKWIHLFEGVTAVIFCAAISEYDQTLFEDEQKNRMMETKELFDWVLKQPCFEKTSIMLFLNKFDIFEKKVLDVPLNVCEWFRDYQPVSSGKQEIEHAYEFVKKKFEELYYQNTAPDRVDRVFKIYRTTALDQKLVKKTFKLVDETLRRRNLLEAGLMGLLCSRSRHHTEDTDENAQAAEIERRIEQEAKAEKHIRKLLLLGAGESGKSTIFKQASSDKRKIIKLLFQTGFDEGELKSYVPVIHANVYQTIKLLHDGTKEFAQNETDPAKYTLSSENMAIGEKLSEIGARLDYPRLTKDLAEGIETLWNDPAIQETCSRGNELQVPDCTKYLMENLKRLSDVNYIPTKEDVLYARVRTTGVVEIQFSPVGENKKSGEVYRLFDVGGQRNERRKWIHLFEGVTAVIFCAAISEYDQTLFEDEQKNRMMETKELFDWVLKQPCFEKTSIMLFLNKFDIFEKKVLDVPLNVCEWFRDYQPVSSGKQEIEHAYEFVKKKFEELYYQNTAPDRVDRVFKIYRTTALDQKLVKKTFKLVDETLRRRNLLEAGLMGLLCSRSRHHTEDTDENAQAAEIERRIEQEAKAEKHIRKLLLLGAGESGKSTIFKQASSDKRKIIKLLFQTGFDEGELKSYVPVIHANVYQTIKLLHDGTKEFAQNETDPAKYTLSSENMAIGEKLSEIGARLDYPRLTKDLAEGIETLWNDPAIQETCSRGNELQVPDCTKYLMENLKRLSDVNYIPTKEDVLYARVRTTGVVEIQFSPVGENKKSGEVYRLFDVGGQRNERRKWIHLFEGVTAVIFCAAISEYDQTLFEDEQKNRMMETKELFDWVLKQPCFEKTSIMLFLNKFDIFEKKVLDVPLNVCEWFRDYQPVSSGKQEIEHAYEFVETLRRRNLLEAKKKFEELYYQNTAPRTTALDQKLVKKTFKLVDETLRRRNLLEA" -g '-8' -e '-8' -h
Other
) $ time needle assets/simple1.fa assets/simple2.fa -endweight 8 -gapopen 10 -gapextend 0.5
Needleman-Wunsch global alignment of two sequences
real 0m0.026s
user 0m0.022s
sys 0m0.004s
sibbe@sibbe-ThinkPad-T15-Gen-2i ~/Documents/private/projects/programming-projects/rusty-needle (main) $ time ./target/release/rusty-needle -a "THISLINE" -b "ISALIGNED" -g '-8' -e '-8'
THISLINE-
ISALIGNED
real 0m0.007s
user 0m0.000s
sys 0m0.007s
sibbe@sibbe-ThinkPad-T15-Gen-2i ~/Documents/private/projects/programming-projects/rusty-needle (mai
sibbe@sibbe-ThinkPad-T15-Gen-2i ~/Documents/private/projects/programming-projects/rusty-needle (main) $
[^1] : http://rna.informatik.uni-freiburg.de/Teaching/index.jsp?toolName=Needleman-Wunsch