MorphoGraphX  2.0-1-227
DynamXProcessHejnowicz.hpp
Go to the documentation of this file.
1 //
2 // This file is part of MorphoGraphX - http://www.MorphoGraphX.org
3 // Copyright (C) 2012-2016 Richard S. Smith and collaborators.
4 //
5 // If you use MorphoGraphX in your work, please cite:
6 // http://dx.doi.org/10.7554/eLife.05864
7 //
8 // MorphoGraphX is free software, and is licensed under under the terms of the
9 // GNU General (GPL) Public License version 2.0, http://www.gnu.org/licenses.
10 //
11 
12 #ifndef DYNAMX_PROCESS_HEJNOWICZ_HPP
13 #define DYNAMX_PROCESS_HEJNOWICZ_HPP
14 
15 #include <Process.hpp>
16 #include <ProcessUtils.hpp>
17 #include <HejnowiczSurface.hpp>
18 
19 namespace mgx
20 {
30  class mgxBase_EXPORT HejnowiczSurfaceParms : public Process
31  {
32  public:
33  HejnowiczSurfaceParms(const Process &process) : Process(process) {}
34 
36  bool run(const QStringList &) { return true; }
37 
38  QString description() const { return
39  "Parameters for Hejnowicz Surface (Hejnowicz and Karczewski 1993)"; }
40 
41  QStringList parmNames() const { return HejnowiczSurface::parmNames(); }
42  QStringList parmDescs() const { return HejnowiczSurface::parmDescs(); }
43  QStringList parmDefaults() const { return HejnowiczSurface::parmDefaults(); }
44 
45  ParmChoiceMap parmChoice() const
46  {
47  ParmChoiceMap map;
48  map[HejnowiczSurface::pGrowthType] = QStringList() << "Hejnowicz" << "GrowthFunc" << "GrowthMap";
49  return map;
50  }
51 
52  // Icon file
53  QIcon icon() const { return QIcon(":/images/Parameters.png"); }
54  };
55 
65  class mgxBase_EXPORT HejnowiczSurfaceGrowth : public Process
66  {
67  public:
68  HejnowiczSurfaceGrowth(const Process &process) : Process(process) {}
69 
71  bool initialize(QStringList &parms, QWidget *parent);
72 
74  bool step(const QStringList &parms);
75 
77  bool rewind(QStringList &parms, QWidget *parent);
78 
80  QString description() const { return "Growing hejnowicz surface"; }
81 
82  // Parameters
83  enum ParmNames { pDt, pDrawSteps, pCellKill, pTissueParmsProc, pSurfaceParmsProc, pNumParms };
84 
85  QStringList parmNames() const
86  {
87  QVector <QString> vec(pNumParms);
88 
89  vec[pDt] = "Dt";
90  vec[pDrawSteps] = "DrawSteps";
91  vec[pCellKill] = "CellKill";
92  vec[pTissueParmsProc] = "Tissue Parms Process";
93  vec[pSurfaceParmsProc] = "Surface Parms Process";
94 
95  return vec.toList();
96  }
97 
98  QStringList parmDescs() const
99  {
100  QVector <QString> vec(pNumParms);
101 
102  vec[pDt] = "Growth timestep";
103  vec[pDrawSteps] = "Steps between drawn frames";
104  vec[pCellKill] = "Distance from the tip (in NRS coordinates) to kill cell";
105  vec[pTissueParmsProc] = "Process to hold tissue parameters";
106  vec[pSurfaceParmsProc] = "Process to hold surface parameters";
107 
108  return vec.toList();
109  }
110 
111  QStringList parmDefaults() const
112  {
113  QVector <QString> vec(pNumParms);
114 
115  vec[pDt] = "0.1";
116  vec[pDrawSteps] = "3";
117  vec[pCellKill] = "3.0";
118  vec[pTissueParmsProc] = "TissueParms";
119  vec[pSurfaceParmsProc] = "SurfaceParms";
120 
121  return vec.toList();
122  }
123 
124  ParmChoiceMap parmChoice() const
125  {
126  ParmChoiceMap map;
127  return map;
128  }
129 
130  // Plug-in icon
131  QIcon icon() const { return QIcon(":/images/Hejnowicz.png"); }
132 
133  // Hejnowicz surface object
135 
136  private:
137  // Read parameters
138  bool processParms(const QStringList &parms);
139 
140  // Model parameters from GUI
141  double dt; // Timestep
142  int drawSteps; // Steps per GUI update
143  double cellKill; // Arclength to kill cells at
144 
145  // Mesh object
146  Mesh *mesh; // Current mesh
147  CellTissue *T; // Cellular tissue
148 
149  // Hejnowicz vertex atttributes
150  HejnowiczSurface::VertexAttr *vertexData;
151 
152  QString surfaceParmsProc; // Process name for the surface parameters
153  QStringList surfaceParms;
154 
155  QString tissueParmsProc; // Process name for the tissue parameters
156  QStringList tissueParms;
157 
158  // Define all global data you want to save in the mesh in the attributes
159  double &time()
160  {
161  return mesh->attributes().attrMap<QString, double>("HejnowiczSurface Time")["Time"];
162  }
163  };
164 
173  class mgxBase_EXPORT HejnowiczInitialCell : public Process
174  {
175  public:
176  HejnowiczInitialCell(const Process &process) : Process(process) {}
177 
179  bool run(const QStringList &parms)
180  {
181  Mesh *mesh = currentMesh();
182  Point2d top, bottom, middle;
183  fromQString(top, parms[1]);
184  fromQString(bottom, parms[2]);
185  fromQString(middle, parms[3]);
186  return run(mesh, parms[0], top, bottom, middle);
187  }
188  bool run(Mesh *mesh, const QString &growthProc,
189  const Point2d &top, const Point2d &bottom, const Point2d &middle);
190 
191  // Functions for Gui
192  QString description() const { return "Create initial cell for Hejnowicz model"; }
193  QStringList parmNames() const { return QStringList()
194  << "Hejnowicz Growth Process" << "Top uv" << "Bottom uv" << "Middle uv"; }
195  QStringList parmDescs() const { return QStringList()
196  << "Hejnowicz Growth Process"
197  << "Local coordinates for top corner (mirrored)"
198  << "Local coordinates for bottom corner (mirrored)"
199  << "Local coordinates for bottom middle point"; }
200  QStringList parmDefaults() const { return QStringList()
201  << "HejnowiczSurfaceGrowth" << "0.7 0.5" << "0.2 0.7" << "0.0 0.7"; }
202 
203  // Icon file
204  QIcon icon() const { return QIcon(":/images/InitialCell.png"); }
205 
206  private:
207  QStringList hejnowiczGrowthParms;
208  HejnowiczSurfaceGrowth *hejnowiczGrowth;
209  };
210  }
211 #endif
212 
mgx::HejnowiczSurfaceGrowth::HejnowiczSurfaceGrowth
HejnowiczSurfaceGrowth(const Process &process)
Definition: DynamXProcessHejnowicz.hpp:68
mgx::HejnowiczSurfaceGrowth::parmNames
QStringList parmNames() const
Definition: DynamXProcessHejnowicz.hpp:85
mgx::HejnowiczInitialCell::description
QString description() const
Definition: DynamXProcessHejnowicz.hpp:192
mgx::HejnowiczSurfaceParms::parmNames
QStringList parmNames() const
Definition: DynamXProcessHejnowicz.hpp:41
mgx::HejnowiczSurfaceGrowth::icon
QIcon icon() const
Definition: DynamXProcessHejnowicz.hpp:131
mgx::HejnowiczInitialCell::parmNames
QStringList parmNames() const
Definition: DynamXProcessHejnowicz.hpp:193
Process.hpp
mgx::HejnowiczSurfaceParms::description
QString description() const
Definition: DynamXProcessHejnowicz.hpp:38
mgx::HejnowiczSurfaceGrowth::ParmNames
ParmNames
Definition: DynamXProcessHejnowicz.hpp:83
mgx::Mesh::attributes
const Attributes & attributes() const
Get the mesh attributes.
Definition: Mesh.hpp:187
mgx::HejnowiczSurface
Definition: HejnowiczSurface.hpp:28
mgx::fromQString
bool fromQString(Vector< dim, T > &p, const QString &s, QString sep=" ")
Convert a QString to a Point.
Definition: ProcessUtils.hpp:53
mgx::HejnowiczInitialCell::HejnowiczInitialCell
HejnowiczInitialCell(const Process &process)
Definition: DynamXProcessHejnowicz.hpp:176
mgx::HejnowiczSurfaceParms::HejnowiczSurfaceParms
HejnowiczSurfaceParms(const Process &process)
Definition: DynamXProcessHejnowicz.hpp:33
mgx::HejnowiczSurface::parmDefaults
static QStringList parmDefaults()
Definition: HejnowiczSurface.hpp:104
mgx::HejnowiczSurface::pGrowthType
@ pGrowthType
Definition: HejnowiczSurface.hpp:32
mgx::HejnowiczInitialCell
Definition: DynamXProcessHejnowicz.hpp:173
mgx::CellTissue
Definition: CellTissue.hpp:46
ProcessUtils.hpp
mgx::HejnowiczSurface::parmDescs
static QStringList parmDescs()
Definition: HejnowiczSurface.hpp:86
mgx::HejnowiczInitialCell::icon
QIcon icon() const
Definition: DynamXProcessHejnowicz.hpp:204
mgx
Distributed matrix library.
Definition: Assert.hpp:26
mgx::HejnowiczSurfaceGrowth::parmDefaults
QStringList parmDefaults() const
Definition: DynamXProcessHejnowicz.hpp:111
mgx::HejnowiczSurfaceGrowth::pTissueParmsProc
@ pTissueParmsProc
Definition: DynamXProcessHejnowicz.hpp:83
mgx::HejnowiczSurfaceGrowth::parmChoice
ParmChoiceMap parmChoice() const
Definition: DynamXProcessHejnowicz.hpp:124
mgx::Process
Definition: Process.hpp:219
mgx::HejnowiczSurfaceParms::parmDescs
QStringList parmDescs() const
Definition: DynamXProcessHejnowicz.hpp:42
mgx::HejnowiczInitialCell::parmDefaults
QStringList parmDefaults() const
Definition: DynamXProcessHejnowicz.hpp:200
mgx::Attributes::attrMap
AttrMap< KeyT, ValueT > & attrMap(const QString &name, bool saveRequired=true)
Get the attribute, if it does not exist create it and add to the set If it exists,...
Definition: Attributes.hpp:1116
mgx::HejnowiczSurfaceGrowth
Definition: DynamXProcessHejnowicz.hpp:65
mgx::HejnowiczSurface::parmNames
static QStringList parmNames()
Definition: HejnowiczSurface.hpp:68
mgx::HejnowiczSurfaceParms
Definition: DynamXProcessHejnowicz.hpp:30
mgx::HejnowiczSurfaceParms::parmChoice
ParmChoiceMap parmChoice() const
Definition: DynamXProcessHejnowicz.hpp:45
mgx::Mesh
Definition: Mesh.hpp:54
mgx::HejnowiczSurfaceGrowth::parmDescs
QStringList parmDescs() const
Definition: DynamXProcessHejnowicz.hpp:98
mgx::Vector< 2, double >
mgx::HejnowiczSurfaceParms::icon
QIcon icon() const
Definition: DynamXProcessHejnowicz.hpp:53
mgx::HejnowiczSurfaceGrowth::description
QString description() const
Process long description.
Definition: DynamXProcessHejnowicz.hpp:80
mgx::HejnowiczSurfaceParms::run
bool run(const QStringList &)
Run is empty, this process is only for parameters.
Definition: DynamXProcessHejnowicz.hpp:36
mgx::HejnowiczSurfaceParms::parmDefaults
QStringList parmDefaults() const
Definition: DynamXProcessHejnowicz.hpp:43
mgx::HejnowiczSurfaceGrowth::hejnowiczSurface
HejnowiczSurface hejnowiczSurface
Definition: DynamXProcessHejnowicz.hpp:134
mgx::HejnowiczInitialCell::run
bool run(const QStringList &parms)
Make the initial cell.
Definition: DynamXProcessHejnowicz.hpp:179
HejnowiczSurface.hpp
mgx::AttrMap
Attribute map wraps std::map.
Definition: Attributes.hpp:686
mgx::map
CU_HOST_DEVICE Vector< dim, T > map(const T &(*fct)(const T1 &), const Vector< dim, T1 > &v)
Definition: Vector.hpp:1380
mgx::HejnowiczInitialCell::parmDescs
QStringList parmDescs() const
Definition: DynamXProcessHejnowicz.hpp:195