10 #include "Math/Vector2D.h"
46 explicit operator bool()
const {
47 return jets.size() > 1;
51 return accumulate(
jets.begin(),
jets.end(), 1.0,
52 [] (
double w,
const Jet& j) {
53 return w * j.weights.front();
59 return accumulate(
jets.begin(),
jets.end(), 0.0,
60 [](
double sum,
const auto& jet) {
61 return sum + jet.CorrPt();
75 BOOST_THROW_EXCEPTION( invalid_argument(
"insufficient jetMultiplicity for SpT calculation") );
81 for (
auto& pr : triple) {
84 ROOT::Math::XYVector pTsum(jet1.Px() + jet2.Px(), jet1.Py() + jet2.Py());
85 S2 += pow( pTsum.R() / (
jets[pr.first].CorrPt() +
jets[pr.second].CorrPt()), 2 );
87 sumS += sqrt(S2 / 3.0
f);
102 BOOST_THROW_EXCEPTION( invalid_argument(
"insufficient jetMultiplicity for Sphi calculation") );
107 for (
auto& pr : triple) {
110 S2 += pow(DeltaPhi(jet1, jet2), 2);
112 sumS += sqrt(S2 / 3.0
f);
120 static const auto jetPairs = []() {
121 std::vector<int> elements{0, 1, 2, 3, 4, 5};
122 std::vector<std::pair<int, int>> current;
123 std::vector<std::vector<std::pair<int, int>>> results;
128 auto pairJetsIndices = [](
const std::vector<int>& elements,
129 std::vector<std::pair<int, int>>& current,
130 std::vector<std::vector<std::pair<int, int>>>& results,
131 auto&&
self) ->
void {
133 if (elements.empty()) {
134 results.push_back(current);
138 int first = elements.front();
140 std::vector<int> rest(elements.begin() + 1, elements.end());
143 for (
size_t i = 0; i < rest.size(); ++i) {
144 int partner = rest[i];
146 current.emplace_back(first, partner);
149 std::vector<int> next;
150 next.reserve(rest.size() - 1);
151 for (
size_t j = 0; j < rest.size(); ++j) {
153 next.push_back(rest[j]);
157 self(next, current, results,
self);
162 pairJetsIndices(elements, current, results, pairJetsIndices);