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 |
// $Id$ |
2993 |
03 Mar 13 |
peter |
5 |
|
2366 |
06 Dec 10 |
peter |
6 |
/* |
4359 |
23 Aug 23 |
peter |
Copyright (C) 2010, 2013, 2018, 2020 Peter Johansson |
2366 |
06 Dec 10 |
peter |
8 |
|
2366 |
06 Dec 10 |
peter |
The yat library is free software; you can redistribute it and/or |
2366 |
06 Dec 10 |
peter |
modify it under the terms of the GNU General Public License as |
2366 |
06 Dec 10 |
peter |
published by the Free Software Foundation; either version 3 of the |
2366 |
06 Dec 10 |
peter |
License, or (at your option) any later version. |
2900 |
13 Dec 12 |
peter |
13 |
|
2366 |
06 Dec 10 |
peter |
The yat library is distributed in the hope that it will be useful, |
2366 |
06 Dec 10 |
peter |
but WITHOUT ANY WARRANTY; without even the implied warranty of |
2366 |
06 Dec 10 |
peter |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
2366 |
06 Dec 10 |
peter |
General Public License for more details. |
2366 |
06 Dec 10 |
peter |
18 |
|
2366 |
06 Dec 10 |
peter |
You should have received a copy of the GNU General Public License |
3756 |
17 Oct 18 |
peter |
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 |
Class used to hold genomic location, i.e., chromosome and |
2366 |
06 Dec 10 |
peter |
position. |
2366 |
06 Dec 10 |
peter |
34 |
|
2366 |
06 Dec 10 |
peter |
The class inherits from boost::operators, which means besides the |
2366 |
06 Dec 10 |
peter |
operators directly implemented (operator== and operator<) also |
2366 |
06 Dec 10 |
peter |
operator<=, operator>, operator>=, and operator!= are supported. |
2366 |
06 Dec 10 |
peter |
38 |
|
2366 |
06 Dec 10 |
peter |
\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 |
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 |
\brief Constructor |
2366 |
06 Dec 10 |
peter |
\param chr chromosome |
2366 |
06 Dec 10 |
peter |
\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 |
\brief Constructor |
2366 |
06 Dec 10 |
peter |
\param chr chromosome |
2366 |
06 Dec 10 |
peter |
\param pos non-negative number describing location on chromosome |
2366 |
06 Dec 10 |
peter |
60 |
|
2366 |
06 Dec 10 |
peter |
chr2int is used to translate \a chr into an \c unsigned \c |
2366 |
06 Dec 10 |
peter |
short, and utility::convert is used to translate \a pos into an |
2366 |
06 Dec 10 |
peter |
\c unsigned \c long. |
2366 |
06 Dec 10 |
peter |
64 |
|
2366 |
06 Dec 10 |
peter |
\see chr2int |
3991 |
02 Sep 20 |
peter |
66 |
|
3991 |
02 Sep 20 |
peter |
\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 |
\brief Constructor |
3991 |
02 Sep 20 |
peter |
\param chr chromosome |
3991 |
02 Sep 20 |
peter |
\param pos non-negative number describing location on chromosome |
3991 |
02 Sep 20 |
peter |
75 |
|
3991 |
02 Sep 20 |
peter |
chr2int is used to translate \a chr into an \c unsigned \c |
3991 |
02 Sep 20 |
peter |
short, and utility::convert is used to translate \a pos into an |
3991 |
02 Sep 20 |
peter |
\c unsigned \c long. |
3991 |
02 Sep 20 |
peter |
79 |
|
3991 |
02 Sep 20 |
peter |
\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 |
\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 |
\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 |
\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 |
\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 |
\relates GenomicPosition |
2366 |
06 Dec 10 |
peter |
111 |
|
2366 |
06 Dec 10 |
peter |
\return \c true if chromosome of \a lhs is less than chromosome |
2366 |
06 Dec 10 |
peter |
of \a rhs or if chromosome of \a lhs equals chromosome of \a rhs |
2366 |
06 Dec 10 |
peter |
and position of \a lhs is less than position of \a rhs. |
2389 |
22 Dec 10 |
peter |
115 |
|
2389 |
22 Dec 10 |
peter |
\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 |
\relates GenomicPosition |
2388 |
22 Dec 10 |
peter |
122 |
|
2366 |
06 Dec 10 |
peter |
\return \c true if chromosomes and positions are the same. |
2389 |
22 Dec 10 |
peter |
124 |
|
2389 |
22 Dec 10 |
peter |
\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 |
\brief transform a string to unsigned short chromosome number |
2366 |
06 Dec 10 |
peter |
131 |
|
2366 |
06 Dec 10 |
peter |
If \a str starts with 'chr' that prefix is stripped away before |
2366 |
06 Dec 10 |
peter |
translating the string to chromosome number. Function translates |
2366 |
06 Dec 10 |
peter |
"X" to 23, "Y" to 24, and "M" or "MT" to 25. For other inputs |
2366 |
06 Dec 10 |
peter |
utility::convert is used to transform the input to an unsigned |
2366 |
06 Dec 10 |
peter |
short. |
2366 |
06 Dec 10 |
peter |
137 |
|
2366 |
06 Dec 10 |
peter |
\return chromosome number |
2389 |
22 Dec 10 |
peter |
139 |
|
2389 |
22 Dec 10 |
peter |
\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 |