/// <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);
        }
예제 #2
0
        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);
        }
예제 #3
0
        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);
        }