112 jet_radius_(iConfig.getParameter<double>(
"jet_radius")),
114 flip_(iConfig.getParameter<
bool>(
"flip")),
126 min_jet_pt_(iConfig.getParameter<double>(
"min_jet_pt")),
127 max_jet_eta_(iConfig.getParameter<double>(
"max_jet_eta"))
129 produces<DeepFlavourTagInfoCollection>();
132 if (!puppi_value_map_tag.label().empty()) {
138 if (!pvas_tag.label().empty()) {
140 pvas_token_ = consumes<edm::Association<VertexCollection>>(pvas_tag);
156 desc.
add<
double>(
"jet_radius", 0.4);
157 desc.
add<
double>(
"min_candidate_pt", 0.95);
158 desc.
add<
bool>(
"flip",
false);
165 desc.
add<
bool>(
"fallback_puppi_weight",
false);
166 desc.
add<
bool>(
"fallback_vertex_association",
false);
167 desc.
add<
bool>(
"run_deepVertex",
false);
168 desc.
add<
bool>(
"compute_probabilities",
false);
169 desc.
add<
double>(
"min_jet_pt", 15.0);
170 desc.
add<
double>(
"max_jet_eta", 2.5);
171 descriptions.
add(
"pfDeepFlavourTagInfos", desc);
177 auto output_tag_infos = std::make_unique<DeepFlavourTagInfoCollection>();
191 const auto &
pv = vtxs->at(0);
201 double negative_cut = 0;
207 ).getParameter<
double>(
"sip3dSigMax");
227 std::vector<float>
masses;
232 unsigned int k =
track - tracks->begin();
233 if(
track->bestTrack() !=
nullptr &&
track->pt()>0.5) {
234 if (std::fabs(
track->vz()-
pv.z())<0.5) {
235 selectedTracks.push_back(track_builder->
build(tracks->ptrAt(k)));
236 masses.push_back(
track->mass()); }
241 for (std::size_t jet_n = 0; jet_n < jets->size(); jet_n++) {
247 const auto &
jet = jets->at(jet_n);
250 const auto * pat_jet =
dynamic_cast<const pat::Jet *
>(&
jet);
256 if ((jet_n < taginfos.
size()) && (taginfos[jet_n].
jet() == jet_ref)) {
257 match = taginfos.
ptrAt(jet_n);
260 for (
auto itTI = taginfos.
begin(), edTI = taginfos.
end(); itTI != edTI; ++itTI) {
261 if (itTI->jet() == jet_ref) { match = taginfos.
ptrAt( itTI - taginfos.
begin() );
break; }
273 features.
npv = vtxs->size();
284 auto svs_sorted = *svs;
286 std::sort(svs_sorted.begin(), svs_sorted.end(),
287 [&
pv](
const auto & sva,
const auto &svb)
290 for (
const auto &
sv : svs_sorted) {
302 std::vector<btagbtvdeep::SortingClass<size_t> > c_sorted, n_sorted;
305 std::map<unsigned int, btagbtvdeep::TrackInfoBuilder> trackinfos;
308 const auto & svs_unsorted = *svs;
310 for (
unsigned int i = 0;
i <
jet.numberOfDaughters();
i++){
316 if (
cand->charge() != 0) {
317 auto &
trackinfo = trackinfos.emplace(
i,track_builder).first->second;
319 c_sorted.emplace_back(
i,
trackinfo.getTrackSip2dSig(),
322 n_sorted.emplace_back(
i, -1,
329 std::sort(c_sorted.begin(),c_sorted.end(),
331 std::sort(n_sorted.begin(),n_sorted.end(),
334 std::vector<size_t> c_sortedindices,n_sortedindices;
347 for (
unsigned int i = 0;
i <
jet.numberOfDaughters();
i++){
354 if (
cand->pt()<0.95)
continue;
362 reco_ptr = pf_jet->getPFConstituent(
i);
363 }
else if (pat_jet && reco_cand) {
364 reco_ptr = pat_jet->getPFConstituent(
i);
369 puppiw = (*puppi_value_map)[reco_ptr];
372 "use fallback_puppi_weight option to use " << puppiw <<
"as default";
377 if (
cand->charge() != 0) {
379 auto entry = c_sortedindices.at(
i);
382 if(
flip_ && (
trackinfo.getTrackSip3dSig() > negative_cut)){
continue;}
389 }
else if (reco_cand) {
391 int pv_ass_quality = 0;
393 pv_ass_quality = (*pvasq_value_map)[reco_ptr];
396 "use fallback_vertex_association option to use" << pv_ass_quality <<
397 "as default quality and closest dz PV as criteria";
401 auto ctrack = reco_cand->bestTrack();
404 for(
size_t ii=0;
ii<vtxs->size();
ii++){
405 float dz = (ctrack) ?
std::abs(ctrack->dz(((*vtxs)[
ii]).position())) : 0;
406 if(dz<dist) {pvi=
ii;dist=
dz; }
414 drminpfcandsv, static_cast<float> (
jet_radius_), puppiw,
415 pv_ass_quality,
PV, c_pf_features,
flip_);
419 auto entry = n_sortedindices.at(
i);
426 }
else if (reco_cand) {
441 output_tag_infos->emplace_back(features, jet_ref);
457 unsigned long long cacheId3D= re3D.cacheIdentifier();
T getParameter(std::string const &) const
unsigned long long cacheIdentifier() const
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
bool fallback_puppi_weight_
reco::VertexCompositePtrCandidateCollection SVCollection
reco::VertexCollection VertexCollection
bool isNonnull() const
Checks for non-null.
ShallowTagInfoFeatures tag_info_features
void endStream() override
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Ptr< value_type > ptrAt(size_type i) const
edm::View< reco::ShallowTagInfo > ShallowTagInfoCollection
std::vector< NeutralCandidateFeatures > n_pf_features
void produce(edm::Event &, const edm::EventSetup &) override
std::vector< SecondaryVertexFeatures > sv_features
reco::TransientTrack build(const reco::Track *p) const
std::vector< Vertex > VertexCollection
collection of Vertex objects
std::vector< ChargedCandidateFeatures > c_pf_features
key_type key() const
Accessor for product key.
~DeepFlavourTagInfoProducer() override
Jets made from PFObjects.
std::vector< VertexCompositePtrCandidate > VertexCompositePtrCandidateCollection
collection of Candidate objects
void checkEventSetup(const edm::EventSetup &iSetup)
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
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
bool use_puppi_value_map_
std::unique_ptr< HistogramProbabilityEstimator > probabilityEstimator_
const double min_candidate_pt_
const double max_jet_eta_
edm::EDGetTokenT< edm::ValueMap< float > > puppi_value_map_token_
Abs< T >::type abs(const T &t)
ParameterDescriptionBase * add(U const &iLabel, T const &value)
edm::Ref< VertexCollection > VertexRef
persistent reference to a Vertex
edm::EDGetTokenT< ShallowTagInfoCollection > shallow_tag_info_token_
edm::EDGetTokenT< SVCollection > sv_token_
TaggingVariableList taggingVariables(void) const override
returns a description of the extended informations in a TaggingVariableList
void beginStream(edm::StreamID) override
bool isNonnull() const
Checks for non-null.
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)
bool compute_probabilities_
edm::EDGetTokenT< edm::View< reco::Candidate > > candidateToken_
constexpr auto deltaR2(const T1 &t1, const T2 &t2) -> decltype(t1.eta())
bool fallback_vertex_association_
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)
bool use_pvasq_value_map_
unsigned long long calibrationCacheId3D_
edm::EDGetTokenT< edm::View< reco::Jet > > jet_token_
Analysis-level calorimeter jet class.
void add(std::string const &label, ParameterSetDescription const &psetDescription)
unsigned long long calibrationCacheId2D_
std::vector< std::size_t > invertSortingVector(const std::vector< SortingClass< std::size_t > > &in)
DeepFlavourTagInfoProducer(const edm::ParameterSet &)
void seedingTracksToFeatures(const std::vector< reco::TransientTrack > &selectedTracks, const std::vector< float > &masses, const reco::Jet &jet, const reco::Vertex &pv, HistogramProbabilityEstimator *probabilityEstimator, bool computeProbabilities, std::vector< btagbtvdeep::SeedingTrackFeatures > &seedingT_features_vector)
void svToFeatures(const reco::VertexCompositePtrCandidate &sv, const reco::Vertex &pv, const reco::Jet &jet, SecondaryVertexFeatures &sv_features, const bool flip=false)
edm::EDGetTokenT< edm::Association< VertexCollection > > pvas_token_
edm::EDGetTokenT< edm::ValueMap< int > > pvasq_value_map_token_
edm::EDGetTokenT< VertexCollection > vtx_token_
Particle reconstructed by the particle flow algorithm.
boost::indirect_iterator< typename seq_t::const_iterator > const_iterator
std::vector< reco::DeepFlavourTagInfo > DeepFlavourTagInfoCollection
const_iterator end() const
std::pair< typename Association::data_type::first_type, double > match(Reference key, Association association, bool bestMatchByMaxValue)
Generic matching function.
void bTagToFeatures(const reco::TaggingVariableList &tag_info_vars, ShallowTagInfoFeatures &tag_info_features)
std::vector< SeedingTrackFeatures > seed_features
T const * product() const
ParameterSet const & parameterSet(Provenance const &provenance)
Provenance const * provenance() const