Changes in version 3.1.3 (2017-12-02)

New features or changed behaviour of old functions
    o   secr.design.MS() acquires argument 'contrasts' (used internally)

Bugs fixed
    o   sim.capthist() ignored recapfactor provided in detectpar

Other
    o   region.N now a generic method with functions for secr and secrlist objects
    o   corrected some obsolete documentation references to maptools package

Changes in version 3.1.1 (2017-11-30)

New features or changed behaviour of old functions
    o   new detector type 'capped' in make.grid(), sim.capthist(), reduce(), verify(), secr.fit() etc.
    o   as.data.frame methods for capthist and traps objects
    o   secrlist() and MS.capthist() generate names from input objects
    o   circular.r() and circular.p() acquire argument 'upper' for explicit upper limit of integration
    o   LR.test generalised to any fitted models with a logLik method
    o   plot method for secr objects: confidence limits now computed on log scale 
        for hazard detectfn HHN, HEX etc. to match predict.secr
    o   rbind method for traps adds suffix to names only when needed to avoid any duplication
    o   verify method for capthist objects checks for all-zero histories and missing rownames
    o   summary method for capthist objects: 'terse' option activated for single-session objects
    o   subset method for capthist objects: subset may be defined as function (useful for covariate-based selection)
    o   join() acquires arguments interval, to set between-session intervals directly, and sessions, for session names
    o   secr.fit() details argument 'contrasts' for specialised coding of factor predictors (example in secr-multisession.pdf)
    o   secr.fit() details argument 'newdetector' to override detector type
    o   'newdetector' reported by print.secr

Bugs fixed
    o   predict method for secr objects failed to report SE for parameters with some fixed coefficients (fixedbeta)
    o   verify.capthist failed to report detections at unused detectors

Other
    o   requires package stringr for some functions
    o   class attribute of multisession objects changed to place "list" last -- 
        c("list", "capthist") becomes c("capthist", "list")
    o   LLsurface.secr automatically substitutes lambda0 for g0 given detectfn 14:18
    o   experimental "nontarget" capthist attribute
    o   make.mask() explicit error when capthist passed 
    o   derived is now a generic method with functions for secr and secrlist objects
    o   derived.nj() renamed derivednj(), derived.mash() renamed derivedMash() etc.
    o   && changed to & throughout - should have no effect except fixes verify bug, but be wary

Changes in version 3.1.0 (2017-09-20)

New features or changed behaviour of old functions
    o   par.secr.fit() acquires arguments save.intermediate and LB to allow
        load balancing (thanks to Mathias Tobler)
    o   par.secr.fit() default value of 'seed' changed from 123 to NULL
    o   rbind.popn() now an S3 method; no longer accepts list input
    o   rbind.capthist() now an S3 method
    o   randomHabitat() acquires argument 'seed', saved as an attribute
        (thanks to Erin Peterson)
    o   detectfnplot() acquires argument 'hazard' for plotting hazard 

Other
    o   adjustment to 'ts' predictor for secr.fit mark-resight models
    o   documentation of random number seeds in ?secrRNG
    o   start vector returned by secr.fit now named

Bugs fixed
    o   faulty start vector when model included both h2 and noneuc

Changes in version 3.0.2 (2017-06-07)

New features or changed behaviour of old functions
    o   make.grid() and make.circle() acquire argument 'markocc'
    o   read.traps() accepts Excel xls or xlsx input (requires readxl)

Bugs fixed
    o   plot.secr misleading axis label 'Detection lambda'
    o   sim.resight() could fail with markingmask and predefined popn

Other
    o   imports file_ext from tools package
    o   attributes of output from sim.popn now include Nbuffer and D
    o   speed increase for "count" detectors
    o   miinor adjustments to sim.popn for compatibility R 3.4.0

Changes in version 3.0.1 (2017-05-03)

New features or changed behaviour of old functions
    o   'unresolved' sightings now stored in Tn attribute of capthist
    o   sim.resight() acquires argument 'unresolved'
    o   plot.secrlist() accepts colour vector
    o   new function as.mask() to coerce traps objects for plotting
    o   moves() acquires argument 'names' to control sort order (new default)

Bugs fixed
    o   sightingPlot() legend ignored fill argument

