ESyS-Particle  2.3.4
LinearWindowAverager.h
Go to the documentation of this file.
1 // //
3 // Copyright (c) 2003-2017 by The University of Queensland //
4 // Centre for Geoscience Computing //
5 // http://earth.uq.edu.au/centre-geoscience-computing //
6 // //
7 // Primary Business: Brisbane, Queensland, Australia //
8 // Licensed under the Open Software License version 3.0 //
9 // http://www.apache.org/licenses/LICENSE-2.0 //
10 // //
12 
13 
14 #ifndef ESYS_LSMLINEARWINDOWAVERAGER_H
15 #define ESYS_LSMLINEARWINDOWAVERAGER_H
16 
17 #include <cstdlib>
18 #include "Foundation/vec3.h"
19 
20 #include <vector>
21 
22 namespace esys
23 {
24  namespace lsm
25  {
27  {
28  public:
29  typedef std::vector<double> ValueVector;
30 
32  const ValueVector &valVector,
33  int halfWindowSize,
34  int beginIndex,
35  int endIndex,
36  int skipSize
37  )
38  :
39  m_valVector(valVector),
40  m_avValVector(),
41  m_halfWindowSize(halfWindowSize),
42  m_beginIndex(beginIndex),
43  m_endIndex(min(endIndex, static_cast<int>(valVector.size()))),
44  m_skipSize(skipSize)
45  {
46  }
47 
49  {
50  if (m_avValVector.size() <= 0) {
52  }
53  return m_avValVector;
54  }
55 
56  protected:
58  {
59  m_avValVector.clear();
60  const int halfWindowSize = max(0, m_halfWindowSize);
61  for (int i = m_beginIndex; i < m_endIndex; i += m_skipSize)
62  {
63  double avSum = 0.0;
64  double weightSum = 0.0;
65  const int endJ = min(static_cast<int>(m_valVector.size()), i + halfWindowSize+1);
66  for (int j = max(0, i - halfWindowSize); j < endJ; j++)
67  {
68  const double weight = (1.0 - (static_cast<double>(abs(i-j))/(halfWindowSize+1)));
69  weightSum += weight;
70  avSum += weight*m_valVector[j];
71  }
72  m_avValVector.push_back(avSum/weightSum);
73  }
74  }
75 
76  private:
83  };
84  }
85 }
86 
87 #endif
esys::lsm::LinearWindowAverager::m_endIndex
int m_endIndex
Definition: LinearWindowAverager.h:81
esys::lsm::LinearWindowAverager::m_beginIndex
int m_beginIndex
Definition: LinearWindowAverager.h:80
esys::lsm::LinearWindowAverager::calculateAverageVals
void calculateAverageVals()
Definition: LinearWindowAverager.h:57
esys::lsm::LinearWindowAverager::m_skipSize
int m_skipSize
Definition: LinearWindowAverager.h:82
esys::lsm::LinearWindowAverager::LinearWindowAverager
LinearWindowAverager(const ValueVector &valVector, int halfWindowSize, int beginIndex, int endIndex, int skipSize)
Definition: LinearWindowAverager.h:31
esys::lsm::LinearWindowAverager
Definition: LinearWindowAverager.h:27
esys::lsm::LinearWindowAverager::getAveragedVector
const ValueVector & getAveragedVector()
Definition: LinearWindowAverager.h:48
esys::lsm::LinearWindowAverager::m_halfWindowSize
int m_halfWindowSize
Definition: LinearWindowAverager.h:79
esys::lsm::LinearWindowAverager::m_valVector
ValueVector m_valVector
Definition: LinearWindowAverager.h:77
esys
Definition: CheckPointable.cpp:17
LinearWindowAverager.h
esys::lsm::LinearWindowAverager::ValueVector
std::vector< double > ValueVector
Definition: LinearWindowAverager.h:29
vec3.h
esys::lsm::LinearWindowAverager::m_avValVector
ValueVector m_avValVector
Definition: LinearWindowAverager.h:78