Release Notes for fastjet
-------------------------

======================================================================
Changes from v2.1.0 to v2.2beta0
===============================

- added the anti-kt algorithm (LPTHE-07-03)

- Provided  a new common class for accessing all different types of  
  areas: ClusterSequenceArea.

- added functionality for Passive areas and Voronoi areas. 
  Areas are now defined much in the same way as jets, via an 
  AreaDefinition, which is passed as an argument
  to ClusterSequenceArea. NB: the Voronoi area uses Fortune's
  sweepline code for calculating the Voronoi diagram.

- Added class RangeDefinition which allows detailed definitions
  of the rapidity-azimuth ranges over which to study jet areas
  and possibly perform noise subtraction

- added facilities for navigating the cluster sequence (has_parents,
  has_child and has_partner members of ClusterSequence)

- changed plugin base class, so that it now includes R() virtual
  member, and modified the various plugins to account for this.

- modified the plugin interface to provide facilities to help with
  passive areas.

- included SISCone-1.2.0 rather than 1.1.1.

- adapted SISCone plugin to the 1.2.0 release of SISCone -- main
  changes are facilities and improvements related areas: some speed
  improvements on the split-merge (relevant for active areas) and a
  fairly efficient way of running passive areas.

- added ClusterSequence::print_jets_for_root(...) and a corresponding root
  script (example/root/jet-plots.C), so as to provide a crude
  visualisation tool.


======================================================================
Summary of main changes from v2.0.0 to v2.1.0
=============================================

- added plugin structure for external jet finders.

- included plugins for SISCone, CDFMidPoint, CDFJetClu, PxCone (with
  extensions for MidPoint and bug fixes for PxCone relative to public
  codes).

- introduced option of control over recombination scheme, with a
  RecombinationScheme enum, which applies also to area_4vector.

- added description() member function to JetDefinition class, so 
  that you can get a (string) summary of what you're running!

- changed the default number of repeats in ActiveAreaSpec to 1 (which
  is sufficient for most purposes).

For further details, see the changes listed in detail below.

======================================================================
Changes from v2.1.0b4 to v2.1.0
===============================

- corrected bug in test-script.sh

- removed PxCone from default tests and from 
  plugins/usage_examples/many_algs_example.cc (to avoid fortran
  compilation issues).

======================================================================
Changes from v2.1.0b3 to v2.1.0b4
=================================

FastJet modifications
---------------------

- default number of repeats for the active area specification has been
  changed from 5 to 1 (the latter goes fast, but note that it provides
  a zero error estimate for the area).

Plugin modifications
--------------------

- adapted plugin to accomodate new scale for use in the SISCone
  split-merge (pttilde), with a corresponding change of interface.

  Changed default number of passes for SISCone to 0.
  
- Added the pttilde scale choice to the CDF plugin.



======================================================================
Changes from v2.1.0b2 to v2.1.0b3
=================================

FastJet enhancements
--------------------

- methods for estimating the underlying now have the option of using
  area_4vector rather than the plain area

FastJet bug fixes
-----------------

- area_4vector is now calculated with the same recombination scheme as
  the jets themselves

- massless recombination schemes now work correctly on particles with
  zero momentum

- PseudoJet::phi_std() returned wrong result for phi < pi -- thanks to
  Oscar Stal for pointing this out.

Plugin modifications
--------------------

- the plugin mechanism now allows a plugin to add "extra" information
  to the ClusterSequence, essentially by providing an auto_ptr to a
  class derived from (the new) ClusterSequence::Extras; an example of
  this has been implemented with siscone (SISConeExtras) which allows
  a user to access the initial (stable) protocones.

- included new siscone version (1.1) which uses transverse mass (mt) rather
  than pt in the split-merge procedure, to address an IR problem in
  events where the hadronic part conserves momentum -- this can have
  an effect on some physical distributions; the siscone update also
  addresses issues with collinear safety and co-circular points.

- included bug fixes to pxcone regarding 2pi periodicity when
  recombining momenta

- modified the version of the CDF midpoint cone code so as to allow it
  to use mt and Et as the parameters in the split--merge step.

======================================================================
Changes from v2.1.0b1 to v2.1.0b2
=================================

Bug fixes
---------

- included new siscone version which solves the memory-leak problem

Other changes
-------------

- added sample output from the test-script as test-script-output-orig.txt

======================================================================
Changes from v2.1.0b0 to v2.1.0b1
=========================

New features:
-------------

- added the SISCone plugin and the beta version of the siscone code
  (authored by Soyez & Salam)

Bug fixes
---------

- removed extraneous semicolons after functions that were causing
  problems on some compilers.

Other additions
---------------

- Added COPYING file with GPL license

