public static void Main(string[] args)
        {
            RunProteinSignificanceClassifier proteinBasedSignificance = new RunProteinSignificanceClassifier();
            int numberSamples = 0;
            // Parse the ExperimentalDesign File to get info of samples and conditions they belong to
            Dictionary <string, List <string> > samplefileConditionRelation = proteinBasedSignificance.ExpermientalDesignParser("C:/Users/Anay/Desktop/UW Madison/Smith Lab/Spectra Data/ExperimentalDesign.tsv"
                                                                                                                                , ref numberSamples);
            // get all conditions and pair them up for Significance classification
            List <string>         allConditions = new List <string>(samplefileConditionRelation.Keys);
            List <List <string> > allTwoConditionCombinations = proteinBasedSignificance.GenerateAllCombinationsOfTwoConditions(allConditions);

            foreach (List <string> conditionPair in allTwoConditionCombinations)
            {
                string firstCondition      = conditionPair[0];
                string secondCondition     = conditionPair[1];
                double sOValue             = 0.1;
                double meanFraction        = 0.1;
                int    maxSignificantCount = 0;

                while (meanFraction < 1)
                {
                    while (sOValue < 1)
                    {
                        for (int k = 0; k < numberSamples; k++)
                        {
                            proteinBasedSignificance = new RunProteinSignificanceClassifier();
                            //Declaring variables which will be generated after parsing QuantifiedPeptides file
                            List <ProteinRowInfo> allProteinInfo   = new List <ProteinRowInfo>();
                            List <string>         samplesFileNames = new List <string>();
                            int maxInvalidIntensityValues          = k;
                            proteinBasedSignificance.ProteinDataParser(allProteinInfo, maxInvalidIntensityValues,
                                                                       samplesFileNames, "C:/Users/Anay/Desktop/UW Madison/Smith Lab/Spectra Data/FlashLFQ_2020-04-26-17-39-35/QuantifiedProteins.tsv");

                            // imputes missing intensity values for each protein
                            ImputationProcess imputationProcess = new ImputationProcess();
                            imputationProcess.RunImputationProcess(allProteinInfo, samplesFileNames, meanFraction);

                            // Declaring variables which will be generated after T-Tests and Permutation Tests
                            List <double>    observedNValues  = new List <double>(); // will store observed N values
                            List <double>    permutedNValues  = new List <double>(); // will store permuted N values
                            StatisticalTests statisticalTests = new StatisticalTests();

                            // contains proteins and their observed N value, P Value and Log Fold Change
                            Dictionary <string, List <double> > allProteinObservedStatistics = new Dictionary <string, List <double> >();
                            // Creating threads for Parallelizing code
                            ThreadPool.GetMaxThreads(out int workerThreadsCount, out int ioThreadsCount);
                            int[] threads = Enumerable.Range(0, workerThreadsCount).ToArray();
                            Parallel.ForEach(threads, (i) =>
                            {
                                // Compute observed and permuted N Values for each protein using T Tests and Permutation Testing
                                for (; i < allProteinInfo.Count; i += workerThreadsCount)
                                {
                                    ProteinRowInfo proteinRowInfo = allProteinInfo[i];
                                    Dictionary <string, double> samplesintensityData = proteinRowInfo.SamplesIntensityData;

                                    List <string> firstConditionAssociatedSamples       = samplefileConditionRelation.GetValueOrDefault(firstCondition);
                                    List <string> secondConditionAssociatedSamples      = samplefileConditionRelation.GetValueOrDefault(secondCondition);
                                    List <double> proteinFirstConditionIntensityValues  = new List <double>();
                                    List <double> proteinSecondConditionIntensityValues = new List <double>();

                                    // get the protein's intensity values corresponding to the chosen pair of conditions
                                    foreach (string sampleFileName in samplesFileNames)
                                    {
                                        if (firstConditionAssociatedSamples.Contains(sampleFileName))
                                        {
                                            proteinFirstConditionIntensityValues.Add(samplesintensityData[sampleFileName]);
                                        }
                                        if (secondConditionAssociatedSamples.Contains(sampleFileName))
                                        {
                                            proteinSecondConditionIntensityValues.Add(samplesintensityData[sampleFileName]);
                                        }
                                    }

                                    // Compute observed N Values with the chosen pair of conditions using T-Tests and
                                    // store in observedNValues array
                                    List <double> proteinStatistics = statisticalTests.GetNValueUsingTTest(proteinFirstConditionIntensityValues, proteinSecondConditionIntensityValues,
                                                                                                           sOValue, false);

                                    // Compute permuted N Values with the chosen pair of conditions using T-Tests and
                                    // store in permutedNValues array
                                    List <double> proteinPermutedNavlues = statisticalTests.GetNValueUsingPermutationtests(proteinFirstConditionIntensityValues,
                                                                                                                           proteinSecondConditionIntensityValues, sOValue);

                                    // add computed original and permuted statistics for the protein
                                    lock (allProteinObservedStatistics)
                                    {
                                        // add protein and its observed N value, P Value and Log Fold Change in that order
                                        allProteinObservedStatistics.Add(proteinRowInfo.ProteinID, new List <double>()
                                        {
                                            proteinStatistics[0],
                                            proteinStatistics[1], proteinStatistics[2]
                                        });
                                        observedNValues.Add(proteinStatistics[0]);
                                        foreach (double permutedNValue in proteinPermutedNavlues)
                                        {
                                            permutedNValues.Add(permutedNValue);
                                        }
                                    }
                                }
                            });

                            // makes the permuted N values list and the observed N Values list of the same size
                            proteinBasedSignificance.ResizePermutedArray(permutedNValues, permutedNValues.Count() - observedNValues.Count());

                            // get the threshold at which we will filter out the significant proteins
                            double nValueThreshold = statisticalTests.calculateNvaluethreshold(observedNValues, permutedNValues, 0.05);

                            // determine number of signifcant proteins detected
                            int newSignificantCount = observedNValues.Count(x => x >= nValueThreshold);
                            if (newSignificantCount > maxSignificantCount)
                            {
                                maxSignificantCount = newSignificantCount;
                                proteinBasedSignificance.PrintSignificantProtein(allProteinInfo, nValueThreshold, allProteinObservedStatistics,
                                                                                 "C:/Users/Anay/Desktop/UW Madison/Smith Lab/Project 1/ConsoleApp1/ProteinBasedSignificanceModified.csv");
                                Console.WriteLine("Sig Count - " + maxSignificantCount + "meanFraction - " + meanFraction + "sOValue - "
                                                  + sOValue + "k - " + k);
                            }
                        }
                        sOValue = sOValue + 0.1;
                    }
                    sOValue      = 0.1;
                    meanFraction = meanFraction + 0.3;
                }
            }
        }
