Release notes

New features and recent changes to the Patchworks software

Patchworks is an evolving and growing product. As developers and testers we are continuously improving the quality of our software and adding new features based on our experiences and on customer feedback.

In order to provide the best quality service to our customers we strive to deliver our improvements as quickly and frequently as possible. We prefer to deliver our updates in small batches several times a year, rather than witholding changes to build up a major release every couple of years. Our product installation process has been engineered to make frequent upgrades a simple process for our customers.

This document describes the sequence of incremental changes that have been made to the Patchworks software. These changes are described in reverse chronological order: most recent changes are listed first. Use this document to quickly update yourself about what has changed since your last product release.

June 2017

  • Minor changes and fixes:
    1. Increase the decimal places of precision in CSV outputs.

May 2017

  • Add new functions to the query language to help locate and summarize columns in a table.

    The SummarizeColumns function will sum all numeric columns whose column name matches a specified regular expression pattern. For example:

    will sum the values in all columns that start with 'feature'Yield.'. Any non-numeric columns that match the expression will be ignored.

    The NonZeroColumn function will scan all numeric column whose names match a specified regular expression pattern, and return the name of the first column with a non-zero value. For example:


    See the UserGuide for more information about these functions.

  • There is a new SummaryTable class that can be used to generate simple univariate statistics within a standard table interface. The resulting table may be displayed, saved, joined to another table or formatted using a standard report template. See the API documentation for the SummaryTable class for more information.
  • Minor changes and fixes:
    1. Dont put a period slider on tables that dont have a time dimension.
    2. Improve the error message for empty expressions.
    3. Add a fix to deal with apparently invalid spatial indexes.
    4. The legend on the MapReport is now drawn with an opaque white background. This makes the legend easier to read when it is located on overlapping features.
    5. The initial strata the was shown in th error traceback in the MatrixBuilder was incorrect. The wrong initial strata was being repeated in every error message.

April 2017

  • Minor changes and fixes:
    1. Fix a synchronization issue so that the interface is blocked while reports are being saved. The previous behaviour was confusing because there was no way of knowing when the background production of reports had completed.

March 2017

  • There is a new class to help make even flow and ndy specifications for the Add Flow Account methods. The following example shows how to make an even flow specification on a harvest product account:
    			   new FlowSpec().even(), 100);
    This example shows how to make a non declining yield specification for the final 5 periods of the planning horizon on a growing stock account:
    flowNdy = new FlowSpec().ndy(periods-4, periods, periods);
    			   flowNdy, 100);
    See the API documentation for the FlowSpec class for more details.
  • Minor changes and fixes:
    1. Fix a recently introduced bug in the Matrix Builder that occurs when blocks have multiple parts having the same attribute names.
    2. Improve the error message produced by the Matrix Builder when a fatal error occurs.

February 2017

  • There is a new ScenarioSet wizard that can be accessed from the 'Tools' menu. This wizard can be used to quickly develop and modify ScenarioSet batch scripts.
  • Minor changes and fixes:
    1. Improve the scheduling heuristics in situations where the objective is to minimize road construction costs.
    2. Fixed Objective Report not displaying the correct chart.
    3. Fixed a re-display bug in map legend tab.
    4. Fix CSV files not being closed properly after use.

January 2017

  • Minor changes and fixes:
    1. Performance improvements to the Crosstab wizard and TextViewer components.
    2. Fixed sorting error in column summary tool.

December 2016

  • Map legend items have a new popup menu option: to show the symbology. This will display a Code Viewer containning the symbology definitions. These can be save to a file, and then later the file can be dropped on to the legend item to restore the symbology.

    This makes it easier to quickly apply commonly used symbols and classifications.

  • The Query Builder supports drag and drop of text selections and files. The text will be inserted at the current insertion point. If multiple files are selected they will be appended together before insertion.

    This makes it easier to compose and save frequently used or complex queries in permanent external files.

  • The query language now supports expressions composed of several sub-expressions, each separated by the semicolon (;) character. The sub-expressions will be evaluated in sequence, and the returned value of the expression will be the value of the final sub-expression. Values produced by the initial sub-expressions will be discarded, however these sub-expressions may have side effects (e.g. the setVar() function) that influence subsequent sub-expressions.
  • The query language supports functions to store and retrieve the results of sub-expression evaluation. Two new functions (SetVar() and GetVar()) implement this new capability. These functions can help to simplify complex expressions by consolidating common calculations. For example, the following trivial example caculates and stores a sub-expression, and then uses the result in several other locations:
  • There is a new tool for batch creation of comparison charts. This tool accepts a list of charting commands on standard input and writes out a chart on standard output, and is suitable for use in automating post-processing of scenarios. See the API documentation for the CompareChartWriter for further details.
  • Minor changes and fixes:
    1. Additional meta data for the report title and other parameters is being written out to the report meta data (.fld) files.

November 2016

  • Modify the Matrix Builder to allow expressions to be used for attribute labels. When combined with the previous changes, this can allow for very concise specification of complex models. For example, an attribute label expression could look like:
    This expression will interpolate the values of the AU and SI strata as appropriate for each block in the model.
  • Add performance optimizations to the Matrix Builder for rapid compilation of complex XML models.
  • Update the Woodstock to Patchworks translator with the following features:
    • Recognize the interpolation character '-' in yield curve definitions
    • Correctly interpret 'binary' curve types
    • Implement the foreach operator
  • Minor changes and fixes:
    1. Add new functions to the query language for inspecting curve minimums and maximums. For example:
    2. Add a new function to the query language raise an error (if a condition is met). This will help to catch and highlight unwanted conditions. For example:
      if(FU='',error('Missing an FU assignment'),FU)
    3. Add an optional parameter to the random() function. This parameter may be true or false, and indicates if the random value should be recalculated multiple times within the evaluation of a single row for every offset() value (true), or if the random value is only drawn a single time per row (false).

      The default value if not specified is false.

      This new feature is only of use in expressions that are used to create curves in the Matrix Builder. If the dynamic option is chosen, then each point on the calculated curve may be modified by a random amount. For example, modify the points on the curve by +/- 5:


October 2016

  • The MatrixBuilder has been modified to allow expressions to be used in many more places. In many cases this can enable much more compact and expressive models. For example, a conditional expression could be used to determine the factor to apply to an attribute:
    Previously this would have required two sets of attributes (one for each SI category). Used in combination, the size the ForestModel XML file can be reduced substantially without changing the values in the resulting matrix.

    Expressions can now be used in:

    1. The 'factor' attribute on curves. In this context the expressions must resolve to literal values, such as literal numbers or defined constants.
    2. The 'factor' attribute on Attribute or Attibutes elements. These expressions will be evaluated in the context of the block that they will be applied to, so in most cases the full suite of functions may be used in forming expreessions.
    3. The breakup age and renewal ages in Succession elements. These are evaluated in the context of the block that the succession rules apply to, but do not have feature attributes available. Curves may be looked up by curve id, and Attribute values may be looked up by attribute id.
    4. The minimum and maximum operable ages, offsets, regen curve and retention values on the Treatment element. These values are evaluated in the context of the block that the treatment applies to.

    This update has resulted in a single backwards incompatible change to one of the little used attributes in the ForestModel XML language. The "curveid" attribute of the "treatment" element used to provide a curve id literal that would be used to determine the renewal age after the treatment. This attribute has been eliminated, and is replaced with a "renewalcurve" attribute that specifies an expression that will be evaluated to determine the renewal curve. Whereas the previous syntax looked like:

    <treatment label="Reglr" adjust="R" curveid="HD1.renewAge">
    The new syntax looks like:
    <treatment label="Reglr" adjust="R" renewalcurve="curveid('HD1.renewAge')">

September 2016

  • Minor changes and fixes:
    1. Modified the Block Attribute Table to include 'duplicateAccounts' in more situations.
    2. Added a function to the query language to split strings in to lists, optionally specifying the separator character. For example:
      See the split function documentation in the User Guide.
    3. Corrections and optimizations to the query language.

August 2016

  • Added a new query language function to decode and encode species composition strings like used in the Ontario MNRF. For example:
    See the spcomp function documentation in the User Guide.

July 2016

  • Minor changes and fixes:
    1. Added a report customizer for the Box and Whisker report. This is a useful report for showing change over time with respect to a range of variation. Access this new tool from the 'Add Report Wizard'.
    2. Added a new query language function to help disambiguate duplicate column names in joined tables. Now it is possible to specifically identify columns in joined tables that have the same names as columns in the base table. This capability has been added to the Query Builder and Export Table wizards to automatically do the right thing.
    3. Improved the 'Show Contstructor' tools to enhance the output for complex table types. Most tables types are now decoded to a BeanShell syntax that is more suitable for alteration and customization.
    4. Added documentation on the Append Store Builder tool, useful for appending multiple datasets together.

June 2016

  • Add a dissolve polygon tool to the Themes menu. This allows quick access to on-the-fly dissolve of polygon datasets using a variety of complex queries.
  • Minor changes and fixes:
    1. Fixed the query parser so that the area() function works correctly on performance optimized layers.
    2. Improved error messages in some situations.

May 2016

  • Add a tool to automatically translate Postgres PL/SQL scripts to an equivalent BeanShell code. The SqlToBeanShell command wizard can be accessed interactively from the Application Launcher or programatically via the API.
  • Add Left and Right string methods to the query language. These methods return the specified number of characters from the left or right side of a sting.
  • Added more options to the Pin Builder tool to add more types of targets.
  • Minor changes and fixes:
    1. Pressing the escape button in a colour selector will dismiss the chooser.
    2. Colour preview chips will now display their RGB colour codes when you hover the mouse over them.

April 2016

  • Added options to the Pin Builder tool to specify additional target types.
  • Minor changes and fixes:
    1. More ease of use refinements to the window tiling tool.
    2. Improved formatting and made corrections to the user guide.
    3. Fixed a few small issues with using the 'Show Contructor' function and symbology editor on Numeric Theme layers.
    4. Fixed a problem in the 'Show Constructor' output that was introduced in as an improvement in February. The improved version used explicit variable typing to be more like Java code, but this caused some errors in the BeanShell interpreter when variable names were reused and redefined.
    5. Add 'Show Code' option to the Interior Core Calculation Wizard to help with the develpoment fo automation scripts.

March 2016

  • Fixed a compatibility issue with Windows 10.
  • Added a graphical wizard to control the SFMM proportional allocation tool. The tool is available from the application launcher.
  • Minor changes and fixes:
    1. Add tooltip text to the map legend and report selector so that long names are displayed when you hover over with the mouse.
    2. Fixed a problem with missing values in the raster majority tool.
    3. Improved the syntax highlighter for better performance with long strings.
    4. Fixed the texture paint customizer. Allow textures to be recoloured and scaled.

February 2016

  • Add toolbar to target list to allow opening and closing of targets. Enhance the window tiling tool to allow different tiling options, and specify the monitor to use on multi monitor setups.
  • Minor changes and fixes:
    1. Fixed a line ending issue with the new syntax highlighting text viewer.
    2. Fixed a problem with show construtor on map layers.

January 2016

  • The Patchworks system has a new setup program. This program does a better job of compliying with the Microsoft conventions than the previous version.
  • Minor changes and fixes:
    1. Add a warning message if the spatial index file is out of date with the corresponding shapefile. This can occur when using the ArcGIS Append operation.

December 2015

  • The 'Show constructor' output is now shown in a syntax highlighting text output window.

November 2015

  • Minor changes and fixes:
    1. 'ignoreMissingAttributes' in ForestModel will now also ignore errors due to missing curves.

October 2015

  • Add an option to 'attributes' element of the ForestModel that controls how attibute values are scaled. Historically all attributes have been multiplied by the area of the managed or unmanaged portion of the attriubte curve or expression (area scaling). Two new mthods are now allowed: proportional scaling and no scaling. See the ForestModel reference section in the User Guide for more details.
  • Minor changes and fixes:
    1. Fix a problem in the scheduler that would occur with one-way roads.
    2. Correct and improve the API documentation.

