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"));
41 chi2Bin =
parameters.getParameter<
int>(
"chi2Bin");
50 delete _SingleMuonEventFlag;
51 delete _DoubleMuonEventFlag;
57 cout <<
"[MuonRecoOneHLT] beginRun " << endl;
58 cout <<
"[MuonRecoOneHLT] Is MuonEventFlag On? "<< _SingleMuonEventFlag->on() << endl;
64 muReco = ibooker.
book1D(
"Muon_Reco",
"Muon Reconstructed Tracks", 6, 1, 7);
66 muReco->setBinLabel(2,
"glb+sta");
67 muReco->setBinLabel(3,
"tk+sta");
68 muReco->setBinLabel(4,
"tk");
69 muReco->setBinLabel(5,
"sta");
70 muReco->setBinLabel(6,
"calo");
85 phiGlbTrack[1]->setAxisTitle(
"rad");
87 phiGlbTrack[2]->setAxisTitle(
"rad");
95 chi2OvDFGlbTrack.push_back(ibooker.
book1D(histname+
"Glb_chi2OverDf",
"#chi_{2}OverDF_{GLB}", chi2Bin,
chi2Min,
chi2Max));
97 chi2OvDFGlbTrack.push_back(ibooker.
book1D(histname+
"Sta_chi2OverDf",
"#chi_{2}OverDF_{STAfromGLB}", chi2Bin,
chi2Min,
chi2Max));
98 chi2OvDFTight = ibooker.
book1D(
"TightMuon_chi2OverDf",
"#chi_{2}OverDF_{GLB}", chi2Bin,
chi2Min,
chi2Max);
99 chi2OvDFTrack = ibooker.
book1D(
"TkMuon_chi2OverDf",
"#chi_{2}OverDF_{TK}", chi2Bin,
chi2Min,
chi2Max);
100 chi2OvDFStaTrack = ibooker.
book1D(
"StaMuon_chi2OverDf",
"#chi_{2}OverDF_{STA}", chi2Bin,
chi2Min,
chi2Max);
106 ptGlbTrack[1]->setAxisTitle(
"GeV");
108 ptGlbTrack[2]->setAxisTitle(
"GeV");
116 if ( _SingleMuonEventFlag->on() ) _SingleMuonEventFlag->initRun( iRun, iSetup );
117 if ( _DoubleMuonEventFlag->on() ) _DoubleMuonEventFlag->initRun( iRun, iSetup );
119 if (_SingleMuonEventFlag->on() && _SingleMuonEventFlag->expressionsFromDB(_SingleMuonEventFlag->hltDBKey(), iSetup)[0] !=
"CONFIG_ERROR")
120 singlemuonExpr_ = _SingleMuonEventFlag->expressionsFromDB(_SingleMuonEventFlag->hltDBKey(),iSetup);
121 if (_DoubleMuonEventFlag->on() && _DoubleMuonEventFlag->expressionsFromDB(_DoubleMuonEventFlag->hltDBKey(), iSetup)[0] !=
"CONFIG_ERROR")
122 singlemuonExpr_ = _DoubleMuonEventFlag->expressionsFromDB(_DoubleMuonEventFlag->hltDBKey(),iSetup);
125 theService->update(iSetup);
131 unsigned int theIndexOfThePrimaryVertex = 999.;
136 for (
unsigned int ind=0; ind<vertex->size(); ++ind) {
137 if ( (*vertex)[ind].isValid() && !((*vertex)[ind].isFake()) ) {
138 theIndexOfThePrimaryVertex = ind;
144 if (theIndexOfThePrimaryVertex<100) {
145 posVtx = ((*vertex)[theIndexOfThePrimaryVertex]).
position();
146 errVtx = ((*vertex)[theIndexOfThePrimaryVertex]).
error();
149 LogInfo(
"RecoMuonValidator") <<
"reco::PrimaryVertex not found, use BeamSpot position instead\n";
152 iEvent.
getByToken(theBeamSpotLabel_,recoBeamSpotHandle);
158 errVtx(2,2) = bs.
sigmaZ();
167 iEvent.
getByToken(theMuonCollectionLabel_,muons);
170 iEvent.
getByToken(theTriggerResultsLabel_, triggerResults);
176 std::map<float,const reco::Muon*> muonMap;
177 for (reco::MuonCollection::const_iterator recoMu = muons->begin(); recoMu!=muons->end(); ++recoMu){
178 muonMap[recoMu->pt()] = &*recoMu;
180 std::vector<const reco::Muon*> LeadingMuon;
181 for( std::map<float,const reco::Muon*>::reverse_iterator rit=muonMap.rbegin(); rit!=muonMap.rend(); ++rit){
182 LeadingMuon.push_back( (*rit).second );
187 const unsigned int nTrig(triggerNames.
size());
188 bool _trig_SingleMu =
false;
189 bool _trig_DoubleMu =
false;
190 for (
unsigned int i=0;
i<nTrig;++
i){
191 if (triggerNames.
triggerName(
i).find(singlemuonExpr_[0].substr(0,singlemuonExpr_[0].rfind(
"_v")+2))!=std::string::npos && triggerResults->
accept(
i))
192 _trig_SingleMu =
true;
193 if (triggerNames.
triggerName(
i).find(doublemuonExpr_[0].substr(0,doublemuonExpr_[0].rfind(
"_v")+2))!=std::string::npos && triggerResults->
accept(
i))
194 _trig_DoubleMu =
true;
197 cout <<
"[MuonRecoOneHLT] Trigger Fired ? "<< (_trig_SingleMu || _trig_DoubleMu) << endl;
200 if (!_trig_SingleMu && !_trig_DoubleMu)
return;
201 if (LeadingMuon.empty())
return;
205 if((*LeadingMuon[0]).isGlobalMuon()) {
206 LogTrace(
metname)<<
"[MuonRecoOneHLT] The mu is global - filling the histos";
207 if((*LeadingMuon[0]).isTrackerMuon() && (*LeadingMuon[0]).isStandAloneMuon()) muReco->Fill(1);
208 if(!((*LeadingMuon[0]).isTrackerMuon()) && (*LeadingMuon[0]).isStandAloneMuon()) muReco->Fill(2);
209 if(!(*LeadingMuon[0]).isStandAloneMuon())
210 LogTrace(
metname)<<
"[MuonRecoOneHLT] ERROR: the mu is global but not standalone!";
213 reco::TrackRef recoCombinedGlbTrack = (*LeadingMuon[0]).combinedMuon();
219 etaGlbTrack[0]->Fill(recoCombinedGlbTrack->eta());
220 etaGlbTrack[1]->Fill(recoTkGlbTrack->eta());
221 etaGlbTrack[2]->Fill(recoStaGlbTrack->eta());
223 phiGlbTrack[0]->Fill(recoCombinedGlbTrack->phi());
224 phiGlbTrack[1]->Fill(recoTkGlbTrack->phi());
225 phiGlbTrack[2]->Fill(recoStaGlbTrack->phi());
227 chi2OvDFGlbTrack[0]->Fill(recoCombinedGlbTrack->normalizedChi2());
228 chi2OvDFGlbTrack[1]->Fill(recoTkGlbTrack->normalizedChi2());
229 chi2OvDFGlbTrack[2]->Fill(recoStaGlbTrack->normalizedChi2());
231 ptGlbTrack[0]->Fill(recoCombinedGlbTrack->pt());
232 ptGlbTrack[1]->Fill(recoTkGlbTrack->pt());
233 ptGlbTrack[2]->Fill(recoStaGlbTrack->pt());
238 LogTrace(
metname)<<
"[MuonRecoOneHLT] The mu is tracker only - filling the histos";
240 reco::TrackRef recoCombinedGlbTrack = (*LeadingMuon[0]).combinedMuon();
242 etaTight->Fill(recoCombinedGlbTrack->eta());
243 phiTight->Fill(recoCombinedGlbTrack->phi());
244 chi2OvDFTight->Fill(recoCombinedGlbTrack->normalizedChi2());
245 ptTight->Fill(recoCombinedGlbTrack->pt());
249 if((*LeadingMuon[0]).isTrackerMuon() && !((*LeadingMuon[0]).isGlobalMuon())) {
250 LogTrace(
metname)<<
"[MuonRecoOneHLT] The mu is tracker only - filling the histos";
251 if((*LeadingMuon[0]).isStandAloneMuon()) muReco->Fill(3);
252 if(!((*LeadingMuon[0]).isStandAloneMuon())) muReco->Fill(4);
257 etaTrack->Fill(recoTrack->eta());
258 phiTrack->Fill(recoTrack->phi());
259 chi2OvDFTrack->Fill(recoTrack->normalizedChi2());
260 ptTrack->Fill(recoTrack->pt());
264 if((*LeadingMuon[0]).isStandAloneMuon() && !((*LeadingMuon[0]).isGlobalMuon())) {
265 LogTrace(
metname)<<
"[MuonRecoOneHLT] The mu is STA only - filling the histos";
266 if(!((*LeadingMuon[0]).isTrackerMuon())) muReco->Fill(5);
271 etaStaTrack->Fill(recoStaTrack->eta());
272 phiStaTrack->Fill(recoStaTrack->phi());
273 chi2OvDFStaTrack->Fill(recoStaTrack->normalizedChi2());
274 ptStaTrack->Fill(recoStaTrack->pt());
277 if((*LeadingMuon[0]).isCaloMuon() && !((*LeadingMuon[0]).isGlobalMuon()) && !((*LeadingMuon[0]).isTrackerMuon()) && !((*LeadingMuon[0]).isStandAloneMuon()))
T getParameter(std::string const &) const
bool getByToken(EDGetToken token, Handle< PROD > &result) const
const std::string metname
bool accept() const
Has at least one path accepted the event?
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
void analyze(const edm::Event &, const edm::EventSetup &) override
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
void setCurrentFolder(std::string const &fullpath)
MonitorElement * book1D(Args &&...args)
math::XYZPoint Point
point in the space
double BeamWidthX() const
beam width X
static std::string const triggerResults
MuonRecoOneHLT(const edm::ParameterSet &)
Constructor.
std::string const & triggerName(unsigned int index) const
double sigmaZ() const
sigma z
double BeamWidthY() const
beam width Y
~MuonRecoOneHLT() override
Destructor.
static int position[264][3]
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)
edm::TriggerNames const & triggerNames(edm::TriggerResults const &triggerResults) const override