/* * inc/Sam_view.h * * Copyright (c) 2011-2013 BGI-Shenzhen . * * This file is part of SOAPdenovo-Trans. * * SOAPdenovo-Trans is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * SOAPdenovo-Trans is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with SOAPdenovo-Trans. If not, see . * */ #ifndef SAM_VIEW_H #define SAM_VIEW_H static int g_min_mapQ = 0, g_flag_on = 0, g_flag_off = 0; static char *g_library, *g_rg; static int g_sol2sanger_tbl[128]; static void sol2sanger(bam1_t *b) { int l; uint8_t *qual = bam1_qual(b); if (g_sol2sanger_tbl[30] == 0) { for (l = 0; l != 128; ++l) { g_sol2sanger_tbl[l] = (int)(10.0 * log(1.0 + pow(10.0, (l - 64 + 33) / 10.0)) / log(10.0) + .499); if (g_sol2sanger_tbl[l] >= 93) g_sol2sanger_tbl[l] = 93; } } for (l = 0; l < b->core.l_qseq; ++l) { int q = qual[l]; if (q > 127) q = 127; qual[l] = g_sol2sanger_tbl[q]; } } static inline int __g_skip_aln(const bam_header_t *h, const bam1_t *b) { if (b->core.qual < g_min_mapQ || ((b->core.flag & g_flag_on) != g_flag_on) || (b->core.flag & g_flag_off)) return 1; if (g_rg) { uint8_t *s = bam_aux_get(b, "RG"); if (s && strcmp(g_rg, (char*)(s + 1)) == 0) return 0; } if (g_library) { const char *p = bam_get_library((bam_header_t*)h, b); return (p && strcmp(p, g_library) == 0)? 0 : 1; } return 0; } #endif