Esempio n. 1
0
        // second instance method is for ITMS data
        public static QuantData QuantifyOneScan(SegmentedScanData segmentedScan, string labelingReagent)
        {
            (string[] Labels, double[] Masses)reporters = new LabelingReagents().Reagents[labelingReagent];
            QuantData quantData = new QuantData();

            int index;

            for (int i = 0; i < reporters.Masses.Length; i++)
            {
                double mass    = reporters.Masses[i];
                int[]  indices = segmentedScan.Positions.FindAllIndex1((x) =>
                {
                    if (Math.Abs(x - mass) / mass * 1e6 < 10)
                    {
                        return(true);
                    }
                    else
                    {
                        return(false);
                    }
                });
                if (indices.Length > 1)
                {
                    double[] massDiff = new double[indices.Length];
                    for (int ix = 0; ix < indices.Length; ix++)
                    {
                        massDiff[ix] = Math.Abs(segmentedScan.Positions[indices[ix]] - mass);
                    }

                    index = Array.Find(indices, (x) => { return(massDiff[x] == massDiff.Min()); });

                    quantData.Add(reporters.Labels[i], new ReporterIon(segmentedScan.Positions[index],
                                                                       segmentedScan.Intensities[index], massDiff[index] / mass * 1e6));
                }
                else
                {
                    if (indices.Length == 1)
                    {
                        index = indices[0];
                        var diff = Math.Abs(segmentedScan.Positions[index] - mass);
                        quantData.Add(reporters.Labels[i], new ReporterIon(segmentedScan.Positions[index],
                                                                           segmentedScan.Intensities[index], diff / mass * 1e6));
                    }
                    else
                    {
                        quantData.Add(reporters.Labels[i], new ReporterIon(0, 0, 0));
                    }
                }
            }
            return(quantData);
        }
Esempio n. 2
0
        // first instance method is for FTMS data
        static public QuantData QuantifyOneScan(CentroidStreamData centroidStream, string labelingReagent)
        {
            (string[] Labels, double[] Masses)reporters = new LabelingReagents().Reagents[labelingReagent];
            QuantData quantData = new QuantData();
            int       index;
            double    mass;

            double[] massDiff;

            for (int i = 0; i < reporters.Masses.Length; i++)
            {
                mass = reporters.Masses[i];
                int[] indices = centroidStream.Masses.FindAllIndex1((x) =>
                {
                    if (Math.Abs(x - mass) / mass * 1e6 < 10)
                    {
                        return(true);
                    }
                    else
                    {
                        return(false);
                    }
                });
                if (indices.Length > 1)
                {
                    massDiff = new double[indices.Length];
                    for (int ix = 0; ix < indices.Length; ix++)
                    {
                        massDiff[ix] = Math.Abs(centroidStream.Masses[indices[ix]] - mass);
                    }

                    index = -1;
                    for (int j = 0; j < indices.Length; j++)
                    {
                        if (massDiff[j] == massDiff.Min())
                        {
                            index = indices[j];
                            break;
                        }
                        else
                        {
                            continue;
                        }
                    }
                    //index = Array.Find(indices, x => centroidStream.Masses[indices[x]] - mass == massDiff.Min());

                    if (index != -1)
                    {
                        quantData.Add(reporters.Labels[i], new ReporterIon(centroidStream.Masses[index], centroidStream.Intensities[index],
                                                                           centroidStream.Noises[index], centroidStream.Resolutions[index],
                                                                           centroidStream.Baselines[index], centroidStream.SignalToNoise[index],
                                                                           massDiff.Min() / mass * 1e6));
                    }
                    else
                    {
                        quantData.Add(reporters.Labels[i], new ReporterIon(0, 0, 0, 0, 0, 0, 0));
                    }
                }
                else
                {
                    if (indices.Length == 1)
                    {
                        index = indices.Single();
                        var diff = Math.Abs(centroidStream.Masses[index] - mass);
                        quantData.Add(reporters.Labels[i], new ReporterIon(centroidStream.Masses[index], centroidStream.Intensities[index],
                                                                           centroidStream.Noises[index], centroidStream.Resolutions[index],
                                                                           centroidStream.Baselines[index], centroidStream.SignalToNoise[index],
                                                                           diff / mass * 1e6));
                    }
                    else
                    {
                        quantData.Add(reporters.Labels[i], new ReporterIon(0, 0, 0, 0, 0, 0, 0));
                    }
                }
            }

            return(quantData);
        }