PlaneBasedCellKiller.hpp
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036 #ifndef PLANEBASEDCELLKILLER_HPP_
00037 #define PLANEBASEDCELLKILLER_HPP_
00038
00039 #include "AbstractCellKiller.hpp"
00040
00041 #include "ChasteSerialization.hpp"
00042 #include <boost/serialization/base_object.hpp>
00043 #include <boost/serialization/vector.hpp>
00044
00050 template<unsigned DIM>
00051 class PlaneBasedCellKiller : public AbstractCellKiller<DIM>
00052 {
00053 private:
00054
00058 c_vector<double, DIM> mPointOnPlane;
00059
00063 c_vector<double, DIM> mNormalToPlane;
00064
00066 friend class boost::serialization::access;
00073 template<class Archive>
00074 void serialize(Archive & archive, const unsigned int version)
00075 {
00076 archive & boost::serialization::base_object<AbstractCellKiller<DIM> >(*this);
00077 }
00078
00079 public:
00080
00088 PlaneBasedCellKiller(AbstractCellPopulation<DIM>* pCellPopulation,
00089 c_vector<double, DIM> point,
00090 c_vector<double, DIM> normal);
00091
00095 const c_vector<double, DIM>& rGetPointOnPlane() const;
00096
00100 const c_vector<double, DIM>& rGetNormalToPlane() const;
00101
00105 virtual void CheckAndLabelCellsForApoptosisOrDeath();
00106
00112 void OutputCellKillerParameters(out_stream& rParamsFile);
00113 };
00114
00115 #include "SerializationExportWrapper.hpp"
00116 EXPORT_TEMPLATE_CLASS_SAME_DIMS(PlaneBasedCellKiller)
00117
00118 namespace boost
00119 {
00120 namespace serialization
00121 {
00125 template<class Archive, unsigned DIM>
00126 inline void save_construct_data(
00127 Archive & ar, const PlaneBasedCellKiller<DIM> * t, const BOOST_PFTO unsigned int file_version)
00128 {
00129
00130 const AbstractCellPopulation<DIM>* const p_cell_population = t->GetCellPopulation();
00131 ar << p_cell_population;
00132
00133
00134 c_vector<double, DIM> point = t->rGetPointOnPlane();
00135 for (unsigned i=0; i<DIM; i++)
00136 {
00137 ar << point[i];
00138 }
00139 c_vector<double, DIM> normal = t->rGetNormalToPlane();
00140 for (unsigned i=0; i<DIM; i++)
00141 {
00142 ar << normal[i];
00143 }
00144 }
00145
00149 template<class Archive, unsigned DIM>
00150 inline void load_construct_data(
00151 Archive & ar, PlaneBasedCellKiller<DIM> * t, const unsigned int file_version)
00152 {
00153
00154 AbstractCellPopulation<DIM>* p_cell_population;
00155 ar >> p_cell_population;
00156
00157
00158 c_vector<double, DIM> point;
00159 for (unsigned i=0; i<DIM; i++)
00160 {
00161 ar >> point[i];
00162 }
00163 c_vector<double, DIM> normal;
00164 for (unsigned i=0; i<DIM; i++)
00165 {
00166 ar >> normal[i];
00167 }
00168
00169
00170 ::new(t)PlaneBasedCellKiller<DIM>(p_cell_population, point, normal);
00171 }
00172 }
00173 }
00174
00175 #endif