12 typedef std::pair<float, const GlobalPoint*> MyPair;
13 typedef std::pair<float, float> FloatPair;
14 typedef std::pair<GlobalPoint, float> GlPtWt;
15 typedef std::pair<float, const GlPtWt*> MyPairWt;
18 bool operator()(
const MyPair& pair1,
const MyPair& pair2) {
return (pair1.first < pair2.first); };
20 bool operator()(
const FloatPair& pair1,
const FloatPair& pair2) {
return (pair1.first < pair2.first); };
22 bool operator()(
const MyPairWt& pair1,
const MyPairWt& pair2) {
return (pair1.first < pair2.first); };
25 bool debug() {
return false; }
38 for (std::vector<MyPair>::const_iterator
i = pairs.begin();
i != (pairs.begin() +
nq); ++
i)
46 for (std::vector<MyPairWt>::const_iterator
i = pairs.begin();
i != (pairs.begin() +
nq); ++
i)
59 std::cout <<
"[SMS] warning: Weighted SMS was asked for, but data are " 60 <<
"weightless!" << std::endl;
62 int nobs =
data.size();
67 std::vector<MyPair> pairs;
69 for (std::vector<GlobalPoint>::const_iterator
i =
data.begin();
i !=
data.end(); ++
i) {
72 for (std::vector<GlobalPoint>::const_iterator
j =
data.begin();
j !=
data.end(); ++
j) {
82 sort(pairs.begin(), pairs.end(), Sorter());
86 return *(pairs.begin()->second);
98 std::vector<GlobalPoint> data1;
99 std::vector<MyPair>::iterator
j;
101 for (
j = pairs.begin();
j - pairs.begin() <
nq; ++
j)
102 data1.push_back(*(
j->second));
109 std::vector<GlobalPoint> points;
110 for (std::vector<GlPtWt>::const_iterator
i = wdata.begin();
i != wdata.end(); ++
i) {
111 points.push_back(
i->first);
114 std::cout <<
"[SMS] Unweighted SMS was asked for; ignoring the weights." << std::endl;
121 std::vector<GlPtWt>::const_iterator
i,
j;
122 for (
i = wdata.begin();
i != wdata.end(); ++
i)
126 std::vector<MyPairWt> pairs;
127 for (
i = wdata.begin();
i != wdata.end(); ++
i) {
128 std::vector<FloatPair>
D;
130 for (
j = wdata.begin();
j != wdata.end(); ++
j)
131 D.push_back(FloatPair((
j->first -
i->first).mag2(),
j->second));
135 std::vector<FloatPair>::const_iterator where;
136 for (where =
D.begin(); where !=
D.end(); ++where) {
137 sumw += where->second;
142 MyPairWt
tmp(where->first, &(*
i));
143 pairs.push_back(
tmp);
148 sort(pairs.begin(), pairs.end(), Sorter());
153 std::vector<MyPairWt>::const_iterator
k;
154 for (
k = pairs.begin();
k != pairs.end(); ++
k) {
155 sumw +=
k->second->second;
166 return pairs.begin()->second->first;
178 std::vector<GlPtWt> wdata1;
180 for (
k = pairs.begin();
k - pairs.begin() <
nq; ++
k)
181 wdata1.push_back(*(
k->second));
constexpr int32_t ceil(float num)
for(int i=first, nt=offsets[nh];i< nt;i+=gridDim.x *blockDim.x)
Global3DPoint GlobalPoint
GlobalPoint location(const std::vector< GlobalPoint > &) const
DecomposeProduct< arg, typename Div::arg > D
Basic3DVector & operator/=(T t)
Scaling by a scalar value (division)
T mag2() const
The vector magnitude squared. Equivalent to vec.dot(vec)
char data[epos_bytes_allocation]
SMS(SMSType tp=(SMSType)(Interpolate|Iterate|Weighted), float q=0.5)
Basic3DVector & operator+=(const Basic3DVector< U > &p)