diff --git a/MuonSpectrometer/MuonValidation/MuonDQA/MuonTrackMonitoring/MuonTrackMonitoring/RecoMuonPlots.h b/MuonSpectrometer/MuonValidation/MuonDQA/MuonTrackMonitoring/MuonTrackMonitoring/RecoMuonPlots.h index e114a712f18fec78942fdd97d7c6a1182ae046f7..a00bdfa1c064e466b4225548fefbfa5573f801f8 100644 --- a/MuonSpectrometer/MuonValidation/MuonDQA/MuonTrackMonitoring/MuonTrackMonitoring/RecoMuonPlots.h +++ b/MuonSpectrometer/MuonValidation/MuonDQA/MuonTrackMonitoring/MuonTrackMonitoring/RecoMuonPlots.h @@ -15,7 +15,6 @@ #include "MuonHistUtils/MuonIsolationPlots.h" #include "MuonHistUtils/MuonParamPlots.h" - #include "xAODMuon/Muon.h" #include "xAODMuon/MuonContainer.h" #include "xAODTracking/TrackingPrimitives.h" @@ -31,16 +30,6 @@ class RecoMuonPlots:public PlotBase { Muon::RecoInfoPlots m_oMuRecoInfoPlots; Trk::ImpactPlots m_oImpactPlots; Muon::MomentumPullPlots m_oMomentumPullPlots; - //Trk::MSHitPlots m_oMSHitPlots; - //Muon::MuonHitSummaryPlots m_oMuonHitSummaryPlots; - //Muon::MuonIsolationPlots m_oMuonIsolationPlots; - //Muon::MuonParamPlots m_oMuonParamPlots; - - //extra monitoring plots - //Trk::ParamPlots m_oAllPlots_tight; - //Trk::ParamPlots m_oAllPlots_medium; - //Trk::ParamPlots m_oAllPlots_loose; - //Trk::ParamPlots m_oAllPlots_veryloose; //extra monitoring efficiency plots; filled in post processing TH2* m_origin_eta_phi; @@ -48,8 +37,6 @@ class RecoMuonPlots:public PlotBase { TH2* m_eff_medium; TH2* m_tight_eta_phi; TH2* m_medium_eta_phi; - //TH2* m_eff_loose; - //TH2* m_eff_veryloose; TH1* m_pt_broad; TH2* m_eta_phi_broad; @@ -64,6 +51,57 @@ class RecoMuonPlots:public PlotBase { TH2* m_MS_eff_ndof; TH2* m_MS_eff_chi2; + TH2* m_avg_hits_precision_inner; + TH2* m_avg_hits_precision_middle; + TH2* m_avg_hits_precision_outer; + TH2* m_avg_hits_precision_extended; + + TH2* m_avg_hits_trigger_layer1; + TH2* m_avg_hits_trigger_layer2; + TH2* m_avg_hits_trigger_layer3; + TH2* m_avg_hits_trigger_layer4; + + TH2* m_avg_hits_ibl; + TH2* m_avg_hits_pix; + TH2* m_avg_hits_sct; + TH2* m_avg_hits_trt; + + TH2* m_avg_ddpt_idme; + TH2* m_avg_dptsignif; + + // overview layers + uint8_t hitval_numberOfPrecisionLayers = 0; + uint8_t hitval_numberOfPhiLayers = 0; + uint8_t hitval_numberOfTriggerEtaLayers = 0; + + // precision hits + uint8_t hitval_innerSmallHits = 0; + uint8_t hitval_innerLargeHits = 0; + uint8_t hitval_middleSmallHits = 0; + uint8_t hitval_middleLargeHits = 0; + uint8_t hitval_outerSmallHits = 0; + uint8_t hitval_outerLargeHits = 0; + uint8_t hitval_extendedSmallHits = 0; + uint8_t hitval_extendedLargeHits = 0; + + // trigger hits + uint8_t hitval_etaLayer1Hits = 0; + uint8_t hitval_etaLayer2Hits = 0; + uint8_t hitval_etaLayer3Hits = 0; + uint8_t hitval_etaLayer4Hits = 0; + + // ID hits + uint8_t hitval_numberOfBLayerHits = 0; + uint8_t hitval_numberOfPixelHits = 0; + uint8_t hitval_numberOfSCTHits = 0; + uint8_t hitval_numberOfTRTHits = 0; + + // momentum balance + float ddpt_idme = 0; + float qoverp_diff = 0; + float qoverp_sigma = 0; + float qoverp_signif = 0; + bool Detail; private: diff --git a/MuonSpectrometer/MuonValidation/MuonDQA/MuonTrackMonitoring/share/MuonTrackDQA_options.py b/MuonSpectrometer/MuonValidation/MuonDQA/MuonTrackMonitoring/share/MuonTrackDQA_options.py index ec9cca4d8e6c01ebd0b685c4fd4b00264f96eef0..b9eacefb8a544ca9a929a4ed8847acdcea034c82 100755 --- a/MuonSpectrometer/MuonValidation/MuonDQA/MuonTrackMonitoring/share/MuonTrackDQA_options.py +++ b/MuonSpectrometer/MuonValidation/MuonDQA/MuonTrackMonitoring/share/MuonTrackDQA_options.py @@ -18,7 +18,6 @@ from AthenaCommon.AppMgr import ToolSvc # only do trigger-aware monitoring if monTrigDecTool known by ToolSvc # NoTrig requirement part is intended to run on all streams MuonGenericTracksMon_NoTrig = MuonGenericTracksMon(name = "MuonGenericTracksMon_NoTrig", - EnableLumi = DQMonFlags.enableLumiAccess(), MuonTriggerChainName = "NoTrig/", OutputLevel = WARNING, ) @@ -27,12 +26,11 @@ muTrackMonMan.AthenaMonTools.append(MuonGenericTracksMon_NoTrig) # L1_Trig part is intended to only select events passing L1_MU triggers MuonGenericTracksMon_L1Trig = MuonGenericTracksMon(name = "MuonGenericTracksMon_L1Trig", - EnableLumi = DQMonFlags.enableLumiAccess(), MuonTriggerChainName = "", OutputLevel = WARNING, ) -if not hasattr(ToolSvc, 'monTrigDecTool'): +if not DQMonFlags.useTrigger(): print "MuonTrigTrackDQA_options.py: trigger decision tool not found: don't run trigger-aware monitoring" else: MuonGenericTracksMon_L1Trig.TriggerChain = "L1_MU4, L1_MU6, L1_MU10, L1_MU11, L1_MU15, L1_MU20, L1_2MU4, L1_2MU6, L1_2MU10" diff --git a/MuonSpectrometer/MuonValidation/MuonDQA/MuonTrackMonitoring/share/MuonTrackMonitoring_options.py b/MuonSpectrometer/MuonValidation/MuonDQA/MuonTrackMonitoring/share/MuonTrackMonitoring_options.py index 6afb4257f5c89288ded96e53204533da5fa7f8f1..3d8a369e50440ece3c62498dadc3882ee0d88618 100755 --- a/MuonSpectrometer/MuonValidation/MuonDQA/MuonTrackMonitoring/share/MuonTrackMonitoring_options.py +++ b/MuonSpectrometer/MuonValidation/MuonDQA/MuonTrackMonitoring/share/MuonTrackMonitoring_options.py @@ -7,9 +7,10 @@ if MuonDQAFlags.MuonTrkMonDoTrigger or MuonDQAFlags.doMDTTGC: from TrigDecisionMaker.TrigDecisionMakerConfig import TrigDecisionMaker trigDecMaker = TrigDecisionMaker() topSequence += trigDecMaker - from TrigDecision.TrigDecisionConf import TrigDec__TrigDecisionTool - tdt = TrigDec__TrigDecisionTool() - ToolSvc += tdt + #from TrigDecision.TrigDecisionConf import TrigDec__TrigDecisionTool + #tdt = TrigDec__TrigDecisionTool() + #ToolSvc += tdt + tdt = monTrigDecTool ############################################################### #----------------------# # Trk Level Monitoring # @@ -32,7 +33,6 @@ if MuonDQAFlags.doMuonTrackMon: MuonTrackCollections = ["ExtrapolatedMuonSpectrometerTracks" ,"ConvertedMBoyTracks", "MuidExtrapolatedTracks" ], NPhiBins = 360, UseTriggerVector = False, - EnableLumi = DQMonFlags.enableLumiAccess(), MuonTriggerChainName = "NoMuonTriggerSelection" ) #############MuonGenericTracksMon############# MuonGenericTracksMon = MuonGenericTracksMon(name = "MuonGenericTracksMon", @@ -40,12 +40,10 @@ if MuonDQAFlags.doMuonTrackMon: MuonTrackCollections = ["ExtrapolatedMuonSpectrometerTracks" ,"ConvertedMBoyTracks", "MuidExtrapolatedTracks" ], NPhiBins = 360, UseTriggerVector = False, - EnableLumi = DQMonFlags.enableLumiAccess(), MuonTriggerChainName = "NoMuonTriggerSelection" ) #############TGCStandaloneTracksMon_Trig############ TGCStandaloneTracksMon_NoTrig = TGCStandaloneTracksMon(name = "TGCStandaloneTracksMon", TriggerAware = False, - EnableLumi = DQMonFlags.enableLumiAccess(), MuonTriggerChainName = "TriggersInChain") ToolSvc += MuonSelectedTracksMon ToolSvc += MuonGenericTracksMon @@ -60,8 +58,8 @@ if MuonDQAFlags.doMuonTrackMon: #############TriggerAware Trk Monitoring####################### ## set to true in case you would like to use trigger-aware monitoring -## only do trigger-aware monitoring if monTrigDecTool known by ToolSvc -if not hasattr(ToolSvc, 'monTrigDecTool'): +## only do trigger-aware monitoring if DQMonFlags.useTrigger is true +if not DQMonFlags.useTrigger(): print "IDPerfMon_jobOptions.py: trigger decision tool not found: don't run trigger-aware monitoring" else: if MuonDQAFlags.MuonTrkMonDoTrigger and MuonDQAFlags.doMuonTrackMon: @@ -72,7 +70,6 @@ else: NPhiBins = 360, UseTriggerVector = True, MuonTriggerDecisionTool = "TrigDec::TrigDecisionTool", - EnableLumi = DQMonFlags.enableLumiAccess(), Muon_Trigger_Items = ["EF_2mu10", "EF_2mu4", "EF_2mu6", "EF_mu10", "EF_mu20", "EF_mu40"], MuonTriggerChainName = "TriggersInChain") #############MuonGenericTracksMon_Trig############ @@ -82,13 +79,11 @@ else: NPhiBins = 360, UseTriggerVector = True, MuonTriggerDecisionTool = "TrigDec::TrigDecisionTool", - EnableLumi = DQMonFlags.enableLumiAccess(), Muon_Trigger_Items = ["EF_2mu10", "EF_2mu4", "EF_2mu6", "EF_mu10", "EF_mu20", "EF_mu40"], MuonTriggerChainName = "TriggersInChain") #############TGCStandaloneTracksMon_Trig############ TGCStandaloneTracksMon_Trig = TGCStandaloneTracksMon(name = "TGCStandaloneTracksMon_Trig", TriggerAware = False, - EnableLumi = DQMonFlags.enableLumiAccess(), MuonTriggerDecisionTool = "TrigDec::TrigDecisionTool", Muon_Trigger_Items = ["MU0", "MU4", "MU6", "MU10", "MU11", "MU15", "MU20", "MU40", "MU0_TGC", "MU6_TGC", "MU0_TGC_HALO" ], MuonTriggerChainName = "TriggersInChain") diff --git a/MuonSpectrometer/MuonValidation/MuonDQA/MuonTrackMonitoring/src/RecoMuonPlots.cxx b/MuonSpectrometer/MuonValidation/MuonDQA/MuonTrackMonitoring/src/RecoMuonPlots.cxx index bbbc03058c35fe2e29f3ba0f87a31f4360d4ab6b..583129a15683327a329b3b22ac6a494f316c61aa 100644 --- a/MuonSpectrometer/MuonValidation/MuonDQA/MuonTrackMonitoring/src/RecoMuonPlots.cxx +++ b/MuonSpectrometer/MuonValidation/MuonDQA/MuonTrackMonitoring/src/RecoMuonPlots.cxx @@ -81,12 +81,31 @@ void RecoMuonPlots::initializePlots(){ m_eff_nPrec = Book2D("_eff_nPrec", "average number of Precision Layers;#eta;#phi", xbins, xmin, xmax, ybins, ymin, ymax); m_eff_nPhi = Book2D("_eff_nPhi", "average number of Phi Layers;#eta;#phi", xbins, xmin, xmax, ybins, ymin, ymax); m_eff_nTrigEta = Book2D("_eff_nTrigEta","average number of Trigger Eta Layers;#eta;#phi", xbins, xmin, xmax, ybins, ymin, ymax); - m_eff_ndof = Book2D("_eff_ndof", "average number of hits;#eta;#phi",xbins, xmin, xmax, ybins, ymin, ymax); - m_eff_chi2 = Book2D("_eff_chi2", "average #chi^{2} per DOF;#eta;#phi",xbins, xmin, xmax, ybins, ymin, ymax); - m_ID_eff_ndof = Book2D("_ID_eff_ndof", "ID track average number of hits;#eta;#phi",xbins, xmin, xmax, ybins, ymin, ymax); - m_ID_eff_chi2 = Book2D("_ID_eff_chi2", "ID track average #chi^{2} per DOF;#eta;#phi",xbins, xmin, xmax, ybins, ymin, ymax); - m_MS_eff_ndof = Book2D("_MS_eff_ndof", "MS track average number of hits;#eta;#phi",xbins, xmin, xmax, ybins, ymin, ymax); - m_MS_eff_chi2 = Book2D("_MS_eff_chi2", "MS track average #chi^{2} per DOF;#eta;#phi",xbins, xmin, xmax, ybins, ymin, ymax); + m_eff_ndof = Book2D("_eff_ndof", "average number of hits;#eta;#phi", xbins, xmin, xmax, ybins, ymin, ymax); + m_eff_chi2 = Book2D("_eff_chi2", "average #chi^{2} per DOF;#eta;#phi", xbins, xmin, xmax, ybins, ymin, ymax); + m_ID_eff_ndof = Book2D("_ID_eff_ndof", "ID track average number of hits;#eta;#phi", xbins, xmin, xmax, ybins, ymin, ymax); + m_ID_eff_chi2 = Book2D("_ID_eff_chi2", "ID track average #chi^{2} per DOF;#eta;#phi", xbins, xmin, xmax, ybins, ymin, ymax); + m_MS_eff_ndof = Book2D("_MS_eff_ndof", "MS track average number of hits;#eta;#phi", xbins, xmin, xmax, ybins, ymin, ymax); + m_MS_eff_chi2 = Book2D("_MS_eff_chi2", "MS track average #chi^{2} per DOF;#eta;#phi", xbins, xmin, xmax, ybins, ymin, ymax); + + m_avg_hits_precision_inner = Book2D("_avg_hits_precision_inner", "avg. precision hits, inner;#eta;#phi", xbins, xmin, xmax, ybins, ymin, ymax); + m_avg_hits_precision_middle = Book2D("_avg_hits_precision_middle", "avg. precision hits, middle;#eta;#phi", xbins, xmin, xmax, ybins, ymin, ymax); + m_avg_hits_precision_outer = Book2D("_avg_hits_precision_outer", "avg. precision hits, outer;#eta;#phi", xbins, xmin, xmax, ybins, ymin, ymax); + m_avg_hits_precision_extended = Book2D("_avg_hits_precision_extended", "avg. precision hits, extended;#eta;#phi", xbins, xmin, xmax, ybins, ymin, ymax); + + m_avg_hits_trigger_layer1 = Book2D("_avg_hits_trigger_layer1", "avg. trigger hits, layer 1;#eta;#phi", xbins, xmin, xmax, ybins, ymin, ymax); + m_avg_hits_trigger_layer2 = Book2D("_avg_hits_trigger_layer2", "avg. trigger hits, layer 2;#eta;#phi", xbins, xmin, xmax, ybins, ymin, ymax); + m_avg_hits_trigger_layer3 = Book2D("_avg_hits_trigger_layer3", "avg. trigger hits, layer 3;#eta;#phi", xbins, xmin, xmax, ybins, ymin, ymax); + m_avg_hits_trigger_layer4 = Book2D("_avg_hits_trigger_layer4", "avg. trigger hits, layer 4;#eta;#phi", xbins, xmin, xmax, ybins, ymin, ymax); + + m_avg_hits_ibl = Book2D("_avg_hits_ibl", "avg. IBL hits;#eta;#phi", xbins, xmin, xmax, ybins, ymin, ymax); + m_avg_hits_pix = Book2D("_avg_hits_pix", "avg. Pix hits;#eta;#phi", xbins, xmin, xmax, ybins, ymin, ymax); + m_avg_hits_sct = Book2D("_avg_hits_sct", "avg. SCT hits;#eta;#phi", xbins, xmin, xmax, ybins, ymin, ymax); + m_avg_hits_trt = Book2D("_avg_hits_trt", "avg. TRT hits;#eta;#phi", xbins, xmin, xmax, ybins, ymin, ymax); + + m_avg_ddpt_idme = Book2D("_avg_ddpt_idme", "avg. |pt_{ID} - pt_{ME}| / pt_{CB};#eta;#phi", xbins, xmin, xmax, ybins, ymin, ymax); + m_avg_dptsignif = Book2D("_avg_dptsignif", "avg. momentum diff. signif.;#eta;#phi", xbins, xmin, xmax, ybins, ymin, ymax); + } } @@ -144,14 +163,56 @@ void RecoMuonPlots::fill(const xAOD::Muon& mu, xAOD::Muon::Quality my_quality){ m_MS_eff_chi2->Fill(msExtrapTrk->eta(), msExtrapTrk->phi(), msExtrapTrk->chiSquared()/(msExtrapTrk->numberDoF() * 1.0)); } - uint8_t hitval_numberOfPrecisionLayers = 0; - if (!primaryTrk->summaryValue(hitval_numberOfPrecisionLayers, xAOD::numberOfPrecisionLayers)) return; - m_eff_nPrec->Fill(mu.eta(), mu.phi(), hitval_numberOfPrecisionLayers); - uint8_t hitval_numberOfPhiLayers = 0; - if (!primaryTrk->summaryValue(hitval_numberOfPhiLayers, xAOD::numberOfPhiLayers)) return; - m_eff_nPhi->Fill(mu.eta(), mu.phi(), hitval_numberOfPhiLayers); - uint8_t hitval_numberOfTriggerEtaLayers = 0; + if (!primaryTrk->summaryValue(hitval_numberOfPrecisionLayers, xAOD::numberOfPrecisionLayers)) return; + if (!primaryTrk->summaryValue(hitval_numberOfPhiLayers, xAOD::numberOfPhiLayers)) return; if (!primaryTrk->summaryValue(hitval_numberOfTriggerEtaLayers, xAOD::numberOfTriggerEtaLayers)) return; - m_eff_nTrigEta->Fill(mu.eta(), mu.phi(), hitval_numberOfTriggerEtaLayers); + + if (!mu.summaryValue(hitval_innerSmallHits, xAOD::MuonSummaryType::innerSmallHits)) return; + if (!mu.summaryValue(hitval_innerLargeHits, xAOD::MuonSummaryType::innerLargeHits)) return; + if (!mu.summaryValue(hitval_middleSmallHits, xAOD::MuonSummaryType::middleSmallHits)) return; + if (!mu.summaryValue(hitval_middleLargeHits, xAOD::MuonSummaryType::middleLargeHits)) return; + if (!mu.summaryValue(hitval_outerSmallHits, xAOD::MuonSummaryType::outerSmallHits)) return; + if (!mu.summaryValue(hitval_outerLargeHits, xAOD::MuonSummaryType::outerLargeHits)) return; + if (!mu.summaryValue(hitval_extendedSmallHits, xAOD::MuonSummaryType::extendedSmallHits)) return; + if (!mu.summaryValue(hitval_extendedLargeHits, xAOD::MuonSummaryType::extendedLargeHits)) return; + + if (!mu.summaryValue(hitval_etaLayer1Hits, xAOD::MuonSummaryType::etaLayer1Hits)) return; + if (!mu.summaryValue(hitval_etaLayer2Hits, xAOD::MuonSummaryType::etaLayer2Hits)) return; + if (!mu.summaryValue(hitval_etaLayer3Hits, xAOD::MuonSummaryType::etaLayer3Hits)) return; + if (!mu.summaryValue(hitval_etaLayer4Hits, xAOD::MuonSummaryType::etaLayer4Hits)) return; + + if (!mu.summaryValue(hitval_numberOfBLayerHits, xAOD::SummaryType::numberOfBLayerHits)) return; + if (!mu.summaryValue(hitval_numberOfPixelHits, xAOD::SummaryType::numberOfPixelHits)) return; + if (!mu.summaryValue(hitval_numberOfSCTHits, xAOD::SummaryType::numberOfSCTHits)) return; + if (!mu.summaryValue(hitval_numberOfTRTHits, xAOD::SummaryType::numberOfTRTHits)) return; + + m_eff_nPrec -> Fill(mu.eta(), mu.phi(), hitval_numberOfPrecisionLayers); + m_eff_nPhi -> Fill(mu.eta(), mu.phi(), hitval_numberOfPhiLayers); + m_eff_nTrigEta -> Fill(mu.eta(), mu.phi(), hitval_numberOfTriggerEtaLayers); + + m_avg_hits_precision_inner -> Fill(mu.eta(), mu.phi(), hitval_innerSmallHits + hitval_innerLargeHits); + m_avg_hits_precision_middle -> Fill(mu.eta(), mu.phi(), hitval_middleSmallHits + hitval_middleLargeHits); + m_avg_hits_precision_outer -> Fill(mu.eta(), mu.phi(), hitval_outerSmallHits + hitval_outerLargeHits); + m_avg_hits_precision_extended -> Fill(mu.eta(), mu.phi(), hitval_extendedSmallHits + hitval_extendedLargeHits); + + m_avg_hits_trigger_layer1 -> Fill(mu.eta(), mu.phi(), hitval_etaLayer1Hits); + m_avg_hits_trigger_layer2 -> Fill(mu.eta(), mu.phi(), hitval_etaLayer2Hits); + m_avg_hits_trigger_layer3 -> Fill(mu.eta(), mu.phi(), hitval_etaLayer3Hits); + m_avg_hits_trigger_layer4 -> Fill(mu.eta(), mu.phi(), hitval_etaLayer4Hits); + + m_avg_hits_ibl -> Fill(mu.eta(), mu.phi(), hitval_numberOfBLayerHits); + m_avg_hits_pix -> Fill(mu.eta(), mu.phi(), hitval_numberOfPixelHits); + m_avg_hits_sct -> Fill(mu.eta(), mu.phi(), hitval_numberOfSCTHits); + m_avg_hits_trt -> Fill(mu.eta(), mu.phi(), hitval_numberOfTRTHits); + + if (primaryTrk && inDetTrk && msExtrapTrk) { + qoverp_diff = fabs(inDetTrk->qOverP() - msExtrapTrk->qOverP()); + qoverp_sigma = sqrt(inDetTrk->definingParametersCovMatrix()(4,4) + msExtrapTrk->definingParametersCovMatrix()(4,4)); + qoverp_signif = (qoverp_sigma > 0) ? (qoverp_diff / qoverp_sigma) : -999; + ddpt_idme = (primaryTrk->pt() > 0) ? fabs(inDetTrk->pt() - msExtrapTrk->pt()) / primaryTrk->pt() : -999; + + m_avg_ddpt_idme -> Fill(mu.eta(), mu.phi(), ddpt_idme); + m_avg_dptsignif -> Fill(mu.eta(), mu.phi(), qoverp_signif); + } }