diff --git a/MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/cmt/requirements b/MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/cmt/requirements
index 1ecd4b124eca53bb4d934ab4e76208ba00ba4836..8b5769ea10ca6f7385703912251454e8183330cb 100644
--- a/MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/cmt/requirements
+++ b/MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/cmt/requirements
@@ -9,20 +9,25 @@ use AtlasPolicy 	AtlasPolicy-*
 use GaudiInterface 	GaudiInterface-* 	External
 
 ## put here your package dependencies...
-
-#use AsgTools            AsgTools-*              Control/AthToolSupport
+# public
+# use AsgTools            AsgTools-*              Control/AthToolSupport
 
 private
-use AthenaBaseComps     AthenaBaseComps-*       Control
+#use AthenaBaseComps     AthenaBaseComps-*       Control
 use AthenaMonitoring    AthenaMonitoring-*      Control
 use AtlasROOT           AtlasROOT-*             External
 #use StoreGate		StoreGate-*		Control
+use xAODCore            xAODCore-*              Event/xAOD
+use xAODBase            xAODBase-*              Event/xAOD
 use xAODEventInfo       xAODEventInfo-*         Event/xAOD
 use xAODTruth           xAODTruth-*             Event/xAOD
-use xAODMuon            xAODMuon-*              Event/xAOD 
-use xAODTracking        xAODTracking-*          Event/xAOD 
+use xAODMuon            xAODMuon-*              Event/xAOD
+use xAODTracking        xAODTracking-*          Event/xAOD
+use xAODTrigger         xAODTrigger-*           Event/xAOD
 use TrkValHistUtils     TrkValHistUtils-*       Tracking/TrkValidation
 use MuonHistUtils       MuonHistUtils-*         MuonSpectrometer/MuonValidation/MuonHistogramming
+use MuonSelectorTools   MuonSelectorTools-*	PhysicsAnalysis/MuonID
+
 end_private
 
 
diff --git a/MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/macros/CreateEffAndRecoFracPlots.py b/MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/macros/CreateEffAndRecoFracPlots.py
index a2f56e15a8609e9084f7f844e3e59ae8fcde3ef1..309bf18746da91d9a9972a0ec02a3ed988db513d 100755
--- a/MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/macros/CreateEffAndRecoFracPlots.py
+++ b/MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/macros/CreateEffAndRecoFracPlots.py
@@ -1,5 +1,3 @@
-#!/usr/bin/env python
-
 # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
 
 #Written by Dan Mori
