diff --git a/Trigger/TrigHypothesis/TrigBjetHypo/python/TrigBjetOnlineMonitoringMTConfig.py b/Trigger/TrigHypothesis/TrigBjetHypo/python/TrigBjetOnlineMonitoringMTConfig.py index 2c575e3ad3702e883c92d7abd80108a6e558e1ed..c73aa47f7dacc95ec31af0164e18da1a2928a28b 100755 --- a/Trigger/TrigHypothesis/TrigBjetHypo/python/TrigBjetOnlineMonitoringMTConfig.py +++ b/Trigger/TrigHypothesis/TrigBjetHypo/python/TrigBjetOnlineMonitoringMTConfig.py @@ -3,9 +3,10 @@ from AthenaMonitoringKernel.GenericMonitoringTool import GenericMonitoringTool class TrigBjetOnlineMonitoring(GenericMonitoringTool): def make_flavor_hists(self, tagger): - for probability in ['pb','pc','pu']: - self.defineHistogram('btag_'+tagger+'_'+probability, title=tagger+' '+probability.capitalize(), type='TH1F', path='EXPERT', xbins=100, xmin=0, xmax=1) - self.defineHistogram('btag_'+tagger+'_llr', title=tagger+' LLR', type='TH1F', path='EXPERT', xbins=100, xmin=-10, xmax=50) + self.defineHistogram('btag_'+tagger+'_pb', title=tagger+': Probability jets are b-jets', type='TH1F', path='EXPERT', xbins=100, xmin=0, xmax=1) + self.defineHistogram('btag_'+tagger+'_pc', title=tagger+': Probability jets are char-jets', type='TH1F', path='EXPERT', xbins=100, xmin=0, xmax=1) + self.defineHistogram('btag_'+tagger+'_pu', title=tagger+': Probability jets are light-jets', type='TH1F', path='EXPERT', xbins=100, xmin=0, xmax=1) + self.defineHistogram('btag_'+tagger+'_llr', title=tagger+': Log(P_{b}/P_{light}), Likelihood ratio between the b-jet and light-flavour jet hypotheses', type='TH1F', path='EXPERT', xbins=100, xmin=-10, xmax=50) def __init__ (self, name="TrigBjetOnlineMonitoring"): @@ -13,98 +14,187 @@ class TrigBjetOnlineMonitoring(GenericMonitoringTool): self.name = "TrigBjetOnlineMonitoring" self.HistPath = self.name default_bin_count = 100 - TH1F_opts = { 'type':'TH1F', 'path':'EXPERT' } # Event Histograms - self.defineHistogram('track_count', title="Number of Tracks", xbins = 100, xmin=0, xmax=100, **TH1F_opts) - self.defineHistogram('jet_count', title="Number of Jets", xbins = 20, xmin=0, xmax=20, **TH1F_opts) - self.defineHistogram('vertex_count', title="Number of Vertices", xbins = 200, xmin=0, xmax=200, **TH1F_opts) + self.defineHistogram('track_count', title="Number of Tracks per Trigger Decision", xbins = 100, xmin=0, xmax=100, path='EXPERT', type='TH1I') + self.defineHistogram('jet_count', title="Number of Jets Considered for B-Tagging", xbins = 20, xmin=0, xmax=20, path='EXPERT', type='TH1I') + self.defineHistogram('vertex_count', title="Number of Primary Vertex Candidates per Event", xbins = 200, xmin=0, xmax=200, path='EXPERT', type='TH1I') # Primary Vertex Histogram - self.defineHistogram('primVtx_x', title="Primary Vertex X", xbins = default_bin_count, xmin=-2, xmax=2, **TH1F_opts) - self.defineHistogram('primVtx_y', title="Primary Vertex Y", xbins = default_bin_count, xmin=-2, xmax=2, **TH1F_opts) - self.defineHistogram('primVtx_z', title="Primary Vertex Z", xbins = default_bin_count, xmin=-300, xmax=300, **TH1F_opts) + self.defineHistogram('primVtx_x', title="Primary Vertex X", xbins = default_bin_count, xmin=-2, xmax=2, path='EXPERT', type='TH1F') + self.defineHistogram('primVtx_y', title="Primary Vertex Y", xbins = default_bin_count, xmin=-2, xmax=2, path='EXPERT', type='TH1F') + self.defineHistogram('primVtx_z', title="Primary Vertex Z", xbins = default_bin_count, xmin=-300, xmax=300, path='EXPERT', type='TH1F') ## Track Histograms - self.defineHistogram('track_Et', title="Track Transverse Energy;E_{T} (GeV)", xbins = default_bin_count, xmin=0, xmax=200, **TH1F_opts) - self.defineHistogram('track_eta', title="Track #eta;#eta", xbins = default_bin_count, xmin=-5, xmax=5, **TH1F_opts) - self.defineHistogram('track_phi', title="Track #phi;#phi", xbins = default_bin_count, xmin=-3.5, xmax=3.5, **TH1F_opts) + self.defineHistogram('track_Et', title="Track Transverse Energy;E_{T} (GeV)", xbins = default_bin_count, xmin=0, xmax=200, path='EXPERT', type='TH1F') + self.defineHistogram('track_eta', title="Track #eta;#eta", xbins = default_bin_count, xmin=-5, xmax=5, path='EXPERT', type='TH1F') + self.defineHistogram('track_phi', title="Track #phi;#phi", xbins = default_bin_count, xmin=-3.5, xmax=3.5, path='EXPERT', type='TH1F') self.defineHistogram('track_eta,track_phi', path='EXPERT', type='TH2F', title="Track #eta vs #phi;#eta;#phi", xbins = default_bin_count, xmin=-5, xmax=5, ybins = default_bin_count, ymin=-4, ymax=4) - self.defineHistogram('track_d0', title="Track d_{0};d_{0} (mm)", xbins = default_bin_count, xmin=-5, xmax=5, **TH1F_opts) - self.defineHistogram('track_d0err', title="Track d_{0} Error;d_{0} Error (mm)", xbins = default_bin_count, xmin=0, xmax=10, **TH1F_opts) - self.defineHistogram('track_d0sig', title="Track d_{0} Significance;d_{0} #sigma", xbins = default_bin_count, xmin=-100, xmax=100, **TH1F_opts) - self.defineHistogram('track_z0', title="Track z_{0};z_{0} (mm)", xbins = default_bin_count, xmin=-200, xmax=200, **TH1F_opts) - self.defineHistogram('track_z0err', title="Track z_{0} Error;z_{0} Error (mm)", xbins = default_bin_count, xmin=0, xmax=10, **TH1F_opts) - self.defineHistogram('track_z0sig', title="Track z_{0} Significance;z_{0} #sigma", xbins = default_bin_count, xmin=-1000, xmax=1000, **TH1F_opts) + self.defineHistogram('track_d0', title="Track d_{0};d_{0} (mm)", xbins = default_bin_count, xmin=-5, xmax=5, path='EXPERT', type='TH1F') + self.defineHistogram('track_d0err', title="Track d_{0} Error;d_{0} Error (mm)", xbins = default_bin_count, xmin=0, xmax=10, path='EXPERT', type='TH1F') + self.defineHistogram('track_d0sig', title="Track d_{0} Significance;d_{0} #sigma", xbins = default_bin_count, xmin=-100, xmax=100, path='EXPERT', type='TH1F') + self.defineHistogram('track_z0', title="Track z_{0};z_{0} (mm)", xbins = default_bin_count, xmin=-200, xmax=200, path='EXPERT', type='TH1F') + self.defineHistogram('track_z0err', title="Track z_{0} Error;z_{0} Error (mm)", xbins = default_bin_count, xmin=0, xmax=10, path='EXPERT', type='TH1F') + self.defineHistogram('track_z0sig', title="Track z_{0} Significance;z_{0} #sigma", xbins = default_bin_count, xmin=-1000, xmax=1000, path='EXPERT', type='TH1F') # Jet Histograms - self.defineHistogram('jet_pt', title="Jet Transverse Momentum;p_{T} (GeV)", xbins = default_bin_count, xmin=0, xmax=1000, **TH1F_opts) - self.defineHistogram('jet_eta', title="Jet #eta;#eta", xbins = default_bin_count, xmin=-5, xmax=5, **TH1F_opts) - self.defineHistogram('jet_phi', title="Jet #phi;#phi", xbins = default_bin_count, xmin=-3.5, xmax=3.5, **TH1F_opts) + self.defineHistogram('jet_pt', title="Jet Transverse Momentum;p_{T} (GeV)", xbins = default_bin_count, xmin=0, xmax=1000, path='EXPERT', type='TH1F') + self.defineHistogram('jet_eta', title="Jet #eta;#eta", xbins = default_bin_count, xmin=-5, xmax=5, path='EXPERT', type='TH1F') + self.defineHistogram('jet_phi', title="Jet #phi;#phi", xbins = default_bin_count, xmin=-3.5, xmax=3.5, path='EXPERT', type='TH1F') self.defineHistogram('jet_eta,jet_phi', path='EXPERT', type='TH2F', title="Jet #eta vs #phi;#eta;#phi", xbins = default_bin_count, xmin=-5, xmax=5, ybins = default_bin_count, ymin=-4, ymax=4) + self.defineHistogram('Bjet_pt', title="B-Tagged Jet Transverse Momentum;p_{T} (GeV)", xbins = default_bin_count, xmin=0, xmax=1000, path='EXPERT', type='TH1F') + self.defineHistogram('Bjet_eta', title="B-Tagged Jet #eta;#eta", xbins = default_bin_count, xmin=-5, xmax=5, path='EXPERT', type='TH1F') + self.defineHistogram('Bjet_phi', title="B-Tagged Jet #phi;#phi", xbins = default_bin_count, xmin=-3.5, xmax=3.5, path='EXPERT', type='TH1F') + self.defineHistogram('Bjet_eta,Bjet_phi', path='EXPERT', type='TH2F', title="B-Tagged Jet #eta vs #phi;#eta;#phi", + xbins = default_bin_count, xmin=-5, xmax=5, ybins = default_bin_count, ymin=-4, ymax=4) + + self.defineHistogram('jet_bjet_delta_pt', title="Transverse Momentum Difference Between Jet and B-Tagged Jet;#Delta p_{T} (GeV)", xbins = default_bin_count, xmin=0, xmax=1000, path='EXPERT', type='TH1F') + self.defineHistogram('jet_bjet_delta_eta', title="#eta Difference Between Jet and B-Tagged Jet;#Delta #eta", xbins = default_bin_count, xmin=-5, xmax=5, path='EXPERT', type='TH1F') + self.defineHistogram('jet_bjet_delta_phi', title="#phi Difference Between Jet and B-Tagged Jet;#phi", xbins = default_bin_count, xmin=-3.5, xmax=3.5, path='EXPERT', type='TH1F') + self.defineHistogram('jet_bjet_delta_eta,jet_phi', path='EXPERT', type='TH2F', title="#Delta #eta vs #Delta #phi for Jet and B-Tagged Jet;#Delta #eta;#Delta #phi", + xbins = default_bin_count, xmin=-5, xmax=5, ybins = default_bin_count, ymin=-4, ymax=4) + # B-Tagging Histograms for tagger in ['IP2D', 'IP3D', 'DL1r', 'rnnip']: self.make_flavor_hists(tagger) - self.defineHistogram('btag_MV2c10', title="MV2c10", xbins = default_bin_count, xmin=-1, xmax=1, **TH1F_opts) - - - aux_variables_list = [ # title, xmin, xmax, xbins, plottype - ('JetFitter_N2Tpair', 0, 100, 100, 'TH1I'), - ('JetFitter_nVTX', 0, 50, 50, 'TH1I'), - ('JetFitter_nSingleTracks', 0, 50, 50, 'TH1I'), - ('JetFitter_nTracksAtVtx', 0, 50, 50, 'TH1I'), - ('JetFitter_mass', 0, 20000, 1000, 'TH1F'), - ('JetFitter_energyFraction', 0, 1.1, 100, 'TH1F'), - ('JetFitter_significance3d', 0, 100, 100, 'TH1F'), - ('JetFitter_deltaeta', 0, 2, 100, 'TH1F'), - ('JetFitter_deltaphi', 0, 2, 100, 'TH1F'), - ('JetFitter_isDefaults', 0, 2, 2, 'TH1I'), - ('JetFitter_deltaR', 0, 2, 100, 'TH1F'), - - ('SV1_NGTinSvx', 0, 100, 100, 'TH1I'), - ('SV1_masssvx', 0, 10000, 1000, 'TH1F'), - ('SV1_isDefaults', 0, 2, 2, 'TH1I'), - ('SV1_N2Tpair', 0, 50, 50, 'TH1I'), - ('SV1_efracsvx', 0, 1.1, 100, 'TH1F'), - ('SV1_deltaR', 0, 2, 100, 'TH1F'), - ('SV1_Lxy', 0, 100, 100, 'TH1F'), - ('SV1_L3d', 0, 100, 100, 'TH1F'), - ('SV1_significance3d', 0, 50, 100, 'TH1F'), - - ('IP2D_isDefaults', 0, 2, 2, 'TH1I'), - ('IP2D_bu', 0, 50, 100, 'TH1F'), - ('IP2D_bc', 0, 50, 100, 'TH1F'), - ('IP2D_cu', 0, 50, 100, 'TH1F'), - ('IP3D_isDefaults', 0, 2, 2, 'TH1I'), - ('IP3D_bu', 0, 50, 100, 'TH1F'), - ('IP3D_bc', 0, 50, 100, 'TH1F'), - ('IP3D_cu', 0, 50, 100, 'TH1F'), - - ('JetFitterSecondaryVertex_nTracks', 0, 50, 50, 'TH1I'), - ('JetFitterSecondaryVertex_isDefaults', 0, 2, 2, 'TH1I'), - ('JetFitterSecondaryVertex_mass', 0, 1e4, 100, 'TH1F'), - ('JetFitterSecondaryVertex_energy', 0, 1e6, 100, 'TH1F'), - ('JetFitterSecondaryVertex_energyFraction', 0, 1.1, 100, 'TH1F'), - ('JetFitterSecondaryVertex_displacement3d', 0, 500, 100, 'TH1F'), - ('JetFitterSecondaryVertex_displacement2d', 0, 500, 100, 'TH1F'), - ('JetFitterSecondaryVertex_maximumTrackRelativeEta', 0, 8, 100, 'TH1F'), - ('JetFitterSecondaryVertex_minimumTrackRelativeEta', 0, 8, 100, 'TH1F'), - ('JetFitterSecondaryVertex_averageTrackRelativeEta', 0, 8, 100, 'TH1F'), - - ('maximumTrackRelativeEta', 0, 8, 100, 'TH1F'), - ('minimumTrackRelativeEta', 0, 8, 100, 'TH1F'), - ('averageTrackRelativeEta', 0, 8, 100, 'TH1F') - ] - - for title, xmin, xmax, xbins, plottype in aux_variables_list: - self.defineHistogram(title, title=title, xmin=xmin, xmax=xmax, xbins=xbins, type=plottype, path='EXPERT') - - self.defineHistogram('IP3D_valD0wrtPVofTracks', title="Track d_{0} w/ Respect to PV of Tracks of IP3D;d_{0} (mm)", xmin=-2, xmax=2, xbins = default_bin_count, **TH1F_opts) - self.defineHistogram('IP3D_sigD0wrtPVofTracks', title="Track d_{0} Significance w/ Respect to PV of Tracks of IP3D;d_{0} #sigma", xmin=-100, xmax=100, xbins = default_bin_count, **TH1F_opts) - self.defineHistogram('IP3D_valZ0wrtPVofTracks', title="Track z_{0} w/ Respect to PV of Tracks of IP3D;z_{0} (mm)", xmin=-2, xmax=2, xbins = default_bin_count, **TH1F_opts) - self.defineHistogram('IP3D_sigZ0wrtPVofTracks', title="Track z_{0} Significance w/ Respect to PV of Tracks of IP3D;z_{0} #sigma", xmin=-100, xmax=100, xbins = default_bin_count, **TH1F_opts) + self.defineHistogram('MV2c10_discriminant', title="MV2c10 Score", xbins = default_bin_count, xmin=-1, xmax=1, path='EXPERT', type='TH1F') + + + self.defineHistogram('JetFitter_N2Tpair', + title='JetFitter: Number of 2-Track Pairs', + path='EXPERT', type='TH1I', xbins=100, xmin=0, xmax=100) + self.defineHistogram('JetFitter_nVTX', + title='JetFitter: Number of Vertices Used', + path='EXPERT', type='TH1I', xbins=50, xmin=0, xmax=50) + self.defineHistogram('JetFitter_nSingleTracks', + title='JetFitter: Number of Single Tracks', + path='EXPERT', type='TH1I', xbins=50, xmin=0, xmax=50) + self.defineHistogram('JetFitter_nTracksAtVtx', + title='JetFitter: Number of Tracks Associated with Vertex', + path='EXPERT', type='TH1I', xbins=50, xmin=0, xmax=50) + self.defineHistogram('JetFitter_mass', + title='JetFitter: Invariant Mass of All Tracks Associated to Vertex', + path='EXPERT', type='TH1F', xbins=1000, xmin=0, xmax=20000) + self.defineHistogram('JetFitter_energyFraction', + title='JetFitter: Fraction of Charged Jet Energy in Secondary Vertices', + path='EXPERT', type='TH1F', xbins=100, xmin=0, xmax=1.1) + self.defineHistogram('JetFitter_significance3d', + title='JetFitter: Significance-3D', + path='EXPERT', type='TH1F', xbins=100, xmin=0, xmax=100) + self.defineHistogram('JetFitter_deltaeta', + title='JetFitter: #Delta #eta Between Jet and Track Momentum Sum', + path='EXPERT', type='TH1F', xbins=100, xmin=0, xmax=2) + self.defineHistogram('JetFitter_deltaphi', + title='JetFitter: #Delta #phi Between Jet and Track Momentum Sum', + path='EXPERT', type='TH1F', xbins=100, xmin=0, xmax=2) + self.defineHistogram('JetFitter_isDefaults', + title='JetFitter: Fraction of Defaulted Jets; 1 -> Jet Has Defaulted, 0 -> Jet is Valid', + path='EXPERT', type='TH1I', xbins=2, xmin=0, xmax=2) + self.defineHistogram('JetFitter_deltaR', + title='JetFitter: #Delta R Between Jet and Track Momentum Sum', + path='EXPERT', type='TH1F', xbins=100, xmin=0, xmax=2) + + self.defineHistogram('SV1_NGTinSvx', + title='SV1: Number of "Good" Tracks in Vertex', + path='EXPERT', type='TH1I', xbins=100, xmin=0, xmax=100) + self.defineHistogram('SV1_masssvx', + title='SV1: Invariant Mass of All Tracks Associated to Vertex', + path='EXPERT', type='TH1F', xbins=1000, xmin=0, xmax=10000) + self.defineHistogram('SV1_isDefaults', + title='SV1: Fraction of Defaulted Jets; 1 -> Jet Has Defaulted, 0 -> Jet is Valid', + path='EXPERT', type='TH1I', xbins=2, xmin=0, xmax=2) + self.defineHistogram('SV1_N2Tpair', + title='SV1: Number of 2-Track Pairs', + path='EXPERT', type='TH1I', xbins=50, xmin=0, xmax=50) + self.defineHistogram('SV1_efracsvx', + title='SV1: Ratio of Energy in Vertex Tracks to All Tracks in Jet ', + path='EXPERT', type='TH1F', xbins=100, xmin=0, xmax=1.1) + self.defineHistogram('SV1_deltaR', + title='SV1: #Delta R Between Jet and Track Momentum Sum', + path='EXPERT', type='TH1F', xbins=100, xmin=0, xmax=2) + self.defineHistogram('SV1_Lxy', + title='SV1: Transverse Distance Between Primary and Secondary Vertices', + path='EXPERT', type='TH1F', xbins=100, xmin=0, xmax=100) + self.defineHistogram('SV1_L3d', + title='SV1: Total Distance Between Primary and Secondary Vertices', + path='EXPERT', type='TH1F', xbins=100, xmin=0, xmax=100) + self.defineHistogram('SV1_significance3d', + title='SV1: Significance-3D', + path='EXPERT', type='TH1F', xbins=100, xmin=0, xmax=50) + + self.defineHistogram('IP2D_isDefaults', + title='IP2D_isDefaults', + path='EXPERT', type='TH1I', xbins=2, xmin=0, xmax=2) + self.defineHistogram('IP2D_bu', + title='IP2D: Log(P_{b}/P_{light}), Likelihood ratio between the b-jet and light-flavour jet hypotheses', + path='EXPERT', type='TH1F', xbins=100, xmin=-10, xmax=50) + self.defineHistogram('IP2D_bc', + title='IP2D: Log(P_{b}/P_{c}), Likelihood ratio between the b-jet and c-jet hypotheses', + path='EXPERT', type='TH1F', xbins=100, xmin=-10, xmax=50) + self.defineHistogram('IP2D_cu', + title='IP2D: Log(P_{c}/P_{light}), Likelihood ratio between the c-jet and light-flavour jet hypotheses', + path='EXPERT', type='TH1F', xbins=100, xmin=-10, xmax=50) + + self.defineHistogram('IP3D_isDefaults', + title='IP3D_isDefaults', + path='EXPERT', type='TH1I', xbins=2, xmin=0, xmax=2) + self.defineHistogram('IP3D_bu', + title='IP3D: Log(P_{b}/P_{light}), Likelihood ratio between the b-jet and light-flavour jet hypotheses', + path='EXPERT', type='TH1F', xbins=100, xmin=-10, xmax=50) + self.defineHistogram('IP3D_bc', + title='IP3D: Log(P_{b}/P_{c}), Likelihood ratio between the b-jet and c-jet hypotheses', + path='EXPERT', type='TH1F', xbins=100, xmin=-10, xmax=50) + self.defineHistogram('IP3D_cu', + title='IP3D: Log(P_{c}/P_{light}), Likelihood ratio between the c-jet and light-flavour jet hypotheses', + path='EXPERT', type='TH1F', xbins=100, xmin=-10, xmax=50) + + self.defineHistogram('JetFitterSecondaryVertex_nTracks', + title='JFSV: Number of Tracks', + path='EXPERT', type='TH1I', xbins=50, xmin=0, xmax=50) + self.defineHistogram('JetFitterSecondaryVertex_isDefaults', + title='JFSV: Fraction of Defaulted Jets; 1 -> Jet Has Defaulted, 0 -> Jet is Valid', + path='EXPERT', type='TH1I', xbins=2, xmin=0, xmax=2) + self.defineHistogram('JetFitterSecondaryVertex_mass', + title='JFSV: Invariant Mass of All Tracks Associated to Vertex', + path='EXPERT', type='TH1F', xbins=100, xmin=0, xmax=1e4) + self.defineHistogram('JetFitterSecondaryVertex_energy', + title='JFSV: Energy of All Tracks Associated to Vertex', + path='EXPERT', type='TH1F', xbins=100, xmin=0, xmax=1e6) + self.defineHistogram('JetFitterSecondaryVertex_energyFraction', + title='JFSV: Fraction of Charged Jet Energy in Secondary Vertices', + path='EXPERT', type='TH1F', xbins=100, xmin=0, xmax=1.1) + self.defineHistogram('JetFitterSecondaryVertex_displacement3d', + title='JFSV: Total Distance Between Primary and Secondary Vertices', + path='EXPERT', type='TH1F', xbins=100, xmin=0, xmax=500) + self.defineHistogram('JetFitterSecondaryVertex_displacement2d', + title='JFSV: Transverse Distance Between Primary and Secondary Vertices', + path='EXPERT', type='TH1F', xbins=100, xmin=0, xmax=500) + self.defineHistogram('JetFitterSecondaryVertex_maximumTrackRelativeEta', + title='JFSV: Max #eta Between Track and Jet for Tracks from the SV', + path='EXPERT', type='TH1F', xbins=100, xmin=0, xmax=8) + self.defineHistogram('JetFitterSecondaryVertex_minimumTrackRelativeEta', + title='JFSV: Min #eta Between Track and Jet Vector for Tracks from the SV', + path='EXPERT', type='TH1F', xbins=100, xmin=0, xmax=8) + self.defineHistogram('JetFitterSecondaryVertex_averageTrackRelativeEta', + title='JFSV: Average #eta Between Track and Jet Vector for Tracks from the SV', + path='EXPERT', type='TH1F', xbins=100, xmin=0, xmax=8) + self.defineHistogram('JetFitterSecondaryVertex_maximumAllJetTrackRelativeEta', + title='JFSV: Maximum #eta Between Track and Jet Vector for All Tracks from the Jet', + path='EXPERT', type='TH1F', xbins=100, xmin=0, xmax=8) + self.defineHistogram('JetFitterSecondaryVertex_minimumAllJetTrackRelativeEta', + title='JFSV: Minimum #eta Between Track and Jet Vector for All Tracks from the Jet', + path='EXPERT', type='TH1F', xbins=100, xmin=0, xmax=8) + self.defineHistogram('JetFitterSecondaryVertex_averageAllJetTrackRelativeEta', + title='JFSV: Average #eta Between Track and Jet Vector for All Tracks from the Jet', + path='EXPERT', type='TH1F', xbins=100, xmin=0, xmax=8) + + + self.defineHistogram('IP3D_valD0wrtPVofTracks', title="Track d_{0} w/ Respect to PV of Tracks of IP3D;d_{0} (mm)", xmin=-2, xmax=2, xbins = default_bin_count, path='EXPERT', type='TH1F') + self.defineHistogram('IP3D_sigD0wrtPVofTracks', title="Track d_{0} Significance w/ Respect to PV of Tracks of IP3D;d_{0} #sigma", xmin=-100, xmax=100, xbins = default_bin_count, path='EXPERT', type='TH1F') + self.defineHistogram('IP3D_valZ0wrtPVofTracks', title="Track z_{0} w/ Respect to PV of Tracks of IP3D;z_{0} (mm)", xmin=-2, xmax=2, xbins = default_bin_count, path='EXPERT', type='TH1F') + self.defineHistogram('IP3D_sigZ0wrtPVofTracks', title="Track z_{0} Significance w/ Respect to PV of Tracks of IP3D;z_{0} #sigma", xmin=-100, xmax=100, xbins = default_bin_count, path='EXPERT', type='TH1F') diff --git a/Trigger/TrigHypothesis/TrigBjetHypo/src/TrigBjetBtagHypoAlgMT.cxx b/Trigger/TrigHypothesis/TrigBjetHypo/src/TrigBjetBtagHypoAlgMT.cxx index 21b28209fe94dbc94939628fda220274c0b9ca12..20ff9bf0502b01f0e65d4989cd80964fc2230f76 100644 --- a/Trigger/TrigHypothesis/TrigBjetHypo/src/TrigBjetBtagHypoAlgMT.cxx +++ b/Trigger/TrigHypothesis/TrigBjetHypo/src/TrigBjetBtagHypoAlgMT.cxx @@ -33,8 +33,7 @@ StatusCode TrigBjetBtagHypoAlgMT::initialize() { StatusCode TrigBjetBtagHypoAlgMT::execute( const EventContext& context ) const { ATH_MSG_DEBUG ( "Executing " << name() << "..." ); - // ========================================================================================================================== - // ** Retrieve Ingredients + // ========================================================================================================================== // ** Retrieve Ingredients // ========================================================================================================================== // Read in previous Decisions made before running this Hypo Alg. @@ -47,9 +46,6 @@ StatusCode TrigBjetBtagHypoAlgMT::execute( const EventContext& context ) const { CHECK( retrieveObjectFromEventView( context,trackELs,m_trackKey,prevDecisionContainer ) ); ATH_MSG_DEBUG( "Retrieved " << trackELs.size() << " precision tracks..." ); - // online monitoring for tracks - auto monitor_for_track_count = Monitored::Scalar( "track_count", trackELs.size() ); - CHECK( monitor_tracks( trackELs ) ); for ( const ElementLink< xAOD::TrackParticleContainer >& trackLink : trackELs ) ATH_MSG_DEBUG( " * pt=" << (*trackLink)->p4().Et() << @@ -62,10 +58,8 @@ StatusCode TrigBjetBtagHypoAlgMT::execute( const EventContext& context ) const { CHECK( retrieveCollectionFromNavigation( TrigCompositeUtils::featureString(), jetELs, prevDecisionContainer ) ); ATH_MSG_DEBUG( "Retrieved " << jetELs.size() << " Jets of key " << TrigCompositeUtils::featureString() ); - // online monitoring for jets - auto monitor_for_jet_count = Monitored::Scalar( "jet_count", jetELs.size() ); - CHECK( monitor_jets( jetELs ) ); - + // online monitoring for tracks, per decision + CHECK( monitor_tracks( context, prevDecisionContainer ) ); // Retrieve Vertices ElementLinkVector< xAOD::VertexContainer > vertexELs; @@ -76,9 +70,6 @@ StatusCode TrigBjetBtagHypoAlgMT::execute( const EventContext& context ) const { auto monitor_for_vertex_count = Monitored::Scalar( "vertex_count", vertexELs.size() ); - auto monitor_group_for_events = Monitored::Group( m_monTool, monitor_for_track_count, monitor_for_jet_count, monitor_for_vertex_count ); - - // ========================================================================================================================== // ** Prepare Outputs // ========================================================================================================================== @@ -96,6 +87,7 @@ StatusCode TrigBjetBtagHypoAlgMT::execute( const EventContext& context ) const { // Create output decisions ATH_MSG_DEBUG("Creating Output Decisions and Linking Stuff to it"); std::vector< TrigCompositeUtils::Decision* > newDecisions; + ElementLinkVector< xAOD::JetContainer > all_bTaggedJetELs; for ( unsigned int index(0); index<nDecisions; index++ ) { TrigCompositeUtils::Decision *toAdd = TrigCompositeUtils::newDecisionIn( outputDecisions, prevDecisionContainer->at(index), @@ -115,6 +107,7 @@ StatusCode TrigBjetBtagHypoAlgMT::execute( const EventContext& context ) const { } toAdd->setObjectLink< xAOD::JetContainer >( TrigCompositeUtils::featureString(),bTaggedJetEL.front() ); + all_bTaggedJetELs.push_back( bTaggedJetEL.front() ); @@ -148,6 +141,18 @@ StatusCode TrigBjetBtagHypoAlgMT::execute( const EventContext& context ) const { newDecisions.push_back( toAdd ); } + // online monitoring for jets + auto monitor_for_jet_count = Monitored::Scalar( "jet_count", jetELs.size() ); + CHECK( monitor_jets( jetELs, all_bTaggedJetELs ) ); + + auto monitor_group_for_events = Monitored::Group( m_monTool, monitor_for_jet_count, monitor_for_vertex_count ); + + + + //// online monitoring for jets + //auto monitor_for_jet_count = Monitored::Scalar( "jet_count", jetELs.size() ); + //CHECK( monitor_jets( jetELs ) ); + // ========================================================================================================================== // ** Prepare input to Hypo Tools @@ -203,7 +208,7 @@ StatusCode TrigBjetBtagHypoAlgMT::execute( const EventContext& context ) const { return StatusCode::SUCCESS; } -StatusCode TrigBjetBtagHypoAlgMT::monitor_jets( const ElementLinkVector<xAOD::JetContainer >& jetELs ) const { +StatusCode TrigBjetBtagHypoAlgMT::monitor_jets( const ElementLinkVector<xAOD::JetContainer >& jetELs, const ElementLinkVector<xAOD::JetContainer >& all_bTaggedJetELs ) const { auto monitor_for_jet_pt = Monitored::Collection( "jet_pt", jetELs, [](const ElementLink< xAOD::JetContainer >& jetLink) { return (*jetLink)->pt() / 1000.0 /*Gev*/; } ); @@ -212,55 +217,108 @@ StatusCode TrigBjetBtagHypoAlgMT::monitor_jets( const ElementLinkVector<xAOD::Je auto monitor_for_jet_phi = Monitored::Collection( "jet_phi", jetELs, [](const ElementLink< xAOD::JetContainer >& jetLink) { return (*jetLink)->phi(); } ); + auto monitor_for_Bjet_pt = Monitored::Collection( "Bjet_pt", all_bTaggedJetELs, + [](const ElementLink< xAOD::JetContainer >& jetLink) { return (*jetLink)->pt() / 1000.0 /*Gev*/; } ); + auto monitor_for_Bjet_eta = Monitored::Collection( "Bjet_eta", all_bTaggedJetELs, + [](const ElementLink< xAOD::JetContainer >& jetLink) { return (*jetLink)->eta(); } ); + auto monitor_for_Bjet_phi = Monitored::Collection( "Bjet_phi", all_bTaggedJetELs, + [](const ElementLink< xAOD::JetContainer >& jetLink) { return (*jetLink)->phi(); } ); + + for( unsigned int i = 0; i < jetELs.size(); i++ ) { + const ElementLink< xAOD::JetContainer >& jetLink = jetELs[i]; + const ElementLink< xAOD::JetContainer >& BjetLink = all_bTaggedJetELs[i]; + auto monitor_for_jet_delta_pt = Monitored::Scalar( "jet_bjet_delta_pt", (*jetLink)->pt() - (*BjetLink)->pt() ); + auto monitor_for_jet_delta_eta = Monitored::Scalar( "jet_bjet_delta_eta", (*jetLink)->eta() - (*BjetLink)->eta() ); + auto monitor_for_jet_delta_phi = Monitored::Scalar( "jet_bjet_delta_phi", (*jetLink)->phi() - (*BjetLink)->phi() ); + auto monitor_group_for_jet_deltas = Monitored::Group( m_monTool, + monitor_for_jet_delta_pt, monitor_for_jet_delta_eta, monitor_for_jet_delta_phi + ); + + } + auto monitor_group_for_jets = Monitored::Group( m_monTool, - monitor_for_jet_pt, monitor_for_jet_eta, monitor_for_jet_phi + monitor_for_jet_pt, monitor_for_jet_eta, monitor_for_jet_phi, + monitor_for_Bjet_pt, monitor_for_Bjet_eta, monitor_for_Bjet_phi ); return StatusCode::SUCCESS; } -StatusCode TrigBjetBtagHypoAlgMT::monitor_tracks( const ElementLinkVector< xAOD::TrackParticleContainer >& trackELs ) const { - - auto monitor_for_track_Et = Monitored::Collection( "track_Et", trackELs, - [](const ElementLink< xAOD::TrackParticleContainer >& trackLink) { return (*trackLink)->p4().Et() / 1000.0 /*Gev*/; } ); - auto monitor_for_track_eta = Monitored::Collection( "track_eta", trackELs, - [](const ElementLink< xAOD::TrackParticleContainer >& trackLink) { return (*trackLink)->eta(); } ); - auto monitor_for_track_phi = Monitored::Collection( "track_phi", trackELs, - [](const ElementLink< xAOD::TrackParticleContainer >& trackLink) { return (*trackLink)->phi(); } ); - - // Monitors for d0 and z0 track impact parameter variables - auto monitor_for_track_d0 = Monitored::Collection( "track_d0", trackELs, - [](const ElementLink< xAOD::TrackParticleContainer >& trackLink) { return (*trackLink)->d0(); } ); - - auto monitor_for_track_d0err = Monitored::Collection( "track_d0err", trackELs, - [](const ElementLink< xAOD::TrackParticleContainer >& trackLink) { - return Amg::error( (*trackLink)->definingParametersCovMatrix(), 0); - } ); - - auto monitor_for_track_d0sig = Monitored::Collection( "track_d0sig", trackELs, - [](const ElementLink< xAOD::TrackParticleContainer >& trackLink) { - return (*trackLink)->d0() / Amg::error( (*trackLink)->definingParametersCovMatrix(), 0); - } ); - - auto monitor_for_track_z0 = Monitored::Collection( "track_z0", trackELs, - [](const ElementLink< xAOD::TrackParticleContainer >& trackLink) { return (*trackLink)->z0(); } ); - - auto monitor_for_track_z0err = Monitored::Collection( "track_z0err", trackELs, - [](const ElementLink< xAOD::TrackParticleContainer >& trackLink) { - return Amg::error( (*trackLink)->definingParametersCovMatrix(), 1); - } ); - - auto monitor_for_track_z0sig = Monitored::Collection( "track_z0sig", trackELs, - [](const ElementLink< xAOD::TrackParticleContainer >& trackLink) { - return (*trackLink)->z0() / Amg::error( (*trackLink)->definingParametersCovMatrix(), 1); - } ); - - auto monitor_group_for_tracks = Monitored::Group( m_monTool, - monitor_for_track_Et, monitor_for_track_eta, monitor_for_track_phi, - monitor_for_track_d0, monitor_for_track_d0err, monitor_for_track_d0sig, - monitor_for_track_z0, monitor_for_track_z0err, monitor_for_track_z0sig - ); +StatusCode TrigBjetBtagHypoAlgMT::monitor_tracks( const EventContext& context, const TrigCompositeUtils::DecisionContainer* prevDecisionContainer ) const { + // This vector is for checking we are not reading more than once from the same View, thus retrieving the same objects multiple times! + std::vector< ElementLink< ViewContainer > > readViews; + for ( const TrigCompositeUtils::Decision* previousDecision: *prevDecisionContainer ) { + // get View + ElementLink< ViewContainer > viewEL = previousDecision->objectLink< ViewContainer >( TrigCompositeUtils::viewString() ); + ATH_CHECK( viewEL.isValid() ); + ATH_MSG_DEBUG( "Retrieved View" ); + + bool alreadyUsed = false; + for ( const ElementLink< ViewContainer >& storedViews : readViews ) { + if ( viewEL == storedViews ) { + ATH_MSG_DEBUG( "We have already used this view!" ); + alreadyUsed = true; + break; + } + } + if ( alreadyUsed ) continue; + + readViews.push_back( viewEL ); + + // online monitoring for tracks + SG::ReadHandle< xAOD::TrackParticleContainer > trackHandle = ViewHelper::makeHandle( *viewEL, m_trackKey, context ); + ATH_CHECK( trackHandle.isValid() ); + size_t Counter = 0; + ElementLinkVector< xAOD::TrackParticleContainer > trackELs; + for ( auto it = trackHandle->begin(); it != trackHandle->end(); ++it, ++Counter ) { + ElementLink< xAOD::TrackParticleContainer > tracks = ViewHelper::makeLink< xAOD::TrackParticleContainer >( *viewEL, trackHandle, Counter ); + ATH_CHECK( tracks.isValid() ); + trackELs.push_back( tracks ); + } + auto monitor_for_track_count = Monitored::Scalar( "track_count", trackELs.size() ); + auto monitor_group_for_decision = Monitored::Group( m_monTool, monitor_for_track_count); + + auto monitor_for_track_Et = Monitored::Collection( "track_Et", trackELs, + [](const ElementLink< xAOD::TrackParticleContainer >& trackLink) { return (*trackLink)->p4().Et() / 1000.0 /*Gev*/; } ); + auto monitor_for_track_eta = Monitored::Collection( "track_eta", trackELs, + [](const ElementLink< xAOD::TrackParticleContainer >& trackLink) { return (*trackLink)->eta(); } ); + auto monitor_for_track_phi = Monitored::Collection( "track_phi", trackELs, + [](const ElementLink< xAOD::TrackParticleContainer >& trackLink) { return (*trackLink)->phi(); } ); + + // Monitors for d0 and z0 track impact parameter variables + auto monitor_for_track_d0 = Monitored::Collection( "track_d0", trackELs, + [](const ElementLink< xAOD::TrackParticleContainer >& trackLink) { return (*trackLink)->d0(); } ); + + auto monitor_for_track_d0err = Monitored::Collection( "track_d0err", trackELs, + [](const ElementLink< xAOD::TrackParticleContainer >& trackLink) { + return Amg::error( (*trackLink)->definingParametersCovMatrix(), 0); + } ); + + auto monitor_for_track_d0sig = Monitored::Collection( "track_d0sig", trackELs, + [](const ElementLink< xAOD::TrackParticleContainer >& trackLink) { + return (*trackLink)->d0() / Amg::error( (*trackLink)->definingParametersCovMatrix(), 0); + } ); + + auto monitor_for_track_z0 = Monitored::Collection( "track_z0", trackELs, + [](const ElementLink< xAOD::TrackParticleContainer >& trackLink) { return (*trackLink)->z0(); } ); + + auto monitor_for_track_z0err = Monitored::Collection( "track_z0err", trackELs, + [](const ElementLink< xAOD::TrackParticleContainer >& trackLink) { + return Amg::error( (*trackLink)->definingParametersCovMatrix(), 1); + } ); + + auto monitor_for_track_z0sig = Monitored::Collection( "track_z0sig", trackELs, + [](const ElementLink< xAOD::TrackParticleContainer >& trackLink) { + return (*trackLink)->z0() / Amg::error( (*trackLink)->definingParametersCovMatrix(), 1); + } ); + + auto monitor_group_for_tracks = Monitored::Group( m_monTool, + monitor_for_track_Et, monitor_for_track_eta, monitor_for_track_phi, + monitor_for_track_d0, monitor_for_track_d0err, monitor_for_track_d0sig, + monitor_for_track_z0, monitor_for_track_z0err, monitor_for_track_z0sig + ); + } return StatusCode::SUCCESS; } @@ -310,100 +368,111 @@ StatusCode TrigBjetBtagHypoAlgMT::monitor_primary_vertex( const ElementLink< xAO } +ElementLinkVector<xAOD::BTaggingContainer> TrigBjetBtagHypoAlgMT::collect_valid_links( + const ElementLinkVector< xAOD::BTaggingContainer >& bTaggingEL, std::string tagger ) const { + + ElementLinkVector<xAOD::BTaggingContainer> valid_bTaggingEL; + for (const ElementLink< xAOD::BTaggingContainer >& bTagLink : bTaggingEL) { + if ( not (*bTagLink)->auxdata<char>(tagger+"_isDefaults") ) { valid_bTaggingEL.push_back( bTagLink ); } + } + return valid_bTaggingEL; +} + + StatusCode TrigBjetBtagHypoAlgMT::monitor_btagging( const ElementLinkVector< xAOD::BTaggingContainer >& bTaggingEL ) const { - // Monitor flavor probabilites - CHECK( monitor_flavor_probabilities(bTaggingEL, "IP2D") ); - CHECK( monitor_flavor_probabilities(bTaggingEL, "IP3D") ); + // Monitor high-level tagger flavor probabilites CHECK( monitor_flavor_probabilities(bTaggingEL, "DL1r") ); CHECK( monitor_flavor_probabilities(bTaggingEL, "rnnip") ); - MONITOR_BTAG_AUX_VAR(JetFitter_N2Tpair, int, bTaggingEL); - MONITOR_BTAG_AUX_VAR(JetFitter_nVTX, int, bTaggingEL); - MONITOR_BTAG_AUX_VAR(JetFitter_nSingleTracks, int, bTaggingEL); - MONITOR_BTAG_AUX_VAR(JetFitter_nTracksAtVtx, int, bTaggingEL); - MONITOR_BTAG_AUX_VAR(JetFitter_mass, float, bTaggingEL); - MONITOR_BTAG_AUX_VAR(JetFitter_energyFraction, float, bTaggingEL); - MONITOR_BTAG_AUX_VAR(JetFitter_significance3d, float, bTaggingEL); - MONITOR_BTAG_AUX_VAR(JetFitter_deltaeta, float, bTaggingEL); - MONITOR_BTAG_AUX_VAR(JetFitter_deltaphi, float, bTaggingEL); + // Monitor JetFitter MONITOR_BTAG_AUX_VAR(JetFitter_isDefaults, char, bTaggingEL); - MONITOR_BTAG_AUX_VAR(JetFitter_deltaR, float, bTaggingEL); + auto validJetFitter_bTaggingEL = collect_valid_links(bTaggingEL, "JetFitter"); + MONITOR_BTAG_AUX_VAR(JetFitter_N2Tpair, int, validJetFitter_bTaggingEL); + MONITOR_BTAG_AUX_VAR(JetFitter_nVTX, int, validJetFitter_bTaggingEL); + MONITOR_BTAG_AUX_VAR(JetFitter_nSingleTracks, int, validJetFitter_bTaggingEL); + MONITOR_BTAG_AUX_VAR(JetFitter_nTracksAtVtx, int, validJetFitter_bTaggingEL); + MONITOR_BTAG_AUX_VAR(JetFitter_mass, float, validJetFitter_bTaggingEL); + MONITOR_BTAG_AUX_VAR(JetFitter_energyFraction, float, validJetFitter_bTaggingEL); + MONITOR_BTAG_AUX_VAR(JetFitter_significance3d, float, validJetFitter_bTaggingEL); + MONITOR_BTAG_AUX_VAR(JetFitter_deltaeta, float, validJetFitter_bTaggingEL); + MONITOR_BTAG_AUX_VAR(JetFitter_deltaphi, float, validJetFitter_bTaggingEL); + MONITOR_BTAG_AUX_VAR(JetFitter_deltaR, float, validJetFitter_bTaggingEL); + auto monitor_group_for_JetFitter = Monitored::Group( m_monTool, + monitor_for_JetFitter_N2Tpair, monitor_for_JetFitter_nVTX, + monitor_for_JetFitter_nSingleTracks, monitor_for_JetFitter_nTracksAtVtx, + monitor_for_JetFitter_mass, monitor_for_JetFitter_energyFraction, + monitor_for_JetFitter_significance3d, monitor_for_JetFitter_deltaeta, + monitor_for_JetFitter_deltaphi, monitor_for_JetFitter_deltaR + ); - MONITOR_BTAG_AUX_VAR(SV1_NGTinSvx, int, bTaggingEL); - MONITOR_BTAG_AUX_VAR(SV1_masssvx, float, bTaggingEL); + // Monitor SV1 MONITOR_BTAG_AUX_VAR(SV1_isDefaults, char, bTaggingEL); - MONITOR_BTAG_AUX_VAR(SV1_N2Tpair, int, bTaggingEL); - MONITOR_BTAG_AUX_VAR(SV1_efracsvx, float, bTaggingEL); - MONITOR_BTAG_AUX_VAR(SV1_deltaR, float, bTaggingEL); - MONITOR_BTAG_AUX_VAR(SV1_Lxy, float, bTaggingEL); - MONITOR_BTAG_AUX_VAR(SV1_L3d, float, bTaggingEL); - MONITOR_BTAG_AUX_VAR(SV1_significance3d, float, bTaggingEL); + auto validSV1_bTaggingEL = collect_valid_links(bTaggingEL, "SV1"); + MONITOR_BTAG_AUX_VAR(SV1_NGTinSvx, int, validSV1_bTaggingEL); + MONITOR_BTAG_AUX_VAR(SV1_masssvx, float, validSV1_bTaggingEL); + MONITOR_BTAG_AUX_VAR(SV1_N2Tpair, int, validSV1_bTaggingEL); + MONITOR_BTAG_AUX_VAR(SV1_efracsvx, float, validSV1_bTaggingEL); + MONITOR_BTAG_AUX_VAR(SV1_deltaR, float, validSV1_bTaggingEL); + MONITOR_BTAG_AUX_VAR(SV1_Lxy, float, validSV1_bTaggingEL); + MONITOR_BTAG_AUX_VAR(SV1_L3d, float, validSV1_bTaggingEL); + MONITOR_BTAG_AUX_VAR(SV1_significance3d, float, validSV1_bTaggingEL); + auto monitor_group_for_SV1 = Monitored::Group( m_monTool, + monitor_for_SV1_NGTinSvx, monitor_for_SV1_masssvx, + monitor_for_SV1_N2Tpair, monitor_for_SV1_efracsvx, + monitor_for_SV1_deltaR, monitor_for_SV1_Lxy, + monitor_for_SV1_L3d, monitor_for_SV1_significance3d + ); + // Monitor IP2D MONITOR_BTAG_AUX_VAR(IP2D_isDefaults, char, bTaggingEL); - MONITOR_BTAG_AUX_VAR(IP2D_bu, float, bTaggingEL); - MONITOR_BTAG_AUX_VAR(IP2D_bc, float, bTaggingEL); - MONITOR_BTAG_AUX_VAR(IP2D_cu, float, bTaggingEL); - MONITOR_BTAG_AUX_VAR(IP3D_isDefaults, char, bTaggingEL); - MONITOR_BTAG_AUX_VAR(IP3D_bu, float, bTaggingEL); - MONITOR_BTAG_AUX_VAR(IP3D_bc, float, bTaggingEL); - MONITOR_BTAG_AUX_VAR(IP3D_cu, float, bTaggingEL); - - MONITOR_BTAG_AUX_VAR(JetFitterSecondaryVertex_nTracks, int, bTaggingEL); - MONITOR_BTAG_AUX_VAR(JetFitterSecondaryVertex_isDefaults, char, bTaggingEL); - MONITOR_BTAG_AUX_VAR(JetFitterSecondaryVertex_mass, float, bTaggingEL); - MONITOR_BTAG_AUX_VAR(JetFitterSecondaryVertex_energy, float, bTaggingEL); - MONITOR_BTAG_AUX_VAR(JetFitterSecondaryVertex_energyFraction, float, bTaggingEL); - MONITOR_BTAG_AUX_VAR(JetFitterSecondaryVertex_displacement3d, float, bTaggingEL); - MONITOR_BTAG_AUX_VAR(JetFitterSecondaryVertex_displacement2d, float, bTaggingEL); - MONITOR_BTAG_AUX_VAR(JetFitterSecondaryVertex_maximumTrackRelativeEta, float, bTaggingEL); - MONITOR_BTAG_AUX_VAR(JetFitterSecondaryVertex_minimumTrackRelativeEta, float, bTaggingEL); - MONITOR_BTAG_AUX_VAR(JetFitterSecondaryVertex_averageTrackRelativeEta, float, bTaggingEL); - - MONITOR_BTAG_AUX_VAR(JetFitterSecondaryVertex_maximumAllJetTrackRelativeEta, float, bTaggingEL); - MONITOR_BTAG_AUX_VAR(JetFitterSecondaryVertex_minimumAllJetTrackRelativeEta, float, bTaggingEL); - MONITOR_BTAG_AUX_VAR(JetFitterSecondaryVertex_averageAllJetTrackRelativeEta, float, bTaggingEL); - + auto validIP2D_bTaggingEL = collect_valid_links(bTaggingEL, "IP2D"); + CHECK( monitor_flavor_probabilities(validIP2D_bTaggingEL, "IP2D") ); + MONITOR_BTAG_AUX_VAR(IP2D_bu, float, validIP2D_bTaggingEL); + MONITOR_BTAG_AUX_VAR(IP2D_bc, float, validIP2D_bTaggingEL); + MONITOR_BTAG_AUX_VAR(IP2D_cu, float, validIP2D_bTaggingEL); + auto monitor_group_for_IP2D = Monitored::Group( m_monTool, + monitor_for_IP2D_bu, monitor_for_IP2D_bc, monitor_for_IP2D_cu + ); + // Monitor IP3D + MONITOR_BTAG_AUX_VAR(IP3D_isDefaults, char, bTaggingEL); + auto validIP3D_bTaggingEL = collect_valid_links(bTaggingEL, "IP3D"); + CHECK( monitor_flavor_probabilities(validIP3D_bTaggingEL, "IP3D") ); + MONITOR_BTAG_AUX_VAR(IP3D_bu, float, validIP3D_bTaggingEL); + MONITOR_BTAG_AUX_VAR(IP3D_bc, float, validIP3D_bTaggingEL); + MONITOR_BTAG_AUX_VAR(IP3D_cu, float, validIP3D_bTaggingEL); + auto monitor_group_for_IP3D = Monitored::Group( m_monTool, + monitor_for_IP3D_bu, monitor_for_IP3D_bc, monitor_for_IP3D_cu + ); + for ( const ElementLink< xAOD::BTaggingContainer >& bTagLink : validIP3D_bTaggingEL ) { + MONITOR_BTAG_AUX_TRACK_VAR(IP3D_valD0wrtPVofTracks, float); + MONITOR_BTAG_AUX_TRACK_VAR(IP3D_sigD0wrtPVofTracks, float); + MONITOR_BTAG_AUX_TRACK_VAR(IP3D_valZ0wrtPVofTracks, float); + MONITOR_BTAG_AUX_TRACK_VAR(IP3D_sigZ0wrtPVofTracks, float); - // Monitor MV2c10 - auto monitor_for_MV2c10 = Monitored::Collection( "btag_MV2c10", bTaggingEL, - [](const ElementLink< xAOD::BTaggingContainer >& bTagLink) { - double mv2c10_discriminant = -2; - (*bTagLink)->MVx_discriminant( "MV2c10", mv2c10_discriminant ); - return mv2c10_discriminant; - } ); + auto monitor_group_for_btag_track_vars = Monitored::Group( m_monTool, + monitor_for_IP3D_valD0wrtPVofTracks, monitor_for_IP3D_sigD0wrtPVofTracks, + monitor_for_IP3D_valZ0wrtPVofTracks, monitor_for_IP3D_sigZ0wrtPVofTracks + ); + } - auto monitor_group_for_btagging = Monitored::Group( m_monTool, - monitor_for_JetFitter_N2Tpair, - monitor_for_JetFitter_nVTX, - monitor_for_JetFitter_nSingleTracks, - monitor_for_JetFitter_nTracksAtVtx, - monitor_for_JetFitter_mass, - monitor_for_JetFitter_energyFraction, - monitor_for_JetFitter_significance3d, - monitor_for_JetFitter_deltaeta, - monitor_for_JetFitter_deltaphi, - monitor_for_JetFitter_isDefaults, - monitor_for_JetFitter_deltaR, - monitor_for_SV1_NGTinSvx, - monitor_for_SV1_masssvx, - monitor_for_SV1_isDefaults, - monitor_for_SV1_N2Tpair, - monitor_for_SV1_efracsvx, - monitor_for_SV1_deltaR, - monitor_for_SV1_Lxy, - monitor_for_SV1_L3d, - monitor_for_SV1_significance3d, - monitor_for_IP2D_bu, - monitor_for_IP2D_isDefaults, - monitor_for_IP2D_bc, - monitor_for_IP2D_cu, - monitor_for_IP3D_bu, - monitor_for_IP3D_isDefaults, - monitor_for_IP3D_bc, - monitor_for_IP3D_cu, + // Monitor JetFitterSecondaryVertex + MONITOR_BTAG_AUX_VAR(JetFitterSecondaryVertex_isDefaults, char, bTaggingEL); + auto validJFSV_bTaggingEL = collect_valid_links(bTaggingEL, "JetFitterSecondaryVertex"); + MONITOR_BTAG_AUX_VAR(JetFitterSecondaryVertex_nTracks, int, validJFSV_bTaggingEL); + MONITOR_BTAG_AUX_VAR(JetFitterSecondaryVertex_mass, float, validJFSV_bTaggingEL); + MONITOR_BTAG_AUX_VAR(JetFitterSecondaryVertex_energy, float, validJFSV_bTaggingEL); + MONITOR_BTAG_AUX_VAR(JetFitterSecondaryVertex_energyFraction, float, validJFSV_bTaggingEL); + MONITOR_BTAG_AUX_VAR(JetFitterSecondaryVertex_displacement3d, float, validJFSV_bTaggingEL); + MONITOR_BTAG_AUX_VAR(JetFitterSecondaryVertex_displacement2d, float, validJFSV_bTaggingEL); + MONITOR_BTAG_AUX_VAR(JetFitterSecondaryVertex_maximumTrackRelativeEta, float, validJFSV_bTaggingEL); + MONITOR_BTAG_AUX_VAR(JetFitterSecondaryVertex_minimumTrackRelativeEta, float, validJFSV_bTaggingEL); + MONITOR_BTAG_AUX_VAR(JetFitterSecondaryVertex_averageTrackRelativeEta, float, validJFSV_bTaggingEL); + MONITOR_BTAG_AUX_VAR(JetFitterSecondaryVertex_maximumAllJetTrackRelativeEta, float, validJFSV_bTaggingEL); + MONITOR_BTAG_AUX_VAR(JetFitterSecondaryVertex_minimumAllJetTrackRelativeEta, float, validJFSV_bTaggingEL); + MONITOR_BTAG_AUX_VAR(JetFitterSecondaryVertex_averageAllJetTrackRelativeEta, float, validJFSV_bTaggingEL); + auto monitor_group_for_JFSV = Monitored::Group( m_monTool, monitor_for_JetFitterSecondaryVertex_nTracks, - monitor_for_JetFitterSecondaryVertex_isDefaults, monitor_for_JetFitterSecondaryVertex_mass, monitor_for_JetFitterSecondaryVertex_energy, monitor_for_JetFitterSecondaryVertex_energyFraction, @@ -414,23 +483,20 @@ StatusCode TrigBjetBtagHypoAlgMT::monitor_btagging( const ElementLinkVector< xAO monitor_for_JetFitterSecondaryVertex_averageTrackRelativeEta, monitor_for_JetFitterSecondaryVertex_maximumAllJetTrackRelativeEta, monitor_for_JetFitterSecondaryVertex_minimumAllJetTrackRelativeEta, - monitor_for_JetFitterSecondaryVertex_averageAllJetTrackRelativeEta, - monitor_for_MV2c10 + monitor_for_JetFitterSecondaryVertex_averageAllJetTrackRelativeEta ); + // Monitor MV2c10 + MONITOR_BTAG_AUX_VAR(MV2c10_discriminant, float, bTaggingEL); - for ( const ElementLink< xAOD::BTaggingContainer >& bTagLink : bTaggingEL ) { - MONITOR_BTAG_AUX_TRACK_VAR(IP3D_valD0wrtPVofTracks, float); - MONITOR_BTAG_AUX_TRACK_VAR(IP3D_sigD0wrtPVofTracks, float); - MONITOR_BTAG_AUX_TRACK_VAR(IP3D_valZ0wrtPVofTracks, float); - MONITOR_BTAG_AUX_TRACK_VAR(IP3D_sigZ0wrtPVofTracks, float); - - auto monitor_group_for_btag_track_vars = Monitored::Group( m_monTool, - monitor_for_IP3D_valD0wrtPVofTracks, monitor_for_IP3D_sigD0wrtPVofTracks, - monitor_for_IP3D_valZ0wrtPVofTracks, monitor_for_IP3D_sigZ0wrtPVofTracks - ); - } - + auto monitor_group_for_btagging = Monitored::Group( m_monTool, + monitor_for_JetFitter_isDefaults, + monitor_for_SV1_isDefaults, + monitor_for_IP2D_isDefaults, + monitor_for_IP3D_isDefaults, + monitor_for_JetFitterSecondaryVertex_isDefaults, + monitor_for_MV2c10_discriminant + ); return StatusCode::SUCCESS; } diff --git a/Trigger/TrigHypothesis/TrigBjetHypo/src/TrigBjetBtagHypoAlgMT.h b/Trigger/TrigHypothesis/TrigBjetHypo/src/TrigBjetBtagHypoAlgMT.h index 9b04198988673009c09e50d41d5e3c3f9ace8599..6d1b332d843b24bd305fa452a7bea077b5ffba45 100644 --- a/Trigger/TrigHypothesis/TrigBjetHypo/src/TrigBjetBtagHypoAlgMT.h +++ b/Trigger/TrigHypothesis/TrigBjetHypo/src/TrigBjetBtagHypoAlgMT.h @@ -47,10 +47,12 @@ class TrigBjetBtagHypoAlgMT : public TrigBjetHypoAlgBaseMT { TrigBjetBtagHypoAlgMT(); // online monitoring - virtual StatusCode monitor_jets( const ElementLinkVector<xAOD::JetContainer >& jetELs ) const ; - virtual StatusCode monitor_tracks( const ElementLinkVector< xAOD::TrackParticleContainer >& trackELs ) const; + virtual StatusCode monitor_jets( const ElementLinkVector<xAOD::JetContainer >& jetELs, const ElementLinkVector<xAOD::JetContainer >& all_bTaggedJetELs ) const ; + virtual StatusCode monitor_tracks( const EventContext& context, const TrigCompositeUtils::DecisionContainer* prevDecisionContainer ) const; virtual StatusCode monitor_primary_vertex( const ElementLink< xAOD::VertexContainer >& primVertexEL ) const; virtual StatusCode monitor_flavor_probabilities( const ElementLinkVector< xAOD::BTaggingContainer >& bTaggingEL, const std::string& var_name) const; + virtual ElementLinkVector<xAOD::BTaggingContainer> collect_valid_links( + const ElementLinkVector< xAOD::BTaggingContainer >& bTaggingEL, std::string tagger ) const; virtual StatusCode monitor_btagging( const ElementLinkVector< xAOD::BTaggingContainer >& bTaggingEL ) const; private: