src/bamtally.c
a2a29ed4
 #include <stdlib.h>
 
b22faf0d
 #include <gstruct/bool.h>
 #include <gstruct/iit-read.h>
 #include <gstruct/genome.h>
 #include <gstruct/genomicpos.h>
 #include <gstruct/bamread.h>
 #include <gstruct/bamtally.h>
 
 #include "gmapR.h"
3f899953
 #include "iit.h"
86afb162
 #include "genome.h"
b22faf0d
 
 SEXP
 R_Bamtally_iit (SEXP bamreader_R, SEXP genome_dir_R, SEXP db_R,
4d5cc806
                 SEXP which_R, SEXP desired_read_group_R,
b22faf0d
                 SEXP alloclength_R,
                 SEXP minimum_mapq_R, SEXP good_unique_mapq_R,
                 SEXP maximum_nhits_R,
                 SEXP need_concordant_p_R, SEXP need_unique_p_R,
86afb162
                 SEXP need_primary_p_R, SEXP ignore_duplicates_p_R,
b22faf0d
                 SEXP min_depth_R, SEXP variant_strands_R,
                 SEXP ignore_query_Ns_p_R,
                 SEXP print_indels_p_R,
                 SEXP blocksize_R, 
c78be696
                 SEXP verbosep_R, SEXP max_softclip_R,
8418591e
                 SEXP genome_iit_file_R,
                 SEXP print_xs_scores_p_R, SEXP print_cycles_p_R,
685d60e3
                 SEXP minimum_quality_score_R, SEXP noncovered_R,
                 SEXP print_nm_scores_p_R)
b22faf0d
 {
   Bamreader_T bamreader = (Bamreader_T) R_ExternalPtrAddr(bamreader_R);
   const char *genome_dir =
     genome_dir_R == R_NilValue ? NULL : CHAR(asChar(genome_dir_R));
   const char *db = CHAR(asChar(db_R));
   int alloclength = asInteger(alloclength_R);
4d5cc806
   const char *desired_read_group =
     desired_read_group_R == R_NilValue ? NULL :
     CHAR(asChar(desired_read_group_R));
b22faf0d
   int minimum_mapq = asInteger(minimum_mapq_R);
   int good_unique_mapq = asInteger(good_unique_mapq_R);
   int maximum_nhits = asInteger(maximum_nhits_R);
   bool need_concordant_p = asLogical(need_concordant_p_R);
   bool need_unique_p = asLogical(need_unique_p_R);
   bool need_primary_p = asLogical(need_primary_p_R);
86afb162
   bool ignore_duplicates_p = asLogical(ignore_duplicates_p_R);
b22faf0d
   int min_depth = asInteger(min_depth_R);
   int variant_strands = asInteger(variant_strands_R);
   bool ignore_query_Ns_p = asLogical(ignore_query_Ns_p_R);
   bool print_indels_p = asLogical(print_indels_p_R);
   int blocksize = asInteger(blocksize_R);
   int verbosep = asLogical(verbosep_R);
17db5e75
   int max_softclip = asInteger(max_softclip_R);
8418591e
   bool print_xs_scores_p = asLogical(print_xs_scores_p_R);
   bool print_cycles_p = asLogical(print_cycles_p_R);
   int minimum_quality_score = asInteger(minimum_quality_score_R);
   bool noncovered_p = asLogical(noncovered_R);
685d60e3
   bool print_nm_scores_p = asLogical(print_nm_scores_p_R);
86afb162
 
   Genome_T genome = createGenome(genome_dir, db);
   IIT_T chromosome_iit = readChromosomeIIT(genome_dir, db);
8418591e
   IIT_T map_iit = genome_iit_file_R == R_NilValue ? NULL :
     IIT_read((char*)CHAR(asChar(genome_iit_file_R)), /*name*/ NULL,
              /*readonlyp*/true, /*divread*/READ_ALL, /*divstring*/NULL,
              /*add_iit_p*/false, /*labels_read_p*/true);
b22faf0d
   const char *chr = NULL;
   Genomicpos_T start = 0;
   Genomicpos_T end = 0;
 
   if (which_R != R_NilValue) {
     chr = CHAR(asChar(VECTOR_ELT(which_R, 0)));
     start = asInteger(VECTOR_ELT(which_R, 1));
     end = asInteger(VECTOR_ELT(which_R, 2));
   }
 
4d5cc806
   IIT_T tally_iit = Bamtally_iit(bamreader, (char *)chr, 
                                  /* TODO: bam_lacks_chr */ NULL,
                                  start, end,
c78be696
                                  genome,
8418591e
                                  chromosome_iit,
                                  map_iit,
                                  alloclength,
                                  (char *)desired_read_group,
4d5cc806
                                  minimum_mapq, good_unique_mapq,
8418591e
                                  minimum_quality_score,
b22faf0d
                                  maximum_nhits, need_concordant_p,
                                  need_unique_p, need_primary_p,
86afb162
                                  ignore_duplicates_p,
b22faf0d
                                  min_depth, variant_strands, ignore_query_Ns_p,
3a231c30
                                  print_indels_p, blocksize, verbosep,
f5e63d36
                                  /*readlevel_p*/false, max_softclip,
8418591e
                                  print_cycles_p,
685d60e3
                                  print_nm_scores_p,
8418591e
                                  print_xs_scores_p, noncovered_p);
b22faf0d
   IIT_free(&chromosome_iit);
   Genome_free(&genome);
cfb01d1f
   if(map_iit != NULL)
     IIT_free(&map_iit);
b22faf0d
   if (tally_iit == NULL) {
     error("Could not create tally\n");
   }
 
3f899953
   return R_IIT_new(tally_iit);
b22faf0d
 }