September 2015

  • Add more options to the general reports to control the display of row, column totals, row totals, and number of significant digits. These new options are available in the report wizards, and also in the 'Show constructor' output.
  • Add a new map selection option to add to the selected set all features that are within the convex hull of the currently selected set of features. This command may be useful in exploring the interspersion of features within a patch.
  • Add a new map selection option to select all blocks that are members of the same patch. This option only shows up when a patching target is being used, and will make a selection if the polygon under the cursor is a member of a patch.
  • Modify the Matrix Builder so that it resolves entity references to external files relative to the location of the ForestModel XML file. This makes it easy to include files other files in the main XML file, allowing a modular construction of complex XML models.
  • Minor changes and fixes:
    1. Fix the build process so that Patchworks is still compatible with Java SE version 6. This change was made for government clients in restricted environments, but in general is a good idea to update to a more modern Java version.
    2. Do not terminate with an error when unknown codes are loaded in to the timing table.
    3. Fix up some of the data prep program (Proximal Topology for example) that did not close data files after opening them.
    4. Fixed the 'analyze_safe' script to start and pause the simulation at the correct times.

August 2015

  • Add support for UTF-8 and other character sets. It is possible to open CSV files, dBase files, Info DBMS files, and Shapefiles using alternate character sets. Press and hold both the shift and control keys When dragging a Shapefile, dBase or CSV file on to the Map Viewer to invoke a character set selection menu. If the file is subsequently used in a map layer or report the 'Show Constructor' option will include the parameter required to open the data set using the correct character set.

June 2015

  • An error was detected and corrected in the Matrix Builder. Incorrect values were being calculated when calculating curve expressions using the curve(), curveId, and attribute() functions while also applying a scaling factor in the <attribute> element. Other uses of these functions with a scaling factors of 1 are not affected.
  • A new tool has been added that extracts curves out of a ForestModel XML file and writes these out to a CSV file. This is sometimes useful to check that the ForestModel file was created correcctly, or to reverse engineer the inputs when the original data sources are not available.
  • Two more functions have been added to the Patchworks query language. IsInfinite() tests for math expressions that result in infinite values (such as the result of dividing by zero). IsNan() tests for math expressions that result in an invalid number (e.g. sqrt(-1)). Check the User Guide - QUery Languge reference for more details.
  • Minor changes and fixes:
    1. Modify the exportCSV command so that it will correctly use the number of decimal points of precision that is specfied in the column definition.
    2. Added error check to the Category Expression report to report if the list of expressions is a different length than the list of labels.
    3. The default behaviour for the ReportWriter has been modified so that chart applets are only used when explicitly requested. In the previous situation chart applets would not be shown be default, but could be activated by setting other unrelated default parameters.

May 2015

  • Minor changes and fixes:
    1. Fixed an axis scaling problem in the Target Limit reports that occured with the recent update of the charting library. The problem caused the range axis to be scaled between a range of 0 to 2. Data outside of this range was not being plotted.

April 2015

  • Added a method to the Control class to specify unit labels and conversion factors other than for metres and hectares. This method can be used to set Patchworks up so that indicators and reports (such as the shape patch metric and the route cost report) will work correctly with other measuring system (such as feet, miles and acres). See the API documentation for the Control.setConversionFactors method for further details.
  • Fixed a reporting correctness issue. A bug was identified in one of the route scheduling primitives. In some situations where routes were being used this error could result in incorrect values being displayed in the block table. Scheduling correctness was not affected.
  • Minor changes and fixes:
    1. Line charts now accept a new parameter to control the width of the line. See the Report API documentation for a description of the chart.series.linewidth parameter. Also improved line chart handling of missing values.
    2. Bar chart legends are now sorted in the same order as the bars are presented. Previously they were presented in reverse order.
    3. Stacked bar charts in category reports now have a black border around the bars, similar to the other bar chart reports.
    4. The Category by Category report now has a new method to set the label displayed on the X-axis. If no label is supplied the report will display the category expression.
    5. Modified the 'createSummaryTable' method of the RamAttributeStore class so that it optionally accepts a parameter to select the records to be summarized. Previously the method used the records that were selected in the table. See the API documentation for more details.
    6. Changed the Period Expression report so that the columns are displayed in the same order as they were defined. Previously they were being sorted in to alphabetical order.
    7. Fixed a regression in the application of the patch size threshold parameter.
    8. Fixed a problem in the HTML table portion of the reports by period. The 'Year' field was being calculated incorrectly.

March 2015

  • Add a new Patch Detail Report that creates a CSV file that provides information describing individual patches.
  • Added a new column operator to the query language to allow access to data base columns named with invalid characters.
  • Minor changes and fixes:
    1. Fixed a bug in the display of large Arc/Info polygon coverges.
    2. More spatial indexing performance improvements.
    3. Changes the JPEG screen snapshot tool to create PNG images instead (improved format).

February 2015

  • Improved performance of spatial indexing on large data sets.
  • Better management of windows on multi-monitor setups. Windows will now open on the same monitor as the main application window.
  • Window tiling will only be applied to target windows.
  • Fix rectangle selection mode when the select rectangle had a width or height of 0 pixels.

January 2015

  • Fixed an initialization problem with exclusive accounts. The problem would occur if duplicate accounts fed in to the exclusive account, or if more than one accound fed in to an exclusive account and these accounts used different groups.
  • Added support for new functions in the ForestModel language. The 'curveMaxY' function returns the maximum Y value in a curve. The 'curveFloor' function will limit the minimum value in a curve.

November 2014

  • Minor changes and fixes:
    1. Fixed a problem that occured when updating integer dBase fields with floating point numbers.
    2. Fixed a problem with selections on tables with more than 200 million records. Before the fix the selection would silently fail.

September 2014

  • The block attributes table now has additional columns that show the age of each block. The columns are named 'Strata.managed.AGE' and 'Strata.unmanaged.AGE'. These columns are different from the coresponding OFFSET columns in that they correctly factor in succession events. Among other uses, these columns make it easy to correctly produce reports by age class.
  • Add new options to the bunch scheduling feature. These options help to restrcit the types of treatments that can be scheduled in a bunch during the same period, and also allow to mark those blocks that are required to be treated along with the others during the same planning period. treated
  • Minor changes and fixes:
    1. Fix a MatrixBuilder error where the minimum and maximum operability ages were being ignored when an operability expression was specified.
    2. Added a method to export CSV files with more detailed output specifications.
    3. When loading a scenario using the wizard you can right-click on the column header of the 'Select components' table to quickly select or deselect all components.
    4. Fix problem loading TargetLimit reports that were created using the wizard.

August 2014

  • Minor changes and fixes:
    1. Fixed the symbology for a selected line.
    2. Update the predefined symbology list to correct some symbologies that were in the wrong categories.
    3. Fixed a memory leak that occured when scheduling grouped compartments. Improved scheduling of grouped compartments.

July 2014

  • Minor changes and fixes:
    1. Fixed a problem with window operations (cascade, tile, raise, etc) not working correctly since the update to the scripting engine.
    2. Fixed a serious map viewer performance regression that occurs under Java SE versions 7 and 8.

June 2014

  • Minor changes and fixes:
    1. Fixed a scheduler bug that occurred in unusual situations.

May 2014

  • Patchworks has been updated to work with Java SE verion 7 and Java SE version 8. Previous releases of Patchworks had only worked with Java SE verions 6.
  • Minor changes and fixes:
    1. Some cleanups have been made to the API documentation.
    2. Update the installation instructions to list the supported versions of Java.
    3. Warn if a dBase file has the incorrect file size for the number of records that it is supposed to contain.

April 2014

  • The scripting environment has been enhanced in a number of ways:
    1. The script console has been updated to perform more robustly and is less likely to lock up when large scripts are pasted in to the window.
    2. The error messages produced by the BeanShell interpreter are tidier and easier to understand.
    3. If is now possible to use any other JSR-233 scripting language to control Patchworks, such as Jython, Groovy or JavaScript. Just copy the JAR file containing the language plus the JSR-233 script engine extention in to the Patchworks lib folder, and restart Patchworks. The Patchworks map viewer and Application Launcher fully support drag-and-drop of scripts so long as the appropriate language file is in the lib folder.
    As part of these changes the Patchworks scripts directly has been reorganized to allow the addition of scripts for other landguages. New scripting languages can be added by creating a script folder with the same name as the language (e.g. jython), and then adding scripts with the correct language extention (e.g. '.py'). These scripts will be loaded in alphabetical order when the language is first used.
  • Minor changes and fixes:
    1. Improved algorithm for rasterization of polygons, lines and points. Can now specify order for overlapping features.
    2. Better detection and avoidance of problems when deleting grids and info files.

March 2014

  • Minor changes and fixes:
    1. Added a check in the Dissolve tool to skip over degenerate polygons (less than 3 points describing the polygon). Added a parameter to specify the planning period to use for the select expression and dissolve key. Improved the error messages to identify the feature that was the source of the error.
    2. The raster ProximalTopolgy tool will snap the sampling raster to an even multiple of the cell size in an attempt to have consistent and predictable behaviour with other tools.
    3. The CSV file reader set the data type of a column to boolean values if the contents are limited to true, t, false, f, yes, y, n or no. Case is ignored in testing these values.

February 2014

  • Minor changes and fixes:
    1. Fixed HTML text not being displayed in the Target Limit Report.
    2. Fixed a bug with the Target Limit report constructor, and added additional argument checks and diagnostic messages.
    3. Fixed a number of display threading issues that on rare occasions might cause lock ups.
    4. Add information to the Patcher account description to identify the source of the topology relationships.
    5. Fix the test in the ScenarioDesctiptor for running a simulation for a fixed set of itertions.
    6. Add a cross hatch symbol type for area fills in maps.
    7. Fix the AppendStore class so that it correctly converts data types when filling in columns.

October 2013

  • Minor changes and fixes:
    1. Made a minor adjustment to the scheduling algorithm that, in some cases, will reduce the number of inviable alternatives presented for evaluation. More viable changes will occur for the same number of iterations, but the length of time taken to complete the iterations may increase.
    2. This version corrects errors in the patch shape target where very large patch areas would overflow the internal counters, and the maximum weight on the patch shape target was not being applied correctly.
    3. This version modifies the patch attractor targets so that patches that are larger than the mid-point of the target do not contribute to the average. In the previous version all patches contributed to calculating the average patch size.

      The patch attractor target chart now displays the average patch size. Previously it displayed the percent area in the size class.

August 2013

  • Minor changes and fixes:
    1. You can use a Shift-Click in the Timing Constraints Editor to change the values in a range of cells.
    2. The SFMM translator now generates attributes for Habitat Units by Habitat Development Stage age ranges.
    3. Fix drag and drop so that it does not freeze the drag source while a long running script is executing.
    4. Fix Shapefile reader to remove the limit of 10,000 parts per multi-part polygon. The number of parts is now only limited by available memory.

July 2013

  • The ForetModel language allows the use of expressions to define attribute curves. In many cases, such as when the expressions refer to other curves, the curve is represented using the same x-axis points as the original, thus retaining the same fidelity of representation. When this is not possible (such as when an offset() function is used) the resulting curve will be calculated by iterating over the value of the expression for a series of x values. The iteration is controlled by the 'from', 'to' and 'by' parameters in the expression tag. After the curve is constructed, redundant points (interior points along a straight line) are removed.

    The previous default values for the iteration parameters were 5, 255 and 10. The default values have now been changed to 0, 300 and 5, in order to better match with commonly used 5-year age classes.

    The Woodstock translator has been updated to accept the specification of these parameters during the input dialog, and to allow them to be saved and restored from the hints file.

  • Minor changes and fixes:
    1. Fix a regression in reports where an incorrect value for the PERIODWIDTH attribute would be used in calculations.
    2. Improve error messages in the Matrix Builder to more specifically identify the source of a calculation error.

June 2013

  • Minor changes and fixes:
    1. Fixed a problem in the ColumnSummary report, where the first row of data in the CSV file was obscured.
    2. Add a method to the MapScroller class to allow a scripted method to change the position of the period slider.

April 2013

  • Minor changes and fixes:
    1. Fixed a problem with the incorrect scenario name being printed on the top of some reports when the reportWriter.saveFolder method was used.

March 2013

  • Minor changes and fixes:
    1. Properly save TextReports when using the ReportWriter.saveFolder() method.
    2. Allow marker lines on Category reports.
    3. Display a warning in the Woodstock translator when no lines are read from the areas file. Present a fatal error if the Woodstock file cannot be read correctly.
    4. False positives were occuring when detecting partial harvest treatments in the Woodstock translator.

