Fork me on GitHub

source: git/external/fastjet/contribs/Nsubjettiness/Njettiness.cc@ 9327245

Last change on this file since 9327245 was 973b92a, checked in by Pavel Demin <pavel.demin@…>, 9 years ago

update FastJet library to 3.1.3 and Nsubjettiness library to 2.2.1

  • Property mode set to 100644
File size: 7.9 KB
RevLine 
[9687203]1// Nsubjettiness Package
2// Questions/Comments? jthaler@jthaler.net
3//
4// Copyright (c) 2011-14
5// Jesse Thaler, Ken Van Tilburg, Christopher K. Vermilion, and TJ Wilkason
6//
[973b92a]7// $Id: Njettiness.cc 821 2015-06-15 18:50:53Z jthaler $
[9687203]8//----------------------------------------------------------------------
9// This file is part of FastJet contrib.
10//
11// It is free software; you can redistribute it and/or modify it under
12// the terms of the GNU General Public License as published by the
13// Free Software Foundation; either version 2 of the License, or (at
14// your option) any later version.
15//
16// It is distributed in the hope that it will be useful, but WITHOUT
17// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
18// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
19// License for more details.
20//
21// You should have received a copy of the GNU General Public License
22// along with this code. If not, see <http://www.gnu.org/licenses/>.
23//----------------------------------------------------------------------
24
25#include "Njettiness.hh"
26
27FASTJET_BEGIN_NAMESPACE // defined in fastjet/internal/base.hh
28
29namespace contrib {
30
31
32///////
33//
34// Main Njettiness Class
35//
36///////
37
[973b92a]38LimitedWarning Njettiness::_old_measure_warning;
39LimitedWarning Njettiness::_old_axes_warning;
40
41
42// Constructor
[35cdc46]43Njettiness::Njettiness(const AxesDefinition & axes_def, const MeasureDefinition & measure_def)
[973b92a]44: _axes_def(axes_def.create()), _measure_def(measure_def.create()) {}
45
46// setAxes for Manual mode
47void Njettiness::setAxes(const std::vector<fastjet::PseudoJet> & myAxes) {
48 if (_axes_def()->needsManualAxes()) {
49 _currentAxes = myAxes;
50 } else {
51 throw Error("You can only use setAxes for manual AxesDefinitions");
52 }
[9687203]53}
[973b92a]54
55// Calculates and returns all TauComponents that user would want.
56// This information is stored in _current_tau_components for later access as well.
57TauComponents Njettiness::getTauComponents(unsigned n_jets, const std::vector<fastjet::PseudoJet> & inputJets) const {
58 if (inputJets.size() <= n_jets) { //if not enough particles, return zero
59 _currentAxes = inputJets;
60 _currentAxes.resize(n_jets,fastjet::PseudoJet(0.0,0.0,0.0,0.0));
61 _current_tau_components = TauComponents();
62 _seedAxes = _currentAxes;
63 _currentPartition = TauPartition(n_jets); // empty partition
64 } else {
65 assert(_axes_def()); // this should never fail.
66
67 if (_axes_def()->needsManualAxes()) { // if manual mode
68 // take current axes as seeds
69 _seedAxes = _currentAxes;
70
71 // refine axes if requested
72 _currentAxes = _axes_def->get_refined_axes(n_jets,inputJets,_seedAxes, _measure_def());
73 } else { // non-manual axes
74
75 //set starting point for minimization
76 _seedAxes = _axes_def->get_starting_axes(n_jets,inputJets,_measure_def());
77
78 // refine axes as needed
79 _currentAxes = _axes_def->get_refined_axes(n_jets,inputJets,_seedAxes, _measure_def());
80
81 // NOTE: The above two function calls are combined in "AxesDefinition::get_axes"
82 // but are separated here to allow seed axes to be stored.
83 }
84
85 // Find and store partition
86 _currentPartition = _measure_def->get_partition(inputJets,_currentAxes);
87
88 // Find and store tau value
89 _current_tau_components = _measure_def->component_result_from_partition(_currentPartition, _currentAxes); // sets current Tau Values
90 }
91 return _current_tau_components;
[35cdc46]92}
93
[973b92a]94
95///////
96//
97// Below is code for backward compatibility to use the old interface.
98// May be deleted in a future version
99//
100///////
101
102Njettiness::Njettiness(AxesMode axes_mode, const MeasureDefinition & measure_def)
103: _axes_def(createAxesDef(axes_mode)), _measure_def(measure_def.create()) {}
104
[35cdc46]105// Convert from MeasureMode enum to MeasureDefinition
106// This returns a pointer that will be claimed by a SharedPtr
107MeasureDefinition* Njettiness::createMeasureDef(MeasureMode measure_mode, int num_para, double para1, double para2, double para3) const {
[973b92a]108
109 _old_measure_warning.warn("Njettiness::createMeasureDef: You are using the old MeasureMode way of specifying N-subjettiness measures. This is deprecated as of v2.1 and will be removed in v3.0. Please use MeasureDefinition instead.");
110
[9687203]111 // definition of maximum Rcutoff for non-cutoff measures, changed later by other measures
112 double Rcutoff = std::numeric_limits<double>::max(); //large number
[35cdc46]113 // Most (but not all) measures have some kind of beta value
114 double beta = std::numeric_limits<double>::quiet_NaN();
[9687203]115 // The normalized measures have an R0 value.
[35cdc46]116 double R0 = std::numeric_limits<double>::quiet_NaN();
117
[9687203]118 // Find the MeasureFunction and set the parameters.
119 switch (measure_mode) {
120 case normalized_measure:
121 beta = para1;
122 R0 = para2;
[35cdc46]123 if(num_para == 2) {
124 return new NormalizedMeasure(beta,R0);
125 } else {
126 throw Error("normalized_measure needs 2 parameters (beta and R0)");
127 }
[9687203]128 break;
129 case unnormalized_measure:
130 beta = para1;
[35cdc46]131 if(num_para == 1) {
132 return new UnnormalizedMeasure(beta);
133 } else {
134 throw Error("unnormalized_measure needs 1 parameter (beta)");
135 }
[9687203]136 break;
137 case geometric_measure:
[973b92a]138 throw Error("This class has been removed. Please use OriginalGeometricMeasure, ModifiedGeometricMeasure, or ConicalGeometricMeasure with the new Njettiness constructor.");
[9687203]139 break;
140 case normalized_cutoff_measure:
141 beta = para1;
142 R0 = para2;
143 Rcutoff = para3; //Rcutoff parameter is 3rd parameter in normalized_cutoff_measure
[35cdc46]144 if (num_para == 3) {
145 return new NormalizedCutoffMeasure(beta,R0,Rcutoff);
146 } else {
147 throw Error("normalized_cutoff_measure has 3 parameters (beta, R0, Rcutoff)");
148 }
[9687203]149 break;
150 case unnormalized_cutoff_measure:
151 beta = para1;
152 Rcutoff = para2; //Rcutoff parameter is 2nd parameter in normalized_cutoff_measure
[35cdc46]153 if (num_para == 2) {
154 return new UnnormalizedCutoffMeasure(beta,Rcutoff);
155 } else {
156 throw Error("unnormalized_cutoff_measure has 2 parameters (beta, Rcutoff)");
157 }
[9687203]158 break;
159 case geometric_cutoff_measure:
[973b92a]160 throw Error("This class has been removed. Please use OriginalGeometricMeasure, ModifiedGeometricMeasure, or ConicalGeometricMeasure with the new Njettiness constructor.");
[9687203]161 default:
162 assert(false);
163 break;
[35cdc46]164 }
165 return NULL;
166}
[9687203]167
[35cdc46]168// Convert from AxesMode enum to AxesDefinition
169// This returns a pointer that will be claimed by a SharedPtr
170AxesDefinition* Njettiness::createAxesDef(Njettiness::AxesMode axes_mode) const {
171
[973b92a]172 _old_axes_warning.warn("Njettiness::createAxesDef: You are using the old AxesMode way of specifying N-subjettiness axes. This is deprecated as of v2.1 and will be removed in v3.0. Please use AxesDefinition instead.");
173
174
[9687203]175 switch (axes_mode) {
176 case wta_kt_axes:
[35cdc46]177 return new WTA_KT_Axes();
[9687203]178 case wta_ca_axes:
[35cdc46]179 return new WTA_CA_Axes();
[9687203]180 case kt_axes:
[35cdc46]181 return new KT_Axes();
[9687203]182 case ca_axes:
[35cdc46]183 return new CA_Axes();
[9687203]184 case antikt_0p2_axes:
[35cdc46]185 return new AntiKT_Axes(0.2);
[9687203]186 case onepass_wta_kt_axes:
[35cdc46]187 return new OnePass_WTA_KT_Axes();
[9687203]188 case onepass_wta_ca_axes:
[35cdc46]189 return new OnePass_WTA_CA_Axes();
[9687203]190 case onepass_kt_axes:
[35cdc46]191 return new OnePass_KT_Axes();
[9687203]192 case onepass_ca_axes:
[35cdc46]193 return new OnePass_CA_Axes();
[9687203]194 case onepass_antikt_0p2_axes:
[35cdc46]195 return new OnePass_AntiKT_Axes(0.2);
[9687203]196 case onepass_manual_axes:
[35cdc46]197 return new OnePass_Manual_Axes();
198 case min_axes:
199 return new MultiPass_Axes(100);
[9687203]200 case manual_axes:
[35cdc46]201 return new Manual_Axes();
[9687203]202 default:
203 assert(false);
[35cdc46]204 return NULL;
205 }
206}
[9687203]207
[35cdc46]208
[9687203]209
210
211
212} // namespace contrib
213
214FASTJET_END_NAMESPACE
Note: See TracBrowser for help on using the repository browser.