int SignatureT::Train(boca::Event const& event, boca::PreCuts const&, Tag tag) { INFO0; auto particles = event.GenParticles(); auto triplets = top_reader_.Multiplets(event); auto tops = CopyIfParticle(particles, Id::top); auto final_triplets = triplets; // auto final_triplets = BestMatches(triplets, tops, tag); DEBUG(triplets.size(), tops.size(), final_triplets.size()); auto doublets = higgs_reader_.Multiplets(event); auto higgses = CopyIfParticles(particles, {Id::higgs, Id::CP_violating_higgs}); auto final_doublets = doublets; // auto final_doublets = BestMatches(doublets, higgses, tag); DEBUG(doublets.size(), higgses.size(), final_doublets.size()); auto octets = Triples(final_triplets, final_doublets, [&](Triplet const & triplet_1, Triplet const & triplet_2, Doublet const & doublet) { auto octet = Signature(triplet_1, triplet_2, doublet); octet.SetTag(tag); return octet; }); DEBUG(octets.size()); return SaveEntries(octets, 1); }
int SignatureLeptonTagger::Train(Event const& event, boca::PreCuts const&, Tag tag) { INFO0; std::vector<Lepton> leptons = event.Leptons().leptons(); if (leptons.size() < 2) return 0; std::vector<Particle> particles = event.Partons().GenParticles(); std::vector<Particle> lepton_particle = CopyIfParticles(particles, {Id::electron, Id::muon}); // ERROR(lepton_particle); lepton_particle = CopyIfGrandMother(lepton_particle, Id::top); // ERROR(lepton_particle); std::vector<Lepton> final_leptons = CopyIfClose(leptons, lepton_particle); // ERROR(final_leptons); std::vector<Doublet> doublets = higgs_reader_.Multiplets(event); std::vector<Particle> higgses = CopyIfParticles(particles, {Id::higgs, Id::CP_violating_higgs}); std::vector<Doublet> final_doublets = BestMatches(doublets, higgses, tag); std::vector<MultipletSignature<Quartet211>> quartets = Triples(final_leptons, final_doublets, [&](Singlet const& singlet_1, Singlet const& singlet_2, Doublet const& doublet) { MultipletSignature<Quartet211> quartet = Signature(doublet, singlet_1, singlet_2); quartet.SetTag(tag); return quartet; }); DEBUG(quartets.size()); if (tag == Tag::signal) quartets = ReduceResult(quartets, 1); DEBUG(quartets.size()); return SaveEntries(quartets); }
std::vector<MultipletSignature<Quartet211>> SignatureLeptonTagger::Multiplets(Event const& event, PreCuts const&, TMVA::Reader const& reader) { INFO0; std::vector<Lepton> leptons = event.Leptons().leptons(); if (leptons.size() < 2) return {}; std::vector<Doublet> doublets = higgs_reader_.Multiplets(event); INFO(doublets.size()); std::vector<MultipletSignature<Quartet211>> quartets = Triples(leptons, doublets, [&](Singlet const& singlet_1, Singlet const& singlet_2, Doublet const& doublet) { MultipletSignature<Quartet211> quartet = Signature(doublet, singlet_1, singlet_2); quartet.SetBdt(Bdt(quartet, reader)); return quartet; }); return ReduceResult(quartets); }
std::vector<MultipletSignature<Octet332>> SignatureT::Multiplets(boca::Event const& event, PreCuts const&, TMVA::Reader const& reader) { INFO0; auto doublets = higgs_reader_.Multiplets(event); INFO(doublets.size()); auto triplets = top_reader_.Multiplets(event); INFO(triplets.size()); auto octets = Triples(triplets, doublets, [&](Triplet const & triplet_1, Triplet const & triplet_2, Doublet const & doublet) { auto octet = Signature(triplet_1, triplet_2, doublet); octet.SetBdt(Bdt(octet, reader)); return octet; }); DEBUG(octets.size()); return octets; }
std::vector<Quattuordecuplet554> SignatureEffectiveTagger::Quattuordecuplets(boca::Event const& event, std::function< Quattuordecuplet554(Quattuordecuplet554&)> const& function) { INFO0; auto hadronic = top_partner_hadronic_reader_.Multiplets(event, 8); auto leptonic = top_partner_leptonic_reader_.Multiplets(event, 8); auto higgs_pairs = higgs_pair_reader_.Multiplets(event, 8); auto signatures = Triples(hadronic, leptonic, higgs_pairs, [&](Quintet const & quintet_1, Quintet const & quintet_2) { Decuplet55 decuplet(quintet_1, quintet_2); if (decuplet.Overlap()) throw Overlap(); return decuplet; }, [&](Decuplet55 const & decuplet, Quartet22 const & quartet) { Quattuordecuplet554 quattuordecuplet; quattuordecuplet.SetMultiplets12(decuplet, quartet); if (quattuordecuplet.Overlap()) throw Overlap(); return function(quattuordecuplet); }); // static int sig = 0; // static int eve = 0; // ++eve; // if (!signatures.empty()) ++sig; // double fraction = double(sig) / eve; // ERROR(signatures.size(), hadronic.size(), leptonic.size(), higgs_pairs.size(), fraction); return signatures; }