38 HLTFilter_(iConfig.getParameter<vector<
string>>(
"HLTFilter")),
39 HLTPath_(iConfig.getParameter<vector<
string>>(
"HLTPath")) {
102 for (
unsigned int ip = 0; ip < HLTPath.size(); ip++) {
103 int N_Triggers = trigResults->
size();
105 for (
int i_Trig = 0; i_Trig < N_Triggers; ++i_Trig) {
106 if (!trigResults->
accept(i_Trig))
109 if (TrigPath.find(HLTPath[ip]) != std::string::npos)
118 std::vector<string> Seed) {
121 using namespace reco;
128 std::vector<std::array<float, 5>> max_per_trigger;
130 for (
unsigned int ipath = 0; ipath < Seed.size(); ipath++) {
131 std::vector<std::array<float, 5>> tot_tr_obj_pt_eta_phi;
132 if (!triggerObjectsSummary.
isValid())
134 size_t filterIndex = (*triggerObjectsSummary).filterIndex(
InputTag(Seed[ipath],
"",
"HLT"));
136 if (filterIndex < (*triggerObjectsSummary).sizeFilters()) {
138 for (
size_t j = 0;
j < keys.size();
j++) {
140 std::array<float, 5> tr_obj_pt_eta_phi;
141 if (fabs(foundObject.
id()) != 13)
143 tr_obj_pt_eta_phi[0] = foundObject.
pt();
144 tr_obj_pt_eta_phi[1] = foundObject.
eta();
145 tr_obj_pt_eta_phi[2] = foundObject.
phi();
146 tr_obj_pt_eta_phi[3] = foundObject.
id() / fabs(foundObject.
id());
147 tot_tr_obj_pt_eta_phi.push_back(tr_obj_pt_eta_phi);
151 if (!tot_tr_obj_pt_eta_phi.empty()) {
152 std::sort(tot_tr_obj_pt_eta_phi.begin(),
153 tot_tr_obj_pt_eta_phi.end(),
154 [](
const std::array<float, 5>&
a,
const std::array<float, 5>&
b) {
return a[0] >
b[0]; });
155 max_per_trigger.push_back(tot_tr_obj_pt_eta_phi.at(0));
160 std::sort(max_per_trigger.begin(),
161 max_per_trigger.end(),
162 [](
const std::array<float, 5>&
a,
const std::array<float, 5>&
b) {
return a[0] >
b[0]; });
163 return max_per_trigger.at(0);
170 using namespace reco;
197 if (vertices->empty())
245 bool isFake =
vtx.isFake();
272 if (deltaRmu < MuTrgMatchCone && SelectedMu_DR > deltaRmu) {
278 bool tight =
false, soft =
false;
279 if (vertices.isValid()) {
283 const Track* mutrack =
mu.bestTrack();
290 auto muTrack = std::make_shared<reco::Track>(*mutrack);
305 unsigned int count_el = -1;
318 const Track* eltrack = el.bestTrack();
323 auto ElTrack = std::make_shared<reco::Track>(*eltrack);
326 el_pt.push_back(eltrack->pt());
327 el_eta.push_back(eltrack->eta());
328 el_phi.push_back(eltrack->phi());
344 if (trk.charge() == 0)
358 auto cleanTrack = std::make_shared<reco::Track>(trk);
369 TLorentzVector vel1, vel2;
370 std::vector<std::shared_ptr<reco::Track>> cleanedObjects;
374 cleanedObjects.push_back(vec);
379 cleanedObjects.push_back(vec);
382 if (cleanedObjects.empty())
385 for (
auto&
obj : cleanedObjects) {
387 unsigned int iobj = &
obj - &cleanedObjects[0];
389 float massLep = 0.0005;
400 vel1.SetPtEtaPhiM(
obj->pt(),
obj->eta(),
obj->phi(), massLep);
404 unsigned int itrk2 = &trk2 - &cleanedTracks[0];
406 if (
obj->charge() * trk2->charge() == 1)
410 vel2.SetPtEtaPhiM(trk2->pt(), trk2->eta(), trk2->phi(), massLep);
427 float InvMassLepLep = (vel1 + vel2).M();
430 auto trantrk2 = std::make_shared<reco::TransientTrack>(
reco::TransientTrack(*trk2, &(*bFieldHandle)));
431 std::vector<reco::TransientTrack> tempTracks;
432 tempTracks.reserve(2);
433 tempTracks.push_back(*tranobj);
434 tempTracks.push_back(*trantrk2);
435 LLvertex = theKalmanFitter.
vertex(tempTracks);
446 -1 * ((theBeamSpot->
y0() - LLvertex.
position().
y()) +
451 float tempCos = vperp.Dot(pperp) / (vperp.R() * pperp.R());
467 auto tranobj = std::make_shared<reco::TransientTrack>(
reco::TransientTrack(*objtrk, &(*bFieldHandle)));
468 auto tranpair = std::make_shared<reco::TransientTrack>(
reco::TransientTrack(*pairtrk, &(*bFieldHandle)));
470 float massLep = 0.0005;
473 vel1.SetPtEtaPhiM(objtrk->pt(), objtrk->eta(), objtrk->phi(), massLep);
474 vel2.SetPtEtaPhiM(pairtrk->pt(), pairtrk->eta(), pairtrk->phi(), massLep);
477 if (trk->charge() == objtrk->charge() &&
487 vK.SetPtEtaPhiM(trk->pt(), trk->eta(), trk->phi(), 0.493);
489 float InvMass = (vel1 + vel2 + vK).M();
492 if ((vel1 + vel2 + vK).Pt() <
PtB_Cut)
494 auto trantrk = std::make_shared<reco::TransientTrack>(
reco::TransientTrack(*trk, &(*bFieldHandle)));
495 std::vector<reco::TransientTrack> tempTracks;
496 tempTracks.reserve(3);
497 tempTracks.push_back(*tranobj);
498 tempTracks.push_back(*tranpair);
499 tempTracks.push_back(*trantrk);
500 LLvertex = theKalmanFitter.
vertex(tempTracks);
508 -1 * ((theBeamSpot->
y0() - LLvertex.
position().
y()) +
511 math::XYZVector pperp((vel1 + vel2 + vK).Px(), (vel1 + vel2 + vK).Py(), 0);
513 float tempCos = vperp.Dot(pperp) / (vperp.R() * pperp.R());
GlobalError positionError() const
std::vector< float > muon_eta
T getParameter(std::string const &) const
double z0() const
z coordinate
std::vector< std::shared_ptr< reco::Track > > cleanedTracks
std::vector< unsigned int > object_id
bool getByToken(EDGetToken token, Handle< PROD > &result) const
bool filter(edm::Event &, const edm::EventSetup &) override
bool accept() const
Has at least one path accepted the event?
float totalChiSquared() const
edm::EDGetTokenT< reco::VertexCollection > vtxToken_
double TrkObjExclusionCone
edm::EDGetTokenT< edm::TriggerResults > trgresultsToken_
std::vector< std::shared_ptr< reco::Track > > cleanedPairTracks
std::vector< Conversion > ConversionCollection
collectin of Conversion objects
std::vector< unsigned int > Epair_ObjectId
std::vector< string > HLTFilter_
std::vector< unsigned int > Epair_ObjectIndex
std::vector< std::shared_ptr< reco::Track > > MuTracks
std::vector< unsigned int > Epair_TrkIndex
Single trigger physics object (e.g., an isolated muon)
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
reco::TrackBase::Point vertex_point
double dydz() const
dydz slope
#define DEFINE_FWK_MODULE(type)
std::vector< float > SelectedTrgObj_PtEtaPhiCharge
double eta() const
pseudorapidity of momentum vector
void addDefault(ParameterSetDescription const &psetDescription)
edm::EDGetToken electronsToken_
std::vector< float > el_pt
edm::EDGetTokenT< edm::ValueMap< float > > eleBWPToken_
std::vector< unsigned int > object_container
float degreesOfFreedom() const
const TriggerObjectCollection & getObjects() const
unsigned int size() const
Get number of paths stored.
GlobalPoint position() const
double pt() const
track transverse momentum
CachingVertex< 5 > vertex(const std::vector< reco::TransientTrack > &tracks) const override
float ChiSquaredProbability(double chiSquared, double nrDOF)
std::vector< float > el_eta
bool isTightMuonCustom(const reco::Muon &recoMu, const reco::Vertex recoVtx)
std::vector< unsigned int > Trk_container
bool isMediumMuonCustom(const reco::Muon &recoMu)
std::vector< float > muon_medium
bool isSoftMuon(const reco::Muon &, const reco::Vertex &, bool run2016_hip_mitigation=false)
double ElTrgExclusionCone
edm::EDGetTokenT< trigger::TriggerEvent > trigobjectsToken_
bool isNull() const
Checks for null.
std::vector< std::shared_ptr< reco::Track > > cleanedObjTracks
double dxdz() const
dxdz slope
std::vector< std::shared_ptr< reco::Track > > ElTracks
std::vector< float > muon_pt
std::vector< TriggerObject > TriggerObjectCollection
collection of trigger physics objects (e.g., all isolated muons)
edm::EDGetTokenT< reco::BeamSpot > beamSpotToken_
double MuTrgExclusionCone
XYZVectorD XYZVector
spatial vector with cartesian internal representation
std::string const & triggerName(unsigned int index) const
edm::EDGetTokenT< reco::ConversionCollection > conversionsToken_
std::vector< size_type > Keys
T rerr(const GlobalPoint &aPoint) const
std::vector< float > el_phi
edm::EDGetToken muonsToken_
~LeptonSkimming() override
std::vector< float > muon_tight
bool hltFired(const edm::Event &iEvent, const edm::EventSetup &iSetup, std::vector< string > HLTPath)
bool ObjPtLargerThanTrack
std::vector< float > muon_soft
edm::EDGetTokenT< edm::ValueMap< float > > eleUnBWPToken_
std::vector< string > HLTPath_
std::vector< float > muon_phi
void beginStream(edm::StreamID) override
double y0() const
y coordinate
std::array< float, 5 > hltObject(const edm::Event &iEvent, const edm::EventSetup &iSetup, std::vector< string > Seed)
const Point & position() const
position
LeptonSkimming(const edm::ParameterSet &)
edm::TriggerNames const & triggerNames(edm::TriggerResults const &triggerResults) const override
double x0() const
x coordinate
void endStream() override