Field3D
FieldGroup< BaseTypeList_T, Dims_T > Class Template Reference

#include <FieldGroup.h>

Classes

struct  CountFields
 
struct  GetIntersections
 
struct  GetMinMax
 
struct  GetMinMaxMIP
 
struct  GrabFields
 
struct  MemSize
 
struct  Sample
 
struct  SampleMIP
 

Public Types

typedef fusion_ro::as_vector< MPLDenseTypes >::type DenseTypes
 
typedef fusion_ro::as_vector< MPLMIPDenseTypes >::type MIPDenseTypes
 
typedef fusion_ro::as_vector< MPLMIPSparseTypes >::type MIPSparseTypes
 
typedef BaseTypeList_T MPLBaseTypes
 
typedef mpl::transform< MPLBaseTypes, detail::MakeDense< ph::_1 > >::type MPLDenseTypes
 
typedef mpl::transform< MPLBaseTypes, detail::MakeMIPDense< ph::_1 > >::type MPLMIPDenseTypes
 
typedef mpl::transform< MPLBaseTypes, detail::MakeMIPSparse< ph::_1 > >::type MPLMIPSparseTypes
 
typedef mpl::transform< MPLBaseTypes, detail::MakeSparse< ph::_1 > >::type MPLSparseTypes
 
typedef fusion_ro::as_vector< MPLSparseTypes >::type SparseTypes
 

Public Member Functions

 FieldGroup ()
 Default constructor, does nothing. More...
 
 FieldGroup (const Field3D::FieldRes::Vec &fields)
 Construct from a set of fields. More...
 
const FieldRes::Vecfields () const
 Returns a vector of FieldRes::Ptrs to the fields in the group. More...
 
bool getIntersections (const Ray3d &ray, IntervalVec &intervals) const
 Gets the intersection intervals between the ray and the fields. More...
 
void getMinMax (const Box3d &wsBounds, float *min, float *max) const
 Returns the min/max range within a given bounding box. More...
 
int load (const std::string &filename, const std::string &attribute)
 Loads all fields from a given file and optional attribute pattern. More...
 
long long int memSize () const
 Returns the memory use in bytes for the fields in the group. More...
 
void sample (const V3d &vsP, float *result, bool isVs) const
 Samples the group of fields at the given point. This call will not include MIP fields, which require a spot size. More...
 
void sampleMIP (const V3d &vsP, const float wsSpotSize, float *result, bool isVs) const
 Samples all the MIP fields in the group. More...
 
void setup (const Field3D::FieldRes::Vec &fields)
 
size_t size () const
 The number of fields in the group. More...
 

Static Public Attributes

static const int k_missingFile = -1
 Used by load() to indicate missing file. More...
 

Private Attributes

FieldRes::Vec m_allFields
 
DenseTypes m_dense
 
MIPDenseTypes m_mipDense
 
MIPSparseTypes m_mipSparse
 
SparseTypes m_sparse
 

Detailed Description

template<typename BaseTypeList_T, int Dims_T>
class FieldGroup< BaseTypeList_T, Dims_T >

The FieldGroup is a convenient way to access a collection of heterogeneous fields as one. It will accept any combination of known data structures and template types and efficiently evaluates each one with the optimal interpolator, etc.

Definition at line 224 of file FieldGroup.h.

Member Typedef Documentation

template<typename BaseTypeList_T , int Dims_T>
typedef BaseTypeList_T FieldGroup< BaseTypeList_T, Dims_T >::MPLBaseTypes

Definition at line 229 of file FieldGroup.h.

template<typename BaseTypeList_T , int Dims_T>
typedef mpl::transform< MPLBaseTypes, detail::MakeDense<ph::_1> >::type FieldGroup< BaseTypeList_T, Dims_T >::MPLDenseTypes

Definition at line 234 of file FieldGroup.h.

template<typename BaseTypeList_T , int Dims_T>
typedef mpl::transform< MPLBaseTypes, detail::MakeSparse<ph::_1> >::type FieldGroup< BaseTypeList_T, Dims_T >::MPLSparseTypes

Definition at line 237 of file FieldGroup.h.