February 2013

  • Minor changes and fixes:
    1. When opening info table recalculate the record count. Do not trust the value stored in the directory.
    2. Fix a few bugs in the Matrix builder related to operable growing stock.

January 2013

  • Minor changes and fixes:
    1. Buffer the output from the Group Fragments tool so that it can save the fragment lookup table faster.
    2. Add a new format function to the query language. This function assist in creating formatted strings from multiple variables in the same way as the Java String.format() method.

December 2012

  • Minor changes and fixes:
    1. Change maximum character field size in DBase files to 254, in line with the standard.

November 2012

  • This version includes changes that substantially improve the execution speed of complex reports and crosstabs. In some cases the reports are executed up to 15 times faster.
  • The Composition tool is being deprecated, because some of the methods it uses will not be supported in future versions of Java. You can still access the composition tool by dropping existing composition files on to the Patchworks Application Chooser.
  • Many changes have been made to the Woodstock translator and the Matrix Builder, in order to incorporate addtional woodstock features. XML files created by the Woodstock translator are now smaller and more concise.

October 2012

  • Minor changes and fixes:
    1. Overcome stack size exception in core boundary extraction.

September 2012

  • Minor changes and fixes:
    1. Correct the order of column labels in the csv output for the CategoryExpression report. The column headings are in the original order, but the data is output in column alphabetical order.
    2. Fix a null pointer exception error that occurs in the TargetLimitReport when no targets match the selection pattern.
    3. Fix retrieval of default report parameters.
    4. Some reports include java applets to display histogram data. In previous version of the report writer these applets would be included by default. Applet support requires Java, and this can be a problem for some client viewers, especially in corporate environments. In order to prevent viewing problems Java applet support is now disabled by default. To reenable applets within reports include the following code in the Patchworks_Init section of the PIN file:
      reportWriter.addDefaultParam("chart.applet", "true");
    5. Charts can be annotated with a horizontal reference lines. To apply the reference line add one or more "chart.reference" report parameters containing the value for the hieght of the line. For example:
      report.addDefaultParam("chart.reference", "125000");

      An optional color may be specified as a hexidecimal value. The default line color is black.

      report.addDefaultParam("chart.reference", "125000;#0000ff");

      Correct an error in the Info table routines that incorrectly converted negative binary numbers.

April 2012

  • Minor changes and fixes:
    1. Adjust the report that creates the Exclusive scenario files so that it does not output values for blocks that are not eligible for that choice. This will reduce the data set size and load times.

March 2012

  • Minor changes and fixes:
    1. More updates and improvements to the Woodstock translator. Auto correct '-' and '+' characters in theme, aggregate and output variable names. Allow math operators in *Y section.

February 2012

  • Minor changes and fixes:
    1. Fix an 'off by one' error with relational joins to coverages.

December 2011

  • Minor changes and fixes:
    1. Add ageclass() and row() functions to the query language.
    2. Improve the semantic checks in the query parser.

November 2011

  • Minor changes and fixes:
    1. Fixed a number of threading issues with the Swing GUI toolkit. These threading problems have been the source of minor inconsistencies in the GUI.
    2. Fixed the handling of expressions in the Interior Core calculation tool.
    3. Fixed the handling of shapefile projection information.
    4. More changes to the Woodstock model translation tool to better deal with conversion from age classes to ages. Display all PIN file code suggestions in a new text window.

October 2011

  • The report properties now support the ability to set the colours used in most of the report charts. See the documentation for the Report class for details about how to specify colours.
  • If you are using patching targets the block attribute table will now include columns that describe the shape metric for each bloch that participates in a patch.
  • An important issue has been identified and corrected in the way topological relationships are handled. Previously, in circumstances where the block shape file includes extra polygons that do not have corresponding block records the topology relationships may be incorrect. This may result in an incorrect assessment of the patch metrics.
  • Minor changes and fixes:
    1. Corrected an issue with the scheduler that would sometimes change the timing value of manual treatements.
    2. Ensure that chart parameters are being correctly passed to all reports.
    3. Fixed multiple issues with the Woodstock translator dealing with statements in the Woodstock Output section. Also added a new attribute to help track the type of response when using multiple transitions for each action. The translator will also make suggestions about accounts to be added to Patchworks in order to mimic the propotional allocation in woodstock.
    4. Allow scaling factors to be applied when creating route accounts.

September 2011

  • Add a new munu to the performance table to open selected targets. The performance table now shows the objective indicators in the default view.
  • There have been a number of changes to the ScenarioChangeListener API. These changes make the change listener more flexible and allow advanced behaviours. Unfortunately the API is imcompatible with the previous version. Please check the API documentation or get in touch with Spatial Planning Systems for more information.
  • Add a new menu item to the Help menu to assist in sending error reports to Spatial Planning Systems.
  • Minor changes and fixes:
    1. Changed the 'Show TargetDescription' command so it now correctly uses periodic methods.
    2. Changed the way that parameters are displayed on reports. The reports parameters are initially hidden and can be exposed by clicking on a toggle.
    3. Fixed a bug in the Network attributes table that prevented some columns from being displayed correctly.
    4. Fixed a bug in the Woodstock translator that caused null pointer exceptions when a hint file was not used.

August 2011

  • Add a new account type named 'FlowTarget' that can be used to set up targets that mimic periodic flow constraints such as even flow or non-declining yield. See the Control API documentation for more details.
  • Add a new option to the ForestModel XML. Attribute elements can now be tagged with 'output="false"' to indicate that the contents of the attribute should not be output to the matrix. The attribute can still be used for intermediate calculations.
  • Minor changes and fixes:
    1. Added _SUBTRTACT function to Woodstock translator.
    2. Fixed minor limit in the Matrix Builder.
    3. Fixed a bug the Crosstab class and improve performance.
    4. Improve handling and messages about invalid topology.

July 2011

  • When exporting a Shapefile or DBF file the dialog now has a 'Show Code' button to generate an equivalent script. This can be useful to automate repetitive tasks.
  • Minor changes and fixes:
    1. Do not crash when no targets are loaded.
    2. Fix Woodstock YTP() function.
    3. Improve error messages in the Matrix Builder.
    4. Various performance improvements.

March 2011

  • Minor changes and fixes:
    1. Fixed a regression in the Matrix Builder that would result in problems when strata had no succession rules.
    2. Fixed a regression in the Group Fragments tool that caused fragments of different ages to be combined into a single block. Improved the error message about duplicate rows to make it easier to diagnose problems.
    3. Improve error messages in the Matrix Builder and update documentation about the <attribute> element.

February 2011

  • Added _CAI, _EQUATION and _YTP functions to the Woodstock translator.
  • Improved the performance of relational joins using CSV files.
  • Add a new command to summarize the contents of data tables. This command will determine data types, data ranges and sets of uniques values for all columns in a data file. The results are HTML formated.
  • Minor changes and fixes:
    1. Fix a performance problem in the Query builder tool when showing a large number of values for a category.

January 2011

  • The MapView interface has been upgraded with better drag and drop support. Single or multiple spatial files (coverages and shapefiles), tables (DBase, Info and CSV) and BeanShell scripts may be dropped on the MapViewer and will open or execute automatically.

    The Application Chooser has also gained drag and drop support, and handles spatial files, tables, scripts and PIN files. Just drag files from the Windows Explorer and drop them on to the Application Chooser program selection area. The MapViewer application will automatically open to display the file, or in the case of PIN files the Patchworks application will start.

  • The 'Export to DBF' and 'Convert to Shapefile' wizards new options to help modify the way that the DBase file is created. The new options allow for adding, deleting and renaming columns, as well as type conversion.

December 2010

  • Add a conversion factor to the Group Fragments tool that converts from map units to the units used in the cost factors. Map units are often in metres, and the build and haul cost factors are often exrpessed in $/km. This factor will be applied to the locational data so that computed distances will be correct. If the map units are in metres and the cost factors are kilometres, then use a conversion divisor of 1000.
  • A new wizard has been added to assist in developing ScenarioSet scripts. The wizard will prompt for required program elements and will produce a complete ScenarioSet script. The wizard can also be used to edit and update existing scripts. The new wizard is available in the Data Prep section of the Application Chooser, and can also be started from within Patchworks by entering 'new ScenarioSetWizard();' in the Patchworks console window.

November 2010

  • The Matrix Builder had a bug that could be triggered by some rare combinations of highly heterogeneous blocks and varied succession rules. In some cases the resulting yield curves values would be incorrect. This bug has been fixed.
  • Minor changes and fixes:
    1. Error messages now ask for confirmation before exiting the program. Some classes of error messages now provide an option to send an error report to SPS.
    2. Improved performance of the Group Fragments tool for designing compact blocks.
    3. The Matrix Builder now creates a new table showing stratification values for each theme. This table can be used by Patchworks to identify the theme information for each strata.

September 2010

  • Minor changes and fixes:
    1. The 'Show TargetDescription' tool now works on target folders. If you right-click on a target folder, the menu now has options to show the TargetDescriptions for all targets or all active targets in the folder.
    2. Update the Crosstab wizard to that it can cancel a snapshot table if it is taking a long time.
    3. Improve the "Convert to Shapefile" wizard so that it allows entries of column expression.

August 2010

  • The Woodstock translator can now read the contents of the 'OUTPUTS' section and will convert this in to the equivalent ForestModel specifications. Most of the OUTPUTS options are supported.

    In addition, the translator can now save parameters in to a hints file.

  • Minor changes and fixes:
    1. Performance improvements to the MapViewer, particularily for changes to the selected polygons.
    2. Changes to the ScenarioChangeListener class to add more times during the life of an analysis when custom actions can be performed.

July 2010

  • The Woodstock translator can now read yield curve data from DLL files. Only the FIXED syntax is supported, and due to deprecation by Microsoft the Pascal calling convention is not supported.
  • Minor changes and fixes:
    1. Improved error messages in Matrix builder for missing operable yield curves.

June 2010

  • Minor changes and fixes:
    1. Add annualization capability to TargetLimitReport.
    2. Make sure that MapViewer snapshots have a .JPG extension.
    3. Update the ScenarioSet runner to provide many more options for starting scenarios.
    4. Right-clicking on a Target folder now shows an option to open all active targets.
    5. The 'Adjustment' file now allows an optional parameter to specify if the managed or unmanaged part of the block is to be adjusted.

May 2010

  • Minor changes and fixes:
    1. Add an extra parameter to the reloadScenario() script to control if treatments are cancelled before reloading.
    2. Change the applicaiton launcher to allow double-clicking on application names to launch program. Also, right-click on application names in order to view and edit properties.
    3. Improve interactive shell mode. The shell will run after double-clicking on a .bsh file. If the "shell.pause" property is set to true the interactive shell will continue to be active, otherwise the shell will exit.
    4. Make adjustments to SFMM translator. Fix problems with parameter-based yield curves. Optimizations to reduce xml file size.
    5. Matrix builder can now read all table types (dBase, INFO) instead of shapefiles and coverages.

April 2010

  • Minor changes and fixes:
    1. RangeIndicatorChart now accepts width parameter. Also now works categories that are numbers.
    2. Minor optimizations to patching algorithm.
    3. Documenation updates.

March 2010

  • A new 'Column Summary' report is available that displays summaries of values from the target table. The report can colour-code the contents of the table to highlight values that are above or below the target levels. There is a wizard for this report in the 'Special Reports' category.
  • Minor changes and fixes:
    1. Fixed a accounting problem that occurred in rare situations when treatments were being edited while the scheduler was running.
    2. Fix report formatting when multiple targets have different levels of indentation.
    3. Adjust shapefile export routine to make it easier for scripting.
    4. Fixed column header alignment in PeriodExpression report that would occur when column labels had a trailing '.' character.

January 2010

  • Minor changes and fixes:
    1. Helper scripts have been added to the script library to set periodic or annual target values. Scripts are available to set minimum, maximum or both levels simultaneously. These scripts make it easier to automate scenarios. See the 'Script Library' appendix to the User Guide for more details.
    2. Removed dependencies on the JAI package. Floating point grid datasets are now supported.
    3. Fixed problem with some reports that showed results in percent format.
    4. Fix for the new 'Show TargetDescription for this account' feature.

