Changes in version 2.9.6 (2015-09-30)

New features or changed behaviour of old functions
    o   fx.total enabled for a specified session from multi-session model fits

Bugs fixed
    o   alongtransect failed
    o   traps<- method for multisession capthist misassigned class
    o   model.average() did not work for parameter 'pmix'

Other
    o   explicitly import functions from stats, utils etc.

Changes in version 2.9.5 (2015-06-14)

New features or changed behaviour of old functions
    o   secr.fit() 'miscparm' now compatible with previous-fit 'start' 
        and method = 'none'
    o   secr.fit() may select session on which to base starting values with details 
        argument 'autoini'
    o   sim.capthist() allows varying detection by session (nsessions>1) and 
        passes 'nsessions' to sim.popn()
    o   make.capthist() new argument 'snapXY'
    o   read.traps() accepts vector of file names
    o   secr.fit() sigmak parameterization extended to linear masks
    o   pdot.contour() and buffer.contour() acquire 'fill' argument

Bugs fixed
    o   AIC did not count parameters estimated via 'miscparm' 
    o   usagePlot() failed with multisession input
    o   sim.capthist() failed with detector type 'multi' when usage was zero for some 
        detectors
    o   secr.fit() default telemetrytype was 'none' rather than 'concurrent' as in
        documentation
    o   raster method for mask and Dsurface objects failed unpredictably
    o   ip.secr() aborted when #attempts = maxtries rather than #attempts > maxtries
    o   sim.popn() failed in getnm with multi-session model2D = 'linear'

Other
    o   sim.popn() argument nsession renamed nsessions for consistency
    o   join() simplified when detectors are the same in all sessions
    o   score.test() allows fixed real parameters
    o   raster S4 method for mask and Dsurface objects documented
    o   secr.fit() default value of details$minprob changed to 1e-200 (more stable estimates)


Changes in version 2.9.4 (2015-03-24)

New features or changed behaviour of old functions
    o   deleteMaskPoints() new function for editting masks
    o   nedist() new function for non-Euclidean distances
    o   parallel processing (ncores>1) enabled for fxi.contour(), fxi.secr(), fx.total()
    o   fxi.mode() default 'start' argument is now weighted mean of all detections
    o   fxi.contour() acquires argument 'SPDF' for output as SpatialPolygonsDataFrame
    o   secr.fit() acquires details argument 'miscparm' (additional parameters for a 
        user-supplied distance function).

Bugs fixed
    o   sim.popn() inconsistent behaviour of non-rectangular buffers
    o   join() could fail with exclusivedetector types
    o   fxi.contour() ignored sessnum argument
    o   subset.popn() failed with NULL subset argument and multiple sessions

Other
    o   secr-overview and secr-datainput Rmarkdown source in vignettes folder
    o   suggests package gdistance (for nedist)
    o   strip.legend() tweaked legend format and xy argument
    o   non-essential documentation is now served from the DENSITY website
    o   region.N() check for incompatible userdist
    o   rbind.capthist() names limited to 100 ch
    o   predict.secr() explicit message if covariates missing from newdata
    o   sim.popn() multi-session models with survival and recruitment now documented, and 
        one default changed (details$sigma.m = 0).

Changes in version 2.9.3 (2015-01-11)

New features or changed behaviour of old functions
    o   clone() has new method for capthist objects
    o   sim.popn() new buffertype options 'convex' and 'concave'
    o   sim.popn() acquires argument Nbuffer for user-specified N (model2D = 'poisson')
    o   verify() flags mixture of NULL and non-NULL covariates across sessions

Bugs fixed
    o   RPSV crashed with zero detections, now returns NA
    o   trap.builder and make.systematic failed when 'region' was sp object 
        with non-missing proj4string
    o   make.capthist() covariates of sessions with no detections defaulted to NULL 
        instead of empty dataframe

Other
    o   more explicit error message when groups missing from individual covariates
    o   more robust handling of sessions with no detections
    o   fallback start value for sigma now 's' from Calhoun and Casby (1958)
    o   minor revision of secr-overview.pdf
    o   print.summary.capthist does not attempt to print trap summary for nonspatial capthist
    o   secr.fit only calls autoini if needed
    o   CITATION file uses package metadata
    o   rbind.capthist() default animalID prefix when input names missing or duplicated
    o   package code consistently uses requireNamespace instead of require

