private static double GetUncalibratedSilacMass(SilacCluster sc, SilacType type, IsotopeCluster[] isotopeClusters,
                                                double[] centerMz, float[] intensities)
 {
     return
         (GetUncalibratedFullIsotopePatternMassEstimate(sc.GetIsotopeClusterIndices(type), sc.GetIsotopePatternStarts(type),
                                                        sc.GetMassDiffs(type), isotopeClusters, centerMz, intensities));
 }
 public SilacMatchEvidence(int silacId, int rawFileIndex, SilacCluster silacCluster,
                           int charge, double intensity0, double intensity1,
                           double intensity2, double calibRT, MascotPeptide peptide)
     :
     base(silacId, rawFileIndex, silacCluster, charge, intensity0,
          intensity1, intensity2, calibRT)
 {
     massErrPpm = (silacCluster.Mass - peptide.Mass) / peptide.Mass * 1e6;
 }
        private static double GetCalibratedSilacMassStat(SilacCluster sc, double[,] mzCalibrationPar,
                                                         double[,] intensityCalibrationPar,
                                                         SilacType type, IsotopeCluster[] isotopeCluster, IPeakList peakList,
                                                         float[] intensities)
        {
            int dummy;

            return
                (GetFullIsotopePatternMassEstimateNoBootstrapStat(sc.GetIsotopeClusterIndices(type), sc.GetIsotopePatternStarts(type),
                                                                  sc.GetMassDiffs(type), mzCalibrationPar, intensityCalibrationPar,
                                                                  true,
                                                                  out dummy, isotopeCluster, peakList, intensities));
        }
        public static double[] CalcSilacClusterProfile(SilacCluster cl, out int minIndex, SilacType type,
                                                       IsotopeCluster[] isotopeClusters, IPeakList peakList,
                                                       float[] intensities)
        {
            int[] m = cl.GetIsotopeClusterIndices(type);
            int   n = m.Length;

            if (n == 1)
            {
                return(T03SilacAssembly.CalcIsotopeClusterProfile(isotopeClusters[m[0]], out minIndex, peakList));
            }
            double[][] profiles = new double[n][];
            int[]      mins     = new int[n];
            int[]      ends     = new int[n];
            double[]   intens   = new double[n];
            for (int i = 0; i < n; i++)
            {
                if (m[i] == -1)
                {
                    continue;
                }
                IsotopeCluster ic = isotopeClusters[m[i]];
                profiles[i] = T03SilacAssembly.CalcIsotopeClusterProfile(ic, out mins[i], peakList);
                intens[i]   = T03SilacAssembly.GetIsotopeClusterIntensity(ic, intensities);
                ends[i]     = mins[i] + profiles[i].Length;
            }
            minIndex = ArrayUtil.Min(mins);
            int maxEnd = ArrayUtil.Max(ends);
            int len    = maxEnd - minIndex;

            double[] result = new double[len];
            double   norm   = 0;

            for (int i = 0; i < n; i++)
            {
                if (m[i] == -1)
                {
                    continue;
                }
                norm += intens[i];
                for (int j = 0; j < profiles[i].Length; j++)
                {
                    result[j + mins[i] - minIndex] += profiles[i][j] * intens[i];
                }
            }
            for (int i = 0; i < len; i++)
            {
                result[i] /= norm;
            }
            return(result);
        }
        public static int[][] FindChargePairs(int nsilac, SilacType silacType, double matchPpm,
                                              double silacTimeCorrelationThreshold, SilacCluster[] silacClusters,
                                              IsotopeCluster[] isotopeClusters, IPeakList peakList, float[] intensities,
                                              double[] centerMz)
        {
            double[] m = new double[nsilac];
            for (int i = 0; i < m.Length; i++)
            {
                SilacCluster si = silacClusters[i];
                m[i] = GetUncalibratedSilacMass(si, silacType, isotopeClusters, centerMz, intensities);
            }
            int[] o = ArrayUtil.Order(m);
            m = ArrayUtil.SubArray(m, o);
            List <int[]> pairs = new List <int[]>();

            for (int i = 0; i < m.Length; i++)
            {
                SilacCluster si      = silacClusters[o[i]];
                int          chargei = isotopeClusters[si.IsotopeClusterindex1].Charge;
                double       m1      = m[i];
                int          ind1    = ArrayUtil.CeilIndex(m, m1 - matchPpm * 1e-6 * m1);
                for (int j = ind1; j < i; j++)
                {
                    SilacCluster sj      = silacClusters[o[j]];
                    int          chargej = isotopeClusters[sj.IsotopeClusterindex1].Charge;
                    if (chargei == chargej)
                    {
                        continue;
                    }
                    int      mini;
                    double[] pi = CalcSilacClusterProfile(si, out mini, silacType, isotopeClusters, peakList,
                                                          intensities);
                    int      minj;
                    double[] pj = CalcSilacClusterProfile(sj, out minj, silacType, isotopeClusters, peakList,
                                                          intensities);
                    if (T03SilacAssembly.Correlate(pi, mini, pj, minj) > silacTimeCorrelationThreshold)
                    {
                        pairs.Add(new int[] { o[i], o[j] });
                    }
                }
            }
            return(pairs.ToArray());
        }
