コード例 #1
0
        partial void setBlankControlTouchUpInside(Foundation.NSObject sender)
        {
            UKeyboardClick();
            if (somethingWentWrong != true)
            {
                OESApplication.iOS.handleSpectra handleSpec = new OESApplication.iOS.handleSpectra();
                float[] refGreen, refBlue, refRed, samGreen, samBlue, samRed;
                refGreen = handleSpec.getAvgSpectrasRows(RefGreenPixels, overalHeight, overalWeight, "refGreen");
                refBlue  = handleSpec.getAvgSpectrasRows(RefBluePixels, overalHeight, overalWeight, "refBlue");
                refRed   = handleSpec.getAvgSpectrasRows(RefRedPixels, overalHeight, overalWeight, "refRed");
                //Console.WriteLine(".........now avg of samples: .........");
                samGreen = handleSpec.getAvgSpectrasRows(SamplegreenPixels, overalHeight, overalWeight, "samGreen");
                samBlue  = handleSpec.getAvgSpectrasRows(SamplebluePixels, overalHeight, overalWeight, "samBlue");
                samRed   = handleSpec.getAvgSpectrasRows(SampleredPixels, overalHeight, overalWeight, "samRed");

                (int peakBlueLocationRef, float maxBlueValRef)   = handleSpec.findPeak(refBlue, overalHeight);
                (int peakRedLocationRef, float maxRedValRef)     = handleSpec.findPeak(refRed, overalHeight);
                (int peakGreenLocationRef, float maxGreenValRef) = handleSpec.findPeak(refGreen, overalHeight);


                Console.WriteLine("maxRedValRef: " + maxRedValRef + "--- peakRedLocationRef: " + peakRedLocationRef);
                Console.WriteLine("maxGreenValRef: " + maxGreenValRef + "--- peakGreenLocationRef: " + peakGreenLocationRef);
                Console.WriteLine("maxBlueValRef: " + maxBlueValRef + "--- peakBlueLocationRef: " + peakBlueLocationRef);

                if (peakBlueLocationRef > peakGreenLocationRef && peakGreenLocationRef > peakRedLocationRef)
                {
                    //handleSpec.normalizeArray(maxRedValRef, ref refRed);
                    //handleSpec.normalizeArray(maxGreenValRef, ref refGreen);
                    //handleSpec.normalizeArray(maxBlueValRef, ref refBlue);
                    handleSpec.normalizeArray(maxRedValRef, ref samRed);
                    handleSpec.normalizeArray(maxBlueValRef, ref samBlue);
                    handleSpec.normalizeArray(maxGreenValRef, ref samGreen);

                    double[] wavelengthArray = handleSpec.CreateWavelenghtToPixelLocationsUsingReferenceSpectra(peakBlueLocationRef, peakRedLocationRef, overalHeight);

                    /*
                     * For saving pixel values into a file use streamWriter with path file:
                     */
                    string path     = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
                    string filename = Path.Combine(path, "blank_" + DateTime.UtcNow.ToLongDateString() + "_Abs.csv");
                    try
                    {
                        if (File.Exists(filename))
                        {
                            File.Delete(filename);
                        }

                        using (var streamWriter = new StreamWriter(filename, true))
                        {
                            int index = 0;
                            //int startWl = 405;
                            if (Int32.TryParse(wavelenght.Text, out int wave))
                            {
                                Console.WriteLine(wave);
                                //startWl = wave;
                            }
                            else
                            {
                                Console.WriteLine("String could not be parsed.");
                            }
                            for (int wl = 405; wl < 670; wl += 1)
                            {
                                double sampleIntensityRatio = 0.0;
                                double absorbance           = 0.0;

                                if (wave <= 500)
                                {
                                    sampleIntensityRatio = handleSpec.calculateIntensity(samBlue, wavelengthArray, "blue", 10, wl);
                                    absorbance           = handleSpec.measureAbsorbance(sampleIntensityRatio);
                                }
                                else if (wave <= 600)
                                {
                                    sampleIntensityRatio = handleSpec.calculateIntensity(samGreen, wavelengthArray, "green", 10, wl);
                                    absorbance           = handleSpec.measureAbsorbance(sampleIntensityRatio);
                                }
                                else
                                {
                                    sampleIntensityRatio = handleSpec.calculateIntensity(samRed, wavelengthArray, "red", 10, wl);
                                    absorbance           = handleSpec.measureAbsorbance(sampleIntensityRatio);
                                }
                                //double concentratio = handleSpec.measureConcentration(absorbance, -0.14917, -7.8279);
                                blankAbsorbances[index] = absorbance;
                                streamWriter.WriteLine(wl + "," + absorbance);
                                index++;
                            }
                        }
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine("The process failed: {0}", e.ToString());
                    }
                    string Output = "Blank Control Saved. Thank you!";

                    resultOutput.LineBreakMode = UILineBreakMode.WordWrap;
                    resultOutput.Lines         = 6;
                    //resultOutputBox.Text = Output;
                    resultOutput.Text = Output;
                }
                else
                {
                    string Output = ("Couldn't detect Blue and Red peaks correctly,\n Please take a new picture with brighter spectrums");
                    resultOutput.LineBreakMode = UILineBreakMode.WordWrap;
                    resultOutput.Lines         = 2;
                    //resultOutputBox.Text = Output;
                    resultOutput.Text = Output;
                }
            }
            else
            {
                string Output = ("Something went wrong with calculating RGB pixel values,\n Please take a new picture");
                resultOutput.LineBreakMode = UILineBreakMode.WordWrap;
                resultOutput.Lines         = 2;
                //resultOutputBox.Text = Output;
                resultOutput.Text = Output;
            }
        }
