Beispiel #1
0
        private void bgWorker_DoWork(object sender, DoWorkEventArgs e)
        {
            object[] objects  = (object[])e.Argument;
            bool     hasWalls = (bool)objects[0];
            string   fileName = (string)objects[1] + "/" + (string)objects[2] + ".lammpstrj";
            string   format   = (string)objects[3];

            double[] shifts     = (double[])objects[4];
            bool     toTrim     = (bool)objects[5];
            double   percentage = (double)objects[6] / 100.0;

            string[] files = (string[])objects[7];
            for (int i = 0; i < files.Length; i++)
            {
                double[] sizes = new double[3];

                List <double[]> data;
                if (format == "xyzr")
                {
                    data     = FileWorker.LoadXyzrLines(files[i]);
                    sizes[0] = Math.Abs(data[data.Count - 1][0] - data[data.Count - 8][0]);
                    sizes[1] = Math.Abs(data[data.Count - 1][1] - data[data.Count - 8][1]);
                    sizes[2] = Math.Abs(data[data.Count - 1][2]);
                }
                else
                {
                    int snapnum = 0;
                    data = FileWorker.LoadLammpstrjLines(files[i], out snapnum, out sizes);
                }
                double[] centerPoint = MolData.GetCenterPoint(sizes, data);

                var system = MolData.ShiftAll(hasWalls, 0, false, 3, sizes, shifts, centerPoint, data);
                if (toTrim)
                {
                    system = MolData.ReduceSystem(system, percentage);
                }

                FileWorker.SaveLammpstrj(true, fileName, i + 1, sizes, 3, system);
                int filesCount = (int)((double)files.Length / 100.0);
                if (filesCount == 0)
                {
                    filesCount++;
                }
                if (i % filesCount == 0)
                {
                    if (((BackgroundWorker)sender).CancellationPending)
                    {
                        e.Cancel = true;
                        break;
                    }
                    ((BackgroundWorker)sender).ReportProgress((int)(100.0 * (double)i / (double)files.Length));
                }
            }
        }