private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
        {
            //try
            //{
                int N = int.Parse(nTextBox.Text);
                //int numberOfIterations = int.Parse(nTextBox.Text);
                int iterations = int.Parse(tMaxTextBox.Text);
                int maxIterations;
                if(maxStageTextBox.Text=="")
                    maxIterations = int.MaxValue;
                else
                    maxIterations = int.Parse(maxStageTextBox.Text);
                bool rangeN = multipleNCheckBox.Checked && multipleNCheckBox.Enabled;
                int rangeNmin = int.Parse(minNbox.Text);
                int rangeNmax = int.Parse(maxNbox.Text);
                int rangeNint = int.Parse(intNbox.Text);

                bool useSrg = CheckFile(srgMatrixFile.Text, srgCheckBox.Checked);
                MatrixProvider capabilProvider = new MatrixProvider(capabilityMatrixFile.Text,
                            capabilitiesCheckBox.Checked ? capabilityMatrixFile.Text : null,
                            capabilitiesCheckBox.Checked ? MatrixProvider.Type.RandomDiagonal : MatrixProvider.Type.MatrixFile,
                            N,
                            N,
                            false);
                /*
                MatrixProvider contigProvider = new MatrixProvider(contiguityMatrixFile.Text,
                            contiguityCheckBox.Checked ? contiguityMatrixFile.Text : null,
                            !useSrg ? MatrixProvider.Type.NullFile :
                            (contiguityCheckBox.Checked ? MatrixProvider.Type.RandomSymmetric : MatrixProvider.Type.MatrixFile),
                            N,
                            N,
                            contiguityDCheckBox.Checked);
                */

                MatrixProvider contigProvider = new MatrixProvider(contiguityMatrixFile.Text,
                            contiguityCheckBox.Checked ? contiguityMatrixFile.Text : null,
                            contiguityMatrixFile.Visible ?
                            (contiguityCheckBox.Checked ? MatrixProvider.Type.RandomSymmetric : MatrixProvider.Type.MatrixFile) : MatrixProvider.Type.NullFile,
                            N,
                            N,
                            contiguityDCheckBox.Checked);

                /*
                MatrixProvider contigProvider = new MatrixProvider(contiguityMatrixFile.Text,
                                contiguityCheckBox.Checked ? contiguityMatrixFile.Text : null,
                                contiguityMatrixFile.Text == "" ? (contiguityCheckBox.Checked ? MatrixProvider.Type.RandomSymmetric : MatrixProvider.Type.NullFile) :
                                MatrixProvider.Type.MatrixFile,
                                N,
                                N,
                                contiguityDCheckBox.Checked);
                */
                MatrixProvider majPowProvider = new MatrixProvider(majorPowersVectorFile.Text,
                            majorPowersCheckBox.Checked ? majorPowersVectorFile.Text : null,
                            useSrg ? MatrixProvider.Type.NullFile :
                            (majorPowersCheckBox.Checked ? MatrixProvider.Type.RandomVector : MatrixProvider.Type.VectorFile),
                            N,
                            N,
                            majorPowersDCheckBox.Checked);
                MatrixProvider conflictProvider = new MatrixProvider(conflictMatrixFile.Text,
                            null, //conflictCheckBox.Checked ? conflictMatrixFile.Text : null,
                            conflictCheckBox.Visible ?
                            (conflictCheckBox.Checked ? MatrixProvider.Type.RandomSymmetric : MatrixProvider.Type.MatrixFile) : MatrixProvider.Type.NullFile,
                            N,
                            N,
                            conflictDCheckBox.Checked);
                MatrixProvider srgProvider = new MatrixProvider(srgMatrixFile.Text,
                            srgCheckBox.Checked ? srgMatrixFile.Text : null,
                            useSrg ?
                            (srgCheckBox.Checked ? MatrixProvider.Type.RandomSymmetric : MatrixProvider.Type.MatrixFile) : MatrixProvider.Type.NullFile,
                            N,
                            N,
                            srgDCheckBox.Checked);
                MatrixProvider demoProvider = new MatrixProvider(demoMatrixFile.Text,
                            demoCheckBox.Checked ? demoMatrixFile.Text : null,
                            demoCheckBox.Visible ?
                            (demoCheckBox.Checked ? MatrixProvider.Type.RandomSymmetric : MatrixProvider.Type.MatrixFile) : MatrixProvider.Type.NullFile,
                            N,
                            N,
                            demoDCheckBox.Checked);
                MatrixProvider jcProvider = new MatrixProvider(jcMatrixFile.Text,
                            jcCheckBox.Checked ? jcMatrixFile.Text : null,
                            jcCheckBox.Visible ?
                            (jcCheckBox.Checked ? MatrixProvider.Type.RandomSymmetric : MatrixProvider.Type.MatrixFile) : MatrixProvider.Type.NullFile,
                            N,
                            N,
                            jcDCheckBox.Checked);
                MatrixProvider midProvider = new MatrixProvider(midMatrixFile.Text,
                            midCheckBox.Checked ? midMatrixFile.Text : null,
                            midCheckBox.Visible ?
                            (midCheckBox.Checked ? MatrixProvider.Type.RandomSymmetric : MatrixProvider.Type.MatrixFile) : MatrixProvider.Type.NullFile,
                            N,
                            N,
                            midDCheckBox.Checked);
                MatrixProvider csProvider = new MatrixProvider(csMatrixFile.Text,
                            csCheckBox.Checked ? csMatrixFile.Text : null,
                            csCheckBox.Visible ?
                            (csCheckBox.Checked ? MatrixProvider.Type.RandomSymmetric : MatrixProvider.Type.MatrixFile) : MatrixProvider.Type.NullFile,
                            N,
                            N,
                            csDCheckbox.Checked);
                MatrixProvider relProvider = new MatrixProvider(reliabilityMatrixFile.Text,
                            reliabilityCheckBox.Checked ? reliabilityMatrixFile.Text : null,
                            reliabilityCheckBox.Visible ?
                            (reliabilityCheckBox.Checked ? MatrixProvider.Type.RandomSymmetric : MatrixProvider.Type.MatrixFile) : MatrixProvider.Type.NullFile,
                            N,
                            N,
                            reliabilityDCheckBox.Checked);

                //if (demoCheckBox.Checked)
                //{
                //    demoProvider.Min = 0.15;
                //    demoProvider.Max = 0.35;
                //}
                //if (jcCheckBox.Checked)
                //{
                //    jcProvider.Min = 0.3;
                //    jcProvider.Max = 0.6;
                //}

                if (demoCheckBox.Checked)
                {
                    if (demominbox.Text == "" && demomaxbox.Text == "")
                        demoProvider.Prange = false;
                    else
                    {
                        demoProvider.Prange = true;
                        demoProvider.Pmin = double.Parse(demominbox.Text);
                        demoProvider.Pmax = double.Parse(demomaxbox.Text);
                    }
                }
                if (srgCheckBox.Checked)
                {
                    if (srgminbox.Text == "" && srgmaxbox.Text == "")
                        srgProvider.Prange = false;
                    else
                    {
                        srgProvider.Prange = true;
                        srgProvider.Pmin = double.Parse(srgminbox.Text);
                        srgProvider.Pmax = double.Parse(srgmaxbox.Text);
                    }
                }
                if (jcCheckBox.Checked)
                {
                    if (jcminbox.Text == "" && jcmaxbox.Text == "")
                        jcProvider.Prange = false;
                    else
                    {
                        jcProvider.Prange = true;
                        jcProvider.Pmin = double.Parse(jcminbox.Text);
                        jcProvider.Pmax = double.Parse(jcmaxbox.Text);
                    }
                }
                if (midCheckBox.Checked)
                {
                    if (midminbox.Text == "" && midmaxbox.Text == "")
                        midProvider.Prange = false;
                    else
                    {
                        midProvider.Prange = true;
                        midProvider.Pmin = double.Parse(midminbox.Text);
                        midProvider.Pmax = double.Parse(midmaxbox.Text);
                    }
                }
                if (conflictCheckBox.Checked)
                {
                    if (confminbox.Text == "" && confmaxbox.Text == "")
                        conflictProvider.Prange = false;
                    else
                    {
                        conflictProvider.Prange = true;
                        conflictProvider.Pmin = double.Parse(confminbox.Text);
                        conflictProvider.Pmax = double.Parse(confmaxbox.Text);
                    }
                }
                if (majorPowersCheckBox.Checked)
                {
                    if (majminbox.Text == "" && majmaxbox.Text == "")
                        majPowProvider.Prange = false;
                    else
                    {
                        majPowProvider.Prange = true;
                        majPowProvider.Pmin = double.Parse(majminbox.Text);
                        majPowProvider.Pmax = double.Parse(majmaxbox.Text);
                    }
                }
                if (contiguityCheckBox.Checked)
                {
                    if (contminbox.Text == "" && contmaxbox.Text == "")
                        contigProvider.Prange = false;
                    else
                    {
                        contigProvider.Prange = true;
                        contigProvider.Pmin = double.Parse(contminbox.Text);
                        contigProvider.Pmax = double.Parse(contmaxbox.Text);
                    }
                }
                if (csCheckBox.Checked)
                {
                    if (csMinBox.Text == "" && csMaxBox.Text == "")
                        csProvider.Prange = false;
                    else
                    {
                        csProvider.Prange = true;
                        csProvider.Pmin = double.Parse(csMinBox.Text);
                        csProvider.Pmax = double.Parse(csMaxBox.Text);
                    }
                }
                if (reliabilityCheckBox.Checked)
                {
                    if (reliabilityMinBox.Text == "" && reliabilityMaxBox.Text == "")
                        relProvider.Prange = false;
                    else
                    {
                        relProvider.Prange = true;
                        relProvider.Pmin = double.Parse(reliabilityMinBox.Text);
                        relProvider.Pmax = double.Parse(reliabilityMaxBox.Text);
                    }
                }

                capabilProvider.ForceVector = capabilitiesVectorCheckBox.Checked;
                capabilProvider.WriteRepeatCount = 3;

                if (File.Exists(conflictMatrixFile.Text) && _overwrite && conflictCheckBox.Checked)
                    File.Delete(conflictMatrixFile.Text);

                if (File.Exists(outputFile.Text) && _overwrite)
                    File.Delete(outputFile.Text);

                if (outputDyadicCheckBox.Checked) MatrixWriter.WriteDyadicHeader(outputFile.Text);

                bool overwrite = parent.GetSaveOverwrite();

                if (!rangeN)
                {
                    for (int i = 1; i <= iterations; ++i) // changed from iterations to N
                    {
                        if (!capabilitiesCheckBox.Checked) N = capabilProvider.GetNextMatrixRows();
                        else if (!useSrg && !contiguityCheckBox.Checked) N = contigProvider.GetNextMatrixRows();
                        else if (!useSrg && !majorPowersCheckBox.Checked) N = majPowProvider.GetNextMatrixRows();
                        else if (!conflictCheckBox.Checked) N = conflictProvider.GetNextMatrixRows();
                        else if (useSrg && !srgCheckBox.Checked) N = srgProvider.GetNextMatrixRows();
                        else if (!demoCheckBox.Checked) N = demoProvider.GetNextMatrixRows();
                        else if (!jcCheckBox.Checked) N = jcProvider.GetNextMatrixRows();
                        else if (!midCheckBox.Checked) N = midProvider.GetNextMatrixRows();
                        else if (!csCheckBox.Checked) N = csProvider.GetNextMatrixRows();
                        else if (!reliabilityCheckBox.Checked) N = relProvider.GetNextMatrixRows();

                        if (N == -1)
                            N = int.Parse(nTextBox.Text);

                        if (capabilitiesCheckBox.Checked) capabilProvider.Rows = capabilProvider.Cols = N;
                        if (!useSrg && contiguityCheckBox.Checked) contigProvider.Rows = contigProvider.Cols = N;
                        if (!useSrg && majorPowersCheckBox.Checked) majPowProvider.Rows = majPowProvider.Cols = N;
                        if (conflictCheckBox.Checked) conflictProvider.Rows = conflictProvider.Cols = N;
                        if (useSrg && srgCheckBox.Checked) srgProvider.Rows = srgProvider.Cols = N;
                        if (demoCheckBox.Checked) demoProvider.Rows = demoProvider.Cols = N;
                        if (jcCheckBox.Checked) jcProvider.Rows = jcProvider.Cols = N;
                        if (midCheckBox.Checked) midProvider.Rows = midProvider.Cols = N;
                        if (csCheckBox.Checked) csProvider.Rows = csProvider.Cols = N;
                        if (reliabilityCheckBox.Checked) relProvider.Rows = relProvider.Cols = N;

                        NetworkFormationSimulation.SimulateToFile(
                            capabilProvider,
                            contigProvider,
                            majPowProvider,
                            conflictProvider,
                            outputFile.Text,
                            expectedAllianceFile.Text,
                            conflictMatrixFile.Text,
                            srgSaveMatrixFile.Text,
                            i,
                            conflictCheckBox.Checked,
                            contiguityCheckBox.Checked,
                            majorPowersCheckBox.Checked,
                            outputDyadicCheckBox.Checked,
                            expectedAllianceDCheckBox.Checked,
                            srgDCheckBox.Checked,
                            srgProvider,
                            demoProvider,
                            jcProvider,
                            midProvider,
                            csProvider,
                            relProvider,
                            maxIterations,
                            overwrite,
                            double.Parse(brTextBox.Text));
                        overwrite = false;
                        (sender as BackgroundWorker).ReportProgress((int)(0.5 + Math.Ceiling(100.0 * i / (double)iterations)));
                        if (e.Cancel)
                            break;
                    }
                }
                else
                {
                    for (int i = 1; i <= iterations; ++i) // changed from iterations to N
                    {
                        N = RNG.RandomInt((rangeNmax - rangeNmin) / rangeNint) * rangeNint + rangeNmin;
                        if (capabilitiesCheckBox.Checked) capabilProvider.Rows = capabilProvider.Cols = N;
                        if (useSrg && contiguityCheckBox.Checked) contigProvider.Rows = contigProvider.Cols = N; // usrSrg is now True as of 8/31/2012
                        if (!useSrg && majorPowersCheckBox.Checked) majPowProvider.Rows = majPowProvider.Cols = N;
                        if (conflictCheckBox.Checked) conflictProvider.Rows = conflictProvider.Cols = N;
                        if (useSrg && srgCheckBox.Checked) srgProvider.Rows = srgProvider.Cols = N;
                        if (demoCheckBox.Checked) demoProvider.Rows = demoProvider.Cols = N;
                        if (jcCheckBox.Checked) jcProvider.Rows = jcProvider.Cols = N;
                        if (midCheckBox.Checked) midProvider.Rows = midProvider.Cols = N;
                        if (csCheckBox.Checked) csProvider.Rows = csProvider.Cols = N;
                        if (reliabilityCheckBox.Checked) relProvider.Rows = relProvider.Cols = N;

                        NetworkFormationSimulation.SimulateToFile(
                            capabilProvider,
                            contigProvider,
                            majPowProvider,
                            conflictProvider,
                            outputFile.Text,
                            expectedAllianceFile.Text,
                            conflictMatrixFile.Text,
                            srgSaveMatrixFile.Text,
                            i,
                            conflictCheckBox.Checked,
                            contiguityCheckBox.Checked,
                            majorPowersCheckBox.Checked,
                            outputDyadicCheckBox.Checked,
                            expectedAllianceDCheckBox.Checked,
                            srgDCheckBox.Checked,
                            srgProvider,
                            demoProvider,
                            jcProvider,
                            midProvider,
                            csProvider,
                            relProvider,
                            maxIterations,
                            overwrite,
                            double.Parse(brTextBox.Text));
                        overwrite = false;
                        (sender as BackgroundWorker).ReportProgress((int)(0.5 + Math.Ceiling(100.0 * i / (double)iterations)));
                        if (e.Cancel)
                            break;
                    }

                }
            //catch (Exception exception)
            {
             //   MessageBox.Show("Error: " + exception.Message + Environment.NewLine + exception.StackTrace);
            }
        }