示例#6
0
 protected SilacEvidence(int silacId, int rawFileIndex, SilacCluster silacCluster, int charge,
                         double intensity0, double intensity1, double intensity2, double calibRT)
     : base(rawFileIndex, (float)silacCluster.ElutionTime, (float)calibRT, charge)
 {
     this.silacId         = silacId;
     ratio10              = (float)silacCluster.Ratio10;
     ratio20              = (float)silacCluster.Ratio20;
     ratio21              = (float)silacCluster.Ratio21;
     normalizedRatio10    = (float)silacCluster.NormalizedRatio10;
     normalizedRatio20    = (float)silacCluster.NormalizedRatio20;
     normalizedRatio21    = (float)silacCluster.NormalizedRatio21;
     ratioSignificanceA10 = (float)Math.Log(silacCluster.RatioSignificanceA10);
     ratioSignificanceA20 = (float)Math.Log(silacCluster.RatioSignificanceA20);
     ratioSignificanceA21 = (float)Math.Log(silacCluster.RatioSignificanceA21);
     ratioSignificanceB10 = (float)Math.Log(silacCluster.RatioSignificanceB10);
     ratioSignificanceB20 = (float)Math.Log(silacCluster.RatioSignificanceB20);
     ratioSignificanceB21 = (float)Math.Log(silacCluster.RatioSignificanceB21);
     this.intensity0      = (float)intensity0;
     this.intensity1      = (float)intensity1;
     this.intensity2      = (float)intensity2;
     calibratedMass       = silacCluster.Mass;
     uncalibratedMass     = silacCluster.UncalibratedMass;
 }
        public static void RecalibrateImpl(SilacType silacType, int nranges, int[] iranges, int[][] chargePairs,
                                           SilacCluster[] silacClusters, ref double[,] mzCalibrationParams,
                                           ref double[,] intensityCalibrationParams, double massErrorNormalization,
                                           IsotopeCluster[] isotopeCluster, IPeakList peakList, float[] intensities)
        {
            double[] x   = new double[chargePairs.Length];
            double[] y   = new double[chargePairs.Length];
            double[] sig = new double[chargePairs.Length];
            for (int i = 0; i < chargePairs.Length; i++)
            {
                x[i] = i;
                int          ind1 = chargePairs[i][0];
                int          ind2 = chargePairs[i][1];
                SilacCluster sc1  = silacClusters[ind1];
                SilacCluster sc2  = silacClusters[ind2];
                sig[i] = Math.Sqrt(sc1.GetMassError(massErrorNormalization) * sc1.GetMassError(massErrorNormalization) +
                                   sc2.GetMassError(massErrorNormalization) * sc2.GetMassError(massErrorNormalization));
            }
            intensityCalibrationParams = new double[nranges, nparamsIntensityFit];
            double[,] icp = intensityCalibrationParams;
            Funcs2 f = delegate(double x1, double[] aa) {
                int ind  = (int)Math.Round(x1);
                int ind1 = chargePairs[ind][0];
                int ind2 = chargePairs[ind][1];
                double[,] mzAa = new double[nranges, nparamsMzFit];
                int c = 0;
                for (int j = 0; j < iranges.Length; j++)
                {
                    for (int i = 0; i < nparamsMzFit; i++)
                    {
                        mzAa[iranges[j], i] = aa[c++];
                    }
                }
                double y1 = GetCalibratedSilacMassStat(silacClusters[ind1], mzAa, icp, silacType, isotopeCluster, peakList,
                                                       intensities);
                double y2 = GetCalibratedSilacMassStat(silacClusters[ind2], mzAa, icp, silacType, isotopeCluster, peakList,
                                                       intensities);
                double yy = y1 - y2;
                return(yy);
            };
            double chisq;

            double[] a      = new double[nparamsMzFit * iranges.Length];
            int      county = 0;

            for (int j = 0; j < iranges.Length; j++)
            {
                for (int i = 0; i < nparamsMzFit; i++)
                {
                    a[county++] = startValsMzFit[i];
                }
            }
            NumUtil.FitNonlin(x, y, sig, a, out chisq, f);
            mzCalibrationParams = new double[nranges, nparamsMzFit];
            int s = 0;

            for (int j = 0; j < iranges.Length; j++)
            {
                for (int i = 0; i < nparamsMzFit; i++)
                {
                    mzCalibrationParams[iranges[j], i] = a[s++];
                }
            }
            double[,] mcp = mzCalibrationParams;
            f             = delegate(double x1, double[] aa) {
                int ind  = (int)Math.Round(x1);
                int ind1 = chargePairs[ind][0];
                int ind2 = chargePairs[ind][1];
                double[,] intensityAa = new double[nranges, nparamsIntensityFit];
                int c = 0;
                for (int j = 0; j < iranges.Length; j++)
                {
                    for (int i = 0; i < nparamsIntensityFit; i++)
                    {
                        intensityAa[iranges[j], i] = aa[c++];
                    }
                }
                double y1 = GetCalibratedSilacMassStat(silacClusters[ind1], mcp, intensityAa, silacType, isotopeCluster, peakList,
                                                       intensities);
                double y2 = GetCalibratedSilacMassStat(silacClusters[ind2], mcp, intensityAa, silacType, isotopeCluster, peakList,
                                                       intensities);
                double yy = y1 - y2;
                return(yy);
            };
            a = new double[nparamsIntensityFit * iranges.Length];
            NumUtil.FitNonlin(x, y, sig, a, out chisq, f);
            s = 0;
            for (int j = 0; j < iranges.Length; j++)
            {
                for (int i = 0; i < nparamsIntensityFit; i++)
                {
                    intensityCalibrationParams[iranges[j], i] = a[s++];
                }
            }
            icp = intensityCalibrationParams;
            f   = delegate(double x1, double[] aa) {
                int ind  = (int)Math.Round(x1);
                int ind1 = chargePairs[ind][0];
                int ind2 = chargePairs[ind][1];
                double[,] mzAa = new double[nranges, nparamsMzFit];
                int c = 0;
                for (int j = 0; j < iranges.Length; j++)
                {
                    for (int i = 0; i < nparamsMzFit; i++)
                    {
                        mzAa[iranges[j], i] = aa[c++];
                    }
                }
                double y1 = GetCalibratedSilacMassStat(silacClusters[ind1], mzAa, icp, silacType, isotopeCluster, peakList,
                                                       intensities);
                double y2 = GetCalibratedSilacMassStat(silacClusters[ind2], mzAa, icp, silacType, isotopeCluster, peakList,
                                                       intensities);
                double yy = y1 - y2;
                return(yy);
            };
            a      = new double[nparamsMzFit * iranges.Length];
            county = 0;
            for (int j = 0; j < iranges.Length; j++)
            {
                for (int i = 0; i < nparamsMzFit; i++)
                {
                    a[county++] = mzCalibrationParams[iranges[j], i];
                }
            }
            NumUtil.FitNonlin(x, y, sig, a, out chisq, f);
            s = 0;
            for (int j = 0; j < iranges.Length; j++)
            {
                for (int i = 0; i < nparamsMzFit; i++)
                {
                    mzCalibrationParams[iranges[j], i] = a[s++];
                }
            }
        }
 public SilacMassEvidence(int silacId, int fileIndex, SilacCluster silacCluster, int charge, double intensity0,
                          double intensity1, double intensity2, double rt)
     : base(silacId, fileIndex, silacCluster, charge, intensity0,
            intensity1, intensity2, rt)
 {
 }
 public SilacMsmsEvidence(int silacId, int rawFileIndex, SilacCluster silacCluster, int charge, double intensity0,
                          double intensity1, double intensity2, double calibRT)
     :
     base(silacId, rawFileIndex, silacCluster, charge, intensity0, intensity1, intensity2, calibRT)
 {
 }