yat/omic/GenomicPosition.h

Code
Comments
Other
Rev Date Author Line
2366 06 Dec 10 peter 1 #ifndef theplu_yat_omic_gemomic_position
2366 06 Dec 10 peter 2 #define theplu_yat_omic_gemomic_position
2366 06 Dec 10 peter 3
2993 03 Mar 13 peter 4 // $Id$
2993 03 Mar 13 peter 5
2366 06 Dec 10 peter 6 /*
4359 23 Aug 23 peter 7   Copyright (C) 2010, 2013, 2018, 2020 Peter Johansson
2366 06 Dec 10 peter 8
2366 06 Dec 10 peter 9   The yat library is free software; you can redistribute it and/or
2366 06 Dec 10 peter 10   modify it under the terms of the GNU General Public License as
2366 06 Dec 10 peter 11   published by the Free Software Foundation; either version 3 of the
2366 06 Dec 10 peter 12   License, or (at your option) any later version.
2900 13 Dec 12 peter 13
2366 06 Dec 10 peter 14   The yat library is distributed in the hope that it will be useful,
2366 06 Dec 10 peter 15   but WITHOUT ANY WARRANTY; without even the implied warranty of
2366 06 Dec 10 peter 16   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
2366 06 Dec 10 peter 17   General Public License for more details.
2366 06 Dec 10 peter 18
2366 06 Dec 10 peter 19   You should have received a copy of the GNU General Public License
3756 17 Oct 18 peter 20   along with yat. If not, see <http://www.gnu.org/licenses/>.
2366 06 Dec 10 peter 21 */
2366 06 Dec 10 peter 22
2366 06 Dec 10 peter 23 #include <boost/operators.hpp>
2366 06 Dec 10 peter 24
2366 06 Dec 10 peter 25 #include <string>
2366 06 Dec 10 peter 26
2366 06 Dec 10 peter 27 namespace theplu {
2366 06 Dec 10 peter 28 namespace yat {
2366 06 Dec 10 peter 29 namespace omic {
2366 06 Dec 10 peter 30
2366 06 Dec 10 peter 31   /**
2366 06 Dec 10 peter 32      Class used to hold genomic location, i.e., chromosome and
2366 06 Dec 10 peter 33      position.
2366 06 Dec 10 peter 34
2366 06 Dec 10 peter 35      The class inherits from boost::operators, which means besides the
2366 06 Dec 10 peter 36      operators directly implemented (operator== and operator<) also
2366 06 Dec 10 peter 37      operator<=, operator>, operator>=, and operator!= are supported.
2366 06 Dec 10 peter 38
2366 06 Dec 10 peter 39      \since New in yat 0.7
2366 06 Dec 10 peter 40    */
2366 06 Dec 10 peter 41   class GenomicPosition : boost::operators<GenomicPosition>
2366 06 Dec 10 peter 42   {
2366 06 Dec 10 peter 43   public:
2366 06 Dec 10 peter 44     /**
2366 06 Dec 10 peter 45        Creates a GenomicPosition with undefined values.
2366 06 Dec 10 peter 46      */
2366 06 Dec 10 peter 47     GenomicPosition(void);
2366 06 Dec 10 peter 48
2366 06 Dec 10 peter 49     /**
2366 06 Dec 10 peter 50        \brief Constructor
2366 06 Dec 10 peter 51        \param chr chromosome
2366 06 Dec 10 peter 52        \param pos non-negative number describing location on chromosome
2366 06 Dec 10 peter 53      */
2366 06 Dec 10 peter 54     GenomicPosition(unsigned short chr , unsigned long pos);
2366 06 Dec 10 peter 55
2366 06 Dec 10 peter 56     /**
2366 06 Dec 10 peter 57        \brief Constructor
2366 06 Dec 10 peter 58        \param chr chromosome
2366 06 Dec 10 peter 59        \param pos non-negative number describing location on chromosome
2366 06 Dec 10 peter 60
2366 06 Dec 10 peter 61        chr2int is used to translate \a chr into an \c unsigned \c
2366 06 Dec 10 peter 62        short, and utility::convert is used to translate \a pos into an
2366 06 Dec 10 peter 63        \c unsigned \c long.
2366 06 Dec 10 peter 64
2366 06 Dec 10 peter 65        \see chr2int
3991 02 Sep 20 peter 66
3991 02 Sep 20 peter 67        \since New in yat 0.18
2366 06 Dec 10 peter 68      */
3991 02 Sep 20 peter 69     GenomicPosition(const std::string& chr , unsigned long pos);
3991 02 Sep 20 peter 70
3991 02 Sep 20 peter 71     /**
3991 02 Sep 20 peter 72        \brief Constructor
3991 02 Sep 20 peter 73        \param chr chromosome
3991 02 Sep 20 peter 74        \param pos non-negative number describing location on chromosome
3991 02 Sep 20 peter 75
3991 02 Sep 20 peter 76        chr2int is used to translate \a chr into an \c unsigned \c
3991 02 Sep 20 peter 77        short, and utility::convert is used to translate \a pos into an
3991 02 Sep 20 peter 78        \c unsigned \c long.
3991 02 Sep 20 peter 79
3991 02 Sep 20 peter 80        \see chr2int
3991 02 Sep 20 peter 81      */
2366 06 Dec 10 peter 82     GenomicPosition(const std::string& chr, const std::string& pos);
2366 06 Dec 10 peter 83
2366 06 Dec 10 peter 84     /**
2366 06 Dec 10 peter 85        \return reference to chr
2366 06 Dec 10 peter 86      */
2366 06 Dec 10 peter 87     unsigned short& chromosome(void);
2366 06 Dec 10 peter 88
2366 06 Dec 10 peter 89     /**
2366 06 Dec 10 peter 90        \return const reference to chr
2366 06 Dec 10 peter 91      */
2366 06 Dec 10 peter 92     const unsigned short& chromosome(void) const;
2366 06 Dec 10 peter 93
2366 06 Dec 10 peter 94     /**
2366 06 Dec 10 peter 95        \return reference to position
2366 06 Dec 10 peter 96      */
2366 06 Dec 10 peter 97     unsigned long int& position(void);
2366 06 Dec 10 peter 98
2366 06 Dec 10 peter 99     /**
2366 06 Dec 10 peter 100        \return const reference to position
2366 06 Dec 10 peter 101      */
2366 06 Dec 10 peter 102     const unsigned long int& position(void) const;
2900 13 Dec 12 peter 103
2366 06 Dec 10 peter 104   private:
2366 06 Dec 10 peter 105     unsigned short chr_;
2366 06 Dec 10 peter 106     unsigned long pos_;
2900 13 Dec 12 peter 107   };
2366 06 Dec 10 peter 108
2366 06 Dec 10 peter 109   /**
2366 06 Dec 10 peter 110      \relates GenomicPosition
2366 06 Dec 10 peter 111
2366 06 Dec 10 peter 112      \return \c true if chromosome of \a lhs is less than chromosome
2366 06 Dec 10 peter 113      of \a rhs or if chromosome of \a lhs equals chromosome of \a rhs
2366 06 Dec 10 peter 114      and position of \a lhs is less than position of \a rhs.
2389 22 Dec 10 peter 115
2389 22 Dec 10 peter 116      \since New in yat 0.7
2366 06 Dec 10 peter 117    */
2366 06 Dec 10 peter 118   bool operator<(const GenomicPosition& lhs, const GenomicPosition& rhs);
2366 06 Dec 10 peter 119
2366 06 Dec 10 peter 120   /**
2388 22 Dec 10 peter 121      \relates GenomicPosition
2388 22 Dec 10 peter 122
2366 06 Dec 10 peter 123      \return \c true if chromosomes and positions are the same.
2389 22 Dec 10 peter 124
2389 22 Dec 10 peter 125      \since New in yat 0.7
2366 06 Dec 10 peter 126    */
2366 06 Dec 10 peter 127   bool operator==(const GenomicPosition& lhs, const GenomicPosition& rhs);
2366 06 Dec 10 peter 128
2366 06 Dec 10 peter 129   /**
2366 06 Dec 10 peter 130      \brief transform a string to unsigned short chromosome number
2366 06 Dec 10 peter 131
2366 06 Dec 10 peter 132      If \a str starts with 'chr' that prefix is stripped away before
2366 06 Dec 10 peter 133      translating the string to chromosome number. Function translates
2366 06 Dec 10 peter 134      "X" to 23, "Y" to 24, and "M" or "MT" to 25. For other inputs
2366 06 Dec 10 peter 135      utility::convert is used to transform the input to an unsigned
2366 06 Dec 10 peter 136      short.
2366 06 Dec 10 peter 137
2366 06 Dec 10 peter 138      \return chromosome number
2389 22 Dec 10 peter 139
2389 22 Dec 10 peter 140      \since New in yat 0.7
2366 06 Dec 10 peter 141    */
2366 06 Dec 10 peter 142   unsigned short chr2int(const std::string& str);
2366 06 Dec 10 peter 143
2366 06 Dec 10 peter 144 }}}
2366 06 Dec 10 peter 145 #endif