Changes in version 2.9.2 (2014-11-23)

New features or changed behaviour of old functions
    o   none

Bugs fixed
    o   secr.fit failed with group ('g') models 

Changes in version 2.9.1 (2014-11-19)

New features or changed behaviour of old functions
    o   'noneuc' parameter for user-defined non-Euclidean distances
        is now a full real parameter that may be modelled like density
    o   new methods of the generic function raster() from package 'raster'
        convert mask and Dsurface objects to RasterLayer objects (first load 'raster'); 
        for this, mask and Dsurface have become virtual S4 classes.
    o   sim.popn acquires argument keep.mask to control saving of 'core'
        when model2D IHP or linear
    o   reduce.capthist(), if no usage matrix is present and the
        outputdetector is of 'count', 'polygon', 'transect' or 'telemetry'
        type, generates a usage matrix to record number of occasions pooled 
    o   secr.fit() argument 'start' may be a list with values for some
        or all real parameters
    o   print method for secr objects acquires 'call' argument to
        suppress printing of voluminous call component.
    o   RPSV() optionally computes the statistic s of Calhoun and Casby (1958)

Bugs fixed
    o   region.N() did not work with user-supplied distance function
    o   join() failed with simple list of single-session capthist
    o   the default model argument in secr.fit did not work with some
        model specifications
    o   strip.legend() reset plot area (par)

Other
    o   new vignette 'secr-noneuclidean.pdf' and tidying of other documentation
    o   trap.builder() and make.systematic() use of 'sp' input revised
    o   internal function edist() exported (Euclidean distances)
    o   print.secr() deriv argument also works when CL = FALSE
    o   dbar(), ARL(), MMDM, moves() argument '...' becomes 'mask'
    o   snip() retains row names and works with multiple transects    
    o   region.N() correctly saves length of linearmask region

Known bugs
    o   mixture models fail when the first detector is not 'used' on the first occasion
    
Changes in version 2.9.0 (2014-09-23)

New features or changed behaviour of old functions
    o   secr.design.MS() acquires 'ignoreusage' argument
    o   split.capthist() acquires 'byoccasion' argument
    o   fxi.secr() and related functions extended to IHP density models 
    o   fxi.contour() acquires argument 'fill' for filling contours
    o   new function fx.total() for aggregate 'posterior' distribution of activity
        centres of detected and undetected animals
    o   simulate.secr() acquires 'ncores' argument; now much faster in simple cases
    o   simulate.secr() allows fixed parameters 
    o   sim.capthist() acquires argument 'chulltol' for telemetry locations
    o   addCovariates() acquires 'strict' argument to set return value to NA
        for requested point(s) outside a mask spatial data source
    o   new function secr.test() for Monte Carlo gof tests
    o   print and plot methods for 'secrtest' objects from secr.test()
    o   regression splines (smooth terms s(), te()) are allowed in formulae for secr.fit()
    o   secr.fit() allows user-provided non-Euclidean distances (details$userdist)
    o   sim.capthist() and pdot() acquire argument 'userdist' (see preceding)
    o   sim.popn() model2D argument may take value "linear" for forthcoming package 
        'secrlinear'
    o   ARL(), MMDM(), dbar() and moves() acquire 'userdist' argument for use with 
        non-Euclidean distances
    o   plot.mask() upgraded (pretty breaks, legend, dots argument
        passes to legend or new function striplegend(), not eqscplot, etc., 
        lower bound included in 'breaks' )
    o   new dataset OVpossumCH

Bugs fixed
    o   summary.capthist did not report losses for non-exclusive detectors (proximity, count etc.)
    o   read.mask with covariate columns : spurious error message
    o   secr.fit details$ignoreusage did not work properly in case that some usage values were zero
    o   simulate.secr() did not work with 'hcov' or reparameterized models (details$param > 2)
    o   secr.fit() sigmak parameterization did not work with finite mixtures (including hcov)
    o   read.traps() failed for polygon detectors with non-binary usage data on a single occasion
    o   fxi.secr() and fxi.contour() failed in extreme cases (very peaked distributions)
    o   plot.Dsurface() ignored scale for multi-session plots
    o   plot.secr() failed to provide limits for acoustic detection functions
    o   predictDsurface() failed with groups

