// Nsubjettiness Package // Questions/Comments? jthaler@jthaler.net // // Copyright (c) 2011-14 // Jesse Thaler, Ken Van Tilburg, Christopher K. Vermilion, and TJ Wilkason // // $Id: Njettiness.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_NJETTINESS_HH__ #define __FASTJET_CONTRIB_NJETTINESS_HH__ #include "MeasureDefinition.hh" #include "AxesDefinition.hh" #include "TauComponents.hh" #include "fastjet/PseudoJet.hh" #include "fastjet/SharedPtr.hh" #include #include #include #include FASTJET_BEGIN_NAMESPACE // defined in fastjet/internal/base.hh namespace contrib { /** \mainpage Nsubjettiness Documentation * * These Doxygen pages provide automatically generated documentation for the * Nsubjettiness FastJet contrib. This documentation is being slowly improved. * * \section core_classes Core Classes * * - Nsubjettiness: Calculating N-subjettiness jet shapes * - NsubjettinessRatio: Calculating N-subjettiness ratios * - XConePlugin: Running the XCone jet algorithm * - NjettinessPlugin: Running generic N-jettiness as a jet algorithm * * \subsection core_classes_helper Helper Classes for Core * - Njettiness: Core code for all N-(sub)jettiness calculations * - NjettinessExtras: Way to access additional N-jettiness information * - TauComponents: Output format for all N-(sub)jettiness information * - TauPartition: Access to N-(sub)jettiness partitioning information * - PseudoXConePlugin: Testing code to compare to XConePlugin (doesn't use one-pass minimization) * * \section axes_classes Axes Definitions * * \subsection axes_classes_base Base Classes * - AxesDefinition: Defines generic axes definition * - ExclusiveJetAxes: Axes finder from exclusive jet algorithm * - ExclusiveCombinatorialJetAxes: Axes finder from exclusive jet algorithm (with extra axes to test combinatoric options) * - HardestJetAxes: Axes finder from inclusive jet algorithm * * \subsection axes_classes_derived Derived Classes * * \b OnePass means iterative improvement to a (local) N-(sub)jettiness minimum. * * \b MultiPass means using multiple random seed inputs * * \b Comb means checking N + Nextra choose N combinatorial options * * - KT_Axes / OnePass_KT_Axes: Axes from exclusive kT * - CA_Axes / OnePass_CA_Axes: Axes from exclusive Cambridge/Aachen * - AntiKT_Axes / OnePass_AntiKT_Axes: Axes from inclusive anti-kT * - WTA_KT_Axes / OnePass_WTA_KT_Axes: Axes from exclusive kT, using winner-take-all recombination * - WTA_CA_Axes / OnePass_WTA_CA_Axes: Axes from exclusive CA, using winner-take-all recombination * * - GenET_GenKT_Axes / OnePass_GenET_GenKT_Axes / Comb_GenET_GenKT_Axes: Axes from exclusive generalized kt, with generalized Et recombination * - WTA_GenKT_Axes / OnePass_WTA_GenKT_Axes / Comb_WTA_GenKT_Axes: Axes from exclusive generalized kt, with winner-take-all recombination * * - Manual_Axes / OnePass_Manual_Axes / MultiPass_Manual_Axes: Use manual axes * - MultiPass_Axes: Multiple passes with random input seeds * * \subsection axes_classes_helper Helper Classes for Axes * - GeneralEtSchemeRecombiner: Generalized Et-scheme recombiner * - WinnerTakeAllRecombiner: Winner-take-all recombiner (similar functionality now in FastJet 3.1) * - JetDefinitionWrapper: Wrapper for Jet Definitions to handle memory management * * \section measure_classes Measure Definitions * * \subsection measure_classes_bases Base Classes * - MeasureDefinition: Defines generic measures * - DefaultMeasure: Base class for the original N-subjettiness measures * * \subsection measure_classes_derived Derived Classes * - NormalizedMeasure / UnnormalizedMeasure / NormalizedCutoffMeasure / UnnormalizedCutoffMeasure : Variants on the default N-subjettiness measure. * - ConicalMeasure: Similar to default measure, but intended as N-jettiness event shape * - ConicalGeometricMeasure / XConeMeasure: Measure used in XCone jet algorithm * - OriginalGeometricMeasure / ModifiedGeometricMeasure: Dot product measures useful for theoretical calcualtions * * \subsection measure_classes_helper Helper Classes for Measures * - LightLikeAxis : Defines light-like axis */ /////// // // Main Njettiness Class // /////// ///------------------------------------------------------------------------ /// \class Njettiness /// \brief Core class for N-(sub)jettiness calculations /// /** * The N-jettiness event shape. * * This is the core class used to perform N-jettiness jet finding (via NjettinessPlugin or XConePluggin) * as well as find the N-subjettiness jet shape (via Nsubjettiness). * * In general, the user should never need to call this object. In addition, its API should not be considered * fixed, since all code improvements effectively happen from reorganizing this class. * * Njettiness uses AxesDefinition and MeasureDefinition together in order to find tau_N for the event. * It also can return information about the axes and jets it used in the calculation, as well as * information about how the event was partitioned. */ class Njettiness { public: /// Main constructor that uses AxesMode and MeasureDefinition to specify measure /// Unlike Nsubjettiness or NjettinessPlugin, the value N is not chosen Njettiness(const AxesDefinition & axes_def, const MeasureDefinition & measure_def); /// Destructor ~Njettiness() {}; /// setAxes for Manual mode void setAxes(const std::vector & myAxes); /// Calculates and returns all TauComponents that user would want. /// This information is stored in _current_tau_components for later access as well. TauComponents getTauComponents(unsigned n_jets, const std::vector & inputJets) const; /// Calculates the value of N-subjettiness, /// but only returns the tau value from _current_tau_components double getTau(unsigned n_jets, const std::vector & inputJets) const { return getTauComponents(n_jets, inputJets).tau(); } /// Return all relevant information about tau components TauComponents currentTauComponents() const {return _current_tau_components;} /// Return axes found by getTauComponents. std::vector currentAxes() const { return _currentAxes;} /// Return seedAxes used if onepass minimization (otherwise, same as currentAxes) std::vector seedAxes() const { return _seedAxes;} /// Return jet partition found by getTauComponents. std::vector currentJets() const {return _currentPartition.jets();} /// Return beam partition found by getTauComponents. fastjet::PseudoJet currentBeam() const {return _currentPartition.beam();} /// Return beam partition found by getTauComponents. TauPartition currentPartition() const {return _currentPartition;} private: /// AxesDefinition to use. Implemented as SharedPtrs to avoid memory management headaches SharedPtr _axes_def; /// MeasureDefinition to use. Implemented as SharedPtrs to avoid memory management headaches SharedPtr _measure_def; // Information about the current information // Defined as mutables, so user should be aware that these change when getTau is called. // TODO: These are not thread safe and should be fixed somehow mutable TauComponents _current_tau_components; //automatically set to have components of 0; these values will be set by the getTau function call mutable std::vector _currentAxes; //axes found after minimization mutable std::vector _seedAxes; // axes used prior to minimization (if applicable) mutable TauPartition _currentPartition; //partitioning information /// Warning if the user tries to use v1.0.3 measure style. static LimitedWarning _old_measure_warning; /// Warning if the user tries to use v1.0.3 axes style. static LimitedWarning _old_axes_warning; public: // These interfaces are included for backwards compability, and will be deprecated in a future release (scheduled for deletion in v3.0) /// \deprecated /// Deprecated enum to determine axes mode /// The various axes choices available to the user /// It is recommended to use AxesDefinition instead of these. enum AxesMode { kt_axes, // exclusive kt axes ca_axes, // exclusive ca axes antikt_0p2_axes, // inclusive hardest axes with antikt-0.2 wta_kt_axes, // Winner Take All axes with kt wta_ca_axes, // Winner Take All axes with CA onepass_kt_axes, // one-pass minimization from kt starting point onepass_ca_axes, // one-pass minimization from ca starting point onepass_antikt_0p2_axes, // one-pass minimization from antikt-0.2 starting point onepass_wta_kt_axes, //one-pass minimization of WTA axes with kt onepass_wta_ca_axes, //one-pass minimization of WTA axes with ca min_axes, // axes that minimize N-subjettiness (100 passes by default) manual_axes, // set your own axes with setAxes() onepass_manual_axes // one-pass minimization from manual starting point }; /// \deprecated /// Deprecated enum to determine measure mode /// The measures available to the user. /// "normalized_cutoff_measure" was the default in v1.0 of Nsubjettiness /// "unnormalized_measure" is now the recommended default usage /// But it is recommended to use MeasureDefinition instead of these. enum MeasureMode { normalized_measure, //default normalized measure unnormalized_measure, //default unnormalized measure geometric_measure, //geometric measure normalized_cutoff_measure, //default normalized measure with explicit Rcutoff unnormalized_cutoff_measure, //default unnormalized measure with explicit Rcutoff geometric_cutoff_measure //geometric measure with explicit Rcutoff }; /// \deprecated /// Intermediate constructor (needed to enable v1.0.3 backwards compatibility?) Njettiness(AxesMode axes_mode, const MeasureDefinition & measure_def); /// \deprecated /// Old-style constructor which takes axes/measure information as enums with measure parameters /// This version absolutely is not recommended Njettiness(AxesMode axes_mode, MeasureMode measure_mode, int num_para, double para1 = std::numeric_limits::quiet_NaN(), double para2 = std::numeric_limits::quiet_NaN(), double para3 = std::numeric_limits::quiet_NaN()) : _axes_def(createAxesDef(axes_mode)), _measure_def(createMeasureDef(measure_mode, num_para, para1, para2, para3)) { } /// \deprecated /// Convert old style enums into new style MeasureDefinition AxesDefinition* createAxesDef(AxesMode axes_mode) const; /// \deprecated /// Convert old style enums into new style MeasureDefinition MeasureDefinition* createMeasureDef(MeasureMode measure_mode, int num_para, double para1, double para2, double para3) const; }; } // namespace contrib FASTJET_END_NAMESPACE #endif // __FASTJET_CONTRIB_NJETTINESS_HH__