Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
Public Member Functions | Static Public Member Functions | Protected Member Functions | Private Types | Private Member Functions | Private Attributes | List of all members
TrigDisappearingTrackHypoAlg Class Reference

Implements Hypo selection on triggering disappearing tracks. More...

#include <TrigDisappearingTrackHypoAlg.h>

Inheritance diagram for TrigDisappearingTrackHypoAlg:
Collaboration diagram for TrigDisappearingTrackHypoAlg:

Public Member Functions

 TrigDisappearingTrackHypoAlg (const std::string &name, ISvcLocator *pSvcLocator)
 
virtual StatusCode initialize () override
 
virtual StatusCode execute (const EventContext &context) const override
 
virtual StatusCode sysInitialize () override
 initialise this base class More...
 
virtual bool isClonable () const override
 Specify if the algorithm is clonable. More...
 
virtual unsigned int cardinality () const override
 Cardinality (Maximum number of clones that can exist) special value 0 means that algorithm is reentrant. More...
 
virtual StatusCode sysExecute (const EventContext &ctx) override
 Execute an algorithm. More...
 
virtual const DataObjIDColl & extraOutputDeps () const override
 Return the list of extra output dependencies. More...
 
virtual bool filterPassed (const EventContext &ctx) const
 
virtual void setFilterPassed (bool state, const EventContext &ctx) const
 
ServiceHandle< StoreGateSvc > & evtStore ()
 The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc. More...
 
const ServiceHandle< StoreGateSvc > & evtStore () const
 The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc. More...
 
const ServiceHandle< StoreGateSvc > & detStore () const
 The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc. More...
 
virtual StatusCode sysStart () override
 Handle START transition. More...
 
virtual std::vector< Gaudi::DataHandle * > inputHandles () const override
 Return this algorithm's input handles. More...
 
virtual std::vector< Gaudi::DataHandle * > outputHandles () const override
 Return this algorithm's output handles. More...
 
Gaudi::Details::PropertyBase & declareProperty (Gaudi::Property< T > &t)
 
Gaudi::Details::PropertyBase * declareProperty (const std::string &name, SG::VarHandleKey &hndl, const std::string &doc, const SG::VarHandleKeyType &)
 Declare a new Gaudi property. More...
 
Gaudi::Details::PropertyBase * declareProperty (const std::string &name, SG::VarHandleBase &hndl, const std::string &doc, const SG::VarHandleType &)
 Declare a new Gaudi property. More...
 
Gaudi::Details::PropertyBase * declareProperty (const std::string &name, SG::VarHandleKeyArray &hndArr, const std::string &doc, const SG::VarHandleKeyArrayType &)
 
Gaudi::Details::PropertyBase * declareProperty (const std::string &name, T &property, const std::string &doc, const SG::NotHandleType &)
 Declare a new Gaudi property. More...
 
Gaudi::Details::PropertyBase * declareProperty (const std::string &name, T &property, const std::string &doc="none")
 Declare a new Gaudi property. More...
 
void updateVHKA (Gaudi::Details::PropertyBase &)
 
MsgStream & msg () const
 
MsgStream & msg (const MSG::Level lvl) const
 
bool msgLvl (const MSG::Level lvl) const
 

Static Public Member Functions

static StatusCode runtimeValidation (SG::WriteHandle< TrigCompositeUtils::DecisionContainer > &outputHandle, MsgStream &msg, bool onlyValidateOneStep=true, bool runTwoConversion=false)
 Executes all individual runtime tests. More...
 

Protected Member Functions

const SG::ReadHandleKey< TrigCompositeUtils::DecisionContainer > & decisionInput () const
 methods for derived classes to access handles of the base class input other read/write handles may be implemented by derived classes More...
 
const SG::WriteHandleKey< TrigCompositeUtils::DecisionContainer > & decisionOutput () const
 methods for derived classes to access handles of the base class output other read/write handles may be implemented by derived classes
More...
 
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 validation. More...
 
void renounceArray (SG::VarHandleKeyArray &handlesArray)
 remove all handles from I/O resolution More...
 
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)
 
void extraDeps_update_handler (Gaudi::Details::PropertyBase &ExtraDeps)
 Add StoreName to extra input/output deps as needed. More...
 

Private Types

typedef ServiceHandle< StoreGateSvcStoreGateSvc_t
 

Private Member Functions

StatusCode createCandidates (const xAOD::TrigCompositeContainer *, xAOD::TrigCompositeContainer *) const
 
float bdt_eval_pix4l_sct0 (float, float, float, float, float, float, float, float, int, float, float, int) const
 
float bdt_eval_pix4l_sct1p (float, float, float, float, int, float, float, float, float, int, float, int) const
 
float bdt_eval_pix3l_sct0 (float, float, float, float, float, float, float, float, float, float, int, int) const
 
float bdt_eval_pix3l_sct1p (float, float, float, float, float, float, int, int, float, int, int, float, float, float, float) const
 
float BDTinput (float) const
 
StatusCode printDebugInformation (SG::WriteHandle< TrigCompositeUtils::DecisionContainer > &outputHandle, MSG::Level lvl) const
 Common base function to print information on chains passed by objects considered in the hypo. More...
 
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey> More...
 
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T > &hndl, const SG::VarHandleKeyArrayType &)
 specialization for handling Gaudi::Property<SG::VarHandleKeyArray> More...
 
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T > &hndl, const SG::VarHandleType &)
 specialization for handling Gaudi::Property<SG::VarHandleBase> More...
 
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T > &t, const SG::NotHandleType &)
 specialization for handling everything that's not a Gaudi::Property<SG::VarHandleKey> or a <SG::VarHandleKeyArray> More...
 

Private Attributes

ToolHandleArray< TrigDisappearingTrackHypoToolm_hypoTools {this, "HypoTools", {}, "Tools to perfrom selection"}
 
SG::ReadHandleKey< xAOD::TrigCompositeContainerm_DisTrkCandKey {this, "DisTrkCand", "HLT_DisTrkCand", ""}
 
SG::WriteHandleKey< xAOD::TrigCompositeContainerm_DisTrkBDTSelKey {this, "DisTrkBDTSel","HLT_DisTrkBDTSel", ""}
 
ToolHandle< GenericMonitoringToolm_monTool { this, "MonTool", "", "Monitoring tool" }
 
std::unique_ptr< MVAUtils::BDTm_bdt [4]
 
SG::ReadHandleKey< TrigCompositeUtils::DecisionContainerm_input { this, "HypoInputDecisions", "UNSPECIFIED_INPUT", "Input Decision (implicit)" }
 input decisions More...
 
SG::WriteHandleKey< TrigCompositeUtils::DecisionContainerm_output { this, "HypoOutputDecisions", "UNSPECIFIED_OUTPUT", "Ouput Decision" }
 output decisions More...
 
Gaudi::Property< bool > m_runtimeValidation { this, "RuntimeValidation", false, "Enable detailed runtime validation of HypoAlg output, and upstream Decisions." }
 Enabling of detailed validation checks for use during development. More...
 
DataObjIDColl m_extendedExtraObjects
 Extra output dependency collection, extended by AthAlgorithmDHUpdate to add symlinks. More...
 
StoreGateSvc_t m_evtStore
 Pointer to StoreGate (event store by default) More...
 
StoreGateSvc_t m_detStore
 Pointer to StoreGate (detector store by default) More...
 
std::vector< SG::VarHandleKeyArray * > m_vhka
 
bool m_varHandleArraysDeclared
 

Runtime validation methods


enum  LogicalFlowCheckMode { kRequireOne, kRequireAll }
 
static StatusCode validateHasLinks (const ElementLink< TrigCompositeUtils::DecisionContainer > &dEL, MsgStream &msg)
 Ensure all Decisions have the named ElementLink graph edges which they are required to by spec. More...
 
static StatusCode validateLogicalFlow (const ElementLink< TrigCompositeUtils::DecisionContainer > &dEL, MsgStream &msg, const LogicalFlowCheckMode mode)
 Ensure that all DecisionIDs have propagated correctly from their parent. More...
 
static StatusCode validateDuplicatedDecisionID (const ElementLink< TrigCompositeUtils::DecisionContainer > &dEL, MsgStream &msg)
 Ensure that no space is being wasted by duplicated DecisionIDs in any Decision objects. More...
 
static StatusCode validateDecisionIDs (const ElementLink< TrigCompositeUtils::DecisionContainer > &dEL, MsgStream &msg)
 Ensure that all present IDs correspond to configured chains. More...
 
static StatusCode validateParentLinking (const ElementLink< TrigCompositeUtils::DecisionContainer > &dEL, MsgStream &msg, bool runTwoConversion)
 Ensure that the Decision has at least one valid parent, unless it is a initial Decision from the HLTSeeding. More...
 
static StatusCode recursiveValidateGraph (const ElementLink< TrigCompositeUtils::DecisionContainer > &dEL, MsgStream &msg, bool onlyValidateOneStep, bool runTwoConversion, size_t callDepth, std::set< const TrigCompositeUtils::Decision * > &fullyExploredFrom)
 Execute all checks on one node in the graph, d, then recursive call self on all parent nodes up to L1. More...
 
static void printBangs (MsgStream &msg)
 Print header line. More...
 
static void printErrorHeader (const ElementLink< TrigCompositeUtils::DecisionContainer > &dEL, MsgStream &msg)
 A problem was found, print common output data. More...
 

Detailed Description

Implements Hypo selection on triggering disappearing tracks.

Author
Kunihiro Nagano kunih.nosp@m.iro..nosp@m.nagan.nosp@m.o@ce.nosp@m.rn.ch - KEK

Definition at line 23 of file TrigDisappearingTrackHypoAlg.h.

Member Typedef Documentation

◆ StoreGateSvc_t

typedef ServiceHandle<StoreGateSvc> AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::StoreGateSvc_t
privateinherited

Definition at line 388 of file AthCommonDataStore.h.

Member Enumeration Documentation

◆ LogicalFlowCheckMode

enum HypoBase::LogicalFlowCheckMode
privateinherited
Enumerator
kRequireOne 

Require all DecisionIDs to be present in at least one of my parent Decision objects.

kRequireAll 

Definition at line 52 of file HypoBase.h.

52  {
53  kRequireOne,
54  kRequireAll //<! Require all DecisionIDs to be present in all of my parent Decision objects
55  };

Constructor & Destructor Documentation

◆ TrigDisappearingTrackHypoAlg()

TrigDisappearingTrackHypoAlg::TrigDisappearingTrackHypoAlg ( const std::string &  name,
ISvcLocator *  pSvcLocator 
)

Definition at line 35 of file TrigDisappearingTrackHypoAlg.cxx.

36  :
37  ::HypoBase( name, pSvcLocator ) {}

Member Function Documentation

◆ bdt_eval_pix3l_sct0()

float TrigDisappearingTrackHypoAlg::bdt_eval_pix3l_sct0 ( float  pt,
float  z0,
float  d0,
float  chi2ndof,
float  chi2ndof_pix,
float  trkiso3_dr01,
float  trkiso3_dr0201,
float  refit_pt,
float  refit_z0,
float  refit_d0,
int  n_pix,
int  n_bl 
) const
private

Definition at line 524 of file TrigDisappearingTrackHypoAlg.cxx.

527 {
528  const std::vector<float> input_values = {
529  BDTinput(pt),
530  BDTinput(z0),
531  BDTinput(d0),
532  BDTinput(chi2ndof),
533  BDTinput(chi2ndof_pix),
534  BDTinput(trkiso3_dr01),
535  BDTinput(trkiso3_dr0201),
536  BDTinput(refit_pt),
537  BDTinput(refit_z0),
538  BDTinput(refit_d0),
539  BDTinput((float)n_pix),
540  BDTinput((float)n_bl)
541  };
542 
543  return m_bdt[2]->GetClassification(input_values);
544 }

◆ bdt_eval_pix3l_sct1p()

float TrigDisappearingTrackHypoAlg::bdt_eval_pix3l_sct1p ( float  pt,
float  z0,
float  d0,
float  refit_pt,
float  refit_z0,
float  refit_d0,
int  n_pix,
int  n_sct,
float  refit_ptratio,
int  is_fail,
int  n_bl,
float  chi2ndof,
float  trkiso3_dr01,
float  trkiso3_dr0201,
float  refit_chi2ndof 
) const
private

Definition at line 546 of file TrigDisappearingTrackHypoAlg.cxx.

550 {
551  const std::vector<float> input_values = {
552  BDTinput(pt),
553  BDTinput(z0),
554  BDTinput(d0),
555  BDTinput(refit_pt),
556  BDTinput(refit_z0),
557  BDTinput(refit_d0),
558  BDTinput((float)n_pix),
559  BDTinput((float)n_sct),
560  BDTinput(refit_ptratio),
561  BDTinput((float)is_fail),
562  BDTinput((float)n_bl),
563  BDTinput(chi2ndof),
564  BDTinput(trkiso3_dr01),
565  BDTinput(trkiso3_dr0201),
566  BDTinput(refit_chi2ndof)
567  };
568 
569  return m_bdt[3]->GetClassification(input_values);
570 }

