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 { readonly string _fileName = "AttenuatorCalInfo.xml"; readonly string _filePath = @"AttenuatorCalInfo\"; public List _attenuatorCalDatas { get; set; } public AttenuatorCalInfo() { _attenuatorCalDatas = new List(); } 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 datas = new List(); foreach(AttenuatorCalData data in _attenuatorCalDatas) { datas.Add(data.Clone()); } return datas.ToArray(); } } }