/// <summary> /// Step through and calculate means+std devs for each voltage in .fullDATs /// </summary> public void GenerateStatsData() { StackTrace st = new StackTrace(); Debug.WriteLine("GenerateStatsData() caller name: " + st.GetFrame(1).GetMethod().Name); StatsDataList = new List <LJVStatsDatum>(); //remove scans where pixel did not light up for (int i = 0; i < LJVScanVMCollection.Count; i++) { if (!LJVScanVMCollection[i].TheLJVScan.PixelLitUp ?? false) { Debug.WriteLine(LJVScanVMCollection[i].TheLJVScan.DeviceLJVScanSummary.Device.Label + LJVScanVMCollection[i].TheLJVScan.Pixel.Site + " did not light up"); LJVScanVMCollection.Remove(LJVScanVMCollection[i]); } } //first find the maximum voltage across all LJVScans decimal maxVoltage = 0; LJVScanVM maxScan = new LJVScanVM(); foreach (LJVScanVM scan in LJVScanVMCollection) { try { if (scan.FullLJVDataList.Count != scan.RawLJVDataList.Count) { scan.GenerateFullLJVData(); } var scanMax = scan.FullLJVDataList.Max(x => x.Voltage); if (scanMax > maxVoltage) { maxVoltage = scanMax; maxScan = scan; } } catch (Exception e) { Debug.WriteLine("LJVScanSummaryVM GenerateStatsData error: " + e.ToString()); } } //assume that the StepSize is constant and loop through each step in maxScan for (int i = 0; i < maxScan.FullLJVDataList.Count; i++) { List <FullLJVDatum> dataAtVoltage = new List <FullLJVDatum>(); foreach (LJVScanVM scan in LJVScanVMCollection) { if (scan.FullLJVDataList.Count >= i) { FullLJVDatum datumAtIndex = scan.FullLJVDataList.Where(x => x.Voltage == maxScan.FullLJVDataList[i].Voltage).FirstOrDefault(); if (datumAtIndex != null) { dataAtVoltage.Add(datumAtIndex); } } } StatsDataList.Add(StatsDatumFromFullLJVList(dataAtVoltage)); } SetStatsDataPath(); DataProcessingService.WriteIENumberableToCSV(StatsDataList, _statsDataPath); }
public string[,] FullDatArray() { var datum = new FullLJVDatum(); var type = datum.GetType(); var datumProps = new List <PropertyInfo>(type.GetProperties()); List <PropertyInfo> ignoredProps = new List <PropertyInfo>() { typeof(FullLJVDatum).GetProperty("ELSpecPath"), typeof(FullLJVDatum).GetProperty("ELSpecData") }; //remove ignored props from datumProps foreach (PropertyInfo p in ignoredProps) { if (p != null) { for (int i = datumProps.Count - 1; i >= 0; i--) { if (datumProps[i].Name == p.Name) { datumProps.RemoveAt(i); } } } } string[,] dataArray = new string[FullLJVDataList.Count, datumProps.Count()]; //load values into array by property name with reflection for (int i = 0; i < FullLJVDataList.Count; i++) { int propsCounter = 0; foreach (PropertyInfo p in datumProps) { //Debug.WriteLine("datumProps.Name: " + p.Name); if (FullLJVDataList[i].GetType().GetProperty(p.Name) != null) { var value = (FullLJVDataList[i].GetType().GetProperty(p.Name).GetValue(FullLJVDataList[i], null) ?? "").ToString(); dataArray[i, propsCounter] = value; propsCounter++; } } } return(dataArray); }
private void ConstructFullLJVDataListAndCSV(string fp) { FullLJVDataList = new List <FullLJVDatum>(); foreach (RawLJVDatum rawdat in RawLJVDataList) { try { ProcessedLJVDatum procdat = ProcLJVDataList.Where(x => x.Voltage == rawdat.Voltage).First(); FullLJVDatum newDatum = new FullLJVDatum(); if (rawdat.PhotoCurrentA != 0) { newDatum = new FullLJVDatum() { Voltage = rawdat.Voltage, Current = rawdat.Current, CurrentDensity = procdat.CurrentDensity, Resistance = rawdat.Resistance, PhotoCurrentA = rawdat.PhotoCurrentA, PhotoCurrentB = rawdat.PhotoCurrentB, PhotoCurrentC = rawdat.PhotoCurrentC, CameraCIEx = rawdat.CameraCIEx, CameraCIEy = rawdat.CameraCIEy, CameraLuminance = rawdat.CameraLuminance, Luminance = procdat.Luminance, CurrentEff = procdat.CurrentEff, PowerEff = procdat.PowerEff, EQE = procdat.EQE, PCurrChangePercent = ((rawdat.PhotoCurrentC / rawdat.PhotoCurrentA) - 1) * 100, TimeStamp = rawdat.TimeStamp //generate method to find ELSpecPaths from SpectrumAtEachStep function }; } FullLJVDataList.Add(newDatum); } catch (Exception e) { Debug.WriteLine("error at LJVScanVM ConstructFullLJVDataListAndCSV: " + e.ToString()); } } DataProcessingService.WriteIENumberableToCSV(FullLJVDataList, fp); }