◆ bdt_eval_pix4l_sct0()

float TrigDisappearingTrackHypoAlg::bdt_eval_pix4l_sct0 ( float  pt,
float  z0,
float  d0,
float  trkiso3_dr01,
float  trkiso3_dr0201,
float  chi2ndof,
float  chi2ndof_pix,
float  refit_pt,
int  n_pix,
float  refit_ptratio,
float  refit_chi2ndof,
int  n_bl 
) const
private

Definition at line 480 of file TrigDisappearingTrackHypoAlg.cxx.

483 {
484  const std::vector<float> input_values = {
485  BDTinput(pt),
486  BDTinput(z0),
487  BDTinput(d0),
488  BDTinput(trkiso3_dr01),
489  BDTinput(trkiso3_dr0201),
490  BDTinput(chi2ndof),
491  BDTinput(chi2ndof_pix),
492  BDTinput(refit_pt),
493  BDTinput((float)n_pix),
494  BDTinput(refit_ptratio),
495  BDTinput(refit_chi2ndof),
496  BDTinput((float)n_bl)
497  };
498 
499  return m_bdt[0]->GetClassification(input_values);
500 }

◆ bdt_eval_pix4l_sct1p()

float TrigDisappearingTrackHypoAlg::bdt_eval_pix4l_sct1p ( float  pt,
float  refit_pt,
float  refit_z0,
float  refit_d0,
int  n_sct,
float  refit_ptratio,
float  refit_chi2ndof_ratio,
float  trkiso3_dr01,
float  trkiso3_dr0201,
int  is_fail,
float  chi2ndof_pix,
int  n_pix 
) const
private

Definition at line 502 of file TrigDisappearingTrackHypoAlg.cxx.

505 {
506  const std::vector<float> input_values = {
507  BDTinput(pt),
508  BDTinput(refit_pt),
509  BDTinput(refit_z0),
510  BDTinput(refit_d0),
511  BDTinput((float)n_sct),
512  BDTinput(refit_ptratio),
513  BDTinput(refit_chi2ndof_ratio),
514  BDTinput(trkiso3_dr01),
515  BDTinput(trkiso3_dr0201),
516  BDTinput((float)is_fail),
517  BDTinput(chi2ndof_pix),
518  BDTinput((float)n_pix)
519  };
520 
521  return m_bdt[1]->GetClassification(input_values);
522 }

◆ BDTinput()

float TrigDisappearingTrackHypoAlg::BDTinput ( float  var) const
inlineprivate

Definition at line 478 of file TrigDisappearingTrackHypoAlg.cxx.

478 { return ( std::abs(var) < 1e-5 ) ? 1e-5 : var; }

◆ cardinality()

unsigned int AthCommonReentrantAlgorithm< Gaudi::Algorithm >::cardinality
overridevirtualinherited

Cardinality (Maximum number of clones that can exist) special value 0 means that algorithm is reentrant.

Override this to return 0 for reentrant algorithms.

Override this to return 0 for reentrant algorithms.

Definition at line 75 of file AthCommonReentrantAlgorithm.cxx.

64 {
65  return 0;
66 }

◆ createCandidates()

StatusCode TrigDisappearingTrackHypoAlg::createCandidates ( const xAOD::TrigCompositeContainer disTrkCandContainer,
xAOD::TrigCompositeContainer disTrkBDTSelContainer 
) const
private

Definition at line 174 of file TrigDisappearingTrackHypoAlg.cxx.

