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 | //
|
---|
7 | // $Id: NjettinessPlugin.cc 821 2015-06-15 18:50:53Z jthaler $
|
---|
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 "NjettinessPlugin.hh"
|
---|
26 |
|
---|
27 | FASTJET_BEGIN_NAMESPACE // defined in fastjet/internal/base.hh
|
---|
28 |
|
---|
29 | namespace contrib{
|
---|
30 |
|
---|
31 | LimitedWarning NjettinessPlugin::_old_constructor_warning;
|
---|
32 |
|
---|
33 | std::string NjettinessPlugin::description() const {return "N-jettiness jet finder";}
|
---|
34 |
|
---|
35 |
|
---|
36 | // Clusters the particles according to the Njettiness jet algorithm
|
---|
37 | // Apologies for the complication with this code, but we need to make
|
---|
38 | // a fake jet clustering tree. The partitioning is done by getPartitionList
|
---|
39 | void NjettinessPlugin::run_clustering(ClusterSequence& cs) const
|
---|
40 | {
|
---|
41 | std::vector<fastjet::PseudoJet> particles = cs.jets();
|
---|
42 |
|
---|
43 | // HACK: remove area information from particles (in case this is called by
|
---|
44 | // a ClusterSequenceArea. Will be fixed in a future FastJet release)
|
---|
45 | for (unsigned i = 0; i < particles.size(); i++) {
|
---|
46 | particles[i].set_structure_shared_ptr(SharedPtr<PseudoJetStructureBase>());
|
---|
47 | }
|
---|
48 |
|
---|
49 |
|
---|
50 | TauComponents tau_components = _njettinessFinder.getTauComponents(_N, particles);
|
---|
51 | TauPartition tau_partition = _njettinessFinder.currentPartition();
|
---|
52 | std::vector<std::list<int> > partition = tau_partition.jets_list();
|
---|
53 |
|
---|
54 | std::vector<int> jet_indices_for_extras;
|
---|
55 |
|
---|
56 | // output clusterings for each jet
|
---|
57 | for (size_t i0 = 0; i0 < partition.size(); ++i0) {
|
---|
58 | size_t i = partition.size() - 1 - i0; // reversed order of reading to match axes order
|
---|
59 | std::list<int>& indices = partition[i];
|
---|
60 | if (indices.size() == 0) continue;
|
---|
61 | while (indices.size() > 1) {
|
---|
62 | int merge_i = indices.back(); indices.pop_back();
|
---|
63 | int merge_j = indices.back(); indices.pop_back();
|
---|
64 | int newIndex;
|
---|
65 | double fakeDij = -1.0;
|
---|
66 |
|
---|
67 | cs.plugin_record_ij_recombination(merge_i, merge_j, fakeDij, newIndex);
|
---|
68 |
|
---|
69 | indices.push_back(newIndex);
|
---|
70 | }
|
---|
71 | double fakeDib = -1.0;
|
---|
72 |
|
---|
73 | int finalJet = indices.back();
|
---|
74 | cs.plugin_record_iB_recombination(finalJet, fakeDib);
|
---|
75 | jet_indices_for_extras.push_back(cs.jets()[finalJet].cluster_hist_index()); // Get the four vector for the final jets to compare later.
|
---|
76 | }
|
---|
77 |
|
---|
78 | //HACK: Re-reverse order of reading to match CS order
|
---|
79 | reverse(jet_indices_for_extras.begin(),jet_indices_for_extras.end());
|
---|
80 |
|
---|
81 | // Store extra information about jets
|
---|
82 | NjettinessExtras * extras = new NjettinessExtras(tau_components,jet_indices_for_extras);
|
---|
83 |
|
---|
84 | #if FASTJET_VERSION_NUMBER>=30100
|
---|
85 | cs.plugin_associate_extras(extras);
|
---|
86 | #else
|
---|
87 | // auto_ptr no longer supported, apparently
|
---|
88 | cs.plugin_associate_extras(std::auto_ptr<ClusterSequence::Extras>(extras));
|
---|
89 | #endif
|
---|
90 |
|
---|
91 | }
|
---|
92 |
|
---|
93 |
|
---|
94 | } // namespace contrib
|
---|
95 |
|
---|
96 | FASTJET_END_NAMESPACE
|
---|