using IStation.Model;
|
using MathNet.Numerics;
|
using MathNet.Numerics.Interpolation;
|
using MathNet.Numerics.LinearRegression;
|
using MathNet.Numerics.Statistics;
|
using NPOI.HPSF;
|
using System.Data;
|
using System.Text;
|
namespace IStation.Test
|
{
|
internal class Program
|
{
|
static string _dataName = ".csv";
|
|
static string _oldCurveurveName = "_old_curve.csv";
|
static 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 key = item.Key;
|
var dataFile = item.DataFile;
|
var oldCurveFile = item.OldCurveFile;
|
var updateCurveFile = Path.Combine(fullPath, $"{key}{_newCurveName}");
|
|
|
var splineList = new List<CurvePoint>();
|
var dataList = new List<CurvePoint>();
|
using (var fs = new FileStream(oldCurveFile, 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(dataFile, 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]);
|
dataList.Add(new CurvePoint(x, y));
|
}
|
}
|
|
|
var splineX = splineList.Select(x => x.X).ToArray();
|
var splineY = splineList.Select(x => x.Y).ToArray();
|
dataList = dataList.OrderBy(x => x.X).ToList();
|
var dataXAll = dataList.Select(x => x.X).ToArray();
|
var dataYAll = dataList.Select(x => x.Y).ToArray();
|
|
var dataCount = dataXAll.Length;
|
if (dataCount < 20)
|
{
|
Console.WriteLine($"{key} Count:{dataCount} <20 skip");
|
}
|
|
|
var helper = new PumpCurveDataFusionCorrectorHelper2(); //PumpCurveDataFusionCorrectorHelper2DeepSeek
|
(double[] mergedX, double[] mergedY, double[] optimizedX, double[] optimizedY) = helper.Corrent(splineX, splineY, dataXAll, dataYAll);
|
|
var optimizedCount = optimizedX?.Length ?? 0;
|
Console.WriteLine($"{key} Count:{dataCount} OptimizedCount:{optimizedCount}");
|
if (optimizedCount < 1)
|
{
|
Console.WriteLine($"{key} skip");
|
continue;
|
}
|
var optimizedPtList = new List<CurvePoint>();
|
for (int i = 0; i < optimizedCount; i++)
|
{
|
var x = optimizedX[i];
|
var y = optimizedY[i];
|
optimizedPtList.Add(new CurvePoint(x, y));
|
}
|
|
CsvHelper.ExportToCsv(optimizedPtList, updateCurveFile);
|
|
}
|
|
|
|
|
Console.WriteLine("ok");
|
Console.ReadKey();
|
}
|
|
|
static List<(string Key, 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 Key, string dataFile, string oldCurveFile)>(files.Count());
|
var group = files.GroupBy(x => Path.GetFileName(x).Substring(0, 5));
|
foreach (var item in group)
|
{
|
var name = item.Key;
|
var dataFile = $"{folder}\\{name}{_dataName}";
|
var oldCurveFile = $"{folder}\\{name}{_oldCurveurveName}";
|
list.Add((item.Key, dataFile, oldCurveFile));
|
}
|
|
return list;
|
}
|
|
}
|
}
|