template<typename BaseTypeList_T , int Dims_T>
typedef mpl::transform< MPLBaseTypes, detail::MakeMIPDense<ph::_1> >::type FieldGroup< BaseTypeList_T, Dims_T >::MPLMIPDenseTypes

Definition at line 240 of file FieldGroup.h.

template<typename BaseTypeList_T , int Dims_T>
typedef mpl::transform< MPLBaseTypes, detail::MakeMIPSparse<ph::_1> >::type FieldGroup< BaseTypeList_T, Dims_T >::MPLMIPSparseTypes

Definition at line 243 of file FieldGroup.h.

template<typename BaseTypeList_T , int Dims_T>
typedef fusion_ro::as_vector<MPLDenseTypes>::type FieldGroup< BaseTypeList_T, Dims_T >::DenseTypes

Definition at line 246 of file FieldGroup.h.

template<typename BaseTypeList_T , int Dims_T>
typedef fusion_ro::as_vector<MPLSparseTypes>::type FieldGroup< BaseTypeList_T, Dims_T >::SparseTypes

Definition at line 247 of file FieldGroup.h.

template<typename BaseTypeList_T , int Dims_T>
typedef fusion_ro::as_vector<MPLMIPDenseTypes>::type FieldGroup< BaseTypeList_T, Dims_T >::MIPDenseTypes

Definition at line 248 of file FieldGroup.h.

template<typename BaseTypeList_T , int Dims_T>
typedef fusion_ro::as_vector<MPLMIPSparseTypes>::type FieldGroup< BaseTypeList_T, Dims_T >::MIPSparseTypes

Definition at line 249 of file FieldGroup.h.

Constructor & Destructor Documentation

template<typename BaseTypeList_T , int Dims_T>
FieldGroup< BaseTypeList_T, Dims_T >::FieldGroup ( )

Default constructor, does nothing.

Definition at line 323 of file FieldGroup.h.

324 { }
template<typename BaseTypeList_T , int Dims_T>
FieldGroup< BaseTypeList_T, Dims_T >::FieldGroup ( const Field3D::FieldRes::Vec &  fields)

Construct from a set of fields.

Definition at line 330 of file FieldGroup.h.

331 {
332  setup(fields);
333 }
const FieldRes::Vec & fields() const
Returns a vector of FieldRes::Ptrs to the fields in the group.
Definition: FieldGroup.h:286
void setup(const Field3D::FieldRes::Vec &fields)
Definition: FieldGroup.h:339

Member Function Documentation

template<typename BaseTypeList_T , int Dims_T>
void FieldGroup< BaseTypeList_T, Dims_T >::setup ( const Field3D::FieldRes::Vec &  fields)

Definition at line 339 of file FieldGroup.h.

References FieldGroup< BaseTypeList_T, Dims_T >::load().

340 {
341  // Pick out only scalar fields
342  for (size_t i = 0, end = fields.size(); i < end; ++i) {
343  GrabFields op(fields[i]);
344  fusion::for_each(m_dense, op);
345  fusion::for_each(m_sparse, op);
346  fusion::for_each(m_mipDense, op);
347  fusion::for_each(m_mipSparse, op);
348  }
349 }
MIPSparseTypes m_mipSparse
Definition: FieldGroup.h:296
MIPDenseTypes m_mipDense
Definition: FieldGroup.h:295
SparseTypes m_sparse
Definition: FieldGroup.h:294
DenseTypes m_dense
Definition: FieldGroup.h:293
const FieldRes::Vec & fields() const
Returns a vector of FieldRes::Ptrs to the fields in the group.
Definition: FieldGroup.h:286
template<typename BaseTypeList_T , int Dims_T>
int FieldGroup< BaseTypeList_T, Dims_T >::load ( const std::string &  filename,
const std::string &  attribute 
)

Loads all fields from a given file and optional attribute pattern.

Returns
Number of fields loaded, or a negative number if the file failed to open.

Definition at line 356 of file FieldGroup.h.

References Field3DFileBase::getPartitionNames(), and Field3DInputFile::open().

Referenced by FieldGroup< BaseTypeList_T, Dims_T >::setup().

