10 #include <Math/VectorUtil.h>
11 #include <Math/GenVector/PxPyPzE4D.h>
12 #include <Math/GenVector/PxPyPzM4D.h>
73 jets_(params.getParameter<edm::InputTag>(
"jets")),
74 jetPtCut_(params.getParameter<double>(
"jetPtCut")),
75 jetEtaCut_(params.getParameter<double>(
"jetEtaCut"))
89 flavours_ = fs->
make<TH1F>(
"flavours",
"jet flavours", 5, 0, 5);
102 flavour =
"light flavour jets";
106 flavour =
"charm jets";
110 flavour =
"bottom jets";
114 flavour =
"unidentified jets";
120 Form(
"number of secondary vertices in %s", flavour),
122 plots.
deltaR = fs->
make<TH1F>(Form(
"deltaR_%s", name),
123 Form(
"\\DeltaR between vertex direction and jet direction in %s", flavour),
125 plots.
mass = fs->
make<TH1F>(Form(
"mass_%s", name),
126 Form(
"vertex mass in %s", flavour),
128 plots.
dist = fs->
make<TH1F>(Form(
"dist_%s", name),
129 Form(
"Transverse distance between PV and SV in %s", flavour),
131 plots.
distErr = fs->
make<TH1F>(Form(
"distErr_%s", name),
132 Form(
"Transverse distance error between PV and SV in %s", flavour),
134 plots.
distSig = fs->
make<TH1F>(Form(
"distSig_%s", name),
135 Form(
"Transverse distance significance between PV and SV in %s", flavour),
137 plots.
nTracks = fs->
make<TH1F>(Form(
"nTracks_%s", name),
138 Form(
"number of tracks at secondary vertex in %s", flavour),
140 plots.
chi2 = fs->
make<TH1F>(Form(
"chi2_%s", name),
141 Form(
"secondary vertex fit \\chi^{2} in %s", flavour),
152 event.getByLabel(
jets_, jetsHandle);
155 for(pat::JetCollection::const_iterator
jet = jetsHandle->begin();
156 jet != jetsHandle->end(); ++
jet) {
190 *
jet->tagInfoSecondaryVertex();
231 double deltaR = ROOT::Math::VectorUtil::DeltaR(
232 jet->momentum(), dir2);
243 ROOT::Math::LorentzVector<ROOT::Math::PxPyPzM4D<double> > vec;
244 vec.SetPx((*track)->px());
245 vec.SetPy((*track)->py());
246 vec.SetPz((*track)->pz());
248 trackFourVectorSum += vec;
Measurement1D flightDistance(unsigned int index, bool in2d=false) const
trackRef_iterator tracks_end() const
last iterator over tracks
#define DEFINE_FWK_MODULE(type)
virtual void analyze(const edm::Event &event, const edm::EventSetup &es)
XYZTLorentzVectorD XYZTLorentzVector
Lorentz vector with cylindrical internal representation using pseudorapidity.
const GlobalVector & flightDirection(unsigned int index) const
const Vertex & secondaryVertex(unsigned int index) const
struct PatBJetVertexAnalyzer::Plots plots_[N_JET_TYPES]
PatBJetVertexAnalyzer(const edm::ParameterSet ¶ms)
constructor and destructor
double chi2() const
chi-squares
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger but the state exists so we define the behavior If all triggers are the negative crieriion will lead to accepting the event(this again matches the behavior of"!*"before the partial wildcard feature was incorporated).The per-event"cost"of each negative criterion with multiple relevant triggers is about the same as!*was in the past
double deltaR(double eta1, double eta2, double phi1, double phi2)
double significance() const
XYZVectorD XYZVector
spatial vector with cartesian internal representation
unsigned int nVertices() const
std::vector< TrackBaseRef >::const_iterator trackRef_iterator
The iteratator for the vector<TrackRef>
T * make() const
make new ROOT object
trackRef_iterator tracks_begin() const
first iterator over tracks
int flavour(const Candidate &part)
size_t tracksSize() const
number of tracks