======================================================================
Changes from v2.0 to v2.1 (beta0)
=========================

New features:
-------------

- introduced option of control over recombination scheme, with a
  RecombinationScheme enum (a variable of this type should be provided
  to the JetDefinition constructor) and also the possibility of an
  externally defined recombination scheme.

- introduced a "plugin" facility for alternative jet finders, via an
  abstract base class
 
    class JetDefinition::Plugin

  Plugins are to be provided as classes derived from this,
  implementing the relevant virtual functions (see manual and examples
  for further info).

- introduced "description" member function for the JetDefinition
  class, which returns a (std::string) textual description of the
  algorithm defined.

- provided plugins for CDF JetClu, CDF Midpoint, PxCone code; the
  plugins, the code they interface to and example programs are to be
  found in the new plugins/ directory.

- added ClusterSequence::unclustered_particles() a vector containing
  the unclustered particles (relevant for some plugin algorithms).

Minor additions
---------------

- introduced PseudoJet::squared_distance (does same as "plain_distance")



Notational changes:
-------------------

- in the documentation, replaced eta -> y, to make it clear that it's
  rapidity and not pseudorapidity that is being used throughout. Some
  internal code continues to use variables called "eta" -- but these
  are actually proper rapidity.


======================================================================
Changes from v1.0 to v2.0
=========================

New features:
-------------

- the longitudinally invariant inclusive Cambridge/Aachen jet finder
  has been added.

  Note that the exclusive jets extraction for the Cambridge jet-finder
  does not provide the definition as given in the original Cambridge
  paper. See the documentation for further details

- classes have been introduced for running jet clustering and
  simultaneously collecting information about the area of each jet. 
  The base class specifying the functionality is
   
    class ClusterSequenceWithArea;

  itself derived from ClusterSequence.

  Two derived classes that provide the actual areas functionality are:

    class ClusterSequenceActiveArea;
    class ClusterSequenceActiveAreaExplicitGhosts;

  To construct them, one also needs to specify how one wishes the area
  to be calculated, via a class

    class ActiveAreaSpec;


New optimizations:
------------------
- new clustering strategies have been added:
  
  
    N2MinHeapTiled : like N2Tiled, except that the non-geometric
                     part has been replaced with a N ln N algorithm
                     (overall the strategy still scales as N^2, but with a
                     smaller coefficient)

    NlnNCam, NlnNCam2pi2R, NlnNCam4pi:

                     NlnN strategies specific to the Cambridge/Aachen
                     jet-finder -- the fastest of them is NlnNCam.
                     Depending on the size of the event and of the CPU
                     cache it may be up to 2.5 times faster than the
                     CGAL-based NlnN strategy. Experiment on your own
                     hardware and events to establish whether the
                     speed gain is significant.

                     These strategies are based on the work on dynamic
                     Closest Pair problems by Timothy Chan.

    Best           : (was present before) now attempts to select best 
                     among N2Plain, N2Tiled, N2MinHeapTiled, NlnN. 

                     As the best option for a given N may depend on R
                     and the event structure, you are advised to
                     experiment with individual strategies if the
                     last few tens of percent in speed are critical.
                     


Updates to user interface
-------------------------

While the v1 interface to fastjet has been maintained for backwards
compatibility, for new developments in v2 and related forthcoming
work, a new interface is provided as follows:

- User accessible classes and enums have had the "Fj" prefix removed
  and are instead now in namespace fastjet; the corresponding include
  files are in the include/fastjet directory. So, for example instead
  of

    #include "FjClusterSequence.hh"
    //...
    FjClusterSequence clust_seq(...)

  one now uses the following

    #include "fastjet/ClusterSequence.hh"
    //...
    fastjet::ClusterSequence clust_seq(...)

  If typing "fastjet::" the whole time seems too long-winded, you can
  abbreviate "fastjet" as "fj" with

    namespace fj = fastjet;

  or eliminate the need for it altogether with

    using namespace fastjet;
  
- a new class, fastjet::JetDefinition, has been introduced for holding
  the details of the jet finder (which one, value of R, etc...) that
  is to be used in a given clustering.

    #include "fastjet/JetDefinition.hh"
    #include "fastjet/ClusterSequence.hh"
    //...

    double R = 0.7;

    // define jet algorithm
    fastjet::JetDefinition jet_def(fastjet::kt_algorithm, R);

    // get the cluster sequence for a vector of 4-momenta and the 
    // given jet definition
    fastjet::ClusterSequence clust_seq(momenta, jet_def);

- some errors that previously were assertions now throw an
  fastjet::Error -- exception. A fully uniform handling of exceptions
  is currently some way away however and users for whom this is an
  important issue should contact the authors.
