예제 #1
0
        public static Linea extraer(string[] fid, int lineaInicial, int lineaFinal)
        {
            Linea linea = new Linea()
            {
                puntos = new List <PuntoDosis>(),
            };

            linea.nombre = fid[lineaInicial];
            for (int i = lineaInicial + 2; i < lineaFinal + 1; i++)
            {
                string     aux    = fid[i];
                string[]   partes = aux.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
                PuntoDosis punto  = new PuntoDosis()
                {
                    posicion = new Vector()
                    {
                        x = Convert.ToDouble(partes[0]),
                        y = Convert.ToDouble(partes[1]),
                        z = Convert.ToDouble(partes[2]),
                    },
                    dosisTPS = Convert.ToDouble(partes[3]),
                    nombre   = linea.nombre + "_" + (i - lineaInicial - 1).ToString(),
                };
                linea.puntos.Add(punto);
            }
            return(linea);
        }
예제 #2
0
        public static int extraerPuntosYLineas(string[] fid, List <PuntoDosis> puntos, List <Linea> lineas, int lineaInicio = 0)
        {
            int inicio = buscarSubStringEnFid(fid, "Reference point", lineaInicio);

            inicio = buscarSubStringEnFid(fid, "x [cm] y [cm] z [cm] Total dose [cGy]", inicio);
            int fin = Array.IndexOf(fid, "", inicio);

            while (inicio < fin)
            {
                inicio++;
                string   aux    = fid[inicio];
                string[] partes = aux.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
                if (partes.Length == 5)
                {
                    PuntoDosis punto = PuntoDosis.extraer(partes);
                    puntos.Add(punto);
                }
                else if (partes.Length == 0)
                {
                    inicio = fin;
                }
                else
                {
                    int finLinea = buscarSubStringEnFid(fid, "x [cm] y [cm] z [cm] Total dose [cGy]", inicio + 2) - 2;
                    if (finLinea == -2)
                    {
                        finLinea = fin - 1;
                    }
                    Linea linea = Linea.extraer(fid, inicio, finLinea);
                    lineas.Add(linea);
                    inicio = finLinea;
                }
            }
            return(inicio);
        }
예제 #3
0
        public static double tasaDosisPuntoFuente(Aplicador ap, Fuente f, PuntoDosis p, TablaHyT tabla)
        {
            double H = paramH(ap, f, p);
            double T = paramT(ap, f, p);

            return(tasaDosisHT(H, T, tabla));
        }
예제 #4
0
        public static void dosisPunto(Plan plan, PuntoDosis p, TablaHyT tabla)
        {
            double dosisSinRedondear = 0;

            foreach (Aplicador ap in plan.aplicadores)
            {
                foreach (Fuente f in ap.fuentes)
                {
                    dosisSinRedondear += dosisPuntoFuente(ap, f, p, tabla);
                }
            }
            p.dosisCalculo    = Math.Round(dosisSinRedondear, 1);
            p.diferenciaDosis = Math.Round((p.dosisCalculo - p.dosisTPS) / p.dosisTPS * 100, 1);
        }
예제 #5
0
        public static PuntoDosis extraer(string[] partes)
        {
            PuntoDosis punto = new PuntoDosis()
            {
                nombre   = partes[0],
                posicion = new Vector()
                {
                    x = Convert.ToDouble(partes[1]),
                    y = Convert.ToDouble(partes[2]),
                    z = Convert.ToDouble(partes[3]),
                },
                dosisTPS = Convert.ToDouble(partes[4]),
            };

            return(punto);
        }
예제 #6
0
 public static double paramH(Aplicador ap, Fuente f, PuntoDosis p)
 {
     return(Math.Sqrt(Math.Pow(distanciaFuentePunto(f, p), 2) - Math.Pow(paramT(ap, f, p), 2)));
 }
예제 #7
0
 public static double paramT(Aplicador ap, Fuente f, PuntoDosis p)
 {
     return(Vector.productoEscalar(vectorDistanciaFuentePunto(f, p), directorFuente(ap, f)));
 }
예제 #8
0
 public static double dosisPuntoFuente(Aplicador ap, Fuente f, PuntoDosis p, TablaHyT tabla)
 {
     return(tasaDosisPuntoFuente(ap, f, p, tabla) * f.tiempo * tabla.factor);
 }
예제 #9
0
 public static double distanciaFuentePunto(Fuente f, PuntoDosis p)
 {
     return(Vector.modulo(vectorDistanciaFuentePunto(f, p)));
 }
예제 #10
0
 public static Vector vectorDistanciaFuentePunto(Fuente f, PuntoDosis p)
 {
     return(Vector.resta(p.posicion, f.posicion));
 }