00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef __itk_Bio_Cell_Base_H
00018 #define __itk_Bio_Cell_Base_H
00019
00020 #include "itkRGBPixel.h"
00021 #include "itkVector.h"
00022 #include "itkPoint.h"
00023 #include "itkBioGenome.h"
00024
00025 namespace itk {
00026
00027 namespace bio {
00028
00029
00030
00035 class CellBase
00036 {
00037 public:
00038 typedef itk::RGBPixel<float> ColorType;
00039 typedef unsigned long int IdentifierType;
00040 typedef itk::bio::Genome GenomeType;
00041 typedef GenomeType::GeneIdType GeneIdType;
00042
00043
00044 virtual ColorType GetColor(void) const;
00045
00046 double GetRadius(void) const;
00047
00048 IdentifierType GetSelfIdentifier(void) const;
00049 IdentifierType GetParentIdentifier(void) const;
00050
00051 enum CellCycleState {
00052 M = 1UL,
00053 Gap1,
00054 S,
00055 Gap2,
00056 Gap0,
00057 Apop
00058 };
00059
00060
00061 protected:
00062 CellBase();
00063 virtual ~CellBase();
00064
00065 virtual void Grow(void);
00066 virtual void DNAReplication(void);
00067 virtual void Apoptosis(void);
00068
00069 virtual void EnergyIntake(void);
00070 virtual void NutrientsIntake(void);
00071 virtual void ComputeGeneNetwork(void);
00072 virtual void SecreteProducts(void);
00073
00074 virtual bool CheckPointGrowth(void);
00075 virtual bool CheckPointDNAReplication(void);
00076 virtual bool CheckPointMitosis(void);
00077 virtual bool CheckPointApoptosis(void);
00078
00079 void MarkForRemoval(void);
00080
00081
00082 static double DefaultRadius;
00083 static ColorType DefaultColor;
00084
00085 static GeneIdType BlueGene;
00086 static GeneIdType RedGene;
00087 static GeneIdType GreenGene;
00088 static GeneIdType Cdk2E;
00089 static GeneIdType Caspase;
00090 static GeneIdType Pressurin;
00091
00092 static double GrowthRadiusLimit;
00093 static double GrowthRadiusIncrement;
00094
00095 static unsigned long MaximumGenerationLimit;
00096 static unsigned long GrowthMaximumLatencyTime;
00097 static unsigned long DivisionMaximumLatencyTime;
00098
00099 static double EnergySelfRepairLevel;
00100 static double NutrientSelfRepairLevel;
00101
00102 static double DefaultEnergyIntake;
00103 static double DefaultNutrientsIntake;
00104
00105 static unsigned long Counter;
00106
00107 static ColorType WellNourishedColor;
00108 static ColorType HopefullColor;
00109 static ColorType StarvingColor;
00110
00111 static double ChemoAttractantLowThreshold;
00112 static double ChemoAttractantHighThreshold;
00113
00114 GenomeType * m_Genome;
00115 GenomeType * m_GenomeCopy;
00116
00117 public:
00118
00119 virtual bool MarkedForRemoval(void) const;
00120
00121 static void SetGrowthRadiusLimit( double );
00122 static void SetGrowthRadiusIncrement( double );
00123 static void SetEnergySelfRepairLevel( double );
00124 static void SetNutrientSelfRepairLevel( double );
00125 static void SetDefaultColor( const ColorType & color );
00126
00127 static void SetChemoAttractantHighThreshold( double );
00128 static void SetChemoAttractantLowThreshold( double );
00129
00130 static void SetGrowthMaximumLatencyTime( unsigned long latency );
00131 static unsigned long GetGrowthMaximumLatencyTime( void );
00132
00133 static double GetGrowthRadiusLimit( void );
00134 static void SetMaximumGenerationLimit( unsigned long );
00135
00136 static void SetDivisionMaximumLatencyTime( unsigned long );
00137 static unsigned long GetDivisionMaximumLatencyTime(void);
00138
00139 static void ResetCounter(void);
00140 static void Initialize(void);
00141
00142
00143 protected:
00144 double m_Pressure;
00145
00146 ColorType m_Color;
00147
00148 double m_Radius;
00149 double m_EnergyReserveLevel;
00150 double m_NutrientsReserveLevel;
00151
00152 unsigned long m_GrowthLatencyTime;
00153
00154 IdentifierType m_ParentIdentifier;
00155 IdentifierType m_SelfIdentifier;
00156
00157 unsigned long m_Generation;
00158
00159 CellCycleState m_CycleState;
00160
00161 bool m_MarkedForRemoval;
00162 unsigned long m_DivisionLatencyTime;
00163
00164 bool m_ScheduleApoptosis;
00165 double m_ChemoAttractantLevel;
00166
00167 };
00168
00169 }
00170
00171 }
00172
00173
00174 #endif
00175