Documentation
    o   addTelemetry omitted 'single' and 'multi' from permitted detectionCH types

Other
    o   discretize() updated for 3.0
    o   native routine registration completed

Changes in version 3.0.0 (2017-04-11)

New features or changed behaviour of old functions
    o   3-D data structure used for trapping data
    o   updateCH() for easy conversion of old data
    o   multiple detector types may be used in one session 
        (point detectors only: single, multi, proximity or count)
    o   marking and sighting occasions may be interspersed
    o   rbind.traps acquires argument 'checkdetector'
    o   user-provided distance matrix may be session-specific
    o   esa 'noccasions' may be less than ncol(usage)
    o   function occasionKey() to embellish petal plots
    o   explicit handling of 'uncertain' sightings Tn
    o   plotMCP() now works with data from point detectors
    o   details$debug in secr.fit() now integer with multiple levels
    o   sightingPlot() new function
    o   plot.capthist() new option "centres"
    o   secr.fit() argument 'details' may be given as character value
    o   telemetrytype attribute of traps objects replaces details$telemetrytype
    o   new addTelemetry() function and revised handling of telemetry data
    o   addTelemetry() allows multi-session data
    o   secr.fit() etc. auto predictor 'tt' nontelemetry vs telemetry occasions
    o   addCovariates() acquires argument 'replace'
    o   c new method for combining secrlist objects
    o   make.capthist() discards repeat detections at exclusive detectors, with a warning
    o   models for polygon or transect detectors requre hazard detection functions 
    o   esa.plot() accepts secrlist as input (curves overlaid)
    o   par.secr.fit() acquires argument 'prefix'
    o   predict.secr() acquires argument 'realnames' to select a subset of 'real' parameters

Bugs fixed
    o   make.grid() did not assign polyID attribute for polygon detectors
    o   snip() and discretize() for transects dropped occasions with no detections
    o   sim.capthist() failed when 'userdist' supplied (non-Euclidean distances)

Other
    o   ovenbird dataset provided with detector type "proximity"
    o   esa() more robust to variation when noccasions specified
    o   new details option 'splitmarked' for resightings (default FALSE)
    o   usagePlot() argument occasion renamed occasions
    o   more compact 'call' component of secr.fit output
    o   discontinued warning when detectfn requires changed parameters (g0 -> lambda0)
    o   plot method for traps enables box around plot (bty = 'o')
    o   plotMaskEdge faster
    o   secr.fit() details savecall = FALSE suppresses call (default in par.secr.fit)
    o   new function shareFactorLevels() to force factor covariates to use the same levels
    o   rgdal::readOGR used instead of deprecated maptools::readShapeSpatial
    o   minor speed improvments for models without learned response
    o   ip.secr() faster default predictorfn

Changes in version 2.10.4 (2016-12-02)

New features or changed behaviour of old functions
    o   default spacey changed to equal spacex in make.grid
    o   make.capthist() now prints captures with detector that does not appear in 
        traps object (fmt = "trapID")
    o   sim.popn() acquires "even" option for model2D

Bugs fixed
    o   esa() could fail for multi-session models with individual covariates
    o   mash() erroneously retained column 'trapnum', breaking later make.mask()
    o   check for NA covariate values blocked legitimate multi-session hcov
    o   plot.pop failed if polygon attribute was SpatialPolygonsDataFrame
    o   derived() crashed R if no animals detected in a session
    o   secr.fit() failed for learned response models (b, bk) if no animal was 
        detected in a session
    o   clone.capthist failed for data with a single occasion

Other
    o   par.secr.fit uses 'message'
    o   collate() and model.average() ignore n.mashed, now with a warning

Changes in version 2.10.3 (2016-05-13)

New features or changed behaviour of old functions
    o   pointsInPolygon() and make.mask() now work with SpatialPolygons poly
    o   make.mask() changes: new arguments 'random.origin' and 'cell.overlap',
        new type 'polybuffer', and accepts an existing mask as 'poly' argument
    o   plotMaskEdge() new function
    o   plot.mask() coerces logical covariates to factors
    o   split.traps inserts leading zero in numeric splitting factor f

Bugs fixed
    o   pointsInPolygon() erratic with SpatialPolygonsDataFrame input (missed some overlaps)
    o   score.test() failed (mapbeta requires betanames)
    o   plot.Dsurface() required 'covariate' to be specified for multi-session input

