Example #1
0
        /// <summary>
        /// 各要素の差をとった新たなインスタンスを返します.(otherの方が要素が少ない場合,例外を発生するような気がします.)
        /// </summary>
        /// <param name="other"></param>
        /// <returns></returns>
        public EqualIntervalData Substract(IList <decimal> other)
        {
            var data = new EqualIntervalData();

            for (int i = 0; i < this.Count; i++)
            {
                data.Add(this[i] - other[i]);
            }
            data.IsRawData = false;
            return(data);
        }
Example #2
0
        // (0.2.1)
        #region *[static][async]テキストファイルから生成(GeenrateFromText)
        public static async Task <EqualIntervalData> GenerateFromText(StreamReader reader, bool isRaw)
        {
            var data = new EqualIntervalData();

            while (!reader.EndOfStream)
            {
                var count = await reader.ReadLineAsync();

                if (isRaw)
                {
                    data.Add(int.Parse(count));
                }
                else
                {
                    data.Add(decimal.Parse(count));
                }
            }
            data.IsRawData = isRaw;
            return(data);
        }
Example #3
0
        public static EqualIntervalData Generate(BinaryReader reader)
        {
            var data = new EqualIntervalData();

            while (reader.PeekChar() > -1)
            {
                // エンディアンが逆なので、単純にreader.ReadInt32()とはいかない!
                int count = reader.ReadInt32Inverse();
                data.Add(count);
            }
            data.IsRawData = true;

            return(data);
        }
Example #4
0
        // (0.2.0)
        public static async Task <EqualIntervalData> GenerateAsync(BinaryReader reader, int length)
        {
            var data = new EqualIntervalData();

            for (int i = 0; i < length; i++)
            {
                // エンディアンが逆なので、単純にreader.ReadInt32()とはいかない!
                int count = await reader.ReadInt32Async();

                data.Add(count);
            }
            data.IsRawData = true;

            return(data);
        }
Example #5
0
        // (0.2.0)
        #region *生成(GenerateAsync)
        /// <summary>
        /// JEOL形式のスペクトルデータを読み込みます.
        /// </summary>
        /// <param name="reader"></param>
        /// <returns></returns>
        public static async Task <EqualIntervalData> GenerateAsync(BinaryReader reader)
        {
            var data = new EqualIntervalData();

            while (reader.PeekChar() > -1)
            {
                // エンディアンが逆なので、単純にreader.ReadInt32()とはいかない!
                int count = await reader.ReadInt32Async();

                data.Add(count);
            }
            data.IsRawData = true;

            return(data);
        }
Example #6
0
        /// <summary>
        /// 2次?のSavizky-Golay法によって微分した結果を返します。要素数が2mだけ少なくなります.
        /// </summary>
        /// <param name="m"></param>
        /// <returns></returns>
        public EqualIntervalData Differentiate(int m, decimal step)
        {
            var data = new EqualIntervalData();

            for (int i = m; i < this.Count - m; i++)
            {
                decimal count = 0;
                for (int j = 1; j <= m; j++)
                {
                    count += this[i + j] * j;
                    count -= this[i - j] * j;
                }
                data.Add(3 * count / (m * (m + 1) * (2 * m + 1) * step));
            }
            return(data);
        }
Example #7
0
 /// <summary>
 /// 自身の一部範囲を含んだインスタンスを生成して返します.
 /// </summary>
 /// <param name="startIndex"></param>
 /// <param name="endIndex"></param>
 /// <returns></returns>
 public EqualIntervalData GetSubData(int startIndex, int endIndex)
 {
     if (startIndex >= 0 && endIndex < this.Count && startIndex <= endIndex)
     {
         var data = new EqualIntervalData();
         for (int i = startIndex; i <= endIndex; i++)
         {
             data.Add(this[i]);
         }
         data.IsRawData = true;
         return(data);
     }
     else
     {
         throw new ArgumentException("もとのデータの範囲内で指定して下さい。");
     }
 }