December 2009

  • Right click on targets and folders in the target explorer (Targets tab on the left side of the main Patchworks window) now provides several additional options. 'Open all targets in folder' will open up multiple target windows with one click.

    'Show TargetDescription for this account' will display a TargetDescription definition that can be copied into a BeanShell file and used to set up ScenarioSet's. The BeanShell code sets all of the account attributes as well as automatically providing descriptive information.

  • Minor changes and fixes:
    1. Fixed a scheduling error that occurs in multiple destination datasets where road networks are not shared.
    2. Minor corrections to TargetLimit reports. Identify on report if values are annual or periodic. Require explicit wild-card to show multiple categories. Prevent multiple categories by default on pre-defined Target reports.

      This may require changes to existing scripts to add a '*' wildcard to the end of patterns that previously would match to multiple targets.

    3. Encode special characters in report file names in order to make them safe for web browsing. Previously there was a problem displaying reports for targets that had '+' symbols in their names.

November 2009

  • Target and comparison reports now use a step-wise line to represent periodic values. The previous version used a smooth line, which misleadingly suggested continous annual values.
  • Minor changes and fixes:
    1. Fixed several schduling errors that would occur with unusual input datasets.
    2. Fixed memory references so that datasets will be automatically closed when they are no longer used.

October 2009

  • Minor changes and fixes:
    1. Fixed redraw problems with interactive map selection boxes (rubberbanding).

September 2009

  • The dataset required for the Quick Tour III data preparation exercise has been packaged up and can be downloaded from the Spatial Planning Systems web site, and can be found in the Downloads folder.
  • A new Wizard has been added that assists in the development of reports and targets in support of the Ontario Landscape Guide. The Wizard queries for a few parameters, and then generates the required code to create box and whisker reports and ScenarioSet target values. The code contains SRNV values extracted from the Landscape Guide Science package, a task that is tedious and error prone to do by hand.
  • Minor changes and fixes:
    1. Fixed the comparison chart applet so that it would ignore scenarios that did not contain the required reports.
    2. Fixed the 'adjustWeightsRelative' script to set the first target to use premultiply style weighting.

August 2009

  • Minor changes and fixes:
    1. Adjust the symbology generated by the Pin Builder for the sample patch maps.
    2. Fixed map drawing problem with point files having only a single point.
    3. Fixed the feature selection mechanism for point features.
    4. Updated SFMM translator to select highest proportion FUSuccessn when more than one value specified. Also added warnings for inconsitent or missing values in various tables. Several other changes to eliminate differenes between managed and unmanaged feature yield curves. Make sure that the silvicultural intensity is correctly updated for shelterwood succession rules. Allow use of '-' character in category values. Improved parsing of Yield_1 table.

July 2009

  • Documentation updates.

June 2009

  • Fixed problem in interior core area calculation where the incorrect values were being used for buffer distances.
  • Minor changes and fixes:
    1. Fixed problem with incorrect analysis window being used in raster majority tool in some cases.

May 2009

  • Minor changes and fixes:
    1. Fixed an annoying map drawing bug where maps would not get updated correctly in some circumstances.
    2. Minor fix to Woodstock hints file reader.
    3. Minor fix to Matrix builder to handler 0% retention cases.

April 2009

  • A new tool has been developed to help with the assessment of interior core habitat area. The InteriorCore class creates shape files that compute interior care area conditions according to the definition in the Alberta Forest Management Planning Standard. The tool can be parameterized for other interior core definitions.
  • Minor changes and fixes:
    1. Fixed issue with 'analyze' script that would allow the simulation to run for a few more iterations after the convergence criteria had been met.
    2. Fixed a problem where the Windows menu would not work correctly when exactly 49 windows were open on the screen.

March 2009

  • Additional options on the 'Build Road Segments' tool include the ability to specify a search distance threshold. This will limit the distance used to connect blocks to nodes on the road segments. The tool will now search the entire road dataset (up to the search distance) in order to connect each block to the road network. The tool also will list all numeric values in the road attribute file as options for computing the cost surface.
  • Several performance improvements.
  • Minor changes and fixes:
    1. Corrected a scheduling bug where in some cases treatements were being scheduled in unavailable periods.
    2. Correct problems with PolygonSplitter when using shapefiles.
    3. Correct several problems with operable curve calculation.
    4. Automatic data value conversion enabled for joins and table calculations. For example, joining by numeric and string fields will work, so long as the values are the same. Integer values can be calc'ed into a floating point number field (and vice versa with truncation).

February 2009

  • There is a new function available to the matrix builder to trim curves to the operability limits. The function is named 'operable', and can only be applied to feature curve expressions. It is not valid in any other location where expressions may be used (e.g. selecting records, determining operability limits, computing age lookups, determining product values).
  • The <treatment> tag in the ForestModel XML now accepts a 'operability' attribute that specifies a qury language string to compute operability limits.
  • The algorithm in the raster ProximalTopology tool has adjusted to improve performance. In some cases the time to compute topology has decreased by a factor of 10.
  • The algorithm in the vector ProximalTopology tool has adjusted to improve performance on unusual datasets. In most cases there is no visible change.
  • Minor changes and fixes:
    1. Fixed shapefile reader to accept features that have measures (PolygonM, PolyLineM, PointM). These seem to be generated more frequenty by ArcGIS.
    2. Adjusted startup sequence so that paramaters can be passed in to Patchworks from the command line. This is useful for batch scripting. Progress panel is sized correctly. Full path to pin file is saved.
    3. The method control.loadSchedule() accepts an optional argument to specify if the current set of treatments should be canceled before the schedule is loaded.
    4. There was an error in the way that polygon areas were being calculated for multi-part polygons. Also, robustness improved for invalid polygons.

January 2009

  • Quite a few improvements and corrections have been made to the Woodstock translator. Many Woodstock models can be translated from their original format without any adjustments.
    1. Table format yield curves are now properly read in.
    2. Complex curve definitions are correctly parsed and translated. These are converted to Patchworks expressions in a format that can be used by the Matrix Builder.
    3. Complex operability constraints are now handled correctly and converted into an expression that can be used by the Matrix Builder.
    4. The XML file created by the translator is more compact than the previous version. In most cases the output file is now only 20% of the previous size.
    5. A 'hints' file can be provided to provide names to be used by the output variables.
    6. Preliminary support for FOR loops.
    7. Several errors have been corrected, and error messages have been improved.
  • Minor changes and fixes:
    1. The CSV file that went with the shortage report had column headings that were off by one column. This has been fixed.
    2. The Woodstock translator will drop curves that have zero values.
    3. A problem opening coverages with relative path names has been corrected.

December 2008

  • Minor changes and fixes:
    1. The CSV file that went with the shortage report had column headings that were off by one column. This has been fixed.
    2. The Woodstock translator will drop curves that have zero values.
    3. A problem opening coverages with relative path names has been corrected.

November 2008

  • The scheduler heuristics have been modified to provide better performance for moels having large patch targets. The scheduler is now multi-threaded, and should work slightly better on multi-cpu hardware. One of the consequences of these changes is that the model will appear to run slower. In fact, more work is being done to reduce the objetive function value in the same amount of time.
  • Minor changes and fixes:
    1. The wizards that define reports and map layers now do a better job at describing the tables that they use. This should result in more portable scripts.

September 2008

  • There is a new wizard to help define crosstabs. Crosstabs summarize information by categories similar to a pivot table.
  • Minor changes and fixes:
    1. One of the arguments to the CrosstabStore has changed, and this may cause errors in existing scripts. The list of categories used in the addCategory method is now an array of Comparable, rather than an array of Object. Previous scripts can by corrected by changing the type from Object[] to Comparable[].

August 2008

  • There is a new Wizard to assist in running the Core Boundary calculation tool.
  • There is a new Wizard to save selected polygons to a new shapefile.
  • There have been a significant number of additions and corrections to the documentation.
  • Minor changes and fixes:
    1. The symbology editor tools now have controls to allow manual addition and removal of categories.
    2. The MatrixBuilder will now prompt to confirm that the column expressions are correct in the input and define statements. This should lessen the need to edit and customize ForestModel XML files.
    3. Minor correction to the treatment of shelterwood treatments in the SFMM to XML converter.
    4. The Build Road Segments tool will now prompt for an output directory.

July 2008

  • There are new Wizards to assist with opening new tables and joining table together. You can access these wizards from the 'Edit' menu on the main Patchworks viewer window.
  • The 'Add Layer' wizard has been streamlined to make it easier to use.
  • Minor changes and fixes:
    1. The ScenarioSet class has been reworked to make it more reliable and easier to use.

June 2008

  • Patch targets now have a 'percent frequency' sub-target. This is used to assign targets to a patch frequency distribution according to percent values.
  • The menus has been reorganized on the main Patchworks viewer make it easier to view tables and manipulate data.
  • The syntax for adding relational tables has changed. See the API documentation for the AttributeStore class for more details.
  • Minor changes and fixes:
    1. Patchworks will no longer quit when if finds errors while loading the PIN file. If the error occurs while executing the Patchworks_Init() function then the execution will be suspended, but you can continue to use the model.
    2. Some of the wizards have been changed to have more consistent labeling and instructions.
    3. The TransposeTable and TransposePeriodTable classes had minor bugs that prevented them from working correctly with CrosstabStore objects.
    4. Fixed the DitherTheme editor so that it allows the colour swatches to be updated. This must have been broken by a Java update.

May 2008

  • The table viewer now has a print option. The Print option will print all visible columns in all records (potentially a lot of paper in big files).
  • The Woodstock translator now has an option to import theme attributes. This option will create additional attributes that describe area by theme and area harvested by theme.
  • The 'Save Scenario' wizard has been simplifeid and streamlined. Scenarios can now be restored with just a few clicks.
  • The TargetChart controls have been changed. You must now hold down the control key in order to change the target values using the mouse.
  • The PIN builder will now group exclusive account options together, so that it is easier to track the logic of the accounts. If a product only goes to one destination then exclusive accounts are not used. Product output accounts are no longer created (since these are duplicates of the existing destination accounts.)

April 2008

  • There is a new option that allows map layers to be duplicated. Right click on a map legend item to show this new option.
  • Minor changes and fixes:
    1. Fixed a minor bug in the scheduler that on rare circumstances would cause an array to exceed its bounds.
    2. Add a check to ensure that map layers are not used in more than one legend.
    3. The Woodstock translator now ignores the case of letters when looking up CONSTANT labels. Previously it was performing an exact case comparison.

March 2008

  • There are some new reports that help in comparing account values to target levels. These reports are experimental and subject to change. See the API documentation for the TargetLimitReport, RangeIndicatorChartReport, and the BoxAndWhiskerChartReport. There are two equivalent reports that can be used to compute comparisons; these are the RangeIndicatorCompareReport and the BoxAndWhiskerCompareReport.
  • Reports that accept a 'pattern' argument have previously used a 'glob'-style of pattern matching. This accepted a '*' character to match any string of characters, and a '?' character to match any single character. These patterns are used as a prefix, so there is an implied '*' added to the end of the pattern.

    This matching pattern remains the same. However, most places within Patchworks that accept a pattern specification can now also accept a regular expression pattern. Regular expressions are quite powerful and support many other matching techniques such as character classes and alternation. Regular expression matching can be invoked by prepending a '~' character to the pattern. The '~' character will be removed, and the rest of the pattern will be treated as a regular expression.

    For more infomation about regular expressions see the API documentation for the Report.patternToRegex method.

  • Minor changes and fixes:
    1. The mechanism for redrawing the map when the selection has been altered has changed to increase performance.
    2. The mapviewer will no longer display selected records if they do not already have an 'unselected' symbol. Previously the mapviewer would display all selected records, regardless of whether they were visible when they were not selected.
    3. The 'uniqueValues()' method now returns an array of Comparable objects. This return type is more compatible with the list of categories that are used in some of the report types.
    4. A new method has been added to the ReportWriter to allow reports to be removed using scripted methods.
    5. The items in the Target Table are now sorted so that numeric ranges appear in the correct order.

