Object * quote(Object * object) {
    if (object->getObjectType() == DOUBLET) {
        Doublet * doublet = dynamic_cast<Doublet *>(object);
        return doublet->getCar();
    }
    return new Nil;
}
Exemplo n.º 2
0
MultipletSignature<Quartet211> SignatureLeptonTagger::Signature(Doublet const& doublet, Singlet const& singlet_1, Singlet const& singlet_2) const
{
    Quartet211 quartet;
    if ((doublet.Jet() + singlet_1.Jet()).Mass() > (doublet.Jet() + singlet_2.Jet()).Mass()) quartet.SetMultiplets(doublet, singlet_1, singlet_2);
    else quartet.SetMultiplets(doublet, singlet_2, singlet_1);
    if (quartet.Overlap()) throw Overlap();
    return MultipletSignature<Quartet211>(quartet);
}
Exemplo n.º 3
0
Doublet Higgs::PrepareDoublet(Doublet const& doublet, std::vector<Lepton>& leptons)
{
    INFO0;
    //     if (auto optional = MassDrop(doublet)) prepared = *optional;
    auto jet_1 = static_cast<boca::Jet>(doublet.Singlet1());
    auto jet_2 = static_cast<boca::Jet>(doublet.Singlet2());
    auto prepared = Doublet{bottom_reader_.Multiplet(jet_1), bottom_reader_.Multiplet(jet_2)};
    prepared.SetClosestLepton(leptons);
    return prepared;
}
Object * cdr(Object * object) {
    if (object->getObjectType() != DOUBLET) {
        return new Nil;
    }

    Doublet * doubletInput = dynamic_cast<Doublet *>(object);
    if (doubletInput->getCar()->getObjectType() != DOUBLET) {
        return new Nil;
    }

    return doubletInput->getCdr();
}
Object * car(Object * object) {
    if (object->getObjectType() != DOUBLET) {
        return new Nil;
    }

    Doublet * doubletInput = dynamic_cast<Doublet *>(object);
    if (doubletInput->getCar()->getObjectType() != DOUBLET) {
        return new Nil;
    }

    Doublet doubletCar = Doublet(((*doubletInput).getCar()), new Nil);
    return doubletCar.getCar();
}
int length(Doublet doublet) {
    if (doublet.getCar()->getObjectType() == NIL) {
        return 0;
    }

    Object * cdr = doublet.getCdr();

    if (cdr->getObjectType() != DOUBLET) {
        return 1;
    }

    Doublet * doubletCdr = dynamic_cast<Doublet *>(cdr);

    return 1 + length(*doubletCdr);
}
Exemplo n.º 7
0
boost::optional<Doublet> Higgs::SetTag(Doublet& doublet, std::vector<Lepton>& leptons, PreCuts const& pre_cuts, Tag tag)
{
    INFO0;
    doublet = PrepareDoublet(doublet, leptons);
    if (Problematic(doublet, pre_cuts, tag)) return boost::none;
    doublet.SetTag(tag);
    return doublet;
}
Exemplo n.º 8
0
boost::optional<Doublet> Higgs::Multiplet(Doublet& doublet, std::vector<Lepton>& leptons, PreCuts const& pre_cuts, TMVA::Reader const& reader)
{
    INFO0;
    doublet = PrepareDoublet(doublet, leptons);
    if (Problematic(doublet, pre_cuts)) return boost::none;
    doublet.SetBdt(Bdt(doublet, reader));
    return doublet;
}
Exemplo n.º 9
0
MultipletSignature<Octet332> SignatureT::Signature(Triplet const& triplet_1, Triplet const& triplet_2, Doublet const& doublet) const
{
    Octet332 octet;
    if (boca::Jet((triplet_1.Jet() + doublet.Jet())).Mass() > boca::Jet(triplet_2.Jet() + doublet.Jet()).Mass()) octet.SetMultiplets(triplet_1, triplet_2, doublet);
    else octet.SetMultiplets(triplet_2, triplet_1, doublet);
    if (octet.Overlap()) throw Overlap();
    return MultipletSignature<Octet332>(octet);
}
Object * cons(Object * object) {
    if (object->getObjectType() == NIL) {
        Doublet doublet(new Nil, new Nil);
        Object * res = &doublet;
        return res;
    }
    if (object->getObjectType() != DOUBLET) {
        return new Nil;
    }

    Doublet * doubletInput = dynamic_cast<Doublet *>(object);
    if (doubletInput->getCdr()->getObjectType() == NIL) {
        Doublet doubletOutput(doubletInput->getCar(), new Nil);
        Object * res = &doubletOutput;
        return res;
    }

    Doublet doubletOutput(doubletInput->getCar(), doubletInput->getCdr());
    Object * res = &doubletOutput;
    return res;
}
Exemplo n.º 11
0
boost::optional<Doublet> Higgs::MassDrop(Doublet const& doublet)
{
    INFO0;
    auto cluster_sequence = ClusterSequence{doublet.Constituents(), Settings::JetDefinition(doublet.DeltaR() + 2. * Settings::JetConeSize())};
    auto exclusive_jets = cluster_sequence.ExclusiveJets(1);
    if (exclusive_jets.empty()) return boost::none;
    auto mass_drop_tagger = fastjet::MassDropTagger{0.667, 0.09};
    auto mass_drop_jet = mass_drop_tagger(exclusive_jets.front().FastJet());
    if (mass_drop_jet == 0) return boost::none;

    auto radius = boca::Jet(mass_drop_jet.pieces().at(0)).DeltaRTo(mass_drop_jet.pieces().at(1));
    radius = std::min(radius / 2., 300_mrad);
    auto filter = fastjet::Filter{Settings::JetDefinition(radius), fastjet::SelectorNHardest(3)};
    auto filtered_jet = filter.result(mass_drop_jet);
    if (!filtered_jet.has_pieces()) return boost::none;
    auto pieces = SortedByPt(JetVector(filtered_jet.pieces()));
    if (pieces.size() < 2) return boost::none;
    return Doublet(bottom_reader_.Multiplet(pieces.at(0)), bottom_reader_.Multiplet(pieces.at(1)));
}
Object * set(Object * object) {
    if (object->getObjectType() != DOUBLET) {
        return new Nil;
    }

    Doublet * doubletInput = dynamic_cast<Doublet *>(object);
    if (doubletInput->getCar()->getObjectType() != DOUBLET) {
        return new Nil;
    }

    Object * value = new Nil;
    if (doubletInput->getCdr()->getObjectType() != NIL) {
        Doublet * doubletCdr = dynamic_cast<Doublet *>(doubletInput->getCdr());
        value = doubletCdr->getCar();
    }

    Object * car = doubletInput->getCar();
    return &(*car = *value);
}