This commit is contained in:
2026-04-17 14:55:32 -04:00
commit bc3ac1d4c9
18017 changed files with 4371742 additions and 0 deletions

View File

@@ -0,0 +1,96 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace DTS.Slice.PedestrianAndHeadReports
{
public class LWRLegFlexReport : ReportBase
{
public LWRLegFlexReport(PedestrianAndHeadTest parent) : base(parent) { }
public override ReportBase.ReportTypes GetReportType()
{
return ReportTypes.LWRLegFlex;
}
public const string FEMUR1_ID = "FLEX_FEMUR1";
public const string FEMUR2_ID = "FLEX_FEMUR2";
public const string FEMUR3_ID = "FLEX_FEMUR3";
public const string LCL_ID = "FLEX_LCL";
public const string MCL_ID = "FLEX_MCL";
public const string ACL_ID = "FLEX_ACL";
public const string PCL_ID = "FLEX_PCL";
public const string TIBIA1_ID = "FLEX_TIBIA1";
public const string TIBIA2_ID = "FLEX_TIBIA2";
public const string TIBIA3_ID = "FLEX_TIBIA3";
public const string TIBIA4_ID = "FLEX_TIBIA4";
private string[] _calTypes = new string[] { "Penduram", "Inverse" };
public string TestType
{
get { return GetValue("FlexType"); }
set { SetValue("FlexType", value); }
}
public string[] GetPossibleTestTypes()
{
return GetPossibleValues("FlexType");
}
protected override void InitializeGraphs()
{
base.InitializeGraphs();
AddGraph(new ReportGraph(KnownGraphs.FLEX_TIBIA.ToString(), "Tibia", new MeasurementUnit[] {
MeasurementUnitList.GetMeasurementUnit("Nm") }, new GraphChannel[]{
new GraphChannel(TIBIA1_ID, "Tibia-1", "TIBIA1"),
new GraphChannel(TIBIA2_ID, "Tibia-2", "TIBIA2"),
new GraphChannel(TIBIA3_ID, "Tibia-3", "TIBIA3"),
new GraphChannel(TIBIA4_ID, "Tibia-4", "TIBIA4")
},Properties.Settings.Default.PROTECTIONREPORT_FLEXTIBITHRESHOLD));
AddGraph(new ReportGraph(KnownGraphs.FLEX_MCL.ToString(), "MCL", new MeasurementUnit[] { MeasurementUnitList.GetMeasurementUnit("mm") }, new GraphChannel[] {
new GraphChannel(MCL_ID, "MCL(膝内側側副靱帯)", "MCL")
}, Properties.Settings.Default.SAFETYREPORT_FLEXMCLThreshold));
AddGraph(new ReportGraph(KnownGraphs.FLEX_ACLPCL.ToString(), "ACL PCL", new MeasurementUnit[] { MeasurementUnitList.GetMeasurementUnit("mm") }, new GraphChannel[] {
new GraphChannel(ACL_ID, "ACL後十字靱帯", "ACL"),
new GraphChannel(PCL_ID, "PCL前十字靱帯", "PCL")
}, Properties.Settings.Default.PROTECTIONREPORT_FLEXACLPCLThreshold));
AddGraph(new ReportGraph(KnownGraphs.FLEX_FEMUR.ToString(), "Femur", new MeasurementUnit[] { MeasurementUnitList.GetMeasurementUnit("Nm") }, new GraphChannel[]{
new GraphChannel(FEMUR1_ID, "Femur-1", "FEMUR1"),
new GraphChannel(FEMUR2_ID, "Femur-2", "FEMUR2"),
new GraphChannel(FEMUR3_ID, "Femur-3", "FEMUR3")
}, Properties.Settings.Default.PROTECTIONREPORT_FLEXFEMURThreshold));
AddGraph(new ReportGraph(KnownGraphs.FLEX_LCL.ToString(), "LCL", new MeasurementUnit[] { MeasurementUnitList.GetMeasurementUnit("mm") }, new GraphChannel[] {
new GraphChannel(LCL_ID, "LCL", "LCL")
}, Properties.Settings.Default.PROTECTIONREPORT_FLEXLCLThreshold));
AddGraph(new ReportGraph(KnownGraphs.FLEX_CALTibia1.ToString(), "Tibia1(Cal)", new MeasurementUnit[] { MeasurementUnitList.GetMeasurementUnit("Nm") }, new GraphChannel[]{
new GraphChannel(TIBIA1_ID, "Tibia-1", "TIBIA1")}, ""));
AddGraph(new ReportGraph(KnownGraphs.FLEX_CALTibia2.ToString(), "Tibia2(Cal)", new MeasurementUnit[] { MeasurementUnitList.GetMeasurementUnit("Nm") }, new GraphChannel[]{
new GraphChannel(TIBIA2_ID, "Tibia-2", "TIBIA2")}, ""));
AddGraph(new ReportGraph(KnownGraphs.FLEX_CALTibia3.ToString(), "Tibia3(Cal)", new MeasurementUnit[] { MeasurementUnitList.GetMeasurementUnit("Nm") }, new GraphChannel[]{
new GraphChannel(TIBIA3_ID, "Tibia-3", "TIBIA3")}, ""));
AddGraph(new ReportGraph(KnownGraphs.FLEX_CALTibia4.ToString(), "Tibia4(Cal)", new MeasurementUnit[] { MeasurementUnitList.GetMeasurementUnit("Nm") }, new GraphChannel[]{
new GraphChannel(TIBIA4_ID, "Tibia-4", "TIBIA4")}, ""));
AddGraph(new ReportGraph(KnownGraphs.FLEX_CALACL.ToString(), "ACL(Cal)", new MeasurementUnit[] { MeasurementUnitList.GetMeasurementUnit("mm") }, new GraphChannel[] {
new GraphChannel(ACL_ID, "ACL", "ACL")}, ""));
AddGraph(new ReportGraph(KnownGraphs.FLEX_CALMCL.ToString(), "MCL(Cal)", new MeasurementUnit[] { MeasurementUnitList.GetMeasurementUnit("mm") }, new GraphChannel[] {
new GraphChannel(MCL_ID, "MCL", "MCL")}, ""));
AddGraph(new ReportGraph(KnownGraphs.FLEX_CALPCL.ToString(), "PCL(Cal)", new MeasurementUnit[] { MeasurementUnitList.GetMeasurementUnit("mm") }, new GraphChannel[] {
new GraphChannel(PCL_ID, "PCL", "PCL")}, ""));
}
/*private string _impactorWeight;
public string ImpactorWeight
{
get { return _impactorWeight; }
set { SetProperty(ref _impactorWeight, value, "ImpactorWeight"); }
}*/
protected override void InitializeProperties()
{
base.InitializeProperties();
SetPossibleValues(PedestrianAndHeadTest.Fields.ImpactorType.ToString(), new string[] { "FLEX" });
SetValue(PedestrianAndHeadTest.Fields.FrequencyClass.ToString(), (new SensorDB.FilterClass(DTS.SensorDB.FilterClass.FilterClassType.CFC180)).ToString());
AddProperty(new ReportProperty("FlexType", "FlexType", _calTypes, typeof(string)));
//AddProperty(new ReportProperty(PedestrianAndHeadTest.Fields.ImpactorWeight.ToString(), PedestrianAndHeadTest.Fields.ImpactorWeight.ToString(), null, typeof(string)));
TestType = _calTypes[0];
}
}
}

