// Nsubjettiness Package
// Questions/Comments? jthaler@jthaler.net
//
// Copyright (c) 2011-14
// Jesse Thaler, Ken Van Tilburg, Christopher K. Vermilion, and TJ Wilkason
//
//----------------------------------------------------------------------
// 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_NSUBJETTINESS_HH__
#define __FASTJET_CONTRIB_NSUBJETTINESS_HH__
#include
#include "Njettiness.hh"
#include "fastjet/FunctionOfPseudoJet.hh"
#include
#include
FASTJET_BEGIN_NAMESPACE // defined in fastjet/internal/base.hh
namespace contrib {
//------------------------------------------------------------------------
/// \class Nsubjettiness
/// Nsubjettiness extends the concept of Njettiness to a jet shape, but other
/// than the set of particles considered, they are identical. This class
/// wraps the core Njettiness code to provide the fastjet::FunctionOfPseudoJet
/// interface for convenience in larger analyses. See NjettinessPlugin.hh for
/// definitions of tau_N and the constructor options.
class Nsubjettiness : public FunctionOfPseudoJet {
public:
// Main constructor, which takes N, axes/measure modes,
// and up to four parameters for parameters (i.e. beta, Rcutoff, etc depending on measure)
Nsubjettiness(int N,
Njettiness::AxesMode axes_mode,
Njettiness::MeasureMode measure_mode,
double para1 = NAN,
double para2 = NAN,
double para3 = NAN,
double para4 = NAN)
: _njettinessFinder(axes_mode, measure_mode, para1, para2, para3, para4), _N(N) {}
// Old constructor for backwards compatibility with v1.0,
// where normalized_cutoff_measure was the only option
Nsubjettiness(int N,
Njettiness::AxesMode axes_mode,
double beta,
double R0,
double Rcutoff=std::numeric_limits::max())
: _njettinessFinder(axes_mode, Njettiness::normalized_cutoff_measure, beta, R0, Rcutoff), _N(N) {}
/// returns tau_N, measured on the constituents of this jet
double result(const PseudoJet& jet) const;
/// returns components of tau_N, so that user can find individual tau values.
TauComponents component_result(const PseudoJet& jet) const;
/// returns current axes found by result() calculation
std::vector currentAxes() const {
return _njettinessFinder.currentAxes();
}
/// returns seed axes used for onepass minimization (otherwise same as currentAxes)
std::vector seedAxes() const {
return _njettinessFinder.seedAxes();
}
// To set axes for manual use
void setAxes(std::vector myAxes) {
// Cross check that manual axes are being used is in Njettiness
_njettinessFinder.setAxes(myAxes);
}
private:
mutable Njettiness _njettinessFinder; // TODO: should muck with this so result can be const without this mutable
int _N;
};
//------------------------------------------------------------------------
/// \class NsubjettinessRatio
// NsubjettinessRatio uses the results from Nsubjettiness to calculate the ratio
// tau_N/tau_M, where N and M are specified by the user. The ratio of different tau values
// is often used in analyses, so this class is helpful to streamline code.
class NsubjettinessRatio : public FunctionOfPseudoJet {
public:
// Main constructor. Apart from specifying both N and M, the same options as Nsubjettiness
NsubjettinessRatio(int N,
int M,
Njettiness::AxesMode axes_mode,
Njettiness::MeasureMode measure_mode,
double para1 = NAN,
double para2 = NAN,
double para3 = NAN,
double para4 = NAN)
: _nsub_numerator(N, axes_mode, measure_mode, para1, para2, para3, para4),
_nsub_denominator(M, axes_mode, measure_mode, para1, para2, para3, para4) {}
//returns tau_N/tau_M based off the input jet using result function from Nsubjettiness
double result(const PseudoJet& jet) const;
private:
Nsubjettiness _nsub_numerator;
Nsubjettiness _nsub_denominator;
};
} // namespace contrib
FASTJET_END_NAMESPACE
#endif // __FASTJET_CONTRIB_NSUBJETTINESS_HH__