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 #ifndef PLANEBASEDCELLKILLER_HPP_
00029 #define PLANEBASEDCELLKILLER_HPP_
00030
00031 #include "AbstractCellKiller.hpp"
00032
00033 #include "ChasteSerialization.hpp"
00034 #include <boost/serialization/base_object.hpp>
00035 #include <boost/serialization/vector.hpp>
00036
00042 template<unsigned DIM>
00043 class PlaneBasedCellKiller : public AbstractCellKiller<DIM>
00044 {
00045 private:
00046
00050 c_vector<double, DIM> mPointOnPlane;
00051
00055 c_vector<double, DIM> mNormalToPlane;
00056
00058 friend class boost::serialization::access;
00070 template<class Archive>
00071 void serialize(Archive & archive, const unsigned int version)
00072 {
00073 archive & boost::serialization::base_object<AbstractCellKiller<DIM> >(*this);
00074 }
00075
00076 public:
00077
00085 PlaneBasedCellKiller(AbstractCellPopulation<DIM>* pCellPopulation,
00086 c_vector<double, DIM> point,
00087 c_vector<double, DIM> normal);
00088
00092 const c_vector<double, DIM>& rGetPointOnPlane() const;
00093
00097 const c_vector<double, DIM>& rGetNormalToPlane() const;
00098
00102 virtual void TestAndLabelCellsForApoptosisOrDeath();
00103
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