LuoRudySpiralWaveCellFactory.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
00030
00031
00032
00033
00034
00035
00036 #ifndef LUORUDYSPIRALWAVECELLFACTORY_HPP_
00037 #define LUORUDYSPIRALWAVECELLFACTORY_HPP_
00038
00039 #include "LuoRudy1991BackwardEuler.hpp"
00040 #include "AbstractCardiacCellFactory.hpp"
00041 #include "MultiStimulus.hpp"
00042 #include "SimpleStimulus.hpp"
00043
00049 class LuoRudySpiralWaveCellFactory : public AbstractCardiacCellFactory<2>
00050 {
00051 private:
00053 boost::shared_ptr<SimpleStimulus> mpS1Stimulus;
00055 boost::shared_ptr<SimpleStimulus> mpS2Stimulus;
00057 boost::shared_ptr<MultiStimulus> mpBothStimulus;
00059 double mXExtent;
00061 double mYExtent;
00062 public:
00069 LuoRudySpiralWaveCellFactory(double xExtent, double yExtent)
00070 : AbstractCardiacCellFactory<2>(),
00071 mpS1Stimulus(new SimpleStimulus(-50000.0, 2, 0)),
00072 mpS2Stimulus(new SimpleStimulus(-70000.0, 2, 45)),
00073 mpBothStimulus(new MultiStimulus()),
00074 mXExtent(xExtent),
00075 mYExtent(yExtent)
00076 {
00077 mpBothStimulus->AddStimulus(mpS1Stimulus);
00078 mpBothStimulus->AddStimulus(mpS2Stimulus);
00079 }
00080
00090 AbstractCardiacCell* CreateCardiacCellForTissueNode(Node<2>* pNode)
00091 {
00092 double x = pNode->rGetLocation()[0];
00093 double y = pNode->rGetLocation()[1];
00094
00095 double x_threshold_for_S1 = 0.1 + 1e-6;
00096 double x_threshold_for_S2 = mXExtent*0.6;
00097 double y_threshold_for_S2 = mYExtent*0.5;
00098
00099 AbstractCardiacCell* p_cell;
00100 if ( x < x_threshold_for_S1 )
00101 {
00102 if (y<y_threshold_for_S2)
00103 {
00104 p_cell = new CellLuoRudy1991FromCellMLBackwardEuler(mpSolver, mpBothStimulus);
00105 }
00106 else
00107 {
00108 p_cell = new CellLuoRudy1991FromCellMLBackwardEuler(mpSolver, mpS1Stimulus);
00109 }
00110 }
00111 else if ( (x < x_threshold_for_S2) && (y < y_threshold_for_S2) )
00112 {
00113 p_cell = new CellLuoRudy1991FromCellMLBackwardEuler(mpSolver, mpS2Stimulus);
00114 }
00115 else
00116 {
00117 p_cell = new CellLuoRudy1991FromCellMLBackwardEuler(mpSolver, this->mpZeroStimulus);
00118 }
00119
00120
00121
00122 p_cell->SetParameter("membrane_L_type_calcium_current_conductance",0);
00123
00124 unsigned node_index = pNode->GetIndex();
00125 if (node_index==0)
00126 {
00127
00128
00129
00130
00131 std::cout << "G_si = " << p_cell->GetAnyVariable("membrane_L_type_calcium_current_conductance") << "\n";
00132
00133
00134
00135 }
00136 return p_cell;
00137 }
00138 };
00139
00140 #endif // LUORUDYSPIRALWAVECELLFACTORY_HPP_