@@ -89,10 +87,9 @@ def CreateRatioPlot( numHist, denHist, var, eta1=None, eta2=None, xtitle = '', p
             PlotName = numNamePrefix+'_'+plottype+'_'+var.split('_')[1]+'_etaRange_{0}_{1}'.format(eta1,eta2).replace('-','m').replace('.','p')
             PlotTitle = PlotTitle + ' ({0}<eta<{1})'.format(eta1,eta2)
 
-    # --- not good for segment plots
-    # if not num.IsA().InheritsFrom(ROOT.TH2.Class()):
-    #     num = num.Rebin(2,"num")
-    #     den = den.Rebin(2,"den")
+    if not num.IsA().InheritsFrom(ROOT.TH2.Class()):
+        num = num.Rebin(2,"num")
+        den = den.Rebin(2,"den")
 
     ratio = num.Clone()
     ratio.Divide(num,den,1,1,"B")
@@ -145,9 +142,8 @@ def main( argv ):
         print( 'Cannot open file: {0}'.format( filename ) )
         exit(1)
 
-    muonTypesEff = [ 'All', 'Prompt', 'InFlight', 'NonIsolated' ]
+    muonTypesEff  = [ 'All', 'Prompt', 'InFlight', 'NonIsolated' ]
     muonTypesReco = [ 'Prompt', 'InFlight', 'NonIsolated' ]
-    Authors = [ 'MuidCombined', 'AllAuthors', 'MuTagIMO' , 'CaloTag', 'MuGirl', 'MuidStandalone' ]
     Variables = [ 'pt', 'eta', 'phi', 'eta_phi', 'eta_pt' ]
 
     Xtitles = {
@@ -157,97 +153,74 @@ def main( argv ):
       'eta_phi' : 'eta',
       'eta_pt' : 'eta' }
 
-
     #Efficiency plots
-    for muType, author, var in itertools.product( muonTypesEff, Authors, Variables ):
-        truthAll='all'
-        if author=='MuonSegments':
-            truthAll='MuonSegments'
-        truthDirName = 'Muons/{0}/truth/{1}'.format( muType, truthAll )
-        matchDirName = 'Muons/{0}/matched/{1}'.format( muType, author )
-        truthDir = infile.GetDirectory( truthDirName )
-        matchDir = infile.GetDirectory( matchDirName )
-        if not truthDir:
-            print( 'WARNING Directory not found: '+truthDirName )
-            continue
-        if not matchDir:
-            print( 'WARNING Directory not found: '+truthDirName )
-            continue
-        truthHistName = 'Muons_{0}_truth_{1}_{2}'.format( muType, truthAll, var )
-        truthHist = truthDir.Get( truthHistName )
-        matchHistName = 'Muons_{0}_matched_{1}_{2}'.format( muType, author, var )
-        matchHist = matchDir.Get( matchHistName )
-        if not truthHist:
-            print( 'WARNING histogram not found: '+truthHistName+' in '+truthDirName)
-            continue
-        if not matchHist:
-            print( 'WARNING histogram not found: '+matchHistName+' in '+matchDirName )
+    for muType in muonTypesEff:
+        if not infile.Get( 'Muons/' + muType ):
+            print( 'INFO TDirectory not found: Muons/' + muType )
             continue
-        CreateRatioPlot( matchHist, truthHist, var, xtitle = muType+' Muon '+Xtitles[var], plottype = 'Eff' )
-        if var == 'eta_phi' or var == 'eta_pt':
-            CreateRatioPlot( matchHist, truthHist, var, -0.1, 0.1, muType+' Muon '+Xtitles[var], 'Eff' )
-            CreateRatioPlot( matchHist, truthHist, var, 0.1, 1.05, muType+' Muon '+Xtitles[var], 'Eff' )
-            CreateRatioPlot( matchHist, truthHist, var, 1.05, 2.0, muType+' Muon '+Xtitles[var], 'Eff' )
-            CreateRatioPlot( matchHist, truthHist, var, 2.0, 2.5, muType+' Muon '+Xtitles[var], 'Eff' )
+        #get list of authors from matched dir
+        AuthDir = infile.Get( 'Muons/{0}/matched'.format( muType ) )
+        Authors = [ i.GetName() for i in AuthDir.GetListOfKeys() if AuthDir.Get( i.GetName() ).InheritsFrom( 'TDirectory' ) ]
+        for author in Authors:
+            truthDirName = 'Muons/{0}/truth/all'.format( muType )
+            matchDirName = 'Muons/{0}/matched/{1}'.format( muType, author )
+            truthDir = infile.GetDirectory( truthDirName )
+            matchDir = infile.GetDirectory( matchDirName )
+            if not truthDir:
+                print( 'WARNING Directory not found: '+truthDirName )
+                continue
+            if not matchDir:
+                print( 'WARNING Directory not found: '+matchDirName )
+                continue
+            for var in Variables:
+                truthHistName = 'Muons_{0}_truth_all_{1}'.format( muType, var )
+                truthHist = truthDir.Get( truthHistName )
+                matchHistName = 'Muons_{0}_matched_{1}_{2}'.format( muType, author, var )
+                matchHist = matchDir.Get( matchHistName )
+                if not truthHist:
+                    print( 'WARNING histogram not found: '+truthHistName )
+                    continue
+                if not matchHist:
+                    print( 'WARNING histogram not found: '+matchHistName )
+                    continue
+                CreateRatioPlot( matchHist, truthHist, var, xtitle = muType+' Muon '+Xtitles[var], plottype = 'Eff' )
+                if var == 'eta_phi' or var == 'eta_pt':
+                    CreateRatioPlot( matchHist, truthHist, var, -0.1, 0.1, muType+' Muon '+Xtitles[var], 'Eff' )
+                    CreateRatioPlot( matchHist, truthHist, var, 0.1, 1.05, muType+' Muon '+Xtitles[var], 'Eff' )
+                    CreateRatioPlot( matchHist, truthHist, var, 1.05, 2.0, muType+' Muon '+Xtitles[var], 'Eff' )
+                    CreateRatioPlot( matchHist, truthHist, var,  2.0, 2.5, muType+' Muon '+Xtitles[var], 'Eff' )
 
-    #Segment Efficiency plots
-    SegmentVariables = ['sector','sector_perStation','nPrecisionHits']
-    for muType, segmVar in itertools.product( muonTypesEff, SegmentVariables ):
-        if muType!='All':
-            continue; ## fix
-
-        truthDirName = 'Muons/{0}/truth/MuonSegments'.format( muType )
-        matchDirName = 'Muons/{0}/matched/MuonSegments'.format( muType )
-        truthDir = infile.GetDirectory( truthDirName )
-        matchDir = infile.GetDirectory( matchDirName )
-        if not truthDir:
-            print( 'WARNING Directory not found: '+truthDirName )
-            continue
-        if not matchDir:
-            print( 'WARNING Directory not found: '+truthDirName )
-            continue
-        truthHistName = 'Muons_{0}_truth_MuonSegments_{1}'.format( muType, segmVar )
-        matchHistName = 'Muons_{0}_matched_MuonSegments_{1}'.format( muType, segmVar )
-        truthHist = truthDir.Get( truthHistName )
-        matchHist = matchDir.Get( matchHistName )
-        if not truthHist:
-            print( 'WARNING histogram not found: '+truthHistName+' in '+truthDirName)
-            continue
-        if not matchHist:
-            print( 'WARNING histogram not found: '+matchHistName+' in '+matchDirName )
-            continue        
-        CreateRatioPlot( matchHist, truthHist, segmVar, xtitle = 'muon segment '+segmVar, plottype = 'Eff' )
-        #if segmVar == 'sector_perStation':
-            #CreateRatioPlot( matchHist, truthHist, var, 0, 1, 'muon segment '+segmVar , 'Eff' )
     #Reco Fraction plots
-    for muType, author, var in itertools.product( muonTypesReco, Authors, Variables ):
-        typedir = 'Muons/{0}/reco/{1}'.format( muType, author )
-        typeplot = 'Muons_{0}_reco_{1}_{2}'.format( muType, author, var )
-        alldir = 'Muons/All/reco/{0}'.format( author )
-        allplot = 'Muons_All_reco_{0}_{1}'.format( author, var )
-
-        typeRecoDir = infile.GetDirectory( typedir )
-        allRecoDir = infile.GetDirectory( alldir )
-
-        if not typeRecoDir:
-            print( 'ERROR TDirectory not found: '+typedir )
+    for muType in muonTypesReco:
+        if not infile.Get( 'Muons/' + muType ):
+            print( 'INFO TDirectory not found: Muons/' + muType )
             continue
-
-        if not allRecoDir:
-            print( 'ERROR TDirectory not found: '+alldir )
-            continue
-
-        typeRecoHist = typeRecoDir.Get( typeplot )
-        allRecoHist = allRecoDir.Get( allplot )
-
-        if not typeRecoHist:
-            print( 'WARNING plot not found: ' + typeplot )
-            continue
-        if not allRecoHist:
-            print( 'WARNING plot not found: ' + allplot )
-            continue
-
-        CreateRatioPlot( typeRecoHist, allRecoHist, var, xtitle = muType+' Muon '+Xtitles[var], plottype = 'RecoFrac' )
+        #get list of authors from matched dir
+        AuthDir = infile.Get( 'Muons/{0}/matched'.format( muType ) )
+        Authors = [ i.GetName() for i in AuthDir.GetListOfKeys() if AuthDir.Get( i.GetName() ).InheritsFrom( 'TDirectory' ) ]
+        for author in Authors:
+            typedir = 'Muons/{0}/reco/{1}'.format( muType, author )
+            alldir = 'Muons/All/reco/{0}'.format( author )
+            typeRecoDir = infile.Get( typedir )
+            allRecoDir = infile.Get( alldir )
+            if not typeRecoDir:
+                print( 'ERROR TDirectory not found: '+typedir )
+                continue
+            if not allRecoDir:
+                print( 'ERROR TDirectory not found: '+alldir )
+                continue
+            for var in Variables:
+                typeplot = 'Muons_{0}_reco_{1}_{2}'.format( muType, author, var )
+                allplot = 'Muons_All_reco_{0}_{1}'.format( author, var )
+                typeRecoHist = typeRecoDir.Get( typeplot )
+                allRecoHist = allRecoDir.Get( allplot )
+                if not typeRecoHist:
+                    print( 'WARNING plot not found: ' + typeplot )
+                    continue
+                if not allRecoHist:
+                    print( 'WARNING plot not found: ' + allplot )
+                    continue
+                CreateRatioPlot( typeRecoHist, allRecoHist, var, xtitle = muType+' Muon '+Xtitles[var], plottype = 'RecoFrac' )
 
     #unmatched muon reco fraction
     muType = 'UnmatchedRecoMuons'
diff --git a/MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/macros/CreateMuonValidationSlides.README b/MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/macros/CreateMuonValidationSlides.README
index e3f39e8ba09a3d8e9bb81674d89eccc0481b3b5a..460f9faa1411e131560a64fb375329fb0c79b05e 100644
--- a/MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/macros/CreateMuonValidationSlides.README
+++ b/MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/macros/CreateMuonValidationSlides.README
@@ -1,41 +1,51 @@
-by Dan Mori <dmori at cern.ch>
+Dan Mori <dmori at cern.ch>
 
-This is how to use the software in the macros folder in MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring to create slides for muon validation.
-Software requires Python version 2.7 or greater
+This is how to use the macros in MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/macros to create Beamer LaTeX slides with muon validation histograms. This assumes that the validation will be done using a test sample and reference sample for comparison and that you already have the ROOT files containing the physval plots for each sample.
 
-This assumes that the validation will be done using a test sample and reference sample for comparison and that you already have the ROOT files containing the physval plots for each sample. The macros that both files have the same directory structure.
-
-eg. REFFILE=19.1.1.3.run1.root
+eg. REFFILE=19.0.3.3.run1.root
 eg. TESTFILE=19.1.1.1.run1.root
 
-1. Create Efficiency and Reco Fraction Plots
-	Run the following for each file to add efficiency and reco fraction plots:
+** NOTE ** Beamer is not supported on lxplus, so the .tex file will have to be compiled on a different system. Either copy the tex file and plots directory to another system or access the files through AFS.
+
+Since not all histograms can be created in the validation code, a few macros need to be run first to create them.
 
-python CreateEffAndRecoFracPlots.py $REFFILE
-python CreateEffAndRecoFracPlots.py $TESTFILE
+----------------------------------
+Efficiency and Reco Fraction Plots
+----------------------------------
+Run the following for each file to add efficiency and reco fraction plots:
 
-2. Create Resolution Plots
-	Run the following for each file to add resolution and pt scale plots:
+python CreateEffAndRecoFracPlots.py $PHYSVAL_FILE
 
-python CreateResolutionPlots.py $REFFILE
-python CreateResolutionPlots.py $TESTFILE
+--------------------------
+Resolution and Scale Plots
+--------------------------
+If DoBinnedResolutionPlots is enabled in PhysValMuon_jobOptions.py, run the following for each file to add resolution and pt scale plots:
 
-3. Create Muon Validation Slides
+python CreateResolutionPlots.py $PHYSVAL_FILE
+
+-----------------------------
+Create Muon Validation Slides
+-----------------------------
 CreateMuonValidation Slides uses Beamer (LaTeX) to create slides for a presentation using selected plots from the test and reference physval files. All plots will also contain a ratio plot of the test and reference histograms.
 
-3a. Configuration
-First, open up the slides_config.py file and edit the info as required. From here, you can edit the title page info, such as title, date, author, as well as input the sample datasets, Athena versions used, description of the samples, summary slide items, and which plots go on which page. Comments can be added to each slide as well.
+** This macro requires Python 2.7 or greater. **
+Athena version 19 or greater will setup Python 2.7 automatically.
+
+Configuration
+-------------
+First, open up the config.py file and edit the info as required. From here, you can edit the title page info, such as title, date, author, as well as input the sample datasets, Athena versions used, description of the samples, summary slide items, and which plots go on which page. Comments can be added to each slide as well.
 
 e.g.
 title = 'Muon Validation of 19.1.1.1 compared to 19.0.3.3'
 subtitle = 'No Pileup, Run 1 Configuration'
 date = r'\today'
 
-3b. Running the macro
+Running the macro
+-----------------
 python CreateMuonValidationSlides.py -r $REFFILE -t $TESTFILE -d OUTPUT_DIRECTORY -c
 
 -t FILE: test file
 -r FILE: reference file
 -d DIR: directory where the LaTeX files, plots and final pdf will be put. This is by default set to './beamer'
--c: compile LaTeX file automatically
--n: don't create a title page for the slides
+-c: compile LaTeX file automatically (does nothing on lxplus)
+-n: no title page for the slides
diff --git a/MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/macros/CreateMuonValidationSlides.py b/MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/macros/CreateMuonValidationSlides.py
index 09c495d7cb80a23ea4ed2eca081e5cc2e2fdade9..4d8fad102b248ea970c1f3ed6503aca69c476a18 100644
--- a/MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/macros/CreateMuonValidationSlides.py
+++ b/MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/macros/CreateMuonValidationSlides.py
@@ -40,7 +40,7 @@ def MakeComparisonPlot( refHist, testHist, plotName, path, doNorm = False, doRat
     if not testHist:
         print('WARNING Test histogram not found: '+plotName)
         print('        Creating empty plot')
-        CreateEmptyPlot( path+'/'+plotName+'.pdf' )
+        CreateEmptyPlot( path+'/'+plotName+'.png' )
         return
 
     #if doNorm set, scale hists to area = 1
@@ -52,18 +52,14 @@ def MakeComparisonPlot( refHist, testHist, plotName, path, doNorm = False, doRat
 
     if doNorm:
         if refint != 0:
-            refHist.Scale( 1./refint )
-            for i in range( 1, refHist.GetNbinsX() + 1 ):
-                refHist.SetBinError( i, refHist.GetBinError( i )/refint )
+           refHist.Scale( 1./refint )
         elif refHist:
-            print( 'WARNING empty ref plot ' + plotName )
+           print( 'WARNING empty ref plot ' + plotName )
 
         if testint != 0:
-            testHist.Scale( 1./testint )
-            for i in range( 1, refHist.GetNbinsX() + 1 ):
-                testHist.SetBinError( i, testHist.GetBinError( i )/testint )
+           testHist.Scale( 1./testint )
         else:
-            print( 'WARNING empty test plot ' + plotName )
+           print( 'WARNING empty test plot ' + plotName )
 
     canvas = ROOT.TCanvas( "", "", 860, 900 )
     canvas.SetLeftMargin( 0 )
@@ -93,30 +89,31 @@ def MakeComparisonPlot( refHist, testHist, plotName, path, doNorm = False, doRat
     testHist.GetYaxis().SetTitleSize( labelsize*0.4 )
     testHist.SetLabelSize( labelsize*0.4, 'Y' )
 
-    testHist.Draw("P")
-    if refint>0:
+    testHist.Draw("PE")
+    if refint > 0:
         refHist.SetMarkerColor(ROOT.kBlack)
         refHist.SetLineColor(ROOT.kBlack)
         leg.AddEntry(refHist, "ref", 'P')
         if 'cone' not in plotName:
             refHist = SetBounds(refHist, testHist)
 
-        refHist.Draw("PSAME")
-        testHist.Draw("PSAME")
+        refHist.Draw("PESAME")
+        testHist.Draw("PESAME")
     leg.Draw()
 
-    #ks & chi^2 values
-#    if refint > 0 and testint > 0:
-#        ks = testHist.KolmogorovTest( refHist, 'WW' )
-#        kstext = ROOT.TLatex( 0.18, .955, 'KS = %0.3f'%(ks))
-#        kstext.SetNDC(ROOT.kTRUE)
-#        kstext.SetTextSize(0.055)
-#        kstext.Draw()
-#        chi = testHist.Chi2Test( refHist, 'WW' )
-#        chitext = ROOT.TLatex( 0.35, .955, '#chi^{2} = %0.3f'%(chi))
-#        chitext.SetNDC(ROOT.kTRUE)
-#        chitext.SetTextSize(0.055)
-#        chitext.Draw()
+    # #ks & chi^2 values
+    # if refint > 0 and testint > 0:
+    #     ks = testHist.KolmogorovTest( refHist, 'WW' )
+    #     kstext = ROOT.TLatex( 0.18, .955, 'KS = %0.3f'%(ks))
+    #     kstext.SetNDC(ROOT.kTRUE)
+    #     kstext.SetTextSize(0.055)
+    #     kstext.Draw()
+    #     chi = testHist.Chi2Test( refHist, 'WW' )
+    #     #print(chi)
+    #     chitext = ROOT.TLatex( 0.4, .955, 'p(#chi^{2}) = %0.3f'%(chi))
+    #     chitext.SetNDC(ROOT.kTRUE)
+    #     chitext.SetTextSize(0.055)
+    #     chitext.Draw()
 
     if refint == 0 or testint == 0:
         print( 'WARNING No ratio plot available: '+ plotName )
@@ -128,14 +125,6 @@ def MakeComparisonPlot( refHist, testHist, plotName, path, doNorm = False, doRat
         ratioHist.Divide( refHist )
         ratioHist.SetMarkerColor( ROOT.kBlack )
         ratioHist = SetBounds( ratioHist, ratioHist )
-        for i in range( ratioHist.GetNbinsX() ):
-            nref = refHist.GetBinContent(i)
-            ntest = testHist.GetBinContent(i)
-            if nref == 0 or ntest == 0:
-                ratioHist.SetBinError( i, 0 )
-            else:
-                error = nref/ntest*math.sqrt((refHist.GetBinError(i)/nref)**2 + (testHist.GetBinError(i)/ntest)**2)
-                ratioHist.SetBinError( i, error )
         ratioHist.SetLineColor( ROOT.kBlack )
         ratioHist.GetYaxis().SetTitle( "test / ref" )
         xtitle = ratioHist.GetXaxis().GetTitle()
@@ -147,7 +136,7 @@ def MakeComparisonPlot( refHist, testHist, plotName, path, doNorm = False, doRat
         ratioHist.SetLabelSize( labelsize, 'XY' )
         ratioHist.GetXaxis().SetTitleOffset( 1.0 )
         ratioHist.GetYaxis().SetTitleOffset( .4 )
-        ratioHist.Draw("E")
+        ratioHist.Draw("PE")
 
         lineRatio = ROOT.TLine( ratioHist.GetXaxis().GetXmin(), 1,
                                 ratioHist.GetXaxis().GetXmax(), 1 )
@@ -156,7 +145,7 @@ def MakeComparisonPlot( refHist, testHist, plotName, path, doNorm = False, doRat
         lineRatio.Draw("same")
 
     canvas.cd()
-    canvas.SaveAs( path + '/' + plotName + '.pdf' )
+    canvas.SaveAs( path + '/' + plotName + '.png' )
     canvas.Close()
 
 #############################################################################
@@ -185,22 +174,20 @@ def main():
     for PlotList in PlotPages.values():
         for PlotPath in PlotList:
             HistDir, HistName = os.path.split( PlotPath )
-            if reffile.GetDirectory( HistDir ):
-                refhist = reffile.GetDirectory( HistDir ).Get( HistName )
-            else:
-                refhist = False
-
             if testfile.GetDirectory( HistDir ):
                 testhist = testfile.GetDirectory( HistDir ).Get( HistName )
             else:
                 testhist = False
+            if reffile.GetDirectory( HistDir ):
+                refhist = reffile.GetDirectory( HistDir ).Get( HistName )
+            else:
+                refhist = False
 
             doNorm = not sum([ HistName.__contains__(i) for i in specialTypes ])
             #doRatio = not (plot.__contains__('PtRes') or plot.__contains__('PtScale'))
             MakeComparisonPlot( refhist, testhist, HistName, outdir, doNorm = doNorm, doRatio = True )
 
-
-##### create Beamer file #####
+    ##### create Beamer file #####
 
     endl = '\n'
     output  = r'\documentclass{beamer}' + endl
@@ -259,9 +246,6 @@ def main():
     output += 'Test:' + endl*2
     output += '{0}: {1}'.format(TestVersion, TestDescription) + endl*2
     output += TestDataset + endl*2
-    #output += r'\begin{itemize}' + endl
-    #output += r'\item '+ Intro + endl
-    #output += r'\end{itemize}' + endl
     output += r'\vspace{12pt}' + Intro + endl
     output += r'\end{frame}' + endl*2
 
@@ -272,7 +256,7 @@ def main():
         output += r'\hspace*{-4pt}\makebox[\linewidth][c]{' + endl
         output += r'\begin{tabular}{c%s}'%(r'@{\hspace{1pt}}c'*(len(plotlist)-1)) + endl
         for n, plotpath in enumerate(plotlist):
-            output += r'\includegraphics[width=%0.2f\textwidth]{%s/%s.pdf}'%( 0.35, outdir.replace( args.directory+'/', '' ), os.path.split(plotpath)[1] )
+            output += r'\includegraphics[width=%0.2f\textwidth]{%s/%s.png}'%( 0.35, outdir.replace( args.directory+'/', '' ), os.path.split(plotpath)[1] )
             if n+1 < len(plotlist):
                 output += ' &'
             output += endl
diff --git a/MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/macros/CreateResolutionPlots.py b/MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/macros/CreateResolutionPlots.py
index 25c3172887f3d16d9e96b360bf3faa00f5b8aa75..f2f4ce94cb6fa2b5c2463a6925ae5ac51bdfaf5f 100755
--- a/MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/macros/CreateResolutionPlots.py
+++ b/MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/macros/CreateResolutionPlots.py
@@ -19,6 +19,8 @@ from array import array
 ROOT.gROOT.SetBatch( True )
 ROOT.gROOT.Macro("rootlogon.C")
 
+DEBUG=False
+
 #--------------------------------------------------------------------------
 
 def createResolutionPlotsFromProfile( directory ):
@@ -27,10 +29,11 @@ def createResolutionPlotsFromProfile( directory ):
         obj=key.ReadObj()
         if not obj.IsA().InheritsFrom(ROOT.TProfile.Class()):
             continue
-        #print obj.GetName()
+        if DEBUG:
+            print '--- DEBUG obj name ', obj.GetName()
         namePrefix = directory.GetPath()[directory.GetPath().index(':')+2:].replace('/','_')
-        #print '   ',namePrefix
-
+        if DEBUG:
+            print '--- DEBUG namePrefix ', namePrefix
         binVar=''
         if '_vs_eta' in obj.GetName() :
             binVar='eta'
@@ -198,19 +201,26 @@ def main( argv ):
   ## ROOT.gROOT.Macro("~/rootlogon.C")
 
   #muonTypes = [ 'All', 'Prompt', 'InFlight', 'Rest' ]
-  #Authors = [ 'MuidCombined', 'MuTagIMO', 'MuidStandalone', 'MuGirl', 'CaloTag', 'CaloLikelihood', 'AllAuthors' ]
+  #Authors = [ 'MuidCo', 'MuTagIMO', 'MuidSA', 'MuGirl', 'CaloTag', 'CaloLikelihood', 'AllMuons' ]
   muonTypes = [ 'Prompt' ]
-  Authors = [ 'MuidCombined' ]
+  Authors = [ 'MuidCo' ]
   resolutionTypes = [ 'MS','ID','' ]
   resolutionTypesStr = [ 'MS','ID','CB' ]
   colors = [ ROOT.kRed, 8 , ROOT.kBlack ]
 
   momentumParameters = ['PtResol','PtScale']
-  binVariables = [ 'pT', 'eta', 'phi' ]
+  #binVariables = [ 'pT', 'eta', 'phi' ]
+  binVariables = [ 'pT' ]
 
   for muType, author, resolType in itertools.product( muonTypes, Authors, resolutionTypes):
       resolutionHistDirName = 'Muons/{0}/matched/{1}/resolution{2}'.format( muType,author,resolType )
       resolutionHistDir = infile.GetDirectory( resolutionHistDirName )
+      if DEBUG:
+          print '--- DEBUG opening directory ', resolutionHistDirName
+      if not resolutionHistDir:
+          if DEBUG:
+              print '--- DEBUG directory does not exist'
+          continue  
       createResolutionPlotsFromProfile( resolutionHistDir )
       for binVar in binVariables:
           outputDir = resolutionHistDir
diff --git a/MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/macros/PullFitMacro.py b/MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/macros/PullFitMacro.py
index 665a78a9b241007e64bc565bdff01c6b9b970933..c817f674195add4694b91788fa28eba83c78ec7c 100644
--- a/MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/macros/PullFitMacro.py
+++ b/MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/macros/PullFitMacro.py
@@ -9,29 +9,20 @@ import ROOT
 import sys
 import os
 import itertools
-from ROOT import TLatex
+
 #---------------------------------------------------------------------------
 
 def AddGaussian( infile, HistDir, HistName ):
     hist = infile.GetDirectory(HistDir).Get(HistName)
-    if hist.Integral() < 10:
-        print('INFO Skipping - Integral < 10: '+HistName)
+    if hist.GetEntries() < 10:
+        print('INFO Skipping Fit. NumEntries = {0}: '.format(hist.GetEntries()) + HistName)
         return
-    hist.Fit("gaus")
-    func = hist.GetFunction('gaus')
-    func.SetLineColor(ROOT.kRed)    
+    f = ROOT.TF1( "gaus", "gaus", -5, 5 )
+    hist.Fit(f,"RQ")
+    f1 = hist.GetFunction("gaus")
+    f1.SetLineColor(ROOT.kRed)
     print('INFO Overwriting histogram: ' + HistDir+'/'+HistName )
     hist.GetDirectory().WriteTObject( hist, HistName, "Overwrite" )
-    
-    can = ROOT.TCanvas()
-    hist.Draw()
-    t = TLatex()
-    t.SetNDC(); t.SetTextColor(1);
-    
-    resultMeanLab ='#mu = {0} #pm {1}'.format( format(func.GetParameter(1),'.2g'), format(func.GetParError(1),'.2g') )
-    resultSigmaLab ='#sigma = {0} #pm {1}'.format( format(func.GetParameter(2),'.2g'),format(func.GetParError(2),'.2g') )
-    t.DrawLatex(0.2,0.85,'#splitline{'+resultMeanLab+'}{'+resultSigmaLab+'}')
-    can.SaveAs( HistName + '.pdf' )
 
 #---------------------------------------------------------------------------
 
@@ -40,33 +31,33 @@ def main( args ):
         filename = args[1]
         if len( args ) > 2:
             PlotDir = os.path.dirname( args[2] )
-            print('INFO Plots will be saved to {0}'.format( PlotDir ))
+            print( 'INFO Plots will be saved to {0}'.format( PlotDir ) )
             if not os.path.exists(PlotDir):
                 os.makedirs(PlotDir)
         else:
             PlotDir = ''
 
     else:
-        print('Usage: python {0} filename [plot directory]'.format( args[0] ))
+        print( 'Usage: python {0} filename [plot directory]'.format( args[0] ) )
         return
 
     if not os.path.exists( filename ):
         print ( 'File not found: ' + filename )
         return
 
+    print( 'Opening file: ' + filename )
     infile = ROOT.TFile.Open( filename, 'update' )
 
-    #MuonTypes = [ 'All', 'Prompt', 'InFlight', 'NonIsolated' ]
-    MuonTypes = [ 'Prompt']
-    Authors = [ 'MuidCombined' ] #, 'AllAuthors', 'CaloTag', 'MuGirl', 'MuidStandalone' ]
-    PullTypes = [ 'Pulls' ] #, 'PullsID', 'PullsMS' ]
+    MuonTypes = [ 'All', 'Prompt', 'InFlight', 'NonIsolated' ]
+    PullTypes = [ 'Pulls', 'PullsID', 'PullsMS' ]
     Variables = [ 'phi0', 'theta', 'qOverP', 'P', 'd0', 'z0' ]
-    #Variables = [ 'qOverP' ]
 
     for MuonType in MuonTypes:
         if not infile.Get( 'Muons/' + MuonType ):
 #            print( 'INFO TDirectory not found: Muons/' + MuonType )
             continue
+        AuthDir = infile.Get( 'Muons/{0}/matched'.format( MuonType ) )
+        Authors = [ i.GetName() for i in AuthDir.GetListOfKeys() if AuthDir.Get( i.GetName() ).InheritsFrom( 'TDirectory' ) ]
         for Author in Authors:
             if not infile.Get( 'Muons/{0}/matched/{1}'.format( MuonType, Author ) ):
 #                print( 'INFO TDirectory not found: ' + 'Muons/{0}/matched/{1}'.format( MuonType, Author ) )
@@ -87,12 +78,12 @@ def main( args ):
 
     infile.Close()
 
-    # if PlotDir != '':
-    #     infile = ROOT.TFile.Open( filename )
-    #     can = ROOT.TCanvas()
-    #     infile.GetDirectory(HistDir).Get(HistName).Draw()
-    #     can.SaveAs( PlotDir + '/' + HistName + '.pdf' )
-    #     infile.Close()
+    if PlotDir != '':
+        infile = ROOT.TFile.Open( filename )
+        can = ROOT.TCanvas()
+        infile.GetDirectory(HistDir).Get(HistName).Draw()
+        can.SaveAs( PlotDir + '/' + HistName + '.pdf' )
+        infile.Close()
 
 #---------------------------------------------------------------------------
 
diff --git a/MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/macros/config.py b/MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/macros/config.py
index 9ad931d16b5603f9d2f052bcf086e224f77d6356..7e6aac41058b554a09eef47ffc42d02f556459fa 100644
--- a/MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/macros/config.py
+++ b/MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/macros/config.py
@@ -1,7 +1,8 @@
 # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
 
-#Dan Mori
+#by Dan Mori
 #config file for CreateMuonValidationSlides.py
+#all strings here are for LaTeX
 
 from collections import OrderedDict
 
@@ -18,11 +19,11 @@ TestDescription = 'run 2, pileup, 14 TeV'
 #titlepage info
 Title = 'Muon Validation of {0}'.format( TestVersion, RefVersion )
 Subtitle = 'Pileup vs No Pileup, Run 2 Config (14 TeV)'
-Author = 'Dan Mori'
-ShortAuthor = 'Mori'
-Institute = 'Simon Fraser University'
-ShortInstitute = 'SFU'
-Date = '10 Sept 2014'
+Author = 'Me'
+ShortAuthor = 'Me'
+Institute = 'CERN'
+ShortInstitute = 'CERN'
+Date = r'\today'
 
 ShortTitle = r'\textcolor{red}{Test: %s} \textcolor{black}{Ref: %s}'%( TestVersion, RefVersion )  #this will be in the footline of each slide - shows versions of test/ref in red/black
 
@@ -37,122 +38,135 @@ Summary = []
 #    'item 3' ]
 
 #############################################################################
-#list of plots to go into each page. the key is the title for each page
+#list of plots to go into each page. the dict key is the title for each page
 #each plot should be entered as path/to/hist/histname
 #The pages will appear in the order given here
+#macro is setup to handle 2 or 3 plots per page only
 
 PlotPages = OrderedDict()
 PlotComments = {}
 
 #kinematics
 PlotPages[ 'Kinematics - pt, eta, phi' ] = [ 
-    'Muons/Prompt/reco/MuidCombined/Muons_Prompt_reco_MuidCombined_pt',
-    'Muons/Prompt/reco/MuidCombined/Muons_Prompt_reco_MuidCombined_eta',
-    'Muons/Prompt/reco/MuidCombined/Muons_Prompt_reco_MuidCombined_phi' ]
+    'Muons/All/reco/AllAuthors/Muons_All_reco_AllAuthors_pt',
+    'Muons/All/reco/AllAuthors/Muons_All_reco_AllAuthors_eta',
+    'Muons/All/reco/AllAuthors/Muons_All_reco_AllAuthors_phi' ]
 #PlotComments[ 'Kinematics - pt, eta, phi' ] = 'PUT COMMENTS HERE IF YOU WANT'
 
 PlotPages[ 'Kinematics - d0, z0' ] = [
-    'Muons/Prompt/reco/MuidCombined/Muons_Prompt_reco_MuidCombined_d0',
-    'Muons/Prompt/reco/MuidCombined/Muons_Prompt_reco_MuidCombined_z0' ]
+    'Muons/All/reco/AllAuthors/Muons_All_reco_AllAuthors_d0',
+    'Muons/All/reco/AllAuthors/Muons_All_reco_AllAuthors_z0' ]
 #PlotComments[ 'Kinematics - d0 (left), z0 (right)' ] = 'PUT COMMENTS HERE IF YOU WANT'
 
 #layers
 PlotPages[ 'Precision Layers' ] = [
-    'Muons/Prompt/reco/MuidCombined/Muons_Prompt_reco_MuidCombined_nprecLayers',
-    'Muons/Prompt/reco/MuidCombined/Muons_Prompt_reco_MuidCombined_nphiLayers' ]
+    'Muons/All/reco/AllAuthors/Muons_All_reco_AllAuthors_nprecLayers',
+    'Muons/All/reco/AllAuthors/Muons_All_reco_AllAuthors_nphiLayers' ]
 #PlotComments[ 'Precision Layers' ] = 'PUT COMMENTS HERE IF YOU WANT'
 
 #hits
 PlotPages[ 'Precision Hits - Inner' ] = [
-    'Muons/Prompt/reco/MuidCombined/Muons_Prompt_reco_MuidCombined_innersmallhits',
-    'Muons/Prompt/reco/MuidCombined/Muons_Prompt_reco_MuidCombined_innerlargehits' ]
+    'Muons/All/reco/AllAuthors/Muons_All_reco_AllAuthors_innersmallhits',
+    'Muons/All/reco/AllAuthors/Muons_All_reco_AllAuthors_innerlargehits' ]
 #PlotComments[ 'Precision Hits - Inner' ] = 'PUT COMMENTS HERE IF YOU WANT'
 
 PlotPages[ 'Precision Hits - Middle' ] = [
-    'Muons/Prompt/reco/MuidCombined/Muons_Prompt_reco_MuidCombined_middlesmallhits',
-    'Muons/Prompt/reco/MuidCombined/Muons_Prompt_reco_MuidCombined_middlelargehits' ]
+    'Muons/All/reco/AllAuthors/Muons_All_reco_AllAuthors_middlesmallhits',
+    'Muons/All/reco/AllAuthors/Muons_All_reco_AllAuthors_middlelargehits' ]
 #PlotComments[ 'Precision Hits - Middle' ] = 'PUT COMMENTS HERE IF YOU WANT'
 
 PlotPages[ 'Precision Hits - Outer' ] = [
-    'Muons/Prompt/reco/MuidCombined/Muons_Prompt_reco_MuidCombined_outersmallhits',
-    'Muons/Prompt/reco/MuidCombined/Muons_Prompt_reco_MuidCombined_outerlargehits' ]
+    'Muons/All/reco/AllAuthors/Muons_All_reco_AllAuthors_outersmallhits',
+    'Muons/All/reco/AllAuthors/Muons_All_reco_AllAuthors_outerlargehits' ]
 #PlotComments[ 'Precision Hits - Outer' ] = 'PUT COMMENTS HERE IF YOU WANT'
 
 #isolation
 PlotPages[ r'Isolation - $p_T$-cone / $p_T$' ] = [
-    'Muons/Prompt/reco/MuidCombined/Muons_Prompt_reco_MuidCombined_ptcone20rel',
-    'Muons/Prompt/reco/MuidCombined/Muons_Prompt_reco_MuidCombined_ptcone30rel',
-    'Muons/Prompt/reco/MuidCombined/Muons_Prompt_reco_MuidCombined_ptcone40rel' ]
+    'Muons/All/reco/AllAuthors/Muons_All_reco_AllAuthors_ptcone20rel',
+    'Muons/All/reco/AllAuthors/Muons_All_reco_AllAuthors_ptcone30rel',
+    'Muons/All/reco/AllAuthors/Muons_All_reco_AllAuthors_ptcone40rel' ]
 #PlotComments[ r'Isolation - $p_T$-cone / $p_T$' ] = 'PUT COMMENTS HERE IF YOU WANT'
 
 PlotPages[ r'Isolation - $E_T$-cone / $p_T$' ] = [
-    'Muons/Prompt/reco/MuidCombined/Muons_Prompt_reco_MuidCombined_etcone20rel',
-    'Muons/Prompt/reco/MuidCombined/Muons_Prompt_reco_MuidCombined_etcone30rel',
-    'Muons/Prompt/reco/MuidCombined/Muons_Prompt_reco_MuidCombined_etcone40rel' ]
+    'Muons/All/reco/AllAuthors/Muons_All_reco_AllAuthors_etcone20rel',
+    'Muons/All/reco/AllAuthors/Muons_All_reco_AllAuthors_etcone30rel',
+    'Muons/All/reco/AllAuthors/Muons_All_reco_AllAuthors_etcone40rel' ]
 #PlotComments[ r'Isolation - $E_T$-cone / $p_T$' ] = 'PUT COMMENTS HERE IF YOU WANT'
 
 #chi^2
 PlotPages[ 'Track Fit Quality' ] = [
-    'Muons/Prompt/reco/MuidCombined/Muons_Prompt_reco_MuidCombined_tchi2',
-    'Muons/Prompt/reco/MuidCombined/Muons_Prompt_reco_MuidCombined_chi2ndof' ]
+    'Muons/All/reco/AllAuthors/Muons_All_reco_AllAuthors_tchi2',
+    'Muons/All/reco/AllAuthors/Muons_All_reco_AllAuthors_chi2ndof' ]
 #PlotComments[ 'Track Fit Quality' ] = 'PUT COMMENTS HERE IF YOU WANT'
 
 #Resolution
 #PlotPages[ 'Resolution (MS+ID)' ] = [
