diff --git a/MuonSpectrometer/MuonValidation/MuonDQA/MuonRawDataMonitoring/TgcRawDataMonitoring/python/TgcRawDataMonitorAlgorithm.py b/MuonSpectrometer/MuonValidation/MuonDQA/MuonRawDataMonitoring/TgcRawDataMonitoring/python/TgcRawDataMonitorAlgorithm.py
index 5acf4fbfd96726df0f85ee4345f87828f50f3c0a..c62b6b33079edf6f81345b8b13f6af70b07bc97b 100644
--- a/MuonSpectrometer/MuonValidation/MuonDQA/MuonRawDataMonitoring/TgcRawDataMonitoring/python/TgcRawDataMonitorAlgorithm.py
+++ b/MuonSpectrometer/MuonValidation/MuonDQA/MuonRawDataMonitoring/TgcRawDataMonitoring/python/TgcRawDataMonitorAlgorithm.py
@@ -58,25 +58,108 @@ def TgcRawDataMonitoringConfig(inputFlags):
 
     myGroup = helper.addGroup(tgcRawDataMonAlg,'TgcRawDataMonitor',mainDir)
 
+    myGroup.defineHistogram('roi_charge;MuonRoI_Charge',title='MuonRoI Charge;Charge;Number of events',
+                            cutmask='roi_tgc',path=trigPath,xbins=3,xmin=-1.5,xmax=1.5)
+    myGroup.defineHistogram('muon_l1passCharge,muon_eta4gev,muon_phi4gev;MuonRoI_Eff_EtaVsPhi_Charge',title='MuonRoI_Eff_EtaVsPhi_Charge;Offline muon eta; Offline muon phi',
+                            cutmask='muon_l1passThr1',type='TEfficiency',path=trigPath,xbins=100,xmin=-2.5,xmax=2.5,ybins=48,ymin=-math.pi,ymax=math.pi)
+    myGroup.defineHistogram('muon_l1passCharge,muon_pt_tgc;MuonRoI_Eff_Pt_TGC_Charge',title='MuonRoI_Eff_Pt_TGC_Charge;Offline muon pT [GeV];Efficiency',
+                            cutmask='muon_l1passThr1',type='TEfficiency',path=trigPath,xbins=50,xmin=0,xmax=50)
+    myGroup.defineHistogram('roi_eta,roi_phi;MuonRoI_EtaVsPhi_Charge_Positive',type='TH2F',
+                            title='MuonRoI Eta vs Phi Charge Positive;MuonRoI Eta;MuonRoI Phi',cutmask='roi_posCharge',path=trigPath,
+                            xbins=100,xmin=-2.5,xmax=2.5,ybins=48,ymin=-math.pi,ymax=math.pi)
+    myGroup.defineHistogram('roi_eta,roi_phi;MuonRoI_EtaVsPhi_Charge_Negative',type='TH2F',
+                            title='MuonRoI Eta vs Phi Charge Negative;MuonRoI Eta;MuonRoI Phi',cutmask='roi_negCharge',path=trigPath,
+                            xbins=100,xmin=-2.5,xmax=2.5,ybins=48,ymin=-math.pi,ymax=math.pi)
+    myGroup.defineHistogram('roi_thr,roi_charge;MuonRoI_ThrVsCharge',type='TH2F',
+                            title='MuonRoI Thr vs Charge;MuonRoI Thresholds;MuonRoI Charge',cutmask='roi_tgc',path=trigPath,
+                            xbins=20,xmin=-0.5,xmax=19.5,ybins=3,ymin=-1.5,ymax=1.5)
+
+    myGroup.defineHistogram('roi_bw3coin;MuonRoI_BW3Coin',title='MuonRoI BW3Coin Flag;BW3Coin Flag;Number of events',
+                            cutmask='roi_tgc',path=trigPath,xbins=2,xmin=-0.5,xmax=1.5)
+    myGroup.defineHistogram('muon_l1passBW3Coin,muon_eta4gev,muon_phi4gev;MuonRoI_Eff_EtaVsPhi_BW3Coin',title='MuonRoI_Eff_EtaVsPhi_BW3Coin;Offline muon eta; Offline muon phi',
+                            cutmask='muon_l1passThr1',type='TEfficiency',path=trigPath,xbins=100,xmin=-2.5,xmax=2.5,ybins=48,ymin=-math.pi,ymax=math.pi)
+    myGroup.defineHistogram('muon_l1passBW3Coin,muon_pt_tgc;MuonRoI_Eff_Pt_TGC_BW3Coin',title='MuonRoI_Eff_Pt_TGC_BW3Coin;Offline muon pT [GeV];Efficiency',
+                            cutmask='muon_l1passThr1',type='TEfficiency',path=trigPath,xbins=50,xmin=0,xmax=50)
+    myGroup.defineHistogram('roi_eta,roi_phi;MuonRoI_EtaVsPhi_BW3Coin',type='TH2F',
+                            title='MuonRoI Eta vs Phi BW3Coin;MuonRoI Eta;MuonRoI Phi',cutmask='roi_bw3coin',path=trigPath,
+                            xbins=100,xmin=-2.5,xmax=2.5,ybins=48,ymin=-math.pi,ymax=math.pi)
+    myGroup.defineHistogram('roi_thr,roi_bw3coin;MuonRoI_ThrVsBW3Coin',type='TH2F',
+                            title='MuonRoI Thr vs BW3Coin;MuonRoI Thresholds;MuonRoI BW3Coin',cutmask='roi_tgc',path=trigPath,
+                            xbins=20,xmin=-0.5,xmax=19.5,ybins=2,ymin=-0.5,ymax=1.5)
+
+    myGroup.defineHistogram('roi_inncoin;MuonRoI_InnerCoin',title='MuonRoI InnerCoin Flag;InnerCoin Flag;Number of events',
+                            cutmask='roi_tgc',path=trigPath,xbins=2,xmin=-0.5,xmax=1.5)
+    myGroup.defineHistogram('muon_l1passInnerCoin,muon_eta4gev,muon_phi4gev;MuonRoI_Eff_EtaVsPhi_InnerCoin',title='MuonRoI_Eff_EtaVsPhi_InnerCoin;Offline muon eta; Offline muon phi',
+                            cutmask='muon_l1passThr1',type='TEfficiency',path=trigPath,xbins=100,xmin=-2.5,xmax=2.5,ybins=48,ymin=-math.pi,ymax=math.pi)
+    myGroup.defineHistogram('muon_l1passInnerCoin,muon_pt_tgc;MuonRoI_Eff_Pt_TGC_InnerCoin',title='MuonRoI_Eff_Pt_TGC_InnerCoin;Offline muon pT [GeV];Efficiency',
+                            cutmask='muon_l1passThr1',type='TEfficiency',path=trigPath,xbins=50,xmin=0,xmax=50)
+    myGroup.defineHistogram('roi_eta,roi_phi;MuonRoI_EtaVsPhi_InnerCoin',type='TH2F',
+                            title='MuonRoI Eta vs Phi InnerCoin;MuonRoI Eta;MuonRoI Phi',cutmask='roi_inncoin',path=trigPath,
+                            xbins=100,xmin=-2.5,xmax=2.5,ybins=48,ymin=-math.pi,ymax=math.pi)
+    myGroup.defineHistogram('roi_thr,roi_inncoin;MuonRoI_ThrVsInnerCoin',type='TH2F',
+                            title='MuonRoI Thr vs InnerCoin;MuonRoI Thresholds;MuonRoI InnerCoin',cutmask='roi_tgc',path=trigPath,
+                            xbins=20,xmin=-0.5,xmax=19.5,ybins=2,ymin=-0.5,ymax=1.5)
+
+    myGroup.defineHistogram('roi_innveto;MuonRoI_InnerCoinVeto',title='MuonRoI InnerCoinVeto Flag;InnerCoinVeto Flag;Number of events',
+                            cutmask='roi_tgc',path=trigPath,xbins=2,xmin=-0.5,xmax=1.5)
+    myGroup.defineHistogram('muon_l1passInnerCoinVeto,muon_eta4gev,muon_phi4gev;MuonRoI_Eff_EtaVsPhi_InnerCoinVeto',title='MuonRoI_Eff_EtaVsPhi_InnerCoinVeto;Offline muon eta; Offline muon phi',
+                            cutmask='muon_l1passThr1',type='TEfficiency',path=trigPath,xbins=100,xmin=-2.5,xmax=2.5,ybins=48,ymin=-math.pi,ymax=math.pi)
+    myGroup.defineHistogram('muon_l1passInnerCoinVeto,muon_pt_tgc;MuonRoI_Eff_Pt_TGC_InnerCoinVeto',title='MuonRoI_Eff_Pt_TGC_InnerCoinVeto;Offline muon pT [GeV];Efficiency',
+                            cutmask='muon_l1passThr1',type='TEfficiency',path=trigPath,xbins=50,xmin=0,xmax=50)
+    myGroup.defineHistogram('roi_eta,roi_phi;MuonRoI_EtaVsPhi_InnerCoinVeto',type='TH2F',
+                            title='MuonRoI Eta vs Phi InnerCoinVeto;MuonRoI Eta;MuonRoI Phi',cutmask='roi_innveto',path=trigPath,
+                            xbins=100,xmin=-2.5,xmax=2.5,ybins=48,ymin=-math.pi,ymax=math.pi)
+    myGroup.defineHistogram('roi_thr,roi_innveto;MuonRoI_ThrVsInnerCoinVeto',type='TH2F',
+                            title='MuonRoI Thr vs InnerCoinVeto;MuonRoI Thresholds;MuonRoI InnerCoinVeto',cutmask='roi_tgc',path=trigPath,
+                            xbins=20,xmin=-0.5,xmax=19.5,ybins=2,ymin=-0.5,ymax=1.5)
+
+    myGroup.defineHistogram('roi_goodmf;MuonRoI_GoodMF',title='MuonRoI GoodMF Flag;GoodMF Flag;Number of events',
+                            cutmask='roi_tgc',path=trigPath,xbins=2,xmin=-0.5,xmax=1.5)
+    myGroup.defineHistogram('roi_eta,roi_phi;MuonRoI_EtaVsPhi_GoodMF',type='TH2F',
+                            title='MuonRoI Eta vs Phi GoodMF;MuonRoI Eta;MuonRoI Phi',cutmask='roi_goodmf',path=trigPath,
+                            xbins=100,xmin=-2.5,xmax=2.5,ybins=48,ymin=-math.pi,ymax=math.pi)
+    myGroup.defineHistogram('roi_thr,roi_goodmf;MuonRoI_ThrVsGoodMF',type='TH2F',
+                            title='MuonRoI Thr vs GoodMF;MuonRoI Thresholds;MuonRoI GoodMF',cutmask='roi_tgc',path=trigPath,
+                            xbins=20,xmin=-0.5,xmax=19.5,ybins=2,ymin=-0.5,ymax=1.5)
+
+    myGroup.defineHistogram('roi_badmf;MuonRoI_BadMF',title='MuonRoI BadMF Flag;BadMF Flag;Number of events',
+                            cutmask='roi_tgc',path=trigPath,xbins=2,xmin=-0.5,xmax=1.5)
+    myGroup.defineHistogram('roi_eta,roi_phi;MuonRoI_EtaVsPhi_BadMF',type='TH2F',
+                            title='MuonRoI Eta vs Phi BadMF;MuonRoI Eta;MuonRoI Phi',cutmask='roi_badmf',path=trigPath,
+                            xbins=100,xmin=-2.5,xmax=2.5,ybins=48,ymin=-math.pi,ymax=math.pi)
+    myGroup.defineHistogram('roi_thr,roi_badmf;MuonRoI_ThrVsBadMF',type='TH2F',
+                            title='MuonRoI Thr vs BadMF;MuonRoI Thresholds;MuonRoI BadMF',cutmask='roi_tgc',path=trigPath,
+                            xbins=20,xmin=-0.5,xmax=19.5,ybins=2,ymin=-0.5,ymax=1.5)
+
+    myGroup.defineHistogram('roi_ismorecand;MuonRoI_isMoreCandInRoI',title='MuonRoI isMoreCandInRoI Flag;isMoreCandInRoI Flag;Number of events',
+                            cutmask='roi_rpc',path=trigPath,xbins=2,xmin=-0.5,xmax=1.5)
+    myGroup.defineHistogram('roi_eta,roi_phi;MuonRoI_EtaVsPhi_IsMoreCandInRoI',type='TH2F',
+                            title='MuonRoI Eta vs Phi IsMoreCandInRoI;MuonRoI Eta;MuonRoI Phi',cutmask='roi_ismorecand',path=trigPath,
+                            xbins=100,xmin=-2.5,xmax=2.5,ybins=48,ymin=-math.pi,ymax=math.pi)
+    myGroup.defineHistogram('roi_thr,roi_ismorecand;MuonRoI_ThrVsIsMoreCandInRoI',type='TH2F',
+                            title='MuonRoI Thr vs IsMoreCandInRoI;MuonRoI Thresholds;MuonRoI IsMoreCandInRoI',cutmask='roi_rpc',path=trigPath,
+                            xbins=20,xmin=-0.5,xmax=19.5,ybins=2,ymin=-0.5,ymax=1.5)
+
     myGroup.defineHistogram('roi_thr;MuonRoI_Thresholds_RPC',title='MuonRoI Thresholds RPC;MuonRoI Threshold number;Number of events',
                             cutmask='roi_rpc',path=trigPath,xbins=20,xmin=-0.5,xmax=19.5)
     myGroup.defineHistogram('roi_thr;MuonRoI_Thresholds_TGC',title='MuonRoI Thresholds TGC;MuonRoI Threshold number;Number of events',
                             cutmask='roi_tgc',path=trigPath,xbins=20,xmin=-0.5,xmax=19.5)
 
