//"Hispaniolan pine", "Pine");
        //"Nonforest", "Not stocked");
        //"Improved pine stock", "Pine");
        /// <summary>
        /// build up a dataset with code instead of import an SIT formatted dataset
        /// </summary>
        private static void Method2()
        {
            string projectPath = @"C:\Program Files (x86)\Operational-Scale CBM-CFS3\Projects\myproject\myproject.mdb";
            string dirname     = System.IO.Path.GetDirectoryName(projectPath);

            if (!System.IO.Directory.Exists(dirname))
            {
                System.IO.Directory.CreateDirectory(dirname);
            }
            //when initialize mapping is true, incoming sit
            //data must be named exactly as the definitions in the archive index
            Sitplugin sitplugin = new Sitplugin(
                outputPath: projectPath,
                initializeMapping: true);

            //define ten year age class size, with 20 values (200 years)
            int numAgeClasses = 20;

            sitplugin.AddAgeClasses(10, numAgeClasses);

            sitplugin.AddClassifier("admin");
            sitplugin.AddClassifier("eco");
            sitplugin.SetAdminEcoMapping("admin", "eco");

            sitplugin.AddClassifier("species");
            sitplugin.SetSpeciesClassifier("species");

            sitplugin.AddClassifier("group");

            sitplugin.AddInventory(
                classifierSet: "British Columbia,Pacific Maritime,Spruce,g1",//note exact naming is required when " initializeMapping: true"
                age: 100,
                area: 10,
                spatialReference: 100,
                HistoricDisturbance: "Wildfire",
                MostRecentDisturbance: "Clearcut harvesting with salvage");

            List <double> FakeGrowthCurve = Enumerable.Range(0, numAgeClasses)
                                            .Select(a => 200 / (1 + Math.Exp(-0.5 * (a - numAgeClasses / 2.0)))).ToList();

            sitplugin.AddYield(
                classifierSet: "British Columbia,Pacific Maritime,Spruce,?",
                leadingSpeciesClassifierValue: "Spruce",
                values: FakeGrowthCurve);

            sitplugin.AddDisturbanceEvent(
                classifierSet: "?,?,?,?",//when spatial reference is used, events do not use a classifier set
                disturbanceType: "Clearcut harvesting with salvage",
                timestep: 100,
                target: 5,
                targetType: "Area",
                spatialReference: 100);

            sitplugin.Import();
        }
        private static void MapSpatialUnits(Sitplugin sitplugin, JToken mappingConfig)
        {
            if (!Enum.TryParse((string)mappingConfig["mapping_mode"], out SpatialUnitClassifierMode mode))
            {
                throw new ArgumentException("expected one of the SpatialUnitClassifierMode enum values");
            }
            switch (mode)
            {
            case SpatialUnitClassifierMode.JoinedAdminEcoClassifier:
                sitplugin.SetSPUMapping((string)mappingConfig["spu_classifier"]);
                foreach (var item in mappingConfig["spu_mapping"])
                {
                    sitplugin.MapSpatialUnit(
                        (string)item["user_spatial_unit"],
                        (string)item["default_spatial_unit"]["admin_boundary"],
                        (string)item["default_spatial_unit"]["eco_boundary"]);
                }
                break;

            case SpatialUnitClassifierMode.SeperateAdminEcoClassifiers:
                sitplugin.SetAdminEcoMapping(
                    (string)mappingConfig["admin_classifier"],
                    (string)mappingConfig["eco_classifier"]);
                if (mappingConfig["admin_mapping"] != null)
                {
                    foreach (var item in mappingConfig["admin_mapping"])
                    {
                        sitplugin.MapAdminBoundary(
                            (string)item["user_admin_boundary"],
                            (string)item["default_admin_boundary"]);
                    }
                }
                if (mappingConfig["eco_mapping"] != null)
                {
                    foreach (var item in mappingConfig["eco_mapping"])
                    {
                        sitplugin.MapEcoBoundary(
                            (string)item["user_eco_boundary"],
                            (string)item["default_eco_boundary"]);
                    }
                }
                break;

            case SpatialUnitClassifierMode.SingleDefaultSpatialUnit:
                sitplugin.SetSingleSpatialUnit((int)mappingConfig["default_spuid"]);
                break;
            }
        }