357 {
358  using namespace Field3D;
359 
360  FieldRes::Vec results;
361 
362  // Track number of fields in group before loading.
363  const size_t sizeBeforeLoading = size();
364 
365  // Open each file ---
366 
367  std::vector<std::string> filenames;
368  filenames.push_back(filename);
369 
370  BOOST_FOREACH (const std::string fn, filenames) {
371 
372  Field3DInputFile in;
373  if (!in.open(fn)) {
374  return k_missingFile;
375  }
376 
377  // Use partition names to determine if fields should be loaded
378  std::vector<std::string> names;
379  in.getPartitionNames(names);
380 
381  BOOST_FOREACH (const std::string &name, names) {
382  detail::LoadFields<Dims_T> op(in, name, attribute, results);
383  mpl::for_each<BaseTypeList_T>(op);
384  }
385 
386  }
387 
388  // Record all the loaded fields
389  m_allFields = results;
390 
391  // Set up from fields
392  setup(results);
393 
394  // Done. Return the number of fields that were loaded.
395  return size() - sizeBeforeLoading;
396 }
std::vector< Ptr > Vec
Definition: Field.h:219
size_t size() const
The number of fields in the group.
Definition: FieldGroup.h:402
FieldRes::Vec m_allFields
Definition: FieldGroup.h:298
Provides reading of .f3d (internally, hdf5) files.Refer to using_files for examples of how to use thi...
Definition: Field3DFile.h:434
static const int k_missingFile
Used by load() to indicate missing file.
Definition: FieldGroup.h:254
void getPartitionNames(std::vector< std::string > &names) const
Gets the names of all the partitions in the file.
void setup(const Field3D::FieldRes::Vec &fields)
Definition: FieldGroup.h:339
bool open(const std::string &filename)
Opens the given file.
template<typename BaseTypeList_T , int Dims_T>
size_t FieldGroup< BaseTypeList_T, Dims_T >::size ( ) const

The number of fields in the group.

Definition at line 402 of file FieldGroup.h.

References FieldGroup< BaseTypeList_T, Dims_T >::CountFields::count.

403 {
404  CountFields op;
405  fusion::for_each(m_dense, op);
406  fusion::for_each(m_sparse, op);
407  fusion::for_each(m_mipDense, op);
408  fusion::for_each(m_mipSparse, op);
409  return op.count;
410 }
MIPSparseTypes m_mipSparse
Definition: FieldGroup.h:296
MIPDenseTypes m_mipDense
Definition: FieldGroup.h:295
SparseTypes m_sparse
Definition: FieldGroup.h:294
DenseTypes m_dense
Definition: FieldGroup.h:293
template<typename BaseTypeList_T , int Dims_T>
void FieldGroup< BaseTypeList_T, Dims_T >::sample ( const V3d vsP,
float *  result,
bool  isVs 
) const

Samples the group of fields at the given point. This call will not include MIP fields, which require a spot size.

Definition at line 416 of file FieldGroup.h.

419 {
420  Sample op(vsP, result, isVs);
421  fusion::for_each(m_dense, op);
422  fusion::for_each(m_sparse, op);
423 }
SparseTypes m_sparse
Definition: FieldGroup.h:294
DenseTypes m_dense
Definition: FieldGroup.h:293
template<typename BaseTypeList_T , int Dims_T>
void FieldGroup< BaseTypeList_T, Dims_T >::sampleMIP ( const V3d vsP,
const float  wsSpotSize,
float *  result,
bool  isVs 
) const

Samples all the MIP fields in the group.

Definition at line 429 of file FieldGroup.h.

References FieldGroup< BaseTypeList_T, Dims_T >::getIntersections().

433 {
434  SampleMIP op(vsP, wsSpotSize, result, isVs);
435  fusion::for_each(m_mipDense, op);
436  fusion::for_each(m_mipSparse, op);
437 }
MIPSparseTypes m_mipSparse
Definition: FieldGroup.h:296
MIPDenseTypes m_mipDense
Definition: FieldGroup.h:295
template<typename BaseTypeList_T , int Dims_T>
bool FieldGroup< BaseTypeList_T, Dims_T >::getIntersections ( const Ray3d ray,
IntervalVec intervals 
) const

Gets the intersection intervals between the ray and the fields.

Definition at line 444 of file FieldGroup.h.