예제 #2
0
        public static void Main(string[] args)
        {
            Program proteinBasedSignificance = new Program();
            // Parse the ExperimentalDesign File to get info of samples and conditions they belong to
            Dictionary <string, List <string> > samplefileConditionRelation = proteinBasedSignificance.ExpermientalDesignParser("C:/Users/Anay/Desktop/UW Madison/Smith Lab/Spectra Data/ExperimentalDesign.tsv");
            // get all conditions and pair them up for Significance classification
            List <string>         allConditions = new List <string>(samplefileConditionRelation.Keys);
            List <List <string> > allTwoConditionCombinations = proteinBasedSignificance.GenerateAllCombinationsOfTwoConditions(allConditions);

            foreach (List <string> conditionPair in allTwoConditionCombinations)
            {
                string firstCondition      = conditionPair[0];
                string secondCondition     = conditionPair[1];
                double sOValue             = 0.1;
                double meanFraction        = 0.1;
                int    maxSignificantCount = 0;

                while (meanFraction < 1)
                {
                    while (sOValue < 1)
                    {
                        for (int k = 1; k < 9; k++)
                        {
                            proteinBasedSignificance = new Program();
                            //Declaring variables which will be generated after parsing QuantifiedPeptides file
                            List <ProteinRowInfo> allProteinInfo   = new List <ProteinRowInfo>();
                            List <string>         samplesFileNames = new List <string>();
                            int maxInvalidIntensityValues          = k;
                            proteinBasedSignificance.ProteinDataParser(allProteinInfo, maxInvalidIntensityValues,
                                                                       samplesFileNames, "C:/Users/Anay/Desktop/UW Madison/Smith Lab/Spectra Data/FlashLFQ_2020-04-26-17-39-35/QuantifiedProteins.tsv");

                            // imputes missing intensity values for each protein
                            ImputationProcess imputationProcess = new ImputationProcess();
                            imputationProcess.RunImputationProcess(allProteinInfo, samplesFileNames, meanFraction);

                            // Declaring variables which will be generated after T-Tests and Permutation Tests
                            List <double>    actualNValues       = new List <double>(); // will store actual(real) N values
                            List <double>    actualPValues       = new List <double>(); // will store actual(real) P values
                            List <double>    actualLogFoldChange = new List <double>(); // will store actual(real) Log Fold Change values
                            List <double>    permutedNValues     = new List <double>(); // will store permuted(fake) N values
                            StatisticalTests statisticalTests    = new StatisticalTests();

                            // Compute actual and permuted N Values for each protein using T Tests and Permutation Testing
                            for (int i = 0; i < allProteinInfo.Count; i++)
                            {
                                ProteinRowInfo proteinRowInfo = allProteinInfo[i];
                                Dictionary <string, double> samplesintensityData = proteinRowInfo.SamplesIntensityData;

                                List <string> firstConditionAssociatedSamples       = samplefileConditionRelation.GetValueOrDefault(firstCondition);
                                List <string> secondConditionAssociatedSamples      = samplefileConditionRelation.GetValueOrDefault(secondCondition);
                                List <double> proteinFirstConditionIntensityValues  = new List <double>();
                                List <double> proteinSecondConditionIntensityValues = new List <double>();

                                // get the protein's intensity values corresponding to the chosen pair of conditions
                                foreach (string sampleFileName in samplesFileNames)
                                {
                                    if (firstConditionAssociatedSamples.Contains(sampleFileName))
                                    {
                                        proteinFirstConditionIntensityValues.Add(samplesintensityData[sampleFileName]);
                                    }
                                    if (secondConditionAssociatedSamples.Contains(sampleFileName))
                                    {
                                        proteinSecondConditionIntensityValues.Add(samplesintensityData[sampleFileName]);
                                    }
                                }

                                // Compute actual(real) N Values with the chosen pair of conditions using T-Tests and
                                // store in actualNValues array
                                statisticalTests.GetNValueUsingTTest(proteinFirstConditionIntensityValues, proteinSecondConditionIntensityValues,
                                                                     actualNValues, actualPValues, actualLogFoldChange, sOValue);

                                // Compute permuted(fake) N Values with the chosen pair of conditions using T-Tests and
                                // store in permutedNValues array
                                statisticalTests.GetNValueUsingPermutationtests(proteinFirstConditionIntensityValues, proteinSecondConditionIntensityValues,
                                                                                permutedNValues, sOValue);
                            }

                            // makes the permuted N values list and the actual N Values list of the same size
                            proteinBasedSignificance.ResizePermutedArray(permutedNValues, permutedNValues.Count() - actualNValues.Count());

                            // Copy of the actual N values which will be used when determind the N Value threshold for target FDR
                            List <double> actualNValuesCopy = new List <double>();
                            for (int i = 0; i < actualNValues.Count; i++)
                            {
                                actualNValuesCopy.Add(actualNValues[i]);
                            }
                            // get the threshold at which we will filter out the significant proteins
                            double nValueThreshold = statisticalTests.calculateNvaluethreshold(actualNValuesCopy, permutedNValues, 0.05);

                            // determine number of signifcant proteins detected
                            int newSignificantCount = actualNValues.Count(x => x >= nValueThreshold);
                            if (newSignificantCount > maxSignificantCount)
                            {
                                maxSignificantCount = newSignificantCount;
                                proteinBasedSignificance.PrintSignificantProtein(allProteinInfo, actualNValues, nValueThreshold, actualPValues,
                                                                                 actualLogFoldChange, "C:/Users/Anay/Desktop/UW Madison/Smith Lab/Project 1/ConsoleApp1/ProteinBaseedSignificance.csv");
                            }
                        }
                        sOValue = sOValue + 0.1;
                    }
                    sOValue      = 0.1;
                    meanFraction = meanFraction + 0.3;
                }
            }
        }
        public void TestImputeData()
        {
            ProteinRowInfo expectedSampleprotein = new ProteinRowInfo();

            expectedSampleprotein.ProteinID = "A0A087WTI9";
            expectedSampleprotein.SamplesIntensityData["Intensity_B02_06_161103_A1_HCD_OT_4ul"] = 24.607;
            expectedSampleprotein.SamplesIntensityData["Intensity_B02_07_161103_A2_HCD_OT_4ul"] = 23.763;
            expectedSampleprotein.SamplesIntensityData["Intensity_B02_16_161103_A3_HCD_OT_4ul"] = 20.783;
            expectedSampleprotein.SamplesIntensityData["Intensity_B02_17_161103_A4_HCD_OT_4ul"] = 20.165;
            expectedSampleprotein.SamplesIntensityData["Intensity_B02_24_161103_C1_HCD_OT_4ul"] = 20.639;
            expectedSampleprotein.SamplesIntensityData["Intensity_B02_09_161103_C2_HCD_OT_4ul"] = 17.223;
            expectedSampleprotein.SamplesIntensityData["Intensity_B02_14_161103_C3_HCD_OT_4ul"] = 21.564;
            expectedSampleprotein.SamplesIntensityData["Intensity_B02_19_161103_C4_HCD_OT_4ul"] = 20.469;


            List <string> sampleFileNames = new List <string>();

            sampleFileNames.Add("Intensity_B02_06_161103_A1_HCD_OT_4ul");
            sampleFileNames.Add("Intensity_B02_07_161103_A2_HCD_OT_4ul");
            sampleFileNames.Add("Intensity_B02_16_161103_A3_HCD_OT_4ul");
            sampleFileNames.Add("Intensity_B02_17_161103_A4_HCD_OT_4ul");
            sampleFileNames.Add("Intensity_B02_24_161103_C1_HCD_OT_4ul");
            sampleFileNames.Add("Intensity_B02_09_161103_C2_HCD_OT_4ul");
            sampleFileNames.Add("Intensity_B02_14_161103_C3_HCD_OT_4ul");
            sampleFileNames.Add("Intensity_B02_19_161103_C4_HCD_OT_4ul");

            double[] sampleMissingCount = new double[8];
            sampleMissingCount[0] = 20;
            sampleMissingCount[1] = 7;
            sampleMissingCount[2] = 11;
            sampleMissingCount[3] = 0;
            sampleMissingCount[4] = 32;
            sampleMissingCount[5] = 2;
            sampleMissingCount[6] = 0;
            sampleMissingCount[7] = 5;

            int[] numberOfValidIntensityValuesInSample = new int[8];
            numberOfValidIntensityValuesInSample[0] = 120;
            numberOfValidIntensityValuesInSample[1] = 135;
            numberOfValidIntensityValuesInSample[2] = 100;
            numberOfValidIntensityValuesInSample[3] = 87;
            numberOfValidIntensityValuesInSample[4] = 189;
            numberOfValidIntensityValuesInSample[5] = 50;
            numberOfValidIntensityValuesInSample[6] = 79;
            numberOfValidIntensityValuesInSample[7] = 30;

            double[] samplesMeanIntensityValue = new double[8];
            samplesMeanIntensityValue[0] = 24.4;
            samplesMeanIntensityValue[1] = 23.5;
            samplesMeanIntensityValue[2] = 22;
            samplesMeanIntensityValue[3] = 19.7;
            samplesMeanIntensityValue[4] = 21.75;
            samplesMeanIntensityValue[5] = 18.2;
            samplesMeanIntensityValue[6] = 23.21;
            samplesMeanIntensityValue[7] = 21.09;

            double[] samplesStandardDeviation = new double[8];
            samplesStandardDeviation[0] = 0.2;
            samplesStandardDeviation[1] = 1.1;
            samplesStandardDeviation[2] = 0.02;
            samplesStandardDeviation[3] = 0.7;
            samplesStandardDeviation[4] = 1.7;
            samplesStandardDeviation[5] = 0.8;
            samplesStandardDeviation[6] = 2.4;
            samplesStandardDeviation[7] = 0.15;

            ProteinRowInfo outputSampleprotein = new ProteinRowInfo();

            outputSampleprotein.ProteinID = "A0A087WTI9";
            outputSampleprotein.SamplesIntensityData["Intensity_B02_06_161103_A1_HCD_OT_4ul"] = 0;
            outputSampleprotein.SamplesIntensityData["Intensity_B02_07_161103_A2_HCD_OT_4ul"] = 23.763;
            outputSampleprotein.SamplesIntensityData["Intensity_B02_16_161103_A3_HCD_OT_4ul"] = 20.783;
            outputSampleprotein.SamplesIntensityData["Intensity_B02_17_161103_A4_HCD_OT_4ul"] = 20.165;
            outputSampleprotein.SamplesIntensityData["Intensity_B02_24_161103_C1_HCD_OT_4ul"] = 0;
            outputSampleprotein.SamplesIntensityData["Intensity_B02_09_161103_C2_HCD_OT_4ul"] = 0;
            outputSampleprotein.SamplesIntensityData["Intensity_B02_14_161103_C3_HCD_OT_4ul"] = 21.564;
            outputSampleprotein.SamplesIntensityData["Intensity_B02_19_161103_C4_HCD_OT_4ul"] = 20.469;
            double meanFraction = 0.2;

            ImputationProcess imputationProcess = new ImputationProcess();

            imputationProcess.ImputeData(outputSampleprotein, samplesMeanIntensityValue, samplesStandardDeviation,
                                         sampleFileNames, sampleMissingCount, numberOfValidIntensityValuesInSample, meanFraction, true);

            Assert.That(expectedSampleprotein.SamplesIntensityData,
                        Is.EqualTo(outputSampleprotein.SamplesIntensityData).Within(0.001));
        }
        public void TestCalculateNumberOfIntensityValuesOfSample()
        {
            int[] expectedSampleIntensityValuesCount = new int[8];
            expectedSampleIntensityValuesCount[0] = 0;
            expectedSampleIntensityValuesCount[1] = 1;
            expectedSampleIntensityValuesCount[2] = 1;
            expectedSampleIntensityValuesCount[3] = 1;
            expectedSampleIntensityValuesCount[4] = 0;
            expectedSampleIntensityValuesCount[5] = 1;
            expectedSampleIntensityValuesCount[6] = 1;
            expectedSampleIntensityValuesCount[7] = 0;

            List <string> sampleFileNames = new List <string>();

            sampleFileNames.Add("Intensity_B02_06_161103_A1_HCD_OT_4ul");
            sampleFileNames.Add("Intensity_B02_07_161103_A2_HCD_OT_4ul");
            sampleFileNames.Add("Intensity_B02_16_161103_A3_HCD_OT_4ul");
            sampleFileNames.Add("Intensity_B02_17_161103_A4_HCD_OT_4ul");
            sampleFileNames.Add("Intensity_B02_24_161103_C1_HCD_OT_4ul");
            sampleFileNames.Add("Intensity_B02_09_161103_C2_HCD_OT_4ul");
            sampleFileNames.Add("Intensity_B02_14_161103_C3_HCD_OT_4ul");
            sampleFileNames.Add("Intensity_B02_19_161103_C4_HCD_OT_4ul");

            ProteinRowInfo sampleprotein1 = new ProteinRowInfo();

            sampleprotein1.ProteinID = "A0A023KES1";
            sampleprotein1.SamplesIntensityData["Intensity_B02_06_161103_A1_HCD_OT_4ul"] = 0;
            sampleprotein1.SamplesIntensityData["Intensity_B02_07_161103_A2_HCD_OT_4ul"] = 22.729;
            sampleprotein1.SamplesIntensityData["Intensity_B02_16_161103_A3_HCD_OT_4ul"] = 22.347;
            sampleprotein1.SamplesIntensityData["Intensity_B02_17_161103_A4_HCD_OT_4ul"] = 22.397;
            sampleprotein1.SamplesIntensityData["Intensity_B02_24_161103_C1_HCD_OT_4ul"] = 0;
            sampleprotein1.SamplesIntensityData["Intensity_B02_09_161103_C2_HCD_OT_4ul"] = 23.180;
            sampleprotein1.SamplesIntensityData["Intensity_B02_14_161103_C3_HCD_OT_4ul"] = 23.293;
            sampleprotein1.SamplesIntensityData["Intensity_B02_19_161103_C4_HCD_OT_4ul"] = 0;


            ProteinRowInfo sampleprotein2 = new ProteinRowInfo();

            sampleprotein2.ProteinID = "A0A024R4E5";
            sampleprotein2.SamplesIntensityData["Intensity_B02_06_161103_A1_HCD_OT_4ul"] = 0;
            sampleprotein2.SamplesIntensityData["Intensity_B02_07_161103_A2_HCD_OT_4ul"] = 25.535;
            sampleprotein2.SamplesIntensityData["Intensity_B02_16_161103_A3_HCD_OT_4ul"] = 0;
            sampleprotein2.SamplesIntensityData["Intensity_B02_17_161103_A4_HCD_OT_4ul"] = 0;
            sampleprotein2.SamplesIntensityData["Intensity_B02_24_161103_C1_HCD_OT_4ul"] = 25.370;
            sampleprotein2.SamplesIntensityData["Intensity_B02_09_161103_C2_HCD_OT_4ul"] = 24;
            sampleprotein2.SamplesIntensityData["Intensity_B02_14_161103_C3_HCD_OT_4ul"] = 25.359;
            sampleprotein2.SamplesIntensityData["Intensity_B02_19_161103_C4_HCD_OT_4ul"] = 0;

            int[]             outputSampleIntensityValuesCount  = new int[8];
            double[]          outputSampleAllIntensityValuesSum = new double[8];
            ImputationProcess imputationProcess = new ImputationProcess();

            imputationProcess.CalculateNumberAndSumOfIntensityValuesOfSample(sampleprotein1,
                                                                             outputSampleAllIntensityValuesSum, sampleFileNames, outputSampleIntensityValuesCount);

            CollectionAssert.AreEqual(expectedSampleIntensityValuesCount, outputSampleIntensityValuesCount);

            expectedSampleIntensityValuesCount[0] = 0;
            expectedSampleIntensityValuesCount[1] = 2;
            expectedSampleIntensityValuesCount[2] = 1;
            expectedSampleIntensityValuesCount[3] = 1;
            expectedSampleIntensityValuesCount[4] = 1;
            expectedSampleIntensityValuesCount[5] = 2;
            expectedSampleIntensityValuesCount[6] = 2;
            expectedSampleIntensityValuesCount[7] = 0;

            imputationProcess.CalculateNumberAndSumOfIntensityValuesOfSample(sampleprotein2,
                                                                             outputSampleAllIntensityValuesSum, sampleFileNames, outputSampleIntensityValuesCount);

            CollectionAssert.AreEqual(expectedSampleIntensityValuesCount, outputSampleIntensityValuesCount);
        }
        public void TestCalculateSampleStandardDeviationNumerator()
        {
            List <string> sampleFileNames = new List <string>();

            sampleFileNames.Add("Intensity_B02_06_161103_A1_HCD_OT_4ul");
            sampleFileNames.Add("Intensity_B02_07_161103_A2_HCD_OT_4ul");
            sampleFileNames.Add("Intensity_B02_16_161103_A3_HCD_OT_4ul");
            sampleFileNames.Add("Intensity_B02_17_161103_A4_HCD_OT_4ul");
            sampleFileNames.Add("Intensity_B02_24_161103_C1_HCD_OT_4ul");
            sampleFileNames.Add("Intensity_B02_09_161103_C2_HCD_OT_4ul");
            sampleFileNames.Add("Intensity_B02_14_161103_C3_HCD_OT_4ul");
            sampleFileNames.Add("Intensity_B02_19_161103_C4_HCD_OT_4ul");

            ProteinRowInfo sampleprotein1 = new ProteinRowInfo();

            sampleprotein1.ProteinID = "A0A023KES1";
            sampleprotein1.SamplesIntensityData["Intensity_B02_06_161103_A1_HCD_OT_4ul"] = 0;
            sampleprotein1.SamplesIntensityData["Intensity_B02_07_161103_A2_HCD_OT_4ul"] = 22.729;
            sampleprotein1.SamplesIntensityData["Intensity_B02_16_161103_A3_HCD_OT_4ul"] = 22.347;
            sampleprotein1.SamplesIntensityData["Intensity_B02_17_161103_A4_HCD_OT_4ul"] = 22.397;
            sampleprotein1.SamplesIntensityData["Intensity_B02_24_161103_C1_HCD_OT_4ul"] = 0;
            sampleprotein1.SamplesIntensityData["Intensity_B02_09_161103_C2_HCD_OT_4ul"] = 23.180;
            sampleprotein1.SamplesIntensityData["Intensity_B02_14_161103_C3_HCD_OT_4ul"] = 23.293;
            sampleprotein1.SamplesIntensityData["Intensity_B02_19_161103_C4_HCD_OT_4ul"] = 0;

            ProteinRowInfo sampleprotein2 = new ProteinRowInfo();

            sampleprotein2.ProteinID = "A0A024R4E5";
            sampleprotein2.SamplesIntensityData["Intensity_B02_06_161103_A1_HCD_OT_4ul"] = 0;
            sampleprotein2.SamplesIntensityData["Intensity_B02_07_161103_A2_HCD_OT_4ul"] = 25.535;
            sampleprotein2.SamplesIntensityData["Intensity_B02_16_161103_A3_HCD_OT_4ul"] = 0;
            sampleprotein2.SamplesIntensityData["Intensity_B02_17_161103_A4_HCD_OT_4ul"] = 0;
            sampleprotein2.SamplesIntensityData["Intensity_B02_24_161103_C1_HCD_OT_4ul"] = 25.370;
            sampleprotein2.SamplesIntensityData["Intensity_B02_09_161103_C2_HCD_OT_4ul"] = 24;
            sampleprotein2.SamplesIntensityData["Intensity_B02_14_161103_C3_HCD_OT_4ul"] = 25.359;
            sampleprotein2.SamplesIntensityData["Intensity_B02_19_161103_C4_HCD_OT_4ul"] = 0;

            double[] samplesMeanIntensityValue = new double[8];
            samplesMeanIntensityValue[0] = 0;
            samplesMeanIntensityValue[1] = (22.729 + 25.535) / 2;
            samplesMeanIntensityValue[2] = 22.347 / 2;
            samplesMeanIntensityValue[3] = 22.397 / 2;
            samplesMeanIntensityValue[4] = 25.370 / 2;
            samplesMeanIntensityValue[5] = (23.180 + 24) / 2;
            samplesMeanIntensityValue[6] = (23.293 + 25.359) / 2;
            samplesMeanIntensityValue[7] = 0;

            double[] expectedSamplesStandardDeviationNumerators = new double[8];
            expectedSamplesStandardDeviationNumerators[0] = 0;
            expectedSamplesStandardDeviationNumerators[1] = Math.Pow(22.729 - samplesMeanIntensityValue[1], 2);
            expectedSamplesStandardDeviationNumerators[2] = Math.Pow(22.347 - samplesMeanIntensityValue[2], 2);
            expectedSamplesStandardDeviationNumerators[3] = Math.Pow(22.397 - samplesMeanIntensityValue[3], 2);
            expectedSamplesStandardDeviationNumerators[4] = 0;
            expectedSamplesStandardDeviationNumerators[5] = Math.Pow(23.180 - samplesMeanIntensityValue[5], 2);
            expectedSamplesStandardDeviationNumerators[6] = Math.Pow(23.293 - samplesMeanIntensityValue[6], 2);
            expectedSamplesStandardDeviationNumerators[7] = 0;

            double[]          outputSamplesStandardDeviationNumerators = new double[8];
            ImputationProcess imputationProcess = new ImputationProcess();

            imputationProcess.CalculateSampleStandardDeviationNumerator(sampleprotein1, outputSamplesStandardDeviationNumerators,
                                                                        sampleFileNames, samplesMeanIntensityValue);
            CollectionAssert.AreEqual(expectedSamplesStandardDeviationNumerators, outputSamplesStandardDeviationNumerators);

            expectedSamplesStandardDeviationNumerators[0] = 0;
            expectedSamplesStandardDeviationNumerators[1] = Math.Pow(22.729 - samplesMeanIntensityValue[1], 2)
                                                            + Math.Pow(25.535 - samplesMeanIntensityValue[1], 2);
            expectedSamplesStandardDeviationNumerators[2] = Math.Pow(22.347 - samplesMeanIntensityValue[2], 2);
            expectedSamplesStandardDeviationNumerators[3] = Math.Pow(22.397 - samplesMeanIntensityValue[3], 2);
            expectedSamplesStandardDeviationNumerators[4] = Math.Pow(25.370 - samplesMeanIntensityValue[4], 2);
            expectedSamplesStandardDeviationNumerators[5] = Math.Pow(23.180 - samplesMeanIntensityValue[5], 2)
                                                            + Math.Pow(24 - samplesMeanIntensityValue[5], 2);
            expectedSamplesStandardDeviationNumerators[6] = Math.Pow(23.293 - samplesMeanIntensityValue[6], 2)
                                                            + Math.Pow(25.359 - samplesMeanIntensityValue[6], 2);
            expectedSamplesStandardDeviationNumerators[7] = 0;

            imputationProcess.CalculateSampleStandardDeviationNumerator(sampleprotein2, outputSamplesStandardDeviationNumerators,
                                                                        sampleFileNames, samplesMeanIntensityValue);
            CollectionAssert.AreEqual(expectedSamplesStandardDeviationNumerators, outputSamplesStandardDeviationNumerators);
        }