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
00109 void OutputCellKillerParameters(out_stream& rParamsFile);
00110 };
00111
00112 #include "SerializationExportWrapper.hpp"
00113 EXPORT_TEMPLATE_CLASS_SAME_DIMS(PlaneBasedCellKiller)
00114
00115 namespace boost
00116 {
00117 namespace serialization
00118 {
00122 template<class Archive, unsigned DIM>
00123 inline void save_construct_data(
00124 Archive & ar, const PlaneBasedCellKiller<DIM> * t, const BOOST_PFTO unsigned int file_version)
00125 {
00126
00127 const AbstractCellPopulation<DIM>* const p_cell_population = t->GetCellPopulation();
00128 ar << p_cell_population;
00129
00130
00131 c_vector<double, DIM> point = t->rGetPointOnPlane();
00132 for (unsigned i=0; i<DIM; i++)
00133 {
00134 ar << point[i];
00135 }
00136 c_vector<double, DIM> normal = t->rGetNormalToPlane();
00137 for (unsigned i=0; i<DIM; i++)
00138 {
00139 ar << normal[i];
00140 }
00141 }
00142
00146 template<class Archive, unsigned DIM>
00147 inline void load_construct_data(
00148 Archive & ar, PlaneBasedCellKiller<DIM> * t, const unsigned int file_version)
00149 {
00150
00151 AbstractCellPopulation<DIM>* p_cell_population;
00152 ar >> p_cell_population;
00153
00154
00155 c_vector<double, DIM> point;
00156 for (unsigned i=0; i<DIM; i++)
00157 {
00158 ar >> point[i];
00159 }
00160 c_vector<double, DIM> normal;
00161 for (unsigned i=0; i<DIM; i++)
00162 {
00163 ar >> normal[i];
00164 }
00165
00166
00167 ::new(t)PlaneBasedCellKiller<DIM>(p_cell_population, point, normal);
00168 }
00169 }
00170 }
00171
00172 #endif