February 2008

  • The Arc coverage tool will rename attributes in order to remove characters that are not allowed in Patchworks variable names. Any '#' and '-' characters will be replaced with a '_' character. This is consistent with how Arc converts coverges to shapefiles. Scripts that depend on the original names will break as a result.
  • Minor changes and fixes:
    1. Fixed a few problems with the composition tool (display not drawn correctly on startup, wrong coordinates).
    2. The SFMM translator now accepts another supplemental table to control the silvicultural intensities that are excluded from the 'Harvest_to_NonFor_Prop' netdown. This Set is named 'HarvestNonFor_Exclude' and simply nees to list the silvicultural intensity codes to be excluded.
    3. The Patchworks program had an undocumented feature to allow a FUTURE parameter to be specified in the features.csv input file. This capability was not properly supported and has now been removed.
    4. The products.csv input file can have an additional column to indicate the type of adjustment that should be made to FUTURE values. The ADJUST parameter can specify 'A' or 'R' to indicate if the FUTURE value is an absolute stand age, or a relative adjustment from the time of the treatment. The default value is relative, which is the same as the old behaviour. A value of 'R' along with a FUTURE value of 0 means that no age adjustment will be made, and the product value will be accrued into the period when the treatment occured.

November 2007

  • Several updates to the SFMM translator, to add better handling of selection silviculture. Several bugs fixed related to additional per m3 costs in even-aged silviculture.
  • Several new columns added to the block table to describe the time until the next early or late operability limit. 'EARLYOPERABILITY' will display a positive number that indicates the number of years until the soonest treatment is eligible, or a negative number indicates the number of years that the currently eligible treatments have been eligible. 'LATEOPERABILITY' will display a positive number indicating the number of years until the currently eligible treatment is no longer eligible, or a negative number indicating how long since the most recent treatment option became ineligible.
  • Minor changes and fixes:
    1. Several updates to the ScenarioSet script. The scripts does a better job at formating output. Most of the code has been factored into an abstrct base class, which makes customization easier.
    2. UniqueValue themes that were based on integer columns in the database were being drawn incorrectly.
    3. Added warnings for out of memory conditions in the Map Viewer.

October 2007

  • The HTML editor has been updated and now creates cleaner and simpler HTML strings.
  • Minor changes and fixes:
    1. Fixed a bug where the scheduler would lock up when a warning message was displayed.
    2. Map Report configurator always included in the "Add Map Wizard". Previously it was left out if were not routes were not defined.

September 2007

  • Documentation updates.
  • The 'ScenarioSet' mechanism for automating analysis has been updated.
  • A new function has been added to the query language (shiftCurve) to shift the points of a curve along the X-axis.

August 2007

  • The Numeric type of map viewer theme now excepts an 'expression' to define the value to be mapped. Previously this theme had only accepted a column label.
  • Several changes were made to the SFMM translator to improve the handling of treatment response rules that have been developed for the STRAP process.
  • A new menu item under the Patchworks 'Tools' menu will add a note to the Scenario Event report. You can use this to annotate the changes that you make to scenarios. Any annotations will be written out to the event log, and will be saved in the scenario output folder.
  • The MapViewer tool now supports dragging a selection box to select records and to identify records. Also, you can hold down the shift key while making selections to add records to the selection, or hold down the control key to remove records from the selection.
  • A new section of the UserGuide documents the library of scripts that are provided with Patchworks. See appendix "Patchworks script library".
  • Minor changes and fixes:
    1. Several fixes to point symbology and the 'Show constructor' methods.
    2. A new console command has been add. 'sourceGlobal(filename)' will source a BeanShell script file into the global context. This can be used within PIN files or within other command scripts to make sure that any new commands are defined globally, rather than within the context of the function that is calling them.

July 2007

  • Patchworks now has a tool to map 'Core Areas', which are defined as the area within the event horizon of a patch. The event horizon sphere of influence of a patch, and is calculated by 'buffering out' from a patch and then 'buffering in' by the same distance.

    See the API documentation for the ca.spatial.gis.raster.CoreBoundary class for more information.

    A raster algorithm is used in order to obtain reasonable interactive performance.

  • Minor changes and fixes:
    1. Patchworks has been ported over to Java version 1.6. A number of subtle changes to the Patchworks code were required due to changes in in the Java platform.

May 2007

  • Minor changes and fixes:
    1. Changes were made to the report writer so that Internet Explorer version 7 is now supported.

May 2007

  • A new tool has been added to the Output section of the Application Chooser. The 'Verify Scenario' tool will check that the contents of a scenario have not been changed since the scenario was created. This tool is useful to confirm that files contain what you think they should.
  • The Patchworks program now allows a new type of input that defines inventory adjustments that are to occur as the model is loading and before the simulation has begun. These adjustments will modify the initial state of the database, but the impacts will not be recorded as actions. The net effect is to silently modify the database prior to starting the simulation. A typical usage would be to incorporate recent inventory updates without needing to completely rebuild all of the database files.

    The depletion file can also be used to alter the ages of stands as they are loaded in. This can be helpful when loading in a initial treatment schedule (perhaps to reflect planned operations within the first 5 years of a plan). If stands selected for treatment are too young (below the operability limits), the depletion file can change the initial age to allow them to become eligible for harvest.

  • The input 'block.csv' file now accepts a parameter to set the initial retention period for blocks that are eligible for management treatments. This step can be used to prevent recent partial harvest treatment stands from becoming eligible right away.
  • The ForestModel language has been extended with another option for succession elements. The 'initialagelimit' attribute will prevent succession events from occuring during the Matrix Builder assembly process. Succession can occur is a stand is already older than the breakup age specified in a matching succession record. If the 'initialagelimit' is greater than or equal to 0, the initial stand age will be determined by subtracting the value from the breakup age. For example, if the 'initialagelimit' value is 10, then the new age for a stand already older than the breakup age will be 10 years younger than the breakup age.
  • The SFMM translator now has an additional option to add an 'initialagelimit' parameter to succession records.
  • Minor changes and fixes:
    1. Fixed syntax error in 'substring' query language function.
    2. Fixed file open error in FSSIM translator.
    3. Widened fields in some tables to prevent truncation when converting to DBF format.
    4. Improved error message in Matrix BUilder for retention area problems.
    5. Changed SFMM translator to allow a means of having sub-groups for treatment responses.

April 2007

  • Made a number of corrections and improvements to the FSSIM translator in order to accommodate files provided by Russ Henry. The previous version made some assumptions about spacing, alignment and required columns that do not appear to be a strict requirement of FSSIM.
  • Minor changes and fixes:
    1. Fix the mapping of road segment shapes in the network table.
    2. Fix regression in map reports.
    3. Sometimes the wrong period number was being in period value reports.

March 2007

  • The scheduling algorithm has been adjusted to perform better when making allocation decisions with exclusive accounts (such as multiple destinations).
  • Minor changes and fixes:
    1. Exclusive dependent accounts are now allowed to have multiple target accounts per input. Previously only a single combination of exclusive and choice was allowed.
    2. Some accounts were being resolved incorrectly, for example linking a duplicate account to another duplicate account would sometimes fail. This has been corrected.
    3. Minor corrections to the AccountExplorer tool.
    4. Provide a new error message to detect road segments with duplicate labels.
    5. Change the implementation of the saved route loading routine, to make it consume less memory and handle bigger routes.
    6. Fixed a regression in the road network display.
    7. Corrected a minor defect in the scheduler dealing with road accounts. This would allow construction and maintenance costs to unnecessarily float between routes on a shared network.
    8. Inclusive accounts are now implemented as 'duplicate' accounts.
    9. SFMM translator improved error messages and handling of unexpected input.

February 2007

  • More performance improvements have been made to the exclusive account selection mechanism. The algorithm is slower, but makes much better choices and ultimately gets better solutions in fewer iterations.
  • Minor changes and fixes:
    1. This release has a correction to the initialization code for exclusive accounts and routes. These accounts should now have a better initial allocation of stands to the closest mill destination.
    2. Fixed a bug in the calculation of Block Table values of product attributes that had a negative 'future' parameter.
    3. Fixed a bug in the calculation of Block Table values of attributes that are based on multiple curves (for example, several different 'future' attribute values).
    4. Fixed a problem with the new pause and resume implementation that could have resulted in a frozen user interface when the scheduler was running. This should also speed up execution slightly.
    5. Make sure dialogs do not get displayed in off-screen positions.
    6. Display large lists of windows and targets as cascaded lists.
    7. Gracefully handle road datasets with missing segments.
    8. Eliminate error messages when windows are closed twice.
    9. New warning message for road segments that start and end on the same node.
    10. Allow negative values to be used in minimum and maximum targets.

January 2007

  • Several safe guards have been implemented to prevent inconsistent results. Most actions that create reports or change the modeling state will now pause and resume the scheduler in order to avoid conflicts.
  • A new report has been added to the Scenario folder. This report records the event time line of the simulation, in terms of the changes to the model and the value of the objective function. This report can help to verify the sequence of simulation controls that led to the development of the solution.
  • A new report has been added to the Target folder. The report is a summary of the shortages between targets and the values that were achieved. This report lists all active targets over all periods. As requested by Jay Greenfield.
  • The account explorer has been updated to show the connections between all accounts and attributes. Previously it had only shown the links between attributes and summary accounts.

    The tool that selected groups has been split out from the account explorer and now can be selected from the Tools menu.

    The previous account explorer pane that showed the list of attributes has been removed. You can get this list from the 'protoaccounts.csv' file that is created by the Matrix Builder, or from the column headings in the block attribute table.

  • The Account Explorer can create a 'dot' language file that shows the relationships between attributes and accounts. The 'dot' language has been developed by AT&T, and can be processed using the GraphViz software. The resulting PNG or PDF will contains a flow chart depicting the accumulation of attribute values into accounts.
  • Minor changes and fixes:
    1. The Woodstock translator has been adjusted so that it can now correctly handle *OPERABLE sections when they are not immediately following the *ACTION sections that they apply to.
    2. Under rare circumstances, multiple destination models would occasionally get confused and report incorrect distances and costs. This situation is corrected.
    3. The penalty weight functions for the patch area, frequency and shape sub-targets have been adjusted so that they are similar to how weights are calculated for the size target.
    4. Eliminated another error that would occur when displaying the column heading in a table.
    5. The block table was incorrectly calculating product attribute values that had a negative future age. This has been corrected.
    6. There is a new 'OnceOnly' option that suppresses repetition error messages. This is useful for batch mode application in conjunction with the setGuiMode method, so that the console does not fill up with repetitive errors. See the API documentation for Diagnostic for further information.
    7. The report writer should be about three times faster at saving scenarios. The previous version would recalculate the data values for each report component (html. csv, png). The new version only calculates the data values once for all three components.

December 2006

  • The routing algorithm now does a better job of coalescing parallel tertiary roads into tributary-like structures.
  • The patching targets now have a sub-target to report and control the amount of area in each patch class.
  • Minor changes and fixes:
    1. A new error message has been added that warns when an attempt is made to create an account from a non-existent attribute. Previously this type of error was silently ignored.
    2. Decreased the amount of line thinning that is done on yield curves in the translators.
    3. Corrected a small problem with SFMM translator that happened in shelterwood forest types.

November 2006

  • Patchworks programs now record a log of their activity. These logs contain basic data including the date and time that the program was run, the program name, and all of the command line parameters that would be required to run the program. This information is logged to files name 'patchworksLog.csv' that are located in the dirctory containing the input datasets.
  • The edge targets algorithm has been adjusted to significantly improve performance. However, the cost of this improvement is an enormous memory requirement. THe amount of memory required for an Edge target can be determined by the number of blocks, times the number of periods, times the number of edge indicators, times 8.
  • The patch shape metric has changed. The metric now computes the ratio of the perimeter of the patch, to the perimeter of a circle having the same aea as the patch.
  • The patching target now accepts a 'threshold' argument that will modify how blocks are evaluated for membership in a patch. Currently, blocks will join a patch if their patching criteria is greater than 0. The new method will test if the per-unit-area value of the criteria is greater than a user specified value. The default value is 0, which gives the same behaviour as before. Use the 'control.setPatchThreshold' method to adjust the threshold value.
  • The accounting methods were reorganized to improve performnace when multiple attributes are being added to a single account. This reorganization should yield much better performanace when multiple attributes are being added into large road or patch accounts.
  • The patching algorithm was changed to add a significant performance improvement to the measurement of large patch objectives. This change speeds up the scheduler considerable for patches that have a large number of connected polygons.
  • This build adds a new sub-target to patch targets. The new target measures the amount of criteria that is contained within the patch size class.
  • Minor changes and fixes:
    1. Added checks to prevent map viewer window from being shrunk to 0 width or height.
    2. Properly handle invalid values being typed into the TargetChart entry fields.
    3. More fixes to the SFMM translator.

