Chaste  Release::2018.1
PropagationPropertiesCalculator.hpp
1 /*
2 
3 Copyright (c) 2005-2018, University of Oxford.
4 All rights reserved.
5 
6 University of Oxford means the Chancellor, Masters and Scholars of the
7 University of Oxford, having an administrative office at Wellington
8 Square, Oxford OX1 2JD, UK.
9 
10 This file is part of Chaste.
11 
12 Redistribution and use in source and binary forms, with or without
13 modification, are permitted provided that the following conditions are met:
14  * Redistributions of source code must retain the above copyright notice,
15  this list of conditions and the following disclaimer.
16  * Redistributions in binary form must reproduce the above copyright notice,
17  this list of conditions and the following disclaimer in the documentation
18  and/or other materials provided with the distribution.
19  * Neither the name of the University of Oxford nor the names of its
20  contributors may be used to endorse or promote products derived from this
21  software without specific prior written permission.
22 
23 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
24 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26 ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
27 LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
28 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
29 GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30 HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31 LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
32 OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33 
34 */
35 
36 
37 #ifndef _PROPAGATIONPROPERTIESCALCULATOR_HPP_
38 #define _PROPAGATIONPROPERTIESCALCULATOR_HPP_
39 
40 #include "Hdf5DataReader.hpp"
41 #include <string>
42 
43 
54 {
55 private:
59  const std::string mVoltageName;
61  std::vector<double> mTimes;
65  std::vector<double> mCachedVoltages;
66 
67 protected:
77  std::vector<double>& rGetCachedVoltages(unsigned globalNodeIndex);
78 
79 public:
88  const std::string voltageName = "V");
89 
92 
99  double CalculateMaximumUpstrokeVelocity(unsigned globalNodeIndex);
100 
108  std::vector<double> CalculateAllMaximumUpstrokeVelocities(unsigned globalNodeIndex, double threshold);
109 
117  std::vector<double> CalculateUpstrokeTimes(unsigned globalNodeIndex, double threshold);
118 
130  double CalculateConductionVelocity(unsigned globalNearNodeIndex,
131  unsigned globalFarNodeIndex,
132  const double euclideanDistance);
133 
145  std::vector<double> CalculateAllConductionVelocities(unsigned globalNearNodeIndex,
146  unsigned globalFarNodeIndex,
147  const double euclideanDistance);
155  double CalculateActionPotentialDuration(const double percentage,
156  unsigned globalNodeIndex);
164  double CalculatePeakMembranePotential(unsigned globalNodeIndex);
165 
173  std::vector<double> CalculateAllActionPotentialDurations(const double percentage,
174  unsigned globalNodeIndex,
175  double threshold);
176 
185  std::vector<std::vector<double> > CalculateAllActionPotentialDurationsForNodeRange(const double percentage,
186  unsigned lowerNodeIndex,
187  unsigned upperNodeIndex,
188  double threshold);
189 
197  std::vector<unsigned> CalculateAllAboveThresholdDepolarisations(unsigned globalNodeIndex,
198  double threshold);
199 
207  unsigned CalculateAboveThresholdDepolarisationsForLastAp(unsigned globalNodeIndex,
208  double threshold);
209 
215  void SetHdf5DataReader(Hdf5DataReader* pDataReader);
216 };
217 
218 #endif //_PROPAGATIONPROPERTIESCALCULATOR_HPP_
void SetHdf5DataReader(Hdf5DataReader *pDataReader)
PropagationPropertiesCalculator(Hdf5DataReader *pDataReader, const std::string voltageName="V")
double CalculatePeakMembranePotential(unsigned globalNodeIndex)
std::vector< double > CalculateAllMaximumUpstrokeVelocities(unsigned globalNodeIndex, double threshold)
std::vector< double > CalculateAllConductionVelocities(unsigned globalNearNodeIndex, unsigned globalFarNodeIndex, const double euclideanDistance)
double CalculateMaximumUpstrokeVelocity(unsigned globalNodeIndex)
std::vector< unsigned > CalculateAllAboveThresholdDepolarisations(unsigned globalNodeIndex, double threshold)
double CalculateActionPotentialDuration(const double percentage, unsigned globalNodeIndex)
std::vector< double > & rGetCachedVoltages(unsigned globalNodeIndex)
std::vector< double > CalculateAllActionPotentialDurations(const double percentage, unsigned globalNodeIndex, double threshold)
double CalculateConductionVelocity(unsigned globalNearNodeIndex, unsigned globalFarNodeIndex, const double euclideanDistance)
std::vector< double > CalculateUpstrokeTimes(unsigned globalNodeIndex, double threshold)
unsigned CalculateAboveThresholdDepolarisationsForLastAp(unsigned globalNodeIndex, double threshold)
std::vector< std::vector< double > > CalculateAllActionPotentialDurationsForNodeRange(const double percentage, unsigned lowerNodeIndex, unsigned upperNodeIndex, double threshold)