39 HLTFilter_(iConfig.getParameter<
vector<
string>>(
"HLTFilter")),
40 HLTPath_(iConfig.getParameter<
vector<
string>>(
"HLTPath")) {
103 for (
unsigned int ip = 0; ip <
HLTPath.size(); ip++) {
104 int N_Triggers = trigResults->
size();
106 for (
int i_Trig = 0; i_Trig < N_Triggers; ++i_Trig) {
107 if (!trigResults->
accept(i_Trig))
110 if (TrigPath.find(
HLTPath[ip]) != std::string::npos)
119 std::vector<string>
Seed) {
122 using namespace reco;
129 std::vector<std::array<float, 5>> max_per_trigger;
131 for (
unsigned int ipath = 0; ipath <
Seed.size(); ipath++) {
132 std::vector<std::array<float, 5>> tot_tr_obj_pt_eta_phi;
133 if (!triggerObjectsSummary.
isValid())
135 size_t filterIndex = (*triggerObjectsSummary).filterIndex(
InputTag(
Seed[ipath],
"",
"HLT"));
137 if (filterIndex < (*triggerObjectsSummary).sizeFilters()) {
139 for (
size_t j = 0;
j <
keys.size();
j++) {
141 std::array<float, 5> tr_obj_pt_eta_phi;
142 if (fabs(foundObject.
id()) != 13)
144 tr_obj_pt_eta_phi[0] = foundObject.
pt();
145 tr_obj_pt_eta_phi[1] = foundObject.
eta();
146 tr_obj_pt_eta_phi[2] = foundObject.
phi();
147 tr_obj_pt_eta_phi[3] = foundObject.
id() / fabs(foundObject.
id());
148 tot_tr_obj_pt_eta_phi.push_back(tr_obj_pt_eta_phi);
152 if (!tot_tr_obj_pt_eta_phi.empty()) {
154 tot_tr_obj_pt_eta_phi.end(),
155 [](
const std::array<float, 5>&
a,
const std::array<float, 5>&
b) {
return a[0] >
b[0]; });
156 max_per_trigger.push_back(tot_tr_obj_pt_eta_phi.at(0));
162 max_per_trigger.end(),
163 [](
const std::array<float, 5>&
a,
const std::array<float, 5>&
b) {
return a[0] >
b[0]; });
164 return max_per_trigger.at(0);
171 using namespace reco;
245 bool isFake =
vtx.isFake();
272 if (deltaRmu < MuTrgMatchCone && SelectedMu_DR > deltaRmu) {
278 bool tight =
false, soft =
false;
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);
406 if (
obj->charge() * trk2->charge() == 1)
410 vel2.SetPtEtaPhiM(trk2->pt(), trk2->eta(), trk2->phi(), massLep);
427 float InvMassLepLep = (vel1 + vel2).M();
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());
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)
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());
std::vector< float > muon_eta
bool accept() const
Has at least one path accepted the event?
T getParameter(std::string const &) const
float totalChiSquared() const
std::vector< std::shared_ptr< reco::Track > > cleanedTracks
std::vector< unsigned int > object_id
GlobalPoint position() const
const Point & position() const
position
GlobalError positionError() const
#define DEFINE_FWK_MODULE(type)
bool filter(edm::Event &, const edm::EventSetup &) override
edm::EDGetTokenT< reco::VertexCollection > vtxToken_
double TrkObjExclusionCone
double dydz() const
dydz slope
edm::EDGetTokenT< edm::TriggerResults > trgresultsToken_
std::vector< std::shared_ptr< reco::Track > > cleanedPairTracks
float degreesOfFreedom() const
std::vector< Conversion > ConversionCollection
collectin of Conversion objects
std::vector< unsigned int > Epair_ObjectId
std::vector< string > HLTFilter_
std::vector< unsigned int > Epair_ObjectIndex
CachingVertex< 5 > vertex(const std::vector< reco::TransientTrack > &tracks) const override
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 x0() const
x coordinate
double pt() const
track transverse momentum
unsigned int size() const
Get number of paths stored.
std::vector< float > SelectedTrgObj_PtEtaPhiCharge
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
edm::ESGetToken< MagneticField, IdealMagneticFieldRecord > bFieldToken_
const TriggerObjectCollection & getObjects() const
float ChiSquaredProbability(double chiSquared, double nrDOF)
std::vector< float > el_eta
bool isTightMuonCustom(const reco::Muon &recoMu, const reco::Vertex recoVtx)
bool getData(T &iHolder) const
std::vector< unsigned int > Trk_container
bool isMediumMuonCustom(const reco::Muon &recoMu)
std::vector< float > muon_medium
double y0() const
y coordinate
bool isSoftMuon(const reco::Muon &, const reco::Vertex &, bool run2016_hip_mitigation=false)
double ElTrgExclusionCone
edm::EDGetTokenT< trigger::TriggerEvent > trigobjectsToken_
std::vector< std::shared_ptr< reco::Track > > cleanedObjTracks
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)
double eta() const
pseudorapidity of momentum vector
edm::EDGetTokenT< reco::BeamSpot > beamSpotToken_
auto const & tracks
cannot be loose
double MuTrgExclusionCone
XYZVectorD XYZVector
spatial vector with cartesian internal representation
edm::EDGetTokenT< reco::ConversionCollection > conversionsToken_
std::vector< size_type > Keys
std::vector< float > el_phi
double dxdz() const
dxdz slope
edm::EDGetToken muonsToken_
~LeptonSkimming() override
std::vector< float > muon_tight
bool hltFired(const edm::Event &iEvent, const edm::EventSetup &iSetup, std::vector< string > HLTPath)
double z0() const
z coordinate
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
std::array< float, 5 > hltObject(const edm::Event &iEvent, const edm::EventSetup &iSetup, std::vector< string > Seed)
LeptonSkimming(const edm::ParameterSet &)
void endStream() override