28 m_muon = muonGmtPair.
m_muon;
31 m_eta = muonGmtPair.
m_eta;
37 float dEta = m_regMu ? (m_regMu->eta() -
eta()) : 999.;
38 float dPhi = m_regMu ? (m_regMu->phi() - phi()) : 999.;
39 return sqrt(dEta*dEta + dPhi*dPhi);
48 TrackRef standaloneMuon = m_muon->outerTrack();
50 trajectory = cylExtrapTrkSam(standaloneMuon, 500);
55 trajectory = surfExtrapTrkSam(standaloneMuon, 790);
60 trajectory = surfExtrapTrkSam(standaloneMuon, -790);
75 recoProp = m_propagatorAlong->propagate(recoStart, *myCylinder);
77 recoProp = m_propagatorOpposite->propagate(recoStart, *myCylinder);
90 recoProp = m_propagatorAlong->propagate(recoStart, *myPlane);
92 recoProp = m_propagatorOpposite->propagate(recoStart, *myPlane);
99 GlobalPoint innerPoint(track->innerPosition().x(), track->innerPosition().y(), track->innerPosition().z());
100 GlobalVector innerVec (track->innerMomentum().x(), track->innerMomentum().y(), track->innerMomentum().z());
107 m_verbose(ps.getUntrackedParameter<
bool>(
"verbose")),
108 m_HistFolder(ps.getUntrackedParameter<
string>(
"histFolder")),
109 m_GmtPtCuts(ps.getUntrackedParameter< vector<
int> >(
"gmtPtCuts")),
110 m_TagPtCut(ps.getUntrackedParameter<double>(
"tagPtCut")),
114 m_BsInputTag(consumes<
BeamSpot>(ps.getUntrackedParameter<
InputTag>(
"bsInputTag"))),
116 m_trigProcess(ps.getUntrackedParameter<
string>(
"trigProcess")),
118 m_trigNames(ps.getUntrackedParameter<vector<
string> >(
"triggerNames")),
119 m_effVsPtBins(ps.getUntrackedParameter<
std::vector<double>>(
"efficiencyVsPtBins")),
120 m_effVsPhiBins(ps.getUntrackedParameter<
std::vector<double>>(
"efficiencyVsPhiBins")),
121 m_effVsEtaBins(ps.getUntrackedParameter<
std::vector<double>>(
"efficiencyVsEtaBins"))
123 if (
m_verbose)
cout <<
"[L1TMuonDQMOffline:] ____________ Storage initialization ____________ " << endl;
136 if (
m_verbose)
cout <<
"[L1TMuonDQMOffline:] Called beginRun." << endl;
145 vector<int>::const_iterator gmtPtCutsIt =
m_GmtPtCuts.begin();
146 vector<int>::const_iterator gmtPtCutsEnd =
m_GmtPtCuts.end();
148 for (; gmtPtCutsIt!=gmtPtCutsEnd; ++ gmtPtCutsIt) {
153 vector<string>::const_iterator trigNamesIt =
m_trigNames.begin();
154 vector<string>::const_iterator trigNamesEnd =
m_trigNames.end();
156 for (; trigNamesIt!=trigNamesEnd; ++trigNamesIt) {
157 TString tNameTmp = TString(*trigNamesIt);
158 TRegexp tNamePattern = TRegexp(tNameTmp,
true);
163 if (tmpName.Contains(tNamePattern)) {
168 if (tIndex < 0 &&
m_verbose)
cout <<
"[L1TMuonDQMOffline:] Warning: Could not find trigger " << (*trigNamesIt) << endl;
214 if (
m_verbose)
cout <<
"[L1TMuonDQMOffline:] Computing efficiencies" << endl;
216 vector<MuonGmtPair>::const_iterator muonGmtPairsIt =
m_MuonGmtPairs.begin();
217 vector<MuonGmtPair>::const_iterator muonGmtPairsEnd =
m_MuonGmtPairs.end();
219 for(; muonGmtPairsIt!=muonGmtPairsEnd; ++muonGmtPairsIt) {
220 float pt = muonGmtPairsIt->pt();
221 float eta = muonGmtPairsIt->eta();
222 float phi = muonGmtPairsIt->phi();
223 int charge = muonGmtPairsIt->charge();
225 float gmtPt = muonGmtPairsIt->gmtPt();
226 float gmtEta = muonGmtPairsIt->gmtEta();
227 float gmtPhi = muonGmtPairsIt->gmtPhi();
228 int gmtCharge = muonGmtPairsIt->gmtCharge();
229 int qual = muonGmtPairsIt->gmtQual();
231 vector<int>::const_iterator gmtPtCutsIt =
m_GmtPtCuts.begin();
232 vector<int>::const_iterator gmtPtCutsEnd =
m_GmtPtCuts.end();
263 for (; gmtPtCutsIt!=gmtPtCutsEnd; ++ gmtPtCutsIt) {
264 int gmtPtCut = (*gmtPtCutsIt);
265 bool gmtAboveCut = (gmtPt > gmtPtCut);
267 stringstream ptCutToTag; ptCutToTag << gmtPtCut;
268 string ptTag = ptCutToTag.str();
279 if (qual >= 4)
m_EfficiencyHistos[gmtPtCut][
"EffvsPt_OPEN_" + ptTag +
"_Num"]->Fill(pt);
280 if (qual >= 8)
m_EfficiencyHistos[gmtPtCut][
"EffvsPt_DOUBLE_" + ptTag +
"_Num"]->Fill(pt);
281 if (qual >= 12)
m_EfficiencyHistos[gmtPtCut][
"EffvsPt_SINGLE_" + ptTag +
"_Num"]->Fill(pt);
285 if (pt > 1.25*gmtPtCut) {
320 if (
m_verbose)
cout <<
"[L1TMuonDQMOffline:] Computation finished" << endl;
325 if(
m_verbose)
cout <<
"[L1TMuonDQMOffline:] Booking Control Plot Histos" << endl;
329 string name =
"MuonGmtDeltaR";
332 name =
"NTightVsAll";
335 name =
"NProbesVsTight";
339 string name1 =
"TagMuonEta_Histo";
341 string name2 =
"TagMuonPhi_Histo";
343 string name3 =
"TagMuonPt_Histo";
346 name1 =
"ProbeMuonEta_Histo";
348 name2 =
"ProbeMuonPhi_Histo";
350 name3 =
"ProbeMuonPt_Histo";
356 if(
m_verbose)
cout <<
"[L1TMuonDQMOffline:] Booking Efficiency Plot Histos for pt cut = " << ptCut << endl;
358 stringstream ptCutToTag; ptCutToTag <<
ptCut;
359 string ptTag = ptCutToTag.str();
364 int nEffVsPtBins = effVsPtBins.size() - 1;
365 float* ptBinsArray = &(effVsPtBins[0]);
367 string name1 =
"EffvsPt_" + ptTag +
"_Den";
369 string name2 =
"EffvsPt_" + ptTag +
"_Num";
372 name1 =
"EffvsPt_OPEN_" + ptTag +
"_Den";
374 name2 =
"EffvsPt_OPEN_" + ptTag +
"_Num";
377 name1 =
"EffvsPt_DOUBLE_" + ptTag +
"_Den";
379 name2 =
"EffvsPt_DOUBLE_" + ptTag +
"_Num";
382 name1 =
"EffvsPt_SINGLE_" + ptTag +
"_Den";
384 name2 =
"EffvsPt_SINGLE_" + ptTag +
"_Num";
390 int nEffVsPhiBins = effVsPhiBins.size() - 1;
391 float* phiBinsArray = &(effVsPhiBins[0]);
394 int nEffVsEtaBins = effVsEtaBins.size() - 1;
395 float* etaBinsArray = &(effVsEtaBins[0]);
397 name1 =
"EffvsPhi_" + ptTag +
"_Den";
399 name2 =
"EffvsPhi_" + ptTag +
"_Num";
402 name1 =
"EffvsEta_" + ptTag +
"_Den";
404 name2 =
"EffvsEta_" + ptTag +
"_Num";
409 name1 =
"EffvsPhi_OPEN_" + ptTag +
"_Den";
411 name2 =
"EffvsPhi_OPEN_" + ptTag +
"_Num";
414 name1 =
"EffvsEta_OPEN_" + ptTag +
"_Den";
416 name2 =
"EffvsEta_OPEN_" + ptTag +
"_Num";
421 name1 =
"EffvsPhi_DOUBLE_" + ptTag +
"_Den";
423 name2 =
"EffvsPhi_DOUBLE_" + ptTag +
"_Num";
426 name1 =
"EffvsEta_DOUBLE_" + ptTag +
"_Den";
428 name2 =
"EffvsEta_DOUBLE_" + ptTag +
"_Num";
433 name1 =
"EffvsPhi_SINGLE_" + ptTag +
"_Den";
435 name2 =
"EffvsPhi_SINGLE_" + ptTag +
"_Num";
438 name1 =
"EffvsEta_SINGLE_" + ptTag +
"_Den";
440 name2 =
"EffvsEta_SINGLE_" + ptTag +
"_Num";
445 if(
m_verbose)
cout <<
"[L1TMuonOffline:] Booking Resolution Plot Histos" << endl;
450 string name =
"Pt_Res";
452 name =
"Pt_Res_OPEN";
454 name =
"Pt_Res_DOUBLE";
456 name =
"Pt_Res_SINGLE";
459 name =
"1overPt_Res";
461 name =
"1overPt_Res_OPEN";
463 name =
"1overPt_Res_DOUBLE";
465 name =
"1overPt_Res_SINGLE";
470 name =
"Eta_Res_OPEN";
472 name =
"Eta_Res_DOUBLE";
474 name =
"Eta_Res_SINGLE";
479 name =
"Phi_Res_OPEN";
481 name =
"Phi_Res_DOUBLE";
483 name =
"Phi_Res_SINGLE";
488 name =
"Charge_Res_OPEN";
490 name =
"Charge_Res_DOUBLE";
492 name =
"Charge_Res_SINGLE";
501 bool hasPrimaryVertex =
false;
504 vector<Vertex>::const_iterator vertexIt = vertex->begin();
505 vector<Vertex>::const_iterator vertexEnd = vertex->end();
507 for (;vertexIt!=vertexEnd;++vertexIt) {
508 if (vertexIt->isValid() && !vertexIt->isFake()) {
509 posVtx = vertexIt->position();
510 errVtx = vertexIt->error();
511 hasPrimaryVertex =
true;
517 if ( !hasPrimaryVertex ) {
521 errVtx(2,2) = beamSpot->
sigmaZ();
530 if (
m_verbose)
cout <<
"[L1TMuonDQMOffline:] Getting tight muons" << endl;
532 MuonCollection::const_iterator muonIt = muons->begin();
533 MuonCollection::const_iterator muonEnd = muons->end();
535 for(; muonIt!=muonEnd; ++muonIt) {
547 if (
m_verbose)
cout <<
"[L1TMuonDQMOffline:] getting probe muons" << endl;
549 std::vector<const reco::Muon*> tagMuonsInHist;
551 tagMuonsInHist.clear();
553 vector<const reco::Muon*>::const_iterator probeCandIt =
m_TightMuons.begin();
555 vector<const reco::Muon*>::const_iterator tightMuonsEnd =
m_TightMuons.end();
557 for (; probeCandIt!=tightMuonsEnd; ++probeCandIt) {
558 bool isProbe =
false;
559 vector<const reco::Muon*>::const_iterator tagCandIt =
m_TightMuons.begin();
562 for (; tagCandIt!=tightMuonsEnd; ++tagCandIt) {
563 bool tagMuonAlreadyInHist =
false;
564 bool tagHasTrig =
false;
565 float eta = (*tagCandIt)->eta();
566 float phi = (*tagCandIt)->phi();
567 float pt = (*tagCandIt)->pt();
568 float dEta = eta - (*probeCandIt)->eta();
569 float dPhi = phi - (*probeCandIt)->phi();
570 deltar =
sqrt(dEta*dEta + dPhi*dPhi);
572 if ( (*tagCandIt) == (*probeCandIt) || (deltar<0.7) )
continue;
574 isProbe |= tagHasTrig;
577 for (vector<const reco::Muon*>::const_iterator tagMuonsInHistIt = tagMuonsInHist.begin(); tagMuonsInHistIt!=tagMuonsInHist.end(); ++tagMuonsInHistIt) {
578 if ( (*tagCandIt) == (*tagMuonsInHistIt) ) {
579 tagMuonAlreadyInHist =
true;
583 if (tagMuonAlreadyInHist ==
false) tagMuonsInHist.push_back((*tagCandIt));
585 if (tagMuonAlreadyInHist ==
false) {
602 if (
m_verbose)
cout <<
"[L1TMuonDQMOffline:] Getting muon GMT pairs" << endl;
604 vector<const reco::Muon*>::const_iterator probeMuIt =
m_ProbeMuons.begin();
605 vector<const reco::Muon*>::const_iterator probeMuEnd =
m_ProbeMuons.end();
610 for (; probeMuIt!=probeMuEnd; ++probeMuIt) {
611 float eta = (*probeMuIt)->eta();
612 float phi = (*probeMuIt)->phi();
613 float pt = (*probeMuIt)->pt();
621 gmtIt = gmtCands->
begin();
623 for(; gmtIt!=gmtEnd; ++gmtIt) {
628 pairBestCand = pairTmpCand;
640 double matchDeltaR = 9999;
644 vector<int>::const_iterator trigIndexIt =
m_trigIndices.begin();
645 vector<int>::const_iterator trigIndexEnd =
m_trigIndices.end();
647 for(; trigIndexIt!=trigIndexEnd; ++trigIndexIt) {
652 if (hltFilterIndex < triggerEvent->sizeFilters()) {
654 const Vids triggerVids(triggerEvent->
filterIds(hltFilterIndex));
655 const unsigned nTriggers = triggerVids.size();
656 for (
size_t iTrig = 0; iTrig < nTriggers; ++iTrig) {
657 const TriggerObject trigObject = trigObjs[triggerKeys[iTrig]];
658 double dRtmp =
deltaR((*mu),trigObject);
659 if (dRtmp < matchDeltaR) matchDeltaR = dRtmp;
unsigned int size() const
number of trigger paths in trigger table
LuminosityBlockID id() const
const_iterator end(int bx) const
edm::ESHandle< Propagator > m_propagatorOpposite
edm::EDGetTokenT< reco::BeamSpot > m_BsInputTag
edm::EDGetTokenT< reco::MuonCollection > m_MuonInputTag
The single EDProduct to be saved for each event (AOD case)
const std::string & triggerName(unsigned int triggerIndex) const
virtual void bookEfficiencyHistos(DQMStore::IBooker &ibooker, int ptCut)
edm::EDGetTokenT< edm::TriggerResults > m_trigProcess_token
bool getByToken(EDGetToken token, Handle< PROD > &result) const
void beginLuminosityBlock(edm::LuminosityBlock const &lumiBlock, edm::EventSetup const &c) override
void analyze(const edm::Event &e, const edm::EventSetup &c) override
#define DEFINE_FWK_MODULE(type)
const Keys & filterKeys(trigger::size_type index) const
Geom::Phi< T > phi() const
virtual void dqmEndLuminosityBlock(edm::LuminosityBlock const &lumiBlock, edm::EventSetup const &c)
trigger::size_type filterIndex(const edm::InputTag &filterTag) const
find index of filter in data-member vector from filter tag
std::vector< double > m_effVsPhiBins
math::Error< dimension >::type Error
covariance error matrix (3x3)
GlobalPoint globalPosition() const
std::vector< Vertex > VertexCollection
collection of Vertex objects
bool matchHlt(edm::Handle< trigger::TriggerEvent > &triggerEvent, const reco::Muon *mu)
std::vector< Muon > MuonCollection
collection of Muon objects
std::vector< const reco::Muon * > m_ProbeMuons
void getProbeMuons(edm::Handle< edm::TriggerResults > &trigResults, edm::Handle< trigger::TriggerEvent > &trigEvent)
~L1TMuonDQMOffline() override
std::vector< std::string > m_trigNames
virtual void bookControlHistos(DQMStore::IBooker &)
std::string m_trigProcess
static CylinderPointer build(const PositionType &pos, const RotationType &rot, Scalar radius, Bounds *bounds=0)
const l1t::Muon * m_regMu
const Vids & filterIds(trigger::size_type index) const
edm::EDGetTokenT< l1t::MuonBxCollection > m_GmtInputTag
const TriggerObjectCollection & getObjects() const
std::vector< double > m_effVsPtBins
void bookHistograms(DQMStore::IBooker &ibooker, const edm::Run &run, const edm::EventSetup &iSetup) override
static PlanePointer build(Args &&...args)
TrajectoryStateOnSurface cylExtrapTrkSam(reco::TrackRef track, double rho)
const reco::Muon * m_muon
MonitorElement * book1D(Args &&...args)
std::map< int, std::map< std::string, MonitorElement * > > m_EfficiencyHistos
math::XYZPoint Point
point in the space
double BeamWidthX() const
beam width X
std::vector< MuonGmtPair > m_MuonGmtPairs
std::map< Resol, MonitorElement * > m_ResolutionHistos
edm::ESHandle< MagneticField > m_BField
edm::ESHandle< Propagator > m_propagatorAlong
const std::vector< std::string > & moduleLabels(unsigned int trigger) const
label(s) of module(s) on a trigger path
double deltaR(double eta1, double eta2, double phi1, double phi2)
std::vector< TriggerObject > TriggerObjectCollection
collection of trigger physics objects (e.g., all isolated muons)
L1TMuonDQMOffline(const edm::ParameterSet &ps)
FreeTrajectoryState freeTrajStateMuon(reco::TrackRef track)
void getMuonGmtPairs(edm::Handle< l1t::MuonBxCollection > &gmtCands)
void setCurrentFolder(const std::string &fullpath)
MonitorElement * book2D(Args &&...args)
void propagate(edm::ESHandle< MagneticField > bField, edm::ESHandle< Propagator > propagatorAlong, edm::ESHandle< Propagator > propagatorOpposite)
std::vector< size_type > Keys
TrajectoryStateOnSurface surfExtrapTrkSam(reco::TrackRef track, double z)
bool init(const edm::Run &iRun, const edm::EventSetup &iSetup, const std::string &processName, bool &changed)
d'tor
double sigmaZ() const
sigma z
std::vector< int > m_GmtPtCuts
double BeamWidthY() const
beam width Y
virtual void bookResolutionHistos(DQMStore::IBooker &ibooker)
HLTConfigProvider m_hltConfig
LuminosityBlockNumber_t luminosityBlock() const
const reco::Vertex getPrimaryVertex(edm::Handle< reco::VertexCollection > &vertex, edm::Handle< reco::BeamSpot > &beamSpot)
MuonGmtPair(const reco::Muon *muon, const l1t::Muon *regMu)
std::vector< double > m_effVsEtaBins
std::vector< const reco::Muon * > m_TightMuons
void dqmBeginRun(const edm::Run &run, const edm::EventSetup &iSetup) override
edm::EDGetTokenT< reco::VertexCollection > m_VtxInputTag
edm::EDGetTokenT< trigger::TriggerEvent > m_trigInputTag
const Point & position() const
position
bool isTightMuon(const reco::Muon &, const reco::Vertex &)
const_iterator begin(int bx) const
std::map< Control, MonitorElement * > m_ControlHistos
std::vector< int > m_trigIndices
std::vector< Muon >::const_iterator const_iterator
void getTightMuons(edm::Handle< reco::MuonCollection > &muons, const reco::Vertex &vertex)