-#    'Muons/Prompt/matched/MuidCombined/Muons_Prompt_matched_MuidCombined_resolution_PtRes_vs_pt',
-#    'Muons/Prompt/matched/MuidCombined/Muons_Prompt_matched_MuidCombined_resolution_PtRes_vs_eta',
-#    'Muons/Prompt/matched/MuidCombined/Muons_Prompt_matched_MuidCombined_resolution_PtRes_vs_phi' ]
+#    'Muons/All/matched/AllAuthors/Muons_All_matched_AllAuthors_resolution_PtRes_vs_pt',
+#    'Muons/All/matched/AllAuthors/Muons_All_matched_AllAuthors_resolution_PtRes_vs_eta',
+#    'Muons/All/matched/AllAuthors/Muons_All_matched_AllAuthors_resolution_PtRes_vs_phi' ]
 #PlotComments[ 'Resolution (MS+ID)' ] = 'PUT COMMENTS HERE IF YOU WANT'
 
 #PlotPages[ 'Resolution (ID)' ] = [
-#    'Muons/Prompt/matched/MuidCombined/Muons_Prompt_matched_MuidCombined_resolutionID_PtRes_vs_pt',
-#    'Muons/Prompt/matched/MuidCombined/Muons_Prompt_matched_MuidCombined_resolutionID_PtRes_vs_eta',
-#    'Muons/Prompt/matched/MuidCombined/Muons_Prompt_matched_MuidCombined_resolutionID_PtRes_vs_phi' ]
+#    'Muons/All/matched/AllAuthors/Muons_All_matched_AllAuthors_resolutionID_PtRes_vs_pt',
+#    'Muons/All/matched/AllAuthors/Muons_All_matched_AllAuthors_resolutionID_PtRes_vs_eta',
+#    'Muons/All/matched/AllAuthors/Muons_All_matched_AllAuthors_resolutionID_PtRes_vs_phi' ]
 #PlotComments[ 'Resolution (ID)' ] = 'PUT COMMENTS HERE IF YOU WANT'
 
 #PlotPages[ 'Resolution (MS)' ] = [
-#    'Muons/Prompt/matched/MuidCombined/Muons_Prompt_matched_MuidCombined_resolutionMS_PtRes_vs_pt',
-#    'Muons/Prompt/matched/MuidCombined/Muons_Prompt_matched_MuidCombined_resolutionMS_PtRes_vs_eta',
-#    'Muons/Prompt/matched/MuidCombined/Muons_Prompt_matched_MuidCombined_resolutionMS_PtRes_vs_phi' ]
+#    'Muons/All/matched/AllAuthors/Muons_All_matched_AllAuthors_resolutionMS_PtRes_vs_pt',
+#    'Muons/All/matched/AllAuthors/Muons_All_matched_AllAuthors_resolutionMS_PtRes_vs_eta',
+#    'Muons/All/matched/AllAuthors/Muons_All_matched_AllAuthors_resolutionMS_PtRes_vs_phi' ]
 #PlotComments[ 'Resolution (MS)' ] = 'PUT COMMENTS HERE IF YOU WANT'
 
 #Momentum scale
 #PlotPages[ r'$p_T$ Scale (MS+ID)' ] = [
-#    'Muons/Prompt/matched/MuidCombined/Muons_Prompt_matched_MuidCombined_resolution_PtScale_vs_pt',
-#    'Muons/Prompt/matched/MuidCombined/Muons_Prompt_matched_MuidCombined_resolution_PtScale_vs_eta',
-#    'Muons/Prompt/matched/MuidCombined/Muons_Prompt_matched_MuidCombined_resolution_PtScale_vs_phi' ]
+#    'Muons/All/matched/AllAuthors/Muons_All_matched_AllAuthors_resolution_PtScale_vs_pt',
+#    'Muons/All/matched/AllAuthors/Muons_All_matched_AllAuthors_resolution_PtScale_vs_eta',
+#    'Muons/All/matched/AllAuthors/Muons_All_matched_AllAuthors_resolution_PtScale_vs_phi' ]
 #PlotComments[ r'$p_T$ Scale (MS+ID)' ] = 'PUT COMMENTS HERE IF YOU WANT'
 
 #PlotPages[ r'$p_T$ Scale (ID)' ] = [
-#    'Muons/Prompt/matched/MuidCombined/Muons_Prompt_matched_MuidCombined_resolutionID_PtScale_vs_pt',
-#    'Muons/Prompt/matched/MuidCombined/Muons_Prompt_matched_MuidCombined_resolutionID_PtScale_vs_eta',
-#    'Muons/Prompt/matched/MuidCombined/Muons_Prompt_matched_MuidCombined_resolutionID_PtScale_vs_phi' ]
+#    'Muons/All/matched/AllAuthors/Muons_All_matched_AllAuthors_resolutionID_PtScale_vs_pt',
+#    'Muons/All/matched/AllAuthors/Muons_All_matched_AllAuthors_resolutionID_PtScale_vs_eta',
+#    'Muons/All/matched/AllAuthors/Muons_All_matched_AllAuthors_resolutionID_PtScale_vs_phi' ]
 #PlotComments[ r'$p_T$ Scale (ID)' ] = 'PUT COMMENTS HERE IF YOU WANT'
 
 #PlotPages[ r'$p_T$ Scale (MS)' ] = [