Referenced by FieldGroup< BaseTypeList_T, Dims_T >::sampleMIP().

445 {
446  GetIntersections op(ray, intervals);
447  fusion::for_each(m_dense, op);
448  fusion::for_each(m_sparse, op);
449  fusion::for_each(m_mipDense, op);
450  fusion::for_each(m_mipSparse, op);
451  return intervals.size() > 0;
452 }
MIPSparseTypes m_mipSparse
Definition: FieldGroup.h:296
MIPDenseTypes m_mipDense
Definition: FieldGroup.h:295
SparseTypes m_sparse
Definition: FieldGroup.h:294
DenseTypes m_dense
Definition: FieldGroup.h:293
template<typename BaseTypeList_T , int Dims_T>
void FieldGroup< BaseTypeList_T, Dims_T >::getMinMax ( const Box3d wsBounds,
float *  min,
float *  max 
) const

Returns the min/max range within a given bounding box.

Definition at line 458 of file FieldGroup.h.

461 {
462  GetMinMax op(wsBounds, min, max);
463  fusion::for_each(m_dense, op);
464  fusion::for_each(m_sparse, op);
465  GetMinMaxMIP opMIP(wsBounds, min, max);
466  fusion::for_each(m_mipDense, opMIP);
467  fusion::for_each(m_mipSparse, opMIP);
468 }
MIPSparseTypes m_mipSparse
Definition: FieldGroup.h:296
MIPDenseTypes m_mipDense
Definition: FieldGroup.h:295
SparseTypes m_sparse
Definition: FieldGroup.h:294
DenseTypes m_dense
Definition: FieldGroup.h:293
template<typename BaseTypeList_T , int Dims_T>
long long int FieldGroup< BaseTypeList_T, Dims_T >::memSize ( ) const

Returns the memory use in bytes for the fields in the group.

Definition at line 474 of file FieldGroup.h.

475 {
476  long long int result = 0;
477  MemSize op(result);
478  fusion::for_each(m_dense, op);
479  fusion::for_each(m_sparse, op);
480  fusion::for_each(m_mipDense, op);
481  fusion::for_each(m_mipSparse, op);
482  return result;
483 }
MIPSparseTypes m_mipSparse
Definition: FieldGroup.h:296
MIPDenseTypes m_mipDense
Definition: FieldGroup.h:295
SparseTypes m_sparse
Definition: FieldGroup.h:294
DenseTypes m_dense
Definition: FieldGroup.h:293
template<typename BaseTypeList_T , int Dims_T>
const FieldRes::Vec& FieldGroup< BaseTypeList_T, Dims_T >::fields ( ) const
inline

Returns a vector of FieldRes::Ptrs to the fields in the group.

Definition at line 286 of file FieldGroup.h.

287  { return m_allFields; }
FieldRes::Vec m_allFields
Definition: FieldGroup.h:298

Member Data Documentation

template<typename BaseTypeList_T , int Dims_T>
const int FieldGroup< BaseTypeList_T, Dims_T >::k_missingFile = -1
static

Used by load() to indicate missing file.

Definition at line 254 of file FieldGroup.h.

template<typename BaseTypeList_T , int Dims_T>
DenseTypes FieldGroup< BaseTypeList_T, Dims_T >::m_dense
private

Definition at line 293 of file FieldGroup.h.

template<typename BaseTypeList_T , int Dims_T>
SparseTypes FieldGroup< BaseTypeList_T, Dims_T >::m_sparse
private

Definition at line 294 of file FieldGroup.h.

template<typename BaseTypeList_T , int Dims_T>
MIPDenseTypes FieldGroup< BaseTypeList_T, Dims_T >::m_mipDense
private

Definition at line 295 of file FieldGroup.h.

template<typename BaseTypeList_T , int Dims_T>
MIPSparseTypes FieldGroup< BaseTypeList_T, Dims_T >::m_mipSparse
private

Definition at line 296 of file FieldGroup.h.

template<typename BaseTypeList_T , int Dims_T>
FieldRes::Vec FieldGroup< BaseTypeList_T, Dims_T >::m_allFields
private

Definition at line 298 of file FieldGroup.h.


The documentation for this class was generated from the following file: