yat/omic/BamRegion.h

Code
Comments
Other
Rev Date Author Line
4272 24 Jan 23 peter 1 #ifndef theplu_yat_omic_bam_region_
4272 24 Jan 23 peter 2 #define theplu_yat_omic_bam_region_
4272 24 Jan 23 peter 3
4272 24 Jan 23 peter 4 // $Id$
4272 24 Jan 23 peter 5
4272 24 Jan 23 peter 6 /*
4272 24 Jan 23 peter 7   Copyright (C) 2023 Peter Johansson
4272 24 Jan 23 peter 8
4272 24 Jan 23 peter 9   This file is part of the yat library, https://dev.thep.lu.se/yat
4272 24 Jan 23 peter 10
4272 24 Jan 23 peter 11   The yat library is free software; you can redistribute it and/or
4272 24 Jan 23 peter 12   modify it under the terms of the GNU General Public License as
4272 24 Jan 23 peter 13   published by the Free Software Foundation; either version 3 of the
4272 24 Jan 23 peter 14   License, or (at your option) any later version.
4272 24 Jan 23 peter 15
4272 24 Jan 23 peter 16   The yat library is distributed in the hope that it will be useful,
4272 24 Jan 23 peter 17   but WITHOUT ANY WARRANTY; without even the implied warranty of
4272 24 Jan 23 peter 18   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
4272 24 Jan 23 peter 19   General Public License for more details.
4272 24 Jan 23 peter 20
4272 24 Jan 23 peter 21   You should have received a copy of the GNU General Public License
4272 24 Jan 23 peter 22   along with yat. If not, see <https://www.gnu.org/licenses/>.
4272 24 Jan 23 peter 23 */
4272 24 Jan 23 peter 24
4275 25 Jan 23 peter 25 // File htslib/hts.h below is using INT_MAX to #define HTS_POS_MAX,
4275 25 Jan 23 peter 26 // but older versions of htslib/hts.h (e.g. 1.10.2) does not include
4275 25 Jan 23 peter 27 // climits (or limits.h). In htslib 1.16 the file is included.
4275 25 Jan 23 peter 28 #include <climits>
4275 25 Jan 23 peter 29
4272 24 Jan 23 peter 30 #include <htslib/hts.h>
4272 24 Jan 23 peter 31
4272 24 Jan 23 peter 32 namespace theplu {
4272 24 Jan 23 peter 33 namespace yat {
4272 24 Jan 23 peter 34 namespace omic {
4272 24 Jan 23 peter 35
4272 24 Jan 23 peter 36   /**
4272 24 Jan 23 peter 37      Class holds a region as defined by tid (chromosome), begin and end
4272 24 Jan 23 peter 38      coordinates. The region is 0-based, which means it is semi open such
4272 24 Jan 23 peter 39      that begin is included and end is not.
4272 24 Jan 23 peter 40
4272 24 Jan 23 peter 41      \since New in yat 0.21
4272 24 Jan 23 peter 42    */
4272 24 Jan 23 peter 43   class BamRegion
4272 24 Jan 23 peter 44   {
4272 24 Jan 23 peter 45   public:
4272 24 Jan 23 peter 46     /// default constructor
4272 24 Jan 23 peter 47     BamRegion(void) = default;
4272 24 Jan 23 peter 48
4272 24 Jan 23 peter 49     /**
4272 24 Jan 23 peter 50        \brief Constructor
4272 24 Jan 23 peter 51      */
4272 24 Jan 23 peter 52     explicit BamRegion(int tid, hts_pos_t begin=0, hts_pos_t end=HTS_POS_MAX);
4272 24 Jan 23 peter 53
4272 24 Jan 23 peter 54     /**
4272 24 Jan 23 peter 55        \return chromosome ID
4272 24 Jan 23 peter 56      */
4272 24 Jan 23 peter 57     int& tid(void);
4272 24 Jan 23 peter 58
4272 24 Jan 23 peter 59     /**
4272 24 Jan 23 peter 60        \return chromosome ID
4272 24 Jan 23 peter 61      */
4272 24 Jan 23 peter 62     const int& tid(void) const;
4272 24 Jan 23 peter 63
4272 24 Jan 23 peter 64     /**
4272 24 Jan 23 peter 65        \return first position
4272 24 Jan 23 peter 66      */
4272 24 Jan 23 peter 67     hts_pos_t& begin(void);
4272 24 Jan 23 peter 68
4272 24 Jan 23 peter 69     /**
4272 24 Jan 23 peter 70        \return first position
4272 24 Jan 23 peter 71      */
4272 24 Jan 23 peter 72     const hts_pos_t& begin(void) const;
4272 24 Jan 23 peter 73
4272 24 Jan 23 peter 74     /**
4272 24 Jan 23 peter 75        \return end position
4272 24 Jan 23 peter 76      */
4272 24 Jan 23 peter 77     hts_pos_t& end(void);
4272 24 Jan 23 peter 78
4272 24 Jan 23 peter 79     /**
4272 24 Jan 23 peter 80        \return end position
4272 24 Jan 23 peter 81      */
4272 24 Jan 23 peter 82     const hts_pos_t& end(void) const;
4272 24 Jan 23 peter 83   private:
4272 24 Jan 23 peter 84     int tid_;
4272 24 Jan 23 peter 85     hts_pos_t begin_;
4272 24 Jan 23 peter 86     hts_pos_t end_;
4272 24 Jan 23 peter 87   };
4272 24 Jan 23 peter 88
4272 24 Jan 23 peter 89 }}}
4272 24 Jan 23 peter 90 #endif