- Timestamp:
- Dec 9, 2014, 1:27:13 PM (10 years ago)
- Branches:
- ImprovedOutputFile, Timing, dual_readout, llp, master
- Children:
- 37deb3b, 9e991f8
- Parents:
- f6b6ee7 (diff), e7e90df (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - Location:
- external/fastjet
- Files:
-
- 30 added
- 176 edited
Legend:
- Unmodified
- Added
- Removed
-
external/fastjet/AUTHORS
rf6b6ee7 r49234af 10 10 ---------------------------------------------------------------------- 11 11 12 Many people have provided bug reports, suggestions for development and13 in some cases explicit code for plugin algorithms. We wouldin14 particular like to thank12 Many people have provided bug reports, suggestions for development, 13 documentation and in some cases explicit code for plugin 14 algorithms. We would in particular like to thank 15 15 16 16 Vanya Belyaev … … 32 32 Hartmut Stadie 33 33 Mark Sutton 34 Jesse Thaler 34 35 Chris Vermilion 35 36 Markus Wobisch 37 Christopher Young 36 38 37 39 ---------------------------------------------------------------------- -
external/fastjet/ActiveAreaSpec.hh
rf6b6ee7 r49234af 1 // STARTHEADER2 // $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 $ 3 3 // 4 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez4 // Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 -
external/fastjet/AreaDefinition.cc
rf6b6ee7 r49234af 1 // STARTHEADER2 // $Id $1 //FJSTARTHEADER 2 // $Id: AreaDefinition.cc 3619 2014-08-13 14:17:19Z salam $ 3 3 // 4 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez4 // Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 #include "fastjet/AreaDefinition.hh" … … 68 70 break; 69 71 default: 70 cerr << "Error: unrecognized area_type in AreaDefinition::description():"72 ostr << "Error: unrecognized area_type in AreaDefinition::description():" 71 73 << area_type() << endl; 72 exit(-1);74 throw Error(ostr.str()); 73 75 } 74 76 return ostr.str(); -
external/fastjet/AreaDefinition.hh
rf6b6ee7 r49234af 1 // STARTHEADER2 // $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 $ 3 3 // 4 // Copyright (c) 2006-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez4 // Copyright (c) 2006-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 -
external/fastjet/BasicRandom.cc
rf6b6ee7 r49234af 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 $ 4 3 // 5 // Copyright (C) 2002 Zoltan Nagy4 // Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 6 5 // 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 8 10 // it under the terms of the GNU General Public License as published by 9 11 // the Free Software Foundation; either version 2 of the License, or 10 12 // (at your option) any later version. 11 13 // 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, 13 22 // but WITHOUT ANY WARRANTY; without even the implied warranty of 14 23 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the … … 16 25 // 17 26 // You should have received a copy of the GNU General Public License 18 // along with this program; if not, write to the Free Software19 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA20 // ENDHEADER27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 28 //---------------------------------------------------------------------- 29 //FJENDHEADER 21 30 22 31 // nlo includes -
external/fastjet/CMakeLists.txt
rf6b6ee7 r49234af 1 1 include_directories(${CMAKE_SOURCE_DIR}/external) 2 2 3 file(GLOB sources *.cc plugins/*/*.cc contribs/ Nsubjettiness/*.cc tools/*cc)3 file(GLOB sources *.cc plugins/*/*.cc contribs/*/*.cc tools/*.cc) 4 4 5 5 add_library(fastjet OBJECT ${sources}) -
external/fastjet/CircularRange.hh
rf6b6ee7 r49234af 1 // STARTHEADER2 // $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 $ 3 3 // 4 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez4 // Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 -
external/fastjet/ClosestPair2D.cc
rf6b6ee7 r49234af 1 // STARTHEADER2 // $Id $3 // 4 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez1 //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 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 #include "fastjet/internal/ClosestPair2D.hh" … … 36 38 FASTJET_BEGIN_NAMESPACE // defined in fastjet/internal/base.hh 37 39 38 const unsigned int huge_unsigned = 4294967295U;39 40 const unsigned int twopow31 = 2147483648U; 40 41 … … 183 184 ID2 = _ID(_points[ID1].neighbour); 184 185 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 185 190 if (ID1 > ID2) std::swap(ID1,ID2); 186 191 } -
external/fastjet/ClusterSequence.cc
rf6b6ee7 r49234af 1 // STARTHEADER2 // $Id $1 //FJSTARTHEADER 2 // $Id: ClusterSequence.cc 3685 2014-09-11 20:15:00Z salam $ 3 3 // 4 // Copyright (c) 2005-201 3, Matteo Cacciari, Gavin P. Salam and Gregory Soyez4 // Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 #include "fastjet/Error.hh" … … 32 34 #include "fastjet/ClusterSequenceStructure.hh" 33 35 #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 #ifndef __FJCORE__ 40 #include "fastjet/internal/LazyTiling9SeparateGhosts.hh" 41 #endif // __FJCORE__ 34 42 #include<iostream> 35 43 #include<sstream> … … 187 195 //DEP //---------------------------------------------------------------------- 188 196 //DEP void ClusterSequence::_initialise_and_run ( 189 //DEP const double &R,197 //DEP const double R, 190 198 //DEP const Strategy & strategy, 191 199 //DEP const bool & writeout_combinations) { … … 273 281 // ./fastjet_timing_plugins -kt -nhardest 30 -repeat 50000 -strategy -3 -R 0.5 -nev 1 < ../../data/Pythia-PtMin1000-LHC-1000ev.dat 274 282 if (_strategy == Best) { 283 _strategy = _best_strategy(); 284 #ifdef DROP_CGAL 285 // fall back strategy for large N when CGAL is missing 286 if (_strategy == NlnN) _strategy = N2MHTLazy25; 287 #endif // DROP_CGAL 288 } else if (_strategy == BestFJ30) { 275 289 int N = _jets.size(); 276 290 //if (N <= 55*max(0.5,min(1.0,_Rparam))) {// old empirical scaling with R … … 324 338 // run the code containing the selected strategy 325 339 // 326 // We order the strategies st qrting from the ones used by the Best340 // We order the strategies starting from the ones used by the Best 327 341 // strategy in the order of increasing N, then the remaining ones 328 342 // again in the order of increasing N. … … 334 348 } else if (_strategy == N2MinHeapTiled) { 335 349 this->_minheap_faster_tiled_N2_cluster(); 350 } else if (_strategy == N2MHTLazy9Alt) { 351 // attempt to use an external tiling routine -- it manipulates 352 // the CS history via the plugin mechanism 353 _plugin_activated = true; 354 LazyTiling9Alt tiling(*this); 355 tiling.run(); 356 _plugin_activated = false; 357 358 } else if (_strategy == N2MHTLazy25) { 359 // attempt to use an external tiling routine -- it manipulates 360 // the CS history via the plugin mechanism 361 _plugin_activated = true; 362 LazyTiling25 tiling(*this); 363 tiling.run(); 364 _plugin_activated = false; 365 366 } else if (_strategy == N2MHTLazy9) { 367 // attempt to use an external tiling routine -- it manipulates 368 // the CS history via the plugin mechanism 369 _plugin_activated = true; 370 LazyTiling9 tiling(*this); 371 tiling.run(); 372 _plugin_activated = false; 373 374 #ifndef __FJCORE__ 375 } else if (_strategy == N2MHTLazy9AntiKtSeparateGhosts) { 376 // attempt to use an external tiling routine -- it manipulates 377 // the CS history via the plugin mechanism 378 _plugin_activated = true; 379 LazyTiling9SeparateGhosts tiling(*this); 380 tiling.run(); 381 _plugin_activated = false; 382 #else 383 throw Error("N2MHTLazy9AntiKtSeparateGhosts strategy not supported with FJCORE"); 384 #endif // __FJCORE__ 385 336 386 } else if (_strategy == NlnN) { 337 387 this->_delaunay_cluster(); … … 359 409 // these needs to be defined outside the class definition. 360 410 bool ClusterSequence::_first_time = true; 361 int ClusterSequence::_n_exclusive_warnings = 0;411 LimitedWarning ClusterSequence::_exclusive_warnings; 362 412 363 413 … … 473 523 474 524 //---------------------------------------------------------------------- 475 // Return the component corresponding to the specified index.476 // taken from CLHEP477 525 string ClusterSequence::strategy_string (Strategy strategy_in) const { 478 526 string strategy; … … 492 540 case N2PoorTiled: 493 541 strategy = "N2PoorTiled"; break; 542 case N2MHTLazy9: 543 strategy = "N2MHTLazy9"; break; 544 case N2MHTLazy9Alt: 545 strategy = "N2MHTLazy9Alt"; break; 546 case N2MHTLazy25: 547 strategy = "N2MHTLazy25"; break; 548 case N2MHTLazy9AntiKtSeparateGhosts: 549 strategy = "N2MHTLazy9AntiKtSeparateGhosts"; break; 494 550 case N3Dumb: 495 551 strategy = "N3Dumb"; break; … … 528 584 } else {return 1.0;} 529 585 } else {throw Error("Unrecognised jet algorithm");} 586 } 587 588 //---------------------------------------------------------------------- 589 // returns a suggestion for the best strategy to use on event 590 // multiplicity, algorithm, R, etc. 591 // 592 // Some of the work to establish the best strategy is collected in 593 // issue-tracker/2014-07-auto-strategy-selection; 594 // transition_fit_v2.fit indicates the results of the fits that we're 595 // using here. (Automatically generated by transition_fit_v2.gp). 596 // 597 // The transition to NlnN is always present, and it is the the 598 // caller's responsibility to drop back down to N2MHTLazy25 if NlnN 599 // isn't available. 600 // 601 // This routine should be called only if the jet alg is one of kt, 602 // antikt, cam or genkt. 603 Strategy ClusterSequence::_best_strategy() const { 604 int N = _jets.size(); 605 // define bounded R, always above 0.1, because we don't trust any 606 // of our parametrizations below R = 0.1 607 double bounded_R = max(_Rparam, 0.1); 608 609 // the very first test thing is a quick hard-coded test to decide 610 // if we immediately opt for N2Plain 611 if (N <= 30 || N <= 39.0/(bounded_R + 0.6)) { 612 return N2Plain; 613 } 614 615 // Define objects that describe our various boundaries. A prefix N_ 616 // indicates that boundary is for N, while L_ means it's for log(N). 617 // 618 // Hopefully having them static will ensure minimal overhead 619 // in creating them; collecting them in one place should 620 // help with updates? 621 // 622 const static _Parabola N_Tiled_to_MHT_lowR (-45.4947,54.3528,44.6283); 623 const static _Parabola L_MHT_to_MHTLazy9_lowR (0.677807,-1.05006,10.6994); 624 const static _Parabola L_MHTLazy9_to_MHTLazy25_akt_lowR(0.169967,-0.512589,12.1572); 625 const static _Parabola L_MHTLazy9_to_MHTLazy25_kt_lowR (0.16237,-0.484612,12.3373); 626 const static _Parabola L_MHTLazy9_to_MHTLazy25_cam_lowR = L_MHTLazy9_to_MHTLazy25_kt_lowR; 627 const static _Parabola L_MHTLazy25_to_NlnN_akt_lowR (0.0472051,-0.22043,15.9196); 628 const static _Parabola L_MHTLazy25_to_NlnN_kt_lowR (0.118609,-0.326811,14.8287); 629 const static _Parabola L_MHTLazy25_to_NlnN_cam_lowR (0.10119,-0.295748,14.3924); 630 631 const static _Line L_Tiled_to_MHTLazy9_medR (-1.31304,7.29621); 632 const static _Parabola L_MHTLazy9_to_MHTLazy25_akt_medR = L_MHTLazy9_to_MHTLazy25_akt_lowR; 633 const static _Parabola L_MHTLazy9_to_MHTLazy25_kt_medR = L_MHTLazy9_to_MHTLazy25_kt_lowR; 634 const static _Parabola L_MHTLazy9_to_MHTLazy25_cam_medR = L_MHTLazy9_to_MHTLazy25_cam_lowR; 635 const static _Parabola L_MHTLazy25_to_NlnN_akt_medR = L_MHTLazy25_to_NlnN_akt_lowR; 636 const static _Parabola L_MHTLazy25_to_NlnN_kt_medR = L_MHTLazy25_to_NlnN_kt_lowR; 637 const static _Parabola L_MHTLazy25_to_NlnN_cam_medR = L_MHTLazy25_to_NlnN_cam_lowR; 638 639 const static double N_Plain_to_MHTLazy9_largeR = 75; 640 const static double N_MHTLazy9_to_MHTLazy25_akt_largeR = 700; 641 const static double N_MHTLazy9_to_MHTLazy25_kt_largeR = 1000; 642 const static double N_MHTLazy9_to_MHTLazy25_cam_largeR = 1000; 643 const static double N_MHTLazy25_to_NlnN_akt_largeR = 100000; 644 const static double N_MHTLazy25_to_NlnN_kt_largeR = 40000; 645 const static double N_MHTLazy25_to_NlnN_cam_largeR = 15000; 646 647 // We have timing studies only for kt, cam and antikt; for other 648 // algorithms we set the local jet_algorithm variable to the one of 649 // kt,cam,antikt that we think will be closest in behaviour to the 650 // other alg. 651 JetAlgorithm jet_algorithm; 652 if (_jet_algorithm == genkt_algorithm) { 653 // for genkt, then we set the local jet_algorithm variable (used 654 // only for strategy choice) to be either kt or antikt, depending on 655 // the p value. 656 double p = jet_def().extra_param(); 657 if (p < 0.0) jet_algorithm = antikt_algorithm; 658 else jet_algorithm = kt_algorithm; 659 } else if (_jet_algorithm == cambridge_for_passive_algorithm) { 660 // we assume (but haven't tested) that using the kt-alg timing 661 // transitions should be adequate for cambridge_for_passive_algorithm 662 jet_algorithm = kt_algorithm; 663 } else { 664 jet_algorithm = _jet_algorithm; 665 } 666 667 if (bounded_R < 0.65) { 668 // low R case 669 if (N < N_Tiled_to_MHT_lowR(bounded_R)) return N2Tiled; 670 double logN = log(double(N)); 671 if (logN < L_MHT_to_MHTLazy9_lowR(bounded_R)) return N2MinHeapTiled; 672 else { 673 if (jet_algorithm == antikt_algorithm){ 674 if (logN < L_MHTLazy9_to_MHTLazy25_akt_lowR(bounded_R)) return N2MHTLazy9; 675 else if (logN < L_MHTLazy25_to_NlnN_akt_lowR(bounded_R)) return N2MHTLazy25; 676 else return NlnN; 677 } else if (jet_algorithm == kt_algorithm){ 678 if (logN < L_MHTLazy9_to_MHTLazy25_kt_lowR(bounded_R)) return N2MHTLazy9; 679 else if (logN < L_MHTLazy25_to_NlnN_kt_lowR(bounded_R)) return N2MHTLazy25; 680 else return NlnN; 681 } else if (jet_algorithm == cambridge_algorithm) { 682 if (logN < L_MHTLazy9_to_MHTLazy25_cam_lowR(bounded_R)) return N2MHTLazy9; 683 else if (logN < L_MHTLazy25_to_NlnN_cam_lowR(bounded_R)) return N2MHTLazy25; 684 else return NlnNCam; 685 } 686 } 687 } else if (bounded_R < 0.5*pi) { 688 // medium R case 689 double logN = log(double(N)); 690 if (logN < L_Tiled_to_MHTLazy9_medR(bounded_R)) return N2Tiled; 691 else { 692 if (jet_algorithm == antikt_algorithm){ 693 if (logN < L_MHTLazy9_to_MHTLazy25_akt_medR(bounded_R)) return N2MHTLazy9; 694 else if (logN < L_MHTLazy25_to_NlnN_akt_medR(bounded_R)) return N2MHTLazy25; 695 else return NlnN; 696 } else if (jet_algorithm == kt_algorithm){ 697 if (logN < L_MHTLazy9_to_MHTLazy25_kt_medR(bounded_R)) return N2MHTLazy9; 698 else if (logN < L_MHTLazy25_to_NlnN_kt_medR(bounded_R)) return N2MHTLazy25; 699 else return NlnN; 700 } else if (jet_algorithm == cambridge_algorithm) { 701 if (logN < L_MHTLazy9_to_MHTLazy25_cam_medR(bounded_R)) return N2MHTLazy9; 702 else if (logN < L_MHTLazy25_to_NlnN_cam_medR(bounded_R)) return N2MHTLazy25; 703 else return NlnNCam; 704 } 705 } 706 } else { 707 // large R case (R > pi/2) 708 if (N < N_Plain_to_MHTLazy9_largeR) return N2Plain; 709 else { 710 if (jet_algorithm == antikt_algorithm){ 711 if (N < N_MHTLazy9_to_MHTLazy25_akt_largeR) return N2MHTLazy9; 712 else if (N < N_MHTLazy25_to_NlnN_akt_largeR) return N2MHTLazy25; 713 else return NlnN; 714 } else if (jet_algorithm == kt_algorithm){ 715 if (N < N_MHTLazy9_to_MHTLazy25_kt_largeR) return N2MHTLazy9; 716 else if (N < N_MHTLazy25_to_NlnN_kt_largeR) return N2MHTLazy25; 717 else return NlnN; 718 } else if (jet_algorithm == cambridge_algorithm) { 719 if (N < N_MHTLazy9_to_MHTLazy25_cam_largeR) return N2MHTLazy9; 720 else if (N < N_MHTLazy25_to_NlnN_cam_largeR) return N2MHTLazy25; 721 else return NlnNCam; 722 } 723 } 724 } 725 726 bool code_should_never_reach_here = false; 727 assert(code_should_never_reach_here); 728 return N2MHTLazy9; 729 530 730 } 531 731 … … 662 862 //---------------------------------------------------------------------- 663 863 // return all inclusive jets with pt > ptmin 664 vector<PseudoJet> ClusterSequence::inclusive_jets (const double &ptmin) const{864 vector<PseudoJet> ClusterSequence::inclusive_jets (const double ptmin) const{ 665 865 double dcut = ptmin*ptmin; 666 866 int i = _history.size() - 1; // last jet … … 714 914 // return the number of exclusive jets that would have been obtained 715 915 // running the algorithm in exclusive mode with the given dcut 716 int ClusterSequence::n_exclusive_jets (const double &dcut) const {916 int ClusterSequence::n_exclusive_jets (const double dcut) const { 717 917 718 918 // first locate the point where clustering would have stopped (i.e. the … … 733 933 // return all exclusive jets that would have been obtained running 734 934 // the algorithm in exclusive mode with the given dcut 735 vector<PseudoJet> ClusterSequence::exclusive_jets (const double &dcut) const {935 vector<PseudoJet> ClusterSequence::exclusive_jets (const double dcut) const { 736 936 int njets = n_exclusive_jets(dcut); 737 937 return exclusive_jets(njets); … … 742 942 // return the jets obtained by clustering the event to n jets. 743 943 // Throw an error if there are fewer than n particles. 744 vector<PseudoJet> ClusterSequence::exclusive_jets (const int &njets) const {944 vector<PseudoJet> ClusterSequence::exclusive_jets (const int njets) const { 745 945 746 946 // make sure the user does not ask for more than jets than there … … 759 959 // return the jets obtained by clustering the event to n jets. 760 960 // If there are fewer than n particles, simply return all particles 761 vector<PseudoJet> ClusterSequence::exclusive_jets_up_to (const int &njets) const {961 vector<PseudoJet> ClusterSequence::exclusive_jets_up_to (const int njets) const { 762 962 763 963 // provide a warning when extracting exclusive jets for algorithms 764 964 // that does not support it explicitly. 765 // Native algorithm that support it are: kt, ee_kt, cambridge,965 // Native algorithm that support it are: kt, ee_kt, Cambridge/Aachen, 766 966 // genkt and ee_genkt (both with p>=0) 767 967 // For plugins, we check Plugin::exclusive_sequence_meaningful() … … 773 973 (_jet_def.extra_param() <0)) && 774 974 ((_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; 975 (!_jet_def.plugin()->exclusive_sequence_meaningful()))) { 976 _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."); 779 977 } 780 978 … … 829 1027 /// return the dmin corresponding to the recombination that went from 830 1028 /// n+1 to n jets 831 double ClusterSequence::exclusive_dmerge (const int &njets) const {1029 double ClusterSequence::exclusive_dmerge (const int njets) const { 832 1030 assert(njets >= 0); 833 1031 if (njets >= _initial_n) {return 0.0;} … … 841 1039 /// exclusive_dmerge, except in cases where the dmin do not increase 842 1040 /// monotonically. 843 double ClusterSequence::exclusive_dmerge_max (const int &njets) const {1041 double ClusterSequence::exclusive_dmerge_max (const int njets) const { 844 1042 assert(njets >= 0); 845 1043 if (njets >= _initial_n) {return 0.0;} … … 853 1051 /// the algorithm with the given dcut. 854 1052 std::vector<PseudoJet> ClusterSequence::exclusive_subjets 855 (const PseudoJet & jet, const double &dcut) const {1053 (const PseudoJet & jet, const double dcut) const { 856 1054 857 1055 set<const history_element*> subhist; … … 876 1074 /// exclusive_subjets.size() 877 1075 int ClusterSequence::n_exclusive_subjets(const PseudoJet & jet, 878 const double &dcut) const {1076 const double dcut) const { 879 1077 set<const history_element*> subhist; 880 1078 // get the set of history elements that correspond to subjets at … … 1181 1379 // //---------------------------------------------------------------------- 1182 1380 // // print out all inclusive jets with pt > ptmin 1183 // void ClusterSequence::print_jets (const double &ptmin) const{1381 // void ClusterSequence::print_jets (const double ptmin) const{ 1184 1382 // vector<PseudoJet> jets = sorted_by_pt(inclusive_jets(ptmin)); 1185 1383 // … … 1257 1455 // initialise the history in a standard way 1258 1456 void 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) {1457 const int step_number, const int parent1, 1458 const int parent2, const int jetp_index, 1459 const double dij) { 1262 1460 1263 1461 history_element element; … … 1429 1627 /// of the recombined jet, newjet_k. 1430 1628 void ClusterSequence::_do_ij_recombination_step( 1431 const int & jet_i, const int &jet_j,1432 const double &dij,1629 const int jet_i, const int jet_j, 1630 const double dij, 1433 1631 int & newjet_k) { 1434 1632 … … 1466 1664 /// jet_i with the beam 1467 1665 void ClusterSequence::_do_iB_recombination_step( 1468 const int & jet_i, const double &diB) {1666 const int jet_i, const double diB) { 1469 1667 // get history index 1470 1668 int newstep_k = _history.size(); -
external/fastjet/ClusterSequence.hh
rf6b6ee7 r49234af 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 3709 2014-09-29 13:19:11Z soyez $ 3 6 // 4 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez7 // Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 5 8 // 6 9 //---------------------------------------------------------------------- … … 13 16 // 14 17 // 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 16 20 // 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. 18 23 // 19 24 // FastJet is distributed in the hope that it will be useful, … … 25 30 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 31 //---------------------------------------------------------------------- 27 //ENDHEADER 28 29 30 #ifndef __FASTJET_CLUSTERSEQUENCE_HH__ 31 #define __FASTJET_CLUSTERSEQUENCE_HH__ 32 //FJENDHEADER 33 32 34 33 35 #include<vector> … … 65 67 ClusterSequence () : _deletes_self_when_unused(false) {} 66 68 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 84 71 /// by jet_def (which also specifies the clustering strategy) 85 72 template<class L> ClusterSequence ( … … 104 91 /// algorithm) with pt >= ptmin. Time taken should be of the order 105 92 /// 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; 107 94 108 95 /// return the number of jets (in the sense of the exclusive 109 96 /// algorithm) that would be obtained when running the algorithm 110 97 /// with the given dcut. 111 int n_exclusive_jets (const double &dcut) const;98 int n_exclusive_jets (const double dcut) const; 112 99 113 100 /// return a vector of all jets (in the sense of the exclusive 114 101 /// algorithm) that would be obtained when running the algorithm 115 102 /// with the given dcut. 116 std::vector<PseudoJet> exclusive_jets (const double &dcut) const;103 std::vector<PseudoJet> exclusive_jets (const double dcut) const; 117 104 118 105 /// return a vector of all jets when the event is clustered (in the … … 121 108 /// If there are fewer than njets particles in the ClusterSequence 122 109 /// an error is thrown 123 std::vector<PseudoJet> exclusive_jets (const int &njets) const;110 std::vector<PseudoJet> exclusive_jets (const int njets) const; 124 111 125 112 /// return a vector of all jets when the event is clustered (in the … … 128 115 /// If there are fewer than njets particles in the ClusterSequence 129 116 /// 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; 131 118 132 119 /// return the dmin corresponding to the recombination that went 133 120 /// from n+1 to n jets (sometimes known as d_{n n+1}). If the number 134 121 /// 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; 136 123 137 124 /// return the maximum of the dmin encountered during all recombinations … … 139 126 /// exclusive_dmerge, except in cases where the dmin do not increase 140 127 /// monotonically. 141 double exclusive_dmerge_max (const int &njets) const;128 double exclusive_dmerge_max (const int njets) const; 142 129 143 130 /// return the ymin corresponding to the recombination that went from … … 158 145 159 146 160 //int n_exclusive_jets (const PseudoJet & jet, const double &dcut) const;147 //int n_exclusive_jets (const PseudoJet & jet, const double dcut) const; 161 148 162 149 /// return a vector of all subjets of the current jet (in the sense … … 169 156 /// just getting that list of constituents. 170 157 std::vector<PseudoJet> exclusive_subjets (const PseudoJet & jet, 171 const double &dcut) const;158 const double dcut) const; 172 159 173 160 /// return the size of exclusive_subjets(...); still n ln n with same … … 175 162 /// exclusive_subjets.size() 176 163 int n_exclusive_subjets(const PseudoJet & jet, 177 const double &dcut) const;164 const double dcut) const; 178 165 179 166 /// return the list of subjets obtained by unclustering the supplied … … 193 180 int nsub) const; 194 181 195 /// return the dij that was present in the merging nsub+1 -> nsub182 /// returns the dij that was present in the merging nsub+1 -> nsub 196 183 /// subjets inside this jet. 197 184 /// … … 199 186 double exclusive_subdmerge(const PseudoJet & jet, int nsub) const; 200 187 201 /// return the maximum dij that occurred in the whole event at the188 /// returns the maximum dij that occurred in the whole event at the 202 189 /// stage that the nsub+1 -> nsub merge of subjets occurred inside 203 190 /// this jet. … … 207 194 208 195 //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; 211 198 212 199 /// returns the sum of all energies in the event (relevant mainly for e+e-) … … 272 259 // Not yet. Perhaps in a future release. 273 260 // /// 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; 275 262 276 263 /// add on to subjet_vector the constituents of jet (for internal use mainly) … … 300 287 /// 301 288 /// 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. 305 291 void delete_self_when_unused(); 306 292 … … 313 299 314 300 /// 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. 317 304 double jet_scale_for_algorithm(const PseudoJet & jet) const; 318 305 … … 363 350 364 351 /// 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 365 360 /// 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 366 364 inline void plugin_associate_extras(std::auto_ptr<Extras> extras_in) { 367 //_extras = extras_in;368 365 _extras.reset(extras_in.release()); 369 366 } … … 599 596 //DEP /// clustering, provided for legacy purposes. The jet finder is that 600 597 //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, 602 599 //DEP const Strategy & strategy, 603 600 //DEP const bool & writeout_combinations); … … 622 619 /// jet_j, at distance scale dij; return the index newjet_k of the 623 620 /// 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); 626 623 627 624 /// carry out an recombination step in which _jets[jet_i] merges with 628 625 /// 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); 630 627 631 628 /// every time a jet is added internally during clustering, this … … 640 637 void _update_structure_use_count(); 641 638 639 /// returns a suggestion for the best strategy to use on event 640 /// multiplicity, algorithm, R, etc. 641 Strategy _best_strategy() const; 642 643 /// \if internal_doc 644 /// \class _Parabola 645 /// returns c*(a*R**2 + b*R + 1); 646 /// Written as a class in case we want to give names to different 647 /// parabolas 648 /// \endif 649 class _Parabola { 650 public: 651 _Parabola(double a, double b, double c) : _a(a), _b(b), _c(c) {} 652 inline double operator()(const double R) const {return _c*(_a*R*R + _b*R + 1);} 653 private: 654 double _a, _b, _c; 655 }; 656 657 /// \if internal_doc 658 /// \class _Line 659 /// operator()(R) returns a*R+b; 660 /// \endif 661 class _Line { 662 public: 663 _Line(double a, double b) : _a(a), _b(b) {} 664 inline double operator()(const double R) const {return _a*R + _b;} 665 private: 666 double _a, _b; 667 }; 642 668 643 669 /// This contains the physical PseudoJets; for each PseudoJet one … … 681 707 682 708 bool _plugin_activated; 683 //std::auto_ptr<Extras> _extras; // things the plugin might want to add684 709 SharedPtr<Extras> _extras; // things the plugin might want to add 685 710 … … 705 730 void _fast_NsqrtN_cluster(); 706 731 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);732 void _add_step_to_history(const int step_number, const int parent1, 733 const int parent2, const int jetp_index, 734 const double dij); 710 735 711 736 /// internal routine associated with the construction of the unique … … 726 751 727 752 /// currently used only in the Voronoi based code 728 void _add_ktdistance_to_map(const int &ii,753 void _add_ktdistance_to_map(const int ii, 729 754 DistMap & DijMap, 730 755 const DynamicNearestNeighbours * DNN); … … 734 759 static bool _first_time; 735 760 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; 761 /// manage warnings related to exclusive jets access 762 static LimitedWarning _exclusive_warnings; 740 763 741 764 /// the limited warning member for notification of user that … … 754 777 int _jets_index; 755 778 }; 756 757 779 758 780 /// structure analogous to BriefJet, but with the extra information … … 862 884 // routines for tiled case, including some overloads of the plain 863 885 // BriefJet cases 864 int _tile_index(const double & eta, const double &phi) const;886 int _tile_index(const double eta, const double phi) const; 865 887 void _tj_set_jetinfo ( TiledJet * const jet, const int _jets_index); 866 888 void _bj_remove_from_tiles(TiledJet * const jet); … … 871 893 void _add_untagged_neighbours_to_tile_union(const int tile_index, 872 894 std::vector<int> & tile_union, int & n_near_tiles); 873 874 895 875 896 //---------------------------------------------------------------------- … … 923 944 // template<class L> ClusterSequence::ClusterSequence ( 924 945 // const std::vector<L> & pseudojets, 925 // const double &R,946 // const double R, 926 947 // const Strategy & strategy, 927 948 // const bool & writeout_combinations) { … … 966 987 967 988 inline unsigned int ClusterSequence::n_particles() const {return _initial_n;} 989 990 //---------------------------------------------------------------------- 991 // implementation of JetDefinition::operator() is here to avoid nasty 992 // issues of order of implementations and includes 993 template<class L> 994 std::vector<PseudoJet> JetDefinition::operator()(const std::vector<L> & particles) const { 995 // create a new cluster sequence 996 ClusterSequence * cs = new ClusterSequence(particles, *this); 997 998 // get the jets, and sort them according to whether the algorithm 999 // is spherical or not 1000 std::vector<PseudoJet> jets; 1001 if (is_spherical()) { 1002 jets = sorted_by_E(cs->inclusive_jets()); 1003 } else { 1004 jets = sorted_by_pt(cs->inclusive_jets()); 1005 } 1006 1007 // make sure the ClusterSequence gets deleted once it's no longer 1008 // needed 1009 if (jets.size() != 0) { 1010 cs->delete_self_when_unused(); 1011 } else { 1012 delete cs; 1013 } 1014 1015 return jets; 1016 } 968 1017 969 1018 -
external/fastjet/ClusterSequence1GhostPassiveArea.cc
rf6b6ee7 r49234af 1 // STARTHEADER2 // $Id $1 //FJSTARTHEADER 2 // $Id: ClusterSequence1GhostPassiveArea.cc 3433 2014-07-23 08:17:03Z salam $ 3 3 // 4 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez4 // Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 #include "fastjet/ClusterSequence1GhostPassiveArea.hh" -
external/fastjet/ClusterSequence1GhostPassiveArea.hh
rf6b6ee7 r49234af 1 // STARTHEADER2 // $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 $ 3 3 // 4 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez4 // Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 #ifndef __FASTJET_CLUSTERSEQUENCE1GHOSTPASSIVEAREA_HH__ -
external/fastjet/ClusterSequenceActiveArea.cc
rf6b6ee7 r49234af 1 // STARTHEADER2 // $Id $1 //FJSTARTHEADER 2 // $Id: ClusterSequenceActiveArea.cc 3433 2014-07-23 08:17:03Z salam $ 3 3 // 4 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez4 // Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 #include "fastjet/PseudoJet.hh" -
external/fastjet/ClusterSequenceActiveArea.hh
rf6b6ee7 r49234af 1 // STARTHEADER2 // $Id: ClusterSequenceActiveArea.hh 2687 2011-11-14 11:17:51Z soyez$3 // 4 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez1 //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 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 #ifndef __FASTJET_CLUSTERSEQUENCEACTIVEAREA_HH__ … … 83 85 /// the background (e.g. non-jet) activity in a highly populated event; the 84 86 /// 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). 85 90 enum mean_pt_strategies{median=0, non_ghost_median, pttot_over_areatot, 86 91 pttot_over_areatot_cut, mean_ratio_cut, play, … … 93 98 /// have pt/area > median(pt/area)*range. 94 99 /// 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. 97 103 double pt_per_unit_area(mean_pt_strategies strat=median, 98 104 double range=2.0 ) const; 99 105 100 // following code removed -- now dealt with by AreaBase class (and101 // this definition here conflicts with it).102 // /// fits a form pt_per_unit_area(y) = a + b*y^2 in the range103 // /// abs(y)<raprange (for negative raprange, it defaults to104 // /// _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 //109 106 /// rewrite the empty area from the parent class, so as to use 110 107 /// all info at our disposal -
external/fastjet/ClusterSequenceActiveAreaExplicitGhosts.cc
rf6b6ee7 r49234af 1 // STARTHEADER2 // $Id $3 // 4 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez1 //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 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 #include "fastjet/ClusterSequenceActiveAreaExplicitGhosts.hh" -
external/fastjet/ClusterSequenceActiveAreaExplicitGhosts.hh
rf6b6ee7 r49234af 1 // STARTHEADER2 // $Id: ClusterSequenceActiveAreaExplicitGhosts.hh 2687 2011-11-14 11:17:51Z soyez$3 // 4 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez1 //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 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 #ifndef __FASTJET_CLUSTERSEQUENCEACTIVEAREAEXPLICITGHOSTS_HH_ -
external/fastjet/ClusterSequenceArea.cc
rf6b6ee7 r49234af 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 1 31 #include "fastjet/ClusterSequenceArea.hh" 2 32 -
external/fastjet/ClusterSequenceArea.hh
rf6b6ee7 r49234af 1 // STARTHEADER2 // $Id: ClusterSequenceArea.hh 2690 2011-11-14 14:57:54Z soyez $3 // 4 // Copyright (c) 2006-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez1 //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 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 #ifndef __FASTJET_CLUSTERSEQUENCEAREA_HH__ … … 245 247 break; 246 248 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); 250 254 } 251 255 // now copy across the information from the area base class -
external/fastjet/ClusterSequenceAreaBase.cc
rf6b6ee7 r49234af 1 1 2 // STARTHEADER3 // $Id $4 // 5 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez2 //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 6 6 // 7 7 //---------------------------------------------------------------------- … … 14 14 // 15 15 // 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 17 18 // 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. 19 21 // 20 22 // FastJet is distributed in the hope that it will be useful, … … 26 28 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 27 29 //---------------------------------------------------------------------- 28 // ENDHEADER30 //FJENDHEADER 29 31 30 32 -
external/fastjet/ClusterSequenceAreaBase.hh
rf6b6ee7 r49234af 1 // STARTHEADER2 // $Id: ClusterSequenceAreaBase.hh 2687 2011-11-14 11:17:51Z soyez$3 // 4 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez1 //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 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 #ifndef __FASTJET_CLUSTERSEQUENCEAREABASE_HH__ -
external/fastjet/ClusterSequencePassiveArea.cc
rf6b6ee7 r49234af 1 // STARTHEADER2 // $Id $1 //FJSTARTHEADER 2 // $Id: ClusterSequencePassiveArea.cc 3433 2014-07-23 08:17:03Z salam $ 3 3 // 4 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez4 // Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 #include "fastjet/ClusterSequencePassiveArea.hh" -
external/fastjet/ClusterSequencePassiveArea.hh
rf6b6ee7 r49234af 1 // STARTHEADER2 // $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 $ 3 3 // 4 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez4 // Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 #ifndef __FASTJET_CLUSTERSEQUENCEPASSIVEAREA_HH__ -
external/fastjet/ClusterSequenceStructure.cc
rf6b6ee7 r49234af 1 // STARTHEADER2 // $Id $3 // 4 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez1 //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 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 #include "fastjet/ClusterSequenceStructure.hh" -
external/fastjet/ClusterSequenceStructure.hh
rf6b6ee7 r49234af 1 // STARTHEADER2 // $Id: ClusterSequenceStructure.hh 3 071 2013-04-01 12:52:46Z cacciari$3 // 4 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez1 //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 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 -
external/fastjet/ClusterSequenceVoronoiArea.cc
rf6b6ee7 r49234af 1 // STARTHEADER2 // $Id $3 // 4 // Copyright (c) 2006-20 07 Matteo Cacciari, GavinSalam and Gregory Soyez5 // 6 //---------------------------------------------------------------------- 7 // This file is part of a simple command-line handling environment1 //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. 8 8 // 9 9 // FastJet is free software; you can redistribute it and/or modify … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 #include "fastjet/ClusterSequenceVoronoiArea.hh" … … 276 278 // -- first the initial ones 277 279 _voronoi_area.reserve(2*n_particles()); 280 _voronoi_area_4vector.reserve(2*n_particles()); 278 281 for (unsigned int i=0; i<n_particles(); i++) { 279 282 _voronoi_area.push_back(_pa_calc->area(i)); -
external/fastjet/ClusterSequenceVoronoiArea.hh
rf6b6ee7 r49234af 1 // STARTHEADER2 // $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 $ 3 3 // 4 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez4 // Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 #ifndef __FASTJET_CLUSTERSEQUENCEVORONOIAREA_HH__ … … 66 68 return _voronoi_area[jet.cluster_hist_index()];} 67 69 68 /// return a 4-vector area associated with the given jet -- stric ly70 /// return a 4-vector area associated with the given jet -- strictly 69 71 /// this is not the exact 4-vector area, but rather an approximation 70 72 /// made of sums of centres of all Voronoi cells in jet, each -
external/fastjet/ClusterSequenceWithArea.hh
rf6b6ee7 r49234af 1 // STARTHEADER2 // $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 $ 3 3 // 4 // Copyright (c) 2006-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez4 // Copyright (c) 2006-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 #ifndef __FASTJET_CLUSTERSEQUENCEWITHAREA_HH__ -
external/fastjet/ClusterSequence_CP2DChan.cc
rf6b6ee7 r49234af 1 // STARTHEADER2 // $Id $3 // 4 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez1 //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 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 #include "fastjet/ClusterSequence.hh" -
external/fastjet/ClusterSequence_Delaunay.cc
rf6b6ee7 r49234af 1 // STARTHEADER2 // $Id $3 // 4 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez1 //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 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 … … 85 87 throw Error(err.str()); 86 88 //assert(false); 87 } 89 } else 88 90 #endif // DROP_CGAL 89 91 { 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 92 99 assert(false); 93 throw Error(err.str());94 100 } 95 101 … … 217 223 /// 218 224 void ClusterSequence::_add_ktdistance_to_map( 219 const int &ii,225 const int ii, 220 226 DistMap & DijMap, 221 227 const DynamicNearestNeighbours * DNN) { -
external/fastjet/ClusterSequence_DumbN3.cc
rf6b6ee7 r49234af 1 // STARTHEADER2 // $Id $1 //FJSTARTHEADER 2 // $Id: ClusterSequence_DumbN3.cc 3433 2014-07-23 08:17:03Z salam $ 3 3 // 4 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez4 // Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 -
external/fastjet/ClusterSequence_N2.cc
rf6b6ee7 r49234af 1 // STARTHEADER2 // $Id $1 //FJSTARTHEADER 2 // $Id: ClusterSequence_N2.cc 3433 2014-07-23 08:17:03Z salam $ 3 3 // 4 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez4 // Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 -
external/fastjet/ClusterSequence_TiledN2.cc
rf6b6ee7 r49234af 1 // STARTHEADER2 // $Id $1 //FJSTARTHEADER 2 // $Id: ClusterSequence_TiledN2.cc 3433 2014-07-23 08:17:03Z salam $ 3 3 // 4 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez4 // Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER28 29 30 // The plainN^2 part of the ClusterSequence class -- separated out29 //FJENDHEADER 30 31 32 // The tiled N^2 part of the ClusterSequence class -- separated out 31 33 // from the rest of the class implementation so as to speed up 32 34 // compilation of this particular part while it is under test. … … 39 41 #include "fastjet/ClusterSequence.hh" 40 42 #include "fastjet/internal/MinHeap.hh" 43 #include "fastjet/internal/TilingExtent.hh" 41 44 42 45 FASTJET_BEGIN_NAMESPACE // defined in fastjet/internal/base.hh … … 94 97 _tile_size_phi = twopi / _n_tiles_phi; // >= _Rparam and fits in 2pi 95 98 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 // } 112 119 113 120 // now adjust the values … … 167 174 //---------------------------------------------------------------------- 168 175 /// return the tile index corresponding to the given eta,phi point 169 int ClusterSequence::_tile_index(const double & eta, const double &phi) const {176 int ClusterSequence::_tile_index(const double eta, const double phi) const { 170 177 int ieta, iphi; 171 178 if (eta <= _tiles_eta_min) {ieta = 0;} … … 249 256 /// their "tagged" status is false; when a neighbour is added its 250 257 /// 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 251 275 inline void ClusterSequence::_add_untagged_neighbours_to_tile_union( 252 276 const int tile_index, … … 274 298 TiledJet * jetA = briefjets, * jetB; 275 299 TiledJet oldB; 276 oldB.tile_index=0; // prevents a gcc warning 300 oldB.tile_index=0; // prevents a gcc warning 277 301 278 302 // will be used quite deep inside loops, but declare it here so that … … 517 541 TiledJet * jetA = briefjets, * jetB; 518 542 TiledJet oldB; 519 oldB.tile_index=0; // prevents a gcc warning 543 oldB.tile_index=0; // prevents a gcc warning 520 544 521 545 // will be used quite deep inside loops, but declare it here so that … … 555 579 // when we set NN for both jetA and jetB on the RH tiles. 556 580 } 557 558 581 559 582 // now create the diJ (where J is i's NN) table -- remember that … … 721 744 } 722 745 723 724 725 746 //---------------------------------------------------------------------- 726 747 /// run a tiled clustering, with our minheap for keeping track of the … … 735 756 TiledJet oldB; 736 757 oldB.tile_index=0; // prevents a gcc warning 737 738 758 739 759 // will be used quite deep inside loops, but declare it here so that -
external/fastjet/CompositeJetStructure.cc
rf6b6ee7 r49234af 1 // STARTHEADER2 // $Id $1 //FJSTARTHEADER 2 // $Id: CompositeJetStructure.cc 3433 2014-07-23 08:17:03Z salam $ 3 3 // 4 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez4 // Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 #include <fastjet/CompositeJetStructure.hh> … … 151 153 double a_err=0; 152 154 for (unsigned i = 0; i < _pieces.size(); i++) 153 a_err += _pieces[i].area ();155 a_err += _pieces[i].area_error(); 154 156 155 157 return a_err; -
external/fastjet/CompositeJetStructure.hh
rf6b6ee7 r49234af 1 // STARTHEADER2 // $Id: CompositeJetStructure.hh 3 071 2013-04-01 12:52:46Z cacciari$3 // 4 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez1 //FJSTARTHEADER 2 // $Id: CompositeJetStructure.hh 3652 2014-09-03 13:31:13Z salam $ 3 // 4 // Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 … … 110 112 virtual bool is_pure_ghost(const PseudoJet &reference) const; 111 113 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; 117 135 } 118 136 … … 226 244 const JetDefinition::Recombiner & recombiner){ 227 245 std::vector<PseudoJet> pieces; 246 pieces.reserve(2); 228 247 pieces.push_back(j1); 229 248 pieces.push_back(j2); … … 237 256 const JetDefinition::Recombiner & recombiner){ 238 257 std::vector<PseudoJet> pieces; 258 pieces.reserve(3); 239 259 pieces.push_back(j1); 240 260 pieces.push_back(j2); … … 249 269 const JetDefinition::Recombiner & recombiner){ 250 270 std::vector<PseudoJet> pieces; 271 pieces.reserve(4); 251 272 pieces.push_back(j1); 252 273 pieces.push_back(j2); -
external/fastjet/Dnn2piCylinder.cc
rf6b6ee7 r49234af 1 // STARTHEADER2 // $Id $3 // 4 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez1 //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 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 -
external/fastjet/Dnn3piCylinder.cc
rf6b6ee7 r49234af 1 // STARTHEADER2 // $Id $1 //FJSTARTHEADER 2 // $Id: Dnn3piCylinder.cc 3433 2014-07-23 08:17:03Z salam $ 3 3 // 4 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez4 // Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 -
external/fastjet/Dnn4piCylinder.cc
rf6b6ee7 r49234af 1 // STARTHEADER2 // $Id $1 //FJSTARTHEADER 2 // $Id: Dnn4piCylinder.cc 3433 2014-07-23 08:17:03Z salam $ 3 3 // 4 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez4 // Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 -
external/fastjet/DnnPlane.cc
rf6b6ee7 r49234af 1 // STARTHEADER2 // $Id $1 //FJSTARTHEADER 2 // $Id: DnnPlane.cc 3442 2014-07-24 07:20:49Z salam $ 3 3 // 4 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez4 // Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 … … 33 35 #include<list> 34 36 #include "fastjet/internal/DnnPlane.hh" 37 35 38 using namespace std; 36 39 37 40 FASTJET_BEGIN_NAMESPACE // defined in fastjet/internal/base.hh 41 42 const double DnnPlane::DISTANCE_FOR_CGAL_CHECKS=1.0e-12; 38 43 39 44 … … 53 58 _TR.insert(Point(input_points[i].first, input_points[i].second)); 54 59 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 63 94 _supervertex.push_back(sv); 64 95 } … … 76 107 /// Crashes if the given vertex handle already exists. Otherwise 77 108 /// 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 109 int DnnPlane::_CheckIfVertexPresent( 110 const Vertex_handle & vertex, const int its_index) { 82 111 // vertices that do not have the same geometric position as any 83 112 // other vertex so far added have info().val() == NEW_VERTEX -- this … … 90 119 // DNN:DNN) to be equal to a vertex "index". 91 120 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; 98 132 } 99 133 … … 116 150 vector<int> & indices_of_updated_neighbours) { 117 151 152 if (_verbose) cout << "Starting DnnPlane::RemoveAndAddPoints" << endl; 118 153 119 154 // build set of UNION of Voronoi neighbours of a pair of nearest … … 124 159 set<int> indices_removed; 125 160 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. 128 164 for (size_t ir = 0; ir < indices_to_remove.size(); ir++) { 129 165 int index = indices_to_remove[ir]; 130 166 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 133 187 // have a circulators that will go round the Voronoi neighbours of 134 188 // _supervertex[index1].vertex 135 189 Vertex_circulator vc = _TR.incident_vertices(_supervertex[index].vertex); 136 190 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 } 149 207 } 150 208 … … 160 218 for (size_t ir = 0; ir < indices_to_remove.size(); ir++) { 161 219 int index = indices_to_remove[ir]; 220 if (_verbose) cout << " removing " << index << endl; 162 221 163 222 // NeighbourUnion should not contain the points to be removed 164 223 // (because later we will assume they still exist). 165 224 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 167 258 // points to be removed should also be eliminated from the 168 259 // triangulation and the supervertex structure should be updated … … 192 283 // of the neighbour union happens to be on the wrong side. 193 284 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) { 195 288 // face can only be found if there were points to remove in first place 196 289 face = _TR.incident_faces( … … 204 297 int index = _supervertex.size()-1; 205 298 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) { 208 303 // be careful of using face (for location hinting) only when it exists 209 304 _supervertex[index].vertex = _TR.insert(Point(points_to_add[ia].first, … … 213 308 points_to_add[ia].second)); 214 309 } 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 } 219 340 220 341 // first find nearest neighbour of "newpoint" (shorthand for … … 227 348 indices_of_updated_neighbours.push_back(index); 228 349 _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; 229 354 } 230 355 … … 251 376 } 252 377 378 if (_verbose) cout << "Leaving DnnPlane::RemoveAndAddPoints" << endl; 253 379 } 254 255 380 256 381 //---------------------------------------------------------------------- 257 382 /// Determines the index and distance of the nearest neighbour to 258 383 /// point j and puts the information into the _supervertex entry for j. 259 void DnnPlane::_SetNearest (const int & j) { 384 void 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 260 451 Vertex_handle current = _supervertex[j].vertex; 261 452 Vertex_circulator vc = _TR.incident_vertices(current); … … 264 455 double mindist = HUGE_DOUBLE; // change this to "HUGE" or max_double? 265 456 Vertex_handle nearest = _TR.infinite_vertex(); 266 457 267 458 // when there is only one finite point left in the triangulation, 268 459 // there are no triangles. Presumably this is why voronoi returns … … 274 465 // find distance between j and its Voronoi neighbour (vc) 275 466 if (_verbose) cout << current->info().val() << " " << vc->info().val() << endl; 276 dist = _euclid_distance(current->point(), vc->point()); 467 277 468 // check if j is closer to vc than vc's currently registered 278 469 // 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 "; 282 473 } 283 474 if (_verbose) cout << vc->point() << "; "<< dist << endl; 284 475 } 285 476 } while (++vc != done); // move on to next Voronoi neighbour 477 286 478 // set j's supervertex info about nearest neighbour 287 479 _supervertex[j].NNindex = nearest->info().val(); … … 291 483 //---------------------------------------------------------------------- 292 484 /// Determines and stores the nearest neighbour of j, and where 293 /// necessary update the nearest-neighbour info of Voronoi neighbours485 /// necessary updates the nearest-neighbour info of Voronoi neighbours 294 486 /// of j; 295 487 /// … … 304 496 /// NB: note that we have _SetAndUpdateNearest as a completely 305 497 /// separate routine from _SetNearest because we want to 306 /// use one single cir uclation over voronoi neighbours to find the498 /// use one single circulation over voronoi neighbours to find the 307 499 /// nearest neighbour and to update the voronoi neighbours if need 308 500 /// be. 309 501 void DnnPlane::_SetAndUpdateNearest( 310 const int &j,502 const int j, 311 503 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 } 312 512 313 513 Vertex_handle current = _supervertex[j].vertex; … … 326 526 if (vc->info().val() != INFINITE_VERTEX) { 327 527 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 330 529 // 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 "; 334 533 } 534 335 535 // find index corresponding to vc for easy manipulation 336 536 int vcindx = vc->info().val(); 337 537 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)){ 341 542 if (_verbose) cout << vcindx << "'s NN becomes " << current->info().val() << endl; 342 _supervertex[vcindx].NNdistance = dist;343 543 _supervertex[vcindx].NNindex = j; 344 544 indices_of_updated_neighbours.push_back(vcindx); 345 545 } 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 // } 346 565 } 347 566 } while (++vc != done); // move on to next Voronoi neighbour 348 567 // set j's supervertex info about nearest neighbour 568 //cout << " set to point " << nearest->info().val() << endl; 349 569 _supervertex[j].NNindex = nearest->info().val(); 350 570 _supervertex[j].NNdistance = mindist; -
external/fastjet/Error.cc
rf6b6ee7 r49234af 1 // STARTHEADER2 // $Id $1 //FJSTARTHEADER 2 // $Id: Error.cc 3695 2014-09-18 13:57:56Z cacciari $ 3 3 // 4 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez4 // Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 #include "fastjet/Error.hh" … … 31 33 #include <sstream> 32 34 35 #ifndef __FJCORE__ 33 36 // printing the stack would need execinfo 34 37 #ifdef FASTJET_HAVE_EXECINFO_H 35 38 #include <execinfo.h> 36 39 #include <cstdlib> 37 #endif 40 #ifdef FASTJET_HAVE_DEMANGLING_SUPPORT 41 #include <cstdio> 42 #include <cxxabi.h> 43 #endif // FASTJET_HAVE_DEMANGLING_SUPPORT 44 #endif // FASTJET_HAVE_EXECINFO_H 45 #endif // __FJCORE__ 38 46 39 47 FASTJET_BEGIN_NAMESPACE // defined in fastjet/internal/base.hh … … 44 52 bool Error::_print_backtrace = false; 45 53 ostream * Error::_default_ostr = & cerr; 54 #if (!defined(FASTJET_HAVE_EXECINFO_H)) || defined(__FJCORE__) 55 LimitedWarning Error::_execinfo_undefined; 56 #endif 46 57 58 //---------------------------------------------------------------------- 59 #ifndef __FJCORE__ 60 61 // demangling only is included, i.e. --enable-demangling is specified 62 // at configure time, execinfo.h is present and the GNU C++ ABI is 63 // supported 64 #if defined(FASTJET_HAVE_EXECINFO_H) && defined(FASTJET_HAVE_DEMANGLING_SUPPORT) 65 // demangle a given backtrace symbol 66 // 67 // Notes: 68 // - at the moment, only the symbol is parsed. 69 // - one can get the offset by using 70 // "%*[^(]%*[^_]%127[^+)]%64[+x0123456789abcdef]", symbol, offset 71 // and checking if sscanf returns 0, 1 or 2 72 // (offset includes the leading +) 73 // - Similarly one could exctract the address and try to convert it 74 // into a filename+line number like addr2line does but this seems 75 // to require exteral dependencies. If we want to go down that 76 // route, one could look into the inplementation o faddr2line(.c) 77 // and/or dladdr. 78 string Error::_demangle(const char* symbol) { 79 size_t size; 80 int status; 81 char temp[128]; 82 char* demangled; 83 // first, try to demangle a c++ name 84 // decryption: 85 // %*[^(] matches any number of characters different from "(" 86 // the * tells not to store in input var 87 // %*[^_] matches any number of characters different from "_" 88 // the * tells not to store in input var 89 // %127[^)+] matches at most 127 characters different from "+" 90 // match is stored 91 if (1 == sscanf(symbol, "%*[^(]%*[^_]%127[^)+]", temp)) { 92 //cout << symbol << " -> " << temp << endl; 93 if (NULL != (demangled = abi::__cxa_demangle(temp, NULL, &size, &status))) { 94 string result(demangled); 95 free(demangled); 96 return result; 97 } 98 } 99 //if that didn't work, try to get a regular c symbol 100 if (1 == sscanf(symbol, "%127s", temp)) { 101 return temp; 102 } 103 104 //if all else fails, just return the symbol 105 return symbol; 106 } 107 #endif // FASTJET_HAVE_DEMANGLING_SUPPORT && FASTJET_HAVE_EXECINFO_H 108 #endif // __FJCORE__ 109 110 111 //---------------------------------------------------------------------- 47 112 Error::Error(const std::string & message_in) { 48 113 _message = message_in; 114 49 115 if (_print_errors && _default_ostr){ 50 116 ostringstream oss; 51 117 oss << "fastjet::Error: "<< message_in << endl; 52 118 119 #ifndef __FJCORE__ 53 120 // only print the stack if execinfo is available and stack enabled 54 121 #ifdef FASTJET_HAVE_EXECINFO_H … … 62 129 oss << "stack:" << endl; 63 130 for (int i = 1; i < size && messages != NULL; ++i){ 131 #ifdef FASTJET_HAVE_DEMANGLING_SUPPORT 132 oss << " #" << i << ": " << _demangle(messages[i]) 133 << " [" << messages[i] << "]" << endl; 134 #else 64 135 oss << " #" << i << ": " << messages[i] << endl; 136 #endif 65 137 } 66 138 free(messages); 67 139 } 68 #endif 140 #endif // FASTJET_HAVE_EXECINFO_H 141 #endif // __FJCORE__ 69 142 70 143 *_default_ostr << oss.str(); … … 83 156 } 84 157 158 //---------------------------------------------------------------------- 159 void Error::set_print_backtrace(bool enabled) { 160 #if (!defined(FASTJET_HAVE_EXECINFO_H)) || defined(__FJCORE__) 161 if (enabled) { 162 _execinfo_undefined.warn("Error::set_print_backtrace(true) will not work with this build of FastJet"); 163 } 164 #endif 165 _print_backtrace = enabled; 166 } 167 85 168 FASTJET_END_NAMESPACE 86 169 -
external/fastjet/Error.hh
rf6b6ee7 r49234af 2 2 #define __FASTJET_ERROR_HH__ 3 3 4 // STARTHEADER5 // $Id: Error.hh 2577 2011-09-13 15:11:38Z salam$4 //FJSTARTHEADER 5 // $Id: Error.hh 3694 2014-09-18 13:21:54Z soyez $ 6 6 // 7 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez7 // Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 8 8 // 9 9 //---------------------------------------------------------------------- … … 16 16 // 17 17 // 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 19 20 // 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. 21 23 // 22 24 // FastJet is distributed in the hope that it will be useful, … … 28 30 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 29 31 //---------------------------------------------------------------------- 30 // ENDHEADER32 //FJENDHEADER 31 33 32 34 #include<iostream> 33 35 #include<string> 34 36 #include "fastjet/internal/base.hh" 37 #include "fastjet/config.h" 38 #if (!defined(FASTJET_HAVE_EXECINFO_H)) || defined(__FJCORE__) 39 #include "fastjet/LimitedWarning.hh" 40 #endif 35 41 36 42 FASTJET_BEGIN_NAMESPACE // defined in fastjet/internal/base.hh … … 63 69 /// controls whether the backtrace is printed out with the error message or not. 64 70 /// The default is "false". 65 static void set_print_backtrace(bool enabled) {_print_backtrace = enabled;}71 static void set_print_backtrace(bool enabled); 66 72 67 73 /// sets the default output stream for all errors; by default … … 72 78 73 79 private: 80 81 #ifndef __FJCORE__ 82 #if defined(FASTJET_HAVE_EXECINFO_H) && defined(FASTJET_HAVE_DEMANGLING_SUPPORT) 83 /// demangle a given backtrace symbol 84 std::string _demangle(const char* symbol); 85 #endif 86 #endif 87 74 88 std::string _message; ///< error message 75 89 static bool _print_errors; ///< do we print anything? 76 90 static bool _print_backtrace; ///< do we print the backtrace? 77 91 static std::ostream * _default_ostr; ///< the output stream (cerr if not set) 92 #if (!defined(FASTJET_HAVE_EXECINFO_H)) || defined(__FJCORE__) 93 static LimitedWarning _execinfo_undefined; 94 #endif 78 95 }; 79 96 -
external/fastjet/FunctionOfPseudoJet.cc
rf6b6ee7 r49234af 1 // STARTHEADER2 // $Id $1 //FJSTARTHEADER 2 // $Id: FunctionOfPseudoJet.cc 3433 2014-07-23 08:17:03Z salam $ 3 3 // 4 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez4 // Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 #include <fastjet/FunctionOfPseudoJet.hh> -
external/fastjet/FunctionOfPseudoJet.hh
rf6b6ee7 r49234af 2 2 #define __FASTJET_FUNCTION_OF_PSEUDOJET_HH__ 3 3 4 // STARTHEADER5 // $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 $ 6 6 // 7 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez7 // Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 8 8 // 9 9 //---------------------------------------------------------------------- … … 16 16 // 17 17 // 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 19 20 // 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. 21 23 // 22 24 // FastJet is distributed in the hope that it will be useful, … … 28 30 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 29 31 //---------------------------------------------------------------------- 30 // ENDHEADER32 //FJENDHEADER 31 33 32 34 #include <fastjet/PseudoJet.hh> … … 49 51 FunctionOfPseudoJet(){} 50 52 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); 53 59 54 60 /// default dtor (virtual to allow safe polymorphism) -
external/fastjet/GhostedAreaSpec.cc
rf6b6ee7 r49234af 1 // STARTHEADER2 // $Id $1 //FJSTARTHEADER 2 // $Id: GhostedAreaSpec.cc 3433 2014-07-23 08:17:03Z salam $ 3 3 // 4 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez4 // Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 #include "fastjet/GhostedAreaSpec.hh" -
external/fastjet/GhostedAreaSpec.hh
rf6b6ee7 r49234af 1 // STARTHEADER2 // $Id: GhostedAreaSpec.hh 2728 2011-11-20 14:18:59Z salam $3 // 4 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez1 //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 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 … … 122 124 123 125 // 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;} 124 128 inline double ghost_etamax () const {return _ghost_maxrap;} 125 inline double ghost_max rap() const {return _ghost_maxrap;}129 inline double ghost_maxeta () const {return _ghost_maxrap;} 126 130 inline double ghost_area () const {return _ghost_area ;} 127 131 inline double grid_scatter () const {return _grid_scatter;} … … 140 144 // when explicitly modifying values, sometimes call the initializer 141 145 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();} 142 148 inline void set_ghost_etamax (double val) {_ghost_maxrap = val; _initialize();} 143 inline void set_ghost_max rap(double val) {_ghost_maxrap = val; _initialize();}149 inline void set_ghost_maxeta (double val) {_ghost_maxrap = val; _initialize();} 144 150 inline void set_grid_scatter (double val) {_grid_scatter = val; } 145 151 inline void set_pt_scatter (double val) {_pt_scatter = val; } -
external/fastjet/JetDefinition.cc
rf6b6ee7 r49234af 1 // STARTHEADER2 // $Id $3 // 4 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez1 //FJSTARTHEADER 2 // $Id: JetDefinition.cc 3677 2014-09-09 22:45:25Z soyez $ 3 // 4 // Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 #include "fastjet/JetDefinition.hh" … … 68 70 // cross-check the number of parameters that were declared in setting up the 69 71 // 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()); 96 79 } 97 80 … … 106 89 107 90 //---------------------------------------------------------------------- 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). 95 bool 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 //---------------------------------------------------------------------- 108 106 string 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 //---------------------------------------------------------------------- 125 string JetDefinition::description_no_recombiner() const { 126 109 127 ostringstream name; 110 128 if (jet_algorithm() == plugin_algorithm) { 111 129 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();138 130 } 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 143 150 return name.str(); 144 151 } 145 152 146 153 //---------------------------------------------------------------------- 154 string 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 //---------------------------------------------------------------------- 172 unsigned 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 //---------------------------------------------------------------------- 147 182 void JetDefinition::set_recombination_scheme( 148 183 RecombinationScheme recomb_scheme) { … … 150 185 151 186 // do not forget to delete the existing recombiner if needed 152 if (_ recombiner_shared()) _recombiner_shared.reset();187 if (_shared_recombiner()) _shared_recombiner.reset(); 153 188 154 189 _recombiner = 0; 190 } 191 192 void 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. 155 216 } 156 217 … … 163 224 if (other_jd.recombination_scheme() != scheme) return false; 164 225 165 // if the scheme is "external", also check that they ahve the same226 // if the scheme is "external", also check that they have the same 166 227 // recombiner 167 228 return (scheme != external_scheme) … … 169 230 } 170 231 171 /// allows to let the JetDefinitionhandle the deletion of the232 /// causes the JetDefinition to handle the deletion of the 172 233 /// recombiner when it is no longer used 173 234 void JetDefinition::delete_recombiner_when_unused(){ 174 235 if (_recombiner == 0){ 175 236 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); 179 242 } 180 243 … … 207 270 case BIpt2_scheme: 208 271 return "boost-invariant pt2 scheme recombination"; 272 case WTA_pt_scheme: 273 return "pt-ordered Winner-Takes-All recombination"; 274 // Energy-ordering can lead to dangerous situations with particles at 275 // rest. We instead implement the WTA_modp_scheme 276 // 277 // case WTA_E_scheme: 278 // return "energy-ordered Winner-Takes-All recombination"; 279 case WTA_modp_scheme: 280 return "|3-momentum|-ordered Winner-Takes-All recombination"; 209 281 default: 210 282 ostringstream err; … … 246 318 weightb = pb.perp2(); 247 319 break; 320 case WTA_pt_scheme:{ 321 const PseudoJet & phard = (pa.pt2() >= pb.pt2()) ? pa : pb; 322 /// keep y,phi and m from the hardest, sum pt 323 pab.reset_PtYPhiM(pa.pt()+pb.pt(), 324 phard.rap(), phard.phi(), phard.m()); 325 return;} 326 // Energy-ordering can lead to dangerous situations with particles at 327 // rest. We instead implement the WTA_modp_scheme 328 // 329 // case WTA_E_scheme:{ 330 // const PseudoJet & phard = (pa.E() >= pb.E()) ? pa : pb; 331 // /// keep 3-momentum direction and mass from the hardest, sum energies 332 // /// 333 // /// If the particle with the largest energy is at rest, the sum 334 // /// remains at rest, implying that the mass of the sum is larger 335 // /// than the mass of pa. 336 // double Eab = pa.E() + pb.E(); 337 // double scale = (phard.modp2()==0.0) 338 // ? 0.0 339 // : sqrt((Eab*Eab - phard.m2())/phard.modp2()); 340 // pab.reset(phard.px()*scale, phard.py()*scale, phard.pz()*scale, Eab); 341 // return;} 342 case WTA_modp_scheme:{ 343 // Note: we need to compute both a and b modp. And we need pthard 344 // and its modp. If we want to avoid repeating the test and do 345 // only 2 modp calculations, we'd have to duplicate the code (or 346 // use a pair<const PJ&>). An alternative is to write modp_soft as 347 // modp_ab-modp_hard but this could suffer from larger rounding 348 // errors 349 bool a_hardest = (pa.modp2() >= pb.modp2()); 350 const PseudoJet & phard = a_hardest ? pa : pb; 351 const PseudoJet & psoft = a_hardest ? pb : pa; 352 /// keep 3-momentum direction and mass from the hardest, sum modp 353 /// 354 /// If the hardest particle is at rest, the sum remains at rest 355 /// (the energy of the sum is therefore the mass of pa) 356 double modp_hard = phard.modp(); 357 double modp_ab = modp_hard + psoft.modp(); 358 if (phard.modp2()==0.0){ 359 pab.reset(0.0, 0.0, 0.0, phard.m()); 360 } else { 361 double scale = modp_ab/modp_hard; 362 pab.reset(phard.px()*scale, phard.py()*scale, phard.pz()*scale, 363 sqrt(modp_ab*modp_ab + phard.m2())); 364 } 365 return;} 248 366 default: 249 367 ostringstream err; … … 281 399 case BIpt_scheme: 282 400 case BIpt2_scheme: 401 case WTA_pt_scheme: 402 //case WTA_E_scheme: 403 case WTA_modp_scheme: 283 404 break; 284 405 case pt_scheme: -
external/fastjet/JetDefinition.hh
rf6b6ee7 r49234af 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 3677 2014-09-09 22:45:25Z soyez $ 6 // 7 // Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 5 8 // 6 9 //---------------------------------------------------------------------- … … 13 16 // 14 17 // 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 16 20 // 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. 18 23 // 19 24 // FastJet is distributed in the hope that it will be useful, … … 25 30 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 31 //---------------------------------------------------------------------- 27 //ENDHEADER 28 29 #ifndef __FASTJET_JETDEFINITION_HH__ 30 #define __FASTJET_JETDEFINITION_HH__ 32 //FJENDHEADER 31 33 32 34 #include<cassert> … … 47 49 /// clustering events with kt and cambridge style algorithms. 48 50 enum 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. 50 90 N2MinHeapTiled = -4, 51 91 /// fastest from about 50..500 … … 57 97 /// worse even than the usual N^3 algorithms 58 98 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 60 101 Best = 1, 61 102 /// best of the NlnN variants -- best overall for N>10^4. … … 79 120 /// (Does not work for R>=2pi) 80 121 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, 81 125 /// the plugin has been used... 82 126 plugin_strategy = 999 … … 87 131 /// \enum JetAlgorithm 88 132 /// 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] 89 136 enum JetAlgorithm { 90 137 /// the longitudinally invariant kt algorithm … … 102 149 /// where p = extra_param() 103 150 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. 106 155 cambridge_for_passive_algorithm=11, 107 156 /// a version of genkt with a special distance measure for particles 108 157 /// whose pt is < extra_param() [relevant for passive areas when p<=0] 158 /// ***** NB: THERE IS CURRENTLY NO IMPLEMENTATION FOR THIS ALG ******* 109 159 genkt_for_passive_algorithm=13, 110 160 //................................................................. … … 131 181 132 182 //====================================================================== 133 /// the various recombination schemes 183 /// The various recombination schemes 184 /// 185 /// Note that the schemes that recombine with non-linear weighting of 186 /// the directions (e.g. pt2, winner-takes-all) are collinear safe 187 /// only for algorithms with a suitable ordering of the 188 /// recombinations: orderings in which, for particles of comparable 189 /// energies, small-angle clusterings take place before large-angle 190 /// clusterings. This property is satisfied by all gen-kt algorithms. 191 /// 134 192 enum RecombinationScheme { 135 193 /// summing the 4-momenta … … 153 211 /// no preprocessing 154 212 BIpt2_scheme=6, 213 /// pt-based Winner-Takes-All (WTA) recombination: the 214 /// result of the recombination has the rapidity, azimuth and mass 215 /// of the the PseudoJet with the larger pt, and a pt equal to the 216 /// sum of the two pt's 217 WTA_pt_scheme=7, 218 /// mod-p-based Winner-Takes-All (WTA) recombination: the result of 219 /// the recombination gets the 3-vector direction and mass of the 220 /// PseudoJet with the larger |3-momentum| (modp), and a 221 /// |3-momentum| equal to the scalar sum of the two |3-momenta|. 222 WTA_modp_scheme=8, 223 // Energy-ordering can lead to dangerous situations with particles at 224 // rest. We instead implement the WTA_modp_scheme 225 // 226 // // energy-based Winner-Takes-All (WTA) recombination: the result of 227 // // the recombination gets the 3-vector direction and mass of the 228 // // PseudoJet with the larger energy, and an energy equal to the 229 // // to the sum of the two energies 230 // WTA_E_scheme=8, 155 231 /// for the user's external scheme 156 232 external_scheme = 99 … … 244 320 const Recombiner * recombiner_in, 245 321 Strategy strategy_in = Best) { 246 *this = JetDefinition(jet_algorithm_in, R_in, external_scheme, strategy_in);322 *this = JetDefinition(jet_algorithm_in, R_in, xtra_param_in, external_scheme, strategy_in); 247 323 _recombiner = recombiner_in; 248 set_extra_param(xtra_param_in);249 324 } 250 325 … … 284 359 RecombinationScheme recomb_scheme_in = E_scheme, 285 360 int nparameters_in = 1); 361 362 /// cluster the supplied particles and returns a vector of resulting 363 /// jets, sorted by pt (or energy in the case of spherical, 364 /// i.e. e+e-, algorithms). This routine currently only makes 365 /// sense for "inclusive" type algorithms. 366 template <class L> 367 std::vector<PseudoJet> operator()(const std::vector<L> & particles) const; 286 368 287 369 /// R values larger than max_allowable_R are not allowed. … … 297 379 298 380 /// set the recombiner class to the one provided 381 /// 382 /// Note that in order to associate to a jet definition a recombiner 383 /// from another jet definition, it is strongly recommended to use 384 /// the set_recombiner(const JetDefinition &) method below. The 385 /// latter correctly handles the situations where the jet definition 386 /// owns the recombiner (i.e. where delete_recombiner_when_unused 387 /// has been called). In such cases, using set_recombiner(const 388 /// Recombiner *) may lead to memory corruption. 299 389 void set_recombiner(const Recombiner * recomb) { 300 if (_ recombiner_shared()) _recombiner_shared.reset(recomb);390 if (_shared_recombiner()) _shared_recombiner.reset(recomb); 301 391 _recombiner = recomb; 302 392 _default_recombiner = DefaultRecombiner(external_scheme); 303 393 } 304 394 395 /// set the recombiner to be the same as the one of 'other_jet_def' 396 /// 397 /// Note that this is the recommended method to associate to a jet 398 /// definition the recombiner from another jet definition. Compared 399 /// to the set_recombiner(const Recombiner *) above, it correctly 400 /// handles the case where the jet definition owns the recombiner 401 /// (i.e. where delete_recombiner_when_unused has been called) 402 void set_recombiner(const JetDefinition &other_jet_def); 403 305 404 /// calling this tells the JetDefinition to handle the deletion of 306 /// the recombiner when it is no longer used 405 /// the recombiner when it is no longer used. (Should not be called 406 /// if the recombiner was initialised from a JetDef whose recombiner 407 /// was already scheduled to delete itself - memory handling will 408 /// already be automatic across both JetDef's in that case). 307 409 void delete_recombiner_when_unused(); 308 410 … … 310 412 const Plugin * plugin() const {return _plugin;}; 311 413 312 /// allows to let the JetDefinitionhandle the deletion of the414 /// calling this causes the JetDefinition to handle the deletion of the 313 415 /// plugin when it is no longer used 314 416 void delete_plugin_when_unused(); … … 333 435 void set_extra_param(double xtra_param) {_extra_param = xtra_param;} 334 436 335 /// return a pointer to the currently defined recombiner.437 /// returns a pointer to the currently defined recombiner. 336 438 /// 337 439 /// Warning: the pointer may be to an internal recombiner (for … … 347 449 348 450 /// returns true if the current jet definitions shares the same 349 /// recombiner as t ehone passed as an argument451 /// recombiner as the one passed as an argument 350 452 bool has_same_recombiner(const JetDefinition &other_jd) const; 453 454 /// returns true if the jet definition involves an algorithm 455 /// intended for use on a spherical geometry (e.g. e+e- algorithms, 456 /// as opposed to most pp algorithms, which use a cylindrical, 457 /// rapidity-phi geometry). 458 bool is_spherical() const; 351 459 352 460 /// return a textual description of the current jet definition 353 461 std::string description() const; 354 462 463 /// returns a description not including the recombiner information 464 std::string description_no_recombiner() const; 465 466 /// a short textual description of the algorithm jet_alg 467 static std::string algorithm_description(const JetAlgorithm jet_alg); 468 469 /// the number of parameters associated to a given jet algorithm 470 static unsigned int n_parameters_for_algorithm(const JetAlgorithm jet_alg); 355 471 356 472 public: … … 462 578 virtual bool exclusive_sequence_meaningful() const {return false;} 463 579 580 /// returns true if the plugin implements an algorithm intended 581 /// for use on a spherical geometry (e.g. e+e- algorithms, as 582 /// opposed to most pp algorithms, which use a cylindrical, 583 /// rapidity-phi geometry). 584 virtual bool is_spherical() const {return false;} 585 464 586 /// a destructor to be replaced if necessary in derived classes... 465 587 virtual ~Plugin() {}; … … 481 603 DefaultRecombiner _default_recombiner; 482 604 const Recombiner * _recombiner; 483 SharedPtr<const Recombiner> _ recombiner_shared;605 SharedPtr<const Recombiner> _shared_recombiner; 484 606 485 607 }; … … 516 638 517 639 518 519 520 521 640 FASTJET_END_NAMESPACE 522 641 642 // include ClusterSequence which includes the implementation of the 643 // templated JetDefinition::operator()(...) member 644 #include "fastjet/ClusterSequence.hh" 645 646 523 647 #endif // __FASTJET_JETDEFINITION_HH__ -
external/fastjet/LimitedWarning.cc
rf6b6ee7 r49234af 1 // STARTHEADER2 // $Id $1 //FJSTARTHEADER 2 // $Id: LimitedWarning.cc 3619 2014-08-13 14:17:19Z salam $ 3 3 // 4 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez4 // Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 #include "fastjet/LimitedWarning.hh" … … 40 42 41 43 42 // / output a warning to ostr43 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 // } 46 48 47 void LimitedWarning::warn(const std::string &warning, std::ostream * ostr) {49 void LimitedWarning::warn(const char * warning, std::ostream * ostr) { 48 50 if (_this_warning_summary == 0) { 49 51 // prepare the information for the summary … … 54 56 // prepare the warning within a string stream 55 57 ostringstream warnstr; 56 warnstr << "WARNING : ";58 warnstr << "WARNING from FastJet: "; 57 59 warnstr << warning; 58 60 _n_warn_so_far++; -
external/fastjet/LimitedWarning.hh
rf6b6ee7 r49234af 2 2 #define __FASTJET_LIMITEDWARNING_HH__ 3 3 4 // STARTHEADER5 // $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 $ 6 6 // 7 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez7 // Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 8 8 // 9 9 //---------------------------------------------------------------------- … … 16 16 // 17 17 // 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 19 20 // 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. 21 23 // 22 24 // FastJet is distributed in the hope that it will be useful, … … 28 30 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 29 31 //---------------------------------------------------------------------- 30 // ENDHEADER32 //FJENDHEADER 31 33 32 34 … … 50 52 51 53 /// 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) {} 53 55 54 56 /// outputs a warning to standard error (or the user's default 55 57 /// 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);} 57 63 58 64 /// 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);} 60 69 61 70 /// sets the default output stream for all warnings (by default … … 70 79 _max_warn_default = max_warn; 71 80 } 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;} 72 89 73 90 /// returns a summary of all the warnings that came through the -
external/fastjet/MinHeap.cc
rf6b6ee7 r49234af 1 // STARTHEADER2 // $Id $1 //FJSTARTHEADER 2 // $Id: MinHeap.cc 3433 2014-07-23 08:17:03Z salam $ 3 3 // 4 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez4 // Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 #include "fastjet/internal/MinHeap.hh" … … 43 45 /// 44 46 /// . for _heap[i], the "parent" is to be found at (i-1)/2 45 void MinHeap:: _initialise(const std::vector<double> & values){47 void MinHeap::initialise(const std::vector<double> & values){ 46 48 47 49 // fill the high-range of the heap with the largest possible value -
external/fastjet/NNH.hh
rf6b6ee7 r49234af 2 2 #define __FASTJET_NNH_HH__ 3 3 4 // STARTHEADER5 // $Id: NNH.hh 3 203 2013-09-15 07:49:50Z salam $6 // 7 // Copyright (c) 200 9, Matteo Cacciari, GavinSalam and Gregory Soyez4 //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 8 8 // 9 9 //---------------------------------------------------------------------- … … 16 16 // 17 17 // 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 19 20 // 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. 21 23 // 22 24 // FastJet is distributed in the hope that it will be useful, … … 28 30 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 29 31 //---------------------------------------------------------------------- 30 // ENDHEADER32 //FJENDHEADER 31 33 32 34 #include<fastjet/ClusterSequence.hh> … … 138 140 class NNBJ; // forward declaration 139 141 140 /// establish the nearest neighbour for jet, and cross check cons tistency142 /// establish the nearest neighbour for jet, and cross check consistency 141 143 /// of distances for the other jets that are encountered. Assumes 142 144 /// jet not contained within begin...end -
external/fastjet/PseudoJet.cc
rf6b6ee7 r49234af 1 // STARTHEADER2 // $Id $3 // 4 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez1 //FJSTARTHEADER 2 // $Id: PseudoJet.cc 3652 2014-09-03 13:31:13Z salam $ 3 // 4 // Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 … … 176 178 // return the product, coeff * jet 177 179 PseudoJet 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(); 178 184 //return PseudoJet(coeff*jet.four_mom()); 179 185 // the following code is hopefully more efficient … … 198 204 /// multiply the jet's momentum by the coefficient 199 205 void 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(); 200 214 _px *= coeff; 201 215 _py *= coeff; … … 261 275 262 276 //---------------------------------------------------------------------- 263 /// transform this jet (given in lab) into a jet in the rest264 /// frame of prest277 /// transform this jet (given in the rest frame of prest) into a jet 278 /// in the lab frame 265 279 // 266 280 // NB: code adapted from that in herwig f77 (checked how it worked … … 288 302 289 303 //---------------------------------------------------------------------- 290 /// transform this jet (given in the rest frame of prest) into a jet291 /// in the lab frame;304 /// transform this jet (given in lab) into a jet in the rest 305 /// frame of prest 292 306 // 293 307 // NB: code adapted from that in herwig f77 (checked how it worked … … 587 601 // an Error is thrown if this PseudoJet has no currently valid 588 602 // associated ClusterSequence 589 std::vector<PseudoJet> PseudoJet::exclusive_subjets (const double &dcut) const {603 std::vector<PseudoJet> PseudoJet::exclusive_subjets (const double dcut) const { 590 604 return validated_structure_ptr()->exclusive_subjets(*this, dcut); 591 605 } … … 598 612 // an Error is thrown if this PseudoJet has no currently valid 599 613 // associated ClusterSequence 600 int PseudoJet::n_exclusive_subjets(const double &dcut) const {614 int PseudoJet::n_exclusive_subjets(const double dcut) const { 601 615 return validated_structure_ptr()->n_exclusive_subjets(*this, dcut); 602 616 } … … 847 861 PseudoJet join(const PseudoJet & j1, const PseudoJet & j2){ 848 862 vector<PseudoJet> pieces; 863 pieces.reserve(2); 849 864 pieces.push_back(j1); 850 865 pieces.push_back(j2); … … 855 870 PseudoJet join(const PseudoJet & j1, const PseudoJet & j2, const PseudoJet & j3){ 856 871 vector<PseudoJet> pieces; 872 pieces.reserve(3); 857 873 pieces.push_back(j1); 858 874 pieces.push_back(j2); … … 864 880 PseudoJet join(const PseudoJet & j1, const PseudoJet & j2, const PseudoJet & j3, const PseudoJet & j4){ 865 881 vector<PseudoJet> pieces; 882 pieces.reserve(4); 866 883 pieces.push_back(j1); 867 884 pieces.push_back(j2); -
external/fastjet/PseudoJet.hh
rf6b6ee7 r49234af 1 // STARTHEADER2 // $Id: PseudoJet.hh 3 111 2013-05-04 08:17:27Z salam $1 //FJSTARTHEADER 2 // $Id: PseudoJet.hh 3566 2014-08-11 15:36:34Z salam $ 3 3 // 4 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez4 // Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 … … 571 573 /// structure type 572 574 /// 573 /// If there is no s ructure associated, an Error is thrown.575 /// If there is no structure associated, an Error is thrown. 574 576 /// If the type is not met, a std::bad_cast error is thrown. 575 577 template<typename StructureType> … … 664 666 /// an Error is thrown if this PseudoJet has no currently valid 665 667 /// associated ClusterSequence 666 std::vector<PseudoJet> exclusive_subjets (const double &dcut) const;668 std::vector<PseudoJet> exclusive_subjets (const double dcut) const; 667 669 668 670 /// return the size of exclusive_subjets(...); still n ln n with same … … 672 674 /// an Error is thrown if this PseudoJet has no currently valid 673 675 /// associated ClusterSequence 674 int n_exclusive_subjets(const double &dcut) const;676 int n_exclusive_subjets(const double dcut) const; 675 677 676 678 /// return the list of subjets obtained by unclustering the supplied … … 694 696 std::vector<PseudoJet> exclusive_subjets_up_to (int nsub) const; 695 697 696 /// returnthe dij that was present in the merging nsub+1 -> nsub698 /// Returns the dij that was present in the merging nsub+1 -> nsub 697 699 /// subjets inside this jet. 700 /// 701 /// Returns 0 if there were nsub or fewer constituents in the jet. 698 702 /// 699 703 /// an Error is thrown if this PseudoJet has no currently valid … … 701 705 double exclusive_subdmerge(int nsub) const; 702 706 703 /// returnthe maximum dij that occurred in the whole event at the707 /// Returns the maximum dij that occurred in the whole event at the 704 708 /// stage that the nsub+1 -> nsub merge of subjets occurred inside 705 709 /// this jet. 710 /// 711 /// Returns 0 if there were nsub or fewer constituents in the jet. 706 712 /// 707 713 /// an Error is thrown if this PseudoJet has no currently valid … … 802 808 /// set cached rapidity and phi values 803 809 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 &); 804 813 }; 805 814 … … 825 834 /// momentum components are equal to val (=0.0) 826 835 bool operator==(const PseudoJet & jet, const double val); 836 inline bool operator==(const double val, const PseudoJet & jet) {return jet == val;} 827 837 828 838 /// Can only be used with val=0 and tests whether at least one of the 829 839 /// four momentum components is different from val (=0.0) 830 inline bool operator!=(const PseudoJet & a, const double & val) {return !(a==val);} 840 inline bool operator!=(const PseudoJet & a, const double val) {return !(a==val);} 841 inline bool operator!=( const double val, const PseudoJet & a) {return !(a==val);} 831 842 832 843 inline double dot_product(const PseudoJet & a, const PseudoJet & b) { … … 881 892 _ref_values = reference_values; 882 893 }; 883 inline int operator() (const int & i1, const int &i2) const {894 inline int operator() (const int i1, const int i2) const { 884 895 return (*_ref_values)[i1] < (*_ref_values)[i2]; 885 896 }; -
external/fastjet/PseudoJetStructureBase.cc
rf6b6ee7 r49234af 1 // STARTHEADER2 // $Id $3 // 4 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez1 //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 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 -
external/fastjet/PseudoJetStructureBase.hh
rf6b6ee7 r49234af 2 2 #define __FASTJET_PSEUDOJET_STRUCTURE_BASE_HH__ 3 3 4 // STARTHEADER5 // $Id: PseudoJetStructureBase.hh 3 071 2013-04-01 12:52:46Z cacciari$6 // 7 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez4 //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 8 8 // 9 9 //---------------------------------------------------------------------- … … 16 16 // 17 17 // 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 19 20 // 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. 21 23 // 22 24 // FastJet is distributed in the hope that it will be useful, … … 28 30 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 29 31 //---------------------------------------------------------------------- 30 // ENDHEADER32 //FJENDHEADER 31 33 32 34 … … 156 158 /// 157 159 /// 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. 158 165 virtual std::vector<PseudoJet> exclusive_subjets(const PseudoJet &reference, const double & dcut) const; 159 166 … … 163 170 /// 164 171 /// 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. 165 177 virtual int n_exclusive_subjets(const PseudoJet &reference, const double & dcut) const; 166 178 -
external/fastjet/RangeDefinition.cc
rf6b6ee7 r49234af 1 // STARTHEADER2 // $Id $1 //FJSTARTHEADER 2 // $Id: RangeDefinition.cc 3433 2014-07-23 08:17:03Z salam $ 3 3 // 4 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez4 // Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 #include "fastjet/RangeDefinition.hh" -
external/fastjet/RangeDefinition.hh
rf6b6ee7 r49234af 1 // STARTHEADER2 // $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 $ 3 3 // 4 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez4 // Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 #ifndef __FASTJET_RANGEDEFINITION_HH__ -
external/fastjet/Selector.cc
rf6b6ee7 r49234af 1 // STARTHEADER2 // $Id $1 //FJSTARTHEADER 2 // $Id: Selector.cc 3504 2014-08-01 06:07:54Z soyez $ 3 3 // 4 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez4 // Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 … … 95 97 } 96 98 99 //---------------------------------------------------------------------- 100 // sum the momenta of the jets that pass the cuts 101 PseudoJet 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 126 double 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 97 149 98 150 //---------------------------------------------------------------------- … … 1055 1107 class SW_Circle : public SW_WithReference { 1056 1108 public: 1057 SW_Circle(const double &radius) : _radius2(radius*radius) {}1109 SW_Circle(const double radius) : _radius2(radius*radius) {} 1058 1110 1059 1111 /// return a copy of the current object … … 1100 1152 1101 1153 // select on objets within a distance 'radius' of a variable location 1102 Selector SelectorCircle(const double &radius) {1154 Selector SelectorCircle(const double radius) { 1103 1155 return Selector(new SW_Circle(radius)); 1104 1156 } … … 1110 1162 class SW_Doughnut : public SW_WithReference { 1111 1163 public: 1112 SW_Doughnut(const double &radius_in, const double &radius_out)1164 SW_Doughnut(const double radius_in, const double radius_out) 1113 1165 : _radius_in2(radius_in*radius_in), _radius_out2(radius_out*radius_out) {} 1114 1166 … … 1159 1211 1160 1212 // 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) {1213 Selector SelectorDoughnut(const double radius_in, const double radius_out) { 1162 1214 return Selector(new SW_Doughnut(radius_in, radius_out)); 1163 1215 } … … 1168 1220 class SW_Strip : public SW_WithReference { 1169 1221 public: 1170 SW_Strip(const double &delta) : _delta(delta) {}1222 SW_Strip(const double delta) : _delta(delta) {} 1171 1223 1172 1224 /// return a copy of the current object … … 1213 1265 1214 1266 // select on objets within a distance 'radius' of a variable location 1215 Selector SelectorStrip(const double &half_width) {1267 Selector SelectorStrip(const double half_width) { 1216 1268 return Selector(new SW_Strip(half_width)); 1217 1269 } … … 1224 1276 class SW_Rectangle : public SW_WithReference { 1225 1277 public: 1226 SW_Rectangle(const double &delta_rap, const double &delta_phi)1278 SW_Rectangle(const double delta_rap, const double delta_phi) 1227 1279 : _delta_rap(delta_rap), _delta_phi(delta_phi) {} 1228 1280 … … 1270 1322 1271 1323 // select on objets within a distance 'radius' of a variable location 1272 Selector SelectorRectangle(const double & half_rap_width, const double &half_phi_width) {1324 Selector SelectorRectangle(const double half_rap_width, const double half_phi_width) { 1273 1325 return Selector(new SW_Rectangle(half_rap_width, half_phi_width)); 1274 1326 } -
external/fastjet/Selector.hh
rf6b6ee7 r49234af 2 2 #define __FASTJET_SELECTOR_HH__ 3 3 4 // STARTHEADER5 // $Id: Selector.hh 3 203 2013-09-15 07:49:50Z salam $6 // 7 // Copyright (c) 2009-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez4 //FJSTARTHEADER 5 // $Id: Selector.hh 3711 2014-09-29 13:54:51Z salam $ 6 // 7 // Copyright (c) 2009-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 8 8 // 9 9 //---------------------------------------------------------------------- … … 16 16 // 17 17 // 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 19 20 // 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. 21 23 // 22 24 // FastJet is distributed in the hope that it will be useful, … … 28 30 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 29 31 //---------------------------------------------------------------------- 30 // ENDHEADER32 //FJENDHEADER 31 33 32 34 #include "fastjet/PseudoJet.hh" … … 67 69 //---------------------------------------------------------- 68 70 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() 71 78 virtual bool pass(const PseudoJet & jet) const = 0; 72 79 73 80 /// 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 argume tnare not NULL81 /// pointer to 0. 82 /// 83 /// It does not assume that the PseudoJet* passed as argument are not NULL 77 84 virtual void terminator(std::vector<const PseudoJet *> & jets) const { 78 85 for (unsigned i = 0; i < jets.size(); i++) { … … 133 140 throw Error("this selector has no computable area"); 134 141 } 142 135 143 }; 136 144 … … 151 159 Selector(SelectorWorker * worker_in) {_worker.reset(worker_in);} 152 160 153 154 161 #ifndef __FJCORE__ 155 162 /// ctor from a RangeDefinition … … 186 193 /// passes and then evaluating the size of the vector 187 194 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; 188 207 189 208 /// sift the input jets into two vectors -- those that pass the selector … … 286 305 } 287 306 288 /// class that gets throw when a Selector is applied despite it not307 /// class that gets thrown when a Selector is applied despite it not 289 308 /// having a valid underlying worker. 290 309 class InvalidWorker : public Error { … … 293 312 }; 294 313 295 /// class that gets throw when a Selector is applied despite it not296 /// having a valid underlying worker.314 /// class that gets thrown when the area is requested from a Selector for which 315 /// the area is not meaningful 297 316 class InvalidArea : public Error { 298 317 public: … … 433 452 /// select objets within a distance 'radius' from the location of the 434 453 /// reference jet, set by Selector::set_reference(...) 435 Selector SelectorCircle(const double &radius);454 Selector SelectorCircle(const double radius); 436 455 437 456 /// select objets with distance from the reference jet is between 'radius_in' 438 457 /// and 'radius_out'; the reference jet is set by Selector::set_reference(...) 439 Selector SelectorDoughnut(const double & radius_in, const double &radius_out);458 Selector SelectorDoughnut(const double radius_in, const double radius_out); 440 459 441 460 /// select objets within a rapidity distance 'half_width' from the 442 461 /// location of the reference jet, set by Selector::set_reference(...) 443 Selector SelectorStrip(const double &half_width);462 Selector SelectorStrip(const double half_width); 444 463 445 464 /// select objets within rapidity distance 'half_rap_width' from the 446 465 /// reference jet and azimuthal-angle distance within 'half_phi_width'; the 447 466 /// reference jet is set by Selector::set_reference(...) 448 Selector SelectorRectangle(const double & half_rap_width, const double &half_phi_width);467 Selector SelectorRectangle(const double half_rap_width, const double half_phi_width); 449 468 450 469 -
external/fastjet/SharedPtr.hh
rf6b6ee7 r49234af 2 2 #define __FASTJET_SHARED_PTR_HH__ 3 3 4 // STARTHEADER5 // $Id: SharedPtr.hh 3 129 2013-06-05 08:48:36Z salam $6 // 7 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez4 //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 8 8 // 9 9 //---------------------------------------------------------------------- … … 16 16 // 17 17 // 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 19 20 // 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. 21 23 // 22 24 // FastJet is distributed in the hope that it will be useful, … … 28 30 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 29 31 //---------------------------------------------------------------------- 30 // ENDHEADER32 //FJENDHEADER 31 33 32 34 #include "fastjet/internal/base.hh" -
external/fastjet/VERSION
rf6b6ee7 r49234af 1 3. 0.61 3.1.0 -
external/fastjet/Voronoi.cc
rf6b6ee7 r49234af 1 // STARTHEADER2 // $Id $1 //FJSTARTHEADER 2 // $Id: Voronoi.cc 3433 2014-07-23 08:17:03Z salam $ 3 3 // 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 6 5 // 7 6 //---------------------------------------------------------------------- 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. 12 8 // 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. 22 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/>. 23 28 //---------------------------------------------------------------------- 24 // ENDHEADER29 //FJENDHEADER 25 30 26 31 -
external/fastjet/WrappedStructure.hh
rf6b6ee7 r49234af 1 // STARTHEADER2 // $Id: WrappedStructure.hh 2577 2011-09-13 15:11:38Z salam $3 // 4 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez1 //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 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 -
external/fastjet/config_auto.h
rf6b6ee7 r49234af 64 64 #endif 65 65 66 /* defined if demangling is enabled at configure time and is supported through 67 the GNU C++ ABI */ 68 /* #undef HAVE_DEMANGLING_SUPPORT */ 69 66 70 /* Define to 1 if you have the <dlfcn.h> header file. */ 67 71 #ifndef FASTJET_HAVE_DLFCN_H … … 147 151 /* Define to the full name and version of this package. */ 148 152 #ifndef FASTJET_PACKAGE_STRING 149 #define FASTJET_PACKAGE_STRING "FastJet 3. 0.6"153 #define FASTJET_PACKAGE_STRING "FastJet 3.1.0" 150 154 #endif 151 155 … … 157 161 /* Define to the version of this package. */ 158 162 #ifndef FASTJET_PACKAGE_VERSION 159 #define FASTJET_PACKAGE_VERSION "3. 0.6"163 #define FASTJET_PACKAGE_VERSION "3.1.0" 160 164 #endif 161 165 … … 167 171 /* Version number of package */ 168 172 #ifndef FASTJET_VERSION 169 #define FASTJET_VERSION "3.0.6" 170 #endif 173 #define FASTJET_VERSION "3.1.0" 174 #endif 175 176 /* Major version of this package */ 177 #ifndef FASTJET_VERSION_MAJOR 178 #define FASTJET_VERSION_MAJOR 3 179 #endif 180 181 /* Minor version of this package */ 182 #ifndef FASTJET_VERSION_MINOR 183 #define FASTJET_VERSION_MINOR 1 184 #endif 185 186 /* Version of the package under the form XYYZZ (instead of X.Y.Z) */ 187 #ifndef FASTJET_VERSION_NUMBER 188 #define FASTJET_VERSION_NUMBER 30100 189 #endif 190 191 /* Patch version of this package */ 192 #ifndef FASTJET_VERSION_PATCHLEVEL 193 #define FASTJET_VERSION_PATCHLEVEL 0 194 #endif 195 196 /* Pre-release version of this package */ 197 /* #undef VERSION_PRERELEASE */ 171 198 172 199 /* once: _INCLUDE_FASTJET_CONFIG_AUTO_H */ -
external/fastjet/config_raw.h
rf6b6ee7 r49234af 37 37 /* The TrackJet plugin is enabled */ 38 38 #define ENABLE_PLUGIN_TRACKJET /**/ 39 40 /* defined if demangling is enabled at configure time and is supported through 41 the GNU C++ ABI */ 42 /* #undef HAVE_DEMANGLING_SUPPORT */ 39 43 40 44 /* Define to 1 if you have the <dlfcn.h> header file. */ … … 88 92 89 93 /* Define to the full name and version of this package. */ 90 #define PACKAGE_STRING "FastJet 3. 0.6"94 #define PACKAGE_STRING "FastJet 3.1.0" 91 95 92 96 /* Define to the one symbol short name of this package. */ … … 94 98 95 99 /* Define to the version of this package. */ 96 #define PACKAGE_VERSION "3. 0.6"100 #define PACKAGE_VERSION "3.1.0" 97 101 98 102 /* Define to 1 if you have the ANSI C header files. */ … … 100 104 101 105 /* Version number of package */ 102 #define VERSION "3.0.6" 106 #define VERSION "3.1.0" 107 108 /* Major version of this package */ 109 #define VERSION_MAJOR 3 110 111 /* Minor version of this package */ 112 #define VERSION_MINOR 1 113 114 /* Version of the package under the form XYYZZ (instead of X.Y.Z) */ 115 #define VERSION_NUMBER 30100 116 117 /* Patch version of this package */ 118 #define VERSION_PATCHLEVEL 0 119 120 /* Pre-release version of this package */ 121 /* #undef VERSION_PRERELEASE */ -
external/fastjet/config_win.h
rf6b6ee7 r49234af 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" 2 #define FASTJET_PACKAGE_VERSION "3.1.0" 3 #define FASTJET_VERSION "3.1.0" 4 #define FASTJET_VERSION_MAJOR 3 5 #define FASTJET_VERSION_MINOR 1 6 #define FASTJET_VERSION_PATCHLEVEL 0 7 #define FASTJET_VERSION_NUMBER 30100 3 8 4 9 /* The ATLASCone plugin is disabled by default*/ -
external/fastjet/contribs/Nsubjettiness/AUTHORS
rf6b6ee7 r49234af 18 18 JHEP 1202:093 (2012), arXiv:1108.2701. 19 19 20 New 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 26 as well as in unpublished work by Gavin Salam. 27 20 28 ---------------------------------------------------------------------- -
external/fastjet/contribs/Nsubjettiness/AxesFinder.cc
rf6b6ee7 r49234af 5 5 // Jesse Thaler, Ken Van Tilburg, Christopher K. Vermilion, and TJ Wilkason 6 6 // 7 // $Id: AxesFinder.cc 670 2014-06-06 01:24:42Z jthaler $ 7 8 //---------------------------------------------------------------------- 8 9 // This file is part of FastJet contrib. … … 37 38 template <int N> 38 39 std::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 { 40 41 assert(old_axes.size() == N); 41 42 … … 45 46 for (int n = 0; n < N; ++n) { 46 47 new_axes[n].reset(0.0,0.0,0.0,0.0); 47 #ifdef FASTJET248 new_jets[n].reset(0.0,0.0,0.0,0.0);49 #else50 // use cheaper reset if available51 48 new_jets[n].reset_momentum(0.0,0.0,0.0,0.0); 52 #endif53 49 } 54 50 … … 135 131 // (This is just a wrapper for the templated version above.) 136 132 std::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 { 138 134 int N = old_axes.size(); 139 135 switch (N) { … … 166 162 // uses minimization of N-jettiness to continually update axes until convergence. 167 163 // The function returns the axes found at the (local) minimum 168 std::vector<fastjet::PseudoJet> AxesFinderFromOnePassMinimization::get BetterAxes(int n_jets, const std::vector <fastjet::PseudoJet> & inputJets, const std::vector<fastjet::PseudoJet>& seedAxes){164 std::vector<fastjet::PseudoJet> AxesFinderFromOnePassMinimization::getAxes(int n_jets, const std::vector <fastjet::PseudoJet> & inputJets, const std::vector<fastjet::PseudoJet>& seedAxes) const { 169 165 170 166 // convert from PseudoJets to LightLikeAxes … … 211 207 } 212 208 213 PseudoJet AxesFinderFromKmeansMinimization::jiggle(const PseudoJet& axis) {209 PseudoJet AxesFinderFromKmeansMinimization::jiggle(const PseudoJet& axis) const { 214 210 double phi_noise = ((double)rand()/(double)RAND_MAX) * _noise_range * 2.0 - _noise_range; 215 211 double rap_noise = ((double)rand()/(double)RAND_MAX) * _noise_range * 2.0 - _noise_range; … … 226 222 227 223 // Repeatedly calls the one pass finder to try to find global minimum 228 std::vector<fastjet::PseudoJet> AxesFinderFromKmeansMinimization::get BetterAxes(int n_jets, const std::vector <fastjet::PseudoJet> & inputJets, const std::vector<fastjet::PseudoJet>& seedAxes){224 std::vector<fastjet::PseudoJet> AxesFinderFromKmeansMinimization::getAxes(int n_jets, const std::vector <fastjet::PseudoJet> & inputJets, const std::vector<fastjet::PseudoJet>& seedAxes) const { 229 225 230 226 // first iteration … … 256 252 // It continually updates until it reaches convergence or it reaches the maximum number of attempts. 257 253 // This is essentially the same as a stable cone finder. 258 std::vector<fastjet::PseudoJet> AxesFinderFromGeometricMinimization::get BetterAxes(int n_jets, const std::vector <fastjet::PseudoJet> & particles, const std::vector<fastjet::PseudoJet>& currentAxes){254 std::vector<fastjet::PseudoJet> AxesFinderFromGeometricMinimization::getAxes(int /*n_jets*/, const std::vector <fastjet::PseudoJet> & particles, const std::vector<fastjet::PseudoJet>& currentAxes) const { 259 255 260 256 std::vector<fastjet::PseudoJet> seedAxes = currentAxes; 261 double seedTau = _function ->tau(particles, seedAxes);257 double seedTau = _function.tau(particles, seedAxes); 262 258 263 259 for (int i = 0; i < _nAttempts; i++) { … … 270 266 // start from unclustered beam measure 271 267 int minJ = -1; 272 double minDist = _function ->beam_distance_squared(particles[i]);268 double minDist = _function.beam_distance_squared(particles[i]); 273 269 274 270 // which axis am I closest to? 275 271 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]); 277 273 if (tempDist < minDist) { 278 274 minDist = tempDist; … … 287 283 // calculate tau on new axes 288 284 seedAxes = newAxes; 289 double tempTau = _function ->tau(particles, newAxes);285 double tempTau = _function.tau(particles, newAxes); 290 286 291 287 // close enough to stop? -
external/fastjet/contribs/Nsubjettiness/AxesFinder.hh
rf6b6ee7 r49234af 5 5 // Jesse Thaler, Ken Van Tilburg, Christopher K. Vermilion, and TJ Wilkason 6 6 // 7 // $Id: AxesFinder.hh 678 2014-06-12 20:43:03Z jthaler $ 7 8 //---------------------------------------------------------------------- 8 9 // This file is part of FastJet contrib. … … 53 54 class AxesFinder { 54 55 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 56 public: 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 87 71 //------------------------------------------------------------------------ 88 72 /// \class AxesFinderFromExclusiveJetDefinition … … 90 74 // with different jet algorithms. 91 75 class 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 77 public: 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 88 private: 89 fastjet::JetDefinition _def; 90 103 91 }; 104 92 … … 108 96 // winner take all recombination scheme. 109 97 class 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 99 public: 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 107 private: 108 const WinnerTakeAllRecombiner _recomb; 109 110 }; 120 111 121 112 //------------------------------------------------------------------------ … … 124 115 // winner take all recombination scheme. 125 116 class 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 //}; 117 public: 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 125 private: 126 const WinnerTakeAllRecombiner _recomb; 127 }; 128 170 129 171 130 //------------------------------------------------------------------------ … … 174 133 // E_scheme recombination. 175 134 class 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)) {} 135 public: 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)) {} 182 142 }; 183 143 … … 187 147 // E_scheme recombination. 188 148 class 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)) {} 149 public: 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)) {} 195 156 }; 196 157 … … 201 162 // This can be implemented with different jet algorithms. 202 163 class 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 } 164 public: 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 177 private: 178 fastjet::JetDefinition _def; 216 179 }; 217 180 … … 221 184 // to an anti kT algorithm and E_scheme. 222 185 class AxesFinderFromAntiKT : public AxesFinderFromHardestJetDefinition { 223 public: 224 AxesFinderFromAntiKT(double R0) : AxesFinderFromHardestJetDefinition(fastjet::JetDefinition(fastjet::antikt_algorithm,R0,fastjet::E_scheme,fastjet::Best)) {} 186 public: 187 AxesFinderFromAntiKT(double R0) 188 : AxesFinderFromHardestJetDefinition( 189 fastjet::JetDefinition(fastjet::antikt_algorithm, 190 R0,fastjet::E_scheme,fastjet::Best)) {} 225 191 }; 226 192 … … 231 197 class AxesFinderFromUserInput : public AxesFinder { 232 198 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 } 199 public: 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 } 240 207 }; 241 208 … … 249 216 class AxesFinderFromOnePassMinimization : public AxesFinder { 250 217 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); 218 public: 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 233 private: 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; 279 247 280 248 }; … … 288 256 class AxesFinderFromKmeansMinimization : public AxesFinder{ 289 257 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 258 public: 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 268 private: 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; 311 277 }; 312 278 … … 317 283 class AxesFinderFromGeometricMinimization : public AxesFinder { 318 284 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); 285 public: 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."); 336 293 } 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 298 private: 299 double _nAttempts; 300 double _accuracy; 301 GeometricMeasureFunction _function; 302 303 343 304 }; 344 305 … … 348 309 // in order to better facilitate calculations. 349 310 class 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 368 312 public: 369 313 LightLikeAxis() : _rap(0.0), _phi(0.0), _weight(0.0), _mom(0.0) {} … … 399 343 } 400 344 345 private: 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 401 363 }; 402 364 -
external/fastjet/contribs/Nsubjettiness/MeasureFunction.cc
rf6b6ee7 r49234af 5 5 // Jesse Thaler, Ken Van Tilburg, Christopher K. Vermilion, and TJ Wilkason 6 6 // 7 // $Id: MeasureFunction.cc 670 2014-06-06 01:24:42Z jthaler $ 7 8 //---------------------------------------------------------------------- 8 9 // This file is part of FastJet contrib. … … 36 37 37 38 // 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) { 39 TauComponents 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 } 39 49 40 std::vector<double> jetPieces(axes.size(), 0.0); 41 double beamPiece = 0.0; 50 std::vector<fastjet::PseudoJet> MeasureFunction::get_partition(const std::vector<fastjet::PseudoJet>& particles, 51 const std::vector<fastjet::PseudoJet>& axes, 52 PseudoJet * beamPartitionStorage) const { 42 53 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 44 59 for (unsigned i = 0; i < particles.size(); i++) { 45 60 … … 60 75 61 76 if (j_min == -1) { 62 if (_has_beam) beamP iece += beam_numerator(particles[i]);77 if (_has_beam) beamPartition.push_back(particles[i]); 63 78 else assert(_has_beam); // this should never happen. 64 79 } else { 65 jetP ieces[j_min] += jet_numerator(particles[i],axes[j_min]);80 jetPartition[j_min].push_back(particles[i]); 66 81 } 67 82 } 68 83 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]); 77 93 } 78 94 95 return jetPartitionStorage; 96 } 97 98 // does partition, but only stores index of PseudoJets 99 std::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? 136 TauComponents 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 } 79 165 return TauComponents(jetPieces, beamPiece, tauDen, _has_denominator, _has_beam); 80 166 } 167 168 169 170 81 171 82 172 } //namespace contrib -
external/fastjet/contribs/Nsubjettiness/MeasureFunction.hh
rf6b6ee7 r49234af 5 5 // Jesse Thaler, Ken Van Tilburg, Christopher K. Vermilion, and TJ Wilkason 6 6 // 7 // $Id: MeasureFunction.hh 678 2014-06-12 20:43:03Z jthaler $ 7 8 //---------------------------------------------------------------------- 8 9 // This file is part of FastJet contrib. … … 31 32 #include <limits> 32 33 34 33 35 FASTJET_BEGIN_NAMESPACE // defined in fastjet/internal/base.hh 34 36 35 37 namespace contrib{ 36 38 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 45 46 /// \class TauComponents 46 47 // This class creates a wrapper for the various tau/subtau values calculated in Njettiness. This class allows Njettiness access to these variables 47 48 // without ever having to do the calculation itself. It takes in subtau numerators and tau denominator from MeasureFunction 48 49 // and outputs tau numerator, and normalized tau and subtau. 49 // TODO: Consider merging with NjettinessExtras. Add axes information?50 50 class TauComponents { 51 private:52 53 // these values are input in the constructor54 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 not58 bool _has_beam; //added so that TauComponents knows if beam regions is used or not59 60 // these values are derived from above values61 std::vector<double> _jet_pieces;62 double _beam_piece;63 double _numerator;64 double _tau;65 66 51 67 52 public: … … 115 100 double beam_piece() const { return _beam_piece; } 116 101 double tau() const { return _tau; } 117 118 }; 102 103 private: 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 119 126 120 127 //------------------------------------------------------------------------ … … 125 132 class MeasureFunction { 126 133 134 public: 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 127 177 protected: 128 178 //bool set by derived classes to choose whether or not to use the denominator … … 133 183 MeasureFunction(bool has_denominator = true, bool has_beam = true) : _has_denominator(has_denominator), _has_beam(has_beam) {} 134 184 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 172 189 // This class is the default measure, inheriting from the class above. This class will calculate tau_N 173 190 // of a jet according to this measure. This measure is defined as the pT of the particle multiplied by deltaR 174 191 // 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 192 class DefaultNormalizedMeasureFunction : public MeasureFunction { 193 194 public: 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 219 private: 220 double _beta; 221 double _R0; 222 double _Rcutoff; 223 224 207 225 }; 208 226 209 227 //------------------------------------------------------------------------ 210 /// \class DefaultUnnormalizedMeasure 228 /// \class DefaultUnnormalizedMeasureFunction 211 229 // This class is the unnormalized default measure, inheriting from the class above. The only difference from above 212 230 // is that the denominator is defined to be 1.0 by setting _has_denominator to false. 213 class DefaultUnnormalizedMeasure : public DefaultNormalizedMeasure{214 215 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 231 class DefaultUnnormalizedMeasureFunction : public DefaultNormalizedMeasureFunction { 232 233 public: 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) {} 221 239 }; 222 240 223 241 //------------------------------------------------------------------------ 224 /// \class GeometricMeasure 242 /// \class GeometricMeasureFunction 225 243 // This class is the geometic measure, inheriting from the class above. This class will calculate tau_N 226 244 // of a jet according to this measure. This measure is defined by the Lorentz dot product between 227 245 // 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 246 class GeometricMeasureFunction : public MeasureFunction { 247 248 public: 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 280 private: 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 272 294 } //namespace contrib 273 295 -
external/fastjet/contribs/Nsubjettiness/Njettiness.cc
rf6b6ee7 r49234af 5 5 // Jesse Thaler, Ken Van Tilburg, Christopher K. Vermilion, and TJ Wilkason 6 6 // 7 // $Id: Njettiness.cc 677 2014-06-12 18:56:46Z jthaler $ 7 8 //---------------------------------------------------------------------- 8 9 // This file is part of FastJet contrib. … … 35 36 /////// 36 37 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) { 38 Njettiness::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 43 Njettiness::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 50 MeasureDefinition* Njettiness::createMeasureDef(MeasureMode measure_mode, int num_para, double para1, double para2, double para3) const { 53 51 54 52 // definition of maximum Rcutoff for non-cutoff measures, changed later by other measures 55 53 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(); 58 56 // The normalized measures have an R0 value. 59 double R0 = NAN;60 57 double R0 = std::numeric_limits<double>::quiet_NaN(); 58 61 59 // Find the MeasureFunction and set the parameters. 62 60 switch (measure_mode) { … … 64 62 beta = para1; 65 63 R0 = para2; 66 if( correctParameterCount(2, para1, para2, para3, para4))67 _measureFunction = new DefaultNormalizedMeasure(beta, R0, Rcutoff); //normalized_measure requires 2 parameters, beta and R068 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 } 71 69 break; 72 70 case unnormalized_measure: 73 71 beta = para1; 74 if( correctParameterCount(1, para1, para2, para3, para4))75 _measureFunction = new DefaultUnnormalizedMeasure(beta, Rcutoff); //unnormalized_measure requires 1 parameter, beta76 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 } 79 77 break; 80 78 case geometric_measure: 81 79 beta = para1; 82 if (correctParameterCount(1, para1, para2, para3, para4))83 _measureFunction = new GeometricMeasure(beta,Rcutoff); //geometric_measure requires 1 parameter, beta84 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 } 87 85 break; 88 86 case normalized_cutoff_measure: … … 90 88 R0 = para2; 91 89 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 Rcutoff94 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 } 97 95 break; 98 96 case unnormalized_cutoff_measure: 99 97 beta = para1; 100 98 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 Rcutoff103 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 } 106 104 break; 107 105 case geometric_cutoff_measure: 108 106 beta = para1; 109 107 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 Rcutoff112 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 } 115 113 break; 116 114 default: 117 115 assert(false); 118 116 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 123 AxesDefinition* Njettiness::createAxesDef(Njettiness::AxesMode axes_mode) const { 124 123 125 switch (axes_mode) { 124 126 case wta_kt_axes: 125 _axesFinder = new AxesFinderFromWTA_KT(); 126 break; 127 return new WTA_KT_Axes(); 127 128 case wta_ca_axes: 128 _axesFinder = new AxesFinderFromWTA_CA(); 129 break; 129 return new WTA_CA_Axes(); 130 130 case kt_axes: 131 _axesFinder = new AxesFinderFromKT(); 132 break; 131 return new KT_Axes(); 133 132 case ca_axes: 134 _axesFinder = new AxesFinderFromCA(); 135 break; 133 return new CA_Axes(); 136 134 case antikt_0p2_axes: 137 _axesFinder = new AxesFinderFromAntiKT(0.2); 138 break; 135 return new AntiKT_Axes(0.2); 139 136 case onepass_wta_kt_axes: 140 setOnePassAxesFinder(measure_mode, new AxesFinderFromWTA_KT(), beta, Rcutoff); 141 break; 137 return new OnePass_WTA_KT_Axes(); 142 138 case onepass_wta_ca_axes: 143 setOnePassAxesFinder(measure_mode, new AxesFinderFromWTA_CA(), beta, Rcutoff); 144 break; 139 return new OnePass_WTA_CA_Axes(); 145 140 case onepass_kt_axes: 146 setOnePassAxesFinder(measure_mode, new AxesFinderFromKT(), beta, Rcutoff); 147 break; 141 return new OnePass_KT_Axes(); 148 142 case onepass_ca_axes: 149 setOnePassAxesFinder(measure_mode, new AxesFinderFromCA(), beta, Rcutoff); 150 break; 143 return new OnePass_CA_Axes(); 151 144 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); 154 146 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); 166 150 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(); 182 152 default: 183 153 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. 161 void 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)); 187 166 } 188 167 189 168 // 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) {169 void Njettiness::setAxes(const std::vector<fastjet::PseudoJet> & myAxes) { 170 if (_axes_def->supportsManualAxes()) { 192 171 _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"); 197 174 } 198 175 } … … 200 177 // Calculates and returns all TauComponents that user would want. 201 178 // 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) {179 TauComponents Njettiness::getTauComponents(unsigned n_jets, const std::vector<fastjet::PseudoJet> & inputJets) const { 203 180 if (inputJets.size() <= n_jets) { //if not enough particles, return zero 204 181 _currentAxes = inputJets; … … 206 183 _current_tau_components = TauComponents(); 207 184 _seedAxes = _currentAxes; 185 _currentJets = _currentAxes; 186 _currentBeam = PseudoJet(0.0,0.0,0.0,0.0); 208 187 } 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 212 202 } 213 203 return _current_tau_components; … … 219 209 // Each vector element is a list of ints corresponding to the indices in 220 210 // 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 211 std::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 259 217 } // namespace contrib 260 218 -
external/fastjet/contribs/Nsubjettiness/Njettiness.hh
rf6b6ee7 r49234af 5 5 // Jesse Thaler, Ken Van Tilburg, Christopher K. Vermilion, and TJ Wilkason 6 6 // 7 // $Id: Njettiness.hh 670 2014-06-06 01:24:42Z jthaler $ 7 8 //---------------------------------------------------------------------- 8 9 // This file is part of FastJet contrib. … … 25 26 #define __FASTJET_CONTRIB_NJETTINESS_HH__ 26 27 28 27 29 #include "MeasureFunction.hh" 28 30 #include "AxesFinder.hh" 31 #include "NjettinessDefinition.hh" 29 32 30 33 #include "fastjet/PseudoJet.hh" 34 #include "fastjet/SharedPtr.hh" 35 #include <fastjet/LimitedWarning.hh> 36 31 37 #include <cmath> 32 38 #include <vector> 33 39 #include <list> 34 40 35 36 41 FASTJET_BEGIN_NAMESPACE // defined in fastjet/internal/base.hh 37 42 38 43 namespace contrib { 39 44 40 45 /////// 41 46 // … … 54 59 55 60 // The various axes choices available to the user 61 // It is recommended to use AxesDefinition instead of these. 56 62 enum AxesMode { 57 63 kt_axes, // exclusive kt axes … … 78 84 // "normalized_cutoff_measure" was the default in v1.0 of Nsubjettiness 79 85 // "unnormalized_measure" is now the recommended default usage 86 // But it is recommended to use MeasureDefinition instead of these. 80 87 enum MeasureMode { 81 88 normalized_measure, //default normalized measure … … 87 94 }; 88 95 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); 93 99 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); 105 102 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 115 113 } 116 114 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() {}; 144 117 145 118 // setAxes for Manual mode 146 void setAxes( std::vector<fastjet::PseudoJet>myAxes);119 void setAxes(const std::vector<fastjet::PseudoJet> & myAxes); 147 120 148 121 // Calculates and returns all TauComponents that user would want. 149 122 // 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; 151 124 152 125 // Calculates the value of N-subjettiness, 153 126 // 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 { 155 128 return getTauComponents(n_jets, inputJets).tau(); 156 129 } 157 158 // returns enum information159 MeasureMode currentMeasureMode() { return _current_measure_mode;}160 AxesMode currentAxesMode() { return _current_axes_mode;}161 130 162 131 // Return all relevant information about tau components 163 TauComponents currentTauComponents() {return _current_tau_components;} 164 132 TauComponents currentTauComponents() const {return _current_tau_components;} 165 133 // Return axes found by getTauComponents. 166 std::vector<fastjet::PseudoJet> currentAxes() { return _currentAxes;}134 std::vector<fastjet::PseudoJet> currentAxes() const { return _currentAxes;} 167 135 // 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;} 169 141 170 142 // 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; 172 144 173 // partition inputs by Voronoi 174 std::vector<fastjet::PseudoJet> getJets(const std::vector<fastjet::PseudoJet> & inputJets); 145 private: 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; 175 175 176 176 }; 177 177 178 178 } // namespace contrib 179 179 -
external/fastjet/contribs/Nsubjettiness/NjettinessPlugin.cc
rf6b6ee7 r49234af 5 5 // Jesse Thaler, Ken Van Tilburg, Christopher K. Vermilion, and TJ Wilkason 6 6 // 7 // $Id: NjettinessPlugin.cc 663 2014-06-03 21:26:41Z jthaler $ 7 8 //---------------------------------------------------------------------- 8 9 // This file is part of FastJet contrib. … … 29 30 30 31 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 compatibility36 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) {}38 32 39 33 std::string NjettinessPlugin::description() const {return "N-jettiness jet finder";} 40 34 35 41 36 // 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 43 39 void NjettinessPlugin::run_clustering(ClusterSequence& cs) const 44 40 { 45 41 std::vector<fastjet::PseudoJet> particles = cs.jets(); 42 43 // HACK: remove area information from particles (in case this is called by 44 // a ClusterSequenceArea. Will be fixed in a future FastJet release) 45 for (unsigned i = 0; i < particles.size(); i++) { 46 particles[i].set_structure_shared_ptr(SharedPtr<PseudoJetStructureBase>()); 47 } 48 49 46 50 _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); 48 53 49 54 std::vector<fastjet::PseudoJet> jet_indices_for_extras; 50 55 51 56 // 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 53 59 std::list<int>& indices = partition[i]; 54 60 if (indices.size() == 0) continue; … … 70 76 } 71 77 78 //HACK: Re-reverse order of reading to match CS order 79 reverse(jet_indices_for_extras.begin(),jet_indices_for_extras.end()); 80 72 81 NjettinessExtras * extras = new NjettinessExtras(_njettinessFinder.currentTauComponents(),jet_indices_for_extras,_njettinessFinder.currentAxes()); 73 82 cs.plugin_associate_extras(std::auto_ptr<ClusterSequence::Extras>(extras)); -
external/fastjet/contribs/Nsubjettiness/NjettinessPlugin.hh
rf6b6ee7 r49234af 1 // $Id$2 //3 1 // Nsubjettiness Package 4 2 // Questions/Comments? jthaler@jthaler.net … … 7 5 // Jesse Thaler, Ken Van Tilburg, Christopher K. Vermilion, and TJ Wilkason 8 6 // 7 // $Id: NjettinessPlugin.hh 671 2014-06-10 17:47:52Z jthaler $ 9 8 //---------------------------------------------------------------------- 10 9 // This file is part of FastJet contrib. … … 49 48 // to similar information 50 49 class 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 68 51 public: 69 52 NjettinessExtras(TauComponents tau_components, std::vector<fastjet::PseudoJet> jets, std::vector<fastjet::PseudoJet> axes) : _tau_components(tau_components), _jets(jets), _axes(axes) {} … … 74 57 std::vector<fastjet::PseudoJet> axes() const {return _axes;} 75 58 76 double totalTau(const fastjet::PseudoJet& jet) const {59 double totalTau(const fastjet::PseudoJet& /*jet*/) const { 77 60 return _tau_components.tau(); 78 61 } 62 79 63 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 81 65 return _tau_components.jet_pieces()[labelOf(jet)]; 82 66 } … … 93 77 return (labelOf(jet) >= 0); 94 78 } 95 79 80 private: 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 } 96 96 }; 97 97 … … 122 122 * onepass_wta_kt_axes : one-pass minimization seeded by wta_kt 123 123 * 124 * For the unnormalized_measure, N-jettiness is defined as:124 * For the UnnormalizedMeasure(beta), N-jettiness is defined as: 125 125 * 126 126 * tau_N = Sum_{all particles i} p_T^i min((DR_i1)^beta, (DR_i2)^beta, ...) … … 129 129 * and jet j. 130 130 * 131 * The normalized_meausure include an extra parameter R0, and the various cutoff131 * The NormalizedMeausure include an extra parameter R0, and the various cutoff 132 132 * measures include an Rcutoff, which effectively defines an angular cutoff 133 133 * similar in effect to a cone-jet radius. … … 138 138 public: 139 139 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 147 178 148 179 // Old constructor for backwards compatibility with v1.0, 149 // where normalized_cutoff_measure was the only option180 // where NormalizedCutoffMeasure was the only option 150 181 NjettinessPlugin(int N, 151 182 Njettiness::AxesMode mode, 152 183 double beta, 153 184 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 155 188 156 189 … … 164 197 private: 165 198 199 Njettiness _njettinessFinder; 166 200 int _N; 167 mutable Njettiness _njettinessFinder; // TODO: should muck with this so run_clustering can be const without this mutable168 201 169 202 }; -
external/fastjet/contribs/Nsubjettiness/Nsubjettiness.cc
rf6b6ee7 r49234af 5 5 // Jesse Thaler, Ken Van Tilburg, Christopher K. Vermilion, and TJ Wilkason 6 6 // 7 // $Id: Nsubjettiness.cc 597 2014-04-16 23:07:55Z jthaler $ 7 8 //---------------------------------------------------------------------- 8 9 // This file is part of FastJet contrib. -
external/fastjet/contribs/Nsubjettiness/Nsubjettiness.hh
rf6b6ee7 r49234af 5 5 // Jesse Thaler, Ken Van Tilburg, Christopher K. Vermilion, and TJ Wilkason 6 6 // 7 // $Id: Nsubjettiness.hh 670 2014-06-06 01:24:42Z jthaler $ 7 8 //---------------------------------------------------------------------- 8 9 // This file is part of FastJet contrib. … … 32 33 #include <string> 33 34 #include <climits> 34 35 35 36 36 FASTJET_BEGIN_NAMESPACE // defined in fastjet/internal/base.hh … … 49 49 public: 50 50 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) 53 89 Nsubjettiness(int N, 54 90 Njettiness::AxesMode axes_mode, 55 91 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) {} 61 114 62 115 // Old constructor for backwards compatibility with v1.0, … … 67 120 double R0, 68 121 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 72 124 /// returns tau_N, measured on the constituents of this jet 73 125 double result(const PseudoJet& jet) const; … … 86 138 } 87 139 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 88 151 // To set axes for manual use 89 void setAxes( std::vector<fastjet::PseudoJet>myAxes) {152 void setAxes(const std::vector<fastjet::PseudoJet> & myAxes) { 90 153 // Cross check that manual axes are being used is in Njettiness 91 154 _njettinessFinder.setAxes(myAxes); … … 95 158 private: 96 159 97 mutableNjettiness _njettinessFinder; // TODO: should muck with this so result can be const without this mutable160 Njettiness _njettinessFinder; // TODO: should muck with this so result can be const without this mutable 98 161 int _N; 99 162 … … 112 175 NsubjettinessRatio(int N, 113 176 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, 114 194 Njettiness::AxesMode axes_mode, 115 195 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 124 220 double result(const PseudoJet& jet) const; 125 221 -
external/fastjet/contribs/Nsubjettiness/VERSION
rf6b6ee7 r49234af 1 1.1.0-beta4 1 2.1.0 -
external/fastjet/contribs/Nsubjettiness/WinnerTakeAllRecombiner.cc
rf6b6ee7 r49234af 5 5 // Jesse Thaler, Ken Van Tilburg, Christopher K. Vermilion, and TJ Wilkason 6 6 // 7 // $Id: WinnerTakeAllRecombiner.cc 597 2014-04-16 23:07:55Z jthaler $ 7 8 //---------------------------------------------------------------------- 8 9 // This file is part of FastJet contrib. … … 33 34 34 35 // recombine pa and pb by creating pab with energy of the sum of particle energies in the direction of the harder particle 35 36 36 // updated recombiner to use more general form of a metric equal to E*(pT/E)^(alpha), which reduces to pT*cosh(rap)^(1-alpha) 37 37 // 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
rf6b6ee7 r49234af 5 5 // Jesse Thaler, Ken Van Tilburg, Christopher K. Vermilion, and TJ Wilkason 6 6 // 7 // $Id: WinnerTakeAllRecombiner.hh 670 2014-06-06 01:24:42Z jthaler $ 7 8 //---------------------------------------------------------------------- 8 9 // This file is part of FastJet contrib. … … 50 51 51 52 /// 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; 53 56 54 57 private: -
external/fastjet/internal/ClosestPair2D.hh
rf6b6ee7 r49234af 1 // STARTHEADER2 // $Id: ClosestPair2D.hh 2577 2011-09-13 15:11:38Z salam $3 // 4 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez1 //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 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 #ifndef __FASTJET_CLOSESTPAIR2D__HH__ -
external/fastjet/internal/ClosestPair2DBase.hh
rf6b6ee7 r49234af 1 // STARTHEADER2 // $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 $ 3 3 // 4 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez4 // Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 #ifndef __FASTJET_CLOSESTPAIR2DBASE__HH__ -
external/fastjet/internal/ClusterSequence_N2.icc
rf6b6ee7 r49234af 4 4 #include "fastjet/ClusterSequence.hh" 5 5 6 // STARTHEADER6 //FJSTARTHEADER 7 7 // $Id: ClusterSequence_N2.cc 1351 2009-01-09 18:03:03Z salam $ 8 8 // 9 // Copyright (c) 2005-20 09, Matteo Cacciari, GavinSalam and Gregory Soyez9 // Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 10 10 // 11 11 //---------------------------------------------------------------------- … … 18 18 // 19 19 // 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 21 22 // 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. 23 25 // 24 26 // FastJet is distributed in the hope that it will be useful, … … 28 30 // 29 31 // 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/>. 33 33 //---------------------------------------------------------------------- 34 // ENDHEADER34 //FJENDHEADER 35 35 36 36 //---------------------------------------------------------------------- -
external/fastjet/internal/Dnn2piCylinder.hh
rf6b6ee7 r49234af 1 // STARTHEADER2 // $Id: Dnn2piCylinder.hh 2577 2011-09-13 15:11:38Z salam $3 // 4 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez1 //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 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 … … 73 75 /// Returns the index of the nearest neighbour of point labelled 74 76 /// by ii (assumes ii is valid) 75 int NearestNeighbourIndex(const int &ii) const ;77 int NearestNeighbourIndex(const int ii) const ; 76 78 77 79 /// Returns the distance to the nearest neighbour of point labelled 78 80 /// by index ii (assumes ii is valid) 79 double NearestNeighbourDistance(const int &ii) const ;81 double NearestNeighbourDistance(const int ii) const ; 80 82 81 83 /// Returns true iff the given index corresponds to a point that 82 84 /// exists in the DNN structure (meaning that it has been added, and 83 85 /// not removed in the meantime) 84 bool Valid(const int &index) const;86 bool Valid(const int index) const; 85 87 86 88 void RemoveAndAddPoints(const std::vector<int> & indices_to_remove, … … 216 218 /// initialised the class with instructions to ignore this problem the 217 219 /// program will detect and ignore it, or crash. 218 inline int Dnn2piCylinder::NearestNeighbourIndex(const int ¤t) const {220 inline int Dnn2piCylinder::NearestNeighbourIndex(const int current) const { 219 221 int main_index = _mirror_info[current].main_index; 220 222 int mirror_index = _mirror_info[current].mirror_index; … … 241 243 } 242 244 243 inline double Dnn2piCylinder::NearestNeighbourDistance(const int ¤t) const {245 inline double Dnn2piCylinder::NearestNeighbourDistance(const int current) const { 244 246 int main_index = _mirror_info[current].main_index; 245 247 int mirror_index = _mirror_info[current].mirror_index; … … 256 258 } 257 259 258 inline bool Dnn2piCylinder::Valid(const int &index) const {260 inline bool Dnn2piCylinder::Valid(const int index) const { 259 261 return (_DNN->Valid(_mirror_info[index].main_index)); 260 262 } -
external/fastjet/internal/Dnn3piCylinder.hh
rf6b6ee7 r49234af 1 // STARTHEADER2 // $Id: Dnn3piCylinder.hh 2577 2011-09-13 15:11:38Z salam $3 // 4 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez1 //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 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 … … 70 72 /// Returns the index of the nearest neighbour of point labelled 71 73 /// by ii (assumes ii is valid) 72 int NearestNeighbourIndex(const int &ii) const ;74 int NearestNeighbourIndex(const int ii) const ; 73 75 74 76 /// Returns the distance to the nearest neighbour of point labelled 75 77 /// by index ii (assumes ii is valid) 76 double NearestNeighbourDistance(const int &ii) const ;78 double NearestNeighbourDistance(const int ii) const ; 77 79 78 80 /// Returns true iff the given index corresponds to a point that 79 81 /// exists in the DNN structure (meaning that it has been added, and 80 82 /// not removed in the meantime) 81 bool Valid(const int &index) const;83 bool Valid(const int index) const; 82 84 83 85 void RemoveAndAddPoints(const std::vector<int> & indices_to_remove, … … 204 206 /// initialised the class with instructions to ignore this problem the 205 207 /// program will detect and ignore it, or crash. 206 inline int Dnn3piCylinder::NearestNeighbourIndex(const int ¤t) const {208 inline int Dnn3piCylinder::NearestNeighbourIndex(const int current) const { 207 209 int main_index = _mirror_info[current].main_index; 208 210 int mirror_index = _mirror_info[current].mirror_index; … … 229 231 } 230 232 231 inline double Dnn3piCylinder::NearestNeighbourDistance(const int ¤t) const {233 inline double Dnn3piCylinder::NearestNeighbourDistance(const int current) const { 232 234 int main_index = _mirror_info[current].main_index; 233 235 int mirror_index = _mirror_info[current].mirror_index; … … 244 246 } 245 247 246 inline bool Dnn3piCylinder::Valid(const int &index) const {248 inline bool Dnn3piCylinder::Valid(const int index) const { 247 249 return (_DNN->Valid(_mirror_info[index].main_index)); 248 250 } -
external/fastjet/internal/Dnn4piCylinder.hh
rf6b6ee7 r49234af 1 // STARTHEADER2 // $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 $ 3 3 // 4 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez4 // Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 … … 57 59 /// Returns the index of the nearest neighbour of point labelled 58 60 /// by ii (assumes ii is valid) 59 int NearestNeighbourIndex(const int &ii) const ;61 int NearestNeighbourIndex(const int ii) const ; 60 62 61 63 /// Returns the distance to the nearest neighbour of point labelled 62 64 /// by index ii (assumes ii is valid) 63 double NearestNeighbourDistance(const int &ii) const ;65 double NearestNeighbourDistance(const int ii) const ; 64 66 65 67 /// Returns true iff the given index corresponds to a point that 66 68 /// exists in the DNN structure (meaning that it has been added, and 67 69 /// not removed in the meantime) 68 bool Valid(const int &index) const;70 bool Valid(const int index) const; 69 71 70 72 void RemoveAndAddPoints(const std::vector<int> & indices_to_remove, … … 98 100 // functions defined above 99 101 100 inline int Dnn4piCylinder::NearestNeighbourIndex(const int ¤t) const {102 inline int Dnn4piCylinder::NearestNeighbourIndex(const int current) const { 101 103 return (_DNN1->NearestNeighbourDistance(current) < 102 104 _DNN2->NearestNeighbourDistance(current)) ? … … 105 107 } 106 108 107 inline double Dnn4piCylinder::NearestNeighbourDistance(const int ¤t) const {109 inline double Dnn4piCylinder::NearestNeighbourDistance(const int current) const { 108 110 return (_DNN1->NearestNeighbourDistance(current) < 109 111 _DNN2->NearestNeighbourDistance(current)) ? … … 112 114 } 113 115 114 inline bool Dnn4piCylinder::Valid(const int &index) const {116 inline bool Dnn4piCylinder::Valid(const int index) const { 115 117 return (_DNN1->Valid(index) && _DNN2->Valid(index)); 116 118 } -
external/fastjet/internal/DnnPlane.hh
rf6b6ee7 r49234af 1 // STARTHEADER2 // $Id: DnnPlane.hh 2577 2011-09-13 15:11:38Z salam $3 // 4 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez1 //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 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 … … 44 46 /// class derived from DynamicNearestNeighbours that provides an 45 47 /// 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 46 55 /// \endif 47 56 class DnnPlane : public DynamicNearestNeighbours { … … 57 66 /// Returns the index of the nearest neighbour of point labelled 58 67 /// by ii (assumes ii is valid) 59 int NearestNeighbourIndex(const int &ii) const ;68 int NearestNeighbourIndex(const int ii) const ; 60 69 61 70 /// Returns the distance to the nearest neighbour of point labelled 62 71 /// by index ii (assumes ii is valid) 63 double NearestNeighbourDistance(const int &ii) const ;72 double NearestNeighbourDistance(const int ii) const ; 64 73 65 74 /// Returns true iff the given index corresponds to a point that 66 75 /// exists in the DNN structure (meaning that it has been added, and 67 76 /// not removed in the meantime) 68 bool Valid(const int &index) const;77 bool Valid(const int index) const; 69 78 70 79 void RemoveAndAddPoints(const std::vector<int> & indices_to_remove, … … 80 89 double phi(const int i) const; 81 90 82 91 private: 83 92 84 93 /// Structure containing a vertex_handle and cached information on … … 88 97 double NNdistance; 89 98 int NNindex; 99 int coincidence; // ==vertex->info.val() if no coincidence 100 // points to the coinciding SV in case of coincidence 90 101 // later on for cylinder put a second vertex? 91 102 }; … … 95 106 bool _verbose; 96 107 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; 99 110 100 111 Triangulation _TR; /// CGAL object for dealing with triangulations … … 111 122 /// Determines the index and distance of the nearest neighbour to 112 123 /// point j and puts the information into the _supervertex entry for j 113 void _SetNearest(const int &j);124 void _SetNearest(const int j); 114 125 115 126 //---------------------------------------------------------------------- … … 123 134 /// Note that j is NOT pushed onto indices_of_updated_neighbours -- 124 135 /// if you want it there, put it there yourself. 125 void _SetAndUpdateNearest(const int &j,136 void _SetAndUpdateNearest(const int j, 126 137 std::vector<int> & indices_of_updated_neighbours); 127 138 128 139 /// 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 134 225 }; 135 226 … … 138 229 // functions defined above 139 230 140 inline int DnnPlane::NearestNeighbourIndex(const int &ii) const {231 inline int DnnPlane::NearestNeighbourIndex(const int ii) const { 141 232 return _supervertex[ii].NNindex;} 142 233 143 inline double DnnPlane::NearestNeighbourDistance(const int &ii) const {234 inline double DnnPlane::NearestNeighbourDistance(const int ii) const { 144 235 return _supervertex[ii].NNdistance;} 145 236 146 inline bool DnnPlane::Valid(const int &index) const {237 inline bool DnnPlane::Valid(const int index) const { 147 238 if (index >= 0 && index < static_cast<int>(_supervertex.size())) { 148 239 return (_supervertex[index].vertex != NULL);} else {return false;} } -
external/fastjet/internal/DynamicNearestNeighbours.hh
rf6b6ee7 r49234af 1 // STARTHEADER2 // $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 $ 3 3 // 4 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez4 // Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 … … 37 39 #include<cassert> 38 40 #include "fastjet/internal/numconsts.hh" 41 #include "fastjet/Error.hh" 39 42 40 43 FASTJET_BEGIN_NAMESPACE // defined in fastjet/internal/base.hh … … 68 71 /// Nearest Neighbours code 69 72 /// \endif 70 class DnnError {73 class DnnError : public Error { 71 74 public: 72 75 // 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) {} 81 78 }; 82 79 … … 112 109 /// Returns the index of the nearest neighbour of point labelled 113 110 /// by ii (assumes ii is valid) 114 virtual int NearestNeighbourIndex(const int &ii) const = 0;111 virtual int NearestNeighbourIndex(const int ii) const = 0; 115 112 116 113 /// Returns the distance to the nearest neighbour of point labelled 117 114 /// 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; 119 116 120 117 /// Returns true iff the given index corresponds to a point that 121 118 /// exists in the DNN structure (meaning that it has been added, and 122 119 /// not removed in the meantime) 123 virtual bool Valid(const int &index) const = 0;120 virtual bool Valid(const int index) const = 0; 124 121 125 122 /// remove the points labelled by the std::vector indices_to_remove, and … … 141 138 /// Remove the point labelled by index and return the list of 142 139 /// points whose nearest neighbours have changed in the process 143 inline void RemovePoint (const int &index,140 inline void RemovePoint (const int index, 144 141 std::vector<int> & indices_of_updated_neighbours) { 145 142 std::vector<int> indices_added; … … 158 155 /// point). 159 156 inline void RemoveCombinedAddCombination( 160 const int & index1, const int &index2,157 const int index1, const int index2, 161 158 const EtaPhi & newpoint, 162 159 int & index3, -
external/fastjet/internal/IsBase.hh
rf6b6ee7 r49234af 1 // STARTHEADER2 // $Id: IsBase.hh 3 071 2013-04-01 12:52:46Z cacciari$1 //FJSTARTHEADER 2 // $Id: IsBase.hh 3433 2014-07-23 08:17:03Z salam $ 3 3 // 4 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez4 // Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 #ifndef __FASTJET_INTERNAL_IS_BASE_HH__ -
external/fastjet/internal/LimitedWarning.hh
rf6b6ee7 r49234af 2 2 #define __FASTJET_INTERNALLIMITEDWARNING_HH__ 3 3 4 // STARTHEADER5 // $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 $ 6 6 // 7 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez7 // Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 8 8 // 9 9 //---------------------------------------------------------------------- … … 16 16 // 17 17 // 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 19 20 // 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. 21 23 // 22 24 // FastJet is distributed in the hope that it will be useful, … … 28 30 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 29 31 //---------------------------------------------------------------------- 30 // ENDHEADER32 //FJENDHEADER 31 33 32 34 -
external/fastjet/internal/MinHeap.hh
rf6b6ee7 r49234af 1 // STARTHEADER2 // $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 $ 3 3 // 4 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez4 // Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 #ifndef __FASTJET_MINHEAP__HH__ … … 50 52 /// expansion to a maximum size max_size; 51 53 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) {} 53 59 54 60 /// constructor in which the the maximum size is the size of the values array 55 61 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 58 68 /// return the location of the minimal value on the heap 59 69 inline unsigned int minloc() const { 60 return (_heap[0].minloc) - &(_heap[0]);} ;70 return (_heap[0].minloc) - &(_heap[0]);} 61 71 62 72 /// 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;} 64 74 65 inline double operator[](int i) const {return _heap[i].value;} ;75 inline double operator[](int i) const {return _heap[i].value;} 66 76 67 77 /// remove the value at the specified location (i.e. replace it with … … 82 92 std::vector<ValueLoc> _heap; 83 93 84 void _initialise(const std::vector<double> & values);85 94 86 95 -
external/fastjet/internal/SearchTree.hh
rf6b6ee7 r49234af 1 // STARTHEADER2 // $Id: SearchTree.hh 3 107 2013-05-03 15:47:47Z salam $1 //FJSTARTHEADER 2 // $Id: SearchTree.hh 3433 2014-07-23 08:17:03Z salam $ 3 3 // 4 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez4 // Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 … … 188 190 public: 189 191 190 // so that it can access ou t_node object;192 // so that it can access our _node object; 191 193 // 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; 193 200 friend class SearchTree<T>; 194 201 -
external/fastjet/internal/Triangulation.hh
rf6b6ee7 r49234af 3 3 #define __FASTJET_TRIANGULATION__ 4 4 5 // STARTHEADER6 // $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 $ 7 7 // 8 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez8 // Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 9 9 // 10 10 //---------------------------------------------------------------------- … … 17 17 // 18 18 // 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 20 21 // 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. 22 24 // 23 25 // FastJet is distributed in the hope that it will be useful, … … 29 31 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 30 32 //---------------------------------------------------------------------- 31 // ENDHEADER33 //FJENDHEADER 32 34 33 35 -
external/fastjet/internal/Voronoi.hh
rf6b6ee7 r49234af 2 2 #define __FASTJET__VORONOI_H__ 3 3 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 9 8 // 10 9 //---------------------------------------------------------------------- 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/>. 26 31 //---------------------------------------------------------------------- 27 // ENDHEADER32 //FJENDHEADER 28 33 29 34 -
external/fastjet/internal/base.hh
rf6b6ee7 r49234af 1 1 2 // STARTHEADER3 // $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 $ 4 4 // 5 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez5 // Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 6 6 // 7 7 //---------------------------------------------------------------------- … … 14 14 // 15 15 // 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 17 18 // 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. 19 21 // 20 22 // FastJet is distributed in the hope that it will be useful, … … 26 28 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 27 29 //---------------------------------------------------------------------- 28 // ENDHEADER30 //FJENDHEADER 29 31 30 32 #ifndef __FASTJET_FASTJET_BASE_HH__ -
external/fastjet/internal/numconsts.hh
rf6b6ee7 r49234af 1 // STARTHEADER2 // $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 $ 3 3 // 4 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez4 // Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 -
external/fastjet/plugins/ATLASCone/ATLASConePlugin.cc
rf6b6ee7 r49234af 1 // STARTHEADER2 // $Id $1 //FJSTARTHEADER 2 // $Id: ATLASConePlugin.cc 3433 2014-07-23 08:17:03Z salam $ 3 3 // 4 // Copyright (c) 2007-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez4 // Copyright (c) 2007-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 // fastjet stuff -
external/fastjet/plugins/ATLASCone/fastjet/ATLASConePlugin.hh
rf6b6ee7 r49234af 1 // STARTHEADER2 // $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 $ 3 3 // 4 // Copyright (c) 2007-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez4 // Copyright (c) 2007-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 // Note on the implementation: -
external/fastjet/plugins/CDFCones/CDFJetCluPlugin.cc
rf6b6ee7 r49234af 1 // STARTHEADER2 // $Id $1 //FJSTARTHEADER 2 // $Id: CDFJetCluPlugin.cc 3433 2014-07-23 08:17:03Z salam $ 3 3 // 4 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez4 // Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 #include "fastjet/CDFJetCluPlugin.hh" -
external/fastjet/plugins/CDFCones/CDFMidPointPlugin.cc
rf6b6ee7 r49234af 1 // STARTHEADER2 // $Id $1 //FJSTARTHEADER 2 // $Id: CDFMidPointPlugin.cc 3433 2014-07-23 08:17:03Z salam $ 3 3 // 4 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez4 // Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 #include "fastjet/CDFMidPointPlugin.hh" -
external/fastjet/plugins/CDFCones/JetCluAlgorithm.cc
rf6b6ee7 r49234af 11 11 // History of changes compared to the original JetCluAlgorithm.cc file 12 12 // 13 // 2014-08-13 Matteo Cacciari and Gavin Salam 14 // * commented out towers variable in JetCluAlgorithm::buildPreClusters 15 // interface to avoid compiler warning 16 // 13 17 // 2011-11-14 Gregory Soyez <soyez@fastjet.fr> 14 18 // … … 55 59 } 56 60 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 63 void JetCluAlgorithm::buildPreClusters(std::vector<Cluster>& seedTowers, std::vector<PhysicsTower>& /*towers*/, 58 64 std::vector<Cluster>& preClusters) 59 65 { -
external/fastjet/plugins/CDFCones/MidPointAlgorithm.cc
rf6b6ee7 r49234af 11 11 // History of changes compared to the original MidPointAlgorithm.cc file 12 12 // 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 // 13 18 // 2009-01-17 Gregory Soyez <soyez@fastjet.fr> 14 19 // … … 68 73 std::vector< std::vector<bool> > distanceOK; 69 74 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++){ 71 77 distanceOK[nCluster1 - 1].resize(nCluster1); 72 78 double cluster1Rapidity = stableCones[nCluster1].fourVector.y(); 73 79 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++){ 75 82 double cluster2Rapidity = stableCones[nCluster2].fourVector.y(); 76 83 double cluster2Phi = stableCones[nCluster2].fourVector.phi(); … … 94 101 // Loop over all combinations. Calculate MidPoint. Make midPointClusters. 95 102 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++){ 97 105 // Calculate rapidity, phi and pT of MidPoint. 98 106 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++) 100 109 midPoint.add(stableCones[pairs[iPair][iPairMember]].fourVector); 101 110 iterateCone(midPoint.y(),midPoint.phi(),midPoint.pt(),towers,stableCones,reduceConeSize); … … 174 183 if(testPair.size()) 175 184 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++){ 177 187 // Is new SeedCone less than 2*_coneRadius apart from all clusters in testPair? 178 188 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++) 180 191 if(!distanceOK[nextCluster - 1][testPair[iCluster]]) 181 192 addCluster = false; … … 187 198 pairs.push_back(testPair); 188 199 // 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) 190 202 addClustersToPairs(testPair,pairs,distanceOK,maxClustersInPair); 191 203 // All combinations containing testPair found. Remove last element. -
external/fastjet/plugins/CDFCones/fastjet/CDFJetCluPlugin.hh
rf6b6ee7 r49234af 1 // STARTHEADER2 // $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 $ 3 3 // 4 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez4 // Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 #ifndef __CDFJETCLUPLUGIN_HH__ -
external/fastjet/plugins/CDFCones/fastjet/CDFMidPointPlugin.hh
rf6b6ee7 r49234af 1 // STARTHEADER2 // $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 $ 3 3 // 4 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez4 // Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 #ifndef __CDFMIDPOINTPLUGIN_HH__ -
external/fastjet/plugins/CMSIterativeCone/CMSIterativeConePlugin.cc
rf6b6ee7 r49234af 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 6 5 // 7 6 //---------------------------------------------------------------------- 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/>. 35 28 //---------------------------------------------------------------------- 36 // ENDHEADER29 //FJENDHEADER 37 30 38 31 // List of changes compared to the original CMS code (revision 1.14 of -
external/fastjet/plugins/CMSIterativeCone/fastjet/CMSIterativeConePlugin.hh
rf6b6ee7 r49234af 1 // STARTHEADER1 //FJSTARTHEADER 2 2 // $Id: CMSIterativeConePlugin.hh 1508 2009-04-10 22:46:49Z soyez $ 3 3 // 4 // Copyright (c) 2007-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez4 // Copyright (c) 2007-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 #ifndef __CMSITERATIVECONEPLUGIN_HH__ -
external/fastjet/plugins/D0RunICone/D0RunIBaseConePlugin.cc
rf6b6ee7 r49234af 1 // STARTHEADER2 // $Id $3 // 4 // Copyright (c) 2009-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez1 //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 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 // D0 stuff -
external/fastjet/plugins/D0RunICone/fastjet/D0RunIBaseConePlugin.hh
rf6b6ee7 r49234af 2 2 #define __D0RUNIBASECONEPLUGIN_HH__ 3 3 4 // STARTHEADER4 //FJSTARTHEADER 5 5 // $Id: D0RunIBaseConePlugin.hh 1778 2010-10-25 10:02:58Z soyez $ 6 6 // 7 // Copyright (c) 2009-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez7 // Copyright (c) 2009-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 8 8 // 9 9 //---------------------------------------------------------------------- … … 16 16 // 17 17 // 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 19 20 // 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. 21 23 // 22 24 // FastJet is distributed in the hope that it will be useful, … … 28 30 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 29 31 //---------------------------------------------------------------------- 30 // ENDHEADER32 //FJENDHEADER 31 33 32 34 #include "fastjet/JetDefinition.hh" -
external/fastjet/plugins/D0RunICone/fastjet/D0RunIConePlugin.hh
rf6b6ee7 r49234af 2 2 #define __D0RUNICONEPLUGIN_HH__ 3 3 4 // STARTHEADER4 //FJSTARTHEADER 5 5 // $Id: D0RunIConePlugin.hh 1778 2010-10-25 10:02:58Z soyez $ 6 6 // 7 // Copyright (c) 2009-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez7 // Copyright (c) 2009-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 8 8 // 9 9 //---------------------------------------------------------------------- … … 16 16 // 17 17 // 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 19 20 // 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. 21 23 // 22 24 // FastJet is distributed in the hope that it will be useful, … … 28 30 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 29 31 //---------------------------------------------------------------------- 30 // ENDHEADER32 //FJENDHEADER 31 33 34 #include "fastjet/internal/base.hh" // namespace macros (include explicitly to help Doxygen) 32 35 #include "D0RunIBaseConePlugin.hh" 33 36 -
external/fastjet/plugins/D0RunICone/fastjet/D0RunIpre96ConePlugin.hh
rf6b6ee7 r49234af 2 2 #define __D0RUNIPRE96CONEPLUGIN_HH__ 3 3 4 // STARTHEADER4 //FJSTARTHEADER 5 5 // $Id: D0RunIpre96ConePlugin.hh 1778 2010-10-25 10:02:58Z soyez $ 6 6 // 7 // Copyright (c) 2009-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez7 // Copyright (c) 2009-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 8 8 // 9 9 //---------------------------------------------------------------------- … … 16 16 // 17 17 // 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 19 20 // 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. 21 23 // 22 24 // FastJet is distributed in the hope that it will be useful, … … 28 30 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 29 31 //---------------------------------------------------------------------- 30 // ENDHEADER32 //FJENDHEADER 31 33 34 #include "fastjet/internal/base.hh" // namespace macros (include explicitly to help Doxygen) 32 35 #include "D0RunIBaseConePlugin.hh" 33 36 -
external/fastjet/plugins/D0RunIICone/D0RunIIConePlugin.cc
rf6b6ee7 r49234af 1 // STARTHEADER2 // $Id $1 //FJSTARTHEADER 2 // $Id: D0RunIIConePlugin.cc 3433 2014-07-23 08:17:03Z salam $ 3 3 // 4 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez4 // Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 #include "fastjet/D0RunIIConePlugin.hh" -
external/fastjet/plugins/D0RunIICone/ILConeAlgorithm.hpp
rf6b6ee7 r49234af 49 49 // 50 50 // 2012-06-12 Gregory Soyez <soyez@fastjet.fr> 51 //52 51 // * Replaced addItem(...) by this->addItem(...) to allow 53 52 // compilation with gcc 4.7 which no longer performs -
external/fastjet/plugins/D0RunIICone/fastjet/D0RunIIConePlugin.hh
rf6b6ee7 r49234af 2 2 #define __D0RUNIICONEPLUGIN_HH__ 3 3 4 // STARTHEADER5 // $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 $ 6 6 // 7 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez7 // Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 8 8 // 9 9 //---------------------------------------------------------------------- … … 16 16 // 17 17 // 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 19 20 // 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. 21 23 // 22 24 // FastJet is distributed in the hope that it will be useful, … … 28 30 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 29 31 //---------------------------------------------------------------------- 30 // ENDHEADER32 //FJENDHEADER 31 33 32 34 #include "fastjet/JetDefinition.hh" -
external/fastjet/plugins/EECambridge/EECambridgePlugin.cc
rf6b6ee7 r49234af 1 // STARTHEADER2 // $Id $1 //FJSTARTHEADER 2 // $Id: EECambridgePlugin.cc 3433 2014-07-23 08:17:03Z salam $ 3 3 // 4 // Copyright (c) 2007-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez4 // Copyright (c) 2007-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 // fastjet stuff -
external/fastjet/plugins/EECambridge/fastjet/EECambridgePlugin.hh
rf6b6ee7 r49234af 2 2 #define __EECAMBRIDGEPLUGIN_HH__ 3 3 4 // STARTHEADER5 // $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 $ 6 6 // 7 // Copyright (c) 200 9, Matteo Cacciari, GavinSalam and Gregory Soyez7 // Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 8 8 // 9 9 //---------------------------------------------------------------------- … … 16 16 // 17 17 // 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 19 20 // 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. 21 23 // 22 24 // FastJet is distributed in the hope that it will be useful, … … 28 30 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 29 31 //---------------------------------------------------------------------- 30 // ENDHEADER32 //FJENDHEADER 31 33 32 34 … … 82 84 virtual bool exclusive_sequence_meaningful() const {return true;} 83 85 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 84 90 private: 85 91 double _ycut; -
external/fastjet/plugins/GridJet/GridJetPlugin.cc
rf6b6ee7 r49234af 1 // STARTHEADER2 // $Id $3 // 4 // Copyright (c) 20 11, Matteo Cacciari, GavinSalam and Gregory Soyez1 //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 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 // fastjet stuff … … 43 45 double requested_grid_spacing, 44 46 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 45 51 _ymin(-ymax), _ymax(ymax), 46 52 _requested_grid_spacing(requested_grid_spacing) , … … 49 55 setup_grid(); 50 56 } 51 57 #endif 58 59 #ifdef FASTJET_GRIDJET_USEFJGRID 60 GridJetPlugin::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 52 69 void GridJetPlugin::setup_grid() { 53 70 // since we've exchanged the arguments of the constructor, … … 69 86 } 70 87 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 //---------------------------------------------------------------------- 89 int GridJetPlugin::tile_index(const PseudoJet & p) const { 89 90 // directly taking int does not work for values between -1 and 0 90 91 // so use floor instead … … 108 109 return igrid_res; 109 110 } 111 #endif // not FASTJET_GRIDJET_USEFJGRID 112 113 114 //---------------------------------------------------------------------- 115 string 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 //---------------------------------------------------------------------- 131 double GridJetPlugin::R() const {return sqrt(drap()*dphi()/pi);} 110 132 111 133 … … 117 139 // * a number >= 0 will mean that particle indicated by the index 118 140 // is currently the jet on the grid 119 vector<int> grid( _ntotal, -1);141 vector<int> grid(n_tiles(), -1); 120 142 121 143 int nparticles = cs.jets().size(); … … 126 148 // combine particles with whatever is in the grid 127 149 for (int i = 0; i < nparticles; i++) { 128 int igrd = igrid(cs.jets()[i]);150 int igrd = tile_index(cs.jets()[i]); 129 151 //cout << i << " " << cs.jets()[i].rap() << " " << cs.jets()[i].phi() 130 152 // << " " << igrd << " " << grid.size() << " " << _ntotal << endl; 131 153 if (igrd < 0) continue; 132 assert(igrd <= _ntotal);154 assert(igrd <= n_tiles()); 133 155 if (grid[igrd] == -1) { 134 156 grid[igrd] = i; // jet index of initial particle i is i … … 145 167 // make the final jets via iB recombinations 146 168 for (unsigned igrd = 0; igrd < grid.size(); igrd++) { 147 if (grid[igrd] != -1 ) cs.plugin_record_iB_recombination(grid[igrd],148 169 if (grid[igrd] != -1 && tile_is_good(igrd)) 170 cs.plugin_record_iB_recombination(grid[igrd], dij_or_diB); 149 171 } 150 172 } else { -
external/fastjet/plugins/GridJet/fastjet/GridJetPlugin.hh
rf6b6ee7 r49234af 1 #ifndef __ GRIDJETPLUGIN_HH__2 #define __ GRIDJETPLUGIN_HH__1 #ifndef __FASTJET_GRIDJETPLUGIN_HH__ 2 #define __FASTJET_GRIDJETPLUGIN_HH__ 3 3 4 // STARTHEADER4 //FJSTARTHEADER 5 5 // $Id: GridJetPlugin.hh 2267 2011-06-20 15:10:23Z salam $ 6 6 // 7 // Copyright (c) 20 11, Matteo Cacciari, GavinSalam and Gregory Soyez7 // Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 8 8 // 9 9 //---------------------------------------------------------------------- … … 16 16 // 17 17 // 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 19 20 // 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. 21 23 // 22 24 // FastJet is distributed in the hope that it will be useful, … … 28 30 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 29 31 //---------------------------------------------------------------------- 30 // ENDHEADER32 //FJENDHEADER 31 33 32 34 33 35 #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 34 44 35 45 FASTJET_BEGIN_NAMESPACE // defined in fastjet/internal/base.hh … … 49 59 /// but is rather provided for comparison purposes with the 50 60 /// GridMedianBackgroundEstimator (which is even faster). 51 class GridJetPlugin : public JetDefinition::Plugin { 61 class GridJetPlugin : public JetDefinition::Plugin 62 #ifdef FASTJET_GRIDJET_USEFJGRID 63 , RectangularGrid 64 #endif 65 { 52 66 public: 53 /// Mainconstructor for the GridJetPlugin Plugin class.67 /// Basic constructor for the GridJetPlugin Plugin class. 54 68 /// 55 69 /// \param ymax The maximal rapidity extent of the grid … … 62 76 const JetDefinition & post_jet_def = JetDefinition()); 63 77 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 // } 68 97 69 98 // the things that are required by base class … … 75 104 virtual double R() const; 76 105 106 // As of FastJet 3.1 the following functions become available through 107 // the underlying RectangularGrid class. 108 #ifndef FASTJET_GRIDJET_USEFJGRID 77 109 /// returns the actual rapidity spacing of the grid 78 110 double drap() const {return _dy;} … … 83 115 /// returns the maximum rapidity of the grid 84 116 double rapmax() const {return _ymax;} 117 #endif 85 118 86 119 private: 87 120 121 #ifndef FASTJET_GRIDJET_USEFJGRID 88 122 void setup_grid(); 89 123 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;} 91 129 92 130 double _ymin, _ymax, _dy, _dphi, _requested_grid_spacing; 93 131 int _ny, _nphi, _ntotal; 132 #endif 94 133 95 134 JetDefinition _post_jet_def; … … 99 138 FASTJET_END_NAMESPACE // defined in fastjet/internal/base.hh 100 139 101 #endif // __ GRIDJETPLUGIN_HH__140 #endif // __FASTJET_GRIDJETPLUGIN_HH__ 102 141 -
external/fastjet/plugins/Jade/JadePlugin.cc
rf6b6ee7 r49234af 1 // STARTHEADER2 // $Id $1 //FJSTARTHEADER 2 // $Id: JadePlugin.cc 3433 2014-07-23 08:17:03Z salam $ 3 3 // 4 // Copyright (c) 2007-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez4 // Copyright (c) 2007-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 // fastjet stuff -
external/fastjet/plugins/Jade/fastjet/JadePlugin.hh
rf6b6ee7 r49234af 2 2 #define __JADEPLUGIN_HH__ 3 3 4 // STARTHEADER5 // $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 $ 6 6 // 7 // Copyright (c) 200 9, Matteo Cacciari, GavinSalam and Gregory Soyez7 // Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 8 8 // 9 9 //---------------------------------------------------------------------- … … 16 16 // 17 17 // 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 19 20 // 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. 21 23 // 22 24 // FastJet is distributed in the hope that it will be useful, … … 28 30 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 29 31 //---------------------------------------------------------------------- 30 // ENDHEADER32 //FJENDHEADER 31 33 32 34 #include "fastjet/JetDefinition.hh" -
external/fastjet/plugins/NestedDefs/NestedDefsPlugin.cc
rf6b6ee7 r49234af 1 // STARTHEADER2 // $Id $1 //FJSTARTHEADER 2 // $Id: NestedDefsPlugin.cc 3433 2014-07-23 08:17:03Z salam $ 3 3 // 4 // Copyright (c) 2007-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez4 // Copyright (c) 2007-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 // TODO -
external/fastjet/plugins/NestedDefs/fastjet/NestedDefsPlugin.hh
rf6b6ee7 r49234af 1 // STARTHEADER2 // $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 $ 3 3 // 4 // Copyright (c) 2007-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez4 // Copyright (c) 2007-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 #ifndef __NESTEDALGSPLUGIN_HH__ -
external/fastjet/plugins/SISCone/SISConePlugin.cc
rf6b6ee7 r49234af 21 21 four_vector.E); 22 22 } 23 24 //====================================================================== 25 // wrap-up around siscone's user-defined scales 26 namespace siscone_plugin_internal{ 27 /// @ingroup internal 28 /// \class SISConeUserScale 29 /// class that makes the transition between the internal SISCone 30 /// user-defined scale choice (using SISCone's Cjet) and 31 /// user-defined scale choices in the plugn above (using FastJet's 32 /// PseudoJets) 33 class SISConeUserScale : public siscone::Csplit_merge::Cuser_scale_base{ 34 public: 35 /// ctor takes the "fastjet-style" user-defined scale as well as a 36 /// reference to the current cluster sequence (to access the 37 /// particles if needed) 38 SISConeUserScale(const SISConePlugin::UserScaleBase *user_scale, 39 const ClusterSequence &cs) 40 : _user_scale(user_scale), _cs(cs){} 41 42 /// returns the scale associated to a given jet 43 virtual double operator()(const siscone::Cjet &jet) const{ 44 return _user_scale->result(_build_PJ_from_Cjet(jet)); 45 } 46 47 /// returns true id the scasle associated to jet a is larger than 48 /// the scale associated to jet b 49 virtual bool is_larger(const siscone::Cjet &a, const siscone::Cjet &b) const{ 50 return _user_scale->is_larger(_build_PJ_from_Cjet(a), _build_PJ_from_Cjet(b)); 51 } 52 53 private: 54 /// constructs a PseudoJet from a siscone::Cjet 55 /// 56 /// Note that it is tempting to overload the PseudoJet ctor. This 57 /// would not work because down the line we need to access the 58 /// original PseudoJet through the ClusterSequence and therefore 59 /// the PseudoJet structure needs to be aware of the 60 /// ClusterSequence. 61 PseudoJet _build_PJ_from_Cjet(const siscone::Cjet &jet) const{ 62 PseudoJet j(jet.v.px, jet.v.py, jet.v.pz, jet.v.E); 63 j.set_structure_shared_ptr(SharedPtr<PseudoJetStructureBase>( 64 new SISConePlugin::UserScaleBaseStructureType<siscone::Cjet>(jet,_cs))); 65 return j; 66 } 67 68 const SISConePlugin::UserScaleBase *_user_scale; 69 const ClusterSequence & _cs; 70 }; 71 } 72 73 // end of the internal material 74 //====================================================================== 23 75 24 76 … … 45 97 desc << "SISCone jet algorithm with " ; 46 98 desc << "cone_radius = " << cone_radius () << ", "; 47 desc << "overlap_threshold = " << overlap_threshold () << ", "; 99 if (_progressive_removal) 100 desc << "progressive-removal mode, "; 101 else 102 desc << "overlap_threshold = " << overlap_threshold () << ", "; 48 103 desc << "n_pass_max = " << n_pass_max () << ", "; 49 104 desc << "protojet_ptmin = " << protojet_ptmin() << ", "; 50 desc << sm_scale_string << ", "; 51 desc << "caching turned " << (caching() ? on : off); 52 desc << ", SM stop scale = " << _split_merge_stopping_scale; 105 if (_progressive_removal && _user_scale) { 106 desc << "using a user-defined scale for ordering of stable cones"; 107 string user_scale_desc = _user_scale->description(); 108 if (user_scale_desc != "") desc << " (" << user_scale_desc << ")"; 109 } else { 110 desc << sm_scale_string; 111 } 112 if (!_progressive_removal){ 113 desc << ", caching turned " << (caching() ? on : off); 114 desc << ", SM stop scale = " << _split_merge_stopping_scale; 115 } 53 116 54 117 // add a note to the description if we use the pt-weighted splitting … … 85 148 bool new_siscone = true; // by default we'll be running it 86 149 87 if (caching() ) {150 if (caching() && !_progressive_removal) { 88 151 89 152 // Establish if we have a cached run with the same R, npass and … … 138 201 // run the jet finding 139 202 //cout << "plg sms: " << split_merge_scale() << endl; 140 siscone->compute_jets(siscone_momenta, cone_radius(), overlap_threshold(), 141 n_pass_max(), protojet_or_ghost_ptmin(), 142 Esplit_merge_scale(split_merge_scale())); 203 if (_progressive_removal){ 204 // handle the optional user-defined scale choice 205 SharedPtr<siscone_plugin_internal::SISConeUserScale> internal_scale; 206 if (_user_scale){ 207 internal_scale.reset(new siscone_plugin_internal::SISConeUserScale(_user_scale, clust_seq)); 208 siscone->set_user_scale(internal_scale.get()); 209 } 210 siscone->compute_jets_progressive_removal(siscone_momenta, cone_radius(), 211 n_pass_max(), protojet_or_ghost_ptmin(), 212 Esplit_merge_scale(split_merge_scale())); 213 } else { 214 siscone->compute_jets(siscone_momenta, cone_radius(), overlap_threshold(), 215 n_pass_max(), protojet_or_ghost_ptmin(), 216 Esplit_merge_scale(split_merge_scale())); 217 } 143 218 } else { 144 219 // rerun the jet finding … … 155 230 SISConeExtras * extras = new SISConeExtras(n); 156 231 232 // the ordering in which the inclusive jets are transfered here is 233 // deliberate and ensures that when a user asks for 234 // inclusive_jets(), they are provided in the order in which SISCone 235 // created them. 157 236 for (int ijet = njet-1; ijet >= 0; ijet--) { 158 237 const Cjet & jet = siscone->jets[ijet]; // shorthand … … 207 286 208 287 // give the extras object to the cluster sequence. 209 clust_seq.plugin_associate_extras(std::auto_ptr<ClusterSequence::Extras>(extras)); 288 // 289 // As of v3.1 of FastJet, extras are automatically owned (as 290 // SharedPtr) by the ClusterSequence and auto_ptr is deprecated. So 291 // we can use a simple pointer here 292 //clust_seq.plugin_associate_extras(std::auto_ptr<ClusterSequence::Extras>(extras)); 293 clust_seq.plugin_associate_extras(extras); 210 294 } 211 295 … … 215 299 } 216 300 301 // //====================================================================== 302 // // material to handle user-defined scales 303 // 304 // //-------------------------------------------------- 305 // // SISCone structure type 306 // 307 // // the textual descripotion 308 // std::string SISConePlugin::UserScaleBase::StructureType::description() const{ 309 // return "PseudoJet wrapping a siscone::Cjet stable cone"; 310 // } 311 // 312 // // retrieve the constituents 313 // // 314 // // if you simply need to iterate over the constituents, it will be 315 // // faster to access them via constituent(i) 316 // vector<PseudoJet> SISConePlugin::UserScaleBase::StructureType::constituents(const PseudoJet &) const{ 317 // vector<PseudoJet> constits; 318 // constits.reserve(_jet.n); 319 // for (unsigned int i=0; i<(unsigned int)_jet.n;i++) 320 // constits.push_back(constituent(i)); 321 // return constits; 322 // } 323 // 324 // // returns the number of constituents 325 // unsigned int SISConePlugin::UserScaleBase::StructureType::size() const{ 326 // return _jet.n; 327 // } 328 // 329 // // returns the index (in the original particle list) of the ith 330 // // constituent 331 // int SISConePlugin::UserScaleBase::StructureType::constituent_index(unsigned int i) const{ 332 // return _jet.contents[i]; 333 // } 334 // 335 // // returns the ith constituent (as a PseusoJet) 336 // const PseudoJet & SISConePlugin::UserScaleBase::StructureType::constituent(unsigned int i) const{ 337 // return _cs.jets()[_jet.contents[i]]; 338 // } 339 // 340 // // returns the scalar pt of this stable cone 341 // double SISConePlugin::UserScaleBase::StructureType::pt_tilde() const{ 342 // return _jet.pt_tilde; 343 // } 344 // 345 // // returns the sm_var2 (signed ordering variable squared) for this stable cone 346 // double SISConePlugin::UserScaleBase::StructureType::ordering_var2() const{ 347 // return _jet.sm_var2; 348 // } 349 350 217 351 FASTJET_END_NAMESPACE // defined in fastjet/internal/base.hh -
external/fastjet/plugins/SISCone/area.cc
rf6b6ee7 r49234af 22 22 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // 23 23 // // 24 // $Revision:: 25 // $Date:: 24 // $Revision:: 149 $// 25 // $Date:: 2007-03-15 00:13:58 +0100 (Thu, 15 Mar 2007) $// 26 26 /////////////////////////////////////////////////////////////////////////////// 27 27 -
external/fastjet/plugins/SISCone/area.h
rf6b6ee7 r49234af 22 22 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // 23 23 // // 24 // $Revision:: 25 // $Date:: 24 // $Revision:: 149 $// 25 // $Date:: 2007-03-15 00:13:58 +0100 (Thu, 15 Mar 2007) $// 26 26 /////////////////////////////////////////////////////////////////////////////// 27 27 -
external/fastjet/plugins/SISCone/circulator.h
rf6b6ee7 r49234af 22 22 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // 23 23 // // 24 // $Revision:: 25 // $Date:: 24 // $Revision:: 103 $// 25 // $Date:: 2007-02-18 17:07:34 +0100 (Sun, 18 Feb 2007) $// 26 26 /////////////////////////////////////////////////////////////////////////////// 27 27 -
external/fastjet/plugins/SISCone/config.h
rf6b6ee7 r49234af 49 49 50 50 /* Define to the full name and version of this package. */ 51 #define PACKAGE_STRING "SISCone 2.0.6"51 #define PACKAGE_STRING "SISCone 3.0.0" 52 52 53 53 /* Define to the one symbol short name of this package. */ … … 58 58 59 59 /* Define to the version of this package. */ 60 #define PACKAGE_VERSION " 2.0.6"60 #define PACKAGE_VERSION "3.0.0" 61 61 62 62 /* Define to 1 if you have the ANSI C header files. */ … … 64 64 65 65 /* Version number of package */ 66 #define VERSION " 2.0.6"66 #define VERSION "3.0.0" -
external/fastjet/plugins/SISCone/defines.h
rf6b6ee7 r49234af 22 22 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // 23 23 // // 24 // $Revision:: 25 // $Date:: 24 // $Revision:: 225 $// 25 // $Date:: 2008-05-20 16:59:47 +0200 (Tue, 20 May 2008) $// 26 26 /////////////////////////////////////////////////////////////////////////////// 27 27 -
external/fastjet/plugins/SISCone/fastjet/SISConeBasePlugin.hh
rf6b6ee7 r49234af 43 43 SISConeBasePlugin (){ 44 44 _use_jet_def_recombiner = false; 45 set_progressive_removal(false); 45 46 } 46 47 … … 49 50 *this = plugin; 50 51 } 52 53 /// set whether to use SISCone with progressive removal instead of 54 /// the default split_merge step. 55 /// 56 /// If progressive removal is enabled, the following SISCone 57 /// variables are not used: 58 /// 59 /// - overlap_threshold 60 /// - caching 61 /// - split_merge_stopping_scale 62 /// 63 /// The split_merge_scale choice is reinterpreted as the ordering 64 /// variable for progressive removal. It is also possible for the 65 /// user to supply his/her own function for the scale that orders 66 /// progressive removal, with set_user_scale(...) 67 void set_progressive_removal(bool progressive_removal_in=true){ 68 _progressive_removal = progressive_removal_in; 69 } 70 71 /// returns true if progressive_removal is enabled 72 bool progressive_removal() const{ return _progressive_removal;} 51 73 52 74 /// the cone radius … … 105 127 } 106 128 129 // user-defined scale for progressive removal 130 //------------------------------------------------------------ 131 132 /// \class UserScaleBase 133 /// base class for user-defined ordering of stable cones (used for 134 /// prorgessive removal) 135 /// 136 /// derived classes have to implement the () operator that returns 137 /// the scale associated with a given jet. 138 /// 139 /// It is also highly recommended to implement the is_larger() 140 /// method whenever possible, in order to avoid rounding issues 141 /// known to lead to possible infrared unsafeties. 142 /// 143 /// The jets that are passed to this class will carry the structure 144 /// of type SISConePlugin::StructureType which allows to retreive 145 /// easily the following information: 146 /// 147 /// vector<PseudoJet> constituents = jet.constituents(); 148 /// unsigned int n_constituents = jet.structure_of<SISConePlugin::UserScaleBase>().size(); 149 /// int index = jet.structure_of<SISConePlugin::UserScaleBase>().constituent_index(index i); 150 /// const PseudoJet & p = jet.structure_of<SISConePlugin::UserScaleBase>().constituent(index i); 151 /// double scalar_pt = jet.structure_of<SISConePlugin::UserScaleBase>().pt_tilde(); 152 /// 153 /// see SISConePlugin::StructureType below for further details 154 class UserScaleBase : public FunctionOfPseudoJet<double>{ 155 public: 156 /// empty virtual dtor 157 virtual ~UserScaleBase(){} 158 159 /// returns the scale associated with a given jet 160 /// 161 /// "progressive removal" iteratively removes the stable cone with 162 /// the largest scale 163 virtual double result(const PseudoJet & jet) const = 0; 164 165 /// returns true when the scale associated with jet a is larger than 166 /// the scale associated with jet b 167 /// 168 /// By default this does a simple direct comparison but it can be 169 /// overloaded for higher precision [recommended if possible] 170 virtual bool is_larger(const PseudoJet & a, const PseudoJet & b) const; 171 172 class StructureType; // defined below 173 }; 174 175 // template class derived from UserScaleBase::StryctureType that 176 // works for both SISCone jet classes 177 // implemented below 178 template<class Tjet> 179 class UserScaleBaseStructureType; 180 181 /// set a user-defined scale for stable-cone ordering in 182 /// progressive removal 183 void set_user_scale(const UserScaleBase *user_scale_in){ _user_scale = user_scale_in;} 184 185 /// returns the user-defined scale in use (0 if none) 186 const UserScaleBase * user_scale() const{ return _user_scale;} 187 188 107 189 // the things that one MUST overload required by base class 108 190 //--------------------------------------------------------- … … 120 202 double _split_merge_stopping_scale; 121 203 bool _use_jet_def_recombiner; 204 bool _progressive_removal; 122 205 123 206 mutable double _ghost_sep_scale; … … 126 209 /// call the re-clustering itself 127 210 virtual void reset_stored_plugin() const =0; 211 212 const UserScaleBase * _user_scale; 128 213 129 214 }; … … 185 270 inline SISConeBaseExtras::~SISConeBaseExtras(){} 186 271 272 //---------------------------------------------------------------------- 273 // implementation of the structure type associated with the UserScaleBase class 274 275 /// \class SISConeBasePlugin::UserScaleBase::StructureType 276 /// the structure that allows to store the information contained 277 /// into a siscone::Cjet (built internally in SISCone from a stable 278 /// cone) into a PseudoJet 279 class SISConeBasePlugin::UserScaleBase::StructureType : public PseudoJetStructureBase { 280 public: 281 /// base ctor (constructed from a ClusterSequence tin order to have 282 /// access to the initial particles 283 StructureType(const ClusterSequence &cs) 284 : _cs(cs){} 285 286 /// empty virtual dtor 287 virtual ~StructureType(){} 288 289 //-------------------------------------------------- 290 // members inherited from the base class 291 /// the textual descripotion 292 virtual std::string description() const{ 293 return "PseudoJet wrapping a siscone jet from a stable cone"; 294 } 295 296 /// this structure has constituents 297 virtual bool has_constituents() const {return true;} 298 299 /// retrieve the constituents 300 /// 301 /// if you simply need to iterate over the constituents, it will be 302 /// faster to access them via constituent(i) 303 virtual std::vector<PseudoJet> constituents(const PseudoJet & /*reference*/) const{ 304 std::vector<PseudoJet> constits; 305 constits.reserve(size()); 306 for (unsigned int i=0; i<size();i++) 307 constits.push_back(constituent(i)); 308 return constits; 309 } 310 311 //-------------------------------------------------- 312 // additional information relevant for this structure 313 314 /// returns the number of constituents 315 virtual unsigned int size() const = 0; 316 317 /// returns the index (in the original particle list) of the ith 318 /// constituent 319 virtual int constituent_index(unsigned int i) const = 0; 320 321 /// returns the ith constituent (as a PseusoJet) 322 const PseudoJet & constituent(unsigned int i) const{ 323 return _cs.jets()[constituent_index(i)]; 324 } 325 326 // /// returns the scalar pt of this stable cone 327 // virtual double pt_tilde() const = 0; 328 329 /// returns the sm_var2 (signed ordering variable squared) for this stable cone 330 virtual double ordering_var2() const = 0; 331 332 protected: 333 const ClusterSequence &_cs; ///< a reference to the CS (for access to the particles) 334 }; 335 336 337 ///@ingroup internal 338 /// template class derived from UserScaleBase::StryctureType that 339 /// works for both SISCone jet classes 340 /// implemented below 341 template<class Tjet> 342 class SISConeBasePlugin::UserScaleBaseStructureType : public UserScaleBase::StructureType{ 343 public: 344 UserScaleBaseStructureType(const Tjet &jet, const ClusterSequence &cs) 345 : UserScaleBase::StructureType(cs), _jet(jet){} 346 347 /// empty virtual dtor 348 virtual ~UserScaleBaseStructureType(){} 349 350 //-------------------------------------------------- 351 // additional information relevant for this structure 352 353 /// returns the number of constituents 354 virtual unsigned int size() const{ 355 return _jet.n; 356 } 357 358 /// returns the index (in the original particle list) of the ith 359 /// constituent 360 virtual int constituent_index(unsigned int i) const{ 361 return _jet.contents[i]; 362 } 363 364 // /// returns the scalar pt of this stable cone 365 // virtual double pt_tilde() const{ 366 // return _jet.pt_tilde; 367 // } 368 369 /// returns the sm_var2 (signed ordering variable squared) for this stable cone 370 virtual double ordering_var2() const{ 371 return _jet.sm_var2; 372 } 373 374 protected: 375 const Tjet &_jet; ///< a reference to the internal jet in SISCone 376 }; 377 187 378 188 379 FASTJET_END_NAMESPACE // defined in fastjet/internal/base.hh -
external/fastjet/plugins/SISCone/fastjet/SISConePlugin.hh
rf6b6ee7 r49234af 7 7 namespace siscone{ 8 8 class Csiscone; 9 class Cjet; 9 10 } 10 11 … … 74 75 /// enum for the different split-merge scale choices; 75 76 /// Note that order _must_ be the same as in siscone 76 enum SplitMergeScale {SM_pt, ///< transverse momentum (E-scheme), IR unsafe 77 SM_Et, ///< transverse energy (E-scheme), not long. boost invariant 78 ///< original run-II choice [may not be implemented] 79 SM_mt, ///< transverse mass (E-scheme), IR safe except 80 ///< in decays of two identical narrow heavy particles 81 SM_pttilde ///< pt-scheme pt = \sum_{i in jet} |p_{ti}|, should 82 ///< be IR safe in all cases 77 enum SplitMergeScale { 78 SM_pt, ///< transverse momentum (E-scheme), IR unsafe 79 SM_Et, ///< transverse energy (E-scheme), not long. boost invariant 80 ///< original run-II choice [may not be implemented] 81 SM_mt, ///< transverse mass (E-scheme), IR safe except 82 ///< in decays of two identical narrow heavy particles 83 SM_pttilde ///< pt-scheme pt = \sum_{i in jet} |p_{ti}|, should 84 ///< be IR safe in all cases 83 85 }; 84 86 … … 108 110 _split_merge_stopping_scale = split_merge_stopping_scale_in; 109 111 _ghost_sep_scale = 0.0; 110 _use_pt_weighted_splitting = false;} 112 _use_pt_weighted_splitting = false; 113 _user_scale = 0;} 111 114 112 115 … … 125 128 _split_merge_stopping_scale = 0.0; 126 129 _split_merge_scale = split_merge_on_transverse_mass_in ? SM_mt : SM_pttilde; 127 _ghost_sep_scale = 0.0;} 130 _ghost_sep_scale = 0.0; 131 _user_scale = 0;} 128 132 129 133 /// backwards compatible constructor for the SISCone Plugin class … … 141 145 _split_merge_stopping_scale = 0.0; 142 146 _ghost_sep_scale = 0.0; 143 _use_pt_weighted_splitting = false;} 147 _use_pt_weighted_splitting = false; 148 _user_scale = 0;} 144 149 145 150 /// minimum pt for a protojet to be considered in the split-merge step … … 191 196 }; 192 197 198 199 /////\class SISConePlugin::UserScaleBase::StructureType 200 ///// the structure that allows to store the information contained 201 ///// into a siscone::Cjet (built internally in SISCone from a stable 202 ///// cone) into a PseudoJet 203 //class SISConePlugin::UserScaleBase::StructureType : public PseudoJetStructureBase { 204 //public: 205 // StructureType(const siscone::Cjet & jet, const ClusterSequence &cs) 206 // : _jet(jet), _cs(cs){} 207 // 208 // //-------------------------------------------------- 209 // // members inherited from the base class 210 // /// the textual descripotion 211 // virtual std::string description() const; 212 // 213 // /// this structure has constituents 214 // virtual bool has_constituents() const {return true;} 215 // 216 // /// retrieve the constituents 217 // /// 218 // /// if you simply need to iterate over the constituents, it will be 219 // /// faster to access them via constituent(i) 220 // virtual std::vector<PseudoJet> constituents(const PseudoJet & /*reference*/) const; 221 // 222 // //-------------------------------------------------- 223 // // additional information relevant for this structure 224 // 225 // /// returns the number of constituents 226 // unsigned int size() const; 227 // 228 // /// returns the index (in the original particle list) of the ith 229 // /// constituent 230 // int constituent_index(unsigned int i) const; 231 // 232 // /// returns the ith constituent (as a PseusoJet) 233 // const PseudoJet & constituent(unsigned int i) const; 234 // 235 // /// returns the scalar pt of this stable cone 236 // double pt_tilde() const; 237 // 238 // /// returns the sm_var2 (signed ordering variable squared) for this stable cone 239 // double ordering_var2() const; 240 // 241 //protected: 242 // const siscone::Cjet &_jet; ///< a dreference to the internal jet in SISCone 243 // const ClusterSequence &_cs; ///< a reference to the CS (for access to the particles) 244 //}; 193 245 194 246 //====================================================================== -
external/fastjet/plugins/SISCone/fastjet/SISConeSphericalPlugin.hh
rf6b6ee7 r49234af 152 152 virtual void run_clustering(ClusterSequence &) const ; 153 153 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 154 158 protected: 155 159 virtual void reset_stored_plugin() const; -
external/fastjet/plugins/SISCone/geom_2d.cc
rf6b6ee7 r49234af 21 21 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // 22 22 // // 23 // $Revision:: 24 // $Date:: 23 // $Revision:: 171 $// 24 // $Date:: 2007-06-19 16:26:05 +0200 (Tue, 19 Jun 2007) $// 25 25 /////////////////////////////////////////////////////////////////////////////// 26 26 -
external/fastjet/plugins/SISCone/geom_2d.h
rf6b6ee7 r49234af 22 22 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // 23 23 // // 24 // $Revision:: 25 // $Date:: 24 // $Revision:: 268 $// 25 // $Date:: 2009-03-12 21:24:16 +0100 (Thu, 12 Mar 2009) $// 26 26 /////////////////////////////////////////////////////////////////////////////// 27 27 -
external/fastjet/plugins/SISCone/hash.cc
rf6b6ee7 r49234af 21 21 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // 22 22 // // 23 // $Revision:: 24 // $Date:: 23 // $Revision:: 225 $// 24 // $Date:: 2008-05-20 16:59:47 +0200 (Tue, 20 May 2008) $// 25 25 /////////////////////////////////////////////////////////////////////////////// 26 26 -
external/fastjet/plugins/SISCone/hash.h
rf6b6ee7 r49234af 22 22 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // 23 23 // // 24 // $Revision:: 25 // $Date:: 24 // $Revision:: 224 $// 25 // $Date:: 2008-05-16 19:58:30 +0200 (Fri, 16 May 2008) $// 26 26 /////////////////////////////////////////////////////////////////////////////// 27 27 -
external/fastjet/plugins/SISCone/momentum.cc
rf6b6ee7 r49234af 21 21 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // 22 22 // // 23 // $Revision:: 24 // $Date:: 23 // $Revision:: 123 $// 24 // $Date:: 2007-03-01 02:52:16 +0100 (Thu, 01 Mar 2007) $// 25 25 /////////////////////////////////////////////////////////////////////////////// 26 26 -
external/fastjet/plugins/SISCone/momentum.h
rf6b6ee7 r49234af 22 22 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // 23 23 // // 24 // $Revision:: 25 // $Date:: 24 // $Revision:: 163 $// 25 // $Date:: 2007-04-26 22:31:02 +0200 (Thu, 26 Apr 2007) $// 26 26 /////////////////////////////////////////////////////////////////////////////// 27 27 -
external/fastjet/plugins/SISCone/protocones.cc
rf6b6ee7 r49234af 21 21 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // 22 22 // // 23 // $Revision:: 24 // $Date:: 23 // $Revision:: 322 $// 24 // $Date:: 2011-11-15 10:12:36 +0100 (Tue, 15 Nov 2011) $// 25 25 /////////////////////////////////////////////////////////////////////////////// 26 26 -
external/fastjet/plugins/SISCone/protocones.h
rf6b6ee7 r49234af 22 22 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // 23 23 // // 24 // $Revision:: 25 // $Date:: 24 // $Revision:: 224 $// 25 // $Date:: 2008-05-16 19:58:30 +0200 (Fri, 16 May 2008) $// 26 26 /////////////////////////////////////////////////////////////////////////////// 27 27 -
external/fastjet/plugins/SISCone/quadtree.cc
rf6b6ee7 r49234af 21 21 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // 22 22 // // 23 // $Revision:: 24 // $Date:: 23 // $Revision:: 320 $// 24 // $Date:: 2011-11-15 09:54:50 +0100 (Tue, 15 Nov 2011) $// 25 25 /////////////////////////////////////////////////////////////////////////////// 26 26 -
external/fastjet/plugins/SISCone/quadtree.h
rf6b6ee7 r49234af 22 22 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // 23 23 // // 24 // $Revision:: 25 // $Date:: 24 // $Revision:: 123 $// 25 // $Date:: 2007-03-01 02:52:16 +0100 (Thu, 01 Mar 2007) $// 26 26 /////////////////////////////////////////////////////////////////////////////// 27 27 -
external/fastjet/plugins/SISCone/reference.cc
rf6b6ee7 r49234af 21 21 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // 22 22 // // 23 // $Revision:: 24 // $Date:: 23 // $Revision:: 311 $// 24 // $Date:: 2011-10-05 23:27:09 +0200 (Wed, 05 Oct 2011) $// 25 25 /////////////////////////////////////////////////////////////////////////////// 26 26 -
external/fastjet/plugins/SISCone/reference.h
rf6b6ee7 r49234af 22 22 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // 23 23 // // 24 // $Revision:: 25 // $Date:: 24 // $Revision:: 123 $// 25 // $Date:: 2007-03-01 02:52:16 +0100 (Thu, 01 Mar 2007) $// 26 26 /////////////////////////////////////////////////////////////////////////////// 27 27 -
external/fastjet/plugins/SISCone/siscone.cc
rf6b6ee7 r49234af 21 21 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // 22 22 // // 23 // $Revision:: 24 // $Date:: 23 // $Revision:: 371 $// 24 // $Date:: 2014-09-09 10:05:32 +0200 (Tue, 09 Sep 2014) $// 25 25 /////////////////////////////////////////////////////////////////////////////// 26 26 … … 29 29 //#else 30 30 //#define PACKAGE_NAME "SISCone" 31 //#define VERSION " 2.0.6"31 //#define VERSION "3.0.0" 32 32 //#warning "No config.h file available, using preset values" 33 33 //#endif … … 87 87 int _n_pass_max, double _ptmin, 88 88 Esplit_merge_scale _split_merge_scale){ 89 // initialise random number generator 90 if (!init_done){ 91 // initialise random number generator 92 ranlux_init(); 93 94 // do not do this again 95 init_done=true; 96 97 // print the banner 98 if (_banner_ostr != 0){ 99 (*_banner_ostr) << "#ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo" << endl; 100 (*_banner_ostr) << "# SISCone version " << setw(28) << left << siscone_version() << "o" << endl; 101 (*_banner_ostr) << "# http://projects.hepforge.org/siscone o" << endl; 102 (*_banner_ostr) << "# o" << endl; 103 (*_banner_ostr) << "# This is SISCone: the Seedless Infrared Safe Cone Jet Algorithm o" << endl; 104 (*_banner_ostr) << "# SISCone was written by Gavin Salam and Gregory Soyez o" << endl; 105 (*_banner_ostr) << "# It is released under the terms of the GNU General Public License o" << endl; 106 (*_banner_ostr) << "# o" << endl; 107 (*_banner_ostr) << "# A description of the algorithm is available in the publication o" << endl; 108 (*_banner_ostr) << "# JHEP 05 (2007) 086 [arXiv:0704.0292 (hep-ph)]. o" << endl; 109 (*_banner_ostr) << "# Please cite it if you use SISCone. o" << endl; 110 (*_banner_ostr) << "#ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo" << endl; 111 (*_banner_ostr) << endl; 112 113 _banner_ostr->flush(); 114 } 115 } 89 _initialise_if_needed(); 116 90 117 91 // run some general safety tests (NB: f will be checked in split-merge) … … 174 148 } 175 149 150 151 /* 152 * compute the jets from a given particle set doing multiple passes 153 * such pass N looks for jets among all particles not put into jets 154 * during previous passes. 155 * - _particles list of particles 156 * - _radius cone radius 157 * - _n_pass_max maximum number of runs 158 * - _ptmin minimum pT of the protojets 159 * - _ordering_scale the ordering scale to decide which stable 160 * cone is removed 161 * return the number of jets found. 162 **********************************************************************/ 163 int Csiscone::compute_jets_progressive_removal(vector<Cmomentum> &_particles, double _radius, 164 int _n_pass_max, double _ptmin, 165 Esplit_merge_scale _ordering_scale){ 166 _initialise_if_needed(); 167 168 // run some general safety tests (NB: f will be checked in split-merge) 169 if (_radius <= 0.0 || _radius >= 0.5*M_PI) { 170 ostringstream message; 171 message << "Illegal value for cone radius, R = " << _radius 172 << " (legal values are 0<R<pi/2)"; 173 throw Csiscone_error(message.str()); 174 } 175 176 ptcomparison.split_merge_scale = _ordering_scale; 177 partial_clear(); // make sure some things are initialised properly 178 179 // init the split_merge algorithm with the initial list of particles 180 // this initialises particle list p_left of remaining particles to deal with 181 // 182 // this stores the "processed" particles in p_uncol_hard 183 init_particles(_particles); 184 jets.clear(); 185 186 bool unclustered_left; 187 rerun_allowed = false; 188 protocones_list.clear(); 189 190 do{ 191 //cout << n_left << " particle left" << endl; 192 193 // initialise stable_cone finder 194 // here we use the list of remaining particles 195 // AFTER COLLINEAR CLUSTERING !!!!!! 196 Cstable_cones::init(p_uncol_hard); 197 198 // get stable cones (stored in 'protocones') 199 unclustered_left = get_stable_cones(_radius); 200 201 // add the hardest stable cone to the list of jets 202 if (add_hardest_protocone_to_jets(&protocones, R2, _ptmin)) break; 203 204 _n_pass_max--; 205 } while ((unclustered_left) && (n_left>0) && (_n_pass_max!=0)); 206 207 // split & merge 208 return jets.size(); 209 } 210 211 176 212 /* 177 213 * recompute the jets with a different overlap parameter. … … 205 241 } 206 242 243 // ensure things are initialised 244 void Csiscone::_initialise_if_needed(){ 245 // initialise random number generator 246 if (init_done) return; 247 248 // initialise random number generator 249 ranlux_init(); 250 251 // do not do this again 252 init_done=true; 253 254 // print the banner 255 if (_banner_ostr != 0){ 256 (*_banner_ostr) << "#ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo" << endl; 257 (*_banner_ostr) << "# SISCone version " << setw(28) << left << siscone_version() << "o" << endl; 258 (*_banner_ostr) << "# http://projects.hepforge.org/siscone o" << endl; 259 (*_banner_ostr) << "# o" << endl; 260 (*_banner_ostr) << "# This is SISCone: the Seedless Infrared Safe Cone Jet Algorithm o" << endl; 261 (*_banner_ostr) << "# SISCone was written by Gavin Salam and Gregory Soyez o" << endl; 262 (*_banner_ostr) << "# It is released under the terms of the GNU General Public License o" << endl; 263 (*_banner_ostr) << "# o" << endl; 264 (*_banner_ostr) << "# A description of the algorithm is available in the publication o" << endl; 265 (*_banner_ostr) << "# JHEP 05 (2007) 086 [arXiv:0704.0292 (hep-ph)]. o" << endl; 266 (*_banner_ostr) << "# Please cite it if you use SISCone. o" << endl; 267 (*_banner_ostr) << "#ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo" << endl; 268 (*_banner_ostr) << endl; 269 270 _banner_ostr->flush(); 271 } 272 } 207 273 208 274 // finally, a bunch of functions to access to -
external/fastjet/plugins/SISCone/siscone.h
rf6b6ee7 r49234af 22 22 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // 23 23 // // 24 // $Revision:: 25 // $Date:: 24 // $Revision:: 369 $// 25 // $Date:: 2014-09-04 16:57:55 +0200 (Thu, 04 Sep 2014) $// 26 26 /////////////////////////////////////////////////////////////////////////////// 27 27 … … 79 79 80 80 /** 81 * compute the jets from a given particle set. 82 * We are doing multiple passes such pass n_pass looks for jets among 83 * all particles not put into jets during previous passes. 84 * By default the number of passes is infinite (0). 85 * \param _particles list of particles 86 * \param _radius cone radius 87 * \param _n_pass_max maximum number of passes (0=full search) 88 * \param _ptmin minimum pT of the protojets 89 * \param _ordering_scale the ordering scale to decide which stable 90 * cone is removed 91 * 92 * Note that the Csplit_merge::SM_var2_hardest_cut_off cut is not 93 * used in the progressive removal variant. 94 * 95 * \return the number of jets found. 96 */ 97 int compute_jets_progressive_removal(std::vector<Cmomentum> &_particles, double _radius, 98 int _n_pass_max=0, double _ptmin=0.0, 99 Esplit_merge_scale _ordering_scale=SM_pttilde); 100 101 /** 81 102 * recompute the jets with a different overlap parameter. 82 103 * we use the same particles and R as in the preceeding call. … … 93 114 Esplit_merge_scale _split_merge_scale=SM_pttilde); 94 115 95 /// list of protocones found pass-by-pass 116 /// list of protocones found pass-by-pass (not filled by compute_jets_progressive_removal) 96 117 std::vector<std::vector<Cmomentum> > protocones_list; 97 118 … … 125 146 bool rerun_allowed; ///< is recompute_jets allowed ? 126 147 static std::ostream * _banner_ostr; ///< stream to use for banners 148 149 /// ensure things are initialised 150 void _initialise_if_needed(); 151 127 152 }; 128 153 -
external/fastjet/plugins/SISCone/siscone_error.cc
rf6b6ee7 r49234af 21 21 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // 22 22 // // 23 // $Revision:: 24 // $Date:: 23 // $Revision:: 123 $// 24 // $Date:: 2007-03-01 02:52:16 +0100 (Thu, 01 Mar 2007) $// 25 25 /////////////////////////////////////////////////////////////////////////////// 26 26 -
external/fastjet/plugins/SISCone/siscone_error.h
rf6b6ee7 r49234af 22 22 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // 23 23 // // 24 // $Revision:: 25 // $Date:: 24 // $Revision:: 327 $// 25 // $Date:: 2011-11-25 15:19:39 +0100 (Fri, 25 Nov 2011) $// 26 26 /////////////////////////////////////////////////////////////////////////////// 27 27 -
external/fastjet/plugins/SISCone/split_merge.cc
rf6b6ee7 r49234af 21 21 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // 22 22 // // 23 // $Revision:: 24 // $Date:: 23 // $Revision:: 370 $// 24 // $Date:: 2014-09-04 17:03:15 +0200 (Thu, 04 Sep 2014) $// 25 25 /////////////////////////////////////////////////////////////////////////////// 26 26 … … 28 28 #include "siscone_error.h" 29 29 #include "momentum.h" 30 #include <math.h>31 30 #include <limits> // for max 32 31 #include <iostream> … … 34 33 #include <sstream> 35 34 #include <cassert> 35 #include <cmath> 36 36 37 37 namespace siscone{ … … 229 229 #endif 230 230 #endif 231 _user_scale = NULL; 231 232 indices = NULL; 232 233 … … 237 238 238 239 // no hardest cut (col-unsafe) 239 SM_var2_hardest_cut_off = - 1.0;240 SM_var2_hardest_cut_off = -numeric_limits<double>::max(); 240 241 241 242 // no pt cutoff for the particles to put in p_uncol_hard … … 555 556 } 556 557 558 559 /* 560 * remove the hardest protocone and declare it a a jet 561 * - protocones list of protocones (initial jet candidates) 562 * - R2 cone radius (squared) 563 * - ptmin minimal pT allowed for jets 564 * return 0 on success, 1 on error 565 * 566 * The list of remaining particles (and the uncollinear-hard ones) 567 * is updated. 568 */ 569 int Csplit_merge::add_hardest_protocone_to_jets(std::vector<Cmomentum> *protocones, double R2, double ptmin){ 570 571 int i; 572 Cmomentum *c; 573 Cmomentum *v; 574 double eta, phi; 575 double dx, dy; 576 double R; 577 Cjet jet, jet_candidate; 578 bool found_jet = false; 579 580 if (protocones->size()==0) 581 return 1; 582 583 pt_min2 = ptmin*ptmin; 584 R = sqrt(R2); 585 586 // browse protocones 587 // for each of them, build the list of particles in them 588 for (vector<Cmomentum>::iterator p_it = protocones->begin();p_it != protocones->end();p_it++){ 589 // initialise variables 590 c = &(*p_it); 591 592 // note: cones have been tested => their (eta,phi) coordinates are computed 593 eta = c->eta; 594 phi = c->phi; 595 596 // NOTE: this is common to this method and add_protocones, so it 597 // could be moved into a 'build_jet_from_protocone' method 598 // 599 // browse particles to create cone contents 600 jet_candidate.v = Cmomentum(); 601 jet_candidate.pt_tilde=0; 602 jet_candidate.contents.clear(); 603 for (i=0;i<n_left;i++){ 604 v = &(p_remain[i]); 605 // for security, avoid including particles with infinite rapidity) 606 // NO NEEDED ANYMORE SINCE REMOVED FROM p_remain FROM THE BEGINNING 607 //if (fabs(v->pz)!=v->E){ 608 dx = eta - v->eta; 609 dy = fabs(phi - v->phi); 610 if (dy>M_PI) 611 dy -= twopi; 612 if (dx*dx+dy*dy<R2){ 613 jet_candidate.contents.push_back(v->parent_index); 614 jet_candidate.v+= *v; 615 jet_candidate.pt_tilde+= pt[v->parent_index]; 616 v->index=0; 617 } 618 } 619 jet_candidate.n=jet_candidate.contents.size(); 620 621 // set the momentum in protocones 622 // (it was only known through eta and phi up to now) 623 *c = jet_candidate.v; 624 c->eta = eta; // restore exact original coords 625 c->phi = phi; // to avoid rounding error inconsistencies 626 627 // set the jet range 628 jet_candidate.range=Ceta_phi_range(eta,phi,R); 629 630 // check that the protojet has large enough pt 631 if (jet_candidate.v.perp2()<pt_min2) 632 continue; 633 634 // assign the split-merge (or progressive-removal) squared scale variable 635 if (_user_scale) { 636 // sm_var2 is the signed square of the user scale returned 637 // for the jet candidate 638 jet_candidate.sm_var2 = (*_user_scale)(jet_candidate); 639 jet_candidate.sm_var2 *= abs(jet_candidate.sm_var2); 640 } else { 641 jet_candidate.sm_var2 = get_sm_var2(jet_candidate.v, jet_candidate.pt_tilde); 642 } 643 644 // now check if it is possibly the hardest 645 if ((! found_jet) || 646 (_user_scale ? _user_scale->is_larger(jet_candidate, jet) 647 : ptcomparison(jet_candidate, jet))){ 648 jet = jet_candidate; 649 found_jet = true; 650 } 651 } 652 653 // make sure at least one of the jets has passed the selection 654 if (!found_jet) return 1; 655 656 // add the jet to the list of jets 657 jets.push_back(jet); 658 jets[jets.size()-1].v.build_etaphi(); 659 660 #ifdef DEBUG_SPLIT_MERGE 661 cout << "PR-Jet " << jets.size() << " [size " << next_jet.contents.size() << "]:"; 662 #endif 663 664 // update the list of what particles are left 665 int p_remain_index = 0; 666 int contents_index = 0; 667 //sort(next_jet.contents.begin(),next_jet.contents.end()); 668 for (int index=0;index<n_left;index++){ 669 if ((contents_index<(int) jet.contents.size()) && 670 (p_remain[index].parent_index == jet.contents[contents_index])){ 671 // this particle belongs to the newly found jet 672 // set pass in initial list 673 particles[p_remain[index].parent_index].index = n_pass; 674 #ifdef DEBUG_SPLIT_MERGE 675 cout << " " << jet.contents[contents_index]; 676 #endif 677 contents_index++; 678 } else { 679 // this particle still has to be clustered 680 p_remain[p_remain_index] = p_remain[index]; 681 p_remain[p_remain_index].parent_index = p_remain[index].parent_index; 682 p_remain[p_remain_index].index=1; 683 p_remain_index++; 684 } 685 } 686 p_remain.resize(n_left-jet.contents.size()); 687 n_left = p_remain.size(); 688 jets[jets.size()-1].pass = particles[jet.contents[0]].index; 689 690 // increase the pass index 691 n_pass++; 692 693 #ifdef DEBUG_SPLIT_MERGE 694 cout << endl; 695 #endif 696 697 // male sure the list of uncol_hard particles (used for the next 698 // stable cone finding) is updated [could probably be more 699 // efficient] 700 merge_collinear_and_remove_soft(); 701 702 return 0; 703 } 557 704 558 705 /* -
external/fastjet/plugins/SISCone/split_merge.h
rf6b6ee7 r49234af 22 22 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // 23 23 // // 24 // $Revision:: 25 // $Date:: 24 // $Revision:: 367 $// 25 // $Date:: 2014-09-04 15:57:37 +0200 (Thu, 04 Sep 2014) $// 26 26 /////////////////////////////////////////////////////////////////////////////// 27 27 … … 141 141 /// the split-merge process i.e. the variable we use for 142 142 /// 1. ordering jet candidates; 143 /// 2. computing t e overlap fraction of two candidates.143 /// 2. computing the overlap fraction of two candidates. 144 144 /// The default value uses pttile (p-scheme pt). Other alternatives are 145 145 /// pt, mt=sqrt(pt^2+m^2)=sqrt(E^2-pz^2) or Et. … … 151 151 /// the default value i.e. to use pt only for the purpose of 152 152 /// investigating the IR issue 153 /// - using Et is safe but do not respect boost invariance153 /// - using Et is safe but does not respect boost invariance 154 154 /// - using mt solves the IR unsafety issues with the pt variable 155 155 /// for QCD jets but the IR unsafety remains for nack-to-back … … 234 234 int full_clear(); 235 235 236 /////////////////////////////////////// 237 // user-defined stable-cone ordering // 238 /////////////////////////////////////// 239 240 /// \class Cuser_scale_base 241 /// base class for user-defined ordering of stable cones 242 /// 243 /// derived classes have to implement the () operator that returns 244 /// the scale associated with a given jet. 245 class Cuser_scale_base{ 246 public: 247 /// empty virtual dtor 248 virtual ~Cuser_scale_base(){} 249 250 /// the scale associated with a given jet 251 /// 252 /// "progressive removal" iteratively removes the stable cone with 253 /// the largest scale 254 virtual double operator()(const Cjet & jet) const = 0; 255 256 /// returns true when the scale associated with jet a is larger than 257 /// the scale associated with jet b 258 /// 259 /// By default this does a simple direct comparison but it can be 260 /// overloaded for higher precision [recommended if possible] 261 /// 262 /// This function assumes that a.sm_var2 and b.sm_var2 have been 263 /// correctly initialised with the signed squared output of 264 /// operator(), as is by default the case when is_larger is called 265 /// from within siscone. 266 virtual bool is_larger(const Cjet & a, const Cjet & b) const{ 267 return (a.sm_var2 > b.sm_var2); 268 } 269 }; 270 271 /// associate a user-defined scale to order the stable cones 272 /// 273 /// Note that this is only used in "progressive-removal mode", 274 /// e.g. in add_hardest_protocone_to_jets(). 275 void set_user_scale(const Cuser_scale_base * user_scale_in){ 276 _user_scale = user_scale_in; 277 } 278 279 /// return the user-defined scale (NULL if none) 280 const Cuser_scale_base * user_scale() const { return _user_scale; } 281 236 282 237 283 ///////////////////////////////// … … 256 302 */ 257 303 int add_protocones(std::vector<Cmomentum> *protocones, double R2, double ptmin=0.0); 304 305 /** 306 * remove the hardest protocone and declare it a jet 307 * \param protocones list of protocones (initial jet candidates) 308 * \param R2 cone radius (squared) 309 * \param ptmin minimal pT allowed for jets 310 * \return 0 on success, 1 on error 311 * 312 * The list of remaining particles (and the uncollinear-hard ones) 313 * is updated. 314 */ 315 int add_hardest_protocone_to_jets(std::vector<Cmomentum> *protocones, double R2, double ptmin=0.0); 258 316 259 317 /** … … 314 372 Csplit_merge_ptcomparison ptcomparison; 315 373 316 /// stop split--merge when the SM_var of the hardest protojet 317 /// is below this cut-off. 374 /// stop split--merge or progressive-removal when the squared SM_var 375 /// of the hardest protojet is below this cut-off. Note that this is 376 /// a signed square (ie SM_var*|SM_var|) to be able to handle 377 /// negative values. 378 /// 379 /// Note that the cut-off is set on the variable squared. 380 double SM_var2_hardest_cut_off; 381 382 /// pt cutoff for the particles to put in p_uncol_hard 383 /// this is meant to allow removing soft particles in the 384 /// stable-cone search. 385 /// 318 386 /// This is not collinear-safe so you should not use this 319 387 /// variable unless you really know what you are doing 320 388 /// Note that the cut-off is set on the variable squared. 321 double SM_var2_hardest_cut_off;322 323 /// pt cutoff for the particles to put in p_uncol_hard324 /// this is meant to allow removing soft particles in the325 /// stable-cone search.326 389 double stable_cone_soft_pt2_cutoff; 327 390 … … 390 453 bool use_pt_weighted_splitting; 391 454 455 /// use a user-defined scale to order the stable cones and jet 456 /// candidates 457 const Cuser_scale_base *_user_scale; 458 392 459 #ifdef ALLOW_MERGE_IDENTICAL_PROTOCONES 393 460 /// checkxor for the candidates (to avoid having twice the same contents) -
external/fastjet/plugins/SISCone/vicinity.cc
rf6b6ee7 r49234af 21 21 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // 22 22 // // 23 // $Revision:: 24 // $Date:: 23 // $Revision:: 123 $// 24 // $Date:: 2007-03-01 02:52:16 +0100 (Thu, 01 Mar 2007) $// 25 25 /////////////////////////////////////////////////////////////////////////////// 26 26 -
external/fastjet/plugins/SISCone/vicinity.h
rf6b6ee7 r49234af 22 22 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA // 23 23 // // 24 // $Revision:: 25 // $Date:: 24 // $Revision:: 123 $// 25 // $Date:: 2007-03-01 02:52:16 +0100 (Thu, 01 Mar 2007) $// 26 26 /////////////////////////////////////////////////////////////////////////////// 27 27 -
external/fastjet/plugins/TrackJet/TrackJetPlugin.cc
rf6b6ee7 r49234af 1 // STARTHEADER2 // $Id $3 // 4 // Copyright (c) 2007-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez1 //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 5 5 // 6 6 //---------------------------------------------------------------------- 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. 13 8 // 14 9 // FastJet is free software; you can redistribute it and/or modify … … 18 13 // 19 14 // 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 21 17 // 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. 23 20 // 24 21 // FastJet is distributed in the hope that it will be useful, … … 30 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 31 28 //---------------------------------------------------------------------- 32 // ENDHEADER29 //FJENDHEADER 33 30 34 31 // History of changes from the original TrackJet.cc file in Rivet <=1.1.2 -
external/fastjet/plugins/TrackJet/fastjet/TrackJetPlugin.hh
rf6b6ee7 r49234af 1 // STARTHEADER2 // $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 $ 3 3 // 4 // Copyright (c) 2007-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez4 // Copyright (c) 2007-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 #ifndef __TRACKJETPLUGIN_HH__ -
external/fastjet/tools/BackgroundEstimatorBase.cc
rf6b6ee7 r49234af 1 // STARTHEADER2 // $Id $1 //FJSTARTHEADER 2 // $Id: BackgroundEstimatorBase.cc 3433 2014-07-23 08:17:03Z salam $ 3 3 // 4 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez4 // Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 -
external/fastjet/tools/BackgroundEstimatorBase.hh
rf6b6ee7 r49234af 2 2 #define __FASTJET_BACKGROUND_ESTIMATOR_BASE_HH__ 3 3 4 // STARTHEADER5 // $Id: BackgroundEstimatorBase.hh 2689 2011-11-14 14:51:06Z soyez$6 // 7 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez4 //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 8 8 // 9 9 //---------------------------------------------------------------------- … … 16 16 // 17 17 // 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 19 20 // 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. 21 23 // 22 24 // FastJet is distributed in the hope that it will be useful, … … 28 30 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 29 31 //---------------------------------------------------------------------- 30 // ENDHEADER32 //FJENDHEADER 31 33 32 34 #include <fastjet/ClusterSequenceAreaBase.hh> … … 43 45 /// 44 46 /// Abstract base class that provides the basic interface for classes 45 /// that estimate levels of background radiation in hadr ion and47 /// that estimate levels of background radiation in hadron and 46 48 /// heavy-ion collider events. 47 ///48 49 /// 49 50 class BackgroundEstimatorBase { … … 99 100 /// determination of sigma 100 101 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 103 138 104 139 /// @name configuring the behaviour … … 114 149 /// The BackgroundRescalingYPolynomial class can be used to get a 115 150 /// rescaling that depends just on rapidity. 151 /// 152 /// There is currently no support for different rescaling classes 153 /// for rho and rho_m determinations. 116 154 virtual void set_rescaling_class(const FunctionOfPseudoJet<double> * rescaling_class_in) { _rescaling_class = rescaling_class_in; } 117 155 -
external/fastjet/tools/Boost.hh
rf6b6ee7 r49234af 1 // STARTHEADER2 // $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 $ 3 3 // 4 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez4 // Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 #ifndef __FASTJET_TOOL_BOOST_HH__ -
external/fastjet/tools/CASubJetTagger.cc
rf6b6ee7 r49234af 1 // STARTHEADER2 // $Id $1 //FJSTARTHEADER 2 // $Id: CASubJetTagger.cc 3433 2014-07-23 08:17:03Z salam $ 3 3 // 4 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez4 // Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 #include <fastjet/tools/CASubJetTagger.hh> -
external/fastjet/tools/CASubJetTagger.hh
rf6b6ee7 r49234af 1 // STARTHEADER2 // $Id: CASubJetTagger.hh 2616 2011-09-30 18:03:40Z salam $3 // 4 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez1 //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 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 #ifndef __CASUBJET_TAGGER_HH__ -
external/fastjet/tools/Filter.cc
rf6b6ee7 r49234af 1 // STARTHEADER2 // $Id $1 //FJSTARTHEADER 2 // $Id: Filter.cc 3633 2014-08-15 13:23:52Z soyez $ 3 3 // 4 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez4 // Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 #include "fastjet/tools/Filter.hh" 32 #include "fastjet/tools/Recluster.hh" 30 33 #include <fastjet/ClusterSequenceActiveAreaExplicitGhosts.hh> 31 34 #include <cassert> … … 45 48 // class description 46 49 string Filter::description() const { 50 if (!_initialised){ 51 return "uninitialised Filter"; 52 } 53 47 54 ostringstream ostr; 48 55 ostr << "Filter with subjet_def = "; … … 73 80 // by the filtering 74 81 PseudoJet 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 75 87 // start by getting the list of subjets (including a list of sanity 76 88 // checks) … … 78 90 // _set_filtered_elements_cafilt) 79 91 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 } 86 106 87 107 // now build the vector of kept and rejected subjets … … 94 114 95 115 // 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); 97 117 } 98 118 99 119 100 120 // 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 124 bool 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); 110 132 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); 181 136 } 182 183 // set the filtered elements in the simple case of C/A+C/A184 //185 // WATCH OUT: this could be recursively called, so filtered elements186 // 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 of191 // such pieces192 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 needed206 // 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 pieces224 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 (wo232 // 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 constituents238 // get the subjets directly from there239 //240 // If the jet has area support then we separate the ghosts from the241 // "regular" particles so the subjets will also have area242 // support. Note that we do this regardless of whether rho is zero243 // or not.244 //245 // Note that to be able to separate the ghosts, one needs explicit246 // 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 else257 regular_constituents.push_back(*it);258 }259 260 // figure out the ghost area from the 1st ghost (if none, any value261 // would probably do as the area will be 0 and subtraction will have262 // no effect!)263 double ghost_area = (ghosts.size()) ? ghosts[0].area() : 0.01;264 ClusterSequenceActiveAreaExplicitGhosts * csa265 = new ClusterSequenceActiveAreaExplicitGhosts(regular_constituents,266 subjet_def,267 ghosts, ghost_area);268 269 // get the subjets: we use the subtracted or unsubtracted ones270 // depending on rho or _subtractor being non-zero271 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 used282 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 used287 cs->delete_self_when_unused();288 }289 }290 291 137 292 138 // gather the information about what is kept and rejected under the … … 295 141 vector<PseudoJet> & kept, 296 142 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; 301 145 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 } 304 157 StructureType *fs = (StructureType*) filtered_jet.structure_non_const_ptr(); 305 // fs->_original_jet = jet;306 158 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 } 307 171 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 315 172 return filtered_jet; 316 173 } 317 174 318 // various checks319 //----------------------------------------------------------------------320 321 // get the pieces down to the fundamental pieces322 //323 // Note that this just checks that there is an associated CS to the324 // fundamental pieces, not that it is still valid325 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 no344 // longer valid, an error will be thrown (needed since it could be the345 // 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 ghosts355 // (assuming the jet has area support356 //357 // Note that if the jet has an associated cluster sequence that is no358 // longer valid, an error will be thrown (needed since it could be the359 // 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 subjets367 //368 // This includes:369 // - the subjet definition asks for C/A subjets370 // - all the pieces share the same CS371 // - that CS is C/A with the same recombiner as the subjet def372 // - the filtering radius is not larger than any of the pairwise373 // distance between the pieces374 //375 // Note that if the jet has an associated cluster sequence that is no376 // longer valid, an error will be thrown (needed since it could be the377 // 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 at382 // least one) is coming from a C/A clustering. Then check that all383 // the following pieces share the same ClusterSequence384 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 used390 // for the subjet clustering391 // Note that since they share the same CS, checking the 2st one is enough392 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 larger395 // than any of the inter-pieces distance396 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 implementation409 //----------------------------------------------------------------------410 411 175 412 176 FASTJET_END_NAMESPACE // defined in fastjet/internal/base.hh -
external/fastjet/tools/Filter.hh
rf6b6ee7 r49234af 2 2 #define __FASTJET_TOOLS_FILTER_HH__ 3 3 4 // STARTHEADER5 // $Id: Filter.hh 2694 2011-11-14 22:27:51Z salam$6 // 7 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez4 //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 8 8 // 9 9 //---------------------------------------------------------------------- … … 16 16 // 17 17 // 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 19 20 // 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. 21 23 // 22 24 // FastJet is distributed in the hope that it will be useful, … … 28 30 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 29 31 //---------------------------------------------------------------------- 30 // ENDHEADER32 //FJENDHEADER 31 33 32 34 #include <fastjet/ClusterSequence.hh> … … 98 100 /// Note: this is just for derived classes 99 101 /// a Filter initialised through this constructor will not work! 100 Filter() : _Rfiltfunc(0) {};102 Filter() : _Rfiltfunc(0), _initialised(false){}; 101 103 102 104 /// define a filter that decomposes a jet into subjets using a … … 113 115 /// ghosts 114 116 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) {} 116 118 117 119 /// Same as the full constructor (see above) but just specifying the radius … … 121 123 /// \param Rfilt the filtering radius 122 124 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) { 124 126 if (_Rfilt<0) 125 127 throw Error("Attempt to create a Filter with a negative filtering radius"); … … 133 135 /// \param Rfilt_func the filtering radius function of a PseudoJet 134 136 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) {} 136 138 137 139 /// default dtor … … 140 142 /// Set a subtractor that is applied to all individual subjets before 141 143 /// 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;} 143 145 144 146 /// runs the filtering and sets kept and rejected to be the jets of interest … … 159 161 /// It also sets the subjet_def to be used in joining things (the bit of 160 162 /// 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; 165 167 166 /// set the filtered elements in the simple case of C/A+C/A167 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 case172 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 177 168 /// gather the information about what is kept and rejected under the 178 169 /// 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) 179 175 PseudoJet _finalise(const PseudoJet & jet, 180 176 std::vector<PseudoJet> & kept, 181 177 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; 202 179 203 180 bool _uses_subtraction() const {return (_subtractor || _rho != 0);} … … 209 186 Selector _selector; ///< the subjet selection criterium 210 187 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 212 191 }; 213 192 -
external/fastjet/tools/GridMedianBackgroundEstimator.cc
rf6b6ee7 r49234af 1 // STARTHEADER2 // $Id $3 // 4 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez1 //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 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 … … 32 34 33 35 FASTJET_BEGIN_NAMESPACE // defined in fastjet/internal/base.hh 36 34 37 35 38 //---------------------------------------------------------------------- … … 39 42 // of the specified particles. 40 43 void 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 } 49 93 } 50 94 } 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()); 52 127 53 128 _has_particles = true; … … 61 136 double GridMedianBackgroundEstimator::rho() const { 62 137 verify_particles_set(); 63 return _ percentile(_scalar_pt, 0.5) / _cell_area;138 return _rho; 64 139 } 65 140 … … 71 146 double GridMedianBackgroundEstimator::sigma() const{ 72 147 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; 78 149 } 79 150 … … 85 156 // determination. 86 157 double GridMedianBackgroundEstimator::rho(const PseudoJet & jet) { 87 verify_particles_set();158 //verify_particles_set(); 88 159 double rescaling = (_rescaling_class == 0) ? 1.0 : (*_rescaling_class)(jet); 89 160 return rescaling*rho(); … … 95 166 // the position of a given jet. As for rho(jet), it is non-const. 96 167 double GridMedianBackgroundEstimator::sigma(const PseudoJet & jet){ 97 verify_particles_set();168 //verify_particles_set(); 98 169 double rescaling = (_rescaling_class == 0) ? 1.0 : (*_rescaling_class)(jet); 99 170 return rescaling*sigma(); 171 } 172 173 //---------------------------------------------------------------------- 174 // returns rho_m (particle-masses contribution to the 4-vector density) 175 double 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. 188 double 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. 199 double 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. 209 double 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(); 100 213 } 101 214 … … 112 225 string GridMedianBackgroundEstimator::description() const { 113 226 ostringstream desc; 227 #ifdef FASTJET_GMBGE_USEFJGRID 228 desc << "GridMedianBackgroundEstimator, with " << RectangularGrid::description(); 229 #else 114 230 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 116 234 return desc.str(); 117 235 } … … 144 262 145 263 264 #ifndef FASTJET_GMBGE_USEFJGRID 146 265 //---------------------------------------------------------------------- 147 266 // protected material … … 168 287 169 288 _ntotal = _nphi * _ny; 170 _scalar_pt.resize(_ntotal);171 _ cell_area = _dy * _dphi;172 } 173 174 175 //---------------------------------------------------------------------- 176 // retrieve the grid cellindex for a given PseudoJet177 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 296 int GridMedianBackgroundEstimator::tile_index(const PseudoJet & p) const { 178 297 // directly taking int does not work for values between -1 and 0 179 298 // so use floor instead … … 193 312 if (iphi == _nphi) iphi = 0; // just in case of rounding errors 194 313 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 199 320 200 321 -
external/fastjet/tools/GridMedianBackgroundEstimator.hh
rf6b6ee7 r49234af 2 2 #define __GRID_MEDIAN_BACKGROUND_ESTIMATOR_HH__ 3 3 4 // STARTHEADER5 // $Id: GridMedianBackgroundEstimator.hh 2580 2011-09-13 17:25:43Z salam $6 // 7 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez4 //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 8 8 // 9 9 //---------------------------------------------------------------------- … … 16 16 // 17 17 // 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 19 20 // 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. 21 23 // 22 24 // FastJet is distributed in the hope that it will be useful, … … 28 30 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 29 31 //---------------------------------------------------------------------- 30 // ENDHEADER32 //FJENDHEADER 31 33 32 34 33 35 #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 34 48 35 49 FASTJET_BEGIN_NAMESPACE // defined in fastjet/internal/base.hh … … 61 75 /// rho() [Without rescaling, they are identical] 62 76 /// 63 class GridMedianBackgroundEstimator : public BackgroundEstimatorBase { 77 class GridMedianBackgroundEstimator : public BackgroundEstimatorBase 78 #ifdef FASTJET_GMBGE_USEFJGRID 79 , RectangularGrid 80 #endif 81 { 82 64 83 public: 65 84 /// @name constructors and destructors 66 85 //\{ 86 #ifdef FASTJET_GMBGE_USEFJGRID 67 87 //---------------------------------------------------------------- 68 88 /// \param ymax maximal absolute rapidity extent of the grid … … 71 91 /// periodicity in azimuthal angle (size, not area) 72 92 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) : 73 107 _ymin(-ymax), _ymax(ymax), 74 108 _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 76 115 //\} 77 116 … … 84 123 /// of the specified particles. 85 124 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;} 86 129 87 130 //\} … … 114 157 bool has_sigma() {return true;} 115 158 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 116 184 /// returns the area of the grid cells (all identical, but 117 185 /// 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();} 119 187 //\} 120 188 … … 134 202 /// Note that this has to be called BEFORE any attempt to do an 135 203 /// 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) 136 208 virtual void set_rescaling_class(const FunctionOfPseudoJet<double> * rescaling_class); 137 209 … … 149 221 150 222 private: 223 224 #ifndef FASTJET_GMBGE_USEFJGRID 225 151 226 /// configure the grid 152 227 void setup_grid(); 153 228 154 229 /// 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 156 243 157 244 /// verify that particles have been set and throw an error if not 158 245 void verify_particles_set() const; 159 246 160 // information about the grid161 double _ymin, _ymax, _dy, _dphi, _requested_grid_spacing, _cell_area;162 int _ny, _nphi, _ntotal;163 164 247 // information abotu the event 165 std::vector<double> _scalar_pt; 248 //std::vector<double> _scalar_pt; 249 double _rho, _sigma, _rho_m, _sigma_m; 166 250 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 169 254 LimitedWarning _warning_rho_of_jet; 170 255 LimitedWarning _warning_rescaling; -
external/fastjet/tools/JHTopTagger.cc
rf6b6ee7 r49234af 1 // STARTHEADER2 // $Id $1 //FJSTARTHEADER 2 // $Id: JHTopTagger.cc 3433 2014-07-23 08:17:03Z salam $ 3 3 // 4 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez4 // Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 #include <fastjet/tools/JHTopTagger.hh> -
external/fastjet/tools/JHTopTagger.hh
rf6b6ee7 r49234af 2 2 #define __FASTJET_JH_TOP_TAGGER_HH__ 3 3 4 // STARTHEADER5 // $Id: JHTopTagger.hh 2689 2011-11-14 14:51:06Z soyez$6 // 7 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez4 //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 8 8 // 9 9 //---------------------------------------------------------------------- … … 16 16 // 17 17 // 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 19 20 // 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. 21 23 // 22 24 // FastJet is distributed in the hope that it will be useful, … … 28 30 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 29 31 //---------------------------------------------------------------------- 30 // ENDHEADER32 //FJENDHEADER 31 33 32 34 -
external/fastjet/tools/JetMedianBackgroundEstimator.cc
rf6b6ee7 r49234af 1 // STARTHEADER2 // $Id $3 // 4 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez1 //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 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 #include "fastjet/tools/JetMedianBackgroundEstimator.hh" … … 31 33 #include <fastjet/ClusterSequenceStructure.hh> 32 34 #include <iostream> 35 #include <sstream> 33 36 34 37 FASTJET_BEGIN_NAMESPACE // defined in fastjet/internal/base.hh … … 37 40 38 41 double 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()); 40 45 double scalar_pt = 0; 41 46 for (unsigned i = 0; i < constituents.size(); i++) { … … 43 48 } 44 49 return scalar_pt / jet.area(); 50 } 51 52 53 std::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(); 45 58 } 46 59 … … 72 85 const JetDefinition &jet_def, 73 86 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){ 75 88 76 89 // initialise things decently … … 261 274 262 275 //---------------------------------------------------------------------- 276 // returns rho_m (particle-masses contribution to the 4-vector density) 277 double 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. 292 double 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. 305 double 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. 318 double 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 //---------------------------------------------------------------------- 263 328 // configuring behaviour 264 329 //---------------------------------------------------------------------- … … 271 336 set_provide_fj2_sigma(false); 272 337 338 _enable_rho_m = true; 339 273 340 // reset the computed values 274 341 _rho = _sigma = 0.0; 342 _rho_m = _sigma_m = 0.0; 275 343 _n_jets_used = _n_empty_jets = 0; 276 344 _empty_area = _mean_area = 0.0; … … 289 357 // is used (as occurs also if this function is not called). 290 358 void 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)."); 292 360 _jet_density_class = jet_density_class_in; 293 361 _uptodate = false; … … 338 406 // fill the vector of pt/area (or the quantity from the jet density class) 339 407 // - in the range 340 vector<double> vector_for_median; 408 vector<double> vector_for_median_pt; 409 vector<double> vector_for_median_dt; 341 410 double total_area = 0.0; 342 411 _n_jets_used = 0; … … 346 415 347 416 // 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(); 348 420 for (unsigned i = 0; i < selected_jets.size(); i++) { 349 421 const PseudoJet & current_jet = selected_jets[i]; 350 422 351 423 double this_area = (_use_area_4vector) ? current_jet.area_4vector().perp() : current_jet.area(); 352 353 424 if (this_area>0){ 354 double median_input; 425 // for the pt component, we either use pt or the user-provided 426 // density class 355 427 if (_jet_density_class == 0) { 356 median_input = current_jet.perp()/this_area;428 median_input_pt = current_jet.perp()/this_area; 357 429 } else { 358 median_input = (*_jet_density_class)(current_jet);430 median_input_pt = (*_jet_density_class)(current_jet); 359 431 } 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 360 440 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; 362 444 } 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 364 451 total_area += this_area; 365 452 _n_jets_used++; … … 367 454 _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)."); 368 455 } 369 370 456 } 371 457 372 458 // 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) { 374 460 _rho = 0.0; 375 461 _sigma = 0.0; 462 _rho_m = 0.0; 463 _sigma_m = 0.0; 376 464 _mean_area = 0.0; 377 465 return; … … 392 480 393 481 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, 395 483 _provide_fj2_sigma); 396 484 … … 398 486 _mean_area = total_area / total_njets; 399 487 _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 } 400 495 401 496 // record that the computation has been performed … … 439 534 440 535 441 442 536 FASTJET_END_NAMESPACE 443 537 -
external/fastjet/tools/JetMedianBackgroundEstimator.hh
rf6b6ee7 r49234af 2 2 #define __FASTJET_BACKGROUND_ESTIMATOR_HH__ 3 3 4 // STARTHEADER5 // $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 $ 6 6 // 7 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez7 // Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 8 8 // 9 9 //---------------------------------------------------------------------- … … 16 16 // 17 17 // 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 19 20 // 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. 21 23 // 22 24 // FastJet is distributed in the hope that it will be useful, … … 28 30 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 29 31 //---------------------------------------------------------------------- 30 // ENDHEADER32 //FJENDHEADER 31 33 32 34 #include <fastjet/ClusterSequenceAreaBase.hh> … … 121 123 /// 122 124 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(); } 124 127 125 128 … … 168 171 } 169 172 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 170 177 //\} 171 178 … … 201 208 virtual bool has_sigma() {return true;} 202 209 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);} 203 238 //\} 204 239 … … 208 243 /// Returns the mean area of the jets used to actually compute the 209 244 /// background properties in the last call of rho() or sigma() 245 /// If the configuration has changed in the meantime, throw an error. 210 246 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(); 212 250 return _mean_area; 213 251 } … … 215 253 /// returns the number of jets used to actually compute the 216 254 /// background properties in the last call of rho() or sigma() 255 /// If the configuration has changed in the meantime, throw an error. 217 256 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(); 219 260 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; 220 274 } 221 275 … … 223 277 /// the selector) that is not occupied by jets. The value is that 224 278 /// for the last call of rho() or sigma() 279 /// If the configuration has changed in the meantime, throw an error. 225 280 /// 226 281 /// The answer is defined to be zero if the area calculation … … 234 289 /// call to the ClusterSequenceAreaBase function. 235 290 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(); 237 294 return _empty_area; 238 295 } … … 241 298 /// background properties. The value is that for the last call of 242 299 /// rho() or sigma(). 300 /// If the configuration has changed in the meantime, throw an error. 243 301 /// 244 302 /// If the area has explicit ghosts the result is zero; for active … … 250 308 /// call to the ClusterSequenceAreaBase function. 251 309 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(); 253 313 return _n_empty_jets; 254 314 } … … 361 421 /// Issue a warning otherwise 362 422 void _check_jet_alg_good_for_median() const; 363 423 364 424 // the basic parameters of this class (passed through the variou ctors) 365 425 Selector _rho_range; ///< range to compute the background in … … 368 428 std::vector<PseudoJet> _included_jets; ///< jets to be used 369 429 370 // the tunable aprameters of the class430 // the tunable parameters of the class 371 431 bool _use_area_4vector; 372 432 bool _provide_fj2_sigma; 373 433 const FunctionOfPseudoJet<double> * _jet_density_class; 374 434 //SharedPtr<BackgroundRescalingBase> _rescaling_class_sharedptr; 435 bool _enable_rho_m; 375 436 376 437 // the actual results of the computation 377 438 mutable double _rho; ///< background estimated density per unit area 378 439 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 379 442 mutable double _mean_area; ///< mean area of the jets used to estimate the background 380 443 mutable unsigned int _n_jets_used; ///< number of jets used to estimate the background … … 429 492 virtual double result(const PseudoJet & jet) const; 430 493 431 virtual std::string description() const {return "BackgroundScalarJetPtDensity";}494 virtual std::string description() const; 432 495 433 496 private: -
external/fastjet/tools/MassDropTagger.cc
rf6b6ee7 r49234af 1 // STARTHEADER2 // $Id $1 //FJSTARTHEADER 2 // $Id: MassDropTagger.cc 3433 2014-07-23 08:17:03Z salam $ 3 3 // 4 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez4 // Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 #include <fastjet/tools/MassDropTagger.hh> -
external/fastjet/tools/MassDropTagger.hh
rf6b6ee7 r49234af 1 // STARTHEADER2 // $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 $ 3 3 // 4 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez4 // Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 #ifndef __FASTJET_MASS_DROP_TAGGER_HH__ -
external/fastjet/tools/Pruner.cc
rf6b6ee7 r49234af 1 // STARTHEADER2 // $Id $3 // 4 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez1 //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 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 #include "fastjet/tools/Pruner.hh" … … 47 49 //---------------------------------------------------------------------- 48 50 // alternative (dynamic) ctor 49 // \param jet_def the jet definition for the internal clustering51 // \param jet_def the jet definition for the internal clustering 50 52 // \param zcut_dyn dynamic pt-fraction cut in the pruning 51 53 // \param Rcut_dyn dynamic angular distance cut in the pruning 52 54 Pruner::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) 55 57 : _jet_def(jet_def), _zcut(0), _Rcut_factor(0), 56 58 _zcut_dyn(zcut_dyn), _Rcut_dyn(Rcut_dyn), _get_recombiner_from_jet(false) { … … 74 76 double zcut = (_zcut_dyn) ? (*_zcut_dyn)(jet) : _zcut; 75 77 PruningPlugin * pruning_plugin; 78 76 79 // 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 79 81 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); 97 91 } else { 98 92 pruning_plugin = new PruningPlugin(_jet_def, zcut, Rcut); … … 122 116 PseudoJet result_local = SelectorNHardest(1)(cs->inclusive_jets())[0]; 123 117 PrunerStructure * s = new PrunerStructure(result_local); 118 s->_Rcut = Rcut; 119 s->_zcut = zcut; 124 120 result_local.set_structure_shared_ptr(SharedPtr<PseudoJetStructureBase>(s)); 125 121 … … 155 151 } 156 152 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. 159 bool 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 } 170 172 171 173 // if the jet has pieces, recurse in the pieces 172 174 if (jet.has_pieces()){ 173 175 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; 178 179 // never returned false, so we're OK. 179 return reco;180 return true; 180 181 } 181 182 182 183 // return false for any other (unknown) structure 183 return 0;184 return false; 184 185 } 185 186 -
external/fastjet/tools/Pruner.hh
rf6b6ee7 r49234af 2 2 #define __FASTJET_TOOLS_PRUNER_HH__ 3 3 4 // STARTHEADER5 // $Id: Pruner.hh 2616 2011-09-30 18:03:40Z salam$6 // 7 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez4 //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 8 8 // 9 9 //---------------------------------------------------------------------- … … 16 16 // 17 17 // 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 19 20 // 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. 21 23 // 22 24 // FastJet is distributed in the hope that it will be useful, … … 28 30 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 29 31 //---------------------------------------------------------------------- 30 // ENDHEADER32 //FJENDHEADER 31 33 32 34 #include "fastjet/ClusterSequence.hh" … … 43 45 class PruningRecombiner; 44 46 class 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 45 52 46 53 //---------------------------------------------------------------------- … … 135 142 /// \param Rcut_dyn dynamic angular distance cut in the pruning 136 143 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); 139 146 140 147 /// action on a single jet … … 152 159 bool _check_explicit_ghosts(const PseudoJet &jet) const; 153 160 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; 157 170 158 171 JetDefinition _jet_def; ///< the internal jet definition 159 172 double _zcut; ///< the pt-fraction cut 160 173 double _Rcut_factor; ///< the angular separation cut factor 161 FunctionOfPseudoJet<double> *_zcut_dyn; ///< dynamic zcut162 FunctionOfPseudoJet<double> *_Rcut_dyn; ///< dynamic Rcut174 const FunctionOfPseudoJet<double> *_zcut_dyn; ///< dynamic zcut 175 const FunctionOfPseudoJet<double> *_Rcut_dyn; ///< dynamic Rcut 163 176 bool _get_recombiner_from_jet; ///< true for minimal constructor, 164 177 ///< causes recombiner to be set equal … … 194 207 std::vector<PseudoJet> extra_jets() const; 195 208 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 196 215 protected: 197 216 friend class Pruner; ///< to allow setting the internal information 217 218 private: 219 double _Rcut, _zcut; 198 220 }; 199 221 -
external/fastjet/tools/RestFrameNSubjettinessTagger.cc
rf6b6ee7 r49234af 1 // STARTHEADER2 // $Id $1 //FJSTARTHEADER 2 // $Id: RestFrameNSubjettinessTagger.cc 3433 2014-07-23 08:17:03Z salam $ 3 3 // 4 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez4 // Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 #include <fastjet/tools/RestFrameNSubjettinessTagger.hh> -
external/fastjet/tools/RestFrameNSubjettinessTagger.hh
rf6b6ee7 r49234af 2 2 #define __FASTJET_RESTFRAMENSUBJETTINESS_TAGGER_HH__ 3 3 4 // STARTHEADER5 // $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 $ 6 6 // 7 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez7 // Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 8 8 // 9 9 //---------------------------------------------------------------------- … … 16 16 // 17 17 // 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 19 20 // 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. 21 23 // 22 24 // FastJet is distributed in the hope that it will be useful, … … 28 30 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 29 31 //---------------------------------------------------------------------- 30 // ENDHEADER32 //FJENDHEADER 31 33 32 34 #include <fastjet/PseudoJet.hh> -
external/fastjet/tools/Subtractor.cc
rf6b6ee7 r49234af 1 // STARTHEADER2 // $Id $3 // 4 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez1 //FJSTARTHEADER 2 // $Id: Subtractor.cc 3670 2014-09-08 14:17:59Z soyez $ 3 // 4 // Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 #include "fastjet/tools/Subtractor.hh" … … 38 40 39 41 42 //---------------------------------------------------------------------- 43 // ctor 40 44 Subtractor::Subtractor(double rho) : _bge(0), _rho(rho) { 41 assert(_rho>0.0); 42 } 43 45 if (_rho<0.0) throw Error("Subtractor(rho) was passed a negative rho value; rho should be >= 0"); 46 set_defaults(); 47 } 48 49 //---------------------------------------------------------------------- 50 // ctor 51 Subtractor::Subtractor(double rho, double rho_m) : _bge(0), _rho(rho) { 52 if (_rho<0.0) throw Error("Subtractor(rho, rho_m) was passed a negative rho value; rho should be >= 0"); 53 if (rho_m<0.0) throw Error("Subtractor(rho, rho_m) was passed a negative rho_m value; rho_m should be >= 0"); 54 set_defaults(); 55 _rho_m = rho_m; 56 set_use_rho_m(true); 57 } 58 59 //---------------------------------------------------------------------- 60 void Subtractor::set_defaults(){ 61 _rho_m = _invalid_rho; 62 _use_rho_m = false; // likely to change in future releases!! 63 _safe_mass = false; // likely to change in future releases!! 64 65 _sel_known_vertex = Selector(); 66 _sel_leading_vertex = Selector(); 67 } 68 69 //---------------------------------------------------------------------- 70 // perform the subtraction of a given jet 44 71 PseudoJet Subtractor::result(const PseudoJet & jet) const { 45 72 if (!jet.has_area()){ 46 throw Error("Trying to subtract a jet without area support"); 47 } 48 73 throw Error("Subtractor::result(...): Trying to subtract a jet without area support"); 74 } 75 76 PseudoJet known_lv, known_pu; 77 PseudoJet unknown = jet; 78 if (_sel_known_vertex.worker()){ 79 // separate the jet constituents in 3 groups: 80 // unknown vertex 81 // known vertex, leading vertex 82 // known vertex, non-leading vertex (PU) 83 vector<PseudoJet> constits_unknown, constits_known; 84 _sel_known_vertex.sift(jet.constituents(), 85 constits_known, 86 constits_unknown); 87 vector<PseudoJet> constits_known_lv, constits_known_pu; 88 _sel_leading_vertex.sift(constits_known, 89 constits_known_lv, 90 constits_known_pu); 91 92 // For the parts related to the known vertices (LV or PU), we just 93 // sum the 4-momenta. For the unknown part, we assign it the full 94 // jet area. 95 known_lv = (constits_known_lv.size()!=0) 96 ? SelectorIdentity().sum(constits_known_lv) : 0.0*jet; 97 known_pu = (constits_known_pu.size()!=0) 98 ? SelectorIdentity().sum(constits_known_pu) : 0.0*jet; 99 if (constits_unknown.size()==0){ 100 // no need for any form of subtraction! 101 PseudoJet subtracted_jet = jet; 102 subtracted_jet.reset_momentum(known_lv); 103 return subtracted_jet; 104 } 105 unknown = jet; // that keeps all info including area 106 unknown.reset_momentum(SelectorIdentity().sum(constits_unknown)); 107 } else { 108 known_lv = jet; // ensures correct rap-phi! 109 known_lv *= 0.0; 110 known_pu = known_lv; 111 } 112 113 // prepare for the subtraction and compute the 4-vector to be 114 // subtracted 115 PseudoJet subtracted_jet = jet; 116 PseudoJet to_subtract = known_pu + _amount_to_subtract(unknown); 117 118 // sanity check for the transverse momentum 119 if (to_subtract.pt2() < jet.pt2() ) { 120 // this subtraction should retain the jet's structural 121 // information 122 subtracted_jet -= to_subtract; 123 } else { 124 // this sets the jet's momentum while maintaining all of the jet's 125 // structural information 126 subtracted_jet.reset_momentum(known_lv); 127 return subtracted_jet; 128 } 129 130 // make sure that in the end the pt is at least the one known to 131 // come from the leading vertex 132 if (subtracted_jet.pt2() < known_lv.pt2()){ 133 subtracted_jet.reset_momentum(known_lv); 134 return subtracted_jet; 135 } 136 137 // sanity check for the mass (if needed) 138 if ((_safe_mass) && (subtracted_jet.m2() < known_lv.m2())){ 139 // in this case, we keep pt and phi as obtained from the 140 // subtraction above and take rap and m from the part that comes 141 // from the leading vertex (or the original jet if nothing comes 142 // from the leading vertex) 143 subtracted_jet.reset_momentum(PtYPhiM(subtracted_jet.pt(), 144 known_lv.rap(), 145 subtracted_jet.phi(), 146 known_lv.m())); 147 } 148 149 return subtracted_jet; 150 } 151 152 //---------------------------------------------------------------------- 153 std::string Subtractor::description() const{ 154 if (_bge != 0) { 155 string desc = "Subtractor that uses the following background estimator to determine rho: "+_bge->description(); 156 if (use_rho_m()) desc += "; including the rho_m correction"; 157 if (safe_mass()) desc += "; including mass safety tests"; 158 if (_sel_known_vertex.worker()){ 159 desc += "; using known vertex selection: "+_sel_known_vertex.description()+" and leading vertex selection: "+_sel_leading_vertex.description(); 160 } 161 return desc; 162 } else if (_rho != _invalid_rho) { 163 ostringstream ostr; 164 ostr << "Subtractor that uses a fixed value of rho = " << _rho; 165 if (use_rho_m()) ostr << " and rho_m = " << _rho_m; 166 return ostr.str(); 167 } else { 168 return "Uninitialised subtractor"; 169 } 170 } 171 172 //---------------------------------------------------------------------- 173 // compute the 4-vector that should be subtracted from the given 174 // jet 175 PseudoJet Subtractor::_amount_to_subtract(const PseudoJet &jet) const{ 176 // the "transverse momentum" part 49 177 double rho; 50 178 if (_bge != 0) { … … 53 181 rho = _rho; 54 182 } else { 55 throw Error(" default Subtractor does not have any information about the background, which isneeded to perform the subtraction");56 } 57 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 // information64 subtracted_jet -= rho*area4vect;65 } else {66 // this sets the jet's momentum to zero while67 // maintaining all of the jet's structural information68 subtracted_jet *= 0;69 }70 return subtracted_jet;71 } 72 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 } 183 throw Error("Subtractor::_amount_to_subtract(...): default Subtractor does not have any information about the background, needed to perform the subtraction"); 184 } 185 186 PseudoJet area = jet.area_4vector(); 187 PseudoJet to_subtract = rho*area; 188 189 double const rho_m_warning_threshold = 1e-5; 190 191 // add an optional contribution from the unknown particles masses 192 if (_use_rho_m) { 193 double rho_m; 194 195 if (_bge != 0) { 196 if (!_bge->has_rho_m()) throw Error("Subtractor::_amount_to_subtract(...): requested subtraction with rho_m from a background estimator, but the estimator does not have rho_m support"); 197 rho_m = _bge->rho_m(jet); 198 } else if (_rho_m != _invalid_rho) { 199 rho_m = _rho_m; 200 } else { 201 throw Error("Subtractor::_amount_to_subtract(...): default Subtractor does not have any information about the background rho_m, needed to perform the rho_m subtraction"); 202 } 203 to_subtract += rho_m * PseudoJet(0.0, 0.0, area.pz(), area.E()); 204 } else if (_bge && 205 _bge->has_rho_m() && 206 _bge->rho_m(jet) > rho_m_warning_threshold * rho) { 207 _unused_rho_m_warning.warn("Subtractor::_amount_to_subtract(...): 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"); 208 } 209 210 return to_subtract; 211 } 212 85 213 86 214 FASTJET_END_NAMESPACE -
external/fastjet/tools/Subtractor.hh
rf6b6ee7 r49234af 1 // STARTHEADER2 // $Id: Subtractor.hh 2577 2011-09-13 15:11:38Z salam$3 // 4 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez1 //FJSTARTHEADER 2 // $Id: Subtractor.hh 3670 2014-09-08 14:17:59Z soyez $ 3 // 4 // Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 #ifndef __FASTJET_TOOLS_SUBTRACTOR_HH__ 30 32 #define __FASTJET_TOOLS_SUBTRACTOR_HH__ 31 33 34 #include "fastjet/internal/base.hh" // namespace macros (include explicitly to help Doxygen) 32 35 #include "fastjet/tools/Transformer.hh" // to derive Subtractor from Transformer 33 36 #include "fastjet/tools/BackgroundEstimatorBase.hh" // used as a ctor argument … … 61 64 /// define a subtractor based on a BackgroundEstimator 62 65 Subtractor(BackgroundEstimatorBase * bge) : 63 _bge(bge), _rho(-1.0) { }66 _bge(bge), _rho(-1.0) { set_defaults(); } 64 67 65 68 /// define a subtractor that uses a fixed value of rho, the background … … 67 70 Subtractor(double rho); 68 71 72 /// define a subtractor that uses a fixed value of rho and rho_m; 73 /// both must be >= 0; 74 Subtractor(double rho, double rho_m); 75 69 76 /// default constructor 70 Subtractor() : _bge(0), _rho(_invalid_rho) { }77 Subtractor() : _bge(0), _rho(_invalid_rho) { set_defaults(); } 71 78 72 79 /// default dtor 73 80 virtual ~Subtractor(){}; 81 82 /// @name configuring the behaviour 83 //\{ 84 //---------------------------------------------------------------- 85 86 /// reset all parameters to default values 87 /// 88 /// Note: by default, the rho_m term is not included and the safety 89 /// test for the mass is not done. This is mostly for backwards 90 /// compatibility with FastJet 3.0 and is highly likely to change in 91 /// a future release of FastJet 92 void set_defaults(); 93 94 /// when 'use_rho_m' is true, include in the subtraction the 95 /// correction from rho_m, the purely longitudinal, 96 /// particle-mass-induced component of the background density per 97 /// unit area 98 /// 99 /// Note: this will be switched off by default (for backwards 100 /// compatibility with FastJet 3.0) but is highly likely to change 101 /// in a future release of FastJet 102 void set_use_rho_m(bool use_rho_m_in = true){ 103 if (_bge == 0 && _rho_m < 0) { 104 throw Error("Subtractor: rho_m support works only for Subtractors constructed with a background estimator or an explicit rho_m value"); 105 } 106 _use_rho_m=use_rho_m_in; 107 } 108 109 /// returns whether or not the rho_m component is used 110 bool use_rho_m() const{ return _use_rho_m;} 111 112 /// when 'safe_mass' is true, ensure that the mass of the subtracted 113 /// 4-vector remain positive 114 /// 115 /// when true, if the subtracted mass is negative, we return a 116 /// 4-vector with 0 mass, pt and phi from the subtracted 4-vector 117 /// and the rapidity of the original, unsubtracted jet. 118 /// 119 /// Note: this will be switched off by default (for backwards 120 /// compatibility with FastJet 3.0) but is highly likely to change 121 /// in a future release of FastJet 122 void set_safe_mass(bool safe_mass_in=true){ _safe_mass=safe_mass_in;} 123 124 /// returns whether or not safety tests on the mass are included 125 bool safe_mass() const{ return _safe_mass;} 126 127 /// This is mostly intended for cherge-hadron-subtracted type of 128 /// events where we wich to use vertex information to improve the 129 /// subtraction. 130 /// 131 /// Given the following parameters: 132 /// \param sel_known_vertex selects the particles with a 133 /// known vertex origin 134 /// \param sel_leading_vertex amongst the particles with a 135 /// known vertex origin, select those 136 /// coming from the leading vertex 137 /// Momentum identified as coming from the leading vertex will be 138 /// kept, momentum identified as coming from a non-leading vertex 139 /// will be eliminated and a regular area-median subtraction will be 140 /// applied on the 4-vector sum of the particles with unknown vertex 141 /// origin. 142 /// 143 /// When this is set, we shall ensure that the pt of the subtracted 144 /// 4-vector is at least the pt of the particles that are known to 145 /// come from the leading vertex (if it fails, subtraction returns 146 /// the component that is known to come from the leading vertex --- 147 /// or, the original unsubtracted jet if it contains no particles 148 /// from the leading vertex). Furthermore, when safe_mass() is on, we 149 /// also impose a similar constraint on the mass of the subtracted 150 /// 4-vector (if the test fails, the longitudinal part of the 151 /// subtracted 4-vector is taken from the component that is known to 152 /// come from the leading vertex). 153 void set_known_selectors(const Selector &sel_known_vertex, 154 const Selector &sel_leading_vertex){ 155 _sel_known_vertex = sel_known_vertex; 156 _sel_leading_vertex = sel_leading_vertex; 157 } 158 159 //\} 160 161 /// @name description and action 162 //\{ 163 //---------------------------------------------------------------- 74 164 75 165 /// returns a jet that's subtracted … … 82 172 virtual std::string description() const; 83 173 174 //\} 84 175 protected: 176 /// compute the 4-vector that should be subtracted from the given 177 /// jet 178 PseudoJet _amount_to_subtract(const PseudoJet &jet) const; 85 179 86 180 /// the tool used to estimate the background 87 181 /// if has to be mutable in case its underlying selector takes a reference jet 88 182 mutable BackgroundEstimatorBase * _bge; 89 /// the fixed value of rho to use if the user has selected that option 90 double _rho; 183 /// the fixed value of rho and/or rho_m to use if the user has selected that option 184 double _rho, _rho_m; 185 186 // configuration parameters/flags 187 bool _use_rho_m; ///< include the rho_m correction 188 bool _safe_mass; ///< ensures that the subtracted mass is +ve 189 190 Selector _sel_known_vertex; ///< selects the particles with a 191 ///< known vertex origin 192 Selector _sel_leading_vertex; ///< amongst the particles with a 193 ///< known vertex origin, select those 194 ///< coming from the leading vertex 91 195 92 196 /// a value of rho that is used as a default to label that the stored … … 98 202 // that's not allowed in an include file. 99 203 static const double _invalid_rho; 204 205 mutable LimitedWarning _unused_rho_m_warning; 100 206 }; 101 207 -
external/fastjet/tools/TopTaggerBase.cc
rf6b6ee7 r49234af 1 // STARTHEADER2 // $Id $1 //FJSTARTHEADER 2 // $Id: TopTaggerBase.cc 3433 2014-07-23 08:17:03Z salam $ 3 3 // 4 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez4 // Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 #include <fastjet/tools/TopTaggerBase.hh> -
external/fastjet/tools/TopTaggerBase.hh
rf6b6ee7 r49234af 2 2 #define __FASTJET_TOP_TAGGER_BASE_HH__ 3 3 4 // STARTHEADER5 // $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 $ 6 6 // 7 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez7 // Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 8 8 // 9 9 //---------------------------------------------------------------------- … … 16 16 // 17 17 // 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 19 20 // 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. 21 23 // 22 24 // FastJet is distributed in the hope that it will be useful, … … 28 30 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 29 31 //---------------------------------------------------------------------- 30 // ENDHEADER32 //FJENDHEADER 31 33 32 34 #include <fastjet/internal/base.hh> -
external/fastjet/tools/Transformer.hh
rf6b6ee7 r49234af 1 // STARTHEADER2 // $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 $ 3 3 // 4 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez4 // Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 #ifndef __FASTJET_TRANSFORMER_HH__ -
external/fastjet/version.hh
rf6b6ee7 r49234af 1 // STARTHEADER2 // $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 $ 3 3 // 4 // Copyright (c) 2005-201 1, Matteo Cacciari, Gavin P. Salam and Gregory Soyez4 // Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez 5 5 // 6 6 //---------------------------------------------------------------------- … … 13 13 // 14 14 // 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 16 17 // 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. 18 20 // 19 21 // FastJet is distributed in the hope that it will be useful, … … 25 27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>. 26 28 //---------------------------------------------------------------------- 27 // ENDHEADER29 //FJENDHEADER 28 30 29 31 #ifndef __FASTJET_VERSION_HH__
Note:
See TracChangeset
for help on using the changeset viewer.