Skip to content

Commit

Permalink
c++ lib started
Browse files Browse the repository at this point in the history
  • Loading branch information
andrewprzh committed Jan 31, 2024
1 parent 9f2bf59 commit d07c6c0
Show file tree
Hide file tree
Showing 3 changed files with 140 additions and 0 deletions.
43 changes: 43 additions & 0 deletions barcode_detection/cseqlib/cseqlib.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
#include<string>
#include<vector>
#include<iostream>



char rev_comp_arr[256] = {' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'T', ' ', 'G', ' ', ' ', ' ', 'C', ' ', ' ', ' ', ' ', ' ', ' ', 'N', ' ', ' ', ' ', ' ', ' ', 'A', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 't', ' ', 'g', ' ', ' ', ' ', 'c', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'a', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '};

extern "C" {

void rev_comp(const wchar_t* s, wchar_t* rc, int len) {
for (int i = len - 1; i >= 0; --i) {
int ri = len - 1 - i;
rc[ri] = rev_comp_arr[s[i]];
/// std::cout << char(s[i]) << " " << char(rc[ri]) << std::endl;
}
}

}

/*
int main() {
std::string test[8] = {
"GTGTACTTCGTTCAGTTACCAATTTGGGTGTTTAGCATGGTCATCGCCTACCGTGACAAGAAAGTTGTCGGTGTCTTTGTGTTTCTGTTGGTGCTGATATTGTGGGGGTTTTGAAAATGTCCTCGGCATAAAAGCGCCATTTTAATTTAAGAAAACGGGGAACTATGC",
"TCAGGATTGGATTTATATGACTGATCAGTTTCCTCTGCTGTTATCGAAAGCAGATATCAAATGGCTGTGGAGGAATGCAGGTGATTGGAGTTGGTCCAAAGGAAGTTGTGAGTTCTGGGAGAGGCAGAAGGAAAGCAGCTGCCATGTTCTGAAGGTTATCAGCACCTG",
"TTGGTGATAGAAACAGGCACAGAAGGTGTTAGCAGGTTCCTGTTTGTCCTCTCGCACCCCCTCCCTCCTGATGGTGACCTTGTCCCAGGTCTTCTACCAGGCCTTCTACCAGATGCCTTGCTGAGAATTCACAGAGGCCGTAGACCTGAAGAACCAACAACCTTCCAT",
"AGGCTTTGAGGTCCCACTCCGGCAGCAGGACGTGCTGGCTCCCAGGAATCACTGACATCAAGGCGTGTAAAATAACACAAAGAGGTTTGCAAAGTCCACAGCCCAAGAGGAGCCGGAGCGTCCTGTTTTTACCATCACGCTTCGTTGTTCACGTTGCTTGTGTGTGTA",
"AAACAGGGTACAATATTTAGAAACGGTGAAAGGAAATGACTGGCCTAAAACTCTTGTGATTCAGTGACTCAAGGATGATTGACACTGTGTAAAAACAGGCACATTAGACCAAGAGATAATTTGAAACCTTATTATTGGGTATTGTTTTTAAAAATTAAACCTATGGAC",
"ATGAATAAAATGAAAAACTTTATAAGCACAGCTTATTGAACTAAAGGGCCTTAAGACCATCACTTCCAACGGCCTCATTTTACAGGAGAGAAATCTGAGGACCAGGGAAACCAAGTGACTTTTCTGGGGTCACATGGAATGTCAACAGCAGAGCTGTGAAGGCGTTCA",
"GGTCTGCTAACCTCCCGGCTATGCTCATTCATGGAGAGTGCTTCGAAGAGTGTTTGCAACATTTAGTCACAGTTTATCTTTGGTTCCAATTCCACATTTACTCTATTTTTAATGTGTGTGAAAATGGCCCAGATTCATATGATTTGTTGCAGGTCAAACAGGTATTAG",
"AAAAACTGCCAAGCTTGCACCGCTTATGTATAGTTATTTGTTGTGTATGTGCAAGTGTTTGTATGTGTGTGAGCACATAAGCATAATCTCTTTACACACACACACACACACCATTCCTACATCAAAAAGCTCTGAAAATTAAACTTTTTCATAAATTTGTGACAAATT"};
int len = test[0].length();
for (int i = 0; i <= 1000000; ++i) {
char* rc = rev_comp(test[i % 8].c_str(), len);
delete rc;
}
return 0;
}
*/
24 changes: 24 additions & 0 deletions barcode_detection/cseqlib/test.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
from ctypes import cdll
lib = cdll.LoadLibrary('./cseqlib.so')
import ctypes


