|  | ATLAS Offline Software
    | 
 
 
 
Implements Hypo selection on triggering displaced vertex.  
 More...
#include <TrigHitDVHypoAlg.h>
|  | 
|  | TrigHitDVHypoAlg (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 theStoreGateSvc.  More...
 | 
|  | 
| const ServiceHandle< StoreGateSvc > & | evtStore () const | 
|  | The standard StoreGateSvc(event store) Returns (kind of) a pointer to theStoreGateSvc.  More...
 | 
|  | 
| const ServiceHandle< StoreGateSvc > & | detStore () const | 
|  | The standard StoreGateSvc/DetectorStoreReturns (kind of) a pointer to theStoreGateSvc.  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, V, H > &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 | 
|  | 
|  | 
| StatusCode | doMonitor (const xAOD::TrigCompositeContainer *) const | 
|  | 
| float | deltaR2 (float, float, float, float) const | 
|  | 
| int | getSPLayer (int, float) const | 
|  | 
| StatusCode | findSPSeeds (const EventContext &, const std::vector< HitDVSpacePoint > &, std::vector< float > &, std::vector< float > &) const | 
|  | 
| StatusCode | findJetSeeds (const xAOD::JetContainer *, const float, const float, std::vector< float > &, std::vector< float > &, std::vector< float > &) const | 
|  | 
| StatusCode | selectSeedsNearby (const std::vector< HitDVSeed > &hitDVSeedsContainer, std::vector< float > &jetSeeds_eta, std::vector< float > &jetSeeds_phi, std::vector< float > &jetSeeds_pt) const | 
|  | 
| StatusCode | calculateBDT (const std::vector< HitDVSpacePoint > &, const std::vector< HitDVTrk > &, const std::vector< float > &, const std::vector< float > &, const std::vector< float > &, const float &, const int, xAOD::TrigCompositeContainer *, int &) const | 
|  | 
| StatusCode | findSPSeeds (const EventContext &ctx, const std::vector< float > &v_sp_eta, const std::vector< float > &v_sp_phi, const std::vector< int > &v_sp_layer, const std::vector< int > &v_sp_usedTrkId, std::vector< float > &seeds_eta, std::vector< float > &seeds_phi) const | 
|  | 
| StatusCode | findHitDV (const EventContext &ctx, const std::vector< TrigSiSpacePointBase > &convertedSpacePoints, const DataVector< Trk::Track > &tracks, std::vector< HitDVSeed > &hitDVSeedsContainer, std::vector< HitDVTrk > &hitDVTrksContainer, std::vector< HitDVSpacePoint > &hitDVSPContainer) 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, V, H > &hndl, const SG::VarHandleKeyType &) | 
|  | specialization for handling Gaudi::Property<SG::VarHandleKey>  More... 
 | 
|  | 
| Gaudi::Details::PropertyBase & | declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyArrayType &) | 
|  | specialization for handling Gaudi::Property<SG::VarHandleKeyArray>  More... 
 | 
|  | 
| Gaudi::Details::PropertyBase & | declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleType &) | 
|  | specialization for handling Gaudi::Property<SG::VarHandleBase>  More... 
 | 
|  | 
| Gaudi::Details::PropertyBase & | declareGaudiProperty (Gaudi::Property< T, V, H > &t, const SG::NotHandleType &) | 
|  | specialization for handling everything that's not a Gaudi::Property<SG::VarHandleKey> or a <SG::VarHandleKeyArray>  More... 
 | 
|  | 
|  | 
| ToolHandle< ITrigSpacePointConversionTool > | m_spacePointTool {this, "SpacePointProviderTool", "TrigSpacePointConversionTool"} | 
|  | 
| ToolHandleArray< TrigHitDVHypoTool > | m_hypoTools {this, "HypoTools", {}, "Tools to perform selection"} | 
|  | 
| SG::ReadHandleKey< xAOD::JetContainer > | m_jetsKey {this, "Jets", "HLT_AntiKt4EMTopoJets_subjesIS", ""} | 
|  | 
| SG::WriteHandleKey< xAOD::TrigCompositeContainer > | m_hitDVKey {this, "HitDV", "HLT_HitDV", ""} | 
|  | 
| SG::ReadHandleKey< TrackCollection > | m_tracksKey {this, "HitDVTracks", "HLT_IDTrkTrack_FS_FTF", ""} | 
|  | 
| ToolHandle< ILumiBlockMuTool > | m_lumiBlockMuTool | 
|  | 
| SG::ReadCondHandleKey< LuminosityCondData > | m_lumiDataKey {this, "LuminosityCondDataKey", "LuminosityCondData", ""} | 
|  | 
| Gaudi::Property< bool > | m_isMC {this, "isMC", false, "Real data or MC"} | 
|  | 
| Gaudi::Property< float > | m_jetSeed_ptMin {this, "jetSeed_ptMin", 50.0, "Minimum pT for jet seed"} | 
|  | 
| Gaudi::Property< float > | m_jetSeed_etaMax {this, "jetSeed_etaMin", 2.0, "Maximum eta for jet seed"} | 
|  | 
| Gaudi::Property< std::string > | m_hitDVLinkName {this, "hitDVLinkName", "HitDVSeedLink", "Name of the link to HitDVContainer. Used by ViewCreatorROITool."} | 
|  | 
| ToolHandle< GenericMonitoringTool > | m_monTool { this, "MonTool", "", "Monitoring tool" } | 
|  | 
| std::unique_ptr< MVAUtils::BDT > | m_bdt_eta [2] | 
|  | 
| int | m_tools_lowest_jetEt = 1000 | 
|  | 
| int | m_tools_loosest_wp = 0 | 
|  | 
| bool | m_useBeamSpot = true | 
|  | 
| bool | m_doHitDV_Seeding = true | 
|  | 
| SG::ReadHandleKey< xAOD::jFexSRJetRoIContainer > | m_jetRoiCollectionKey {this, "jFexSRJetRoI", "", ""} | 
|  | 
| SG::ReadCondHandleKey< InDet::BeamSpotData > | m_beamSpotKey { this, "BeamSpotKey", "BeamSpotData", "SG key for beam spot" } | 
|  | 
| SG::ReadHandleKey< TrigCompositeUtils::DecisionContainer > | m_input { this, "HypoInputDecisions", "UNSPECIFIED_INPUT", "Input Decision (implicit)" } | 
|  | input decisions  More... 
 | 
|  | 
| SG::WriteHandleKey< TrigCompositeUtils::DecisionContainer > | m_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 | 
|  | 
|  | 
| 
 | 
| 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... 
 | 
|  | 
Implements Hypo selection on triggering displaced vertex. 
- Author
- Kunihiro Nagano kunih.nosp@m.iro..nosp@m.nagan.nosp@m.o@ce.nosp@m.rn.ch - KEK 
Definition at line 63 of file TrigHitDVHypoAlg.h.
◆ SeedType
◆ StoreGateSvc_t
◆ LogicalFlowCheckMode
| 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.
 
 
◆ TrigHitDVHypoAlg()
      
        
          | TrigHitDVHypoAlg::TrigHitDVHypoAlg | ( | const std::string & | name, | 
        
          |  |  | ISvcLocator * | pSvcLocator | 
        
          |  | ) |  |  | 
      
 
 
◆ calculateBDT()
Definition at line 508 of file TrigHitDVHypoAlg.cxx.
  515    if( seeds_eta.size() != seeds_phi.size() ) 