176 {
177  // monitoring
178  std::vector<int> mnt_category;
179  auto mon_category = Monitored::Collection("category", mnt_category);
180  auto monDisTrk = Monitored::Group(m_monTool, mon_category);
181 
182  std::vector<float> mnt_cat1_pt;
183  std::vector<float> mnt_cat1_z0;
184  std::vector<float> mnt_cat1_d0;
185  std::vector<float> mnt_cat1_iso01;
186  std::vector<float> mnt_cat1_iso0201;
187  std::vector<float> mnt_cat1_chi2ndof;
188  std::vector<float> mnt_cat1_chi2ndof_pix;
189  std::vector<float> mnt_cat1_refit_pt;
190  std::vector<int> mnt_cat1_n_pix;
191  std::vector<float> mnt_cat1_refit_ptratio;
192  std::vector<float> mnt_cat1_refit_chi2ndof;
193  std::vector<int> mnt_cat1_n_bl;
194  std::vector<float> mnt_cat1_bdtscore;
195  auto mon_cat1_pt = Monitored::Collection("pix4_sct0_pt", mnt_cat1_pt);
196  auto mon_cat1_z0 = Monitored::Collection("pix4_sct0_z0", mnt_cat1_z0);
197  auto mon_cat1_d0 = Monitored::Collection("pix4_sct0_d0", mnt_cat1_d0);
198  auto mon_cat1_iso01 = Monitored::Collection("pix4_sct0_iso01", mnt_cat1_iso01);
199  auto mon_cat1_iso0201 = Monitored::Collection("pix4_sct0_iso0201", mnt_cat1_iso0201);
200  auto mon_cat1_chi2ndof = Monitored::Collection("pix4_sct0_chi2ndof", mnt_cat1_chi2ndof);
201  auto mon_cat1_chi2ndof_pix = Monitored::Collection("pix4_sct0_chi2ndof_pix", mnt_cat1_chi2ndof_pix);
202  auto mon_cat1_refit_pt = Monitored::Collection("pix4_sct0_refit_pt", mnt_cat1_refit_pt);
203  auto mon_cat1_n_pix = Monitored::Collection("pix4_sct0_n_pix", mnt_cat1_n_pix);
204  auto mon_cat1_refit_ptratio = Monitored::Collection("pix4_sct0_refit_ptratio", mnt_cat1_refit_ptratio);
205  auto mon_cat1_refit_chi2ndof = Monitored::Collection("pix4_sct0_refit_chi2ndof", mnt_cat1_refit_chi2ndof);
206  auto mon_cat1_n_bl = Monitored::Collection("pix4_sct0_n_bl", mnt_cat1_n_bl);
207  auto mon_cat1_bdtscore = Monitored::Collection("pix4_sct0_bdtscore", mnt_cat1_bdtscore);
208  auto monDisTrkCat1 = Monitored::Group(m_monTool, mon_cat1_pt, mon_cat1_z0, mon_cat1_d0, mon_cat1_iso01, mon_cat1_iso0201, mon_cat1_chi2ndof,
209  mon_cat1_chi2ndof_pix, mon_cat1_refit_pt, mon_cat1_n_pix, mon_cat1_refit_ptratio,
210  mon_cat1_refit_chi2ndof, mon_cat1_n_bl, mon_cat1_bdtscore);
211  //
212  std::vector<float> mnt_cat2_pt;
213  std::vector<float> mnt_cat2_refit_pt;
214  std::vector<float> mnt_cat2_refit_z0;
215  std::vector<float> mnt_cat2_refit_d0;
216  std::vector<int> mnt_cat2_n_sct;
217  std::vector<float> mnt_cat2_refit_ptratio;
218  std::vector<float> mnt_cat2_refit_chi2ndof_ratio;
219  std::vector<float> mnt_cat2_iso01;
220  std::vector<float> mnt_cat2_iso0201;
221  std::vector<float> mnt_cat2_chi2ndof_pix;
222  std::vector<int> mnt_cat2_n_pix;
223  std::vector<float> mnt_cat2_bdtscore;
224  auto mon_cat2_pt = Monitored::Collection("pix4_sct1p_pt", mnt_cat2_pt);
225  auto mon_cat2_refit_pt = Monitored::Collection("pix4_sct1p_refit_pt", mnt_cat2_refit_pt);
226  auto mon_cat2_refit_z0 = Monitored::Collection("pix4_sct1p_refit_z0", mnt_cat2_refit_z0);
227  auto mon_cat2_refit_d0 = Monitored::Collection("pix4_sct1p_refit_d0", mnt_cat2_refit_d0);
228  auto mon_cat2_n_sct = Monitored::Collection("pix4_sct1p_n_sct", mnt_cat2_n_sct);
229  auto mon_cat2_refit_ptratio = Monitored::Collection("pix4_sct1p_refit_ptratio", mnt_cat2_refit_ptratio);
230  auto mon_cat2_refit_chi2ndof_ratio = Monitored::Collection("pix4_sct1p_refit_chi2ndof_ratio", mnt_cat2_refit_chi2ndof_ratio);
231  auto mon_cat2_iso01 = Monitored::Collection("pix4_sct1p_iso01", mnt_cat2_iso01);
232  auto mon_cat2_iso0201 = Monitored::Collection("pix4_sct1p_iso0201", mnt_cat2_iso0201);
233  auto mon_cat2_chi2ndof_pix = Monitored::Collection("pix4_sct1p_chi2ndof_pix", mnt_cat2_chi2ndof_pix);
234  auto mon_cat2_n_pix = Monitored::Collection("pix4_sct1p_n_pix", mnt_cat2_n_pix);
235  auto mon_cat2_bdtscore = Monitored::Collection("pix4_sct1p_bdtscore", mnt_cat2_bdtscore);
236  auto monDisTrkCat2 = Monitored::Group(m_monTool, mon_cat2_pt, mon_cat2_refit_pt, mon_cat2_refit_z0, mon_cat2_refit_d0, mon_cat2_n_sct,
237  mon_cat2_refit_ptratio, mon_cat2_refit_chi2ndof_ratio, mon_cat2_iso01, mon_cat2_iso0201,
238  mon_cat2_chi2ndof_pix, mon_cat2_n_pix, mon_cat2_bdtscore);
239  //
240  std::vector<float> mnt_cat3_pt;
241  std::vector<float> mnt_cat3_z0;
242  std::vector<float> mnt_cat3_d0;
243  std::vector<float> mnt_cat3_chi2ndof;
244  std::vector<float> mnt_cat3_chi2ndof_pix;
245  std::vector<float> mnt_cat3_iso01;
246  std::vector<float> mnt_cat3_iso0201;
247  std::vector<float> mnt_cat3_refit_pt;
248  std::vector<float> mnt_cat3_refit_z0;
249  std::vector<float> mnt_cat3_refit_d0;
250  std::vector<int> mnt_cat3_n_pix;
251  std::vector<int> mnt_cat3_n_bl;
252  std::vector<float> mnt_cat3_bdtscore;
253  auto mon_cat3_pt = Monitored::Collection("pix3_sct0_pt", mnt_cat3_pt);
254  auto mon_cat3_z0 = Monitored::Collection("pix3_sct0_z0", mnt_cat3_z0);
255  auto mon_cat3_d0 = Monitored::Collection("pix3_sct0_d0", mnt_cat3_d0);
256  auto mon_cat3_chi2ndof = Monitored::Collection("pix3_sct0_chi2ndof", mnt_cat3_chi2ndof);
257  auto mon_cat3_chi2ndof_pix = Monitored::Collection("pix3_sct0_chi2ndof_pix", mnt_cat3_chi2ndof_pix);
258  auto mon_cat3_iso01 = Monitored::Collection("pix3_sct0_iso01", mnt_cat3_iso01);
259  auto mon_cat3_iso0201 = Monitored::Collection("pix3_sct0_iso0201", mnt_cat3_iso0201);
260  auto mon_cat3_refit_pt = Monitored::Collection("pix3_sct0_refit_pt", mnt_cat3_refit_pt);
261  auto mon_cat3_refit_z0 = Monitored::Collection("pix3_sct0_refit_z0", mnt_cat3_refit_z0);
262  auto mon_cat3_refit_d0 = Monitored::Collection("pix3_sct0_refit_d0", mnt_cat3_refit_d0);
263  auto mon_cat3_n_pix = Monitored::Collection("pix3_sct0_n_pix", mnt_cat3_n_pix);
264  auto mon_cat3_n_bl = Monitored::Collection("pix3_sct0_n_bl", mnt_cat3_n_bl);
265  auto mon_cat3_bdtscore = Monitored::Collection("pix3_sct0_bdtscore", mnt_cat3_bdtscore);
266  auto monDisTrkCat3 = Monitored::Group(m_monTool, mon_cat3_pt, mon_cat3_z0, mon_cat3_d0, mon_cat3_chi2ndof, mon_cat3_chi2ndof_pix,
267  mon_cat3_iso01, mon_cat3_iso0201, mon_cat3_refit_pt, mon_cat3_refit_z0, mon_cat3_refit_d0,
268  mon_cat3_n_pix, mon_cat3_n_bl, mon_cat3_bdtscore);
269  //
270  std::vector<float> mnt_cat4_pt;
271  std::vector<float> mnt_cat4_z0;
272  std::vector<float> mnt_cat4_d0;
273  std::vector<float> mnt_cat4_refit_pt;
274  std::vector<float> mnt_cat4_refit_z0;
275  std::vector<float> mnt_cat4_refit_d0;
276  std::vector<int> mnt_cat4_n_pix;
277  std::vector<int> mnt_cat4_n_sct;
278  std::vector<float> mnt_cat4_refit_ptratio;
279  std::vector<int> mnt_cat4_n_bl;
280  std::vector<float> mnt_cat4_chi2ndof;
281  std::vector<float> mnt_cat4_iso01;
282  std::vector<float> mnt_cat4_iso0201;
283  std::vector<float> mnt_cat4_refit_chi2ndof;
284  std::vector<float> mnt_cat4_bdtscore;
285  auto mon_cat4_pt = Monitored::Collection("pix3_sct1p_pt", mnt_cat4_pt);
286  auto mon_cat4_z0 = Monitored::Collection("pix3_sct1p_z0", mnt_cat4_z0);
287  auto mon_cat4_d0 = Monitored::Collection("pix3_sct1p_d0", mnt_cat4_d0);
288  auto mon_cat4_refit_pt = Monitored::Collection("pix3_sct1p_refit_pt", mnt_cat4_refit_pt);
289  auto mon_cat4_refit_z0 = Monitored::Collection("pix3_sct1p_refit_z0", mnt_cat4_refit_z0);
290  auto mon_cat4_refit_d0 = Monitored::Collection("pix3_sct1p_refit_d0", mnt_cat4_refit_d0);
291  auto mon_cat4_n_pix = Monitored::Collection("pix3_sct1p_n_pix", mnt_cat4_n_pix);
292  auto mon_cat4_n_sct = Monitored::Collection("pix3_sct1p_n_sct", mnt_cat4_n_sct);
293  auto mon_cat4_refit_ptratio = Monitored::Collection("pix3_sct1p_refit_ptratio", mnt_cat4_refit_ptratio);
294  auto mon_cat4_n_bl = Monitored::Collection("pix3_sct1p_n_bl", mnt_cat4_n_bl);
295  auto mon_cat4_chi2ndof = Monitored::Collection("pix3_sct1p_chi2ndof", mnt_cat4_chi2ndof);
296  auto mon_cat4_iso01 = Monitored::Collection("pix3_sct1p_iso01", mnt_cat4_iso01);
297  auto mon_cat4_iso0201 = Monitored::Collection("pix3_sct1p_iso0201", mnt_cat4_iso0201);
298  auto mon_cat4_refit_chi2ndof = Monitored::Collection("pix3_sct1p_refit_chi2ndof", mnt_cat4_refit_chi2ndof);
299  auto mon_cat4_bdtscore = Monitored::Collection("pix3_sct1p_bdtscore", mnt_cat4_bdtscore);
300  auto monDisTrkCat4 = Monitored::Group(m_monTool, mon_cat4_pt, mon_cat4_z0, mon_cat4_d0, mon_cat4_refit_pt, mon_cat4_refit_z0, mon_cat4_refit_d0,
301  mon_cat4_n_pix, mon_cat4_n_sct, mon_cat4_refit_ptratio, mon_cat4_n_bl, mon_cat4_chi2ndof,
302  mon_cat4_iso01, mon_cat4_iso0201, mon_cat4_refit_chi2ndof, mon_cat4_bdtscore);
303 
304  //
305 
306  const std::string prefixIn = "disTrkCand";
307  const std::string prefixOut = "disTrk";
308 
309  unsigned int i_cand=0;
310 
311  for ( const xAOD::TrigComposite* cand : *disTrkCandContainer ) {
312 
313  ATH_MSG_VERBOSE("===== i_cand: " << i_cand++ << " =====" );
314 
315  // category
316  int category = (int)cand->getDetail<int16_t>(prefixIn+"_category");
317  if( category<=0 || category>=5 ) {
318  ATH_MSG_VERBOSE("category is out of range = " << category);
319  continue;
320  }
321  mnt_category.push_back(category);
322 
323  // get values
324  float ptGeV = cand->getDetail<float>(prefixIn+"_pt");
325  float refit_ptGeV = cand->getDetail<float>(prefixIn+"_refit_pt");
326  ptGeV /= Gaudi::Units::GeV;
327  refit_ptGeV /= Gaudi::Units::GeV;
328  int is_fail = (int)cand->getDetail<int16_t>(prefixIn+"_is_fail");
329  float d0_wrtVtx = cand->getDetail<float>(prefixIn+"_d0_wrtVtx");
330  float z0_wrtVtx = cand->getDetail<float>(prefixIn+"_z0_wrtVtx");
331  float chi2 = cand->getDetail<float>(prefixIn+"_chi2");
332  float ndof = cand->getDetail<float>(prefixIn+"_ndof");
333  float chi2ndof = ( std::abs(ndof) > 1e-4 ) ? chi2 / ndof : 20;
334  int n_hits_pix = (int)cand->getDetail<int16_t>(prefixIn+"_n_hits_pix");
335  int n_hits_sct = (int)cand->getDetail<int16_t>(prefixIn+"_n_hits_sct");
336  int n_hits_bl = (int)cand->getDetail<int16_t>(prefixIn+"_n_hits_innermost");
337  float iso3_dr01 = cand->getDetail<float>(prefixIn+"_iso3_dr01");
338  iso3_dr01 /= Gaudi::Units::GeV;
339  float iso3_dr02 = cand->getDetail<float>(prefixIn+"_iso3_dr02");
340  iso3_dr02 /= Gaudi::Units::GeV;
341  float refit_ptratio = ( std::abs(ptGeV) > 1e-4 ) ? refit_ptGeV / ptGeV : 0;
342  float refit_d0_wrtVtx = cand->getDetail<float>(prefixIn+"_refit_d0_wrtVtx");
343  float refit_z0_wrtVtx = cand->getDetail<float>(prefixIn+"_refit_z0_wrtVtx");
344  float refit_chi2 = cand->getDetail<float>(prefixIn+"_refit_chi2");
345  float refit_ndof = cand->getDetail<float>(prefixIn+"_refit_ndof");
346  float refit_chi2ndof = ( std::abs(refit_ndof) > 1e-4 ) ? refit_chi2 / refit_ndof : 20;
347  float refit_chi2ndof_ratio = (std::abs(chi2ndof) > 1e-4 ) ? refit_chi2ndof / chi2ndof : 0;
348  float chi2_pix=0; float ndof_pix=0;
349  chi2_pix += cand->getDetail<float>(prefixIn+"_chi2sum_br_ibl");
350  chi2_pix += cand->getDetail<float>(prefixIn+"_chi2sum_br_pix1");
351  chi2_pix += cand->getDetail<float>(prefixIn+"_chi2sum_br_pix2");
352  chi2_pix += cand->getDetail<float>(prefixIn+"_chi2sum_br_pix3");
353  ndof_pix += cand->getDetail<float>(prefixIn+"_ndofsum_br_ibl");
354  ndof_pix += cand->getDetail<float>(prefixIn+"_ndofsum_br_pix1");
355  ndof_pix += cand->getDetail<float>(prefixIn+"_ndofsum_br_pix2");
356  ndof_pix += cand->getDetail<float>(prefixIn+"_ndofsum_br_pix3");
357  float chi2ndof_pix = ( std::abs(ndof_pix) > 1e-4 ) ? chi2_pix / ndof_pix : 0;
358 
359  // BDT score
360  float bdt_score = 0.0;
361  if( category==1 ) {
362  bdt_score = bdt_eval_pix4l_sct0(ptGeV, z0_wrtVtx, d0_wrtVtx, iso3_dr01, iso3_dr02-iso3_dr01, chi2ndof, chi2ndof_pix,
363  refit_ptGeV, n_hits_pix, refit_ptratio, refit_chi2ndof, n_hits_bl);
364  mnt_cat1_pt.push_back(ptGeV);
365  mnt_cat1_z0.push_back(z0_wrtVtx);
366  mnt_cat1_d0.push_back(d0_wrtVtx);
367  mnt_cat1_iso01.push_back(iso3_dr01);
368  mnt_cat1_iso0201.push_back(iso3_dr02-iso3_dr01);
369  mnt_cat1_chi2ndof.push_back(chi2ndof);
370  mnt_cat1_chi2ndof_pix.push_back(chi2ndof_pix);
371  mnt_cat1_refit_pt.push_back(refit_ptGeV);
372  mnt_cat1_n_pix.push_back(n_hits_pix);
373  mnt_cat1_refit_ptratio.push_back(refit_ptratio);
374  mnt_cat1_refit_chi2ndof.push_back(refit_chi2ndof);
375  mnt_cat1_n_bl.push_back(n_hits_bl);
376  mnt_cat1_bdtscore.push_back(bdt_score);
377  }
378  else if( category==2 ) {
379  bdt_score = bdt_eval_pix4l_sct1p(ptGeV, refit_ptGeV, refit_z0_wrtVtx, refit_d0_wrtVtx, n_hits_sct, refit_ptratio,
380  refit_chi2ndof_ratio, iso3_dr01, iso3_dr02-iso3_dr01, is_fail, chi2ndof_pix, n_hits_pix);
381  mnt_cat2_pt.push_back(ptGeV);
382  mnt_cat2_refit_pt.push_back(refit_ptGeV);
383  mnt_cat2_refit_z0.push_back(refit_z0_wrtVtx);
384  mnt_cat2_refit_d0.push_back(refit_d0_wrtVtx);
385  mnt_cat2_n_sct.push_back(n_hits_sct);
386  mnt_cat2_refit_ptratio.push_back(refit_ptratio);
387  mnt_cat2_refit_chi2ndof_ratio.push_back(refit_chi2ndof_ratio);
388  mnt_cat2_iso01.push_back(iso3_dr01);
389  mnt_cat2_iso0201.push_back(iso3_dr02-iso3_dr01);
390  mnt_cat2_chi2ndof_pix.push_back(chi2ndof_pix);
391  mnt_cat2_n_pix.push_back(n_hits_pix);
392  mnt_cat2_bdtscore.push_back(bdt_score);
393  }
394  else if( category==3 ) {
395  bdt_score = bdt_eval_pix3l_sct0(ptGeV, z0_wrtVtx, d0_wrtVtx, chi2ndof, chi2ndof_pix, iso3_dr01, iso3_dr02-iso3_dr01,
396  refit_ptGeV, refit_z0_wrtVtx, refit_d0_wrtVtx, n_hits_pix, n_hits_bl);
397  mnt_cat3_pt.push_back(ptGeV);
398  mnt_cat3_z0.push_back(z0_wrtVtx);
399  mnt_cat3_d0.push_back(d0_wrtVtx);
400  mnt_cat3_chi2ndof.push_back(chi2ndof);
401  mnt_cat3_chi2ndof_pix.push_back(chi2ndof_pix);
402  mnt_cat3_iso01.push_back(iso3_dr01);
403  mnt_cat3_iso0201.push_back(iso3_dr02-iso3_dr01);
404  mnt_cat3_refit_pt.push_back(refit_ptGeV);
405  mnt_cat3_refit_z0.push_back(refit_z0_wrtVtx);
406  mnt_cat3_refit_d0.push_back(refit_d0_wrtVtx);
407  mnt_cat3_n_pix.push_back(n_hits_pix);
408  mnt_cat3_n_bl.push_back(n_hits_bl);
409  mnt_cat3_bdtscore.push_back(bdt_score);
410  }
411  else if( category==4 ) {
412  bdt_score = bdt_eval_pix3l_sct1p(ptGeV, z0_wrtVtx, d0_wrtVtx, refit_ptGeV, refit_z0_wrtVtx, refit_d0_wrtVtx, n_hits_pix, n_hits_sct,
413  refit_ptratio, is_fail, n_hits_bl, chi2ndof, iso3_dr01, iso3_dr02-iso3_dr01, refit_chi2ndof);
414  mnt_cat4_pt.push_back(ptGeV);
415  mnt_cat4_z0.push_back(z0_wrtVtx);
416  mnt_cat4_d0.push_back(d0_wrtVtx);
417  mnt_cat4_refit_pt.push_back(refit_ptGeV);
418  mnt_cat4_refit_z0.push_back(refit_z0_wrtVtx);
419  mnt_cat4_refit_d0.push_back(refit_d0_wrtVtx);
420  mnt_cat4_n_pix.push_back(n_hits_pix);
421  mnt_cat4_n_sct.push_back(n_hits_sct);
422  mnt_cat4_refit_ptratio.push_back(refit_ptratio);
423  mnt_cat4_n_bl.push_back(n_hits_bl);
424  mnt_cat4_chi2ndof.push_back(chi2ndof);
425  mnt_cat4_iso01.push_back(iso3_dr01);
426  mnt_cat4_iso0201.push_back(iso3_dr02-iso3_dr01);
427  mnt_cat4_refit_chi2ndof.push_back(refit_chi2ndof);
428  mnt_cat4_bdtscore.push_back(bdt_score);
429  }
430  ATH_MSG_VERBOSE("BDT score = " << bdt_score);
431 
432  // preselection
433  const float PRESEL_PT_GEV = 7.5;
434  const float PRESEL_BDT_SCORE_CAT3 = -0.4;
435  const float PRESEL_BDT_SCORE_CAT4 = -0.2;
436  if( ptGeV < PRESEL_PT_GEV && refit_ptGeV < PRESEL_PT_GEV ) continue;
437  if( category==3 && bdt_score < PRESEL_BDT_SCORE_CAT3 ) continue;
438  if( category==4 && bdt_score < PRESEL_BDT_SCORE_CAT4 ) continue;
439 
440  // create EDM object
442  distrk->makePrivateStore();
443  disTrkBDTSelContainer->push_back(distrk);
444 
445  distrk->setDetail<int16_t>(prefixOut+"_category", (int16_t)category);
446  distrk->setDetail<float>(prefixOut+"_pt", ptGeV*Gaudi::Units::GeV);
447  float eta = cand->getDetail<float>(prefixIn+"_eta");
448  float phi = cand->getDetail<float>(prefixIn+"_phi");
449  distrk->setDetail<float>(prefixOut+"_eta", eta);
450  distrk->setDetail<float>(prefixOut+"_phi", phi);
451  distrk->setDetail<float>(prefixOut+"_refit_pt", refit_ptGeV*Gaudi::Units::GeV);
452  distrk->setDetail<int16_t>(prefixOut+"_is_fail", is_fail);
453  distrk->setDetail<float>(prefixOut+"_d0_wrtVtx", d0_wrtVtx);
454  distrk->setDetail<float>(prefixOut+"_z0_wrtVtx", z0_wrtVtx);
455  distrk->setDetail<float>(prefixOut+"_chi2", chi2);
456  distrk->setDetail<float>(prefixOut+"_ndof", ndof);
457  distrk->setDetail<int16_t>(prefixOut+"_n_hits_pix", (int16_t)n_hits_pix);
458  distrk->setDetail<int16_t>(prefixOut+"_n_hits_sct", (int16_t)n_hits_sct);
459  distrk->setDetail<int16_t>(prefixOut+"_n_hits_innermost", (int16_t)n_hits_bl);
460  distrk->setDetail<float>(prefixOut+"_iso3_dr01", iso3_dr01*Gaudi::Units::GeV);
461  distrk->setDetail<float>(prefixOut+"_iso3_dr02", iso3_dr02*Gaudi::Units::GeV);
462  distrk->setDetail<float>(prefixOut+"_refit_d0_wrtVtx", refit_d0_wrtVtx);
463  distrk->setDetail<float>(prefixOut+"_refit_z0_wrtVtx", refit_z0_wrtVtx);
464  distrk->setDetail<float>(prefixOut+"_refit_chi2", refit_chi2);
465  distrk->setDetail<float>(prefixOut+"_refit_ndof", refit_ndof);
466  distrk->setDetail<float>(prefixOut+"_chi2ndof_pix", chi2ndof_pix);
467  distrk->setDetail<float>(prefixOut+"_bdtscore", bdt_score);
468 
469  ATH_MSG_VERBOSE("Created a new entry EDM" );
470  }
471 
472  return StatusCode::SUCCESS;
473 }

