int TopLeptonicPair::Train(boca::Event const& event, boca::PreCuts const&, Tag tag) { INFO0; auto triplets = top_leptonic_reader_.Multiplets(event); DEBUG(triplets.size()); auto particles = event.GenParticles(); auto top_particles = CopyIfParticle(particles, Id::top); CHECK(top_particles.size() == 2, top_particles.size()); // std::vector<Jet>neutrinos = CopyIfNeutrino(particles); if (top_particles.size() != 2 && tag == Tag::signal) DEBUG(particles.size()); auto final_triplets = BestMatches(triplets, top_particles, tag); // CHECK(final_triplets.size()==2, final_triplets.size()); auto sextets = UnorderedPairs(final_triplets, [](Triplet const & triplet_1, Triplet const & triplet_2) { Quartet22 quartet(Doublet(triplet_1.Singlet(), triplet_1.Doublet().Jet()), Doublet(triplet_2.Singlet(), triplet_2.Doublet().Jet())); if (quartet.Overlap()) throw Overlap(); quartet.Doublet1().SetBdt(triplet_1.Bdt()); quartet.Doublet2().SetBdt(triplet_2.Bdt()); WimpMass wimp_mass; // Insert(sextets, wimp_mass.Sextet(quartet, event.MissingEt(), neutrinos, tag)); return wimp_mass.Fake(quartet); }); if (tag == Tag::signal && sextets.size() > 1) { DEBUG(sextets.size()); sextets = BestRapidity(sextets); } return SaveEntries(sextets); }
std::vector<Doublet> Higgs::Doublets(boca::Event const& event, std::function<boost::optional<Doublet>(Doublet&)> const& function) const { INFO0; auto jets = event.Jets(); auto jet_range = MomentumRange{Id::higgs, Id::higgs}; auto doublets = UnorderedPairs(jet_range.SofterThanMax(jets), [&](boca::Jet const & jet_1, boca::Jet const & jet_2) { auto doublet = Doublet{jet_1, jet_2}; if (!jet_range.BelowUpperBound(doublet)) throw boca::Problematic(); if (auto optional = function(doublet)) return *optional; throw boca::Problematic(); }); for (auto const & jet : jet_range.HarderThanMin(jets)) { auto doublet = Doublet{}; doublet.Enforce(jet); if (auto optional = function(doublet)) doublets.emplace_back(*optional); } return doublets; }
std::vector<Sextet33> TopLeptonicPair::Multiplets(boca::Event const& event, boca::PreCuts const&, TMVA::Reader const& reader) { auto triplets = top_leptonic_reader_.Multiplets(event); INFO(triplets.size()); auto sextets = UnorderedPairs(triplets, [&](Triplet const & triplet_1, Triplet const & triplet_2) { Quartet22 quartet(Doublet(triplet_1.Singlet(), triplet_1.Doublet().Jet()), Doublet(triplet_2.Singlet(), triplet_2.Doublet().Jet())); if (quartet.Overlap()) throw Overlap(); quartet.Doublet1().SetBdt(triplet_1.Bdt()); quartet.Doublet2().SetBdt(triplet_2.Bdt()); WimpMass wimp_mass; // for (auto sextet : wimp_mass.Sextets(quartet, event.MissingEt())) { Sextet33 sextet = wimp_mass.Fake(quartet); sextet.SetBdt(Bdt(sextet, reader)); return sextet; // } }); INFO(sextets.size()); return sextets; }
Angle TruthVariables::BosonDeltaRMin() const { return bosons_.empty() ? 0_rad : *boost::min_element(UnorderedPairs(bosons_, [](Particle const & particle_1, Particle const & particle_2) { return particle_1.DeltaRTo(particle_2); })); }