yat/omic/BamReadFilter.h

Code
Comments
Other
Rev Date Author Line
2994 10 Mar 13 peter 1 #ifndef theplu_yat_omic_bam_read_filter
2994 10 Mar 13 peter 2 #define theplu_yat_omic_bam_read_filter
2994 10 Mar 13 peter 3
2994 10 Mar 13 peter 4 // $Id$
2994 10 Mar 13 peter 5
2994 10 Mar 13 peter 6 /*
4359 23 Aug 23 peter 7   Copyright (C) 2013, 2014, 2018, 2020, 2023 Peter Johansson
2994 10 Mar 13 peter 8
2994 10 Mar 13 peter 9   This file is part of the yat library, http://dev.thep.lu.se/yat
2994 10 Mar 13 peter 10
2994 10 Mar 13 peter 11   The yat library is free software; you can redistribute it and/or
2994 10 Mar 13 peter 12   modify it under the terms of the GNU General Public License as
2994 10 Mar 13 peter 13   published by the Free Software Foundation; either version 3 of the
2994 10 Mar 13 peter 14   License, or (at your option) any later version.
2994 10 Mar 13 peter 15
2994 10 Mar 13 peter 16   The yat library is distributed in the hope that it will be useful,
2994 10 Mar 13 peter 17   but WITHOUT ANY WARRANTY; without even the implied warranty of
2994 10 Mar 13 peter 18   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
2994 10 Mar 13 peter 19   General Public License for more details.
2994 10 Mar 13 peter 20
2994 10 Mar 13 peter 21   You should have received a copy of the GNU General Public License
3752 17 Oct 18 peter 22   along with yat. If not, see <http://www.gnu.org/licenses/>.
2994 10 Mar 13 peter 23 */
2994 10 Mar 13 peter 24
3883 24 Mar 20 peter 25 #include <htslib/sam.h>
2994 10 Mar 13 peter 26
3081 18 Sep 13 peter 27 #include <functional>
3081 18 Sep 13 peter 28
3363 25 Nov 14 peter 29 // this flag was defined in bam.h but has disappeared in htslib
3353 22 Nov 14 peter 30 #ifndef BAM_DEF_MASK
3353 22 Nov 14 peter 31 #define BAM_DEF_MASK (BAM_FUNMAP | BAM_FSECONDARY | BAM_FQCFAIL | BAM_FDUP)
3353 22 Nov 14 peter 32 #endif
3353 22 Nov 14 peter 33
2994 10 Mar 13 peter 34 namespace theplu {
2994 10 Mar 13 peter 35 namespace yat {
2994 10 Mar 13 peter 36 namespace omic {
2994 10 Mar 13 peter 37
2994 10 Mar 13 peter 38   class BamRead;
2994 10 Mar 13 peter 39
2994 10 Mar 13 peter 40   /**
2994 10 Mar 13 peter 41      \brief Filter bam reads
2994 10 Mar 13 peter 42
2994 10 Mar 13 peter 43      Class is specifically designed to be used with
2994 10 Mar 13 peter 44      boost::filter_iterator. The code below for example
2994 10 Mar 13 peter 45      \code
2994 10 Mar 13 peter 46      InBamFile in("example.bam");
2994 10 Mar 13 peter 47      BamReadIterator begin(in);
2994 10 Mar 13 peter 48      BamReadIterator end;
2994 10 Mar 13 peter 49      BamReadFilter filter(20, 0);
2994 10 Mar 13 peter 50      some_algo(make_filter_iterator(filter, begin, end),
2994 10 Mar 13 peter 51                make_filter_iterator(filter, end));
2994 10 Mar 13 peter 52      \endcode
2994 10 Mar 13 peter 53      iterates over all read with mapping quality 20 or greater.
3081 18 Sep 13 peter 54
3081 18 Sep 13 peter 55      \since new in yat 0.11
2994 10 Mar 13 peter 56    */
4339 15 Apr 23 peter 57   class BamReadFilter
2994 10 Mar 13 peter 58   {
2994 10 Mar 13 peter 59   public:
4339 15 Apr 23 peter 60     /// Functor takes a const BamRead&
4339 15 Apr 23 peter 61     typedef const BamRead& argument_type;
4339 15 Apr 23 peter 62     /// Functor returns \c bool
4339 15 Apr 23 peter 63     typedef bool result_type;
4339 15 Apr 23 peter 64
2994 10 Mar 13 peter 65     /**
2994 10 Mar 13 peter 66        Create a functor which accepts reads with mapping quality \a
2994 10 Mar 13 peter 67        mapQ (or greater), flag must be unset in bits described by a \a
2994 10 Mar 13 peter 68        filter_flags, and flag must be set in bits described by \a
2994 10 Mar 13 peter 69        required_flags.
2994 10 Mar 13 peter 70      */
2994 10 Mar 13 peter 71     BamReadFilter(unsigned char mapQ, unsigned int filtered_flags=BAM_DEF_MASK,
2994 10 Mar 13 peter 72                   unsigned int required_flags=0);
2994 10 Mar 13 peter 73
2994 10 Mar 13 peter 74     /**
2994 10 Mar 13 peter 75        return true if 1) bam mapping quality is at least mapQ AND 2)
2994 10 Mar 13 peter 76        bam flags & filter_flags == 0 (no filter bit set) AND 3) bam
2994 10 Mar 13 peter 77        flags & required_flags == required_flags (all req bits set)
2994 10 Mar 13 peter 78     */
3361 24 Nov 14 peter 79     bool operator()(const BamRead& bam) const;
2994 10 Mar 13 peter 80   private:
2994 10 Mar 13 peter 81     unsigned char mapQ_;
2994 10 Mar 13 peter 82     unsigned int filtered_;
2994 10 Mar 13 peter 83     unsigned int required_;
2994 10 Mar 13 peter 84   };
2994 10 Mar 13 peter 85
2994 10 Mar 13 peter 86 }}}
2994 10 Mar 13 peter 87 #endif