#ifndef __FASTJET_RESTFRAMENSUBJETTINESS_TAGGER_HH__
#define __FASTJET_RESTFRAMENSUBJETTINESS_TAGGER_HH__
//STARTHEADER
// $Id: RestFrameNSubjettinessTagger.hh 2689 2011-11-14 14:51:06Z soyez $
//
// Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
//
//----------------------------------------------------------------------
// This file is part of FastJet.
//
// FastJet 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.
//
// The algorithms that underlie FastJet have required considerable
// development and are described in hep-ph/0512210. If you use
// FastJet as part of work towards a scientific publication, please
// include a citation to the FastJet paper.
//
// FastJet 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 FastJet. If not, see .
//----------------------------------------------------------------------
//ENDHEADER
#include
#include
#include
#include
FASTJET_BEGIN_NAMESPACE
class RestFrameNSubjettinessTagger;
class RestFrameNSubjettinessTaggerStructure;
//----------------------------------------------------------------------
/// @ingroup tools_taggers
/// \class RestFrameNSubjettinessTagger
/// Class that helps perform 2-pronged boosted tagging using
/// a reclustering in the jet's rest frame, supplemented with a cut on N-subjettiness
/// (and a decay angle), as discussed by Ji-Hun Kim in arXiv:1011.1493.
///
/// To tag a fat jet, the tagger proceeds as follows:
///
/// - boost its constituents into the rest frame of the jet
///
/// - recluster them using another jet definition (the original
/// choice was SISCone in spherical coordinates with R=0.6 and
/// f=0.75.
///
/// - keep the 2 most energetic subjets (\f$q_{1,2}\f$) and compute
/// the 2-subjettiness
/// \f[
/// \tau_2^j = \frac{2}{m_{\rm jet}^2}\,
/// \sum_{k\in {\rm jet}} {\rm min}(q_1.p_k,q_2.p_k)
/// \f]
/// where the sum runs over the constituents of the jet.
///
/// - require \f$\tau_2^j < \tau_2^{\rm cut}\f$ [0.08 by default]
///
/// - impose that (in the rest frame of the fat jet), the angles
/// between the 2 most energetic subjets and the boost axis are
/// both large enough: \f$\cos(\theta_s)()
/// function
///
class RestFrameNSubjettinessTagger : public Transformer{
public:
/// ctor with arguments (see the class description above)
RestFrameNSubjettinessTagger(const JetDefinition subjet_def,
const double tau2cut=0.08,
const double costhetascut=0.8,
const bool use_exclusive = false)
: _subjet_def(subjet_def), _t2cut(tau2cut), _costscut(costhetascut),
_use_exclusive(use_exclusive){};
/// returns a textual description of the tagger
virtual std::string description() const;
/// runs the tagger on the given jet and
/// returns the tagged PseudoJet if successful, a PseudoJet==0 otherwise
/// (standard access is through operator()).
virtual PseudoJet result(const PseudoJet & jet) const;
/// the type of Structure returned
typedef RestFrameNSubjettinessTaggerStructure StructureType;
protected:
JetDefinition _subjet_def;
double _t2cut, _costscut;
bool _use_exclusive;
};
//------------------------------------------------------------------------
/// @ingroup tools_taggers
/// \class RestFrameNSubjettinessTaggerStructure
/// the structure returned by the RestFrameNSubjettinessTagger transformer.
///
/// See the RestFrameNSubjettinessTagger class description for the details of
/// what is inside this structure
///
class RestFrameNSubjettinessTaggerStructure : public CompositeJetStructure{
public:
/// ctor with pieces initialisation
RestFrameNSubjettinessTaggerStructure(const std::vector & pieces_in) :
CompositeJetStructure(pieces_in), _tau2(0.0), _costhetas(1.0){}
/// returns the associated N-subjettiness
inline double tau2() const{return _tau2;}
/// returns the associated angle with the boosted axis
inline double costhetas() const {return _costhetas;}
// /// returns the original jet (before tagging)
// const PseudoJet & original() const {return _original_jet;}
protected:
double _tau2; ///< the value of the N-subjettiness
double _costhetas; ///< the minimal angle between the dijets
///< and the boost axis
// PseudoJet _original_jet; ///< the original jet (before tagging)
// allow the tagger to set these
friend class RestFrameNSubjettinessTagger;
};
FASTJET_END_NAMESPACE
#endif // __FASTJET_RESTFRAMENSUBJETTINESS_TAGGER_HH__