161 LogTrace(
metname) <<
"[EfficiencyAnalyzer] Analyze the mu in different eta regions";
180 bool bPrimaryVertex =
true;
182 bPrimaryVertex =
false;
185 LogTrace(
metname) <<
"[EfficiencyAnalyzer] Could not find vertex collection" << std::endl;
186 bPrimaryVertex =
false;
191 int vertex_number = vertexCollection.size();
193 reco::VertexCollection::const_iterator
v = vertexCollection.begin();
194 for (; v != vertexCollection.end(); ++
v) {
195 double vertex_chi2 = v->normalizedChi2();
196 double vertex_ndof = v->ndof();
197 bool fakeVtx = v->isFake();
198 double vertex_Z = v->z();
200 if (!fakeVtx && vertex_number >= 1 && vertex_ndof > 4 && vertex_chi2 < 999 && fabs(vertex_Z) < 24.) {
201 bPrimaryVertex =
true;
212 unsigned int theIndexOfThePrimaryVertex = 999.;
214 for (
unsigned int ind = 0; ind < vertex->size(); ++ind) {
215 if ((*vertex)[ind].isValid() && !((*vertex)[ind].isFake())) {
216 theIndexOfThePrimaryVertex = ind;
222 if (theIndexOfThePrimaryVertex < 100) {
223 posVtx = ((*vertex)[theIndexOfThePrimaryVertex]).
position();
224 errVtx = ((*vertex)[theIndexOfThePrimaryVertex]).
error();
226 LogInfo(
"RecoMuonValidator") <<
"reco::PrimaryVertex not found, use BeamSpot position instead\n";
235 errVtx(2, 2) = bs.
sigmaZ();
245 TLorentzVector Mu1, Mu2;
251 LogTrace(
metname) <<
"[EfficiencyAnalyzer] loop over first muons" << endl;
255 float combIso = (Iso_muon.
emEt + Iso_muon.
hadEt + Iso_muon.
sumPt);
258 if (!muon1->isGlobalMuon())
263 float muPt1 = recoCombinedGlbTrack1->pt();
264 Mu1.SetPxPyPzE(recoCombinedGlbTrack1->px(),
265 recoCombinedGlbTrack1->py(),
266 recoCombinedGlbTrack1->pz(),
267 recoCombinedGlbTrack1->p());
281 if (combIso / muPt1 > 0.1)
285 LogTrace(
metname) <<
"[EfficiencyAnalyzer] loop over second muon" << endl;
289 if (muon2->eta() < 1.479)
291 if (muon2->eta() >= 1.479)
295 Mu2.SetPxPyPzE(muon2->px(), muon2->py(), muon2->pz(), muon2->p());
297 float Minv = (Mu1 + Mu2).M();
298 if (!muon2->isTrackerMuon())
302 if ((muon1->charge()) * (muon2->charge()) > 0)
304 if (Minv < 70 || Minv > 110)
310 if (muon2->innerTrack()->extra().isAvailable()) {
319 if (muon2->pt() > 20)
333 if (muon2->innerTrack()->extra().isAvailable()) {
343 if (muon2->pt() > 20)
355 if (bPrimaryVertex && isMB)
357 if (bPrimaryVertex && isME)
361 float tkIso = muon2->isolationR03().sumPt;
362 float emIso = muon2->isolationR03().emEt;
363 float hadIso = muon2->isolationR03().hadEt + muon2->isolationR03().hoEt;
364 float relDetIso = (tkIso + emIso + hadIso) / (muon2->pt());
366 if (relDetIso < 0.05) {
375 if (bPrimaryVertex && isMB)
377 if (bPrimaryVertex && isME)
382 float chargedIso = muon2->pfIsolationR04().sumChargedHadronPt;
383 float neutralIso = muon2->pfIsolationR04().sumNeutralHadronEt;
384 float photonIso = muon2->pfIsolationR04().sumPhotonEt;
385 float relPFIso = (chargedIso + neutralIso +
photonIso) / (muon2->pt());
387 float pu = muon2->pfIsolationR04().sumPUPt;
388 float neutralphotonPUCorrected =
std::max(0.0, (neutralIso + photonIso - 0.5 * pu));
389 float relPFIsoPUCorrected = (chargedIso + neutralphotonPUCorrected) / (muon2->pt());
391 if (relPFIso < 0.12) {
400 if (bPrimaryVertex && isMB)
402 if (bPrimaryVertex && isME)
407 if (relPFIsoPUCorrected < 0.12) {
416 if (bPrimaryVertex && isMB)
418 if (bPrimaryVertex && isME)
MonitorElement * h_allProbes_ID_nVtx
MonitorElement * h_passProbes_EB_pfIsodBID_nVtx
MonitorElement * h_passProbes_EE_pfIsoID_pt
MonitorElement * h_allProbes_inner_eta
MonitorElement * h_allProbes_EB_ID_nVtx
MonitorElement * h_passProbes_ID_pt
float sumPt
sum-pt of tracks
bool isMediumMuon(const reco::Muon &, bool run2016_hip_mitigation=false)
edm::EDGetTokenT< reco::TrackCollection > theTrackCollectionLabel_
MonitorElement * h_allProbes_eta
MonitorElement * h_passProbes_EE_detIsoID_pt
MonitorElement * h_passProbes_ID_eta
edm::EDGetTokenT< reco::VertexCollection > theVertexLabel_
MonitorElement * h_passProbes_ID_phi
MonitorElement * h_allProbes_EE_ID_nVtx
math::Error< dimension >::type Error
covariance error matrix (3x3)
MonitorElement * h_allProbes_ID_pt
std::vector< Vertex > VertexCollection
collection of Vertex objects
MonitorElement * h_allProbes_inner_phi
edm::EDGetTokenT< reco::BeamSpot > theBeamSpotLabel_
MonitorElement * h_passProbes_EB_pfIsoID_nVtx
MonitorElement * h_passProbes_pfIsoID_pt
bool isLooseMuon(const reco::Muon &)
MonitorElement * h_allProbes_inner_pt
MonitorElement * h_allProbes_pt
MonitorElement * h_allProbes_EE_ID_pt
MonitorElement * h_passProbes_pfIsodBID_nVtx
MonitorElement * h_allProbes_EB_pt
MuonServiceProxy * theService
MonitorElement * h_passProbes_EB_pfIsodBID_pt
MonitorElement * h_allProbes_EE_pt
MonitorElement * h_passProbes_pfIsodBID_pt
MonitorElement * h_passProbes_ID_EB_pt
math::XYZPoint Point
point in the space
double BeamWidthX() const
beam width X
MonitorElement * h_passProbes_ID_inner_phi
MonitorElement * h_passProbes_ID_hp_eta
MonitorElement * h_passProbes_pfIsoID_nVtx
MonitorElement * h_passProbes_EE_pfIsodBID_nVtx
MonitorElement * h_passProbes_EE_pfIsoID_nVtx
MonitorElement * h_passProbes_ID_inner_eta
edm::EDGetTokenT< edm::View< reco::Muon > > theMuonCollectionLabel_
MonitorElement * h_passProbes_detIsoID_nVtx
MonitorElement * h_passProbes_EB_detIsoID_pt
MonitorElement * h_passProbes_EB_detIsoID_nVtx
T const * product() const
double sigmaZ() const
sigma z
double BeamWidthY() const
beam width Y
MonitorElement * h_passProbes_EE_pfIsodBID_pt
boost::indirect_iterator< typename seq_t::const_iterator > const_iterator
MonitorElement * h_allProbes_EB_ID_pt
static int position[264][3]
MonitorElement * h_passProbes_detIsoID_pt
MonitorElement * h_passProbes_ID_EE_pt
const Point & position() const
position
MonitorElement * h_passProbes_ID_inner_pt
MonitorElement * h_allProbes_hp_eta
MonitorElement * h_passProbes_EE_detIsoID_nVtx
MonitorElement * h_allProbes_phi
bool isTightMuon(const reco::Muon &, const reco::Vertex &)
MonitorElement * h_passProbes_EB_pfIsoID_pt