using SA_LTT.Base;
|
using System;
|
using System.Collections.Generic;
|
using System.IO;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
|
namespace SA_LTT.Info.AttenuatorCalInfo
|
{
|
public class AttenuatorCalInfo : XmlManager<AttenuatorCalInfo>
|
{
|
readonly string _fileName = "AttenuatorCalInfo.xml";
|
readonly string _filePath = @"AttenuatorCalInfo\";
|
|
public List<AttenuatorCalData> _attenuatorCalDatas { get; set; }
|
|
public AttenuatorCalInfo()
|
{
|
_attenuatorCalDatas = new List<AttenuatorCalData>();
|
}
|
|
public void Refresh()
|
{
|
DirectoryInfo directoryInfo = new DirectoryInfo(Equipment.infoFilePath + _filePath);
|
|
if (directoryInfo.Exists == false)
|
{
|
directoryInfo.Create();
|
}
|
|
FileInfo fileInfo = new FileInfo(directoryInfo.FullName + _fileName);
|
|
if (fileInfo.Exists == false)
|
{
|
SaveFile(fileInfo.FullName, this);
|
}
|
else
|
{
|
AttenuatorCalInfo equipmentInfo = new AttenuatorCalInfo();
|
|
equipmentInfo = ReadFile(fileInfo.FullName);
|
|
Copy(equipmentInfo);
|
}
|
}
|
|
public float GetAttenuatorAngleForEnergy(double energy)
|
{
|
float attenuatorAngle = 0;
|
|
int i = 0;
|
|
for (; i< _attenuatorCalDatas.Count; i++)
|
{
|
if(_attenuatorCalDatas[i].Energy >= energy)
|
{
|
break;
|
}
|
}
|
|
if(i == 0)
|
{
|
attenuatorAngle = _attenuatorCalDatas[i].AttenuatorAngle;
|
}
|
else
|
{
|
AttenuatorCalData beforeData = _attenuatorCalDatas[i - 1];
|
AttenuatorCalData afterData = _attenuatorCalDatas[i];
|
|
double energyValue = (afterData.Energy - beforeData.Energy) / 10;
|
float angleValue = (afterData.AttenuatorAngle - beforeData.AttenuatorAngle) / 10f;
|
|
for(i = 1; i < 11; i++)
|
{
|
if((beforeData.Energy + energyValue * i) >= energy)
|
{
|
break;
|
}
|
}
|
|
attenuatorAngle = beforeData.AttenuatorAngle + angleValue * i;
|
}
|
|
return attenuatorAngle;
|
}
|
|
public double GetMaxEnergy()
|
{
|
double energy = 0;
|
|
foreach (AttenuatorCalData data in _attenuatorCalDatas)
|
{
|
if(data.Energy > energy)
|
{
|
energy = data.Energy;
|
}
|
}
|
|
return energy;
|
}
|
|
public double GetMinEnergy()
|
{
|
double energy = double.MaxValue;
|
|
foreach (AttenuatorCalData data in _attenuatorCalDatas)
|
{
|
if (data.Energy < energy)
|
{
|
energy = data.Energy;
|
}
|
}
|
|
if (_attenuatorCalDatas.Count == 0)
|
{
|
energy = 0;
|
}
|
|
return energy;
|
}
|
|
public double GetEnergyPer1Degree()
|
{
|
if(_attenuatorCalDatas.Count < 2)
|
{
|
return 0;
|
}
|
|
double maxEnergy = GetMaxEnergy();
|
double minEnergy = GetMinEnergy();
|
|
float minAngle = _attenuatorCalDatas[0].AttenuatorAngle;
|
float maxAngle = _attenuatorCalDatas[_attenuatorCalDatas.Count - 1].AttenuatorAngle;
|
|
double energy = double.Parse($"{(maxEnergy - minEnergy) / (maxAngle - minAngle):F4}");
|
return energy;
|
}
|
|
public void SetAttenuatorCalData(AttenuatorCalData[] attenuatorCalDatas)
|
{
|
if(attenuatorCalDatas.Length != 0)
|
{
|
_attenuatorCalDatas.Clear();
|
_attenuatorCalDatas.AddRange(attenuatorCalDatas);
|
SaveFile(Equipment.infoFilePath + _filePath + _fileName, this);
|
|
try
|
{
|
DateTime dt = DateTime.Now;
|
string path = $"{EquipmentLogManager.s_attenuatorCalLogPath}AttenuatorCalData_{dt.ToString("yyMMdd_HHmmss")}.csv";
|
|
using (FileStream fs = File.Open(path, FileMode.CreateNew, FileAccess.Write, FileShare.ReadWrite))
|
{
|
using (StreamWriter sw = new StreamWriter(fs))
|
{
|
foreach (AttenuatorCalData attenuatorCalData in attenuatorCalDatas)
|
{
|
sw.WriteLine($"{attenuatorCalData.AttenuatorAngle}, {attenuatorCalData.Energy}", Encoding.Default);
|
}
|
|
sw.Close();
|
}
|
|
fs.Close();
|
}
|
|
}
|
catch(Exception ex)
|
{
|
EquipmentLogManager.Instance.WriteExceptionLog(ex.StackTrace + "\r\n" + ex.Message);
|
}
|
}
|
}
|
|
public AttenuatorCalData[] GetAttenuatorCalData()
|
{
|
List<AttenuatorCalData> datas = new List<AttenuatorCalData>();
|
|
foreach(AttenuatorCalData data in _attenuatorCalDatas)
|
{
|
datas.Add(data.Clone());
|
}
|
|
return datas.ToArray();
|
}
|
}
|
}
|