// Nsubjettiness Package
// Questions/Comments? jthaler@jthaler.net
//
// Copyright (c) 2011-14
// Jesse Thaler, Ken Van Tilburg, Christopher K. Vermilion, and TJ Wilkason
//
// $Id: NjettinessPlugin.hh 822 2015-06-15 23:52:57Z jthaler $
//----------------------------------------------------------------------
// This file is part of FastJet contrib.
//
// It is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the
// Free Software Foundation; either version 2 of the License, or (at
// your option) any later version.
//
// It is distributed in the hope that it will be useful, but WITHOUT
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
// License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this code. If not, see .
//----------------------------------------------------------------------
#ifndef __FASTJET_CONTRIB_NJETTINESSPLUGIN_HH__
#define __FASTJET_CONTRIB_NJETTINESSPLUGIN_HH__
#include
#include "Njettiness.hh"
#include "MeasureDefinition.hh"
#include "AxesDefinition.hh"
#include "TauComponents.hh"
#include "fastjet/ClusterSequence.hh"
#include "fastjet/JetDefinition.hh"
#include
#include
FASTJET_BEGIN_NAMESPACE // defined in fastjet/internal/base.hh
namespace contrib {
/// \class NjettinessPlugin
/// \brief Implements the N-jettiness Jet Algorithm
/**
* An exclusive jet finder that identifies N jets; first N axes are found, then
* particles are assigned to the nearest (DeltaR) axis and for each axis the
* corresponding jet is simply the four-momentum sum of these particles.
*
* As of version 2.2, it is recommended to use the XConePlugin, which has
* sensible default values for jet finding.
*
* Axes can be found in several ways, specified by the AxesDefinition argument.
* The recommended AxesDefinitions for jet finding (different than for jet shapes)
* OnePass_AntiKT(R0) : one-pass minimization from anti-kT starting point
* OnePass_GenET_GenKT_Axes(delta, p, R0) : one-pass min. from GenET/KT
* OnePass_WTA_GenKT_Axes(p, R0) : one-pass min from WTA/GenKT
* For recommendations on which axes to use, please see the README file.
*
* Jet regions are determined by the MeasureDefinition. The recommended choices
* for jet finding are
* ConicalMeasure(beta,R0) : perfect cones in rapidity/azimuth plane
* XConeMeasure(beta,R0) : approximate cones based on dot product distances.
*
* Other measures introduced in version 2.2 include OriginalGeometricMeasure,
* ModifiedGeometricMeasure, and ConicalGeometricMeasure, which define N-jettiness
* through dot products of particle momenta with light-like axes. OriginalGeometricMeasure
* produces football-shaped jets due to its central weighting of the beam measure,
* but ModifiedGeometric and ConicalGeometric both deform the original geometric measure
* to allow for cone-shaped jets. The size of these cones can be controlled through Rcutoff
* just as in the other measures. See the README file or MeasureDefinition.hh for information
* on how to call these measures.
*
*/
class NjettinessPlugin : public JetDefinition::Plugin {
public:
/// Constructor with same arguments as Nsubjettiness (N, AxesDefinition, MeasureDefinition)
NjettinessPlugin(int N,
const AxesDefinition & axes_def,
const MeasureDefinition & measure_def)
: _njettinessFinder(axes_def, measure_def), _N(N) {}
/// Description
virtual std::string description () const;
/// Jet radius (this does not make sense yet)
virtual double R() const {return -1.0;} // TODO: make this not stupid
/// The actually clustering, which first called Njettiness and then creates a dummy ClusterSequence
virtual void run_clustering(ClusterSequence&) const;
/// For using manual axes with Njettiness Plugin
void setAxes(const std::vector & myAxes) {
// Cross check that manual axes are being used is in Njettiness
_njettinessFinder.setAxes(myAxes);
}
/// Destructor
virtual ~NjettinessPlugin() {}
private:
Njettiness _njettinessFinder; ///< The core Njettiness that does the heavy lifting
int _N; ///< Number of exclusive jets to find.
/// Warning if the user tries to use v1.0.3 constructor.
static LimitedWarning _old_constructor_warning;
public:
// Alternative constructors that define the measure via enums and parameters
// These constructors are deprecated and will be removed in a future version.
/// \deprecated
/// Old-style constructor with 0 arguments (DEPRECATED)
NjettinessPlugin(int N,
Njettiness::AxesMode axes_mode,
Njettiness::MeasureMode measure_mode)
: _njettinessFinder(axes_mode, measure_mode, 0), _N(N) {
_old_constructor_warning.warn("NjettinessPlugin: You are using the old style constructor. This is deprecated as of v2.1 and will be removed in v3.0. Please use the NjettinessPlugin constructor based on AxesDefinition and MeasureDefinition instead.");
}
/// \deprecated
/// Old-style constructor with 1 argument (DEPRECATED)
NjettinessPlugin(int N,
Njettiness::AxesMode axes_mode,
Njettiness::MeasureMode measure_mode,
double para1)
: _njettinessFinder(axes_mode, measure_mode, 1, para1), _N(N) {
_old_constructor_warning.warn("NjettinessPlugin: You are using the old style constructor. This is deprecated as of v2.1 and will be removed in v3.0. Please use the NjettinessPlugin constructor based on AxesDefinition and MeasureDefinition instead.");
}
/// \deprecated
/// Old-style constructor with 2 arguments (DEPRECATED)
NjettinessPlugin(int N,
Njettiness::AxesMode axes_mode,
Njettiness::MeasureMode measure_mode,
double para1,
double para2)
: _njettinessFinder(axes_mode, measure_mode, 2, para1, para2), _N(N) {
_old_constructor_warning.warn("NjettinessPlugin: You are using the old style constructor. This is deprecated as of v2.1 and will be removed in v3.0. Please use the NjettinessPlugin constructor based on AxesDefinition and MeasureDefinition instead.");
}
/// \deprecated
/// Old-style constructor with 3 arguments (DEPRECATED)
NjettinessPlugin(int N,
Njettiness::AxesMode axes_mode,
Njettiness::MeasureMode measure_mode,
double para1,
double para2,
double para3)
: _njettinessFinder(axes_mode, measure_mode, 3, para1, para2, para3), _N(N) {
_old_constructor_warning.warn("NjettinessPlugin: You are using the old style constructor. This is deprecated as of v2.1 and will be removed in v3.0. Please use the NjettinessPlugin constructor based on AxesDefinition and MeasureDefinition instead.");
}
/// \deprecated
/// Old-style constructor for backwards compatibility with v1.0, when NormalizedCutoffMeasure was the only option
NjettinessPlugin(int N,
Njettiness::AxesMode mode,
double beta,
double R0,
double Rcutoff=std::numeric_limits::max())
: _njettinessFinder(mode, NormalizedCutoffMeasure(beta, R0, Rcutoff)), _N(N) {
_old_constructor_warning.warn("NjettinessPlugin: You are using the old style constructor. This is deprecated as of v2.1 and will be removed in v3.0. Please use the NjettinessPlugin constructor based on AxesDefinition and MeasureDefinition instead.");
}
};
} // namespace contrib
FASTJET_END_NAMESPACE
#endif // __FASTJET_CONTRIB_NJETTINESSPLUGIN_HH__