Fork me on GitHub

Changeset 35cdc46 in git for external/fastjet


Ignore:
Timestamp:
Sep 3, 2014, 3:18:54 PM (10 years ago)
Author:
Pavel Demin <demin@…>
Branches:
ImprovedOutputFile, Timing, dual_readout, llp, master
Children:
be2222c
Parents:
5b5a56b
Message:

upgrade FastJet to version 3.1.0-beta.1, upgrade Nsubjettiness to version 2.1.0, add SoftKiller version 1.0.0

Location:
external/fastjet
Files:
30 added
173 edited

Legend:

Unmodified
Added
Removed
  • external/fastjet/AUTHORS

    r5b5a56b r35cdc46  
    1010----------------------------------------------------------------------
    1111
    12 Many people have provided bug reports, suggestions for development and
    13 in some cases explicit code for plugin algorithms. We would in
    14 particular like to thank
     12Many people have provided bug reports, suggestions for development,
     13documentation and in some cases explicit code for plugin
     14algorithms. We would in particular like to thank
    1515
    1616Vanya Belyaev
     
    3232Hartmut Stadie
    3333Mark Sutton
     34Jesse Thaler
    3435Chris Vermilion
    3536Markus Wobisch
  • external/fastjet/ActiveAreaSpec.hh

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id: ActiveAreaSpec.hh 2577 2011-09-13 15:11:38Z salam $
     1//FJSTARTHEADER
     2// $Id: ActiveAreaSpec.hh 3433 2014-07-23 08:17:03Z salam $
    33//
    4 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     4// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931
  • external/fastjet/AreaDefinition.cc

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id$
     1//FJSTARTHEADER
     2// $Id: AreaDefinition.cc 3619 2014-08-13 14:17:19Z salam $
    33//
    4 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     4// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931#include "fastjet/AreaDefinition.hh"
     
    6870    break;
    6971  default:
    70     cerr << "Error: unrecognized area_type in AreaDefinition::description():"
     72    ostr << "Error: unrecognized area_type in AreaDefinition::description():"
    7173         << area_type() << endl;
    72     exit(-1);
     74    throw Error(ostr.str());
    7375  }
    7476  return ostr.str();
  • external/fastjet/AreaDefinition.hh

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id: AreaDefinition.hh 2687 2011-11-14 11:17:51Z soyez $
     1//FJSTARTHEADER
     2// $Id: AreaDefinition.hh 3433 2014-07-23 08:17:03Z salam $
    33//
    4 // Copyright (c) 2006-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     4// Copyright (c) 2006-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931
  • external/fastjet/BasicRandom.cc

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // simple random number generator class taken from nlojet++.
    3 // $Id$
     1//FJSTARTHEADER
     2// $Id: BasicRandom.cc 3433 2014-07-23 08:17:03Z salam $
    43//
    5 //  Copyright (C) 2002 Zoltan Nagy
     4// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    65//
    7 //  This program is free software; you can redistribute it and/or modify
     6//----------------------------------------------------------------------
     7// This file is part of FastJet.
     8//
     9//  FastJet is free software; you can redistribute it and/or modify
    810//  it under the terms of the GNU General Public License as published by
    911//  the Free Software Foundation; either version 2 of the License, or
    1012//  (at your option) any later version.
    1113//
    12 //  This program is distributed in the hope that it will be useful,
     14//  The algorithms that underlie FastJet have required considerable
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
     17//  FastJet as part of work towards a scientific publication, please
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
     20//
     21//  FastJet is distributed in the hope that it will be useful,
    1322//  but WITHOUT ANY WARRANTY; without even the implied warranty of
    1423//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     
    1625//
    1726//  You should have received a copy of the GNU General Public License
    18 //  along with this program; if not, write to the Free Software
    19 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
    20 //ENDHEADER
     27//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
     28//----------------------------------------------------------------------
     29//FJENDHEADER
    2130
    2231//   nlo includes
  • external/fastjet/CircularRange.hh

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id: CircularRange.hh 2577 2011-09-13 15:11:38Z salam $
     1//FJSTARTHEADER
     2// $Id: CircularRange.hh 3433 2014-07-23 08:17:03Z salam $
    33//
    4 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     4// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931
  • external/fastjet/ClosestPair2D.cc

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id$
    3 //
    4 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     1//FJSTARTHEADER
     2// $Id: ClosestPair2D.cc 3433 2014-07-23 08:17:03Z salam $
     3//
     4// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931#include "fastjet/internal/ClosestPair2D.hh"
     
    3638FASTJET_BEGIN_NAMESPACE      // defined in fastjet/internal/base.hh
    3739
    38 const unsigned int huge_unsigned = 4294967295U;
    3940const unsigned int twopow31      = 2147483648U;
    4041
     
    183184  ID2 = _ID(_points[ID1].neighbour);
    184185  distance2 = _points[ID1].neighbour_dist2;
     186  // we make the swap explicitly in the std namespace to avoid
     187  // potential conflict with the fastjet::swap introduced by
     188  // SharedPtr.
     189  // This is only an issue because we are in the fastjet namespace
    185190  if (ID1 > ID2) std::swap(ID1,ID2);
    186191}
  • external/fastjet/ClusterSequence.cc

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id$
     1//FJSTARTHEADER
     2// $Id: ClusterSequence.cc 3619 2014-08-13 14:17:19Z salam $
    33//
    4 // Copyright (c) 2005-2013, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     4// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931#include "fastjet/Error.hh"
     
    3234#include "fastjet/ClusterSequenceStructure.hh"
    3335#include "fastjet/version.hh" // stores the current version number
     36#include "fastjet/internal/LazyTiling9Alt.hh"
     37#include "fastjet/internal/LazyTiling9.hh"
     38#include "fastjet/internal/LazyTiling25.hh"
     39#include "fastjet/internal/LazyTiling9SeparateGhosts.hh"
    3440#include<iostream>
    3541#include<sstream>
     
    187193//DEP //----------------------------------------------------------------------
    188194//DEP void ClusterSequence::_initialise_and_run (
    189 //DEP                             const double & R,
     195//DEP                             const double R,
    190196//DEP                             const Strategy & strategy,
    191197//DEP                             const bool & writeout_combinations) {
     
    273279  //             ./fastjet_timing_plugins -kt -nhardest 30 -repeat 50000 -strategy -3 -R 0.5 -nev 1  <  ../../data/Pythia-PtMin1000-LHC-1000ev.dat
    274280  if (_strategy == Best) {
     281    _strategy = _best_strategy();
     282#ifdef DROP_CGAL
     283    // fall back strategy for large N when CGAL is missing
     284    if (_strategy == NlnN) _strategy = N2MHTLazy25;
     285#endif  // DROP_CGAL
     286  } else if (_strategy == BestFJ30) {
    275287    int N = _jets.size();
    276288    //if (N <= 55*max(0.5,min(1.0,_Rparam))) {// old empirical scaling with R
     
    324336  // run the code containing the selected strategy
    325337  //
    326   // We order the strategies stqrting from the ones used by the Best
     338  // We order the strategies starting from the ones used by the Best
    327339  // strategy in the order of increasing N, then the remaining ones
    328340  // again in the order of increasing N.
     
    334346  } else if (_strategy == N2MinHeapTiled) {
    335347    this->_minheap_faster_tiled_N2_cluster();
     348  } else if (_strategy == N2MHTLazy9Alt) {
     349    // attempt to use an external tiling routine -- it manipulates
     350    // the CS history via the plugin mechanism
     351    _plugin_activated = true;
     352    LazyTiling9Alt tiling(*this);
     353    tiling.run();
     354    _plugin_activated = false;
     355
     356  } else if (_strategy == N2MHTLazy25) {
     357    // attempt to use an external tiling routine -- it manipulates
     358    // the CS history via the plugin mechanism
     359    _plugin_activated = true;
     360    LazyTiling25 tiling(*this);
     361    tiling.run();
     362    _plugin_activated = false;
     363
     364  } else if (_strategy == N2MHTLazy9) {
     365    // attempt to use an external tiling routine -- it manipulates
     366    // the CS history via the plugin mechanism
     367    _plugin_activated = true;
     368    LazyTiling9 tiling(*this);
     369    tiling.run();
     370    _plugin_activated = false;
     371
     372  } else if (_strategy == N2MHTLazy9AntiKtSeparateGhosts) {
     373    // attempt to use an external tiling routine -- it manipulates
     374    // the CS history via the plugin mechanism
     375    _plugin_activated = true;
     376    LazyTiling9SeparateGhosts tiling(*this);
     377    tiling.run();
     378    _plugin_activated = false;
     379
    336380  } else if (_strategy == NlnN) {
    337381    this->_delaunay_cluster();
     
    359403// these needs to be defined outside the class definition.
    360404bool ClusterSequence::_first_time = true;
    361 int ClusterSequence::_n_exclusive_warnings = 0;
     405LimitedWarning ClusterSequence::_exclusive_warnings;
    362406
    363407
     
    473517
    474518//----------------------------------------------------------------------
    475 // Return the component corresponding to the specified index.
    476 // taken from CLHEP
    477519string ClusterSequence::strategy_string (Strategy strategy_in)  const {
    478520  string strategy;
     
    492534  case N2PoorTiled:
    493535    strategy = "N2PoorTiled"; break;
     536  case N2MHTLazy9:
     537    strategy = "N2MHTLazy9"; break;
     538  case N2MHTLazy9Alt:
     539    strategy = "N2MHTLazy9Alt"; break;
     540  case N2MHTLazy25:
     541    strategy = "N2MHTLazy25"; break;
     542  case N2MHTLazy9AntiKtSeparateGhosts:
     543    strategy = "N2MHTLazy9AntiKtSeparateGhosts"; break;
    494544  case N3Dumb:
    495545    strategy = "N3Dumb"; break;
     
    528578    } else {return 1.0;}
    529579  } else {throw Error("Unrecognised jet algorithm");}
     580}
     581
     582//----------------------------------------------------------------------
     583// returns a suggestion for the best strategy to use on event
     584// multiplicity, algorithm, R, etc.
     585//
     586// Some of the work to establish the best strategy is collected in
     587// issue-tracker/2014-07-auto-strategy-selection;
     588// transition_fit_v2.fit indicates the results of the fits that we're
     589// using here. (Automatically generated by transition_fit_v2.gp).
     590//
     591// The transition to NlnN is always present, and it is the the
     592// caller's responsibility to drop back down to N2MHTLazy25 if NlnN
     593// isn't available.
     594//
     595// This routine should be called only if the jet alg is one of kt,
     596// antikt, cam or genkt.
     597Strategy ClusterSequence::_best_strategy() const {
     598  int N = _jets.size();
     599  // define bounded R, always above 0.1, because we don't trust any
     600  // of our parametrizations below R = 0.1
     601  double bounded_R = max(_Rparam, 0.1);
     602
     603  // the very first test thing is a quick hard-coded test to decide
     604  // if we immediately opt for N2Plain
     605  if (N <= 30 || N <= 39.0/(bounded_R + 0.6)) {
     606    return N2Plain;
     607  }
     608 
     609  // Define objects that describe our various boundaries. A prefix N_
     610  // indicates that boundary is for N, while L_ means it's for log(N).
     611  //
     612  // Hopefully having them static will ensure minimal overhead
     613  // in creating them; collecting them in one place should
     614  // help with updates?
     615  //
     616  const static _Parabola N_Tiled_to_MHT_lowR             (-45.4947,54.3528,44.6283);
     617  const static _Parabola L_MHT_to_MHTLazy9_lowR          (0.677807,-1.05006,10.6994);
     618  const static _Parabola L_MHTLazy9_to_MHTLazy25_akt_lowR(0.169967,-0.512589,12.1572);
     619  const static _Parabola L_MHTLazy9_to_MHTLazy25_kt_lowR (0.16237,-0.484612,12.3373);
     620  const static _Parabola L_MHTLazy9_to_MHTLazy25_cam_lowR = L_MHTLazy9_to_MHTLazy25_kt_lowR;
     621  const static _Parabola L_MHTLazy25_to_NlnN_akt_lowR    (0.0472051,-0.22043,15.9196);
     622  const static _Parabola L_MHTLazy25_to_NlnN_kt_lowR     (0.118609,-0.326811,14.8287);
     623  const static _Parabola L_MHTLazy25_to_NlnN_cam_lowR    (0.10119,-0.295748,14.3924);
     624
     625  const static _Line     L_Tiled_to_MHTLazy9_medR         (-1.31304,7.29621);
     626  const static _Parabola L_MHTLazy9_to_MHTLazy25_akt_medR = L_MHTLazy9_to_MHTLazy25_akt_lowR;
     627  const static _Parabola L_MHTLazy9_to_MHTLazy25_kt_medR  = L_MHTLazy9_to_MHTLazy25_kt_lowR;
     628  const static _Parabola L_MHTLazy9_to_MHTLazy25_cam_medR = L_MHTLazy9_to_MHTLazy25_cam_lowR;
     629  const static _Parabola L_MHTLazy25_to_NlnN_akt_medR     = L_MHTLazy25_to_NlnN_akt_lowR;
     630  const static _Parabola L_MHTLazy25_to_NlnN_kt_medR      = L_MHTLazy25_to_NlnN_kt_lowR;
     631  const static _Parabola L_MHTLazy25_to_NlnN_cam_medR     = L_MHTLazy25_to_NlnN_cam_lowR;
     632
     633  const static double    N_Plain_to_MHTLazy9_largeR         = 75;
     634  const static double    N_MHTLazy9_to_MHTLazy25_akt_largeR = 700;
     635  const static double    N_MHTLazy9_to_MHTLazy25_kt_largeR  = 1000;
     636  const static double    N_MHTLazy9_to_MHTLazy25_cam_largeR = 1000;
     637  const static double    N_MHTLazy25_to_NlnN_akt_largeR     = 100000;
     638  const static double    N_MHTLazy25_to_NlnN_kt_largeR      = 40000;
     639  const static double    N_MHTLazy25_to_NlnN_cam_largeR     = 15000;
     640
     641  // We have timing studies only for kt, cam and antikt; for other
     642  // algorithms we set the local jet_algorithm variable to the one of
     643  // kt,cam,antikt that we think will be closest in behaviour to the
     644  // other alg.
     645  JetAlgorithm jet_algorithm;
     646  if (_jet_algorithm == genkt_algorithm) {
     647    // for genkt, then we set the local jet_algorithm variable (used
     648    // only for strategy choice) to be either kt or antikt, depending on
     649    // the p value.
     650    double p   = jet_def().extra_param();
     651    if (p < 0.0) jet_algorithm = antikt_algorithm;
     652    else         jet_algorithm =     kt_algorithm;
     653  } else if (_jet_algorithm == cambridge_for_passive_algorithm) {
     654    // we assume (but haven't tested) that using the kt-alg timing
     655    // transitions should be adequate for cambridge_for_passive_algorithm
     656    jet_algorithm = kt_algorithm;
     657  } else {
     658    jet_algorithm = _jet_algorithm;
     659  }
     660
     661  if (bounded_R < 0.65) {
     662    // low R case
     663    if          (N    < N_Tiled_to_MHT_lowR(bounded_R))              return N2Tiled;
     664    double logN = log(double(N));
     665    if          (logN < L_MHT_to_MHTLazy9_lowR(bounded_R))           return N2MinHeapTiled;
     666    else {
     667      if (jet_algorithm == antikt_algorithm){
     668        if      (logN < L_MHTLazy9_to_MHTLazy25_akt_lowR(bounded_R)) return N2MHTLazy9;
     669        else if (logN < L_MHTLazy25_to_NlnN_akt_lowR(bounded_R))     return N2MHTLazy25;
     670        else                                                         return NlnN;
     671      } else if (jet_algorithm == kt_algorithm){
     672        if      (logN < L_MHTLazy9_to_MHTLazy25_kt_lowR(bounded_R))  return N2MHTLazy9;
     673        else if (logN < L_MHTLazy25_to_NlnN_kt_lowR(bounded_R))      return N2MHTLazy25;
     674        else                                                         return NlnN;
     675      } else if (jet_algorithm == cambridge_algorithm)  {
     676        if      (logN < L_MHTLazy9_to_MHTLazy25_cam_lowR(bounded_R)) return N2MHTLazy9;
     677        else if (logN < L_MHTLazy25_to_NlnN_cam_lowR(bounded_R))     return N2MHTLazy25;
     678        else                                                         return NlnNCam;
     679      }
     680    }
     681  } else if (bounded_R < 0.5*pi) {
     682    // medium R case
     683    double logN = log(double(N));
     684    if      (logN < L_Tiled_to_MHTLazy9_medR(bounded_R))             return N2Tiled;
     685    else {
     686      if (jet_algorithm == antikt_algorithm){
     687        if      (logN < L_MHTLazy9_to_MHTLazy25_akt_medR(bounded_R)) return N2MHTLazy9;
     688        else if (logN < L_MHTLazy25_to_NlnN_akt_medR(bounded_R))     return N2MHTLazy25;
     689        else                                                         return NlnN;
     690      } else if (jet_algorithm == kt_algorithm){
     691        if      (logN < L_MHTLazy9_to_MHTLazy25_kt_medR(bounded_R))  return N2MHTLazy9;
     692        else if (logN < L_MHTLazy25_to_NlnN_kt_medR(bounded_R))      return N2MHTLazy25;
     693        else                                                         return NlnN;
     694      } else if (jet_algorithm == cambridge_algorithm)  {
     695        if      (logN < L_MHTLazy9_to_MHTLazy25_cam_medR(bounded_R)) return N2MHTLazy9;
     696        else if (logN < L_MHTLazy25_to_NlnN_cam_medR(bounded_R))     return N2MHTLazy25;
     697        else                                                         return NlnNCam;
     698      }
     699    }
     700  } else {
     701    // large R case (R > pi/2)
     702    if      (N    < N_Plain_to_MHTLazy9_largeR)                      return N2Plain;
     703    else {
     704      if (jet_algorithm == antikt_algorithm){
     705        if      (N < N_MHTLazy9_to_MHTLazy25_akt_largeR)             return N2MHTLazy9;
     706        else if (N < N_MHTLazy25_to_NlnN_akt_largeR)                 return N2MHTLazy25;
     707        else                                                         return NlnN;
     708      } else if (jet_algorithm == kt_algorithm){
     709        if      (N < N_MHTLazy9_to_MHTLazy25_kt_largeR)              return N2MHTLazy9;
     710        else if (N < N_MHTLazy25_to_NlnN_kt_largeR)                  return N2MHTLazy25;
     711        else                                                         return NlnN;
     712      } else if (jet_algorithm == cambridge_algorithm)  {
     713        if      (N < N_MHTLazy9_to_MHTLazy25_cam_largeR)             return N2MHTLazy9;
     714        else if (N < N_MHTLazy25_to_NlnN_cam_largeR)                 return N2MHTLazy25;
     715        else                                                         return NlnNCam;
     716      }
     717    }
     718  }
     719 
     720  bool code_should_never_reach_here = false;
     721  assert(code_should_never_reach_here);
     722  return N2MHTLazy9;
     723
    530724}
    531725
     
    662856//----------------------------------------------------------------------
    663857// return all inclusive jets with pt > ptmin
    664 vector<PseudoJet> ClusterSequence::inclusive_jets (const double & ptmin) const{
     858vector<PseudoJet> ClusterSequence::inclusive_jets (const double ptmin) const{
    665859  double dcut = ptmin*ptmin;
    666860  int i = _history.size() - 1; // last jet
     
    714908// return the number of exclusive jets that would have been obtained
    715909// running the algorithm in exclusive mode with the given dcut
    716 int ClusterSequence::n_exclusive_jets (const double & dcut) const {
     910int ClusterSequence::n_exclusive_jets (const double dcut) const {
    717911
    718912  // first locate the point where clustering would have stopped (i.e. the
     
    733927// return all exclusive jets that would have been obtained running
    734928// the algorithm in exclusive mode with the given dcut
    735 vector<PseudoJet> ClusterSequence::exclusive_jets (const double & dcut) const {
     929vector<PseudoJet> ClusterSequence::exclusive_jets (const double dcut) const {
    736930  int njets = n_exclusive_jets(dcut);
    737931  return exclusive_jets(njets);
     
    742936// return the jets obtained by clustering the event to n jets.
    743937// Throw an error if there are fewer than n particles.
    744 vector<PseudoJet> ClusterSequence::exclusive_jets (const int & njets) const {
     938vector<PseudoJet> ClusterSequence::exclusive_jets (const int njets) const {
    745939
    746940  // make sure the user does not ask for more than jets than there
     
    759953// return the jets obtained by clustering the event to n jets.
    760954// If there are fewer than n particles, simply return all particles
    761 vector<PseudoJet> ClusterSequence::exclusive_jets_up_to (const int & njets) const {
     955vector<PseudoJet> ClusterSequence::exclusive_jets_up_to (const int njets) const {
    762956
    763957  // provide a warning when extracting exclusive jets for algorithms
    764958  // that does not support it explicitly.
    765   // Native algorithm that support it are: kt, ee_kt, cambridge,
     959  // Native algorithm that support it are: kt, ee_kt, Cambridge/Aachen,
    766960  //   genkt and ee_genkt (both with p>=0)
    767961  // For plugins, we check Plugin::exclusive_sequence_meaningful()
     
    773967       (_jet_def.extra_param() <0)) &&
    774968      ((_jet_def.jet_algorithm() != plugin_algorithm) ||
    775        (!_jet_def.plugin()->exclusive_sequence_meaningful())) &&
    776       (_n_exclusive_warnings < 5)) {
    777     _n_exclusive_warnings++;
    778     cerr << "FastJet WARNING: dcut and exclusive jets for jet-finders other than kt should be interpreted with care." << endl;
     969       (!_jet_def.plugin()->exclusive_sequence_meaningful()))) {
     970    _exclusive_warnings.warn("dcut and exclusive jets for jet-finders other than kt, C/A or genkt with p>=0 should be interpreted with care.");
    779971  }
    780972
     
    8291021/// return the dmin corresponding to the recombination that went from
    8301022/// n+1 to n jets
    831 double ClusterSequence::exclusive_dmerge (const int & njets) const {
     1023double ClusterSequence::exclusive_dmerge (const int njets) const {
    8321024  assert(njets >= 0);
    8331025  if (njets >= _initial_n) {return 0.0;}
     
    8411033/// exclusive_dmerge, except in cases where the dmin do not increase
    8421034/// monotonically.
    843 double ClusterSequence::exclusive_dmerge_max (const int & njets) const {
     1035double ClusterSequence::exclusive_dmerge_max (const int njets) const {
    8441036  assert(njets >= 0);
    8451037  if (njets >= _initial_n) {return 0.0;}
     
    8531045/// the algorithm with the given dcut.
    8541046std::vector<PseudoJet> ClusterSequence::exclusive_subjets
    855    (const PseudoJet & jet, const double & dcut) const {
     1047   (const PseudoJet & jet, const double dcut) const {
    8561048
    8571049  set<const history_element*> subhist;
     
    8761068/// exclusive_subjets.size()
    8771069int ClusterSequence::n_exclusive_subjets(const PseudoJet & jet,
    878                         const double & dcut) const {
     1070                        const double dcut) const {
    8791071  set<const history_element*> subhist;
    8801072  // get the set of history elements that correspond to subjets at
     
    11811373// //----------------------------------------------------------------------
    11821374// // print out all inclusive jets with pt > ptmin
    1183 // void ClusterSequence::print_jets (const double & ptmin) const{
     1375// void ClusterSequence::print_jets (const double ptmin) const{
    11841376//     vector<PseudoJet> jets = sorted_by_pt(inclusive_jets(ptmin));
    11851377//
     
    12571449// initialise the history in a standard way
    12581450void ClusterSequence::_add_step_to_history (
    1259                const int & step_number, const int & parent1,
    1260                const int & parent2, const int & jetp_index,
    1261                const double & dij) {
     1451               const int step_number, const int parent1,
     1452               const int parent2, const int jetp_index,
     1453               const double dij) {
    12621454
    12631455  history_element element;
     
    14291621/// of the recombined jet, newjet_k.
    14301622void ClusterSequence::_do_ij_recombination_step(
    1431                                const int & jet_i, const int & jet_j,
    1432                                const double & dij,
     1623                               const int jet_i, const int jet_j,
     1624                               const double dij,
    14331625                               int & newjet_k) {
    14341626
     
    14661658/// jet_i with the beam
    14671659void ClusterSequence::_do_iB_recombination_step(
    1468                                   const int & jet_i, const double & diB) {
     1660                                  const int jet_i, const double diB) {
    14691661  // get history index
    14701662  int newstep_k = _history.size();
  • external/fastjet/ClusterSequence.hh

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id: ClusterSequence.hh 3114 2013-05-04 08:46:00Z salam $
     1#ifndef __FASTJET_CLUSTERSEQUENCE_HH__
     2#define __FASTJET_CLUSTERSEQUENCE_HH__
     3
     4//FJSTARTHEADER
     5// $Id: ClusterSequence.hh 3619 2014-08-13 14:17:19Z salam $
    36//
    4 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     7// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    58//
    69//----------------------------------------------------------------------
     
    1316//
    1417//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     18//  development. They are described in the original FastJet paper,
     19//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1620//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     21//  quote the version you use and include a citation to the manual and
     22//  optionally also to hep-ph/0512210.
    1823//
    1924//  FastJet is distributed in the hope that it will be useful,
     
    2530//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2631//----------------------------------------------------------------------
    27 //ENDHEADER
    28 
    29 
    30 #ifndef __FASTJET_CLUSTERSEQUENCE_HH__
    31 #define __FASTJET_CLUSTERSEQUENCE_HH__
     32//FJENDHEADER
     33
    3234
    3335#include<vector>
     
    6567  ClusterSequence () : _deletes_self_when_unused(false) {}
    6668
    67 //   /// create a clustersequence starting from the supplied set
    68 //   /// of pseudojets and clustering them with the long-invariant
    69 //   /// kt algorithm (E-scheme recombination) with the supplied
    70 //   /// value for R.
    71 //   ///
    72 //   /// If strategy=DumbN3 a very stupid N^3 algorithm is used for the
    73 //   /// clustering; otherwise strategy = NlnN* uses cylinders algorithms
    74 //   /// with some number of pi coverage. If writeout_combinations=true a
    75 //   /// summary of the recombination sequence is written out
    76 //   template<class L> ClusterSequence (const std::vector<L> & pseudojets,
    77 //                 const double & R = 1.0,
    78 //                 const Strategy & strategy = Best,
    79 //                 const bool & writeout_combinations = false);
    80 
    81 
    82   /// create a clustersequence starting from the supplied set
    83   /// of pseudojets and clustering them with jet definition specified
     69  /// create a ClusterSequence, starting from the supplied set
     70  /// of PseudoJets and clustering them with jet definition specified
    8471  /// by jet_def (which also specifies the clustering strategy)
    8572  template<class L> ClusterSequence (
     
    10491  /// algorithm) with pt >= ptmin. Time taken should be of the order
    10592  /// of the number of jets returned.
    106   std::vector<PseudoJet> inclusive_jets (const double & ptmin = 0.0) const;
     93  std::vector<PseudoJet> inclusive_jets (const double ptmin = 0.0) const;
    10794
    10895  /// return the number of jets (in the sense of the exclusive
    10996  /// algorithm) that would be obtained when running the algorithm
    11097  /// with the given dcut.
    111   int n_exclusive_jets (const double & dcut) const;
     98  int n_exclusive_jets (const double dcut) const;
    11299
    113100  /// return a vector of all jets (in the sense of the exclusive
    114101  /// algorithm) that would be obtained when running the algorithm
    115102  /// with the given dcut.
    116   std::vector<PseudoJet> exclusive_jets (const double & dcut) const;
     103  std::vector<PseudoJet> exclusive_jets (const double dcut) const;
    117104
    118105  /// return a vector of all jets when the event is clustered (in the
     
    121108  /// If there are fewer than njets particles in the ClusterSequence
    122109  /// an error is thrown
    123   std::vector<PseudoJet> exclusive_jets (const int & njets) const;
     110  std::vector<PseudoJet> exclusive_jets (const int njets) const;
    124111
    125112  /// return a vector of all jets when the event is clustered (in the
     
    128115  /// If there are fewer than njets particles in the ClusterSequence
    129116  /// the function just returns however many particles there were.
    130   std::vector<PseudoJet> exclusive_jets_up_to (const int & njets) const;
     117  std::vector<PseudoJet> exclusive_jets_up_to (const int njets) const;
    131118
    132119  /// return the dmin corresponding to the recombination that went
    133120  /// from n+1 to n jets (sometimes known as d_{n n+1}). If the number
    134121  /// of particles in the event is <= njets, the function returns 0.
    135   double exclusive_dmerge (const int & njets) const;
     122  double exclusive_dmerge (const int njets) const;
    136123
    137124  /// return the maximum of the dmin encountered during all recombinations
     
    139126  /// exclusive_dmerge, except in cases where the dmin do not increase
    140127  /// monotonically.
    141   double exclusive_dmerge_max (const int & njets) const;
     128  double exclusive_dmerge_max (const int njets) const;
    142129
    143130  /// return the ymin corresponding to the recombination that went from
     
    158145
    159146
    160   //int n_exclusive_jets (const PseudoJet & jet, const double & dcut) const;
     147  //int n_exclusive_jets (const PseudoJet & jet, const double dcut) const;
    161148
    162149  /// return a vector of all subjets of the current jet (in the sense
     
    169156  /// just getting that list of constituents.
    170157  std::vector<PseudoJet> exclusive_subjets (const PseudoJet & jet,
    171                                             const double & dcut) const;
     158                                            const double dcut) const;
    172159
    173160  /// return the size of exclusive_subjets(...); still n ln n with same
     
    175162  /// exclusive_subjets.size()
    176163  int n_exclusive_subjets(const PseudoJet & jet,
    177                           const double & dcut) const;
     164                          const double dcut) const;
    178165
    179166  /// return the list of subjets obtained by unclustering the supplied
     
    193180                                                  int nsub) const;
    194181
    195   /// return the dij that was present in the merging nsub+1 -> nsub
     182  /// returns the dij that was present in the merging nsub+1 -> nsub
    196183  /// subjets inside this jet.
    197184  ///
     
    199186  double exclusive_subdmerge(const PseudoJet & jet, int nsub) const;
    200187
    201   /// return the maximum dij that occurred in the whole event at the
     188  /// returns the maximum dij that occurred in the whole event at the
    202189  /// stage that the nsub+1 -> nsub merge of subjets occurred inside
    203190  /// this jet.
     
    207194
    208195  //std::vector<PseudoJet> exclusive_jets (const PseudoJet & jet,
    209   //                                       const int & njets) const;
    210   //double exclusive_dmerge (const PseudoJet & jet, const int & njets) const;
     196  //                                       const int njets) const;
     197  //double exclusive_dmerge (const PseudoJet & jet, const int njets) const;
    211198
    212199  /// returns the sum of all energies in the event (relevant mainly for e+e-)
     
    272259// Not yet. Perhaps in a future release.
    273260//   /// print out all inclusive jets with pt > ptmin
    274 //   virtual void print_jets (const double & ptmin=0.0) const;
     261//   virtual void print_jets (const double ptmin=0.0) const;
    275262
    276263  /// add on to subjet_vector the constituents of jet (for internal use mainly)
     
    300287  ///
    301288  /// NB: after having made this call, the user is still allowed to
    302   /// delete the CS or let it go out of scope. Jets associated with it
    303   /// will then simply not be able to access their substructure after
    304   /// that point.
     289  /// delete the CS. Jets associated with it will then simply not be
     290  /// able to access their substructure after that point.
    305291  void delete_self_when_unused();
    306292
     
    313299
    314300  /// returns the scale associated with a jet as required for this
    315   /// clustering algorithm (kt^2 for the kt-algorithm, 1 for the
    316   /// Cambridge algorithm). [May become virtual at some point]
     301  /// clustering algorithm (kt^2 for the kt-algorithm, 1 for the
     302  /// Cambridge algorithm). Intended mainly for internal use and not
     303  /// valid for plugin algorithms.
    317304  double jet_scale_for_algorithm(const PseudoJet & jet) const;
    318305
     
    363350
    364351  /// the plugin can associate some extra information with the
     352  /// ClusterSequence object by calling this function. The
     353  /// ClusterSequence takes ownership of the pointer (and
     354  /// responsibility for deleting it when the CS gets deleted).
     355  inline void plugin_associate_extras(Extras * extras_in) {
     356    _extras.reset(extras_in);
     357  }
     358
     359  /// the plugin can associate some extra information with the
    365360  /// ClusterSequence object by calling this function
     361  ///
     362  /// As of FJ v3.1, this is deprecated, in line with the deprecation
     363  /// of auto_ptr in C++11
    366364  inline void plugin_associate_extras(std::auto_ptr<Extras> extras_in) {
    367     //_extras = extras_in;
    368365    _extras.reset(extras_in.release());
    369366  }
     
    599596//DEP   /// clustering, provided for legacy purposes. The jet finder is that
    600597//DEP   /// specified in the static member _default_jet_algorithm.
    601 //DEP   void _initialise_and_run (const double & R,
     598//DEP   void _initialise_and_run (const double R,
    602599//DEP                       const Strategy & strategy,
    603600//DEP                       const bool & writeout_combinations);
     
    622619  /// jet_j, at distance scale dij; return the index newjet_k of the
    623620  /// result of the recombination of i and j.
    624   void _do_ij_recombination_step(const int & jet_i, const int & jet_j,
    625                                  const double & dij, int & newjet_k);
     621  void _do_ij_recombination_step(const int jet_i, const int jet_j,
     622                                 const double dij, int & newjet_k);
    626623
    627624  /// carry out an recombination step in which _jets[jet_i] merges with
    628625  /// the beam,
    629   void _do_iB_recombination_step(const int & jet_i, const double & diB);
     626  void _do_iB_recombination_step(const int jet_i, const double diB);
    630627
    631628  /// every time a jet is added internally during clustering, this
     
    640637  void _update_structure_use_count();
    641638 
     639  /// returns a suggestion for the best strategy to use on event
     640  /// multiplicity, algorithm, R, etc.
     641  Strategy _best_strategy() const;
     642 
     643  /// returns c*(a*R**2 + b*R + 1);
     644  /// Written as a class in case we want to give names to different
     645  /// parabolas
     646  class _Parabola {
     647  public:
     648    _Parabola(double a, double b, double c) : _a(a), _b(b), _c(c) {}
     649    inline double operator()(const double R) const {return _c*(_a*R*R + _b*R + 1);}
     650  private:
     651    double _a, _b, _c;
     652  };
     653
     654  /// operator()(R) returns a*R+b;
     655  class _Line {
     656  public:
     657    _Line(double a, double b) : _a(a), _b(b) {}
     658    inline double operator()(const double R) const {return _a*R + _b;}
     659  private:
     660    double _a, _b;
     661  };
    642662
    643663  /// This contains the physical PseudoJets; for each PseudoJet one
     
    681701
    682702  bool _plugin_activated;
    683   //std::auto_ptr<Extras> _extras; // things the plugin might want to add
    684703  SharedPtr<Extras> _extras; // things the plugin might want to add
    685704
     
    705724  void _fast_NsqrtN_cluster();
    706725
    707   void _add_step_to_history(const int & step_number, const int & parent1,
    708                                const int & parent2, const int & jetp_index,
    709                                const double & dij);
     726  void _add_step_to_history(const int step_number, const int parent1,
     727                               const int parent2, const int jetp_index,
     728                               const double dij);
    710729
    711730  /// internal routine associated with the construction of the unique
     
    726745
    727746  /// currently used only in the Voronoi based code
    728   void _add_ktdistance_to_map(const int & ii,
     747  void _add_ktdistance_to_map(const int ii,
    729748                              DistMap & DijMap,
    730749                              const DynamicNearestNeighbours * DNN);
     
    734753  static bool _first_time;
    735754
    736   /// record the number of warnings provided about the exclusive
    737   /// algorithm -- so that we don't print it out more than a few
    738   /// times.
    739   static int _n_exclusive_warnings;
     755  /// manage warnings related to exclusive jets access
     756  static LimitedWarning _exclusive_warnings;
    740757
    741758  /// the limited warning member for notification of user that
     
    754771    int        _jets_index;
    755772  };
    756 
    757773
    758774  /// structure analogous to BriefJet, but with the extra information
     
    862878  // routines for tiled case, including some overloads of the plain
    863879  // BriefJet cases
    864   int  _tile_index(const double & eta, const double & phi) const;
     880  int  _tile_index(const double eta, const double phi) const;
    865881  void _tj_set_jetinfo ( TiledJet * const jet, const int _jets_index);
    866882  void  _bj_remove_from_tiles(TiledJet * const jet);
     
    871887  void _add_untagged_neighbours_to_tile_union(const int tile_index,
    872888                 std::vector<int> & tile_union, int & n_near_tiles);
    873 
    874889
    875890  //----------------------------------------------------------------------
     
    923938// template<class L> ClusterSequence::ClusterSequence (
    924939//                                const std::vector<L> & pseudojets,
    925 //                                const double & R,
     940//                                const double R,
    926941//                                const Strategy & strategy,
    927942//                                const bool & writeout_combinations) {
     
    966981
    967982inline unsigned int ClusterSequence::n_particles() const {return _initial_n;}
     983
     984//----------------------------------------------------------------------
     985// implementation of JetDefinition::operator() is here to avoid nasty
     986// issues of order of implementations and includes
     987template<class L>
     988std::vector<PseudoJet> JetDefinition::operator()(const std::vector<L> & particles) const {
     989  // create a new cluster sequence
     990  ClusterSequence * cs = new ClusterSequence(particles, *this);
     991
     992  // get the jets, and sort them according to whether the algorithm
     993  // is spherical or not
     994  std::vector<PseudoJet> jets;
     995  if (is_spherical()) {
     996    jets = sorted_by_E(cs->inclusive_jets());
     997  } else {
     998    jets = sorted_by_pt(cs->inclusive_jets());
     999  }
     1000 
     1001  // make sure the ClusterSequence gets deleted once it's no longer
     1002  // needed
     1003  if (jets.size() != 0) {
     1004    cs->delete_self_when_unused();
     1005  } else {
     1006    delete cs;
     1007  }
     1008
     1009  return jets;
     1010}
    9681011
    9691012
  • external/fastjet/ClusterSequence1GhostPassiveArea.cc

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id$
     1//FJSTARTHEADER
     2// $Id: ClusterSequence1GhostPassiveArea.cc 3433 2014-07-23 08:17:03Z salam $
    33//
    4 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     4// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931#include "fastjet/ClusterSequence1GhostPassiveArea.hh"
  • external/fastjet/ClusterSequence1GhostPassiveArea.hh

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id: ClusterSequence1GhostPassiveArea.hh 2687 2011-11-14 11:17:51Z soyez $
     1//FJSTARTHEADER
     2// $Id: ClusterSequence1GhostPassiveArea.hh 3433 2014-07-23 08:17:03Z salam $
    33//
    4 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     4// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931#ifndef __FASTJET_CLUSTERSEQUENCE1GHOSTPASSIVEAREA_HH__
  • external/fastjet/ClusterSequenceActiveArea.cc

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id$
     1//FJSTARTHEADER
     2// $Id: ClusterSequenceActiveArea.cc 3433 2014-07-23 08:17:03Z salam $
    33//
    4 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     4// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931#include "fastjet/PseudoJet.hh"
  • external/fastjet/ClusterSequenceActiveArea.hh

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id: ClusterSequenceActiveArea.hh 2687 2011-11-14 11:17:51Z soyez $
    3 //
    4 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     1//FJSTARTHEADER
     2// $Id: ClusterSequenceActiveArea.hh 3619 2014-08-13 14:17:19Z salam $
     3//
     4// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931#ifndef __FASTJET_CLUSTERSEQUENCEACTIVEAREA_HH__
     
    8385  /// the background (e.g. non-jet) activity in a highly populated event; the
    8486  /// one that has been most extensively tested is median.
     87  ///
     88  /// These strategies are OBSOLETE and deprecated (see comment
     89  /// for pt_per_unit_area).
    8590  enum mean_pt_strategies{median=0, non_ghost_median, pttot_over_areatot,
    8691                          pttot_over_areatot_cut, mean_ratio_cut, play,
     
    9398  /// have pt/area > median(pt/area)*range.
    9499  ///
    95   /// NB: This call is OBSOLETE; use media_pt_per_unit_area from the
    96   //      ClusterSequenceAreaBase class instead
     100  /// NB: This call is OBSOLETE and deprecated; use a
     101  /// JetMedianBackgroundEstimator or GridMedianBackgroundEstimator
     102  /// instead.
    97103  double pt_per_unit_area(mean_pt_strategies strat=median,
    98104                          double range=2.0 ) const;
    99105
    100   // following code removed -- now dealt with by AreaBase class (and
    101   // this definition here conflicts with it).
    102 //   /// fits a form pt_per_unit_area(y) = a + b*y^2 in the range
    103 //   /// abs(y)<raprange (for negative raprange, it defaults to
    104 //   /// _safe_rap_for_area).
    105 //   void parabolic_pt_per_unit_area(double & a,double & b, double raprange=-1.0,
    106 //                                double exclude_above=-1.0,
    107 //                                bool use_area_4vector=false ) const;
    108 //
    109106  /// rewrite the empty area from the parent class, so as to use
    110107  /// all info at our disposal
  • external/fastjet/ClusterSequenceActiveAreaExplicitGhosts.cc

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id$
    3 //
    4 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     1//FJSTARTHEADER
     2// $Id: ClusterSequenceActiveAreaExplicitGhosts.cc 3433 2014-07-23 08:17:03Z salam $
     3//
     4// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931#include "fastjet/ClusterSequenceActiveAreaExplicitGhosts.hh"
  • external/fastjet/ClusterSequenceActiveAreaExplicitGhosts.hh

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id: ClusterSequenceActiveAreaExplicitGhosts.hh 2687 2011-11-14 11:17:51Z soyez $
    3 //
    4 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     1//FJSTARTHEADER
     2// $Id: ClusterSequenceActiveAreaExplicitGhosts.hh 3433 2014-07-23 08:17:03Z salam $
     3//
     4// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931#ifndef __FASTJET_CLUSTERSEQUENCEACTIVEAREAEXPLICITGHOSTS_HH_
  • external/fastjet/ClusterSequenceArea.cc

    r5b5a56b r35cdc46  
     1//FJSTARTHEADER
     2// $Id: ClusterSequenceArea.cc 3433 2014-07-23 08:17:03Z salam $
     3//
     4// Copyright (c) 2006-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     5//
     6//----------------------------------------------------------------------
     7// This file is part of FastJet.
     8//
     9//  FastJet is free software; you can redistribute it and/or modify
     10//  it under the terms of the GNU General Public License as published by
     11//  the Free Software Foundation; either version 2 of the License, or
     12//  (at your option) any later version.
     13//
     14//  The algorithms that underlie FastJet have required considerable
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
     17//  FastJet as part of work towards a scientific publication, please
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
     20//
     21//  FastJet is distributed in the hope that it will be useful,
     22//  but WITHOUT ANY WARRANTY; without even the implied warranty of
     23//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     24//  GNU General Public License for more details.
     25//
     26//  You should have received a copy of the GNU General Public License
     27//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
     28//----------------------------------------------------------------------
     29//FJENDHEADER
     30
    131#include "fastjet/ClusterSequenceArea.hh"
    232
  • external/fastjet/ClusterSequenceArea.hh

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id: ClusterSequenceArea.hh 2690 2011-11-14 14:57:54Z soyez $
    3 //
    4 // Copyright (c) 2006-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     1//FJSTARTHEADER
     2// $Id: ClusterSequenceArea.hh 3484 2014-07-29 21:39:39Z soyez $
     3//
     4// Copyright (c) 2006-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931#ifndef __FASTJET_CLUSTERSEQUENCEAREA_HH__
     
    245247    break;
    246248  default:
    247     std::cerr << "Error: unrecognized area_type in ClusterSequenceArea:"
    248               << _area_def.area_type() << std::endl;
    249     exit(-1);
     249    std::ostringstream err;
     250    err << "Error: unrecognized area_type in ClusterSequenceArea:"
     251        << _area_def.area_type();
     252    throw Error(err.str());
     253    //exit(-1);
    250254  }
    251255  // now copy across the information from the area base class
  • external/fastjet/ClusterSequenceAreaBase.cc

    r5b5a56b r35cdc46  
    11
    2 //STARTHEADER
    3 // $Id$
    4 //
    5 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     2//FJSTARTHEADER
     3// $Id: ClusterSequenceAreaBase.cc 3433 2014-07-23 08:17:03Z salam $
     4//
     5// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    66//
    77//----------------------------------------------------------------------
     
    1414//
    1515//  The algorithms that underlie FastJet have required considerable
    16 //  development and are described in hep-ph/0512210. If you use
     16//  development. They are described in the original FastJet paper,
     17//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1718//  FastJet as part of work towards a scientific publication, please
    18 //  include a citation to the FastJet paper.
     19//  quote the version you use and include a citation to the manual and
     20//  optionally also to hep-ph/0512210.
    1921//
    2022//  FastJet is distributed in the hope that it will be useful,
     
    2628//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2729//----------------------------------------------------------------------
    28 //ENDHEADER
     30//FJENDHEADER
    2931
    3032
  • external/fastjet/ClusterSequenceAreaBase.hh

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id: ClusterSequenceAreaBase.hh 2687 2011-11-14 11:17:51Z soyez $
    3 //
    4 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     1//FJSTARTHEADER
     2// $Id: ClusterSequenceAreaBase.hh 3433 2014-07-23 08:17:03Z salam $
     3//
     4// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931#ifndef __FASTJET_CLUSTERSEQUENCEAREABASE_HH__
  • external/fastjet/ClusterSequencePassiveArea.cc

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id$
     1//FJSTARTHEADER
     2// $Id: ClusterSequencePassiveArea.cc 3433 2014-07-23 08:17:03Z salam $
    33//
    4 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     4// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931#include "fastjet/ClusterSequencePassiveArea.hh"
  • external/fastjet/ClusterSequencePassiveArea.hh

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id: ClusterSequencePassiveArea.hh 2687 2011-11-14 11:17:51Z soyez $
     1//FJSTARTHEADER
     2// $Id: ClusterSequencePassiveArea.hh 3433 2014-07-23 08:17:03Z salam $
    33//
    4 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     4// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931#ifndef __FASTJET_CLUSTERSEQUENCEPASSIVEAREA_HH__
  • external/fastjet/ClusterSequenceStructure.cc

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id$
    3 //
    4 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     1//FJSTARTHEADER
     2// $Id: ClusterSequenceStructure.cc 3433 2014-07-23 08:17:03Z salam $
     3//
     4// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931#include "fastjet/ClusterSequenceStructure.hh"
  • external/fastjet/ClusterSequenceStructure.hh

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id: ClusterSequenceStructure.hh 3071 2013-04-01 12:52:46Z cacciari $
    3 //
    4 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     1//FJSTARTHEADER
     2// $Id: ClusterSequenceStructure.hh 3433 2014-07-23 08:17:03Z salam $
     3//
     4// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931
  • external/fastjet/ClusterSequenceVoronoiArea.cc

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id$
    3 //
    4 // Copyright (c) 2006-2007 Matteo Cacciari, Gavin Salam and Gregory Soyez
    5 //
    6 //----------------------------------------------------------------------
    7 // This file is part of a simple command-line handling environment
     1//FJSTARTHEADER
     2// $Id: ClusterSequenceVoronoiArea.cc 3433 2014-07-23 08:17:03Z salam $
     3//
     4// Copyright (c) 2006-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     5//
     6//----------------------------------------------------------------------
     7// This file is part of FastJet.
    88//
    99//  FastJet is free software; you can redistribute it and/or modify
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931#include "fastjet/ClusterSequenceVoronoiArea.hh"
     
    276278  //  -- first the initial ones
    277279  _voronoi_area.reserve(2*n_particles());
     280  _voronoi_area_4vector.reserve(2*n_particles());
    278281  for (unsigned int i=0; i<n_particles(); i++) {
    279282    _voronoi_area.push_back(_pa_calc->area(i));
  • external/fastjet/ClusterSequenceVoronoiArea.hh

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id: ClusterSequenceVoronoiArea.hh 2687 2011-11-14 11:17:51Z soyez $
     1//FJSTARTHEADER
     2// $Id: ClusterSequenceVoronoiArea.hh 3433 2014-07-23 08:17:03Z salam $
    33//
    4 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     4// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931#ifndef __FASTJET_CLUSTERSEQUENCEVORONOIAREA_HH__
     
    6668    return _voronoi_area[jet.cluster_hist_index()];}
    6769
    68   /// return a 4-vector area associated with the given jet -- stricly
     70  /// return a 4-vector area associated with the given jet -- strictly
    6971  /// this is not the exact 4-vector area, but rather an approximation
    7072  /// made of sums of centres of all Voronoi cells in jet, each
  • external/fastjet/ClusterSequenceWithArea.hh

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id: ClusterSequenceWithArea.hh 2577 2011-09-13 15:11:38Z salam $
     1//FJSTARTHEADER
     2// $Id: ClusterSequenceWithArea.hh 3433 2014-07-23 08:17:03Z salam $
    33//
    4 // Copyright (c) 2006-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     4// Copyright (c) 2006-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931#ifndef __FASTJET_CLUSTERSEQUENCEWITHAREA_HH__
  • external/fastjet/ClusterSequence_CP2DChan.cc

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id$
    3 //
    4 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     1//FJSTARTHEADER
     2// $Id: ClusterSequence_CP2DChan.cc 3433 2014-07-23 08:17:03Z salam $
     3//
     4// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931#include "fastjet/ClusterSequence.hh"
  • external/fastjet/ClusterSequence_Delaunay.cc

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id$
    3 //
    4 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     1//FJSTARTHEADER
     2// $Id: ClusterSequence_Delaunay.cc 3475 2014-07-29 11:57:23Z salam $
     3//
     4// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931
     
    8587    throw Error(err.str());
    8688    //assert(false);
    87   }
     89  } else
    8890#endif // DROP_CGAL
    8991  {
    90     ostringstream err;
    91     err << "ERROR: Unrecognized value for strategy: "<<_strategy<<endl;
     92    //ostringstream err;
     93    //err << "ERROR: Unrecognized value for strategy: "<<_strategy<<endl;
     94    //throw Error(err.str());
     95    //-----------------------------------------------------------------
     96    // The code should never reach this point, because the checks above
     97    // should always handle all _strategy values for which
     98    // _delaunay_cluster() is called
    9299    assert(false);
    93     throw Error(err.str());
    94100  }
    95101
     
    217223///
    218224void ClusterSequence::_add_ktdistance_to_map(
    219                           const int & ii,
     225                          const int ii,
    220226                          DistMap & DijMap,
    221227                          const DynamicNearestNeighbours * DNN) {
  • external/fastjet/ClusterSequence_DumbN3.cc

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id$
     1//FJSTARTHEADER
     2// $Id: ClusterSequence_DumbN3.cc 3433 2014-07-23 08:17:03Z salam $
    33//
    4 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     4// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931
  • external/fastjet/ClusterSequence_N2.cc

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id$
     1//FJSTARTHEADER
     2// $Id: ClusterSequence_N2.cc 3433 2014-07-23 08:17:03Z salam $
    33//
    4 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     4// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931
  • external/fastjet/ClusterSequence_TiledN2.cc

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id$
     1//FJSTARTHEADER
     2// $Id: ClusterSequence_TiledN2.cc 3433 2014-07-23 08:17:03Z salam $
    33//
    4 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     4// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
    28 
    29 
    30 // The plain N^2 part of the ClusterSequence class -- separated out
     29//FJENDHEADER
     30
     31
     32// The tiled N^2 part of the ClusterSequence class -- separated out
    3133// from the rest of the class implementation so as to speed up
    3234// compilation of this particular part while it is under test.
     
    3941#include "fastjet/ClusterSequence.hh"
    4042#include "fastjet/internal/MinHeap.hh"
     43#include "fastjet/internal/TilingExtent.hh"
    4144
    4245FASTJET_BEGIN_NAMESPACE      // defined in fastjet/internal/base.hh
     
    9497  _tile_size_phi = twopi / _n_tiles_phi; // >= _Rparam and fits in 2pi
    9598
    96   // always include zero rapidity in the tiling region
    97   _tiles_eta_min = 0.0;
    98   _tiles_eta_max = 0.0;
    99   // but go no further than following
    100   const double maxrap = 7.0;
    101 
    102   // and find out how much further one should go
    103   for(unsigned int i = 0; i < _jets.size(); i++) {
    104     double eta = _jets[i].rap();
    105     // first check if eta is in range -- to avoid taking into account
    106     // very spurious rapidities due to particles with near-zero kt.
    107     if (abs(eta) < maxrap) {
    108       if (eta < _tiles_eta_min) {_tiles_eta_min = eta;}
    109       if (eta > _tiles_eta_max) {_tiles_eta_max = eta;}
    110     }
    111   }
     99  TilingExtent tiling_analysis(*this);
     100  _tiles_eta_min = tiling_analysis.minrap();
     101  _tiles_eta_max = tiling_analysis.maxrap();
     102
     103  // // always include zero rapidity in the tiling region
     104  // _tiles_eta_min = 0.0;
     105  // _tiles_eta_max = 0.0;
     106  // // but go no further than following
     107  // const double maxrap = 7.0;
     108  //
     109  // // and find out how much further one should go
     110  // for(unsigned int i = 0; i < _jets.size(); i++) {
     111  //   double eta = _jets[i].rap();
     112  //   // first check if eta is in range -- to avoid taking into account
     113  //   // very spurious rapidities due to particles with near-zero kt.
     114  //   if (abs(eta) < maxrap) {
     115  //     if (eta < _tiles_eta_min) {_tiles_eta_min = eta;}
     116  //     if (eta > _tiles_eta_max) {_tiles_eta_max = eta;}
     117  //   }
     118  // }
    112119
    113120  // now adjust the values
     
    167174//----------------------------------------------------------------------
    168175/// return the tile index corresponding to the given eta,phi point
    169 int ClusterSequence::_tile_index(const double & eta, const double & phi) const {
     176int ClusterSequence::_tile_index(const double eta, const double phi) const {
    170177  int ieta, iphi;
    171178  if      (eta <= _tiles_eta_min) {ieta = 0;}
     
    249256/// their "tagged" status is false; when a neighbour is added its
    250257/// tagged status is set to true.
     258///
     259/// Note that with a high level of warnings (-pedantic -Wextra -ansi,
     260/// gcc complains about tile_index maybe being used uninitialised for
     261/// oldB in ClusterSequence::_minheap_faster_tiled_N2_cluster(). We
     262/// have explicitly checked that it was harmless so we could disable
     263/// the gcc warning by hand using the construct below
     264///
     265///  #pragma GCC diagnostic push
     266///  #pragma GCC diagnostic ignored "-Wpragmas"
     267///  #pragma GCC diagnostic ignored "-Wuninitialized"
     268///  #pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
     269///    ...
     270///  #pragma GCC diagnostic pop
     271///
     272/// the @GCC diagnostic push/pop directive was only introduced in
     273/// gcc-4.6, so for broader usage, we'd need to insert #pragma GCC
     274/// diagnostic ignored "-Wpragmas" at the top of this file
    251275inline void ClusterSequence::_add_untagged_neighbours_to_tile_union(
    252276               const int tile_index,
     
    274298  TiledJet * jetA = briefjets, * jetB;
    275299  TiledJet oldB;
    276   oldB.tile_index=0; // prevents a gcc warning 
     300  oldB.tile_index=0; // prevents a gcc warning
    277301
    278302  // will be used quite deep inside loops, but declare it here so that
     
    517541  TiledJet * jetA = briefjets, * jetB;
    518542  TiledJet oldB;
    519   oldB.tile_index=0; // prevents a gcc warning 
     543  oldB.tile_index=0; // prevents a gcc warning
    520544
    521545  // will be used quite deep inside loops, but declare it here so that
     
    555579    // when we set NN for both jetA and jetB on the RH tiles.
    556580  }
    557 
    558581 
    559582  // now create the diJ (where J is i's NN) table -- remember that
     
    721744}
    722745
    723 
    724 
    725746//----------------------------------------------------------------------
    726747/// run a tiled clustering, with our minheap for keeping track of the
     
    735756  TiledJet oldB;
    736757  oldB.tile_index=0; // prevents a gcc warning
    737  
    738758
    739759  // will be used quite deep inside loops, but declare it here so that
  • external/fastjet/CompositeJetStructure.cc

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id$
     1//FJSTARTHEADER
     2// $Id: CompositeJetStructure.cc 3433 2014-07-23 08:17:03Z salam $
    33//
    4 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     4// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931#include <fastjet/CompositeJetStructure.hh>
     
    151153  double a_err=0;
    152154  for (unsigned i = 0; i < _pieces.size(); i++)
    153     a_err += _pieces[i].area();
     155    a_err += _pieces[i].area_error();
    154156
    155157  return a_err;
  • external/fastjet/CompositeJetStructure.hh

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id: CompositeJetStructure.hh 3071 2013-04-01 12:52:46Z cacciari $
    3 //
    4 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     1//FJSTARTHEADER
     2// $Id: CompositeJetStructure.hh 3453 2014-07-25 07:44:32Z soyez $
     3//
     4// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931
     
    110112  virtual bool is_pure_ghost(const PseudoJet &reference) const;
    111113
    112   // allow to modify the area information
    113   // (for use in join())
    114   //------------------------------------------------------------------------------
    115   void set_area_information(PseudoJet *area_4vector_ptr){
    116     _area_4vector_ptr = area_4vector_ptr;
     114  //unused: // allows one to modify the area information
     115  //unused: // (for use in join())
     116  //unused: //
     117  //unused: // This member cannot be used by users who need to create a jet with
     118  //unused: // user-supplied area information, because it sets only the 4-vector
     119  //unused: // part of the area, but not all the other area information
     120  //unused: // (e.g. scalar area) -- that other information is always deduced
     121  //unused: // dynamically from the individual constituents.
     122  //unused: // ------------------------------------------------------------------------------
     123  //unused: void set_area_information(PseudoJet *area_4vector_ptr){
     124  //unused:   _area_4vector_ptr = area_4vector_ptr;
     125  //unused: }
     126
     127  /// disable the area of the composite jet
     128  ///
     129  /// this can be used e.g. to discard the area of a composite jet
     130  /// made of pieces with non-explicit-ghost area since the area may
     131  /// by erroneous in that case
     132  void discard_area(){
     133    if (_area_4vector_ptr) delete _area_4vector_ptr;
     134    _area_4vector_ptr = 0;
    117135  }
    118136
  • external/fastjet/Dnn2piCylinder.cc

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id$
    3 //
    4 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     1//FJSTARTHEADER
     2// $Id: Dnn2piCylinder.cc 3433 2014-07-23 08:17:03Z salam $
     3//
     4// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931
  • external/fastjet/Dnn3piCylinder.cc

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id$
     1//FJSTARTHEADER
     2// $Id: Dnn3piCylinder.cc 3433 2014-07-23 08:17:03Z salam $
    33//
    4 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     4// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931
  • external/fastjet/Dnn4piCylinder.cc

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id$
     1//FJSTARTHEADER
     2// $Id: Dnn4piCylinder.cc 3433 2014-07-23 08:17:03Z salam $
    33//
    4 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     4// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931
  • external/fastjet/DnnPlane.cc

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id$
     1//FJSTARTHEADER
     2// $Id: DnnPlane.cc 3442 2014-07-24 07:20:49Z salam $
    33//
    4 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     4// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931
     
    3335#include<list>
    3436#include "fastjet/internal/DnnPlane.hh"
     37
    3538using namespace std;
    3639
    3740FASTJET_BEGIN_NAMESPACE      // defined in fastjet/internal/base.hh
     41
     42const double DnnPlane::DISTANCE_FOR_CGAL_CHECKS=1.0e-12; 
    3843
    3944
     
    5358       _TR.insert(Point(input_points[i].first, input_points[i].second));
    5459
    55     // we are not up to dealing with coincident vertices, so make
    56     // sure the user knows!
    57     _CrashIfVertexPresent(sv.vertex, i);
    58    
    59     // we need to assicate an index to each vertex -- thus when we get
    60     // a vertex (e.g. as a nearest neighbour) from CGAL, we will be
    61     // able to figure out which particle it corresponded to.
    62     sv.vertex->info() = i;
     60    // check if we are dealing with coincident vertices
     61    int coinciding_index = _CheckIfVertexPresent(sv.vertex, i);
     62    if (coinciding_index == i){
     63      // we need to associate an index to each vertex -- thus when we get
     64      // a vertex (e.g. as a nearest neighbour) from CGAL, we will be
     65      // able to figure out which particle it corresponded to.
     66      sv.vertex->info() = sv.coincidence = i;
     67    } else {
     68      //cout << "  coincident with " << coinciding_index << endl;
     69      // the new vertex points to the already existing one and we
     70      // record the coincidence
     71      //
     72      // Note that we must not only set the coincidence of the
     73      // currently-added particle, the one it coincides with also
     74      // needs be updated (taking into account that it might already
     75      // coincide with another one)
     76      //
     77      // An example may help. Say coinciding_index = i1 and we're adding i2==i.
     78      // Then _sv[i2].coincidence = i1; _sv[i1].coincidence = i2. In both
     79      // cases sv.vertex->info() == i1;
     80      //
     81      // Later on we add i3; we find out that its coinciding index is i1;
     82      // so we set _sv[i3].coincidence = i2 and sv[i1].coincidence = i3.
     83      //
     84      // This gives us the structure
     85      //  _supervertex[i1].coincidence == in
     86      //  _supervertex[i2].coincidence == i1
     87      //  ...
     88      //  _supervertex[in].coincidence == in-1
     89      //
     90      sv.coincidence = _supervertex[coinciding_index].coincidence; // handles cases with previous coincidences
     91      _supervertex[coinciding_index].coincidence = i;
     92    }
     93     
    6394    _supervertex.push_back(sv);   
    6495  }
     
    76107/// Crashes if the given vertex handle already exists. Otherwise
    77108/// it does the bookkeeping for future such tests
    78 void DnnPlane::_CrashIfVertexPresent(
    79         const Vertex_handle & vertex, const int & its_index) {
    80   if (!_crash_on_coincidence) return;
    81 
     109int DnnPlane::_CheckIfVertexPresent(
     110        const Vertex_handle & vertex, const int its_index) {
    82111  // vertices that do not have the same geometric position as any
    83112  // other vertex so far added have info().val() == NEW_VERTEX -- this
     
    90119  // DNN:DNN) to be equal to a vertex "index".
    91120  if (vertex->info().val() != NEW_VERTEX) {
    92     ostringstream err;
    93     err << "ERROR in DnnPlane::_CrashIfVertexPresent"
    94          <<endl << "Point "<<its_index<<" coincides with point "
    95          <<vertex->info().val() << endl;
    96     throw DnnError(err.str());
    97   }
     121    if (_crash_on_coincidence){
     122      ostringstream err;
     123      err << "Error: DnnPlane::_CheckIfVertexPresent"
     124          << "Point "<<its_index<<" coincides with point "
     125          <<vertex->info().val() << endl;
     126      throw DnnError(err.str());
     127    }
     128    return vertex->info().val();
     129  }
     130
     131  return its_index;
    98132}
    99133
     
    116150                          vector<int> & indices_of_updated_neighbours) {
    117151
     152  if (_verbose) cout << "Starting  DnnPlane::RemoveAndAddPoints" << endl;
    118153
    119154  // build set of UNION of Voronoi neighbours of a pair of nearest
     
    124159  set<int> indices_removed;
    125160
    126   // for each of the indices to be removed add the voronoi neighbourhood to
    127   // the NeighbourUnion set.
     161  // for each of the indices to be removed add the voronoi
     162  // neighbourhood to the NeighbourUnion set as well as the coinciding
     163  // points that had the current point as coincidence before.
    128164  for (size_t ir = 0; ir < indices_to_remove.size(); ir++) {
    129165    int index = indices_to_remove[ir];
    130166    indices_removed.insert(index);
    131     if (_verbose) cout << " Starting  RemoveAndAddPoints" << endl;
    132     if (_verbose) cout << " point " << index << endl;                   
     167    if (_verbose) cout << "  scheduling point " << index << " for removal" << endl;
     168
     169    if (_supervertex[index].coincidence != index){
     170      // we have a coincidence
     171      //
     172      // The only one of the coincident points that has to be
     173      // inserted in the neighbourhood list (and thus updated) is the
     174      // one that has 'index' as coincidence.
     175      int new_index = _supervertex[index].coincidence;
     176      while (_supervertex[new_index].coincidence != index)
     177        new_index = _supervertex[new_index].coincidence;
     178      if (_verbose) cout << "  inserted coinciding " << new_index << " to neighbours union" << endl;
     179      NeighbourUnion.insert(new_index);
     180
     181      // if this is the point among the coiciding ones that holds the
     182      // CGAL vertex, then also insert the CGAL neighbours, otherwise
     183      // just skip that step.
     184      if (index != _supervertex[index].vertex->info().val()) continue;
     185    }
     186
    133187    // have a circulators that will go round the Voronoi neighbours of
    134188    // _supervertex[index1].vertex
    135189    Vertex_circulator vc = _TR.incident_vertices(_supervertex[index].vertex);
    136190    Vertex_circulator done = vc;
    137     do  {
    138       // if a neighbouring vertex not the infinite vertex, then add it
    139       // to our union of neighbouring vertices.
    140       if (_verbose) cout << "examining " << vc->info().val() << endl;
    141       if (vc->info().val() != INFINITE_VERTEX) {
    142         // NB: from it=1 onwards occasionally it might already have
    143         // been inserted -- but double insertion still leaves only one
    144         // copy in the set, so there's no problem
    145         NeighbourUnion.insert(vc->info().val());
    146         if (_verbose) cout << "inserted " << vc->info().val() << endl;
    147       }
    148     } while (++vc != done);
     191    if (vc != NULL){ // a safety check in case there is no Voronoi
     192                     // neighbour (which may happen e.g. if we just
     193                     // have a bunch of coincident points)
     194      do  {
     195        // if a neighbouring vertex is not the infinite vertex, then add it
     196        // to our union of neighbouring vertices.
     197        if (_verbose) cout << "examining " << vc->info().val() << endl;
     198        if (vc->info().val() != INFINITE_VERTEX) {
     199          // NB: from it=1 onwards occasionally it might already have
     200          // been inserted -- but double insertion still leaves only one
     201          // copy in the set, so there's no problem
     202          NeighbourUnion.insert(vc->info().val());
     203          if (_verbose) cout << "  inserted " << vc->info().val() << " to neighbours union" << endl;
     204        }
     205      } while (++vc != done);
     206    }
    149207  }
    150208 
     
    160218  for (size_t ir = 0; ir < indices_to_remove.size(); ir++) {
    161219    int index = indices_to_remove[ir];
     220    if (_verbose) cout << "  removing " << index << endl;
    162221
    163222    // NeighbourUnion should not contain the points to be removed
    164223    // (because later we will assume they still exist).
    165224    NeighbourUnion.erase(indices_to_remove[ir]);
    166    
     225
     226    // first deal with  coincidences
     227    if (_supervertex[index].coincidence != index){
     228      int new_index = _supervertex[index].coincidence;
     229
     230      // if this is the point among the coiciding ones that "owns" the
     231      // CGAL vertex we need to re-label the CGAL vertex so that it
     232      // points to the coincident particle and set the current one to
     233      // NULL
     234      //
     235      // This can be done only on the first point as they all share
     236      // the same value
     237      //
     238      // Note that this has to be done before the following step since
     239      // it will alter the coincidence information
     240      if (index == _supervertex[index].vertex->info().val())
     241        _supervertex[new_index].vertex->info() = new_index;
     242
     243      // we need to browse the coincidences until we end the loop, at
     244      // which point we reset the coincidence of the point that has
     245      // the current one as a coincidence
     246      while (_supervertex[new_index].coincidence != index)
     247        new_index = _supervertex[new_index].coincidence;
     248      _supervertex[new_index].coincidence = _supervertex[index].coincidence;
     249
     250      // remove the coincidence on the point being removed and mark it
     251      // as removed
     252      _supervertex[index].coincidence = index;
     253      _supervertex[index].vertex = NULL;
     254
     255      continue;
     256    }
     257
    167258    // points to be removed should also be eliminated from the
    168259    // triangulation and the supervertex structure should be updated
     
    192283  // of the neighbour union happens to be on the wrong side.
    193284  Face_handle face;
    194   if (indices_to_remove.size() > 0) {
     285  //if (indices_to_remove.size() > 0) { // GS: use NeighbourUnion instead
     286                                        //     (safe also in case of coincidences)
     287  if (NeighbourUnion.size() > 0) {
    195288    // face can only be found if there were points to remove in first place
    196289    face = _TR.incident_faces(
     
    204297    int index = _supervertex.size()-1;
    205298    indices_added.push_back(index);
    206 
    207     if (indices_to_remove.size() > 0) {
     299    if (_verbose) cout << "  adding " << index << endl;
     300
     301    //if (indices_to_remove.size() > 0) {
     302    if (NeighbourUnion.size() > 0) {
    208303      // be careful of using face (for location hinting) only when it exists
    209304      _supervertex[index].vertex = _TR.insert(Point(points_to_add[ia].first,
     
    213308                                                    points_to_add[ia].second));
    214309    }
    215     // we are not up to dealing with coincident vertices, so make
    216     // sure the user knows!
    217     _CrashIfVertexPresent(_supervertex[index].vertex, index);
    218     _supervertex[index].vertex->info() = index;
     310
     311    // check if this leads to a coincidence
     312    int coinciding_index = _CheckIfVertexPresent(_supervertex[index].vertex, index);
     313    if (coinciding_index == index){
     314      // we need to associate an index to each vertex -- thus when we get
     315      // a vertex (e.g. as a nearest neighbour) from CGAL, we will be
     316      // able to figure out which particle it corresponded to.
     317      _supervertex[index].vertex->info() = _supervertex[index].coincidence = index;
     318    } else {
     319      if (_verbose) cout << "  coinciding with vertex " << coinciding_index << endl;
     320      // the new vertex points to an already existing one and we
     321      // record the coincidence
     322      //
     323      // we also update the NN of the coinciding particle (to avoid
     324      // having to loop over the list of coinciding neighbours later)
     325      // This is done first as it allows us to check if this is a new
     326      // coincidence or a coincidence added to a particle that was
     327      // previously "alone"
     328      _supervertex[coinciding_index].NNindex = index;
     329      _supervertex[coinciding_index].NNdistance = 0.0;
     330      indices_of_updated_neighbours.push_back(coinciding_index);
     331
     332      // Note that we must not only set the coincidence of the
     333      // currently-added particle, the one it coincides with also
     334      // needs be updated (taking into account that it might already
     335      // coincide with another one)
     336      _supervertex[index].coincidence = _supervertex[coinciding_index].coincidence; // handles cases with previous coincidences
     337      _supervertex[coinciding_index].coincidence = index;
     338
     339    }
    219340   
    220341    // first find nearest neighbour of "newpoint" (shorthand for
     
    227348    indices_of_updated_neighbours.push_back(index);
    228349    _SetAndUpdateNearest(index, indices_of_updated_neighbours);
     350
     351    //cout << "Added: " << setprecision(20) << " ("
     352    //     << points_to_add[ia].first << "," << points_to_add[ia].second
     353    //     << ") with index " << index << endl;
    229354  }
    230355
     
    251376  }
    252377
     378  if (_verbose) cout << "Leaving  DnnPlane::RemoveAndAddPoints" << endl;
    253379}
    254 
    255380
    256381//----------------------------------------------------------------------
    257382/// Determines the index and distance of the nearest neighbour to
    258383/// point j and puts the information into the _supervertex entry for j.
    259 void DnnPlane::_SetNearest (const int & j) {
     384void DnnPlane::_SetNearest (const int j) {
     385  // first deal with the cases where we have a coincidence
     386  if (_supervertex[j].coincidence != j){
     387    _supervertex[j].NNindex = _supervertex[j].coincidence;
     388    _supervertex[j].NNdistance = 0.0;
     389    return;
     390  }
     391
     392  // The code below entirely uses CGAL distance comparisons to compute
     393  // the nearest neighbour. It has the mais drawback to induice a
     394  // 10-20% time penalty so we switched to our own comparison (which
     395  // only turns to CGAL for dangerous situations)
     396  //
     397  //  Vertex_handle current = _supervertex[j].vertex;
     398  //  Vertex_circulator vc = _TR.incident_vertices(current);
     399  //  Vertex_circulator done = vc;
     400  //  Vertex_handle nearest = _TR.infinite_vertex();
     401  //  double mindist = HUGE_DOUBLE;
     402  //
     403  //   // when there is only one finite point left in the triangulation,
     404  //   // there are no triangles. Presumably this is why voronoi returns
     405  //   // NULL for the incident vertex circulator. Check if this is
     406  //   // happening before circulating over it... (Otherwise it crashes
     407  //   // when looking for neighbours of last point)
     408  //   if (vc != NULL){
     409  //     // initialise the nearest vertex handle to the first incident
     410  //     // vertex that is not INFINITE_VERTEX
     411  //     while (vc->info().val() == INFINITE_VERTEX){
     412  //       vc++;
     413  //       if (vc==done) break; // if vc==done, then INFINITE_VERTEX is the
     414  //                       // only element in the neighbourhood
     415  //     }
     416  //
     417  //     // if there is just the infinite vertex, we have vc->info().val()
     418  //     // == INFINITE_VERTEX and nothing has to be done
     419  //     // otherwise, use the current vc as an initialisation
     420  //     if (vc->info().val() != INFINITE_VERTEX){
     421  //       nearest = vc; // initialisation to the first non-infinite vertex
     422  //
     423  //       // and loop over the following ones
     424  //       while (++vc != done){
     425  //    // we should not compare with the infinite vertex
     426  //    if (vc->info().val() == INFINITE_VERTEX) continue;
     427  //
     428  //    if (_verbose) cout << current->info().val() << " " << vc->info().val() << endl;
     429  //    // use CGAL's distance comparison to check if 'vc' is closer to
     430  //    // 'current' than the nearest so far (we include the == case for
     431  //    // safety though it should not matter in this precise case)
     432  //    if (CGAL::compare_distance_to_point(current->point(), vc->point(), nearest->point())!=CGAL::LARGER){
     433  //      nearest = vc;
     434  //      if (_verbose) cout << "nearer";
     435  //    }
     436  //       }
     437  //
     438  //       // now compute the distance
     439  //       //
     440  //       // Note that since we're always using CGAL to compare distances
     441  //       // (and never the distance computed using _euclid_distance) we
     442  //       // should not worry about rounding errors in mindist
     443  //       mindist = _euclid_distance(current->point(), nearest->point());
     444  //     }
     445  //   }
     446  //
     447  //  // set j's supervertex info about nearest neighbour
     448  //  _supervertex[j].NNindex = nearest->info().val();
     449  //  _supervertex[j].NNdistance = mindist;
     450
    260451  Vertex_handle current = _supervertex[j].vertex;
    261452  Vertex_circulator vc = _TR.incident_vertices(current);
     
    264455  double mindist = HUGE_DOUBLE; // change this to "HUGE" or max_double?
    265456  Vertex_handle nearest = _TR.infinite_vertex();
    266 
     457 
    267458  // when there is only one finite point left in the triangulation,
    268459  // there are no triangles. Presumably this is why voronoi returns
     
    274465      // find distance between j and its Voronoi neighbour (vc)
    275466      if (_verbose) cout << current->info().val() << " " << vc->info().val() << endl;
    276       dist = _euclid_distance(current->point(), vc->point());
     467
    277468      // check if j is closer to vc than vc's currently registered
    278469      // nearest neighbour (and update things if it is)
    279       if (dist < mindist) {
    280         mindist = dist; nearest = vc;
    281         if (_verbose) cout << "nearer ";
     470      if (_is_closer_to(current->point(), vc->point(), nearest, dist, mindist)){
     471        nearest = vc;
     472        if (_verbose) cout << "nearer ";
    282473      }
    283474      if (_verbose) cout << vc->point() << "; "<< dist << endl;
    284475    }
    285476  } while (++vc != done); // move on to next Voronoi neighbour
     477 
    286478  // set j's supervertex info about nearest neighbour
    287479  _supervertex[j].NNindex = nearest->info().val();
     
    291483//----------------------------------------------------------------------
    292484/// Determines and stores the nearest neighbour of j, and where
    293 /// necessary update the nearest-neighbour info of Voronoi neighbours
     485/// necessary updates the nearest-neighbour info of Voronoi neighbours
    294486/// of j;
    295487///
     
    304496/// NB: note that we have _SetAndUpdateNearest as a completely
    305497///     separate routine from _SetNearest because we want to
    306 ///     use one single ciruclation over voronoi neighbours to find the
     498///     use one single circulation over voronoi neighbours to find the
    307499///     nearest neighbour and to update the voronoi neighbours if need
    308500///     be.
    309501void DnnPlane::_SetAndUpdateNearest(
    310                           const int & j,
     502                          const int j,
    311503                          vector<int> & indices_of_updated_neighbours) {
     504  //cout << "SetAndUpdateNearest for point " << j << endl;
     505  // first deal with coincidences
     506  if (_supervertex[j].coincidence != j){
     507    _supervertex[j].NNindex = _supervertex[j].coincidence;
     508    _supervertex[j].NNdistance = 0.0;
     509    //cout << "  set to coinciding point " << _supervertex[j].coincidence << endl;
     510    return;
     511  }
    312512
    313513  Vertex_handle current = _supervertex[j].vertex;
     
    326526    if (vc->info().val() != INFINITE_VERTEX) {
    327527      if (_verbose) cout << current->info().val() << " " << vc->info().val() << endl;
    328       // find distance between j and its Voronoi neighbour (vc)
    329       dist = _euclid_distance(current->point(), vc->point());
     528
    330529      // update the mindist if we are closer than anything found so far
    331       if (dist < mindist) {
    332         mindist = dist; nearest = vc;
    333         if (_verbose) cout << "nearer ";
     530      if (_is_closer_to(current->point(), vc->point(), nearest, dist, mindist)){
     531        nearest = vc;
     532        if (_verbose) cout << "nearer ";
    334533      }
     534
    335535      // find index corresponding to vc for easy manipulation
    336536      int vcindx = vc->info().val();
    337537      if (_verbose) cout << vc->point() << "; "<< dist << endl;
    338       // check if j is closer to vc than vc's currently registered
    339       // nearest neighbour (and update things if it is)
    340       if (dist < _supervertex[vcindx].NNdistance) {
     538
     539      if (_is_closer_to_with_hint(vc->point(), current->point(),
     540                                  _supervertex[_supervertex[vcindx].NNindex].vertex,
     541                                  dist, _supervertex[vcindx].NNdistance)){
    341542        if (_verbose) cout << vcindx << "'s NN becomes " << current->info().val() << endl;
    342         _supervertex[vcindx].NNdistance = dist;
    343543        _supervertex[vcindx].NNindex = j;
    344544        indices_of_updated_neighbours.push_back(vcindx);
    345545      }
     546
     547      // original code without the use of CGAL distance in potentially
     548      // dangerous cases
     549      //
     550      // // check if j is closer to vc than vc's currently registered
     551      // // nearest neighbour (and update things if it is)
     552      // //
     553      // // GS: originally, the distance test below was a strict <. It
     554      // //     has to be <= because if the two distances are ==, it is
     555      // //     possible that the old NN is no longer connected to vc in
     556      // //     the triangulation, and we are sure that the newly
     557      // //     inserted point (j) is (since we loop over j's
     558      // //     neighbouring points in the triangulation).
     559      // if (dist <= _supervertex[vcindx].NNdistance) {
     560      //        if (_verbose) cout << vcindx << "'s NN becomes " << current->info().val() << endl;
     561      //        _supervertex[vcindx].NNdistance = dist;
     562      //        _supervertex[vcindx].NNindex = j;
     563      //        indices_of_updated_neighbours.push_back(vcindx);
     564      // }
    346565    }
    347566  } while (++vc != done); // move on to next Voronoi neighbour
    348567  // set j's supervertex info about nearest neighbour
     568  //cout << "  set to point " << nearest->info().val() << endl;
    349569  _supervertex[j].NNindex = nearest->info().val();
    350570  _supervertex[j].NNdistance = mindist;
  • external/fastjet/Error.cc

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id$
     1//FJSTARTHEADER
     2// $Id: Error.cc 3433 2014-07-23 08:17:03Z salam $
    33//
    4 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     4// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931#include "fastjet/Error.hh"
  • external/fastjet/Error.hh

    r5b5a56b r35cdc46  
    22#define __FASTJET_ERROR_HH__
    33
    4 //STARTHEADER
    5 // $Id: Error.hh 2577 2011-09-13 15:11:38Z salam $
     4//FJSTARTHEADER
     5// $Id: Error.hh 3433 2014-07-23 08:17:03Z salam $
    66//
    7 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     7// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    88//
    99//----------------------------------------------------------------------
     
    1616//
    1717//  The algorithms that underlie FastJet have required considerable
    18 //  development and are described in hep-ph/0512210. If you use
     18//  development. They are described in the original FastJet paper,
     19//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1920//  FastJet as part of work towards a scientific publication, please
    20 //  include a citation to the FastJet paper.
     21//  quote the version you use and include a citation to the manual and
     22//  optionally also to hep-ph/0512210.
    2123//
    2224//  FastJet is distributed in the hope that it will be useful,
     
    2830//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2931//----------------------------------------------------------------------
    30 //ENDHEADER
     32//FJENDHEADER
    3133
    3234#include<iostream>
  • external/fastjet/FunctionOfPseudoJet.cc

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id$
     1//FJSTARTHEADER
     2// $Id: FunctionOfPseudoJet.cc 3433 2014-07-23 08:17:03Z salam $
    33//
    4 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     4// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931#include <fastjet/FunctionOfPseudoJet.hh>
  • external/fastjet/FunctionOfPseudoJet.hh

    r5b5a56b r35cdc46  
    22#define __FASTJET_FUNCTION_OF_PSEUDOJET_HH__
    33
    4 //STARTHEADER
    5 // $Id: FunctionOfPseudoJet.hh 2577 2011-09-13 15:11:38Z salam $
     4//FJSTARTHEADER
     5// $Id: FunctionOfPseudoJet.hh 3433 2014-07-23 08:17:03Z salam $
    66//
    7 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     7// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    88//
    99//----------------------------------------------------------------------
     
    1616//
    1717//  The algorithms that underlie FastJet have required considerable
    18 //  development and are described in hep-ph/0512210. If you use
     18//  development. They are described in the original FastJet paper,
     19//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1920//  FastJet as part of work towards a scientific publication, please
    20 //  include a citation to the FastJet paper.
     21//  quote the version you use and include a citation to the manual and
     22//  optionally also to hep-ph/0512210.
    2123//
    2224//  FastJet is distributed in the hope that it will be useful,
     
    2830//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2931//----------------------------------------------------------------------
    30 //ENDHEADER
     32//FJENDHEADER
    3133
    3234#include <fastjet/PseudoJet.hh>
     
    4951  FunctionOfPseudoJet(){}
    5052
    51   /// ctor that creates a constant function
    52   FunctionOfPseudoJet(const TOut &constant_value);
     53  // ctor that creates a constant function
     54  //----------
     55  // this declaration was present in versions of FJ from 3.0.0 to 3.0.6,
     56  // but never implemented. It is being removed from 3.0.7 upwards
     57  // to avoid misleading users
     58  //FunctionOfPseudoJet(const TOut &constant_value);
    5359
    5460  /// default dtor (virtual to allow safe polymorphism)
  • external/fastjet/GhostedAreaSpec.cc

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id$
     1//FJSTARTHEADER
     2// $Id: GhostedAreaSpec.cc 3433 2014-07-23 08:17:03Z salam $
    33//
    4 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     4// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931#include "fastjet/GhostedAreaSpec.hh"
  • external/fastjet/GhostedAreaSpec.hh

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id: GhostedAreaSpec.hh 2728 2011-11-20 14:18:59Z salam $
    3 //
    4 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     1//FJSTARTHEADER
     2// $Id: GhostedAreaSpec.hh 3433 2014-07-23 08:17:03Z salam $
     3//
     4// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931
     
    122124
    123125  // for accessing values set by the user
     126  inline double ghost_rapmax () const {return _ghost_maxrap;}
     127  inline double ghost_maxrap () const {return _ghost_maxrap;}
    124128  inline double ghost_etamax () const {return _ghost_maxrap;}
    125   inline double ghost_maxrap () const {return _ghost_maxrap;}
     129  inline double ghost_maxeta () const {return _ghost_maxrap;}
    126130  inline double ghost_area   () const {return _ghost_area   ;}
    127131  inline double grid_scatter () const {return _grid_scatter;}
     
    140144  // when explicitly modifying values, sometimes call the initializer
    141145  inline void set_ghost_area   (double val) {_ghost_area    = val; _initialize();}
     146  inline void set_ghost_rapmax (double val) {_ghost_maxrap = val; _initialize();}
     147  inline void set_ghost_maxrap (double val) {_ghost_maxrap = val; _initialize();}
    142148  inline void set_ghost_etamax (double val) {_ghost_maxrap = val; _initialize();}
    143   inline void set_ghost_maxrap (double val) {_ghost_maxrap = val; _initialize();}
     149  inline void set_ghost_maxeta (double val) {_ghost_maxrap = val; _initialize();}
    144150  inline void set_grid_scatter (double val) {_grid_scatter   = val; }
    145151  inline void set_pt_scatter   (double val) {_pt_scatter     = val; }
  • external/fastjet/JetDefinition.cc

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id$
    3 //
    4 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     1//FJSTARTHEADER
     2// $Id: JetDefinition.cc 3492 2014-07-30 16:58:20Z soyez $
     3//
     4// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931#include "fastjet/JetDefinition.hh"
     
    6870  // cross-check the number of parameters that were declared in setting up the
    6971  // algorithm (passed internally from the public constructors)
    70   switch (jet_algorithm_in) {
    71   case ee_kt_algorithm:
    72     if (nparameters != 0) {
    73       ostringstream oss;
    74       oss << "ee_kt_algorithm should be constructed with 0 parameters but was called with "
    75           << nparameters << " parameter(s)\n";
    76       throw Error(oss.str());
    77     }
    78     break;
    79   case genkt_algorithm:
    80   case ee_genkt_algorithm:
    81     if (nparameters != 2) {
    82       ostringstream oss;
    83       oss << "(ee_)genkt_algorithm should be constructed with 2 parameters but was called with "
    84           << nparameters << " parameter(s)\n";
    85       throw Error(oss.str());
    86     }
    87     break;
    88   default:
    89     if (nparameters != 1) {
    90       ostringstream oss;
    91       oss << "The jet algorithm you requested ("
    92           << jet_algorithm_in << ") should be constructed with 1 parameter but was called with "
    93           << nparameters << " parameter(s)\n";
    94       throw Error(oss.str());
    95     }
     72  unsigned int nparameters_expected = n_parameters_for_algorithm(jet_algorithm_in);
     73  if (nparameters != (int) nparameters_expected){
     74    ostringstream oss;
     75    oss << "The jet algorithm you requested ("
     76        << jet_algorithm_in << ") should be constructed with " << nparameters_expected
     77        << " parameter(s) but was called with " << nparameters << " parameter(s)\n";
     78    throw Error(oss.str());
    9679  }
    9780
     
    10689
    10790//----------------------------------------------------------------------
     91// returns true if the jet definition involves an algorithm
     92// intended for use on a spherical geometry (e.g. e+e- algorithms,
     93// as opposed to most pp algorithms, which use a cylindrical,
     94// rapidity-phi geometry).
     95bool JetDefinition::is_spherical() const {
     96  if (jet_algorithm() == plugin_algorithm) {
     97    return plugin()->is_spherical();
     98  } else {
     99    return (jet_algorithm() == ee_kt_algorithm ||  // as of 2013-02-14, the two
     100            jet_algorithm() == ee_genkt_algorithm  // native spherical algorithms
     101            );
     102  }
     103}
     104
     105//----------------------------------------------------------------------
    108106string JetDefinition::description() const {
     107  ostringstream name;
     108 
     109  name << description_no_recombiner();
     110
     111  if ((jet_algorithm() == plugin_algorithm) || (jet_algorithm() == undefined_jet_algorithm)){
     112    return name.str();
     113  }
     114
     115  if (n_parameters_for_algorithm(jet_algorithm()) == 0)
     116    name << " with ";
     117  else
     118    name << " and ";
     119  name << recombiner()->description();
     120
     121  return name.str();
     122}
     123
     124//----------------------------------------------------------------------
     125string JetDefinition::description_no_recombiner() const {
     126 
    109127  ostringstream name;
    110128  if (jet_algorithm() == plugin_algorithm) {
    111129    return plugin()->description();
    112   } else if (jet_algorithm() == kt_algorithm) {
    113     name << "Longitudinally invariant kt algorithm with R = " << R();
    114     name << " and " << recombiner()->description();
    115   } else if (jet_algorithm() == cambridge_algorithm) {
    116     name << "Longitudinally invariant Cambridge/Aachen algorithm with R = "
    117          << R() ;
    118     name << " and " << recombiner()->description();
    119   } else if (jet_algorithm() == antikt_algorithm) {
    120     name << "Longitudinally invariant anti-kt algorithm with R = "
    121          << R() ;
    122     name << " and " << recombiner()->description();
    123   } else if (jet_algorithm() == genkt_algorithm) {
    124     name << "Longitudinally invariant generalised kt algorithm with R = "
    125          << R() << ", p = " << extra_param();
    126     name << " and " << recombiner()->description();
    127   } else if (jet_algorithm() == cambridge_for_passive_algorithm) {
    128     name << "Longitudinally invariant Cambridge/Aachen algorithm with R = "
    129          << R() << "and a special hack whereby particles with kt < "
    130          << extra_param() << "are treated as passive ghosts";
    131   } else if (jet_algorithm() == ee_kt_algorithm) {
    132     name << "e+e- kt (Durham) algorithm (NB: no R)";
    133     name << " with " << recombiner()->description();
    134   } else if (jet_algorithm() == ee_genkt_algorithm) {
    135     name << "e+e- generalised kt algorithm with R = "
    136          << R() << ", p = " << extra_param();
    137     name << " and " << recombiner()->description();
    138130  } else if (jet_algorithm() == undefined_jet_algorithm) {
    139     name << "uninitialised JetDefinition (jet_algorithm=undefined_jet_algorithm)" ;
    140   } else {
    141     throw Error("JetDefinition::description(): unrecognized jet_algorithm");
    142   }
     131    return "uninitialised JetDefinition (jet_algorithm=undefined_jet_algorithm)" ;
     132  }
     133
     134  name << algorithm_description(jet_algorithm());
     135  switch (n_parameters_for_algorithm(jet_algorithm())){
     136  case 0: name << " (NB: no R)"; break;
     137  case 1: name << " with R = " << R(); break; // the parameter is always R
     138  case 2:
     139    // the 1st parameter is always R
     140    name << " with R = " << R();
     141    // the 2nd depends on the algorithm
     142    if (jet_algorithm() == cambridge_for_passive_algorithm){
     143      name << "and a special hack whereby particles with kt < "
     144           << extra_param() << "are treated as passive ghosts";
     145    } else {
     146      name << ", p = " << extra_param();
     147    }
     148  };
     149
    143150  return name.str();
    144151}
    145152
    146 
     153//----------------------------------------------------------------------
     154string JetDefinition::algorithm_description(const JetAlgorithm jet_alg){
     155  ostringstream name;
     156  switch (jet_alg){
     157  case plugin_algorithm:                return "plugin algorithm";
     158  case kt_algorithm:                    return "Longitudinally invariant kt algorithm";
     159  case cambridge_algorithm:             return "Longitudinally invariant Cambridge/Aachen algorithm";
     160  case antikt_algorithm:                return "Longitudinally invariant anti-kt algorithm";
     161  case genkt_algorithm:                 return "Longitudinally invariant generalised kt algorithm";
     162  case cambridge_for_passive_algorithm: return "Longitudinally invariant Cambridge/Aachen algorithm";
     163  case ee_kt_algorithm:                 return "e+e- kt (Durham) algorithm (NB: no R)";
     164  case ee_genkt_algorithm:              return "e+e- generalised kt algorithm";
     165  case undefined_jet_algorithm:         return "undefined jet algorithm";
     166  default:
     167    throw Error("JetDefinition::algorithm_description(): unrecognized jet_algorithm");
     168  };
     169}
     170
     171//----------------------------------------------------------------------
     172unsigned int JetDefinition::n_parameters_for_algorithm(const JetAlgorithm jet_alg){
     173  switch (jet_alg) {
     174  case ee_kt_algorithm:    return 0;
     175  case genkt_algorithm:
     176  case ee_genkt_algorithm: return 2;
     177  default:                 return 1;
     178  };
     179}
     180
     181//----------------------------------------------------------------------
    147182void JetDefinition::set_recombination_scheme(
    148183                               RecombinationScheme recomb_scheme) {
     
    150185
    151186  // do not forget to delete the existing recombiner if needed
    152   if (_recombiner_shared()) _recombiner_shared.reset();
     187  if (_shared_recombiner()) _shared_recombiner.reset();
    153188
    154189  _recombiner = 0;
     190}
     191
     192void JetDefinition::set_recombiner(const JetDefinition &other_jet_def){
     193  // make sure the "invariants" of the other jet def are sensible
     194  assert(other_jet_def._recombiner ||
     195         other_jet_def.recombination_scheme() != external_scheme);
     196
     197  // first treat the situation where we're using the default recombiner
     198  if (other_jet_def._recombiner == 0){
     199    set_recombination_scheme(other_jet_def.recombination_scheme());
     200    return;
     201  }
     202
     203  // in other cases, copy the pointer to the recombiner
     204  _recombiner = other_jet_def._recombiner;
     205  // set the default recombiner appropriately
     206  _default_recombiner = DefaultRecombiner(external_scheme);
     207  // and set the _shared_recombiner to the same state
     208  // as in the other_jet_def, whatever that was
     209  _shared_recombiner.reset(other_jet_def._shared_recombiner);
     210
     211  // NB: it is tempting to go via set_recombiner and then to sort
     212  // out the shared part, but this would be dangerous in the
     213  // specific (rare?) case where other_jet_def is the same as this
     214  // it deletes_recombiner_when_unused. In that case the shared
     215  // pointer reset would delete the recombiner.
    155216}
    156217
     
    163224  if (other_jd.recombination_scheme() != scheme) return false;
    164225
    165   // if the scheme is "external", also check that they ahve the same
     226  // if the scheme is "external", also check that they have the same
    166227  // recombiner
    167228  return (scheme != external_scheme)
     
    169230}
    170231
    171 /// allows to let the JetDefinition handle the deletion of the
     232/// causes the JetDefinition to handle the deletion of the
    172233/// recombiner when it is no longer used
    173234void JetDefinition::delete_recombiner_when_unused(){
    174235  if (_recombiner == 0){
    175236    throw Error("tried to call JetDefinition::delete_recombiner_when_unused() for a JetDefinition without a user-defined recombination scheme");
    176   }
    177 
    178   _recombiner_shared.reset(_recombiner);
     237  } else if (_shared_recombiner.get()) {
     238    throw Error("Error in JetDefinition::delete_recombiner_when_unused: the recombiner is already scheduled for deletion when unused (or was already set as shared)");
     239  }
     240
     241  _shared_recombiner.reset(_recombiner);
    179242}
    180243
  • external/fastjet/JetDefinition.hh

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id: JetDefinition.hh 2687 2011-11-14 11:17:51Z soyez $
    3 //
    4 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     1#ifndef __FASTJET_JETDEFINITION_HH__
     2#define __FASTJET_JETDEFINITION_HH__
     3
     4//FJSTARTHEADER
     5// $Id: JetDefinition.hh 3523 2014-08-02 13:15:21Z salam $
     6//
     7// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    58//
    69//----------------------------------------------------------------------
     
    1316//
    1417//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     18//  development. They are described in the original FastJet paper,
     19//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1620//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     21//  quote the version you use and include a citation to the manual and
     22//  optionally also to hep-ph/0512210.
    1823//
    1924//  FastJet is distributed in the hope that it will be useful,
     
    2530//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2631//----------------------------------------------------------------------
    27 //ENDHEADER
    28 
    29 #ifndef __FASTJET_JETDEFINITION_HH__
    30 #define __FASTJET_JETDEFINITION_HH__
     32//FJENDHEADER
    3133
    3234#include<cassert>
     
    4749/// clustering events with kt and cambridge style algorithms.
    4850enum Strategy {
    49   /// fastest form about 500..10^4
     51  /// Like N2MHTLazy9 in a number of respects, but does not calculate
     52  /// ghost-ghost distances and so does not carry out ghost-ghost
     53  /// recombination.
     54  ///
     55  /// If you want active ghosted areas, then this is only suitable for
     56  /// use with the anti-kt algorithm (or genkt with negative p), and
     57  /// does not produce any pure ghost jets. If used with active areas
     58  /// with Kt or Cam algorithms it will actually produce a passive
     59  /// area.
     60  ///
     61  /// Particles are deemed to be ghosts if their pt is below a
     62  /// threshold (currently 1e-50, hard coded as ghost_limit in
     63  /// LazyTiling9SeparateGhosts).
     64  ///
     65  /// Currently for events with a couple of thousand normal particles
     66  /// and O(10k) ghosts, this can be quicker than N2MHTLazy9, which
     67  /// would otherwise be the best strategy.
     68  ///
     69  /// New in FJ3.1
     70  N2MHTLazy9AntiKtSeparateGhosts   = -10,
     71  /// only looks into a neighbouring tile for a particle's nearest
     72  /// neighbour (NN) if that particle's in-tile NN is further than the
     73  /// distance to the edge of the neighbouring tile. Uses tiles of
     74  /// size R and a 3x3 tile grid around the particle.
     75  /// New in FJ3.1
     76  N2MHTLazy9   = -7,
     77  /// Similar to N2MHTLazy9, but uses tiles of size R/2 and a 5x5 tile
     78  /// grid around the particle.
     79  /// New in FJ3.1
     80  N2MHTLazy25   = -6,
     81  /// Like to N2MHTLazy9 but uses slightly different optimizations,
     82  /// e.g. for calculations of distance to nearest tile; as of
     83  /// 2014-07-18 it is slightly slower and not recommended for
     84  /// production use. To considered deprecated.
     85  /// New in FJ3.1
     86  N2MHTLazy9Alt   = -5,
     87  /// faster that N2Tiled above about 500 particles; differs from it
     88  /// by retainig the di(closest j) distances in a MinHeap (sort of
     89  /// priority queue) rather than a simple vector.
    5090  N2MinHeapTiled   = -4,
    5191  /// fastest from about 50..500
     
    5797  /// worse even than the usual N^3 algorithms
    5898  N3Dumb      =  0,
    59   /// automatic selection of the best (based on N)
     99  /// automatic selection of the best (based on N), including
     100  /// the LazyTiled strategies that are new to FJ3.1
    60101  Best        =  1,
    61102  /// best of the NlnN variants -- best overall for N>10^4.
     
    79120  /// (Does not work for R>=2pi)
    80121  NlnNCam      = 12, // 2piMultD
     122  /// the automatic strategy choice that was being made in FJ 3.0
     123  /// (restricted to strategies that were present in FJ 3.0)
     124  BestFJ30     =  21,
    81125  /// the plugin has been used...
    82126  plugin_strategy = 999
     
    87131/// \enum JetAlgorithm
    88132/// the various families of jet-clustering algorithm
     133//
     134// [Remember to update the "is_spherical()" routine if any further
     135// spherical algorithms are added to the list below]
    89136enum JetAlgorithm {
    90137  /// the longitudinally invariant kt algorithm
     
    102149  /// where p = extra_param()
    103150  genkt_algorithm=3,
    104   /// a version of cambridge with a special distance measure for particles
    105   /// whose pt is < extra_param()
     151  /// a version of cambridge with a special distance measure for
     152  /// particles whose pt is < extra_param(); this is not usually
     153  /// intended for end users, but is instead automatically selected
     154  /// when requesting a passive Cambridge area.
    106155  cambridge_for_passive_algorithm=11,
    107156  /// a version of genkt with a special distance measure for particles
    108157  /// whose pt is < extra_param() [relevant for passive areas when p<=0]
     158  /// ***** NB: THERE IS CURRENTLY NO IMPLEMENTATION FOR THIS ALG *******
    109159  genkt_for_passive_algorithm=13,
    110160  //.................................................................
     
    244294                const Recombiner * recombiner_in,
    245295                Strategy strategy_in = Best) {
    246     *this = JetDefinition(jet_algorithm_in, R_in, external_scheme, strategy_in);
     296    *this = JetDefinition(jet_algorithm_in, R_in, xtra_param_in, external_scheme, strategy_in);
    247297    _recombiner = recombiner_in;
    248     set_extra_param(xtra_param_in);
    249298  }
    250299
     
    284333                RecombinationScheme recomb_scheme_in = E_scheme,
    285334                int nparameters_in = 1);
     335
     336  /// cluster the supplied particles and returns a vector of resulting
     337  /// jets, sorted by pt (or energy in the case of spherical,
     338  /// i.e. e+e-, algorithms). This routine currently only makes
     339  /// sense for "inclusive" type algorithms.
     340  template <class L>
     341  std::vector<PseudoJet> operator()(const std::vector<L> & particles) const;
    286342 
    287343  /// R values larger than max_allowable_R are not allowed.
     
    297353
    298354  /// set the recombiner class to the one provided
     355  ///
     356  /// Note that in order to associate to a jet definition a recombiner
     357  /// from another jet definition, it is strongly recommended to use
     358  /// the set_recombiner(const JetDefinition &) method below. The
     359  /// latter correctly handles the situations where the jet definition
     360  /// owns the recombiner (i.e. where delete_recombiner_when_unused
     361  /// has been called). In such cases, using set_recombiner(const
     362  /// Recombiner *) may lead to memory corruption.
    299363  void set_recombiner(const Recombiner * recomb) {
    300     if (_recombiner_shared()) _recombiner_shared.reset(recomb);
     364    if (_shared_recombiner()) _shared_recombiner.reset(recomb);
    301365    _recombiner = recomb;
    302366    _default_recombiner = DefaultRecombiner(external_scheme);
    303367  }
    304368
     369  /// set the recombiner to be the same as the one of 'other_jet_def'
     370  ///
     371  /// Note that this is the recommended method to associate to a jet
     372  /// definition the recombiner from another jet definition. Compared
     373  /// to the set_recombiner(const Recombiner *) above, it correctly
     374  /// handles the case where the jet definition owns the recombiner
     375  /// (i.e. where delete_recombiner_when_unused has been called)
     376  void set_recombiner(const JetDefinition &other_jet_def);
     377
    305378  /// calling this tells the JetDefinition to handle the deletion of
    306   /// the recombiner when it is no longer used
     379  /// the recombiner when it is no longer used. (Should not be called
     380  /// if the recombiner was initialised from a JetDef whose recombiner
     381  /// was already scheduled to delete itself - memory handling will
     382  /// already be automatic across both JetDef's in that case).
    307383  void delete_recombiner_when_unused();
    308384
     
    310386  const Plugin * plugin() const {return _plugin;};
    311387
    312   /// allows to let the JetDefinition handle the deletion of the
     388  /// calling this causes the JetDefinition to handle the deletion of the
    313389  /// plugin when it is no longer used
    314390  void delete_plugin_when_unused();
     
    333409  void set_extra_param(double xtra_param) {_extra_param = xtra_param;}
    334410
    335   /// return a pointer to the currently defined recombiner.
     411  /// returns a pointer to the currently defined recombiner.
    336412  ///
    337413  /// Warning: the pointer may be to an internal recombiner (for
     
    347423
    348424  /// returns true if the current jet definitions shares the same
    349   /// recombiner as teh one passed as an argument
     425  /// recombiner as the one passed as an argument
    350426  bool has_same_recombiner(const JetDefinition &other_jd) const;
     427
     428  /// returns true if the jet definition involves an algorithm
     429  /// intended for use on a spherical geometry (e.g. e+e- algorithms,
     430  /// as opposed to most pp algorithms, which use a cylindrical,
     431  /// rapidity-phi geometry).
     432  bool is_spherical() const;
    351433
    352434  /// return a textual description of the current jet definition
    353435  std::string description() const;
    354436
     437  /// returns a description not including the recombiner information
     438  std::string description_no_recombiner() const;
     439
     440  /// a short textual description of the algorithm jet_alg
     441  static std::string algorithm_description(const JetAlgorithm jet_alg);
     442
     443  /// the number of parameters associated to a given jet algorithm
     444  static unsigned int n_parameters_for_algorithm(const JetAlgorithm jet_alg);
    355445
    356446public:
     
    462552    virtual bool exclusive_sequence_meaningful() const {return false;}
    463553
     554    /// returns true if the plugin implements an algorithm intended
     555    /// for use on a spherical geometry (e.g. e+e- algorithms, as
     556    /// opposed to most pp algorithms, which use a cylindrical,
     557    /// rapidity-phi geometry).
     558    virtual bool is_spherical() const {return false;}
     559
    464560    /// a destructor to be replaced if necessary in derived classes...
    465561    virtual ~Plugin() {};
     
    481577  DefaultRecombiner _default_recombiner;
    482578  const Recombiner * _recombiner;
    483   SharedPtr<const Recombiner> _recombiner_shared;
     579  SharedPtr<const Recombiner> _shared_recombiner;
    484580
    485581};
     
    516612
    517613
    518 
    519 
    520 
    521614FASTJET_END_NAMESPACE
    522615
     616// include ClusterSequence which includes the implementation of the
     617// templated JetDefinition::operator()(...) member
     618#include "fastjet/ClusterSequence.hh"
     619
     620
    523621#endif // __FASTJET_JETDEFINITION_HH__
  • external/fastjet/LimitedWarning.cc

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id$
     1//FJSTARTHEADER
     2// $Id: LimitedWarning.cc 3619 2014-08-13 14:17:19Z salam $
    33//
    4 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     4// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931#include "fastjet/LimitedWarning.hh"
     
    4042
    4143
    42 /// output a warning to ostr
    43 void LimitedWarning::warn(const std::string & warning) {
    44   warn(warning, _default_ostr);
    45 }
     44// /// output a warning to ostr
     45// void LimitedWarning::warn(const std::string & warning) {
     46//   warn(warning, _default_ostr);
     47// }
    4648
    47 void LimitedWarning::warn(const std::string & warning, std::ostream * ostr) {
     49void LimitedWarning::warn(const char * warning, std::ostream * ostr) {
    4850  if (_this_warning_summary == 0) {
    4951    // prepare the information for the summary
     
    5456    // prepare the warning within a string stream
    5557    ostringstream warnstr;
    56     warnstr << "WARNING: ";
     58    warnstr << "WARNING from FastJet: ";
    5759    warnstr << warning;
    5860    _n_warn_so_far++;
  • external/fastjet/LimitedWarning.hh

    r5b5a56b r35cdc46  
    22#define __FASTJET_LIMITEDWARNING_HH__
    33
    4 //STARTHEADER
    5 // $Id: LimitedWarning.hh 2577 2011-09-13 15:11:38Z salam $
     4//FJSTARTHEADER
     5// $Id: LimitedWarning.hh 3622 2014-08-13 14:45:45Z salam $
    66//
    7 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     7// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    88//
    99//----------------------------------------------------------------------
     
    1616//
    1717//  The algorithms that underlie FastJet have required considerable
    18 //  development and are described in hep-ph/0512210. If you use
     18//  development. They are described in the original FastJet paper,
     19//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1920//  FastJet as part of work towards a scientific publication, please
    20 //  include a citation to the FastJet paper.
     21//  quote the version you use and include a citation to the manual and
     22//  optionally also to hep-ph/0512210.
    2123//
    2224//  FastJet is distributed in the hope that it will be useful,
     
    2830//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2931//----------------------------------------------------------------------
    30 //ENDHEADER
     32//FJENDHEADER
    3133
    3234
     
    5052
    5153  /// constructor that provides a user-set max number of warnings
    52   LimitedWarning(int max_warn) : _max_warn(max_warn), _n_warn_so_far(0), _this_warning_summary(0) {}
     54  LimitedWarning(int max_warn_in) : _max_warn(max_warn_in), _n_warn_so_far(0), _this_warning_summary(0) {}
    5355
    5456  /// outputs a warning to standard error (or the user's default
    5557  /// warning stream if set)
    56   void warn(const std::string & warning);
     58  void warn(const char * warning) {warn(warning, _default_ostr);}
     59
     60  /// outputs a warning to standard error (or the user's default
     61  /// warning stream if set)
     62  void warn(const std::string & warning) {warn(warning.c_str(), _default_ostr);}
    5763
    5864  /// outputs a warning to the specified stream
    59   void warn(const std::string & warning, std::ostream * ostr);
     65  void warn(const char * warning, std::ostream * ostr);
     66
     67  /// outputs a warning to the specified stream
     68  void warn(const std::string & warning, std::ostream * ostr) {warn(warning.c_str(), ostr);}
    6069
    6170  /// sets the default output stream for all warnings (by default
     
    7079    _max_warn_default = max_warn;
    7180  }
     81
     82  /// the maximum number of warning messages that will be printed
     83  /// by this instance of the class
     84  int max_warn() const {return _max_warn;}
     85
     86  /// the number of times so far that a warning has been registered
     87  /// with this instance of the class.
     88  int n_warn_so_far() const {return _n_warn_so_far;}
    7289
    7390  /// returns a summary of all the warnings that came through the
  • external/fastjet/MinHeap.cc

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id$
     1//FJSTARTHEADER
     2// $Id: MinHeap.cc 3433 2014-07-23 08:17:03Z salam $
    33//
    4 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     4// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931#include "fastjet/internal/MinHeap.hh"
     
    4345///
    4446///   . for _heap[i], the "parent" is to be found at (i-1)/2
    45 void MinHeap::_initialise(const std::vector<double> & values){
     47void MinHeap::initialise(const std::vector<double> & values){
    4648 
    4749  // fill the high-range of the heap with the largest possible value
  • external/fastjet/NNH.hh

    r5b5a56b r35cdc46  
    22#define __FASTJET_NNH_HH__
    33
    4 //STARTHEADER
    5 // $Id: NNH.hh 3203 2013-09-15 07:49:50Z salam $
    6 //
    7 // Copyright (c) 2009, Matteo Cacciari, Gavin Salam and Gregory Soyez
     4//FJSTARTHEADER
     5// $Id: NNH.hh 3433 2014-07-23 08:17:03Z salam $
     6//
     7// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    88//
    99//----------------------------------------------------------------------
     
    1616//
    1717//  The algorithms that underlie FastJet have required considerable
    18 //  development and are described in hep-ph/0512210. If you use
     18//  development. They are described in the original FastJet paper,
     19//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1920//  FastJet as part of work towards a scientific publication, please
    20 //  include a citation to the FastJet paper.
     21//  quote the version you use and include a citation to the manual and
     22//  optionally also to hep-ph/0512210.
    2123//
    2224//  FastJet is distributed in the hope that it will be useful,
     
    2830//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2931//----------------------------------------------------------------------
    30 //ENDHEADER
     32//FJENDHEADER
    3133
    3234#include<fastjet/ClusterSequence.hh>
     
    138140  class NNBJ; // forward declaration
    139141 
    140   /// establish the nearest neighbour for jet, and cross check constistency
     142  /// establish the nearest neighbour for jet, and cross check consistency
    141143  /// of distances for the other jets that are encountered. Assumes
    142144  /// jet not contained within begin...end
  • external/fastjet/PseudoJet.cc

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id$
    3 //
    4 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     1//FJSTARTHEADER
     2// $Id: PseudoJet.cc 3565 2014-08-11 15:24:39Z salam $
     3//
     4// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931
     
    176178// return the product, coeff * jet
    177179PseudoJet operator* (double coeff, const PseudoJet & jet) {
     180  // see the comment in operator*= about ensuring valid rap phi
     181  // before a multiplication to handle case of multiplication by
     182  // zero, while maintaining rapidity and phi
     183  jet._ensure_valid_rap_phi();
    178184  //return PseudoJet(coeff*jet.four_mom());
    179185  // the following code is hopefully more efficient
     
    198204/// multiply the jet's momentum by the coefficient
    199205void PseudoJet::operator*=(double coeff) {
     206  // operator*= aims to maintain the rapidity and azimuth
     207  // for the PseudoJet; if they have already been evaluated
     208  // this is fine, but if they haven't and coeff is sufficiently
     209  // small as to cause a zero or underflow result, then a subsequent
     210  // invocation of rap or phi will lead to a non-sensical result.
     211  // So, here, we preemptively ensure that rapidity and phi
     212  // are correctly cached
     213  _ensure_valid_rap_phi();
    200214  _px *= coeff;
    201215  _py *= coeff;
     
    261275
    262276//----------------------------------------------------------------------
    263 /// transform this jet (given in lab) into a jet in the rest
    264 /// frame of prest
     277/// transform this jet (given in the rest frame of prest) into a jet
     278/// in the lab frame
    265279//
    266280// NB: code adapted from that in herwig f77 (checked how it worked
     
    288302
    289303//----------------------------------------------------------------------
    290 /// transform this jet (given in the rest frame of prest) into a jet
    291 /// in the lab frame;
     304/// transform this jet (given in lab) into a jet in the rest
     305/// frame of prest 
    292306//
    293307// NB: code adapted from that in herwig f77 (checked how it worked
     
    587601// an Error is thrown if this PseudoJet has no currently valid
    588602// associated ClusterSequence
    589 std::vector<PseudoJet> PseudoJet::exclusive_subjets (const double & dcut) const {
     603std::vector<PseudoJet> PseudoJet::exclusive_subjets (const double dcut) const {
    590604  return validated_structure_ptr()->exclusive_subjets(*this, dcut);
    591605}
     
    598612// an Error is thrown if this PseudoJet has no currently valid
    599613// associated ClusterSequence
    600 int PseudoJet::n_exclusive_subjets(const double & dcut) const {
     614int PseudoJet::n_exclusive_subjets(const double dcut) const {
    601615  return validated_structure_ptr()->n_exclusive_subjets(*this, dcut);
    602616}
  • external/fastjet/PseudoJet.hh

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id: PseudoJet.hh 3111 2013-05-04 08:17:27Z salam $
     1//FJSTARTHEADER
     2// $Id: PseudoJet.hh 3566 2014-08-11 15:36:34Z salam $
    33//
    4 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     4// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931
     
    571573  /// structure type
    572574  ///
    573   /// If there is no sructure associated, an Error is thrown.
     575  /// If there is no structure associated, an Error is thrown.
    574576  /// If the type is not met, a std::bad_cast error is thrown.
    575577  template<typename StructureType>
     
    664666  /// an Error is thrown if this PseudoJet has no currently valid
    665667  /// associated ClusterSequence
    666   std::vector<PseudoJet> exclusive_subjets (const double & dcut) const;
     668  std::vector<PseudoJet> exclusive_subjets (const double dcut) const;
    667669
    668670  /// return the size of exclusive_subjets(...); still n ln n with same
     
    672674  /// an Error is thrown if this PseudoJet has no currently valid
    673675  /// associated ClusterSequence
    674   int n_exclusive_subjets(const double & dcut) const;
     676  int n_exclusive_subjets(const double dcut) const;
    675677
    676678  /// return the list of subjets obtained by unclustering the supplied
     
    694696  std::vector<PseudoJet> exclusive_subjets_up_to (int nsub) const;
    695697
    696   /// return the dij that was present in the merging nsub+1 -> nsub
     698  /// Returns the dij that was present in the merging nsub+1 -> nsub
    697699  /// subjets inside this jet.
     700  ///
     701  /// Returns 0 if there were nsub or fewer constituents in the jet.
    698702  ///
    699703  /// an Error is thrown if this PseudoJet has no currently valid
     
    701705  double exclusive_subdmerge(int nsub) const;
    702706
    703   /// return the maximum dij that occurred in the whole event at the
     707  /// Returns the maximum dij that occurred in the whole event at the
    704708  /// stage that the nsub+1 -> nsub merge of subjets occurred inside
    705709  /// this jet.
     710  ///
     711  /// Returns 0 if there were nsub or fewer constituents in the jet.
    706712  ///
    707713  /// an Error is thrown if this PseudoJet has no currently valid
     
    802808  /// set cached rapidity and phi values
    803809  void _set_rap_phi() const;
     810
     811  // needed for operator* to have access to _ensure_valid_rap_phi()
     812  friend PseudoJet operator*(double, const PseudoJet &);
    804813};
    805814
     
    825834/// momentum components are equal to val (=0.0)
    826835bool operator==(const PseudoJet & jet, const double val);
     836inline bool operator==(const double val, const PseudoJet & jet) {return jet == val;}
    827837
    828838/// Can only be used with val=0 and tests whether at least one of the
    829839/// four momentum components is different from val (=0.0)
    830 inline bool operator!=(const PseudoJet & a, const double & val) {return !(a==val);}
     840inline bool operator!=(const PseudoJet & a, const double val)  {return !(a==val);}
     841inline bool operator!=( const double val, const PseudoJet & a) {return !(a==val);}
    831842
    832843inline double dot_product(const PseudoJet & a, const PseudoJet & b) {
     
    881892    _ref_values = reference_values;
    882893  };
    883   inline int operator() (const int & i1, const int & i2) const {
     894  inline int operator() (const int i1, const int i2) const {
    884895    return  (*_ref_values)[i1] < (*_ref_values)[i2];
    885896  };
  • external/fastjet/PseudoJetStructureBase.cc

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id$
    3 //
    4 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     1//FJSTARTHEADER
     2// $Id: PseudoJetStructureBase.cc 3433 2014-07-23 08:17:03Z salam $
     3//
     4// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931
  • external/fastjet/PseudoJetStructureBase.hh

    r5b5a56b r35cdc46  
    22#define __FASTJET_PSEUDOJET_STRUCTURE_BASE_HH__
    33
    4 //STARTHEADER
    5 // $Id: PseudoJetStructureBase.hh 3071 2013-04-01 12:52:46Z cacciari $
    6 //
    7 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     4//FJSTARTHEADER
     5// $Id: PseudoJetStructureBase.hh 3433 2014-07-23 08:17:03Z salam $
     6//
     7// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    88//
    99//----------------------------------------------------------------------
     
    1616//
    1717//  The algorithms that underlie FastJet have required considerable
    18 //  development and are described in hep-ph/0512210. If you use
     18//  development. They are described in the original FastJet paper,
     19//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1920//  FastJet as part of work towards a scientific publication, please
    20 //  include a citation to the FastJet paper.
     21//  quote the version you use and include a citation to the manual and
     22//  optionally also to hep-ph/0512210.
    2123//
    2224//  FastJet is distributed in the hope that it will be useful,
     
    2830//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2931//----------------------------------------------------------------------
    30 //ENDHEADER
     32//FJENDHEADER
    3133
    3234
     
    156158  ///
    157159  /// By default, throws an Error
     160  ///
     161  /// Note: in a future major release of FastJet (4 or higher),
     162  /// "const double & dcut" may be replaced with "const double dcut",
     163  /// requiring a modification of derived classes that overload
     164  /// this function.
    158165  virtual std::vector<PseudoJet> exclusive_subjets(const PseudoJet &reference, const double & dcut) const;
    159166
     
    163170  ///
    164171  /// By default, throws an Error
     172  ///
     173  /// Note: in a future major release of FastJet (4 or higher),
     174  /// "const double & dcut" may be replaced with "const double dcut",
     175  /// requiring a modification of derived classes that overload
     176  /// this function.
    165177  virtual int n_exclusive_subjets(const PseudoJet &reference, const double & dcut) const;
    166178
  • external/fastjet/RangeDefinition.cc

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id$
     1//FJSTARTHEADER
     2// $Id: RangeDefinition.cc 3433 2014-07-23 08:17:03Z salam $
    33//
    4 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     4// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931#include "fastjet/RangeDefinition.hh"
  • external/fastjet/RangeDefinition.hh

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id: RangeDefinition.hh 2577 2011-09-13 15:11:38Z salam $
     1//FJSTARTHEADER
     2// $Id: RangeDefinition.hh 3433 2014-07-23 08:17:03Z salam $
    33//
    4 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     4// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931#ifndef __FASTJET_RANGEDEFINITION_HH__
  • external/fastjet/Selector.cc

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id$
     1//FJSTARTHEADER
     2// $Id: Selector.cc 3504 2014-08-01 06:07:54Z soyez $
    33//
    4 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     4// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931
     
    9597}
    9698
     99//----------------------------------------------------------------------
     100// sum the momenta of the jets that pass the cuts
     101PseudoJet Selector::sum(const std::vector<PseudoJet> & jets) const {
     102  PseudoJet this_sum(0,0,0,0);
     103  const SelectorWorker * worker_local = validated_worker();
     104 
     105  // separate strategies according to whether the worker applies jet by jet
     106  if (worker_local->applies_jet_by_jet()) {
     107    for (unsigned i = 0; i < jets.size(); i++) {
     108      if (worker_local->pass(jets[i])) this_sum += jets[i];
     109    }
     110  } else {
     111    std::vector<const PseudoJet *> jetptrs(jets.size());
     112    for (unsigned i = 0; i < jets.size(); i++) {
     113      jetptrs[i] = & jets[i];
     114    }
     115    worker_local->terminator(jetptrs);
     116    for (unsigned i = 0; i < jetptrs.size(); i++) {
     117      if (jetptrs[i]) this_sum += jets[i];
     118    }
     119  }
     120
     121  return this_sum;
     122}
     123
     124//----------------------------------------------------------------------
     125// sum the (scalar) pt of the jets that pass the cuts
     126double Selector::scalar_pt_sum(const std::vector<PseudoJet> & jets) const {
     127  double this_sum = 0.0;
     128  const SelectorWorker * worker_local = validated_worker();
     129 
     130  // separate strategies according to whether the worker applies jet by jet
     131  if (worker_local->applies_jet_by_jet()) {
     132    for (unsigned i = 0; i < jets.size(); i++) {
     133      if (worker_local->pass(jets[i])) this_sum += jets[i].pt();
     134    }
     135  } else {
     136    std::vector<const PseudoJet *> jetptrs(jets.size());
     137    for (unsigned i = 0; i < jets.size(); i++) {
     138      jetptrs[i] = & jets[i];
     139    }
     140    worker_local->terminator(jetptrs);
     141    for (unsigned i = 0; i < jetptrs.size(); i++) {
     142      if (jetptrs[i]) this_sum += jets[i].pt();
     143    }
     144  }
     145
     146  return this_sum;
     147}
     148
    97149
    98150//----------------------------------------------------------------------
     
    10551107class SW_Circle : public SW_WithReference {
    10561108public:
    1057   SW_Circle(const double &radius) : _radius2(radius*radius) {}
     1109  SW_Circle(const double radius) : _radius2(radius*radius) {}
    10581110
    10591111  /// return a copy of the current object
     
    11001152
    11011153// select on objets within a distance 'radius' of a variable location
    1102 Selector SelectorCircle(const double & radius) {
     1154Selector SelectorCircle(const double radius) {
    11031155  return Selector(new SW_Circle(radius));
    11041156}
     
    11101162class SW_Doughnut : public SW_WithReference {
    11111163public:
    1112   SW_Doughnut(const double &radius_in, const double &radius_out)
     1164  SW_Doughnut(const double radius_in, const double radius_out)
    11131165    : _radius_in2(radius_in*radius_in), _radius_out2(radius_out*radius_out) {}
    11141166
     
    11591211
    11601212// select on objets with distance from the centre is between 'radius_in' and 'radius_out'
    1161 Selector SelectorDoughnut(const double & radius_in, const double & radius_out) {
     1213Selector SelectorDoughnut(const double radius_in, const double radius_out) {
    11621214  return Selector(new SW_Doughnut(radius_in, radius_out));
    11631215}
     
    11681220class SW_Strip : public SW_WithReference {
    11691221public:
    1170   SW_Strip(const double &delta) : _delta(delta) {}
     1222  SW_Strip(const double delta) : _delta(delta) {}
    11711223
    11721224  /// return a copy of the current object
     
    12131265
    12141266// select on objets within a distance 'radius' of a variable location
    1215 Selector SelectorStrip(const double & half_width) {
     1267Selector SelectorStrip(const double half_width) {
    12161268  return Selector(new SW_Strip(half_width));
    12171269}
     
    12241276class SW_Rectangle : public SW_WithReference {
    12251277public:
    1226   SW_Rectangle(const double &delta_rap, const double &delta_phi)
     1278  SW_Rectangle(const double delta_rap, const double delta_phi)
    12271279    : _delta_rap(delta_rap),  _delta_phi(delta_phi) {}
    12281280
     
    12701322
    12711323// select on objets within a distance 'radius' of a variable location
    1272 Selector SelectorRectangle(const double & half_rap_width, const double & half_phi_width) {
     1324Selector SelectorRectangle(const double half_rap_width, const double half_phi_width) {
    12731325  return Selector(new SW_Rectangle(half_rap_width, half_phi_width));
    12741326}
  • external/fastjet/Selector.hh

    r5b5a56b r35cdc46  
    22#define __FASTJET_SELECTOR_HH__
    33
    4 //STARTHEADER
    5 // $Id: Selector.hh 3203 2013-09-15 07:49:50Z salam $
    6 //
    7 // Copyright (c) 2009-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     4//FJSTARTHEADER
     5// $Id: Selector.hh 3504 2014-08-01 06:07:54Z soyez $
     6//
     7// Copyright (c) 2009-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    88//
    99//----------------------------------------------------------------------
     
    1616//
    1717//  The algorithms that underlie FastJet have required considerable
    18 //  development and are described in hep-ph/0512210. If you use
     18//  development. They are described in the original FastJet paper,
     19//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1920//  FastJet as part of work towards a scientific publication, please
    20 //  include a citation to the FastJet paper.
     21//  quote the version you use and include a citation to the manual and
     22//  optionally also to hep-ph/0512210.
    2123//
    2224//  FastJet is distributed in the hope that it will be useful,
     
    2830//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2931//----------------------------------------------------------------------
    30 //ENDHEADER
     32//FJENDHEADER
    3133
    3234#include "fastjet/PseudoJet.hh"
     
    6769  //----------------------------------------------------------
    6870
    69   /// returns true if a given object passes the selection criterion.
    70   /// This has to be overloaded by derived workers
     71  /// returns true if a given object passes the selection criterion,
     72  /// and is the main function that needs to be overloaded by derived
     73  /// workers.
     74  ///
     75  /// NB: this function is used only if applies_jet_by_jet() returns
     76  /// true. If it does not, then derived classes are expected to
     77  /// (re)implement the terminator function()
    7178  virtual bool pass(const PseudoJet & jet) const = 0;
    7279
    7380  /// For each jet that does not pass the cuts, this routine sets the
    74   /// pointer to 0. 
    75   ///
    76   /// It does not assume that the PseudoJet* passed as argumetn are not NULL
     81  /// pointer to 0.
     82  ///
     83  /// It does not assume that the PseudoJet* passed as argument are not NULL
    7784  virtual void terminator(std::vector<const PseudoJet *> & jets) const {
    7885    for (unsigned i = 0; i < jets.size(); i++) {
     
    133140    throw Error("this selector has no computable area");
    134141  }
     142
    135143};
    136144
     
    151159  Selector(SelectorWorker * worker_in) {_worker.reset(worker_in);}
    152160
    153 
    154161#ifndef __FJCORE__
    155162  /// ctor from a RangeDefinition
     
    186193  /// passes and then evaluating the size of the vector
    187194  unsigned int count(const std::vector<PseudoJet> & jets) const;
     195
     196  /// Return the 4-vector sum of the objects that pass the selection.
     197  ///
     198  /// This will often be more efficient that getting the vector of objects that
     199  /// passes and then evaluating the size of the vector
     200  PseudoJet sum(const std::vector<PseudoJet> & jets) const;
     201
     202  /// Return the scalar pt sum of the objects that pass the selection.
     203  ///
     204  /// This will often be more efficient that getting the vector of objects that
     205  /// passes and then evaluating the size of the vector
     206  double scalar_pt_sum(const std::vector<PseudoJet> & jets) const;
    188207
    189208  /// sift the input jets into two vectors -- those that pass the selector
     
    433452/// select objets within a distance 'radius' from the location of the
    434453/// reference jet, set by Selector::set_reference(...)
    435 Selector SelectorCircle(const double & radius);
     454Selector SelectorCircle(const double radius);
    436455
    437456/// select objets with distance from the reference jet is between 'radius_in'
    438457/// and 'radius_out'; the reference jet is set by Selector::set_reference(...)
    439 Selector SelectorDoughnut(const double & radius_in, const double & radius_out);
     458Selector SelectorDoughnut(const double radius_in, const double radius_out);
    440459
    441460/// select objets within a rapidity distance 'half_width' from the
    442461/// location of the reference jet, set by Selector::set_reference(...)
    443 Selector SelectorStrip(const double & half_width);
     462Selector SelectorStrip(const double half_width);
    444463
    445464/// select objets within rapidity distance 'half_rap_width' from the
    446465/// reference jet and azimuthal-angle distance within 'half_phi_width'; the
    447466/// reference jet is set by Selector::set_reference(...)
    448 Selector SelectorRectangle(const double & half_rap_width, const double & half_phi_width);
     467Selector SelectorRectangle(const double half_rap_width, const double half_phi_width);
    449468
    450469
  • external/fastjet/SharedPtr.hh

    r5b5a56b r35cdc46  
    22#define __FASTJET_SHARED_PTR_HH__
    33
    4 //STARTHEADER
    5 // $Id: SharedPtr.hh 3129 2013-06-05 08:48:36Z salam $
    6 //
    7 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     4//FJSTARTHEADER
     5// $Id: SharedPtr.hh 3433 2014-07-23 08:17:03Z salam $
     6//
     7// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    88//
    99//----------------------------------------------------------------------
     
    1616//
    1717//  The algorithms that underlie FastJet have required considerable
    18 //  development and are described in hep-ph/0512210. If you use
     18//  development. They are described in the original FastJet paper,
     19//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1920//  FastJet as part of work towards a scientific publication, please
    20 //  include a citation to the FastJet paper.
     21//  quote the version you use and include a citation to the manual and
     22//  optionally also to hep-ph/0512210.
    2123//
    2224//  FastJet is distributed in the hope that it will be useful,
     
    2830//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2931//----------------------------------------------------------------------
    30 //ENDHEADER
     32//FJENDHEADER
    3133
    3234#include "fastjet/internal/base.hh"
  • external/fastjet/VERSION

    r5b5a56b r35cdc46  
    1 3.0.6
     13.1.0-beta.1
  • external/fastjet/Voronoi.cc

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id$
     1//FJSTARTHEADER
     2// $Id: Voronoi.cc 3433 2014-07-23 08:17:03Z salam $
    33//
    4 // Copyright (c) 1994 by AT&T Bell Laboratories (see below)
    5 //
     4// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    65//
    76//----------------------------------------------------------------------
    8 // This file is included as part of FastJet but was mostly written by
    9 // S. Fortune in C, put into C++ with memory management by S
    10 // O'Sullivan, and with further interface and memory management
    11 // modifications by Gregory Soyez.
     7// This file is part of FastJet.
    128//
    13 // Permission to use, copy, modify, and distribute this software for
    14 // any purpose without fee is hereby granted, provided that this
    15 // entire notice is included in all copies of any software which is or
    16 // includes a copy or modification of this software and in all copies
    17 // of the supporting documentation for such software. THIS SOFTWARE IS
    18 // BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED WARRANTY.
    19 // IN PARTICULAR, NEITHER THE AUTHORS NOR AT&T MAKE ANY REPRESENTATION
    20 // OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY OF THIS
    21 // SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
     9//  FastJet is free software; you can redistribute it and/or modify
     10//  it under the terms of the GNU General Public License as published by
     11//  the Free Software Foundation; either version 2 of the License, or
     12//  (at your option) any later version.
    2213//
     14//  The algorithms that underlie FastJet have required considerable
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
     17//  FastJet as part of work towards a scientific publication, please
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
     20//
     21//  FastJet is distributed in the hope that it will be useful,
     22//  but WITHOUT ANY WARRANTY; without even the implied warranty of
     23//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     24//  GNU General Public License for more details.
     25//
     26//  You should have received a copy of the GNU General Public License
     27//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2328//----------------------------------------------------------------------
    24 //ENDHEADER
     29//FJENDHEADER
    2530
    2631
  • external/fastjet/WrappedStructure.hh

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id: WrappedStructure.hh 2577 2011-09-13 15:11:38Z salam $
    3 //
    4 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     1//FJSTARTHEADER
     2// $Id: WrappedStructure.hh 3433 2014-07-23 08:17:03Z salam $
     3//
     4// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931
  • external/fastjet/config_auto.h

    r5b5a56b r35cdc46  
    147147/* Define to the full name and version of this package. */
    148148#ifndef FASTJET_PACKAGE_STRING
    149 #define FASTJET_PACKAGE_STRING  "FastJet 3.0.6"
     149#define FASTJET_PACKAGE_STRING  "FastJet 3.1.0-beta.1"
    150150#endif
    151151
     
    157157/* Define to the version of this package. */
    158158#ifndef FASTJET_PACKAGE_VERSION
    159 #define FASTJET_PACKAGE_VERSION  "3.0.6"
     159#define FASTJET_PACKAGE_VERSION  "3.1.0-beta.1"
    160160#endif
    161161
     
    167167/* Version number of package */
    168168#ifndef FASTJET_VERSION
    169 #define FASTJET_VERSION  "3.0.6"
     169#define FASTJET_VERSION  "3.1.0-beta.1"
     170#endif
     171
     172/* Major version of this package */
     173#ifndef FASTJET_VERSION_MAJOR
     174#define FASTJET_VERSION_MAJOR  3
     175#endif
     176
     177/* Minor version of this package */
     178#ifndef FASTJET_VERSION_MINOR
     179#define FASTJET_VERSION_MINOR  1
     180#endif
     181
     182/* Version of the package under the form XYYZZ (instead of X.Y.Z) */
     183#ifndef FASTJET_VERSION_NUMBER
     184#define FASTJET_VERSION_NUMBER  30103
     185#endif
     186
     187/* Patch version of this package */
     188#ifndef FASTJET_VERSION_PATCHLEVEL
     189#define FASTJET_VERSION_PATCHLEVEL  3
     190#endif
     191
     192/* Pre-release version of this package */
     193#ifndef FASTJET_VERSION_PRERELEASE
     194#define FASTJET_VERSION_PRERELEASE  ".1.0-beta.1"
    170195#endif
    171196 
  • external/fastjet/config_raw.h

    r5b5a56b r35cdc46  
    8888
    8989/* Define to the full name and version of this package. */
    90 #define PACKAGE_STRING "FastJet 3.0.6"
     90#define PACKAGE_STRING "FastJet 3.1.0-beta.1"
    9191
    9292/* Define to the one symbol short name of this package. */
     
    9494
    9595/* Define to the version of this package. */
    96 #define PACKAGE_VERSION "3.0.6"
     96#define PACKAGE_VERSION "3.1.0-beta.1"
    9797
    9898/* Define to 1 if you have the ANSI C header files. */
     
    100100
    101101/* Version number of package */
    102 #define VERSION "3.0.6"
     102#define VERSION "3.1.0-beta.1"
     103
     104/* Major version of this package */
     105#define VERSION_MAJOR 3
     106
     107/* Minor version of this package */
     108#define VERSION_MINOR 1
     109
     110/* Version of the package under the form XYYZZ (instead of X.Y.Z) */
     111#define VERSION_NUMBER 30103
     112
     113/* Patch version of this package */
     114#define VERSION_PATCHLEVEL 3
     115
     116/* Pre-release version of this package */
     117#define VERSION_PRERELEASE ".1.0-beta.1"
  • external/fastjet/config_win.h

    r5b5a56b r35cdc46  
    1 #define FASTJET_PACKAGE_STRING  "FastJet 3.0.6"
    2 #define FASTJET_PACKAGE_VERSION  "3.0.6"
     1#define FASTJET_PACKAGE_STRING  "FastJet 3.1.0-beta.1"
     2#define FASTJET_PACKAGE_VERSION  "3.1.0-beta.1"
     3#define FASTJET_VERSION  "3.1.0-beta.1"
     4#define FASTJET_VERSION_MAJOR       3
     5#define FASTJET_VERSION_MINOR       1
     6#define FASTJET_VERSION_PATCHLEVEL  3
     7#define FASTJET_VERSION_PRERELEASE  ".1.0-beta.1"
     8#define FASTJET_VERSION_NUMBER      30103
    39
    410/* The ATLASCone plugin is disabled by default*/
  • external/fastjet/contribs/Nsubjettiness/AUTHORS

    r5b5a56b r35cdc46  
    1818   JHEP 1202:093 (2012), arXiv:1108.2701.
    1919
     20New in v2.0 is the winner-take-all axis, described in:
     21
     22   Jet Shapes with the Broadening Axis.
     23   Andrew J. Larkoski, Duff Neill, and Jesse Thaler.
     24   JHEP 1404:017 (2014), arXiv:1401.2158.
     25
     26as well as in unpublished work by Gavin Salam.
     27
    2028----------------------------------------------------------------------
  • external/fastjet/contribs/Nsubjettiness/AxesFinder.cc

    r5b5a56b r35cdc46  
    55//  Jesse Thaler, Ken Van Tilburg, Christopher K. Vermilion, and TJ Wilkason
    66//
     7//  $Id: AxesFinder.cc 670 2014-06-06 01:24:42Z jthaler $
    78//----------------------------------------------------------------------
    89// This file is part of FastJet contrib.
     
    3738template <int N>
    3839std::vector<LightLikeAxis> AxesFinderFromOnePassMinimization::UpdateAxesFast(const std::vector <LightLikeAxis> & old_axes,
    39                                   const std::vector <fastjet::PseudoJet> & inputJets) {
     40                                  const std::vector <fastjet::PseudoJet> & inputJets) const {
    4041   assert(old_axes.size() == N);
    4142   
     
    4546   for (int n = 0; n < N; ++n) {
    4647      new_axes[n].reset(0.0,0.0,0.0,0.0);
    47 #ifdef FASTJET2
    48       new_jets[n].reset(0.0,0.0,0.0,0.0);
    49 #else
    50       // use cheaper reset if available
    5148      new_jets[n].reset_momentum(0.0,0.0,0.0,0.0);
    52 #endif
    5349   }
    5450
     
    135131// (This is just a wrapper for the templated version above.)
    136132std::vector<LightLikeAxis> AxesFinderFromOnePassMinimization::UpdateAxes(const std::vector <LightLikeAxis> & old_axes,
    137                                       const std::vector <fastjet::PseudoJet> & inputJets) {
     133                                      const std::vector <fastjet::PseudoJet> & inputJets) const {
    138134   int N = old_axes.size();
    139135   switch (N) {
     
    166162// uses minimization of N-jettiness to continually update axes until convergence.
    167163// The function returns the axes found at the (local) minimum
    168 std::vector<fastjet::PseudoJet> AxesFinderFromOnePassMinimization::getBetterAxes(int n_jets, const std::vector <fastjet::PseudoJet> & inputJets, const std::vector<fastjet::PseudoJet>& seedAxes) {
     164std::vector<fastjet::PseudoJet> AxesFinderFromOnePassMinimization::getAxes(int n_jets, const std::vector <fastjet::PseudoJet> & inputJets, const std::vector<fastjet::PseudoJet>& seedAxes) const {
    169165         
    170166   // convert from PseudoJets to LightLikeAxes
     
    211207}
    212208
    213 PseudoJet AxesFinderFromKmeansMinimization::jiggle(const PseudoJet& axis) {
     209PseudoJet AxesFinderFromKmeansMinimization::jiggle(const PseudoJet& axis) const {
    214210   double phi_noise = ((double)rand()/(double)RAND_MAX) * _noise_range * 2.0 - _noise_range;
    215211   double rap_noise = ((double)rand()/(double)RAND_MAX) * _noise_range * 2.0 - _noise_range;
     
    226222   
    227223// Repeatedly calls the one pass finder to try to find global minimum
    228 std::vector<fastjet::PseudoJet> AxesFinderFromKmeansMinimization::getBetterAxes(int n_jets, const std::vector <fastjet::PseudoJet> & inputJets, const std::vector<fastjet::PseudoJet>& seedAxes) {
     224std::vector<fastjet::PseudoJet> AxesFinderFromKmeansMinimization::getAxes(int n_jets, const std::vector <fastjet::PseudoJet> & inputJets, const std::vector<fastjet::PseudoJet>& seedAxes) const {
    229225   
    230226   // first iteration
     
    256252// It continually updates until it reaches convergence or it reaches the maximum number of attempts.
    257253// This is essentially the same as a stable cone finder.
    258 std::vector<fastjet::PseudoJet> AxesFinderFromGeometricMinimization::getBetterAxes(int n_jets, const std::vector <fastjet::PseudoJet> & particles, const std::vector<fastjet::PseudoJet>& currentAxes) {
     254std::vector<fastjet::PseudoJet> AxesFinderFromGeometricMinimization::getAxes(int /*n_jets*/, const std::vector <fastjet::PseudoJet> & particles, const std::vector<fastjet::PseudoJet>& currentAxes) const {
    259255
    260256   std::vector<fastjet::PseudoJet> seedAxes = currentAxes;
    261    double seedTau = _function->tau(particles, seedAxes);
     257   double seedTau = _function.tau(particles, seedAxes);
    262258   
    263259   for (int i = 0; i < _nAttempts; i++) {
     
    270266         // start from unclustered beam measure
    271267         int minJ = -1;
    272          double minDist = _function->beam_distance_squared(particles[i]);
     268         double minDist = _function.beam_distance_squared(particles[i]);
    273269         
    274270         // which axis am I closest to?
    275271         for (unsigned int j = 0; j < seedAxes.size(); j++) {
    276             double tempDist = _function->jet_distance_squared(particles[i],seedAxes[j]);
     272            double tempDist = _function.jet_distance_squared(particles[i],seedAxes[j]);
    277273            if (tempDist < minDist) {
    278274               minDist = tempDist;
     
    287283      // calculate tau on new axes
    288284      seedAxes = newAxes;
    289       double tempTau = _function->tau(particles, newAxes);
     285      double tempTau = _function.tau(particles, newAxes);
    290286     
    291287      // close enough to stop?
  • external/fastjet/contribs/Nsubjettiness/AxesFinder.hh

    r5b5a56b r35cdc46  
    55//  Jesse Thaler, Ken Van Tilburg, Christopher K. Vermilion, and TJ Wilkason
    66//
     7//  $Id: AxesFinder.hh 678 2014-06-12 20:43:03Z jthaler $
    78//----------------------------------------------------------------------
    89// This file is part of FastJet contrib.
     
    5354class AxesFinder {
    5455   
    55 protected:
    56    AxesFinder* _startingFinder; // storing a possible starting finder if needed
    57    std::vector<fastjet::PseudoJet> _seedAxes;
    58    
    59    AxesFinder(AxesFinder* startingFinder = NULL) : _startingFinder(startingFinder) {}
    60    
    61 public:
    62    virtual ~AxesFinder(){
    63       if (_startingFinder) delete _startingFinder;  //TODO: Convert to smart pointers to avoid this.
    64    }
    65    
    66    // Allow setting of seedAxes from a starting finder
    67    std::vector<fastjet::PseudoJet> getAxes(int n_jets, const std::vector<fastjet::PseudoJet> & inputs, const std::vector<fastjet::PseudoJet>& currentAxes) {
    68       if (_startingFinder) {
    69          _seedAxes = _startingFinder->getAxes(n_jets,inputs,currentAxes);
    70          return getBetterAxes(n_jets,inputs,_seedAxes);
    71       } else {
    72          _seedAxes = getBetterAxes(n_jets,inputs,currentAxes);
    73          return _seedAxes;
    74       }
    75    }
    76    
    77    // say what the current seed axes are
    78    std::vector<fastjet::PseudoJet> seedAxes() const {
    79       return _seedAxes;
    80    }
    81    
    82    // This function should be overloaded, and updates the seedAxes
    83    virtual std::vector<fastjet::PseudoJet> getBetterAxes(int n_jets, const std::vector<fastjet::PseudoJet> & inputs, const std::vector<fastjet::PseudoJet>& seedAxes) = 0;
    84    
    85 };
    86 
     56public:
     57   
     58   // This function should be overloaded, and updates the seedAxes to return new axes
     59   virtual std::vector<fastjet::PseudoJet> getAxes(int n_jets,
     60                                                   const std::vector<fastjet::PseudoJet>& inputs,
     61                                                   const std::vector<fastjet::PseudoJet>& seedAxes) const = 0;
     62   // convenient shorthand for squaring
     63   static inline double sq(double x) {return x*x;}
     64
     65   //virtual destructor
     66   virtual ~AxesFinder(){}
     67   
     68};
     69
     70   
    8771//------------------------------------------------------------------------
    8872/// \class AxesFinderFromExclusiveJetDefinition
     
    9074// with different jet algorithms.
    9175class AxesFinderFromExclusiveJetDefinition : public AxesFinder {
    92 
    93    private:
    94       fastjet::JetDefinition _def;
    95    
    96    public:
    97       AxesFinderFromExclusiveJetDefinition(fastjet::JetDefinition def) : _def(def) {}
    98      
    99       virtual std::vector<fastjet::PseudoJet> getBetterAxes(int n_jets, const std::vector <fastjet::PseudoJet> & inputs, const std::vector<fastjet::PseudoJet>& currentAxes) {
    100          fastjet::ClusterSequence jet_clust_seq(inputs, _def);
    101          return jet_clust_seq.exclusive_jets(n_jets);
    102       }
     76   
     77public:
     78   AxesFinderFromExclusiveJetDefinition(fastjet::JetDefinition def)
     79   : _def(def) {}
     80   
     81   virtual std::vector<fastjet::PseudoJet> getAxes(int n_jets,
     82                                                   const std::vector <fastjet::PseudoJet> & inputs,
     83                                                   const std::vector<fastjet::PseudoJet>& /*seedAxes*/) const {
     84      fastjet::ClusterSequence jet_clust_seq(inputs, _def);
     85      return jet_clust_seq.exclusive_jets(n_jets);
     86   }
     87   
     88private:
     89   fastjet::JetDefinition _def;
     90
    10391};
    10492
     
    10896// winner take all recombination scheme.
    10997class AxesFinderFromWTA_KT : public AxesFinderFromExclusiveJetDefinition {
    110    private:
    111       const WinnerTakeAllRecombiner *recomb;
    112    public:
    113       AxesFinderFromWTA_KT() : AxesFinderFromExclusiveJetDefinition(
    114          fastjet::JetDefinition(fastjet::kt_algorithm,
    115          fastjet::JetDefinition::max_allowable_R, //maximum jet radius constant
    116          recomb = new WinnerTakeAllRecombiner(),
    117          fastjet::Best)) {}
    118       ~AxesFinderFromWTA_KT() {delete recomb;}
    119    };
     98
     99public:
     100   AxesFinderFromWTA_KT()
     101   : AxesFinderFromExclusiveJetDefinition(
     102      fastjet::JetDefinition(fastjet::kt_algorithm,
     103      fastjet::JetDefinition::max_allowable_R, //maximum jet radius constant
     104      &_recomb,
     105      fastjet::Best)) {}
     106   
     107private:
     108   const WinnerTakeAllRecombiner _recomb;
     109
     110};
    120111   
    121112//------------------------------------------------------------------------
     
    124115// winner take all recombination scheme.
    125116class AxesFinderFromWTA_CA : public AxesFinderFromExclusiveJetDefinition {
    126    private:
    127       const WinnerTakeAllRecombiner *recomb;
    128    public:
    129       AxesFinderFromWTA_CA() : AxesFinderFromExclusiveJetDefinition(
    130          fastjet::JetDefinition(fastjet::cambridge_algorithm,
    131          fastjet::JetDefinition::max_allowable_R, //maximum jet radius constant
    132          recomb = new WinnerTakeAllRecombiner(),
    133          fastjet::Best)) {}
    134       ~AxesFinderFromWTA_CA() {delete recomb;}
    135 };
    136 
    137 //  The following classes are for testing, and are commented out for initial release
    138 //
    139 ////------------------------------------------------------------------------
    140 ///// \class AxesFinderFromWTA2_KT
    141 //// This class finds axes by finding the exlusive jets after clustering according to a kT algorithm and a
    142 //// winner take all recombination scheme with alpha = 2.
    143 //class AxesFinderFromWTA2_KT : public AxesFinderFromExclusiveJetDefinition {
    144 //   private:
    145 //      const WinnerTakeAllRecombiner *recomb;
    146 //   public:
    147 //      AxesFinderFromWTA2_KT() : AxesFinderFromExclusiveJetDefinition(
    148 //         fastjet::JetDefinition(fastjet::kt_algorithm,
    149 //         fastjet::JetDefinition::max_allowable_R, //maximum jet radius constant
    150 //         recomb = new WinnerTakeAllRecombiner(2), // uses alpha = 2 here
    151 //         fastjet::Best)) {}
    152 //      ~AxesFinderFromWTA2_KT() {delete recomb;}
    153 //   };
    154 //   
    155 ////------------------------------------------------------------------------
    156 ///// \class AxesFinderFromWTA2_CA
    157 //// This class finds axes by finding the exlusive jets after clustering according to a CA algorithm and a
    158 //// winner take all recombination scheme with alpha = 2.
    159 //class AxesFinderFromWTA2_CA : public AxesFinderFromExclusiveJetDefinition {
    160 //   private:
    161 //      const WinnerTakeAllRecombiner *recomb;
    162 //   public:
    163 //      AxesFinderFromWTA2_CA() : AxesFinderFromExclusiveJetDefinition(
    164 //         fastjet::JetDefinition(fastjet::cambridge_algorithm,
    165 //         fastjet::JetDefinition::max_allowable_R, //maximum jet radius constant
    166 //         recomb = new WinnerTakeAllRecombiner(2), //uses alpha = 2 here
    167 //         fastjet::Best)) {}
    168 //      ~AxesFinderFromWTA2_CA() {delete recomb;}
    169 //};
     117public:
     118   AxesFinderFromWTA_CA()
     119   : AxesFinderFromExclusiveJetDefinition(
     120      fastjet::JetDefinition(fastjet::cambridge_algorithm,
     121      fastjet::JetDefinition::max_allowable_R, //maximum jet radius constant
     122      &_recomb,
     123      fastjet::Best)) {}
     124   
     125private:
     126   const WinnerTakeAllRecombiner _recomb;
     127};
     128
    170129
    171130//------------------------------------------------------------------------
     
    174133// E_scheme recombination.
    175134class AxesFinderFromKT : public AxesFinderFromExclusiveJetDefinition {
    176    public:
    177       AxesFinderFromKT() : AxesFinderFromExclusiveJetDefinition(
    178          fastjet::JetDefinition(fastjet::kt_algorithm,
    179          fastjet::JetDefinition::max_allowable_R, //maximum jet radius constant
    180          fastjet::E_scheme,
    181          fastjet::Best)) {}
     135public:
     136   AxesFinderFromKT()
     137   : AxesFinderFromExclusiveJetDefinition(
     138      fastjet::JetDefinition(fastjet::kt_algorithm,
     139      fastjet::JetDefinition::max_allowable_R, //maximum jet radius constant
     140      fastjet::E_scheme,
     141      fastjet::Best)) {}
    182142};
    183143
     
    187147// E_scheme recombination.
    188148class AxesFinderFromCA : public AxesFinderFromExclusiveJetDefinition {
    189    public:
    190       AxesFinderFromCA() : AxesFinderFromExclusiveJetDefinition(
    191          fastjet::JetDefinition(fastjet::cambridge_algorithm,
    192                                 fastjet::JetDefinition::max_allowable_R,  //maximum jet radius constant
    193          fastjet::E_scheme,
    194          fastjet::Best)) {}
     149public:
     150   AxesFinderFromCA()
     151   : AxesFinderFromExclusiveJetDefinition(
     152      fastjet::JetDefinition(fastjet::cambridge_algorithm,
     153                             fastjet::JetDefinition::max_allowable_R,  //maximum jet radius constant
     154      fastjet::E_scheme,
     155      fastjet::Best)) {}
    195156};
    196157
     
    201162// This can be implemented with different jet algorithms.
    202163class AxesFinderFromHardestJetDefinition : public AxesFinder {
    203 
    204    private:
    205       fastjet::JetDefinition _def;
    206    
    207    public:
    208       AxesFinderFromHardestJetDefinition(fastjet::JetDefinition def) : _def(def) {}
    209      
    210       virtual std::vector<fastjet::PseudoJet> getBetterAxes(int n_jets, const std::vector <fastjet::PseudoJet> & inputs, const std::vector<fastjet::PseudoJet>& currentAxes) {
    211          fastjet::ClusterSequence jet_clust_seq(inputs, _def);
    212          std::vector<fastjet::PseudoJet> myJets = sorted_by_pt(jet_clust_seq.inclusive_jets());
    213          myJets.resize(n_jets);  // only keep n hardest
    214          return myJets;
    215       }     
     164public:
     165   AxesFinderFromHardestJetDefinition(fastjet::JetDefinition def)
     166   : _def(def) {}
     167   
     168   virtual std::vector<fastjet::PseudoJet> getAxes(int n_jets,
     169                                                   const std::vector <fastjet::PseudoJet> & inputs,
     170                                                   const std::vector<fastjet::PseudoJet>& /*seedAxes*/) const {
     171      fastjet::ClusterSequence jet_clust_seq(inputs, _def);
     172      std::vector<fastjet::PseudoJet> myJets = sorted_by_pt(jet_clust_seq.inclusive_jets());
     173      myJets.resize(n_jets);  // only keep n hardest
     174      return myJets;
     175   }
     176   
     177private:
     178   fastjet::JetDefinition _def;
    216179};
    217180
     
    221184// to an anti kT algorithm and E_scheme.
    222185class AxesFinderFromAntiKT : public AxesFinderFromHardestJetDefinition {
    223    public:
    224       AxesFinderFromAntiKT(double R0) : AxesFinderFromHardestJetDefinition(fastjet::JetDefinition(fastjet::antikt_algorithm,R0,fastjet::E_scheme,fastjet::Best)) {}
     186public:
     187   AxesFinderFromAntiKT(double R0)
     188   : AxesFinderFromHardestJetDefinition(
     189      fastjet::JetDefinition(fastjet::antikt_algorithm,
     190                             R0,fastjet::E_scheme,fastjet::Best)) {}
    225191};
    226192
     
    231197class AxesFinderFromUserInput : public AxesFinder {
    232198
    233    public:
    234       AxesFinderFromUserInput() {}
    235      
    236       virtual std::vector<fastjet::PseudoJet> getBetterAxes(int n_jets, const std::vector <fastjet::PseudoJet> & inputs, const std::vector<fastjet::PseudoJet>& currentAxes) {
    237          assert(currentAxes.size() == (unsigned int) n_jets);
    238          return currentAxes;
    239       }
     199public:
     200   AxesFinderFromUserInput() {}
     201   
     202   virtual std::vector<fastjet::PseudoJet> getAxes(int n_jets, const std::vector <fastjet::PseudoJet> & /*inputs*/, const std::vector<fastjet::PseudoJet>& currentAxes) const {
     203      assert(currentAxes.size() == (unsigned int) n_jets);
     204      (void)(n_jets);  // adding this line to fix unused-parameter warning
     205      return currentAxes;
     206   }
    240207};
    241208
     
    249216class AxesFinderFromOnePassMinimization : public AxesFinder {
    250217
    251    private:
    252       double _precision;  // Desired precision in axes alignment
    253       int _halt;  // maximum number of steps per iteration
    254      
    255       double _beta;
    256       double _Rcutoff;
    257      
    258       DefaultUnnormalizedMeasure _measureFunction;
    259    
    260    public:
    261 
    262       // From a startingFinder, try to minimize the unnormalized_measure
    263       AxesFinderFromOnePassMinimization(AxesFinder* startingFinder, double beta, double Rcutoff)
    264          : AxesFinder(startingFinder),
    265            _precision(0.0001), //hard coded for now
    266            _halt(1000), //hard coded for now
    267            _beta(beta),
    268            _Rcutoff(Rcutoff),
    269            _measureFunction(beta, Rcutoff)
    270            {}
    271    
    272       virtual std::vector<fastjet::PseudoJet> getBetterAxes(int n_jets, const std::vector <fastjet::PseudoJet> & inputJets, const std::vector<fastjet::PseudoJet>& currentAxes);
    273 
    274       template <int N> std::vector<LightLikeAxis> UpdateAxesFast(const std::vector <LightLikeAxis> & old_axes,
    275                                   const std::vector <fastjet::PseudoJet> & inputJets);
    276    
    277       std::vector<LightLikeAxis> UpdateAxes(const std::vector <LightLikeAxis> & old_axes,
    278                                       const std::vector <fastjet::PseudoJet> & inputJets);
     218public:
     219
     220   // From a startingFinder, try to minimize the unnormalized_measure
     221   AxesFinderFromOnePassMinimization(double beta, double Rcutoff)
     222      : _precision(0.0001), //hard coded for now
     223        _halt(1000), //hard coded for now
     224        _beta(beta),
     225        _Rcutoff(Rcutoff),
     226        _measureFunction(beta, Rcutoff)
     227        {}
     228
     229   virtual std::vector<fastjet::PseudoJet> getAxes(int n_jets,
     230                                                   const std::vector <fastjet::PseudoJet> & inputJets,
     231                                                   const std::vector<fastjet::PseudoJet>& currentAxes) const;
     232   
     233private:
     234   double _precision;  // Desired precision in axes alignment
     235   int _halt;  // maximum number of steps per iteration
     236   
     237   double _beta;
     238   double _Rcutoff;
     239   
     240   DefaultUnnormalizedMeasureFunction _measureFunction;
     241   
     242   template <int N> std::vector<LightLikeAxis> UpdateAxesFast(const std::vector <LightLikeAxis> & old_axes,
     243                                                              const std::vector <fastjet::PseudoJet> & inputJets) const;
     244   
     245   std::vector<LightLikeAxis> UpdateAxes(const std::vector <LightLikeAxis> & old_axes,
     246                                         const std::vector <fastjet::PseudoJet> & inputJets) const;
    279247
    280248};
     
    288256class AxesFinderFromKmeansMinimization : public AxesFinder{
    289257
    290    private:
    291       int _n_iterations;   // Number of iterations to run  (0 for no minimization, 1 for one-pass, >>1 for global minimum)
    292       double _noise_range; // noise range for random initialization
    293    
    294       DefaultUnnormalizedMeasure _measureFunction; //function to test whether minimum is reached
    295    
    296       AxesFinderFromOnePassMinimization _onePassFinder;  //one pass finder for minimization
    297 
    298       PseudoJet jiggle(const PseudoJet& axis);
    299    
    300    public:
    301       AxesFinderFromKmeansMinimization(AxesFinder *startingFinder, double beta, double Rcutoff, int n_iterations) :
    302          AxesFinder(startingFinder),
    303          _n_iterations(n_iterations),
    304          _noise_range(1.0), // hard coded for the time being
    305          _measureFunction(beta, Rcutoff),
    306          _onePassFinder(NULL, beta, Rcutoff)
    307          {}
    308 
    309       virtual std::vector<fastjet::PseudoJet> getBetterAxes(int n_jets, const std::vector <fastjet::PseudoJet> & inputJets, const std::vector<fastjet::PseudoJet>& currentAxes);
    310 
     258public:
     259   AxesFinderFromKmeansMinimization(double beta, double Rcutoff, int n_iterations)
     260   :  _n_iterations(n_iterations),
     261      _noise_range(1.0), // hard coded for the time being
     262      _measureFunction(beta, Rcutoff),
     263      _onePassFinder(beta, Rcutoff)
     264      {}
     265
     266   virtual std::vector<fastjet::PseudoJet> getAxes(int n_jets, const std::vector <fastjet::PseudoJet> & inputJets, const std::vector<fastjet::PseudoJet>& currentAxes) const;
     267   
     268private:
     269   int _n_iterations;   // Number of iterations to run  (0 for no minimization, 1 for one-pass, >>1 for global minimum)
     270   double _noise_range; // noise range for random initialization
     271   
     272   DefaultUnnormalizedMeasureFunction _measureFunction; //function to test whether minimum is reached
     273   
     274   AxesFinderFromOnePassMinimization _onePassFinder;  //one pass finder that is repeatedly called
     275   
     276   PseudoJet jiggle(const PseudoJet& axis) const;
    311277};
    312278
     
    317283class AxesFinderFromGeometricMinimization : public AxesFinder {
    318284
    319    private:
    320       MeasureFunction* _function;
    321       double _Rcutoff;
    322       double _nAttempts;
    323       double _accuracy;
    324 
    325    
    326    public:
    327       AxesFinderFromGeometricMinimization(AxesFinder* startingFinder, double beta, double Rcutoff) : AxesFinder(startingFinder), _Rcutoff(Rcutoff) {
    328          if (beta != 2.0) {
    329             std::cerr << "Geometric minimization is currently only defined for beta = 2.0." << std::endl;
    330             exit(1);
    331          }
    332          
    333          _nAttempts = 100;
    334          _accuracy = 0.000000001;
    335          _function = new GeometricMeasure(beta,_Rcutoff);
     285public:
     286   AxesFinderFromGeometricMinimization(double beta, double Rcutoff)
     287   :  _nAttempts(100),
     288      _accuracy(0.000000001),
     289      _function(beta,Rcutoff)
     290   {
     291      if (beta != 2.0) {
     292         throw Error("Geometric minimization is currently only defined for beta = 2.0.");
    336293      }
    337 
    338       ~AxesFinderFromGeometricMinimization() {
    339          delete _function;
    340       }
    341    
    342       virtual std::vector<fastjet::PseudoJet> getBetterAxes(int n_jets, const std::vector <fastjet::PseudoJet> & particles, const std::vector<fastjet::PseudoJet>& currentAxes);
     294   }
     295
     296   virtual std::vector<fastjet::PseudoJet> getAxes(int n_jets, const std::vector <fastjet::PseudoJet> & particles, const std::vector<fastjet::PseudoJet>& currentAxes) const;
     297
     298private:
     299   double _nAttempts;
     300   double _accuracy;
     301   GeometricMeasureFunction _function;
     302
     303
    343304};
    344305
     
    348309// in order to better facilitate calculations.
    349310class LightLikeAxis {
    350 private:
    351    double _rap, _phi, _weight, _mom;
    352    
    353    double DistanceSq(double rap2, double phi2) const {
    354       double rap1 = _rap;
    355       double phi1 = _phi;
    356      
    357       double distRap = rap1-rap2;
    358       double distPhi = std::fabs(phi1-phi2);
    359       if (distPhi > M_PI) {distPhi = 2.0*M_PI - distPhi;}
    360       return sq(distRap) + sq(distPhi);
    361    }
    362    
    363    double Distance(double rap2, double phi2) const {
    364       return std::sqrt(DistanceSq(rap2,phi2));
    365    }
    366    
    367    
     311
    368312public:
    369313   LightLikeAxis() : _rap(0.0), _phi(0.0), _weight(0.0), _mom(0.0) {}
     
    399343   }
    400344
     345private:
     346   double _rap, _phi, _weight, _mom;
     347   
     348   double DistanceSq(double rap2, double phi2) const {
     349      double rap1 = _rap;
     350      double phi1 = _phi;
     351     
     352      double distRap = rap1-rap2;
     353      double distPhi = std::fabs(phi1-phi2);
     354      if (distPhi > M_PI) {distPhi = 2.0*M_PI - distPhi;}
     355      return distRap*distRap + distPhi*distPhi;
     356   }
     357   
     358   double Distance(double rap2, double phi2) const {
     359      return std::sqrt(DistanceSq(rap2,phi2));
     360   }
     361   
     362   
    401363};
    402364
  • external/fastjet/contribs/Nsubjettiness/MeasureFunction.cc

    r5b5a56b r35cdc46  
    55//  Jesse Thaler, Ken Van Tilburg, Christopher K. Vermilion, and TJ Wilkason
    66//
     7//  $Id: MeasureFunction.cc 670 2014-06-06 01:24:42Z jthaler $
    78//----------------------------------------------------------------------
    89// This file is part of FastJet contrib.
     
    3637
    3738// Return all of the necessary TauComponents for specific input particles and axes
    38 TauComponents MeasureFunction::result(const std::vector<fastjet::PseudoJet>& particles, const std::vector<fastjet::PseudoJet>& axes) {
     39TauComponents MeasureFunction::result(const std::vector<fastjet::PseudoJet>& particles, const std::vector<fastjet::PseudoJet>& axes) const {
     40   
     41   // first find partition
     42   // this sets jetPartitionStorage and beamPartitionStorage
     43   PseudoJet beamPartitionStorage;
     44   std::vector<fastjet::PseudoJet> jetPartitionStorage = get_partition(particles,axes,&beamPartitionStorage);
     45   
     46   // then return result calculated from partition
     47   return result_from_partition(jetPartitionStorage,axes,&beamPartitionStorage);
     48}
    3949
    40    std::vector<double> jetPieces(axes.size(), 0.0);
    41    double beamPiece = 0.0;
     50std::vector<fastjet::PseudoJet> MeasureFunction::get_partition(const std::vector<fastjet::PseudoJet>& particles,
     51                                                               const std::vector<fastjet::PseudoJet>& axes,
     52                                                               PseudoJet * beamPartitionStorage) const {
    4253   
    43    // Calculates the unnormalized sub-tau values, i.e. a std::vector of the contributions to tau_N of each Voronoi region (or region within R_0)
     54   std::vector<std::vector<PseudoJet> > jetPartition(axes.size());
     55   std::vector<PseudoJet> beamPartition;
     56   
     57   // Figures out the partiting of the input particles into the various jet pieces
     58   // Based on which axis the parition is closest to
    4459   for (unsigned i = 0; i < particles.size(); i++) {
    4560     
     
    6075     
    6176      if (j_min == -1) {
    62          if (_has_beam) beamPiece += beam_numerator(particles[i]);
     77         if (_has_beam) beamPartition.push_back(particles[i]);
    6378         else assert(_has_beam);  // this should never happen.
    6479      } else {
    65          jetPieces[j_min] += jet_numerator(particles[i],axes[j_min]);
     80         jetPartition[j_min].push_back(particles[i]);
    6681      }
    6782   }
    6883   
    69    // Calculates normalization for tau and subTau if _has_denominator is true, otherwise returns 1.0 (i.e. no normalization)
    70    double tauDen = 0.0;
    71    if (_has_denominator) {
    72       for (unsigned i = 0; i < particles.size(); i++) {
    73          tauDen += denominator(particles[i]);
    74       }
    75    } else {
    76       tauDen = 1.0; // if no denominator, then 1.0 for no normalization factor
     84   // Store beam partition
     85   if (beamPartitionStorage) {
     86      *beamPartitionStorage = join(beamPartition);
     87   }
     88
     89   // Store jet partitions
     90   std::vector<PseudoJet> jetPartitionStorage(axes.size(),PseudoJet(0,0,0,0));
     91   for (unsigned j = 0; j < axes.size(); j++) {
     92      jetPartitionStorage[j] = join(jetPartition[j]);
    7793   }
    7894   
     95   return jetPartitionStorage;
     96}
     97
     98// does partition, but only stores index of PseudoJets
     99std::vector<std::list<int> > MeasureFunction::get_partition_list(const std::vector<fastjet::PseudoJet>& particles,
     100                                                                 const std::vector<fastjet::PseudoJet>& axes) const {
     101
     102   std::vector<std::list<int> > jetPartition(axes.size());
     103   
     104   // Figures out the partiting of the input particles into the various jet pieces
     105   // Based on which axis the parition is closest to
     106   for (unsigned i = 0; i < particles.size(); i++) {
     107     
     108      // find minimum distance; start with beam (-1) for reference
     109      int j_min = -1;
     110      double minRsq;
     111      if (_has_beam) minRsq = beam_distance_squared(particles[i]);
     112      else minRsq = std::numeric_limits<double>::max(); // make it large value
     113     
     114      // check to see which axis the particle is closest to
     115      for (unsigned j = 0; j < axes.size(); j++) {
     116         double tempRsq = jet_distance_squared(particles[i],axes[j]); // delta R distance
     117         if (tempRsq < minRsq) {
     118            minRsq = tempRsq;
     119            j_min = j;
     120         }
     121      }
     122     
     123      if (j_min == -1) {
     124         assert(_has_beam); // consistency check
     125      } else {
     126         jetPartition[j_min].push_back(i);
     127      }
     128   }
     129   
     130   return jetPartition;
     131}
     132   
     133
     134// Uses existing partition and calculates result
     135// TODO:  Can we cache this for speed up when doing area subtraction?
     136TauComponents MeasureFunction::result_from_partition(const std::vector<fastjet::PseudoJet>& jet_partition,
     137                                                     const std::vector<fastjet::PseudoJet>& axes,
     138                                                     PseudoJet * beamPartitionStorage) const {
     139   
     140   std::vector<double> jetPieces(axes.size(), 0.0);
     141   double beamPiece = 0.0;
     142   
     143   double tauDen = 0.0;
     144   if (!_has_denominator) tauDen = 1.0;  // if no denominator, then 1.0 for no normalization factor
     145   
     146   // first find jet pieces
     147   for (unsigned j = 0; j < axes.size(); j++) {
     148      std::vector<PseudoJet> thisPartition = jet_partition[j].constituents();
     149      for (unsigned i = 0; i < thisPartition.size(); i++) {
     150         jetPieces[j] += jet_numerator(thisPartition[i],axes[j]); //numerator jet piece
     151         if (_has_denominator) tauDen += denominator(thisPartition[i]); // denominator
     152      }
     153   }
     154   
     155   // then find beam piece
     156   if (_has_beam) {
     157      assert(beamPartitionStorage); // make sure I have beam information
     158      std::vector<PseudoJet> beamPartition = beamPartitionStorage->constituents();
     159
     160      for (unsigned i = 0; i < beamPartition.size(); i++) {
     161         beamPiece += beam_numerator(beamPartition[i]); //numerator beam piece
     162         if (_has_denominator) tauDen += denominator(beamPartition[i]); // denominator
     163      }
     164   }
    79165   return TauComponents(jetPieces, beamPiece, tauDen, _has_denominator, _has_beam);
    80166}
     167
     168   
     169   
     170   
    81171   
    82172} //namespace contrib
  • external/fastjet/contribs/Nsubjettiness/MeasureFunction.hh

    r5b5a56b r35cdc46  
    55//  Jesse Thaler, Ken Van Tilburg, Christopher K. Vermilion, and TJ Wilkason
    66//
     7//  $Id: MeasureFunction.hh 678 2014-06-12 20:43:03Z jthaler $
    78//----------------------------------------------------------------------
    89// This file is part of FastJet contrib.
     
    3132#include <limits>
    3233
     34
    3335FASTJET_BEGIN_NAMESPACE      // defined in fastjet/internal/base.hh
    3436
    3537namespace contrib{
    3638
    37 inline double sq(double x) {return x*x;}
    38 
    39 ///////
    40 //
    41 // Measure Function
    42 //
    43 ///////
    44 
     39///////
     40//
     41// TauComponents
     42// (eventually we might want to put this in a separate header file)
     43//
     44///////
     45   
    4546/// \class TauComponents
    4647// This class creates a wrapper for the various tau/subtau values calculated in Njettiness. This class allows Njettiness access to these variables
    4748// without ever having to do the calculation itself. It takes in subtau numerators and tau denominator from MeasureFunction
    4849// and outputs tau numerator, and normalized tau and subtau.
    49 // TODO:  Consider merging with NjettinessExtras.  Add axes information?
    5050class TauComponents {
    51 private:
    52    
    53    // these values are input in the constructor
    54    std::vector<double> _jet_pieces_numerator;
    55    double _beam_piece_numerator;
    56    double _denominator;
    57    bool _has_denominator; //added so that TauComponents knows if denominator is used or not
    58    bool _has_beam; //added so that TauComponents knows if beam regions is used or not
    59    
    60    // these values are derived from above values
    61    std::vector<double> _jet_pieces;
    62    double _beam_piece;
    63    double _numerator;
    64    double _tau;
    65    
    6651   
    6752public:
     
    115100   double beam_piece() const { return _beam_piece; }
    116101   double tau() const { return _tau; }
    117    
    118 };
     102
     103private:
     104   
     105   // these values are input in the constructor
     106   std::vector<double> _jet_pieces_numerator;
     107   double _beam_piece_numerator;
     108   double _denominator;
     109   bool _has_denominator; //added so that TauComponents knows if denominator is used or not
     110   bool _has_beam; //added so that TauComponents knows if beam regions is used or not
     111   
     112   // these values are derived from above values
     113   std::vector<double> _jet_pieces;
     114   double _beam_piece;
     115   double _numerator;
     116   double _tau;
     117   
     118};
     119
     120///////
     121//
     122// Measure Function
     123//
     124///////
     125
    119126
    120127//------------------------------------------------------------------------
     
    125132class MeasureFunction {
    126133   
     134public:
     135   //These functions define the measure by which tau_N is calculated,
     136   //and are overloaded by the various measures below
     137   
     138   // Distanes to axes.  These are called many times, so need to be as fast as possible
     139   virtual double jet_distance_squared(const fastjet::PseudoJet& particle, const fastjet::PseudoJet& axis) const = 0;
     140   virtual double beam_distance_squared(const fastjet::PseudoJet& particle) const = 0;
     141   
     142   // The actual measures used in N-(sub)jettiness
     143   virtual double jet_numerator(const fastjet::PseudoJet& particle, const fastjet::PseudoJet& axis) const  = 0;
     144   virtual double beam_numerator(const fastjet::PseudoJet& particle) const = 0;
     145   
     146   // a possible normalization factor
     147   virtual double denominator(const fastjet::PseudoJet& particle) const = 0;
     148   
     149   //------
     150   // The functions below call the above functions and are not virtual
     151   //------
     152   
     153   // Return all of the necessary TauComponents for specific input particles and axes
     154   // Also have optional pointers to get out information about partitioning
     155   TauComponents result(const std::vector<fastjet::PseudoJet>& particles, const std::vector<fastjet::PseudoJet>& axes) const;
     156
     157   // Just getting tau value if that is all that is needed
     158   double tau(const std::vector<fastjet::PseudoJet>& particles, const std::vector<fastjet::PseudoJet>& axes) const {
     159      return result(particles,axes).tau();
     160   }
     161   
     162   // Create the partitioning and stores internally
     163   std::vector<fastjet::PseudoJet> get_partition(const std::vector<fastjet::PseudoJet>& particles, const std::vector<fastjet::PseudoJet>& axes, PseudoJet * beamPartitionStorage = NULL) const;
     164
     165   // Essentially same as get_partition, but in the form needed for the jet algorithm
     166   std::vector<std::list<int> > get_partition_list(const std::vector<fastjet::PseudoJet>& particles, const std::vector<fastjet::PseudoJet>& axes) const;
     167
     168   // calculates the tau result using an existing partition
     169   TauComponents result_from_partition(const std::vector<fastjet::PseudoJet>& jet_partitioning, const std::vector<fastjet::PseudoJet>& axes, PseudoJet * beamPartitionStorage = NULL) const;
     170
     171   // shorthand for squaring
     172   static inline double sq(double x) {return x*x;}
     173
     174   //virtual destructor
     175   virtual ~MeasureFunction(){}
     176   
    127177protected:
    128178   //bool set by derived classes to choose whether or not to use the denominator
     
    133183   MeasureFunction(bool has_denominator = true, bool has_beam = true) : _has_denominator(has_denominator), _has_beam(has_beam) {}
    134184   
    135 public:
    136    virtual ~MeasureFunction(){}
    137    
    138    //These functions define the measure by which tau_N is calculated,
    139    //and are overloaded by the various measures below
    140    
    141    // Distanes to axes.  These are called many times, so need to be as fast as possible
    142    virtual double jet_distance_squared(const fastjet::PseudoJet& particle, const fastjet::PseudoJet& axis) = 0;
    143    virtual double beam_distance_squared(const fastjet::PseudoJet& particle) = 0;
    144    
    145    // The actual measures used in N-(sub)jettiness
    146    virtual double jet_numerator(const fastjet::PseudoJet& particle, const fastjet::PseudoJet& axis) = 0;
    147    virtual double beam_numerator(const fastjet::PseudoJet& particle) = 0;
    148    
    149    // a possible normalization factor
    150    virtual double denominator(const fastjet::PseudoJet& particle) = 0;
    151    
    152    
    153    // These functions call the above functions and are not virtual
    154    
    155    // Do I cluster a particle into a jet?
    156    bool do_cluster(const fastjet::PseudoJet& particle, const fastjet::PseudoJet& axis) {
    157       return (jet_distance_squared(particle,axis) <= beam_distance_squared(particle));
    158    }
    159    
    160    // Return all of the necessary TauComponents for specific input particles and axes
    161    TauComponents result(const std::vector<fastjet::PseudoJet>& particles, const std::vector<fastjet::PseudoJet>& axes);
    162 
    163    double tau(const std::vector<fastjet::PseudoJet>& particles, const std::vector<fastjet::PseudoJet>& axes) {
    164       return result(particles,axes).tau();
    165    }
    166 
    167    
    168 };
    169 
    170 
    171 /// \class DefaultNormalizedMeasure
     185};
     186
     187
     188/// \class DefaultNormalizedMeasureFunction
    172189// This class is the default measure, inheriting from the class above. This class will calculate tau_N
    173190// of a jet according to this measure. This measure is defined as the pT of the particle multiplied by deltaR
    174191// to the power of beta. This class includes the normalization factor determined by R0
    175 class DefaultNormalizedMeasure : public MeasureFunction {
    176 
    177    private:
    178       double _beta;
    179       double _R0;
    180       double _Rcutoff;
    181 
    182    public:
    183 
    184       DefaultNormalizedMeasure(double beta, double R0, double Rcutoff, bool normalized = true)
    185       : MeasureFunction(normalized), _beta(beta), _R0(R0), _Rcutoff(Rcutoff) {}
    186 
    187       virtual double jet_distance_squared(const fastjet::PseudoJet& particle, const fastjet::PseudoJet& axis) {
    188          return particle.squared_distance(axis);
    189       }
    190    
    191       virtual double beam_distance_squared(const fastjet::PseudoJet& particle) {
    192          return sq(_Rcutoff);
    193       }
    194 
    195       virtual double jet_numerator(const fastjet::PseudoJet& particle, const fastjet::PseudoJet& axis) {
    196          return particle.perp() * std::pow(jet_distance_squared(particle,axis),_beta/2.0);
    197       }
    198    
    199       virtual double beam_numerator(const fastjet::PseudoJet& particle) {
    200          return particle.perp() * std::pow(_Rcutoff,_beta);
    201       }
    202 
    203       virtual double denominator(const fastjet::PseudoJet& particle) {
    204          return particle.perp() * std::pow(_R0,_beta);
    205       }
    206 
     192class DefaultNormalizedMeasureFunction : public MeasureFunction {
     193
     194public:
     195
     196   DefaultNormalizedMeasureFunction(double beta, double R0, double Rcutoff, bool normalized = true)
     197   : MeasureFunction(normalized), _beta(beta), _R0(R0), _Rcutoff(Rcutoff) {}
     198
     199   virtual double jet_distance_squared(const fastjet::PseudoJet& particle, const fastjet::PseudoJet& axis) const {
     200      return particle.squared_distance(axis);
     201   }
     202
     203   virtual double beam_distance_squared(const fastjet::PseudoJet& /*particle*/) const {
     204      return sq(_Rcutoff);
     205   }
     206
     207   virtual double jet_numerator(const fastjet::PseudoJet& particle, const fastjet::PseudoJet& axis) const{
     208      return particle.perp() * std::pow(jet_distance_squared(particle,axis),_beta/2.0);
     209   }
     210
     211   virtual double beam_numerator(const fastjet::PseudoJet& particle) const {
     212      return particle.perp() * std::pow(_Rcutoff,_beta);
     213   }
     214
     215   virtual double denominator(const fastjet::PseudoJet& particle) const {
     216      return particle.perp() * std::pow(_R0,_beta);
     217   }
     218   
     219private:
     220   double _beta;
     221   double _R0;
     222   double _Rcutoff;
     223
     224   
    207225};
    208226
    209227//------------------------------------------------------------------------
    210 /// \class DefaultUnnormalizedMeasure
     228/// \class DefaultUnnormalizedMeasureFunction
    211229// This class is the unnormalized default measure, inheriting from the class above. The only difference from above
    212230// is that the denominator is defined to be 1.0 by setting _has_denominator to false.
    213 class DefaultUnnormalizedMeasure : public DefaultNormalizedMeasure {
    214 
    215    public:
    216       // Since all methods are identical, UnnormalizedMeasure inherits directly from NormalizedMeasure. R0 is defaulted to NAN since the value of R0 is unecessary for this class.
    217       // the "false" flag sets _has_denominator in MeasureFunction to false so no denominator is used.
    218       DefaultUnnormalizedMeasure(double beta, double Rcutoff) : DefaultNormalizedMeasure(beta, NAN, Rcutoff, false) {}
    219 
    220       
     231class DefaultUnnormalizedMeasureFunction : public DefaultNormalizedMeasureFunction {
     232
     233public:
     234   // Since all methods are identical, UnnormalizedMeasure inherits directly
     235   // from NormalizedMeasure. R0 is a dummy value since the value of R0 is unecessary for this class,
     236   // and the "false" flag sets _has_denominator in MeasureFunction to false so no denominator is used.
     237   DefaultUnnormalizedMeasureFunction(double beta, double Rcutoff)
     238   : DefaultNormalizedMeasureFunction(beta, std::numeric_limits<double>::quiet_NaN(), Rcutoff, false) {}
    221239};
    222240
    223241//------------------------------------------------------------------------
    224 /// \class GeometricMeasure
     242/// \class GeometricMeasureFunction
    225243// This class is the geometic measure, inheriting from the class above. This class will calculate tau_N
    226244// of a jet according to this measure. This measure is defined by the Lorentz dot product between
    227245// the particle and the axis. This class includes normalization of tau_N.
    228 class GeometricMeasure : public MeasureFunction {
    229 
    230    private:
    231       double _jet_beta;
    232       double _beam_beta;
    233       double _Rcutoff;
    234 
    235       // create light-like axis
    236       fastjet::PseudoJet lightFrom(const fastjet::PseudoJet& input) const {
    237          double length = sqrt(pow(input.px(),2) + pow(input.py(),2) + pow(input.pz(),2));
    238          return fastjet::PseudoJet(input.px()/length,input.py()/length,input.pz()/length,1.0);
    239       }
    240 
    241    public:
    242       // Right now, we are hard coded for beam_beta = 1.0, but that will need to change
    243       GeometricMeasure(double jet_beta, double Rcutoff) : _jet_beta(jet_beta), _beam_beta(1.0), _Rcutoff(Rcutoff) {}
    244    
    245       virtual double jet_distance_squared(const fastjet::PseudoJet& particle, const fastjet::PseudoJet& axis) {
    246          fastjet::PseudoJet lightAxis = lightFrom(axis);
    247          double pseudoRsquared = 2.0*dot_product(lightFrom(axis),particle)/(lightAxis.pt()*particle.pt());
    248          return pseudoRsquared;
    249       }
    250    
    251       virtual double beam_distance_squared(const fastjet::PseudoJet& particle) {
    252          return sq(_Rcutoff);
    253       }
    254 
    255       virtual double jet_numerator(const fastjet::PseudoJet& particle, const fastjet::PseudoJet& axis) {
    256          fastjet::PseudoJet lightAxis = lightFrom(axis);
    257          double weight = (_beam_beta == 1.0) ? 1.0 : std::pow(lightAxis.pt(),_beam_beta - 1.0);
    258          return particle.pt() * weight * std::pow(jet_distance_squared(particle,axis),_jet_beta/2.0);
    259       }
    260    
    261       virtual double beam_numerator(const fastjet::PseudoJet& particle) {
    262          double weight = (_beam_beta == 1.0) ? 1.0 : std::pow(particle.pt()/particle.e(),_beam_beta - 1.0);
    263          return particle.pt() * weight * std::pow(_Rcutoff,_jet_beta);
    264       }
    265 
    266       virtual double denominator(const fastjet::PseudoJet& particle) {
    267          return 1.0;
    268       }
    269 };
    270 
    271 
     246class GeometricMeasureFunction : public MeasureFunction {
     247
     248public:
     249   // Right now, we are hard coded for beam_beta = 1.0, but that will need to change
     250   GeometricMeasureFunction(double jet_beta, double Rcutoff) :
     251     MeasureFunction(false), // doesn't have denominator
     252     _jet_beta(jet_beta), _beam_beta(1.0), _Rcutoff(Rcutoff) {}
     253
     254   virtual double jet_distance_squared(const fastjet::PseudoJet& particle, const fastjet::PseudoJet& axis) const {
     255      fastjet::PseudoJet lightAxis = lightFrom(axis);
     256      double pseudoRsquared = 2.0*dot_product(lightFrom(axis),particle)/(lightAxis.pt()*particle.pt());
     257      return pseudoRsquared;
     258   }
     259
     260   virtual double beam_distance_squared(const fastjet::PseudoJet&  /*particle*/) const {
     261      return sq(_Rcutoff);
     262   }
     263
     264   virtual double jet_numerator(const fastjet::PseudoJet& particle, const fastjet::PseudoJet& axis) const {
     265      fastjet::PseudoJet lightAxis = lightFrom(axis);
     266      double weight = (_beam_beta == 1.0) ? 1.0 : std::pow(lightAxis.pt(),_beam_beta - 1.0);
     267      return particle.pt() * weight * std::pow(jet_distance_squared(particle,axis),_jet_beta/2.0);
     268   }
     269
     270   virtual double beam_numerator(const fastjet::PseudoJet& particle) const {
     271      double weight = (_beam_beta == 1.0) ? 1.0 : std::pow(particle.pt()/particle.e(),_beam_beta - 1.0);
     272      return particle.pt() * weight * std::pow(_Rcutoff,_jet_beta);
     273   }
     274
     275   virtual double denominator(const fastjet::PseudoJet&  /*particle*/) const {
     276      return std::numeric_limits<double>::quiet_NaN();
     277   }
     278   
     279   
     280private:
     281   double _jet_beta;
     282   double _beam_beta;
     283   double _Rcutoff;
     284   
     285   // create light-like axis
     286   fastjet::PseudoJet lightFrom(const fastjet::PseudoJet& input) const {
     287      double length = sqrt(pow(input.px(),2) + pow(input.py(),2) + pow(input.pz(),2));
     288      return fastjet::PseudoJet(input.px()/length,input.py()/length,input.pz()/length,1.0);
     289   }
     290
     291};
     292   
     293   
    272294} //namespace contrib
    273295
  • external/fastjet/contribs/Nsubjettiness/Njettiness.cc

    r5b5a56b r35cdc46  
    55//  Jesse Thaler, Ken Van Tilburg, Christopher K. Vermilion, and TJ Wilkason
    66//
     7//  $Id: Njettiness.cc 677 2014-06-12 18:56:46Z jthaler $
    78//----------------------------------------------------------------------
    89// This file is part of FastJet contrib.
     
    3536///////
    3637
    37 // Helper function to correlate one pass minimization with appropriate measure
    38 void Njettiness::setOnePassAxesFinder(MeasureMode measure_mode, AxesFinder* startingFinder, double beta, double Rcutoff) {
    39    if (measure_mode == normalized_measure || measure_mode == unnormalized_measure || measure_mode == normalized_cutoff_measure || measure_mode == unnormalized_cutoff_measure) {
    40       _axesFinder = new AxesFinderFromOnePassMinimization(startingFinder, beta, Rcutoff);
    41    }
    42    else if (measure_mode == geometric_measure || measure_mode == geometric_cutoff_measure) {
    43       _axesFinder = new AxesFinderFromGeometricMinimization(startingFinder, beta, Rcutoff);
    44    }
    45    else {
    46       std::cerr << "Minimization only set up for normalized_measure, unnormalized_measure, normalized_cutoff_measure, unnormalized_cutoff_measure, geometric_measure, geometric_cutoff_measure" << std::endl;
    47       exit(1); }
    48 }
    49 
    50 // Parsing needed for constructor to set AxesFinder and MeasureFunction
    51 // All of the parameter handling is here, and checking that number of parameters is correct.
    52 void Njettiness::setMeasureFunctionandAxesFinder(AxesMode axes_mode, MeasureMode measure_mode, double para1, double para2, double para3, double para4) {
     38Njettiness::Njettiness(const AxesDefinition & axes_def, const MeasureDefinition & measure_def)
     39: _axes_def(axes_def.create()), _measure_def(measure_def.create()) {
     40   setMeasureFunctionAndAxesFinder();  // call helper function to do the hard work
     41}
     42
     43Njettiness::Njettiness(AxesMode axes_mode, const MeasureDefinition & measure_def)
     44: _axes_def(createAxesDef(axes_mode)), _measure_def(measure_def.create()) {
     45   setMeasureFunctionAndAxesFinder();  // call helper function to do the hard work
     46}
     47   
     48// Convert from MeasureMode enum to MeasureDefinition
     49// This returns a pointer that will be claimed by a SharedPtr
     50MeasureDefinition* Njettiness::createMeasureDef(MeasureMode measure_mode, int num_para, double para1, double para2, double para3) const {
    5351
    5452   // definition of maximum Rcutoff for non-cutoff measures, changed later by other measures
    5553   double Rcutoff = std::numeric_limits<double>::max();  //large number
    56    // Most (but all measures have some kind of beta value)
    57    double beta = NAN;
     54   // Most (but not all) measures have some kind of beta value
     55   double beta = std::numeric_limits<double>::quiet_NaN();
    5856   // The normalized measures have an R0 value.
    59    double R0 = NAN;
    60 
     57   double R0 = std::numeric_limits<double>::quiet_NaN();
     58   
    6159   // Find the MeasureFunction and set the parameters.
    6260   switch (measure_mode) {
     
    6462         beta = para1;
    6563         R0 = para2;
    66          if(correctParameterCount(2, para1, para2, para3, para4))
    67             _measureFunction = new DefaultNormalizedMeasure(beta, R0, Rcutoff); //normalized_measure requires 2 parameters, beta and R0
    68          else {
    69             std::cerr << "normalized_measure needs 2 parameters (beta and R0)" << std::endl;
    70             exit(1); }
     64         if(num_para == 2) {
     65            return new NormalizedMeasure(beta,R0);
     66         } else {
     67            throw Error("normalized_measure needs 2 parameters (beta and R0)");
     68         }
    7169         break;
    7270      case unnormalized_measure:
    7371         beta = para1;
    74          if(correctParameterCount(1, para1, para2, para3, para4))
    75             _measureFunction = new DefaultUnnormalizedMeasure(beta, Rcutoff); //unnormalized_measure requires 1 parameter, beta
    76          else {
    77             std::cerr << "unnormalized_measure needs 1 parameter (beta)" << std::endl;
    78             exit(1); }
     72         if(num_para == 1) {
     73            return new UnnormalizedMeasure(beta);
     74         } else {
     75            throw Error("unnormalized_measure needs 1 parameter (beta)");
     76         }
    7977         break;
    8078      case geometric_measure:
    8179         beta = para1;
    82          if(correctParameterCount(1, para1, para2, para3, para4))
    83             _measureFunction = new GeometricMeasure(beta,Rcutoff); //geometric_measure requires 1 parameter, beta
    84          else {
    85             std::cerr << "geometric_measure needs 1 parameter (beta)" << std::endl;
    86             exit(1); }
     80         if (num_para == 1) {
     81            return new GeometricMeasure(beta);
     82         } else {
     83            throw Error("geometric_measure needs 1 parameter (beta)");
     84         }
    8785         break;
    8886      case normalized_cutoff_measure:
     
    9088         R0 = para2;
    9189         Rcutoff = para3; //Rcutoff parameter is 3rd parameter in normalized_cutoff_measure
    92          if(correctParameterCount(3, para1, para2, para3, para4))
    93             _measureFunction = new DefaultNormalizedMeasure(beta, R0, Rcutoff); //normalized_cutoff_measure requires 3 parameters, beta, R0, and Rcutoff
    94          else {
    95             std::cerr << "normalized_cutoff_measure has 3 parameters (beta, R0, Rcutoff)" << std::endl;
    96             exit(1); }
     90         if (num_para == 3) {
     91            return new NormalizedCutoffMeasure(beta,R0,Rcutoff);
     92         } else {
     93            throw Error("normalized_cutoff_measure has 3 parameters (beta, R0, Rcutoff)");
     94         }
    9795         break;
    9896      case unnormalized_cutoff_measure:
    9997         beta = para1;
    10098         Rcutoff = para2; //Rcutoff parameter is 2nd parameter in normalized_cutoff_measure
    101          if (correctParameterCount(2, para1, para2, para3, para4))
    102             _measureFunction = new DefaultUnnormalizedMeasure(beta, Rcutoff); //unnormalized_cutoff_measure requires 2 parameters, beta and Rcutoff
    103          else {
    104             std::cerr << "unnormalized_cutoff_measure has 2 parameters (beta, Rcutoff)" << std::endl;
    105             exit(1); }
     99         if (num_para == 2) {
     100            return new UnnormalizedCutoffMeasure(beta,Rcutoff);
     101         } else {
     102            throw Error("unnormalized_cutoff_measure has 2 parameters (beta, Rcutoff)");
     103         }
    106104         break;
    107105      case geometric_cutoff_measure:
    108106         beta = para1;
    109107         Rcutoff = para2; //Rcutoff parameter is 2nd parameter in geometric_cutoff_measure
    110          if(correctParameterCount(2, para1, para2, para3, para4))
    111             _measureFunction = new GeometricMeasure(beta,Rcutoff); //geometric_cutoff_measure requires 2 parameters, beta and Rcutoff
    112          else {
    113             std::cerr << "geometric_cutoff_measure has 2 parameters (beta,Rcutoff)" << std::endl;
    114             exit(1); }
     108         if(num_para == 2) {
     109           return new GeometricCutoffMeasure(beta,Rcutoff);
     110         } else {
     111            throw Error("geometric_cutoff_measure has 2 parameters (beta, Rcutoff)");
     112         }
    115113         break;
    116114      default:
    117115         assert(false);
    118116         break;
    119    }   
    120 
    121    // Choose which AxesFinder from user input.
    122    // Uses setOnePassAxesFinder helpful function to use beta and Rcutoff values about (if needed)
     117   }
     118   return NULL;
     119}
     120
     121// Convert from AxesMode enum to AxesDefinition
     122// This returns a pointer that will be claimed by a SharedPtr
     123AxesDefinition* Njettiness::createAxesDef(Njettiness::AxesMode axes_mode) const {
     124   
    123125   switch (axes_mode) {
    124126      case wta_kt_axes:
    125          _axesFinder = new AxesFinderFromWTA_KT();
    126          break;
     127         return new WTA_KT_Axes();
    127128      case wta_ca_axes:
    128          _axesFinder = new AxesFinderFromWTA_CA();
    129          break;
     129         return new WTA_CA_Axes();
    130130      case kt_axes:
    131          _axesFinder = new AxesFinderFromKT();
    132          break;
     131         return new KT_Axes();
    133132      case ca_axes:
    134          _axesFinder = new AxesFinderFromCA();
    135          break;
     133         return new CA_Axes();
    136134      case antikt_0p2_axes:
    137          _axesFinder = new AxesFinderFromAntiKT(0.2);     
    138          break;
     135         return new AntiKT_Axes(0.2);
    139136      case onepass_wta_kt_axes:
    140          setOnePassAxesFinder(measure_mode, new AxesFinderFromWTA_KT(), beta, Rcutoff);
    141          break;
     137         return new OnePass_WTA_KT_Axes();
    142138      case onepass_wta_ca_axes:
    143          setOnePassAxesFinder(measure_mode, new AxesFinderFromWTA_CA(), beta, Rcutoff);
    144          break;
     139         return new OnePass_WTA_CA_Axes();
    145140      case onepass_kt_axes:
    146          setOnePassAxesFinder(measure_mode, new AxesFinderFromKT(), beta, Rcutoff);
    147          break;
     141         return new OnePass_KT_Axes();
    148142      case onepass_ca_axes:
    149          setOnePassAxesFinder(measure_mode, new AxesFinderFromCA(), beta, Rcutoff);
    150          break;
     143         return new OnePass_CA_Axes();
    151144      case onepass_antikt_0p2_axes:
    152          setOnePassAxesFinder(measure_mode, new AxesFinderFromAntiKT(0.2), beta, Rcutoff);
    153          break;
     145         return new OnePass_AntiKT_Axes(0.2);
    154146      case onepass_manual_axes:
    155          setOnePassAxesFinder(measure_mode, new AxesFinderFromUserInput(), beta, Rcutoff);
    156          break;
    157       case min_axes: //full minimization is not defined for geometric_measure.
    158          if (measure_mode == normalized_measure || measure_mode == unnormalized_measure || measure_mode == normalized_cutoff_measure || measure_mode == unnormalized_cutoff_measure)
    159             //Defaults to 100 iteration to find minimum
    160             _axesFinder = new AxesFinderFromKmeansMinimization(new AxesFinderFromKT(), beta, Rcutoff, 100);
    161          else {
    162             std::cerr << "Multi-pass minimization only set up for normalized_measure, unnormalized_measure, normalized_cutoff_measure, unnormalized_cutoff_measure." << std::endl;
    163             exit(1);
    164          }
    165          break;
     147         return new OnePass_Manual_Axes();
     148      case min_axes:
     149         return new MultiPass_Axes(100);
    166150      case manual_axes:
    167          _axesFinder = new AxesFinderFromUserInput();
    168          break;
    169 // These options have been commented out because they have not been fully tested
    170 //      case wta2_kt_axes: // option for alpha = 2 added
    171 //         _axesFinder = new AxesFinderFromWTA2_KT();
    172 //         break;
    173 //      case wta2_ca_axes: // option for alpha = 2 added
    174 //         _axesFinder = new AxesFinderFromWTA2_CA();
    175 //         break;
    176 //      case onepass_wta2_kt_axes: // option for alpha = 2 added
    177 //         setOnePassAxesFinder(measure_mode, new AxesFinderFromWTA2_KT(), beta, Rcutoff);
    178 //         break;
    179 //      case onepass_wta2_ca_axes: // option for alpha = 2 added
    180 //         setOnePassAxesFinder(measure_mode, new AxesFinderFromWTA2_CA(), beta, Rcutoff);
    181 //         break;
     151         return new Manual_Axes();
    182152      default:
    183153         assert(false);
    184          break;
    185       }   
    186 
     154         return NULL;
     155   }
     156}
     157
     158   
     159// Parsing needed for constructor to set AxesFinder and MeasureFunction
     160// All of the parameter handling is here, and checking that number of parameters is correct.
     161void Njettiness::setMeasureFunctionAndAxesFinder() {
     162   // Get the correct MeasureFunction and AxesFinders
     163   _measureFunction.reset(_measure_def->createMeasureFunction());
     164   _startingAxesFinder.reset(_axes_def->createStartingAxesFinder(*_measure_def));
     165   _finishingAxesFinder.reset(_axes_def->createFinishingAxesFinder(*_measure_def));
    187166}
    188167
    189168// setAxes for Manual mode
    190 void Njettiness::setAxes(std::vector<fastjet::PseudoJet> myAxes) {
    191    if (_current_axes_mode == manual_axes || _current_axes_mode == onepass_manual_axes) {
     169void Njettiness::setAxes(const std::vector<fastjet::PseudoJet> & myAxes) {
     170   if (_axes_def->supportsManualAxes()) {
    192171      _currentAxes = myAxes;
    193    }
    194    else {
    195       std::cerr << "You can only use setAxes if using manual_axes or onepass_manual_axes measure mode" << std::endl;
    196       exit(1);
     172   } else {
     173      throw Error("You can only use setAxes for manual AxesDefinitions");
    197174   }
    198175}
     
    200177// Calculates and returns all TauComponents that user would want.
    201178// This information is stored in _current_tau_components for later access as well.
    202 TauComponents Njettiness::getTauComponents(unsigned n_jets, const std::vector<fastjet::PseudoJet> & inputJets) {
     179TauComponents Njettiness::getTauComponents(unsigned n_jets, const std::vector<fastjet::PseudoJet> & inputJets) const {
    203180   if (inputJets.size() <= n_jets) {  //if not enough particles, return zero
    204181      _currentAxes = inputJets;
     
    206183      _current_tau_components = TauComponents();
    207184      _seedAxes = _currentAxes;
     185      _currentJets = _currentAxes;
     186      _currentBeam = PseudoJet(0.0,0.0,0.0,0.0);
    208187   } else {
    209       _currentAxes = _axesFinder->getAxes(n_jets,inputJets,_currentAxes); // sets current Axes
    210       _seedAxes = _axesFinder->seedAxes(); // sets seed Axes (if one pass minimization was used)
    211       _current_tau_components = _measureFunction->result(inputJets, _currentAxes);  // sets current Tau Values
     188
     189      _seedAxes = _startingAxesFinder->getAxes(n_jets,inputJets,_currentAxes); //sets starting point for minimization
     190      if (_finishingAxesFinder) {
     191         _currentAxes = _finishingAxesFinder->getAxes(n_jets,inputJets,_seedAxes);
     192      } else {
     193         _currentAxes = _seedAxes;
     194      }
     195     
     196      // Find partition and store information
     197      // (jet information in _currentJets, beam in _currentBeam)
     198      _currentJets = _measureFunction->get_partition(inputJets,_currentAxes,&_currentBeam);
     199     
     200      // Find tau value and store information
     201      _current_tau_components = _measureFunction->result_from_partition(_currentJets, _currentAxes,&_currentBeam);  // sets current Tau Values
    212202   }
    213203   return _current_tau_components;
     
    219209// Each vector element is a list of ints corresponding to the indices in
    220210// particles of the particles belonging to that jet.
    221 // TODO:  Consider moving to MeasureFunction
    222 std::vector<std::list<int> > Njettiness::getPartition(const std::vector<fastjet::PseudoJet> & particles) {
    223    std::vector<std::list<int> > partitions(_currentAxes.size());
    224 
    225    for (unsigned i = 0; i < particles.size(); i++) {
    226      
    227       int j_min = -1;
    228       // find minimum distance
    229       double minR = std::numeric_limits<double>::max();  //large number
    230       for (unsigned j = 0; j < _currentAxes.size(); j++) {
    231          double tempR = _measureFunction->jet_distance_squared(particles[i],_currentAxes[j]); // delta R distance
    232          if (tempR < minR) {
    233             minR = tempR;
    234             j_min = j;
    235          }
    236       }
    237       if (_measureFunction->do_cluster(particles[i],_currentAxes[j_min])) partitions[j_min].push_back(i);
    238    }
    239    return partitions;
    240 }
    241 
    242 // Having found axes, assign each particle in particles to an axis, and return a set of jets.
    243 // Each jet is the sum of particles closest to an axis (Njet = Naxes).
    244 // TODO:  Consider moving to MeasureFunction
    245 std::vector<fastjet::PseudoJet> Njettiness::getJets(const std::vector<fastjet::PseudoJet> & particles) {
    246    
    247    std::vector<fastjet::PseudoJet> jets(_currentAxes.size());
    248 
    249    std::vector<std::list<int> > partition = getPartition(particles);
    250    for (unsigned j = 0; j < partition.size(); ++j) {
    251       std::list<int>::const_iterator it, itE;
    252       for (it = partition[j].begin(), itE = partition[j].end(); it != itE; ++it) {
    253          jets[j] += particles[*it];
    254       }
    255    }
    256    return jets;
    257 }
    258 
     211std::vector<std::list<int> > Njettiness::getPartitionList(const std::vector<fastjet::PseudoJet> & particles) const {
     212   // core code is in MeasureFunction
     213   return _measureFunction->get_partition_list(particles,_currentAxes);
     214}
     215
     216   
    259217} // namespace contrib
    260218
  • external/fastjet/contribs/Nsubjettiness/Njettiness.hh

    r5b5a56b r35cdc46  
    55//  Jesse Thaler, Ken Van Tilburg, Christopher K. Vermilion, and TJ Wilkason
    66//
     7//  $Id: Njettiness.hh 670 2014-06-06 01:24:42Z jthaler $
    78//----------------------------------------------------------------------
    89// This file is part of FastJet contrib.
     
    2526#define __FASTJET_CONTRIB_NJETTINESS_HH__
    2627
     28
    2729#include "MeasureFunction.hh"
    2830#include "AxesFinder.hh"
     31#include "NjettinessDefinition.hh"
    2932
    3033#include "fastjet/PseudoJet.hh"
     34#include "fastjet/SharedPtr.hh"
     35#include <fastjet/LimitedWarning.hh>
     36
    3137#include <cmath>
    3238#include <vector>
    3339#include <list>
    3440
    35 
    3641FASTJET_BEGIN_NAMESPACE      // defined in fastjet/internal/base.hh
    3742
    3843namespace contrib {
    39 
     44   
    4045///////
    4146//
     
    5459   
    5560   // The various axes choices available to the user
     61   // It is recommended to use AxesDefinition instead of these.
    5662   enum AxesMode {
    5763      kt_axes,             // exclusive kt axes
     
    7884   // "normalized_cutoff_measure" was the default in v1.0 of Nsubjettiness
    7985   // "unnormalized_measure" is now the recommended default usage
     86   // But it is recommended to use MeasureDefinition instead of these.
    8087   enum MeasureMode {
    8188      normalized_measure,           //default normalized measure
     
    8794   };
    8895
    89 private:
    90    // The chosen axes/measure modes
    91    AxesFinder* _axesFinder;  // The chosen axes
    92    MeasureFunction* _measureFunction; // The chosen measure
     96   // Main constructor that uses AxesMode and MeasureDefinition to specify measure
     97   // Unlike Nsubjettiness or NjettinessPlugin, the value N is not chosen
     98   Njettiness(const AxesDefinition & axes_def, const MeasureDefinition & measure_def);
    9399
    94    // Enum information so functions can specify output based on specific options, primarily for setAxes
    95    AxesMode _current_axes_mode;
    96    MeasureMode _current_measure_mode;
    97    
    98    // Information about the current information
    99    TauComponents _current_tau_components; //automatically set to have components of 0; these values will be set by the getTau function call
    100    std::vector<fastjet::PseudoJet> _currentAxes;
    101    std::vector<fastjet::PseudoJet> _seedAxes; // axes used prior to minimization (if applicable)
    102    
    103    // Needed for compilation of non C++11 users
    104    bool isnan(double para) { return para != para; }
     100   // Intermediate constructor (needed to enable v1.0.3 backwards compatibility?)
     101   Njettiness(AxesMode axes_mode, const MeasureDefinition & measure_def);
    105102
    106    // Helpful function to check to make sure input has correct number of parameters
    107    bool correctParameterCount(int n, double para1, double para2, double para3, double para4){
    108       int numpara;
    109       if (!isnan(para1) && !isnan(para2) && !isnan(para3) && !isnan(para4)) numpara = 4;
    110       else if (!isnan(para1) && !isnan(para2) && !isnan(para3) && isnan(para4)) numpara = 3;
    111       else if (!isnan(para1) && !isnan(para2) && isnan(para3) && isnan(para4)) numpara = 2;
    112       else if (!isnan(para1) && isnan(para2) && isnan(para3) && isnan(para4)) numpara = 1;
    113       else numpara = 0;
    114       return n == numpara;
     103   // Alternative constructor which takes axes/measure information as enums with measure parameters
     104   // This version is not recommended
     105   Njettiness(AxesMode axes_mode,
     106              MeasureMode measure_mode,
     107              int num_para,
     108              double para1 = std::numeric_limits<double>::quiet_NaN(),
     109              double para2 = std::numeric_limits<double>::quiet_NaN(),
     110              double para3 = std::numeric_limits<double>::quiet_NaN())
     111   : _axes_def(createAxesDef(axes_mode)), _measure_def(createMeasureDef(measure_mode, num_para, para1, para2, para3)) {
     112      setMeasureFunctionAndAxesFinder();  // call helper function to do the hard work
    115113   }
    116114
    117    // Helper function to set onepass_axes depending on input measure_mode and startingFinder
    118    void setOnePassAxesFinder(MeasureMode measure_mode, AxesFinder* startingFinder, double para1, double Rcutoff);
    119  
    120    // created separate function to set MeasureFunction and AxesFinder in order to keep constructor cleaner.
    121    void setMeasureFunctionandAxesFinder(AxesMode axes_mode, MeasureMode measure_mode, double para1, double para2, double para3, double para4);
    122 
    123 public:
    124 
    125 
    126    // Main constructor which takes axes/measure information, and possible parameters.
    127    // Unlike Nsubjettiness or NjettinessPlugin, the value N is not chosen
    128    Njettiness(AxesMode axes_mode,
    129               MeasureMode measure_mode,
    130               double para1 = NAN,
    131               double para2 = NAN,
    132               double para3 = NAN,
    133               double para4 = NAN)
    134    : _current_axes_mode(axes_mode),
    135    _current_measure_mode(measure_mode) {
    136       setMeasureFunctionandAxesFinder(axes_mode, measure_mode, para1, para2, para3, para4);  // call helper function to do the hard work
    137    }
    138 
    139    ~Njettiness() {
    140       // clean house
    141       delete _measureFunction;
    142       delete _axesFinder;
    143    }
     115   // destructor
     116   ~Njettiness() {};
    144117   
    145118   // setAxes for Manual mode
    146    void setAxes(std::vector<fastjet::PseudoJet> myAxes);
     119   void setAxes(const std::vector<fastjet::PseudoJet> & myAxes);
    147120   
    148121   // Calculates and returns all TauComponents that user would want.
    149122   // This information is stored in _current_tau_components for later access as well.
    150    TauComponents getTauComponents(unsigned n_jets, const std::vector<fastjet::PseudoJet> & inputJets);
     123   TauComponents getTauComponents(unsigned n_jets, const std::vector<fastjet::PseudoJet> & inputJets) const;
    151124
    152125   // Calculates the value of N-subjettiness,
    153126   // but only returns the tau value from _current_tau_components
    154    double getTau(unsigned n_jets, const std::vector<fastjet::PseudoJet> & inputJets) {
     127   double getTau(unsigned n_jets, const std::vector<fastjet::PseudoJet> & inputJets) const {
    155128      return getTauComponents(n_jets, inputJets).tau();
    156129   }
    157    
    158    // returns enum information
    159    MeasureMode currentMeasureMode() { return _current_measure_mode;}
    160    AxesMode currentAxesMode() { return _current_axes_mode;}
    161130
    162131   // Return all relevant information about tau components
    163    TauComponents currentTauComponents() {return _current_tau_components;}
    164    
     132   TauComponents currentTauComponents() const {return _current_tau_components;}
    165133   // Return axes found by getTauComponents.
    166    std::vector<fastjet::PseudoJet> currentAxes() { return _currentAxes;}
     134   std::vector<fastjet::PseudoJet> currentAxes() const { return _currentAxes;}
    167135   // Return seedAxes used if onepass minimization (otherwise, same as currentAxes)
    168    std::vector<fastjet::PseudoJet> seedAxes() { return _seedAxes;}
     136   std::vector<fastjet::PseudoJet> seedAxes() const { return _seedAxes;}
     137   // Return jet partition found by getTauComponents.
     138   std::vector<fastjet::PseudoJet> currentJets() const {return _currentJets;}
     139   // Return beam partition found by getTauComponents.
     140   fastjet::PseudoJet currentBeam() const {return _currentBeam;}
    169141   
    170142   // partition inputs by Voronoi (each vector stores indices corresponding to inputJets)
    171    std::vector<std::list<int> > getPartition(const std::vector<fastjet::PseudoJet> & inputJets);
     143   std::vector<std::list<int> > getPartitionList(const std::vector<fastjet::PseudoJet> & inputJets) const;
    172144
    173    // partition inputs by Voronoi
    174    std::vector<fastjet::PseudoJet> getJets(const std::vector<fastjet::PseudoJet> & inputJets);
     145private:
     146   
     147   // Information about Axes and Measures to be Used
     148   // Implemented as SharedPtrs to avoid memory management headaches
     149   SharedPtr<const AxesDefinition> _axes_def;
     150   SharedPtr<const MeasureDefinition> _measure_def;
     151   
     152   // The chosen axes/measure mode workers
     153   // Implemented as SharedPtrs to avoid memory management headaches
     154   // TODO: make into a SharedPtr<const AxesFinder>?
     155   SharedPtr<MeasureFunction> _measureFunction;  // The chosen measure
     156   SharedPtr<AxesFinder> _startingAxesFinder;    // The initial axes finder
     157   SharedPtr<AxesFinder> _finishingAxesFinder;   // A possible minimization step
     158   
     159   // Information about the current information
     160   // Defined as mutables, so user should be aware that these change when getTau is called.
     161   mutable TauComponents _current_tau_components; //automatically set to have components of 0; these values will be set by the getTau function call
     162   mutable std::vector<fastjet::PseudoJet> _currentAxes; //axes found after minimization
     163   mutable std::vector<fastjet::PseudoJet> _seedAxes; // axes used prior to minimization (if applicable)
     164   mutable std::vector<fastjet::PseudoJet> _currentJets; //partitioning information
     165   mutable fastjet::PseudoJet _currentBeam; //return beam, if requested
     166   
     167   // created separate function to set MeasureFunction and AxesFinder in order to keep constructor cleaner.
     168   void setMeasureFunctionAndAxesFinder();
     169   
     170   // Convert old style enums into new style MeasureDefinition
     171   AxesDefinition* createAxesDef(AxesMode axes_mode) const;
     172   
     173   // Convert old style enums into new style MeasureDefinition
     174   MeasureDefinition* createMeasureDef(MeasureMode measure_mode, int num_para, double para1, double para2, double para3) const;
    175175
    176176};
    177 
     177   
    178178} // namespace contrib
    179179
  • external/fastjet/contribs/Nsubjettiness/NjettinessPlugin.cc

    r5b5a56b r35cdc46  
    55//  Jesse Thaler, Ken Van Tilburg, Christopher K. Vermilion, and TJ Wilkason
    66//
     7//  $Id: NjettinessPlugin.cc 663 2014-06-03 21:26:41Z jthaler $
    78//----------------------------------------------------------------------
    89// This file is part of FastJet contrib.
     
    2930
    3031
    31 // Constructor with same arguments as Nsubjettiness.
    32 NjettinessPlugin::NjettinessPlugin(int N, Njettiness::AxesMode axes_mode, Njettiness::MeasureMode measure_mode, double para1, double para2, double para3, double para4)
    33   : _N(N), _njettinessFinder(axes_mode, measure_mode, para1, para2, para3, para4) {}
    34 
    35 // Old constructor for compatibility
    36 NjettinessPlugin::NjettinessPlugin(int N, Njettiness::AxesMode mode, double beta, double R0, double Rcutoff)
    37    : _N(N), _njettinessFinder(mode, Njettiness::normalized_cutoff_measure, beta, R0, Rcutoff) {}
    3832
    3933std::string NjettinessPlugin::description() const {return "N-jettiness jet finder";}
    4034
     35
    4136// Clusters the particles according to the Njettiness jet algorithm
    42 // TODO: this code should be revisited to see if if can be made more clear.
     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
    4339void NjettinessPlugin::run_clustering(ClusterSequence& cs) const
    4440{
    4541   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   
    4650   _njettinessFinder.getTau(_N, particles);
    47    std::vector<std::list<int> > partition = _njettinessFinder.getPartition(particles);
     51
     52   std::vector<std::list<int> > partition = _njettinessFinder.getPartitionList(particles);
    4853
    4954   std::vector<fastjet::PseudoJet> jet_indices_for_extras;
    5055
    5156   // output clusterings for each jet
    52    for (size_t i = 0; i < partition.size(); ++i) {
     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
    5359      std::list<int>& indices = partition[i];
    5460      if (indices.size() == 0) continue;
     
    7076   }
    7177
     78   //HACK:  Re-reverse order of reading to match CS order
     79   reverse(jet_indices_for_extras.begin(),jet_indices_for_extras.end());
     80
    7281   NjettinessExtras * extras = new NjettinessExtras(_njettinessFinder.currentTauComponents(),jet_indices_for_extras,_njettinessFinder.currentAxes());
    7382   cs.plugin_associate_extras(std::auto_ptr<ClusterSequence::Extras>(extras));
  • external/fastjet/contribs/Nsubjettiness/NjettinessPlugin.hh

    r5b5a56b r35cdc46  
    1 // $Id$
    2 //
    31//  Nsubjettiness Package
    42//  Questions/Comments?  jthaler@jthaler.net
     
    75//  Jesse Thaler, Ken Van Tilburg, Christopher K. Vermilion, and TJ Wilkason
    86//
     7//  $Id: NjettinessPlugin.hh 671 2014-06-10 17:47:52Z jthaler $
    98//----------------------------------------------------------------------
    109// This file is part of FastJet contrib.
     
    4948// to similar information
    5049class NjettinessExtras : public ClusterSequence::Extras {
    51    private:
    52    
    53       TauComponents _tau_components;
    54       std::vector<fastjet::PseudoJet> _jets;
    55       std::vector<fastjet::PseudoJet> _axes;
    56      
    57       int labelOf(const fastjet::PseudoJet& jet) const {
    58          int thisJet = -1;
    59          for (unsigned int i = 0; i < _jets.size(); i++) {
    60             if (_jets[i].cluster_hist_index() == jet.cluster_hist_index()) {
    61                thisJet = i;
    62                break;
    63             }
    64          }
    65          return thisJet;
    66       }
    67      
     50   
    6851   public:
    6952      NjettinessExtras(TauComponents tau_components, std::vector<fastjet::PseudoJet> jets, std::vector<fastjet::PseudoJet> axes) : _tau_components(tau_components), _jets(jets), _axes(axes) {}
     
    7457      std::vector<fastjet::PseudoJet> axes() const {return _axes;}
    7558     
    76       double totalTau(const fastjet::PseudoJet& jet) const {
     59      double totalTau(const fastjet::PseudoJet& /*jet*/) const {
    7760         return _tau_components.tau();
    7861      }
     62     
    7963      double subTau(const fastjet::PseudoJet& jet) const {
    80          if (labelOf(jet) == -1) return NAN;
     64         if (labelOf(jet) == -1) return std::numeric_limits<double>::quiet_NaN(); // nonsense
    8165         return _tau_components.jet_pieces()[labelOf(jet)];
    8266      }
     
    9377         return (labelOf(jet) >= 0);
    9478      }
    95 
     79   
     80private:
     81   
     82   TauComponents _tau_components;
     83   std::vector<fastjet::PseudoJet> _jets;
     84   std::vector<fastjet::PseudoJet> _axes;
     85   
     86   int labelOf(const fastjet::PseudoJet& jet) const {
     87      int thisJet = -1;
     88      for (unsigned int i = 0; i < _jets.size(); i++) {
     89         if (_jets[i].cluster_hist_index() == jet.cluster_hist_index()) {
     90            thisJet = i;
     91            break;
     92         }
     93      }
     94      return thisJet;
     95   }
    9696};
    9797
     
    122122 * onepass_wta_kt_axes  : one-pass minimization seeded by wta_kt
    123123 *
    124  * For the unnormalized_measure, N-jettiness is defined as:
     124 * For the UnnormalizedMeasure(beta), N-jettiness is defined as:
    125125 *
    126126 * tau_N = Sum_{all particles i} p_T^i min((DR_i1)^beta, (DR_i2)^beta, ...)
     
    129129 *   and jet j.
    130130 *
    131  * The normalized_meausure include an extra parameter R0, and the various cutoff
     131 * The NormalizedMeausure include an extra parameter R0, and the various cutoff
    132132 * measures include an Rcutoff, which effectively defines an angular cutoff
    133133 * similar in effect to a cone-jet radius.
     
    138138public:
    139139
    140    NjettinessPlugin(int N,
    141                     Njettiness::AxesMode axes_mode,
    142                     Njettiness::MeasureMode measure_mode,
    143                     double para1 = NAN,
    144                     double para2 = NAN,
    145                     double para3 = NAN,
    146                     double para4 = NAN);
     140   // Constructor with same arguments as Nsubjettiness.
     141   NjettinessPlugin(int N,
     142                    const AxesDefinition & axes_def,
     143                    const MeasureDefinition & measure_def)
     144   : _njettinessFinder(axes_def, measure_def), _N(N) {}
     145   
     146   
     147   // Alternative constructors that define the measure via enums and parameters
     148   // These constructors are likely be removed
     149   NjettinessPlugin(int N,
     150                 Njettiness::AxesMode axes_mode,
     151                 Njettiness::MeasureMode measure_mode)
     152   : _njettinessFinder(axes_mode, measure_mode, 0), _N(N) {}
     153   
     154   
     155   NjettinessPlugin(int N,
     156                 Njettiness::AxesMode axes_mode,
     157                 Njettiness::MeasureMode measure_mode,
     158                 double para1)
     159   : _njettinessFinder(axes_mode, measure_mode, 1, para1), _N(N) {}
     160   
     161   
     162   NjettinessPlugin(int N,
     163                 Njettiness::AxesMode axes_mode,
     164                 Njettiness::MeasureMode measure_mode,
     165                 double para1,
     166                 double para2)
     167   : _njettinessFinder(axes_mode, measure_mode, 2, para1, para2), _N(N) {}
     168   
     169   
     170   NjettinessPlugin(int N,
     171                 Njettiness::AxesMode axes_mode,
     172                 Njettiness::MeasureMode measure_mode,
     173                 double para1,
     174                 double para2,
     175                 double para3)
     176   : _njettinessFinder(axes_mode, measure_mode, 3, para1, para2, para3), _N(N) {}
     177
    147178
    148179   // Old constructor for backwards compatibility with v1.0,
    149    // where normalized_cutoff_measure was the only option
     180   // where NormalizedCutoffMeasure was the only option
    150181   NjettinessPlugin(int N,
    151182                    Njettiness::AxesMode mode,
    152183                    double beta,
    153184                    double R0,
    154                     double Rcutoff=std::numeric_limits<double>::max());
     185                    double Rcutoff=std::numeric_limits<double>::max())
     186   : _njettinessFinder(mode, NormalizedCutoffMeasure(beta, R0, Rcutoff)), _N(N) {}
     187
    155188
    156189
     
    164197private:
    165198
     199   Njettiness _njettinessFinder;
    166200   int _N;
    167    mutable Njettiness _njettinessFinder; // TODO:  should muck with this so run_clustering can be const without this mutable
    168201
    169202};
  • external/fastjet/contribs/Nsubjettiness/Nsubjettiness.cc

    r5b5a56b r35cdc46  
    55//  Jesse Thaler, Ken Van Tilburg, Christopher K. Vermilion, and TJ Wilkason
    66//
     7//  $Id: Nsubjettiness.cc 597 2014-04-16 23:07:55Z jthaler $
    78//----------------------------------------------------------------------
    89// This file is part of FastJet contrib.
  • external/fastjet/contribs/Nsubjettiness/Nsubjettiness.hh

    r5b5a56b r35cdc46  
    55//  Jesse Thaler, Ken Van Tilburg, Christopher K. Vermilion, and TJ Wilkason
    66//
     7//  $Id: Nsubjettiness.hh 670 2014-06-06 01:24:42Z jthaler $
    78//----------------------------------------------------------------------
    89// This file is part of FastJet contrib.
     
    3233#include <string>
    3334#include <climits>
    34 
    3535
    3636FASTJET_BEGIN_NAMESPACE      // defined in fastjet/internal/base.hh
     
    4949public:
    5050
    51    // Main constructor, which takes N, axes/measure modes,
    52    // and up to four parameters for parameters (i.e. beta, Rcutoff, etc depending on measure)
     51   
     52   // Main constructor, which takes N, the AxesDefiniation, and the MeasureDefinition.
     53   // The Definitions are given in NjettinessDefinition.hh
     54   //
     55   // The recommended AxesDefinitions are (more are available as listed in the README
     56   // and defined in NjettinessDefinition.hh):
     57   //   KT_Axes             : exclusive kt axes
     58   //   WTA_KT_Axes         : exclusive kt with winner-take-all recombination
     59   //   OnePass_KT_Axes     : one-pass minimization from kt starting point
     60   //   OnePass_WTA_KT_Axes : one-pass min. from wta_kt starting point
     61   //
     62   // The recommended measure definitions are (with the corresponding parameters)
     63   //   NormalizedMeasure(beta,R0)
     64   //      :  This was the original N-subjettiness measure (dimensionless)
     65   //   UnnormalizedMeasure(beta)
     66   //      :  This is the new recommended default, same as above but without
     67   //      :  the normalization factor, and hence has units of GeV
     68   //   NormalizedCutoffMeasure(beta,R0,Rcutoff)
     69   //      :  Same as normalized_measure, but cuts off at Rcutoff
     70   //   UnnormalizedCutoffMeasure(beta,Rcutoff)
     71   //      :  Same as unnormalized_measure, but cuts off at Rcutoff
     72   Nsubjettiness(int N,
     73                 const AxesDefinition& axes_def,
     74                 const MeasureDefinition& measure_def)
     75   : _njettinessFinder(axes_def,measure_def), _N(N) {}
     76   
     77   
     78   // Alternative constructors that define the measure via enums and parameters
     79   // These constructors are likely be removed
     80   // Zero parameter arguments
     81   // (Currently, no measure uses this)
     82   Nsubjettiness(int N,
     83                 Njettiness::AxesMode axes_mode,
     84                 Njettiness::MeasureMode measure_mode)
     85   : _njettinessFinder(axes_mode, measure_mode, 0), _N(N) {}
     86
     87   // One parameter argument
     88   // (for unnormalized_measure, para1=beta)
    5389   Nsubjettiness(int N,
    5490                 Njettiness::AxesMode axes_mode,
    5591                 Njettiness::MeasureMode measure_mode,
    56                  double para1 = NAN,
    57                  double para2 = NAN,
    58                  double para3 = NAN,
    59                  double para4 = NAN)
    60    : _njettinessFinder(axes_mode, measure_mode, para1, para2, para3, para4), _N(N) {}
     92                 double para1)
     93   : _njettinessFinder(axes_mode, measure_mode, 1, para1), _N(N) {}
     94
     95   // Two parameter arguments
     96   // (for normalized_measure, para1=beta, para2=R0)
     97   // (for unnormalized_cutoff_measure, para1=beta, para2=Rcutoff)
     98   Nsubjettiness(int N,
     99                 Njettiness::AxesMode axes_mode,
     100                 Njettiness::MeasureMode measure_mode,
     101                 double para1,
     102                 double para2)
     103   : _njettinessFinder(axes_mode, measure_mode, 2, para1, para2), _N(N) {}
     104
     105   // Three parameter arguments
     106   // (for unnormalized_cutoff_measure, para1=beta, para2=R0, para3=Rcutoff)
     107   Nsubjettiness(int N,
     108                 Njettiness::AxesMode axes_mode,
     109                 Njettiness::MeasureMode measure_mode,
     110                 double para1,
     111                 double para2,
     112                 double para3)
     113   : _njettinessFinder(axes_mode, measure_mode, 3, para1, para2, para3), _N(N) {}
    61114
    62115   // Old constructor for backwards compatibility with v1.0,
     
    67120                 double R0,
    68121                 double Rcutoff=std::numeric_limits<double>::max())
    69    : _njettinessFinder(axes_mode, Njettiness::normalized_cutoff_measure, beta, R0, Rcutoff), _N(N) {}
    70 
    71 
     122   : _njettinessFinder(axes_mode, NormalizedCutoffMeasure(beta,R0,Rcutoff)), _N(N) {}
     123   
    72124   /// returns tau_N, measured on the constituents of this jet
    73125   double result(const PseudoJet& jet) const;
     
    86138   }
    87139   
     140   /// returns subjet regions found by result() calculation (these have valid constituents)
     141   /// Note that the axes and the subjets are not the same
     142   std::vector<fastjet::PseudoJet> currentSubjets() const {
     143      return _njettinessFinder.currentJets();
     144   }
     145
     146   /// returns components of tau_N without recalculating anything
     147   TauComponents currentTauComponents() const {
     148      return _njettinessFinder.currentTauComponents();
     149   }
     150   
    88151   // To set axes for manual use
    89    void setAxes(std::vector<fastjet::PseudoJet> myAxes) {
     152   void setAxes(const std::vector<fastjet::PseudoJet> & myAxes) {
    90153      // Cross check that manual axes are being used is in Njettiness
    91154        _njettinessFinder.setAxes(myAxes);
     
    95158private:
    96159   
    97    mutable Njettiness _njettinessFinder; // TODO:  should muck with this so result can be const without this mutable
     160   Njettiness _njettinessFinder; // TODO:  should muck with this so result can be const without this mutable
    98161   int _N;
    99162
     
    112175   NsubjettinessRatio(int N,
    113176                      int M,
     177                      const AxesDefinition & axes_def,
     178                      const MeasureDefinition & measure_def)
     179   : _nsub_numerator(N,axes_def,measure_def),
     180   _nsub_denominator(M,axes_def,measure_def) {}
     181   
     182   // Alternative constructor with enums and parameters
     183   // Again, likely to be removed
     184   NsubjettinessRatio(int N,
     185                      int M,
     186                      Njettiness::AxesMode axes_mode,
     187                      Njettiness::MeasureMode measure_mode)
     188   : _nsub_numerator(N, axes_mode, measure_mode),
     189   _nsub_denominator(M, axes_mode, measure_mode) {}
     190
     191   
     192   NsubjettinessRatio(int N,
     193                      int M,
    114194                      Njettiness::AxesMode axes_mode,
    115195                      Njettiness::MeasureMode measure_mode,
    116                       double para1 = NAN,
    117                       double para2 = NAN,
    118                       double para3 = NAN,
    119                       double para4 = NAN)
    120    : _nsub_numerator(N, axes_mode, measure_mode, para1, para2, para3, para4),
    121    _nsub_denominator(M, axes_mode, measure_mode, para1, para2, para3, para4) {}
    122 
    123    //returns tau_N/tau_M based off the input jet using result function from Nsubjettiness
     196                      double para1)
     197   : _nsub_numerator(N, axes_mode, measure_mode, para1),
     198   _nsub_denominator(M, axes_mode, measure_mode, para1) {}
     199
     200   NsubjettinessRatio(int N,
     201                      int M,
     202                      Njettiness::AxesMode axes_mode,
     203                      Njettiness::MeasureMode measure_mode,
     204                      double para1,
     205                      double para2)
     206   : _nsub_numerator(N, axes_mode, measure_mode, para1, para2),
     207   _nsub_denominator(M, axes_mode, measure_mode, para1, para2) {}
     208   
     209   NsubjettinessRatio(int N,
     210                      int M,
     211                      Njettiness::AxesMode axes_mode,
     212                      Njettiness::MeasureMode measure_mode,
     213                      double para1,
     214                      double para2,
     215                      double para3)
     216   : _nsub_numerator(N, axes_mode, measure_mode, para1, para2, para3),
     217   _nsub_denominator(M, axes_mode, measure_mode, para1, para2, para3) {}
     218
     219   //returns tau_N/tau_M based off the input jet using result function from Nsubjettiness
    124220   double result(const PseudoJet& jet) const;
    125221
  • external/fastjet/contribs/Nsubjettiness/VERSION

    r5b5a56b r35cdc46  
    1 1.1.0-beta4
     12.1.0
  • external/fastjet/contribs/Nsubjettiness/WinnerTakeAllRecombiner.cc

    r5b5a56b r35cdc46  
    55//  Jesse Thaler, Ken Van Tilburg, Christopher K. Vermilion, and TJ Wilkason
    66//
     7//  $Id: WinnerTakeAllRecombiner.cc 597 2014-04-16 23:07:55Z jthaler $
    78//----------------------------------------------------------------------
    89// This file is part of FastJet contrib.
     
    3334
    3435// recombine pa and pb by creating pab with energy of the sum of particle energies in the direction of the harder particle
    35 
    3636// updated recombiner to use more general form of a metric equal to E*(pT/E)^(alpha), which reduces to pT*cosh(rap)^(1-alpha)
    3737// alpha is specified by the user. The default is alpha = 1, which is the typical behavior. alpha = 2 provides a metric which more
  • external/fastjet/contribs/Nsubjettiness/WinnerTakeAllRecombiner.hh

    r5b5a56b r35cdc46  
    55//  Jesse Thaler, Ken Van Tilburg, Christopher K. Vermilion, and TJ Wilkason
    66//
     7//  $Id: WinnerTakeAllRecombiner.hh 670 2014-06-06 01:24:42Z jthaler $
    78//----------------------------------------------------------------------
    89// This file is part of FastJet contrib.
     
    5051   
    5152   /// recombine pa and pb and put result into pab
    52    virtual void recombine(const fastjet::PseudoJet & pa, const fastjet::PseudoJet & pb, fastjet::PseudoJet & pab) const;
     53   virtual void recombine(const fastjet::PseudoJet & pa,
     54                          const fastjet::PseudoJet & pb,
     55                          fastjet::PseudoJet & pab) const;
    5356
    5457private:
  • external/fastjet/internal/ClosestPair2D.hh

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id: ClosestPair2D.hh 2577 2011-09-13 15:11:38Z salam $
    3 //
    4 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     1//FJSTARTHEADER
     2// $Id: ClosestPair2D.hh 3433 2014-07-23 08:17:03Z salam $
     3//
     4// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931#ifndef __FASTJET_CLOSESTPAIR2D__HH__
  • external/fastjet/internal/ClosestPair2DBase.hh

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id: ClosestPair2DBase.hh 2577 2011-09-13 15:11:38Z salam $
     1//FJSTARTHEADER
     2// $Id: ClosestPair2DBase.hh 3433 2014-07-23 08:17:03Z salam $
    33//
    4 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     4// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931#ifndef __FASTJET_CLOSESTPAIR2DBASE__HH__
  • external/fastjet/internal/ClusterSequence_N2.icc

    r5b5a56b r35cdc46  
    44#include "fastjet/ClusterSequence.hh"
    55
    6 //STARTHEADER
     6//FJSTARTHEADER
    77// $Id: ClusterSequence_N2.cc 1351 2009-01-09 18:03:03Z salam $
    88//
    9 // Copyright (c) 2005-2009, Matteo Cacciari, Gavin Salam and Gregory Soyez
     9// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    1010//
    1111//----------------------------------------------------------------------
     
    1818//
    1919//  The algorithms that underlie FastJet have required considerable
    20 //  development and are described in hep-ph/0512210. If you use
     20//  development. They are described in the original FastJet paper,
     21//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    2122//  FastJet as part of work towards a scientific publication, please
    22 //  include a citation to the FastJet paper.
     23//  quote the version you use and include a citation to the manual and
     24//  optionally also to hep-ph/0512210.
    2325//
    2426//  FastJet is distributed in the hope that it will be useful,
     
    2830//
    2931//  You should have received a copy of the GNU General Public License
    30 //  along with FastJet; if not, write to the Free Software
    31 //  Foundation, Inc.:
    32 //      59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
     32//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    3333//----------------------------------------------------------------------
    34 //ENDHEADER
     34//FJENDHEADER
    3535
    3636//----------------------------------------------------------------------
  • external/fastjet/internal/Dnn2piCylinder.hh

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id: Dnn2piCylinder.hh 2577 2011-09-13 15:11:38Z salam $
    3 //
    4 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     1//FJSTARTHEADER
     2// $Id: Dnn2piCylinder.hh 3442 2014-07-24 07:20:49Z salam $
     3//
     4// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931
     
    7375  /// Returns the index of  the nearest neighbour of point labelled
    7476  /// by ii (assumes ii is valid)
    75   int NearestNeighbourIndex(const int & ii) const ;
     77  int NearestNeighbourIndex(const int ii) const ;
    7678
    7779  /// Returns the distance to the nearest neighbour of point labelled
    7880  /// by index ii (assumes ii is valid)
    79   double NearestNeighbourDistance(const int & ii) const ;
     81  double NearestNeighbourDistance(const int ii) const ;
    8082
    8183  /// Returns true iff the given index corresponds to a point that
    8284  /// exists in the DNN structure (meaning that it has been added, and
    8385  /// not removed in the meantime)
    84   bool Valid(const int & index) const;
     86  bool Valid(const int index) const;
    8587
    8688  void RemoveAndAddPoints(const std::vector<int> & indices_to_remove,
     
    216218/// initialised the class with instructions to ignore this problem the
    217219/// program will detect and ignore it, or crash.
    218 inline int Dnn2piCylinder::NearestNeighbourIndex(const int & current) const {
     220inline int Dnn2piCylinder::NearestNeighbourIndex(const int current) const {
    219221  int main_index = _mirror_info[current].main_index;
    220222  int mirror_index = _mirror_info[current].mirror_index;
     
    241243}
    242244
    243 inline double Dnn2piCylinder::NearestNeighbourDistance(const int & current) const {
     245inline double Dnn2piCylinder::NearestNeighbourDistance(const int current) const {
    244246  int main_index = _mirror_info[current].main_index;
    245247  int mirror_index = _mirror_info[current].mirror_index;
     
    256258}
    257259
    258 inline bool Dnn2piCylinder::Valid(const int & index) const {
     260inline bool Dnn2piCylinder::Valid(const int index) const {
    259261  return (_DNN->Valid(_mirror_info[index].main_index));
    260262}
  • external/fastjet/internal/Dnn3piCylinder.hh

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id: Dnn3piCylinder.hh 2577 2011-09-13 15:11:38Z salam $
    3 //
    4 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     1//FJSTARTHEADER
     2// $Id: Dnn3piCylinder.hh 3442 2014-07-24 07:20:49Z salam $
     3//
     4// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931
     
    7072  /// Returns the index of  the nearest neighbour of point labelled
    7173  /// by ii (assumes ii is valid)
    72   int NearestNeighbourIndex(const int & ii) const ;
     74  int NearestNeighbourIndex(const int ii) const ;
    7375
    7476  /// Returns the distance to the nearest neighbour of point labelled
    7577  /// by index ii (assumes ii is valid)
    76   double NearestNeighbourDistance(const int & ii) const ;
     78  double NearestNeighbourDistance(const int ii) const ;
    7779
    7880  /// Returns true iff the given index corresponds to a point that
    7981  /// exists in the DNN structure (meaning that it has been added, and
    8082  /// not removed in the meantime)
    81   bool Valid(const int & index) const;
     83  bool Valid(const int index) const;
    8284
    8385  void RemoveAndAddPoints(const std::vector<int> & indices_to_remove,
     
    204206/// initialised the class with instructions to ignore this problem the
    205207/// program will detect and ignore it, or crash.
    206 inline int Dnn3piCylinder::NearestNeighbourIndex(const int & current) const {
     208inline int Dnn3piCylinder::NearestNeighbourIndex(const int current) const {
    207209  int main_index = _mirror_info[current].main_index;
    208210  int mirror_index = _mirror_info[current].mirror_index;
     
    229231}
    230232
    231 inline double Dnn3piCylinder::NearestNeighbourDistance(const int & current) const {
     233inline double Dnn3piCylinder::NearestNeighbourDistance(const int current) const {
    232234  int main_index = _mirror_info[current].main_index;
    233235  int mirror_index = _mirror_info[current].mirror_index;
     
    244246}
    245247
    246 inline bool Dnn3piCylinder::Valid(const int & index) const {
     248inline bool Dnn3piCylinder::Valid(const int index) const {
    247249  return (_DNN->Valid(_mirror_info[index].main_index));
    248250}
  • external/fastjet/internal/Dnn4piCylinder.hh

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id: Dnn4piCylinder.hh 2577 2011-09-13 15:11:38Z salam $
     1//FJSTARTHEADER
     2// $Id: Dnn4piCylinder.hh 3442 2014-07-24 07:20:49Z salam $
    33//
    4 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     4// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931
     
    5759  /// Returns the index of  the nearest neighbour of point labelled
    5860  /// by ii (assumes ii is valid)
    59   int NearestNeighbourIndex(const int & ii) const ;
     61  int NearestNeighbourIndex(const int ii) const ;
    6062
    6163  /// Returns the distance to the nearest neighbour of point labelled
    6264  /// by index ii (assumes ii is valid)
    63   double NearestNeighbourDistance(const int & ii) const ;
     65  double NearestNeighbourDistance(const int ii) const ;
    6466
    6567  /// Returns true iff the given index corresponds to a point that
    6668  /// exists in the DNN structure (meaning that it has been added, and
    6769  /// not removed in the meantime)
    68   bool Valid(const int & index) const;
     70  bool Valid(const int index) const;
    6971
    7072  void RemoveAndAddPoints(const std::vector<int> & indices_to_remove,
     
    98100// functions defined above
    99101
    100 inline int Dnn4piCylinder::NearestNeighbourIndex(const int & current) const {
     102inline int Dnn4piCylinder::NearestNeighbourIndex(const int current) const {
    101103  return (_DNN1->NearestNeighbourDistance(current) <
    102104          _DNN2->NearestNeighbourDistance(current)) ?
     
    105107}
    106108
    107 inline double Dnn4piCylinder::NearestNeighbourDistance(const int & current) const {
     109inline double Dnn4piCylinder::NearestNeighbourDistance(const int current) const {
    108110  return (_DNN1->NearestNeighbourDistance(current) <
    109111          _DNN2->NearestNeighbourDistance(current)) ?
     
    112114}
    113115
    114 inline bool Dnn4piCylinder::Valid(const int & index) const {
     116inline bool Dnn4piCylinder::Valid(const int index) const {
    115117  return (_DNN1->Valid(index) && _DNN2->Valid(index));
    116118}
  • external/fastjet/internal/DnnPlane.hh

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id: DnnPlane.hh 2577 2011-09-13 15:11:38Z salam $
    3 //
    4 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     1//FJSTARTHEADER
     2// $Id: DnnPlane.hh 3442 2014-07-24 07:20:49Z salam $
     3//
     4// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931
     
    4446/// class derived from DynamicNearestNeighbours that provides an
    4547/// implementation for the Euclidean plane
     48///
     49/// This class that uses CGAL Delaunay triangulation for most of the
     50/// work (it allows for easy and efficient removal and addition of
     51/// points and circulation over a point's neighbours). The treatment
     52/// of coincident points is not supported by CGAL and is implemented
     53/// according to the method specified in
     54/// issue-tracker/2012-02-CGAL-coincident/METHOD
    4655/// \endif
    4756class DnnPlane : public DynamicNearestNeighbours {
     
    5766  /// Returns the index of  the nearest neighbour of point labelled
    5867  /// by ii (assumes ii is valid)
    59   int NearestNeighbourIndex(const int & ii) const ;
     68  int NearestNeighbourIndex(const int ii) const ;
    6069
    6170  /// Returns the distance to the nearest neighbour of point labelled
    6271  /// by index ii (assumes ii is valid)
    63   double NearestNeighbourDistance(const int & ii) const ;
     72  double NearestNeighbourDistance(const int ii) const ;
    6473
    6574  /// Returns true iff the given index corresponds to a point that
    6675  /// exists in the DNN structure (meaning that it has been added, and
    6776  /// not removed in the meantime)
    68   bool Valid(const int & index) const;
     77  bool Valid(const int index) const;
    6978
    7079  void RemoveAndAddPoints(const std::vector<int> & indices_to_remove,
     
    8089  double phi(const int i) const;
    8190
    82  private:
     91private:
    8392
    8493  /// Structure containing a vertex_handle and cached information on
     
    8897    double NNdistance;
    8998    int NNindex;
     99    int coincidence;  // ==vertex->info.val() if no coincidence
     100                      // points to the coinciding SV in case of coincidence
    90101    // later on for cylinder put a second vertex?
    91102  };
     
    95106  bool _verbose;
    96107
    97   static const bool _crash_on_coincidence = true;
    98   //static const bool _crash_on_coincidence = false;
     108  //static const bool _crash_on_coincidence = true;
     109  static const bool _crash_on_coincidence = false;
    99110
    100111  Triangulation _TR; /// CGAL object for dealing with triangulations
     
    111122  /// Determines the index and distance of the nearest neighbour to
    112123  /// point j and puts the information into the _supervertex entry for j
    113   void _SetNearest(const int & j);
     124  void _SetNearest(const int j);
    114125
    115126  //----------------------------------------------------------------------
     
    123134  /// Note that j is NOT pushed onto indices_of_updated_neighbours --
    124135  /// if you want it there, put it there yourself.
    125   void _SetAndUpdateNearest(const int & j,
     136  void _SetAndUpdateNearest(const int j,
    126137                            std::vector<int> & indices_of_updated_neighbours);
    127138
    128139  /// given a vertex_handle returned by CGAL on insertion of a new
    129   /// points, crash if it turns out that it corresponds to a vertex
    130   /// that we already knew about (usually because two points coincide)
    131   void _CrashIfVertexPresent(const Vertex_handle & vertex,
    132                              const int & its_index);
    133 
     140  /// points, returns the coinciding vertex's value if it turns out
     141  /// that it corresponds to a vertex that we already knew about
     142  /// (usually because two points coincide)
     143  int _CheckIfVertexPresent(const Vertex_handle & vertex,
     144                            const int its_index);
     145
     146  //----------------------------------------------------------------------
     147  /// if the distance between 'pref' and 'candidate' is smaller (or
     148  /// equal) than the one between 'pref' and 'near', return true and
     149  /// set 'mindist' to that distance. Note that it is assumed that
     150  /// 'mindist' is the euclidian distance between 'pref' and 'near'
     151  ///
     152  /// Note that the 'near' point is passed through its vertex rather
     153  /// than as a point. This allows us to handle cases where we have no min
     154  /// yet (near is the infinite vertex)
     155  inline bool _is_closer_to(const Point &pref,
     156                            const Point &candidate,
     157                            const Vertex_handle &near,
     158                            double & dist,
     159                            double & mindist){
     160    dist = _euclid_distance(pref, candidate);
     161    return _is_closer_to_with_hint(pref, candidate, near, dist, mindist);
     162  }
     163
     164  /// same as '_is_closer_to' except that 'dist' already contains the
     165  /// distance between 'pref' and 'candidate'
     166  inline bool _is_closer_to_with_hint(const Point &pref,
     167                                      const Point &candidate,
     168                                      const Vertex_handle &near,
     169                                      const double & dist,
     170                                      double & mindist){
     171   
     172    // check if 'dist', the pre-computed distance between 'candidate'
     173    // and 'pref' is smaller than the distance between 'pref' and its
     174    // currently registered nearest neighbour 'near' (and update
     175    // things if it is)
     176    //
     177    // Interestingly enough, it has to be pointed out that the use of
     178    // 'abs' instead of 'std::abs' returns wrong results (apparently
     179    // ints without any compiler warning)
     180    //
     181    // The (near != NULL) test is there for one single reason: when
     182    // checking that a newly inserted point is not closer than a
     183    // previous NN, if that distance comparison involves a "nearly
     184    // degenerate" distance we need to access near->point. But
     185    // sometimes, in the course of RemoveAndAddPoints, its previous NN
     186    // has been deleted and its vertex (corresponding to 'near') set
     187    // to NULL. This is not a problem as all points having a deleted
     188    // point as NN will have their NN explicitly recomputed at the end
     189    // of RemoveAndAddPoints so here we should just make sure there is
     190    // no crash... that's done by checking (near != NULL)
     191    if ((std::abs(dist-mindist)<DISTANCE_FOR_CGAL_CHECKS) &&
     192        (near != NULL) &&
     193        (_euclid_distance(candidate, near->point())<DISTANCE_FOR_CGAL_CHECKS)){
     194      // we're in a situation where there might be a rounding issue,
     195      // use CGAL's distance computation to get it right
     196      //
     197      // Note that in the test right above,
     198      // (abs(dist-mindist)<1e-12) guarantees that the current
     199      // nearest point is not the infinite vertex and thus
     200      // nearest->point() is not ill-defined
     201      if (_verbose) std::cout << "using CGAL's distance ordering" << std::endl;
     202      if (CGAL::compare_distance_to_point(pref, candidate, near->point())!=CGAL::LARGER){
     203        mindist = dist;
     204        return true;
     205      }
     206    } else if (dist <= mindist) {
     207      // Note that the use of a <= in the above expression (instead of
     208      // a strict ordering <) is important in one case: when checking
     209      // if a new point is the new NN of one of the points in its
     210      // neighbourhood, in case of distances being ==, we are sure
     211      // that 'candidate' is in a cell adjacent to 'pref' while it may
     212      // no longer be the case for 'near'
     213      mindist = dist;
     214      return true;
     215    }
     216   
     217    return false;
     218  }
     219
     220  /// if a distance between a point and 2 others is smaller than this
     221  /// and the distance between the two points is also smaller than this
     222  /// then use CGAL to compare the distances.
     223  static const double DISTANCE_FOR_CGAL_CHECKS; 
     224 
    134225};
    135226
     
    138229// functions defined above
    139230
    140 inline int DnnPlane::NearestNeighbourIndex(const int & ii) const {
     231inline int DnnPlane::NearestNeighbourIndex(const int ii) const {
    141232  return _supervertex[ii].NNindex;}
    142233
    143 inline double DnnPlane::NearestNeighbourDistance(const int & ii) const {
     234inline double DnnPlane::NearestNeighbourDistance(const int ii) const {
    144235  return _supervertex[ii].NNdistance;}
    145236
    146 inline bool DnnPlane::Valid(const int & index) const {
     237inline bool DnnPlane::Valid(const int index) const {
    147238  if (index >= 0 && index < static_cast<int>(_supervertex.size())) {
    148239    return (_supervertex[index].vertex != NULL);} else {return false;} }
  • external/fastjet/internal/DynamicNearestNeighbours.hh

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id: DynamicNearestNeighbours.hh 2687 2011-11-14 11:17:51Z soyez $
     1//FJSTARTHEADER
     2// $Id: DynamicNearestNeighbours.hh 3619 2014-08-13 14:17:19Z salam $
    33//
    4 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     4// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931
     
    3739#include<cassert>
    3840#include "fastjet/internal/numconsts.hh"
     41#include "fastjet/Error.hh"
    3942
    4043FASTJET_BEGIN_NAMESPACE      // defined in fastjet/internal/base.hh
     
    6871/// Nearest Neighbours code
    6972/// \endif
    70 class DnnError {
     73class DnnError : public Error {
    7174public:
    7275  // constructors
    73   DnnError() {;};
    74   DnnError(const std::string & message_in) {
    75     _message = message_in; std::cerr << message_in << std::endl;};
    76 
    77   std::string message() const {return _message;};
    78 
    79 private:
    80   std::string _message;
     76  //DnnError() {}
     77  DnnError(const std::string & message_in) : Error(message_in) {}
    8178};
    8279
     
    112109  /// Returns the index of the nearest neighbour of point labelled
    113110  /// by ii (assumes ii is valid)
    114   virtual int NearestNeighbourIndex(const int & ii) const = 0;
     111  virtual int NearestNeighbourIndex(const int ii) const = 0;
    115112
    116113  /// Returns the distance to the nearest neighbour of point labelled
    117114  /// by index ii (assumes ii is valid)
    118   virtual double NearestNeighbourDistance(const int & ii) const = 0;
     115  virtual double NearestNeighbourDistance(const int ii) const = 0;
    119116
    120117  /// Returns true iff the given index corresponds to a point that
    121118  /// exists in the DNN structure (meaning that it has been added, and
    122119  /// not removed in the meantime)
    123   virtual bool Valid(const int & index) const = 0;
     120  virtual bool Valid(const int index) const = 0;
    124121
    125122  /// remove the points labelled by the std::vector indices_to_remove, and
     
    141138  /// Remove the point labelled by index and return the list of
    142139  /// points whose nearest neighbours have changed in the process
    143   inline void RemovePoint (const int & index,
     140  inline void RemovePoint (const int index,
    144141                           std::vector<int> & indices_of_updated_neighbours) {
    145142    std::vector<int> indices_added;
     
    158155  /// point).
    159156  inline void RemoveCombinedAddCombination(
    160                         const int & index1, const int & index2,
     157                        const int index1, const int index2,
    161158                        const EtaPhi & newpoint,
    162159                        int & index3,
  • external/fastjet/internal/IsBase.hh

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id: IsBase.hh 3071 2013-04-01 12:52:46Z cacciari $
     1//FJSTARTHEADER
     2// $Id: IsBase.hh 3433 2014-07-23 08:17:03Z salam $
    33//
    4 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     4// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931#ifndef __FASTJET_INTERNAL_IS_BASE_HH__
  • external/fastjet/internal/LimitedWarning.hh

    r5b5a56b r35cdc46  
    22#define __FASTJET_INTERNALLIMITEDWARNING_HH__
    33
    4 //STARTHEADER
    5 // $Id: LimitedWarning.hh 2577 2011-09-13 15:11:38Z salam $
     4//FJSTARTHEADER
     5// $Id: LimitedWarning.hh 3433 2014-07-23 08:17:03Z salam $
    66//
    7 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     7// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    88//
    99//----------------------------------------------------------------------
     
    1616//
    1717//  The algorithms that underlie FastJet have required considerable
    18 //  development and are described in hep-ph/0512210. If you use
     18//  development. They are described in the original FastJet paper,
     19//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1920//  FastJet as part of work towards a scientific publication, please
    20 //  include a citation to the FastJet paper.
     21//  quote the version you use and include a citation to the manual and
     22//  optionally also to hep-ph/0512210.
    2123//
    2224//  FastJet is distributed in the hope that it will be useful,
     
    2830//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2931//----------------------------------------------------------------------
    30 //ENDHEADER
     32//FJENDHEADER
    3133
    3234
  • external/fastjet/internal/MinHeap.hh

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id: MinHeap.hh 2577 2011-09-13 15:11:38Z salam $
     1//FJSTARTHEADER
     2// $Id: MinHeap.hh 3433 2014-07-23 08:17:03Z salam $
    33//
    4 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     4// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931#ifndef __FASTJET_MINHEAP__HH__
     
    5052  /// expansion to a maximum size max_size;
    5153  MinHeap (const std::vector<double> & values, unsigned int max_size) :
    52     _heap(max_size) {_initialise(values);};
     54    _heap(max_size) {initialise(values);}
     55
     56  /// do the minimal setup for a MinHeap that can reach max_size;
     57  /// initialisation must be performed later with the actual values.
     58  MinHeap (unsigned int max_size) : _heap(max_size) {}
    5359
    5460  /// constructor in which the the maximum size is the size of the values array
    5561  MinHeap (const std::vector<double> & values) :
    56     _heap(values.size()) {_initialise(values);};
    57  
     62    _heap(values.size()) {initialise(values);}
     63
     64  /// initialise the heap with the supplied values. Should only be called if
     65  /// the constructor did not supply values.
     66  void initialise(const std::vector<double> & values);
     67
    5868  /// return the location of the minimal value on the heap
    5969  inline unsigned int minloc() const {
    60     return (_heap[0].minloc) - &(_heap[0]);};
     70    return (_heap[0].minloc) - &(_heap[0]);}
    6171 
    6272  /// return the minimal value on the heap
    63   inline double       minval() const {return _heap[0].minloc->value;};
     73  inline double       minval() const {return _heap[0].minloc->value;}
    6474
    65   inline double operator[](int i) const {return _heap[i].value;};
     75  inline double operator[](int i) const {return _heap[i].value;}
    6676
    6777  /// remove the value at the specified location (i.e. replace it with
     
    8292  std::vector<ValueLoc> _heap;
    8393
    84   void _initialise(const std::vector<double> & values);
    8594
    8695
  • external/fastjet/internal/SearchTree.hh

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id: SearchTree.hh 3107 2013-05-03 15:47:47Z salam $
     1//FJSTARTHEADER
     2// $Id: SearchTree.hh 3433 2014-07-23 08:17:03Z salam $
    33//
    4 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     4// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931
     
    188190public:
    189191
    190   // so that it can access out _node object;
     192  // so that it can access our _node object;
    191193  // note: "class U" needed for clang (v1.1 branches/release_27) compilation
    192   template<class U> friend class SearchTree<U>::const_circulator;
     194  // 2014-07-22: as reported by Torbjorn Sjostrand,
     195  // the next line was giving a warning with Apple LLVM version 5.1 (clang-503.0.40) (based on LLVM 3.4svn)
     196  // (dependent nested name specifier 'SearchTree<U>::' for friend class declaration is not supported)
     197  // Just commenting it out, things still seem to work; same with a template of type T
     198  //template<class U> friend class SearchTree<U>::const_circulator;
     199  friend class SearchTree<T>::const_circulator;
    193200  friend class SearchTree<T>;
    194201
  • external/fastjet/internal/Triangulation.hh

    r5b5a56b r35cdc46  
    33#define __FASTJET_TRIANGULATION__
    44
    5 //STARTHEADER
    6 // $Id: Triangulation.hh 2595 2011-09-23 09:05:04Z salam $
     5//FJSTARTHEADER
     6// $Id: Triangulation.hh 3433 2014-07-23 08:17:03Z salam $
    77//
    8 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     8// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    99//
    1010//----------------------------------------------------------------------
     
    1717//
    1818//  The algorithms that underlie FastJet have required considerable
    19 //  development and are described in hep-ph/0512210. If you use
     19//  development. They are described in the original FastJet paper,
     20//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    2021//  FastJet as part of work towards a scientific publication, please
    21 //  include a citation to the FastJet paper.
     22//  quote the version you use and include a citation to the manual and
     23//  optionally also to hep-ph/0512210.
    2224//
    2325//  FastJet is distributed in the hope that it will be useful,
     
    2931//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    3032//----------------------------------------------------------------------
    31 //ENDHEADER
     33//FJENDHEADER
    3234
    3335
  • external/fastjet/internal/Voronoi.hh

    r5b5a56b r35cdc46  
    22#define __FASTJET__VORONOI_H__
    33
    4 //STARTHEADER
    5 // $Id: Voronoi.hh 2686 2011-11-14 09:28:22Z soyez $
    6 //
    7 // Copyright (c) 1994 by AT&T Bell Laboratories (see below)
    8 //
     4//FJSTARTHEADER
     5// $Id: Voronoi.hh 3433 2014-07-23 08:17:03Z salam $
     6//
     7// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    98//
    109//----------------------------------------------------------------------
    11 // This file is included as part of FastJet but was mostly written by
    12 // S. Fortune in C, put into C++ with memory management by S
    13 // O'Sullivan, and with further interface and memeory management
    14 // modifications by Gregory Soyez.
    15 //
    16 // Permission to use, copy, modify, and distribute this software for
    17 // any purpose without fee is hereby granted, provided that this
    18 // entire notice is included in all copies of any software which is or
    19 // includes a copy or modification of this software and in all copies
    20 // of the supporting documentation for such software. THIS SOFTWARE IS
    21 // BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED WARRANTY.
    22 // IN PARTICULAR, NEITHER THE AUTHORS NOR AT&T MAKE ANY REPRESENTATION
    23 // OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY OF THIS
    24 // SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
    25 //
     10// This file is part of FastJet.
     11//
     12//  FastJet is free software; you can redistribute it and/or modify
     13//  it under the terms of the GNU General Public License as published by
     14//  the Free Software Foundation; either version 2 of the License, or
     15//  (at your option) any later version.
     16//
     17//  The algorithms that underlie FastJet have required considerable
     18//  development. They are described in the original FastJet paper,
     19//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
     20//  FastJet as part of work towards a scientific publication, please
     21//  quote the version you use and include a citation to the manual and
     22//  optionally also to hep-ph/0512210.
     23//
     24//  FastJet is distributed in the hope that it will be useful,
     25//  but WITHOUT ANY WARRANTY; without even the implied warranty of
     26//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     27//  GNU General Public License for more details.
     28//
     29//  You should have received a copy of the GNU General Public License
     30//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2631//----------------------------------------------------------------------
    27 //ENDHEADER
     32//FJENDHEADER
    2833
    2934
  • external/fastjet/internal/base.hh

    r5b5a56b r35cdc46  
    11
    2 //STARTHEADER
    3 // $Id: base.hh 2717 2011-11-17 14:15:46Z salam $
     2//FJSTARTHEADER
     3// $Id: base.hh 3433 2014-07-23 08:17:03Z salam $
    44//
    5 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     5// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    66//
    77//----------------------------------------------------------------------
     
    1414//
    1515//  The algorithms that underlie FastJet have required considerable
    16 //  development and are described in hep-ph/0512210. If you use
     16//  development. They are described in the original FastJet paper,
     17//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1718//  FastJet as part of work towards a scientific publication, please
    18 //  include a citation to the FastJet paper.
     19//  quote the version you use and include a citation to the manual and
     20//  optionally also to hep-ph/0512210.
    1921//
    2022//  FastJet is distributed in the hope that it will be useful,
     
    2628//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2729//----------------------------------------------------------------------
    28 //ENDHEADER
     30//FJENDHEADER
    2931
    3032#ifndef __FASTJET_FASTJET_BASE_HH__
  • external/fastjet/internal/numconsts.hh

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id: numconsts.hh 2577 2011-09-13 15:11:38Z salam $
     1//FJSTARTHEADER
     2// $Id: numconsts.hh 3433 2014-07-23 08:17:03Z salam $
    33//
    4 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     4// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931
  • external/fastjet/plugins/ATLASCone/ATLASConePlugin.cc

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id$
     1//FJSTARTHEADER
     2// $Id: ATLASConePlugin.cc 3433 2014-07-23 08:17:03Z salam $
    33//
    4 // Copyright (c) 2007-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     4// Copyright (c) 2007-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931// fastjet stuff
  • external/fastjet/plugins/ATLASCone/fastjet/ATLASConePlugin.hh

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id: ATLASConePlugin.hh 2758 2011-11-24 08:31:58Z soyez $
     1//FJSTARTHEADER
     2// $Id: ATLASConePlugin.hh 3433 2014-07-23 08:17:03Z salam $
    33//
    4 // Copyright (c) 2007-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     4// Copyright (c) 2007-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931// Note on the implementation:
  • external/fastjet/plugins/CDFCones/CDFJetCluPlugin.cc

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id$
     1//FJSTARTHEADER
     2// $Id: CDFJetCluPlugin.cc 3433 2014-07-23 08:17:03Z salam $
    33//
    4 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     4// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931#include "fastjet/CDFJetCluPlugin.hh"
  • external/fastjet/plugins/CDFCones/CDFMidPointPlugin.cc

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id$
     1//FJSTARTHEADER
     2// $Id: CDFMidPointPlugin.cc 3433 2014-07-23 08:17:03Z salam $
    33//
    4 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     4// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931#include "fastjet/CDFMidPointPlugin.hh"
  • external/fastjet/plugins/CDFCones/JetCluAlgorithm.cc

    r5b5a56b r35cdc46  
    1111// History of changes compared to the original JetCluAlgorithm.cc file
    1212//
     13// 2014-08-13 Matteo Cacciari and Gavin Salam
     14//        * commented out towers variable in JetCluAlgorithm::buildPreClusters
     15//          interface to avoid compiler warning
     16//
    1317// 2011-11-14  Gregory Soyez  <soyez@fastjet.fr>
    1418//
     
    5559}
    5660
    57 void JetCluAlgorithm::buildPreClusters(std::vector<Cluster>& seedTowers, std::vector<PhysicsTower>& towers,
     61// MC+GPS 2014-08-13, commented out the towers variable to avoid an
     62// unused variable warning
     63void JetCluAlgorithm::buildPreClusters(std::vector<Cluster>& seedTowers, std::vector<PhysicsTower>& /*towers*/,
    5864                                       std::vector<Cluster>& preClusters)
    5965{
  • external/fastjet/plugins/CDFCones/MidPointAlgorithm.cc

    r5b5a56b r35cdc46  
    1111// History of changes compared to the original MidPointAlgorithm.cc file
    1212//
     13// 2014-08-13 Matteo Cacciari and Gavin Salam
     14//        * changed a number of int -> unsigned (and in one case
     15//          added explicit conversion to int) to eliminate
     16//          long-standing compiler warnings
     17//
    1318// 2009-01-17  Gregory Soyez  <soyez@fastjet.fr>
    1419//
     
    6873  std::vector< std::vector<bool> > distanceOK;
    6974  distanceOK.resize(stableCones.size() - 1);
    70   for(int nCluster1 = 1; nCluster1 < stableCones.size(); nCluster1++){
     75  // MC+GPS 2014-08-13, replaced int with unsigned
     76  for(unsigned nCluster1 = 1; nCluster1 < stableCones.size(); nCluster1++){
    7177    distanceOK[nCluster1 - 1].resize(nCluster1);
    7278    double cluster1Rapidity = stableCones[nCluster1].fourVector.y();
    7379    double cluster1Phi      = stableCones[nCluster1].fourVector.phi();
    74     for(int nCluster2 = 0; nCluster2 < nCluster1; nCluster2++){
     80    // MC+GPS 2014-08-13, replaced int with unsigned
     81    for(unsigned nCluster2 = 0; nCluster2 < nCluster1; nCluster2++){
    7582      double cluster2Rapidity = stableCones[nCluster2].fourVector.y();
    7683      double cluster2Phi      = stableCones[nCluster2].fourVector.phi();
     
    94101  // Loop over all combinations. Calculate MidPoint. Make midPointClusters.
    95102  bool reduceConeSize = false;
    96   for(int iPair = 0; iPair < pairs.size(); iPair++){
     103  // MC+GPS 2014-08-13, replaced int with unsigned
     104  for(unsigned iPair = 0; iPair < pairs.size(); iPair++){
    97105    // Calculate rapidity, phi and pT of MidPoint.
    98106    LorentzVector midPoint(0,0,0,0);
    99     for(int iPairMember = 0; iPairMember < pairs[iPair].size(); iPairMember++)
     107    // MC+GPS 2014-08-13, replaced int with unsigned
     108    for(unsigned iPairMember = 0; iPairMember < pairs[iPair].size(); iPairMember++)
    100109      midPoint.add(stableCones[pairs[iPair][iPairMember]].fourVector);
    101110    iterateCone(midPoint.y(),midPoint.phi(),midPoint.pt(),towers,stableCones,reduceConeSize);
     
    174183  if(testPair.size())
    175184    nextClusterStart = testPair.back() + 1;
    176   for(int nextCluster = nextClusterStart; nextCluster <= distanceOK.size(); nextCluster++){
     185  // MC+GPS 2014-08-13, replaced int nextCluster with unsigned
     186  for(unsigned nextCluster = nextClusterStart; nextCluster <= distanceOK.size(); nextCluster++){
    177187    // Is new SeedCone less than 2*_coneRadius apart from all clusters in testPair?
    178188    bool addCluster = true;
    179     for(int iCluster = 0; iCluster < testPair.size() && addCluster; iCluster++)
     189    // MC+GPS 2014-08-13, replaced int iCluster with unsigned
     190    for(unsigned iCluster = 0; iCluster < testPair.size() && addCluster; iCluster++)
    180191      if(!distanceOK[nextCluster - 1][testPair[iCluster]])
    181192        addCluster = false;
     
    187198        pairs.push_back(testPair);
    188199      // If not bigger than allowed, find more clusters within 2*_coneRadius.
    189       if(testPair.size() < maxClustersInPair)
     200      // GPS+MC 2014-08-13, replaced testPair.size() with int(testPair.size())
     201      if(int(testPair.size()) < maxClustersInPair)
    190202        addClustersToPairs(testPair,pairs,distanceOK,maxClustersInPair);
    191203      // All combinations containing testPair found. Remove last element.
  • external/fastjet/plugins/CDFCones/fastjet/CDFJetCluPlugin.hh

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id: CDFJetCluPlugin.hh 2758 2011-11-24 08:31:58Z soyez $
     1//FJSTARTHEADER
     2// $Id: CDFJetCluPlugin.hh 3433 2014-07-23 08:17:03Z salam $
    33//
    4 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     4// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931#ifndef __CDFJETCLUPLUGIN_HH__
  • external/fastjet/plugins/CDFCones/fastjet/CDFMidPointPlugin.hh

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id: CDFMidPointPlugin.hh 2758 2011-11-24 08:31:58Z soyez $
     1//FJSTARTHEADER
     2// $Id: CDFMidPointPlugin.hh 3433 2014-07-23 08:17:03Z salam $
    33//
    4 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     4// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931#ifndef __CDFMIDPOINTPLUGIN_HH__
  • external/fastjet/plugins/CMSIterativeCone/CMSIterativeConePlugin.cc

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id$
    3 //
    4 // Copyright (c) 2007-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    5 // Copyright (c) ????-????, CMS [for the iterative-cone code itself]
     1//FJSTARTHEADER
     2// $Id: CMSIterativeConePlugin.cc 1504 2009-04-10 13:39:48Z salam $
     3//
     4// Copyright (c) 2007-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    65//
    76//----------------------------------------------------------------------
    8 // This file is part of FastJet. It contains code that has been
    9 // obtained from the CMS collaboration, revision 1.14 of the
    10 // CMSIterativeConeAlgorithm.cc file in CMSSW, see
    11 //   http://cmssw.cvs.cern.ch/cgi-bin/cmssw.cgi/CMSSW/RecoJets/JetAlgorithms/src/CMSIterativeConeAlgorithm.cc?hideattic=0&revision=1.14&view=markup
    12 //
    13 // Permission has been granted by the CMS collaboration to release it
    14 // in FastJet under the terms of the GNU Public License(v2) (see the
    15 // COPYING file in the main FastJet directory for details).
    16 // Changes from the original file are listed below.
    17 //
    18 // FastJet is free software; you can redistribute it and/or modify
    19 // it under the terms of the GNU General Public License as published by
    20 // the Free Software Foundation; either version 2 of the License, or
    21 // (at your option) any later version.
    22 //
    23 // The algorithms that underlie FastJet have required considerable
    24 // development and are described in hep-ph/0512210. If you use
    25 // FastJet as part of work towards a scientific publication, please
    26 // include a citation to the FastJet paper.
    27 //
    28 // FastJet is distributed in the hope that it will be useful,
    29 // but WITHOUT ANY WARRANTY; without even the implied warranty of
    30 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    31 // GNU General Public License for more details.
    32 //
    33 // You should have received a copy of the GNU General Public License
    34 // along with FastJet. If not, see <http://www.gnu.org/licenses/>.
     7// This file is part of FastJet.
     8//
     9//  FastJet is free software; you can redistribute it and/or modify
     10//  it under the terms of the GNU General Public License as published by
     11//  the Free Software Foundation; either version 2 of the License, or
     12//  (at your option) any later version.
     13//
     14//  The algorithms that underlie FastJet have required considerable
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
     17//  FastJet as part of work towards a scientific publication, please
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
     20//
     21//  FastJet is distributed in the hope that it will be useful,
     22//  but WITHOUT ANY WARRANTY; without even the implied warranty of
     23//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     24//  GNU General Public License for more details.
     25//
     26//  You should have received a copy of the GNU General Public License
     27//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    3528//----------------------------------------------------------------------
    36 //ENDHEADER
     29//FJENDHEADER
    3730
    3831// List of changes compared to the original CMS code (revision 1.14 of
  • external/fastjet/plugins/CMSIterativeCone/fastjet/CMSIterativeConePlugin.hh

    r5b5a56b r35cdc46  
    1 //STARTHEADER
     1//FJSTARTHEADER
    22// $Id: CMSIterativeConePlugin.hh 1508 2009-04-10 22:46:49Z soyez $
    33//
    4 // Copyright (c) 2007-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     4// Copyright (c) 2007-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931#ifndef __CMSITERATIVECONEPLUGIN_HH__
  • external/fastjet/plugins/D0RunICone/D0RunIBaseConePlugin.cc

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id$
    3 //
    4 // Copyright (c) 2009-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     1//FJSTARTHEADER
     2// $Id: D0RunIBaseConePlugin.cc 1779 2010-10-25 10:32:59Z soyez $
     3//
     4// Copyright (c) 2009-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931// D0 stuff
  • external/fastjet/plugins/D0RunICone/fastjet/D0RunIBaseConePlugin.hh

    r5b5a56b r35cdc46  
    22#define __D0RUNIBASECONEPLUGIN_HH__
    33
    4 //STARTHEADER
     4//FJSTARTHEADER
    55// $Id: D0RunIBaseConePlugin.hh 1778 2010-10-25 10:02:58Z soyez $
    66//
    7 // Copyright (c) 2009-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     7// Copyright (c) 2009-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    88//
    99//----------------------------------------------------------------------
     
    1616//
    1717//  The algorithms that underlie FastJet have required considerable
    18 //  development and are described in hep-ph/0512210. If you use
     18//  development. They are described in the original FastJet paper,
     19//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1920//  FastJet as part of work towards a scientific publication, please
    20 //  include a citation to the FastJet paper.
     21//  quote the version you use and include a citation to the manual and
     22//  optionally also to hep-ph/0512210.
    2123//
    2224//  FastJet is distributed in the hope that it will be useful,
     
    2830//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2931//----------------------------------------------------------------------
    30 //ENDHEADER
     32//FJENDHEADER
    3133
    3234#include "fastjet/JetDefinition.hh"
  • external/fastjet/plugins/D0RunICone/fastjet/D0RunIConePlugin.hh

    r5b5a56b r35cdc46  
    22#define __D0RUNICONEPLUGIN_HH__
    33
    4 //STARTHEADER
     4//FJSTARTHEADER
    55// $Id: D0RunIConePlugin.hh 1778 2010-10-25 10:02:58Z soyez $
    66//
    7 // Copyright (c) 2009-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     7// Copyright (c) 2009-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    88//
    99//----------------------------------------------------------------------
     
    1616//
    1717//  The algorithms that underlie FastJet have required considerable
    18 //  development and are described in hep-ph/0512210. If you use
     18//  development. They are described in the original FastJet paper,
     19//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1920//  FastJet as part of work towards a scientific publication, please
    20 //  include a citation to the FastJet paper.
     21//  quote the version you use and include a citation to the manual and
     22//  optionally also to hep-ph/0512210.
    2123//
    2224//  FastJet is distributed in the hope that it will be useful,
     
    2830//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2931//----------------------------------------------------------------------
    30 //ENDHEADER
     32//FJENDHEADER
    3133
    3234#include "D0RunIBaseConePlugin.hh"
  • external/fastjet/plugins/D0RunICone/fastjet/D0RunIpre96ConePlugin.hh

    r5b5a56b r35cdc46  
    22#define __D0RUNIPRE96CONEPLUGIN_HH__
    33
    4 //STARTHEADER
     4//FJSTARTHEADER
    55// $Id: D0RunIpre96ConePlugin.hh 1778 2010-10-25 10:02:58Z soyez $
    66//
    7 // Copyright (c) 2009-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     7// Copyright (c) 2009-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    88//
    99//----------------------------------------------------------------------
     
    1616//
    1717//  The algorithms that underlie FastJet have required considerable
    18 //  development and are described in hep-ph/0512210. If you use
     18//  development. They are described in the original FastJet paper,
     19//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1920//  FastJet as part of work towards a scientific publication, please
    20 //  include a citation to the FastJet paper.
     21//  quote the version you use and include a citation to the manual and
     22//  optionally also to hep-ph/0512210.
    2123//
    2224//  FastJet is distributed in the hope that it will be useful,
     
    2830//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2931//----------------------------------------------------------------------
    30 //ENDHEADER
     32//FJENDHEADER
    3133
    3234#include "D0RunIBaseConePlugin.hh"
  • external/fastjet/plugins/D0RunIICone/D0RunIIConePlugin.cc

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id$
     1//FJSTARTHEADER
     2// $Id: D0RunIIConePlugin.cc 3433 2014-07-23 08:17:03Z salam $
    33//
    4 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     4// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931#include "fastjet/D0RunIIConePlugin.hh"
  • external/fastjet/plugins/D0RunIICone/ILConeAlgorithm.hpp

    r5b5a56b r35cdc46  
    4949//
    5050// 2012-06-12  Gregory Soyez  <soyez@fastjet.fr>
    51 //
    5251//        * Replaced addItem(...) by this->addItem(...) to allow
    5352//          compilation with gcc 4.7 which no longer performs
  • external/fastjet/plugins/D0RunIICone/fastjet/D0RunIIConePlugin.hh

    r5b5a56b r35cdc46  
    22#define __D0RUNIICONEPLUGIN_HH__
    33
    4 //STARTHEADER
    5 // $Id: D0RunIIConePlugin.hh 2761 2011-11-24 13:54:05Z soyez $
     4//FJSTARTHEADER
     5// $Id: D0RunIIConePlugin.hh 3433 2014-07-23 08:17:03Z salam $
    66//
    7 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     7// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    88//
    99//----------------------------------------------------------------------
     
    1616//
    1717//  The algorithms that underlie FastJet have required considerable
    18 //  development and are described in hep-ph/0512210. If you use
     18//  development. They are described in the original FastJet paper,
     19//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1920//  FastJet as part of work towards a scientific publication, please
    20 //  include a citation to the FastJet paper.
     21//  quote the version you use and include a citation to the manual and
     22//  optionally also to hep-ph/0512210.
    2123//
    2224//  FastJet is distributed in the hope that it will be useful,
     
    2830//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2931//----------------------------------------------------------------------
    30 //ENDHEADER
     32//FJENDHEADER
    3133
    3234#include "fastjet/JetDefinition.hh"
  • external/fastjet/plugins/EECambridge/EECambridgePlugin.cc

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id$
     1//FJSTARTHEADER
     2// $Id: EECambridgePlugin.cc 3433 2014-07-23 08:17:03Z salam $
    33//
    4 // Copyright (c) 2007-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     4// Copyright (c) 2007-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931// fastjet stuff
  • external/fastjet/plugins/EECambridge/fastjet/EECambridgePlugin.hh

    r5b5a56b r35cdc46  
    22#define __EECAMBRIDGEPLUGIN_HH__
    33
    4 //STARTHEADER
    5 // $Id: EECambridgePlugin.hh 2692 2011-11-14 16:27:44Z soyez $
     4//FJSTARTHEADER
     5// $Id: EECambridgePlugin.hh 3433 2014-07-23 08:17:03Z salam $
    66//
    7 // Copyright (c) 2009, Matteo Cacciari, Gavin Salam and Gregory Soyez
     7// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    88//
    99//----------------------------------------------------------------------
     
    1616//
    1717//  The algorithms that underlie FastJet have required considerable
    18 //  development and are described in hep-ph/0512210. If you use
     18//  development. They are described in the original FastJet paper,
     19//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1920//  FastJet as part of work towards a scientific publication, please
    20 //  include a citation to the FastJet paper.
     21//  quote the version you use and include a citation to the manual and
     22//  optionally also to hep-ph/0512210.
    2123//
    2224//  FastJet is distributed in the hope that it will be useful,
     
    2830//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2931//----------------------------------------------------------------------
    30 //ENDHEADER
     32//FJENDHEADER
    3133
    3234
     
    8284  virtual bool exclusive_sequence_meaningful() const {return true;}
    8385
     86  /// returns true because this plugin is intended for spherical
     87  /// geometries (i.e. it's an e+e- algorithm).
     88  virtual bool is_spherical() const {return true;}
     89
    8490private:
    8591  double _ycut;
  • external/fastjet/plugins/GridJet/GridJetPlugin.cc

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id$
    3 //
    4 // Copyright (c) 2011, Matteo Cacciari, Gavin Salam and Gregory Soyez
     1//FJSTARTHEADER
     2// $Id: GridJetPlugin.cc 2268 2011-06-20 15:12:26Z salam $
     3//
     4// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931// fastjet stuff
     
    4345                              double requested_grid_spacing,
    4446                              const JetDefinition & post_jet_def) :
     47#ifdef FASTJET_GRIDJET_USEFJGRID
     48  RectangularGrid(ymax, requested_grid_spacing), _post_jet_def(post_jet_def) {
     49}
     50#else
    4551  _ymin(-ymax), _ymax(ymax),
    4652  _requested_grid_spacing(requested_grid_spacing) ,
     
    4955  setup_grid();
    5056}
    51 
     57#endif
     58
     59#ifdef FASTJET_GRIDJET_USEFJGRID
     60GridJetPlugin::GridJetPlugin (const RectangularGrid & grid,
     61                              const JetDefinition & post_jet_def) :
     62  RectangularGrid(grid), _post_jet_def(post_jet_def) {
     63  if (!RectangularGrid::is_initialised())
     64    throw Error("attempt to construct GridJetPlugin with uninitialised RectangularGrid");
     65}
     66#endif // FASTJET_GRIDJET_USEFJGRID
     67
     68#ifndef FASTJET_GRIDJET_USEFJGRID
    5269void GridJetPlugin::setup_grid() {
    5370  // since we've exchanged the arguments of the constructor,
     
    6986}
    7087
    71 
    72 //----------------------------------------------------------------------
    73 string GridJetPlugin::description () const {
    74   ostringstream desc;
    75   desc << "GridJetPlugin plugin with ymax = " << _ymax << ", dy = " << _dy << ", dphi = " << _dphi << " (requested grid spacing was " << _requested_grid_spacing << ")";
    76   if (_post_jet_def.jet_algorithm() != undefined_jet_algorithm) {
    77     desc << ", followed by " << _post_jet_def.description();
    78   }
    79   return desc.str();
    80 }
    81 
    82 
    83 //----------------------------------------------------------------------
    84 double GridJetPlugin::R() const {return sqrt(_dy*_dphi/pi);}
    85 
    86 
    87 //----------------------------------------------------------------------
    88 int GridJetPlugin::igrid(const PseudoJet & p) const {
     88//----------------------------------------------------------------------
     89int GridJetPlugin::tile_index(const PseudoJet & p) const {
    8990  // directly taking int does not work for values between -1 and 0
    9091  // so use floor instead
     
    108109  return igrid_res;
    109110}
     111#endif // not FASTJET_GRIDJET_USEFJGRID
     112
     113
     114//----------------------------------------------------------------------
     115string GridJetPlugin::description () const {
     116  ostringstream desc;
     117  desc << "GridJetPlugin plugin with ";
     118#ifndef FASTJET_GRIDJET_USEFJGRID
     119  desc << "ymax = " << _ymax << ", dy = " << _dy << ", dphi = " << _dphi << " (requested grid spacing was " << _requested_grid_spacing << ")";
     120#else
     121  desc << RectangularGrid::description();
     122#endif
     123  if (_post_jet_def.jet_algorithm() != undefined_jet_algorithm) {
     124    desc << ", followed by " << _post_jet_def.description();
     125  }
     126  return desc.str();
     127}
     128
     129
     130//----------------------------------------------------------------------
     131double GridJetPlugin::R() const {return sqrt(drap()*dphi()/pi);}
    110132
    111133
     
    117139  //  * a number >= 0 will mean that particle indicated by the index
    118140  //    is currently the jet on the grid
    119   vector<int> grid(_ntotal, -1);
     141  vector<int> grid(n_tiles(), -1);
    120142 
    121143  int nparticles = cs.jets().size();
     
    126148  // combine particles with whatever is in the grid
    127149  for (int i = 0; i < nparticles; i++) {
    128     int igrd = igrid(cs.jets()[i]);
     150    int igrd = tile_index(cs.jets()[i]);
    129151    //cout << i << " " << cs.jets()[i].rap() << " " << cs.jets()[i].phi()
    130152    //   << " " << igrd << " " << grid.size() << " " << _ntotal << endl;
    131153    if (igrd < 0) continue;
    132     assert(igrd <= _ntotal);
     154    assert(igrd <= n_tiles());
    133155    if (grid[igrd] == -1) {
    134156      grid[igrd] = i; // jet index of initial particle i is i
     
    145167    // make the final jets via iB recombinations
    146168    for (unsigned igrd = 0; igrd < grid.size(); igrd++) {
    147       if (grid[igrd] != -1) cs.plugin_record_iB_recombination(grid[igrd],
    148                                                               dij_or_diB);
     169      if (grid[igrd] != -1 && tile_is_good(igrd))
     170                   cs.plugin_record_iB_recombination(grid[igrd], dij_or_diB);
    149171    }
    150172  } else {
  • external/fastjet/plugins/GridJet/fastjet/GridJetPlugin.hh

    r5b5a56b r35cdc46  
    1 #ifndef __GRIDJETPLUGIN_HH__
    2 #define __GRIDJETPLUGIN_HH__
     1#ifndef __FASTJET_GRIDJETPLUGIN_HH__
     2#define __FASTJET_GRIDJETPLUGIN_HH__
    33
    4 //STARTHEADER
     4//FJSTARTHEADER
    55// $Id: GridJetPlugin.hh 2267 2011-06-20 15:10:23Z salam $
    66//
    7 // Copyright (c) 2011, Matteo Cacciari, Gavin Salam and Gregory Soyez
     7// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    88//
    99//----------------------------------------------------------------------
     
    1616//
    1717//  The algorithms that underlie FastJet have required considerable
    18 //  development and are described in hep-ph/0512210. If you use
     18//  development. They are described in the original FastJet paper,
     19//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1920//  FastJet as part of work towards a scientific publication, please
    20 //  include a citation to the FastJet paper.
     21//  quote the version you use and include a citation to the manual and
     22//  optionally also to hep-ph/0512210.
    2123//
    2224//  FastJet is distributed in the hope that it will be useful,
     
    2830//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2931//----------------------------------------------------------------------
    30 //ENDHEADER
     32//FJENDHEADER
    3133
    3234
    3335#include "fastjet/JetDefinition.hh"
     36
     37// makes it easy to switch back and forth between use of
     38// RectangularGrid or not; this got enabled in FJ3.1
     39#define FASTJET_GRIDJET_USEFJGRID
     40
     41#ifdef FASTJET_GRIDJET_USEFJGRID
     42#include "fastjet/RectangularGrid.hh"
     43#endif
    3444
    3545FASTJET_BEGIN_NAMESPACE      // defined in fastjet/internal/base.hh
     
    4959/// but is rather provided for comparison purposes with the
    5060/// GridMedianBackgroundEstimator (which is even faster).
    51 class GridJetPlugin : public JetDefinition::Plugin {
     61class GridJetPlugin : public JetDefinition::Plugin
     62#ifdef FASTJET_GRIDJET_USEFJGRID
     63                                      , RectangularGrid
     64#endif
     65{
    5266public:
    53   /// Main constructor for the GridJetPlugin Plugin class.
     67  /// Basic constructor for the GridJetPlugin Plugin class.
    5468  ///
    5569  /// \param ymax           The maximal rapidity extent of the grid
     
    6276                 const JetDefinition & post_jet_def = JetDefinition());
    6377
    64   /// copy constructor
    65   GridJetPlugin (const GridJetPlugin & plugin) {
    66     *this = plugin;
    67   }
     78#ifdef FASTJET_GRIDJET_USEFJGRID
     79  /// Constructor for the GridJetPlugin Plugin class that allows
     80  /// full control over the underlying grid. New in FastJet 3.1.
     81  ///
     82  /// \param grid           The maximal rapidity extent of the grid
     83  /// \param post_jet_def   if present, and not == JetDefinition()
     84  ///                       (which has undefined_jet_algorithm), then
     85  ///                       run the post_jet_def on the result of the grid
     86  ///                       clustering.
     87  GridJetPlugin (const RectangularGrid & grid,
     88                 const JetDefinition & post_jet_def = JetDefinition());
     89#endif // FASTJET_GRIDJET_USEFJGRID
     90
     91 
     92
     93  // /// copy constructor
     94  // GridJetPlugin (const GridJetPlugin & plugin) {
     95  //   *this = plugin;
     96  // }
    6897
    6998  // the things that are required by base class
     
    75104  virtual double R() const;
    76105
     106  // As of FastJet 3.1 the following functions become available through
     107  // the underlying RectangularGrid class.
     108#ifndef FASTJET_GRIDJET_USEFJGRID
    77109  /// returns the actual rapidity spacing of the grid
    78110  double drap()   const {return _dy;}
     
    83115  /// returns the maximum rapidity of the grid
    84116  double rapmax() const {return _ymax;}
     117#endif
    85118
    86119private:
    87120
     121#ifndef FASTJET_GRIDJET_USEFJGRID
    88122  void setup_grid();
    89123
    90   int igrid(const PseudoJet & p) const;
     124  int n_tiles() const {return _ntotal;}
     125  int n_good_tiles() const {return _ntotal;}
     126
     127  int tile_index(const PseudoJet & p) const;
     128  bool tile_is_good(int /* itile */) const {return true;}
    91129
    92130  double _ymin, _ymax, _dy, _dphi, _requested_grid_spacing;
    93131  int _ny, _nphi, _ntotal;
     132#endif
    94133
    95134  JetDefinition _post_jet_def;
     
    99138FASTJET_END_NAMESPACE        // defined in fastjet/internal/base.hh
    100139
    101 #endif // __GRIDJETPLUGIN_HH__
     140#endif // __FASTJET_GRIDJETPLUGIN_HH__
    102141
  • external/fastjet/plugins/Jade/JadePlugin.cc

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id$
     1//FJSTARTHEADER
     2// $Id: JadePlugin.cc 3433 2014-07-23 08:17:03Z salam $
    33//
    4 // Copyright (c) 2007-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     4// Copyright (c) 2007-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931// fastjet stuff
  • external/fastjet/plugins/Jade/fastjet/JadePlugin.hh

    r5b5a56b r35cdc46  
    22#define __JADEPLUGIN_HH__
    33
    4 //STARTHEADER
    5 // $Id: JadePlugin.hh 2577 2011-09-13 15:11:38Z salam $
     4//FJSTARTHEADER
     5// $Id: JadePlugin.hh 3433 2014-07-23 08:17:03Z salam $
    66//
    7 // Copyright (c) 2009, Matteo Cacciari, Gavin Salam and Gregory Soyez
     7// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    88//
    99//----------------------------------------------------------------------
     
    1616//
    1717//  The algorithms that underlie FastJet have required considerable
    18 //  development and are described in hep-ph/0512210. If you use
     18//  development. They are described in the original FastJet paper,
     19//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1920//  FastJet as part of work towards a scientific publication, please
    20 //  include a citation to the FastJet paper.
     21//  quote the version you use and include a citation to the manual and
     22//  optionally also to hep-ph/0512210.
    2123//
    2224//  FastJet is distributed in the hope that it will be useful,
     
    2830//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2931//----------------------------------------------------------------------
    30 //ENDHEADER
     32//FJENDHEADER
    3133
    3234#include "fastjet/JetDefinition.hh"
  • external/fastjet/plugins/NestedDefs/NestedDefsPlugin.cc

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id$
     1//FJSTARTHEADER
     2// $Id: NestedDefsPlugin.cc 3433 2014-07-23 08:17:03Z salam $
    33//
    4 // Copyright (c) 2007-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     4// Copyright (c) 2007-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931// TODO
  • external/fastjet/plugins/NestedDefs/fastjet/NestedDefsPlugin.hh

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id: NestedDefsPlugin.hh 2577 2011-09-13 15:11:38Z salam $
     1//FJSTARTHEADER
     2// $Id: NestedDefsPlugin.hh 3433 2014-07-23 08:17:03Z salam $
    33//
    4 // Copyright (c) 2007-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     4// Copyright (c) 2007-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931#ifndef __NESTEDALGSPLUGIN_HH__
  • external/fastjet/plugins/SISCone/SISConePlugin.cc

    r5b5a56b r35cdc46  
    207207
    208208  // give the extras object to the cluster sequence.
    209   clust_seq.plugin_associate_extras(std::auto_ptr<ClusterSequence::Extras>(extras));
     209  //
     210  // As of v3.1 of FastJet, extras are automatically owned (as
     211  // SharedPtr) by the ClusterSequence and auto_ptr is deprecated. So
     212  // we can use a simple pointer here
     213  //clust_seq.plugin_associate_extras(std::auto_ptr<ClusterSequence::Extras>(extras));
     214  clust_seq.plugin_associate_extras(extras);
    210215}
    211216
  • external/fastjet/plugins/SISCone/area.cc

    r5b5a56b r35cdc46  
    2222// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA //
    2323//                                                                           //
    24 // $Revision::                                                              $//
    25 // $Date::                                                                  $//
     24// $Revision:: 149                                                          $//
     25// $Date:: 2007-03-15 00:13:58 +0100 (Thu, 15 Mar 2007)                     $//
    2626///////////////////////////////////////////////////////////////////////////////
    2727
  • external/fastjet/plugins/SISCone/area.h

    r5b5a56b r35cdc46  
    2222// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA //
    2323//                                                                           //
    24 // $Revision::                                                              $//
    25 // $Date::                                                                  $//
     24// $Revision:: 149                                                          $//
     25// $Date:: 2007-03-15 00:13:58 +0100 (Thu, 15 Mar 2007)                     $//
    2626///////////////////////////////////////////////////////////////////////////////
    2727
  • external/fastjet/plugins/SISCone/circulator.h

    r5b5a56b r35cdc46  
    2222// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA //
    2323//                                                                           //
    24 // $Revision::                                                              $//
    25 // $Date::                                                                  $//
     24// $Revision:: 103                                                          $//
     25// $Date:: 2007-02-18 17:07:34 +0100 (Sun, 18 Feb 2007)                     $//
    2626///////////////////////////////////////////////////////////////////////////////
    2727
  • external/fastjet/plugins/SISCone/config.h

    r5b5a56b r35cdc46  
    5454#define PACKAGE_TARNAME "siscone"
    5555
    56 /* Define to the home page for this package. */
    57 /* #undef PACKAGE_URL */
    58 
    5956/* Define to the version of this package. */
    6057#define PACKAGE_VERSION "2.0.6"
  • external/fastjet/plugins/SISCone/defines.h

    r5b5a56b r35cdc46  
    2222// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA //
    2323//                                                                           //
    24 // $Revision::                                                              $//
    25 // $Date::                                                                  $//
     24// $Revision:: 225                                                          $//
     25// $Date:: 2008-05-20 16:59:47 +0200 (Tue, 20 May 2008)                     $//
    2626///////////////////////////////////////////////////////////////////////////////
    2727
  • external/fastjet/plugins/SISCone/fastjet/SISConeSphericalPlugin.hh

    r5b5a56b r35cdc46  
    152152  virtual void run_clustering(ClusterSequence &) const ;
    153153
     154  /// returns true because this plugin is intended for spherical
     155  /// geometries (i.e. it's an e+e- algorithm).
     156  virtual bool is_spherical() const {return true;}
     157
    154158protected:
    155159  virtual void reset_stored_plugin() const;
  • external/fastjet/plugins/SISCone/geom_2d.cc

    r5b5a56b r35cdc46  
    2121// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA //
    2222//                                                                           //
    23 // $Revision::                                                              $//
    24 // $Date::                                                                  $//
     23// $Revision:: 171                                                          $//
     24// $Date:: 2007-06-19 16:26:05 +0200 (Tue, 19 Jun 2007)                     $//
    2525///////////////////////////////////////////////////////////////////////////////
    2626
  • external/fastjet/plugins/SISCone/geom_2d.h

    r5b5a56b r35cdc46  
    2222// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA //
    2323//                                                                           //
    24 // $Revision::                                                              $//
    25 // $Date::                                                                  $//
     24// $Revision:: 268                                                          $//
     25// $Date:: 2009-03-12 21:24:16 +0100 (Thu, 12 Mar 2009)                     $//
    2626///////////////////////////////////////////////////////////////////////////////
    2727
  • external/fastjet/plugins/SISCone/hash.cc

    r5b5a56b r35cdc46  
    2121// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA //
    2222//                                                                           //
    23 // $Revision::                                                              $//
    24 // $Date::                                                                  $//
     23// $Revision:: 225                                                          $//
     24// $Date:: 2008-05-20 16:59:47 +0200 (Tue, 20 May 2008)                     $//
    2525///////////////////////////////////////////////////////////////////////////////
    2626
  • external/fastjet/plugins/SISCone/hash.h

    r5b5a56b r35cdc46  
    2222// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA //
    2323//                                                                           //
    24 // $Revision::                                                              $//
    25 // $Date::                                                                  $//
     24// $Revision:: 224                                                          $//
     25// $Date:: 2008-05-16 19:58:30 +0200 (Fri, 16 May 2008)                     $//
    2626///////////////////////////////////////////////////////////////////////////////
    2727
  • external/fastjet/plugins/SISCone/momentum.cc

    r5b5a56b r35cdc46  
    2121// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA //
    2222//                                                                           //
    23 // $Revision::                                                              $//
    24 // $Date::                                                                  $//
     23// $Revision:: 123                                                          $//
     24// $Date:: 2007-03-01 02:52:16 +0100 (Thu, 01 Mar 2007)                     $//
    2525///////////////////////////////////////////////////////////////////////////////
    2626
  • external/fastjet/plugins/SISCone/momentum.h

    r5b5a56b r35cdc46  
    2222// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA //
    2323//                                                                           //
    24 // $Revision::                                                              $//
    25 // $Date::                                                                  $//
     24// $Revision:: 163                                                          $//
     25// $Date:: 2007-04-26 22:31:02 +0200 (Thu, 26 Apr 2007)                     $//
    2626///////////////////////////////////////////////////////////////////////////////
    2727
  • external/fastjet/plugins/SISCone/protocones.cc

    r5b5a56b r35cdc46  
    2121// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA //
    2222//                                                                           //
    23 // $Revision::                                                              $//
    24 // $Date::                                                                  $//
     23// $Revision:: 322                                                          $//
     24// $Date:: 2011-11-15 10:12:36 +0100 (Tue, 15 Nov 2011)                     $//
    2525///////////////////////////////////////////////////////////////////////////////
    2626
  • external/fastjet/plugins/SISCone/protocones.h

    r5b5a56b r35cdc46  
    2222// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA //
    2323//                                                                           //
    24 // $Revision::                                                              $//
    25 // $Date::                                                                  $//
     24// $Revision:: 224                                                          $//
     25// $Date:: 2008-05-16 19:58:30 +0200 (Fri, 16 May 2008)                     $//
    2626///////////////////////////////////////////////////////////////////////////////
    2727
  • external/fastjet/plugins/SISCone/quadtree.cc

    r5b5a56b r35cdc46  
    2121// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA //
    2222//                                                                           //
    23 // $Revision::                                                              $//
    24 // $Date::                                                                  $//
     23// $Revision:: 320                                                          $//
     24// $Date:: 2011-11-15 09:54:50 +0100 (Tue, 15 Nov 2011)                     $//
    2525///////////////////////////////////////////////////////////////////////////////
    2626
  • external/fastjet/plugins/SISCone/quadtree.h

    r5b5a56b r35cdc46  
    2222// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA //
    2323//                                                                           //
    24 // $Revision::                                                              $//
    25 // $Date::                                                                  $//
     24// $Revision:: 123                                                          $//
     25// $Date:: 2007-03-01 02:52:16 +0100 (Thu, 01 Mar 2007)                     $//
    2626///////////////////////////////////////////////////////////////////////////////
    2727
  • external/fastjet/plugins/SISCone/reference.cc

    r5b5a56b r35cdc46  
    2121// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA //
    2222//                                                                           //
    23 // $Revision::                                                              $//
    24 // $Date::                                                                  $//
     23// $Revision:: 311                                                          $//
     24// $Date:: 2011-10-05 23:27:09 +0200 (Wed, 05 Oct 2011)                     $//
    2525///////////////////////////////////////////////////////////////////////////////
    2626
  • external/fastjet/plugins/SISCone/reference.h

    r5b5a56b r35cdc46  
    2222// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA //
    2323//                                                                           //
    24 // $Revision::                                                              $//
    25 // $Date::                                                                  $//
     24// $Revision:: 123                                                          $//
     25// $Date:: 2007-03-01 02:52:16 +0100 (Thu, 01 Mar 2007)                     $//
    2626///////////////////////////////////////////////////////////////////////////////
    2727
  • external/fastjet/plugins/SISCone/siscone.cc

    r5b5a56b r35cdc46  
    2121// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA //
    2222//                                                                           //
    23 // $Revision::                                                              $//
    24 // $Date::                                                                  $//
     23// $Revision:: 341                                                          $//
     24// $Date:: 2013-04-08 12:21:06 +0200 (Mon, 08 Apr 2013)                     $//
    2525///////////////////////////////////////////////////////////////////////////////
    2626
  • external/fastjet/plugins/SISCone/siscone.h

    r5b5a56b r35cdc46  
    2222// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA //
    2323//                                                                           //
    24 // $Revision::                                                              $//
    25 // $Date::                                                                  $//
     24// $Revision:: 325                                                          $//
     25// $Date:: 2011-11-25 12:41:17 +0100 (Fri, 25 Nov 2011)                     $//
    2626///////////////////////////////////////////////////////////////////////////////
    2727
  • external/fastjet/plugins/SISCone/siscone_error.cc

    r5b5a56b r35cdc46  
    2121// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA //
    2222//                                                                           //
    23 // $Revision::                                                              $//
    24 // $Date::                                                                  $//
     23// $Revision:: 123                                                          $//
     24// $Date:: 2007-03-01 02:52:16 +0100 (Thu, 01 Mar 2007)                     $//
    2525///////////////////////////////////////////////////////////////////////////////
    2626
  • external/fastjet/plugins/SISCone/siscone_error.h

    r5b5a56b r35cdc46  
    2222// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA //
    2323//                                                                           //
    24 // $Revision::                                                              $//
    25 // $Date::                                                                  $//
     24// $Revision:: 327                                                          $//
     25// $Date:: 2011-11-25 15:19:39 +0100 (Fri, 25 Nov 2011)                     $//
    2626///////////////////////////////////////////////////////////////////////////////
    2727
  • external/fastjet/plugins/SISCone/split_merge.cc

    r5b5a56b r35cdc46  
    2121// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA //
    2222//                                                                           //
    23 // $Revision::                                                              $//
    24 // $Date::                                                                  $//
     23// $Revision:: 322                                                          $//
     24// $Date:: 2011-11-15 10:12:36 +0100 (Tue, 15 Nov 2011)                     $//
    2525///////////////////////////////////////////////////////////////////////////////
    2626
  • external/fastjet/plugins/SISCone/split_merge.h

    r5b5a56b r35cdc46  
    2222// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA //
    2323//                                                                           //
    24 // $Revision::                                                              $//
    25 // $Date::                                                                  $//
     24// $Revision:: 268                                                          $//
     25// $Date:: 2009-03-12 21:24:16 +0100 (Thu, 12 Mar 2009)                     $//
    2626///////////////////////////////////////////////////////////////////////////////
    2727
  • external/fastjet/plugins/SISCone/vicinity.cc

    r5b5a56b r35cdc46  
    2121// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA //
    2222//                                                                           //
    23 // $Revision::                                                              $//
    24 // $Date::                                                                  $//
     23// $Revision:: 123                                                          $//
     24// $Date:: 2007-03-01 02:52:16 +0100 (Thu, 01 Mar 2007)                     $//
    2525///////////////////////////////////////////////////////////////////////////////
    2626
  • external/fastjet/plugins/SISCone/vicinity.h

    r5b5a56b r35cdc46  
    2222// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA //
    2323//                                                                           //
    24 // $Revision::                                                              $//
    25 // $Date::                                                                  $//
     24// $Revision:: 123                                                          $//
     25// $Date:: 2007-03-01 02:52:16 +0100 (Thu, 01 Mar 2007)                     $//
    2626///////////////////////////////////////////////////////////////////////////////
    2727
  • external/fastjet/plugins/TrackJet/TrackJetPlugin.cc

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id$
    3 //
    4 // Copyright (c) 2007-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     1//FJSTARTHEADER
     2// $Id: TrackJetPlugin.cc 3433 2014-07-23 08:17:03Z salam $
     3//
     4// Copyright (c) 2007-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
    7 // This file is part of FastJet. It contains code that has been
    8 // obtained from the Rivet project by Leif Lonnblad, Andy Buckley and
    9 // Jon Butterworth. See http://www.hepforge.org/downloads/rivet.
    10 // Rivet is free software released under the terms of the GNU Public
    11 // License(v2).
    12 // Changes from the original file are listed below.
     7// This file is part of FastJet.
    138//
    149//  FastJet is free software; you can redistribute it and/or modify
     
    1813//
    1914//  The algorithms that underlie FastJet have required considerable
    20 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    2117//  FastJet as part of work towards a scientific publication, please
    22 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    2320//
    2421//  FastJet is distributed in the hope that it will be useful,
     
    3027//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    3128//----------------------------------------------------------------------
    32 //ENDHEADER
     29//FJENDHEADER
    3330
    3431// History of changes from the original TrackJet.cc file in Rivet <=1.1.2
  • external/fastjet/plugins/TrackJet/fastjet/TrackJetPlugin.hh

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id: TrackJetPlugin.hh 2758 2011-11-24 08:31:58Z soyez $
     1//FJSTARTHEADER
     2// $Id: TrackJetPlugin.hh 3433 2014-07-23 08:17:03Z salam $
    33//
    4 // Copyright (c) 2007-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     4// Copyright (c) 2007-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931#ifndef __TRACKJETPLUGIN_HH__
  • external/fastjet/tools/BackgroundEstimatorBase.cc

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id$
     1//FJSTARTHEADER
     2// $Id: BackgroundEstimatorBase.cc 3433 2014-07-23 08:17:03Z salam $
    33//
    4 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     4// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931
  • external/fastjet/tools/BackgroundEstimatorBase.hh

    r5b5a56b r35cdc46  
    22#define __FASTJET_BACKGROUND_ESTIMATOR_BASE_HH__
    33
    4 //STARTHEADER
    5 // $Id: BackgroundEstimatorBase.hh 2689 2011-11-14 14:51:06Z soyez $
    6 //
    7 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     4//FJSTARTHEADER
     5// $Id: BackgroundEstimatorBase.hh 3516 2014-08-01 14:07:58Z salam $
     6//
     7// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    88//
    99//----------------------------------------------------------------------
     
    1616//
    1717//  The algorithms that underlie FastJet have required considerable
    18 //  development and are described in hep-ph/0512210. If you use
     18//  development. They are described in the original FastJet paper,
     19//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1920//  FastJet as part of work towards a scientific publication, please
    20 //  include a citation to the FastJet paper.
     21//  quote the version you use and include a citation to the manual and
     22//  optionally also to hep-ph/0512210.
    2123//
    2224//  FastJet is distributed in the hope that it will be useful,
     
    2830//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2931//----------------------------------------------------------------------
    30 //ENDHEADER
     32//FJENDHEADER
    3133
    3234#include <fastjet/ClusterSequenceAreaBase.hh>
     
    4345///
    4446/// Abstract base class that provides the basic interface for classes
    45 /// that estimate levels of background radiation in hadrion and
     47/// that estimate levels of background radiation in hadron and
    4648/// heavy-ion collider events.
    47 ///
    4849///
    4950class BackgroundEstimatorBase {
     
    99100  /// determination of sigma
    100101  virtual bool has_sigma() {return false;}
    101   //\}
    102  
     102
     103  //----------------------------------------------------------------
     104  // now do the same thing for rho_m and sigma_m
     105
     106  /// returns rho_m, the purely longitudinal, particle-mass-induced
     107  /// component of the background density per unit area
     108  virtual double rho_m() const{
     109    throw Error("rho_m() not supported for this Background Estimator");
     110  }
     111
     112  /// returns sigma_m, a measure of the fluctuations in the purely
     113  /// longitudinal, particle-mass-induced component of the background
     114  /// density per unit area; must be multipled by sqrt(area) to get
     115  /// fluctuations for a region of a given area.
     116  virtual double sigma_m() const {
     117    throw Error("sigma_m() not supported for this Background Estimator");
     118  }
     119
     120  /// Returns rho_m locally at the jet position. As for rho(jet), it is non-const.
     121  virtual double rho_m(const PseudoJet & /*jet*/){
     122    throw Error("rho_m(jet) not supported for this Background Estimator");
     123  }
     124
     125  /// Returns sigma_m locally at the jet position. As for rho(jet), it is non-const.
     126  virtual double sigma_m(const PseudoJet & /*jet*/) {
     127    throw Error("sigma_m(jet) not supported for this Background Estimator");
     128  }
     129
     130  /// Returns true if this background estimator has support for
     131  /// determination of rho_m.
     132  ///
     133  /// Note that support for sigma_m is automatic is one has sigma and
     134  /// rho_m support.
     135  virtual bool has_rho_m() const {return false;}
     136  //\}
     137
    103138
    104139  /// @name configuring the behaviour
     
    114149  /// The BackgroundRescalingYPolynomial class can be used to get a
    115150  /// rescaling that depends just on rapidity.
     151  ///
     152  /// There is currently no support for different rescaling classes
     153  /// for rho and rho_m determinations.
    116154  virtual void set_rescaling_class(const FunctionOfPseudoJet<double> * rescaling_class_in) { _rescaling_class = rescaling_class_in; }
    117155
  • external/fastjet/tools/Boost.hh

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id: Boost.hh 2689 2011-11-14 14:51:06Z soyez $
     1//FJSTARTHEADER
     2// $Id: Boost.hh 3433 2014-07-23 08:17:03Z salam $
    33//
    4 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     4// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931#ifndef __FASTJET_TOOL_BOOST_HH__
  • external/fastjet/tools/CASubJetTagger.cc

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id$
     1//FJSTARTHEADER
     2// $Id: CASubJetTagger.cc 3433 2014-07-23 08:17:03Z salam $
    33//
    4 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     4// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931#include <fastjet/tools/CASubJetTagger.hh>
  • external/fastjet/tools/CASubJetTagger.hh

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id: CASubJetTagger.hh 2616 2011-09-30 18:03:40Z salam $
    3 //
    4 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     1//FJSTARTHEADER
     2// $Id: CASubJetTagger.hh 3433 2014-07-23 08:17:03Z salam $
     3//
     4// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931#ifndef __CASUBJET_TAGGER_HH__
  • external/fastjet/tools/Filter.cc

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id$
     1//FJSTARTHEADER
     2// $Id: Filter.cc 3633 2014-08-15 13:23:52Z soyez $
    33//
    4 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     4// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931#include "fastjet/tools/Filter.hh"
     32#include "fastjet/tools/Recluster.hh"
    3033#include <fastjet/ClusterSequenceActiveAreaExplicitGhosts.hh>
    3134#include <cassert>
     
    4548// class description
    4649string Filter::description() const {
     50  if (!_initialised){
     51    return "uninitialised Filter";
     52  }
     53
    4754  ostringstream ostr;
    4855  ostr << "Filter with subjet_def = ";
     
    7380// by the filtering
    7481PseudoJet Filter::result(const PseudoJet &jet) const {
     82  if (!_initialised){
     83    //Q: do we throw or do we return an empty PJ?
     84    throw Error("uninitialised Filter");
     85  }
     86
    7587  // start by getting the list of subjets (including a list of sanity
    7688  // checks)
     
    7890  //     _set_filtered_elements_cafilt)
    7991  vector<PseudoJet> subjets;
    80   JetDefinition subjet_def;
    81   bool discard_area;
    82   // NB: on return, subjet_def is set to the jet definition actually
    83   //     used (so that we can make use of its recombination scheme
    84   //     when joining the jets to be kept).
    85   _set_filtered_elements(jet, subjets, subjet_def, discard_area);
     92  //JetDefinition subjet_def;
     93  bool ca_optimised = _set_filtered_elements(jet, subjets);
     94
     95  // apply subtraction if needed:
     96  if (_subtractor){
     97    subjets = (*_subtractor)(subjets);
     98  } else if (_rho!=0){
     99    if (subjets.size()>0){
     100      const ClusterSequenceAreaBase *csab = subjets[0].validated_csab();
     101      for (unsigned int i=0;i<subjets.size();i++){
     102        subjets[i]=csab->subtracted_jet(subjets[i], _rho);
     103      }
     104    }
     105  }
    86106
    87107  // now build the vector of kept and rejected subjets
     
    94114
    95115  // gather the info under the form of a PseudoJet
    96   return _finalise(jet, kept, rejected, subjet_def, discard_area);
     116  return _finalise(jet, kept, rejected, ca_optimised);
    97117}
    98118
    99119
    100120// sets filtered_elements to be all the subjets on which filtering will work
    101 void Filter::_set_filtered_elements(const PseudoJet & jet,
    102                                     vector<PseudoJet> & filtered_elements,
    103                                     JetDefinition & subjet_def,
    104                                     bool & discard_area) const {
    105   // sanity checks
    106   //-------------------------------------------------------------------
    107   // make sure that the jet has constituents
    108   if (! jet.has_constituents())
    109     throw Error("Filter can only be applied on jets having constituents");
     121//
     122// return true when the subjets have been optained using teh optimised
     123// method for C/A
     124bool Filter::_set_filtered_elements(const PseudoJet & jet,
     125                                    vector<PseudoJet> & filtered_elements) const {
     126  // create the recluster instance
     127  Recluster recluster;
     128  if ((_Rfilt>=0) || (_Rfiltfunc))
     129    recluster = Recluster(cambridge_algorithm, (_Rfiltfunc) ? (*_Rfiltfunc)(jet) : _Rfilt, Recluster::keep_all);
     130  else
     131    recluster = Recluster(_subjet_def, false, Recluster::keep_all);
    110132
    111   // for a whole variety of checks, we shall need the "recursive"
    112   // pieces of the jet (the jet itself or recursing down to its most
    113   // fundamental pieces).
    114   // So we do compute these once and for all
    115   vector<PseudoJet> all_pieces; //.clear();
    116   if ((!_get_all_pieces(jet, all_pieces)) || (all_pieces.size()==0))
    117     throw Error("Attempt to filter a jet that has no associated ClusterSequence or is not a superposition of jets associated with a ClusterSequence");
    118  
    119   // if the filter uses subtraction, make sure we have a CS that supports area and has
    120   // explicit ghosts
    121   if (_uses_subtraction()) {
    122     if (!jet.has_area())   
    123       throw Error("Attempt to filter and subtract (non-zero rho or subtractor) without area info for the original jet");
    124 
    125     if (!_check_explicit_ghosts(all_pieces))
    126       throw Error("Attempt to filter and subtract (non-zero rho or subtractor) without explicit ghosts");
    127   }
    128 
    129   // if we're dealing with a dynamic determination of the filtering
    130   // radius, do it now
    131   if ((_Rfilt>=0) || (_Rfiltfunc)){
    132     double Rfilt = (_Rfiltfunc) ? (*_Rfiltfunc)(jet) : _Rfilt;
    133     const JetDefinition::Recombiner * common_recombiner = _get_common_recombiner(all_pieces);
    134     if (common_recombiner) {
    135       if (typeid(*common_recombiner) == typeid(JetDefinition::DefaultRecombiner)) {
    136         RecombinationScheme scheme =
    137           static_cast<const JetDefinition::DefaultRecombiner *>(common_recombiner)->scheme();
    138         subjet_def = JetDefinition(cambridge_algorithm, Rfilt, scheme);
    139       } else {
    140         subjet_def = JetDefinition(cambridge_algorithm, Rfilt, common_recombiner);
    141       }
    142     } else {
    143       subjet_def = JetDefinition(cambridge_algorithm, Rfilt);
    144     }
    145   } else {
    146     subjet_def = _subjet_def;
    147   }
    148 
    149   // get the jet definition to be use and whether we can apply our
    150   // simplified C/A+C/A filter
    151   //
    152   // we apply C/A clustering iff
    153   //  - the request subjet_def is C/A
    154   //  - the jet is either directly coming from C/A or if it is a
    155   //    superposition of C/A jets
    156   //  - the pieces agree with the recombination scheme of subjet_def
    157   //------------------------------------------------------------------
    158   bool simple_cafilt = _check_ca(all_pieces);
    159 
    160   // extract the subjets
    161   //-------------------------------------------------------------------
    162   discard_area = false;
    163   if (simple_cafilt){
    164     // first make sure that 'filtered_elements' is empty
    165     filtered_elements.clear();
    166     _set_filtered_elements_cafilt(jet, filtered_elements, subjet_def.R());
    167     // in the following case, areas can be erroneous and will be discarded
    168     discard_area = (!_uses_subtraction()) && (jet.has_area()) && (!_check_explicit_ghosts(all_pieces));
    169   } else {
    170     // here we'll simply recluster the jets.
    171     //
    172     // To include an area support we need
    173     //  - the jet to have an area
    174     //  - subtraction requested or explicit ghosts
    175     bool do_areas = (jet.has_area()) && ((_uses_subtraction()) || (_check_explicit_ghosts(all_pieces)));
    176     _set_filtered_elements_generic(jet, filtered_elements, subjet_def, do_areas);
    177   }
    178 
    179   // order the filtered elements in pt
    180   filtered_elements = sorted_by_pt(filtered_elements);
     133  // get the subjets
     134  //JetDefinition subjet_def;
     135  return recluster.get_new_jets_and_def(jet, filtered_elements);
    181136}
    182 
    183 // set the filtered elements in the simple case of C/A+C/A
    184 //
    185 // WATCH OUT: this could be recursively called, so filtered elements
    186 //            of 'jet' are APPENDED to 'filtered_elements'
    187 void Filter::_set_filtered_elements_cafilt(const PseudoJet & jet,
    188                                            vector<PseudoJet> & filtered_elements,
    189                                            double Rfilt) const{
    190   // we know that the jet is either a C/A jet or a superposition of
    191   // such pieces
    192   if (jet.has_associated_cluster_sequence()){
    193     // just extract the exclusive subjets of 'jet'
    194     const ClusterSequence *cs = jet.associated_cluster_sequence();
    195     vector<PseudoJet> local_fe;
    196 
    197     double dcut = Rfilt / cs->jet_def().R();
    198     if (dcut>=1.0){
    199       local_fe.push_back(jet);
    200     } else {
    201       dcut *= dcut;
    202       local_fe = jet.exclusive_subjets(dcut);
    203     }
    204 
    205     // subtract the jets if needed
    206     // Note that this one would work on pieces!!
    207     //-----------------------------------------------------------------
    208     if (_uses_subtraction()){
    209       const ClusterSequenceAreaBase * csab = jet.validated_csab();
    210       for (unsigned int i=0;i<local_fe.size();i++) {
    211         if (_subtractor) {
    212           local_fe[i] = (*_subtractor)(local_fe[i]);
    213         } else {
    214           local_fe[i] = csab->subtracted_jet(local_fe[i], _rho);
    215         }
    216       }
    217     }
    218 
    219     copy(local_fe.begin(), local_fe.end(), back_inserter(filtered_elements));
    220     return;
    221   }
    222 
    223   // just recurse into the pieces
    224   const vector<PseudoJet> & pieces = jet.pieces();
    225   for (vector<PseudoJet>::const_iterator it = pieces.begin();
    226        it!=pieces.end(); it++)
    227     _set_filtered_elements_cafilt(*it, filtered_elements, Rfilt);
    228 }
    229 
    230 
    231 // set the filtered elements in the generic re-clustering case (wo
    232 // subtraction)
    233 void Filter::_set_filtered_elements_generic(const PseudoJet & jet,
    234                                             vector<PseudoJet> & filtered_elements,
    235                                             const JetDefinition & subjet_def,
    236                                             bool do_areas) const{
    237   // create a new, internal, ClusterSequence from the jet constituents
    238   // get the subjets directly from there
    239   //
    240   // If the jet has area support then we separate the ghosts from the
    241   // "regular" particles so the subjets will also have area
    242   // support. Note that we do this regardless of whether rho is zero
    243   // or not.
    244   //
    245   // Note that to be able to separate the ghosts, one needs explicit
    246   // ghosts!!
    247   // ---------------------------------------------------------------
    248   if (do_areas){
    249     vector<PseudoJet> all_constituents = jet.constituents();
    250     vector<PseudoJet> regular_constituents, ghosts; 
    251 
    252     for (vector<PseudoJet>::iterator it = all_constituents.begin();
    253          it != all_constituents.end(); it++){
    254       if (it->is_pure_ghost())
    255         ghosts.push_back(*it);
    256       else
    257         regular_constituents.push_back(*it);
    258     }
    259 
    260     // figure out the ghost area from the 1st ghost (if none, any value
    261     // would probably do as the area will be 0 and subtraction will have
    262     // no effect!)
    263     double ghost_area = (ghosts.size()) ? ghosts[0].area() : 0.01;
    264     ClusterSequenceActiveAreaExplicitGhosts * csa
    265       = new ClusterSequenceActiveAreaExplicitGhosts(regular_constituents,
    266                                                     subjet_def,
    267                                                     ghosts, ghost_area);
    268 
    269     // get the subjets: we use the subtracted or unsubtracted ones
    270     // depending on rho or _subtractor being non-zero
    271     if (_uses_subtraction()) {
    272       if (_subtractor) {
    273         filtered_elements = (*_subtractor)(csa->inclusive_jets());
    274       } else {
    275         filtered_elements = csa->subtracted_jets(_rho);
    276       }
    277     } else {
    278       filtered_elements = csa->inclusive_jets();
    279     }
    280 
    281     // allow the cs to be deleted when it's no longer used
    282     csa->delete_self_when_unused();
    283   } else {
    284     ClusterSequence * cs = new ClusterSequence(jet.constituents(), subjet_def);
    285     filtered_elements = cs->inclusive_jets();
    286     // allow the cs to be deleted when it's no longer used
    287     cs->delete_self_when_unused();
    288   }
    289 }
    290 
    291137
    292138// gather the information about what is kept and rejected under the
     
    295141                            vector<PseudoJet> & kept,
    296142                            vector<PseudoJet> & rejected,
    297                             const JetDefinition & subjet_def,
    298                             const bool discard_area) const {
    299   // figure out which recombiner to use
    300   const JetDefinition::Recombiner &rec = *(subjet_def.recombiner());
     143                            bool ca_optimisation_used) const {
     144  PseudoJet filtered_jet;
    301145
    302   // create an appropriate structure and transfer the info to it
    303   PseudoJet filtered_jet = join<StructureType>(kept, rec);
     146  if (kept.size()+rejected.size()>0){
     147    // figure out which recombiner to use
     148    const JetDefinition::Recombiner &rec = (kept.size()>0)
     149      ? *(kept[0].associated_cs()->jet_def().recombiner())
     150      : *(rejected[0].associated_cs()->jet_def().recombiner());
     151
     152    // create an appropriate structure and transfer the info to it
     153    filtered_jet = join<StructureType>(kept, rec);
     154  } else {
     155    filtered_jet = join<StructureType>(kept);
     156  }
    304157  StructureType *fs = (StructureType*) filtered_jet.structure_non_const_ptr();
    305 //  fs->_original_jet = jet;
    306158  fs->_rejected = rejected;
     159 
     160  // if we've used C/A optimisation, we need to get rid of the area
     161  // information if it comes from a non-explicit-ghost clustering.
     162  // (because in that case it can be erroneous due the lack of
     163  // information about empty areas)
     164  if ((ca_optimisation_used) && (kept.size()+rejected.size()>0)){
     165    bool has_non_explicit_ghost_area = (kept.size()>0)
     166      ? (kept[0].has_area()     && kept[0].validated_csab()->has_explicit_ghosts())
     167      : (rejected[0].has_area() && rejected[0].validated_csab()->has_explicit_ghosts());
     168    if (has_non_explicit_ghost_area)
     169      fs->discard_area();
     170  }
    307171
    308   if (discard_area){
    309     // safety check: make sure there is an area to discard!!!
    310     assert(fs->_area_4vector_ptr);
    311     delete fs->_area_4vector_ptr;
    312     fs->_area_4vector_ptr=0;
    313   }
    314  
    315172  return filtered_jet;
    316173}
    317174
    318 // various checks
    319 //----------------------------------------------------------------------
    320 
    321 // get the pieces down to the fundamental pieces
    322 //
    323 // Note that this just checks that there is an associated CS to the
    324 // fundamental pieces, not that it is still valid
    325 bool Filter::_get_all_pieces(const PseudoJet &jet, vector<PseudoJet> &all_pieces) const{
    326   if (jet.has_associated_cluster_sequence()){
    327     all_pieces.push_back(jet);
    328     return true;
    329   }
    330 
    331   if (jet.has_pieces()){
    332     const vector<PseudoJet> pieces = jet.pieces();
    333     for (vector<PseudoJet>::const_iterator it=pieces.begin(); it!=pieces.end(); it++)
    334       if (!_get_all_pieces(*it, all_pieces)) return false;
    335     return true;
    336   }
    337 
    338   return false;
    339 }
    340 
    341 // get the common recombiner to all pieces (NULL if none)
    342 //
    343 // Note that if the jet has an associated cluster sequence that is no
    344 // longer valid, an error will be thrown (needed since it could be the
    345 // 1st check called after the enumeration of the pieces)
    346 const JetDefinition::Recombiner* Filter::_get_common_recombiner(const vector<PseudoJet> &all_pieces) const{
    347   const JetDefinition & jd_ref = all_pieces[0].validated_cs()->jet_def();
    348   for (unsigned int i=1; i<all_pieces.size(); i++)
    349     if (!all_pieces[i].validated_cs()->jet_def().has_same_recombiner(jd_ref)) return NULL;
    350 
    351   return jd_ref.recombiner();
    352 }
    353 
    354 // check if the jet (or all its pieces) have explicit ghosts
    355 // (assuming the jet has area support
    356 //
    357 // Note that if the jet has an associated cluster sequence that is no
    358 // longer valid, an error will be thrown (needed since it could be the
    359 // 1st check called after the enumeration of the pieces)
    360 bool Filter::_check_explicit_ghosts(const vector<PseudoJet> &all_pieces) const{
    361   for (vector<PseudoJet>::const_iterator it=all_pieces.begin(); it!=all_pieces.end(); it++)
    362     if (! it->validated_csab()->has_explicit_ghosts()) return false;
    363   return true;
    364 }
    365 
    366 // check if one can apply the simplification for C/A subjets
    367 //
    368 // This includes:
    369 //  - the subjet definition asks for C/A subjets
    370 //  - all the pieces share the same CS
    371 //  - that CS is C/A with the same recombiner as the subjet def
    372 //  - the filtering radius is not larger than any of the pairwise
    373 //    distance between the pieces
    374 //
    375 // Note that if the jet has an associated cluster sequence that is no
    376 // longer valid, an error will be thrown (needed since it could be the
    377 // 1st check called after the enumeration of the pieces)
    378 bool Filter::_check_ca(const vector<PseudoJet> &all_pieces) const{
    379   if (_subjet_def.jet_algorithm() != cambridge_algorithm) return false;
    380 
    381   // check that the 1st of all the pieces (we're sure there is at
    382   // least one) is coming from a C/A clustering. Then check that all
    383   // the following pieces share the same ClusterSequence
    384   const ClusterSequence * cs_ref = all_pieces[0].validated_cs();
    385   if (cs_ref->jet_def().jet_algorithm() != cambridge_algorithm) return false;
    386   for (unsigned int i=1; i<all_pieces.size(); i++)
    387     if (all_pieces[i].validated_cs() != cs_ref) return false;
    388 
    389   // check that the 1st peice has the same recombiner as the one used
    390   // for the subjet clustering
    391   // Note that since they share the same CS, checking the 2st one is enough
    392   if (!cs_ref->jet_def().has_same_recombiner(_subjet_def)) return false;
    393 
    394   // we also have to make sure that the filtering radius is not larger
    395   // than any of the inter-pieces distance
    396   double Rfilt2 = _subjet_def.R();
    397   Rfilt2 *= Rfilt2;
    398   for (unsigned int i=0; i<all_pieces.size()-1; i++){
    399     for (unsigned int j=i+1; j<all_pieces.size(); j++){
    400       if (all_pieces[i].squared_distance(all_pieces[j]) <  Rfilt2) return false;
    401     }
    402   }
    403 
    404   return true;
    405 }
    406 
    407 //----------------------------------------------------------------------
    408 // FilterInterface implementation
    409 //----------------------------------------------------------------------
    410 
    411175
    412176FASTJET_END_NAMESPACE      // defined in fastjet/internal/base.hh
  • external/fastjet/tools/Filter.hh

    r5b5a56b r35cdc46  
    22#define __FASTJET_TOOLS_FILTER_HH__
    33
    4 //STARTHEADER
    5 // $Id: Filter.hh 2694 2011-11-14 22:27:51Z salam $
    6 //
    7 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     4//FJSTARTHEADER
     5// $Id: Filter.hh 3494 2014-07-30 20:38:48Z soyez $
     6//
     7// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    88//
    99//----------------------------------------------------------------------
     
    1616//
    1717//  The algorithms that underlie FastJet have required considerable
    18 //  development and are described in hep-ph/0512210. If you use
     18//  development. They are described in the original FastJet paper,
     19//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1920//  FastJet as part of work towards a scientific publication, please
    20 //  include a citation to the FastJet paper.
     21//  quote the version you use and include a citation to the manual and
     22//  optionally also to hep-ph/0512210.
    2123//
    2224//  FastJet is distributed in the hope that it will be useful,
     
    2830//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2931//----------------------------------------------------------------------
    30 //ENDHEADER
     32//FJENDHEADER
    3133
    3234#include <fastjet/ClusterSequence.hh>
     
    98100  /// Note: this is just for derived classes
    99101  ///       a Filter initialised through this constructor will not work!
    100   Filter() : _Rfiltfunc(0){};
     102  Filter() : _Rfiltfunc(0), _initialised(false){};
    101103
    102104  /// define a filter that decomposes a jet into subjets using a
     
    113115  /// ghosts
    114116  Filter(JetDefinition subjet_def, Selector selector, double rho = 0.0) :
    115     _subjet_def(subjet_def), _Rfiltfunc(0), _Rfilt(-1), _selector(selector), _rho(rho), _subtractor(0) {}
     117    _subjet_def(subjet_def), _Rfiltfunc(0), _Rfilt(-1), _selector(selector), _rho(rho), _subtractor(0), _initialised(true) {}
    116118
    117119  /// Same as the full constructor (see above) but just specifying the radius
     
    121123  ///  \param Rfilt   the filtering radius
    122124  Filter(double Rfilt, Selector selector, double rho = 0.0) :
    123     _Rfiltfunc(0), _Rfilt(Rfilt), _selector(selector), _rho(rho), _subtractor(0) {
     125    _Rfiltfunc(0), _Rfilt(Rfilt), _selector(selector), _rho(rho), _subtractor(0), _initialised(true) {
    124126    if (_Rfilt<0)
    125127      throw Error("Attempt to create a Filter with a negative filtering radius");
     
    133135  ///  \param Rfilt_func   the filtering radius function of a PseudoJet
    134136  Filter(FunctionOfPseudoJet<double> *Rfilt_func, Selector selector, double rho = 0.0) :
    135     _Rfiltfunc(Rfilt_func), _Rfilt(-1), _selector(selector), _rho(rho), _subtractor(0) {}
     137    _Rfiltfunc(Rfilt_func), _Rfilt(-1), _selector(selector), _rho(rho), _subtractor(0), _initialised(true) {}
    136138
    137139  /// default dtor
     
    140142  /// Set a subtractor that is applied to all individual subjets before
    141143  /// deciding which ones to keep. It takes precedence over a non-zero rho.
    142   void set_subtractor(const Transformer * subtractor) {_subtractor = subtractor;}
     144  void set_subtractor(const FunctionOfPseudoJet<PseudoJet> * subtractor) {_subtractor = subtractor;}
    143145
    144146  /// runs the filtering and sets kept and rejected to be the jets of interest
     
    159161  /// It also sets the subjet_def to be used in joining things (the bit of
    160162  /// subjet def that is of interest for later is the recombiner).
    161   void _set_filtered_elements(const PseudoJet & jet,
    162                               std::vector<PseudoJet> & filtered_elements,
    163                               JetDefinition & subjet_def,
    164                               bool & discard_area) const;
     163  ///
     164  /// this returns true if teh optimisation trick for C/A reclustering has been used
     165  bool _set_filtered_elements(const PseudoJet & jet,
     166                              std::vector<PseudoJet> & filtered_elements) const;
    165167 
    166   /// set the filtered elements in the simple case of C/A+C/A
    167   void _set_filtered_elements_cafilt(const PseudoJet & jet,
    168                                      std::vector<PseudoJet> & filtered_elements,
    169                                      double Rfilt) const;
    170 
    171   /// set the filtered elements in the generic re-clustering case
    172   void _set_filtered_elements_generic(const PseudoJet & jet,
    173                                       std::vector<PseudoJet> & filtered_elements,
    174                                       const JetDefinition & subjet_def,
    175                                       bool do_areas) const;
    176 
    177168  /// gather the information about what is kept and rejected under the
    178169  /// form of a PseudoJet with a special ClusterSequenceInfo
     170  ///
     171  /// The last argument (ca_optimisation_used) should be true if the
     172  /// optimisation trick for C/A reclustering has been used (in which
     173  /// case some extra tests have to be run for non-explicit-ghost
     174  /// areas)
    179175  PseudoJet _finalise(const PseudoJet & jet,
    180176                      std::vector<PseudoJet> & kept,
    181177                      std::vector<PseudoJet> & rejected,
    182                       const JetDefinition & subjet_def,
    183                       const bool discard_area) const;
    184 
    185   // a series of checks
    186   //--------------------------------------------------------------------
    187   /// get the pieces down to the fundamental pieces
    188   bool _get_all_pieces(const PseudoJet &jet, std::vector<PseudoJet> &all_pieces) const;
    189 
    190   /// get the common recombiner to all pieces (NULL if none)
    191   const JetDefinition::Recombiner* _get_common_recombiner(const std::vector<PseudoJet> &all_pieces) const;
    192 
    193   /// check if one can apply the simplified trick for C/A subjets
    194   bool _check_ca(const std::vector<PseudoJet> &all_pieces) const;
    195 
    196   /// check if the jet (or all its pieces) have explicit ghosts
    197   /// (assuming the jet has area support
    198   ///
    199   /// Note that if the jet has an associated cluster sequence that is no
    200   /// longer valid, an error will be thrown
    201   bool _check_explicit_ghosts(const std::vector<PseudoJet> &all_pieces) const;
     178                      bool ca_optimisation_used) const;
    202179
    203180  bool _uses_subtraction() const {return (_subtractor || _rho != 0);}
     
    209186  Selector _selector;  ///< the subjet selection criterium
    210187  double _rho;                 ///< the background density (used for subtraction when possible)
    211   const Transformer * _subtractor; ///< for subtracting bkgd density from subjets
     188  const FunctionOfPseudoJet<PseudoJet> * _subtractor; ///< for subtracting bkgd density from subjets
     189
     190  bool _initialised;    ///< true when the Filter has been properly intialised
    212191};
    213192
  • external/fastjet/tools/GridMedianBackgroundEstimator.cc

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id$
    3 //
    4 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     1//FJSTARTHEADER
     2// $Id: GridMedianBackgroundEstimator.cc 3555 2014-08-11 09:56:35Z salam $
     3//
     4// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931
     
    3234
    3335FASTJET_BEGIN_NAMESPACE      // defined in fastjet/internal/base.hh
     36
    3437
    3538//----------------------------------------------------------------------
     
    3942// of the specified particles.
    4043void GridMedianBackgroundEstimator::set_particles(const vector<PseudoJet> & particles) {
    41   fill(_scalar_pt.begin(), _scalar_pt.end(), 0.0);
    42   for (unsigned i = 0; i < particles.size(); i++) {
    43     int j = igrid(particles[i]);
    44     if (j >= 0){
    45       if (_rescaling_class == 0)
    46         _scalar_pt[j] += particles[i].perp();
    47       else
    48         _scalar_pt[j] += particles[i].perp()/(*_rescaling_class)(particles[i]);
     44  vector<double> scalar_pt(n_tiles(), 0.0);
     45
     46#ifdef FASTJET_GMBGE_USEFJGRID
     47  assert(all_tiles_equal_area());
     48  //assert(n_good_tiles() == n_tiles()); // not needed now that we have an implementation
     49#endif
     50
     51  // check if we need to compute only rho or both rho and rho_m
     52  if (_enable_rho_m){
     53    // both rho and rho_m
     54    //
     55    // this requires a few other variables
     56    vector<double> scalar_dt(n_tiles(), 0.0);
     57    double pt, dt;
     58    for (unsigned i = 0; i < particles.size(); i++) {
     59      int j = tile_index(particles[i]);
     60      if (j >= 0){
     61        pt = particles[i].pt();
     62        dt = particles[i].mt() - pt;
     63        if (_rescaling_class == 0){
     64          scalar_pt[j] += pt;
     65          scalar_dt[j] += dt;
     66        } else {
     67          double r = (*_rescaling_class)(particles[i]);
     68          scalar_pt[j] += pt/r;
     69          scalar_dt[j] += dt/r;
     70        }
     71      }
     72    }
     73    // sort things for _percentile
     74    sort(scalar_dt.begin(), scalar_dt.end());
     75
     76    // compute rho_m and sigma_m (see comment below for the
     77    // normaliosation of sigma)
     78    double p50 = _percentile(scalar_dt, 0.5);
     79    _rho_m   = p50 / mean_tile_area();
     80    _sigma_m = (p50-_percentile(scalar_dt, (1.0-0.6827)/2.0))/sqrt(mean_tile_area());
     81  } else {
     82    // only rho
     83    //fill(_scalar_pt.begin(), _scalar_pt.end(), 0.0);
     84    for (unsigned i = 0; i < particles.size(); i++) {
     85      int j = tile_index(particles[i]);
     86      if (j >= 0){
     87        if (_rescaling_class == 0){
     88          scalar_pt[j] += particles[i].pt();
     89        } else {
     90          scalar_pt[j] += particles[i].pt()/(*_rescaling_class)(particles[i]);
     91        }
     92      }
    4993    }
    5094  }
    51   sort(_scalar_pt.begin(), _scalar_pt.end());
     95
     96  // if there are some "bad" tiles, then we need to exclude them from
     97  // the calculation of the median. We'll do this by condensing the
     98  // scalar_pt vector down to just the values for the tiles that are
     99  // good.
     100  //
     101  // tested answers look right in "issue" 2014-08-08-testing-rect-grid
     102  if (n_good_tiles() != n_tiles()) {
     103    int newn = 0;
     104    for (unsigned i = 0; i < scalar_pt.size(); i++) {
     105      if (tile_is_good(i)) {
     106        // clang gets confused with the SharedPtr swap if we don't
     107        // have std:: here
     108        std::swap(scalar_pt[i],scalar_pt[newn]);
     109        newn++;
     110      }
     111    }
     112    scalar_pt.resize(newn);
     113  }
     114
     115  // in all cases, carry on with the computation of rho
     116  //
     117  // first sort
     118  sort(scalar_pt.begin(), scalar_pt.end());
     119
     120  // then compute rho
     121  //
     122  // watch out: by definition, our sigma is the standard deviation of
     123  // the pt density multiplied by the square root of the cell area
     124  double p50 = _percentile(scalar_pt, 0.5);
     125  _rho   = p50 / mean_tile_area();
     126  _sigma = (p50-_percentile(scalar_pt, (1.0-0.6827)/2.0))/sqrt(mean_tile_area());
    52127
    53128  _has_particles = true;
     
    61136double GridMedianBackgroundEstimator::rho() const {
    62137  verify_particles_set();
    63   return _percentile(_scalar_pt, 0.5) / _cell_area;
     138  return _rho;
    64139}
    65140
     
    71146double GridMedianBackgroundEstimator::sigma() const{
    72147  verify_particles_set();
    73   // watch out: by definition, our sigma is the standard deviation of
    74   // the pt density multiplied by the square root of the cell area
    75   return (_percentile(_scalar_pt, 0.5) -
    76           _percentile(_scalar_pt, (1.0-0.6827)/2.0)
    77           )/sqrt(_cell_area);
     148  return _sigma;
    78149}
    79150
     
    85156// determination.
    86157double GridMedianBackgroundEstimator::rho(const PseudoJet & jet)  {
    87   verify_particles_set();
     158  //verify_particles_set();
    88159  double rescaling = (_rescaling_class == 0) ? 1.0 : (*_rescaling_class)(jet);
    89160  return rescaling*rho();
     
    95166// the position of a given jet. As for rho(jet), it is non-const.
    96167double GridMedianBackgroundEstimator::sigma(const PseudoJet & jet){
    97   verify_particles_set();
     168  //verify_particles_set();
    98169  double rescaling = (_rescaling_class == 0) ? 1.0 : (*_rescaling_class)(jet);
    99170  return rescaling*sigma();
     171}
     172
     173//----------------------------------------------------------------------
     174// returns rho_m (particle-masses contribution to the 4-vector density)
     175double GridMedianBackgroundEstimator::rho_m() const {
     176  if (! _enable_rho_m){
     177    throw Error("GridMediamBackgroundEstimator: rho_m requested but rho_m calculation has been disabled.");
     178  }
     179  verify_particles_set();
     180  return _rho_m;
     181}
     182
     183
     184//----------------------------------------------------------------------
     185// returns sigma_m (particle-masses contribution to the 4-vector
     186// density); must be multipled by sqrt(area) to get fluctuations
     187// for a region of a given area.
     188double GridMedianBackgroundEstimator::sigma_m() const{
     189  if (! _enable_rho_m){
     190    throw Error("GridMediamBackgroundEstimator: sigma_m requested but rho_m/sigma_m calculation has been disabled.");
     191  }
     192  verify_particles_set();
     193  return _sigma_m;
     194}
     195
     196//----------------------------------------------------------------------
     197// returns rho_m locally at the position of a given jet. As for
     198// rho(jet), it is non-const.
     199double GridMedianBackgroundEstimator::rho_m(const PseudoJet & jet)  {
     200  //verify_particles_set();
     201  double rescaling = (_rescaling_class == 0) ? 1.0 : (*_rescaling_class)(jet);
     202  return rescaling*rho_m();
     203}
     204
     205
     206//----------------------------------------------------------------------
     207// returns sigma_m locally at the position of a given jet. As for
     208// rho(jet), it is non-const.
     209double GridMedianBackgroundEstimator::sigma_m(const PseudoJet & jet){
     210  //verify_particles_set();
     211  double rescaling = (_rescaling_class == 0) ? 1.0 : (*_rescaling_class)(jet);
     212  return rescaling*sigma_m();
    100213}
    101214
     
    112225string GridMedianBackgroundEstimator::description() const {
    113226  ostringstream desc;
     227#ifdef FASTJET_GMBGE_USEFJGRID
     228  desc << "GridMedianBackgroundEstimator, with " << RectangularGrid::description();
     229#else
    114230  desc << "GridMedianBackgroundEstimator, with grid extension |y| < " << _ymax
    115        << " and requested grid spacing = " << _requested_grid_spacing;
     231       << ", and grid cells of size dy x dphi = " << _dy << " x " << _dphi
     232       << " (requested size = " << _requested_grid_spacing << ")";
     233#endif
    116234  return desc.str();
    117235}       
     
    144262
    145263
     264#ifndef FASTJET_GMBGE_USEFJGRID
    146265//----------------------------------------------------------------------
    147266// protected material
     
    168287
    169288  _ntotal = _nphi * _ny;
    170   _scalar_pt.resize(_ntotal);
    171   _cell_area = _dy * _dphi;
    172 }
    173 
    174 
    175 //----------------------------------------------------------------------
    176 // retrieve the grid cell index for a given PseudoJet
    177 int GridMedianBackgroundEstimator::igrid(const PseudoJet & p) const {
     289  //_scalar_pt.resize(_ntotal);
     290  _tile_area = _dy * _dphi;
     291}
     292
     293
     294//----------------------------------------------------------------------
     295// retrieve the grid tile index for a given PseudoJet
     296int GridMedianBackgroundEstimator::tile_index(const PseudoJet & p) const {
    178297  // directly taking int does not work for values between -1 and 0
    179298  // so use floor instead
     
    193312  if (iphi == _nphi) iphi = 0; // just in case of rounding errors
    194313
    195   int igrid_res = iy*_nphi + iphi;
    196   assert (igrid_res >= 0 && igrid_res < _ny*_nphi);
    197   return igrid_res;
    198 }
     314  int index_res = iy*_nphi + iphi;
     315  assert (index_res >= 0 && index_res < _ny*_nphi);
     316  return index_res;
     317}
     318#endif // FASTJET_GMBGE_USEFJGRID
     319
    199320
    200321
  • external/fastjet/tools/GridMedianBackgroundEstimator.hh

    r5b5a56b r35cdc46  
    22#define __GRID_MEDIAN_BACKGROUND_ESTIMATOR_HH__
    33
    4 //STARTHEADER
    5 // $Id: GridMedianBackgroundEstimator.hh 2580 2011-09-13 17:25:43Z salam $
    6 //
    7 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     4//FJSTARTHEADER
     5// $Id: GridMedianBackgroundEstimator.hh 3610 2014-08-13 09:49:28Z salam $
     6//
     7// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    88//
    99//----------------------------------------------------------------------
     
    1616//
    1717//  The algorithms that underlie FastJet have required considerable
    18 //  development and are described in hep-ph/0512210. If you use
     18//  development. They are described in the original FastJet paper,
     19//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1920//  FastJet as part of work towards a scientific publication, please
    20 //  include a citation to the FastJet paper.
     21//  quote the version you use and include a citation to the manual and
     22//  optionally also to hep-ph/0512210.
    2123//
    2224//  FastJet is distributed in the hope that it will be useful,
     
    2830//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2931//----------------------------------------------------------------------
    30 //ENDHEADER
     32//FJENDHEADER
    3133
    3234
    3335#include "fastjet/tools/BackgroundEstimatorBase.hh"
     36
     37// if defined then we'll use the RectangularGrid class
     38//
     39// (For FastJet 3.2, maybe remove the symbol and simply clean up the
     40// code below to use exclusively the RectangularGrid)
     41#define FASTJET_GMBGE_USEFJGRID
     42
     43#ifdef FASTJET_GMBGE_USEFJGRID
     44#include "fastjet/RectangularGrid.hh"
     45#endif
     46
     47
    3448
    3549FASTJET_BEGIN_NAMESPACE      // defined in fastjet/internal/base.hh
     
    6175///   rho() [Without rescaling, they are identical]
    6276///
    63 class GridMedianBackgroundEstimator : public BackgroundEstimatorBase {
     77class GridMedianBackgroundEstimator : public BackgroundEstimatorBase
     78#ifdef FASTJET_GMBGE_USEFJGRID
     79                                                                    , RectangularGrid
     80#endif
     81{
     82
    6483public:
    6584  /// @name  constructors and destructors
    6685  //\{
     86#ifdef FASTJET_GMBGE_USEFJGRID
    6787  //----------------------------------------------------------------
    6888  ///   \param ymax   maximal absolute rapidity extent of the grid
     
    7191  ///             periodicity in azimuthal angle (size, not area)
    7292  GridMedianBackgroundEstimator(double ymax, double requested_grid_spacing) :
     93    RectangularGrid(ymax, requested_grid_spacing),
     94    _has_particles(false), _enable_rho_m(true) {}
     95
     96  //----------------------------------------------------------------
     97  /// Constructor based on a user's fully specified RectangularGrid
     98  GridMedianBackgroundEstimator(const RectangularGrid & grid) :
     99    RectangularGrid(grid),
     100    _has_particles(false), _enable_rho_m(true) {
     101    if (!RectangularGrid::is_initialised())
     102      throw Error("attempt to construct GridMedianBackgroundEstimator with uninitialised RectangularGrid");
     103  }   
     104
     105#else  // alternative in old framework where we didn't have the rectangular grid
     106  GridMedianBackgroundEstimator(double ymax, double requested_grid_spacing) :
    73107    _ymin(-ymax), _ymax(ymax),
    74108    _requested_grid_spacing(requested_grid_spacing),
    75     _has_particles(false){setup_grid();}
     109    _has_particles(false), _enable_rho_m(true)
     110  {
     111     setup_grid();
     112  }
     113#endif // FASTJET_GMBGE_USEFJGRID
     114
    76115  //\}
    77116
     
    84123  /// of the specified particles.
    85124  void set_particles(const std::vector<PseudoJet> & particles);
     125
     126  /// determine whether the automatic calculation of rho_m and sigma_m
     127  /// is enabled (by default true)
     128  void set_compute_rho_m(bool enable){ _enable_rho_m = enable;}
    86129
    87130  //\}
     
    114157  bool has_sigma() {return true;}
    115158
     159  //-----------------------------------------------------------------
     160  /// Returns rho_m, the purely longitudinal, particle-mass-induced
     161  /// component of the background density per unit area
     162  double rho_m() const;
     163
     164  /// returns sigma_m, a measure of the fluctuations in the purely
     165  /// longitudinal, particle-mass-induced component of the background
     166  /// density per unit area; must be multipled by sqrt(area) to get
     167  /// fluctuations for a region of a given area.
     168  double sigma_m() const;
     169
     170  /// Returns rho_m locally at the jet position. As for rho(jet), it is non-const.
     171  double rho_m(const PseudoJet & jet);
     172
     173  /// Returns sigma_m locally at the jet position. As for rho(jet), it is non-const.
     174  double sigma_m(const PseudoJet & jet);
     175
     176  /// Returns true if this background estimator has support for
     177  /// determination of rho_m.
     178  ///
     179  /// Note that support for sigma_m is automatic is one has sigma and
     180  /// rho_m support.
     181  bool has_rho_m() const {return _enable_rho_m;}
     182
     183
    116184  /// returns the area of the grid cells (all identical, but
    117185  /// referred to as "mean" area for uniformity with JetMedianBGE).
    118   double mean_area() const {return _cell_area;}
     186  double mean_area() const {return mean_tile_area();}
    119187  //\}
    120188
     
    134202  /// Note that this has to be called BEFORE any attempt to do an
    135203  /// actual computation
     204  ///
     205  /// The same profile will be used for both pt and mt (this is
     206  /// probabaly a good approximation since the particle density
     207  /// changes is what dominates the rapidity profile)
    136208  virtual void set_rescaling_class(const FunctionOfPseudoJet<double> * rescaling_class);
    137209
     
    149221
    150222private:
     223
     224#ifndef FASTJET_GMBGE_USEFJGRID
     225
    151226  /// configure the grid
    152227  void setup_grid();
    153228
    154229  /// retrieve the grid cell index for a given PseudoJet
    155   int igrid(const PseudoJet & p) const;
     230  int tile_index(const PseudoJet & p) const;
     231
     232  // information about the grid
     233  double _ymin, _ymax, _dy, _dphi, _requested_grid_spacing, _tile_area;
     234  int _ny, _nphi, _ntotal;
     235
     236  int n_tiles() const {return _ntotal;}
     237  int n_good_tiles() const {return n_tiles();}
     238  int tile_is_good(int /* itile */) const {return true;}
     239
     240  double mean_tile_area() const {return _tile_area;}
     241#endif // FASTJET_GMBGE_USEFJGRID
     242
    156243
    157244  /// verify that particles have been set and throw an error if not
    158245  void verify_particles_set() const;
    159246
    160   // information about the grid
    161   double _ymin, _ymax, _dy, _dphi, _requested_grid_spacing, _cell_area;
    162   int _ny, _nphi, _ntotal;
    163 
    164247  // information abotu the event
    165   std::vector<double> _scalar_pt;
     248  //std::vector<double> _scalar_pt;
     249  double _rho, _sigma, _rho_m, _sigma_m;
    166250  bool _has_particles;
    167 
    168   // various warnings to let people aware of potential dangers
     251  bool _enable_rho_m;
     252
     253  // various warnings to inform people of potential dangers
    169254  LimitedWarning _warning_rho_of_jet;
    170255  LimitedWarning _warning_rescaling;
  • external/fastjet/tools/JHTopTagger.cc

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id$
     1//FJSTARTHEADER
     2// $Id: JHTopTagger.cc 3433 2014-07-23 08:17:03Z salam $
    33//
    4 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     4// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931#include <fastjet/tools/JHTopTagger.hh>
  • external/fastjet/tools/JHTopTagger.hh

    r5b5a56b r35cdc46  
    22#define __FASTJET_JH_TOP_TAGGER_HH__
    33
    4 //STARTHEADER
    5 // $Id: JHTopTagger.hh 2689 2011-11-14 14:51:06Z soyez $
    6 //
    7 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     4//FJSTARTHEADER
     5// $Id: JHTopTagger.hh 3433 2014-07-23 08:17:03Z salam $
     6//
     7// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    88//
    99//----------------------------------------------------------------------
     
    1616//
    1717//  The algorithms that underlie FastJet have required considerable
    18 //  development and are described in hep-ph/0512210. If you use
     18//  development. They are described in the original FastJet paper,
     19//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1920//  FastJet as part of work towards a scientific publication, please
    20 //  include a citation to the FastJet paper.
     21//  quote the version you use and include a citation to the manual and
     22//  optionally also to hep-ph/0512210.
    2123//
    2224//  FastJet is distributed in the hope that it will be useful,
     
    2830//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2931//----------------------------------------------------------------------
    30 //ENDHEADER
     32//FJENDHEADER
    3133
    3234
  • external/fastjet/tools/JetMedianBackgroundEstimator.cc

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id$
    3 //
    4 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     1//FJSTARTHEADER
     2// $Id: JetMedianBackgroundEstimator.cc 3517 2014-08-01 14:23:13Z soyez $
     3//
     4// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931#include "fastjet/tools/JetMedianBackgroundEstimator.hh"
     
    3133#include <fastjet/ClusterSequenceStructure.hh>
    3234#include <iostream>
     35#include <sstream>
    3336
    3437FASTJET_BEGIN_NAMESPACE     // defined in fastjet/internal/base.hh
     
    3740
    3841double BackgroundJetScalarPtDensity::result(const PseudoJet & jet) const {
    39   std::vector<PseudoJet> constituents = jet.constituents();
     42  // do not include the ghosts in the list of constituents to have a
     43  // correct behaviour when _pt_power is <= 0
     44  std::vector<PseudoJet> constituents = (!SelectorIsPureGhost())(jet.constituents());
    4045  double scalar_pt = 0;
    4146  for (unsigned i = 0; i < constituents.size(); i++) {
     
    4348  }
    4449  return scalar_pt / jet.area();
     50}
     51
     52
     53std::string BackgroundJetScalarPtDensity::description() const {
     54  ostringstream oss;
     55  oss << "BackgroundScalarJetPtDensity";
     56  if (_pt_power != 1.0) oss << " with pt_power = " << _pt_power;
     57  return oss.str();
    4558}
    4659
     
    7285                                         const JetDefinition &jet_def,
    7386                                         const AreaDefinition &area_def)
    74   : _rho_range(rho_range), _jet_def(jet_def), _area_def(area_def) {
     87  : _rho_range(rho_range), _jet_def(jet_def), _area_def(area_def){
    7588
    7689  // initialise things decently
     
    261274
    262275//----------------------------------------------------------------------
     276// returns rho_m (particle-masses contribution to the 4-vector density)
     277double JetMedianBackgroundEstimator::rho_m() const {
     278  if (! has_rho_m()){
     279    throw Error("JetMediamBackgroundEstimator: rho_m requested but rho_m calculation is disabled (either eplicitly or due to the presence of a jet density class).");
     280  }
     281  if (_rho_range.takes_reference())
     282    throw Error("The background estimation is obtained from a selector that takes a reference jet. rho(PseudoJet) should be used in that case");
     283  _recompute_if_needed();
     284  return _rho_m;
     285}
     286
     287
     288//----------------------------------------------------------------------
     289// returns sigma_m (particle-masses contribution to the 4-vector
     290// density); must be multipled by sqrt(area) to get fluctuations
     291// for a region of a given area.
     292double JetMedianBackgroundEstimator::sigma_m() const{
     293  if (! has_rho_m()){
     294    throw Error("JetMediamBackgroundEstimator: sigma_m requested but rho_m/sigma_m calculation is disabled (either explicitly or due to the presence of a jet density class).");
     295  }
     296  if (_rho_range.takes_reference())
     297    throw Error("The background estimation is obtained from a selector that takes a reference jet. rho(PseudoJet) should be used in that case");
     298  _recompute_if_needed();
     299  return _sigma_m;
     300}
     301
     302//----------------------------------------------------------------------
     303// returns rho_m locally at the position of a given jet. As for
     304// rho(jet), it is non-const.
     305double JetMedianBackgroundEstimator::rho_m(const PseudoJet & jet)  {
     306  _recompute_if_needed(jet);
     307  double our_rho = _rho_m;
     308  if (_rescaling_class != 0) {
     309    our_rho *= (*_rescaling_class)(jet);
     310  }
     311  return our_rho;
     312}
     313
     314
     315//----------------------------------------------------------------------
     316// returns sigma_m locally at the position of a given jet. As for
     317// rho(jet), it is non-const.
     318double JetMedianBackgroundEstimator::sigma_m(const PseudoJet & jet){
     319  _recompute_if_needed(jet);
     320  double our_sigma = _sigma_m;
     321  if (_rescaling_class != 0) {
     322    our_sigma *= (*_rescaling_class)(jet);
     323  }
     324  return our_sigma;
     325}
     326
     327//----------------------------------------------------------------------
    263328// configuring behaviour
    264329//----------------------------------------------------------------------
     
    271336  set_provide_fj2_sigma(false);
    272337
     338  _enable_rho_m = true;
     339
    273340  // reset the computed values
    274341  _rho = _sigma = 0.0;
     342  _rho_m = _sigma_m = 0.0;
    275343  _n_jets_used = _n_empty_jets = 0;
    276344  _empty_area = _mean_area = 0.0;
     
    289357// is used (as occurs also if this function is not called).
    290358void JetMedianBackgroundEstimator::set_jet_density_class(const FunctionOfPseudoJet<double> * jet_density_class_in) {
    291   _warnings_preliminary.warn("JetMedianBackgroundEstimator::set_jet_density_class: density classes are still preliminary in FastJet 3.0. Their interface may differ in future releases (without guaranteeing backward compatibility).");
     359  _warnings_preliminary.warn("JetMedianBackgroundEstimator::set_jet_density_class: density classes are still preliminary in FastJet 3.1. Their interface may differ in future releases (without guaranteeing backward compatibility). Note that since FastJet 3.1, rho_m and sigma_m are accessible direclty in JetMedianBackgroundEstimator and GridMedianBackgroundEstimator(with no need for a density class).");
    292360  _jet_density_class = jet_density_class_in;
    293361  _uptodate = false;
     
    338406  // fill the vector of pt/area (or the quantity from the jet density class)
    339407  //  - in the range
    340   vector<double> vector_for_median;
     408  vector<double> vector_for_median_pt;
     409  vector<double> vector_for_median_dt;
    341410  double total_area  = 0.0;
    342411  _n_jets_used = 0;
     
    346415
    347416  // compute the pt/area for the selected jets
     417  double median_input_pt, median_input_dt=0.0;
     418  BackgroundJetPtMDensity m_density;
     419  bool do_rho_m = has_rho_m();
    348420  for (unsigned i = 0; i < selected_jets.size(); i++) {
    349421    const PseudoJet & current_jet = selected_jets[i];
    350422
    351423    double this_area = (_use_area_4vector) ? current_jet.area_4vector().perp() : current_jet.area();
    352 
    353424    if (this_area>0){
    354       double median_input;
     425      // for the pt component, we either use pt or the user-provided
     426      // density class
    355427      if (_jet_density_class == 0) {
    356         median_input = current_jet.perp()/this_area;
     428        median_input_pt = current_jet.perp()/this_area;
    357429      } else {
    358         median_input = (*_jet_density_class)(current_jet);
     430        median_input_pt = (*_jet_density_class)(current_jet);
    359431      }
     432
     433      // handle the rho_m part if requested
     434      // note that we're using the scalar area as a normalisation inside the
     435      // density class!
     436      if (do_rho_m)
     437        median_input_dt = m_density(current_jet);
     438   
     439      // perform rescaling if needed
    360440      if (_rescaling_class != 0) {
    361         median_input /= (*_rescaling_class)(current_jet);
     441        double resc = (*_rescaling_class)(current_jet);;
     442        median_input_pt /= resc;
     443        median_input_dt /= resc;
    362444      }
    363       vector_for_median.push_back(median_input);
     445     
     446      // store the result for future computation of the median
     447      vector_for_median_pt.push_back(median_input_pt);
     448      if (do_rho_m)
     449        vector_for_median_dt.push_back(median_input_dt);
     450
    364451      total_area  += this_area;
    365452      _n_jets_used++;
     
    367454      _warnings_zero_area.warn("JetMedianBackgroundEstimator::_compute(...): discarded jet with zero area. Zero-area jets may be due to (i) too large a ghost area (ii) a jet being outside the ghost range (iii) the computation not being done using an appropriate algorithm (kt;C/A).");
    368455    }
    369      
    370456  }
    371457 
    372458  // there is nothing inside our region, so answer will always be zero
    373   if (vector_for_median.size() == 0) {
     459  if (vector_for_median_pt.size() == 0) {
    374460    _rho        = 0.0;
    375461    _sigma      = 0.0;
     462    _rho_m      = 0.0;
     463    _sigma_m    = 0.0;
    376464    _mean_area  = 0.0;
    377465    return;
     
    392480
    393481  double stand_dev;
    394   _median_and_stddev(vector_for_median, _n_empty_jets, _rho, stand_dev,
     482  _median_and_stddev(vector_for_median_pt, _n_empty_jets, _rho, stand_dev,
    395483                     _provide_fj2_sigma);
    396484
     
    398486  _mean_area  = total_area / total_njets;
    399487  _sigma      = stand_dev * sqrt(_mean_area);
     488
     489  // compute the rho_m part now
     490  if (do_rho_m){
     491    _median_and_stddev(vector_for_median_dt, _n_empty_jets, _rho_m, stand_dev,
     492                       _provide_fj2_sigma);
     493    _sigma_m = stand_dev * sqrt(_mean_area);
     494  }
    400495
    401496  // record that the computation has been performed 
     
    439534
    440535
    441 
    442536FASTJET_END_NAMESPACE
    443537
  • external/fastjet/tools/JetMedianBackgroundEstimator.hh

    r5b5a56b r35cdc46  
    22#define __FASTJET_BACKGROUND_ESTIMATOR_HH__
    33
    4 //STARTHEADER
    5 // $Id: JetMedianBackgroundEstimator.hh 2689 2011-11-14 14:51:06Z soyez $
     4//FJSTARTHEADER
     5// $Id: JetMedianBackgroundEstimator.hh 3517 2014-08-01 14:23:13Z soyez $
    66//
    7 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     7// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    88//
    99//----------------------------------------------------------------------
     
    1616//
    1717//  The algorithms that underlie FastJet have required considerable
    18 //  development and are described in hep-ph/0512210. If you use
     18//  development. They are described in the original FastJet paper,
     19//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1920//  FastJet as part of work towards a scientific publication, please
    20 //  include a citation to the FastJet paper.
     21//  quote the version you use and include a citation to the manual and
     22//  optionally also to hep-ph/0512210.
    2123//
    2224//  FastJet is distributed in the hope that it will be useful,
     
    2830//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2931//----------------------------------------------------------------------
    30 //ENDHEADER
     32//FJENDHEADER
    3133
    3234#include <fastjet/ClusterSequenceAreaBase.hh>
     
    121123  ///
    122124  JetMedianBackgroundEstimator(const Selector &rho_range = SelectorIdentity())
    123     : _rho_range(rho_range), _jet_def(JetDefinition()) { reset(); }
     125    : _rho_range(rho_range), _jet_def(JetDefinition()),
     126      _enable_rho_m(true){ reset(); }
    124127 
    125128
     
    168171  }
    169172
     173  /// determine whether the automatic calculation of rho_m and sigma_m
     174  /// is enabled (by default true)
     175  void set_compute_rho_m(bool enable){ _enable_rho_m = enable;}
     176
    170177  //\}
    171178
     
    201208  virtual bool has_sigma() {return true;}
    202209
     210  //----------------------------------------------------------------
     211  // now do the same thing for rho_m and sigma_m
     212
     213  /// returns rho_m, the purely longitudinal, particle-mass-induced
     214  /// component of the background density per unit area
     215  virtual double rho_m() const;
     216
     217  /// returns sigma_m, a measure of the fluctuations in the purely
     218  /// longitudinal, particle-mass-induced component of the background
     219  /// density per unit area; must be multipled by sqrt(area) to get
     220  /// fluctuations for a region of a given area.
     221  virtual double sigma_m() const;
     222
     223  /// Returns rho_m locally at the jet position. As for rho(jet), it is non-const.
     224  virtual double rho_m(const PseudoJet & /*jet*/);
     225
     226  /// Returns sigma_m locally at the jet position. As for rho(jet), it is non-const.
     227  virtual double sigma_m(const PseudoJet & /*jet*/);
     228
     229  /// Returns true if this background estimator has support for
     230  /// determination of rho_m.
     231  ///
     232  /// In te presence of a density class, support for rho_m is
     233  /// automatically disabled
     234  ///
     235  /// Note that support for sigma_m is automatic is one has sigma and
     236  /// rho_m support.
     237  virtual bool has_rho_m() const {return _enable_rho_m && (_jet_density_class == 0);}
    203238  //\}
    204239 
     
    208243  /// Returns the mean area of the jets used to actually compute the
    209244  /// background properties in the last call of rho() or sigma()
     245  /// If the configuration has changed in the meantime, throw an error.
    210246  double mean_area() const{
    211     _recompute_if_needed();
     247    if (!_uptodate)
     248      throw Error("JetMedianBackgroundEstimator::mean_area(): one may not retrieve information about the last call to rho() or sigma() when the configuration has changed in the meantime.");
     249    //_recompute_if_needed();
    212250    return _mean_area;
    213251  }
     
    215253  /// returns the number of jets used to actually compute the
    216254  /// background properties in the last call of rho() or sigma()
     255  /// If the configuration has changed in the meantime, throw an error.
    217256  unsigned int n_jets_used() const{
    218     _recompute_if_needed();
     257    if (!_uptodate)
     258      throw Error("JetMedianBackgroundEstimator::n_jets_used(): one may not retrieve information about the last call to rho() or sigma() when the configuration has changed in the meantime.");
     259    //_recompute_if_needed();
    219260    return _n_jets_used;
     261  }
     262
     263  /// returns the jets used to actually compute the background
     264  /// properties
     265  std::vector<PseudoJet> jets_used() const{
     266    if (!_uptodate) throw Error("JetMedianBackgroundEstimator::n_jets_used(): one may not retrieve information about the last call to rho() or sigma() when the configuration has changed in the meantime.");
     267    _check_csa_alive();
     268    std::vector<PseudoJet> tmp_jets = _rho_range(_included_jets);
     269    std::vector<PseudoJet> used_jets;
     270    for (unsigned int i=0; i<tmp_jets.size(); i++){
     271      if (tmp_jets[i].area()>0) used_jets.push_back(tmp_jets[i]);
     272    }
     273    return used_jets;
    220274  }
    221275
     
    223277  /// the selector) that is not occupied by jets. The value is that
    224278  /// for the last call of rho() or sigma()
     279  /// If the configuration has changed in the meantime, throw an error.
    225280  ///
    226281  /// The answer is defined to be zero if the area calculation
     
    234289  /// call to the ClusterSequenceAreaBase function.
    235290  double empty_area() const{
    236     _recompute_if_needed();
     291    if (!_uptodate)
     292      throw Error("JetMedianBackgroundEstimator::empty_area(): one may not retrieve information about the last call to rho() or sigma() when the configuration has changed in the meantime.");
     293    //_recompute_if_needed();
    237294    return _empty_area;
    238295  }
     
    241298  /// background properties. The value is that for the last call of
    242299  /// rho() or sigma().
     300  /// If the configuration has changed in the meantime, throw an error.
    243301  ///
    244302  /// If the area has explicit ghosts the result is zero; for active
     
    250308  /// call to the ClusterSequenceAreaBase function.
    251309  double n_empty_jets() const{
    252     _recompute_if_needed();
     310    if (!_uptodate)
     311      throw Error("JetMedianBackgroundEstimator::n_empty_jets(): one may not retrieve information about the last call to rho() or sigma() when the configuration has changed in the meantime.");
     312    //_recompute_if_needed();
    253313    return _n_empty_jets;
    254314  }
     
    361421  /// Issue a warning otherwise
    362422  void _check_jet_alg_good_for_median() const;
    363  
     423
    364424  // the basic parameters of this class (passed through the variou ctors)
    365425  Selector _rho_range;                   ///< range to compute the background in
     
    368428  std::vector<PseudoJet> _included_jets; ///< jets to be used
    369429 
    370   // the tunable aprameters of the class
     430  // the tunable parameters of the class
    371431  bool _use_area_4vector;
    372432  bool _provide_fj2_sigma;
    373433  const FunctionOfPseudoJet<double> * _jet_density_class;
    374434  //SharedPtr<BackgroundRescalingBase> _rescaling_class_sharedptr;
     435  bool _enable_rho_m;
    375436 
    376437  // the actual results of the computation
    377438  mutable double _rho;               ///< background estimated density per unit area
    378439  mutable double _sigma;             ///< background estimated fluctuations
     440  mutable double _rho_m;             ///< "mass" background estimated density per unit area
     441  mutable double _sigma_m;           ///< "mass" background estimated fluctuations
    379442  mutable double _mean_area;         ///< mean area of the jets used to estimate the background
    380443  mutable unsigned int _n_jets_used; ///< number of jets used to estimate the background
     
    429492  virtual double result(const PseudoJet & jet) const;
    430493
    431   virtual std::string description() const {return "BackgroundScalarJetPtDensity";}
     494  virtual std::string description() const;
    432495
    433496private:
  • external/fastjet/tools/MassDropTagger.cc

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id$
     1//FJSTARTHEADER
     2// $Id: MassDropTagger.cc 3433 2014-07-23 08:17:03Z salam $
    33//
    4 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     4// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931#include <fastjet/tools/MassDropTagger.hh>
  • external/fastjet/tools/MassDropTagger.hh

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id: MassDropTagger.hh 2731 2011-11-21 12:15:21Z soyez $
     1//FJSTARTHEADER
     2// $Id: MassDropTagger.hh 3433 2014-07-23 08:17:03Z salam $
    33//
    4 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     4// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931#ifndef __FASTJET_MASS_DROP_TAGGER_HH__
  • external/fastjet/tools/Pruner.cc

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id$
    3 //
    4 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     1//FJSTARTHEADER
     2// $Id: Pruner.cc 3481 2014-07-29 17:24:12Z soyez $
     3//
     4// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931#include "fastjet/tools/Pruner.hh"
     
    4749//----------------------------------------------------------------------
    4850// alternative (dynamic) ctor
    49 //  \param jet_def the jet definition for the internal clustering
     51//  \param jet_def     the jet definition for the internal clustering
    5052//  \param zcut_dyn    dynamic pt-fraction cut in the pruning
    5153//  \param Rcut_dyn    dynamic angular distance cut in the pruning
    5254Pruner::Pruner(const JetDefinition &jet_def,
    53          FunctionOfPseudoJet<double> *zcut_dyn,
    54          FunctionOfPseudoJet<double> *Rcut_dyn)
     55         const FunctionOfPseudoJet<double> *zcut_dyn,
     56         const FunctionOfPseudoJet<double> *Rcut_dyn)
    5557  : _jet_def(jet_def), _zcut(0), _Rcut_factor(0),
    5658    _zcut_dyn(zcut_dyn), _Rcut_dyn(Rcut_dyn), _get_recombiner_from_jet(false)  {
     
    7476  double zcut = (_zcut_dyn) ? (*_zcut_dyn)(jet) : _zcut;
    7577  PruningPlugin * pruning_plugin;
     78
    7679  // for some constructors, we get the recombiner from the
    77   // input jet -- some acrobatics are needed (see plans for FJ3.1
    78   // for a hopefully better solution).
     80  // input jet -- some acrobatics are needed
    7981  if (_get_recombiner_from_jet) {
    80     const JetDefinition::Recombiner * common_recombiner =
    81                                               _get_common_recombiner(jet);
    82     if (common_recombiner) {
    83       JetDefinition jet_def = _jet_def;
    84       if (typeid(*common_recombiner) == typeid(JetDefinition::DefaultRecombiner)) {
    85         RecombinationScheme scheme =
    86           static_cast<const JetDefinition::DefaultRecombiner *>(common_recombiner)->scheme();
    87         jet_def.set_recombination_scheme(scheme);
    88       } else {
    89         jet_def.set_recombiner(common_recombiner);
    90       }
    91       pruning_plugin = new PruningPlugin(jet_def, zcut, Rcut);
    92     } else {
    93       // if there wasn't a common recombiner, we just use the default
    94       // recombiner that was in _jet_def
    95       pruning_plugin = new PruningPlugin(_jet_def, zcut, Rcut);
    96     }
     82    JetDefinition jet_def = _jet_def;
     83
     84    // if all the pieces have a shared recombiner, we'll use that
     85    // one. Otherwise, use the one from _jet_def as a fallback.
     86    JetDefinition jet_def_for_recombiner;
     87    if (_check_common_recombiner(jet, jet_def_for_recombiner)){
     88      jet_def.set_recombiner(jet_def_for_recombiner);
     89    }
     90    pruning_plugin = new PruningPlugin(jet_def, zcut, Rcut);
    9791  } else {
    9892    pruning_plugin = new PruningPlugin(_jet_def, zcut, Rcut);
     
    122116  PseudoJet result_local = SelectorNHardest(1)(cs->inclusive_jets())[0];
    123117  PrunerStructure * s = new PrunerStructure(result_local);
     118  s->_Rcut = Rcut;
     119  s->_zcut = zcut;
    124120  result_local.set_structure_shared_ptr(SharedPtr<PseudoJetStructureBase>(s));
    125121 
     
    155151}
    156152
    157 // see if there is a common recombiner among the pieces; if there
    158 // is return a pointer to it; otherwise, return NULL.
    159 //
    160 // NB: this way of doing things is not ideal, because quite some work
    161 //     is needed to get a correct handling of the final recombiner
    162 //     (e.g. default v. non-default). In future add
    163 //     set_recombiner(jet_def) to JetDefinition, maybe also add
    164 //     an invalid_scheme to the default recombiner and then
    165 //     do all the work below directly with a JetDefinition directly
    166 //     together with JD::has_same_recombiner(...)
    167 const JetDefinition::Recombiner * Pruner::_get_common_recombiner(const PseudoJet &jet) const{
    168   if (jet.has_associated_cluster_sequence())
    169     return jet.validated_cs()->jet_def().recombiner();
     153// see if there is a common recombiner among the pieces; if there is
     154// return true and set jet_def_for_recombiner so that the recombiner
     155// can be taken from that JetDefinition. Otherwise, return
     156// false. 'assigned' is initially false; when true, each time we meet
     157// a new jet definition, we'll check it shares the same recombiner as
     158// jet_def_for_recombiner.
     159bool Pruner::_check_common_recombiner(const PseudoJet &jet,
     160                                      JetDefinition &jet_def_for_recombiner,
     161                                      bool assigned) const{
     162  if (jet.has_associated_cluster_sequence()){
     163    // if the jet def for recombination has already been assigned, check if we have the same
     164    if (assigned)
     165      return jet.validated_cs()->jet_def().has_same_recombiner(jet_def_for_recombiner);
     166
     167    // otherwise, assign it.
     168    jet_def_for_recombiner = jet.validated_cs()->jet_def();
     169    assigned = true;
     170    return true;
     171  }
    170172
    171173  // if the jet has pieces, recurse in the pieces
    172174  if (jet.has_pieces()){
    173175    vector<PseudoJet> pieces = jet.pieces();
    174     if (pieces.size() == 0) return 0;
    175     const JetDefinition::Recombiner * reco = _get_common_recombiner(pieces[0]);
    176     for (unsigned int i=1;i<pieces.size(); i++)
    177       if (_get_common_recombiner(pieces[i]) != reco) return 0;
     176    if (pieces.size() == 0) return false;
     177    for (unsigned int i=0;i<pieces.size(); i++)
     178      if (!_check_common_recombiner(pieces[i], jet_def_for_recombiner, assigned)) return false;
    178179    // never returned false, so we're OK.
    179     return reco;
     180    return true;
    180181  }
    181182
    182183  // return false for any other (unknown) structure
    183   return 0;
     184  return false;
    184185}
    185186
  • external/fastjet/tools/Pruner.hh

    r5b5a56b r35cdc46  
    22#define __FASTJET_TOOLS_PRUNER_HH__
    33
    4 //STARTHEADER
    5 // $Id: Pruner.hh 2616 2011-09-30 18:03:40Z salam $
    6 //
    7 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     4//FJSTARTHEADER
     5// $Id: Pruner.hh 3481 2014-07-29 17:24:12Z soyez $
     6//
     7// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    88//
    99//----------------------------------------------------------------------
     
    1616//
    1717//  The algorithms that underlie FastJet have required considerable
    18 //  development and are described in hep-ph/0512210. If you use
     18//  development. They are described in the original FastJet paper,
     19//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1920//  FastJet as part of work towards a scientific publication, please
    20 //  include a citation to the FastJet paper.
     21//  quote the version you use and include a citation to the manual and
     22//  optionally also to hep-ph/0512210.
    2123//
    2224//  FastJet is distributed in the hope that it will be useful,
     
    2830//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2931//----------------------------------------------------------------------
    30 //ENDHEADER
     32//FJENDHEADER
    3133
    3234#include "fastjet/ClusterSequence.hh"
     
    4345class PruningRecombiner;
    4446class PruningPlugin;
     47
     48// This tells third-party code that the pruner structure
     49// stores Rcut info; the alternative is for the user to
     50// get the information from the version number
     51#define FASTJET_PRUNER_STRUCTURE_STORES_RCUT
    4552
    4653//----------------------------------------------------------------------
     
    135142  ///  \param Rcut_dyn    dynamic angular distance cut in the pruning
    136143  Pruner(const JetDefinition &jet_def,
    137          FunctionOfPseudoJet<double> *zcut_dyn,
    138          FunctionOfPseudoJet<double> *Rcut_dyn);
     144         const FunctionOfPseudoJet<double> *zcut_dyn,
     145         const FunctionOfPseudoJet<double> *Rcut_dyn);
    139146
    140147  /// action on a single jet
     
    152159  bool _check_explicit_ghosts(const PseudoJet &jet) const;
    153160
    154   /// return a pointer to a "common" recombiner if there is one,
    155   /// alternatively a null pointer.
    156   const JetDefinition::Recombiner * _get_common_recombiner(const PseudoJet &jet) const;
     161  /// see if there is a common recombiner among the pieces; if there
     162  /// is return true and set jet_def_for_recombiner so that the
     163  /// recombiner can be taken from that JetDefinition. Otherwise,
     164  /// return false. 'assigned' is initially false; when true, each
     165  /// time we meet a new jet definition, we'll check it shares the
     166  /// same recombiner as jet_def_for_recombiner.
     167  bool _check_common_recombiner(const PseudoJet &jet,
     168                                JetDefinition &jet_def_for_recombiner,
     169                                bool assigned=false) const;
    157170
    158171  JetDefinition _jet_def; ///< the internal jet definition
    159172  double _zcut;           ///< the pt-fraction cut
    160173  double _Rcut_factor;    ///< the angular separation cut factor
    161   FunctionOfPseudoJet<double> *_zcut_dyn; ///< dynamic zcut
    162   FunctionOfPseudoJet<double> *_Rcut_dyn; ///< dynamic Rcut
     174  const FunctionOfPseudoJet<double> *_zcut_dyn; ///< dynamic zcut
     175  const FunctionOfPseudoJet<double> *_Rcut_dyn; ///< dynamic Rcut
    163176  bool   _get_recombiner_from_jet; ///< true for minimal constructor,
    164177                                   ///< causes recombiner to be set equal
     
    194207  std::vector<PseudoJet> extra_jets() const;
    195208
     209  /// return the value of Rcut that was used for this specific pruning.
     210  double Rcut() const {return _Rcut;}
     211
     212  /// return the value of Rcut that was used for this specific pruning.
     213  double zcut() const {return _zcut;}
     214
    196215protected:
    197216  friend class Pruner; ///< to allow setting the internal information
     217
     218private:
     219  double _Rcut, _zcut;
    198220};
    199221
  • external/fastjet/tools/RestFrameNSubjettinessTagger.cc

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id$
     1//FJSTARTHEADER
     2// $Id: RestFrameNSubjettinessTagger.cc 3433 2014-07-23 08:17:03Z salam $
    33//
    4 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     4// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931#include <fastjet/tools/RestFrameNSubjettinessTagger.hh>
  • external/fastjet/tools/RestFrameNSubjettinessTagger.hh

    r5b5a56b r35cdc46  
    22#define __FASTJET_RESTFRAMENSUBJETTINESS_TAGGER_HH__
    33
    4 //STARTHEADER
    5 // $Id: RestFrameNSubjettinessTagger.hh 2689 2011-11-14 14:51:06Z soyez $
     4//FJSTARTHEADER
     5// $Id: RestFrameNSubjettinessTagger.hh 3433 2014-07-23 08:17:03Z salam $
    66//
    7 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     7// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    88//
    99//----------------------------------------------------------------------
     
    1616//
    1717//  The algorithms that underlie FastJet have required considerable
    18 //  development and are described in hep-ph/0512210. If you use
     18//  development. They are described in the original FastJet paper,
     19//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1920//  FastJet as part of work towards a scientific publication, please
    20 //  include a citation to the FastJet paper.
     21//  quote the version you use and include a citation to the manual and
     22//  optionally also to hep-ph/0512210.
    2123//
    2224//  FastJet is distributed in the hope that it will be useful,
     
    2830//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2931//----------------------------------------------------------------------
    30 //ENDHEADER
     32//FJENDHEADER
    3133
    3234#include <fastjet/PseudoJet.hh>
  • external/fastjet/tools/Subtractor.cc

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id$
     1//FJSTARTHEADER
     2// $Id: Subtractor.cc 3594 2014-08-12 15:25:11Z soyez $
    33//
    4 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     4// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931#include "fastjet/tools/Subtractor.hh"
     
    3840
    3941
     42//----------------------------------------------------------------------
     43// ctor
    4044Subtractor::Subtractor(double rho) : _bge(0), _rho(rho) {
    4145  assert(_rho>0.0);
     46  set_defaults();
    4247}
    4348
     49//----------------------------------------------------------------------
     50void Subtractor::set_defaults(){
     51  _use_rho_m = false; // likely to change in future releases!!
     52  _safe_mass = false; // likely to change in future releases!!
     53
     54  _sel_known_vertex = Selector();
     55  _sel_leading_vertex = Selector();
     56}
     57
     58//----------------------------------------------------------------------
     59// perform the subtraction of a given jet
    4460PseudoJet Subtractor::result(const PseudoJet & jet) const {
    4561  if (!jet.has_area()){
    4662    throw Error("Trying to subtract a jet without area support");
    4763  }
    48  
     64
     65  PseudoJet known_lv, known_pu;
     66  PseudoJet unknown = jet;
     67  if (_sel_known_vertex.worker()){
     68    // separate the jet constituents in 3 groups:
     69    //   unknown vertex
     70    //   known vertex, leading vertex
     71    //   known vertex, non-leading vertex (PU)
     72    vector<PseudoJet> constits_unknown, constits_known;
     73    _sel_known_vertex.sift(jet.constituents(),
     74                           constits_known,
     75                           constits_unknown);
     76    vector<PseudoJet> constits_known_lv, constits_known_pu;
     77    _sel_leading_vertex.sift(constits_known,
     78                             constits_known_lv,
     79                             constits_known_pu);
     80
     81    // For the parts related to the known vertices (LV or PU), we just
     82    // sum the 4-momenta. For the unknown part, we assign it the full
     83    // jet area.
     84    known_lv = (constits_known_lv.size()!=0)
     85      ? SelectorIdentity().sum(constits_known_lv) : 0.0*jet;
     86    known_pu = (constits_known_pu.size()!=0)
     87      ? SelectorIdentity().sum(constits_known_pu) : 0.0*jet;
     88    if (constits_unknown.size()==0){
     89      // no need for any form of subtraction!
     90      PseudoJet subtracted_jet = jet;
     91      subtracted_jet.reset_momentum(known_lv);
     92      return subtracted_jet;
     93    }
     94    unknown = jet; // that keeps all info including area
     95    unknown.reset_momentum(SelectorIdentity().sum(constits_unknown));
     96  } else {
     97    known_lv = jet; // ensures correct rap-phi!
     98    known_lv *= 0.0;
     99    known_pu = known_lv;
     100  }
     101
     102  // prepare for the subtraction and compute the 4-vector to be
     103  // subtracted
     104  PseudoJet subtracted_jet = jet;
     105  PseudoJet to_subtract = known_pu + _amount_to_subtract(unknown);
     106
     107  // sanity check for the transverse momentum
     108  if (to_subtract.pt2() < jet.pt2() ) {
     109    // this subtraction should retain the jet's structural
     110    // information
     111    subtracted_jet -= to_subtract;
     112  } else {
     113    // this sets the jet's momentum while maintaining all of the jet's
     114    // structural information
     115    subtracted_jet.reset_momentum(known_lv);
     116    return subtracted_jet;
     117  }
     118
     119  // make sure that in the end the pt is at least the one known to
     120  // come from the leading vertex
     121  if (subtracted_jet.pt2() < known_lv.pt2()){
     122    subtracted_jet.reset_momentum(known_lv);
     123    return subtracted_jet;
     124  }
     125
     126  // sanity check for the mass (if needed)
     127  if ((_safe_mass) && (subtracted_jet.m2() < known_lv.m2())){
     128    // in this case, we keep pt and phi as obtained from the
     129    // subtraction above and take rap and m from the part that comes
     130    // from the leading vertex (or the original jet if nothing comes
     131    // from the leading vertex)
     132    subtracted_jet.reset_momentum(PtYPhiM(subtracted_jet.pt(),
     133                                          known_lv.rap(),
     134                                          subtracted_jet.phi(),
     135                                          known_lv.m()));
     136  }
     137
     138  return subtracted_jet;
     139}
     140
     141//----------------------------------------------------------------------
     142std::string Subtractor::description() const{
     143  if (_bge != 0) {
     144    string desc = "Subtractor that uses the following background estimator to determine rho: "+_bge->description();
     145    if (use_rho_m()) desc += "; including the rho_m correction";
     146    if (safe_mass()) desc += "; including mass safety tests";
     147    if (_sel_known_vertex.worker()){
     148      desc += "; using known vertex selection: "+_sel_known_vertex.description()+" and leading vertex selection: "+_sel_leading_vertex.description();
     149    }
     150    return desc;
     151  } else if (_rho != _invalid_rho) {
     152    ostringstream ostr;
     153    ostr << "Subtractor that uses a fixed value of rho = " << _rho;
     154    return ostr.str();
     155  } else {
     156    return "Uninitialised subtractor";
     157  }
     158}
     159
     160//----------------------------------------------------------------------
     161// compute the 4-vector that should be subtracted from the given
     162// jet
     163PseudoJet Subtractor::_amount_to_subtract(const PseudoJet &jet) const{
     164  // the "transverse momentum" part
    49165  double rho;
    50166  if (_bge != 0) {
     
    56172  }
    57173
    58   PseudoJet subtracted_jet = jet;
    59   PseudoJet area4vect = jet.area_4vector();
    60   // sanity check
    61   if (rho*area4vect.perp() < jet.perp() ) {
    62     // this subtraction should retain the jet's structural
    63     // information
    64     subtracted_jet -= rho*area4vect;
    65   } else {
    66     // this sets the jet's momentum to zero while
    67     // maintaining all of the jet's structural information
    68     subtracted_jet *= 0;
     174  PseudoJet area = jet.area_4vector();
     175  PseudoJet to_subtract = rho*area;
     176
     177  double const rho_m_warning_threshold = 1e-5;
     178
     179  // add an optional contribution from the unknown particles masses
     180  if (_use_rho_m){
     181    assert(_bge != 0); // test done in "set_use_rho_m()"
     182    to_subtract += _bge->rho_m(jet) * PseudoJet(0.0, 0.0, area.pz(), area.E());
     183  } else if (_bge &&
     184             _bge->has_rho_m() &&
     185             _bge->rho_m(jet) > rho_m_warning_threshold * rho) {
     186    _unused_rho_m_warning.warn("Background estimator indicates non-zero rho_m, but use_rho_m()==false in subtractor; consider calling set_use_rho_m(true) to include the rho_m information");
    69187  }
    70   return subtracted_jet;
     188
     189  return to_subtract;
    71190}
    72191
    73 //----------------------------------------------------------------------
    74 std::string Subtractor::description() const{
    75   if (_bge != 0) {
    76     return "Subtractor that uses the following background estimator to determine rho: "+_bge->description();
    77   } else if (_rho != _invalid_rho) {
    78     ostringstream ostr;
    79     ostr << "Subtractor that uses a fixed value of rho = " << _rho;
    80     return ostr.str();
    81   } else {
    82     return "Uninitialised subtractor";
    83   }
    84 }
    85192
    86193FASTJET_END_NAMESPACE
  • external/fastjet/tools/Subtractor.hh

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id: Subtractor.hh 2577 2011-09-13 15:11:38Z salam $
    3 //
    4 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     1//FJSTARTHEADER
     2// $Id: Subtractor.hh 3584 2014-08-12 12:40:10Z soyez $
     3//
     4// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931#ifndef __FASTJET_TOOLS_SUBTRACTOR_HH__
     
    6163  /// define a subtractor based on a BackgroundEstimator
    6264  Subtractor(BackgroundEstimatorBase * bge) :
    63     _bge(bge), _rho(-1.0) {}
     65    _bge(bge), _rho(-1.0) { set_defaults(); }
    6466
    6567  /// define a subtractor that uses a fixed value of rho, the background
     
    6870
    6971  /// default constructor
    70   Subtractor() : _bge(0), _rho(_invalid_rho) {}
     72  Subtractor() : _bge(0), _rho(_invalid_rho) { set_defaults(); }
    7173
    7274  /// default dtor
    7375  virtual ~Subtractor(){};
     76
     77  /// @name configuring the behaviour
     78  //\{
     79  //----------------------------------------------------------------
     80
     81  /// reset all parameters to default values
     82  ///
     83  /// Note: by default, the rho_m term is not included and the safety
     84  /// test for the mass is not done. This is mostly for backwards
     85  /// compatibility with FastJet 3.0 and is highly likely to change in
     86  /// a future release of FastJet
     87  void set_defaults();
     88
     89  /// when 'use_rho_m' is true, include in the subtraction the
     90  /// correction from rho_m, the purely longitudinal,
     91  /// particle-mass-induced component of the background density per
     92  /// unit area
     93  ///
     94  /// Note: this will be switched off by default (for backwards
     95  /// compatibility with FastJet 3.0) but is highly likely to change
     96  /// in a future release of FastJet
     97  void set_use_rho_m(bool use_rho_m_in = true){
     98    if (_bge == 0) {
     99      throw Error("Subtractor: rho_m support works only for Subtractors constructed with background estimator");
     100    }
     101    _use_rho_m=use_rho_m_in;
     102  }
     103 
     104  /// returns whether or not the rho_m component is used
     105  bool use_rho_m() const{ return _use_rho_m;}
     106
     107  /// when 'safe_mass' is true, ensure that the mass of the subtracted
     108  /// 4-vector remain positive
     109  ///
     110  /// when true, if the subtracted mass is negative, we return a
     111  /// 4-vector with 0 mass, pt and phi from the subtracted 4-vector
     112  /// and the rapidity of the original, unsubtracted jet.
     113  ///
     114  /// Note: this will be switched off by default (for backwards
     115  /// compatibility with FastJet 3.0) but is highly likely to change
     116  /// in a future release of FastJet
     117  void set_safe_mass(bool safe_mass_in=true){ _safe_mass=safe_mass_in;}
     118
     119  /// returns whether or not safety tests on the mass are included
     120  bool safe_mass() const{ return _safe_mass;}
     121
     122  /// This is mostly intended for cherge-hadron-subtracted type of
     123  /// events where we wich to use vertex information to improve the
     124  /// subtraction.
     125  ///
     126  /// Given the following parameters:
     127  ///   \param sel_known_vertex    selects the particles with a
     128  ///                              known vertex origin
     129  ///   \param sel_leading_vertex  amongst the particles with a
     130  ///                              known vertex origin, select those
     131  ///                              coming from the leading vertex
     132  /// Momentum identified as coming from the leading vertex will be
     133  /// kept, momentum identified as coming from a non-leading vertex
     134  /// will be eliminated and a regular area-median subtraction will be
     135  /// applied on the 4-vector sum of the particles with unknown vertex
     136  /// origin.
     137  ///
     138  /// When this is set, we shall ensure that the pt of the subtracted
     139  /// 4-vector is at least the pt of the particles that are known to
     140  /// come from the leading vertex (if it fails, subtraction returns
     141  /// the component that is known to come from the leading vertex ---
     142  /// or, the original unsubtracted jet if it contains no particles
     143  /// from the leading vertex).  Furthermore, when safe_mass() is on, we
     144  /// also impose a similar constraint on the mass of the subtracted
     145  /// 4-vector (if the test fails, the longitudinal part of the
     146  /// subtracted 4-vector is taken from the component that is known to
     147  /// come from the leading vertex).
     148  void set_known_selectors(const Selector &sel_known_vertex,
     149                           const Selector &sel_leading_vertex){
     150    _sel_known_vertex   = sel_known_vertex;
     151    _sel_leading_vertex = sel_leading_vertex;
     152  }
     153
     154  //\}
     155
     156  /// @name description and action
     157  //\{
     158  //----------------------------------------------------------------
    74159
    75160  /// returns a jet that's subtracted
     
    82167  virtual std::string description() const;
    83168
     169  //\}
    84170protected:
     171  /// compute the 4-vector that should be subtracted from the given
     172  /// jet
     173  PseudoJet _amount_to_subtract(const PseudoJet &jet) const;
    85174
    86175  /// the tool used to estimate the background
     
    89178  /// the fixed value of rho to use if the user has selected that option
    90179  double _rho;
     180
     181  // configuration parameters/flags
     182  bool _use_rho_m;   ///< include the rho_m correction
     183  bool _safe_mass;   ///< ensures that the subtracted mass is +ve
     184
     185  Selector _sel_known_vertex;   ///< selects the particles with a
     186                                ///< known vertex origin
     187  Selector _sel_leading_vertex; ///< amongst the particles with a
     188                                ///< known vertex origin, select those
     189                                ///< coming from the leading vertex
    91190
    92191  /// a value of rho that is used as a default to label that the stored
     
    98197  // that's not allowed in an include file.
    99198  static const double _invalid_rho;
     199
     200  mutable LimitedWarning _unused_rho_m_warning;
    100201};
    101202
  • external/fastjet/tools/TopTaggerBase.cc

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id$
     1//FJSTARTHEADER
     2// $Id: TopTaggerBase.cc 3433 2014-07-23 08:17:03Z salam $
    33//
    4 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     4// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931#include <fastjet/tools/TopTaggerBase.hh>
  • external/fastjet/tools/TopTaggerBase.hh

    r5b5a56b r35cdc46  
    22#define __FASTJET_TOP_TAGGER_BASE_HH__
    33
    4 //STARTHEADER
    5 // $Id: TopTaggerBase.hh 2689 2011-11-14 14:51:06Z soyez $
     4//FJSTARTHEADER
     5// $Id: TopTaggerBase.hh 3433 2014-07-23 08:17:03Z salam $
    66//
    7 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     7// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    88//
    99//----------------------------------------------------------------------
     
    1616//
    1717//  The algorithms that underlie FastJet have required considerable
    18 //  development and are described in hep-ph/0512210. If you use
     18//  development. They are described in the original FastJet paper,
     19//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1920//  FastJet as part of work towards a scientific publication, please
    20 //  include a citation to the FastJet paper.
     21//  quote the version you use and include a citation to the manual and
     22//  optionally also to hep-ph/0512210.
    2123//
    2224//  FastJet is distributed in the hope that it will be useful,
     
    2830//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2931//----------------------------------------------------------------------
    30 //ENDHEADER
     32//FJENDHEADER
    3133
    3234#include <fastjet/internal/base.hh>
  • external/fastjet/tools/Transformer.hh

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id: Transformer.hh 2577 2011-09-13 15:11:38Z salam $
     1//FJSTARTHEADER
     2// $Id: Transformer.hh 3433 2014-07-23 08:17:03Z salam $
    33//
    4 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     4// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931#ifndef __FASTJET_TRANSFORMER_HH__
  • external/fastjet/version.hh

    r5b5a56b r35cdc46  
    1 //STARTHEADER
    2 // $Id: version.hh 2577 2011-09-13 15:11:38Z salam $
     1//FJSTARTHEADER
     2// $Id: version.hh 3433 2014-07-23 08:17:03Z salam $
    33//
    4 // Copyright (c) 2005-2011, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
     4// Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
    55//
    66//----------------------------------------------------------------------
     
    1313//
    1414//  The algorithms that underlie FastJet have required considerable
    15 //  development and are described in hep-ph/0512210. If you use
     15//  development. They are described in the original FastJet paper,
     16//  hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
    1617//  FastJet as part of work towards a scientific publication, please
    17 //  include a citation to the FastJet paper.
     18//  quote the version you use and include a citation to the manual and
     19//  optionally also to hep-ph/0512210.
    1820//
    1921//  FastJet is distributed in the hope that it will be useful,
     
    2527//  along with FastJet. If not, see <http://www.gnu.org/licenses/>.
    2628//----------------------------------------------------------------------
    27 //ENDHEADER
     29//FJENDHEADER
    2830
    2931#ifndef __FASTJET_VERSION_HH__
Note: See TracChangeset for help on using the changeset viewer.