Other
    o   Documentation of randomHabitat corrected (drop argument)
    o   Internal functions sim.detect(), getMeanSD(), maskarea(), and
        masklength() now exported
    o   Imports some functions from package mgcv
    o   Package raster moved from Suggests to Imports
    o   Minor tweaks to secr.fit, summary.mask, simulate.secr and autoini code for 
        compatibility with secrlinear package (in prep.)


Changes in version 2.8.2 (2014-04-30)

New features or changed behaviour of old functions

    o   write.captures() and write.capthist() acquire new argument
    tonumeric to allow output of character-valued covariates without
    conversion to numeric

    o   region.N() saves attribute 'regionarea'

    o   sim.popn() accepts a vector of densities D when nsession > 1

    o   sim.capthist() new argument savepopn allows simulated population
    to be saved as an attribute

Bugs fixed
    o   output from derived() misformatted when groups specified

    o   plot.secr failed with fixed g0 or lambda when ylim not specified

Changes in version 2.8.1 (2014-04-03)

New features or changed behaviour of old functions

    o   usagePlot() sums over occasions when occasion = "ALL" or
    length(occasion)>1

Bugs fixed

    o   reduce.traps() failed when newtraps was not specified

Changes in version 2.8.0 (2014-03-31)

New features or changed behaviour of old functions

    o   new functions par.secr.fit(), par.region.N, and par.derived()
    for parallel fit of multiple models

    o   Rsurface() generates a smoothed 'resource availability' surface,
    with plot and print methods

    o   summary.mask() distinguishes Dsurfaces and Rsurfaces from other
    mask types

    o   sim.popn() now optionally simulates a fixed population N when
    model2D = "IHP" (but with Ndist = "fixed" the 2-D distribution is no
    longer strictly inhomogeneous Poisson)

    o   rbind.capthist() for polygon and telemetry inputs automatically
    forms a new search polygon that is the union of the input polygons

    o   new functions CV(), CVa() and CVa0(), the latter two for
    summarising heterogeneity in mixture models

    o   rbind.traps() has new argument addusage to generate binary
    usage attribute with number of occasions specific to each input

    o   region.N() has new argument pooled.RN for extrapolating
    realised N to a landscape sampled with multiple non-overlapping
    detector layouts ('sessions')

    o   secr.fit() allows optional parameterisations such as (D, g0,
    sigmak) where sigma = sigmak / sqrt(D). See
    secr-parameterisations.pdf.

    o   new generic function clone() with default and popn methods
    (replicates points a fixed or random number of times e.g. for
    generating overdispersed cues from a distribution of sources)

    o   trim() method for fitted models by default now also drops 'call'
    component

    o   pdot.contour and buffer.contour() now accept multi-session input

    o   implementation of concurrent and independent telemetry improved,
    and allows covariates; reduce.capthist() handles telemetry data

    o   new functions plotMCP() to display telemetry locations and
    ellipse.bvn() to display confidence region for centroid.

    o   telemetryxy() extracts xylist attribute (telemetry coordinates)
    of a combined capthist object

    o   addTelemetry() allows detector type "multi" and no longer
    discards individual covariates from the detection capthist if
    there are no all-zero histories and telemetry data does not
    include covariates

    o   new function PG() returns proportion of telemetry fixes in a set
    of polygons (i.e., 'on grid')

    o   sim.capthist() has new argument exactN to specify number of
    telemetry fixes

Bugs fixed
    o   pointsInPolygon() and hence make.mask() failed with polygon
    input when polygon was an sp object with attribute data (2.6 only)

    o   predictDsurface() and region.N() could fail or produce
    improbable estimates when the user fixed beta parameters with
    details$fixedbeta

Known bugs

    o predict.secr() fails when newdata includes only one level for h2
    under the 'hcov' formulation

    o sim.capthist() does not use a0 when it is provided in detectpar

