コード例 #1
0
        public static double CalcAverageMz(Peak peak, int[] indx, double[,] mzCalibrationPar,
                                           double[,] intensityCalibrationPar, double absoluteCalibration)
        {
            if (double.IsNaN(absoluteCalibration))
            {
                absoluteCalibration = 0;
            }
            double norm1 = 0;
            double m     = 0;

            if (mzCalibrationPar == null)
            {
                foreach (int index0 in indx)
                {
                    norm1 += peak.origIntensity[index0];
                    double mz = peak.centerMz[index0];
                    m += peak.origIntensity[index0] * mz;
                }
                m /= norm1;
                return(m);
            }
            foreach (int index0 in indx)
            {
                norm1 += peak.origIntensity[index0];
                double mz = peak.centerMz[index0] * (1 + 1e-6 * NumericalRecipes.RelativeCorrection(peak.centerMz[index0], mzCalibrationPar,
                                                                                                    intensityCalibrationPar,
                                                                                                    peak.origIntensity[index0],
                                                                                                    peak.massRange[index0]) +
                                                     1e-6 * absoluteCalibration);
                m += peak.origIntensity[index0] * mz;
            }
            m /= norm1;
            return(m);
        }
コード例 #2
0
ファイル: DQMoM.cs プロジェクト: danieleRocha/Momentos
 public DQMoM(int numeroDePassos, double passo, double passoInicial, int numeroDePontos,
     Integral.Funcao funcao, double limiteMinimo, double limiteMaximo, TermoFonteDQMoM termoFonteDQMoM)
     : base(numeroDePassos, passo, passoInicial, numeroDePontos, funcao,
     limiteMinimo, limiteMaximo)
 {
     this.termoFonteDQMoM = termoFonteDQMoM;
     numericalRecipes = new NumericalRecipes();
     FuncaoDeIntegracao funcaoDeIntegracao = new Funcao(numericalRecipes, numeroDePontos, MetodoDeCoeficientes, termoFonteDQMoM, DecorarAbscissas,
         DecorarPesos, funcaoDeltaAbscissas);
     rungeKutta4Ordem = new RungeKutta4Ordem(passo, funcaoDeIntegracao);
 }
コード例 #3
0
        public double MaxQuantScore()
        {
            //Test which is better between without and with neutral loss ... keep best score
            double lnp = Math.Log(0.06);
            double lnq = Math.Log(1.0 - 0.06);
            int    n   = TotalTheoreticalProducts;
            int    k   = MatchingProducts;

            n = Math.Max(n, k);
            double s = -k * lnp - (n - k) * lnq -
                       NumericalRecipes.Factln(n) + NumericalRecipes.Factln(k) + NumericalRecipes.Factln(n - k);

            s = 10.0 * s / Math.Log(10);
            return(s);
        }
コード例 #4
0
        public static double Score(double[] masses, MsmsPeakAnnotation[] descriptions, double[] specMasses, float[] specIntensities,
                                   double tol, string tolUnit, out MsmsPeakAnnotation[] description, out float[] intensities,
                                   out float[] massDiffs,
                                   double lnp, double lnq)
        {
            int n;
            int k =
                CountMatches(masses, descriptions, specMasses, specIntensities, tol, tolUnit, out description, out intensities, out massDiffs, out n);

            n = Math.Max(n, k);
            double s = -k * lnp - (n - k) * lnq -
                       NumericalRecipes.Factln(n) + NumericalRecipes.Factln(k) + NumericalRecipes.Factln(n - k);

            return(10.0 * s / NumUtil.log10);
        }
