74 :
jet_radius_(iConfig.getParameter<double>(
"jet_radius"))
75 ,
min_jet_pt_(iConfig.getParameter<double>(
"min_jet_pt"))
78 iConfig.getParameter<
edm::InputTag>(
"jets")))
80 iConfig.getParameter<
edm::InputTag>(
"vertices")))
82 iConfig.getParameter<
edm::InputTag>(
"secondary_vertices")))
84 iConfig.getParameter<
edm::InputTag>(
"shallow_tag_infos")))
86 produces<DeepDoubleXTagInfoCollection>();
100 desc.
add<
double>(
"jet_radius", 0.8);
101 desc.
add<
double>(
"min_jet_pt", 150);
102 desc.
add<
double>(
"min_candidate_pt", 0.95);
107 descriptions.
add(
"pfDeepDoubleXTagInfos", desc);
114 auto output_tag_infos = std::make_unique<DeepDoubleXTagInfoCollection>();
128 const auto&
pv = vtxs->at(0);
140 for (std::size_t jet_n = 0; jet_n < jets->size(); jet_n++)
147 const auto&
jet = jets->at(jet_n);
149 const auto* pat_jet =
dynamic_cast<const pat::Jet*
>(&
jet);
159 if ((jet_n < taginfos.
size()) && (taginfos[jet_n].
jet() == jet_ref))
161 match = taginfos.
ptrAt(jet_n);
166 for (
auto itTI = taginfos.
begin(), edTI = taginfos.
end(); itTI != edTI;
169 if (itTI->jet() == jet_ref)
171 match = taginfos.
ptrAt(itTI - taginfos.
begin());
186 features.
npv = vtxs->size();
194 auto svs_sorted = *svs;
196 std::sort(svs_sorted.begin(), svs_sorted.end(),
197 [&
pv](
const auto& sva,
const auto& svb) {
201 for (
const auto&
sv : svs_sorted)
218 std::vector<btagbtvdeep::SortingClass<size_t>> c_sorted, n_sorted;
219 std::vector<int> n_indexes;
222 std::map<unsigned int, btagbtvdeep::TrackInfoBuilder> trackinfos;
225 const auto& svs_unsorted = *svs;
228 std::vector<const reco::Candidate*>
daughters;
229 for (
unsigned int i = 0;
i <
jet.numberOfDaughters();
i++)
236 if (
cand->numberOfDaughters() > 0)
238 for (
unsigned int k = 0;
k <
cand->numberOfDaughters();
k++)
241 dynamic_cast<const pat::PackedCandidate*>(
cand->daughter(
k)));
247 daughters.push_back(packed_cand);
254 daughters.push_back(reco_cand);
258 std::sort(daughters.begin(), daughters.end(), [](
const auto&
a,
const auto&
b) {
return a->pt() >
b->pt(); });
259 for (
unsigned int i = 0;
i < daughters.size();
i++)
261 auto const*
cand = daughters.at(
i);
269 if (
cand->charge() != 0)
271 auto&
trackinfo = trackinfos.emplace(
i, track_builder).first->second;
273 c_sorted.emplace_back(
279 n_indexes.push_back(
i);
288 std::vector<size_t> c_sortedindices, n_sortedindices;
300 for (
unsigned int i = 0;
i < daughters.size();
i++)
302 auto const*
cand = daughters.at(
i);
316 reco_ptr = pf_jet->getPFConstituent(
i);
317 }
else if (pat_jet && reco_cand) {
318 reco_ptr = pat_jet->getPFConstituent(
i);
326 if (
cand->charge() != 0) {
328 auto entry = c_sortedindices.at(
i);
336 packed_cand, *pat_jet,
trackinfo, drminpfcandsv, static_cast<float>(
jet_radius_), c_pf_features);
341 int pv_ass_quality = 0;
344 auto ctrack = reco_cand->bestTrack();
347 for (
size_t ii = 0;
ii < vtxs->size();
ii++)
349 float dz = (ctrack) ?
std::abs(ctrack->dz(((*vtxs)[
ii]).position())) : 0;
364 auto entry = n_sortedindices.at(
i);
370 packed_cand, *pat_jet, drminpfcandsv, static_cast<float>(
jet_radius_), n_pf_features);
371 }
else if (reco_cand) {
373 reco_cand,
jet, drminpfcandsv, static_cast<float>(
jet_radius_), puppiw, n_pf_features);
379 output_tag_infos->emplace_back(features, jet_ref);
edm::EDGetTokenT< VertexCollection > vtx_token_
edm::View< reco::BoostedDoubleSVTagInfo > BoostedDoubleSVTagInfoCollection
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Ptr< value_type > ptrAt(size_type i) const
const double min_candidate_pt_
std::vector< Vertex > VertexCollection
collection of Vertex objects
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
TaggingVariableList taggingVariables(void) const override
returns a description of the extended informations in a TaggingVariableList
void beginStream(edm::StreamID) override
Jets made from PFObjects.
std::vector< VertexCompositePtrCandidate > VertexCompositePtrCandidateCollection
collection of Candidate objects
std::vector< reco::DeepDoubleXTagInfo > DeepDoubleXTagInfoCollection
~DeepDoubleXTagInfoProducer() override
void endStream() override
float mindrsvpfcand(const std::vector< reco::VertexCompositePtrCandidate > &svs, const reco::Candidate *cand, float mindr=0.4)
#define DEFINE_FWK_MODULE(type)
const_iterator begin() const
void doubleBTagToFeatures(const reco::TaggingVariableList &tag_info_vars, BoostedDoubleSVTagInfoFeatures &tag_info_features)
Abs< T >::type abs(const T &t)
BoostedDoubleSVTagInfoFeatures tag_info_features
ParameterDescriptionBase * add(U const &iLabel, T const &value)
edm::Ref< VertexCollection > VertexRef
persistent reference to a Vertex
reco::VertexCollection VertexCollection
bool isNonnull() const
Checks for non-null.
constexpr auto deltaR(const T1 &t1, const T2 &t2) -> decltype(t1.eta())
void packedCandidateToFeatures(const pat::PackedCandidate *c_pf, const pat::Jet &jet, const TrackInfoBuilder &track_info, const float drminpfcandsv, const float jetR, ChargedCandidateFeatures &c_pf_features, const bool flip=false)
DeepDoubleXTagInfoProducer(const edm::ParameterSet &)
edm::EDGetTokenT< SVCollection > sv_token_
bool sv_vertex_comparator(const SVType &sva, const SVType &svb, const PVType &pv)
void recoCandidateToFeatures(const reco::PFCandidate *c_pf, const reco::Jet &jet, const TrackInfoBuilder &track_info, const float drminpfcandsv, const float jetR, const float puppiw, const int pv_ass_quality, const reco::VertexRef &pv, ChargedCandidateFeatures &c_pf_features, const bool flip=false)
XYZVectorD XYZVector
spatial vector with cartesian internal representation
static void jetToFeatures(const reco::Jet &jet, JetFeatures &jet_features)
void produce(edm::Event &, const edm::EventSetup &) override
Analysis-level calorimeter jet class.
void add(std::string const &label, ParameterSetDescription const &psetDescription)
std::vector< std::size_t > invertSortingVector(const std::vector< SortingClass< std::size_t > > &in)
edm::EDGetTokenT< BoostedDoubleSVTagInfoCollection > shallow_tag_info_token_
void svToFeatures(const reco::VertexCompositePtrCandidate &sv, const reco::Vertex &pv, const reco::Jet &jet, SecondaryVertexFeatures &sv_features, const bool flip=false)
Particle reconstructed by the particle flow algorithm.
std::vector< ChargedCandidateFeatures > c_pf_features
const_iterator end() const
std::pair< typename Association::data_type::first_type, double > match(Reference key, Association association, bool bestMatchByMaxValue)
Generic matching function.
std::vector< NeutralCandidateFeatures > n_pf_features
std::vector< SecondaryVertexFeatures > sv_features
edm::EDGetTokenT< edm::View< reco::Jet > > jet_token_
reco::VertexCompositePtrCandidateCollection SVCollection