ESyS-Particle  2.3.4
RandomBoxPacker.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_LSMRANDOMBOXPACKER_H
15 #define ESYS_LSMRANDOMBOXPACKER_H
16 
17 #include "Foundation/console.h"
18 #include "Foundation/Rng.h"
20 #include "Geometry/SphereFitter.h"
21 #include "Geometry/Plane3D.h"
22 
23 #include <vector>
24 #include <boost/shared_ptr.hpp>
25 
26 namespace esys
27 {
28  namespace lsm
29  {
30  template <typename TmplFitterTraits>
32  {
33  public:
34  typedef TmplFitterTraits FitterTraits;
35  typedef typename FitterTraits::Plane3D Plane3D;
37  typedef typename FitterTraits::Packer Packer;
38  typedef typename Packer::Particle Particle;
40 
41  class FitTraits
42  {
43  public:
44  typedef Packer Validator;
45  typedef typename Packer::Particle Particle;
47  typedef typename FitterTraits::Plane3D Plane3D;
48  };
49 
51  typedef boost::shared_ptr<Fitter> FitterPtr;
52  typedef std::vector<FitterPtr> FitterPtrVector;
58 
60  Packer &packer,
61  int maxInsertionFailures,
62  const PlaneVector &fitPlaneVector
63  );
64 
66 
67  int getMaxInsertionFailures() const;
68 
69  const FitterPtrVector &getFitterPtrVector() const;
70 
72 
73  const PlaneVector &getFitPlaneVector() const;
74 
75  const Packer &getPacker() const;
76 
77  Packer &getPacker();
78 
79  Plane3D getClosestFitPlane(const Particle &particle) const;
80 
81  double getRandom(double min, double max) const;
82 
83  Vec3 getRandomPoint() const;
84 
85  Particle getCandidateParticle(const Vec3 &point);
86 
87  ParticleVector getClosestNeighbours(const Particle& particle, int numClosest);
88 
90 
91  bool hasNext();
92 
93  Particle next();
94 
95  void logInfo();
96 
97  private:
105  };
106 
110  template <typename TmplParticleGenerator,template <typename TmplPartGen> class TmplCubicBoxPackerWrap>
111  class RandomBoxPacker : public TmplCubicBoxPackerWrap<TmplParticleGenerator>::CubicBoxPackerBase
112  {
113  public:
114  typedef
115  typename TmplCubicBoxPackerWrap<TmplParticleGenerator>::CubicBoxPackerBase
117  typedef typename Inherited::ParticleGenerator ParticleGenerator;
118  typedef typename Inherited::ParticleGeneratorPtr ParticleGeneratorPtr;
119  typedef typename Inherited::Particle Particle;
120  typedef typename Inherited::NTable NTable;
121  typedef typename Inherited::NTablePtr NTablePtr;
123  typedef typename Inherited::ParticlePool ParticlePool;
124  typedef typename Inherited::ParticlePoolPtr ParticlePoolPtr;
125  typedef std::vector<Plane3D> PlaneVector;
126 
128  {
129  public:
133  };
135 
137  ParticleGeneratorPtr particleGeneratorPtr,
138  ParticlePoolPtr particlePoolPtr,
139  NTablePtr nTablePtr,
140  const BoundingBox &bBox,
141  const BoolVector &periodicDimensions,
142  double tolerance,
143  double cubicPackRadius,
144  int maxInsertionFailures
145  );
146 
148  ParticleGeneratorPtr particleGeneratorPtr,
149  ParticlePoolPtr particlePoolPtr,
150  NTablePtr nTablePtr,
151  const BoundingBox &bBox,
152  const BoolVector &periodicDimensions,
153  double tolerance,
154  double cubicPackRadius,
155  int maxInsertionFailures,
156  const PlaneVector &fitPlaneVector
157  );
158 
159  virtual ~RandomBoxPacker();
160 
162 
163  bool particleIsValid(const Particle &particle) const;
164 
165  virtual void generate();
166 
167  double getRandom(double min, double max) const;
168 
169  Vec3 getRandomPoint() const;
170 
171  ParticleVector getClosestNeighbours(const Particle& particle, int numClosest);
172 
173  int getMaxInsertionFailures() const;
174 
175  void generateRandomFill();
176 
177  const PlaneVector &getFitPlaneVector() const;
178 
179  Plane3D getClosestFitPlane(const Particle &particle) const;
180 
181  private:
184  };
185  }
186 }
187 
189 
190 #endif
esys::lsm::FittedParticleIterator::TwoDPlaneFitter
TwoDPlaneSphereFitter< FitTraits > TwoDPlaneFitter
Definition: RandomBoxPacker.h:56
esys::lsm::RandomBoxPacker::getDefaultFitPlaneVector
PlaneVector getDefaultFitPlaneVector() const
Definition: RandomBoxPacker.hpp:343
esys::lsm::FittedParticleIterator::getClosestFitPlane
Plane3D getClosestFitPlane(const Particle &particle) const
Definition: RandomBoxPacker.hpp:144
esys::lsm::FittedParticleIterator::FitterPtr
boost::shared_ptr< Fitter > FitterPtr
Definition: RandomBoxPacker.h:51
esys::lsm::FittedParticleIterator::FitTraits::Particle
Packer::Particle Particle
Definition: RandomBoxPacker.h:45
esys::lsm::FittedParticleIterator::Move2SurfaceFitter
MoveToSurfaceFitter< FitTraits > Move2SurfaceFitter
Definition: RandomBoxPacker.h:53
esys::lsm::FittedParticleIterator::Packer
FitterTraits::Packer Packer
Definition: RandomBoxPacker.h:37
esys::lsm::RandomBoxPacker::Inherited
TmplCubicBoxPackerWrap< TmplParticleGenerator >::CubicBoxPackerBase Inherited
Definition: RandomBoxPacker.h:116
esys::lsm::FittedParticleIterator::FitTraits
Definition: RandomBoxPacker.h:42
esys::lsm::RandomBoxPacker::getFitPlaneVector
const PlaneVector & getFitPlaneVector() const
Definition: RandomBoxPacker.hpp:394
Plane3D.h
esys::lsm::FittedParticleIterator::hasNext
bool hasNext()
Definition: RandomBoxPacker.hpp:227
esys::lsm::RandomBoxPacker
Definition: RandomBoxPacker.h:112
esys::lsm::ThreeDPlaneSphereFitter
Definition: SphereFitter.h:654
esys::lsm::RandomBoxPacker::~RandomBoxPacker
virtual ~RandomBoxPacker()
Definition: RandomBoxPacker.hpp:378
Rng.h
CubicBoxPacker.h
esys::lsm::FittedParticleIterator::getRandomPoint
Vec3 getRandomPoint() const
Definition: RandomBoxPacker.hpp:158
esys::lsm::FittedParticleIterator::m_successCount
int m_successCount
Definition: RandomBoxPacker.h:102
esys::lsm::RandomBoxPacker::RandomBoxPacker
RandomBoxPacker(ParticleGeneratorPtr particleGeneratorPtr, ParticlePoolPtr particlePoolPtr, NTablePtr nTablePtr, const BoundingBox &bBox, const BoolVector &periodicDimensions, double tolerance, double cubicPackRadius, int maxInsertionFailures)
Definition: RandomBoxPacker.hpp:316
esys::lsm::TwoDPlaneSphereFitter
Definition: SphereFitter.h:563
esys::lsm::Plane3D
::Plane3D Plane3D
Definition: Plane3D.h:60
esys::lsm::FittedParticleIterator::getRandom
double getRandom(double min, double max) const
esys::lsm::FittedParticleIterator::FitTraits::ParticleVector
Packer::ParticleVector ParticleVector
Definition: RandomBoxPacker.h:46
esys::lsm::RandomBoxPacker::StufferTraits
Definition: RandomBoxPacker.h:128
esys::lsm::RandomBoxPacker::getRandomPoint
Vec3 getRandomPoint() const
Definition: RandomBoxPacker.hpp:401
console.h
esys::lsm::FittedParticleIterator::m_pPacker
Packer * m_pPacker
Definition: RandomBoxPacker.h:98
esys::lsm::FittedParticleIterator::getCandidateParticle
Particle getCandidateParticle(const Vec3 &point)
Definition: RandomBoxPacker.hpp:165
esys::lsm::FittedParticleIterator::getPacker
const Packer & getPacker() const
Definition: RandomBoxPacker.hpp:92
esys::lsm::RandomBoxPacker::ParticlePoolPtr
Inherited::ParticlePoolPtr ParticlePoolPtr
Definition: RandomBoxPacker.h:124
esys::lsm::RandomBoxPacker::getMaxInsertionFailures
int getMaxInsertionFailures() const
Definition: RandomBoxPacker.hpp:471
esys::lsm::FittedParticleIterator
Definition: RandomBoxPacker.h:32
Plane3D
Class representing a Plane3D.
Definition: Plane3D.h:29
esys::lsm::RandomBoxPacker::StufferTraits::Plane3D
esys::lsm::Plane3D Plane3D
Definition: RandomBoxPacker.h:131
esys::lsm::FittedParticleIterator::Fitter
SphereFitter< FitTraits > Fitter
Definition: RandomBoxPacker.h:50
esys::lsm::SphereFitter
Definition: SphereFitter.h:30
esys::lsm::FittedParticleIterator::getClosestNeighbours
ParticleVector getClosestNeighbours(const Particle &particle, int numClosest)
Definition: RandomBoxPacker.hpp:174
esys::lsm::RandomBoxPacker::m_maxInsertionFailures
int m_maxInsertionFailures
Definition: RandomBoxPacker.h:183
esys::lsm::PlaneVector
std::vector< Plane3D > PlaneVector
Definition: GougeBlock3D.h:32
esys::lsm::FittedParticleIterator::FitterTraits
TmplFitterTraits FitterTraits
Definition: RandomBoxPacker.h:34
esys::lsm::RandomBoxPacker::m_fitPlaneVector
PlaneVector m_fitPlaneVector
Definition: RandomBoxPacker.h:182
esys::lsm::FittedParticleIterator::ThreeDPlaneFitter
ThreeDPlaneSphereFitter< FitTraits > ThreeDPlaneFitter
Definition: RandomBoxPacker.h:57
esys::lsm::RandomBoxPacker::getClosestFitPlane
Plane3D getClosestFitPlane(const Particle &particle) const
esys::lsm::BoundingBox
3D bounding box
Definition: BoundingBox.h:28
esys
Definition: CheckPointable.cpp:17
esys::lsm::FittedParticleIterator::FitTraits::Validator
Packer Validator
Definition: RandomBoxPacker.h:44
esys::lsm::RandomBoxPacker::NTablePtr
Inherited::NTablePtr NTablePtr
Definition: RandomBoxPacker.h:121
esys::lsm::FittedParticleIterator::initialiseFitterPtrVector
void initialiseFitterPtrVector()
Definition: RandomBoxPacker.hpp:106
esys::lsm::RandomBoxPacker::PlaneVector
std::vector< Plane3D > PlaneVector
Definition: RandomBoxPacker.h:125
esys::lsm::FittedParticleIterator::logInfo
void logInfo()
Definition: RandomBoxPacker.hpp:246
esys::lsm::FittedParticleIterator::m_maxInsertionFailures
int m_maxInsertionFailures
Definition: RandomBoxPacker.h:100
esys::lsm::RandomBoxPacker::getClosestNeighbours
ParticleVector getClosestNeighbours(const Particle &particle, int numClosest)
Definition: RandomBoxPacker.hpp:413
SphereFitter.h
esys::lsm::ThreeDSphereFitter
Definition: SphereFitter.h:192
esys::lsm::FittedParticleIterator::FitTraits::Plane3D
FitterTraits::Plane3D Plane3D
Definition: RandomBoxPacker.h:47
esys::lsm::RandomBoxPacker::ParticleGeneratorPtr
Inherited::ParticleGeneratorPtr ParticleGeneratorPtr
Definition: RandomBoxPacker.h:118
esys::lsm::RandomBoxPacker::Particle
Inherited::Particle Particle
Definition: RandomBoxPacker.h:119
esys::lsm::FittedParticleIterator::getFitterPtrVector
const FitterPtrVector & getFitterPtrVector() const
Definition: RandomBoxPacker.hpp:137
esys::lsm::TwoDSphereFitter
Definition: SphereFitter.h:278
esys::lsm::FittedParticleIterator::Plane3D
FitterTraits::Plane3D Plane3D
Definition: RandomBoxPacker.h:35
esys::lsm::FittedParticleIterator::m_next
Particle m_next
Definition: RandomBoxPacker.h:103
esys::lsm::RandomBoxPacker::generate
virtual void generate()
Definition: RandomBoxPacker.hpp:494
esys::lsm::BoolVector
std::vector< bool > BoolVector
Definition: BlockGenerator.h:28
esys::lsm::RandomBoxPacker::generateRandomFill
void generateRandomFill()
Definition: RandomBoxPacker.hpp:477
Vec3
Definition: vec3.h:47
RandomBoxPacker.h
esys::lsm::RandomBoxPacker::ParticleVector
NTable::ParticleVector ParticleVector
Definition: RandomBoxPacker.h:122
esys::lsm::FittedParticleIterator::m_fitterPtrVector
FitterPtrVector m_fitterPtrVector
Definition: RandomBoxPacker.h:104
esys::lsm::FittedParticleIterator::m_fitPlaneVector
PlaneVector m_fitPlaneVector
Definition: RandomBoxPacker.h:99
esys::lsm::Packer::Particle
ParticleCollection::Particle Particle
Definition: Packer.h:38
esys::lsm::FittedParticleIterator::next
Particle next()
Definition: RandomBoxPacker.hpp:234
esys::lsm::RandomBoxPacker::ParticleGenerator
Inherited::ParticleGenerator ParticleGenerator
Definition: RandomBoxPacker.h:117
esys::lsm::RandomBoxPacker::getRandom
double getRandom(double min, double max) const
Definition: RandomBoxPacker.hpp:384
esys::lsm::FittedParticleIterator::ThreeDFitter
ThreeDSphereFitter< FitTraits > ThreeDFitter
Definition: RandomBoxPacker.h:54
esys::lsm::FittedParticleIterator::FitterPtrVector
std::vector< FitterPtr > FitterPtrVector
Definition: RandomBoxPacker.h:52
esys::lsm::RandomBoxPacker::StufferTraits::PlaneVector
Packer::PlaneVector PlaneVector
Definition: RandomBoxPacker.h:132
esys::lsm::MoveToSurfaceFitter
Definition: ParticleFitter.h:109
esys::lsm::RandomBoxPacker::ParticlePool
Inherited::ParticlePool ParticlePool
Definition: RandomBoxPacker.h:123
RandomBoxPacker.hpp
esys::lsm::FittedParticleIterator::getMaxInsertionFailures
int getMaxInsertionFailures() const
Definition: RandomBoxPacker.hpp:85
ParticleVector
std::vector< SimpleParticle > ParticleVector
Definition: SimpleNTable3D.h:22
esys::lsm::FittedParticleIterator::ParticleVector
Packer::ParticleVector ParticleVector
Definition: RandomBoxPacker.h:39
esys::lsm::RandomBoxPacker::particleIsValid
bool particleIsValid(const Particle &particle) const
Definition: RandomBoxPacker.hpp:458
esys::lsm::FittedParticleIterator::FittedParticleIterator
FittedParticleIterator(Packer &packer, int maxInsertionFailures, const PlaneVector &fitPlaneVector)
Definition: RandomBoxPacker.hpp:52
esys::lsm::FittedParticleIterator::getFitPlaneVector
const PlaneVector & getFitPlaneVector() const
Definition: RandomBoxPacker.hpp:79
esys::lsm::FittedParticleIterator::PlaneVector
FitterTraits::PlaneVector PlaneVector
Definition: RandomBoxPacker.h:36
esys::lsm::RandomBoxPacker::NTable
Inherited::NTable NTable
Definition: RandomBoxPacker.h:120
esys::lsm::RandomBoxPacker::StufferTraits::Packer
RandomBoxPacker Packer
Definition: RandomBoxPacker.h:130
esys::lsm::FittedParticleIterator::generateNext
Particle & generateNext()
Definition: RandomBoxPacker.hpp:184
esys::lsm::FittedParticleIterator::Particle
Packer::Particle Particle
Definition: RandomBoxPacker.h:38
esys::lsm::FittedParticleIterator::TwoDFitter
TwoDSphereFitter< FitTraits > TwoDFitter
Definition: RandomBoxPacker.h:55
esys::lsm::FittedParticleIterator::m_lastFailCount
int m_lastFailCount
Definition: RandomBoxPacker.h:101
esys::lsm::RandomBoxPacker::StuffedParticleIterator
FittedParticleIterator< StufferTraits > StuffedParticleIterator
Definition: RandomBoxPacker.h:134