ProteoWizard
pwiz
utility
findmf
base
resample
bin1d.hpp
Go to the documentation of this file.
1
//
2
// $Id$
3
//
4
//
5
// Original author: Witold Wolski <wewolski@gmail.com>
6
//
7
// Copyright : ETH Zurich
8
//
9
// Licensed under the Apache License, Version 2.0 (the "License");
10
// you may not use this file except in compliance with the License.
11
// You may obtain a copy of the License at
12
//
13
// http://www.apache.org/licenses/LICENSE-2.0
14
//
15
// Unless required by applicable law or agreed to in writing, software
16
// distributed under the License is distributed on an "AS IS" BASIS,
17
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18
// See the License for the specific language governing permissions and
19
// limitations under the License.
20
//
21
22
23
#ifndef BIN1D_H
24
#define BIN1D_H
25
26
#include <vector>
27
#include <algorithm>
28
#include <functional>
29
#include <vector>
30
#include <utility>
31
#include <stdexcept>
32
#include <boost/cstdint.hpp>
33
34
namespace
ralab
35
{
36
namespace
base
37
{
38
namespace
resample
39
{
40
typedef
boost::int32_t
int32_t
;
41
typedef
boost::int64_t
int64_t
;
42
43
//Class returns the index a value belongs too....
44
struct
Bin1D
45
{
46
std::vector<double>
breaks_
;
// boundaries
47
double
*
begbreaks_
;
48
double
*
endbreaks_
;
49
public
:
50
Bin1D
():
breaks_
(),
begbreaks_
(0),
endbreaks_
(0){}
51
52
Bin1D
(
53
std::vector<double> &
breaks
// breaks
54
):
breaks_
(),
begbreaks_
(0),
endbreaks_
(0)
55
{
56
this->
setBreaks
(breaks);
57
}
58
59
60
Bin1D
(
61
const
Bin1D
& rhs
// breaks
62
):
breaks_
(),
begbreaks_
(0),
endbreaks_
(0)
63
{
64
this->
setBreaks
(rhs.
breaks_
);
65
}
66
67
68
void
setBreaks
(
const
std::vector<double> &
breaks
){
69
breaks_
.assign(
breaks
.begin(),
breaks
.end() );
70
std::sort(
breaks_
.begin(),
breaks_
.end());
71
reset
();
72
}
73
74
void
reset
(){
75
begbreaks_
= &
breaks_
[0];
76
endbreaks_
=
begbreaks_
+
breaks_
.size();
77
}
78
79
void
getBreaks
(std::vector<double> &
breaks
)
const
{
80
breaks
.assign(
begbreaks_
,
endbreaks_
);
81
}
82
83
const
std::vector<double> &
getBreaks
()
const
{
84
return
breaks_
;
85
}
86
87
88
bool
inRange
(
double
dat)
const
{
89
return
(dat >
breaks_
.front() && dat <
breaks_
.back());
90
}
91
92
std::size_t
operator()
(
double
dat)
const
93
{
94
double
* it2 = std::lower_bound(
begbreaks_
,
endbreaks_
,dat);
95
size_t
ub = std::distance(
begbreaks_
,it2);
96
return
ub;
97
}
98
99
void
operator()
(
double
dat1,
100
double
dat2,
101
std::vector<int32_t> & idx,
102
std::vector<double> & dist
103
)
const
104
{
105
double
* it1 = std::lower_bound(
begbreaks_
,
endbreaks_
,dat1);
106
double
* it2 = std::lower_bound(
begbreaks_
,
endbreaks_
,dat2);
107
108
size_t
ub1 = std::distance(
begbreaks_
,it1);
109
size_t
ub2 = std::distance(
begbreaks_
,it2);
110
int64_t
n =
static_cast<
int64_t
>
(ub2-ub1)+1;
111
idx.resize(n);
112
dist.resize(n);
113
114
if
(ub1 == ub2 ){
115
idx[0] = ub1-1;
116
dist[0] = dat2 - dat1;
117
return
;
118
}
119
else
{
120
for
(
int64_t
i = 0; it1 != (it2+1) ; i++, it1++){
121
idx[i] = ub1 + i - 1;
122
if
(i == 0)
123
{
124
dist[i] = *(it1) - dat1;
125
}
126
else
if
( i < n - 1 )
127
{
128
dist[i] = *(it1) - *(it1-1);
129
}
130
else
131
{
132
dist[i] = dat2 - *(it1-1);
133
}
134
}
135
}
136
137
}
138
};
139
140
}
//resample
141
}
//base
142
}
//ralab
143
144
145
146
#endif // BUCKET1D_H
ralab::base::resample::Bin1D::operator()
void operator()(double dat1, double dat2, std::vector< int32_t > &idx, std::vector< double > &dist) const
Definition:
bin1d.hpp:99
ralab::base::resample::Bin1D::breaks_
std::vector< double > breaks_
Definition:
bin1d.hpp:46
ralab::base::resample::Bin1D::reset
void reset()
Definition:
bin1d.hpp:74
ralab::base::resample::Bin1D::getBreaks
const std::vector< double > & getBreaks() const
Definition:
bin1d.hpp:83
ralab::base::resample::Bin1D
Definition:
bin1d.hpp:45
ralab::base::resample::Bin1D::Bin1D
Bin1D(std::vector< double > &breaks)
Definition:
bin1d.hpp:52
ralab::base::resample::int32_t
boost::int32_t int32_t
Definition:
bin1d.hpp:40
ralab::base::resample::breaks
void breaks(double minMass, double maxMass, TMassComparator tmassComp, std::vector< double > &breaks, bool exact=false)
Segment mass range according to Mass Compare functor could be used to histogram a dataset or to compu...
Definition:
breakspec.hpp:41
ralab::base::resample::Bin1D::operator()
std::size_t operator()(double dat) const
Definition:
bin1d.hpp:92
ralab::base::resample::Bin1D::setBreaks
void setBreaks(const std::vector< double > &breaks)
Definition:
bin1d.hpp:68
ralab::base::resample::Bin1D::getBreaks
void getBreaks(std::vector< double > &breaks) const
Definition:
bin1d.hpp:79
ralab::base::resample::Bin1D::Bin1D
Bin1D(const Bin1D &rhs)
Definition:
bin1d.hpp:60
ralab::base::resample::Bin1D::inRange
bool inRange(double dat) const
Definition:
bin1d.hpp:88
ralab::base::resample::Bin1D::begbreaks_
double * begbreaks_
Definition:
bin1d.hpp:47
ralab
EQUISPACEINTERPOL Interpolation on a equidistantly spaced grid.
Definition:
base.hpp:40
ralab::base::resample::Bin1D::endbreaks_
double * endbreaks_
Definition:
bin1d.hpp:48
ralab::base::resample::int64_t
boost::int64_t int64_t
Definition:
bin1d.hpp:41
ralab::base::resample::Bin1D::Bin1D
Bin1D()
Definition:
bin1d.hpp:50
Generated by
1.8.20