コード例 #5
0
        private static double EstimateN(double[] x, double[] y, int ic)
        {
            double dm = x[ic];

            for (int i = 0; i < y.Length; i++)
            {
                x[i] -= dm;
                y[i]  = Math.Log(y[i]);
            }
            //int im = ic - 1;
            //int ip = ic + 1;
            //double a2 = (y[im] * (x[ip] - x[ic]) + y[ic] * (x[im] - x[ip]) + y[ip] * (x[ic] - x[im])) /
            //            (x[im] * x[im] * (x[ip] - x[ic]) + x[ic] * x[ic] * (x[im] - x[ip]) + x[ip] * x[ip] * (x[ic] - x[im]));
            //double a1 = (y[ic] - y[im] - a2 * (x[ic] * x[ic] - x[im] * x[im])) / (x[ic] - x[im]);
            //double a0 = y[im] - a1 * x[im] - a2 * x[im] * x[im];
            //double[] a = new double[] {a0, a1, a2};
            double[] a = new double[3];
            NumericalRecipes.LinFit2(x, y, a, Qwert);
            return(dm - a[1] / a[2] * 0.5);
        }
コード例 #6
0
ファイル: AlgoritmoPD.cs プロジェクト: danieleRocha/Momentos
        private void ObterAutovaloresEAutovetores()
        {
            int dimensaoDaMatriz = jacobi.GetUpperBound(0) + 1;

            autovalores = new double[dimensaoDaMatriz];
            autovetores = new double[dimensaoDaMatriz, dimensaoDaMatriz];

            NumericalRecipes auto = new NumericalRecipes();

            if (!auto.CalcularAutovaloresEAutovetores(jacobi, dimensaoDaMatriz, autovalores, autovetores))
                throw new Exception("Erro: O número de iterações máximo foi alcançado durante os cálculos de autovalores e autovetores");
        }
コード例 #7
0
        private static void TestImpl(double[] x, double mean, out double stat, out double bothtails,
                                     out double lefttail, out double righttail)
        {
            int n = x.Length;
            int i;

            stat = 0;

            if (n <= 1)
            {
                bothtails = 1.0;
                lefttail  = 1.0;
                righttail = 1.0;
                return;
            }

            //
            // Mean
            //
            double xmean = 0;

            for (i = 0; i <= n - 1; i++)
            {
                xmean = xmean + x[i];
            }
            xmean = xmean / n;

            //
            // Variance (using corrected two-pass algorithm)
            //
            double xstddev = 0;

            if (n != 1)
            {
                double v1 = 0;
                for (i = 0; i <= n - 1; i++)
                {
                    v1 = v1 + (x[i] - xmean) * (x[i] - xmean);
                }
                double v2 = 0;
                for (i = 0; i <= n - 1; i++)
                {
                    v2 = v2 + (x[i] - xmean);
                }
                v2 = v2 * v2 / n;
                double xvariance = (v1 - v2) / (n - 1);
                if (xvariance < 0)
                {
                    xvariance = 0;
                }
                xstddev = Math.Sqrt(xvariance);
            }
            if (xstddev == 0)
            {
                bothtails = 1.0;
                lefttail  = 1.0;
                righttail = 1.0;
                return;
            }
            stat = (xmean - mean) / (xstddev / Math.Sqrt(n));
            double df = n - 1;

            try {
                double p;
                if (stat > 0)
                {
                    p = 1 - 0.5 * NumericalRecipes.Betai(df / 2, 0.5, df / (df + stat * stat));
                }
                else
                {
                    p = 0.5 * NumericalRecipes.Betai(df / 2, 0.5, df / (df + stat * stat));
                }
                bothtails = 2 * Math.Min(p, 1 - p);
                lefttail  = p;
                righttail = 1 - p;
            } catch (Exception) {
                bothtails = 1.0;
                lefttail  = 1.0;
                righttail = 1.0;
                return;
            }
        }
コード例 #8
0
ファイル: DQMoM.cs プロジェクト: danieleRocha/Momentos
            public Funcao(NumericalRecipes numericalRecipes, int numeroDePontos, MetodoCoeficientesDosMomentos metodoCoeficientesDosMomentos, TermoFonteDQMoM termoFonteDQMoM, DecoradorDeAbscissas decorarAbscissas, DecoradorDePesos decorarPesos, Integral.Funcao funcaodeltaAbscissas)
            {
                this.numeroDePontos = numeroDePontos;
                this.termoFonteDQMoM = termoFonteDQMoM;
                this.decorarAbscissas = decorarAbscissas;
                this.decorarPesos = decorarPesos;
                this.funcaodeltaAbscissas = funcaodeltaAbscissas;
                this.metodoCoeficientesDosMomentos = metodoCoeficientesDosMomentos;
                this.numericalRecipes = numericalRecipes;

                SetVetores();
            }
