21 namespace btagbtvdeep {
24 const std::vector<float>& masses,
29 std::vector<btagbtvdeep::SeedingTrackFeatures>& seedingT_features_vector)
35 std::multimap<double, std::pair<btagbtvdeep::SeedingTrackInfoBuilder, std::vector<btagbtvdeep::TrackPairFeatures>>>
37 std::multimap<double, btagbtvdeep::TrackPairInfoBuilder> sortedNeighboursMap;
39 std::vector<btagbtvdeep::TrackPairFeatures> tp_features_vector;
41 sortedSeedsMap.clear();
42 seedingT_features_vector.clear();
44 std::vector<std::pair<bool, Measurement1D>> absIP3D(selectedTracks.size());
45 std::vector<std::pair<bool, Measurement1D>> absIP2D(selectedTracks.size());
46 std::vector<bool> absIP3D_filled(selectedTracks.size(),
false);
47 std::vector<bool> absIP2D_filled(selectedTracks.size(),
false);
49 unsigned int selTrackCount = 0;
51 for (
auto const& it : selectedTracks) {
53 sortedNeighboursMap.clear();
54 tp_features_vector.clear();
61 absIP3D[selTrackCount - 1] = ip;
62 absIP3D_filled[selTrackCount - 1] =
true;
71 if (!(ip.first && ip.second.value() >= 0.0 && ip.second.significance() >= 1.0 && ip.second.value() <= 9999. &&
72 ip.second.significance() <= 9999. && it.track().normalizedChi2() < 5. &&
73 std::fabs(it.track().dxy(pv.
position())) < 2 && std::fabs(it.track().dz(pv.
position())) < 17 &&
74 jet_dist.second.value() < 0.07 && length < 5.))
79 absIP2D[selTrackCount - 1] = ip2d;
80 absIP2D_filled[selTrackCount - 1] =
true;
86 masses[selTrackCount - 1],
89 jet_dist.second.value(),
94 unsigned int neighbourTrackCount = 0;
96 for (
auto const&
tt : selectedTracks) {
97 neighbourTrackCount += 1;
99 if (neighbourTrackCount == selTrackCount)
101 if (std::fabs(pv.
z() -
tt.track().vz()) > 0.1)
105 if (!absIP2D_filled[neighbourTrackCount - 1]) {
107 absIP2D_filled[neighbourTrackCount - 1] =
true;
110 if (!absIP3D_filled[neighbourTrackCount - 1]) {
112 absIP3D_filled[neighbourTrackCount - 1] =
true;
115 std::pair<bool, Measurement1D> t_ip = absIP3D[neighbourTrackCount - 1];
116 std::pair<bool, Measurement1D> t_ip2d = absIP2D[neighbourTrackCount - 1];
119 trackPairInfo.
buildTrackPairInfo(&(it), &(
tt), pv, masses[neighbourTrackCount - 1], jetdirection, t_ip, t_ip2d);
120 sortedNeighboursMap.insert(std::make_pair(trackPairInfo.
pca_distance(), trackPairInfo));
125 for (
auto const& im : sortedNeighboursMap) {
126 if (max_counter >= 20)
130 auto const&
tp = im.second;
132 tp_features.
pt = (
tp.track_pt() == 0) ? 0 : 1.0 /
tp.track_pt();
133 tp_features.
eta =
tp.track_eta();
134 tp_features.
phi =
tp.track_phi();
135 tp_features.
mass =
tp.track_candMass();
169 max_counter = max_counter + 1;
170 tp_features_vector.push_back(tp_features);
173 sortedSeedsMap.insert(std::make_pair(-seedInfo.
sip3d_Signed(), std::make_pair(seedInfo, tp_features_vector)));
176 int max_counter_seed = 0;
178 for (
auto const& im : sortedSeedsMap) {
179 if (max_counter_seed >= 10)
184 auto const&
seed = im.second.first;
187 seed_features.
pt = (
seed.pt() == 0) ? 0 : 1.0 /
seed.pt();
188 seed_features.
eta =
seed.eta();
189 seed_features.
phi =
seed.phi();
209 max_counter_seed = max_counter_seed + 1;
210 seedingT_features_vector.push_back(seed_features);
213 if (sortedSeedsMap.size() < 10) {
214 for (
unsigned int i = sortedSeedsMap.size();
i < 10;
i++) {
215 std::vector<btagbtvdeep::TrackPairFeatures> tp_features_zeropad(20);
217 seed_features_zeropad.
nearTracks = tp_features_zeropad;
218 seedingT_features_vector.push_back(seed_features_zeropad);
static std::vector< std::string > checklist log
double pz() const final
z coordinate of momentum vector
T mag() const
The vector magnitude. Equivalent to sqrt(vec.mag2())
double y() const
y coordinate
Base class for all types of Jets.
GlobalPoint globalPosition() const
float dotprod_PCAjetMomenta
const Point & position() const
position
double px() const final
x coordinate of momentum vector
float dotprodTrackSeedVectors2D
tuple computeProbabilities
double z() const
z coordinate
float dotprodTrackSeedVectors3D
double py() const final
y coordinate of momentum vector
std::vector< btagbtvdeep::TrackPairFeatures > nearTracks
constexpr auto deltaR(const T1 &t1, const T2 &t2) -> decltype(t1.eta())
void buildTrackPairInfo(const reco::TransientTrack *it, const reco::TransientTrack *tt, const reco::Vertex &pv, float mass, GlobalVector jetdirection, const std::pair< bool, Measurement1D > &t_ip, const std::pair< bool, Measurement1D > &t_ip2d)
void buildSeedingTrackInfo(const reco::TransientTrack *it, const reco::Vertex &pv, const reco::Jet &jet, float mass, const std::pair< bool, Measurement1D > &ip, const std::pair< bool, Measurement1D > &ip2d, float jet_distance, float jaxis_dlength, HistogramProbabilityEstimator *m_probabilityEstimator, bool m_computeProbabilities)
double x() const
x coordinate
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)
const float sip3d_Signed() const
float logWithOffset(float v, float logOffset=0)
const float pca_distance() const