26 singlemuonExpr_ = muonparms.
getParameter<std::vector<std::string> >(
"hltPaths");
27 doublemuonExpr_ = dimuonparms.getParameter<std::vector<std::string> >(
"hltPaths");
29 theMuonCollectionLabel_ = consumes<reco::MuonCollection>(
parameters.getParameter<
edm::InputTag>(
"MuonCollection"));
32 theTriggerResultsLabel_ = consumes<TriggerResults>(
parameters.getParameter<
InputTag>(
"TriggerResultsLabel"));
35 etaBin =
parameters.getParameter<
int>(
"etaBin");
36 etaMin =
parameters.getParameter<
double>(
"etaMin");
37 etaMax =
parameters.getParameter<
double>(
"etaMax");
40 ptMax =
parameters.getParameter<
double>(
"ptMax");
41 chi2Bin =
parameters.getParameter<
int>(
"chi2Bin");
42 chi2Min =
parameters.getParameter<
double>(
"chi2Min");
43 chi2Max =
parameters.getParameter<
double>(
"chi2Max");
44 phiBin =
parameters.getParameter<
int>(
"phiBin");
45 phiMin =
parameters.getParameter<
double>(
"phiMin");
46 phiMax =
parameters.getParameter<
double>(
"phiMax");
49 delete _SingleMuonEventFlag;
50 delete _DoubleMuonEventFlag;
56 cout <<
"[MuonRecoOneHLT] beginRun " << endl;
57 cout <<
"[MuonRecoOneHLT] Is MuonEventFlag On? "<< _SingleMuonEventFlag->on() << endl;
63 muReco = ibooker.
book1D(
"Muon_Reco",
"Muon Reconstructed Tracks", 6, 1, 7);
65 muReco->setBinLabel(2,
"glb+sta");
66 muReco->setBinLabel(3,
"tk+sta");
67 muReco->setBinLabel(4,
"tk");
68 muReco->setBinLabel(5,
"sta");
69 muReco->setBinLabel(6,
"calo");
73 etaGlbTrack.push_back(ibooker.
book1D(histname+
"Glb_eta",
"#eta_{GLB}", etaBin, etaMin, etaMax));
74 etaGlbTrack.push_back(ibooker.
book1D(histname+
"Tk_eta",
"#eta_{TKfromGLB}", etaBin, etaMin, etaMax));
75 etaGlbTrack.push_back(ibooker.
book1D(histname+
"Sta_eta",
"#eta_{STAfromGLB}", etaBin, etaMin, etaMax));
76 etaTight = ibooker.
book1D(
"TightMuon_eta",
"#eta_{GLB}", etaBin, etaMin, etaMax);
77 etaTrack = ibooker.
book1D(
"TkMuon_eta",
"#eta_{TK}", etaBin, etaMin, etaMax);
78 etaStaTrack = ibooker.
book1D(
"StaMuon_eta",
"#eta_{STA}", etaBin, etaMin, etaMax);
81 phiGlbTrack.push_back(ibooker.
book1D(histname+
"Glb_phi",
"#phi_{GLB}", phiBin, phiMin, phiMax));
83 phiGlbTrack.push_back(ibooker.
book1D(histname+
"Tk_phi",
"#phi_{TKfromGLB}", phiBin, phiMin, phiMax));
84 phiGlbTrack[1]->setAxisTitle(
"rad");
85 phiGlbTrack.push_back(ibooker.
book1D(histname+
"Sta_phi",
"#phi_{STAfromGLB}", phiBin, phiMin, phiMax));
86 phiGlbTrack[2]->setAxisTitle(
"rad");
87 phiTight = ibooker.
book1D(
"TightMuon_phi",
"#phi_{GLB}", phiBin, phiMin, phiMax);
88 phiTrack = ibooker.
book1D(
"TkMuon_phi",
"#phi_{TK}", phiBin, phiMin, phiMax);
90 phiStaTrack = ibooker.
book1D(
"StaMuon_phi",
"#phi_{STA}", phiBin, phiMin, phiMax);
94 chi2OvDFGlbTrack.push_back(ibooker.
book1D(histname+
"Glb_chi2OverDf",
"#chi_{2}OverDF_{GLB}", chi2Bin, chi2Min, chi2Max));
95 chi2OvDFGlbTrack.push_back(ibooker.
book1D(histname+
"Tk_chi2OverDf",
"#chi_{2}OverDF_{TKfromGLB}", phiBin, chi2Min, chi2Max));
96 chi2OvDFGlbTrack.push_back(ibooker.
book1D(histname+
"Sta_chi2OverDf",
"#chi_{2}OverDF_{STAfromGLB}", chi2Bin, chi2Min, chi2Max));
97 chi2OvDFTight = ibooker.
book1D(
"TightMuon_chi2OverDf",
"#chi_{2}OverDF_{GLB}", chi2Bin, chi2Min, chi2Max);
98 chi2OvDFTrack = ibooker.
book1D(
"TkMuon_chi2OverDf",
"#chi_{2}OverDF_{TK}", chi2Bin, chi2Min, chi2Max);
99 chi2OvDFStaTrack = ibooker.
book1D(
"StaMuon_chi2OverDf",
"#chi_{2}OverDF_{STA}", chi2Bin, chi2Min, chi2Max);
102 ptGlbTrack.push_back(ibooker.
book1D(histname+
"Glb_pt",
"pt_{GLB}", ptBin,
ptMin, ptMax));
104 ptGlbTrack.push_back(ibooker.
book1D(histname+
"Tk_pt",
"pt_{TKfromGLB}", ptBin,
ptMin, ptMax));
105 ptGlbTrack[1]->setAxisTitle(
"GeV");
106 ptGlbTrack.push_back(ibooker.
book1D(histname+
"Sta_pt",
"pt_{STAfromGLB}", ptBin,
ptMin, ptMax));
107 ptGlbTrack[2]->setAxisTitle(
"GeV");
108 ptTight = ibooker.
book1D(
"TightMuon_pt",
"pt_{GLB}", ptBin,
ptMin, ptMax);
110 ptTrack = ibooker.
book1D(
"TkMuon_pt",
"pt_{TK}", ptBin,
ptMin, ptMax);
112 ptStaTrack = ibooker.
book1D(
"StaMuon_pt",
"pt_{STA}", ptBin,
ptMin, ptMax);
115 if ( _SingleMuonEventFlag->on() ) _SingleMuonEventFlag->initRun( iRun, iSetup );
116 if ( _DoubleMuonEventFlag->on() ) _DoubleMuonEventFlag->initRun( iRun, iSetup );
118 if (_SingleMuonEventFlag->on() && _SingleMuonEventFlag->expressionsFromDB(_SingleMuonEventFlag->hltDBKey(), iSetup)[0] !=
"CONFIG_ERROR")
119 singlemuonExpr_ = _SingleMuonEventFlag->expressionsFromDB(_SingleMuonEventFlag->hltDBKey(),iSetup);
120 if (_DoubleMuonEventFlag->on() && _DoubleMuonEventFlag->expressionsFromDB(_DoubleMuonEventFlag->hltDBKey(), iSetup)[0] !=
"CONFIG_ERROR")
121 singlemuonExpr_ = _DoubleMuonEventFlag->expressionsFromDB(_DoubleMuonEventFlag->hltDBKey(),iSetup);
124 theService->update(iSetup);
130 unsigned int theIndexOfThePrimaryVertex = 999.;
135 for (
unsigned int ind=0; ind<vertex->size(); ++ind) {
136 if ( (*vertex)[ind].isValid() && !((*vertex)[ind].isFake()) ) {
137 theIndexOfThePrimaryVertex = ind;
143 if (theIndexOfThePrimaryVertex<100) {
144 posVtx = ((*vertex)[theIndexOfThePrimaryVertex]).
position();
145 errVtx = ((*vertex)[theIndexOfThePrimaryVertex]).
error();
148 LogInfo(
"RecoMuonValidator") <<
"reco::PrimaryVertex not found, use BeamSpot position instead\n";
151 iEvent.
getByToken(theBeamSpotLabel_,recoBeamSpotHandle);
157 errVtx(2,2) = bs.
sigmaZ();
166 iEvent.
getByToken(theMuonCollectionLabel_,muons);
169 iEvent.
getByToken(theTriggerResultsLabel_, triggerResults);
175 std::map<float,reco::Muon> muonMap;
176 for (reco::MuonCollection::const_iterator recoMu = muons->begin(); recoMu!=muons->end(); ++recoMu){
177 muonMap[recoMu->pt()] = *recoMu;
179 std::vector<reco::Muon> LeadingMuon;
180 for( std::map<float,reco::Muon>::reverse_iterator rit=muonMap.rbegin(); rit!=muonMap.rend(); ++rit){
181 LeadingMuon.push_back( (*rit).second );
186 const unsigned int nTrig(triggerNames.
size());
187 bool _trig_SingleMu =
false;
188 bool _trig_DoubleMu =
false;
189 for (
unsigned int i=0;
i<nTrig;++
i){
190 if (triggerNames.
triggerName(
i).find(singlemuonExpr_[0].substr(0,singlemuonExpr_[0].rfind(
"_v")+2))!=std::string::npos && triggerResults->accept(
i))
191 _trig_SingleMu =
true;
192 if (triggerNames.
triggerName(
i).find(doublemuonExpr_[0].substr(0,doublemuonExpr_[0].rfind(
"_v")+2))!=std::string::npos && triggerResults->accept(
i))
193 _trig_DoubleMu =
true;
196 cout <<
"[MuonRecoOneHLT] Trigger Fired ? "<< (_trig_SingleMu || _trig_DoubleMu) << endl;
199 if (!_trig_SingleMu && !_trig_DoubleMu)
return;
200 if (LeadingMuon.size() == 0)
return;
204 if(LeadingMuon[0].isGlobalMuon()) {
205 LogTrace(
metname)<<
"[MuonRecoOneHLT] The mu is global - filling the histos";
206 if(LeadingMuon[0].isTrackerMuon() && LeadingMuon[0].isStandAloneMuon()) muReco->Fill(1);
207 if(!(LeadingMuon[0].isTrackerMuon()) && LeadingMuon[0].isStandAloneMuon()) muReco->Fill(2);
208 if(!LeadingMuon[0].isStandAloneMuon())
209 LogTrace(
metname)<<
"[MuonRecoOneHLT] ERROR: the mu is global but not standalone!";
212 reco::TrackRef recoCombinedGlbTrack = LeadingMuon[0].combinedMuon();
218 etaGlbTrack[0]->Fill(recoCombinedGlbTrack->eta());
219 etaGlbTrack[1]->Fill(recoTkGlbTrack->eta());
220 etaGlbTrack[2]->Fill(recoStaGlbTrack->eta());
222 phiGlbTrack[0]->Fill(recoCombinedGlbTrack->phi());
223 phiGlbTrack[1]->Fill(recoTkGlbTrack->phi());
224 phiGlbTrack[2]->Fill(recoStaGlbTrack->phi());
226 chi2OvDFGlbTrack[0]->Fill(recoCombinedGlbTrack->normalizedChi2());
227 chi2OvDFGlbTrack[1]->Fill(recoTkGlbTrack->normalizedChi2());
228 chi2OvDFGlbTrack[2]->Fill(recoStaGlbTrack->normalizedChi2());
230 ptGlbTrack[0]->Fill(recoCombinedGlbTrack->pt());
231 ptGlbTrack[1]->Fill(recoTkGlbTrack->pt());
232 ptGlbTrack[2]->Fill(recoStaGlbTrack->pt());
237 LogTrace(
metname)<<
"[MuonRecoOneHLT] The mu is tracker only - filling the histos";
239 reco::TrackRef recoCombinedGlbTrack = LeadingMuon[0].combinedMuon();
241 etaTight->Fill(recoCombinedGlbTrack->eta());
242 phiTight->Fill(recoCombinedGlbTrack->phi());
243 chi2OvDFTight->Fill(recoCombinedGlbTrack->normalizedChi2());
244 ptTight->Fill(recoCombinedGlbTrack->pt());
248 if(LeadingMuon[0].isTrackerMuon() && !(LeadingMuon[0].isGlobalMuon())) {
249 LogTrace(
metname)<<
"[MuonRecoOneHLT] The mu is tracker only - filling the histos";
250 if(LeadingMuon[0].isStandAloneMuon()) muReco->Fill(3);
251 if(!(LeadingMuon[0].isStandAloneMuon())) muReco->Fill(4);
256 etaTrack->Fill(recoTrack->eta());
257 phiTrack->Fill(recoTrack->phi());
258 chi2OvDFTrack->Fill(recoTrack->normalizedChi2());
259 ptTrack->Fill(recoTrack->pt());
263 if(LeadingMuon[0].isStandAloneMuon() && !(LeadingMuon[0].isGlobalMuon())) {
264 LogTrace(
metname)<<
"[MuonRecoOneHLT] The mu is STA only - filling the histos";
265 if(!(LeadingMuon[0].isTrackerMuon())) muReco->Fill(5);
270 etaStaTrack->Fill(recoStaTrack->eta());
271 phiStaTrack->Fill(recoStaTrack->phi());
272 chi2OvDFStaTrack->Fill(recoStaTrack->normalizedChi2());
273 ptStaTrack->Fill(recoStaTrack->pt());
276 if(LeadingMuon[0].isCaloMuon() && !(LeadingMuon[0].isGlobalMuon()) && !(LeadingMuon[0].isTrackerMuon()) && !(LeadingMuon[0].isStandAloneMuon()))
T getParameter(std::string const &) const
virtual edm::TriggerNames const & triggerNames(edm::TriggerResults const &triggerResults) const
bool getByToken(EDGetToken token, Handle< PROD > &result) const
const std::string metname
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
void analyze(const edm::Event &, const edm::EventSetup &)
void setBinLabel(int bin, const std::string &label, int axis=1)
set bin label for x, y or z axis (axis=1, 2, 3 respectively)
math::Error< dimension >::type Error
covariance error matrix (3x3)
Provides a code based selection for trigger and DCS information in order to have no failing filters i...
Strings::size_type size() const
static int position[TOTALCHAMBERS][3]
MonitorElement * book1D(Args &&...args)
math::XYZPoint Point
point in the space
double BeamWidthX() const
beam width X
static std::string const triggerResults
~MuonRecoOneHLT()
Destructor.
void setCurrentFolder(const std::string &fullpath)
MuonRecoOneHLT(const edm::ParameterSet &)
Constructor.
std::string const & triggerName(unsigned int index) const
double sigmaZ() const
sigma z
double BeamWidthY() const
beam width Y
const Point & position() const
position
bool isTightMuon(const reco::Muon &, const reco::Vertex &)
void setAxisTitle(const std::string &title, int axis=1)
set x-, y- or z-axis title (axis=1, 2, 3 respectively)