Other
    o   sim.capthist() for telemetry data updates perimeter (MCP) of
    simulated points

    o   new score.test() arguments control numerical gradient
    calculations by fdHess

    o   secr.fit() with method = "none" now reports the log likelihood
    at the parameter values in "start", as well as asymptotic
    variances

    o   secr.fit() now returns a density estimate when CL = FALSE and all detection
    parameters are fixed

    o   secr.fit() now accepts character values for the 'capthist' and
    'mask' arguments; objects thus named are retrieved from the workspace.

    o   read.traps() and read.capthist() now return an error if any
    coordinate is not numeric

    o   components of an secrlist may now be extracted for AIC() with '['

Changes in version 2.7.0 (2013-10-30)

New features or changed behaviour of old functions
    o   secr.fit() uses optional parameterisation (a0(g0,sigma), sigma) when 
    	a0 in model or details = list(param = 3). See Efford and Mowat ms.
    o   detectpar(), signal(), noise() become generic methods
    o   signalmatrix() new argument for column names
    o   rbind.capthist() enabled for signal detector CH
    o   AIC.secrlist() checks whether models differ in hcov
    o   secr.fit() allows pmix to be a fixed parameter in h2 models
    o   secr.fit() allows pmix to depend on session in h2 models
    o   LR.test() generalized to any class of model with logLik method

Bugs fixed
    o  animalID() returned zero-length character vector for empty CH regardless of names argument
    o  secr.fit() failed with automatic start values, polygon data, and detectfn>13
    o  predict.secr() lost labels for latent classes when latent class not in model
    o  collate() failed for pmix when model used hcov 
    o  derived.external() could fail with multi-session model
    o  read.capthist not reading noccasions from usage fields of trap files  

Other
    o   added documentation for hybrid mixture model see ?hcov
    o   updated code for scaleg0 option in secr.fit (but see below)
    o   updated package dependencies for R 3.0.2
    o   more extensive use of match.arg and explicit options for character arguments
    o   replaced call to obsolete 'raster' function adjacency() in randomHabitat()

Deprecated 
    o   secr.fit() details$scaleg0 has been superceded by the a0
        parameterization (details$param = 3) and will become obsolete in a
        future release.

Changes in version 2.6.1 (2013-06-28)

New features or changed behaviour of old functions

    o   read.telemetry() new function for importing coordinates from
    radiotelemetry
    o   shift method for mask objects

Bugs fixed
    o   autoini(), esa(), derived() and region.N() could cause R to
    crash unpredictably (only 2.6.0)

Other
    o   sim.capthist() rewritten with explicit entry points to C code

Changes in version 2.6.0 (2013-06-11)

New features or changed behaviour of old functions

    o   secr.fit() may be used with method = 'none' to compute only the
    hessian and variance-covariance matrix of beta parameters for the
    current dataset at the values in start (useful in simulation of
    precision)

    o   secr.fit() h2 and h3 mixture models allow the latent class of
    none, some, or all individuals to be specified via an individual
    covariate named in new argument 'hcov' (also estimates sex
    ratio). 'hcov' is a new component of secr objects.

    o   secr.fit() default type for automatic mask changed from
    "traprect" to "trapbuffer"

    o   the AIC methods for secr and secrlist objects and
    model.average() allow the user to choose between AIC and AICc as
    the criterion

    o   if there is a single parameter to estimate, secr.fit() now
    searches with optimise() for the likelihood maximum in an interval
    controlled by details$intwidth2

    o   2-3 letter abbreviations may be used for all detection functions
    ('HN','EX' etc.)

    o   new detection functions for halfnormal (14, HHN), hazard rate
    (15, HHR), exponential (16, HEX) etc. on hazard scale (cf Royle &
    Gardner 2011, with sqrt(2) difference in half-normal sigma) (see
    ?detectfn)

    o  circular.r() and circular.p() have new argument 'hazard' to
    convert from detection probability to hazard scale before
    computation. Conversion is the default, so results will
    differ. Also, both functions now have a dots argument allowing
    integration settings to be changed (see Examples in Help), and
    circular.p() uses explicit expression for exponential.

    o   trap.builder() acquires arguments 'exclude' and 'exclmethod' to
    constrain placement of detectors

    o   secr.design.MS() acquires arguments 'keep.dframe' and
    'full.dframe' (used for checking), and 'hcov' to specify known
    membership of latent classes as in secr.fit()

    o   secr.design.MS() checks that the levels of factor covariates are
    the same across sessions

    o   predict.secr() acquires argument 'type' to enable values to be
    returned on the link scale

    o   predict.secr() now reports the SE and confidence interval for
    the mixing proportion pmix in 2-class finite mixture models

    o   sim.capthist() g0 component of 'detectpar' argument may be a
    matrix specifying variation both by occasion (row) and detector
    (column) and 'detectpar' may include a learned response of g0 to
    capture - for trap ('single' and 'multi') detectors only

    o   model.average() implements the model-averaged tail area (MATA)
    confidence intervals of Turek and Fletcher (2012) and provides a choice of
    information criterion (AIC or AICc)

    o   model.average() and collate() now accept secrlists as input

    o   secrlist() generates names "secr1", "secr2" etc. for successive
    components if not already named

    o   make.mask() no longer requires 'traps' argument when type = 'polygon'