-#    'Muons/Prompt/matched/MuidCombined/Muons_Prompt_matched_MuidCombined_resolutionMS_PtScale_vs_pt',
-#    'Muons/Prompt/matched/MuidCombined/Muons_Prompt_matched_MuidCombined_resolutionMS_PtScale_vs_eta',
-#    'Muons/Prompt/matched/MuidCombined/Muons_Prompt_matched_MuidCombined_resolutionMS_PtScale_vs_phi' ]
+#    'Muons/All/matched/AllAuthors/Muons_All_matched_AllAuthors_resolutionMS_PtScale_vs_pt',
+#    'Muons/All/matched/AllAuthors/Muons_All_matched_AllAuthors_resolutionMS_PtScale_vs_eta',
+#    'Muons/All/matched/AllAuthors/Muons_All_matched_AllAuthors_resolutionMS_PtScale_vs_phi' ]
 #PlotComments[ r'$p_T$ Scale (MS)' ] = 'PUT COMMENTS HERE IF YOU WANT'
 
+#Pulls
+PlotPages[ 'Track Pull Plots - $q/P$, $\theta$, $\phi$' ] = [
+    'Muons/All/matched/AllAuthors/Pulls/Muons_All_matched_AllAuthors_Pulls_Pull_qOverP',
+    'Muons/All/matched/AllAuthors/Pulls/Muons_All_matched_AllAuthors_Pulls_Pull_theta',
+    'Muons/All/matched/AllAuthors/Pulls/Muons_All_matched_AllAuthors_Pulls_Pull_phi0' ]
+#PlotComments[ 'Track Pull Plots - $q/P$, $\theta$, $\phi$' ] = 'PUT COMMENTS HERE IF YOU WANT'
+
+PlotPages[ 'Track Pull Plots - $d_0$, $z_0$' ] = [
+    'Muons/All/matched/AllAuthors/Pulls/Muons_All_matched_AllAuthors_Pulls_Pull_dO',
+    'Muons/All/matched/AllAuthors/Pulls/Muons_All_matched_AllAuthors_Pulls_Pull_z0' ]
+#PlotComments[ 'Efficiency' ] = 'PUT COMMENTS HERE IF YOU WANT'
+
 #Efficiency
 PlotPages[ 'Efficiency' ] = [
-    'Muons/Prompt/matched/MuidCombined/Muons_Prompt_matched_MuidCombined_Eff_pt',
-    'Muons/Prompt/matched/MuidCombined/Muons_Prompt_matched_MuidCombined_Eff_eta',
-    'Muons/Prompt/matched/MuidCombined/Muons_Prompt_matched_MuidCombined_Eff_phi' ]
+    'Muons/All/matched/AllAuthors/Muons_All_matched_AllAuthors_Eff_pt',
+    'Muons/All/matched/AllAuthors/Muons_All_matched_AllAuthors_Eff_eta',
+    'Muons/All/matched/AllAuthors/Muons_All_matched_AllAuthors_Eff_phi' ]
 #PlotComments[ 'Efficiency' ] = 'PUT COMMENTS HERE IF YOU WANT'
 
 #Reco fraction
 #PlotPages[ 'Reco Fraction - Inflight Muons' ] = [
-#    'Muons/InFlight/reco/MuidCombined/Muons_InFlight_reco_MuidCombined_RecoFrac_pt',
-#    'Muons/InFlight/reco/MuidCombined/Muons_InFlight_reco_MuidCombined_RecoFrac_eta',
-#    'Muons/InFlight/reco/MuidCombined/Muons_InFlight_reco_MuidCombined_RecoFrac_phi' ]
+#    'Muons/InFlight/reco/AllAuthors/Muons_InFlight_reco_AllAuthors_RecoFrac_pt',
+#    'Muons/InFlight/reco/AllAuthors/Muons_InFlight_reco_AllAuthors_RecoFrac_eta',
+#    'Muons/InFlight/reco/AllAuthors/Muons_InFlight_reco_AllAuthors_RecoFrac_phi' ]
 #PlotComments[ 'Reco Fraction - Inflight Muons' ] = 'PUT COMMENTS HERE IF YOU WANT'
 
 #PlotPages[ 'Reco Fraction - Rest Muons' ] = [
-#    'Muons/Rest/reco/MuidCombined/Muons_Rest_reco_MuidCombined_RecoFrac_pt',
-#    'Muons/Rest/reco/MuidCombined/Muons_Rest_reco_MuidCombined_RecoFrac_eta',
-#    'Muons/Rest/reco/MuidCombined/Muons_Rest_reco_MuidCombined_RecoFrac_phi' ]
+#    'Muons/Rest/reco/AllAuthors/Muons_Rest_reco_AllAuthors_RecoFrac_pt',
+#    'Muons/Rest/reco/AllAuthors/Muons_Rest_reco_AllAuthors_RecoFrac_eta',
+#    'Muons/Rest/reco/AllAuthors/Muons_Rest_reco_AllAuthors_RecoFrac_phi' ]
 #PlotComments[ 'Reco Fraction - Rest Muons' ] = 'PUT COMMENTS HERE IF YOU WANT'
 
 #PlotPages[ 'Reco Fraction - Unmatched All Authors' ] = [
diff --git a/MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/macros/validator.py b/MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/macros/validator.py
index 353873dc733af3604659ee58377599ced1cc697d..9b2d7860280cdf64aaf33ba6ac7147a65071fafa 100644
--- a/MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/macros/validator.py
+++ b/MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/macros/validator.py
@@ -85,7 +85,8 @@ class Validator(object):
       return
 
     if self.CompareFunc(refHist, testHist): print path + refHist.GetName() + " looks ok"
-    else: self.MakeComparisonPlot(refHist, testHist, path)
+    #else:
+    self.MakeComparisonPlot(refHist, testHist, path)
   
   def MakeComparisonPlot(self,refHist, testHist, path):
     def SetBounds(refHist, testHist, setMinToZero):
diff --git a/MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/src/MuonPhysValMonitoringTool.cxx b/MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/src/MuonPhysValMonitoringTool.cxx
index 63087bc36f32343ea71479761d780e41c929b864..85397268622c87ea5ecae6937026c969b9464f1c 100644
--- a/MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/src/MuonPhysValMonitoringTool.cxx
+++ b/MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/src/MuonPhysValMonitoringTool.cxx
@@ -15,13 +15,23 @@
 // FrameWork includes
 #include "GaudiKernel/IToolSvc.h"
 #include "xAODMuon/MuonContainer.h"
+#include "xAODMuon/MuonAuxContainer.h"
 #include "xAODMuon/Muon.h"
+#include "xAODTrigger/MuonRoI.h"
+#include "xAODTrigger/MuonRoIContainer.h"
 #include "xAODTruth/TruthParticle.h"
 #include "xAODTruth/TruthVertexContainer.h"
 #include "xAODTruth/TruthVertexAuxContainer.h"
 #include "xAODEventInfo/EventInfo.h"
-#include "AthenaBaseComps/AthCheckMacros.h"
+//#include "AthenaBaseComps/AthCheckMacros.h"
+#include "MuonHistUtils/MuonEnumDefs.h"
 
