public NASARTI_original(RadiationSchema rs)
            {
                amorphous_partile_tracks = new MainForm.Particle[rs.nBeams];
                SimpleRNG.SetSeedFromSystemTime();     //  setting seed from computer time
                for (int nb = 0; nb < rs.nBeams; nb++) // iterate over all beams
                {
                    amorphous_partile_tracks[nb] = new MainForm.Particle(rs.pt[nb])
                    {
                        track_struct = new MainForm.Particle.Tracks()
                    };
                    amorphous_partile_tracks[nb].track_struct.distance = new List <double>();
                    amorphous_partile_tracks[nb].track_struct.dose     = new List <double>();
                    string   appPath = Application.StartupPath;
                    string   trackData;
                    string[] RDinput;
                    double   LET;
                    double   LET1;
                    double   fraction_of_energy_lost = 0.0;
                    if (rs.pt[nb] == MainForm.Radiation.p_type.photon)
                    {
                        Dconst += rs.D[nb];
                    }
                    else
                    {
                        if (File.Exists(appPath + @"\RD\RD.dat"))
                        {
                            trackData = File.ReadAllText(appPath + @"\RD\RD.dat");
                            RDinput   = trackData.Split((char[])null, StringSplitOptions.RemoveEmptyEntries);
                            // define particles with track properties
                            LET  = Convert.ToDouble(RDinput[0]);
                            LET1 = Convert.ToDouble(RDinput[1]);
                            fraction_of_energy_lost = Convert.ToDouble(RDinput[2]);
                            Dconst += rs.D[nb] * fraction_of_energy_lost;
                            for (int i = 0; i < RDinput.Length - 3; i++)
                            {
                                switch (i % 5)
                                {
                                case 0:
                                {
                                    amorphous_partile_tracks[nb].E = amorphous_partile_tracks[nb].track_struct.energy = Convert.ToInt32(Convert.ToDouble(RDinput[i + 3]));
                                }
                                break;

                                case 1:
                                {
                                    amorphous_partile_tracks[nb].A = amorphous_partile_tracks[nb].track_struct.mass = Convert.ToInt32(Convert.ToDouble(RDinput[i + 3]));
                                }
                                break;

                                case 2:
                                {
                                    amorphous_partile_tracks[nb].Z = amorphous_partile_tracks[nb].track_struct.charge = Convert.ToInt32(Convert.ToDouble(RDinput[i + 3]));
                                }
                                break;

                                case 3:
                                {
                                    amorphous_partile_tracks[nb].track_struct.distance.Add(Convert.ToDouble(RDinput[i + 3]));
                                }
                                break;

                                case 4:
                                {
                                    amorphous_partile_tracks[nb].track_struct.dose.Add(Convert.ToDouble(RDinput[i + 3]));
                                }
                                break;

                                default:
                                    break;
                                }
                            }
                            string source      = appPath + @"\RD\RD.dat";
                            string destination = appPath + @"\RD\RD_" + Convert.ToInt32(amorphous_partile_tracks[nb].track_struct.mass).ToString() + "_"
                                                 + Convert.ToInt32(amorphous_partile_tracks[nb].track_struct.charge).ToString() + "_"
                                                 + Convert.ToInt32(amorphous_partile_tracks[nb].track_struct.energy).ToString() + ".dat";
                            try
                            {
                                File.Copy(source, destination, true);
                                File.Delete(source);
                            }
                            catch
                            {
                                MessageBox.Show("File RD.dat with the amorphous track structure was not processed!");
                            }
                        }
                        else
                        {
                            try
                            {  // parse file name
                                trackData = File.ReadAllText(appPath + @"\RD\RD_" + Convert.ToInt32(amorphous_partile_tracks[nb].A).ToString() + "_"
                                                             + Convert.ToInt32(amorphous_partile_tracks[nb].Z).ToString() + "_" + Convert.ToInt32(amorphous_partile_tracks[nb].E).ToString() + ".dat");
                                RDinput = trackData.Split((char[])null, StringSplitOptions.RemoveEmptyEntries);
                                // define particles with track properties
                                LET  = Convert.ToDouble(RDinput[0]);
                                LET1 = Convert.ToDouble(RDinput[1]);
                                fraction_of_energy_lost = Convert.ToDouble(RDinput[2]);
                                Dconst += rs.D[nb] * fraction_of_energy_lost;
                                for (int i = 0; i < RDinput.Length - 3; i++)
                                {
                                    switch (i % 5)
                                    {
                                    case 0:
                                    {
                                        amorphous_partile_tracks[nb].E = amorphous_partile_tracks[nb].track_struct.energy = Convert.ToInt32(Convert.ToDouble(RDinput[i + 3]));
                                    }
                                    break;

                                    case 1:
                                    {
                                        amorphous_partile_tracks[nb].A = amorphous_partile_tracks[nb].track_struct.mass = Convert.ToInt32(Convert.ToDouble(RDinput[i + 3]));
                                    }
                                    break;

                                    case 2:
                                    {
                                        amorphous_partile_tracks[nb].Z = amorphous_partile_tracks[nb].track_struct.charge = Convert.ToInt32(Convert.ToDouble(RDinput[i + 3]));
                                    }
                                    break;

                                    case 3:
                                    {
                                        amorphous_partile_tracks[nb].track_struct.distance.Add(Convert.ToDouble(RDinput[i + 3]));
                                    }
                                    break;

                                    case 4:
                                    {
                                        amorphous_partile_tracks[nb].track_struct.dose.Add(Convert.ToDouble(RDinput[i + 3]));
                                    }
                                    break;

                                    default:
                                        break;
                                    }
                                }
                                amorphous_partile_tracks[nb].p_t                  = GetPtype(amorphous_partile_tracks[nb].A, amorphous_partile_tracks[nb].Z, amorphous_partile_tracks[nb].E);
                                amorphous_partile_tracks[nb].track_struct.X       = new List <int>();
                                amorphous_partile_tracks[nb].track_struct.Y       = new List <int>();
                                amorphous_partile_tracks[nb].lambda               = rs.D[nb] / (LET * 1.6021 / 10.0) * (Math.PI * (R + RadiationSchema.Pr) * (R + RadiationSchema.Pr));
                                amorphous_partile_tracks[nb].nParticles           = Convert.ToInt32(amorphous_partile_tracks[nb].lambda);
                                amorphous_partile_tracks[nb].track_struct.ntracks = SimpleRNG.GetPoisson(amorphous_partile_tracks[nb].lambda); //  Poisson dist. ntracks
                                Random random = new Random();
                                for (int i = 0; i < amorphous_partile_tracks[nb].track_struct.ntracks; i++)
                                {
                                    int cell_r = Convert.ToInt32(R / lattice_dim);
                                    amorphous_partile_tracks[nb].track_struct.X.Add(random.Next(0, 2 * cell_r) - cell_r);
                                    amorphous_partile_tracks[nb].track_struct.Y.Add(random.Next(0, 2 * cell_r) - cell_r);
                                }
                            }
                            catch
                            {
                                MessageBox.Show("Input file with the radial dose could not be found!");
                            }
                        }
                    }
                }
            }