Chaste  Release::2017.1
WntConcentration.hpp
1 /*
2 
3 Copyright (c) 2005-2017, University of Oxford.
4 All rights reserved.
5 
6 University of Oxford means the Chancellor, Masters and Scholars of the
7 University of Oxford, having an administrative office at Wellington
8 Square, Oxford OX1 2JD, UK.
9 
10 This file is part of Chaste.
11 
12 Redistribution and use in source and binary forms, with or without
13 modification, are permitted provided that the following conditions are met:
14  * Redistributions of source code must retain the above copyright notice,
15  this list of conditions and the following disclaimer.
16  * Redistributions in binary form must reproduce the above copyright notice,
17  this list of conditions and the following disclaimer in the documentation
18  and/or other materials provided with the distribution.
19  * Neither the name of the University of Oxford nor the names of its
20  contributors may be used to endorse or promote products derived from this
21  software without specific prior written permission.
22 
23 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
24 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26 ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
27 LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
28 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
29 GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30 HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31 LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
32 OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33 
34 */
35 
36 #ifndef WNTCONCENTRATION_HPP_
37 #define WNTCONCENTRATION_HPP_
38 
39 #include "ChasteSerialization.hpp"
40 #include "SerializableSingleton.hpp"
41 #include <boost/serialization/base_object.hpp>
42 
43 #include <iostream>
44 
45 #include "AbstractCellPopulation.hpp"
46 
53 typedef enum WntConcentrationType_
54 {
55  NONE,
56  LINEAR,
57  RADIAL,
58  EXPONENTIAL
59 } WntConcentrationType;
60 
61 
65 template<unsigned DIM>
66 class WntConcentration : public SerializableSingleton<WntConcentration<DIM> >
67 {
68 private:
69 
72 
76  double mCryptLength;
77 
81  bool mLengthSet;
82 
89  WntConcentrationType mWntType;
90 
95 
99  bool mTypeSet;
100 
105 
111 
122 
129 
136 
145  template<class Archive>
146  void serialize(Archive & archive, const unsigned int version)
147  {
148  bool is_set_up = IsWntSetUp();
149  archive & is_set_up;
150  if (is_set_up)
151  {
152  archive & mCryptLength;
153  archive & mLengthSet;
154  archive & mWntType;
155  archive & mpCellPopulation;
156  archive & mTypeSet;
157  archive & mConstantWntValueForTesting;
159  archive & mWntConcentrationParameter;
160  archive & mCryptProjectionParameterA;
161  archive & mCryptProjectionParameterB;
162  }
163  }
164 
165 protected:
166 
171 
172 public:
173 
180  static WntConcentration* Instance();
181 
185  virtual ~WntConcentration();
186 
191  static void Destroy();
192 
199  double GetWntLevel(double height);
200 
208  double GetWntLevel(CellPtr pCell);
209 
215  c_vector<double, DIM> GetWntGradient(c_vector<double, DIM>& rLocation);
216 
222  c_vector<double, DIM> GetWntGradient(CellPtr pCell);
223 
229  void SetCellPopulation(AbstractCellPopulation<DIM>& rCellPopulation);
230 
235 
239  double GetCryptLength();
240 
246  void SetCryptLength(double cryptLength);
247 
251  WntConcentrationType GetType();
252 
258  void SetType(WntConcentrationType type);
259 
266  void SetConstantWntValueForTesting(double value);
267 
278  bool IsWntSetUp();
279 
284 
290  void SetWntConcentrationParameter(double wntConcentrationParameter);
291 
296 
301 
307  void SetCryptProjectionParameterA(double cryptProjectionParameterA);
308 
314  void SetCryptProjectionParameterB(double cryptProjectionParameterB);
315 };
316 
317 #endif /*WNTCONCENTRATION_HPP_*/
double GetWntLevel(double height)
static void Destroy()
double GetWntConcentrationParameter()
double GetCryptProjectionParameterB()
WntConcentrationType GetType()
void SetType(WntConcentrationType type)
void SetCellPopulation(AbstractCellPopulation< DIM > &rCellPopulation)
virtual ~WntConcentration()
static WntConcentration * Instance()
c_vector< double, DIM > GetWntGradient(c_vector< double, DIM > &rLocation)
AbstractCellPopulation< DIM > * mpCellPopulation
void SetCryptLength(double cryptLength)
void SetConstantWntValueForTesting(double value)
static WntConcentration * mpInstance
AbstractCellPopulation< DIM > & rGetCellPopulation()
void SetCryptProjectionParameterA(double cryptProjectionParameterA)
void SetCryptProjectionParameterB(double cryptProjectionParameterB)
WntConcentrationType mWntType
double mConstantWntValueForTesting
friend class boost::serialization::access
double GetCryptProjectionParameterA()
void serialize(Archive &archive, const unsigned int version)
void SetWntConcentrationParameter(double wntConcentrationParameter)