yat/omic/GenomicPosition.cc

Code
Comments
Other
Rev Date Author Line
2366 06 Dec 10 peter 1 // $Id$
2366 06 Dec 10 peter 2
2366 06 Dec 10 peter 3 /*
4359 23 Aug 23 peter 4   Copyright (C) 2010, 2012, 2018, 2020 Peter Johansson
2366 06 Dec 10 peter 5
2366 06 Dec 10 peter 6   The yat library is free software; you can redistribute it and/or
2366 06 Dec 10 peter 7   modify it under the terms of the GNU General Public License as
2366 06 Dec 10 peter 8   published by the Free Software Foundation; either version 3 of the
2366 06 Dec 10 peter 9   License, or (at your option) any later version.
2900 13 Dec 12 peter 10
2366 06 Dec 10 peter 11   The yat library is distributed in the hope that it will be useful,
2366 06 Dec 10 peter 12   but WITHOUT ANY WARRANTY; without even the implied warranty of
2366 06 Dec 10 peter 13   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
2366 06 Dec 10 peter 14   General Public License for more details.
2900 13 Dec 12 peter 15
2366 06 Dec 10 peter 16   You should have received a copy of the GNU General Public License
3756 17 Oct 18 peter 17   along with yat. If not, see <http://www.gnu.org/licenses/>.
2366 06 Dec 10 peter 18 */
2366 06 Dec 10 peter 19
2881 18 Nov 12 peter 20 #include <config.h>
2881 18 Nov 12 peter 21
2366 06 Dec 10 peter 22 #include "GenomicPosition.h"
2366 06 Dec 10 peter 23
2366 06 Dec 10 peter 24 #include "yat/utility/utility.h"
2366 06 Dec 10 peter 25
2366 06 Dec 10 peter 26 #include <string>
2366 06 Dec 10 peter 27
2366 06 Dec 10 peter 28 namespace theplu {
2366 06 Dec 10 peter 29 namespace yat {
2366 06 Dec 10 peter 30 namespace omic {
2366 06 Dec 10 peter 31
2900 13 Dec 12 peter 32   GenomicPosition::GenomicPosition(void)
2366 06 Dec 10 peter 33   {}
2366 06 Dec 10 peter 34
2366 06 Dec 10 peter 35
2900 13 Dec 12 peter 36   GenomicPosition::GenomicPosition(unsigned short int chr,
2573 29 Sep 11 peter 37                                    unsigned long int pos)
2366 06 Dec 10 peter 38     : chr_(chr), pos_(pos)
2366 06 Dec 10 peter 39   {}
2366 06 Dec 10 peter 40
2366 06 Dec 10 peter 41
2900 13 Dec 12 peter 42   GenomicPosition::GenomicPosition(const std::string& chr,
3991 02 Sep 20 peter 43                                    unsigned long int pos)
3991 02 Sep 20 peter 44     : chr_(chr2int(chr)), pos_(pos)
3991 02 Sep 20 peter 45   {}
3991 02 Sep 20 peter 46
3991 02 Sep 20 peter 47
3991 02 Sep 20 peter 48   GenomicPosition::GenomicPosition(const std::string& chr,
2387 22 Dec 10 peter 49                                    const std::string& pos)
2900 13 Dec 12 peter 50     : chr_(chr2int(chr)),
2366 06 Dec 10 peter 51       pos_(yat::utility::convert<unsigned long int>(pos))
2366 06 Dec 10 peter 52   {}
2366 06 Dec 10 peter 53
2366 06 Dec 10 peter 54
2366 06 Dec 10 peter 55   unsigned short& GenomicPosition::chromosome(void)
2366 06 Dec 10 peter 56   { return chr_; }
2366 06 Dec 10 peter 57
2366 06 Dec 10 peter 58
2366 06 Dec 10 peter 59   const unsigned short& GenomicPosition::chromosome(void) const
2366 06 Dec 10 peter 60   { return chr_; }
2366 06 Dec 10 peter 61
2366 06 Dec 10 peter 62
2366 06 Dec 10 peter 63   unsigned long int& GenomicPosition::position(void)
2366 06 Dec 10 peter 64   { return pos_; }
2366 06 Dec 10 peter 65
2366 06 Dec 10 peter 66
2366 06 Dec 10 peter 67   const unsigned long int& GenomicPosition::position(void) const
2366 06 Dec 10 peter 68   { return pos_; }
2366 06 Dec 10 peter 69
2366 06 Dec 10 peter 70
2366 06 Dec 10 peter 71   bool operator<(const GenomicPosition& lhs, const GenomicPosition& rhs)
2366 06 Dec 10 peter 72   {
2366 06 Dec 10 peter 73     if (lhs.chromosome()==rhs.chromosome())
2366 06 Dec 10 peter 74       return lhs.position() < rhs.position();
2366 06 Dec 10 peter 75     return lhs.chromosome() < rhs.chromosome();
2366 06 Dec 10 peter 76   }
2366 06 Dec 10 peter 77
2366 06 Dec 10 peter 78
2366 06 Dec 10 peter 79   bool operator==(const GenomicPosition& lhs, const GenomicPosition& rhs)
2366 06 Dec 10 peter 80   {
2366 06 Dec 10 peter 81     return lhs.chromosome()==rhs.chromosome() && lhs.position()==rhs.position();
2366 06 Dec 10 peter 82   }
2366 06 Dec 10 peter 83
2366 06 Dec 10 peter 84
2366 06 Dec 10 peter 85   unsigned short chr2int(const std::string& str)
2366 06 Dec 10 peter 86   {
2366 06 Dec 10 peter 87     if (str.size()>3 && str.substr(0,3)=="chr")
2366 06 Dec 10 peter 88       return chr2int(str.substr(3));
2366 06 Dec 10 peter 89     if (str=="X")
2366 06 Dec 10 peter 90       return 23;
2366 06 Dec 10 peter 91     if (str=="Y")
2366 06 Dec 10 peter 92       return 24;
2366 06 Dec 10 peter 93     if (str=="M" || str=="MT")
2366 06 Dec 10 peter 94       return 25;
2366 06 Dec 10 peter 95     return utility::convert<unsigned short>(str);
2366 06 Dec 10 peter 96   }
2366 06 Dec 10 peter 97 }}}