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);
}
Example #2
0
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;
}
Example #4
0
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);
    }));
}