return StatusCode::SUCCESS;
 
  518    for(
unsigned int iseed=0; iseed<seeds_eta.size(); iseed++) {
 
  520       float seed_eta = seeds_eta[iseed];
 
  521       float seed_phi = seeds_phi[iseed];
 
  523       ATH_MSG_VERBOSE(
"+++++ seed eta: " << seed_eta << 
", phi:" << seed_phi << 
" +++++");
 
  527       const float DR_SQUARED_TO_REF_CUT = 0.16; 
 
  530       int n_sp_injet_usedByTrk = 0;
 
  532       int v_n_sp_injet_usedByTrk[
N_LAYER];
 
  533       for(
int i=0; 
i<
N_LAYER; 
i++) { v_n_sp_injet[
i]=0; v_n_sp_injet_usedByTrk[
i]=0; }
 
  535       for ( 
const auto & spData : spsContainer ) {
 
  537      float sp_eta = spData.eta;
 
  538      float sp_phi = spData.phi;
 
  539      float dR2 = 
deltaR2(sp_eta,sp_phi,seed_eta,seed_phi);
 
  540      if( dR2 > DR_SQUARED_TO_REF_CUT ) 
continue;
 
  543      int sp_layer = (
int)spData.layer;
 
  544      int sp_trkid = (
int)spData.usedTrkId;
 
  545      bool isUsedByTrk = (sp_trkid != -1);
 
  551         v_n_sp_injet[ilayer]++;
 
  553            n_sp_injet_usedByTrk++;
 
  554            v_n_sp_injet_usedByTrk[ilayer]++;
 
  558       ATH_MSG_VERBOSE(
"nr of SPs in jet: usedByTrk / all = " << n_sp_injet_usedByTrk << 
" / " << n_sp_injet);
 
  562      if( v_n_sp_injet[
i] > 0 ) 
frac = 1.0 - 
static_cast<float>(v_n_sp_injet_usedByTrk[
i]) / 
static_cast<float>(v_n_sp_injet[
i]);
 
  563      v_ly_sp_frac[
i] = 
frac;
 
  564      ATH_MSG_VERBOSE(
"Layer " << 
i << 
": frac=" << v_ly_sp_frac[
i] << 
", n used / all = " << v_n_sp_injet_usedByTrk[
i] << 
" / " << v_n_sp_injet[
i]);
 
  568       const float TRK_PT_GEV_CUT = 2.0;
 
  570       unsigned int n_qtrk_injet = 0;
 
  571       for ( 
const auto& trk : trksContainer ) {
 
  572      float trk_ptGeV  = trk.pt;
 
  574      if( trk_ptGeV < TRK_PT_GEV_CUT ) 
continue;
 
  575      float dR2 = 
deltaR2(trk.eta,trk.phi,seed_eta,seed_phi);
 
  576      if( dR2 > DR_SQUARED_TO_REF_CUT ) 
continue;
 
  579       ATH_MSG_DEBUG(
"nr of all / quality tracks matched = " << trksContainer.size() << 
" / " << n_qtrk_injet);
 
  582       bool isSeedOutOfRange = 
false;
 
  583       if( n_qtrk_injet == 0 ) {
 
  584      isSeedOutOfRange = 
true;
 
  586         if( std::fabs(v_ly_sp_frac[
i]) > 1
e-3 ) {
 
  587            isSeedOutOfRange = 
false; 
break;
 
  591       float bdt_score = -2.0;
 
  592       if( ! isSeedOutOfRange ) {
 
  593      const std::vector<float> input_values = {
 
  594        static_cast<float>(n_qtrk_injet),
 
  604          if ( std::abs(seed_eta) < 1 ) {
 
  605         bdt_score = 
m_bdt_eta[0]->GetClassification(input_values);
 
  606          } 
else if ( std::abs(seed_eta) < 2 ) {
 
  607         bdt_score = 
m_bdt_eta[1]->GetClassification(input_values);
 
  612       if( bdt_score < cutBDTthreshold ) 
continue;
 
  620       dv->makePrivateStore();
 
  624       if ( seed_type == SeedType::HLTJet ) seed_pt = seeds_pt[iseed];
 
  625       dv->setDetail<
float>(
"hitDV_seed_pt",      seed_pt);
 
  626       dv->setDetail<
float>(
"hitDV_seed_eta",     seed_eta);
 
  627       dv->setDetail<
float>(
"hitDV_seed_phi",     seed_phi);
 
  628       dv->setDetail<
int>  (
"hitDV_seed_type",    seed_type);
 
  629       dv->setDetail<
int>  (
"hitDV_n_track_qual", n_qtrk_injet);
 
  630       dv->setDetail<
float>(
"hitDV_ly0_sp_frac",  v_ly_sp_frac[0]);
 
  631       dv->setDetail<
float>(
"hitDV_ly1_sp_frac",  v_ly_sp_frac[1]);
 
  632       dv->setDetail<
float>(
"hitDV_ly2_sp_frac",  v_ly_sp_frac[2]);
 
  633       dv->setDetail<
float>(
"hitDV_ly3_sp_frac",  v_ly_sp_frac[3]);
 
  634       dv->setDetail<
float>(
"hitDV_ly4_sp_frac",  v_ly_sp_frac[4]);
 
  635       dv->setDetail<
float>(
"hitDV_ly5_sp_frac",  v_ly_sp_frac[5]);
 
  636       dv->setDetail<
float>(
"hitDV_ly6_sp_frac",  v_ly_sp_frac[6]);
 
  637       dv->setDetail<
float>(
"hitDV_ly7_sp_frac",  v_ly_sp_frac[7]);
 
  638       dv->setDetail<
float>(
"hitDV_bdt_score",    bdt_score);
 
  645    return StatusCode::SUCCESS;
 
 
 
 
◆ cardinality()
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.
 
 
◆ decisionInput()
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 18 of file HypoBase.cxx.
 
 
◆ decisionOutput()
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 22 of file HypoBase.cxx.
 
 
◆ declareGaudiProperty() [1/4]
specialization for handling Gaudi::Property<SG::VarHandleKeyArray> 
Definition at line 170 of file AthCommonDataStore.h.
  175                                                        hndl.documentation());
 
 
 
 
◆ declareGaudiProperty() [2/4]
specialization for handling Gaudi::Property<SG::VarHandleKey> 
Definition at line 156 of file AthCommonDataStore.h.
  161                                                        hndl.documentation());
 
 
 
 
◆ declareGaudiProperty() [3/4]
specialization for handling Gaudi::Property<SG::VarHandleBase> 
Definition at line 184 of file AthCommonDataStore.h.
  189                                                        hndl.documentation());
 
 
 
 
◆ declareGaudiProperty() [4/4]
◆ declareProperty() [1/6]
Declare a new Gaudi property. 
- Parameters
- 
  
    | name | Name of the property. |  | hndl | Object holding the property value. |  | doc | Documentation 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.
  250     this->declare(hndl.
vhKey());
 
  251     hndl.
vhKey().setOwner(
this);
 
 
 
 
◆ declareProperty() [2/6]
Declare a new Gaudi property. 
- Parameters
- 
  
    | name | Name of the property. |  | hndl | Object holding the property value. |  | doc | Documentation 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.
 
 
◆ declareProperty() [3/6]
◆ declareProperty() [4/6]
Declare a new Gaudi property. 
- Parameters
- 
  
    | name | Name of the property. |  | property | Object holding the property value. |  | doc | Documentation 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.
 
 
◆ declareProperty() [5/6]
Declare a new Gaudi property. 
- Parameters
- 
  
    | name | Name of the property. |  | property | Object holding the property value. |  | doc | Documentation 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.
 
 
◆ declareProperty() [6/6]
◆ deltaR2()
  
  | 
        
          | float TrigHitDVHypoAlg::deltaR2 | ( | float | eta_1, |  
          |  |  | float | phi_1, |  
          |  |  | float | eta_2, |  
          |  |  | float | phi_2 |  
          |  | ) |  | const |  | private | 
 
 
◆ detStore()
◆ doMonitor()
Definition at line 456 of file TrigHitDVHypoAlg.cxx.
  459       "ly0_spfr", *dvContainer, [&](
const Decision* 
d){ 
return d->getDetail<
float>(
"hitDV_ly0_sp_frac"); });
 
  461       "ly1_spfr", *dvContainer, [&](
const Decision* 
d){ 
return d->getDetail<
float>(
"hitDV_ly1_sp_frac"); });
 
  463       "ly2_spfr", *dvContainer, [&](
const Decision* 
d){ 
return d->getDetail<
float>(
"hitDV_ly2_sp_frac"); });
 
  465       "ly3_spfr", *dvContainer, [&](
const Decision* 
d){ 
return d->getDetail<
float>(
"hitDV_ly3_sp_frac"); });
 
  467       "ly4_spfr", *dvContainer, [&](
const Decision* 
d){ 
return d->getDetail<
float>(
"hitDV_ly4_sp_frac"); });
 
  469       "ly5_spfr", *dvContainer, [&](
const Decision* 
d){ 
return d->getDetail<
float>(
"hitDV_ly5_sp_frac"); });
 
  471       "ly6_spfr", *dvContainer, [&](
const Decision* 
d){ 
return d->getDetail<
float>(
"hitDV_ly6_sp_frac"); });
 
  473       "ly7_spfr", *dvContainer, [&](
const Decision* 
d){ 
return d->getDetail<
float>(
"hitDV_ly7_sp_frac"); });
 
  475       "bdtscore", *dvContainer, [&](
const Decision* 
d){ 
return d->getDetail<
float>(
"hitDV_bdt_score"); });
 
  477       "n_qtrk", *dvContainer, [&](
const Decision* 
d){ 
return d->getDetail<
int>(
"hitDV_n_track_qual"); });
 
  480    std::vector<char> mask_eta1(dvContainer->
size(), 0);
 
  481    std::vector<char> mask_1eta2(dvContainer->
size(), 0);
 
  485    for (
size_t i = 0; 
i<dvContainer->
size(); ++
i) {
 
  489       if( 
dv->getDetail<
int>(
"hitDV_seed_type") == SeedType::SP ) 
continue;
 
  492       const float abs_eta = std::abs(
dv->getDetail<
float>(
"hitDV_seed_eta"));
 
  493       if     ( abs_eta < 1.0 ) mask_eta1[
i] = 1;
 
  494       else if( abs_eta < 2.0 ) mask_1eta2[
i] = 1;
 
  498                                       mon_ly0_spfr, mon_ly1_spfr, mon_ly2_spfr, mon_ly3_spfr,
 
  499                                       mon_ly4_spfr, mon_ly5_spfr, mon_ly6_spfr, mon_ly7_spfr,
 
  500                                       mon_n_qtrk, mon_bdtscore, mon_eta1_mask, mon_1eta2_mask );
 
  502    return StatusCode::SUCCESS;
 
 
 
 
◆ evtStore() [1/2]
◆ evtStore() [2/2]
◆ execute()
  
  | 
        
          | StatusCode TrigHitDVHypoAlg::execute | ( | const EventContext & | context | ) | const |  | overridevirtual | 
 
Definition at line 117 of file TrigHitDVHypoAlg.cxx.
  121    std::vector<TrigSiSpacePointBase> convertedSpacePoints;
 
  122    convertedSpacePoints.reserve(5000);
 
  135    auto monitorIt        = 
