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 RANDOMCELLKILLER_HPP_
00029 #define RANDOMCELLKILLER_HPP_
00030
00031 #include "AbstractCellKiller.hpp"
00032 #include "RandomNumberGenerator.hpp"
00033
00034 #include <boost/serialization/access.hpp>
00035 #include <boost/serialization/base_object.hpp>
00036
00037
00048 template <unsigned SPACE_DIM>
00049 class RandomCellKiller : public AbstractCellKiller<SPACE_DIM>
00050 {
00051 private:
00052
00054 double mProbabilityOfDeath;
00055
00057 friend class boost::serialization::access;
00068 template<class Archive>
00069 void serialize(Archive & archive, const unsigned int version)
00070 {
00071 archive & boost::serialization::base_object<AbstractCellKiller<SPACE_DIM> >(*this);
00072
00073
00074 RandomNumberGenerator* p_random_generator = RandomNumberGenerator::Instance();
00075 archive & *p_random_generator;
00076 archive & p_random_generator;
00077 }
00078
00079 public:
00080
00087 RandomCellKiller(AbstractTissue<SPACE_DIM>* pTissue, double probabilityOfDeath);
00088
00092 double GetDeathProbability() const;
00093
00099 void TestAndLabelSingleCellForApoptosis(TissueCell& rCell);
00100
00105 void TestAndLabelCellsForApoptosisOrDeath();
00106
00107 };
00108
00109 #include "TemplatedExport.hpp"
00110
00111 EXPORT_TEMPLATE_CLASS_SAME_DIMS(RandomCellKiller)
00112
00113 namespace boost
00114 {
00115 namespace serialization
00116 {
00120 template<class Archive, unsigned DIM>
00121 inline void save_construct_data(
00122 Archive & ar, const RandomCellKiller<DIM> * t, const BOOST_PFTO unsigned int file_version)
00123 {
00124
00125 const AbstractTissue<DIM>* const p_tissue = t->GetTissue();
00126 ar << p_tissue;
00127 double prob = t->GetDeathProbability();
00128 ar << prob;
00129 }
00130
00134 template<class Archive, unsigned DIM>
00135 inline void load_construct_data(
00136 Archive & ar, RandomCellKiller<DIM> * t, const unsigned int file_version)
00137 {
00138
00139 AbstractTissue<DIM>* p_tissue;
00140 ar >> p_tissue;
00141 double prob;
00142 ar >> prob;
00143
00144
00145 ::new(t)RandomCellKiller<DIM>(p_tissue, prob);
00146 }
00147 }
00148 }
00149
00150 #endif