October 2006

  • A new function has been added to allow control of the initial seed value used in the random number stream. The 'control.setRandomSeed()' routine will allow setting the initial seed value to a known quantity. This will allow the scheduler to use a known and repeatable sequence of pseudorandom numbers.

    By default, the random number stream is initialized with a value that is likely to be unique to each invocation of Patchworks.

  • Minor changes and fixes:
    1. Ratio accounts and Patcher accounts were not resolving properly, leading top initialization errors in some cases.
    2. Road segment attributes were not correctly lined up with shapefile attributes.
    3. SFMM translator fixes
    4. Fixed problem with duplicate accounts not being resolved correctly.
    5. Fixed a problem with the parser performing incorrect optimizations with curve arithmetic.
    6. Fixed a problem with 'Account' columns in the block table not being calculated correctly.

August 2006

  • Minor changes and fixes:
    1. Fixed an initialization problem with MetaTagets.

July 2006

  • The 'SUM' field in the 'accounts.csv' file can now be specified as a floating point number that will be used to scale attribute values prior to adding in to the account. The existing syntax continues to work, and TRUE will be treated as a scaling factor of '1', FALSE will be treated as a scaling factor of '-1'.

    Scaling factors can also be used where ever the TRUE|FALSE choice was allowed in account specifications (for example, when adding road accounts).

  • Exclusive accounts now behave as proper Targets. Previous behaviour was for the Exclusive account to subsume the summary account that was the root of the exclusive account. In the new behaviour the exclusive account still exists and can be used to set target values.
  • A new table is available the contains information about all routes in the model. The NetworkTable can be accessed using the Control.getNetworkTable() method. This table is useful for mapping information about all routes simultaneously.
  • The 'treatment.csv' file now allows a parameter to specify a curve to help calculate the post-treatment age. When the curve is specified, the post-renewal age is computed as follows:
    1. Add current age and offset.
    2. Use the value as an index into the curve, and obtain a new offset value.
    3. if 'ADJUST' is 'A', then this value is post renewal age. Otherwise, the current age is added to this value to compute the new post-renewal age.
  • The scheduling algorithm has changed slightly. Product attributes have always been allowed to have negative ages for the "future" attribute. This could be used to imply that some activity should occur before the final harvest takes place. An example would be to account for underplanting costs 20 years before a harvest. The change is that treatments will not be allowed to accrue product values prior to the first year of the simulation. For example, a treatment that implies a underplanting 20-years prior would not be eligible for scheduling in the first 20 years of the simulation.
  • Work is underway to move the Patchworks code base from older version of Java (1.4) to the latest version (1.5). Java 1.5 was released several years ago, and we have waited for the new code to stabilize. We have been testing Patchworks running under version 1.5 for several months, and now we have begun compiling the software using the 1.5 development kit. So far, only minor changes have been required, and no adverse effects have been noticed. We will begin releasing the new code as this most recent build. The new code should be fully compatible with the old Java 1.4 runtime, so no further updates are required by end users. Please let us know of any code compatibility problems that occur.
  • The data preparation toolkit now contains a translator to convert FS-SIM models into ForestModel XML. The translator converts volume, class, group, asx, regen, param, oaf and landoaf files. Many of the features of the FS-SIM model are translated automatically, but some require manual setup as targets or scheduled activities.
  • Minor changes and fixes:
    1. The join key in the access table editor will now update automatically after a script has changed the value.
    2. Fixed a problem with the Target Charts changing values when the window was hidden and restored.
    3. Corrected problems with leading blanks not be recognized in CSV files.
    4. Fixed a regression with the Composition tool opening and saving files.
    5. Increased the size of the threshold search distance in the Proximal Topology and Group Fragments tool.
    6. The Application Chooser window is now resizable.
    7. Improved the error messages that result from invalid road networks.
    8. The parser was incorrectly calculating values for attributes from spatial coverages. When a shapefile or coverage was added to the MapViewer, attributes would only display during period 0. This has now been fixed.
    9. Popup warnings are provided when files cannot be saved correctly. Previous behaviour wass that error messages were written to the console.

May 2006

  • Patchworks can now automatically generate report and map layer BeanShell codes. This means that you can create a map or report using the wizards, and easily copy the required code into your PIN file. To access these new features right-click on a report name or a map legend item.
  • Fixed a regression in the CrosstabReport that was caused by the new dynamic memory allocation strategy.

April 2006

  • Added a new tool that assists in the preparation of PIN files. See the PIN builder in the application chooser.
  • Fixed a bug in the matrix builder related to attribute cycling. The 'cycled="false"' parameter was being overshadowed by a default value that was provided to the program. This bog has been corrected.
  • The road segment attribute table now records the period when the road was first accessed. The column named "INITIAL_ACCESS" will contain a zero if the road is never used, and otherwise an integer number listing the period of first use. This column can be used to map cummulative access patterns.

March 2006

  • The road segment preparation tool has been adjusted to write files in label-sorted order (this makes debugging easier). The tool also creates an additional file named 'connectivity.csv'. This file indicates block polygons that have no connectivity to any mill (another good tool for diagnosing road network problems).

January 2006

  • A new type of account has been added to the Patchworks model. A MetaAccount sums other account values, and optionally multiple these values by a coefficient. An example would be to multiply harvest patch frequency accounts by a landing establishment cost.
  • Fix unique symbology for point themes.
  • Quote fields in TableQuery if required.

January 2006

  • The query language syntax has been extended to allow subscripts on database variables. The purpose od the subscripts is to allow direct addressing of values from periods other than the default period that the table is querying. The values of the subscript can address an absolute period (e.g. [0] for period zero), or a relative period (e.g. the previous [-1] or subsequent [+1]). When a subscript references a period that is out of range then a block or zero value will be returned, as appropriate.
  • A new mechanism has been developed to allow complex data summaries. The new class is the CrosstabStore, and it is designed to replace the DataSlice and CrosstabReport classes. The new mechanism will summarize data into a table format. The table can then be exported to CSV or DBF, or formatted using any of the available report types.

December 2005

  • The multiple-destination solver has been improved to filter out unviable options. This results in faster convergence than the previous algorithm.
  • Routes can now be displayed using the original linework from the underlying coverage. The previous display technique only used the end-points of line segments, with a straight line connecting the start to the finish. Intermediate points were not drawn, and convoluted lines were straightened. In order use this feature add a 'roadShapeFile' parameter to the PIN file that defines the location of the road shape file.
  • The default value for the caching of block shapes has changed from 'true' to 'false'. By default, Patchworks will no longer read in and cache the shapefile values. Caching of shapes helps to improve interactive display performance, but at a cost in required memory. In most cases, block caching is not a useful option.
  • The default sorting order has been changed in the target explorer and in some reports. This new sorting order is designed to allow numeric range labels to sort into order of increasing size. The previous sort order had items sorted in strict lexicographic order, thus having ordering such as '0 - 50', '100+', '50 - 100'.
  • Minor changes and fixes:
    1. Fixed a drawing error with line shapefile and coverages that caused the last point to close back on the first.

November 2005

  • The 'exclusive account' option has been reworked to perform more correctly when presented with incorrect input data. More error checking is performed and better messages are presented.
  • A new account type has been added. This account type is known as an 'exclusive dependent account', and can allow more than one type of value to be associated with an exclusive option account.
  • The SFMM translator has been updated with several new features. The translator now makes use of all 'product' proportions and will report volume estimates by product type. This will change existing models, where volumes would only be reported by species.

    The SFMM translator now fully converts selection harvest information.

September 2005

  • Unique value themes can accept an 'expression' rather than just a simple column name. This makes it possible to define thematic content that is a composite of the values from several columns.
  • It is now possible to 'lock down' the destination selection in a multiple destination model. New editable columns have been added to the block table to make this work. There are also new scenario reports that record if the selection is locked or not.
  • When you save a scenario, the report writer will also capture the state of the simulation in a series of data files (the schedule, targets, routes, etc.) Up until now these files were saved in the main scenario folder. This was confusing for new users, because many of these files were not intended for viewing. With this version these files are now stored in a separate sub-folder, named 'scenario'. The index page for this folder contains a description of the contents.
  • Minor changes and fixes:
    1. Added a new column to the block table that has the internal index number of the block. This number can be used to retrieve block objects using the scripting language.
    2. Modified the formatting in the raster remap report to suppress nonsignificant digits.
    3. Extra blanks lines were being added to CSV export files.
    4. Formatting error in Route Cost report.

August 2005

  • There is a new RasterRemap report that will recode an ASCII grid file using values from the block table. This is a handy tool for subsequent raster processing. Thanks to Dave Savage for discussion on its implementation.
  • The block table now records the track label for the managed and unmanaged parts of the block. This is useful for debugging input datasets.
  • The 'lookup' function in the Patchworks query language has been renamed to 'lookupcurve'. An additional function named 'lookuptable' has been added.
  • Minor changes and fixes:
    1. Fixed a scheduler bug that prevented the final period from receiving treatments.
    2. Added a check that shapefile attribute names do not overshadow the names that are used in the block file attributes.
    3. Added a check to make sure that invalid periods are not requested in a TableQuery report.
    4. You can edit the CURRENTTREATMENT field of the block table, and the treatment being applied will be updated. If delete the value in the CURRENTTREATMENT field, then the treatment will be cancelled.
    5. Fixed a minor bug in the PolyGrid program.
    6. Changed the vector Proximal Topology wizard so that it will only prompt for coverages.
    7. Fixed a bug in the SFMM translator that would occur when there were no rows in the 'Harvest_to_NonFor_Prop' or 'Harvest_Reserve_Prop' tables. These tables are required, but we do not need to have any rows in them.
    8. Changed the Route attribute table so that it now shows the amount of volume that was added on to the segment from an adjacent harvest, as well as the cummulative volume hauled over the segment.
    9. Changed the RouteCost report so that it now computes the averge haul distance.
    10. Changed the DBFWriter class to be able to select the period of interest to export. The previous version always exported the default period that the table was set to.
    11. There was a bug in the DBF export routing that caused the first few columns of the DBF file to be exported, no matter which fields were selected. This has been corrected.
    12. Changed the behaviour of the Matrix Builder so that it now allows feature curves to have negative ages. This could be used with negative stand ages to describe pre-renewal conditions.

July 2005

  • The PolygonSplitter tool can optionally use a hexagon grid to split large polygons.
  • Minor changes and fixes:
    1. Additional documentation has been added to describe the various reports available within Patchworks.
    2. The report writer now has a graphical user interface for all report types (except the CrossTab report). This new feature will let you define a new report interactively by filling in the fields of a wizard. To access this new feature use the mouse to 'right-click' on one of the folders in the report explorer pane.

June 2005

  • The composition tool now has a tool to change the display order of elements on the canvas. You can raise or lower elements so that they appear in front or behind other elements. You can use this tool to put a border around a group of elements, or to put a logo or watermark in to the background.

    You can also copy a picture of the currently selected element on to the clipboard, and then paste that image into other applications such as word processors or presentation packages.

  • Minor changes and fixes:
    1. The Block builder algorithm received some fine scale adjustments to help it create more compact shapes. Previously the algorithm had a tendency to allow 'checker board' polygons. The new version is much less likely to allow this. Checkerboards will occur if the size penalty factor is large relative to other objectives (such as haul costs).
    2. The Dissolve utility in some circumstances was incorrectly creating more than one shape for each dissolve item. This has been fixed.
    3. Added extra handling of special characters in chart labels. Some characters were causing invalid JavaScript to be formed, and had to be converted into entities.
    4. Report navigator should now work with all recent versions of Internet Explorer.
    5. More documentation added for data prep tools.
    6. Fixed PolygonSplitter bug that resulted in extraneous line segments being added to polygon files.
    7. Add check for polygons with duplicated labels in Patchworks.
    8. Fixed a problem in the 'Export to DBF' command that would cause Patchworks to get hung up.