Other
    o   usagePlot() no longer adds tiny point on occasions when detector unused

Changes in version 2.10.2 (2016-01-08)

New features or changed behaviour of old functions
    o   sim.resight() extended for unresolved (marked+unmarked) sightings (markocc -1)
    o   sim.resight() saved popn has covariate 'marked' for allsighting case
    o   secr.fit() fits mark-resight models with unresolved sightings
    o   par.secr.fit() may also be used with LLonly = TRUE and chatonly = TRUE
    o   discretize() has new options (remember cell overlap, criteria for inclusion)
    o   secr.fit() results for count and polygon detectors may differ from previous,
        especially with detectfn 14--18 which now match the published models more closely.

Bugs fixed
    o   join() problem with remove.dupl.sites = FALSE
    o   secr.fit() possible bug in default initial g0 for polygon-type detectors
    o   rbind.popn() could fail when called inside a function
    o   make.capthist() failed with zero animals and polygon detectors
    o   excessive memory demand (still a problem) led to phoney error message (134217728 Tb)

Other
    o   explicitly requires R >= 3.2.0
    o   mask.check() with LLonly now works when model non-null
    o   buffer.contour() accepts mask argument
    o   improved placement of polygon labels in plot.traps()
    o   maximum number polygon vertices increased to 400
    o   c-hat of sighting counts Tu, Tm set to 1.0 if less than 1, with a warning

Changes in version 2.10.0 (2015-12-07)

New features or changed behaviour of old functions
    o   implemented mark-resight models, with many flow-on changes -
    o   sim.resight allows interspersed marking and resighting occasions
    o   new 'markocc' attribute of traps objects to code marking and resighting occasions
    o   summary.capthist, subset.capthist, verify.capthist and plot.capthist 
        extended for mark-resight data
    o   secr.fit() etc. auto predictor 'ts' marking vs sighting occasions
    o   read.traps() and read.capthist() acquire argument 'markocc'
    o   addSightings() new function to extend capthist object
    o   make.capthist() input of all-zero detection histories for mark-resight
    o   sort method defined for mask objects
    o   fx.total enabled for a specified session from multi-session model fits
    o   discretize() new function converts polygon capthist data
    o   pmixProfileLL() new function for checking finite mixture models (adapted 
        from secr-finitemixtures.pdf)

Bugs fixed
    o   alongtransect failed
    o   traps<- method for multisession capthist misassigned class
    o   model.average() did not work for parameter 'pmix'
    o   finite mixtures (h2) conflicted with 3-parameter detection functions
    o   secr.fit() failed when all detection parameters fixed and order of list 
        differed from default, and with fixed D
    o   join() failed with some inputs
    o   plot.traps() did not restore graphic options
    o   fx.secr() and fx.total() crashed R for detector type 'multi' and varying usage
    o   fx.secr() and fx.total() mask problem with multi-session density surface models
    o   confint.secr() failed with hcov or fixed real parameter

Other
    o   explicitly import functions from stats, utils etc.
    o   deprecated features 'scaleg0' and 'scalesigma' finally removed, hence
    o   collate(), predict.secr() and predict.secrlist() lose 'scaled' argument
    o   removed all references to undocumented 'cue' detector type
    o   secr.fit() with polygon detector: improved default starting value
    o   split.capthist() bytrap selects whole polygons
    o   improved error messages from verify.traps
    o   check number of occasions in closure.test(!SB)
    o   removed unused traps attribute 'searchcell'
    o   secr.fit() method = 'none' now drops 'maximizing likelihood' message 
    o   sim.capthist() multi-session code substantially revised
    o   more consistent use of clusters (do not export objects from namespace)
    o   mapbeta() (used when 'start' argument of secr.fit is a model) now usually 
        works for non-nested models (real parameters differ between new and old models) 
    o   removed disused option for Gardner & Royle parameterisation param = 1
    o   ip.secr() improvements for greater robustness and control (boxsize1, boxsize2,
        seed, trace arguments)
    o   revamped timings in ?Parallel
    o   rbind.traps() tweaked to allow a single multi-session object as input

Changes in version 2.9.6 (2015-09-30) Not released on CRAN

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]