コード例 #2
0
        partial void measurePHTouchUpInside(Foundation.NSObject sender)
        {
            UKeyboardClick();
            checkBlankVals();

            if (somethingWentWrong != true)
            {
                OESApplication.iOS.handleSpectra handleSpec = new OESApplication.iOS.handleSpectra();
                float[] refGreen, refBlue, refRed, samGreen, samBlue, samRed;
                refGreen = handleSpec.getAvgSpectrasRows(RefGreenPixels, overalHeight, overalWeight, "refGreen");
                refBlue  = handleSpec.getAvgSpectrasRows(RefBluePixels, overalHeight, overalWeight, "refBlue");
                refRed   = handleSpec.getAvgSpectrasRows(RefRedPixels, overalHeight, overalWeight, "refRed");
                //Console.WriteLine(".........now avg of samples: .........");
                samGreen = handleSpec.getAvgSpectrasRows(SamplegreenPixels, overalHeight, overalWeight, "samGreen");
                samBlue  = handleSpec.getAvgSpectrasRows(SamplebluePixels, overalHeight, overalWeight, "samBlue");
                samRed   = handleSpec.getAvgSpectrasRows(SampleredPixels, overalHeight, overalWeight, "samRed");

                (int peakBlueLocationRef, float maxBlueValRef)   = handleSpec.findPeak(refBlue, overalHeight);
                (int peakRedLocationRef, float maxRedValRef)     = handleSpec.findPeak(refRed, overalHeight);
                (int peakGreenLocationRef, float maxGreenValRef) = handleSpec.findPeak(refGreen, overalHeight);


                Console.WriteLine("maxRedValRef: " + maxRedValRef + "--- peakRedLocationRef: " + peakRedLocationRef);
                Console.WriteLine("maxGreenValRef: " + maxGreenValRef + "--- peakGreenLocationRef: " + peakGreenLocationRef);
                Console.WriteLine("maxBlueValRef: " + maxBlueValRef + "--- peakBlueLocationRef: " + peakBlueLocationRef);

                if (peakBlueLocationRef > peakGreenLocationRef && peakGreenLocationRef > peakRedLocationRef)
                {
                    //handleSpec.normalizeArray(maxRedValRef, ref refRed);
                    //handleSpec.normalizeArray(maxGreenValRef, ref refGreen);
                    //handleSpec.normalizeArray(maxBlueValRef, ref refBlue);
                    handleSpec.normalizeArray(maxRedValRef, ref samRed);
                    handleSpec.normalizeArray(maxBlueValRef, ref samBlue);
                    handleSpec.normalizeArray(maxGreenValRef, ref samGreen);
                    //redPeakLocation: 610.65, bluePeakLocation: 449.1
                    double[] wavelengthArray = handleSpec.CreateWavelenghtToPixelLocationsUsingReferenceSpectra(peakBlueLocationRef, peakRedLocationRef, overalHeight);

                    if (Int32.TryParse(wavelenght.Text, out int wave))
                    {
                        Console.WriteLine(wave);
                    }
                    else
                    {
                        Console.WriteLine("String could not be parsed.");
                    }

                    string Output = "";

                    /*
                     * For saving pixel values into a file use streamWriter with path file:
                     */

                    //this is the existing bundled image path
                    string folder = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
                    //this is the destination image file name
                    string filename = Path.Combine(folder, "EOS_" + year + "_" + month + "_" + day + "_" + hour + "_" + min + "_" + sec + "_" + timeInSeconds + "_wavelength" + wave + ".csv");

                    //string filename = Path.Combine(path, DateTime.UtcNow.ToLongDateString() + DateTime.UtcNow.ToLongTimeString() + "_Abs.csv");


                    using (var streamWriter = new StreamWriter(filename, true))
                    {
                        streamWriter.WriteLine("wavelength,Absorbance,IntensitysRatio");

                        int indexi = 0;
                        for (int wl = 405; wl <= 670; wl += 1)
                        {
                            double sampleIntensityRatio = 0.0;
                            double absorbance           = 0.0;


                            if (wave <= 500)
                            {
                                sampleIntensityRatio = handleSpec.calculateIntensity(samBlue, wavelengthArray, "blue", 10, wl);
                                absorbance           = handleSpec.measureAbsorbance(sampleIntensityRatio);
                            }
                            else if (wave <= 600)
                            {
                                sampleIntensityRatio = handleSpec.calculateIntensity(samGreen, wavelengthArray, "green", 10, wl);
                                absorbance           = handleSpec.measureAbsorbance(sampleIntensityRatio);
                            }
                            else
                            {
                                sampleIntensityRatio = handleSpec.calculateIntensity(samRed, wavelengthArray, "red", 10, wl);
                                absorbance           = handleSpec.measureAbsorbance(sampleIntensityRatio);
                            }

                            absorbance -= blankAbsorbances[indexi];
                            indexi++;
                            //double concentratio = handleSpec.measureConcentration(absorbance, -0.14917, -7.8279);

                            streamWriter.WriteLine(wl + "," + absorbance + "," + sampleIntensityRatio);

                            if (wl == wave)
                            {
                                //double refGreenIntensity = handleSpec.calculateIntensity(refGreen, wavelengthArray, "green", 10, wl);
                                Output += "Absorbance is " + Math.Round(absorbance, 3) + "\n";
                                //if(refGreenIntensity < 150)
                                //{
                                //    Output += "Low Reference Intensity detected,\n which might affect the results.\n It is recommended to take a new Image.";
                                //}
                            }
                        }
                    }


                    resultOutput.LineBreakMode = UILineBreakMode.WordWrap;
                    resultOutput.Lines         = 6;
                    resultOutput.Text          = Output;
                }
                else
                {
                    string Output = ("Couldn't detect Blue and Red peaks correctly,\n Please take a new picture with brighter spectrums");
                    resultOutput.LineBreakMode = UILineBreakMode.WordWrap;
                    resultOutput.Lines         = 2;
                    resultOutput.Text          = Output;
                }
            }
            else
            {
                string Output = ("Something went wrong with calculating RGB pixel values,\n Please take a new picture");
                resultOutput.LineBreakMode = UILineBreakMode.WordWrap;
                resultOutput.Lines         = 2;
                resultOutput.Text          = Output;
            }
        }