public static List<PointF> ABP_Rhythm (Patient _P, float _Amplitude) {
            VaryAmplitude_Random (0.1f, ref _Amplitude);

            return Plotting.Concatenate (new List<PointF> (),
                Plotting.Stretch (Dictionary.ABP_Default, _P.GetPulsatility_Seconds),
                _Amplitude);
        }
        public static List<PointF> PCW_Rhythm (Patient _P, float _Amplitude) {
            DampenAmplitude_IntrathoracicPressure (_P, ref _Amplitude);
            DampenAmplitude_EctopicBeat (_P, ref _Amplitude);

            return Plotting.Concatenate (new List<PointF> (),
                Plotting.Stretch (Dictionary.PCW_Default, _P.GetHR_Seconds),
                _Amplitude);
        }
        public static List<PointF> SPO2_Rhythm (Patient _P, float _Amplitude) {
            VaryAmplitude_Random (0.1f, ref _Amplitude);
            DampenAmplitude_EctopicBeat (_P, ref _Amplitude);
            DampenAmplitude_PulsusAlternans (_P, ref _Amplitude);
            DampenAmplitude_PulsusParadoxus (_P, ref _Amplitude);

            return Plotting.Concatenate (new List<PointF> (),
                Plotting.Stretch (Dictionary.SPO2_Rhythm, _P.GetHR_Seconds),
                _Amplitude);
        }
        public static List<PointF> ICP_Rhythm (Patient _P, float _Amplitude) {
            DampenAmplitude_EctopicBeat (_P, ref _Amplitude);
            VaryAmplitude_Random (0.1f, ref _Amplitude);

            return Plotting.Concatenate (new List<PointF> (),
                Plotting.Stretch (  // Lerp to change waveform based on intracranial compliance due to ICP
                    Dictionary.Lerp (Dictionary.ICP_HighCompliance, Dictionary.ICP_LowCompliance,
                        Math.Clamp (Math.InverseLerp (15, 25, _P.ICP), 0, 1)),    // ICP compliance coefficient
                    _P.GetHR_Seconds),
                _Amplitude);
        }
 public static List<PointF> IABP_ABP_Rhythm (Patient _P, float _Amplitude) {
     if (!_P.Cardiac_Rhythm.HasPulse_Ventricular)
         return Plotting.Concatenate (new List<PointF> (),
             Plotting.Stretch (Dictionary.IABP_ABP_Nonpulsatile, _P.GetHR_Seconds),
             _Amplitude);
     else if (_P.Cardiac_Rhythm.AberrantBeat)
         return Plotting.Concatenate (new List<PointF> (),
             Plotting.Stretch (Dictionary.IABP_ABP_Ectopic, _P.GetHR_Seconds),
             _Amplitude);
     else
         return Plotting.Concatenate (new List<PointF> (),
             Plotting.Stretch (Dictionary.IABP_ABP_Default, _P.GetHR_Seconds),
             _Amplitude);
 }
        public static List<PointF> CVP_Rhythm (Patient _P, float _Amplitude) {
            VaryAmplitude_Random (0.1f, ref _Amplitude);
            DampenAmplitude_IntrathoracicPressure (_P, ref _Amplitude);
            DampenAmplitude_EctopicBeat (_P, ref _Amplitude);

            if (_P.Cardiac_Rhythm.HasPulse_Atrial && !_P.Cardiac_Rhythm.AberrantBeat)
                return Plotting.Concatenate (new List<PointF> (),
                    Plotting.Stretch (Dictionary.CVP_Atrioventricular, _P.GetHR_Seconds),
                    _Amplitude);
            else
                return Plotting.Concatenate (new List<PointF> (),
                    Plotting.Stretch (Dictionary.CVP_Ventricular, _P.GetHR_Seconds),
                    _Amplitude);
        }
 public static List<PointF> ETCO2_Rhythm (Patient _P) {
     return Plotting.Concatenate (new List<PointF> (),
         Plotting.Stretch (Dictionary.ETCO2_Default, _P.GetRR_Seconds_E));
 }
 public static List<PointF> ECG_CPR_Artifact (Patient _P, Lead _L) {
     return Plotting.Concatenate (new List<PointF> (),
         Plotting.Multiply (
             Plotting.Stretch (Dictionary.ECG_CPR_Artifact, _P.GetHR_Seconds),
         baseLeadCoeff [(int)_L.Value, (int)WavePart.QRST]));
 }
 public static List<PointF> IABP_Balloon_Rhythm (Patient _P, float _Amplitude) {
     return Plotting.Concatenate (new List<PointF> (),
         Plotting.Stretch (Dictionary.IABP_Balloon_Default, _P.GetHR_Seconds * 0.6f),
         _Amplitude);
 }