nat 1.7.0
=========
* implement extraction/replacement of the data.frame attached to a neuronlist
  using the [ operator (#217)
* fix xform of image data (#143, #199)
* implement handling of inverted (swapped i.e. reference to sample) 
  registrations in xform(image) (#199)
* normalise handling of registration sequences and inversion in 
  xform/image/points (all 3 expect reg to be in sample to ref order and for any
  individual registration to be marked with swap=T if it is ref->sample)
* read.nrrd no longer returns an im3d (use read.im3d) (#238)
* teach write.nrrd to handle more diverse inputs (including #242)
* add reading of detached nrrds (#236, #237)
* add ability to write detached nrrds
* add ability to make a detached nrrd from a compatible amira file on disk (#243)
* new function is.im3d
* fix cmtk.targetvolume for templatebrain objects (#241)
* fix cmtk.targetvolume for --target-grid specification (#240)
* fix names for [.neuronlistfh with null df (#250)
* plot.neuron can cope with some NA coordinates
* teach plot.neuron(list) to cope with NA points (#247)
* boundingbox has an na.rm argument (#246)
* teach droplevels.neuronlist to use extra arg (#249)
* teach plot.neuron to plot soma (#245)
* fix cmtk.call for numeric args (#235)
* set read.hxsurf RegionChoice="both" by default
* document return values of cmtk.statistics in more detail (#252)
* support for igraph 1.0 (#248)

nat 1.6.6
=========
* Fixes description capitalisation/quoting for CRAN
* Adds ability to write dotprops neuron objects to SWC format (#233)
* fixes bug in xyzmatrix.neuron for single point neurons (#234)
* likewise for xyzmatrix.default for 1-row >3-col matrices

nat 1.6.5
=========
* add xyzmatrix get/set methods for class mesh3d along with xform.shape3d. This
  should enable rgl::mesh3d objects (used in a number of other packages) to be
  transformed using CMTK registrations.
* add tail.neuronlist
* add as.data.frame.neuronlist for convenient generation of a data.frame from a
  neuronlist
* add help topics for generics subset and plot3d so that e.g. ?subset will give 
  the option to see our documentation as well as base docs.
* subset.hxsurf drops unused vertices by default
* add sample surface object of mushroom body
* teach cmtk.statistics to handle imagetype == 'label' (#221)
* plot.neuronlist sets axes based on boundingbox of all plotted neurons, not just
  the first neuron (#223)
* plot.neuron(,AxisDirections) argument is re-implemented (#224)
* don't warn when read.neuronlistfh changes the directory location on disk (#157)
* remove superimposed plots in mirror example (hope this will fix build on 
  macosx snowleopard)
* teach read.neurons to OmitFailures when reading in a neuronlistfh object.
* fix handling of default colours in plot.neuronlist and plot3d.neuronlist (#230)
* fix plot3d.neuronlist returns one element per neuron
* fix bug in xformpoints.cmtkreg when some points could not be transformed - 
  now give NAs as expected (#227)
* fix bug when xform(na.action='drop') dropped dimensions when only 1 valid 
  point resulted (#228)
* teach xyz.matrix<- to work for bare 3 column matrices (i.e. without colnames)
* fix bug in xformimage where input image was not being passed on when 
  transforming with a matrix.
* read.hxsurf can accept RegionChoices='both' (see ?read.hxsurf)
* fix: unary -.neuronlist behaves
* docs: numerous minor doc/example improvements
* dev: improvements in test coverage (up to 84%) catching numerous small bugs in
  the process.

nat 1.6.4
=========
* Edits to package description for CRAN

nat 1.6.3
=========
* fix invalid url in README.md noticed by r-devel/BDR

nat 1.6.2
=========
* add as.im3d.matrix which allows conversion of a Nx3 matrix of coordinates into
  a volume representation
* add ability to use a neuron's StartPoint in the spine function that finds the 
  longest path (aka backbone or spine) of a neuron
* fix xformimage's handling of in-memory registrations
* fix bug in read.hxsurf docs
* dev: add coveralls code coverage support
* dev: fix use of require in package code (a new note from r-devel)
* dev: fix a cmtk-dependent test that was not guarded against cmtk's absence

nat 1.6.1
=========
* add ability to transform images (specified as path to a file)
* register image file formats to use with read/write.im3d
* register amira types including linesets, surfaces and landmarks
* add ability to read neurons from remote url
* add support for applying multiple registrations in xform.neuronlist, as well
  as vectorisation (where each registration is applied to a different object)

nat 1.6.0
=========
* Add support for reading NeuroML and Fiji Simple Neurite Tracer neurons
* recognise SWC neurons by content (rather than just file extension)
* can write a set of neurons to a zip archive (?write.neurons)
* getformatreader returns name of identified format
* Give find.soma and find.neuron invert arguments
* internal function normalise_swc sets sensible defaults for column values (and 
  these can be overridden from some user functions).
* fix resample.neuron so that it keeps all subtrees and handles width and labels
* fix seglist2swc when receiving flat seglist
* ngraph attaches vertex data to each point and now includes diameter
* fix is.nrrd for raw input
* fix node colours in plot3d.neuron when WithAllPoints=TRUE

nat 1.5.14
==========
* add nlscan function to review a set of neurons, optionally selecting a subset
* add find.soma function to select neurons whose cell bodies fall within an rgl
  seelection box (thanks to Ben Sutcliffe).
* add setdiff, intersect and union generics with implementations for neuronlist
  objects (note this is done in more or less identical fashion to generics
  defined in the dplyr package).
* give write.neurons a format argument to make it more obvious that this is an 
  option rather than pointing people to the write.neuron docs (suggestion from 
  Ben Sutcliffe)
* teach as.neuronlist to handle inputs with empty (rather than NULL names)
* simplify calculation of inertia in dotprops
* minor doc fixes and clarifications

nat 1.5.13
==========
* mat2dof output gets descriptive rownames
* ndigest.neuronlistfh only uses 2 key fields (keyfilemap and df)
* fix bug in locating cmtk when only the cmtk wrapper script is in the path
  (spotted on neurodebian with /usr/bin/cmtk)
* fix bug in compound registrations when CMTK <3.2.2
* fix rgl import errors on r-devel
* switch from RANN to nabor package for finding nearest neighbours
* dev: update help to roxygen2 4.0.2

nat 1.5.12
==========
* fix bug in updating neuronlistfh objects from remote url
* nlapply now has options for progress bars and parallelisation by using the 
  plyr package under the hood.
* c.neuronlist can now join lists with attached data.frames with different 
  columns (missing values are filled with NAs). This also applies when some
  neuronlists have no attached data.frame at all.
* read.neurons can read neuronlist files from disk
* cmtk.statistics now has a Verbose argument
* warn if resmapling a neuron with multiple subtrees that only the main subtree
  will be kept.

nat 1.5.11
==========
* add cmtk.statistics function
* fix infinite recursion in cmtk.targetvolume

nat 1.5.10
==========
* fix: write.neurons subdir argument can accept a column of the attached
  data.frame (unquoted)
* fix: write.neuron(s) can add an extension to an output filename that does not
  have one
* write.neurons now has an explicit files argument
* cmtk.targetvolume (and therefore cmtk.reformatx) can accept e.g. 
  templatebrains (as contained in nat.flybrains package) to specify target 
  image for registration.

nat 1.5.9
=========
* fix transformation of points using compound CMTK registrations
  (this was broken for CMTK<3.2.2, so a workaround is required).
* Add cmtk.version function.
* xyzmatrix can cope with lower case x,y,z for column names
* doc: fixes in xform

* dev: fix test for winbuilder

nat 1.5.8
=========
* Add boundingbox.list method to find boundingbox for neurons, surfaces etc
* nmapply and nlapply get OmitFailures arguments
* nlapply also gets a subset argument
* both arguments are also added to xform/mirror.neuronlist
* dotprops.neuronlist also gets the OmitFailures argument.
* fix subset.neuronlist handling of numeric indices
* minor bug/doc fixes

nat 1.5.7
=========
* teach plot3d.neuronlist and friends to plot soma locations.
* add npop3d function to remove last plotted neurons 
  (identical to flycircuit::pop3dfc, except that it works with any neurons
  plotted by plot3d.neuronlist, rather than only those plotted by plot3dfc)

nat 1.5.6
=========
* give mirror/xform.neuronlist subset arguments
* add plot3d.boundingbox
* give plot(3d).neuronlist a SUBSTITUTE argument that can be used to control
  non-stadard evaluation. This is useful for people who wish to incoroporate
  these funcitons inside other user-defined functions. See ?subset.neuronlist
  for details.
* fix: write.neurons into subdirs when df=NULL

nat 1.5.5
==========
* fix bug in reading swc files with many decimal places specific to R 3.1.0
* fix bug in header when writing swc files [ajdm]
* read.im3d now adds file as an attribute to output
* read.im3d can now add amiramesh files without the standard file extension
* doc: minor improvements to read.im3d docs and examples

nat 1.5.4
==========
* remove internal is.gzip function and depend on nat.utils >=0.4.2

nat 1.5.3
==========
* new function pointsinside to determine if points (e.g. neuron) are inside a
  closedd surface
* resample.neuron implemented (no support for interpolating widths or multiple
  subtrees)
* dotprops.neuron can resample to a consistent segment length
* consistent return values for as.seglist and seglengths when all subtrees are
  returned
* seglengths can return lengths for each edge as well as the sum for each
  neurite segment (the default)
* suppress remote tests if flybrain unreachable
* zenodo DOI for package

nat 1.5.2
==========
* add seglengths function for neurons
* add segmentgraph function to produced a simplified graph representation of
  neurons with one edge per segment
* add potential_synapses.dotprops method
* add as.seglist.neuron method 
* teach plot3d.hxsurf and subset.hxsurf to accept regexes
* always drop unused vertices in as.mesh3d.hxsurf
* fix bug in write.neurons when subdir not specified
* fix colouring of vectors by plot3d.dotprops
* dev: switch to roxygygen2 v4

nat 1.5.1
==========
* add potential_synapses (from nat.as)
* surfaces: add subset.hxsurf and as.mesh3d
* Teach read.im3d to read Vaa3d raw format
* add plot.neuronlist (for 2d plotting)
* add c.neuronlist function to combine neuronlists
* add db argument to plot3d.character
* make WithNodes=FALSE the default for plot3d.neuronlist
* make asp=1 the default for image.im3d
* write.cmtkreg warns if versions specified by cmtkreg attribute and argument
  differ (to avoid writing old registrations as if they were new or vice versa)
* fix: prune.neuronlist method signature (and therefore dispatch)

nat 1.4.10
==========
* add function to prune objects by removing points close to or far from another
  object
* add nmapply function for neuronlists
* add xyzmatrix method for neuronlists
* add materials function with methods for im3d and hxsurf objects
* enh: read.im3d can read materials from amiramesh files
* enh: download neurnonlistfh objects to session temp directory if no localdir
  is specified
* fix: find CMTK in its new default location on macosx
* fix: plot3d should skip redrawing if par3d() skipRedraw is set
* fix: failure to export ngraph constructor function
* fix: set NeuronName when no InputFile argument is passed to neuron
  constructor
* fix: im3d axis labels
* doc: numerous small documentation improvements

nat 1.4.9
=========
* add spine() function to find longest path (aka backbone) of a neuron
* give ngraph (and therefore as.ngraph methods) a weights argument so that 
  resultant ngraph objects have edge weights defined by segment lengths.
* add as.im3d generic and as.im3d.im3d method
* fix bug in setting graph attributes in ngraph

nat 1.4.8
=========
* bugfix: ensure ind2coords.im3d is exported

nat 1.4.7
=========
* add ability to make a dotprops object directly from an image file on disk or
  an im3d object in memory.
* port ind2coord, coord2ind and sub2ind functions from AnalysisSuite
* fix clampmax function so that it removes Infinite values
* fix reading of gzip encoded amiramesh files
* fix mirror so that dotprops are recalculated for a simple flip
* make plot(3d).neuron colour settings more consistent
* simplify axis handling in plot.neuron
* dev: build nat.flybrains (as well as nat) after flycircuit build

nat 1.4.6
=========
* fix bug in handling vertexData argument in as.neuron.ngraph
* fix test error on Solaris (thanks to Brian Ripley)
* dev: fix remaining warnings in tests

nat 1.4.5
=========
* add plot.neuron for 2d plots (ajdm, from code in AnalysisSuite)
* add nopen3d() which opens an rgl viewer that allows panning. See ?nopen3d for
  details of how to use this.
* teach read.neurons to report files that have problems as they are read
* fix temp file left behind by xform.cmtkreg
* fix dangerous looking warning when amira binary files have empty sections
* fix ability of read.neurons to set InputFileName and therefore retain
  status information for the file along with its MD5 hash
* fix bug exporting xform.default (so that xform(matrix()) works)
* docs: improve coverage of BoundingBox vs bounds
* tests: simple tests for plot(3d).neuron
* tests: clear up temp files and suppress most warnings
* dev: restart travis build of flycircuit package when nat is pushed to github

nat 1.4.4
=========
* fix handling of logical expressions including NAs by subset.neuronlist
* add soma argument to plot3d.neuron
* fix: boundingbox.im3d() returns NULL when bounding box is not defined
* give remotesync.neuronlistfh an indices argument to allow download/update
  from the web of a selected population of neurons
* add ndigest.neuron method
* fix: export ndigest.dotprops method
* give image.im3d a useRaster option, which defaults to TRUE when possible.

nat 1.4.3
=========
* new ndigest (normalised digest) function to compute hash values. Methods for
  neuronlistfh and dotprops objects. Can be used e.g. to compute a hash value
  for a standard dps object to determine if a data.
* new threshold function with a method for im3d objects. Can be used to make
  masks.
* more flexible im3d constructor can use an existing im3d object to supply
  spatial attributes.

nat 1.4.2
=========
* fix bug in read.neuronlistfh resulting in error if a remote file was
  downloaded and then read back in (using cached copy) before any neurons were
  downloaded.

nat 1.4.1
=========
* fix bug in write.nrrd - was failing to write essential space dimensions field.
* make gzip the default encoding for nrrd images - this is pretty much always
  what one wants.

nat 1.4.0
=========
* add cmtk.reformatx command for reformatting images using CMTK registrations
* new function remotesync to synchronise a neuronlistfh object with its remote
  source.
* add write.neuronlistfh and improve consistency/docs of path handling in 
  read.neuronlistfh
* option to write missing (or no) neurons when using as.neuronlistfh.neuronlist
  this makes it _much_ faster to re-export these objects or prepare neuronlistfh
  for subsets of an existing group of neurons
* fix hashmap functionality of neuronlistfh (speeds up access to single neurons)

nat 1.3.2
=========
* fix bug in find.neuron for neuronlistfh objects
* fix bug in neuronlistfh constructor (wasn't adding hashmap) and 
  [[.neuronlistfh (was not searching properly for objects when using hashmap).

nat 1.3.1
=========
* add find.neuron for interactive selection of neurons in 3d.

nat 1.3
=======
* implementation of new im3d image manipulations functions including image.im3d,
  projection, unmask, imslice, imscalebar, imexpand.grid, flip, origin,
  boundingbox<-, xyzpos, ijkpos
* see ?im3d, ?boundingbox, ?image3d.im3d, ?imscalebar and ?flip for details
* fix reading of gzipped nrrds on windows
* dev: fix nocran tests

nat 1.2
=======
* Basic implementation of reading/writing NRRD format image data.
  See read.nrrd and write.nrrd for details.
* Basic implementation of reading/writing Amira format image data.
  See read.amiramesh and write.amiramesh for details.
* Basic implementation of a class for 3d images, im3d
* see read.im3d and write.im3d for I/O
* and voxdims and boundingbox methods for physical dimensions
* switch to more flexible neuronlistfh structure in which objects on disk are
  named by the md5 hash of their contents.
* workaround for connection leak in filehashRDS objects that stopped downloads
  of more than 124 new objects by a neuronlistfh (ajdm).
  (see https://github.com/rdpeng/filehash/pull/3 for details)
* dev: approach allowing some tests (e.g. those using the web) to be ignored on
  CRAN (ajdm)
* dev: travis continuous integration support (ajdm)

nat 1.1
=======
* Implemented reading and writing of groups of neurons from/to neuronlists.
  See read.neurons and write.neurons.
* Implemented writing of single neurons in swc format, Amira's HxLineSet and 
  SkeletonGraph formats, and R's rds format.
* Can now read Amira HxLineSet format neurons (see read.neuron)
* Give read.neuronlistfh an update argument (default:FALSE) so that it does not
  re-download remote data.
* dev: speed and flexibility improvements in fileformats ioregistry.
  see ?fileformats for details of new functions.

nat 1.0.1
=========
* fix bug in cmtk.bindir() on Solaris (thanks to Brian Ripley)

nat 1.0
=======
* implement reading of amiramesh data
* including amira SkeletonGraph format tracings
* switch to filehashRDS format for repositories of remote neurons
* retire stashR backend for neuronlistfh remote repositories (too slow)

nat 0.9
=======
* support for automatic download of neurons from stashR remote repositories on
  the web. ?neuronlistfh for details and an example. 
* Relies on stashR package
* dev: small doc fixes to make package CRAN compatible.

nat 0.8
=======
* important new feature: neuronlistfh objects backed by an on disk filehash
  allow single neurons to be loaded from disk on demand
* this allows 1) fast startup suitable for knitr documents and 2) working with
  more neurons than fit in main memory
* of course this is slower than working with an in-memory list but for plotting
  etc this should not be problem
* furthermore neuronlistfh objects can be subsetted/converted to give in memory
  neuronlist objects.

nat 0.7
=======
* implement read.neuron and read.neurons
* so far only works for rda, rds and swc files
* reading of additional file types will be implemented by registering functions =
  to test, read and write for the format using a package regsistry controlled by
  nat::neuronformats.
* developer: seglists in neurons now have class 'seglist'

nat 0.6
=======
* major new functionality - bidirectional interconversion of graph and regular
  neuron representation
* see as.neuron.* methods and as.ngraph.* methods
* plan is to use graph representation as the common intermediate with reading 
  different neuron file formats
* depends on igraph package

nat 0.5.2
=========
* add subset.neuronlist
* add methods for working with dataframe attached to neuronlist 
  (see e.g. ?with.neuronlist)
* TODO harmonise plot3d.neuronlist subset expressions with subset.neuronlist

nat 0.5.1
=========
* Switch license to GPL-3
* xform (transformation) of hxsurf objects
* fix xform of neuronlist objects
* switch from CMTK gregxform to streamxform (gregxform is deprecated; streamxform can concatenate registrations)
* teach mirror function to accept numeric axis specification
* Fix bug in checking extra directories in cmtk.bindir
* Add dotprops.neuronlist and include all dotprops methods in documentation
* Fix longstanding bug in parsing cmtk warping registrations (only relevant for
  reading these into R lists - no effect on transformations).
* fix bug in class of cmtkreg objects
* Remove call to .Internal(La_rs) by calling eigen directly
* doc: some notes on CMTK installation

nat 0.5
=======
* fix broken handling of cmtk affine transformations
* implement mirroring of neurons and other objects
* teach xformpoints (and therefore xform) to handle "~/" in paths
* bugfix in visibility of S3method xformpoints.character
* (developer) Switch to roxygen2 v3.0 for documentation

nat 0.4
=======
* read.hxsurf and plot3d.hxsurf for reading/plotting Amira surfaces
* better handling of location of cmtk command line tools see ?cmtk for details
* add neuronlist and associated methods (including plot)
* plot3d for neurons and dotprops

nat 0.3
=======
* basic and self-contained implementation of neuron class
* basic and self-contained implementation of dotprops
* new xform generic + methods for clean transformation of objects including
  neurons and dotprops objects
* this includes improved interaction between dotprops and xform so that xform
  can use the previously value of k when recalculating a dotprops object post
  transformation
* sample data (40 PNs from Jefferis, Potter et al. '07 and 20 KCs from Chiang 
  et al. 2011)
* 1 use of .Internal and missing nlapply remain to be fixed.

nat 0.2.1
=========
* fix install error due to missing neuron(*).R files that contain docs only so far

nat 0.2
=======
* Fairly complete implementation of CMTK registration I/O and geometry
* All functionality is self-contained (i.e. independent of nat.as/AnalysisSuite)
* passes check()
* can be augmented by nat.as (0.6)
