42 boost::shared_ptr<RegularStimulus> p_reg_stim = boost::static_pointer_cast<RegularStimulus>(
mpModel->GetStimulusFunction());
43 boost::shared_ptr<ZeroStimulus> p_zero_stim(
new ZeroStimulus);
44 const double pacing_cycle_length = p_reg_stim->GetPeriod();
45 double stimulus_duration = p_reg_stim->GetDuration();
46 double stimulus_start_time = p_reg_stim->GetStartTime();
47 double stimulus_end_time = stimulus_start_time + stimulus_duration;
48 double maximum_time_step = pacing_cycle_length;
50 bool force_reset_setting =
mpModel->GetForceReset();
51 bool minimal_reset_setting =
mpModel->GetMinimalReset();
57 std::vector<double> old_state_vars;
58 std::vector<double> new_state_vars;
61 const unsigned num_paces_to_analyse = (
mTwoPaceScan) ? 2u : 1u;
62 for (
unsigned i = 0; i <
mMaxNumPaces; i = i + num_paces_to_analyse)
65 for (
unsigned j = 0; j < num_paces_to_analyse; j++)
68 if (stimulus_start_time > 0)
71 mpModel->SetStimulusFunction(p_zero_stim);
72 mpModel->Solve((pacing_cycle_length) * (
double)(i + j), (pacing_cycle_length) * (
double)(i + j) + stimulus_start_time, maximum_time_step);
76 mpModel->SetStimulusFunction(p_reg_stim);
77 mpModel->Solve((pacing_cycle_length) * (
double)(i + j) + stimulus_start_time, (pacing_cycle_length) * (
double)(i + j) + stimulus_end_time, maximum_time_step);
80 mpModel->SetStimulusFunction(p_zero_stim);
81 mpModel->Solve((pacing_cycle_length) * (
double)(i + j) + stimulus_end_time, (pacing_cycle_length) * (
double)(i + j + 1), maximum_time_step);
89 for (
unsigned j = 0; j < old_state_vars.size(); j++)
91 temp += fabs(new_state_vars[j] - old_state_vars[j]);
99 old_state_vars = new_state_vars;
103 mpModel->SetStimulusFunction(p_reg_stim);
104 mpModel->SetForceReset(force_reset_setting);
105 mpModel->SetMinimalReset(minimal_reset_setting);