+#include "xAODCore/ShallowCopy.h"
+#include "xAODBase/IParticleHelpers.h"
+
+typedef ElementLink< xAOD::MuonContainer > MuonLink;
+typedef ElementLink< xAOD::MuonSegmentContainer > MuonSegmentLink;
+typedef ElementLink< xAOD::TruthParticleContainer > TruthLink;
 
 namespace MuonPhysValMonitoring {
 
@@ -36,12 +46,15 @@ MuonPhysValMonitoringTool::MuonPhysValMonitoringTool( const std::string& type,
 						      const std::string& name, 
 						      const IInterface* parent ):
   ManagedMonitorToolBase( type, name, parent ),
+  m_isData(false),
+  m_muonSelectionTool("CP::MuonSelectionTool/MuonSelectionTool"),
   m_oUnmatchedRecoMuonPlots(NULL),
   m_oUnmatchedTruthMuonPlots(NULL),
   m_oUnmatchedRecoMuonTrackPlots(NULL),
   m_oUnmatchedRecoMuonSegmentPlots(NULL),
   h_overview_reco_category(NULL)
-{  
+{
+  declareProperty( "IsData", m_isData = false );
   declareProperty( "MuonContainerName", m_muonsName = "Muons" );
   declareProperty( "MuonTruthParticleContainerName", m_muonsTruthName = "MuonTruthParticles" );
   declareProperty( "MuonTrackContainerName", m_muonTracksName = "MuonSpectrometerTrackParticles" );
@@ -52,21 +65,41 @@ MuonPhysValMonitoringTool::MuonPhysValMonitoringTool( const std::string& type,
   declareProperty( "DoMuonTrackValidation", m_doMuonTrackValidation = true);
   declareProperty( "DoMuonSegmentValidation", m_doMuonSegmentValidation = true);
   declareProperty( "DoBinnedResolutionPlots", m_doBinnedResolutionPlots = true);
+
+  declareProperty( "DoTrigMuonValidation", m_doTrigMuonValidation = false);
+  declareProperty( "DoTrigMuonL1Validation", m_doTrigMuonL1Validation = false);
+  declareProperty( "DoTrigMuonL2Validation", m_doTrigMuonL2Validation = false);
+  declareProperty( "DoTrigMuonEFValidation", m_doTrigMuonEFValidation = false);
+  declareProperty( "L1TrigMuonContainerName", m_muonL1TrigName = "LVL1MuonRoIs");
+  declareProperty( "EFCombTrigMuonContainerName", m_muonEFCombTrigName = "HLT_xAOD__MuonContainer_MuonEFInfo");
+
 }
 
 // Destructor
 ///////////////
 MuonPhysValMonitoringTool::~MuonPhysValMonitoringTool()
-{ 
-}
+{}
 
 // Athena algtool's Hooks
 ////////////////////////////
 StatusCode MuonPhysValMonitoringTool::initialize()
 {
-  ATH_MSG_INFO ("Initializing " << name() << "...");    
+  ATH_MSG_INFO ("Initializing " << name() << "...");
   ATH_CHECK(ManagedMonitorToolBase::initialize());
-  
+
+  // setup flags
+  if (m_doTrigMuonValidation==false) {
+    m_doTrigMuonL1Validation = false;
+    m_doTrigMuonL2Validation = false;
+    m_doTrigMuonEFValidation = false;
+  }
+  if (m_isData) {
+    m_selectMuonCategories.clear();
+    m_selectMuonCategories.push_back(ALL); //cannot identigy origin of muon in data
+  }
+
+  ATH_CHECK(m_muonSelectionTool.retrieve());
+
   return StatusCode::SUCCESS;
 }
 
@@ -130,12 +163,16 @@ StatusCode MuonPhysValMonitoringTool::bookHistograms()
 
   for (const auto category : m_selectMuonCategoriesStr) {
     std::string categoryPath = "Muons/"+category+"/";
-    m_muonValidationPlots.push_back(new MuonValidationPlots(0, categoryPath, m_selectMuonAuthors, m_doBinnedResolutionPlots));
+    m_muonValidationPlots.push_back( new MuonValidationPlots(0, categoryPath,
+              m_selectMuonAuthors, m_isData,
+	      (category==theMuonCategories[ALL]? false : m_doBinnedResolutionPlots),
+              m_doTrigMuonL1Validation,m_doTrigMuonL2Validation,m_doTrigMuonEFValidation ));
+    
     if (m_doMuonTrackValidation) 
-      m_muonTrackValidationPlots.push_back(new MuonTrackValidationPlots(0, categoryPath));
+      m_muonTrackValidationPlots.push_back(new MuonTrackValidationPlots(0, categoryPath, m_isData));
     if (m_doMuonSegmentValidation) {
       if (category!=theMuonCategories[ALL]) continue; //cannot identify the truth origin of segments...
-      m_muonSegmentValidationPlots.push_back(new MuonSegmentValidationPlots(0, categoryPath));
+      m_muonSegmentValidationPlots.push_back(new MuonSegmentValidationPlots(0, categoryPath, m_isData));
     }
   }
   
@@ -168,6 +205,16 @@ StatusCode MuonPhysValMonitoringTool::bookHistograms()
   bookValidationPlots(*m_oUnmatchedTruthMuonPlots).ignore();
 
   //book overview hists
+  h_overview_nObjects.clear();
+  h_overview_nObjects.push_back(new TH1F("Muons_Overview_N_perevent_truth_muons", "Number of truth Muons per event", 20, -0.5, 19.5));
+  h_overview_nObjects.push_back(new TH1F("Muons_Overview_N_perevent_muons", "Number of Muons per event", 20, -0.5, 19.5));
+  h_overview_nObjects.push_back(new TH1F("Muons_Overview_N_perevent_tracks", "Number of Tracks per event", 50, -0.5, 49.5));
+  h_overview_nObjects.push_back(new TH1F("Muons_Overview_N_perevent_truth_segments", "Number of truth Segments per event", 200, -0.5, 199.5));
+  h_overview_nObjects.push_back(new TH1F("Muons_Overview_N_perevent_segments", "Number of Segments per event", 200, -0.5, 199.5));
+  for (const auto hist : h_overview_nObjects) {
+    if (hist) ATH_CHECK(regHist(hist,"Muons/Overview",all));
+  }
+
   h_overview_reco_category = new TH1F("Muons_reco_category","",4,0,4); //prompt/in-flight/non-isolated/other
   for (int i=1; i<4; i++) { //skip 'All'
     h_overview_reco_category->GetXaxis()->SetBinLabel(i,theMuonCategories[i].c_str());
@@ -184,15 +231,26 @@ StatusCode MuonPhysValMonitoringTool::bookHistograms()
     if (hist) ATH_CHECK(regHist(hist,"Muons/Overview",all));
   }
 
-  return StatusCode::SUCCESS;      
+  return StatusCode::SUCCESS;
 }
 
 StatusCode MuonPhysValMonitoringTool::bookValidationPlots(PlotBase& valPlots)
 {
   valPlots.initialize();
   std::vector<HistData> hists = valPlots.retrieveBookedHistograms();
-  for (auto hist: hists){
-    ATH_MSG_DEBUG ("Initializing " << hist.first << " " << hist.first->GetName() << " " << hist.second << "...");
+
+  for (auto &hist: hists){
+    std::string sHistName = hist.first->GetName();
+    ATH_MSG_DEBUG ("Initializing " << hist.first << " " << sHistName << " " << hist.second << "...");
+
+    //check for histograms that are useless
+    if ( sHistName.find( Muon::EnumDefs::toString(xAOD::Muon::MuidSA) ) != std::string::npos &&
+	 ( sHistName.find( "ID" ) != std::string::npos || sHistName.find( "MS" ) != std::string::npos ) )
+      continue;
+    if ( sHistName.find( "_bin_" ) != std::string::npos && ( sHistName.find( "Res_eta" ) != std::string::npos || sHistName.find( "Res_phi" ) != std::string::npos) )
+      continue;
+    
+    modifyHistogram(hist.first);
     ATH_CHECK(regHist(hist.first,hist.second,all));
   }
   return StatusCode::SUCCESS;
@@ -204,32 +262,67 @@ StatusCode MuonPhysValMonitoringTool::fillHistograms()
   m_vMatchedMuons.clear();
   m_vMatchedMuonTracks.clear();
   m_vMatchedMuonSegments.clear();
-
+  m_vEFMuons.clear();
+  m_vEFMuonsSelected.clear();
+  
   // const xAOD::EventInfo* eventInfo = evtStore()->retrieve<const xAOD::EventInfo>("EventInfo");
   // if (!eventInfo){
-  //   ATH_MSG_WARNING("Could not retrieve EventInfo. Returning 1");
+  //   ATH_MSG_WARNING("Could not retrieve EventInfo, returning");
   //   return StatusCode::SUCCESS;
-  // } 
-  //  
-  // if (!eventInfo->eventType( xAOD::EventInfo::IS_SIMULATION )) return StatusCode::SUCCESS; // enable once it is available
+  // }
+  // isData = !eventInfo->eventType( xAOD::EventInfo::IS_SIMULATION );
+  
 
-  const xAOD::TruthParticleContainer* TruthMuons = evtStore()->tryConstRetrieve< xAOD::TruthParticleContainer >(m_muonsTruthName);
-  if (!TruthMuons) {
-    ATH_MSG_WARNING ("Couldn't retrieve TruthMuons container with key: " << m_muonsTruthName);
-    return StatusCode::SUCCESS;
+  const xAOD::TruthParticleContainer* TruthMuons(0);
+  if (!m_isData) {
+    TruthMuons = evtStore()->tryConstRetrieve< xAOD::TruthParticleContainer >(m_muonsTruthName);
+    if (!TruthMuons) {
+      ATH_MSG_WARNING ("Couldn't retrieve TruthMuons container with key: " << m_muonsTruthName);
+      return StatusCode::SUCCESS;
+    }
+    ATH_MSG_DEBUG("Retrieved truth muons " << TruthMuons->size());
+    h_overview_nObjects[0]->Fill(TruthMuons->size());
   }
-  ATH_MSG_DEBUG("Retrieved truth muons " << TruthMuons->size());
 
-  for (const auto truthMu: *TruthMuons) handleTruthMuon(truthMu);
-  
   const xAOD::MuonContainer* Muons = evtStore()->retrieve< const xAOD::MuonContainer >( m_muonsName );
   if (!Muons) {
     ATH_MSG_WARNING ("Couldn't retrieve Muons container with key: " << m_muonsName);
     return StatusCode::SUCCESS;
   } 
   ATH_MSG_DEBUG("Retrieved muons " << Muons->size());
- 
-  for(const auto mu : *Muons) handleMuon(mu);
+  h_overview_nObjects[1]->Fill(Muons->size());
+
+  // std::pair< xAOD::MuonContainer*, xAOD::ShallowAuxContainer* > NewMuons;
+  // NewMuons = xAOD::shallowCopyContainer( *Muons );
+  // if(!setOriginalObjectLink( *Muons, *NewMuons.first )) { 
+  //   ATH_MSG_ERROR("Failed to add original object links to shallow copy of Muons");
+  //   return StatusCode::FAILURE;
+  // }
+  // for(auto mu : *NewMuons.first) {
+  //   //decorateMuon(*mu); //@@@
+  //   xAOD::Muon::Quality q = mu->quality();
+  //   m_muonSelectionTool->setQuality(*mu);
+  //   if (mu->quality()>xAOD::Muon::VeryLoose || mu->quality()<xAOD::Muon::Tight) ATH_MSG_WARNING( "Muon quality is wrong");    
+  //   //m_muonSelectionTool->setPassesHighPtCuts(*mu);
+  //   //m_muonSelectionTool->setPassesIDCuts(*mu);
+  //   ATH_MSG_ERROR("@@@ before " << q << ", after " << mu->quality() << ", tool " << m_muonSelectionTool->getQuality(*mu)  );
+  //   //if (q!=mu->quality()) ATH_MSG_ERROR("@@@ ok, changed !!");
+  //   ///if (mu->quality()!=m_muonSelectionTool->getQuality(*mu)) ATH_MSG_ERROR("@@@  changed 2 !!");
+  // }
+
+  /////////////////////////////////////////////////////////////////////// @@@
+  // @@@ Temp hack to get the MuonSpectrometerTrackParticle (@MS Entry, not extrapolated), needed for eloss plots
+  // Remove when the link to MuonSpectrometerTrackParticle appears in the xAOD muon
+  MSTracks = evtStore()->retrieve< const xAOD::TrackParticleContainer >( "MuonSpectrometerTrackParticles" );
+  if (!MSTracks) {
+    ATH_MSG_WARNING ("Couldn't retrieve MS Tracks container");
+    return StatusCode::SUCCESS;
+  } 
+  else ATH_MSG_DEBUG("Retrieved muon tracks " << MSTracks->size());
+  /////////////////////////////////////////////////////////////////////// @@@
+  
+  if (!m_isData) for (const auto truthMu: *TruthMuons) handleTruthMuon(truthMu);
+  for (const auto mu: *Muons) handleMuon(mu); //for (auto mu: *NewMuons.first) handleMuon(mu);
 
   if (m_doMuonTrackValidation) {
     const xAOD::TrackParticleContainer* MuonTracks = evtStore()->retrieve< const xAOD::TrackParticleContainer >( m_muonTracksName );
@@ -238,31 +331,85 @@ StatusCode MuonPhysValMonitoringTool::fillHistograms()
       return StatusCode::SUCCESS;
     } 
     ATH_MSG_DEBUG("Retrieved muon tracks " << MuonTracks->size());
-    
+    h_overview_nObjects[2]->Fill(MuonTracks->size());
     for(const auto muTP : *MuonTracks) handleMuonTrack(muTP);
   }
 
   if (m_doMuonSegmentValidation) {
-    const xAOD::MuonSegmentContainer* TruthMuonSegments = evtStore()->tryConstRetrieve< xAOD::MuonSegmentContainer >(m_muonSegmentsTruthName);
-
-    if (!TruthMuonSegments) {
-      ATH_MSG_WARNING ("Couldn't retrieve Truth Muon Segments container with key: " << m_muonSegmentsTruthName);
-      return StatusCode::SUCCESS;
+    const xAOD::MuonSegmentContainer* TruthMuonSegments(0);
+    if (!m_isData) {
+      TruthMuonSegments = evtStore()->tryConstRetrieve< xAOD::MuonSegmentContainer >(m_muonSegmentsTruthName);
+      if (!TruthMuonSegments) {
+	ATH_MSG_WARNING ("Couldn't retrieve Truth Muon Segments container with key: " << m_muonSegmentsTruthName);
+	return StatusCode::SUCCESS;
+      }
+      ATH_MSG_DEBUG("Retrieved truth muon segments " << TruthMuonSegments->size());
+      h_overview_nObjects[3]->Fill(TruthMuonSegments->size());
+      for (const auto truthMuSeg: *TruthMuonSegments) handleTruthMuonSegment(truthMuSeg,TruthMuons);
     }
-
-    ATH_MSG_DEBUG("Retrieved truth muon segments " << TruthMuonSegments->size());
-  
-    for (const auto truthMuSeg: *TruthMuonSegments) handleTruthMuonSegment(truthMuSeg,TruthMuons);
-    
+      
     const xAOD::MuonSegmentContainer* MuonSegments = evtStore()->retrieve< const xAOD::MuonSegmentContainer >( m_muonSegmentsName );
     if (!MuonSegments) {
       ATH_MSG_WARNING ("Couldn't retrieve MuonSegments container with key: " << m_muonSegmentsName);
       return StatusCode::SUCCESS;
     } 
     ATH_MSG_DEBUG("Retrieved muon segments " << MuonSegments->size());
+    h_overview_nObjects[4]->Fill(MuonSegments->size());
     for(const auto muSeg : *MuonSegments) handleMuonSegment(muSeg);	
   }
 
+  if (m_doTrigMuonValidation) {
+    if(m_doTrigMuonL1Validation){
+       const xAOD::MuonRoIContainer* L1TrigMuons = evtStore()->retrieve< const xAOD::MuonRoIContainer >( m_muonL1TrigName );    
+       if (!L1TrigMuons) {
+         ATH_MSG_WARNING ("Couldn't retrieve L1 Muon Trigger container with key: " << m_muonL1TrigName);
+         return StatusCode::SUCCESS;
+       }      
+       ATH_MSG_DEBUG("Retrieved L1 triggered muons " << L1TrigMuons->size());
+       for(const auto TrigL1mu : *L1TrigMuons) handleMuonL1Trigger(TrigL1mu);
+    }
+    if(m_doTrigMuonL2Validation){
+      ATH_MSG_DEBUG("TrigMuonL2Validation not defined");
+    }
+    if(m_doTrigMuonEFValidation){
+       const xAOD::MuonContainer* EFCombTrigMuons = evtStore()->retrieve< const xAOD::MuonContainer >( m_muonEFCombTrigName );    
+       if (!EFCombTrigMuons) {
+         ATH_MSG_WARNING ("Couldn't retrieve EF Muon Trigger container with key: " << m_muonEFCombTrigName);
+         return StatusCode::SUCCESS;
+       }      
+       ATH_MSG_DEBUG("Retrieved EF triggered muons " << EFCombTrigMuons->size());
+       if (EFCombTrigMuons->size()!=0){
+          for(const auto Trigmu : *EFCombTrigMuons) {
+             ATH_MSG_DEBUG("Muon EF Trigger: pt " << Trigmu->pt() <<" phi " << Trigmu->phi() <<" eta " << Trigmu->eta() << "   author" << Trigmu->author());
+             m_vEFMuons.push_back(Trigmu);
+          }
+       
+          m_vEFMuonsSelected.push_back(m_vEFMuons.at(0));
+
+
+          for (unsigned int i=0; i<m_vEFMuons.size(); i++) {    
+		unsigned int cont=0;
+
+              for (unsigned int j=0; j< m_vEFMuonsSelected.size(); j++) {    
+		if(
+		   ( (fabs(m_vEFMuons.at(i)->eta()- m_vEFMuonsSelected.at(j)->eta())>0.05) ||
+		     (fabs(m_vEFMuons.at(i)->phi()- m_vEFMuonsSelected.at(j)->phi())>0.05)   ) ||
+		   ((m_vEFMuons.at(i)->author()-m_vEFMuonsSelected.at(j)->author())!=0)
+		   ) cont++;
+		
+		if (cont==m_vEFMuonsSelected.size()){  
+		     m_vEFMuonsSelected.push_back(m_vEFMuons.at(i));
+	             break;
+		}                         
+              }
+	  }
+       }
+       for (unsigned int j=0; j< m_vEFMuonsSelected.size(); j++) {   	 
+	 handleMuon(m_vEFMuonsSelected.at(j)); //handleMuonTrigger(m_vEFMuonsSelected.at(j));
+       } 
+    }
+  }
+
   return StatusCode::SUCCESS;
 }
 
@@ -301,41 +448,63 @@ void MuonPhysValMonitoringTool::handleMuonSegment(const xAOD::MuonSegment* muSeg
 
 void MuonPhysValMonitoringTool::handleMuon(const xAOD::Muon* mu)
 {
+  if (!mu) return;
   if (msgLvl(MSG::DEBUG)) printMuonDebug(mu);
+
+  //make deep copy of muon to decorate with quality
+  //xAOD::Muon* newmu(0);// = new xAOD::Muon;
+  //correctedMuon(*mu,newmu);
+  //newmu->makePrivateStore(*mu); 
+  // m_muonSelectionTool->setQuality(*newmu);
+  // m_muonSelectionTool->setPassesHighPtCuts(*newmu);
+  // m_muonSelectionTool->setPassesIDCuts(*newmu);
+
   if (std::find(std::begin(m_vMatchedMuons), std::end(m_vMatchedMuons), mu) != std::end(m_vMatchedMuons)) return;
+  
   //unmatched reco muons (not matched with any kind of truth particle, fakes)
   m_oUnmatchedRecoMuonPlots->fill(*mu);
   h_overview_reco_category->Fill("Other",1);
   h_overview_reco_authors[3]->Fill(mu->author());
+ 
   for (unsigned int i=0; i<m_selectMuonCategories.size(); i++) {
-    if (m_selectMuonCategories[i]==ALL) { 
+    if (m_selectMuonCategories[i]==ALL) {
       m_muonValidationPlots[i]->fill(*mu);
       break;
     }
   }
+  //if (newmu) delete newmu;
 }
 
 
 void MuonPhysValMonitoringTool::handleTruthMuon(const xAOD::TruthParticle* truthMu)
 {
   const xAOD::Muon* mu = findRecoMuon(truthMu);
+  
   if (msgLvl(MSG::DEBUG)) printTruthMuonDebug(truthMu, mu);
   if( truthMu->pt() < 5000. || fabs(truthMu->eta()) > 2.5 ) return;
   
+  // xAOD::Muon* newmu(0);
+  // if (mu) {
+  //   //make deep copy of muon to decorate with quality
+  //   newmu = new xAOD::Muon();
+  //   std::cout << "@@@>>" << std::endl;
+  //   correctedMuon(*mu,newmu);
+  //   std::cout << "<<@@@" << std::endl;
+  // }
   unsigned int thisMuonCategory = getMuonTruthCategory(truthMu);
 
-  if (mu) {
-    h_overview_reco_category->Fill(thisMuonCategory-1);
-    h_overview_reco_authors[thisMuonCategory-1]->Fill(mu->author());
-  }
-
   for (unsigned int i=0; i<m_selectMuonCategories.size(); i++) {
     if (m_selectMuonCategories[i]==ALL || m_selectMuonCategories[i]==thisMuonCategory) {
-      m_muonValidationPlots[i]->fill(truthMu, mu); //if no muon is found a protection inside MuonValidationPlots will ensure, its plots won't be filled
+      m_muonValidationPlots[i]->fill(truthMu, mu, MSTracks); //if no muon is found a protection inside MuonValidationPlots will ensure, its plots won't be filled
     }
   }
+  if (mu) {    
+    h_overview_reco_category->Fill(thisMuonCategory-1);
+    h_overview_reco_authors[thisMuonCategory-1]->Fill(mu->author());
+  }
+  else m_oUnmatchedTruthMuonPlots->fill(*truthMu);
 
-  if (!mu) m_oUnmatchedTruthMuonPlots->fill(*truthMu);
+  //if (newmu) delete newmu;
 }
 
 void MuonPhysValMonitoringTool::handleMuonTrack(const xAOD::TrackParticle* muTP)
@@ -345,32 +514,34 @@ void MuonPhysValMonitoringTool::handleMuonTrack(const xAOD::TrackParticle* muTP)
     return;
   }
   
-  ElementLink< xAOD::TruthParticleContainer > truthLink;
-  if( muTP->isAvailable<ElementLink< xAOD::TruthParticleContainer > >("truthParticleLink") ) {
-    truthLink = muTP->auxdata<ElementLink< xAOD::TruthParticleContainer > >("truthParticleLink");
+  if (m_isData) {
+    m_muonTrackValidationPlots.back()->fill(*muTP);
+    return;	
+  }
+
+  TruthLink truthLink;
+  if( muTP->isAvailable<TruthLink>("truthParticleLink") ) {
+    truthLink = muTP->auxdata<TruthLink>("truthParticleLink");
   }
   else {
     ATH_MSG_WARNING("No truth link available");
     return;
   }
-
-  if( truthLink ) {
-    if (!truthLink.isValid() || muTP->auxdata< int >("truthType")==0 ){
-      //unmatched - unknown
-      m_oUnmatchedRecoMuonTrackPlots->fill(*muTP);
-      for (unsigned int i=0; i<m_selectMuonCategories.size(); i++) {
-	if (m_selectMuonCategories[i]==ALL) {
-	  m_muonTrackValidationPlots[i]->fill(*muTP);
-	  break;
-	}
+  if (!truthLink.isValid() || muTP->auxdata< int >("truthType")==0 ){
+    //unmatched - unknown
+    m_oUnmatchedRecoMuonTrackPlots->fill(*muTP);
+    for (unsigned int i=0; i<m_selectMuonCategories.size(); i++) {
+      if (m_selectMuonCategories[i]==ALL) {
+	m_muonTrackValidationPlots[i]->fill(*muTP);
+	break;
       }
     }
-    else {
-      unsigned int thisMuonCategory = getMuonTruthCategory(muTP);
-      for (unsigned int i=0; i<m_selectMuonCategories.size(); i++) {
-	if (m_selectMuonCategories[i]==ALL || m_selectMuonCategories[i]==thisMuonCategory) {
-	  m_muonTrackValidationPlots[i]->fill(*truthLink, muTP); //if no muon is found a protection inside MuonValidationPlots will ensure, its plots won't be filled
-	}
+  }
+  else { //valid truth link and truthType
+    unsigned int thisMuonCategory = getMuonTruthCategory(muTP);
+    for (unsigned int i=0; i<m_selectMuonCategories.size(); i++) {
+      if (m_selectMuonCategories[i]==ALL || m_selectMuonCategories[i]==thisMuonCategory) {
+	m_muonTrackValidationPlots[i]->fill(*truthLink, muTP); //if no muon is found a protection inside MuonValidationPlots will ensure, its plots won't be filled
       }
     }
   }
@@ -378,20 +549,30 @@ void MuonPhysValMonitoringTool::handleMuonTrack(const xAOD::TrackParticle* muTP)
   return;
 }
 
+void MuonPhysValMonitoringTool::handleMuonL1Trigger(const xAOD::MuonRoI* TrigL1mu)
+{
+  if (msgLvl(MSG::DEBUG)) printMuonL1TriggerDebug(TrigL1mu);
+  for (unsigned int i=0; i<m_selectMuonCategories.size(); i++) {
+    if (m_selectMuonCategories[i]==ALL) { 
+      m_muonValidationPlots[i]->fill(*TrigL1mu);
+      break;
+    }
+  } 
+} 
+
 void MuonPhysValMonitoringTool::printMuonDebug(const xAOD::Muon* mu)
 {
   const xAOD::TrackParticle* tp  = mu->primaryTrackParticle();
-  ElementLink< xAOD::TruthParticleContainer > truthLink;
+  TruthLink truthLink;
   if( tp  ){
-    if( !tp->isAvailable<ElementLink< xAOD::TruthParticleContainer > >("truthParticleLink") ) ATH_MSG_DEBUG("No truth link found");
-    else truthLink = tp->auxdata<ElementLink< xAOD::TruthParticleContainer > >("truthParticleLink");
+    if( !tp->isAvailable<TruthLink>("truthParticleLink") ) ATH_MSG_DEBUG("No truth link found");
+    else truthLink = tp->auxdata<TruthLink>("truthParticleLink");
   }
   ATH_MSG_DEBUG("Muon: pt " << mu->pt() << " eta " << mu->eta() << " link " <<truthLink.isValid() );    
 }
 
 const xAOD::Muon* MuonPhysValMonitoringTool::findRecoMuon(const xAOD::TruthParticle* truthMu)
 {
-  typedef ElementLink< xAOD::MuonContainer > MuonLink;
   if(!truthMu->isAvailable< MuonLink >("recoMuonLink") ) return nullptr;
   MuonLink link = truthMu->auxdata< MuonLink >("recoMuonLink");
   if(!link.isValid() ) return nullptr;
@@ -408,6 +589,17 @@ void MuonPhysValMonitoringTool::printTruthMuonDebug(const xAOD::TruthParticle* t
   
 }
 
+// void MuonPhysValMonitoringTool::printMuonEFTriggerDebug(const xAOD::Muon* mu)
+// {
+//   ATH_MSG_DEBUG("   ==> Geometrical selection of EF Trigger muons: pt " << mu->pt() <<" phi " << mu->phi() <<" eta " << mu->eta() <<  " author " << mu->author());    
+// }
+
+void MuonPhysValMonitoringTool::printMuonL1TriggerDebug(const xAOD::MuonRoI* TrigL1mu)
+{
+  ATH_MSG_DEBUG("MuonRoI L1 Trigger: ptThr " << TrigL1mu->thrValue() <<" phi " << TrigL1mu->phi() <<" eta " << TrigL1mu->eta());    
+}
+
+
 
 StatusCode MuonPhysValMonitoringTool::procHistograms() 
 {
@@ -431,7 +623,6 @@ StatusCode MuonPhysValMonitoringTool::procHistograms()
 
 const xAOD::MuonSegment* MuonPhysValMonitoringTool::findRecoMuonSegment(const xAOD::MuonSegment* truthMuSeg)
 {
-  typedef ElementLink< xAOD::MuonSegmentContainer > MuonSegmentLink;
   if(!truthMuSeg->isAvailable< MuonSegmentLink >("recoSegmentLink") ) {
     ATH_MSG_DEBUG("recoSegmentLink not found");
     return nullptr;
@@ -461,9 +652,9 @@ TH1F* MuonPhysValMonitoringTool::findHistogram(std::vector<HistData> hists,std::
 
 MuonPhysValMonitoringTool::MUCATEGORY MuonPhysValMonitoringTool::getMuonSegmentTruthCategory(const xAOD::MuonSegment* truthMuSeg,const xAOD::TruthParticleContainer* muonTruthContainer)
 {
-  ElementLink< xAOD::TruthParticleContainer > truthLink;
-  if( truthMuSeg->isAvailable<ElementLink< xAOD::TruthParticleContainer > >("truthParticleLink") ) {
-    truthLink = truthMuSeg->auxdata<ElementLink< xAOD::TruthParticleContainer > >("truthParticleLink");
+  TruthLink truthLink;
+  if( truthMuSeg->isAvailable<TruthLink>("truthParticleLink") ) {
+    truthLink = truthMuSeg->auxdata<TruthLink>("truthParticleLink");
     if (truthLink.isValid()) {
       int theBarcode = (*truthLink)->barcode();
       if (abs( (*truthLink)->pdgId() ) != 13) return REST;
@@ -488,4 +679,34 @@ MuonPhysValMonitoringTool::MUCATEGORY MuonPhysValMonitoringTool::getMuonTruthCat
   return REST;
 }
 
+void MuonPhysValMonitoringTool::decorateMuon(xAOD::Muon*& mu)
+{
+  //if( outputMuon ) ATH_MSG_WARNING( "Non-null pointer received. " "There's a possible memory leak!" );
+  m_muonSelectionTool->setQuality(*mu);
+  if (mu->quality()>xAOD::Muon::VeryLoose || mu->quality()<xAOD::Muon::Tight) ATH_MSG_WARNING( "Muon quality is wrong");
+  
+  m_muonSelectionTool->setPassesHighPtCuts(*mu);
+  m_muonSelectionTool->setPassesIDCuts(*mu);
+}
+  
+void MuonPhysValMonitoringTool::modifyHistogram(TH1* hist)
+{
+  std::string histname = hist->GetName();
+
+  if (histname.find("trigger_L1_pt") != std::string::npos){ //if (histname=="Muons_All_trigger_L1_pt"){ 
+    hist->SetTitle("L1Trigger Muons pt treshold");
+    hist->GetXaxis()->SetTitle("L1Trigger Muons pt treshold [GeV]");
+    hist->GetXaxis()->Set(30,-0.5,29.5);
+  }
+  if (histname.find("trigger_L1_eta_pt") != std::string::npos){ // if (histname=="Muons_All_trigger_L1_eta_pt") {
+    hist->SetTitle("L1Trigger Muons pt treshold vs eta");
+    hist->GetYaxis()->Set(90,-0.5,29.5);
+    hist->GetYaxis()->SetTitle("L1Trigger Muons pt treshold [GeV]");
+  }
+
+  if (histname.find("MS_Res_phi") != std::string::npos){
+    hist->GetXaxis()->Set(50,-0.025,0.025);	
+  }
+}
+  
 } //close namespace
diff --git a/MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/src/MuonPhysValMonitoringTool.h b/MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/src/MuonPhysValMonitoringTool.h
index 827e298f13bf07c6077af2ea0b66a1b7b6cabeeb..63fb91b949fba5b39c317d6f3c7d726c6a987c5a 100644
--- a/MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/src/MuonPhysValMonitoringTool.h
+++ b/MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/src/MuonPhysValMonitoringTool.h
@@ -21,6 +21,9 @@
 #include "xAODTruth/TruthParticleContainer.h"
 #include "xAODTruth/TruthParticleAuxContainer.h"
 
+// Tools
+#include "MuonSelectorTools/IMuonSelectionTool.h"
+
 // Local includes
 #include "AthenaMonitoring/ManagedMonitorToolBase.h"
 
@@ -82,15 +85,25 @@ class MuonPhysValMonitoringTool
   void handleMuonTrack(const xAOD::TrackParticle* muTP);
   void handleMuonSegment(const xAOD::MuonSegment* muSeg);
   void handleTruthMuonSegment(const xAOD::MuonSegment* truthMuSeg, const xAOD::TruthParticleContainer* muonTruthContainer);
-  
+  void handleMuonTrigger(const xAOD::Muon* Trigmu);
+  void handleMuonL1Trigger(const xAOD::MuonRoI* TrigL1mu);
+
   void printMuonDebug(const xAOD::Muon* mu);
+  void printMuonL1TriggerDebug(const xAOD::MuonRoI* TrigL1mu);
+
   void printTruthMuonDebug(const xAOD::TruthParticle* truthMu, const xAOD::Muon* mu);
   StatusCode bookValidationPlots(PlotBase& valPlots);
   const xAOD::Muon* findRecoMuon(const xAOD::TruthParticle* truthMu);
   const xAOD::MuonSegment* findRecoMuonSegment(const xAOD::MuonSegment* truthMuSeg);
 
+  void decorateMuon(xAOD::Muon*& mu);
+  const xAOD::TrackParticleContainer* MSTracks;
+  
   TH1F* findHistogram(std::vector<HistData> hists,std::string hnameTag,std::string hdirTag,std::string hNewName);
+  void modifyHistogram(TH1* hist);
 
+  bool m_isData;
+  
   // Containers
   std::string m_muonsName;
   std::string m_muonsTruthName;
@@ -105,7 +118,17 @@ class MuonPhysValMonitoringTool
   bool m_doMuonTrackValidation;
   bool m_doBinnedResolutionPlots;
 
-  //
+  bool m_doTrigMuonValidation;
+  bool m_doTrigMuonL1Validation;
+  bool m_doTrigMuonL2Validation;
+  bool m_doTrigMuonEFValidation;
+
+  std::string m_muonL1TrigName;
+  std::string m_muonEFCombTrigName;
+  
+  // Tools
+  ToolHandle<CP::IMuonSelectionTool> m_muonSelectionTool;
+ 
   enum MUCATEGORY{ALL=0, PROMPT, INFLIGHT, NONISO, REST};
   std::vector<std::string> m_selectMuonCategoriesStr;
   MuonPhysValMonitoringTool::MUCATEGORY getMuonSegmentTruthCategory(const xAOD::MuonSegment* truthMuSeg, const xAOD::TruthParticleContainer* muonTruthContainer);
@@ -121,12 +144,15 @@ class MuonPhysValMonitoringTool
   Muon::MuonSegmentPlots* m_oUnmatchedRecoMuonSegmentPlots;
 
   //overview hists
+  std::vector<TH1F*> h_overview_nObjects;
   TH1F* h_overview_reco_category;
   std::vector<TH1F*> h_overview_reco_authors;
 
   std::vector<const xAOD::Muon*> m_vMatchedMuons;
   std::vector<const xAOD::TrackParticle*> m_vMatchedMuonTracks;
   std::vector<const xAOD::MuonSegment*> m_vMatchedMuonSegments;
+  std::vector<const xAOD::Muon*> m_vEFMuons;
+  std::vector<const xAOD::Muon*> m_vEFMuonsSelected;
 }; 
 
 
diff --git a/MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/src/MuonSegmentValidationPlots.cxx b/MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/src/MuonSegmentValidationPlots.cxx
index 861fe1b644a43b4f9c6de746157c5516a014f53d..e86a7f986be86244d0944d6b54e0f2f7454b0070 100644
--- a/MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/src/MuonSegmentValidationPlots.cxx
+++ b/MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/src/MuonSegmentValidationPlots.cxx
@@ -4,28 +4,39 @@
 
 #include "MuonSegmentValidationPlots.h"
 
-MuonSegmentValidationPlots::MuonSegmentValidationPlots(PlotBase* pParent, std::string sDir):
-  PlotBase(pParent, sDir),
-  m_oRecoSegmPlots(this, "reco/MuonSegments/"),
-  m_oMatchedMuonSegmPlots(this, "matched/MuonSegments/"),
-  m_oMatchedMuonSegmDiffPlots(this, "matched/MuonSegments/"),
-  m_oTruthMuonSegmPlots(this, "truth/MuonSegments/")
-{}
+MuonSegmentValidationPlots::MuonSegmentValidationPlots(PlotBase* pParent, std::string sDir, bool isData):
+  PlotBase(pParent, sDir), m_oRecoSegmPlots(NULL), m_oMatchedMuonSegmPlots(NULL), m_oMatchedMuonSegmDiffPlots(NULL), m_oTruthMuonSegmPlots(NULL)
+{
+  m_oRecoSegmPlots = new Muon::MuonSegmentPlots(this, "reco/MuonSegments/");
+  if (!isData) {
+    m_oMatchedMuonSegmPlots = new Muon::MuonSegmentPlots(this, "matched/MuonSegments/");
+    m_oMatchedMuonSegmDiffPlots = new Muon::MuonSegmentTruthRelatedPlots(this, "matched/MuonSegments/");
+    m_oTruthMuonSegmPlots = new Muon::MuonSegmentPlots(this, "truth/MuonSegments/");
+  }
+}
+
+MuonSegmentValidationPlots::~MuonSegmentValidationPlots()
+{
+  delete m_oRecoSegmPlots;
+  if (m_oMatchedMuonSegmPlots) delete m_oMatchedMuonSegmPlots;
+  if (m_oMatchedMuonSegmDiffPlots) delete m_oMatchedMuonSegmDiffPlots;
+  if (m_oTruthMuonSegmPlots) delete m_oTruthMuonSegmPlots;  
+}
 
 void MuonSegmentValidationPlots::fill(const xAOD::MuonSegment* truthMuSeg, const xAOD::MuonSegment* muSeg)
 {
   if (truthMuSeg) 
-    m_oTruthMuonSegmPlots.fill( *truthMuSeg );
+    m_oTruthMuonSegmPlots->fill( *truthMuSeg );
   if (muSeg)
-    m_oRecoSegmPlots.fill(*muSeg);
+    m_oRecoSegmPlots->fill(*muSeg);
   
   if ( (truthMuSeg) && (muSeg) ) {    
-    m_oMatchedMuonSegmPlots.fill( *truthMuSeg );
-    m_oMatchedMuonSegmDiffPlots.fill( *truthMuSeg, *muSeg );
+    m_oMatchedMuonSegmPlots->fill( *truthMuSeg );
+    m_oMatchedMuonSegmDiffPlots->fill( *truthMuSeg, *muSeg );
   }
 }
 
 void MuonSegmentValidationPlots::fill(const xAOD::MuonSegment* muSeg)
 {
-  m_oRecoSegmPlots.fill(*muSeg);
+  m_oRecoSegmPlots->fill(*muSeg);
 }
diff --git a/MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/src/MuonSegmentValidationPlots.h b/MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/src/MuonSegmentValidationPlots.h
index 31c872fd69a3fb840c51a6f49da9e0bd1a55c087..b90f4f66b0feb02a29af1ddb41a338d00c037523 100644
--- a/MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/src/MuonSegmentValidationPlots.h
+++ b/MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/src/MuonSegmentValidationPlots.h
@@ -10,14 +10,15 @@
 
 class MuonSegmentValidationPlots: public PlotBase {
   public:
-    MuonSegmentValidationPlots(PlotBase* pParent, std::string sDir);
-
+    MuonSegmentValidationPlots(PlotBase* pParent, std::string sDir, bool isData);
+    ~MuonSegmentValidationPlots();
+    
     // Reco only information
-    Muon::MuonSegmentPlots                 m_oRecoSegmPlots;
+    Muon::MuonSegmentPlots                 *m_oRecoSegmPlots;
     // Truth related plots
-    Muon::MuonSegmentPlots                 m_oMatchedMuonSegmPlots;
-    Muon::MuonSegmentTruthRelatedPlots     m_oMatchedMuonSegmDiffPlots;
-    Muon::MuonSegmentPlots                 m_oTruthMuonSegmPlots;
+    Muon::MuonSegmentPlots                 *m_oMatchedMuonSegmPlots;
+    Muon::MuonSegmentTruthRelatedPlots     *m_oMatchedMuonSegmDiffPlots;
+    Muon::MuonSegmentPlots                 *m_oTruthMuonSegmPlots;
 
     void fill(const xAOD::MuonSegment* truthMuSeg, const xAOD::MuonSegment* muSeg);
     void fill(const xAOD::MuonSegment* muSeg);
diff --git a/MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/src/MuonTrackValidationPlots.cxx b/MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/src/MuonTrackValidationPlots.cxx
index ca1837c1a380e8d370ca98acae2f0d3d51e73c01..27cb958321e57dc52d21c29472feb0a6ca0dd9b2 100644
--- a/MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/src/MuonTrackValidationPlots.cxx
+++ b/MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/src/MuonTrackValidationPlots.cxx
@@ -4,20 +4,27 @@
 
 #include "MuonTrackValidationPlots.h"
 
-MuonTrackValidationPlots::MuonTrackValidationPlots(PlotBase* pParent, std::string sDir):PlotBase(pParent, sDir),
-m_oRecoMuonTrackPlots(this, "reco/MSTrackParticles/"),
-m_oMatchedMuonTrackPlots(this,"matched/MSTrackParticles/") {}
+MuonTrackValidationPlots::MuonTrackValidationPlots(PlotBase* pParent, std::string sDir, bool isData):PlotBase(pParent, sDir), m_oRecoMuonTrackPlots(NULL), m_oMatchedMuonTrackPlots(NULL)
+{
+  m_oRecoMuonTrackPlots = new RecoMuonTrackPlots(this, "reco/MSTrackParticles/");
+  if (!isData) m_oMatchedMuonTrackPlots = new TruthRelatedMuonTrackPlots(this,"matched/MSTrackParticles/");
+}
 
+MuonTrackValidationPlots::~MuonTrackValidationPlots()
+{
+  delete m_oRecoMuonTrackPlots;
+  if (m_oMatchedMuonTrackPlots) delete m_oMatchedMuonTrackPlots;
+}
 
 void MuonTrackValidationPlots::fill(const xAOD::TrackParticle& muTP) {
-  m_oRecoMuonTrackPlots.fill(muTP);
+  m_oRecoMuonTrackPlots->fill(muTP);
 }
 
 void MuonTrackValidationPlots::fill(const xAOD::TruthParticle* truthMu, const xAOD::TrackParticle* muTP){
   if (muTP) {
-    m_oRecoMuonTrackPlots.fill(*muTP);
+    m_oRecoMuonTrackPlots->fill(*muTP);
     if (truthMu) {
-      m_oMatchedMuonTrackPlots.fill(*truthMu,*muTP);
+      m_oMatchedMuonTrackPlots->fill(*truthMu,*muTP);
     }
   }
  
diff --git a/MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/src/MuonTrackValidationPlots.h b/MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/src/MuonTrackValidationPlots.h
index ffe0dac4cd1d4600e3250333e58995ffdd404c4c..aa4d9ceb3e435b778341e4fef43963e49fc4d815 100644
--- a/MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/src/MuonTrackValidationPlots.h
+++ b/MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/src/MuonTrackValidationPlots.h
@@ -13,12 +13,13 @@
 
 class MuonTrackValidationPlots:public PlotBase {
   public:
-    MuonTrackValidationPlots(PlotBase* pParent, std::string sDir);
+    MuonTrackValidationPlots(PlotBase* pParent, std::string sDir, bool isData=false);
+    ~MuonTrackValidationPlots();
 
     // Reco only information
-    RecoMuonTrackPlots          m_oRecoMuonTrackPlots;
+    RecoMuonTrackPlots          *m_oRecoMuonTrackPlots;
     // Truth related plots
-    TruthRelatedMuonTrackPlots  m_oMatchedMuonTrackPlots;
+    TruthRelatedMuonTrackPlots  *m_oMatchedMuonTrackPlots;
 
     void fill(const xAOD::TrackParticle& muTP);
     void fill(const xAOD::TruthParticle* truthMu, const xAOD::TrackParticle* muTP);
diff --git a/MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/src/MuonValidationPlots.cxx b/MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/src/MuonValidationPlots.cxx
index aeb7ec2966f21cddd1558031ce93647a1949d19d..d1f1e9f6415f50d7f0c00ba1b29d93e6c8ccfee0 100644
--- a/MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/src/MuonValidationPlots.cxx
+++ b/MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/src/MuonValidationPlots.cxx
@@ -3,104 +3,117 @@
 */
 
 #include "MuonValidationPlots.h"
+#include "MuonHistUtils/MuonEnumDefs.h"
 
 typedef ElementLink< xAOD::TrackParticleContainer > TrackLink;
 typedef ElementLink< xAOD::MuonContainer > MuonLink;
 
-MuonValidationPlots::MuonValidationPlots(PlotBase* pParent, std::string sDir,std::vector<unsigned int> authors, bool doBinnedResolutionPlots):
-  PlotBase(pParent, sDir),
-  m_authorNames(xAOD::Muon::NumberOfMuonAuthors+1,""),
-  m_truthSelections(2,"")
+MuonValidationPlots::MuonValidationPlots(PlotBase* pParent, std::string sDir,std::vector<unsigned int> authors, bool isData, bool doBinnedResolutionPlots, bool doTrigMuonL1Validation, bool doTrigMuonL2Validation, bool doTrigMuonEFValidation):
+  PlotBase(pParent, sDir),  m_selectedAuthors(authors), m_truthSelections(2,""), m_isData(isData), m_doTrigMuonL1Validation(doTrigMuonL1Validation), m_doTrigMuonL2Validation(doTrigMuonL2Validation), m_doTrigMuonEFValidation(doTrigMuonEFValidation)
+
 {
-  m_truthSelections[0] = "all"; //no selection on truth muons (minimum selection is |eta|<2.5, pt>5 GeV, defined in MuonPhysValMonitoringTool::handleTruthMuon() 
-  m_truthSelections[1] = "MSAcceptance"; //truth muons in MS acceptance (at least 4 associated hits in the MS)
+  if (!m_isData) {
+    m_truthSelections[0] = "all"; //no selection on truth muons (minimum selection is |eta|<2.5, pt>5 GeV, defined in MuonPhysValMonitoringTool::handleTruthMuon() 
+    m_truthSelections[1] = "MSAcceptance"; //truth muons in MS acceptance (at least 4 associated hits in the MS)
 
-  for(const auto truthSelection : m_truthSelections) {
-    m_oTruthMuonPlots.push_back(new TruthMuonPlots(this,"truth/"+truthSelection));
+    //histogram classes for all muons
+    for(const auto truthSelection : m_truthSelections) {
+      m_oTruthMuonPlots.push_back(new TruthMuonPlots(this,"truth/"+truthSelection));
+    }
+    m_oTruthRelatedMuonPlots = new TruthRelatedMuonPlots(this, "matched/AllMuons", doBinnedResolutionPlots);
+  }
+  //histogram classes for all muons
+  m_oRecoMuonPlots = new RecoMuonPlots(this, "reco/AllMuons");
+  
+  //define a histogram class for each of the selected muon qualities
+  for(unsigned int i=0; i<Muon::EnumDefs::nMuonQualities(); i++) {
+    std::string sQuality = Muon::EnumDefs::toString( (xAOD::Muon::Quality) i);
+    m_oRecoMuonPlots_perQuality.push_back(new RecoMuonPlots(this, "reco/"+sQuality));
+    if (!m_isData) m_oTruthRelatedMuonPlots_perQuality.push_back(new TruthRelatedMuonPlots(this, "matched/"+sQuality, false)); //disable binned resolution plots for qualities 
+    //m_oTruthRelatedMuonPlots_perQuality.push_back(new TruthRelatedMuonPlots(this, "matched/"+sQuality, doBinnedResolutionPlots));    
   }
-
-  //list of author names taken from: Event/xAOD/xAODMuon/xAODMuon/versions/Muon_v1.h
-  //19.0.3
-  m_authorNames[xAOD::Muon::unknown]="unknown";      // 0
-  m_authorNames[xAOD::Muon::MuidCo]="MuidCombined";
-  m_authorNames[xAOD::Muon::STACO]="STACO";
-  m_authorNames[xAOD::Muon::MuTag]="MuTag";
-  m_authorNames[xAOD::Muon::MuTagIMO]="MuTagIMO";
-  m_authorNames[xAOD::Muon::MuidSA]="MuidStandalone";
-  m_authorNames[xAOD::Muon::MuGirl]="MuGirl";
-  m_authorNames[xAOD::Muon::MuGirlLowBeta]="MuGirlLowBeta";  // 15
-  m_authorNames[xAOD::Muon::CaloTag]="CaloTag";
-  m_authorNames[xAOD::Muon::CaloLikelihood]="CaloLikelihood";
-  m_authorNames[xAOD::Muon::ExtrapolateMuonToIP]="ExtrapolateMuonToIP"; // 20
-   
-  m_authorNames[xAOD::Muon::NumberOfMuonAuthors]="AllAuthors"; //inclusive
-
-
-  //19.0.2
-  // m_authorNames[0]="undefined";      // 0
-  // m_authorNames[1]="unknown";
-  // m_authorNames[2]="unknown";
-  // m_authorNames[3]="unknown";
-  // m_authorNames[4]="MuonboySP";
-  // m_authorNames[5]="Muonboy";        // 5
-  // m_authorNames[6]="STACO";
-  // m_authorNames[7]="MuTag";
-  // m_authorNames[8]="unknown";
-  // m_authorNames[9]="unknown";
-  // m_authorNames[10]="Moore";          // 10
-  // m_authorNames[11]="MuidStandalone";
-  // m_authorNames[12]="MuidCombined";
-  // m_authorNames[13]="MuGirl";
-  // m_authorNames[14]="CaloMuonID";
-  // m_authorNames[15]="MuGirlLowBeta";  // 15
-  // m_authorNames[16]="CaloTag";
-  // m_authorNames[17]="CaloLikelihood";
-  // m_authorNames[18]="MuTagIMO";
-  // m_authorNames[19]="MuonCombinedRefit";
-  // m_authorNames[20]="ExtrapolateMuonToIP"; // 20
-
-  // m_authorNames[21]="AllAuthors"; //inclusive
 
   //define a histogram class for each of the selected muon authors (+one inclusive for all authors
-  m_selectedAuthors = authors;
-  m_selectedAuthors.push_back(xAOD::Muon::NumberOfMuonAuthors);
-  for(const auto author : m_selectedAuthors) {   
-    m_oRecoMuonPlots.push_back(new RecoMuonPlots(this, "reco/"+m_authorNames[author]));
-    m_oTruthRelatedMuonPlots.push_back(new TruthRelatedMuonPlots(this, "matched/"+m_authorNames[author], doBinnedResolutionPlots));
+  for (unsigned int i=0; i<m_selectedAuthors.size(); i++) {
+    std::string sAuthor = Muon::EnumDefs::toString( (xAOD::Muon::Author) m_selectedAuthors[i] );
+    m_oRecoMuonPlots_perAuthor.push_back(new RecoMuonPlots(this, "reco/"+sAuthor));
+    if (!m_isData) m_oTruthRelatedMuonPlots_perAuthor.push_back(new TruthRelatedMuonPlots(this, "matched/"+sAuthor, doBinnedResolutionPlots));
+    if (m_doTrigMuonEFValidation) m_oEFTriggerMuonPlots.push_back(new EFTriggerMuonPlots(this,"trigger/EF/"+sAuthor));
   }
-
+  if (m_doTrigMuonL1Validation) m_oL1TriggerMuonPlots = new L1TriggerMuonPlots(this,"trigger/L1");
 }
 
 MuonValidationPlots::~MuonValidationPlots()
 {
-  for (unsigned int i=0; i<m_oRecoMuonPlots.size(); i++) {    
-    RecoMuonPlots *recoMuonPlots = m_oRecoMuonPlots[i];
-    TruthRelatedMuonPlots *truthRelatedMuonPlots = m_oTruthRelatedMuonPlots[i];
-    
-    delete recoMuonPlots;
-    delete truthRelatedMuonPlots;
+  delete m_oRecoMuonPlots;
+  m_oRecoMuonPlots=0;
+
+  if (!m_isData) {
+    delete m_oTruthRelatedMuonPlots;
+    m_oTruthRelatedMuonPlots=0;    
 
+    for (unsigned int i=0; i<m_oTruthMuonPlots.size(); i++) {    
+      TruthMuonPlots *truthMuonPlots = m_oTruthMuonPlots[i];
+      delete truthMuonPlots;
+      truthMuonPlots = 0;
+    }
+    for (unsigned int i=0; i<m_oTruthRelatedMuonPlots_perQuality.size(); i++) {    
+      TruthRelatedMuonPlots *truthRelatedMuonPlots = m_oTruthRelatedMuonPlots_perQuality[i];
+      delete truthRelatedMuonPlots;
+      truthRelatedMuonPlots = 0;
+    }
+    for (unsigned int i=0; i<m_oTruthRelatedMuonPlots_perAuthor.size(); i++) {    
+      TruthRelatedMuonPlots *truthRelatedMuonPlots = m_oTruthRelatedMuonPlots_perAuthor[i];
+      delete truthRelatedMuonPlots;
+      truthRelatedMuonPlots = 0;
+    }
+  }
+  
+  if (m_doTrigMuonL1Validation) {
+    delete m_oL1TriggerMuonPlots;
+    m_oL1TriggerMuonPlots=0;
+  }
+  
+  for (unsigned int i=0; i<m_oRecoMuonPlots_perQuality.size(); i++) {    
+    RecoMuonPlots *recoMuonPlots = m_oRecoMuonPlots_perQuality[i];    
+    delete recoMuonPlots;
     recoMuonPlots = 0;
-    truthRelatedMuonPlots = 0;
   }
+  for (unsigned int i=0; i<m_oRecoMuonPlots_perAuthor.size(); i++) {    
+    RecoMuonPlots *recoMuonPlots = m_oRecoMuonPlots_perAuthor[i];
+    delete recoMuonPlots;
+    recoMuonPlots = 0;
 
-  for (unsigned int i=0; i<m_oTruthMuonPlots.size(); i++) {    
-    TruthMuonPlots *truthMuonPlots = m_oTruthMuonPlots[i];
-    delete truthMuonPlots;
-    truthMuonPlots = 0;
-  }
+    if (m_doTrigMuonEFValidation) {
+      EFTriggerMuonPlots *trigMuonPlots = m_oEFTriggerMuonPlots[i];
+      delete trigMuonPlots;
+      trigMuonPlots=0;
+    }
+  }        
 }
 
-void MuonValidationPlots::fillRecoMuonPlots(const xAOD::Muon& mu) {
+void MuonValidationPlots::fillRecoMuonPlots(const xAOD::Muon& mu)
+{
+  //fill hists for all muons
+  m_oRecoMuonPlots->fill(mu);
+	
+  //fill separate hists for each muon quality
+  xAOD::Muon::Quality muqual = mu.quality();
+  for (unsigned int i=0; i<Muon::EnumDefs::nMuonQualities(); i++) {    
+    if ( muqual <= (xAOD::Muon::Quality)i ) {
+      m_oRecoMuonPlots_perQuality[i]->fill(mu);
+    }
+  }
   //fill separate hists for each author
   for (unsigned int i=0; i<m_selectedAuthors.size(); i++) {
-    if (mu.isAuthor( (xAOD::Muon::Author)m_selectedAuthors[i] ) || m_selectedAuthors[i]==xAOD::Muon::NumberOfMuonAuthors) {
-      m_oRecoMuonPlots[i]->fill(mu);
+    if (mu.isAuthor( (xAOD::Muon::Author)m_selectedAuthors[i] )) {
+      m_oRecoMuonPlots_perAuthor[i]->fill(mu);
     }
   }
 }
-void MuonValidationPlots::fillTruthMuonPlots(const xAOD::TruthParticle &truthMu) {
 
+void MuonValidationPlots::fillTruthMuonPlots(const xAOD::TruthParticle &truthMu)
+{
   m_oTruthMuonPlots[0]->fill(truthMu); //no selections
  
   if (isGoodTruthTrack(truthMu)) { //in MS acceptance (minimum precision hits)
@@ -109,6 +122,28 @@ void MuonValidationPlots::fillTruthMuonPlots(const xAOD::TruthParticle &truthMu)
 
 }
 
+void MuonValidationPlots::fillTriggerMuonPlots(const xAOD::MuonRoI &TrigL1mu) {
+  m_oL1TriggerMuonPlots->fill(TrigL1mu);  
+}
+
+void MuonValidationPlots::fillTriggerMuonPlots(const xAOD::Muon &mu,const xAOD::Muon &Trigmu) {
+  for (unsigned int i=0; i<m_selectedAuthors.size(); i++) {
+    if (mu.isAuthor( (xAOD::Muon::Author)m_selectedAuthors[i] )) {
+      //if (Trigmu.isAuthor( (xAOD::Muon::Author)m_selectedAuthors[i] ) || m_selectedAuthors[i]==xAOD::Muon::NumberOfMuonAuthors) {
+      m_oEFTriggerMuonPlots[i]->fill(Trigmu,Trigmu);
+    }
+  }
+}
+
+void MuonValidationPlots::fill(const xAOD::Muon& /* mu */,const xAOD::Muon& Trigmu) {
+  fillTriggerMuonPlots(Trigmu,Trigmu);
+}
+
+void MuonValidationPlots::fill(const xAOD::MuonRoI& TrigL1mu) {
+  fillTriggerMuonPlots(TrigL1mu);
+}
+
+
 void MuonValidationPlots::fill(const xAOD::Muon& mu) {
   fillRecoMuonPlots(mu);
 }
@@ -117,17 +152,28 @@ void MuonValidationPlots::fill(const xAOD::TruthParticle &truthMu){
   fillTruthMuonPlots(truthMu);
 }
 
-void MuonValidationPlots::fill(const xAOD::TruthParticle* truthMu, const xAOD::Muon* mu){
-
+void MuonValidationPlots::fill(const xAOD::TruthParticle* truthMu, const xAOD::Muon* mu, const xAOD::TrackParticleContainer* MSTracks)
+{
   if (truthMu) fillTruthMuonPlots(*truthMu);
   if (mu) fillRecoMuonPlots(*mu);
 
   if ( (mu) && (truthMu) ) {
-    for (unsigned int i=0; i<m_selectedAuthors.size(); i++) {
-      if (mu->isAuthor( (xAOD::Muon::Author)m_selectedAuthors[i] ) || m_selectedAuthors[i]==xAOD::Muon::NumberOfMuonAuthors) {
-	m_oTruthRelatedMuonPlots[i]->fill(*truthMu, *mu);
+    //plots for all
+    m_oTruthRelatedMuonPlots->fill(*truthMu, *mu, MSTracks);
+    
+    //plots per quality
+    xAOD::Muon::Quality muqual = mu->quality();
+    for (unsigned int i=0; i<Muon::EnumDefs::nMuonQualities(); i++) {    
+      if ( muqual <= (xAOD::Muon::Quality)i ) {
+	m_oTruthRelatedMuonPlots_perQuality[i]->fill(*truthMu, *mu, MSTracks);
       }
     }
+    //plots per author
+    for (unsigned int i=0; i<m_selectedAuthors.size(); i++) {
+      if (mu->isAuthor( (xAOD::Muon::Author)m_selectedAuthors[i] )) {
+	m_oTruthRelatedMuonPlots_perAuthor[i]->fill(*truthMu, *mu, MSTracks);
+      }
+    }    
   }
 
 }
diff --git a/MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/src/MuonValidationPlots.h b/MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/src/MuonValidationPlots.h
index 57843023dd449fa60ef531590d145c331176a4d2..dd66b34cbcc37743af66f62feb9622a9f291fa50 100644
--- a/MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/src/MuonValidationPlots.h
+++ b/MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/src/MuonValidationPlots.h
@@ -9,30 +9,52 @@
 #include "TruthMuonPlots.h"
 #include "TruthRelatedMuonPlots.h"
 
+#include "MuonHistUtils/L1TriggerMuonPlots.h"
+#include "MuonHistUtils/EFTriggerMuonPlots.h"
+
 #include "xAODMuon/Muon.h"
 #include "xAODMuon/MuonContainer.h"
 #include "xAODTruth/TruthParticle.h"
+#include "xAODTrigger/MuonRoI.h"
 
 class MuonValidationPlots:public PlotBase {
   public:
-    MuonValidationPlots(PlotBase* pParent, std::string sDir, std::vector<unsigned int> authors,bool doBinnedResolutionPlots);
+  MuonValidationPlots(PlotBase* pParent, std::string sDir, std::vector<unsigned int> authors, bool isData, bool doBinnedResolutionPlots, bool doTrigMuonL1Validation, bool doTrigMuonL2Validation, bool doTrigMuonEFValidation );
+
     virtual ~MuonValidationPlots();
     void fill(const xAOD::Muon& mu);
-    void fill(const xAOD::TruthParticle& truthMu);
-    void fill(const xAOD::TruthParticle* truthMu, const xAOD::Muon* mu);
+    void fill(const xAOD::MuonRoI &TrigL1mu);
+    void fill(const xAOD::Muon& mu, const xAOD::Muon& Trigmu);
     bool isGoodTruthTrack(const xAOD::TruthParticle& truthMu);
 
+    void fill(const xAOD::TruthParticle& truthMu);
+    void fill(const xAOD::TruthParticle* truthMu, const xAOD::Muon* mu, const xAOD::TrackParticleContainer* MSTracks);
+
     std::vector<unsigned int> m_selectedAuthors;
-    std::vector<std::string> m_authorNames;
     std::vector<std::string> m_truthSelections;    
-
-    std::vector<RecoMuonPlots*> m_oRecoMuonPlots;
-    std::vector<TruthMuonPlots*> m_oTruthMuonPlots;
-    std::vector<TruthRelatedMuonPlots*> m_oTruthRelatedMuonPlots;
+    std::vector<std::string> m_TriggerLevels;
+ 
+    RecoMuonPlots *m_oRecoMuonPlots;
+    TruthRelatedMuonPlots *m_oTruthRelatedMuonPlots;
+    L1TriggerMuonPlots* m_oL1TriggerMuonPlots;    
+    std::vector<EFTriggerMuonPlots*> m_oEFTriggerMuonPlots;
+    std::vector<RecoMuonPlots*> m_oRecoMuonPlots_perQuality;
+    std::vector<RecoMuonPlots*> m_oRecoMuonPlots_perAuthor;
+    std::vector<TruthRelatedMuonPlots*> m_oTruthRelatedMuonPlots_perQuality;
+    std::vector<TruthRelatedMuonPlots*> m_oTruthRelatedMuonPlots_perAuthor;
+    std::vector<TruthMuonPlots*> m_oTruthMuonPlots;    
 
  private:
     void fillRecoMuonPlots(const xAOD::Muon& mu);
     void fillTruthMuonPlots(const xAOD::TruthParticle &truthMu);
+    void fillTriggerMuonPlots(const xAOD::Muon& mu,const xAOD::Muon& Trigmu);
+    void fillTriggerMuonPlots(const xAOD::MuonRoI& TrigL1mu);
+
+    bool m_isData;
+    bool m_doTrigMuonL1Validation;
+    bool m_doTrigMuonL2Validation;
+    bool m_doTrigMuonEFValidation;
+
 };
 
 #endif
diff --git a/MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/src/RecoMuonPlots.cxx b/MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/src/RecoMuonPlots.cxx
index 132fae07448bd98a6f827ac58ef7921735884a35..8c077d52155ba0f53b69fb2126ad8ca9d2088917 100644
--- a/MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/src/RecoMuonPlots.cxx
+++ b/MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/src/RecoMuonPlots.cxx
@@ -10,6 +10,7 @@ typedef ElementLink< xAOD::MuonContainer > MuonLink;
 RecoMuonPlots::RecoMuonPlots(PlotBase* pParent, std::string sDir):PlotBase(pParent, sDir),
 
 m_oAllPlots(this, "/", "Reco Muon"),
+m_oMuonParamPlots(this,"/"),
 m_oMuRecoInfoPlots(this, "/"),
 m_oImpactPlots(this, "/"),
 m_oMomentumPullPlots(this, "/"),
@@ -22,6 +23,7 @@ m_oMuonIsolationPlots(this,"/")
 void RecoMuonPlots::fill(const xAOD::Muon& mu) {
   //General Plots
   m_oAllPlots.fill(mu);
+  m_oMuonParamPlots.fill(mu);
   m_oMuRecoInfoPlots.fill(mu);
   m_oMomentumPullPlots.fill(mu);
   m_oMuonHitSummaryPlots.fill(mu);
diff --git a/MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/src/RecoMuonPlots.h b/MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/src/RecoMuonPlots.h
index 3052cd9f1da718005dd8ee2bd6d04d34c1b80775..a282f588ddbd997c97506a23fa69965f23d5e3d4 100644
--- a/MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/src/RecoMuonPlots.h
+++ b/MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/src/RecoMuonPlots.h
@@ -10,6 +10,7 @@
 #include "TrkValHistUtils/MSHitPlots.h"
 #include "TrkValHistUtils/ImpactPlots.h"
 #include "MuonHistUtils/RecoInfoPlots.h"
+#include "MuonHistUtils/MuonParamPlots.h"
 #include "MuonHistUtils/MomentumPullPlots.h"
 #include "MuonHistUtils/MuonIsolationPlots.h"
 #include "MuonHistUtils/MuonHitSummaryPlots.h"
@@ -24,6 +25,7 @@ class RecoMuonPlots:public PlotBase {
       
       // Reco only information
       Trk::ParamPlots                 m_oAllPlots;
+      Muon::MuonParamPlots            m_oMuonParamPlots;
       Muon::RecoInfoPlots             m_oMuRecoInfoPlots;
       Trk::ImpactPlots                m_oImpactPlots;
       Muon::MomentumPullPlots         m_oMomentumPullPlots;
diff --git a/MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/src/TruthRelatedMuonPlots.cxx b/MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/src/TruthRelatedMuonPlots.cxx
index 2bed0f6bcf9a1e11a2776e190186514b64bd574e..4087ce6fc60a41a5df6986f8d71a8c816c86d8c3 100644
--- a/MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/src/TruthRelatedMuonPlots.cxx
+++ b/MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/src/TruthRelatedMuonPlots.cxx
@@ -3,6 +3,10 @@
 */
 
 #include "TruthRelatedMuonPlots.h"
+#include "xAODTruth/TruthParticleContainer.h"
+#include "xAODTruth/TruthParticleAuxContainer.h"
+#include "xAODTracking/TrackParticleContainer.h"
+#include "xAODTracking/TrackParticleAuxContainer.h"
 
 TruthRelatedMuonPlots::TruthRelatedMuonPlots(PlotBase* pParent, std::string sDir,bool doBinnedResolutionPlots):
     PlotBase(pParent, sDir),
@@ -16,11 +20,14 @@ TruthRelatedMuonPlots::TruthRelatedMuonPlots(PlotBase* pParent, std::string sDir
     m_oMuonIDResolutionPlots(this, "/resolutionID/",doBinnedResolutionPlots),
     m_oDefParamPullPlots(this, "/Pulls/"),
     m_oMSDefParamPullPlots(this, "/PullsMS/"),
-    m_oIDDefParamPullPlots(this, "/PullsID/"){}
+    m_oIDDefParamPullPlots(this, "/PullsID/"),
+
+    m_oMomentumDiffPlots(this,"/resolution/")
+{}
 
 TruthRelatedMuonPlots::~TruthRelatedMuonPlots() {}
 
-void TruthRelatedMuonPlots::fill(const xAOD::TruthParticle& truthMu, const xAOD::Muon& mu){
+void TruthRelatedMuonPlots::fill(const xAOD::TruthParticle& truthMu, const xAOD::Muon& mu, const xAOD::TrackParticleContainer* MSTracks){
     m_oMatchedPlots.fill( truthMu );
     m_oMuonHitDiffSummaryPlots.fill(mu, truthMu);
 
@@ -42,4 +49,34 @@ void TruthRelatedMuonPlots::fill(const xAOD::TruthParticle& truthMu, const xAOD:
         m_oMuonMSResolutionPlots.fill(*msTrk,truthMu);
         m_oMSDefParamPullPlots.fill(*msTrk, truthMu);
     }
-}
\ No newline at end of file
+
+
+    const xAOD::TrackParticle *msTrkIP(0);    
+    //if (mu) {
+    typedef ElementLink< xAOD::TruthParticleContainer > TruthLink;
+
+    ElementLink<xAOD::TrackParticleContainer> muTrk = mu.muonSpectrometerTrackParticleLink();
+    if (muTrk.isValid()) {
+      TruthLink truthLink_muTrk;
+      if( (*muTrk)->isAvailable<TruthLink>("truthParticleLink") ) {
+	truthLink_muTrk = (*muTrk)->auxdata<TruthLink>("truthParticleLink");
+      }
+      if (truthLink_muTrk.isValid()) {
+	for (const auto trk: *MSTracks) {
+	  TruthLink truthLink_msTrk;
+	  if( trk->isAvailable<TruthLink>("truthParticleLink") ) {
+	    truthLink_msTrk = trk->auxdata<TruthLink>("truthParticleLink");
+	    if (truthLink_msTrk.isValid()) {
+	      if (truthLink_msTrk == truthLink_muTrk) {
+		msTrkIP = trk;
+		break;
+	      }
+	    }
+	  }
+	}
+      }
+    }
+    // }  
+    m_oMomentumDiffPlots.fill(mu, msTrkIP, truthMu);
+    
+}
diff --git a/MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/src/TruthRelatedMuonPlots.h b/MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/src/TruthRelatedMuonPlots.h
index 6ddb97404c3245137aa364cff1613ab8cbae1648..71611f0664b849619e67c23d599f39c6030e93a1 100644
--- a/MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/src/TruthRelatedMuonPlots.h
+++ b/MuonSpectrometer/MuonValidation/MuonDQA/MuonPhysValMonitoring/src/TruthRelatedMuonPlots.h
@@ -19,8 +19,8 @@ class TruthRelatedMuonPlots:public PlotBase {
  public:
   TruthRelatedMuonPlots(PlotBase* pParent, std::string sDir,bool doBinnedResolutionPlots);
   ~TruthRelatedMuonPlots();
-  void fill(const xAOD::TruthParticle& truthMu, const xAOD::Muon& mu);
-
+  void fill(const xAOD::TruthParticle& truthMu, const xAOD::Muon& mu, const xAOD::TrackParticleContainer* MSTrack);
+    
   // Truth related plots
   Trk::ParamPlots                 m_oMatchedPlots;
   Trk::MSHitDiffPlots             m_oMSHitDiffPlots;
@@ -31,6 +31,8 @@ class TruthRelatedMuonPlots:public PlotBase {
   Trk::DefParamPullPlots          m_oDefParamPullPlots;
   Trk::DefParamPullPlots          m_oMSDefParamPullPlots;
   Trk::DefParamPullPlots          m_oIDDefParamPullPlots;
+
+  Muon::MomentumDiffPlots         m_oMomentumDiffPlots;
 };
 
 #endif