Bugs fixed

    o   secr.fit() failed with 2-class finite mixture models when the
    pmix parameter was fixed by the user, and esa() and derived()
    failed when pmix fixed via details$fixedbeta

    o   secr.fit() could fail with complex multi-session data due to bug
    in secr.design.MS()

    o   timevaryingcov<- failed if usage not NULL

    o   plot.mask() did not use all arguments when plotting a list of masks

    o   plot.capthist() did not always restore the existing palette

    o   pointsInPolygon() sometimes failed when used with a mask as the
    second argument and points fell on the lefthand edge of a cell

    o   predict.secr() reported SE slightly in error for non-constant
    parameters and did not label groups when defined but 'g' not in model

Other

    o   secr.fit() suggestion to use BFGS suppressed

    o   deprecated maptools function 'overlay' replaced with 'over'

    o   secr.fit() uses MASS function ginv (generalised matrix inverse)
    rather than solve, and package now Depends on MASS. Variance
    calculation is expected to be more robust when not all parameters are
    identifiable.

    o   print.secr() call displayed with quotes around character arguments


Changes in version 2.5.0 (2013-01-24)

New features or changed behaviour of old functions

    o   detector usage may be non-binary 'effort', and if binary is coded
    consistently as numeric (0/1) rather than logical (FALSE/TRUE)

    o   snip() new function splits transects into shorter sections

    o   reduce.traps() new method aggregates data from nearby detectors

    o   reduce.capthist() re-written with new arguments; optionally
    calls a reduce.traps (see previous)

    o   usage.plot() new function to plot detector-specific usage(effort)

    o   sim.capthist() noccasions argument must be specified, either
    explicitly or implicitly via the usage attribute of traps.

    o   pdot() and pdot.contour() respect the usage attribute of the
    traps argument, from which noccasions will be taken if usage is
    present; no default is provided for noccasions.

    o   secrlist() new function makes list of fitted models (class 'secrlist')

    o   plot.traps() acquires argument markvertices for emphasising
    points on transects, polygons

    o   fxi.contour() and fxi.secr() enabled for detector arrays with
    incomplete usage

    o   new definition of usage has several flow on effects:
    reduce.capthist() records the summed usage on pooled occasions,
    join() retains usage, summary.traps() and print.secr report range
    of trap-specific usage for each occasion, etc.

    o   autoini() acquires arguments tol (default 0.001, previously
    fixed), binomN, adjustg0, and ignoreusage.

    o   suggest.buffer() acquires argument ignoreusage

    o   secr.fit() new details component ignoreusage (default FALSE)

    o   read.traps() acquires argument 'binary.usage'; binary.usage =
    FALSE allows input of continuous effort fields

    o   derived() returns NULL and a warning rather than an error if input
    is not a fitted model

    o   exports the internal function make.lookup()

    o   binomial count models now parameterised g0 = p rather than g0 =
    pN in secr.fit() and sim.capthist(); this will change estimated g0
    from these models