◆ decisionInput()

const SG::ReadHandleKey< TrigCompositeUtils::DecisionContainer > & HypoBase::decisionInput ( ) const
protectedinherited

methods for derived classes to access handles of the base class input other read/write handles may be implemented by derived classes

Definition at line 16 of file HypoBase.cxx.

16  {
17  return m_input;
18 }

◆ decisionOutput()

const SG::WriteHandleKey< TrigCompositeUtils::DecisionContainer > & HypoBase::decisionOutput ( ) const
protectedinherited

methods for derived classes to access handles of the base class output other read/write handles may be implemented by derived classes

Definition at line 20 of file HypoBase.cxx.

20  {
21  return m_output;
22 }

◆ declareGaudiProperty() [1/4]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareGaudiProperty ( Gaudi::Property< T > &  hndl,
const SG::VarHandleKeyArrayType  
)
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleKeyArray>

Definition at line 170 of file AthCommonDataStore.h.

172  {
173  return *AthCommonDataStore<PBASE>::declareProperty(hndl.name(),
174  hndl.value(),
175  hndl.documentation());
176 
177  }

◆ declareGaudiProperty() [2/4]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareGaudiProperty ( Gaudi::Property< T > &  hndl,
const SG::VarHandleKeyType  
)
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleKey>

Definition at line 156 of file AthCommonDataStore.h.

158  {
159  return *AthCommonDataStore<PBASE>::declareProperty(hndl.name(),
160  hndl.value(),
161  hndl.documentation());
162 
163  }

◆ declareGaudiProperty() [3/4]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareGaudiProperty ( Gaudi::Property< T > &  hndl,
const SG::VarHandleType  
)
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleBase>

Definition at line 184 of file AthCommonDataStore.h.

186  {
187  return *AthCommonDataStore<PBASE>::declareProperty(hndl.name(),
188  hndl.value(),
189  hndl.documentation());
190  }

◆ declareGaudiProperty() [4/4]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareGaudiProperty ( Gaudi::Property< T > &  t,
const SG::NotHandleType  
)
inlineprivateinherited

specialization for handling everything that's not a Gaudi::Property<SG::VarHandleKey> or a <SG::VarHandleKeyArray>

Definition at line 199 of file AthCommonDataStore.h.

200  {
201  return PBASE::declareProperty(t);
202  }

