Personal tools
You are here: Home Project Info To Do List LANDIS-II Core Framework

LANDIS-II Core Framework

To-do list for LANDIS-II core

Main module

  • Restructure order of operations such that all extension inputs are checked first, before any extensions are initialized (high - DONE).
    • Will need to restructure extensions.
    • For extensions, we may initialize SiteVars in the first step, to ensure that cohort type is correct (see Cohort notes below).
    • Explore making the new CheckParameters function available as an external call (SAVE FOR LATER).
  • Move Initial Community inputs/validation to Succession library. This will provide greater flexibility for altering these inputs by creating a new succession library (high - DONE).
    • Move the names of the initial community input files from scenario file into the input files for succession extensions (DONE).
  • Remove ListOfEditable class (it'll be in Landis utility lib) (high - DONE)

Plug-Ins module

  • Move the remaining core services accessed via static references in 5.1 into the ICore interface (top priority - DONE)
    • random #s
    • UI - Now moved to the Console project.
    • log
  • Idea: To improve performance of PlugInType class, especially its Equals method (low priority)[Done using Design 1]
    • Design 1 – Modify Equals so it uses Object.ReferenceEquals [design one implemented]
      • Would require replacing the public ctor in plug-ins with static Register method (the ctor would become private)
    • Design 2 – To avoid replacing public ctor in plug-ins
      • Class has static list of plug-in type names from ctor calls
      • Instance has variable which is index of name in static list
      • Equals method checks obj != null && obj.GetType( ) == GetType(), then casts obj and compares indexes
    • Relevant to processing cohorts killed by a disturbance.

Species module

  • Add AuxParm class (priority=medium - DONE)
  • Add override of Species.ToString which returns the species' name (useful in debugger) (low) (not done)
  • Add seed bank logic and inputs (medium)[Wait: Science TBD by Scheller, Syphard, Sturtevant].

Ecoregions module

  • Add AuxParm class (medium - DONE)
  • Add override of Ecoregion.ToString which returns the ecoregion's name (useful in debugger) (low) (not done)
  • Add property NumberOfActiveSites (medium - DONE).

Cohorts module

  • Add indexer to ISpeciesCohorts (low - Need clarification from Jimm D.)
    • TCohort this[int index] {get;}
  • Make Cohorts independent of the Core (high priority). Cohorts module will no longer be part of the Core (HIGH - DONE)
    • Benefits: reduce the # of modules, simplify maintenance; allows faster updating of cohort data structure as necessary.
    • Benefits: so basically core just has type-independent interfaces. (NOTE: THESE INTERFACES REMOVED)
      • Confirm if these interfaces only used by debugging extension called "Output Cohorts". If so, then don't keep these interfaces.
    • Investigate SiteCohorts as a site variable of succession only. Other extensions will GetSiteVar(SiteCohorts) to access the data, provided the correct interface are provided (DONE).
    • Move helper interfaces (e.g., ISpeciesCohorts) into the Cohorts library.
  • Change the interface to be more intuitive. Rename "DamageBy" to "MarkCohortsForDeath" and replace the Damage function with "KillAllMarkedCohorts" that will subsequently remove those marked. This will benefit our goal of simplifying extension programming. (HIGH - DONE)
  • Investigate changing individual cohort types from classes to structs (medium; needs preformance/memory measurements)(low - WAIT)
    • Traversing the cohorts on a landscape involving a lot of object creation. Measure the impact of this to assess whether switching to structs would be worthwhile.
    • Conceptually, is a cohort an immutable type?

Utility module (high)

  • Make sure there are no classes in the Landis.Util namespace (DONE)
    • Classes in this module should be in the Landis.namespace
    • This module should not be dependent upon any other core modules
  • Landis.Data.OpenTextFile method should check if opening a directory (DONE)
    • is there a special System.IOException for this case? Yes.
    • move method to ICore interface
  • Replace UI class with an interface IUserInterface (DONE)
    • Interface has same methods that UI class does now
    • IProgressMeter CreateProgressMeter( int totalWorkUnits )
      • To be used by succession lib
    • System.TextWriter ConsoleOut { get; }
      • type should be same as System.Console.Out
      • Is this only needed by succession lib if we don’t have CreateProgressMeter method?
    • Move current code for UI class’ implementation to Console project
  • Write base generic class for [Ecoregions|Species].AuxParm, something like Landis.AuxParm (SKIPPED - LOW PRIORITY)
    • where TParameterSet : IItemWithIndex and TParameterSetCollection: ICollectionWithCount
    • IItemWithIndex
      • int Index { get; }
      • [Ecoregions.IEcoregion|Species.ISpecies] : IItemWithIndex
    • ICollectionWithCount
      • int Count { get; }
      • [Ecoregions|Species].IDataset : ICollectionWithCount
    • Before writing this class, first investigate the use of extension methods (added in C# 3.0) as an alternative.
  • Move Landis.Util.Random methods to the PlugIns.ICore (DONE!)
    • Replace with Troschuetz Random Number Library (DONE!)
    • The core should provide a single random-number generator that all the extensions and libraries can access. This generator should be based on the Generator abstract class in the Troschuetz random number library, so that the generator can be used to drive various distributions (e.g, normal, exponential) in that library.
      • Troschuetz.Generator ICore.RandomNumberGenerator { get; }

Raster module

  • ICore.OpenRaster should verify the raster's dimensions (and projection?) match those of the landscape (it currently doesn't) (high). Different projections should be warning; different dimensions is an error.
  • Design a new overload for ICore.CreateRaster method with just one argument (medium):
    • CreateRaster(path)
      • uses dimensions and metadata from core’s landscape
    • This is the most common usage by L-II extensions and libraries. They should use this new overload instead of the current overload: CreateRaster(path, dimensions, metadata).

Miscellaneous - Everyone

  • Standardize naming conventions:
    • Landis.Extension.MyDisturbance.dll; Landis.Extension.Succession.MySuccession.dll
    • Landis.Library.Succession.dll; Landis.Library.Cohorts.MyCohorts.dll; Landis.Library.Climate.dll; Landis.Library.PnET.dll
  • Build core's dll by compiling source code for all the modules. This will allow distributing a single core assembly without any of the "*.netmodule" files.
  • Modify each module's individual build file so it can be built as an independent library for test purposes.
  • Check dependency order for core’s build-file for target combo “clean run-tests”
  • Merge Victor's work on 5.1 documentation branch into trunk
    • This may have to be done manually because of architectural changes in 6.0 core
  • Replace any tabs in source files
  • Add binary versions of various 3rd party libraries to the subversion repository for LANDIS-II
    • In case the 3rd-party no longer makes an old version of their library available, we can still build an old version of the core from everything in the repository
    • log4net
    • or maybe as FLEL/3rd-party/log4net (are any FLEL libs instrutmented for log4net?)
Document Actions