コード例 #9
0
ファイル: DQMoM.cs プロジェクト: danieleRocha/Momentos
        private void IntegrarDasslc(double[] pesos0, double[] abscissas0, double[] pesosEAbscissas0,List<double[]> momentos)
        {
            EscreverMensagem("Início dos cálculos usando Dasslc\n");

            EscreverMensagem("Tempo    Momentos   Pesos    Abscissas\n");

            for (int i = 0; i < Pesos[0].Length; i++)
            {
                EscreverMensagem(Passos[0] + ";  " + momentos[0][i] + ";  " + Pesos[0][i] + " ; " + Abscissas[0][i]);
            }

            for (int i = Pesos[0].Length; i < momentos[0].Length; i++)
            {
                EscreverMensagem(Passos[0] + " ; " + momentos[0][i]);
            }

            int indiceTempo = 0;
            var sistema = ObterSistemaLinear(numeroDePontos, MetodoDeCoeficientes, pesos0, abscissas0, funcaoDeltaAbscissas, termoFonteDQMoM, DecorarPesos, DecorarAbscissas, indiceTempo);

            double[] deltaPesosEAbscissas0 = new double[pesosEAbscissas0.Length];

            //Resolve o sistema para t = t0
            NumericalRecipes numericalRecipes = new NumericalRecipes();
            bool calculou = numericalRecipes.CalcularSistemaLinear(sistema.MatrizDeCoeficientes, sistema.Dimensao, sistema.Resposta, deltaPesosEAbscissas0);

            if(!calculou) throw new Exception("Erro no cálculo do sistema linear. Matriz singular.");

            List<KeyValuePair<double, double[]>> pesosEAbscissas;

            Dasslc dasslc = new Dasslc(pesosEAbscissas0.Length, passoInicial, passo, numeroDePassos, pesosEAbscissas0, deltaPesosEAbscissas0);

            if (ToleranciaRelativaDasslc > 0) dasslc.ToleranciaRelativa = ToleranciaRelativaDasslc;
            if (ToleranciaAbsolutaDasslc > 0) dasslc.ToleranciaAbsoluta = ToleranciaAbsolutaDasslc;
            if (PassoInicialDasslc > 0) dasslc.PassoInicial = PassoInicialDasslc;
            if (PassoMaximoDasslc > 0) dasslc.PassoMaximo = PassoMaximoDasslc;
            int codigoErro;
            dasslc.delegateMensagens = DelegateMensagens;
            if(!dasslc.Calcular(DelegateSistemaLinear, out pesosEAbscissas,out codigoErro))
                throw new Exception("Erro durante a integração temporal, pelo cálculo da DasslC. Código = "+codigoErro);

            for (int j = 1; j < pesosEAbscissas.Count; j++)
            {
                double[] pesos;
                double[] abscissas;
                SepararPesosEAbscissas(pesosEAbscissas[j].Value, out pesos, out abscissas);

                double[] m = new double[numeroDePontos];

                for (int i = 0; i < m.Length; i++)
                {
                    m[i] = CalcularMomento(MetodoDeCoeficientes, pesos, abscissas, funcaoDeltaAbscissas, i);
                }

                momentos.Add(m);
                Pesos.Add(pesos);
                Abscissas.Add(abscissas);
                Tempo.Add(pesosEAbscissas[j].Key);
            }

            for (int t = 1; t < (numeroDePassos); t++)
            {
                Passos[t] = Passos[t - 1] + passo;
            }
        }
コード例 #10
0
ファイル: DQMoM.cs プロジェクト: danieleRocha/Momentos
 public new void Dispose()
 {
     numericalRecipes = null;
     rungeKutta4Ordem = null;
     base.Dispose();
 }