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); }
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); }
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)); }
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); }
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); }
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))); }
public static double paramT(Aplicador ap, Fuente f, PuntoDosis p) { return(Vector.productoEscalar(vectorDistanciaFuentePunto(f, p), directorFuente(ap, f))); }
public static double dosisPuntoFuente(Aplicador ap, Fuente f, PuntoDosis p, TablaHyT tabla) { return(tasaDosisPuntoFuente(ap, f, p, tabla) * f.tiempo * tabla.factor); }
public static double distanciaFuentePunto(Fuente f, PuntoDosis p) { return(Vector.modulo(vectorDistanciaFuentePunto(f, p))); }
public static Vector vectorDistanciaFuentePunto(Fuente f, PuntoDosis p) { return(Vector.resta(p.posicion, f.posicion)); }