May 2005

  • A new tool has been added to the data prep toolbox. The Majority raster tool helps compute the overlap between a zone coverage and a base polygon coverage. This tool uses a raster algorithm which is a little less accurate, but more convenient since there is no need for a vector union operation. See the command reference for more information.
  • The command reference section of this User Guide has many more entries for the data prep tools. We have also started to link up the help buttons in the wizards to the correct online help page.
  • The BeanShell interpretor included with Patchworks has been upgraded to version 2.0. This brings the version used in Patchworks in line with the official documentaion on the BeanShell web site.
  • The Map Viewer symbology selection controls have changed significantly. They now have greater flexibility to control all of the symbology options that are available within the Map Viewer.
  • Minor changes and fixes:
    1. Fixed a bug reading CSV files where some records had too many columns.
    2. There was a floating point imprecision problem in the centroid calculation algorithm that was causing a problem with tiny polygons. This problem showed up in the map viewer and also in the raster proximal topology tool.

April 2005

  • The wizards used in Patchworks now allow drag-and-drop operations where ever a file name is required. You can select files in the Windows Explorer, and then drag them on to the file entry fields of the Wizard.
  • Minor changes and fixes:
    1. Fixed a bug in the composition tool that caused incorrect scaling calculations when scenario rows were being rearranged.
    2. Changed the RangePeriodReport and PeriodValueReport to allow an array of period numbers as a specification for the periods to be reported.

March 2005

  • The behaviour of some reports have changed. Many reports previously accepted a column 'prefix' parameter that was used to select columns to be included in the report. All columns that started with the prefix would be included. This has now changed to become a prefix pattern specification. The pattern is allowed to have '*' and '?' wildcard symbols to match any string or any single character respectively. The pattern will be tested against each column name, and matching columns will be selected. The pattern automatically includes a trailing wildcard, so the previous 'prefix matching' behaviour is automatically maintained.
  • The 'Group Fragments' program has changed again. The program now operates interactively. There are a range of parameters that can be adjusted to control the grouping behaviour. The results of the grouping can be viewed dynamically using a 'Map Viewer' interface. The program does not terminate automatically. Instead, you must save the results when you are satisfied with the allocation that has been formed.
  • A check was added to the Sylva-II translator to catch polygons that referenced undeclared compartment and territory codes.
  • The SFMM parser had a minor problem reading the supplemental seral stage table. The previous version 'feathered' the seral stages over a 10-year period centered at the mid-point of the 10-year age classes. The new version correctly has the transitions occuring over a 1-year period.

February 2005

  • Fixed a small bug with the Sylva2 translator, that the Wizard was not being display from the application chooser.
  • The 'Group Fragments' command has changed slightly. You must now provide a topology file to program that describes polygon neighbour relationships. This topology file must be prepared with the raster or vector Proximal Topology tools. The purpose for this change was to allow the blocking program to consider grouping fragment polygons that were not strictly adjacent, such as those separated by a narrow seismic line. This change was requested by Burck Hantel of AlPac.

    When building the topology file on the fragment dataset you must be sure to use the polygon id field that you intend to use in the 'Group Fragments' program.

  • The 'Build Road Segments' program has been changed. You must now specify a column within the road shapefile that will contain the road segment label. This change was made so that road output files will have a user-specified join key that can bring Patchworks output data back into ArcView or ArcGIS processing environments.
  • Add a new feature to the Woodstock translator, at the request of Bob Christian of TFC. The translator will compute partial harvest values as the difference between pre-treatment product curves and post-treatment feature curves. This will occur if product and feature curves are provided in the yield file, and the '*PARTIAL' keyword is used.
  • Fixed a problem in the Woodstock translator related to partial harvest. Partial harvests now work correctly and the translator will provide more details about the substitutions that are being used. Also changed the translator so that the "_LOCK" parameter is correctly applied on the *TARGET line.
  • The method used to display charts in the report writer has changed slightly. Charts are now displyed using a Java applet. The applet supports zooming and data value display. Try right-clicking on the chart to get options. A side effect of the applet is that your browser will prompt you to allow the applet to perform trusted actions. This is only required to copy images and data on to the system clipboard. If you want to be able to copy and paste data from the chart applet then reply 'Yes' or 'Always' to this prompt.

January 2005

  • The GUI configuration script is loaded from the 'startup.bsh' file located in the 'scripts' directory. You can modify the GUI layout of Patchworks by copying and editing this script. Make sure to save a copy of your changes in a safe location so that they do not get overwritten when you install an update.
  • Patchworks will now operate in a 'Viewer only' mode if it the hardware key is used on an unlicensed workstation. Viewer mode will allow you to prepare and inspect datasets, and create reports, but the scheduler is not available.

December 2004

  • The patching algorithm has been adjusted to more rapidly seek better solutions to large patch size objectives. Initial tests show that the new algorithm is effective in this regard.
  • The patch shape metric algorithm has changed. The patch shape target computes a value that is the ratio of the total patch area, to the area of a circle with a diameter that is the same as the length of the patch edge. The ratio is multiplied by 100, and has a range of 0 to 100. To have the patcher attempt to generate compact patches specify a shape target of 100 with a high weight value.
  • Some reports now show the year of the simulation, rather than the planning period number. The year shown is the final year of the planning period.
  • The road network model has been adjusted to seek better solutions to multiple-destinations problems. The new algorithm does a better job of finding shared least-cost routes. Convergence times may appear to lengthen due to the greater number of performance improving options that this new algorithm produces.
  • The Targetable interface has been renamed to the Target interface. Along the same line the methods in the Control class have been rationalized and documented. A few redundant methods have been eliminated (setTargetLinear(), setTargetDiscoutRate()). You must now access these methods from the Target class. For example, the old technique was
      control.setTargetLinear("net.value", true);
      control.setTargetDiscountRate("net.value", 1.03);
    and the new technique is
    All scripts in the library have been updated, but older custom scripts may require changes.
  • Minor changes and fixes:
    1. Fixed a bug with the
    2. The column names in the timing constraints table have been changed to conform to proper variable name syntax. Previously the column names were simply the period number of interest, now they are period number prefixed with the word "PERIOD".
    3. The main class for the Patchworks application has changed to ca.spatial.patchworks.Patchworks. This change was made to facilitate better documentation of the classes and methods to control Patchworks. See the API documentation for further information.
    4. The Patchworks console had a bug where a stray interruption request would crash the application. This has been corrected so that stray interruption request are now safely ignored.

November 2004

  • The ReportWriter has been given a new appearance and is easier to navigate. The appearance of the reports (fonts, colours, background images, etc) can be customized using a CSS stylesheet (located in the 'lib/html' folder of the Patchworks installation). If you customize this file be sure to save it somewhere so that it does not get overwritten the next time you upgrade Patchworks.
  • Account values have been added to the block table. Account values will show the result of combining attributes according to the entries in the accounts.csv input file. Simple accounts that sum a single attribute having the same name will be excluded. These additional account columns will be given a prefix of "Account.". You may change the default prefix by setting a global variable in the PIN file named blockAccountPrefix.
  • Table viewers now support direct editing of attribute values. Only fields that are eligible for editing can be modified. Fields that allow editing have their column heading displayed in a plain font, those that do not allow editing are displayed in an italic font.

    You can make edits by typing directly into the cells of the table, or by using the 'Calculate field value' menu item.

    The 'AVAILABLE' and 'CURRENTTREATMENT' fields of the block attribute file are available for editing, as well as all attributes in cached files.

    The Dbase attributes of a shapefile may be edited if the file is unlocked for editing. This is performed by selecting 'Start editing' from the edit menu. Use caution while editing Dbase attributes, because the changes are written directly to disk and cannot be undone. Make sure not to use the shapefile simultaneously in other applications (e.g. ArcMap) as corruption may result. Also take care to stop editing when you are done to prevent loss of data.

    Cached shapefile attributes may be altered, but the results will never be saved to disk. If you want to alter the on-disk dataset be sure to disable caching (specify 'useBlockCache = false' in the PIN file).

  • You can add shapefile and coverage layers to the mapview using a 'drag and drop' operation. To do this first select the appropriate file or directory in the windows explorer, drag to the map view panel, and release. You can drag and drop multiple files simultaneously.
  • Minor changes:
    1. The scheduler has been adjusted to increase convergence speed in wider range of situations.
    2. Table headings will now show a tooltip that gives the full column name. This will help when the column heading is so long that all of it does not fit in the heading.

September 2004

  • Major updates to the Sylva-II translator.
  • The HTTP server inside Patchworks will make a best attempt to open a port to serve up reports. Previous versions would simply fail if the requested port was already in use (perhaps due to a version of Patchworks already using the port). This could result in problems where reports would be obtained and displayed from the wrong version. The new version will try a number of alternate TCP ports.
  • Some reports will no longer show up on the index page of the report writer. In particular, CSV file reports that contain internal model data, such as the schedule, route, and available block files will no longer be displayed in the index. These files will still show up in the report selectors, and will still be saved on disk.
  • The Composition tool has been overhauled to make it easier to use. The toolbar has been streamlined, and shows the default working directory.

    The 'Comparison' composition item now has a new Indicator type. The new 'Label' type can display text or images that are specific to each scenario. The Label uses HTML markup, so it is possible to create customized presentations of tables and GIF files.

  • Minor changes:
    1. Fixed a problem in the SFMM translator with shelterwood treatments.
    2. Fixed the sorting order of features in some displays, such as the Target panel.
    3. Numeric range mapping themes now allow negative numbers. As well, the label will automatically update when a new range has been set.

August 2004

  • New reports have been created to describe the assignment of products to destinations.
  • The block table now contains columns that show the assignment of products to destinations. This will show up if you have a multiple destination formulation. This makes it possible to map out the blocks that are assigned to each destination.
  • Several changes have been made that affect the interaction between route and exclusive accounts. Exclusive accounts will now check each block to see which options are eligible for application. In general, blocks are always eligible to be asssigned to summary accounts, but can only be assigned to route accounts if there is connectivity to the destination. If there are no eligible options to an exclusive account (if all options are routes, and the block does not have connectivity to any destination) then a warning will be issued. In this case the values will not be added to any option. Previously the values would be added to route accounts even if connectivity did not exist.
  • Two new tuning parameters have been added to the ForestModel element. These control the maximum number of successional transitions that will be attempted, and the maximum number of rotations that the Matrix Builder will examine within the specified forecasting horizon. Check the ForestModel XML reference for further details.
  • The cost tables that were produced by the 'Build Road Segments' command were not properly taking road direction constraints into account. The previous version assumed that all roads had two-way travel abilities. This has been corrected. The Patchworks road accounts are not affected.
  • There are new scripts for filtering CSV files into temporary files. These routines can be useful to extract just a subset of information for input into Patchworks (for example, part of a harvest schedule, or only a subset of treatments). You can use this in the PIN file like the following example:
      treatments = filterCSV("treatments.csv", "TREATMENT ne 'UP'", tempFile());
    This will extract all treatments except the 'UP' treatments, store them in a temporary file, and set the treatment file name to this new file. After the Patchworks program has finished the temporary file will be deleted.
  • The query lanuguage has a new function named 'MatchGroup' that is used for regular expression matching and extraction. Check out the query language reference for details.
  • A new tool has been added that provides an interactive console window. This console is useful for executing data preparation scripts. You can double-click on BeanShell scripts to have them executed by this interpreter.
  • The target selector panel now show an indication of the target status: green for active and red for inactive. By right-clicking on a target you can change the target status.
  • The report wizards now use a better visual editor for additional text.
  • The Matrix Builder was not operating correctly with blocks containing multiple fragments, when the fragments had different succession timings. The incorrect version would generate fewer treatment timings than it should have. This error has been fixed.
  • The way that the SFMM translator handles habitat tables has been changed to identify timings more precisely, rather than rounding them to the closest 10-year age class.
  • The Composition tool now has a better visual editor for labels and annotations.
  • Minor changes:
    1. Improved error messages in the Timing Constraints editor.
    2. The algorithm that allocates space for the patching data structures has been changed to adaptively add space as required.
    3. An empty <succession> element can be used to indicate that no succession rule applies. This can be helpful to explicitly reduce the number of error messages coming out of the Matrix Builder for cases where succession rules are unavailable or unnecessary.
    4. Some of the error messages in the Matrix Builder have been clarified.
    5. The Matrix Builder did not properly handle succession rules that did not advance the age of the stratum (for example, when the renewal age was the same as the breakup age). Although the output was correct, the error messages were confusing and much extra work was occuring internally than required.