-    myGroup.defineHistogram('lb,roi_phi_barrel;MuonRoI_PhiVsLB_Barrel_sideA',title='MuonRoI PhiVsLB Barrel sideA;Luminosity block;Trigger sector',type='TH2F',
+    myGroup.defineHistogram('roi_lumiBlock,roi_phi_barrel;MuonRoI_PhiVsLB_Barrel_sideA',title='MuonRoI PhiVsLB Barrel sideA;Luminosity block;Trigger sector',type='TH2F',
                             cutmask='roi_sideA',path=trigPath,xbins=100,xmin=-0.5,xmax=99.5,ybins=8,ymin=-math.pi,ymax=math.pi,opt='kAddBinsDynamically')
-    myGroup.defineHistogram('lb,roi_phi_barrel;MuonRoI_PhiVsLB_Barrel_sideC',title='MuonRoI PhiVsLB Barrel sideC;Luminosity block;Trigger sector',type='TH2F',
+    myGroup.defineHistogram('roi_lumiBlock,roi_phi_barrel;MuonRoI_PhiVsLB_Barrel_sideC',title='MuonRoI PhiVsLB Barrel sideC;Luminosity block;Trigger sector',type='TH2F',
                             cutmask='roi_sideC',path=trigPath,xbins=100,xmin=-0.5,xmax=99.5,ybins=8,ymin=-math.pi,ymax=math.pi,opt='kAddBinsDynamically')
 
-    myGroup.defineHistogram('lb,roi_phi_endcap;MuonRoI_PhiVsLB_Endcap_sideA',title='MuonRoI PhiVsLB Endcap sideA;Luminosity block;Trigger sector',type='TH2F',
+    myGroup.defineHistogram('roi_lumiBlock,roi_phi_endcap;MuonRoI_PhiVsLB_Endcap_sideA',title='MuonRoI PhiVsLB Endcap sideA;Luminosity block;Trigger sector',type='TH2F',
                             cutmask='roi_sideA',path=trigPath,xbins=100,xmin=-0.5,xmax=99.5,ybins=48,ymin=-math.pi,ymax=math.pi,opt='kAddBinsDynamically')
-    myGroup.defineHistogram('lb,roi_phi_endcap;MuonRoI_PhiVsLB_Endcap_sideC',title='MuonRoI PhiVsLB Endcap sideC;Luminosity block;Trigger sector',type='TH2F',
+    myGroup.defineHistogram('roi_lumiBlock,roi_phi_endcap;MuonRoI_PhiVsLB_Endcap_sideC',title='MuonRoI PhiVsLB Endcap sideC;Luminosity block;Trigger sector',type='TH2F',
                             cutmask='roi_sideC',path=trigPath,xbins=100,xmin=-0.5,xmax=99.5,ybins=48,ymin=-math.pi,ymax=math.pi,opt='kAddBinsDynamically')
 
-    myGroup.defineHistogram('lb,roi_phi_forward;MuonRoI_PhiVsLB_Forward_sideA',title='MuonRoI PhiVsLB Forward sideA;Luminosity block;Trigger sector',type='TH2F',
+    myGroup.defineHistogram('roi_lumiBlock,roi_phi_forward;MuonRoI_PhiVsLB_Forward_sideA',title='MuonRoI PhiVsLB Forward sideA;Luminosity block;Trigger sector',type='TH2F',
                             cutmask='roi_sideA',path=trigPath,xbins=100,xmin=-0.5,xmax=99.5,ybins=24,ymin=-math.pi,ymax=math.pi,opt='kAddBinsDynamically')
-    myGroup.defineHistogram('lb,roi_phi_forward;MuonRoI_PhiVsLB_Forward_sideC',title='MuonRoI PhiVsLB Forward sideC;Luminosity block;Trigger sector',type='TH2F',
+    myGroup.defineHistogram('roi_lumiBlock,roi_phi_forward;MuonRoI_PhiVsLB_Forward_sideC',title='MuonRoI PhiVsLB Forward sideC;Luminosity block;Trigger sector',type='TH2F',
                             cutmask='roi_sideC',path=trigPath,xbins=100,xmin=-0.5,xmax=99.5,ybins=24,ymin=-math.pi,ymax=math.pi,opt='kAddBinsDynamically')
+
     
     for n in range(1,16):
         myGroup.defineHistogram('roi_eta;MuonRoI_Eta_Thr'+str(n),title='MuonRoI Eta Thr'+str(n)+';MuonRoI Eta;Number of events',
@@ -286,8 +369,7 @@ if __name__=='__main__':
     from AthenaConfiguration.AllConfigFlags import ConfigFlags
     import glob
 
-    # inputs = glob.glob('/data03/mySamples/run_mc_zmumu/*/tmp.ESD')
-    inputs = glob.glob('/data02/data/mc16_13TeV.361107.PowhegPythia8EvtGen_AZNLOCTEQ6L1_Zmumu.recon.ESD.e3601_s3334_r9857_test2/*')
+    inputs = glob.glob('/data01/L1MuonSimulation/aaron/runs3_zmumu/*/AOD.pool.root')
 
     ConfigFlags.Input.Files = inputs
     ConfigFlags.Input.isMC = True
diff --git a/MuonSpectrometer/MuonValidation/MuonDQA/MuonRawDataMonitoring/TgcRawDataMonitoring/src/TgcRawDataMonitorAlgorithm.cxx b/MuonSpectrometer/MuonValidation/MuonDQA/MuonRawDataMonitoring/TgcRawDataMonitoring/src/TgcRawDataMonitorAlgorithm.cxx
index 3748de9878fd575ad8c6441b3ecfc46805bf9440..d8c61ba623242080f92140849c73221563680ba6 100644
--- a/MuonSpectrometer/MuonValidation/MuonDQA/MuonRawDataMonitoring/TgcRawDataMonitoring/src/TgcRawDataMonitorAlgorithm.cxx
+++ b/MuonSpectrometer/MuonValidation/MuonDQA/MuonRawDataMonitoring/TgcRawDataMonitoring/src/TgcRawDataMonitorAlgorithm.cxx
@@ -11,6 +11,7 @@ namespace {
     constexpr float pt_30_cut = 30. * Gaudi::Units::GeV;
     constexpr float pt_15_cut = 15. * Gaudi::Units::GeV;
     constexpr float pt_10_cut = 10. * Gaudi::Units::GeV;
+    constexpr float pt_4_cut = 4. * Gaudi::Units::GeV;
 
     /// End of the barrel region
     constexpr float barrel_end = 1.05;
@@ -66,14 +67,12 @@ StatusCode TgcRawDataMonitorAlgorithm::fillHistograms(const EventContext &ctx) c
     
 
     auto bcid = Monitored::Scalar<int>("bcid", GetEventInfo(ctx)->bcid());
-    auto lumiPerBCID = Monitored::Scalar<int>("lumiPerBCID", lbAverageInteractionsPerCrossing(ctx));
-    auto lb = Monitored::Scalar<int>("lb", GetEventInfo(ctx)->lumiBlock());
-    auto run = Monitored::Scalar<int>("run", GetEventInfo(ctx)->runNumber());
+    auto pileup = Monitored::Scalar<int>("pileup", lbAverageInteractionsPerCrossing(ctx));
+    auto lumiBlock = Monitored::Scalar<int>("lumiBlock", GetEventInfo(ctx)->lumiBlock());
 
     variables.push_back(bcid);
-    variables.push_back(lumiPerBCID);
-    variables.push_back(lb);
-    variables.push_back(run);
+    variables.push_back(pileup);
+    variables.push_back(lumiBlock);
 
     if (!m_anaMuonRoI.value()) {
         fill(m_packageName, variables);
@@ -97,11 +96,16 @@ StatusCode TgcRawDataMonitorAlgorithm::fillHistograms(const EventContext &ctx) c
         }
         
         MonVariables  roi_variables;
+	auto roi_bcid = Monitored::Scalar<int>("roi_bcid", GetEventInfo(ctx)->bcid());
+	roi_variables.push_back(roi_bcid);
+	auto roi_pileup = Monitored::Scalar<int>("roi_pileup", lbAverageInteractionsPerCrossing(ctx));
+	roi_variables.push_back(roi_pileup);
+	auto roi_lumiBlock = Monitored::Scalar<int>("roi_lumiBlock", GetEventInfo(ctx)->lumiBlock());
+	roi_variables.push_back(roi_lumiBlock);
         auto roi_eta = Monitored::Collection("roi_eta", *rois, [](const xAOD::MuonRoI *m) {
             return m->eta();
         });
         roi_variables.push_back(roi_eta);
-        
         auto roi_phi = Monitored::Collection("roi_phi", *rois, [](const xAOD::MuonRoI *m) {
             return m->phi();
         });
@@ -113,7 +117,7 @@ StatusCode TgcRawDataMonitorAlgorithm::fillHistograms(const EventContext &ctx) c
         auto roi_phi_tgc = Monitored::Collection("roi_phi_tgc", *rois, [](const xAOD::MuonRoI *m) {
             return (m->getSource() != xAOD::MuonRoI::Barrel) ? m->phi() : -10;
         });
-        variables.push_back(roi_phi_tgc);
+        roi_variables.push_back(roi_phi_tgc);
         auto roi_thr = Monitored::Collection("roi_thr", *rois, [](const xAOD::MuonRoI *m) {
             return m->getThrNumber();
         });
@@ -126,7 +130,6 @@ StatusCode TgcRawDataMonitorAlgorithm::fillHistograms(const EventContext &ctx) c
             return m->getSource() != xAOD::MuonRoI::Barrel;
         });
         roi_variables.push_back(roi_tgc);
-
         auto roi_barrel = Monitored::Collection("roi_barrel", *rois, [](const xAOD::MuonRoI *m) {
             return m->getSource() == xAOD::MuonRoI::Barrel;
         });
@@ -139,7 +142,6 @@ StatusCode TgcRawDataMonitorAlgorithm::fillHistograms(const EventContext &ctx) c
             return m->getSource() == xAOD::MuonRoI::Forward;
         });
         roi_variables.push_back(roi_forward);
-
         auto roi_phi_barrel = Monitored::Collection("roi_phi_barrel", *rois, [](const xAOD::MuonRoI *m) {
             return (m->getSource() == xAOD::MuonRoI::Barrel) ? m->phi() : -10;
         });
@@ -152,7 +154,6 @@ StatusCode TgcRawDataMonitorAlgorithm::fillHistograms(const EventContext &ctx) c
             return (m->getSource() == xAOD::MuonRoI::Forward) ? m->phi() : -10;
         });
         roi_variables.push_back(roi_phi_forward);
-
         auto roi_sideA = Monitored::Collection("roi_sideA", *rois, [](const xAOD::MuonRoI *m) {
             return m->getHemisphere() == xAOD::MuonRoI::Positive;
         });
@@ -161,7 +162,6 @@ StatusCode TgcRawDataMonitorAlgorithm::fillHistograms(const EventContext &ctx) c
             return m->getHemisphere() == xAOD::MuonRoI::Negative;
         });
         roi_variables.push_back(roi_sideC);
