public float[,] StatsDatArray() { if (this.StatsDataList == null && this.TheLJVScanSummary.StatsDataPath == null) { GenerateStatsData(); } else { LoadStatsDataIntoList(TheLJVScanSummary.StatsDataPath); } var datum = new LJVStatsDatum(); int propertiesCount = datum.GetType().GetProperties().Count(); var propertiesArray = datum.GetType().GetProperties(); float[,] dataArray = new float[1, propertiesCount]; dataArray = new float[StatsDataList.Count, propertiesCount]; for (int i = 0; i < StatsDataList.Count; i++) { datum = StatsDataList[i]; for (int j = 0; j < propertiesCount; j++) { float arrval = 0; var datPropType = datum.GetType().GetProperty(propertiesArray[j].Name); var datPropInstance = datPropType.GetValue(datum) as Nullable <decimal>; arrval = (float)(datPropInstance ?? 0); dataArray[i, j] = arrval; } } return(dataArray); }
public List <LJVStatsDatum> LJVStatsData(List <List <FullLJVDatum> > dataLists) { List <LJVStatsDatum> statsDataList = new List <LJVStatsDatum>(); //find each unique voltage point HashSet <decimal> voltagePoints = new HashSet <decimal>(); foreach (List <FullLJVDatum> list in dataLists) { foreach (FullLJVDatum d in list) { voltagePoints.Add(d.Voltage); } } //loop through ever list and calculate mean/stdDev for each voltage (if it exists) foreach (decimal voltage in voltagePoints) { LJVStatsDatum statsDatum = new LJVStatsDatum(); List <FullLJVDatum> dataAtVoltage = new List <FullLJVDatum>(); foreach (List <FullLJVDatum> list in dataLists) { int index = list.FindIndex(x => x.Voltage == voltage); if (index >= 0)//FindIndex returns -1 if element doesn't exist { dataAtVoltage.Add(list[index]); } } } return(statsDataList); }
/// <summary> /// XD /// </summary> /// <param name="dataList"></param> /// <returns></returns> private LJVStatsDatum StatsDatumFromFullLJVList(List <FullLJVDatum> dataList) { LJVStatsDatum statsDatum = new LJVStatsDatum(); List <double> currentDensities = new List <double>(); List <double> resistances = new List <double>(); List <double> photoCurrents = new List <double>(); List <double> luminances = new List <double>(); List <double> currentEffs = new List <double>(); List <double> powerEffs = new List <double>(); List <double> EQEs = new List <double>(); List <double> CIExs = new List <double>(); List <double> CIEys = new List <double>(); foreach (FullLJVDatum fd in dataList) { currentDensities.Add(Convert.ToDouble(fd.CurrentDensity)); //Debug.WriteLine("currentDensity = " + fd.CurrentDensity); resistances.Add(Convert.ToDouble(fd.Resistance)); photoCurrents.Add(Convert.ToDouble((fd.PhotoCurrentA + fd.PhotoCurrentB) / 2.0m)); luminances.Add(Convert.ToDouble(fd.Luminance)); currentEffs.Add(Convert.ToDouble(fd.CurrentEff)); powerEffs.Add(Convert.ToDouble(fd.PowerEff)); EQEs.Add(Convert.ToDouble(fd.EQE)); CIExs.Add(Convert.ToDouble(fd.CameraCIEx)); CIEys.Add(Convert.ToDouble(fd.CameraCIEy)); } statsDatum.Voltage = dataList.First().Voltage; StatsBase calculator = new StatsBase(); calculator.PopulateStatsFromArrayAndRound(currentDensities.ToArray(), 13); statsDatum.MeanCurrentDensity = Convert.ToDecimal(calculator.Mean); statsDatum.CurrentDensityStdDev = Convert.ToDecimal(calculator.StdDev); //Debug.WriteLine("statsDatum.MeanCurrentDensity = " + statsDatum.MeanCurrentDensity); //Debug.WriteLine("statsDatum.CurrentDensityStdDev = " + statsDatum.CurrentDensityStdDev); calculator.PopulateStatsFromArrayAndRound(resistances.ToArray(), 13); statsDatum.MeanResistance = Convert.ToDecimal(calculator.Mean); statsDatum.ResistanceStdDev = Convert.ToDecimal(calculator.StdDev); calculator.PopulateStatsFromArrayAndRound(photoCurrents.ToArray(), 13); statsDatum.MeanPhotoCurrent = Convert.ToDecimal(calculator.Mean); statsDatum.PhotoCurrentStdDev = Convert.ToDecimal(calculator.StdDev); calculator.PopulateStatsFromArrayAndRound(luminances.ToArray(), 13); statsDatum.MeanLuminance = Convert.ToDecimal(calculator.Mean); statsDatum.LuminanceStdDev = Convert.ToDecimal(calculator.StdDev); calculator.PopulateStatsFromArrayAndRound(currentEffs.ToArray(), 13); statsDatum.MeanCurrentEff = Convert.ToDecimal(calculator.Mean); statsDatum.CurrentEffStdDev = Convert.ToDecimal(calculator.StdDev); calculator.PopulateStatsFromArrayAndRound(powerEffs.ToArray(), 13); statsDatum.MeanPowerEff = Convert.ToDecimal(calculator.Mean); statsDatum.PowerEffStdDev = Convert.ToDecimal(calculator.StdDev); calculator.PopulateStatsFromArrayAndRound(EQEs.ToArray(), 13); statsDatum.MeanEQE = Convert.ToDecimal(calculator.Mean); statsDatum.EQEStdDev = Convert.ToDecimal(calculator.StdDev); calculator.PopulateStatsFromArrayAndRound(CIExs.ToArray(), 13); statsDatum.MeanCameraCIEx = Convert.ToDecimal(calculator.Mean); statsDatum.CameraCIExStdDev = Convert.ToDecimal(calculator.StdDev); calculator.PopulateStatsFromArrayAndRound(CIEys.ToArray(), 13); statsDatum.MeanCameraCIEy = Convert.ToDecimal(calculator.Mean); statsDatum.CameraCIEyStdDev = Convert.ToDecimal(calculator.StdDev); return(statsDatum); }