TEST_SEQ = [
"GTGTACTTCGTTCAGTTACCAATTTGGGTGTTTAGCATGGTCATCGCCTACCGTGACAAGAAAGTTGTCGGTGTCTTTGTGTTTCTGTTGGTGCTGATATTGTGGGGGTTTTGAAAATGTCCTCGGCATAAAAGCGCCATTTTAATTTAAGAAAACGGGGAACTATGC",
"TCAGGATTGGATTTATATGACTGATCAGTTTCCTCTGCTGTTATCGAAAGCAGATATCAAATGGCTGTGGAGGAATGCAGGTGATTGGAGTTGGTCCAAAGGAAGTTGTGAGTTCTGGGAGAGGCAGAAGGAAAGCAGCTGCCATGTTCTGAAGGTTATCAGCACCTG",
"TTGGTGATAGAAACAGGCACAGAAGGTGTTAGCAGGTTCCTGTTTGTCCTCTCGCACCCCCTCCCTCCTGATGGTGACCTTGTCCCAGGTCTTCTACCAGGCCTTCTACCAGATGCCTTGCTGAGAATTCACAGAGGCCGTAGACCTGAAGAACCAACAACCTTCCAT",
"AGGCTTTGAGGTCCCACTCCGGCAGCAGGACGTGCTGGCTCCCAGGAATCACTGACATCAAGGCGTGTAAAATAACACAAAGAGGTTTGCAAAGTCCACAGCCCAAGAGGAGCCGGAGCGTCCTGTTTTTACCATCACGCTTCGTTGTTCACGTTGCTTGTGTGTGTA",
"AAACAGGGTACAATATTTAGAAACGGTGAAAGGAAATGACTGGCCTAAAACTCTTGTGATTCAGTGACTCAAGGATGATTGACACTGTGTAAAAACAGGCACATTAGACCAAGAGATAATTTGAAACCTTATTATTGGGTATTGTTTTTAAAAATTAAACCTATGGAC",
"ATGAATAAAATGAAAAACTTTATAAGCACAGCTTATTGAACTAAAGGGCCTTAAGACCATCACTTCCAACGGCCTCATTTTACAGGAGAGAAATCTGAGGACCAGGGAAACCAAGTGACTTTTCTGGGGTCACATGGAATGTCAACAGCAGAGCTGTGAAGGCGTTCA",
"GGTCTGCTAACCTCCCGGCTATGCTCATTCATGGAGAGTGCTTCGAAGAGTGTTTGCAACATTTAGTCACAGTTTATCTTTGGTTCCAATTCCACATTTACTCTATTTTTAATGTGTGTGAAAATGGCCCAGATTCATATGATTTGTTGCAGGTCAAACAGGTATTAG",
"AAAAACTGCCAAGCTTGCACCGCTTATGTATAGTTATTTGTTGTGTATGTGCAAGTGTTTGTATGTGTGTGAGCACATAAGCATAATCTCTTTACACACACACACACACACCATTCCTACATCAAAAAGCTCTGAAAATTAAACTTTTTCATAAATTTGTGACAAATT"]



for i in range(1000000):
s = TEST_SEQ[i % 8]
slen = len(s)
rc = ctypes.create_unicode_buffer(slen)
lib.rev_comp(s, rc, slen)
if i == 1:
print(rc.value)
73 changes: 73 additions & 0 deletions misc/poly_perf.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
RCARR = [''] * 256
RCARR[ord('A')] = 'T'
RCARR[ord('T')] = 'A'
RCARR[ord('C')] = 'G'
RCARR[ord('G')] = 'C'
RCARR[ord('N')] = 'N'
RCARR[ord('a')] = 't'
RCARR[ord('t')] = 'a'
RCARR[ord('c')] = 'g'
RCARR[ord('g')] = 'c'
RCARR[ord('g')] = 'c'



RCDICT = {'A': 'T', 'T': 'A', 'G': 'C', 'C': 'G', 'N': 'N'}


def rc_func(c):
if c == 'A': return 'T'
elif c == 'T': return 'A'
elif c == 'C': return 'G'
elif c == 'G': return 'C'
return ""


def rev_comp_arr_map(seq):
return "".join(map(lambda x: RCARR[ord(x)], seq[::-1]))


def rev_comp_arr_for(seq):
res = ""
for i in range(len(seq) - 1, -1, -1):
res += RCARR[ord(seq[i])]
return res


def rev_comp_dict_map(seq):
return "".join(map(lambda x: RCDICT[x], seq[::-1]))


def rev_comp_dict_for(seq):
res = ""
for i in range(len(seq) - 1, -1, -1):
res += RCDICT[seq[i]]
return res


def rev_comp_func_map(seq):
return "".join(map(rc_func, seq[::-1]))


def rev_comp_func_for(seq):
res = ""
for i in range(len(seq) - 1, -1, -1):
res += rc_func(seq[i])
return res



TEST_SEQ = [
"GTGTACTTCGTTCAGTTACCAATTTGGGTGTTTAGCATGGTCATCGCCTACCGTGACAAGAAAGTTGTCGGTGTCTTTGTGTTTCTGTTGGTGCTGATATTGTGGGGGTTTTGAAAATGTCCTCGGCATAAAAGCGCCATTTTAATTTAAGAAAACGGGGAACTATGC",
"TCAGGATTGGATTTATATGACTGATCAGTTTCCTCTGCTGTTATCGAAAGCAGATATCAAATGGCTGTGGAGGAATGCAGGTGATTGGAGTTGGTCCAAAGGAAGTTGTGAGTTCTGGGAGAGGCAGAAGGAAAGCAGCTGCCATGTTCTGAAGGTTATCAGCACCTG",
"TTGGTGATAGAAACAGGCACAGAAGGTGTTAGCAGGTTCCTGTTTGTCCTCTCGCACCCCCTCCCTCCTGATGGTGACCTTGTCCCAGGTCTTCTACCAGGCCTTCTACCAGATGCCTTGCTGAGAATTCACAGAGGCCGTAGACCTGAAGAACCAACAACCTTCCAT",
"AGGCTTTGAGGTCCCACTCCGGCAGCAGGACGTGCTGGCTCCCAGGAATCACTGACATCAAGGCGTGTAAAATAACACAAAGAGGTTTGCAAAGTCCACAGCCCAAGAGGAGCCGGAGCGTCCTGTTTTTACCATCACGCTTCGTTGTTCACGTTGCTTGTGTGTGTA",
"AAACAGGGTACAATATTTAGAAACGGTGAAAGGAAATGACTGGCCTAAAACTCTTGTGATTCAGTGACTCAAGGATGATTGACACTGTGTAAAAACAGGCACATTAGACCAAGAGATAATTTGAAACCTTATTATTGGGTATTGTTTTTAAAAATTAAACCTATGGAC",
"ATGAATAAAATGAAAAACTTTATAAGCACAGCTTATTGAACTAAAGGGCCTTAAGACCATCACTTCCAACGGCCTCATTTTACAGGAGAGAAATCTGAGGACCAGGGAAACCAAGTGACTTTTCTGGGGTCACATGGAATGTCAACAGCAGAGCTGTGAAGGCGTTCA",
"GGTCTGCTAACCTCCCGGCTATGCTCATTCATGGAGAGTGCTTCGAAGAGTGTTTGCAACATTTAGTCACAGTTTATCTTTGGTTCCAATTCCACATTTACTCTATTTTTAATGTGTGTGAAAATGGCCCAGATTCATATGATTTGTTGCAGGTCAAACAGGTATTAG",
"AAAAACTGCCAAGCTTGCACCGCTTATGTATAGTTATTTGTTGTGTATGTGCAAGTGTTTGTATGTGTGTGAGCACATAAGCATAATCTCTTTACACACACACACACACACCATTCCTACATCAAAAAGCTCTGAAAATTAAACTTTTTCATAAATTTGTGACAAATT"]



for i in range(1000000):
s = rev_comp_dict_map(TEST_SEQ[i % 8])

0 comments on commit d07c6c0

Please sign in to comment.