File: test_amplicon_search.cpp

package info (click to toggle)
ivar 1.4.4%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 4,348 kB
  • sloc: cpp: 5,892; javascript: 922; sh: 120; makefile: 48
file content (51 lines) | stat: -rwxr-xr-x 1,738 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <iostream>
#include <vector>

#include "../src/interval_tree.h"
#include "../src/primer_bed.h"
#include "../src/trim_primer_quality.h"

int test_amplicon_search(std::string bam_file, std::string bed_file,
                         std::string pair_info_file, int32_t primer_offset,
                         bool expected[]) {
  std::vector<primer> primers;
  IntervalTree amplicons;
  primers = populate_from_file(bed_file, primer_offset);
  std::cout << "Total Number of primers: " << primers.size() << std::endl;
  amplicons = populate_amplicons(pair_info_file, primers);
  samFile *in = hts_open(bam_file.c_str(), "r");
  sam_hdr_t *hdr = sam_hdr_read(in);
  bam1_t *aln = bam_init1();
  int cnt = 0;
  int res = 0;
  while (sam_read1(in, hdr, aln) >= 0) {
    res = amplicon_filter(amplicons, aln);
    if (res != expected[cnt]) {
      std::cout << "Amplicon filter output did not match " << bam_get_qname(aln)
                << " Expected " << expected[cnt] << " "
                << "Got " << res << std::endl;
      std::cout << "Read intervals: " << aln->core.pos << ":" << bam_endpos(aln)
                << std::endl;
      return -1;
    }
    cnt++;
  }
  return 0;
}

int main() {
  int success;
  std::string bam = "../data/test_amplicon.sorted.bam";
  std::string pair_indice = "../data/pair_info_2.tsv";
  int32_t primer_offset = 0;
  std::string bed = "../data/test_isize.bed";
  std::string prefix = "/tmp/data/trim_amplicon";
  std::string bam_out = "/tmp/trim_amplicon.bam";

  IntervalTree amplicons;
  bool expected[8] = {true, false, true, false, true, false, true, false};
  success =
      test_amplicon_search(bam, bed, pair_indice, primer_offset, expected);
  amplicons.inOrder();
  return success;
}