ningshuxia
2025-04-16 a67da735b33be01b24845ce03ae7551cf55ddbbc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
using IStation.Model;
using MathNet.Numerics;
using MathNet.Numerics.Interpolation;
using MathNet.Numerics.LinearRegression;
using MathNet.Numerics.Statistics;
using System.Data;
using System.Text;
namespace IStation.Test
{
    internal class Program
    {
        string _dataName = ".csv";
 
        string _oldCurveurveName = "_old_curve.csv";
        string _newCurveName = "_update_curve.csv";
        static void Main(string[] args)
        {
            var fullPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "pumpcsv");
            var list = GetFileInfoList(fullPath);
            foreach (var item in list)
            {
 
            }
 
 
            var splineList = new List<CurvePoint>();
            var measuredList = new List<CurvePoint>();
 
            var fileName = "21_38";
            var path = AppDomain.CurrentDomain.BaseDirectory;
            var lienPaht = path + $@"\pumpcsv\{fileName}_old_curve.csv";
            var measuredPath = path + $@"\pumpcsv\{fileName}.csv";
 
            using (var fs = new FileStream(lienPaht, FileMode.Open, FileAccess.Read))
            using (var sr = new StreamReader(fs, Encoding.UTF8))
            {
                var strLine = string.Empty;
                sr.ReadLine();
                while (!string.IsNullOrEmpty(strLine = sr.ReadLine()))
                {
                    var strList = strLine.Split(',');
                    var x = double.Parse(strList[0]);
                    var y = double.Parse(strList[1]);
                    splineList.Add(new CurvePoint(x, y));
                }
            }
 
            using (var fs = new FileStream(measuredPath, FileMode.Open, FileAccess.Read))
            using (var sr = new StreamReader(fs, Encoding.UTF8))
            {
                var strLine = string.Empty;
                sr.ReadLine();
                while (!string.IsNullOrEmpty(strLine = sr.ReadLine()))
                {
                    var strList = strLine.Split(',');
                    var x = double.Parse(strList[4]);
                    var y = double.Parse(strList[5]);
                    measuredList.Add(new CurvePoint(x, y));
                }
            }
 
            measuredList = measuredList.OrderBy(x => x.X).ToList();
 
            // 样条曲线处理
            double[] splineX = splineList.Select(x => x.X).ToArray();
            double[] splineY = splineList.Select(x => x.Y).ToArray();
 
            // 实测数据处理
            double[] measuredXAll = measuredList.Select(x => x.X).ToArray();
            double[] measuredYAll = measuredList.Select(x => x.Y).ToArray();
 
 
 
            var helper = new PumpCurveDataFusionCorrectorHelper2(); //PumpCurveDataFusionCorrectorHelper2DeepSeek
            (double[] mergedX, double[] mergedY, double[] optimizedX, double[] optimizedY) = helper.Corrent(splineX, splineY, measuredXAll, measuredYAll);
 
            Console.WriteLine($"{splineX.Min()},{splineX.Max()}");
            Console.WriteLine($"{mergedX.Min()},{mergedX.Max()}");
            Console.WriteLine($"{optimizedX.Min()},{optimizedX.Max()}");
 
            Console.WriteLine($"{splineY.Min()},{splineY.Max()}");
            Console.WriteLine($"{mergedY.Min()},{mergedY.Max()}");
            Console.WriteLine($"{optimizedY.Min()},{optimizedY.Max()}");
 
            var pt_list = new List<CurvePoint>();
            for (int i = 0; i < optimizedX.Length; i++)
            {
                var x = optimizedX[i];
                var y = optimizedY[i];
                pt_list.Add(new CurvePoint(x, y));
            }
            var fullPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "pumpcsv");
            if (File.Exists(Path.Combine(fullPath, $"{fileName}_update_curve.csv")))
            {
                File.Delete(Path.Combine(fullPath, $"{fileName}_update_curve.csv"));
            }
            CsvHelper.ExportToCsv(pt_list, Path.Combine(fullPath, $"{fileName}_update_curve.csv"));
 
            Console.WriteLine("ok");
            Console.ReadKey();
        }
 
 
 
 
 
 
 
        static List<(string dataFile, string oldCurveFile)> GetFileInfoList(string folder)
        {
            if (!Directory.Exists(folder))
                return default;
            var files = Directory.GetFiles(folder);
            if (files == null || files.Count() < 1)
                return default;
 
            var list = new List<(string dataFile, string oldCurveFile)>(files.Count());
            var group = files.GroupBy(x => x.Substring(0, 5));
            foreach (var item in group)
            {
                var name = item.Key;
                var dataFile = $"{name}{_dataName}";
                var oldCurveFile = $"{name}{_oldCurveurveName}";
                list.Add((dataFile, oldCurveFile));
            }
 
            return list;
        }
 
    }
}