v0.16.0
Loading...
Searching...
No Matches
Public Member Functions | Public Attributes | List of all members
CellEngineering::DataFromFiles Struct Reference

#include "users_modules/cell_engineering/src/DispMap.hpp"

Collaboration diagram for CellEngineering::DataFromFiles:
[legend]

Public Member Functions

 DataFromFiles (string &file)
 
MoFEMErrorCode loadFileData ()
 
MoFEMErrorCode fromOptions ()
 
double getDataForGivenCoordinate (const double x, const double y, vector< vector< double > > &main_vector, const double sCale, const double cUbe_size)
 

Public Attributes

string & fIle
 
double sCale
 
double cUbe_size
 
vector< vector< double > > main_vector
 
double lAmbda
 

Detailed Description

Definition at line 19 of file DispMap.hpp.

Constructor & Destructor Documentation

◆ DataFromFiles()

CellEngineering::DataFromFiles::DataFromFiles ( string &  file)
inline

Definition at line 28 of file DispMap.hpp.

28: fIle(file) {}

Member Function Documentation

◆ fromOptions()

MoFEMErrorCode CellEngineering::DataFromFiles::fromOptions ( )
inline

Definition at line 58 of file DispMap.hpp.

58 {
60 PetscOptionsBegin(PETSC_COMM_WORLD, "", "Get parameters", "none");
61
62 cUbe_size = 4;
63 CHKERR PetscOptionsScalar("-cube_size", "get cube size for the averaging",
64 "", 0, &cUbe_size, PETSC_NULLPTR);
65
66 sCale = 1;
67 CHKERR PetscOptionsScalar(
68 "-scale", "scale the distance between voxels (eg. from mm to m)", "",
69 sCale, &sCale, PETSC_NULLPTR);
70
71 PetscOptionsEnd();
72
74 }
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
#define CHKERR
Inline error check.

◆ getDataForGivenCoordinate()

double CellEngineering::DataFromFiles::getDataForGivenCoordinate ( const double  x,
const double  y,
vector< vector< double > > &  main_vector,
const double  sCale,
const double  cUbe_size 
)
inline

returns vertors of data for given index of the point

Parameters
vec_idxreference vector of indices
vec_datareference vector of data (colors)
Returns
error code

Definition at line 83 of file DispMap.hpp.

85 {
86
87 const int size_y = main_vector.size(); // flip
88 const int size_x = main_vector.begin()->size();
89 double data = 0;
90
91 vector<int> vec_ix;
92 vector<int> vec_iy;
93 vector<double> vec_data;
94 vector<double> vec_dist;
95
96 int nx = ceil(cUbe_size);
97 int ny = ceil(cUbe_size);
98
99 int ix = ceil(x / sCale);
100 int iy = ceil(y / sCale);
101
102 vec_ix.resize(2 * nx);
103 vec_iy.resize(2 * ny);
104
105 int ii = 0;
106 for (int i = 0; i < 2 * nx; i++) {
107 int idx = ix - nx + i;
108 if (idx >= size_x / 2 || idx < -size_x / 2)
109 continue;
110 vec_ix[ii++] = idx;
111 }
112 vec_ix.resize(ii);
113 ii = 0;
114 for (int i = 0; i < 2 * ny; i++) {
115 int idx = iy - ny + i;
116 if (idx >= size_y / 2 || idx < -size_y / 2)
117 continue;
118 vec_iy[ii++] = idx;
119 }
120 vec_iy.resize(ii);
121 ii = 0;
122
123 vec_data.resize(vec_iy.size() * vec_ix.size());
124 vec_dist.resize(vec_iy.size() * vec_ix.size());
125
126 for (vector<int>::iterator it_iy = vec_iy.begin(); it_iy != vec_iy.end();
127 it_iy++) {
128 for (vector<int>::iterator it_ix = vec_ix.begin(); it_ix != vec_ix.end();
129 it_ix++) {
130 vec_data[ii] =
131 main_vector[*it_iy + size_y / 2][*it_ix + size_x / 2]; // flip
132 vec_dist[ii] = ((*it_iy * sCale - y) * (*it_iy * sCale - y) +
133 (*it_ix * sCale - x) * (*it_ix * sCale - x));
134
135 ii++;
136 }
137 }
138
139 // gaussian smoothing
140 vector<double> kernel;
141 kernel.resize(vec_data.size());
142 int i = 0;
143 double sigma = 10;
144 double sum = 0;
145 const double m = (1 / sqrt(M_PI * 2 * sigma * sigma));
146 for (int ii = 0; ii < vec_dist.size(); ii++) {
147 kernel[i] = m * exp(-(vec_dist[ii]) /
148 (2 * sigma * sigma)); // distance is already squared
149 sum += kernel[i++];
150 }
151 ii = 0;
152 for (vector<double>::iterator vec_itr = vec_data.begin();
153 vec_itr != vec_data.end(); vec_itr++) {
154 kernel[ii] /= sum;
155 data += (*vec_itr) * kernel[ii++];
156 }
157 return data;
158 }
FTensor::Index< 'i', SPACE_DIM > i
FTensor::Index< 'm', 3 > m
vector< vector< double > > main_vector
Definition DispMap.hpp:25

◆ loadFileData()

MoFEMErrorCode CellEngineering::DataFromFiles::loadFileData ( )
inline

Definition at line 30 of file DispMap.hpp.

30 {
32 ifstream in(fIle.c_str());
33 if (!in.is_open()) {
34 SETERRQ(PETSC_COMM_SELF, MOFEM_DATA_INCONSISTENCY,
35 "file with data points not found");
36 // cout << ">> couldn't read the file <<"<< endl;
37 }
38
39 typedef boost::tokenizer<boost::escaped_list_separator<char>> Tokenizer;
40
41 string line;
42
43 main_vector.clear();
44 while (getline(in, line)) {
45 vector<double> vec;
46 Tokenizer tok(line);
47 for (Tokenizer::iterator it(tok.begin()), end(tok.end()); it != end;
48 ++it) {
49 vec.push_back(atof(it->c_str()));
50 }
51
52 main_vector.push_back(vec);
53 }
54 reverse(main_vector.begin(), main_vector.end());
56 }
@ MOFEM_DATA_INCONSISTENCY
Definition definitions.h:31

Member Data Documentation

◆ cUbe_size

double CellEngineering::DataFromFiles::cUbe_size

Definition at line 24 of file DispMap.hpp.

◆ fIle

string& CellEngineering::DataFromFiles::fIle

Definition at line 21 of file DispMap.hpp.

◆ lAmbda

double CellEngineering::DataFromFiles::lAmbda

Definition at line 26 of file DispMap.hpp.

◆ main_vector

vector<vector<double> > CellEngineering::DataFromFiles::main_vector

Definition at line 25 of file DispMap.hpp.

◆ sCale

double CellEngineering::DataFromFiles::sCale

Definition at line 23 of file DispMap.hpp.


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