Bugs fixed

    o   fxi.contour() output format no longer data dependent; argument
    'i' may be used to select a range of animals to plot

    o   ip.secr() various adjustments

    o   secr.fit() integration for polygon and transect detector types
    used memory inefficiently

    o   secr.fit() could fail with distribution = 'binomial'
    (i.e. fixed-N) when virtually all individuals in the estimated
    population were detected (n near N).

    o   plot.traps() confusion among minor arguments for multi-session plots

    o   secr.fit() could be very slow with exclusive detectors
    (e.g., 'multi','polygonX') when usage varied

    o   derived.external() bad 'clust' argument in esagradient call    

    o   secr.make.newdata did not work with factor tcov

    o   addCovariates() did not accept missing values in character fields

Changes in version 2.4.0 (2012-11-05)

New features or changed behaviour of old functions

    o   sim.secr(), mask.check(), ip.secr(), score.test(),
    LLsurface.secr(), derived() and secr.fit() optionally use multiple
    cores managed through the 'parallel' package. This may speed up
    secr.fit() for multi-session datasets, but often slows it down.

    o   proctime reported by secr.fit() and ip.secr() now defined as
    the total elapsed time, to allow for parallel processing

    o   new function signalmatrix() to extract signal data in sound x
    microphone matrix format

    o   new function signalframe() to extract signal attribute from a
    capthist object

    o   detector covariates may vary over time (see
    ?timevaryingcov). summary.traps() has been modified to report
    timevaryingcov.

    o   experimental 'telemetry' detector type with associated functions
    make.telemetry() and addTelemetry; also, sim.capthist() recognises
    the 'telemetry' detector type

    o   secr.fit() argument 'details' has logical component 'unmash',
    used to scale density to number of mashed clusters in each session
    (i.e. allow density to be modelled while cluster number varies
    across sessions)

    o   split method for capthist objects has new argument 'bytrap' for
    splitting captures according to location, and adds leading zero
    when forming session name from numeric f

    o   split method for traps objects has new argument 'byoccasion' for
    splitting trap locations by occasion, allowing for
    session-specific 'usage'.

    o   mash() drops attributes of 'traps'; names sessions for list
    input; n.mash attribute retains cluster names

    o   RMarkInput() and unRMarkInput have new argument 'covariates' for
    individual covariates (all included by default), and the default
    value of the 'grouped' argument is now FALSE

    o   spacing() method for traps and mask objects gets new logical
    argument 'recalculate' to force recalculation. This is now the
    default after a subset, split or rbind operation on a traps object,
    removing the potential for misleading.

    o   subset.capthist() acquires new argument 'dropNAsignals' to
    address inconsistency with signal strength data when some signals
    have missing values; also new argument 'cutabssignal' for whether
    to apply cutval to absolute signal strength or the difference
    between signal and noise.

    o   predict.secr() now drops unused columns of 'newdata' from names
    of output components

    o   plot.capthist() now issues warnings when track joins repeat
    detections on one occasion in arbitrary sequence (proximity and
    count data) or no detections in dataset

    o   mask.check() enhanced labels on output

    o   optional use of gpclib by suggest.buffer() has been suppressed


Bugs fixed

    o   fxi.contour() and fxi.secr() failed with normal = FALSE

    o   join() dropped occasions with no detections

    o   RMarkInput() added spurious occasion when grouped = FALSE
    (thanks to Jeff Stetz for spotting this)

    o   sim.capthist() misleading warning on p.available

    o   make.grid() could fail if boustrophedonic numbering requested
    with nx=1 or ny=1

    o   secr.fit() with signal detector failed to find cutval in
    multi-session capthist

    o   secr.fit() k, K models did not work with multi-session data

    o   secr.fit() individual covariate problems with multi-session data

    o   derived() sometimes failed with varying number of traps per session

    o   summary.capthist() with terse = TRUE failed to count detections
    for count and polygon detectors (apparent when printing a fitted
    secr object)

    o   simulate.secr() could fail with multi-session model when mask
    size varied between sessions

    o   likelihood for multisession models included multinomial
    component only for last session; this did not affect estimates,
    but causes AIC to differ between 2.4.0 and previous versions
    [noted retrospectively 2013-01-03 thanks to Eric Howe]

