예제 #1
0
        /// <summary>
        /// защита от неправильного использования отсутствует,
        /// поэтому нельзя делать эту функцию public
        /// </summary>
        public static PatientPhysioData CutPhysioDataFromLeftToRight(
            this PatientPhysioData _this, Marker leftMarker, Marker rightMarker)
        {
            System.Diagnostics.Debug.Assert(_this != null);

            var newPhysioData = new PatientPhysioData();

            // Копируем все сигналы из исходных физиологических данных
            foreach (ChannelData channel_data in _this.Channels.Values)
            {
                var channelFragment = _this.CutChannelDataFromLeftToRight(channel_data, leftMarker, rightMarker);
                newPhysioData.Channels[channel_data.ChannelId] = channelFragment;
            }

            // вот на сколько микросекунд все сдвигается влево:
            long microseconds = 0;

            if (leftMarker != null)
            {
                microseconds = leftMarker.TimestampUsec;
            }

            // Модифицируем информацию о метках
            foreach (Marker marker in _this.Markers.Values)
            {
                if (marker.TimestampUsec < microseconds)
                {
                    // пропускаем метки, которые созданы раньше чем left_marker
                    continue;
                }

                if (rightMarker != null && rightMarker.TimestampUsec < marker.TimestampUsec)
                {
                    // пропускаем метки, которые созданы позже чем right_marker
                    continue;
                }

                // создаем копию метки
                Marker newMarker = new Marker(marker);
                // добавляем метку
                newPhysioData.Markers[newMarker.Id] = newMarker;
                // .. и смещаем метку на microseconds влево
                newPhysioData.MoveMarker(newMarker.Id, 0 - microseconds);
            }

            return(newPhysioData);
        }
예제 #2
0
        /// <summary>
        /// Возвращает фрагмент сигнала из всех каналов нужного типа от маркера left до маркера right.
        /// </summary>
        /// <param name="physioSignalType">нужный тип физиологического сигнала.</param>
        /// <param name="leftMarkerId"></param>
        /// <param name="rightMarkerId"></param>
        /// <returns></returns>
        /// <remarks></remarks>
        public static IEnumerable <ChannelData> GetChannelDataBySignalType(
            this PatientPhysioData _this,
            SignalType physioSignalType,
            long leftMarkerId,
            long rightMarkerId)
        {
            // Берем сигналы нужного типа целиком
            var channels = _this.GetChannelDataBySignalType(physioSignalType);

            // Найти объекты-маркеры, соответствующие left_marker и right_marker
            Marker leftMarker  = _this.GetMarkerByIdOrDefault(leftMarkerId);
            Marker rightMarker = _this.GetMarkerByIdOrDefault(rightMarkerId);

            var fragments = channels.Select(
                c => _this.CutChannelDataFromLeftToRight(c, leftMarker, rightMarker)
                );

            return(fragments);
        }
예제 #3
0
        public static ChannelData GetChannelDataFromLeftToRight(
            this PatientPhysioData _this,
            ChannelData channelData,
            long leftMarkerId,
            long leftMarkerOffset,
            long rightMarkerId,
            long rightMarkerOffset)
        {
            if (null == channelData)
            {
                return(null);
            }

            Marker leftMarker  = _this.GetMarkerByIdOrDefault(leftMarkerId);
            Marker rightMarker = _this.GetMarkerByIdOrDefault(rightMarkerId);

            // Вырезать данные и вернуть их.
            return(_this.CutChannelDataFromLeftToRight(channelData, leftMarker, rightMarker));
        }