View File

@@ -0,0 +1,379 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace DTS.Slice.PedestrianAndHeadReports
{
public class MeasurementUnit
{
private string _mainDisplayUnit;
public string MainDisplayUnit
{
get { return _mainDisplayUnit; }
set { _mainDisplayUnit = value; }
}
private string[] _alternateDisplayUnits;
public string[] AlternateDisplayUnits
{
get { return _alternateDisplayUnits; }
set { _alternateDisplayUnits = value; }
}
private string _dimension = "00";
public string Dimension
{
get { return _dimension; }
set { _dimension = value; }
}
public MeasurementUnit(string mainUnit, string[] alternateUnits, MeasurementUnit.UnitConversion [] conversions, string dimension)
{
MainDisplayUnit = mainUnit;
AlternateDisplayUnits = alternateUnits;
UnitConversions = conversions;
Dimension = dimension;
}
public MeasurementUnit(System.Xml.XmlElement node)
{
foreach (var childnode in node.ChildNodes)
{
System.Xml.XmlElement elem = childnode as System.Xml.XmlElement;
if (null == elem) { continue; }
try
{
switch (elem.Name)
{
case "MainDisplayUnit":
MainDisplayUnit = elem.InnerText;
break;
case "AlternateDisplayUnits":
{
var nodes = elem.GetElementsByTagName("String");
List<string> aunits = new List<string>();
foreach (var node2 in nodes)
{
System.Xml.XmlElement element = node2 as System.Xml.XmlElement;
if (null == element) { continue; }
try
{
aunits.Add(element.InnerText);
}
catch (System.Exception) { }
}
AlternateDisplayUnits = aunits.ToArray();
}
break;
case "Dimension":
{
Dimension = elem.InnerText;
}
break;
case "UnitConversions":
{
var nodes = elem.GetElementsByTagName("UnitConversion");
foreach (var node2 in nodes)
{
System.Xml.XmlElement element = node2 as System.Xml.XmlElement;
if (null == element) { continue; }
try
{
_unitConversions.Add(new UnitConversion(element));
}
catch (System.Exception) { }
}
}
break;
default:
System.Diagnostics.Trace.WriteLine("didn't handle " + elem.Name);
break;
}
}
catch (System.Exception ex)
{
DTS.Utilities.Logging.APILogger.Log("Failed to parse xml", ex, elem.Name, elem.Value);
}
}
}
public bool UnitMatches(string unit)
{
unit = unit.Trim().ToLower();
if (MainDisplayUnit.ToLower() == unit) { return true; }
foreach (string aunit in AlternateDisplayUnits)
{
if (aunit.ToLower() == unit) { return true; }
}
return false;
}
public double GetScalerConversion(string newUnit)
{
if (UnitMatches(newUnit)) { return 1D; }
foreach (var uc in UnitConversions)
{
if (uc.UnitMatches(newUnit)) { return uc.Scaler; }
}
throw new InvalidCastException(string.Format("No conversion available from {0} to {1}", newUnit, MainDisplayUnit));
}
public double GetScalerConversionFrom(string oldUnit)
{
if (UnitMatches(oldUnit)) { return 1D; }
foreach (var uc in UnitConversions)
{
if (uc.UnitMatches(oldUnit)) { return 1D / uc.Scaler; }
}
throw new InvalidCastException(string.Format("No conversion available from {0} to {1}", oldUnit, MainDisplayUnit));
}
private List<UnitConversion> _unitConversions = new List<UnitConversion>();
public UnitConversion[] UnitConversions { get { return _unitConversions.ToArray(); } set { _unitConversions = new List<UnitConversion>(value); } }
public class UnitConversion
{
private string _unit;
public string Unit { get { return _unit; } set { _unit = value; } }
private double _scaler;
public double Scaler { get { return _scaler; } set { _scaler = value; } }
public bool UnitMatches(string unit)
{
return (Unit.ToLower() == unit.Trim().ToLower());
}
public void WriteToXML(System.Xml.XmlWriter writer)
{
writer.WriteStartElement("UnitConversion");
DTS.DASLib.Service.XMLHelper.PutString(writer, "Unit", Unit);
DTS.DASLib.Service.XMLHelper.PutDouble(writer, "Scaler", Scaler);
writer.WriteEndElement();
}
public UnitConversion(string unit, double scaler) { Unit = unit; Scaler = scaler; }
public UnitConversion(System.Xml.XmlElement node)
{
foreach (var childnode in node.ChildNodes)
{
System.Xml.XmlElement elem = childnode as System.Xml.XmlElement;
if (null == elem) { continue; }
try
{
switch (elem.Name)
{
case "Unit":
Unit = elem.InnerText;
break;
case "Scaler":
Scaler = double.Parse(elem.InnerText);
break;
default:
System.Diagnostics.Trace.WriteLine("didn't handle " + elem.Name);
break;
}
}
catch (System.Exception ex)
{
DTS.Utilities.Logging.APILogger.Log("Failed to parse xml", ex, elem.Name, elem.Value);
}
}
}
}
public void WriteToXML(System.Xml.XmlWriter writer)
{
writer.WriteStartElement("MeasurementUnit");
DTS.DASLib.Service.XMLHelper.PutString(writer, "MainDisplayUnit", MainDisplayUnit);
DTS.DASLib.Service.XMLHelper.PutString(writer, "Dimension", Dimension);
writer.WriteStartElement("AlternateDisplayUnits");
foreach (var unit in AlternateDisplayUnits)
{
writer.WriteStartElement("String");
writer.WriteValue(unit);
writer.WriteEndElement();
}
writer.WriteEndElement();
//DTS.DASLib.Service.XMLHelper.PutString(writer, "AlternateDisplayUnits", string.Join("×", AlternateDisplayUnits));
writer.WriteStartElement("UnitConversions");
foreach (var uc in UnitConversions) { uc.WriteToXML(writer); }
writer.WriteEndElement();
writer.WriteEndElement();
}
public override string ToString()
{
return MainDisplayUnit;
}
}
public class MeasurementUnitList
{
private static MeasurementUnitList _instance;
private static object MyLock = new object();
private Dictionary<string, MeasurementUnit> _units = new Dictionary<string, MeasurementUnit>();
private MeasurementUnit [] GetAllUnits(){ return _units.Values.ToArray();}
public static MeasurementUnit[] GetAllMeasurementUnits()
{
lock (MyLock)
{
if (null == _instance) { _instance = new MeasurementUnitList(); }
return _instance.GetAllUnits();
}
}
public static MeasurementUnit GetMeasurementUnit(string key)
{
lock (MyLock)
{
if (null == _instance) { _instance = new MeasurementUnitList(); }
var units = from u in _instance.GetAllUnits() where u.UnitMatches(key) select u;
if (units.Count() > 0) { return units.First(); }
else
{
_instance._units.Add(key, new MeasurementUnit(key, new string[] { key }, new MeasurementUnit.UnitConversion[0], "00"));
return _instance._units[key];
}
}
}
private MeasurementUnitList()
{
LoadAllMeasurementUnits();
}
public void SaveToXML()
{
StringBuilder sb = new StringBuilder();
System.Xml.XmlWriterSettings settings = new System.Xml.XmlWriterSettings();
settings.OmitXmlDeclaration = false;
settings.Indent = true;
using (System.Xml.XmlWriter xmlWriter = System.Xml.XmlTextWriter.Create(sb, settings))
{
xmlWriter.WriteStartDocument(true);
xmlWriter.WriteStartElement("MeasurementUnits");
var e1 = _units.GetEnumerator();
while (e1.MoveNext())
{
e1.Current.Value.WriteToXML(xmlWriter);
}
xmlWriter.WriteEndElement();
xmlWriter.WriteEndDocument();
xmlWriter.Flush();
}
System.IO.File.WriteAllText(FILE_NAME, sb.ToString());
}
private void CreateDefaultMeasurementUnitsFile()
{
MeasurementUnit mu = new MeasurementUnit("G", new string[] { "G" }, new MeasurementUnit.UnitConversion[] {
new MeasurementUnit.UnitConversion("m/sec^2", 9.80665D), new MeasurementUnit.UnitConversion("ft/s^2", 32.17405D)}, "AC");
if (!_units.ContainsKey(mu.MainDisplayUnit)) { _units.Add(mu.MainDisplayUnit, mu); }
mu = new MeasurementUnit("m/sec^2", new string[] { "m/sec^2", "m/s^2", "m/sec2", "m/s2" }, new MeasurementUnit.UnitConversion[] {
new MeasurementUnit.UnitConversion("G", .101971621), new MeasurementUnit.UnitConversion("ft/s^2", 3.28084D),
new MeasurementUnit.UnitConversion("cm/s^2", 100D)}, "AC");
if (!_units.ContainsKey(mu.MainDisplayUnit)) { _units.Add(mu.MainDisplayUnit, mu); }
mu = new MeasurementUnit("deg", new string[] { "deg", "degree", "degrees" }, new MeasurementUnit.UnitConversion[0], "AN");
if (!_units.ContainsKey(mu.MainDisplayUnit)) { _units.Add(mu.MainDisplayUnit, mu); }
mu = new MeasurementUnit("Nm", new string[] { "Nm", "N -m", "N-m" }, new MeasurementUnit.UnitConversion[0], "DC");
if (!_units.ContainsKey(mu.MainDisplayUnit)) { _units.Add(mu.MainDisplayUnit, mu); }
mu = new MeasurementUnit("mm", new string[] { "mm", "M-m", "M -m" }, new MeasurementUnit.UnitConversion[0], "DC");
if (!_units.ContainsKey(mu.MainDisplayUnit)) { _units.Add(mu.MainDisplayUnit, mu); }
mu = new MeasurementUnit("deg/sec", new string[] { "deg/sec", "degrees/sec", "d/sec", "deg/s" }, new MeasurementUnit.UnitConversion[0], "AA");
if (!_units.ContainsKey(mu.MainDisplayUnit)) { _units.Add(mu.MainDisplayUnit, mu); }
mu = new MeasurementUnit("kN", new string[] { "kn", "K-n", "k -n", "kilonewton" }, new MeasurementUnit.UnitConversion[]{
new MeasurementUnit.UnitConversion("N", 1000)
}, "FO");
if (!_units.ContainsKey(mu.MainDisplayUnit)) { _units.Add(mu.MainDisplayUnit, mu); }
mu = new MeasurementUnit("N", new string[] { "n", "newton" }, new MeasurementUnit.UnitConversion[]{
new MeasurementUnit.UnitConversion("kN", .001D)
}, "FO");
if (!_units.ContainsKey(mu.MainDisplayUnit)) { _units.Add(mu.MainDisplayUnit, mu); }
mu = new MeasurementUnit("ft/s^2", new string[] { "ft/s2", "ft/s^2", "ft/sec^2" }, new MeasurementUnit.UnitConversion[] {
new MeasurementUnit.UnitConversion("cm/s^2", 30.48D), new MeasurementUnit.UnitConversion("m/sec^2", .3048D)}, "AC");
if (!_units.ContainsKey(mu.MainDisplayUnit)) { _units.Add(mu.MainDisplayUnit, mu); }
mu = new MeasurementUnit("cm/s^2", new string[] { "cm/s^2", "cm/s2", "cm/sec^2" }, new MeasurementUnit.UnitConversion[]{
new MeasurementUnit.UnitConversion("ft/s^2", .032808D), new MeasurementUnit.UnitConversion("m/sec^2", .01D)
}, "AC");
if (!_units.ContainsKey(mu.MainDisplayUnit)) { _units.Add(mu.MainDisplayUnit, mu); }
mu = new MeasurementUnit("Ampere", new string[] { "Amp", "Amper", "Amps" }, new MeasurementUnit.UnitConversion[] {
new MeasurementUnit.UnitConversion("mAmp", 1000D)
}, "CU");
if (!_units.ContainsKey(mu.MainDisplayUnit)) { _units.Add(mu.MainDisplayUnit, mu); }
mu = new MeasurementUnit("mAmp", new string[] { "mAmp", "m Amp", "milliampere", "milliamp" }, new MeasurementUnit.UnitConversion[]{
new MeasurementUnit.UnitConversion("Ampere", .001D)}, "CU");
if (!_units.ContainsKey(mu.MainDisplayUnit)) { _units.Add(mu.MainDisplayUnit, mu); }
mu = new MeasurementUnit("Hz", new string[] { "hertz", "cycle/sec", "cyc/s" }, new MeasurementUnit.UnitConversion[] {
new MeasurementUnit.UnitConversion("kHz", .001D)}, "FR");
if (!_units.ContainsKey(mu.MainDisplayUnit)) { _units.Add(mu.MainDisplayUnit, mu); }
mu = new MeasurementUnit("kHz", new string[] { "kHertz", "kilohertz" }, new MeasurementUnit.UnitConversion[] {
new MeasurementUnit.UnitConversion("Hz", 1000D)}, "FR");
if (!_units.ContainsKey(mu.MainDisplayUnit)) { _units.Add(mu.MainDisplayUnit, mu); }
mu = new MeasurementUnit("m", new string[] { "m", "Meter" }, new MeasurementUnit.UnitConversion[] {
new MeasurementUnit.UnitConversion("mm", 100D)},"DC");
if (!_units.ContainsKey(mu.MainDisplayUnit)) { _units.Add(mu.MainDisplayUnit, mu); }
mu = new MeasurementUnit("V", new string[] { "volt", "VO" }, new MeasurementUnit.UnitConversion[] {
new MeasurementUnit.UnitConversion("mV", 100D)}, "VO");
if (!_units.ContainsKey(mu.MainDisplayUnit)) { _units.Add(mu.MainDisplayUnit, mu); }
mu = new MeasurementUnit("mV", new string[] { "mv", "millivolt", "mVolt" }, new MeasurementUnit.UnitConversion[]{
new MeasurementUnit.UnitConversion("V", .001D)}, "VO");
if (!_units.ContainsKey(mu.MainDisplayUnit)) { _units.Add(mu.MainDisplayUnit, mu); }
mu = new MeasurementUnit("degC", new string[] { "C", "degC", "Celsius" }, new MeasurementUnit.UnitConversion[0], "??");
if (!_units.ContainsKey(mu.MainDisplayUnit)) { _units.Add(mu.MainDisplayUnit, mu); }
SaveToXML();
}
private void LoadAllMeasurementUnits()
{
if (!System.IO.File.Exists(FILE_NAME))
{
CreateDefaultMeasurementUnitsFile();
}
else
{
System.Xml.XmlDocument doc = new System.Xml.XmlDocument();
string xml = System.IO.File.ReadAllText(FILE_NAME);
doc.LoadXml(xml);
var nodes = doc.GetElementsByTagName("MeasurementUnits");
foreach (var node in nodes)
{
System.Xml.XmlElement element = node as System.Xml.XmlElement;
if (null == element) { continue; }
foreach (var childNode in element.GetElementsByTagName("MeasurementUnit"))
{
System.Xml.XmlElement elem = childNode as System.Xml.XmlElement;
if (null == elem) { continue; }
LoadMeasurementUnit(elem);
}
}
CreateDefaultMeasurementUnitsFile();
}
}
private const string FILE_NAME = "MeasurementUnits.xml";
private void LoadMeasurementUnit(System.Xml.XmlElement node)
{
try
{
MeasurementUnit mu = new MeasurementUnit(node);
if (!_units.ContainsKey(mu.MainDisplayUnit))
{
_units.Add(mu.MainDisplayUnit, mu);
}
else
{
_units[mu.MainDisplayUnit] = mu;
}
}
catch (System.Exception ex) { DTS.Utilities.Logging.APILogger.Log("failed to get node from measurement unit db, ", ex); }
}
}
}