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 #ifndef PLANEBASEDCELLKILLER_HPP_
00030 #define PLANEBASEDCELLKILLER_HPP_
00031
00032 #include "AbstractCellKiller.hpp"
00033
00034 #include "ChasteSerialization.hpp"
00035 #include <boost/serialization/base_object.hpp>
00036 #include <boost/serialization/vector.hpp>
00037
00043 template<unsigned DIM>
00044 class PlaneBasedCellKiller : public AbstractCellKiller<DIM>
00045 {
00046 private:
00047
00051 c_vector<double, DIM> mPointOnPlane;
00052
00056 c_vector<double, DIM> mNormalToPlane;
00057
00059 friend class boost::serialization::access;
00066 template<class Archive>
00067 void serialize(Archive & archive, const unsigned int version)
00068 {
00069 archive & boost::serialization::base_object<AbstractCellKiller<DIM> >(*this);
00070 }
00071
00072 public:
00073
00081 PlaneBasedCellKiller(AbstractCellPopulation<DIM>* pCellPopulation,
00082 c_vector<double, DIM> point,
00083 c_vector<double, DIM> normal);
00084
00088 const c_vector<double, DIM>& rGetPointOnPlane() const;
00089
00093 const c_vector<double, DIM>& rGetNormalToPlane() const;
00094
00098 virtual void TestAndLabelCellsForApoptosisOrDeath();
00099
00105 void OutputCellKillerParameters(out_stream& rParamsFile);
00106 };
00107
00108 #include "SerializationExportWrapper.hpp"
00109 EXPORT_TEMPLATE_CLASS_SAME_DIMS(PlaneBasedCellKiller)
00110
00111 namespace boost
00112 {
00113 namespace serialization
00114 {
00118 template<class Archive, unsigned DIM>
00119 inline void save_construct_data(
00120 Archive & ar, const PlaneBasedCellKiller<DIM> * t, const BOOST_PFTO unsigned int file_version)
00121 {
00122
00123 const AbstractCellPopulation<DIM>* const p_cell_population = t->GetCellPopulation();
00124 ar << p_cell_population;
00125
00126
00127 c_vector<double, DIM> point = t->rGetPointOnPlane();
00128 for (unsigned i=0; i<DIM; i++)
00129 {
00130 ar << point[i];
00131 }
00132 c_vector<double, DIM> normal = t->rGetNormalToPlane();
00133 for (unsigned i=0; i<DIM; i++)
00134 {
00135 ar << normal[i];
00136 }
00137 }
00138
00142 template<class Archive, unsigned DIM>
00143 inline void load_construct_data(
00144 Archive & ar, PlaneBasedCellKiller<DIM> * t, const unsigned int file_version)
00145 {
00146
00147 AbstractCellPopulation<DIM>* p_cell_population;
00148 ar >> p_cell_population;
00149
00150
00151 c_vector<double, DIM> point;
00152 for (unsigned i=0; i<DIM; i++)
00153 {
00154 ar >> point[i];
00155 }
00156 c_vector<double, DIM> normal;
00157 for (unsigned i=0; i<DIM; i++)
00158 {
00159 ar >> normal[i];
00160 }
00161
00162
00163 ::new(t)PlaneBasedCellKiller<DIM>(p_cell_population, point, normal);
00164 }
00165 }
00166 }
00167
00168 #endif