July 2004

  • The Composition tool now saves output as a PDF file, instead of PostScript. This should be more convenient for printing and viewing. As a result, the paper size names have changed. If you load a saved composition you will have to reset the paper type.
  • A new report is available to describe patch statistics. The PatchReport will classify the landscape based on a patching criteria expression, and an array of RangeLabel's that describe and label the size class breaks. This report does not require patching accounts, so it does not cause the model to increase in size. The report will generate the usual GIF, HTML and CSV outputs.
  • The block table now will include a column that provides a patch identification number. Each block that belongs to the same patch will be assigned the same number. Blocks that do not belong to patches will be assigned -1. The actual values of the identification numbers are arbitrary.
  • There is a new animation tool in the Application Chooser that will compose a series of still images into a GIF animation. There are new scripts available to invoke this tool from the scripting environment.
  • MapReports now display legend information.
  • The semantics of RangeLabel's has been refined. A RangeLabel now includes all values greater than or equal to the lower limit, and all values less than the upper limit.
  • The RangePeriodReport now accepts an expression for the classification value. Previously a column name was required. This report has also been generalized so that any array of Comparable's can be used to define range catagories.
  • The elements within a DitheredTheme are now evaluated as expressions, instead of simply as column names. The usual expression syntax applies.
  • The Woodstock translator has been adjusted to accept decimal numbers as the first parameter of a yield curve description (describing the initial period number of the yield curve). Previously the translator would reject any line that had a decimal point in this parameter. The console output from the translator has been reduced so that errors are more prominent. File and line numbers are also printed on error messages.
  • The method of determining distances in the ProximalTopology tool has changed slightly. Distances are now computed as the shortest distance between any edge or corner of one raster cell to the closest edge or corner of another raster cell.
  • Minor changes:
    1. The Matrix Builder was ignoring the 'cycled' attribute. It is now handled correctly.
    2. The Matrix Builder behaviour has changed slightly for blocks that have no matching track statements. These blocks will now get assigned to a unmanaged track, where as previously they would be dropped from the analysis.
    3. Fixed problem in Matrix Builder related to early operability ages before age 0. The Matrix Builder was preventing negative operability ages.
    4. Improved performance of Timing Constraints editor and reload scenarios procedures.
    5. Fixed zooming to the extent of a selected layer.
    6. Allow Matrix Builder to evaluate constant expressions once only and store the results. This can speed up processing significantly in some situations.

June 2004

  • There is a new utility class 'ca.spatial.util.Zip' for making zip files. This is useful in analysis scripts to automatically zip up result datasets. There is also a corresponding 'makeZip' script.
  • The route tables now contain the value of the RDTYPE field, if it is present in the input segment file. The OutputSegments program has also been changed so that it will copy the RDTYPE field (if present) to the segments file. You may need to regenerate your segments file to get the benefit of this change.
  • The ReportWriter can print reports using French language strings.
  • The coverage reader now skips over 'dangles' in polygon datasets.
  • The patching objectives now have sub-accounts for frequency by patch size as well as a special sub-objective named 'attractor'. The attractor sub-target works to draw the average patch size of all patches (in all size classes) towards the range of the selected target. This sub-objective can be used to encourage the formation of large disturbance patches. You should not activate more than a single attractor at a time, usually in one of the larger size classes.
  • A new application has been added that calculates inventory forecasts based on the original inventory polygons (instead of the 'blocks' used in Patchworks). The application is named FragmentMapper, and requires the original fragment file, the ForestModel XML file, and a harvest schedule. The output of the program is a CSV file that can be joined back to the original inventory.
  • With help from Rob Rempel, we have developed an ArcView extension (the Patchworks Data Import Wizard) that can be used to easily load Patchworks data into ArcView. This can be very helpful if you are using ArcView to map out results or for other analytical tasks (e.g. Patch Analyst). Contact us for a copy.
  • We have added wizards that allow a simple run-time definition of reports. To access the wizards right-click on any of the reports or folders in the report tab. This also works for Comparison reports. We have also modified the report writer so that it emits additional meta-data describing report contents. At the moment the only application that uses this meta-data is the new ArcView extention.
  • The Table Viewer now includes a few ad-hoc summary tools. One is similar to ArcView, except that categories and cell values are specified as expressions. The other is a sorted x-y chart that is useful for examining distributions of data values.
  • Patching objectives have been overhauled to work more effectively, especially when several overlapping patching objectives are used in combination.
  • A number of changes were made to the Matrix Builder application:
    1. Expression attributes were ignoring the 'factor' values. For example,
        <attribute label="value" factor="0.5">
          <expression statement="curve(0,1)" />
      The 0.5 reduction factor would have previously been ignored. This has been corrected.
    2. Treatments that were applied after a succession event had occurred were getting an incorrect treatment response age. This has been corrected.
    3. Expressions can now include the results of other expressions.
    4. Some fragments were incorrectly being grouped together. This has been corrected. If you rebuild your input matrix you will notice that files sizes will increase as a result.
    5. It is now possible to specify the age range to be used to group fragments together, using an additional ForestModel attribute ("fuzzage"). The default value of fuzz is 5. Reducing the value to 0 will create input datasets that are larger, but have less averaging.

      Similarily, the "fuzzpct" attribute will control the way blocks with varying percentage combinations of strata are grouped. The default value is 100, which means that strata are rounded off at the closest percent for testing similarity. If you increase this value the datasets will become larger but will have less averaging.

    6. There were several other minor corrections and improvements to error messages.
  • The Patchworks scheduling heuristics have been altered to improve end-game performance. This should result in slightly improved solving times.
  • The map viewer is able to display segment direction using arrowhead symbology. This is implemented as another option within line symbology.
  • The routing attribute tables now include a column indicating the direction of flow along the road segment. A value of '1' indicates forward, '2' indicates reverse. This feature can be used along with the arrowhead symbology to show the direction of flow towards destinations.

October 2003

  • The CSV file reader handles quoted strings more like Excel.
  • Several small fixes to the Woodstock and SFMM translators and the Model builder.
  • The expression parser and model builder have been modified to perform 'curve' arithmetic. Curves can be added, subtracted, multiplied, divided by other curves or numeric constants.
  • Fixed a small bug in the OutputSegments tool that caused last few lines of output files to get discarded.

September 2003

  • The Report writer has been reorganized somewhat. You can right-click on the items in the report writer panel to add and remove reports, and to adjust the properties of reports. Not all reports have been updated to allow their properties to be adjusted.
  • A new cross tab report has been defined that provides more flexibility in getting arbitrary summaries.
  • A new selector has been added to the Comparison report writer that allows scenarios to be added or removed from the list of comparisons.

July 2003

  • The expression parser now handles 'curve' functions. These can input curves and interpolate points along a curve. Also, the model builder has a new expression element that can be used to define an attribute curve using a complex expression.

June 2003

  • The application launcher has been reorganized and can now specify the requested VM size.
  • Patchworks is now distributed with an installer that installs the software and creates shortcuts in the start menu. Documentation is also installed, as well as an 'Uninstall' tool.
  • The model builder and Woodstock conversion tool have been improved. The model builder provides better diagnostics and corrects several errors.
  • Several new sections have been added to the documentation.

February 2003

  • Numerous small bugs have been fixed.
  • The scheduler has been improved and now seeks better solutions more aggresively.
  • A console window has been added to simplify the scripting of analysis tasks. It is possible to write scripts that change parameter values, start and stop the model, and save output. You can use this facility to automate a a lengthy process, allow it to run unattended overnight or over a weekend.
  • A tool has been added to help in the interpretation of simulation performance. See the 'performance table' under the edit menu.
  • Patchworks now has an XML-based language to describe forest dynamics (growth and yield, succession, management actions and responses).
  • A number of data prep tools have been added into the software distribution. These input topology building, Woodstock and SFMM translation, lattice generation, road matrix construction, and growth and yield matrix construction tools.
  • A proto-type tool is available for the creation of poster-sized output from simulation results. This tool is in alpha status and is subject to change. It is strictly provided on an 'as-is' basis.
  • Arc/Info coverage support is complete.

September 2002

  • The symbology system has been upgraded. All symbology options are now available through the user interface, including label symbols, transparency, and scale thresholding. New symbol types include gradient paint and texture paint.
  • A new theme type is available to symbolize dither patterns based on the realtive values of multiple attribute columns. This type of theme is useful to show changes in composition over time (e.g. species, cover type, seral stage).
  • MrSid images have an option to assign a color that should be treated as transparent.

August 2002

  • Reports can be generated from within the TableViewer. These are the same reports defined in the ReportWriter, however the content of the reports is restricted to the selected records.
  • The MapView now has options to zoom to selected features, zoom to the previous extent, and to zoom to the extent of the selected layer.
  • The expression parser now allows a JSP-style syntax. In this syntax all content by default is treated as a literal string. JSP-style tags '<%' and '%>' are used to enclose SQL-style expression strings. This type of syntax is much more convenient for building HTML strings required by the LabelSymbol.
  • Online documentation is available for the TableViewer and MapViewer .

July 2002

  • The table viewer has been updated to support sorting on columns, hide/show columns, export to CSV. Several bugs were fixed relating to the selection mechanism.
  • Input data can be read from relational database systems (e.g. MS SQLServer, Oracle) as well as from CSV files.
  • The MapViewer now has preliminary support for displaying Arc/Info coverages.
  • A query builder GUI has been added to simplify the composition and execution of queries.

June 2002

  • Patchworks is now using a more conservative memory allocation scheme. This means that large model formulations now fit within a smaller memory footprint.
  • Variable width planning intervals are now supported. It is possible to specify the width of planning interval in years using the Horizon.setHorizon command in the PIN file.
  • Additional diagnostic tools have been added to help check input data set and data relationships. Many of these diagnostic tools are available through popup menus in the map viewer. To access these tools select a theme in the legend box and then click on a feature using the right mouse button. Diagnostic tools on the block layer include:
    • View and edit treatments. Explore block level information including growth, yield and silvicultural treatments.
    • Select neighbours. Browse adjacency relationships between blocks.
    • Select route to mill. Highlight the route used to deliver products to a mill destination.
    • Show patch statistics. Show information about the patch associated with a block.
    Diagnostic tools for Route layers include:
    • Trace route to mill. Print out the connected segments ids and cummulative product flows.
    • Select all connected segments. Selects all of the segments that have network connectivity to the selected segment.
  • An account and attribute explorer has been added under the 'Tools' menu. This tools assists in identifying all of the attributes that have been loaded in the input data sets, the accounts that have been set up using those attributes, and the groups that have been defined across the forest.

Spring 2002

  • Patchworks now includes routing and road location capabilities. Candidate routes link blocks to destinations, and the scheduler will attempt to select routes that minimize factors including hauling, construction and maintenance.
  • ErMapper compressed ECW images can be displayed with the map viewer.

December 7, 2001

  • Added a performance meter to display the progress of the optimizer. The meter is located on the new "Performance" panel. The meter is red when schedule is being improved rapidlly, and changes to yellow then green as the solution converges and no further progress is being made. This feature was requested by Bob Christian.
  • Added an option under the "Windows" menu to open all active targets at once.
  • The target charts can now display periodic or annualized values.

December 5, 2001

  • Added synchronization to the table and chart views of the targets so that they are simultaneously updated. This feature requested by Bob Christian.
  • Changed the target chart GUI so that it is now hopefully more obvious how to use it.
  • Added a feature to list all active targets. This is a sub-menu located under the Windows menu, and makes it easier to see exactly what is controlling the simulation. This feature was requested by Jeff Beale.

November 23, 2001

  • You can now restrict access to the web server using a username/password authentication mechanism.

November 19, 2001

  • Added additional documentation: Release Notes (this document), Frequently Asked Questions, Technical Support.
  • Fixed a bug in the MrSid viewer that occurs on multi-processing computers.
  • Patchworks now requires version 1.4 of the Java Runtime Environment. You may download this at no charge from Sun Microsystems.