1 #ifndef RecoBTag_SecondaryVertex_CombinedSVComputer_h 2 #define RecoBTag_SecondaryVertex_CombinedSVComputer_h 10 #include <Math/VectorUtil.h> 37 #define range_for(i, x) for (int i = (x).begin; i != (x).end; i += (x).increment) 64 template <
class SVTI,
class IPTI>
69 double &vtx_track_ptSum,
70 double &vtx_track_ESum)
const;
90 template <
class SVTI,
class IPTI>
95 double &vtx_track_ptSum,
96 double &vtx_track_ESum)
const {
100 typedef typename IPTI::input_container
Container;
105 bool havePv = ipInfo.primaryVertex().
isNonnull();
108 pv =
GlobalPoint(ipInfo.primaryVertex()->x(), ipInfo.primaryVertex()->y(), ipInfo.primaryVertex()->z());
124 double jet_track_ESum = 0.;
147 const std::vector<reco::btag::TrackIPData> &ipData = ipInfo.impactParameterData();
149 const Container &
tracks = ipInfo.selectedTracks();
150 std::vector<TrackRef> pseudoVertexTracks;
152 std::vector<TrackRef> trackPairV0Test(2);
155 std::size_t
idx = indices[
i];
157 const TrackRef &
track = tracks[
idx];
169 allKinematics.
add(track);
173 pseudoVertexTracks.push_back(track);
174 vertexKinematics.
add(track);
178 trackPairV0Test[0] =
track;
184 std::size_t pairIdx = indices[
j];
186 const TrackRef &pairTrack = tracks[pairIdx];
191 trackPairV0Test[1] = pairTrack;
200 trackJetKinematics.
add(track);
204 double trackMag =
std::sqrt(trackMom.Mag2());
221 double perp_trackMom_jetDir = VectorUtil::Perp2(trackMom, jetDir);
222 perp_trackMom_jetDir = (perp_trackMom_jetDir > 0. ?
std::sqrt(perp_trackMom_jetDir) : 0.);
234 for (
typename std::vector<TrackRef>::const_iterator trkIt = pseudoVertexTracks.begin();
235 trkIt != pseudoVertexTracks.end();
238 vtx_track_ptSum +=
std::sqrt((*trkIt)->momentum().Perp2());
280 double varPi = (vertexMass / 5.2794) *
281 (vtx_track_ESum / jet_track_ESum);
283 double varB = (
std::sqrt(5.2794) * vtx_track_ptSum) / (vertexMass *
std::sqrt(jet->pt()));
295 if (pfJet !=
nullptr) {
316 }
else if (patJet !=
nullptr && patJet->
isPFJet()) {
355 #endif // RecoBTag_SecondaryVertex_CombinedSVComputer_h
reco::TrackSelector trackSelector
int photonMultiplicity() const
photonMultiplicity
const math::XYZTLorentzVector & weightedVectorSum() const
float neutralHadronEnergyFraction() const
neutralHadronEnergyFraction (relative to uncorrected jet energy)
float photonEnergyFraction() const
photonEnergyFraction (relative to corrected jet energy)
int electronMultiplicity() const
electronMultiplicity
virtual ~CombinedSVComputer()=default
unsigned int pseudoMultiplicityMin
float chargedHadronEnergyFraction() const
chargedHadronEnergyFraction (relative to uncorrected jet energy)
void add(const reco::Track &track, double weight=1.0)
int photonMultiplicity() const
photonMultiplicity
bool vertexMassCorrection
float chargedHadronEnergyFraction() const
chargedHadronEnergyFraction
Base class for all types of Jets.
double etaRel(const math::XYZVector &dir, const math::XYZVector &track)
reco::TrackSelector trackNoDeltaRSelector
reco::V0Filter pseudoVertexV0Filter
Global3DPoint GlobalPoint
int muonMultiplicity() const
muonMultiplicity
bool isNonnull() const
Checks for non-null.
virtual reco::TaggingVariableList operator()(const reco::TrackIPTagInfo &ipInfo, const reco::SecondaryVertexTagInfo &svInfo) const
int chargedHadronMultiplicity() const
chargedHadronMultiplicity
CombinedSVComputer(const edm::ParameterSet ¶ms)
float photonEnergyFraction() const
photonEnergyFraction
Jets made from PFObjects.
XYZTLorentzVectorD XYZTLorentzVector
Lorentz vector with cylindrical internal representation using pseudorapidity.
reco::btag::SortCriteria sortCriterium
Container::value_type value_type
reco::TrackSelector trackPseudoSelector
int neutralHadronMultiplicity() const
neutralHadronMultiplicity
float neutralHadronEnergyFraction() const
neutralHadronEnergyFraction
IterationRange flipIterate(int size, bool vertex) const
bool isPFJet() const
check to see if the jet is a reco::PFJet
reco::V0Filter trackPairV0Filter
std::vector< reco::btau::TaggingVariableName > taggingVariables
double significance() const
unsigned int numberOfTracks() const
float electronEnergyFraction() const
electronEnergyFraction (relative to corrected jet energy)
GlobalPoint closestToJetAxis
XYZVectorD XYZVector
spatial vector with cartesian internal representation
double flipValue(double value, bool vertex) const
edm::Ref< TrackCollection > TrackRef
persistent reference to a Track
float electronEnergyFraction() const
electronEnergyFraction
Analysis-level calorimeter jet class.
edm::ParameterSet dropDeltaR(const edm::ParameterSet &pset) const
const reco::btag::TrackIPData & threshTrack(const reco::CandIPTagInfo &trackIPTagInfo, const reco::btag::SortCriteria sort, const reco::Jet &jet, const GlobalPoint &pv) const
int chargedHadronMultiplicity() const
chargedHadronMultiplicity
Measurement1D distanceToJetAxis
int muonMultiplicity() const
muonMultiplicity
void fillCommonVariables(reco::TaggingVariableList &vars, reco::TrackKinematics &vertexKinematics, const IPTI &ipInfo, const SVTI &svInfo, double &vtx_track_ptSum, double &vtx_track_ESum) const
char data[epos_bytes_allocation]
int neutralHadronMultiplicity() const
neutralHadronMultiplicity
const math::XYZTLorentzVector & vectorSum() const
float muonEnergyFraction() const
muonEnergyFraction (relative to corrected jet energy)
float muonEnergyFraction() const
muonEnergyFraction
edm::AssociationVector< reco::JetRefBaseProd, Values > Container
int electronMultiplicity() const
electronMultiplicity
void insert(const TaggingVariable &variable, bool delayed=false)
unsigned int trackMultiplicityMin