-
         auto thrmask1 = Monitored::Collection("thrmask1", *rois, [](const xAOD::MuonRoI *m) {
             return m->getThrNumber() == 1;
         });
@@ -222,6 +222,42 @@ StatusCode TgcRawDataMonitorAlgorithm::fillHistograms(const EventContext &ctx) c
             return m->getThrNumber() == 15;
         });
         roi_variables.push_back(thrmask15);
+	auto roi_charge = Monitored::Collection("roi_charge", *rois, [](const xAOD::MuonRoI* m) {
+	    return (m->getCharge()==xAOD::MuonRoI::Neg)?(-1):((m->getCharge()==xAOD::MuonRoI::Pos)?(+1):(0));
+	});
+	roi_variables.push_back(roi_charge);
+	auto roi_bw3coin = Monitored::Collection("roi_bw3coin",*rois,[](const xAOD::MuonRoI* m) {
+	    return m->getBW3Coincidence();
+	});
+	roi_variables.push_back(roi_bw3coin);
+	auto roi_inncoin = Monitored::Collection("roi_inncoin",*rois,[](const xAOD::MuonRoI* m) {
+	    return m->getInnerCoincidence();
+	});
+	roi_variables.push_back(roi_inncoin);
+	auto roi_innveto = Monitored::Collection("roi_innveto",*rois,[](const xAOD::MuonRoI* m) {
+	    return !m->getInnerCoincidence() && m->getSource()!=xAOD::MuonRoI::Barrel;
+	});
+	roi_variables.push_back(roi_innveto);
+	auto roi_goodmf = Monitored::Collection("roi_goodmf",*rois,[](const xAOD::MuonRoI* m) {
+	    return m->getGoodMF();
+	  });
+	roi_variables.push_back(roi_goodmf);
+	auto roi_badmf = Monitored::Collection("roi_badmf",*rois,[](const xAOD::MuonRoI* m){
+	    return !m->getGoodMF() && m->getSource()!=xAOD::MuonRoI::Barrel;
+	  });
+	roi_variables.push_back(roi_badmf);
+	auto roi_ismorecand = Monitored::Collection("roi_ismorecand",*rois,[](const xAOD::MuonRoI* m){
+	    return m->isMoreCandInRoI();
+	  });
+	roi_variables.push_back(roi_ismorecand);
+	auto roi_posCharge = Monitored::Collection("roi_posCharge",*rois,[](const xAOD::MuonRoI* m){
+	    return m->getCharge()==xAOD::MuonRoI::Pos;
+	  });
+	roi_variables.push_back(roi_posCharge);
+	auto roi_negCharge = Monitored::Collection("roi_negCharge",*rois,[](const xAOD::MuonRoI* m){
+	    return m->getCharge()==xAOD::MuonRoI::Neg;
+	  });
+	roi_variables.push_back(roi_negCharge);
         fill(m_packageName, roi_variables);     
     }
     if (!m_anaOfflMuon.value()) {
@@ -237,104 +273,122 @@ StatusCode TgcRawDataMonitorAlgorithm::fillHistograms(const EventContext &ctx) c
 
     std::vector < MyMuon > mymuons;
     for (const auto muon : *muons) {
-        if (muon->muonType() != xAOD::Muon::Combined) continue;
-        if (muon->author() != xAOD::Muon::MuidCo && muon->author() != xAOD::Muon::STACO) continue;
-        if (muon->quality() != xAOD::Muon::Tight && muon->quality() != xAOD::Muon::Medium) continue;
+      if (muon->muonType() != xAOD::Muon::Combined) continue;
+      if (muon->author() != xAOD::Muon::MuidCo && muon->author() != xAOD::Muon::STACO) continue;
+      if (muon->quality() != xAOD::Muon::Tight && muon->quality() != xAOD::Muon::Medium) continue;
 
-        MyMuon mymuon;
-        /* fill basic info */
-        mymuon.muon = muon;
-        mymuon.fourvec.SetPtEtaPhiM(muon->pt(), muon->eta(), muon->phi(), m_muonMass.value());
-        /* fill tag of tag-and-probe info */
-        mymuon.tagged = triggerMatching(muon, m_trigTagDefs);
-        /* fill info of isolation among muons */
-        mymuon.isolated = true;
-        mymuon.probeOK = false;
-        if (!m_TagAndProbe.value()) mymuon.probeOK = true;
-        for (const auto muon2 : *muons) {
-            if (muon == muon2) continue;
-            if (muon2->muonType() != xAOD::Muon::Combined) continue;
-            if (muon2->author() != xAOD::Muon::MuidCo && muon2->author() != xAOD::Muon::STACO) continue;
-            if (muon2->quality() != xAOD::Muon::Tight && muon2->quality() != xAOD::Muon::Medium) continue;
-            if (!triggerMatching(muon2, m_trigTagDefs)) continue;
-
-            TLorentzVector muonvec2;
-            muonvec2.SetPtEtaPhiM(muon2->pt(), muon2->eta(), muon2->phi(), m_muonMass.value());
-            float dr = muonvec2.DeltaR(mymuon.fourvec);
-            if (dr < m_isolationWindow.value()) {
-                mymuon.isolated = false;
-            }
-            if (!m_TagAndProbeZmumu.value()) {
-                mymuon.probeOK = true;
-            } else {
-                if (muon->charge() == muon2->charge()) continue;
-                double dimuon_mass = (muonvec2 + mymuon.fourvec).M();
-                if (std::abs(dimuon_mass - m_zMass.value()) > m_zMassWindow.value()) continue;
-                mymuon.probeOK = true;
-            }
-            break;
-        }
-        /* fill extrapolation info (only to TGC) */
-        extrapolate(muon, mymuon);
-        /* L1Muon RoI matching */
-        float max_dr = 999;
-        const float pt = mymuon.muon->pt();
+      TLorentzVector muonvec;
+      muonvec.SetPtEtaPhiM(muon->pt(),muon->eta(),muon->phi(),m_muonMass.value());
+      bool isolated = true;
+      bool probeOK = false;
+      for(const auto muon2 : *muons){
+	// skip the same muon candidate
+	if( muon == muon2 )continue;
+	// check muon isolation
+	TLorentzVector muonvec2;
+	muonvec2.SetPtEtaPhiM(muon2->pt(),muon2->eta(),muon2->phi(),m_muonMass.value());
+	float dr = muonvec2.DeltaR( muonvec );
+	if( dr < m_isolationWindow.value() ){
+	  isolated = false;
+	}
+	// check tag-and-probe condition
+	if( muon2->muonType()!=xAOD::Muon::Combined )continue;
+	if( muon2->author()!=xAOD::Muon::MuidCo && muon2->author()!=xAOD::Muon::STACO )continue;
+	if( muon2->quality()!=xAOD::Muon::Tight && muon2->quality()!=xAOD::Muon::Medium )continue;
+	if( !triggerMatching(muon2,m_trigTagDefs) )continue;
+	if(!m_TagAndProbeZmumu.value()){
+	  probeOK=true;
+	}else{
+	  if( muon->charge() == muon2->charge() )continue;
+	  double dimuon_mass = (muonvec + muonvec2).M();
+	  if(std::abs( dimuon_mass - m_zMass.value()) > m_zMassWindow.value() )continue;
+	  probeOK=true;
+	}
+      }
+      if(m_requireIsolated.value() && !isolated)continue;
+      if(m_TagAndProbe.value() && !probeOK)continue;
 
-        if (pt > pt_15_cut) max_dr = m_l1trigMatchWindow1.value();
-        else if (pt > pt_10_cut) max_dr = m_l1trigMatchWindow2.value() + m_l1trigMatchWindow3.value() * pt / Gaudi::Units::GeV;
-        else max_dr = m_l1trigMatchWindow4.value() + m_l1trigMatchWindow5.value() * pt / Gaudi::Units::GeV;
-
-        if (!rois) {
-            ATH_MSG_DEBUG("No RoI matching possible as no container has been retrieved");
-            mymuons.push_back(mymuon);
-            continue;
-        }
-        for (const auto roi : *rois) {
-            TLorentzVector roivec;
-            roivec.SetPtEtaPhiM(1, roi->eta(), roi->phi(), 1);
-            float dr = roivec.DeltaR(mymuon.fourvec);
-            if (dr < max_dr) {
-                mymuon.matchedL1ThrExclusive.insert(roi->getThrNumber());
-            }
-        }
-        const bool L1ThrsEmpt = mymuon.matchedL1ThrExclusive.empty();
-        for (int ithr = 0; ithr < 16 && !L1ThrsEmpt; ++ithr) {
-            bool pass = false;
-            for (const auto &thr : mymuon.matchedL1ThrExclusive) {
-                if (thr >= ithr) {
-                    pass = true;
-                    break;
-                }
-            }
-            if (pass) mymuon.matchedL1ThrInclusive.insert(ithr);
-        }
+      MyMuon mymuon;
+      /* fill basic info */
+      mymuon.muon = muon;
+      /* fill extrapolation info (only to TGC) */
+      extrapolate( muon, mymuon );
+      /* L1Muon RoI matching */
+      mymuon.matchedL1Charge=false;
+      mymuon.passBW3Coin=false;
+      mymuon.passInnerCoin=false;
+      mymuon.passGoodMF=false;
+      mymuon.passIsMoreCandInRoI=false;
+      float max_dr = 999;
+      float pt = mymuon.muon->pt();
+      if (pt > pt_15_cut) max_dr = m_l1trigMatchWindow1.value();
+      else if (pt > pt_10_cut) max_dr = m_l1trigMatchWindow2.value() + m_l1trigMatchWindow3.value() * pt / Gaudi::Units::GeV;
+      else max_dr = m_l1trigMatchWindow4.value() + m_l1trigMatchWindow5.value() * pt / Gaudi::Units::GeV;
+      if (!rois) {
+	ATH_MSG_DEBUG("No RoI matching possible as no container has been retrieved");
+	mymuons.push_back(mymuon);
+	continue;
+      }
+      for(const auto roi : *rois){
+	TLorentzVector roivec;
+	roivec.SetPtEtaPhiM(1,roi->eta(),roi->phi(),1);
+	double dr = roivec.DeltaR( muonvec );
+	if( dr < max_dr ){
+	  mymuon.matchedL1ThrExclusive.insert( roi->getThrNumber() );
+	  if(muon->charge()<0 && roi->getCharge()==xAOD::MuonRoI::Neg)mymuon.matchedL1Charge|=true;
+	  else if(muon->charge()>0 && roi->getCharge()==xAOD::MuonRoI::Pos)mymuon.matchedL1Charge|=true;
+	  mymuon.passBW3Coin|=roi->getBW3Coincidence();
+	  mymuon.passInnerCoin|=roi->getInnerCoincidence();
+	  mymuon.passGoodMF|=roi->getGoodMF();
+	  mymuon.passIsMoreCandInRoI|=roi->isMoreCandInRoI();
+	}
+      }
+      const bool L1ThrsEmpt = mymuon.matchedL1ThrExclusive.empty();
+      for (int ithr = 0; ithr < 16 && !L1ThrsEmpt; ++ithr) {
+	bool pass = false;
+	for (const auto &thr : mymuon.matchedL1ThrExclusive) {
+	  if (thr >= ithr) {
+	    pass = true;
+	    break;
+	  }
+	}
+	if (pass) mymuon.matchedL1ThrInclusive.insert(ithr);
+      }
 
-        /* store MyMuon */
-        mymuons.push_back(mymuon);
+      /* store MyMuon */
+      mymuons.push_back(mymuon);
     }
 
+    auto muon_eta4gev = Monitored::Collection("muon_eta4gev",mymuons,[](const MyMuon& m){
+	return (m.muon->pt()>pt_4_cut)?m.muon->eta():-10;
+      });
+    variables.push_back(muon_eta4gev);
+    auto muon_phi4gev = Monitored::Collection("muon_phi4gev",mymuons,[](const MyMuon& m){
+	return (m.muon->pt()>pt_4_cut)?m.muon->phi():-10;
+      });
+    variables.push_back(muon_phi4gev);
     auto muon_eta = Monitored::Collection("muon_eta", mymuons, [](const MyMuon &m) {
-        return (m.probeOK && m.muon->pt() > pt_30_cut) ? m.muon->eta() : -10;
+        return (m.muon->pt() > pt_30_cut) ? m.muon->eta() : -10;
     });
     variables.push_back(muon_eta);
     auto muon_phi = Monitored::Collection("muon_phi", mymuons, [](const MyMuon &m) {
-        return (m.probeOK && m.muon->pt() > pt_30_cut) ? m.muon->phi() : -10;
+        return (m.muon->pt() > pt_30_cut) ? m.muon->phi() : -10;
     });
     variables.push_back(muon_phi);
     auto muon_phi_rpc = Monitored::Collection("muon_phi_rpc", mymuons, [](const MyMuon &m) {
-        return (m.probeOK && std::abs(m.muon->eta()) < barrel_end && m.muon->pt() > pt_30_cut) ? m.muon->phi() : -10;
+        return (std::abs(m.muon->eta()) < barrel_end && m.muon->pt() > pt_30_cut) ? m.muon->phi() : -10;
     });
     variables.push_back(muon_phi_rpc);
     auto muon_phi_tgc = Monitored::Collection("muon_phi_tgc", mymuons, [](const MyMuon &m) {
-        return (m.probeOK && std::abs(m.muon->eta()) > barrel_end && std::abs(m.muon->eta()) < trigger_end && m.muon->pt() > pt_30_cut) ? m.muon->phi() : -10;
+        return (std::abs(m.muon->eta()) > barrel_end && std::abs(m.muon->eta()) < trigger_end && m.muon->pt() > pt_30_cut) ? m.muon->phi() : -10;
     });
     variables.push_back(muon_phi_tgc);
     auto muon_pt_rpc = Monitored::Collection("muon_pt_rpc", mymuons, [](const MyMuon &m) {
-        return (m.probeOK && std::abs(m.muon->eta()) < barrel_end) ? m.muon->pt() / Gaudi::Units::GeV : -10;
+        return (std::abs(m.muon->eta()) < barrel_end) ? m.muon->pt() / Gaudi::Units::GeV : -10;
     });
     variables.push_back(muon_pt_rpc);
     auto muon_pt_tgc = Monitored::Collection("muon_pt_tgc", mymuons, [](const MyMuon &m) {
-        return (m.probeOK && std::abs(m.muon->eta()) > barrel_end && std::abs(m.muon->eta()) < trigger_end) ? m.muon->pt() / Gaudi::Units::GeV : -10;
+        return (std::abs(m.muon->eta()) > barrel_end && std::abs(m.muon->eta()) < trigger_end) ? m.muon->pt() / Gaudi::Units::GeV : -10;
     });
     variables.push_back(muon_pt_tgc);
     auto muon_l1passThr1 = Monitored::Collection("muon_l1passThr1", mymuons, [](const MyMuon &m) {
@@ -397,6 +451,34 @@ StatusCode TgcRawDataMonitorAlgorithm::fillHistograms(const EventContext &ctx) c
         return m.matchedL1ThrInclusive.find(15) != m.matchedL1ThrInclusive.end();
     });
     variables.push_back(muon_l1passThr15);
+    auto muon_l1passCharge = Monitored::Collection("muon_l1passCharge",mymuons,[](const MyMuon& m){
+	return m.matchedL1Charge;
+      });
+    variables.push_back(muon_l1passCharge);
+    auto muon_l1passBW3Coin = Monitored::Collection("muon_l1passBW3Coin",mymuons,[](const MyMuon& m){
+	return m.passBW3Coin;
+      });
+    variables.push_back(muon_l1passBW3Coin);
+    auto muon_l1passInnerCoin = Monitored::Collection("muon_l1passInnerCoin",mymuons,[](const MyMuon& m){
+	return m.passInnerCoin;
+      });
+    variables.push_back(muon_l1passInnerCoin);
+    auto muon_l1passInnerCoinVeto = Monitored::Collection("muon_l1passInnerCoinVeto",mymuons,[](const MyMuon& m){
+	return !m.passInnerCoin;
+      });
+    variables.push_back(muon_l1passInnerCoinVeto);
+    auto muon_l1passGoodMF = Monitored::Collection("muon_l1passGoodMF",mymuons,[](const MyMuon& m){
+	return m.passGoodMF;
+      });
+    variables.push_back(muon_l1passGoodMF);
+    auto muon_l1passBadMF = Monitored::Collection("muon_l1passBadMF",mymuons,[](const MyMuon& m){
+	return !m.passGoodMF;
+      });
+    variables.push_back(muon_l1passBadMF);
+    auto muon_l1passIsMoreCandInRoI = Monitored::Collection("muon_l1passIsMoreCandInRoI",mymuons,[](const MyMuon& m){
+	return m.passIsMoreCandInRoI;
+      });
+    variables.push_back(muon_l1passIsMoreCandInRoI);
 
     if (!m_anaTgcPrd.value()) {
         fill(m_packageName, variables);
diff --git a/MuonSpectrometer/MuonValidation/MuonDQA/MuonRawDataMonitoring/TgcRawDataMonitoring/src/TgcRawDataMonitorAlgorithm.h b/MuonSpectrometer/MuonValidation/MuonDQA/MuonRawDataMonitoring/TgcRawDataMonitoring/src/TgcRawDataMonitorAlgorithm.h
index 3eb6ac62cae4ebfb9ac4ac1771d9410078b7027a..65a4c12c31d36cb44351bad3491221aa86feb716 100644
--- a/MuonSpectrometer/MuonValidation/MuonDQA/MuonRawDataMonitoring/TgcRawDataMonitoring/src/TgcRawDataMonitorAlgorithm.h
+++ b/MuonSpectrometer/MuonValidation/MuonDQA/MuonRawDataMonitoring/TgcRawDataMonitoring/src/TgcRawDataMonitorAlgorithm.h
@@ -30,19 +30,17 @@ class TgcRawDataMonitorAlgorithm : public AthMonitorAlgorithm {
   };
   struct MyMuon{
     const xAOD::Muon* muon;
-    TLorentzVector fourvec;
     std::vector<double> extPosZ;
     std::vector<TVector3> extPos;
     std::vector<TVector3> extVec;
-    bool tagged;
-    bool isolated;
-    bool probeOK_any;
-    bool probeOK_Z;
-    bool probeOK;
     std::set<int> matchedL1ThrExclusive;
     std::set<int> matchedL1ThrInclusive;
+    bool matchedL1Charge;
+    bool passBW3Coin;
+    bool passInnerCoin;
+    bool passGoodMF;
+    bool passIsMoreCandInRoI;
   };
-
   struct TgcHit{
     float x;
     float y;
@@ -130,6 +128,7 @@ class TgcRawDataMonitorAlgorithm : public AthMonitorAlgorithm {
   DoubleProperty m_l1trigMatchWindow4{this,"L1TrigMatchingWindow4",0.36,"Window size in R for L1 trigger matching: param 4"};
   DoubleProperty m_l1trigMatchWindow5{this,"L1TrigMatchingWindow5",-0.0016,"Window size in R for L1 trigger matching: param 5"};
   DoubleProperty m_isolationWindow{this,"IsolationWindow",0.1,"Window size in R for isolation with other muons"};
+  BooleanProperty m_requireIsolated{this,"RequireIsolated",true,"Probe muon should be isolated from other muons"};
   DoubleProperty m_M1_Z{this,"M1_Z",13605.0,"z-position of TGC M1-station in mm for track extrapolate"};
   DoubleProperty m_M2_Z{this,"M2_Z",14860.0,"z-position of TGC M2-station in mm for track extrapolate"};
   DoubleProperty m_M3_Z{this,"M3_Z",15280.0,"z-position of TGC M3-station in mm for track extrapolate"};