ATLAS Offline Software
TrigBjetBtagHypoAlg.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #include "TrigBjetBtagHypoAlg.h"
8 
9 
11  ISvcLocator* pSvcLocator ) :
12  TrigBjetHypoAlgBase( name, pSvcLocator ) {}
13 
14 
16 
17  ATH_CHECK( m_hypoTools.retrieve() );
18  if ( !m_monTool.empty() ) CHECK( m_monTool.retrieve() );
19 
20  ATH_CHECK( m_bTaggedJetKey.initialize() );
21  ATH_CHECK( m_bTagKey.initialize() );
23  ATH_CHECK( m_inputPrmVtx.initialize() );
24 
29 
31 
32  return StatusCode::SUCCESS;
33 }
34 
35 
36 StatusCode TrigBjetBtagHypoAlg::execute( const EventContext& context ) const {
37  ATH_MSG_DEBUG ( "Executing " << name() << "..." );
38 
39  // ========================================================================================================================== // ** Retrieve Ingredients
40  // ==========================================================================================================================
41 
42  // Read in previous Decisions made before running this Hypo Alg.
43  const TrigCompositeUtils::DecisionContainer *prevDecisionContainer = nullptr;
44  CHECK( retrievePreviousDecisionContainer( context,prevDecisionContainer ) );
45  ATH_MSG_DEBUG( "Running with "<< prevDecisionContainer->size() <<" previous decisions");
46 
47  // Retrive Precision tracks from Event Views. We get them all in this way!
49  CHECK( retrieveObjectFromEventView( context,trackELs,m_trackKey,prevDecisionContainer ) );
50  ATH_MSG_DEBUG( "Retrieved " << trackELs.size() << " precision tracks..." );
51 
52 
53  for ( const ElementLink< xAOD::TrackParticleContainer > trackLink : trackELs )
54  ATH_MSG_DEBUG( " * pt=" << (*trackLink)->p4().Et() <<
55  " eta=" << (*trackLink)->eta() <<
56  " phi=" << (*trackLink)->phi() );
57 
58 
59  // Retrieve Jets
61  CHECK( retrieveCollectionFromNavigation( TrigCompositeUtils::featureString(), jetELs, prevDecisionContainer ) );
62  ATH_MSG_DEBUG( "Retrieved " << jetELs.size() << " Jets of key " << TrigCompositeUtils::featureString() );
63 
64  // online monitoring for tracks, per decision
65  CHECK( monitor_tracks( context, prevDecisionContainer ) );
66 
67  // Retrieve Vertices
69  CHECK( retrieveObjectFromStoreGate( context,vertexELs,m_inputPrmVtx ) );
70  ATH_MSG_DEBUG( "Retrieved " << vertexELs.size() <<" vertices..." );
71 
72  // opnline monitoring for vertex
73  auto monitor_for_vertex_count = Monitored::Scalar( "vertex_count", vertexELs.size() );
74 
75 
76  // ==========================================================================================================================
77  // ** Prepare Outputs
78  // ==========================================================================================================================
79 
80  // Decisions
82  TrigCompositeUtils::DecisionContainer *outputDecisions = handle.ptr();
83 
84  // ==========================================================================================================================
85  // ** Prepare Decisions
86  // ==========================================================================================================================
87 
88  const unsigned int nDecisions = prevDecisionContainer->size();
89 
90  // Create output decisions
91  ATH_MSG_DEBUG("Creating Output Decisions and Linking Stuff to it");
92  std::vector< TrigCompositeUtils::Decision* > newDecisions;
94  for ( unsigned int index(0); index<nDecisions; index++ ) {
96  prevDecisionContainer->at(index),
98 
99  // Attaching links to the output decisions
100  // Retrieved jets from view on which we have run flavour tagging
103  bTaggedJetEL,
105  prevDecisionContainer->at(index) ) );
106 
107  if ( bTaggedJetEL.size() != 1 ) {
108  ATH_MSG_ERROR( "Did not find only 1 b-tagged jet object from View!" );
109  return StatusCode::FAILURE;
110  }
111 
112  toAdd->setObjectLink< xAOD::JetContainer >( TrigCompositeUtils::featureString(),bTaggedJetEL.front() );
113  all_bTaggedJetELs.push_back( bTaggedJetEL.front() );
114 
115 
116 
117  // Retrieve Flavour Tagging object from view
120  bTaggingEL,
121  m_bTagKey,
122  prevDecisionContainer->at(index) ) );
123 
124  if ( bTaggingEL.size() != 1 ) {
125  ATH_MSG_ERROR( "Did not find only 1 b-tagging object from View!" );
126  return StatusCode::FAILURE;
127  }
128 
129  toAdd->setObjectLink< xAOD::BTaggingContainer >(m_btaggingLinkName,bTaggingEL.front() ); // TM 2021-10-30
130 
131  // online monitoring for btagging, with a check to ensure the PV is marked
133  CHECK( retrieveObjectFromNavigation( m_prmVtxLink.value(), vertexEL, prevDecisionContainer->at(index) ) );
134 
135  if ( (*vertexEL)->vertexType() == xAOD::VxType::VertexType::PriVtx ) {
136  CHECK( monitor_primary_vertex( vertexEL ) );
137  CHECK( monitor_btagging( bTaggingEL ) );
138  }
139 
140 
141 
142 
143  // Add to Decision collection
144  newDecisions.push_back( toAdd );
145  }
146 
147  // online monitoring for jets
148  auto monitor_for_jet_count = Monitored::Scalar( "jet_count", jetELs.size() );
149  CHECK( monitor_jets( jetELs, all_bTaggedJetELs ) );
150 
151  auto monitor_group_for_events = Monitored::Group( m_monTool, monitor_for_jet_count, monitor_for_vertex_count );
152 
153 
154 
156  //auto monitor_for_jet_count = Monitored::Scalar( "jet_count", jetELs.size() );
157  //CHECK( monitor_jets( jetELs ) );
158 
159 
160  // ==========================================================================================================================
161  // ** Prepare input to Hypo Tools
162  // ==========================================================================================================================
163 
165  m_beamSpotKey, context);
166  const InDet::BeamSpotData* beamSpot = beamSpotHandle.retrieve();
167 
168  std::vector< TrigBjetBtagHypoTool::TrigBjetBtagHypoToolInfo > bTagHypoInputs;
169 
170  for ( unsigned int index(0); index<nDecisions; index++ ) {
171 
172  // Extract the IDs of the b-jet chains which are active.
173  // Previous decision IDs.
174  const TrigCompositeUtils::Decision *previousDecision = prevDecisionContainer->at(index);
175 
176  TrigCompositeUtils::DecisionIDContainer previousDecisionIDs {
177  TrigCompositeUtils::decisionIDs( previousDecision ).begin(),
178  TrigCompositeUtils::decisionIDs( previousDecision ).end() };
179 
180  // Retrieve PV from navigation
182  CHECK( retrieveObjectFromNavigation( m_prmVtxLink.value(), vertexEL, previousDecision ) );
183 
184  // Retrieve b-tagging code
186  CHECK( retrieveCollectionFromView< xAOD::BTaggingContainer >( context,
187  bTaggingELs,
188  m_bTagKey,
189  previousDecision ) );
190  CHECK( bTaggingELs.size() == 1 );
191 
192  // Put everything in place
194  infoToAdd.previousDecisionIDs = previousDecisionIDs;
195  infoToAdd.btaggingEL = bTaggingELs.front();
196  infoToAdd.vertexEL = vertexEL;
197  infoToAdd.decision = newDecisions.at( index );
198  infoToAdd.beamSpot = beamSpot;
199  bTagHypoInputs.push_back( infoToAdd );
200  }
201 
202  // ==========================================================================================================================
203 
204  // Run on Trigger Chains
205  for ( const ToolHandle< TrigBjetBtagHypoTool >& tool : m_hypoTools )
206  CHECK( tool->decide( bTagHypoInputs ) );
207 
208  ATH_MSG_DEBUG( "Exiting with " << handle->size() << " decisions" );
209  ATH_MSG_DEBUG( "CHECKING OUTPUT DECISION HANDLE" );
210  CHECK( hypoBaseOutputProcessing(handle) );
211 
212  // ==========================================================================================================================
213 
214  return StatusCode::SUCCESS;
215 }
216 
218 
219  auto monitor_for_jet_pt = Monitored::Collection( "jet_pt", jetELs,
220  [](const ElementLink< xAOD::JetContainer >& jetLink) { return (*jetLink)->pt() / 1000.0 /*Gev*/; } );
221  auto monitor_for_jet_eta = Monitored::Collection( "jet_eta", jetELs,
222  [](const ElementLink< xAOD::JetContainer >& jetLink) { return (*jetLink)->eta(); } );
223  auto monitor_for_jet_phi = Monitored::Collection( "jet_phi", jetELs,
224  [](const ElementLink< xAOD::JetContainer >& jetLink) { return (*jetLink)->phi(); } );
225 
226  auto monitor_for_Bjet_pt = Monitored::Collection( "Bjet_pt", all_bTaggedJetELs,
227  [](const ElementLink< xAOD::JetContainer >& jetLink) { return (*jetLink)->pt() / 1000.0 /*Gev*/; } );
228  auto monitor_for_Bjet_eta = Monitored::Collection( "Bjet_eta", all_bTaggedJetELs,
229  [](const ElementLink< xAOD::JetContainer >& jetLink) { return (*jetLink)->eta(); } );
230  auto monitor_for_Bjet_phi = Monitored::Collection( "Bjet_phi", all_bTaggedJetELs,
231  [](const ElementLink< xAOD::JetContainer >& jetLink) { return (*jetLink)->phi(); } );
232 
233  for( unsigned int i = 0; i < jetELs.size(); i++ ) {
234  const ElementLink< xAOD::JetContainer >& jetLink = jetELs[i];
235  const ElementLink< xAOD::JetContainer >& BjetLink = all_bTaggedJetELs[i];
236  auto monitor_for_jet_delta_pt = Monitored::Scalar( "jet_bjet_delta_pt", (*jetLink)->pt() - (*BjetLink)->pt() );
237  auto monitor_for_jet_delta_eta = Monitored::Scalar( "jet_bjet_delta_eta", (*jetLink)->eta() - (*BjetLink)->eta() );
238  auto monitor_for_jet_delta_phi = Monitored::Scalar( "jet_bjet_delta_phi", (*jetLink)->phi() - (*BjetLink)->phi() );
239  auto monitor_group_for_jet_deltas = Monitored::Group( m_monTool,
240  monitor_for_jet_delta_pt, monitor_for_jet_delta_eta, monitor_for_jet_delta_phi
241  );
242 
243  }
244 
245  auto monitor_group_for_jets = Monitored::Group( m_monTool,
246  monitor_for_jet_pt, monitor_for_jet_eta, monitor_for_jet_phi,
247  monitor_for_Bjet_pt, monitor_for_Bjet_eta, monitor_for_Bjet_phi
248  );
249 
250  return StatusCode::SUCCESS;
251 }
252 
253 StatusCode TrigBjetBtagHypoAlg::monitor_tracks( const EventContext& context, const TrigCompositeUtils::DecisionContainer* prevDecisionContainer ) const {
254  // This vector is for checking we are not reading more than once from the same View, thus retrieving the same objects multiple times!
255  std::vector< ElementLink< ViewContainer > > readViews;
256  for ( const TrigCompositeUtils::Decision* previousDecision: *prevDecisionContainer ) {
257  // get View
258  ElementLink< ViewContainer > viewEL = previousDecision->objectLink< ViewContainer >( TrigCompositeUtils::viewString() );
259  ATH_CHECK( viewEL.isValid() );
260  ATH_MSG_DEBUG( "Retrieved View" );
261 
262  bool alreadyUsed = false;
263  for ( const ElementLink< ViewContainer >& storedViews : readViews ) {
264  if ( viewEL == storedViews ) {
265  ATH_MSG_DEBUG( "We have already used this view!" );
266  alreadyUsed = true;
267  break;
268  }
269  }
270  if ( alreadyUsed ) continue;
271 
272  readViews.push_back( viewEL );
273 
274  // online monitoring for tracks
276  ATH_CHECK( trackHandle.isValid() );
277  size_t Counter = 0;
279  for ( auto it = trackHandle->begin(); it != trackHandle->end(); ++it, ++Counter ) {
280  ElementLink< xAOD::TrackParticleContainer > tracks = ViewHelper::makeLink< xAOD::TrackParticleContainer >( *viewEL, trackHandle, Counter );
281  ATH_CHECK( tracks.isValid() );
282  trackELs.push_back( tracks );
283  }
284  auto monitor_for_track_count = Monitored::Scalar( "track_count", trackELs.size() );
285  auto monitor_group_for_decision = Monitored::Group( m_monTool, monitor_for_track_count);
286 
287  auto monitor_for_track_Et = Monitored::Collection( "track_Et", trackELs,
288  [](const ElementLink< xAOD::TrackParticleContainer >& trackLink) { return (*trackLink)->p4().Et() / 1000.0 /*Gev*/; } );
289  auto monitor_for_track_eta = Monitored::Collection( "track_eta", trackELs,
290  [](const ElementLink< xAOD::TrackParticleContainer >& trackLink) { return (*trackLink)->eta(); } );
291  auto monitor_for_track_phi = Monitored::Collection( "track_phi", trackELs,
292  [](const ElementLink< xAOD::TrackParticleContainer >& trackLink) { return (*trackLink)->phi(); } );
293 
294  // Monitors for d0 and z0 track impact parameter variables
295  auto monitor_for_track_d0 = Monitored::Collection( "track_d0", trackELs,
296  [](const ElementLink< xAOD::TrackParticleContainer >& trackLink) { return (*trackLink)->d0(); } );
297 
298  auto monitor_for_track_d0err = Monitored::Collection( "track_d0err", trackELs,
299  [](const ElementLink< xAOD::TrackParticleContainer >& trackLink) {
300  return Amg::error( (*trackLink)->definingParametersCovMatrix(), 0);
301  } );
302 
303  auto monitor_for_track_d0sig = Monitored::Collection( "track_d0sig", trackELs,
304  [](const ElementLink< xAOD::TrackParticleContainer >& trackLink) {
305  return (*trackLink)->d0() / Amg::error( (*trackLink)->definingParametersCovMatrix(), 0);
306  } );
307 
308  auto monitor_for_track_z0 = Monitored::Collection( "track_z0", trackELs,
309  [](const ElementLink< xAOD::TrackParticleContainer >& trackLink) { return (*trackLink)->z0(); } );
310 
311  auto monitor_for_track_z0err = Monitored::Collection( "track_z0err", trackELs,
312  [](const ElementLink< xAOD::TrackParticleContainer >& trackLink) {
313  return Amg::error( (*trackLink)->definingParametersCovMatrix(), 1);
314  } );
315 
316  auto monitor_for_track_z0sig = Monitored::Collection( "track_z0sig", trackELs,
317  [](const ElementLink< xAOD::TrackParticleContainer >& trackLink) {
318  return (*trackLink)->z0() / Amg::error( (*trackLink)->definingParametersCovMatrix(), 1);
319  } );
320 
321  auto monitor_group_for_tracks = Monitored::Group( m_monTool,
322  monitor_for_track_Et, monitor_for_track_eta, monitor_for_track_phi,
323  monitor_for_track_d0, monitor_for_track_d0err, monitor_for_track_d0sig,
324  monitor_for_track_z0, monitor_for_track_z0err, monitor_for_track_z0sig
325  );
326 
327  }
328  return StatusCode::SUCCESS;
329 }
330 
331 
333  auto monitor_pu = Monitored::Collection( "btag_"+var_name+"_pu", bTaggingEL,
335  double pu = -1;
336  (*bTagLink)->pu( var_name, pu );
337  return pu;
338  } );
339 
340  auto monitor_pb = Monitored::Collection( "btag_"+var_name+"_pb", bTaggingEL,
342  double pb = -1;
343  (*bTagLink)->pb( var_name, pb );
344  return pb;
345  } );
346 
347  auto monitor_pc = Monitored::Collection( "btag_"+var_name+"_pc", bTaggingEL,
349  double pc = -1;
350  (*bTagLink)->pc( var_name, pc );
351  return pc;
352  } );
353 
354  auto monitor_llr = Monitored::Collection( "btag_"+var_name+"_llr", bTaggingEL,
356  double llr = -1;
357  (*bTagLink)->loglikelihoodratio( var_name, llr );
358  return llr;
359  } );
360 
361  auto monitor_group_for_flavor_tag_var = Monitored::Group( m_monTool, monitor_pu, monitor_pb, monitor_pc, monitor_llr );
362 
363  return StatusCode::SUCCESS;
364 }
365 
367 
368  auto monitor_pb = Monitored::Collection( "bbtag_"+var_name+"_pb", bTaggingEL,
370  double pb = -1;
372  pb = acc(**bTagLink);
373  return pb;
374  } );
375 
376  auto monitor_pbb = Monitored::Collection( "bbtag_"+var_name+"_pbb", bTaggingEL,
378  double pbb = -1;
380  pbb = acc(**bTagLink);
381  return pbb;
382  } );
383 
384  auto monitor_group_for_flavor_bb_tag_var = Monitored::Group( m_monTool, monitor_pb, monitor_pbb );
385 
386  return StatusCode::SUCCESS;
387 }
388 
389 
391  auto monitor_for_primVtx_x = Monitored::Scalar( "primVtx_x", (*primVertexEL)->x() );
392  auto monitor_for_primVtx_y = Monitored::Scalar( "primVtx_y", (*primVertexEL)->y() );
393  auto monitor_for_primVtx_z = Monitored::Scalar( "primVtx_z", (*primVertexEL)->z() );
394 
395  auto monitor_group_for_primary_vertex = Monitored::Group( m_monTool, monitor_for_primVtx_x, monitor_for_primVtx_y, monitor_for_primVtx_z );
396  return StatusCode::SUCCESS;
397 }
398 
399 
401  const ElementLinkVector< xAOD::BTaggingContainer >& bTaggingEL, std::string tagger ) const {
402 
404  for (const ElementLink< xAOD::BTaggingContainer > bTagLink : bTaggingEL) {
405  SG::ConstAccessor<char> acc(tagger+"_isDefaults");
406  if ( not acc(**bTagLink) ) { valid_bTaggingEL.push_back( bTagLink ); }
407  }
408  return valid_bTaggingEL;
409 }
410 
411 
413  // Monitor high-level tagger flavor probabilites
414  CHECK( monitor_flavor_probabilities(bTaggingEL, "DL1r") );
415  CHECK( monitor_flavor_probabilities(bTaggingEL, "rnnip") );
416  CHECK( monitor_flavor_probabilities(bTaggingEL, "DL1d20211216") );
417  CHECK( monitor_flavor_probabilities(bTaggingEL, "dips20211116") );
418  CHECK( monitor_flavor_probabilities(bTaggingEL, "GN120220813") );
419  CHECK( monitor_flavor_probabilities(bTaggingEL, "GN220240122") );
420 
421  // Monitor JetFitter
422  MONITOR_BTAG_AUX_VAR(JetFitter_isDefaults, char, bTaggingEL);
423  auto validJetFitter_bTaggingEL = collect_valid_links(bTaggingEL, "JetFitter");
424  MONITOR_BTAG_AUX_VAR(JetFitter_N2Tpair, int, validJetFitter_bTaggingEL);
425  MONITOR_BTAG_AUX_VAR(JetFitter_nVTX, int, validJetFitter_bTaggingEL);
426  MONITOR_BTAG_AUX_VAR(JetFitter_nSingleTracks, int, validJetFitter_bTaggingEL);
427  MONITOR_BTAG_AUX_VAR(JetFitter_nTracksAtVtx, int, validJetFitter_bTaggingEL);
428  MONITOR_BTAG_AUX_VAR(JetFitter_mass, float, validJetFitter_bTaggingEL);
429  MONITOR_BTAG_AUX_VAR(JetFitter_energyFraction, float, validJetFitter_bTaggingEL);
430  MONITOR_BTAG_AUX_VAR(JetFitter_significance3d, float, validJetFitter_bTaggingEL);
431  MONITOR_BTAG_AUX_VAR(JetFitter_deltaeta, float, validJetFitter_bTaggingEL);
432  MONITOR_BTAG_AUX_VAR(JetFitter_deltaphi, float, validJetFitter_bTaggingEL);
433  MONITOR_BTAG_AUX_VAR(JetFitter_deltaR, float, validJetFitter_bTaggingEL);
434  auto monitor_group_for_JetFitter = Monitored::Group( m_monTool,
435  monitor_for_JetFitter_N2Tpair, monitor_for_JetFitter_nVTX,
436  monitor_for_JetFitter_nSingleTracks, monitor_for_JetFitter_nTracksAtVtx,
437  monitor_for_JetFitter_mass, monitor_for_JetFitter_energyFraction,
438  monitor_for_JetFitter_significance3d, monitor_for_JetFitter_deltaeta,
439  monitor_for_JetFitter_deltaphi, monitor_for_JetFitter_deltaR
440  );
441 
442  // Monitor SV1
443  MONITOR_BTAG_AUX_VAR(SV1_isDefaults, char, bTaggingEL);
444  auto validSV1_bTaggingEL = collect_valid_links(bTaggingEL, "SV1");
445  MONITOR_BTAG_AUX_VAR(SV1_NGTinSvx, int, validSV1_bTaggingEL);
446  MONITOR_BTAG_AUX_VAR(SV1_masssvx, float, validSV1_bTaggingEL);
447  MONITOR_BTAG_AUX_VAR(SV1_N2Tpair, int, validSV1_bTaggingEL);
448  MONITOR_BTAG_AUX_VAR(SV1_efracsvx, float, validSV1_bTaggingEL);
449  MONITOR_BTAG_AUX_VAR(SV1_deltaR, float, validSV1_bTaggingEL);
450  MONITOR_BTAG_AUX_VAR(SV1_Lxy, float, validSV1_bTaggingEL);
451  MONITOR_BTAG_AUX_VAR(SV1_L3d, float, validSV1_bTaggingEL);
452  MONITOR_BTAG_AUX_VAR(SV1_significance3d, float, validSV1_bTaggingEL);
453  auto monitor_group_for_SV1 = Monitored::Group( m_monTool,
454  monitor_for_SV1_NGTinSvx, monitor_for_SV1_masssvx,
455  monitor_for_SV1_N2Tpair, monitor_for_SV1_efracsvx,
456  monitor_for_SV1_deltaR, monitor_for_SV1_Lxy,
457  monitor_for_SV1_L3d, monitor_for_SV1_significance3d
458  );
459 
460  // Monitor JetFitterSecondaryVertex
461  MONITOR_BTAG_AUX_VAR(JetFitterSecondaryVertex_isDefaults, char, bTaggingEL);
462  auto validJFSV_bTaggingEL = collect_valid_links(bTaggingEL, "JetFitterSecondaryVertex");
463  MONITOR_BTAG_AUX_VAR(JetFitterSecondaryVertex_nTracks, int, validJFSV_bTaggingEL);
464  MONITOR_BTAG_AUX_VAR(JetFitterSecondaryVertex_mass, float, validJFSV_bTaggingEL);
465  MONITOR_BTAG_AUX_VAR(JetFitterSecondaryVertex_energy, float, validJFSV_bTaggingEL);
466  MONITOR_BTAG_AUX_VAR(JetFitterSecondaryVertex_energyFraction, float, validJFSV_bTaggingEL);
467  MONITOR_BTAG_AUX_VAR(JetFitterSecondaryVertex_displacement3d, float, validJFSV_bTaggingEL);
468  MONITOR_BTAG_AUX_VAR(JetFitterSecondaryVertex_displacement2d, float, validJFSV_bTaggingEL);
469  MONITOR_BTAG_AUX_VAR(JetFitterSecondaryVertex_maximumTrackRelativeEta, float, validJFSV_bTaggingEL);
470  MONITOR_BTAG_AUX_VAR(JetFitterSecondaryVertex_minimumTrackRelativeEta, float, validJFSV_bTaggingEL);
471  MONITOR_BTAG_AUX_VAR(JetFitterSecondaryVertex_averageTrackRelativeEta, float, validJFSV_bTaggingEL);
472  MONITOR_BTAG_AUX_VAR(JetFitterSecondaryVertex_maximumAllJetTrackRelativeEta, float, validJFSV_bTaggingEL);
473  MONITOR_BTAG_AUX_VAR(JetFitterSecondaryVertex_minimumAllJetTrackRelativeEta, float, validJFSV_bTaggingEL);
474  MONITOR_BTAG_AUX_VAR(JetFitterSecondaryVertex_averageAllJetTrackRelativeEta, float, validJFSV_bTaggingEL);
475  auto monitor_group_for_JFSV = Monitored::Group( m_monTool,
476  monitor_for_JetFitterSecondaryVertex_nTracks,
477  monitor_for_JetFitterSecondaryVertex_mass,
478  monitor_for_JetFitterSecondaryVertex_energy,
479  monitor_for_JetFitterSecondaryVertex_energyFraction,
480  monitor_for_JetFitterSecondaryVertex_displacement3d,
481  monitor_for_JetFitterSecondaryVertex_displacement2d,
482  monitor_for_JetFitterSecondaryVertex_maximumTrackRelativeEta,
483  monitor_for_JetFitterSecondaryVertex_minimumTrackRelativeEta,
484  monitor_for_JetFitterSecondaryVertex_averageTrackRelativeEta,
485  monitor_for_JetFitterSecondaryVertex_maximumAllJetTrackRelativeEta,
486  monitor_for_JetFitterSecondaryVertex_minimumAllJetTrackRelativeEta,
487  monitor_for_JetFitterSecondaryVertex_averageAllJetTrackRelativeEta
488  );
489 
490 
491  auto monitor_group_for_btagging = Monitored::Group( m_monTool,
492  monitor_for_JetFitter_isDefaults,
493  monitor_for_SV1_isDefaults,
494  monitor_for_JetFitterSecondaryVertex_isDefaults
495  );
496 
497  return StatusCode::SUCCESS;
498 }
499 
MONITOR_BTAG_AUX_VAR
#define MONITOR_BTAG_AUX_VAR(VAR_NAME, VAR_TYPE, CONTAINER)
Definition: TrigBjetBtagHypoAlg.h:31
xAOD::JetFitter_deltaeta
@ JetFitter_deltaeta
JetFitter : Delta eta between jet and momentum sum of all tracks associated with displaced vertices r...
Definition: BTaggingEnums.h:56
TrigDefs::Group
Group
Properties of a chain group.
Definition: GroupProperties.h:13
ElementLinkVector::front
const_reference front() const
Definition: AthLinks/ElementLinkVector.h:309
TrigBjetBtagHypoAlg.h
TrigBjetBtagHypoAlg::monitor_flavor_bb_probabilities
virtual StatusCode monitor_flavor_bb_probabilities(const ElementLinkVector< xAOD::BTaggingContainer > &bTaggingEL, const std::string &var_name) const
Definition: TrigBjetBtagHypoAlg.cxx:366
TrigBjetBtagHypoAlg::initialize
virtual StatusCode initialize()
Definition: TrigBjetBtagHypoAlg.cxx:15
TrigBjetBtagHypoAlg::m_bTaggedJetKey
SG::ReadHandleKey< xAOD::JetContainer > m_bTaggedJetKey
Definition: TrigBjetBtagHypoAlg.h:63
TrigBjetBtagHypoAlg::monitor_btagging
virtual StatusCode monitor_btagging(const ElementLinkVector< xAOD::BTaggingContainer > &bTaggingEL) const
Definition: TrigBjetBtagHypoAlg.cxx:412
keylayer_zslicemap.pb
pb
Definition: keylayer_zslicemap.py:188
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
CheckAppliedSFs.var_name
var_name
Definition: CheckAppliedSFs.py:241
TrigCompositeUtils::newDecisionIn
Decision * newDecisionIn(DecisionContainer *dc, const std::string &name)
Helper method to create a Decision object, place it in the container and return a pointer to it.
Definition: TrigCompositeUtilsRoot.cxx:46
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
index
Definition: index.py:1
TrigCompositeUtils::hypoAlgNodeName
const std::string & hypoAlgNodeName()
Definition: TrigCompositeUtilsRoot.cxx:906
xAOD::JetFitter_nSingleTracks
@ JetFitter_nSingleTracks
JetFitter : Number of single tracks.
Definition: BTaggingEnums.h:46
EventPrimitivesHelpers.h
ViewHelper::makeHandle
SG::ReadHandle< T > makeHandle(const SG::View *view, const SG::ReadHandleKey< T > &rhKey, const EventContext &context)
navigate from the TrigComposite to nearest view and fetch object from it
Definition: ViewHelper.h:258
TrigBjetBtagHypoTool::TrigBjetBtagHypoToolInfo::beamSpot
const InDet::BeamSpotData * beamSpot
Definition: TrigBjetBtagHypoTool.h:43
AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::renounce
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce(T &h)
Definition: AthCommonDataStore.h:380
skel.it
it
Definition: skel.GENtoEVGEN.py:423
TrigBjetBtagHypoAlg::m_trackKey
SG::ReadHandleKey< xAOD::TrackParticleContainer > m_trackKey
Definition: TrigBjetBtagHypoAlg.h:65
TrigBjetHypoAlgBase::retrieveObjectFromEventView
StatusCode retrieveObjectFromEventView(const EventContext &, ElementLinkVector< CONTAINER > &, const SG::ReadHandleKey< CONTAINER > &, const TrigCompositeUtils::DecisionContainer *) const
TrigCompositeUtils::createAndStore
SG::WriteHandle< DecisionContainer > createAndStore(const SG::WriteHandleKey< DecisionContainer > &key, const EventContext &ctx)
Creates and right away records the DecisionContainer with the key.
Definition: TrigCompositeUtilsRoot.cxx:30
xAOD::SV1_N2Tpair
@ SV1_N2Tpair
SV1 : Number of 2-track pairs.
Definition: BTaggingEnums.h:35
SG::ConstAccessor< float >
TrigBjetBtagHypoTool::TrigBjetBtagHypoToolInfo::btaggingEL
ElementLink< xAOD::BTaggingContainer > btaggingEL
Definition: TrigBjetBtagHypoTool.h:40
TrigBjetHypoAlgBase::retrieveCollectionFromNavigation
StatusCode retrieveCollectionFromNavigation(const std::string &linkName, ElementLinkVector< CONTAINER > &objELs, const TrigCompositeUtils::DecisionContainer *) const
TrigBjetBtagHypoTool::TrigBjetBtagHypoToolInfo::vertexEL
ElementLink< xAOD::VertexContainer > vertexEL
Definition: TrigBjetBtagHypoTool.h:41
HypoBase::decisionOutput
const SG::WriteHandleKey< TrigCompositeUtils::DecisionContainer > & decisionOutput() const
methods for derived classes to access handles of the base class output other read/write handles may b...
Definition: HypoBase.cxx:20
ElementLinkVector::push_back
void push_back(const ElemLink &link)
Definition: AthLinks/ElementLinkVector.h:316
TrigBjetBtagHypoAlg::collect_valid_links
virtual ElementLinkVector< xAOD::BTaggingContainer > collect_valid_links(const ElementLinkVector< xAOD::BTaggingContainer > &bTaggingEL, std::string tagger) const
Definition: TrigBjetBtagHypoAlg.cxx:400
Monitored::Collection
ValuesCollection< T > Collection(std::string name, const T &collection)
Declare a monitored (double-convertible) collection.
Definition: MonitoredCollection.h:38
xAOD::JetFitter_energyFraction
@ JetFitter_energyFraction
JetFitter : Jet efrac.
Definition: BTaggingEnums.h:52
xAOD::JetFitter_nVTX
@ JetFitter_nVTX
JetFitter : Number of vertices.
Definition: BTaggingEnums.h:44
TrigBjetBtagHypoAlg::m_bTagKey
SG::ReadHandleKey< xAOD::BTaggingContainer > m_bTagKey
Definition: TrigBjetBtagHypoAlg.h:64
TrigBjetBtagHypoAlg::m_prmVtxLink
Gaudi::Property< std::string > m_prmVtxLink
Definition: TrigBjetBtagHypoAlg.h:69
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
SG::ReadCondHandle::retrieve
const_pointer_type retrieve()
Definition: ReadCondHandle.h:162
TrigBjetBtagHypoAlg::monitor_primary_vertex
virtual StatusCode monitor_primary_vertex(const ElementLink< xAOD::VertexContainer > &primVertexEL) const
Definition: TrigBjetBtagHypoAlg.cxx:390
lumiFormat.i
int i
Definition: lumiFormat.py:92
HypoBase::hypoBaseOutputProcessing
StatusCode hypoBaseOutputProcessing(SG::WriteHandle< TrigCompositeUtils::DecisionContainer > &outputHandle, MSG::Level lvl=MSG::DEBUG) const
Base class function to be called once slice specific code has finished. Handles debug printing and va...
Definition: HypoBase.cxx:33
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
SG::WriteHandle::ptr
pointer_type ptr()
Dereference the pointer.
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
xAOD::VxType::PriVtx
@ PriVtx
Primary vertex.
Definition: TrackingPrimitives.h:571
TrigBjetHypoAlgBase::retrievePreviousDecisionContainer
StatusCode retrievePreviousDecisionContainer(const EventContext &, const TrigCompositeUtils::DecisionContainer *&) const
Definition: TrigBjetHypoAlgBase.cxx:15
xAOD::JetFitter_mass
@ JetFitter_mass
JetFitter : Jet mass.
Definition: BTaggingEnums.h:50
xAOD::JetFitter_nTracksAtVtx
@ JetFitter_nTracksAtVtx
JetFitter : Number of tracks at vertex.
Definition: BTaggingEnums.h:48
AthenaPoolTestRead.acc
acc
Definition: AthenaPoolTestRead.py:16
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
CHECK
#define CHECK(...)
Evaluate an expression and check for errors.
Definition: Control/AthenaKernel/AthenaKernel/errorcheck.h:422
xAOD::SV1_efracsvx
@ SV1_efracsvx
SV1 : energy fraction.
Definition: BTaggingEnums.h:39
SG::VarHandleKey::initialize
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:103
xAOD::TrigComposite_v1
Class used to describe composite objects in the HLT.
Definition: TrigComposite_v1.h:52
DataVector
Derived DataVector<T>.
Definition: DataVector.h:581
TrigBjetBtagHypoAlg::monitor_flavor_probabilities
virtual StatusCode monitor_flavor_probabilities(const ElementLinkVector< xAOD::BTaggingContainer > &bTaggingEL, const std::string &var_name) const
Definition: TrigBjetBtagHypoAlg.cxx:332
DeMoUpdate.toAdd
bool toAdd
Definition: DeMoUpdate.py:1304
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
TrigBjetHypoAlgBase::retrieveObjectFromStoreGate
StatusCode retrieveObjectFromStoreGate(const EventContext &, ElementLinkVector< CONTAINER > &, const SG::ReadHandleKey< CONTAINER > &) const
xAOD::JetFitter_significance3d
@ JetFitter_significance3d
JetFitter : 3D vertex significance.
Definition: BTaggingEnums.h:54
TrigBjetHypoAlgBase
Definition: TrigBjetHypoAlgBase.h:18
TrigCompositeUtils::featureString
const std::string & featureString()
Definition: TrigCompositeUtilsRoot.cxx:886
xAOD::JetFitter_N2Tpair
@ JetFitter_N2Tpair
JetFitter : Number of 2-track pairs.
Definition: BTaggingEnums.h:60
TrigBjetHypoAlgBase::retrieveCollectionFromView
StatusCode retrieveCollectionFromView(const EventContext &, ElementLinkVector< CONTAINER > &, const SG::ReadHandleKey< CONTAINER > &, const TrigCompositeUtils::Decision *) const
ElementLinkVector
ElementLinkVector implementation for standalone ROOT.
Definition: AthLinks/ElementLinkVector.h:27
TrigBjetBtagHypoAlg::monitor_tracks
virtual StatusCode monitor_tracks(const EventContext &context, const TrigCompositeUtils::DecisionContainer *prevDecisionContainer) const
Definition: TrigBjetBtagHypoAlg.cxx:253
xAOD::SV1_NGTinSvx
@ SV1_NGTinSvx
SV1 : Number of good tracks in vertex.
Definition: BTaggingEnums.h:33
TrigBjetBtagHypoAlg::m_inputPrmVtx
SG::ReadHandleKey< xAOD::VertexContainer > m_inputPrmVtx
Definition: TrigBjetBtagHypoAlg.h:66
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
Amg::error
double error(const Amg::MatrixX &mat, int index)
return diagonal error of the matrix caller should ensure the matrix is symmetric and the index is in ...
Definition: EventPrimitivesHelpers.h:40
TrigBjetBtagHypoAlg::monitor_jets
virtual StatusCode monitor_jets(const ElementLinkVector< xAOD::JetContainer > &jetELs, const ElementLinkVector< xAOD::JetContainer > &all_bTaggedJetELs) const
Definition: TrigBjetBtagHypoAlg.cxx:217
AtlCoolConsole.tool
tool
Definition: AtlCoolConsole.py:453
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
DataVector::end
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
CheckAppliedSFs.pu
pu
Definition: CheckAppliedSFs.py:311
SG::WriteHandle
Definition: StoreGate/StoreGate/WriteHandle.h:76
DeMoScan.index
string index
Definition: DeMoScan.py:362
ElementLinkVector::size
size_type size() const
Definition: AthLinks/ElementLinkVector.h:292
InDet::BeamSpotData
Definition: BeamSpotData.h:21
TrigCompositeUtils::DecisionIDContainer
std::set< DecisionID > DecisionIDContainer
Definition: TrigComposite_v1.h:28
TrigBjetBtagHypoAlg::m_btaggingLinkName
Gaudi::Property< std::string > m_btaggingLinkName
Definition: TrigBjetBtagHypoAlg.h:70
TrigBjetBtagHypoAlg::TrigBjetBtagHypoAlg
TrigBjetBtagHypoAlg()
TrigBjetBtagHypoAlg::m_monTool
ToolHandle< GenericMonitoringTool > m_monTool
Definition: TrigBjetBtagHypoAlg.h:61
TrigBjetBtagHypoAlg::m_hypoTools
ToolHandleArray< TrigBjetBtagHypoTool > m_hypoTools
Definition: TrigBjetBtagHypoAlg.h:60
TrigBjetBtagHypoTool::TrigBjetBtagHypoToolInfo
Definition: TrigBjetBtagHypoTool.h:38
TrigCompositeUtils::decisionIDs
void decisionIDs(const Decision *d, DecisionIDContainer &destination)
Extracts DecisionIDs stored in the Decision object.
Definition: TrigCompositeUtilsRoot.cxx:67
TrigBjetBtagHypoTool::TrigBjetBtagHypoToolInfo::previousDecisionIDs
TrigCompositeUtils::DecisionIDContainer previousDecisionIDs
Definition: TrigBjetBtagHypoTool.h:39
xAOD::JetFitter_deltaphi
@ JetFitter_deltaphi
JetFitter : Delta phi between jet and momentum sum of all tracks associated with displaced vertices r...
Definition: BTaggingEnums.h:58
TrigBjetHypoAlgBase::retrieveObjectFromNavigation
StatusCode retrieveObjectFromNavigation(const std::string &, ElementLink< CONTAINER > &, const TrigCompositeUtils::Decision *) const
python.BuildSignatureFlags.beamSpot
AthConfigFlags beamSpot(AthConfigFlags flags, str instanceName, str recoMode)
Definition: BuildSignatureFlags.py:402
TrigBjetBtagHypoAlg::m_beamSpotKey
SG::ReadCondHandleKey< InDet::BeamSpotData > m_beamSpotKey
Definition: TrigBjetBtagHypoAlg.h:72
DataVector::at
const T * at(size_type n) const
Access an element, as an rvalue.
ConstAccessor.h
Helper class to provide constant type-safe access to aux data.
Monitored::Scalar
Declare a monitored scalar variable.
Definition: MonitoredScalar.h:34
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
TrigBjetBtagHypoAlg::execute
virtual StatusCode execute(const EventContext &context) const
Definition: TrigBjetBtagHypoAlg.cxx:36
TrigCompositeUtils::viewString
const std::string & viewString()
Definition: TrigCompositeUtilsRoot.cxx:882
python.SystemOfUnits.pc
float pc
Definition: SystemOfUnits.py:99
DataVector::begin
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
xAOD::SV1_masssvx
@ SV1_masssvx
SV1 : vertex mass.
Definition: BTaggingEnums.h:37
TrigBjetBtagHypoTool::TrigBjetBtagHypoToolInfo::decision
TrigCompositeUtils::Decision * decision
Definition: TrigBjetBtagHypoTool.h:42
ViewContainer
Definition: View.h:161