◆ declareProperty() [1/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareProperty ( const std::string &  name,
SG::VarHandleBase hndl,
const std::string &  doc,
const SG::VarHandleType  
)
inlineinherited

Declare a new Gaudi property.

Parameters
nameName of the property.
hndlObject holding the property value.
docDocumentation string for the property.

This is the version for types that derive from SG::VarHandleBase. The property value object is put on the input and output lists as appropriate; then we forward to the base class.

Definition at line 245 of file AthCommonDataStore.h.

249  {
250  this->declare(hndl.vhKey());
251  hndl.vhKey().setOwner(this);
252 
253  return PBASE::declareProperty(name,hndl,doc);
254  }

◆ declareProperty() [2/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareProperty ( const std::string &  name,
SG::VarHandleKey hndl,
const std::string &  doc,
const SG::VarHandleKeyType  
)
inlineinherited

Declare a new Gaudi property.

Parameters
nameName of the property.
hndlObject holding the property value.
docDocumentation string for the property.

This is the version for types that derive from SG::VarHandleKey. The property value object is put on the input and output lists as appropriate; then we forward to the base class.

Definition at line 221 of file AthCommonDataStore.h.

225  {
226  this->declare(hndl);
227  hndl.setOwner(this);
228 
229  return PBASE::declareProperty(name,hndl,doc);
230  }

◆ declareProperty() [3/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareProperty ( const std::string &  name,
SG::VarHandleKeyArray hndArr,
const std::string &  doc,
const SG::VarHandleKeyArrayType  
)
inlineinherited

Definition at line 259 of file AthCommonDataStore.h.

263  {
264 
265  // std::ostringstream ost;
266  // ost << Algorithm::name() << " VHKA declareProp: " << name
267  // << " size: " << hndArr.keys().size()
268  // << " mode: " << hndArr.mode()
269  // << " vhka size: " << m_vhka.size()
270  // << "\n";
271  // debug() << ost.str() << endmsg;
272 
273  hndArr.setOwner(this);
274  m_vhka.push_back(&hndArr);
275 
276  Gaudi::Details::PropertyBase* p = PBASE::declareProperty(name, hndArr, doc);
277  if (p != 0) {
278  p->declareUpdateHandler(&AthCommonDataStore<PBASE>::updateVHKA, this);
279  } else {
280  ATH_MSG_ERROR("unable to call declareProperty on VarHandleKeyArray "
281  << name);
282  }
283 
284  return p;
285 
286  }

◆ declareProperty() [4/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareProperty ( const std::string &  name,
T &  property,
const std::string &  doc,
const SG::NotHandleType  
)
inlineinherited

Declare a new Gaudi property.

Parameters
nameName of the property.
propertyObject holding the property value.
docDocumentation string for the property.

This is the generic version, for types that do not derive from SG::VarHandleKey. It just forwards to the base class version of declareProperty.

Definition at line 333 of file AthCommonDataStore.h.

337  {
338  return PBASE::declareProperty(name, property, doc);
339  }

◆ declareProperty() [5/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareProperty ( const std::string &  name,
T &  property,
const std::string &  doc = "none" 
)
inlineinherited

Declare a new Gaudi property.

Parameters
nameName of the property.
propertyObject holding the property value.
docDocumentation string for the property.

This dispatches to either the generic declareProperty or the one for VarHandle/Key/KeyArray.

Definition at line 352 of file AthCommonDataStore.h.

355  {
356  typedef typename SG::HandleClassifier<T>::type htype;
357  return declareProperty (name, property, doc, htype());
358  }

◆ declareProperty() [6/6]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareProperty ( Gaudi::Property< T > &  t)
inlineinherited

Definition at line 145 of file AthCommonDataStore.h.

145  {
146  typedef typename SG::HandleClassifier<T>::type htype;
148  }

◆ detStore()

const ServiceHandle<StoreGateSvc>& AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::detStore ( ) const
inlineinherited

The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 95 of file AthCommonDataStore.h.

95 { return m_detStore; }

◆ evtStore() [1/2]

ServiceHandle<StoreGateSvc>& AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::evtStore ( )
inlineinherited

The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 85 of file AthCommonDataStore.h.

85 { return m_evtStore; }

◆ evtStore() [2/2]

const ServiceHandle<StoreGateSvc>& AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::evtStore ( ) const
inlineinherited

The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 90 of file AthCommonDataStore.h.

90 { return m_evtStore; }

◆ execute()

StatusCode TrigDisappearingTrackHypoAlg::execute ( const EventContext &  context) const
overridevirtual

Definition at line 82 of file TrigDisappearingTrackHypoAlg.cxx.

83 {
84  // previous decisions
85  ATH_MSG_DEBUG( "Retrieving pervious decision: \"" << decisionInput().key() << "\"" );
86  auto previousDecisionsHandle = SG::makeHandle( decisionInput(), context );
87  ATH_CHECK( previousDecisionsHandle.isValid() );
88 
89  ATH_MSG_DEBUG( "Running with " << previousDecisionsHandle->size() << " previous decisions" );
90  if( previousDecisionsHandle->size()!=1 ) {
91  ATH_MSG_ERROR( "Previous decision handle size is not 1. It is" << previousDecisionsHandle->size() );
92  return StatusCode::FAILURE;
93  }
94  const Decision * previousDecision = previousDecisionsHandle->at(0);
95 
96  TrigCompositeUtils::DecisionIDContainer previousDecisionIDs;
97  TrigCompositeUtils::decisionIDs(previousDecision, previousDecisionIDs);
98  ATH_MSG_VERBOSE( "IDs of active legs:" );
99  for(auto decisionID: previousDecisionIDs) { ATH_MSG_VERBOSE( " " << decisionID ); }
100 
101  // new output decisions
102  ATH_MSG_DEBUG( "Creating new output decision handle" );
104  auto outputDecisions = outputHandle.ptr();
105 
106  // input disappearing track objects
107  auto DisTrkCandHandle = SG::makeHandle(m_DisTrkCandKey, context );
108  ATH_CHECK( DisTrkCandHandle.isValid() );
109  ATH_MSG_DEBUG( "DisTrkCand handle size: " << DisTrkCandHandle->size() );
110 
111  const xAOD::TrigCompositeContainer * disTrkCandContainer = DisTrkCandHandle.get();
112  if( disTrkCandContainer == nullptr ) {
113  ATH_MSG_ERROR( "ERROR Cannot get DisappearingTrks container" );
114  return StatusCode::FAILURE;
115  }
116 
117  // output EDM object
118  auto DisTrkBDTSelContainer = std::make_unique<xAOD::TrigCompositeContainer>();
119  auto DisTrkBDTSelContainerAux = std::make_unique<xAOD::TrigCompositeAuxContainer>();
120  DisTrkBDTSelContainer->setStore(DisTrkBDTSelContainerAux.get());
121 
122  xAOD::TrigCompositeContainer* disTrkContainer = DisTrkBDTSelContainer.get();
123 
124  // Prepare inputs to HypoTool
125  ATH_CHECK( createCandidates(disTrkCandContainer, disTrkContainer) );
126 
127  std::vector<TrigDisappearingTrackHypoTool::DisTrkHypoInfo> disTrkHypoInputs;
128 
129  for ( auto distrk : *disTrkContainer ) {
130  Decision* newDecision = TrigCompositeUtils::newDecisionIn( outputDecisions, previousDecision, TrigCompositeUtils::hypoAlgNodeName(), context);
131 
133  ATH_CHECK( distrkEL.isValid() );
134 
135  ATH_CHECK( newDecision->setObjectLink<xAOD::TrigCompositeContainer>(TrigCompositeUtils::featureString(), distrkEL) );
136 
137  TrigDisappearingTrackHypoTool::DisTrkHypoInfo hypoInfo{ newDecision, distrk, previousDecisionIDs };
138  disTrkHypoInputs.push_back( hypoInfo );
139  }
140 
141  // Loop over all hypoToolinputs and get their decisions
142  for ( auto & tool: m_hypoTools ) {
143  ATH_MSG_VERBOSE( "+++++ Now computing decision for " << tool->name() );
144  ATH_CHECK( tool->decide( disTrkHypoInputs ) );
145  }
146 
147  DecisionContainer::iterator it = outputDecisions->begin();
148  while(it != outputDecisions->end()) {
149  ATH_MSG_VERBOSE( "+++++ outputDecision: " << *it << " +++++" );
150  if ( allFailed( *it ) ) {
151  ATH_MSG_VERBOSE( "---> all failed, erasing" );
152  it = outputDecisions->erase(it);
153  } else {
154  ATH_MSG_VERBOSE( "---> not all failed" );
155  ++it;
156  }
157  }
158 
159  // record
161  ATH_CHECK( DisTrkBDTSelHandle.record( std::move( DisTrkBDTSelContainer ), std::move( DisTrkBDTSelContainerAux ) ) );
162  ATH_MSG_VERBOSE( "recorded DisTrkBDTSel object to SG" );
163 
164  //
165  ATH_CHECK( hypoBaseOutputProcessing(outputHandle) );
166 
167  //
168  return StatusCode::SUCCESS;
169 }

◆ extraDeps_update_handler()

void AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::extraDeps_update_handler ( Gaudi::Details::PropertyBase &  ExtraDeps)
protectedinherited

Add StoreName to extra input/output deps as needed.

use the logic of the VarHandleKey to parse the DataObjID keys supplied via the ExtraInputs and ExtraOuputs Properties to add the StoreName if it's not explicitly given

◆ extraOutputDeps()

const DataObjIDColl & AthCommonReentrantAlgorithm< Gaudi::Algorithm >::extraOutputDeps
overridevirtualinherited

Return the list of extra output dependencies.

This list is extended to include symlinks implied by inheritance relations.

Definition at line 94 of file AthCommonReentrantAlgorithm.cxx.

90 {
91  // If we didn't find any symlinks to add, just return the collection
92  // from the base class. Otherwise, return the extended collection.
93  if (!m_extendedExtraObjects.empty()) {
95  }
96  return BaseAlg::extraOutputDeps();
97 }

◆ filterPassed()

virtual bool AthCommonReentrantAlgorithm< Gaudi::Algorithm >::filterPassed ( const EventContext &  ctx) const
inlinevirtualinherited

Definition at line 96 of file AthCommonReentrantAlgorithm.h.

96  {
97  return execState( ctx ).filterPassed();
98  }

◆ hypoBaseOutputProcessing()

StatusCode HypoBase::hypoBaseOutputProcessing ( SG::WriteHandle< TrigCompositeUtils::DecisionContainer > &  outputHandle,
MSG::Level  lvl = MSG::DEBUG 
) const
protectedinherited

Base class function to be called once slice specific code has finished. Handles debug printing and validation.

Definition at line 33 of file HypoBase.cxx.

33  {
34 
35  ATH_CHECK( printDebugInformation(outputHandle, lvl) );
36 
37  if (m_runtimeValidation) {
38  ATH_CHECK( runtimeValidation(outputHandle, msg()) );
39  }
40 
41  return StatusCode::SUCCESS;
42 }

◆ initialize()

StatusCode TrigDisappearingTrackHypoAlg::initialize ( )
overridevirtual

Definition at line 42 of file TrigDisappearingTrackHypoAlg.cxx.

43 {
44  CHECK( m_hypoTools.retrieve() );
45  CHECK( m_DisTrkCandKey.initialize() );
46  CHECK( m_DisTrkBDTSelKey.initialize());
47 
48  if ( !m_monTool.empty() ) CHECK( m_monTool.retrieve() );
49 
50  // MVAUtils BDT initialisation
51  // could make this configurable as a property
52  std::string weightfile[4];
53  // pix4l_sct0
54  weightfile[0] = PathResolver::find_calib_file("TrigDisappearingTrackTriggerHypo/pix4l_sct0.BDT.weights.v21a.root");
55  // pix4l_sct1p
56  weightfile[1] = PathResolver::find_calib_file("TrigDisappearingTrackTriggerHypo/pix4l_sct1p.BDT.weights.v21b.root");
57  // pix3l_sct0
58  weightfile[2] = PathResolver::find_calib_file("TrigDisappearingTrackTriggerHypo/pix3l_sct0.BDT.weights.v21a.root");
59  // pix3l_sct1p
60  weightfile[3] = PathResolver::find_calib_file("TrigDisappearingTrackTriggerHypo/pix3l_sct1p.BDT.weights.v21a.root");
61  for (unsigned int i=0; i<4; ++i) {
62  std::unique_ptr<TFile> rootFile(TFile::Open(weightfile[i].c_str(), "READ"));
63  if (!rootFile) {
64  ATH_MSG_ERROR("Can not open BDT root file: " << weightfile[i] );
65  return StatusCode::FAILURE;
66  }
67  std::unique_ptr<TTree> tree((TTree*)rootFile->Get("BDT"));
68  if (!tree) {
69  ATH_MSG_ERROR("Can not find BDT tree in file: " << weightfile[i]);
70  return StatusCode::FAILURE;
71  }
72  ATH_MSG_INFO("Loading BDT tree from file: " << weightfile[i]);
73  m_bdt[i] = std::make_unique<MVAUtils::BDT>(tree.get());
74  }
75 
76  return StatusCode::SUCCESS;
77 }

◆ inputHandles()

virtual std::vector<Gaudi::DataHandle*> AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::inputHandles ( ) const
overridevirtualinherited

Return this algorithm's input handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ isClonable()

bool AthCommonReentrantAlgorithm< Gaudi::Algorithm >::isClonable
overridevirtualinherited

Specify if the algorithm is clonable.

Reentrant algorithms are clonable.

Definition at line 68 of file AthCommonReentrantAlgorithm.cxx.

52 {
53  // Reentrant algorithms are clonable.
54  return true;
55 }

◆ msg() [1/2]

MsgStream& AthCommonMsg< Gaudi::Algorithm >::msg ( ) const
inlineinherited

Definition at line 24 of file AthCommonMsg.h.

24  {
25  return this->msgStream();
26  }

◆ msg() [2/2]

MsgStream& AthCommonMsg< Gaudi::Algorithm >::msg ( const MSG::Level  lvl) const
inlineinherited

Definition at line 27 of file AthCommonMsg.h.

27  {
28  return this->msgStream(lvl);
29  }

◆ msgLvl()

bool AthCommonMsg< Gaudi::Algorithm >::msgLvl ( const MSG::Level  lvl) const
inlineinherited

Definition at line 30 of file AthCommonMsg.h.

30  {
31  return this->msgLevel(lvl);
32  }

◆ outputHandles()

virtual std::vector<Gaudi::DataHandle*> AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::outputHandles ( ) const
overridevirtualinherited

Return this algorithm's output handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ printBangs()

void HypoBase::printBangs ( MsgStream &  msg)
staticprivateinherited

Print header line.

Definition at line 388 of file HypoBase.cxx.

388  {
389  msg << MSG::ERROR << "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" << endmsg;
390 }

◆ printDebugInformation()

StatusCode HypoBase::printDebugInformation ( SG::WriteHandle< TrigCompositeUtils::DecisionContainer > &  outputHandle,
MSG::Level  lvl 
) const
privateinherited

Common base function to print information on chains passed by objects considered in the hypo.

Definition at line 404 of file HypoBase.cxx.

404  {
405  if (msgLvl(lvl)) {
406  msg() << lvl;
407  msg() << "Exiting with " << outputHandle->size() <<" Decision objects" << endmsg;
408  size_t count = 0;
409  for (const Decision* d : *outputHandle){
410  DecisionIDContainer objDecisions;
411  decisionIDs( d, objDecisions );
412  msg() << "Number of positive decisions for Decision object #" << count++ << ": " << objDecisions.size() << endmsg;
413  for (const TrigCompositeUtils::DecisionID id : objDecisions ) {
414  msg() << " --- Passes: " << HLT::Identifier( id ) << endmsg;
415  }
416  }
417  }
418  return StatusCode::SUCCESS;
419 }

◆ printErrorHeader()

void HypoBase::printErrorHeader ( const ElementLink< TrigCompositeUtils::DecisionContainer > &  dEL,
MsgStream &  msg 
)
staticprivateinherited

A problem was found, print common output data.

Definition at line 393 of file HypoBase.cxx.

395 {
396  printBangs(msg);
397  msg << MSG::ERROR << "! RUNTIME TRIGGER NAVIGATION VALIDATION ERROR" << endmsg;
398  msg << MSG::ERROR << "! Caused by Decision with index:" << (*dEL)->index() << endmsg;
399  msg << MSG::ERROR << "! From collection:" << dEL.dataID() << endmsg;
400  msg << MSG::ERROR << "! " << **dEL << endmsg;
401 }

◆ recursiveValidateGraph()

StatusCode HypoBase::recursiveValidateGraph ( const ElementLink< TrigCompositeUtils::DecisionContainer > &  dEL,
MsgStream &  msg,
bool  onlyValidateOneStep,
bool  runTwoConversion,
size_t  callDepth,
std::set< const TrigCompositeUtils::Decision * > &  fullyExploredFrom 
)
staticprivateinherited

Execute all checks on one node in the graph, d, then recursive call self on all parent nodes up to L1.

Definition at line 69 of file HypoBase.cxx.

75 {
76  if (onlyValidateOneStep && callDepth > 0) {
77  if ((*dEL)->name() == hypoAlgNodeName()) {
78  // Validation is called from HypoAlg nodes. So if we have reached the _previous_ HypoAlg node, then we have already
79  // validated back from here in the past. Can stop at this point.
80  return StatusCode::SUCCESS;
81  }
82  }
83 
84  // Check logical flow at this place in the graph
85  if ((*dEL)->name() == hypoAlgNodeName()) {
86  // Check that all Hypo Decisions produced here satisfy the more-strict all-parent logical flow
87  if ( validateLogicalFlow(dEL, msg, kRequireAll).isFailure() ) {
88  return StatusCode::FAILURE;
89  }
90  } else {
91  // (looser requirement of one-valid-parent-with-decision than we had when we knew that d corresponded to a HypoAlg output)
92  if ( validateLogicalFlow(dEL, msg, kRequireOne).isFailure() ) {
93  return StatusCode::FAILURE;
94  }
95  }
96 
97  // Check my IDs
98  if ( validateDecisionIDs(dEL, msg).isFailure() ) {
99  return StatusCode::FAILURE;
100  }
101  if ( validateDuplicatedDecisionID(dEL, msg).isFailure() ) {
102  return StatusCode::FAILURE;
103  }
104 
105  // Check my linking
106  if( validateParentLinking(dEL, msg, runTwoConversion).isFailure() ) {
107  return StatusCode::FAILURE;
108  }
109  if ( validateHasLinks(dEL, msg).isFailure() ) {
110  return StatusCode::FAILURE;
111  }
112 
113  // Continue upstream
114  const std::vector<ElementLink<DecisionContainer>> seeds = (*dEL)->objectCollectionLinks<DecisionContainer>(seedString());
115  for (const ElementLink<DecisionContainer>& seed : seeds) {
116  if (fullyExploredFrom.count( (*seed) ) == 1) {
117  continue; // Already fully explored from this seed and up
118  }
119  if ( not seed.isValid() ) {
120  msg << MSG::ERROR << "Invalid seed element link in recursiveValidateGraph" << endmsg;
121  return StatusCode::FAILURE;
122  }
123  if ( recursiveValidateGraph(seed, msg, onlyValidateOneStep, runTwoConversion, callDepth + 1, fullyExploredFrom).isFailure() ) {
124  return StatusCode::FAILURE;
125  }
126  }
127 
128  fullyExploredFrom.insert( *dEL );
129  return StatusCode::SUCCESS;
130 }

◆ 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> AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::renounce ( T &  h)
inlineprotectedinherited

Definition at line 380 of file AthCommonDataStore.h.

381  {
382  h.renounce();
383  PBASE::renounce (h);
384  }

◆ renounceArray()

void AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::renounceArray ( SG::VarHandleKeyArray handlesArray)
inlineprotectedinherited

remove all handles from I/O resolution

Definition at line 364 of file AthCommonDataStore.h.

364  {
365  handlesArray.renounce();
366  }

◆ runtimeValidation()

StatusCode HypoBase::runtimeValidation ( SG::WriteHandle< TrigCompositeUtils::DecisionContainer > &  outputHandle,
MsgStream &  msg,
bool  onlyValidateOneStep = true,
bool  runTwoConversion = false 
)
staticinherited

Executes all individual runtime tests.

Definition at line 45 of file HypoBase.cxx.

49 {
50  // Detailed checks on the output container of this HypoAlg
51  std::set<const Decision*> fullyExploredFrom; // Cache used to avoid exploring regions of the graph more than once
52  for (const Decision* d : *outputHandle) {
53  const DecisionContainer* dContainer = dynamic_cast<const DecisionContainer*>( d->container() );
54  const ElementLink<DecisionContainer> dEL = ElementLink<DecisionContainer>(*dContainer, d->index());
55  if (not dEL.isValid()) {
56  msg << MSG::ERROR << "Invalid seed element link in recursiveValidateGraph" << endmsg;
57  return StatusCode::FAILURE;
58  }
59  // Check that we can reach L1 along all navigation paths up from each Decision
60  // and validate these Decisions on the way up too.
61  if (recursiveValidateGraph(dEL, msg, onlyValidateOneStep, runTwoConversion, 0, fullyExploredFrom).isFailure()) {
62  return StatusCode::FAILURE;
63  }
64  }
65  return StatusCode::SUCCESS;
66 }

◆ setFilterPassed()

virtual void AthCommonReentrantAlgorithm< Gaudi::Algorithm >::setFilterPassed ( bool  state,
const EventContext &  ctx 
) const
inlinevirtualinherited

Definition at line 100 of file AthCommonReentrantAlgorithm.h.

100  {
101  execState( ctx ).setFilterPassed( state );
102  }

◆ sysExecute()

StatusCode AthCommonReentrantAlgorithm< Gaudi::Algorithm >::sysExecute ( const EventContext &  ctx)
overridevirtualinherited

Execute an algorithm.

We override this in order to work around an issue with the Algorithm base class storing the event context in a member variable that can cause crashes in MT jobs.

Definition at line 85 of file AthCommonReentrantAlgorithm.cxx.

77 {
78  return BaseAlg::sysExecute (ctx);
79 }

◆ sysInitialize()

StatusCode HypoBase::sysInitialize ( )
overridevirtualinherited

initialise this base class

Reimplemented from AthCommonReentrantAlgorithm< Gaudi::Algorithm >.

Definition at line 24 of file HypoBase.cxx.

24  {
25  CHECK( AthReentrantAlgorithm::sysInitialize() ); // initialise base class
26  CHECK( m_input.initialize() );
27  ATH_MSG_DEBUG("HypoBase::sysInitialize() Will consume decision: " << m_input.key() );
28  CHECK( m_output.initialize() );
29  ATH_MSG_DEBUG("HypoBase::sysInitialize() And produce decision: " << m_output.key() );
30  return StatusCode::SUCCESS;
31 }

◆ sysStart()

virtual StatusCode AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::sysStart ( )
overridevirtualinherited

Handle START transition.

We override this in order to make sure that conditions handle keys can cache a pointer to the conditions container.

◆ updateVHKA()

void AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::updateVHKA ( Gaudi::Details::PropertyBase &  )
inlineinherited

Definition at line 308 of file AthCommonDataStore.h.

308  {
309  // debug() << "updateVHKA for property " << p.name() << " " << p.toString()
310  // << " size: " << m_vhka.size() << endmsg;
311  for (auto &a : m_vhka) {
312  std::vector<SG::VarHandleKey*> keys = a->keys();
313  for (auto k : keys) {
314  k->setOwner(this);
315  }
316  }
317  }

◆ validateDecisionIDs()

StatusCode HypoBase::validateDecisionIDs ( const ElementLink< TrigCompositeUtils::DecisionContainer > &  dEL,
MsgStream &  msg 
)
staticprivateinherited

Ensure that all present IDs correspond to configured chains.

Definition at line 207 of file HypoBase.cxx.

209 {
210  // All numeric IDs must correspond to a know, configured, HLT chain
211  DecisionIDContainer decisionIDSet;
212  decisionIDs(*dEL, decisionIDSet);
213  for (const DecisionID id : decisionIDSet) {
214  const std::string chain = HLT::Identifier( id ).name();
215  if (!isChainId(chain) and !isLegId(chain)) {
216  printErrorHeader(dEL, msg);
217  msg << MSG::ERROR << "! Decision contains an ID which does not correspond to a configured chain or a configured chain-leg: " << HLT::Identifier( id ) << endmsg;
218  msg << MSG::ERROR << "! SOLUTION: Locate the producer of the collection, investigate how this bad ID could have been added." << endmsg;
219  printBangs(msg);
220  return StatusCode::FAILURE;
221  }
222  }
223  return StatusCode::SUCCESS;
224 }

◆ validateDuplicatedDecisionID()

StatusCode HypoBase::validateDuplicatedDecisionID ( const ElementLink< TrigCompositeUtils::DecisionContainer > &  dEL,
MsgStream &  msg 
)
staticprivateinherited

Ensure that no space is being wasted by duplicated DecisionIDs in any Decision objects.

Definition at line 227 of file HypoBase.cxx.

229 {
230  // Persistent vector storage does not guarantee against duplicate entries
231  DecisionIDContainer decisionIDSet;
232  decisionIDs(*dEL, decisionIDSet);
233  if (decisionIDSet.size() != (*dEL)->decisions().size()) {
234  printErrorHeader(dEL, msg);
235  msg << MSG::ERROR << "! Decision contains duplicate DecisionIDs." << endmsg;
236  msg << MSG::ERROR << "! SOLUTION: If combining DecisionIDs from multiple parents, de-duplicate the internal std::vector<DecisionID> of 'Decision* d' with:" << endmsg;
237  msg << MSG::ERROR << "! TrigCompositeUtils::insertDecisionIDs(DecisionIDContainer(), d);" << endmsg;
238  printBangs(msg);
239  return StatusCode::FAILURE;
240  }
241  return StatusCode::SUCCESS;
242 }

◆ validateHasLinks()

StatusCode HypoBase::validateHasLinks ( const ElementLink< TrigCompositeUtils::DecisionContainer > &  dEL,
MsgStream &  msg 
)
staticprivateinherited

Ensure all Decisions have the named ElementLink graph edges which they are required to by spec.

Definition at line 336 of file HypoBase.cxx.

338 {
339  const std::string& name = (*dEL)->name();
340  if (name == hypoAlgNodeName()) {
341 
342  // Check that I have a "feature"
343  if ((*dEL)->hasObjectLink( featureString() )) {
344  return StatusCode::SUCCESS;
345  }
346  printErrorHeader(dEL, msg);
347  msg << MSG::ERROR << "! Decision has no '" << featureString() << "' ElementLink." << endmsg;
348  msg << MSG::ERROR << "! Every Decision created by a HypoAlg must correspond to some physics object, and be linked to the object." << endmsg;
349  msg << MSG::ERROR << "! SOLUTION: Ensure that all produced Decision objects are assigned their feature:" << endmsg;
350  msg << MSG::ERROR << "! SOLUTION: decision->setObjectLink<MY_FEATURE_CONTANER_TYPE>(featureString(), MY_FEATURE_ELEMENT_LINK);" << endmsg;
351  printBangs(msg);
352  return StatusCode::FAILURE;
353 
354  } else if (name == inputMakerNodeName()) {
355 
356  // This requirement is dropped for empty input makers to avoid unnecessary graph clutter.
357  bool exempt = false;
358  if ((*dEL)->hasDetail<int32_t>("isEmpty") and (*dEL)->getDetail<int32_t>("isEmpty") == 1) {
359  exempt = true;
360  }
361 
362  if (not (*dEL)->hasObjectLink( roiString() ) and not exempt) {
363  printErrorHeader(dEL, msg);
364  msg << MSG::ERROR << "! Decision has no '" << roiString() << "' ElementLink." << endmsg;
365  msg << MSG::ERROR << "! Every Decision created by a InputMaker must link to the ROI which reconstruction will run on for that Decision object in this Step." << endmsg;
366  msg << MSG::ERROR << "! It can be the FullScan ROI created by the HLTSeeding (FSNOSEED) if no other suitable ROI exists." << endmsg;
367  msg << MSG::ERROR << "! SOLUTION: Check the configuration of InputMakerForRoI or EventViewCreatorAlgorithm responsible for creating this Decision Object" << endmsg;
368  msg << MSG::ERROR << "! SOLUTION: The algorithm must have an ROITool which must attach an '"<< roiString() <<"' link to each Decision Object" << endmsg;
369  printBangs(msg);
370  }
371 
372  } else if (name == hltSeedingNodeName()) {
373 
374  if (not (*dEL)->hasObjectLink( initialRoIString() )) {
375  printErrorHeader(dEL, msg);
376  msg << MSG::ERROR << "! Decision has no '" << initialRoIString() << "' ElementLink." << endmsg;
377  msg << MSG::ERROR << "! Every Decision created by the HLTSeeding must link to the initial ROI which caused it to be created." << endmsg;
378  msg << MSG::ERROR << "! This includes the Decision Object created to represent the Full-Scan/NoSeed (FSNOSEED) ROI." << endmsg;
379  msg << MSG::ERROR << "! SOLUTION: Check the configuration of the HLTSeeding tool responsible for creating this Decision Object" << endmsg;
380  printBangs(msg);
381  }
382 
383  }
384  return StatusCode::SUCCESS;
385 }

◆ validateLogicalFlow()

StatusCode HypoBase::validateLogicalFlow ( const ElementLink< TrigCompositeUtils::DecisionContainer > &  dEL,
MsgStream &  msg,
const LogicalFlowCheckMode  mode 
)
staticprivateinherited

Ensure that all DecisionIDs have propagated correctly from their parent.

Definition at line 245 of file HypoBase.cxx.

248 {
249  // Do not need to validate for L1 Decisions as these have no parents
250  if ((*dEL)->name() == hltSeedingNodeName()) {
251  return StatusCode::SUCCESS;
252  }
253 
254  // Get all my passed DecisionIDs
255  DecisionIDContainer decisionIDSet;
256  decisionIDs(*dEL, decisionIDSet);
257  const std::vector<ElementLink<DecisionContainer>> seeds = (*dEL)->objectCollectionLinks<DecisionContainer>(seedString());
258  for (const DecisionID id : decisionIDSet) {
259  // For each chain that I'm passing, check how many of my parents were also passing the chain
260  size_t parentsWithDecision = 0;
261  for (const ElementLink<DecisionContainer>& seed : seeds) {
262  if ( not seed.isValid() ) {
263  msg << MSG::ERROR << "Invalid seed element link in recursiveValidateGraph" << endmsg;
264  return StatusCode::FAILURE;
265  }
266  DecisionIDContainer seedIDSet;
267  decisionIDs(*seed, seedIDSet);
268  // Id may be a chain-ID (represents a whole chain) or a leg-ID (represents just a single leg of a multi-leg chain)
269  // Is ID is in this parent's set of passed IDs?
270  // Or, (if ID is a leg-ID) is the chain-ID of leg-ID in the parent's set of passed IDs?
271  if (passed(id, seedIDSet) or passed(getIDFromLeg(id).numeric(), seedIDSet)) {
272  ++parentsWithDecision;
273  }
274  else{ // Or, for each of the seed IDs, if the seed ID is a leg-ID, is the seed chain-ID of the seed leg-ID the same as ID?
275  for (auto sid: seedIDSet){
276  if (getIDFromLeg(sid).numeric() == id){
277  ++parentsWithDecision;
278  break;
279  }
280  }
281  }
282  }
283 
284  if (mode == kRequireOne && parentsWithDecision == 0) {
285  // InputMakers may merge multiple of their input collections in order to run reconstruction on a common set of ROI (for example)
286  // So the DecisionIDs may have come from any one or more of the inputs. But zero is not allowed.
287  printErrorHeader(dEL, msg);
288  msg << MSG::ERROR << "! This Decision object is not respecting logical flow of DecisionIDs for chain: " << HLT::Identifier( id ) << endmsg;
289  msg << MSG::ERROR << "! This chain's DecisionID can not be found in any parents of this Decision object:" << endmsg;
290  size_t seed_n = 0;
291  for (const ElementLink<DecisionContainer>& seed : seeds) {
292  msg << MSG::ERROR << "! Index:" << (*seed)->index() << " from collection:" << seed.dataID() << endmsg;
293  msg << MSG::ERROR << "! " << **seed << endmsg;
294  DecisionIDContainer objDecisions;
295  decisionIDs(*seed, objDecisions);
296  for (const TrigCompositeUtils::DecisionID id : objDecisions ) {
297  msg << "! --- Passing in parent #" << seed_n << ": " << HLT::Identifier( id ) << endmsg;
298  }
299  ++seed_n;
300  }
301  msg << MSG::ERROR << "! SOLUTION: Ensure that the producer of this Decision object only adds DecisionIDs"
302  " which were present in at least one of its parents." << endmsg;
303  printBangs(msg);
304  return StatusCode::FAILURE;
305  } else if (mode == kRequireAll && parentsWithDecision != seeds.size()) {
306  // HypoAlgs may form a new physics object from multiple objects in the previous step
307  // (think a BPhysics object whose parents are two Decisions which each correspond to a different L1 MU RoI,
308  // both ROI need to be in active state for the chain, if the chain's HypoTool considers the BPhysics object)
309  // This case requires *all* of the physics objects which are being combined together to be active for the chain
310  // in order to preserve logical flow
311  printErrorHeader(dEL, msg);
312  msg << MSG::ERROR << "! This Decision object is not respecting logical flow of DecisionIDs for chain: " << HLT::Identifier( id ) << endmsg;
313  msg << MSG::ERROR << "! As this Decision object represents the output of a HypoAlg, it must respect logical flow on all "
314  << seeds.size() << " of its parent(s):" << endmsg;
315  size_t seed_n = 0;
316  for (const ElementLink<DecisionContainer>& seed : seeds) {
317  msg << MSG::ERROR << "! Index:" << (*seed)->index() << " from collection:" << seed.dataID() << endmsg;
318  msg << MSG::ERROR << "! " << **seed << endmsg;
319  DecisionIDContainer objDecisions;
320  decisionIDs(*seed, objDecisions);
321  for (const TrigCompositeUtils::DecisionID id : objDecisions ) {
322  msg << "! --- Passing in parent #" << seed_n << ": " << HLT::Identifier( id ) << endmsg;
323  }
324  ++seed_n;
325  }
326  msg << MSG::ERROR << "! SOLUTION: Ensure that the HypoTool responsible for " << HLT::Identifier( id )
327  << " in this HypoAlg only runs if this ID is present in all parent decisions." << endmsg;
328  printBangs(msg);
329  return StatusCode::FAILURE;
330  }
331  }
332  return StatusCode::SUCCESS;
333 }

◆ validateParentLinking()

StatusCode HypoBase::validateParentLinking ( const ElementLink< TrigCompositeUtils::DecisionContainer > &  dEL,
MsgStream &  msg,
bool  runTwoConversion 
)
staticprivateinherited

Ensure that the Decision has at least one valid parent, unless it is a initial Decision from the HLTSeeding.

Definition at line 133 of file HypoBase.cxx.

136 {
137  const std::vector<ElementLink<DecisionContainer>> seeds = (*dEL)->objectCollectionLinks<DecisionContainer>(seedString());
138  // All Decision object must have at least one parent, unless they are the initial set of objects created by the HLTSeeding
139  const std::string& name = (*dEL)->name();
140  if (seeds.size() == 0 && name != hltSeedingNodeName()) {
141  printErrorHeader(dEL, msg);
142  msg << MSG::ERROR << "! Decision has zero parents. This is only allowed for the initial Decisions created by the HLTSeeding." << endmsg;
143  msg << MSG::ERROR << "! SOLUTION: Attach parent Decision(s) with TrigCompositeUtils::linkToPrevious" << endmsg;
144  printBangs(msg);
145  return StatusCode::FAILURE;
146  }
147 
148  if (name == hltSeedingNodeName()) {
149  if (seeds.size() > 0) {
150  printErrorHeader(dEL, msg);
151  msg << MSG::ERROR << "! Decision has parents. This is not allowed for the initial Decisions created by the HLTSeeding." << endmsg;
152  msg << MSG::ERROR << "! SOLUTION: Check HLTSeeding, no where should it be adding a parent link." << endmsg;
153  printBangs(msg);
154  return StatusCode::FAILURE;
155  }
156  return StatusCode::SUCCESS;
157  }
158 
159  static const std::set<std::string> expectedParentsFilter = {hypoAlgNodeName(), comboHypoAlgNodeName(), hltSeedingNodeName()};
160  static const std::set<std::string> expectedParentsInputMaker = {filterNodeName()};
161  static const std::set<std::string> expectedParentsHypoAlg = {inputMakerNodeName()};
162  static const std::set<std::string> expectedParentsComboHypoAlg = {hypoAlgNodeName(), inputMakerNodeName(), hltSeedingNodeName()}; // TODO check hltSeedingNodeName(), needed for newJO
163  static const std::set<std::string> expectedParentsSummaryFilter = {hypoAlgNodeName(), comboHypoAlgNodeName(), hltSeedingNodeName()};
164  static const std::set<std::string> expectedParentsSummaryPassed = {"SF"}; // TODO change to summaryFilterNodeName() when merged
165 
166  const std::set<std::string>* expectedParentsPtr = nullptr;
167  if (name == filterNodeName()) {
168  expectedParentsPtr = &expectedParentsFilter;
169  } else if (name == inputMakerNodeName() and !runTwoConversion) {
170  expectedParentsPtr = &expectedParentsInputMaker;
171  } else if (name == inputMakerNodeName() and runTwoConversion) {
172  expectedParentsPtr = &expectedParentsFilter; // We don't have Filter nodes in the R2->R3 conversion
173  } else if (name == hypoAlgNodeName()) {
174  expectedParentsPtr = &expectedParentsHypoAlg;
175  } else if (name == comboHypoAlgNodeName()) {
176  expectedParentsPtr = &expectedParentsComboHypoAlg;
177  } else if (name == "SF") { // TODO change to summaryFilterNodeName() when merged
178  expectedParentsPtr = &expectedParentsSummaryFilter;
179  } else if (name == "HLTPassRaw") { // TODO change to summaryPassNodeNameString() when merged
180  expectedParentsPtr = &expectedParentsSummaryPassed;
181  } else {
182  printErrorHeader(dEL, msg);
183  msg << MSG::ERROR << "! Invalid Node name '" << name << "'." << endmsg;
184  msg << MSG::ERROR << "! SOLUTION: Find the alg which made a node with this name. Allowed named may be found in TrigCompositeUtils.h, See:'Constant string literals used within the HLT'." << endmsg;
185  printBangs(msg);
186  return StatusCode::FAILURE;
187  }
188 
189  for (const ElementLink<DecisionContainer>& seed : seeds) {
190  if (expectedParentsPtr->count( (*seed)->name() ) == 0) {
191  printErrorHeader(dEL, msg);
192  msg << MSG::ERROR << "! Invalid linking from node with name '" << name << "' to one with name '"<< (*seed)->name() << "'." << endmsg;
193  msg << MSG::ERROR << "! Allowed seed names are:" << endmsg;
194  for (const std::string& allowed : *expectedParentsPtr) {
195  msg << MSG::ERROR << "! " << allowed << endmsg;
196  }
197  msg << MSG::ERROR << "! SOLUTION: Find where this invalid parent was added and correct it." << endmsg;
198  printBangs(msg);
199  return StatusCode::FAILURE;
200  }
201  }
202 
203  return StatusCode::SUCCESS;
204 }

Member Data Documentation

◆ m_bdt

std::unique_ptr<MVAUtils::BDT> TrigDisappearingTrackHypoAlg::m_bdt[4]
private

Definition at line 50 of file TrigDisappearingTrackHypoAlg.h.

◆ m_detStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_detStore
privateinherited

Pointer to StoreGate (detector store by default)

Definition at line 393 of file AthCommonDataStore.h.

◆ m_DisTrkBDTSelKey

SG::WriteHandleKey<xAOD::TrigCompositeContainer> TrigDisappearingTrackHypoAlg::m_DisTrkBDTSelKey {this, "DisTrkBDTSel","HLT_DisTrkBDTSel", ""}
private

Definition at line 36 of file TrigDisappearingTrackHypoAlg.h.

◆ m_DisTrkCandKey

SG::ReadHandleKey< xAOD::TrigCompositeContainer > TrigDisappearingTrackHypoAlg::m_DisTrkCandKey {this, "DisTrkCand", "HLT_DisTrkCand", ""}
private

Definition at line 35 of file TrigDisappearingTrackHypoAlg.h.

◆ m_evtStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_evtStore
privateinherited

Pointer to StoreGate (event store by default)

Definition at line 390 of file AthCommonDataStore.h.

◆ m_extendedExtraObjects

DataObjIDColl AthCommonReentrantAlgorithm< Gaudi::Algorithm >::m_extendedExtraObjects
privateinherited

Extra output dependency collection, extended by AthAlgorithmDHUpdate to add symlinks.

Empty if no symlinks were found.

Definition at line 114 of file AthCommonReentrantAlgorithm.h.

◆ m_hypoTools

ToolHandleArray< TrigDisappearingTrackHypoTool > TrigDisappearingTrackHypoAlg::m_hypoTools {this, "HypoTools", {}, "Tools to perfrom selection"}
private

Definition at line 34 of file TrigDisappearingTrackHypoAlg.h.

◆ m_input

SG::ReadHandleKey<TrigCompositeUtils::DecisionContainer> HypoBase::m_input { this, "HypoInputDecisions", "UNSPECIFIED_INPUT", "Input Decision (implicit)" }
privateinherited

input decisions

Definition at line 101 of file HypoBase.h.

◆ m_monTool

ToolHandle<GenericMonitoringTool> TrigDisappearingTrackHypoAlg::m_monTool { this, "MonTool", "", "Monitoring tool" }
private

Definition at line 40 of file TrigDisappearingTrackHypoAlg.h.

◆ m_output

SG::WriteHandleKey<TrigCompositeUtils::DecisionContainer> HypoBase::m_output { this, "HypoOutputDecisions", "UNSPECIFIED_OUTPUT", "Ouput Decision" }
privateinherited

output decisions

Definition at line 103 of file HypoBase.h.

◆ m_runtimeValidation

Gaudi::Property<bool> HypoBase::m_runtimeValidation { this, "RuntimeValidation", false, "Enable detailed runtime validation of HypoAlg output, and upstream Decisions." }
privateinherited

Enabling of detailed validation checks for use during development.

Definition at line 105 of file HypoBase.h.

◆ m_varHandleArraysDeclared

bool AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_varHandleArraysDeclared
privateinherited

Definition at line 399 of file AthCommonDataStore.h.

◆ m_vhka

std::vector<SG::VarHandleKeyArray*> AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_vhka
privateinherited

Definition at line 398 of file AthCommonDataStore.h.


The documentation for this class was generated from the following files:
xAOD::iterator
JetConstituentVector::iterator iterator
Definition: JetConstituentVector.cxx:68
AllowedVariables::e
e
Definition: AsgElectronSelectorTool.cxx:37
PathResolver::find_calib_file
static std::string find_calib_file(const std::string &logical_file_name)
Definition: PathResolver.cxx:384
IDTPM::ndof
float ndof(const U &p)
Definition: TrackParametersHelper.h:134
beamspotnt.var
var
Definition: bin/beamspotnt.py:1394
xAOD::TrigComposite_v1::setDetail
bool setDetail(const std::string &name, const TYPE &value)
Set an TYPE detail on the object.
GeV
#define GeV
Definition: PhysicsAnalysis/TauID/TauAnalysisTools/Root/HelperFunctions.cxx:17
TrigDefs::Group
Group
Properties of a chain group.
Definition: GroupProperties.h:13
runLayerRecalibration.chain
chain
Definition: runLayerRecalibration.py:175
TrigCompositeUtils::DecisionID
unsigned int DecisionID
Definition: TrigComposite_v1.h:27
phi
Scalar phi() const
phi method
Definition: AmgMatrixBasePlugin.h:67
TrigCompositeUtils::passed
bool passed(DecisionID id, const DecisionIDContainer &idSet)
checks if required decision ID is in the set of IDs in the container
Definition: TrigCompositeUtilsRoot.cxx:117
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
TrigCompositeUtils::hltSeedingNodeName
const std::string & hltSeedingNodeName()
Definition: TrigCompositeUtilsRoot.cxx:892
xAOD::TrigComposite
TrigComposite_v1 TrigComposite
Declare the latest version of the class.
Definition: Event/xAOD/xAODTrigger/xAODTrigger/TrigComposite.h:16
TrigDisappearingTrackHypoAlg::createCandidates
StatusCode createCandidates(const xAOD::TrigCompositeContainer *, xAOD::TrigCompositeContainer *) const
Definition: TrigDisappearingTrackHypoAlg.cxx:174
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
eta
Scalar eta() const
pseudorapidity method
Definition: AmgMatrixBasePlugin.h:83
AthCommonDataStore::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
hist_file_dump.d
d
Definition: hist_file_dump.py:143
TrigDisappearingTrackHypoAlg::m_DisTrkCandKey
SG::ReadHandleKey< xAOD::TrigCompositeContainer > m_DisTrkCandKey
Definition: TrigDisappearingTrackHypoAlg.h:35
TrigCompositeUtils::hypoAlgNodeName
const std::string & hypoAlgNodeName()
Definition: TrigCompositeUtilsRoot.cxx:904
tree
TChain * tree
Definition: tile_monitor.h:30
AthCommonDataStore::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
python.TrigCompositeUtils.isLegId
def isLegId(chainName)
Definition: DecisionHandling/python/TrigCompositeUtils.py:18
skel.it
it
Definition: skel.GENtoEVGEN.py:407
test_pyathena.pt
pt
Definition: test_pyathena.py:11
AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_evtStore
StoreGateSvc_t m_evtStore
Pointer to StoreGate (event store by default)
Definition: AthCommonDataStore.h:390
AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_vhka
std::vector< SG::VarHandleKeyArray * > m_vhka
Definition: AthCommonDataStore.h:398
DataVector::get
const T * get(size_type n) const
Access an element, as an rvalue.
AthCommonMsg< Gaudi::Algorithm >::msgLvl
bool msgLvl(const MSG::Level lvl) const
Definition: AthCommonMsg.h:30
HypoBase::decisionInput
const SG::ReadHandleKey< TrigCompositeUtils::DecisionContainer > & decisionInput() const
methods for derived classes to access handles of the base class input other read/write handles may be...
Definition: HypoBase.cxx:16
HypoBase::printBangs
static void printBangs(MsgStream &msg)
Print header line.
Definition: HypoBase.cxx:388
TrigCompositeUtils::comboHypoAlgNodeName
const std::string & comboHypoAlgNodeName()
Definition: TrigCompositeUtilsRoot.cxx:908
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
HypoBase::kRequireAll
@ kRequireAll
Definition: HypoBase.h:54
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
TrigDisappearingTrackHypoAlg::m_monTool
ToolHandle< GenericMonitoringTool > m_monTool
Definition: TrigDisappearingTrackHypoAlg.h:40
xAOD::int16_t
setScaleOne setStatusOne setSaturated int16_t
Definition: gFexGlobalRoI_v1.cxx:55
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
XMLtoHeader.count
count
Definition: XMLtoHeader.py:85
Monitored::Collection
ValuesCollection< T > Collection(std::string name, const T &collection)
Declare a monitored (double-convertible) collection.
Definition: MonitoredCollection.h:38
SG::VarHandleKeyArray::setOwner
virtual void setOwner(IDataHandleHolder *o)=0
IDTPMcnv.htype
htype
Definition: IDTPMcnv.py:29
TrigDisappearingTrackHypoTool::DisTrkHypoInfo
Definition: TrigDisappearingTrackHypoTool.h:30
SG::makeHandle
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())
Definition: ReadCondHandle.h:274
HypoBase::recursiveValidateGraph
static StatusCode recursiveValidateGraph(const ElementLink< TrigCompositeUtils::DecisionContainer > &dEL, MsgStream &msg, bool onlyValidateOneStep, bool runTwoConversion, size_t callDepth, std::set< const TrigCompositeUtils::Decision * > &fullyExploredFrom)
Execute all checks on one node in the graph, d, then recursive call self on all parent nodes up to L1...
Definition: HypoBase.cxx:69
AthCommonReentrantAlgorithm::extraOutputDeps
virtual const DataObjIDColl & extraOutputDeps() const override
Return the list of extra output dependencies.
Definition: AthCommonReentrantAlgorithm.cxx:89
python.utils.AtlRunQueryDQUtils.p
p
Definition: AtlRunQueryDQUtils.py:210
AthCommonDataStore
Definition: AthCommonDataStore.h:52
Generate_dsid_ranseed.seed
seed
Definition: Generate_dsid_ranseed.py:10
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
lumiFormat.i
int i
Definition: lumiFormat.py:85
HypoBase::validateDuplicatedDecisionID
static StatusCode validateDuplicatedDecisionID(const ElementLink< TrigCompositeUtils::DecisionContainer > &dEL, MsgStream &msg)
Ensure that no space is being wasted by duplicated DecisionIDs in any Decision objects.
Definition: HypoBase.cxx:227
TrigCompositeUtils::initialRoIString
const std::string & initialRoIString()
Definition: TrigCompositeUtilsRoot.cxx:868
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
HypoBase::m_runtimeValidation
Gaudi::Property< bool > m_runtimeValidation
Enabling of detailed validation checks for use during development.
Definition: HypoBase.h:105
endmsg
#define endmsg
Definition: AnalysisConfig_Ntuple.cxx:63
TrigDisappearingTrackHypoAlg::m_bdt
std::unique_ptr< MVAUtils::BDT > m_bdt[4]
Definition: TrigDisappearingTrackHypoAlg.h:50
SG::WriteHandle::ptr
pointer_type ptr()
Dereference the pointer.
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
ReweightUtils.category
category
Definition: ReweightUtils.py:15
HypoBase::m_input
SG::ReadHandleKey< TrigCompositeUtils::DecisionContainer > m_input
input decisions
Definition: HypoBase.h:101
python.LArMinBiasAlgConfig.int
int
Definition: LArMinBiasAlgConfig.py:59
AthCommonReentrantAlgorithm::sysExecute
virtual StatusCode sysExecute(const EventContext &ctx) override
Execute an algorithm.
Definition: AthCommonReentrantAlgorithm.cxx:76
chi2
double chi2(TH1 *h0, TH1 *h1)
Definition: comparitor.cxx:525
TRT::Track::d0
@ d0
Definition: InnerDetector/InDetCalibEvent/TRT_CalibData/TRT_CalibData/TrackInfo.h:62
TrigDisappearingTrackHypoAlg::BDTinput
float BDTinput(float) const
Definition: TrigDisappearingTrackHypoAlg.cxx:478
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
makeComparison.rootFile
rootFile
Definition: makeComparison.py:27
Preparation.mode
mode
Definition: Preparation.py:107
CHECK
#define CHECK(...)
Evaluate an expression and check for errors.
Definition: Control/AthenaKernel/AthenaKernel/errorcheck.h:422
HypoBase::validateLogicalFlow
static StatusCode validateLogicalFlow(const ElementLink< TrigCompositeUtils::DecisionContainer > &dEL, MsgStream &msg, const LogicalFlowCheckMode mode)
Ensure that all DecisionIDs have propagated correctly from their parent.
Definition: HypoBase.cxx:245
HypoBase::validateDecisionIDs
static StatusCode validateDecisionIDs(const ElementLink< TrigCompositeUtils::DecisionContainer > &dEL, MsgStream &msg)
Ensure that all present IDs correspond to configured chains.
Definition: HypoBase.cxx:207
AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_detStore
StoreGateSvc_t m_detStore
Pointer to StoreGate (detector store by default)
Definition: AthCommonDataStore.h:393
TRT::Track::z0
@ z0
Definition: InnerDetector/InDetCalibEvent/TRT_CalibData/TRT_CalibData/TrackInfo.h:63
TrigDisappearingTrackHypoAlg::bdt_eval_pix4l_sct0
float bdt_eval_pix4l_sct0(float, float, float, float, float, float, float, float, int, float, float, int) const
Definition: TrigDisappearingTrackHypoAlg.cxx:481
xAOD::TrigComposite_v1
Class used to describe composite objects in the HLT.
Definition: TrigComposite_v1.h:52
DataVector
Derived DataVector<T>.
Definition: DataVector.h:794
HLT::Identifier
Definition: TrigCompositeUtils/TrigCompositeUtils/HLTIdentifier.h:20
SG::VarHandleKeyArray::renounce
virtual void renounce()=0
SG::HandleClassifier::type
std::conditional< std::is_base_of< SG::VarHandleKeyArray, T >::value, VarHandleKeyArrayType, type2 >::type type
Definition: HandleClassifier.h:54
TrigCompositeUtils::featureString
const std::string & featureString()
Definition: TrigCompositeUtilsRoot.cxx:884
TrigCompositeUtils::isChainId
bool isChainId(const HLT::Identifier &chainIdentifier)
Recognise whether the HLT identifier corresponds to a whole chain.
Definition: TrigCompositeUtilsRoot.cxx:212
merge_scale_histograms.doc
string doc
Definition: merge_scale_histograms.py:9
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
TrigCompositeUtils::Decision
xAOD::TrigComposite Decision
Definition: Event/xAOD/xAODTrigger/xAODTrigger/TrigComposite.h:20
AtlCoolConsole.tool
tool
Definition: AtlCoolConsole.py:453
DataVector::push_back
value_type push_back(value_type pElem)
Add an element to the end of the collection.
SG::AuxElement::makePrivateStore
void makePrivateStore()
Create a new (empty) private store for this object.
Definition: AuxElement.cxx:192
TrigDisappearingTrackHypoAlg::m_hypoTools
ToolHandleArray< TrigDisappearingTrackHypoTool > m_hypoTools
Definition: TrigDisappearingTrackHypoAlg.h:34
TrigCompositeUtils::filterNodeName
const std::string & filterNodeName()
Definition: TrigCompositeUtilsRoot.cxx:896
TrigDisappearingTrackHypoAlg::m_DisTrkBDTSelKey
SG::WriteHandleKey< xAOD::TrigCompositeContainer > m_DisTrkBDTSelKey
Definition: TrigDisappearingTrackHypoAlg.h:36
SG::WriteHandle
Definition: StoreGate/StoreGate/WriteHandle.h:73
TrigCompositeUtils::seedString
const std::string & seedString()
Definition: TrigCompositeUtilsRoot.cxx:888
a
TList * a
Definition: liststreamerinfos.cxx:10
TrigCompositeUtils::DecisionIDContainer
std::set< DecisionID > DecisionIDContainer
Definition: TrigComposite_v1.h:28
h
HypoBase::printDebugInformation
StatusCode printDebugInformation(SG::WriteHandle< TrigCompositeUtils::DecisionContainer > &outputHandle, MSG::Level lvl) const
Common base function to print information on chains passed by objects considered in the hypo.
Definition: HypoBase.cxx:404
HypoBase::validateParentLinking
static StatusCode validateParentLinking(const ElementLink< TrigCompositeUtils::DecisionContainer > &dEL, MsgStream &msg, bool runTwoConversion)
Ensure that the Decision has at least one valid parent, unless it is a initial Decision from the HLTS...
Definition: HypoBase.cxx:133
HypoBase::HypoBase
HypoBase(const std::string &name, ISvcLocator *pSvcLocator)
constructor, to be called by sub-class constructors
Definition: HypoBase.cxx:10
TrigCompositeUtils::allFailed
bool allFailed(const Decision *d)
return true if there is no positive decision stored
Definition: TrigCompositeUtilsRoot.cxx:103
AthCommonMsg< Gaudi::Algorithm >::msg
MsgStream & msg() const
Definition: AthCommonMsg.h:24
TrigCompositeUtils::decisionIDs
void decisionIDs(const Decision *d, DecisionIDContainer &destination)
Extracts DecisionIDs stored in the Decision object.
Definition: TrigCompositeUtilsRoot.cxx:67
HLT::Identifier::name
std::string name() const
reports human redable name if it is enabled or, empty string
Definition: HLTIdentifier.cxx:14
SG::VarHandleBase::vhKey
SG::VarHandleKey & vhKey()
Return a non-const reference to the HandleKey.
Definition: StoreGate/src/VarHandleBase.cxx:629
HypoBase::m_output
SG::WriteHandleKey< TrigCompositeUtils::DecisionContainer > m_output
output decisions
Definition: HypoBase.h:103
TrigDisappearingTrackHypoAlg::bdt_eval_pix4l_sct1p
float bdt_eval_pix4l_sct1p(float, float, float, float, int, float, float, float, float, int, float, int) const
Definition: TrigDisappearingTrackHypoAlg.cxx:503
AthCommonReentrantAlgorithm< Gaudi::Algorithm >::sysInitialize
virtual StatusCode sysInitialize() override
Override sysInitialize.
Definition: AthCommonReentrantAlgorithm.cxx:107
TrigCompositeUtils::roiString
const std::string & roiString()
Definition: TrigCompositeUtilsRoot.cxx:876
python.Bindings.keys
keys
Definition: Control/AthenaPython/python/Bindings.py:798
HypoBase::runtimeValidation
static StatusCode runtimeValidation(SG::WriteHandle< TrigCompositeUtils::DecisionContainer > &outputHandle, MsgStream &msg, bool onlyValidateOneStep=true, bool runTwoConversion=false)
Executes all individual runtime tests.
Definition: HypoBase.cxx:45
TrigCompositeUtils::getIDFromLeg
HLT::Identifier getIDFromLeg(const HLT::Identifier &legIdentifier)
Generate the HLT::Identifier which corresponds to the chain name from the leg name.
Definition: TrigCompositeUtilsRoot.cxx:180
AthCommonReentrantAlgorithm< Gaudi::Algorithm >::m_extendedExtraObjects
DataObjIDColl m_extendedExtraObjects
Extra output dependency collection, extended by AthAlgorithmDHUpdate to add symlinks.
Definition: AthCommonReentrantAlgorithm.h:114
HypoBase::validateHasLinks
static StatusCode validateHasLinks(const ElementLink< TrigCompositeUtils::DecisionContainer > &dEL, MsgStream &msg)
Ensure all Decisions have the named ElementLink graph edges which they are required to by spec.
Definition: HypoBase.cxx:336
TrigDisappearingTrackHypoAlg::bdt_eval_pix3l_sct0
float bdt_eval_pix3l_sct0(float, float, float, float, float, float, float, float, float, float, int, int) const
Definition: TrigDisappearingTrackHypoAlg.cxx:525
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
HypoBase::printErrorHeader
static void printErrorHeader(const ElementLink< TrigCompositeUtils::DecisionContainer > &dEL, MsgStream &msg)
A problem was found, print common output data.
Definition: HypoBase.cxx:393
AthCommonDataStore::declareGaudiProperty
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>
Definition: AthCommonDataStore.h:156
TrigDisappearingTrackHypoAlg::bdt_eval_pix3l_sct1p
float bdt_eval_pix3l_sct1p(float, float, float, float, float, float, int, int, float, int, int, float, float, float, float) const
Definition: TrigDisappearingTrackHypoAlg.cxx:547
HypoBase::kRequireOne
@ kRequireOne
Require all DecisionIDs to be present in at least one of my parent Decision objects.
Definition: HypoBase.h:53
TrigCompositeUtils::inputMakerNodeName
const std::string & inputMakerNodeName()
Definition: TrigCompositeUtilsRoot.cxx:900
fitman.k
k
Definition: fitman.py:528
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37