Ejemplo n.º 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));
                }
            }
        }
Ejemplo n.º 2
0
        private void bgWorkerCenter_DoWork(object sender, DoWorkEventArgs e)
        {
            object[] objects    = (object[])e.Argument;
            string   format     = (string)objects[0];
            int      centerType = (int)objects[1];

            string[] files = (string[])objects[2];

            bool withZCenter = true;

            if (centerType == 2)
            {
                withZCenter = false;
            }

            double[] sizes       = new double[3];
            double[] centerPoint = new double[3];

            for (int k = 0, len = files.Length; k < len; k++)
            {
                if (!bgWorkerCenter.CancellationPending)
                {
                    int snapnum = 0;
                    var file    = new List <double[]>();

                    readTableFile(format, files[k], out snapnum, out file, out sizes);

                    if (k == 0)
                    {
                        centerPoint = MolData.GetCenterPoint(sizes, file);
                    }


                    doAutoCenter(withZCenter, 5, sizes, centerPoint, file);

                    var strct = MolData.ShiftAll(false, 0, false, 3, sizes, new double[] { 0, 0, 0 }, centerPoint, file);

                    if (format == "xyzr")
                    {
                        FileWorker.Save_XYZ(files[k], true, sizes, strct);
                    }
                    else
                    {
                        FileWorker.SaveLammpstrj(false, files[k], snapnum, sizes, 3, strct);
                    }

                    int filesCount = (int)((double)files.Length / 100.0);
                    if (filesCount == 0)
                    {
                        filesCount++;
                    }
                    if (k % filesCount == 0)
                    {
                        ((BackgroundWorker)sender).ReportProgress((int)(100.0 * (double)k / (double)files.Length));
                    }
                }
                else
                {
                    e.Cancel = true;
                    break;
                }
            }
        }