private void SetFactorAssignments()
        {
            var found = false;

            var currDataset = marrDatasetInfo[0];
            var toRemove = 0;
            var NumFactors = currDataset.marrFactorAssnmnts.Count;
            while (NumFactors > 0 && toRemove < NumFactors)
            {
                foreach (var currFactor in marrFactorInfo)
                {
                    if (currDataset.marrFactorAssnmnts[toRemove].Name.Equals(
                        currFactor.mstrFactor))
                    {
                        found = true;
                        toRemove++;
                        break;
                    }

                    found = false;
                }

                if (found)
                {
                    continue;
                }

                // Not found; delete the factor
                foreach (var dataset in marrDatasetInfo)
                {
                    dataset.marrFactorAssnmnts.RemoveAt(toRemove);
                }

                NumFactors--;
            }

            currDataset = marrDatasetInfo[0];
            foreach (var currFactor in marrFactorInfo)
            {
                foreach (var factor in currDataset.marrFactorAssnmnts)
                {
                    if (factor.Name.Equals(
                        currFactor.mstrFactor))
                    {
                        found = true;
                        break;
                    }

                    found = false;
                }

                if (found)
                {
                    continue;
                }

                // New factor, so add the first value to all the datasets
                foreach (var dataset in marrDatasetInfo)
                {
                    var tmpFactor = new Factor(currFactor.mstrFactor, currFactor.marrValues[0]);
                    dataset.marrFactorAssnmnts.Add(tmpFactor);
                }
            }
        }
        /// <summary>
        /// Extract Factor information from a datatable 
        /// to an arraylist of clsDatasetInfo type.
        /// </summary>
        /// <param name="dt"></param>
        /// <param name="factorsLoaded"></param>
        private void DatasetFactorInfo(DataTable dt, bool factorsLoaded)
        {
            var factorNames = clsDataTable.DataTableColumns(dt, true); // get data only columns
            var marrFactors = new List<string>();

            marrDatasetInfo.Clear();
            for (var i = 0; i < factorNames.Count; i++)
            {
                var dsetItem = new clsDatasetInfo(factorNames[i]);
                if (factorsLoaded)
                {

                    for (var k = 0; k < dt.Rows.Count; k++) // go thru each row
                    {
                        var mDrow = dt.Rows[k];
                        if (i == 0)
                        {
                            var factorname = mDrow.ItemArray[i].ToString();
                            marrFactors.Add(factorname);
                        }
                        var currFactor = new Factor(marrFactors[k], mDrow.ItemArray[i + 1].ToString());
                        dsetItem.marrFactorAssnmnts.Add(currFactor);
                    }
                    //dsetItem.marrFactors = marrFactors;
                    dsetItem.factorsSET = true;
                }
                marrDatasetInfo.Add(dsetItem);
            }
        }