Monitored::Group( 
m_monTool, mon_n_dvtrks, mon_n_dvsps, mon_n_jetseeds, mon_n_jetseedsdel, mon_n_spseeds, mon_n_spseedsdel, mon_average_mu );
 
  140    ATH_CHECK( previousDecisionsHandle.isValid() );
 
  142    ATH_MSG_DEBUG( 
"Running with " << previousDecisionsHandle->size() << 
" previous decisions" );
 
  143    if( previousDecisionsHandle->size()!=1 ) {
 
  144       ATH_MSG_ERROR( 
"Previous decision handle size is not 1. It is" << previousDecisionsHandle->size() );
 
  145       return StatusCode::FAILURE;
 
  147    const Decision * previousDecision = previousDecisionsHandle->at(0);
 
  152    for(
auto decisionID: previousDecisionIDs) { 
ATH_MSG_DEBUG( 
"    " << decisionID ); }
 
  157    auto outputDecisions = outputHandle.
ptr();
 
  167    if( jetsContainer == 
nullptr ) {
 
  169       return StatusCode::FAILURE;
 
  171    bool isJetEtPassToolsCut  = 
false;
 
  172    float jetEtaToolsCut = 2.0;
 
  176       float jet_eta = 
static_cast<float>(
jet->eta());
 
  178      isJetEtPassToolsCut = 
true;
 
  186    std::vector<HitDVSeed> hitDVSeedsContainer;
 
  187    std::vector<HitDVTrk> hitDVTrksContainer;
 
  188    std::vector<HitDVSpacePoint> hitDVSPsContainer;
 
  191    ATH_CHECK( 
findHitDV(context, convertedSpacePoints, *tracks, hitDVSeedsContainer, hitDVTrksContainer, hitDVSPsContainer) );
 
  193    mon_n_dvtrks = hitDVTrksContainer.size();
 
  194    mon_n_dvsps  = hitDVSPsContainer.size();
 
  195    const unsigned int N_MAX_SP_STORED = 100000;
 
  196    bool isSPOverflow = 
false;
 
  197    if( hitDVSPsContainer.size() >= N_MAX_SP_STORED ) isSPOverflow = 
true;
 
  204      averageMu = 
static_cast<float>(
m_lumiBlockMuTool->averageInteractionsPerCrossing(context));
 
  210       averageMu = lcd.cptr()->lbAverageInteractionsPerCrossing();
 
  213    mon_average_mu = averageMu;
 
  216    std::vector<float> jetSeeds_pt;
 
  217    std::vector<float> jetSeeds_eta;
 
  218    std::vector<float> jetSeeds_phi;
 
  220    int n_alljetseeds = jetSeeds_eta.size();
 
  222    mon_n_jetseeds = jetSeeds_eta.size();
 
  223    mon_n_jetseedsdel = n_alljetseeds - jetSeeds_eta.size();
 
  226    std::vector<float> spSeeds_eta;
 
  227    std::vector<float> spSeeds_phi;
 
  228    std::vector<float> void_pt;
 
  229    int n_allspseeds = 0;
 
  232       n_allspseeds  = spSeeds_eta.size();
 
  234       mon_n_spseeds = spSeeds_eta.size();
 
  235       mon_n_spseedsdel = n_allspseeds - spSeeds_eta.size();
 
  239       mon_n_spseedsdel = 0;
 
  243    auto hitDVContainer    = std::make_unique<xAOD::TrigCompositeContainer>();
 
  244    auto hitDVContainerAux = std::make_unique<xAOD::TrigCompositeAuxContainer>();
 
  245    hitDVContainer->setStore(hitDVContainerAux.get());
 
  248    std::vector<TrigHitDVHypoTool::HitDVHypoInfo>  hitDVHypoInputs;
 
  249    std::unordered_map<Decision*, size_t>          mapDecIdx;
 
  252    if( isJetEtPassToolsCut ) {
 
  253       const float preselBDTthreshold = -0.6;
 
  255       int n_passed_jet = 0;
 
  256       int seed_type = SeedType::HLTJet;
 
  257       ATH_CHECK( 
calculateBDT(hitDVSPsContainer, hitDVTrksContainer, jetSeeds_pt, jetSeeds_eta, jetSeeds_phi, preselBDTthreshold, seed_type, dvContainer, n_passed_jet) );
 
  261      seed_type = SeedType::SP;
 
  262      ATH_CHECK( 
calculateBDT(hitDVSPsContainer, hitDVTrksContainer, void_pt, spSeeds_eta, spSeeds_phi, preselBDTthreshold, seed_type, dvContainer, n_passed_sp) );
 
  265       ATH_MSG_DEBUG( 
"nr of dv container / jet-seeded / sp-seed candidates = " << dvContainer->
size() << 
" / " << n_passed_jet << 
" / " << n_passed_sp );
 
  268       for ( 
auto dv : *dvContainer ) {
 
  270      mapDecIdx.emplace( newDecision, 
dv->index() );
 
  272      hitDVHypoInputs.push_back( hypoInfo );
 
  287    ATH_CHECK( hitDVHandle.record( std::move( hitDVContainer ), std::move( hitDVContainerAux ) ) );
 
  291    while(
it != outputDecisions->end()) {
 
  295          it = outputDecisions->erase(
it);
 
  301          size_t   idx = mapDecIdx.at(*
it);
 
  317    return StatusCode::SUCCESS;
 
 
 
 
◆ extraDeps_update_handler()
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()
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.
 
 
◆ filterPassed()
◆ findHitDV()
Definition at line 1119 of file TrigHitDVHypoAlg.cxx.
 1124    std::vector<int>   v_dvtrk_id;
 
 1125    std::vector<float> v_dvtrk_pt;
 
 1126    std::vector<float> v_dvtrk_eta;
 
 1127    std::vector<float> v_dvtrk_phi;
 
 1128    std::vector<int>   v_dvtrk_n_hits_inner;
 
 1129    std::vector<int>   v_dvtrk_n_hits_pix;
 
 1130    std::vector<int>   v_dvtrk_n_hits_sct;
 
 1131    std::vector<float> v_dvtrk_a0beam;
 
 1132    std::unordered_map<Identifier, int> umap_fittedTrack_identifier;
 
 1133    int fittedTrack_id = -1;
 
 1135    static constexpr 
float TRKCUT_PTGEV_HITDV = 0.5;
 
 1137    for (
const auto track: tracks) {
 
 1138       float shift_x = 0; 
float shift_y = 0;
 
 1145       if (not igt) {
continue;}
 
 1152      m  = 
track->measurementsOnTrack()->begin(),
 
 1153      me = 
track->measurementsOnTrack()->end  ();
 
 1154       for(; 
m!=me; ++
m ) {
 
 1156      if( prd == 
nullptr ) 
continue;
 
 1158      if( umap_fittedTrack_identifier.find(id_prd) == umap_fittedTrack_identifier.end() ) {
 
 1159         umap_fittedTrack_identifier.insert(std::make_pair(id_prd,fittedTrack_id));
 
 1163       v_dvtrk_id.push_back(fittedTrack_id);
 
 1165       v_dvtrk_eta.push_back(theTrackInfo.
eta);
 
 1166       v_dvtrk_phi.push_back(
phi);
 
 1167       v_dvtrk_n_hits_inner.push_back(theTrackInfo.
n_hits_inner);
 
 1168       v_dvtrk_n_hits_pix.push_back(theTrackInfo.
n_hits_pix);
 
 1169       v_dvtrk_n_hits_sct.push_back(theTrackInfo.
n_hits_sct);
 
 1170       v_dvtrk_a0beam.push_back(theTrackInfo.
a0beam);
 
 1172    ATH_MSG_DEBUG(
"Nr of selected tracks / all = " << fittedTrack_id << 
" / " << tracks.size());
 
 1173    ATH_MSG_DEBUG(
"Nr of Identifiers used by selected tracks = " << umap_fittedTrack_identifier.size());
 
 1177    int n_sp_usedByTrk = 0;
 
 1179    std::unordered_map<Identifier, int> umap_sp_identifier;
 
 1180    umap_sp_identifier.reserve(1.3*convertedSpacePoints.size());
 
 1185        if( umap_sp_identifier.find(id_prd) == umap_sp_identifier.end() ) {
 
 1186          umap_sp_identifier.insert(std::make_pair(id_prd,-1));
 
 1191    for(
unsigned int iSp=0; iSp<convertedSpacePoints.size(); ++iSp) {
 
 1192       bool isPix = convertedSpacePoints[iSp].isPixel();
 
 1193       bool isSct = convertedSpacePoints[iSp].isSCT();
 
 1194       if( ! 
isPix && ! isSct ) 
continue;
 
 1195       const Trk::SpacePoint* sp = convertedSpacePoints[iSp].offlineSpacePoint();
 
 1199    int n_id_usedByTrack = 0;
 
 1200    for(
auto it=umap_sp_identifier.begin(); 
it!=umap_sp_identifier.end(); ++
it) {
 
 1202      if( umap_fittedTrack_identifier.find(id_sp) != umap_fittedTrack_identifier.end() ) {
 
 1203        umap_sp_identifier[id_sp] = umap_fittedTrack_identifier[id_sp];
 
 1207    ATH_MSG_DEBUG(
"Nr of SPs / Identifiers (all) / Identifiers (usedByTrack) = " << convertedSpacePoints.size() << 
" / " << umap_sp_identifier.size() << 
" / " << n_id_usedByTrack);
 
 1210      int usedTrack_id = -1;
 
 1213        if( umap_sp_identifier.find(id_prd) != umap_sp_identifier.end() ) {
 
 1214          usedTrack_id = umap_sp_identifier[id_prd];
 
 1217      return usedTrack_id;
 
 1220    std::vector<float> v_sp_eta;
 
 1221    v_sp_eta.reserve(convertedSpacePoints.size());
 
 1222    std::vector<float> v_sp_r;
 
 1223    v_sp_r.reserve(convertedSpacePoints.size());
 
 1224    std::vector<float> v_sp_phi;
 
 1225    v_sp_phi.reserve(convertedSpacePoints.size());
 
 1226    std::vector<int>   v_sp_layer;
 
 1227    v_sp_layer.reserve(convertedSpacePoints.size());
 
 1228    std::vector<bool>  v_sp_isPix;
 
 1229    v_sp_isPix.reserve(convertedSpacePoints.size());
 
 1230    std::vector<bool>  v_sp_isSct;
 
 1231    v_sp_isSct.reserve(convertedSpacePoints.size());
 
 1232    std::vector<int>   v_sp_usedTrkId;
 
 1233    v_sp_usedTrkId.reserve(convertedSpacePoints.size());
 
 1235    for(
const auto& sp : convertedSpacePoints) {
 
 1236       bool isPix = sp.isPixel();
 
 1237       bool isSct = sp.isSCT();
 
 1238       if( ! 
isPix && ! isSct ) 
continue;
 
 1241       int usedTrack_id  = -1;
 
 1242       int usedTrack_id_first = sp_map_used_id(osp->
clusterList().first);
 
 1243       if (usedTrack_id_first != -1) {
 
 1244         usedTrack_id = usedTrack_id_first;
 
 1246       int usedTrack_id_second = sp_map_used_id(osp->
clusterList().second);
 
 1247       if (usedTrack_id_second != -1) {
 
 1248         usedTrack_id = usedTrack_id_second;
 
 1253       if( usedTrack_id != -1 ) n_sp_usedByTrk++;
 
 1254       int  layer = sp.layer();
 
 1255       float sp_r = sp.
r();
 
 1258       float sp_eta = pos_sp.eta();
 
 1259       float sp_phi = pos_sp.phi();
 
 1261       v_sp_eta.push_back(sp_eta);
 
 1262       v_sp_r.push_back(sp_r);
 
 1263       v_sp_phi.push_back(sp_phi);
 
 1264       v_sp_layer.push_back(
layer);
 
 1265       v_sp_isPix.push_back(
isPix);
 
 1266       v_sp_isSct.push_back(isSct);
 
 1267       v_sp_usedTrkId.push_back(usedTrack_id);
 
 1269       ATH_MSG_VERBOSE(
"+++ SP eta / phi / layer / ixPix / usedTrack_id = " << sp_eta << 
" / " << sp_phi << 
" / " << 
layer << 
" / " << 
isPix << 
" / " << usedTrack_id);
 
 1272    ATH_MSG_DEBUG(
"Nr of SPs / all = " << n_sp << 
" / " << convertedSpacePoints.size());
 
 1273    ATH_MSG_DEBUG(
"Nr of SPs used by selected tracks = " << n_sp_usedByTrk);
 
 1276    std::vector<float>   v_seeds_eta;
 
 1277    std::vector<float>   v_seeds_phi;
 
 1278    std::vector<int16_t> v_seeds_type;
 
 1283       const unsigned int L1JET_ET_CUT = 27; 
 
 1287       if (!jetRoiCollectionHandle.isValid()){
 
 1289           return StatusCode::FAILURE;
 
 1293          if( jetRoI == 
nullptr ) 
continue;
 
 1295          if( jetRoI->
et() >= L1JET_ET_CUT ) {
 
 1296             v_seeds_eta.push_back(jetRoI->
eta());
 
 1297             v_seeds_phi.push_back(jetRoI->
phi());
 
 1298             v_seeds_type.push_back(0); 
 
 1301       ATH_MSG_DEBUG(
"Nr of L1_J" << L1JET_ET_CUT << 
" seeds = " << v_seeds_eta.size());
 
 1304       std::vector<float> v_spseeds_eta;
 
 1305       std::vector<float> v_spseeds_phi;
 
 1306       ATH_CHECK( 
findSPSeeds(ctx, v_sp_eta, v_sp_phi, v_sp_layer, v_sp_usedTrkId, v_spseeds_eta, v_spseeds_phi) );
 
 1308       for(
size_t idx=0; 
idx<v_spseeds_eta.size(); ++
idx) {
 
 1309          v_seeds_eta.push_back(v_spseeds_eta[
idx]);
 
 1310          v_seeds_phi.push_back(v_spseeds_phi[
idx]);
 
 1311          v_seeds_type.push_back(1); 
 
 1313       ATH_MSG_DEBUG(
"Nr of SP + L1_J" << L1JET_ET_CUT << 
" seeds = " << v_seeds_eta.size());
 
 1319    const int N_MAX_SEEDS = 200;
 
 1320    int n_seeds = 
std::min(N_MAX_SEEDS,(
int)v_seeds_eta.size());
 
 1321    hitDVSeedsContainer.reserve(n_seeds);
 
 1322    for(
auto iSeed=0; iSeed < n_seeds; ++iSeed) {
 
 1324       seed.eta = v_seeds_eta[iSeed];
 
 1325       seed.phi = v_seeds_phi[iSeed];
 
 1326       seed.type = v_seeds_type[iSeed];
 
 1327       hitDVSeedsContainer.push_back(seed);
 
 1331    const float TRKCUT_DELTA_R_TO_SEED = 1.0;
 
 1332    hitDVTrksContainer.reserve(v_dvtrk_pt.size());
 
 1333    for(
unsigned int iTrk=0; iTrk<v_dvtrk_pt.size(); ++iTrk) {
 
 1334       float trk_eta = v_dvtrk_eta[iTrk];
 
 1335       float trk_phi = v_dvtrk_phi[iTrk];
 
 1337      bool isNearSeed = 
false;
 
 1338      for (
unsigned int iSeed=0; iSeed<v_seeds_eta.size(); ++iSeed) {
 
 1339         float seed_eta = v_seeds_eta[iSeed];
 
 1340         float seed_phi = v_seeds_phi[iSeed];
 
 1341         float dR2 = 
deltaR2(trk_eta,trk_phi,seed_eta,seed_phi);
 
 1342         if( dR2 <= TRKCUT_DELTA_R_TO_SEED*TRKCUT_DELTA_R_TO_SEED ) { isNearSeed = 
true; 
break; }
 
 1344      if( ! isNearSeed ) 
continue;
 
 1347       hitDVTrk.
id           = v_dvtrk_id[iTrk];
 
 1348       hitDVTrk.
pt           = v_dvtrk_pt[iTrk];
 
 1349       hitDVTrk.
eta          = v_dvtrk_eta[iTrk];
 
 1350       hitDVTrk.
phi          = v_dvtrk_phi[iTrk];
 
 1352       hitDVTrk.
n_hits_pix   = v_dvtrk_n_hits_pix[iTrk];
 
 1353       hitDVTrk.
n_hits_sct   = v_dvtrk_n_hits_sct[iTrk];
 
 1354       hitDVTrk.
a0beam       = v_dvtrk_a0beam[iTrk];
 
 1356       hitDVTrksContainer.push_back(hitDVTrk);
 
 1360    const float SPCUT_DELTA_R_TO_SEED = 1.0;
 
 1361    const size_t n_sp_max = std::min<size_t>(100000, v_sp_eta.size());
 
 1362    size_t n_sp_stored = 0;
 
 1364    hitDVSPsContainer.reserve(n_sp_max);
 
 1366    for(
size_t iSp=0; iSp<v_sp_eta.size(); ++iSp) {
 
 1368        const float sp_eta = v_sp_eta[iSp];
 
 1369        const float sp_phi = v_sp_phi[iSp];
 
 1370        bool isNearSeed = 
false;
 
 1371        for (
size_t iSeed=0; iSeed<v_seeds_eta.size(); ++iSeed) {
 
 1372          const float seed_eta = v_seeds_eta[iSeed];
 
 1373          const float seed_phi = v_seeds_phi[iSeed];
 
 1374          const float dR2 = 
deltaR2(sp_eta, sp_phi, seed_eta, seed_phi);
 
 1375          if( dR2 <= SPCUT_DELTA_R_TO_SEED*SPCUT_DELTA_R_TO_SEED ) { isNearSeed = 
true; 
break; }
 
 1377        if( ! isNearSeed ) 
continue;
 
 1379      if( n_sp_stored >= n_sp_max ) 
break;
 
 1381      hitDVSP.
eta = v_sp_eta[iSp];
 
 1382      hitDVSP.
r   = v_sp_r[iSp];
 
 1383      hitDVSP.
phi = v_sp_phi[iSp];
 
 1384      hitDVSP.
layer = v_sp_layer[iSp];
 
 1385      hitDVSP.
isPix = v_sp_isPix[iSp];
 
 1386      hitDVSP.
isSct = v_sp_isSct[iSp];
 
 1387      hitDVSP.
usedTrkId = v_sp_usedTrkId[iSp];
 
 1388      hitDVSPsContainer.push_back(hitDVSP);
 
 1393    return StatusCode::SUCCESS;
 
 
 
 
◆ findJetSeeds()
  
  | 
        
          | StatusCode TrigHitDVHypoAlg::findJetSeeds | ( | const xAOD::JetContainer * | jetsContainer, |  
          |  |  | const float | cutJetPt, |  
          |  |  | const float | cutJetEta, |  
          |  |  | std::vector< float > & | jetSeeds_pt, |  
          |  |  | std::vector< float > & | jetSeeds_eta, |  
          |  |  | std::vector< float > & | jetSeeds_phi |  
          |  | ) |  | const |  | private | 
 
Definition at line 651 of file TrigHitDVHypoAlg.cxx.
  654    std::vector<float> mnt_jet_pt;
 
  655    std::vector<float> mnt_jet_eta;
 
  660    ATH_MSG_VERBOSE(
"looking for jet seed with pt cut=" << cutJetPt << 
", eta cut=" << cutJetEta);
 
  663       if( jet_pt < cutJetPt ) {
 
  667       mnt_jet_pt.push_back(jet_pt);
 
  668       float jet_eta = 
static_cast<float>(
jet->eta());
 
  669       mnt_jet_eta.push_back(jet_eta);
 
  670       if( std::fabs(jet_eta) > cutJetEta ) {
 
  674       float jet_phi = 
static_cast<float>(
jet->phi());
 
  675       jetSeeds_pt.push_back(jet_pt);
 
  676       jetSeeds_eta.push_back(jet_eta);
 
  677       jetSeeds_phi.push_back(
jet_phi);
 
  681    return StatusCode::SUCCESS;
 
 
 
 
◆ findSPSeeds() [1/2]
  
  | 
        
          | StatusCode TrigHitDVHypoAlg::findSPSeeds | ( | const EventContext & | ctx, |  
          |  |  | const std::vector< HitDVSpacePoint > & | spsContainer, |  
          |  |  | std::vector< float > & | seeds_eta, |  
          |  |  | std::vector< float > & | seeds_phi |  
          |  | ) |  | const |  | private | 
 
Definition at line 687 of file TrigHitDVHypoAlg.cxx.
  693    const int   NBINS_ETA = 50;
 
  694    const float ETA_MIN   = -2.5;
 
  695    const float ETA_MAX   =  2.5;
 
  697    const int   NBINS_PHI = 80;
 
  698    const float PHI_MIN   = -4.0;
 
  699    const float PHI_MAX   =  4.0;
 
  703    unsigned int slotnr    = ctx.slot();
 
  704    unsigned int subSlotnr = ctx.subSlot();
 
  706    sprintf(
hname,
"hitdv_s%u_ss%u_ly6_h2_nsp",slotnr,subSlotnr);
 
  707    std::unique_ptr<TH2F> ly6_h2_nsp = std::make_unique<TH2F>(
hname,
hname,NBINS_ETA,ETA_MIN,ETA_MAX,NBINS_PHI,PHI_MIN,PHI_MAX);
 
  708    sprintf(
hname,
"hitdv_s%u_ss%u_ly7_h2_nsp",slotnr,subSlotnr);
 
  709    std::unique_ptr<TH2F> ly7_h2_nsp = std::make_unique<TH2F>(
hname,
hname,NBINS_ETA,ETA_MIN,ETA_MAX,NBINS_PHI,PHI_MIN,PHI_MAX);
 
  711    sprintf(
hname,
"hitdv_s%u_ss%u_ly6_h2_nsp_notrk",slotnr,subSlotnr);
 
  712    std::unique_ptr<TH2F> ly6_h2_nsp_notrk = std::make_unique<TH2F>(
hname,
hname,NBINS_ETA,ETA_MIN,ETA_MAX,NBINS_PHI,PHI_MIN,PHI_MAX);
 
  713    sprintf(
hname,
"hitdv_s%u_ss%u_ly7_h2_nsp_notrk",slotnr,subSlotnr);
 
  714    std::unique_ptr<TH2F> ly7_h2_nsp_notrk = std::make_unique<TH2F>(
hname,
hname,NBINS_ETA,ETA_MIN,ETA_MAX,NBINS_PHI,PHI_MIN,PHI_MAX);
 
  716    for ( 
const auto& spData : spsContainer ) {
 
  717       int16_t sp_layer = spData.layer;
 
  718       float sp_eta = spData.eta;
 
  720       if( ilayer<6 ) 
continue;
 
  722       int sp_trkid = (
int)spData.usedTrkId;
 
  723       bool isUsedByTrk = (sp_trkid != -1);
 
  724       float sp_phi = spData.phi;
 
  726       bool fill_out_of_pi = 
false;
 
  729      sp_phi2 = 2*TMath::Pi() + sp_phi;
 
  730      if( sp_phi2 < PHI_MAX ) fill_out_of_pi = 
true;
 
  733      sp_phi2 = -2*TMath::Pi() + sp_phi;
 
  734      if( PHI_MIN < sp_phi2 ) fill_out_of_pi = 
true;
 
  737                           ly6_h2_nsp->Fill(sp_eta,sp_phi);
 
  738      if( fill_out_of_pi ) ly6_h2_nsp->Fill(sp_eta,sp_phi2);
 
  739      if( ! isUsedByTrk )                  ly6_h2_nsp_notrk->Fill(sp_eta,sp_phi);
 
  740      if( ! isUsedByTrk && fill_out_of_pi) ly6_h2_nsp_notrk->Fill(sp_eta,sp_phi2);
 
  743                           ly7_h2_nsp->Fill(sp_eta,sp_phi);
 
  744      if( fill_out_of_pi ) ly7_h2_nsp->Fill(sp_eta,sp_phi2);
 
  745      if( ! isUsedByTrk )                  ly7_h2_nsp_notrk->Fill(sp_eta,sp_phi);
 
  746      if( ! isUsedByTrk && fill_out_of_pi) ly7_h2_nsp_notrk->Fill(sp_eta,sp_phi2);
 
  753    std::vector<std::tuple<int,float,float,float>> QT;
 
  755    for(
int ly6_ieta=1; ly6_ieta<=NBINS_ETA; ly6_ieta++) {
 
  756       float ly6_eta = (ly6_h2_nsp->GetXaxis()->GetBinLowEdge(ly6_ieta) + ly6_h2_nsp->GetXaxis()->GetBinUpEdge(ly6_ieta))/2.0;
 
  757       for(
int ly6_iphi=1; ly6_iphi<=NBINS_PHI; ly6_iphi++) {
 
  758      float ly6_phi = (ly6_h2_nsp->GetYaxis()->GetBinLowEdge(ly6_iphi) + ly6_h2_nsp->GetYaxis()->GetBinUpEdge(ly6_iphi))/2.0;
 
  760      float ly6_nsp       = ly6_h2_nsp      ->GetBinContent(ly6_ieta,ly6_iphi);
 
  761      float ly6_nsp_notrk = ly6_h2_nsp_notrk->GetBinContent(ly6_ieta,ly6_iphi);
 
  762      float ly6_frac      = ( ly6_nsp > 0 ) ? ly6_nsp_notrk / ly6_nsp : 0;
 
  763      if( ly6_nsp < 10 || ly6_frac < 0.85 ) 
continue;
 
  765      float ly7_frac_max = 0;
 
  766      float ly7_eta_max  = 0;
 
  767      float ly7_phi_max  = 0;
 
  768      for(
int ly7_ieta=
std::max(1,ly6_ieta-1); ly7_ieta<
std::min(NBINS_ETA,ly6_ieta+1); ly7_ieta++) {
 
  769         for(
int ly7_iphi=
std::max(1,ly6_iphi-1); ly7_iphi<=
std::min(NBINS_PHI,ly6_iphi+1); ly7_iphi++) {
 
  770            float ly7_nsp       = ly7_h2_nsp      ->GetBinContent(ly7_ieta,ly7_iphi);
 
  771            float ly7_nsp_notrk = ly7_h2_nsp_notrk->GetBinContent(ly7_ieta,ly7_iphi);
 
  772            float ly7_frac      = ( ly7_nsp > 0 ) ? ly7_nsp_notrk / ly7_nsp : 0;
 
  773            if( ly7_nsp < 10 ) 
continue;
 
  774            if( ly7_frac > ly7_frac_max ) {
 
  775           ly7_frac_max = ly7_frac;
 
  776           ly7_eta_max  = (ly7_h2_nsp->GetXaxis()->GetBinLowEdge(ly7_ieta) + ly7_h2_nsp->GetXaxis()->GetBinUpEdge(ly7_ieta))/2.0;
 
  777           ly7_phi_max  = (ly7_h2_nsp->GetXaxis()->GetBinLowEdge(ly7_iphi) + ly7_h2_nsp->GetXaxis()->GetBinUpEdge(ly7_iphi))/2.0;
 
  781      if( ly7_frac_max < 0.85 ) 
continue;
 
  783      float wsum = ly6_frac + ly7_frac_max;
 
  784      float weta = (ly6_eta*ly6_frac + ly7_eta_max*ly7_frac_max) / wsum;
 
  785      float wphi = (ly6_phi*ly6_frac + ly7_phi_max*ly7_frac_max) / wsum;
 
  786      float w = wsum / 2.0;
 
  787      QT.push_back(std::make_tuple(-1,
w,weta,wphi));
 
  790    ATH_MSG_VERBOSE(
"nr of ly6/ly7 doublet candidate seeds=" << QT.size() << 
", doing clustering...");
 
  794          [](
const std::tuple<int,float,float,float>& lhs, 
const std::tuple<int,float,float,float>& rhs) {
 
  795         return std::get<1>(lhs) > std::get<1>(rhs); } );
 
  798    const double CLUSTCUT_DIST_SQUARED = 0.04; 
 
  799    const double CLUSTCUT_SEED_FRAC    = 0.9;
 
  801    std::vector<float> seeds_wsum;
 
  803    for(
unsigned int i=0; 
i<QT.size(); 
i++) {
 
  804       float phi  = std::get<3>(QT[
i]);
 
  805       float eta  = std::get<2>(QT[
i]);
 
  806       float w    = std::get<1>(QT[
i]);
 
  808      seeds_eta.push_back(
w*
eta); seeds_phi.push_back(
w*
phi);
 
  809      seeds_wsum.push_back(
w);
 
  812       const int IDX_INITIAL = 100;
 
  813       float dist2_min = 100.0;
 
  815       for(
unsigned j=0; j<seeds_eta.size(); j++) {
 
  816      float ceta = seeds_eta[j]/seeds_wsum[j];
 
  817      float cphi = seeds_phi[j]/seeds_wsum[j];
 
  819      float deta  = std::fabs(ceta-
eta);
 
  820      float dphi  = std::fabs(cphi-
phi);
 
  821      float dist2 = dphi*dphi+deta*deta;
 
  822      if( dist2 < dist2_min ) {
 
  827       int match_idx = IDX_INITIAL;
 
  829      if( dist2_min < CLUSTCUT_DIST_SQUARED ) { match_idx = 
idx_min; }
 
  831       if( match_idx == IDX_INITIAL ) {
 
  832      if( 
w > CLUSTCUT_SEED_FRAC && dist2_min > CLUSTCUT_DIST_SQUARED ) {
 
  833         seeds_eta.push_back(
w*
eta); seeds_phi.push_back(
w*
phi);
 
  834         seeds_wsum.push_back(
w);
 
  838       float new_eta   = seeds_eta[match_idx]  + 
w*
eta;
 
  839       float new_phi   = seeds_phi[match_idx]  + 
w*
phi;
 
  840       float new_wsum  = seeds_wsum[match_idx] + 
w;
 
  841       seeds_eta[match_idx]   = new_eta;
 
  842       seeds_phi[match_idx]   = new_phi;
 
  843       seeds_wsum[match_idx]  = new_wsum;
 
  846    for(
unsigned int i=0; 
i<seeds_eta.size(); 
i++) {
 
  847       float eta = seeds_eta[
i] / seeds_wsum[
i];
 
  848       float phi = seeds_phi[
i] / seeds_wsum[
i];
 
  851       if( 
phi < -TMath::Pi() ) 
phi =  2*TMath::Pi() + 
phi;
 
  852       if( 
phi >  TMath::Pi() ) 
phi = -2*TMath::Pi() + 
phi;
 
  855    ATH_MSG_VERBOSE(
"after clustering, nr of seeds = " << seeds_eta.size());
 
  858    std::vector<unsigned int> idx_to_delete;
 
  859    for(
unsigned int i=0; 
i<seeds_eta.size(); 
i++) {
 
  860       if( 
std::find(idx_to_delete.begin(),idx_to_delete.end(),
i) != idx_to_delete.end() ) 
continue;
 
  861       float eta_i = seeds_eta[
i];
 
  862       float phi_i = seeds_phi[
i];
 
  863       for(
unsigned int j=
i+1; j<seeds_eta.size(); j++) {
 
  864      if( 
std::find(idx_to_delete.begin(),idx_to_delete.end(),j) != idx_to_delete.end() ) 
continue;
 
  865      float eta_j = seeds_eta[j];
 
  866      float phi_j = seeds_phi[j];
 
  867      float dR2 = 
deltaR2(eta_i,phi_i,eta_j,phi_j);
 
  868      if( dR2 < CLUSTCUT_DIST_SQUARED ) idx_to_delete.push_back(j);
 
  871    ATH_MSG_VERBOSE(
"nr of duplicated seeds to be removed = " << idx_to_delete.size());
 
  872    if( idx_to_delete.size() > 0 ) {
 
  873       std::sort(idx_to_delete.begin(),idx_to_delete.end());
 
  874       for(
unsigned int j=idx_to_delete.size(); j>0; j--) {
 
  875      unsigned int idx = idx_to_delete[j-1];
 
  876      seeds_eta.erase(seeds_eta.begin()+
idx);
 
  877      seeds_phi.erase(seeds_phi.begin()+
idx);
 
  884    return StatusCode::SUCCESS;
 
 
 
 
◆ findSPSeeds() [2/2]
  
  | 
        
          | StatusCode TrigHitDVHypoAlg::findSPSeeds | ( | const EventContext & | ctx, |  
          |  |  | const std::vector< float > & | v_sp_eta, |  
          |  |  | const std::vector< float > & | v_sp_phi, |  
          |  |  | const std::vector< int > & | v_sp_layer, |  
          |  |  | const std::vector< int > & | v_sp_usedTrkId, |  
          |  |  | std::vector< float > & | seeds_eta, |  
          |  |  | std::vector< float > & | seeds_phi |  
          |  | ) |  | const |  | private | 
 
Definition at line 920 of file TrigHitDVHypoAlg.cxx.
  925    const int   NBINS_ETA = 50;
 
  926    const float ETA_MIN   = -2.5;
 
  927    const float ETA_MAX   =  2.5;
 
  929    const int   NBINS_PHI = 80;
 
  930    const float PHI_MIN   = -4.0;
 
  931    const float PHI_MAX   =  4.0;
 
  935    unsigned int slotnr    = ctx.slot();
 
  936    unsigned int subSlotnr = ctx.subSlot();
 
  938    sprintf(
hname,
"ftf_s%u_ss%u_ly6_h2_nsp",slotnr,subSlotnr);
 
  939    std::unique_ptr<TH2F> ly6_h2_nsp = std::make_unique<TH2F>(
hname,
hname,NBINS_ETA,ETA_MIN,ETA_MAX,NBINS_PHI,PHI_MIN,PHI_MAX);
 
  940    sprintf(
hname,
"ftf_s%u_ss%u_ly7_h2_nsp",slotnr,subSlotnr);
 
  941    std::unique_ptr<TH2F> ly7_h2_nsp = std::make_unique<TH2F>(
hname,
hname,NBINS_ETA,ETA_MIN,ETA_MAX,NBINS_PHI,PHI_MIN,PHI_MAX);
 
  943    sprintf(
hname,
"ftf_s%u_ss%u_ly6_h2_nsp_notrk",slotnr,subSlotnr);
 
  944    std::unique_ptr<TH2F> ly6_h2_nsp_notrk = std::make_unique<TH2F>(
hname,
hname,NBINS_ETA,ETA_MIN,ETA_MAX,NBINS_PHI,PHI_MIN,PHI_MAX);
 
  945    sprintf(
hname,
"ftf_s%u_ss%u_ly7_h2_nsp_notrk",slotnr,subSlotnr);
 
  946    std::unique_ptr<TH2F> ly7_h2_nsp_notrk = std::make_unique<TH2F>(
hname,
hname,NBINS_ETA,ETA_MIN,ETA_MAX,NBINS_PHI,PHI_MIN,PHI_MAX);
 
  948    for(
unsigned int iSeed=0; iSeed<v_sp_eta.size(); ++iSeed) {
 
  950       int sp_layer = v_sp_layer[iSeed];
 
  951       float sp_eta = v_sp_eta[iSeed];
 
  953       if( ilayer<6 ) 
continue;
 
  955       int sp_trkid = v_sp_usedTrkId[iSeed];
 
  956       bool isUsedByTrk = (sp_trkid != -1);
 
  957       float sp_phi = v_sp_phi[iSeed];
 
  959       bool fill_out_of_pi = 
false;
 
  962      sp_phi2 = 2*TMath::Pi() + sp_phi;
 
  963      if( sp_phi2 < PHI_MAX ) fill_out_of_pi = 
true;
 
  966      sp_phi2 = -2*TMath::Pi() + sp_phi;
 
  967      if( PHI_MIN < sp_phi2 ) fill_out_of_pi = 
true;
 
  970                           ly6_h2_nsp->Fill(sp_eta,sp_phi);
 
  971      if( fill_out_of_pi ) ly6_h2_nsp->Fill(sp_eta,sp_phi2);
 
  972      if( ! isUsedByTrk )                  ly6_h2_nsp_notrk->Fill(sp_eta,sp_phi);
 
  973      if( ! isUsedByTrk && fill_out_of_pi) ly6_h2_nsp_notrk->Fill(sp_eta,sp_phi2);
 
  976                           ly7_h2_nsp->Fill(sp_eta,sp_phi);
 
  977      if( fill_out_of_pi ) ly7_h2_nsp->Fill(sp_eta,sp_phi2);
 
  978      if( ! isUsedByTrk )                  ly7_h2_nsp_notrk->Fill(sp_eta,sp_phi);
 
  979      if( ! isUsedByTrk && fill_out_of_pi) ly7_h2_nsp_notrk->Fill(sp_eta,sp_phi2);
 
  986    std::vector<std::tuple<int,float,float,float>> QT;
 
  988    for(
int ly6_ieta=1; ly6_ieta<=NBINS_ETA; ly6_ieta++) {
 
  989       float ly6_eta = (ly6_h2_nsp->GetXaxis()->GetBinLowEdge(ly6_ieta) + ly6_h2_nsp->GetXaxis()->GetBinUpEdge(ly6_ieta))/2.0;
 
  990       for(
int ly6_iphi=1; ly6_iphi<=NBINS_PHI; ly6_iphi++) {
 
  991      float ly6_phi = (ly6_h2_nsp->GetYaxis()->GetBinLowEdge(ly6_iphi) + ly6_h2_nsp->GetYaxis()->GetBinUpEdge(ly6_iphi))/2.0;
 
  993      float ly6_nsp       = ly6_h2_nsp      ->GetBinContent(ly6_ieta,ly6_iphi);
 
  994      float ly6_nsp_notrk = ly6_h2_nsp_notrk->GetBinContent(ly6_ieta,ly6_iphi);
 
  995      float ly6_frac      = ( ly6_nsp > 0 ) ? ly6_nsp_notrk / ly6_nsp : 0;
 
  996      if( ly6_nsp < 10 || ly6_frac < 0.85 ) 
continue;
 
  998      float ly7_frac_max = 0;
 
  999      float ly7_eta_max  = 0;
 
 1000      float ly7_phi_max  = 0;
 
 1001      for(
int ly7_ieta=
std::max(1,ly6_ieta-1); ly7_ieta<
std::min(NBINS_ETA,ly6_ieta+1); ly7_ieta++) {
 
 1002         for(
int ly7_iphi=
std::max(1,ly6_iphi-1); ly7_iphi<=
std::min(NBINS_PHI,ly6_iphi+1); ly7_iphi++) {
 
 1003            float ly7_nsp       = ly7_h2_nsp      ->GetBinContent(ly7_ieta,ly7_iphi);
 
 1004            float ly7_nsp_notrk = ly7_h2_nsp_notrk->GetBinContent(ly7_ieta,ly7_iphi);
 
 1005            float ly7_frac      = ( ly7_nsp > 0 ) ? ly7_nsp_notrk / ly7_nsp : 0;
 
 1006            if( ly7_nsp < 10 ) 
continue;
 
 1007            if( ly7_frac > ly7_frac_max ) {
 
 1008           ly7_frac_max = ly7_frac;
 
 1009           ly7_eta_max  = (ly7_h2_nsp->GetXaxis()->GetBinLowEdge(ly7_ieta) + ly7_h2_nsp->GetXaxis()->GetBinUpEdge(ly7_ieta))/2.0;
 
 1010           ly7_phi_max  = (ly7_h2_nsp->GetXaxis()->GetBinLowEdge(ly7_iphi) + ly7_h2_nsp->GetXaxis()->GetBinUpEdge(ly7_iphi))/2.0;
 
 1014      if( ly7_frac_max < 0.85 ) 
continue;
 
 1016      float wsum = ly6_frac + ly7_frac_max;
 
 1017      float weta = (ly6_eta*ly6_frac + ly7_eta_max*ly7_frac_max) / wsum;
 
 1018      float wphi = (ly6_phi*ly6_frac + ly7_phi_max*ly7_frac_max) / wsum;
 
 1019      float w = wsum / 2.0;
 
 1020      QT.push_back(std::make_tuple(-1,
w,weta,wphi));
 
 1023    ATH_MSG_VERBOSE(
"nr of ly6/ly7 doublet candidate seeds=" << QT.size() << 
", doing clustering...");
 
 1027          [](
const std::tuple<int,float,float,float>& lhs, 
const std::tuple<int,float,float,float>& rhs) {
 
 1028         return std::get<1>(lhs) > std::get<1>(rhs); } );
 
 1031    const double CLUSTCUT_DIST_SQUARED = 0.04; 
 
 1032    const double CLUSTCUT_SEED_FRAC    = 0.9;
 
 1034    std::vector<float> seeds_wsum;
 
 1036    for(
unsigned int i=0; 
i<QT.size(); 
i++) {
 
 1037       float phi  = std::get<3>(QT[
i]);
 
 1038       float eta  = std::get<2>(QT[
i]);
 
 1039       float w    = std::get<1>(QT[
i]);
 
 1041      seeds_eta.push_back(
w*
eta); seeds_phi.push_back(
w*
phi);
 
 1042      seeds_wsum.push_back(
w);
 
 1045       const int IDX_INITIAL = 100;
 
 1046       float dist2_min = 100.0;
 
 1048       for(
unsigned j=0; j<seeds_eta.size(); j++) {
 
 1049      float ceta = seeds_eta[j]/seeds_wsum[j];
 
 1050      float cphi = seeds_phi[j]/seeds_wsum[j];
 
 1052      float deta  = std::fabs(ceta-
eta);
 
 1053      float dphi  = std::fabs(cphi-
phi);
 
 1054      float dist2 = dphi*dphi+deta*deta;
 
 1055      if( dist2 < dist2_min ) {
 
 1060       int match_idx = IDX_INITIAL;
 
 1061       if( 
idx_min != IDX_INITIAL ) {
 
 1062      if( dist2_min < CLUSTCUT_DIST_SQUARED ) { match_idx = 
idx_min; }
 
 1064       if( match_idx == IDX_INITIAL ) {
 
 1065      if( 
w > CLUSTCUT_SEED_FRAC && dist2_min > CLUSTCUT_DIST_SQUARED ) {
 
 1066         seeds_eta.push_back(
w*
eta); seeds_phi.push_back(
w*
phi);
 
 1067         seeds_wsum.push_back(
w);
 
 1071       float new_eta   = seeds_eta[match_idx]  + 
w*
eta;
 
 1072       float new_phi   = seeds_phi[match_idx]  + 
w*
phi;
 
 1073       float new_wsum  = seeds_wsum[match_idx] + 
w;
 
 1074       seeds_eta[match_idx]   = new_eta;
 
 1075       seeds_phi[match_idx]   = new_phi;
 
 1076       seeds_wsum[match_idx]  = new_wsum;
 
 1079    for(
unsigned int i=0; 
i<seeds_eta.size(); 
i++) {
 
 1080       float eta = seeds_eta[
i] / seeds_wsum[
i];
 
 1081       float phi = seeds_phi[
i] / seeds_wsum[
i];
 
 1083       if( 
phi < -TMath::Pi() ) 
phi =  2*TMath::Pi() + 
phi;
 
 1084       if( 
phi >  TMath::Pi() ) 
phi = -2*TMath::Pi() + 
phi;
 
 1087    ATH_MSG_VERBOSE(
"after clustering, nr of seeds = " << seeds_eta.size());
 
 1090    std::vector<unsigned int> idx_to_delete;
 
 1091    for(
unsigned int i=0; 
i<seeds_eta.size(); 
i++) {
 
 1092       if( 
std::find(idx_to_delete.begin(),idx_to_delete.end(),
i) != idx_to_delete.end() ) 
continue;
 
 1093       float eta_i = seeds_eta[
i];
 
 1094       float phi_i = seeds_phi[
i];
 
 1095       for(
unsigned int j=
i+1; j<seeds_eta.size(); j++) {
 
 1096      if( 
std::find(idx_to_delete.begin(),idx_to_delete.end(),j) != idx_to_delete.end() ) 
continue;
 
 1097      float eta_j = seeds_eta[j];
 
 1098      float phi_j = seeds_phi[j];
 
 1099      float dR2 = 
deltaR2(eta_i,phi_i,eta_j,phi_j);
 
 1100      if( dR2 < CLUSTCUT_DIST_SQUARED ) idx_to_delete.push_back(j);
 
 1103    ATH_MSG_VERBOSE(
"nr of duplicated seeds to be removed = " << idx_to_delete.size());
 
 1104    if( idx_to_delete.size() > 0 ) {
 
 1105       std::sort(idx_to_delete.begin(),idx_to_delete.end());
 
 1106       for(
unsigned int j=idx_to_delete.size(); j>0; j--) {
 
 1107      unsigned int idx = idx_to_delete[j-1];
 
 1108      seeds_eta.erase(seeds_eta.begin()+
idx);
 
 1109      seeds_phi.erase(seeds_phi.begin()+
idx);
 
 1116    return StatusCode::SUCCESS;
 
 
 
 
◆ getSPLayer()
  
  | 
        
          | int TrigHitDVHypoAlg::getSPLayer | ( | int | layer, |  
          |  |  | float | eta |  
          |  | ) |  | const |  | private | 
 
Definition at line 332 of file TrigHitDVHypoAlg.cxx.
  334    float abseta = std::fabs(
eta);
 
  347    const float PixBR6limit = 1.29612;
 
  348    const float PixBR5limit = 1.45204;
 
  349    const float PixBR4limit = 1.64909;
 
  350    const float PixBR3limit = 1.90036;
 
  351    const float PixBR2limit = 2.2146;
 
  357       if( abseta > PixBR2limit ) 
return 2;
 
  365       if( abseta > PixBR2limit ) 
return 2;
 
  380       if( abseta < PixBR6limit )      
return 7;
 
  381       else if( abseta < PixBR5limit ) 
return 6;
 
  389       if( abseta < PixBR5limit )      
return 7;
 
  390       else if( abseta < PixBR4limit ) 
return 6;
 
  398       if( abseta < PixBR4limit ) 
return 7;
 
  406       if( abseta < PixBR4limit ) 
return 6;
 
  407       else if( abseta < PixBR3limit ) 
return 6;
 
  415       if( abseta < PixBR3limit ) 
return 7;
 
  423       if( abseta < PixBR3limit ) 
return 6;
 
  431       if( abseta < PixBR3limit ) 
return 7;
 
  439       if( abseta < PixBR3limit ) 
return 7;
 
 
 
 
◆ hypoBaseOutputProcessing()
Base class function to be called once slice specific code has finished. Handles debug printing and validation. 
Definition at line 35 of file HypoBase.cxx.
   43   return StatusCode::SUCCESS;
 
 
 
 
◆ initialize()
  
  | 
        
          | StatusCode TrigHitDVHypoAlg::initialize | ( |  | ) |  |  | overridevirtual | 
 
Definition at line 55 of file TrigHitDVHypoAlg.cxx.
   64      std::string sth = 
results[1].str();
 
   65      std::string swp = 
results[2].str();
 
   67      int thres = std::stoi(sth);
 
   93    std::string weightfile[2];
 
   96    for (
unsigned int i=0; 
i<2; ++
i) {
 
   97      std::unique_ptr<TFile> 
rootFile(TFile::Open(weightfile[
i].c_str(), 
"READ"));
 
  100        return StatusCode::FAILURE;
 
  102      std::unique_ptr<TTree> 
tree((TTree*)
rootFile->Get(
"BDT"));
 
  104        ATH_MSG_ERROR(
"Can not find BDT tree in file: " << weightfile[
i]);
 
  105        return StatusCode::FAILURE;
 
  107      ATH_MSG_INFO(
"Loading BDT tree from file: " << weightfile[
i]);
 
  111    return StatusCode::SUCCESS;
 
 
 
 
◆ inputHandles()
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()
◆ msg() [1/2]
◆ msg() [2/2]
◆ msgLvl()
◆ outputHandles()
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 390 of file HypoBase.cxx.
  391   msg << MSG::ERROR << 
"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" << 
endmsg;
 
 
 
 
◆ printDebugInformation()
Common base function to print information on chains passed by objects considered in the hypo. 
Definition at line 406 of file HypoBase.cxx.
  409     msg() << 
"Exiting with " << outputHandle->
size() <<
" Decision objects" << 
endmsg;
 
  414       msg() << 
"Number of positive decisions for Decision object #" << 
count++ << 
": " << objDecisions.size() << 
endmsg;
 
  420   return StatusCode::SUCCESS;
 
 
 
 
◆ printErrorHeader()
A problem was found, print common output data. 
Definition at line 395 of file HypoBase.cxx.
  399   msg << MSG::ERROR << 
"! RUNTIME TRIGGER NAVIGATION VALIDATION ERROR" << 
endmsg;
 
  400   msg << MSG::ERROR << 
"! Caused by Decision with index:" << (*dEL)->index() << 
endmsg;
 
  402   msg << MSG::ERROR << 
"! " << **dEL << 
endmsg;
 
 
 
 
◆ recursiveValidateGraph()
Execute all checks on one node in the graph, d, then recursive call self on all parent nodes up to L1. 
Definition at line 71 of file HypoBase.cxx.
   78   if (onlyValidateOneStep && callDepth > 0) {
 
   82       return StatusCode::SUCCESS;
 
   90       return StatusCode::FAILURE;
 
   95       return StatusCode::FAILURE;
 
  101     return StatusCode::FAILURE;
 
  104     return StatusCode::FAILURE;
 
  109     return StatusCode::FAILURE;
 
  112     return StatusCode::FAILURE;
 
  118     if (fullyExploredFrom.count( (*seed) ) == 1) {
 
  121     if ( not 
seed.isValid() ) {
 
  122       msg << MSG::ERROR << 
"Invalid seed element link in recursiveValidateGraph" << 
endmsg;
 
  123       return StatusCode::FAILURE;
 
  125     if ( 
recursiveValidateGraph(seed, 
msg, onlyValidateOneStep, runTwoConversion, callDepth + 1, fullyExploredFrom).isFailure() ) {
 
  126       return StatusCode::FAILURE;
 
  130   fullyExploredFrom.insert( *dEL );
 
  131   return StatusCode::SUCCESS;
 
 
 
 
◆ renounce()
◆ renounceArray()
◆ runtimeValidation()
Executes all individual runtime tests. 
Definition at line 47 of file HypoBase.cxx.
   53   std::set<const Decision*> fullyExploredFrom; 
 
   58       msg << MSG::ERROR << 
"Invalid seed element link in recursiveValidateGraph" << 
endmsg;
 
   59       return StatusCode::FAILURE;
 
   64       return StatusCode::FAILURE;
 
   67   return StatusCode::SUCCESS;
 
 
 
 
◆ selectSeedsNearby()
  
  | 
        
          | StatusCode TrigHitDVHypoAlg::selectSeedsNearby | ( | const std::vector< HitDVSeed > & | hitDVSeedsContainer, |  
          |  |  | std::vector< float > & | jetSeeds_eta, |  
          |  |  | std::vector< float > & | jetSeeds_phi, |  
          |  |  | std::vector< float > & | jetSeeds_pt |  
          |  | ) |  | const |  | private | 
 
Definition at line 890 of file TrigHitDVHypoAlg.cxx.
  893    std::vector<unsigned int> idx_to_delete;
 
  894    for(
unsigned int idx=0; 
idx<jetSeeds_eta.size(); ++
idx) {
 
  895       const float DR_SQUARED_CUT_TO_FTFSEED = 0.09; 
 
  896       float eta = jetSeeds_eta[
idx];
 
  897       float phi = jetSeeds_phi[
idx];
 
  899       for ( 
const auto& seed : hitDVSeedsContainer ) {
 
  901         if( dR2 < dR2min ) dR2min = dR2;
 
  903       if( dR2min > DR_SQUARED_CUT_TO_FTFSEED ) idx_to_delete.push_back(
idx);
 
  905    if( idx_to_delete.size() > 0 ) {
 
  906       std::sort(idx_to_delete.begin(),idx_to_delete.end());
 
  907       for(
unsigned int j=idx_to_delete.size(); j>0; j--) {
 
  908      unsigned int idx = idx_to_delete[j-1];
 
  909      jetSeeds_eta.erase(jetSeeds_eta.begin()+
idx);
 
  910      jetSeeds_phi.erase(jetSeeds_phi.begin()+
idx);
 
  911      if( jetSeeds_pt.size() > 0 ) jetSeeds_pt.erase(jetSeeds_pt.begin()+
idx);
 
  914    return StatusCode::SUCCESS;
 
 
 
 
◆ setFilterPassed()
◆ sysExecute()
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.
 
 
◆ sysInitialize()
  
  | 
        
          | StatusCode HypoBase::sysInitialize | ( |  | ) |  |  | overridevirtualinherited | 
 
 
◆ sysStart()
Handle START transition. 
We override this in order to make sure that conditions handle keys can cache a pointer to the conditions container. 
 
 
◆ updateVHKA()
◆ validateDecisionIDs()
Ensure that all present IDs correspond to configured chains. 
Definition at line 209 of file HypoBase.cxx.
  219       msg << MSG::ERROR << 
"! Decision contains an ID which does not correspond to a configured chain or a configured chain-leg: " << 
HLT::Identifier( 
id ) << 
endmsg;
 
  220       msg << MSG::ERROR << 
"! SOLUTION: Locate the producer of the collection, investigate how this bad ID could have been added." << 
endmsg;
 
  222       return StatusCode::FAILURE;
 
  225   return StatusCode::SUCCESS;
 
 
 
 
◆ validateDuplicatedDecisionID()
Ensure that no space is being wasted by duplicated DecisionIDs in any Decision objects. 
Definition at line 229 of file HypoBase.cxx.
  235   if (decisionIDSet.size() != (*dEL)->decisions().size()) {
 
  237     msg << MSG::ERROR << 
"! Decision contains duplicate DecisionIDs." << 
endmsg;
 
  238     msg << MSG::ERROR << 
"! SOLUTION: If combining DecisionIDs from multiple parents, de-duplicate the internal std::vector<DecisionID> of 'Decision* d' with:" << 
endmsg;
 
  239     msg << MSG::ERROR << 
"!   TrigCompositeUtils::insertDecisionIDs(DecisionIDContainer(), d);"  << 
endmsg;
 
  241     return StatusCode::FAILURE;
 
  243   return StatusCode::SUCCESS;
 
 
 
 
◆ validateHasLinks()
Ensure all Decisions have the named ElementLink graph edges which they are required to by spec. 
Definition at line 338 of file HypoBase.cxx.
  341   const std::string& 
name = (*dEL)->name();
 
  346       return StatusCode::SUCCESS;
 
  350     msg << MSG::ERROR << 
"! Every Decision created by a HypoAlg must correspond to some physics object, and be linked to the object." << 
endmsg;
 
  351     msg << MSG::ERROR << 
"! SOLUTION: Ensure that all produced Decision objects are assigned their feature:" << 
endmsg;
 
  352     msg << MSG::ERROR << 
"! SOLUTION:    decision->setObjectLink<MY_FEATURE_CONTANER_TYPE>(featureString(), MY_FEATURE_ELEMENT_LINK);" << 
endmsg;
 
  354     return StatusCode::FAILURE;
 
  360     if ((*dEL)->hasDetail<int32_t>(
"isEmpty") and (*dEL)->getDetail<int32_t>(
"isEmpty") == 1) {
 
  364     if (not (*dEL)->hasObjectLink( 
roiString() ) and not exempt) {
 
  366       msg << MSG::ERROR << 
"! Decision has no '" << 
roiString() << 
"' ElementLink." << 
endmsg;
 
  367       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;
 
  368       msg << MSG::ERROR << 
"! It can be the FullScan ROI created by the HLTSeeding (FSNOSEED) if no other suitable ROI exists." << 
endmsg;
 
  369       msg << MSG::ERROR << 
"! SOLUTION: Check the configuration of InputMakerForRoI or EventViewCreatorAlgorithm responsible for creating this Decision Object" << 
endmsg;
 
  370       msg << MSG::ERROR << 
"! SOLUTION: The algorithm must have an ROITool which must attach an '"<< 
roiString() <<
"' link to each Decision Object" << 
endmsg;
 
  379       msg << MSG::ERROR << 
"! Every Decision created by the HLTSeeding must link to the initial ROI which caused it to be created." << 
endmsg;
 
  380       msg << MSG::ERROR << 
"! This includes the Decision Object created to represent the Full-Scan/NoSeed (FSNOSEED) ROI." << 
endmsg;
 
  381       msg << MSG::ERROR << 
"! SOLUTION: Check the configuration of the HLTSeeding tool responsible for creating this Decision Object" << 
endmsg;
 
  386   return StatusCode::SUCCESS;
 
 
 
 
◆ validateLogicalFlow()
Ensure that all DecisionIDs have propagated correctly from their parent. 
Definition at line 247 of file HypoBase.cxx.
  253     return StatusCode::SUCCESS;
 
  262     size_t parentsWithDecision = 0;  
 
  264       if ( not 
seed.isValid() ) {
 
  265         msg << MSG::ERROR << 
"Invalid seed element link in recursiveValidateGraph" << 
endmsg;
 
  266         return StatusCode::FAILURE;
 
  274         ++parentsWithDecision;
 
  277         for (
auto sid: seedIDSet){
 
  279             ++parentsWithDecision;
 
  290       msg << MSG::ERROR << 
"! This Decision object is not respecting logical flow of DecisionIDs for chain: " << 
HLT::Identifier( 
id ) << 
endmsg;
 
  291       msg << MSG::ERROR << 
"! This chain's DecisionID can not be found in any parents of this Decision object:" << 
endmsg;
 
  294         msg << MSG::ERROR << 
"! Index:" << (*seed)->index() << 
" from collection:" << 
seed.dataID() << 
endmsg;
 
  303       msg << MSG::ERROR << 
"! SOLUTION: Ensure that the producer of this Decision object only adds DecisionIDs" 
  304         " which were present in at least one of its parents." << 
endmsg;
 
  306       return StatusCode::FAILURE;
 
  307     } 
else if (
mode == 
kRequireAll && parentsWithDecision != seeds.size()) {
 
  314       msg << MSG::ERROR << 
"! This Decision object is not respecting logical flow of DecisionIDs for chain: " << 
HLT::Identifier( 
id ) << 
endmsg;
 
  315       msg << MSG::ERROR << 
"! As this Decision object represents the output of a HypoAlg, it must respect logical flow on all "  
  316         << seeds.size() << 
" of its parent(s):" << 
endmsg;
 
  319         msg << MSG::ERROR << 
"! Index:" << (*seed)->index() << 
" from collection:" << 
seed.dataID() << 
endmsg;
 
  328       msg << MSG::ERROR << 
"! SOLUTION: Ensure that the HypoTool responsible for " << 
HLT::Identifier( 
id ) 
 
  329         << 
" in this HypoAlg only runs if this ID is present in all parent decisions." << 
endmsg;
 
  331       return StatusCode::FAILURE;
 
  334   return StatusCode::SUCCESS;
 
 
 
 
◆ validateParentLinking()
Ensure that the Decision has at least one valid parent, unless it is a initial Decision from the HLTSeeding. 
Definition at line 135 of file HypoBase.cxx.
  141   const std::string& 
name = (*dEL)->name();
 
  144     msg << MSG::ERROR << 
"! Decision has zero parents. This is only allowed for the initial Decisions created by the HLTSeeding." << 
endmsg;
 
  145     msg << MSG::ERROR << 
"! SOLUTION: Attach parent Decision(s) with TrigCompositeUtils::linkToPrevious" << 
endmsg;
 
  147     return StatusCode::FAILURE;
 
  151     if (seeds.size() > 0) {
 
  153        msg << MSG::ERROR << 
"! Decision has parents. This is not allowed for the initial Decisions created by the HLTSeeding." << 
endmsg;
 
  154        msg << MSG::ERROR << 
"! SOLUTION: Check HLTSeeding, no where should it be adding a parent link." << 
endmsg;
 
  156       return StatusCode::FAILURE;
 
  158     return StatusCode::SUCCESS;
 
  162   static const std::set<std::string> expectedParentsInputMaker = {
filterNodeName()};
 
  168   const std::set<std::string>* expectedParentsPtr = 
nullptr;
 
  170     expectedParentsPtr = &expectedParentsFilter;
 
  172     expectedParentsPtr = &expectedParentsInputMaker;
 
  174     expectedParentsPtr = &expectedParentsFilter; 
 
  176     expectedParentsPtr = &expectedParentsHypoAlg;
 
  178     expectedParentsPtr = &expectedParentsComboHypoAlg;
 
  180     expectedParentsPtr = &expectedParentsSummaryFilter;
 
  182     expectedParentsPtr = &expectedParentsSummaryPassed;
 
  185     msg << MSG::ERROR << 
"! Invalid Node name '" << 
name << 
"'." << 
endmsg;
 
  186     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;
 
  188     return StatusCode::FAILURE;
 
  192     if (!expectedParentsPtr->contains( (*seed)->name() )) {
 
  194       msg << MSG::ERROR << 
"! Invalid linking from node with name '" << 
name << 
"' to one with name '"<< (*seed)->name() << 
"'." << 
endmsg;
 
  195       msg << MSG::ERROR << 
"! Allowed seed names are:" << 
endmsg;
 
  196       for (
const std::string& allowed : *expectedParentsPtr) {
 
  197         msg << MSG::ERROR << 
"! " << allowed << 
endmsg;
 
  199       msg << MSG::ERROR << 
"! SOLUTION: Find where this invalid parent was added and correct it." << 
endmsg;
 
  201       return StatusCode::FAILURE;
 
  205   return StatusCode::SUCCESS;
 
 
 
 
◆ m_bdt_eta
◆ m_beamSpotKey
◆ m_detStore
◆ m_doHitDV_Seeding
  
  | 
        
          | bool TrigHitDVHypoAlg::m_doHitDV_Seeding = true |  | private | 
 
 
◆ m_evtStore
◆ m_extendedExtraObjects
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_hitDVKey
◆ m_hitDVLinkName
  
  | 
        
          | Gaudi::Property<std::string> TrigHitDVHypoAlg::m_hitDVLinkName {this, "hitDVLinkName", "HitDVSeedLink", "Name of the link to HitDVContainer. Used by ViewCreatorROITool."} |  | private | 
 
 
◆ m_hypoTools
◆ m_input
◆ m_isMC
  
  | 
        
          | Gaudi::Property<bool> TrigHitDVHypoAlg::m_isMC {this, "isMC", false, "Real data or MC"} |  | private | 
 
 
◆ m_jetRoiCollectionKey
◆ m_jetSeed_etaMax
  
  | 
        
          | Gaudi::Property<float> TrigHitDVHypoAlg::m_jetSeed_etaMax {this, "jetSeed_etaMin", 2.0, "Maximum eta for jet seed"} |  | private | 
 
 
◆ m_jetSeed_ptMin
  
  | 
        
          | Gaudi::Property<float> TrigHitDVHypoAlg::m_jetSeed_ptMin {this, "jetSeed_ptMin", 50.0, "Minimum pT for jet seed"} |  | private | 
 
 
◆ m_jetsKey
◆ m_lumiBlockMuTool
◆ m_lumiDataKey
◆ m_monTool
◆ m_output
◆ 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_spacePointTool
◆ m_tools_loosest_wp
  
  | 
        
          | int TrigHitDVHypoAlg::m_tools_loosest_wp = 0 |  | private | 
 
 
◆ m_tools_lowest_jetEt
  
  | 
        
          | int TrigHitDVHypoAlg::m_tools_lowest_jetEt = 1000 |  | private | 
 
 
◆ m_tracksKey
◆ m_useBeamSpot
  
  | 
        
          | bool TrigHitDVHypoAlg::m_useBeamSpot = true |  | private | 
 
 
◆ m_varHandleArraysDeclared
◆ m_vhka
The documentation for this class was generated from the following files:
 
const std::pair< const PrepRawData *, const PrepRawData * > & clusterList() const
return the pair of cluster pointers by reference
JetConstituentVector::iterator iterator
const std::string & featureString()
static std::string find_calib_file(const std::string &logical_file_name)
std::unique_ptr< MVAUtils::BDT > m_bdt_eta[2]
Class describing properties of a LVL1 jFEX global Trigger Object (TOB) in the xAOD format.
Group
Properties of a chain group.
Scalar phi() const
phi method
bool passed(DecisionID id, const DecisionIDContainer &idSet)
checks if required decision ID is in the set of IDs in the container
std::string find(const std::string &s)
return a remapped string
bool isGoodTrackUTT(const Trk::Track *track, trackInfo &theTrackInfo, const float shift_x, const float shift_y, float trkcut_ptgev)
ToolHandle< ITrigSpacePointConversionTool > m_spacePointTool
TrigComposite_v1 TrigComposite
Declare the latest version of the class.
virtual const Amg::Vector3D & globalPosition() const override final
Interface method to get the global Position.
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.
Scalar eta() const
pseudorapidity method
const std::string & summaryFilterNodeName()
T wrapToPi(T phi)
Wrap angle in radians to [-pi, pi].
SG::ReadHandleKey< xAOD::jFexSRJetRoIContainer > m_jetRoiCollectionKey
const std::string & summaryPassNodeName()
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)
StoreGateSvc_t m_evtStore
Pointer to StoreGate (event store by default)
std::vector< SG::VarHandleKeyArray * > m_vhka
const T * get(size_type n) const
Access an element, as an rvalue.
bool msgLvl(const MSG::Level lvl) const
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...
ToolHandle< GenericMonitoringTool > m_monTool
static void printBangs(MsgStream &msg)
Print header line.
const std::string & comboHypoAlgNodeName()
nope - should be used for standalone also, perhaps need to protect the class def bits #ifndef XAOD_AN...
void getBeamSpotShift(float &shift_x, float &shift_y, const InDet::BeamSpotData &beamSpotHandle)
#define ATH_MSG_VERBOSE(x)
double r() const
returns the r value of the SpacePoint's position (in cylindrical coordinates).
bool dPhi(const xAOD::TauJet &tau, const xAOD::CaloVertexedTopoCluster &cluster, float &out)
SG::WriteHandle< DecisionContainer > createAndStore(const SG::WriteHandleKey< DecisionContainer > &key, const EventContext &ctx)
Creates and right away records the DecisionContainer with the key.
const std::string & roiString()
setScaleOne setStatusOne setSaturated int16_t
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...
bool isValid() const
Test to see if the link can be dereferenced.
const ID_type & dataID() const
Get the key that we reference, as a string.
bool dEta(const xAOD::TauJet &tau, const xAOD::CaloVertexedTopoCluster &cluster, float &out)
ValuesCollection< T > Collection(std::string name, const T &collection)
Declare a monitored (double-convertible) collection.
virtual void setOwner(IDataHandleHolder *o)=0
Gaudi::Property< float > m_jetSeed_etaMax
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>
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...
float deltaR2(float, float, float, float) const
virtual const DataObjIDColl & extraOutputDeps() const override
Return the list of extra output dependencies.
StatusCode selectSeedsNearby(const std::vector< HitDVSeed > &hitDVSeedsContainer, std::vector< float > &jetSeeds_eta, std::vector< float > &jetSeeds_phi, std::vector< float > &jetSeeds_pt) const
const std::string & filterNodeName()
static StatusCode validateDuplicatedDecisionID(const ElementLink< TrigCompositeUtils::DecisionContainer > &dEL, MsgStream &msg)
Ensure that no space is being wasted by duplicated DecisionIDs in any Decision objects.
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...
Gaudi::Property< bool > m_runtimeValidation
Enabling of detailed validation checks for use during development.
pointer_type ptr()
Dereference the pointer.
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
SG::ReadHandleKey< TrigCompositeUtils::DecisionContainer > m_input
input decisions
virtual StatusCode sysExecute(const EventContext &ctx) override
Execute an algorithm.
ToolHandle< ILumiBlockMuTool > m_lumiBlockMuTool
#define CHECK(...)
Evaluate an expression and check for errors.
static StatusCode validateLogicalFlow(const ElementLink< TrigCompositeUtils::DecisionContainer > &dEL, MsgStream &msg, const LogicalFlowCheckMode mode)
Ensure that all DecisionIDs have propagated correctly from their parent.
static StatusCode validateDecisionIDs(const ElementLink< TrigCompositeUtils::DecisionContainer > &dEL, MsgStream &msg)
Ensure that all present IDs correspond to configured chains.
StoreGateSvc_t m_detStore
Pointer to StoreGate (detector store by default)
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
Class used to describe composite objects in the HLT.
const std::string & initialRoIString()
StatusCode doMonitor(const xAOD::TrigCompositeContainer *) const
SG::ReadCondHandleKey< InDet::BeamSpotData > m_beamSpotKey
const std::string & hltSeedingNodeName()
virtual void renounce()=0
std::conditional< std::is_base_of< SG::VarHandleKeyArray, T >::value, VarHandleKeyArrayType, type2 >::type type
ElementLink implementation for ROOT usage.
Identifier identify() const
return the identifier
bool isChainId(const HLT::Identifier &chainIdentifier)
Recognise whether the HLT identifier corresponds to a whole chain.
StatusCode findJetSeeds(const xAOD::JetContainer *, const float, const float, std::vector< float > &, std::vector< float > &, std::vector< float > &) const
SG::ReadHandleKey< TrackCollection > m_tracksKey
xAOD::TrigComposite Decision
SG::ReadHandleKey< xAOD::JetContainer > m_jetsKey
value_type push_back(value_type pElem)
Add an element to the end of the collection.
StatusCode initialize(bool used=true)
StatusCode calculateBDT(const std::vector< HitDVSpacePoint > &, const std::vector< HitDVTrk > &, const std::vector< float > &, const std::vector< float > &, const std::vector< float > &, const float &, const int, xAOD::TrigCompositeContainer *, int &) const
SG::WriteHandleKey< xAOD::TrigCompositeContainer > m_hitDVKey
Eigen::Matrix< double, 3, 1 > Vector3D
const std::string & seedString()
SG::ReadCondHandleKey< LuminosityCondData > m_lumiDataKey
Gaudi::Property< bool > m_isMC
std::set< DecisionID > DecisionIDContainer
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.
void sort(typename std::reverse_iterator< DataModel_detail::iterator< DVL > > beg, typename std::reverse_iterator< DataModel_detail::iterator< DVL > > end, const Compare &comp)
Specialization of sort for DataVector/List.
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...
Gaudi::Property< float > m_jetSeed_ptMin
const std::string & hypoAlgNodeName()
StatusCode findSPSeeds(const EventContext &, const std::vector< HitDVSpacePoint > &, std::vector< float > &, std::vector< float > &) const
HypoBase(const std::string &name, ISvcLocator *pSvcLocator)
constructor, to be called by sub-class constructors
bool allFailed(const Decision *d)
return true if there is no positive decision stored
void decisionIDs(const Decision *d, DecisionIDContainer &destination)
Extracts DecisionIDs stored in the Decision object.
std::string name() const
reports human redable name
SG::VarHandleKey & vhKey()
Return a non-const reference to the HandleKey.
SG::WriteHandleKey< TrigCompositeUtils::DecisionContainer > m_output
output decisions
virtual StatusCode sysInitialize() override
Override sysInitialize.
Athena::TPCnvVers::Current TrigRoiDescriptor
static StatusCode runtimeValidation(SG::WriteHandle< TrigCompositeUtils::DecisionContainer > &outputHandle, MsgStream &msg, bool onlyValidateOneStep=true, bool runTwoConversion=false)
Executes all individual runtime tests.
HLT::Identifier getIDFromLeg(const HLT::Identifier &legIdentifier)
Generate the HLT::Identifier which corresponds to the chain name from the leg name.
const T * at(size_type n) const
Access an element, as an rvalue.
Declare a monitored scalar variable.
ToolHandleArray< TrigHitDVHypoTool > m_hypoTools
StatusCode findHitDV(const EventContext &ctx, const std::vector< TrigSiSpacePointBase > &convertedSpacePoints, const DataVector< Trk::Track > &tracks, std::vector< HitDVSeed > &hitDVSeedsContainer, std::vector< HitDVTrk > &hitDVTrksContainer, std::vector< HitDVSpacePoint > &hitDVSPContainer) const
DataObjIDColl m_extendedExtraObjects
Extra output dependency collection, extended by AthAlgorithmDHUpdate to add symlinks.
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.
const std::string & inputMakerNodeName()
size_type size() const noexcept
Returns the number of elements in the collection.
static void printErrorHeader(const ElementLink< TrigCompositeUtils::DecisionContainer > &dEL, MsgStream &msg)
A problem was found, print common output data.
@ kRequireOne
Require all DecisionIDs to be present in at least one of my parent Decision objects.
int getSPLayer(int, float) const
unsigned int et() const
Methods that require combining results or applying scales.