|
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 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 |
|
|
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 EventContext &, 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 > &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...
|
|
|
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" } |
|
SG::SlotSpecificObj< TMVAReader > m_tmva_reader | ATLAS_THREAD_SAFE |
|
int | m_tools_lowest_jetEt |
|
int | m_tools_loosest_wp |
|
bool | m_useBeamSpot |
|
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 62 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 565 of file TrigHitDVHypoAlg.cxx.
573 if( seeds_eta.size() != seeds_phi.size() )
return StatusCode::SUCCESS;
576 for(
unsigned int iseed=0; iseed<seeds_eta.size(); iseed++) {
578 float seed_eta = seeds_eta[iseed];
579 float seed_phi = seeds_phi[iseed];
581 ATH_MSG_VERBOSE(
"+++++ seed eta: " << seed_eta <<
", phi:" << seed_phi <<
" +++++");
585 const float DR_SQUARED_TO_REF_CUT = 0.16;
588 int n_sp_injet_usedByTrk = 0;
590 int v_n_sp_injet_usedByTrk[
N_LAYER];
591 for(
int i=0;
i<
N_LAYER;
i++) { v_n_sp_injet[
i]=0; v_n_sp_injet_usedByTrk[
i]=0; }
593 for (
const auto & spData : spsContainer ) {
595 float sp_eta = spData.eta;
596 float sp_phi = spData.phi;
597 float dR2 =
deltaR2(sp_eta,sp_phi,seed_eta,seed_phi);
598 if( dR2 > DR_SQUARED_TO_REF_CUT )
continue;
601 int sp_layer = (
int)spData.layer;
602 int sp_trkid = (
int)spData.usedTrkId;
603 bool isUsedByTrk = (sp_trkid != -1);
609 v_n_sp_injet[ilayer]++;
611 n_sp_injet_usedByTrk++;
612 v_n_sp_injet_usedByTrk[ilayer]++;
616 ATH_MSG_VERBOSE(
"nr of SPs in jet: usedByTrk / all = " << n_sp_injet_usedByTrk <<
" / " << n_sp_injet);
620 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]);
621 v_ly_sp_frac[
i] =
frac;
622 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]);
626 const float TRK_PT_GEV_CUT = 2.0;
628 unsigned int n_qtrk_injet = 0;
629 for (
const auto& trk : trksContainer ) {
630 float trk_ptGeV = trk.pt;
632 if( trk_ptGeV < TRK_PT_GEV_CUT )
continue;
633 float dR2 =
deltaR2(trk.eta,trk.phi,seed_eta,seed_phi);
634 if( dR2 > DR_SQUARED_TO_REF_CUT )
continue;
637 ATH_MSG_DEBUG(
"nr of all / quality tracks matched = " << trksContainer.size() <<
" / " << n_qtrk_injet);
640 bool isSeedOutOfRange =
false;
641 if( n_qtrk_injet == 0 ) {
642 isSeedOutOfRange =
true;
644 if( std::fabs(v_ly_sp_frac[
i]) > 1
e-3 ) {
645 isSeedOutOfRange =
false;
break;
649 float bdt_score = -2.0;
650 if( ! isSeedOutOfRange ) {
651 auto&
reader = *m_tmva_reader.get(context);
652 reader.n_track_qual =
static_cast<float>(n_qtrk_injet);
653 reader.ly0_sp_frac = v_ly_sp_frac[0];
654 reader.ly1_sp_frac = v_ly_sp_frac[1];
655 reader.ly2_sp_frac = v_ly_sp_frac[2];
656 reader.ly3_sp_frac = v_ly_sp_frac[3];
657 reader.ly4_sp_frac = v_ly_sp_frac[4];
658 reader.ly5_sp_frac = v_ly_sp_frac[5];
659 reader.ly6_sp_frac = v_ly_sp_frac[6];
660 reader.ly7_sp_frac = v_ly_sp_frac[7];
662 if ( std::abs(seed_eta) < 1 ) {
663 bdt_score =
reader.tmva_0eta1->EvaluateMVA(
"BDT method");
664 }
else if ( std::abs(seed_eta) < 2 ) {
665 bdt_score =
reader.tmva_1eta2->EvaluateMVA(
"BDT method");
670 if( bdt_score < cutBDTthreshold )
continue;
678 dv->makePrivateStore();
682 if ( seed_type == SeedType::HLTJet ) seed_pt = seeds_pt[iseed];
683 dv->setDetail<
float>(
"hitDV_seed_pt", seed_pt);
684 dv->setDetail<
float>(
"hitDV_seed_eta", seed_eta);
685 dv->setDetail<
float>(
"hitDV_seed_phi", seed_phi);
686 dv->setDetail<
int> (
"hitDV_seed_type", seed_type);
687 dv->setDetail<
int> (
"hitDV_n_track_qual", n_qtrk_injet);
688 dv->setDetail<
float>(
"hitDV_ly0_sp_frac", v_ly_sp_frac[0]);
689 dv->setDetail<
float>(
"hitDV_ly1_sp_frac", v_ly_sp_frac[1]);
690 dv->setDetail<
float>(
"hitDV_ly2_sp_frac", v_ly_sp_frac[2]);
691 dv->setDetail<
float>(
"hitDV_ly3_sp_frac", v_ly_sp_frac[3]);
692 dv->setDetail<
float>(
"hitDV_ly4_sp_frac", v_ly_sp_frac[4]);
693 dv->setDetail<
float>(
"hitDV_ly5_sp_frac", v_ly_sp_frac[5]);
694 dv->setDetail<
float>(
"hitDV_ly6_sp_frac", v_ly_sp_frac[6]);
695 dv->setDetail<
float>(
"hitDV_ly7_sp_frac", v_ly_sp_frac[7]);
696 dv->setDetail<
float>(
"hitDV_bdt_score", bdt_score);
703 return StatusCode::SUCCESS;
◆ cardinality()
unsigned int AthReentrantAlgorithm::cardinality |
( |
| ) |
const |
|
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 55 of file AthReentrantAlgorithm.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 16 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 20 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 466 of file TrigHitDVHypoAlg.cxx.
468 std::vector<float> mnt_eta1_ly0_spfr;
469 std::vector<float> mnt_eta1_ly1_spfr;
470 std::vector<float> mnt_eta1_ly2_spfr;
471 std::vector<float> mnt_eta1_ly3_spfr;
472 std::vector<float> mnt_eta1_ly4_spfr;
473 std::vector<float> mnt_eta1_ly5_spfr;
474 std::vector<float> mnt_eta1_ly6_spfr;
475 std::vector<float> mnt_eta1_ly7_spfr;
476 std::vector<int> mnt_eta1_n_qtrk;
477 std::vector<float> mnt_eta1_bdtscore;
478 std::vector<float> mnt_1eta2_ly0_spfr;
479 std::vector<float> mnt_1eta2_ly1_spfr;
480 std::vector<float> mnt_1eta2_ly2_spfr;
481 std::vector<float> mnt_1eta2_ly3_spfr;
482 std::vector<float> mnt_1eta2_ly4_spfr;
483 std::vector<float> mnt_1eta2_ly5_spfr;
484 std::vector<float> mnt_1eta2_ly6_spfr;
485 std::vector<float> mnt_1eta2_ly7_spfr;
486 std::vector<int> mnt_1eta2_n_qtrk;
487 std::vector<float> mnt_1eta2_bdtscore;
509 mon_eta1_ly0_spfr, mon_eta1_ly1_spfr, mon_eta1_ly2_spfr, mon_eta1_ly3_spfr,
510 mon_eta1_ly4_spfr, mon_eta1_ly5_spfr, mon_eta1_ly6_spfr, mon_eta1_ly7_spfr,
511 mon_eta1_n_qtrk, mon_eta1_bdtscore,
512 mon_1eta2_ly0_spfr, mon_1eta2_ly1_spfr, mon_1eta2_ly2_spfr, mon_1eta2_ly3_spfr,
513 mon_1eta2_ly4_spfr, mon_1eta2_ly5_spfr, mon_1eta2_ly6_spfr, mon_1eta2_ly7_spfr,
514 mon_1eta2_n_qtrk, mon_1eta2_bdtscore);
517 for (
auto dv : *dvContainer ) {
518 int seed_type =
dv->getDetail<
int> (
"hitDV_seed_type");
520 if( seed_type == SeedType::SP )
continue;
521 float seed_eta =
dv->getDetail<
float>(
"hitDV_seed_eta");
522 int n_track_qual=
dv->getDetail<
int> (
"hitDV_n_track_qual");
523 float bdt_score =
dv->getDetail<
float>(
"hitDV_bdt_score");
524 float ly0_sp_frac =
dv->getDetail<
float>(
"hitDV_ly0_sp_frac");
525 float ly1_sp_frac =
dv->getDetail<
float>(
"hitDV_ly1_sp_frac");
526 float ly2_sp_frac =
dv->getDetail<
float>(
"hitDV_ly2_sp_frac");
527 float ly3_sp_frac =
dv->getDetail<
float>(
"hitDV_ly3_sp_frac");
528 float ly4_sp_frac =
dv->getDetail<
float>(
"hitDV_ly4_sp_frac");
529 float ly5_sp_frac =
dv->getDetail<
float>(
"hitDV_ly5_sp_frac");
530 float ly6_sp_frac =
dv->getDetail<
float>(
"hitDV_ly6_sp_frac");
531 float ly7_sp_frac =
dv->getDetail<
float>(
"hitDV_ly7_sp_frac");
532 if( std::abs(seed_eta) < 1.0 ) {
533 mnt_eta1_ly0_spfr.push_back(ly0_sp_frac);
534 mnt_eta1_ly1_spfr.push_back(ly1_sp_frac);
535 mnt_eta1_ly2_spfr.push_back(ly2_sp_frac);
536 mnt_eta1_ly3_spfr.push_back(ly3_sp_frac);
537 mnt_eta1_ly4_spfr.push_back(ly4_sp_frac);
538 mnt_eta1_ly5_spfr.push_back(ly5_sp_frac);
539 mnt_eta1_ly6_spfr.push_back(ly6_sp_frac);
540 mnt_eta1_ly7_spfr.push_back(ly7_sp_frac);
541 mnt_eta1_n_qtrk.push_back(n_track_qual);
542 mnt_eta1_bdtscore.push_back(bdt_score);
544 else if( std::abs(seed_eta) < 2.0 ) {
545 mnt_1eta2_ly0_spfr.push_back(ly0_sp_frac);
546 mnt_1eta2_ly1_spfr.push_back(ly1_sp_frac);
547 mnt_1eta2_ly2_spfr.push_back(ly2_sp_frac);
548 mnt_1eta2_ly3_spfr.push_back(ly3_sp_frac);
549 mnt_1eta2_ly4_spfr.push_back(ly4_sp_frac);
550 mnt_1eta2_ly5_spfr.push_back(ly5_sp_frac);
551 mnt_1eta2_ly6_spfr.push_back(ly6_sp_frac);
552 mnt_1eta2_ly7_spfr.push_back(ly7_sp_frac);
553 mnt_1eta2_n_qtrk.push_back(n_track_qual);
554 mnt_1eta2_bdtscore.push_back(bdt_score);
559 return StatusCode::SUCCESS;
◆ evtStore() [1/2]
◆ evtStore() [2/2]
◆ execute()
StatusCode TrigHitDVHypoAlg::execute |
( |
const EventContext & |
context | ) |
const |
|
overridevirtual |
Definition at line 127 of file TrigHitDVHypoAlg.cxx.
131 std::vector<TrigSiSpacePointBase> convertedSpacePoints;
132 convertedSpacePoints.reserve(5000);
145 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 );
150 ATH_CHECK( previousDecisionsHandle.isValid() );
152 ATH_MSG_DEBUG(
"Running with " << previousDecisionsHandle->size() <<
" previous decisions" );
153 if( previousDecisionsHandle->size()!=1 ) {
154 ATH_MSG_ERROR(
"Previous decision handle size is not 1. It is" << previousDecisionsHandle->size() );
155 return StatusCode::FAILURE;
157 const Decision * previousDecision = previousDecisionsHandle->at(0);
162 for(
auto decisionID: previousDecisionIDs) {
ATH_MSG_DEBUG(
" " << decisionID ); }
167 auto outputDecisions = outputHandle.
ptr();
177 if( jetsContainer ==
nullptr ) {
179 return StatusCode::FAILURE;
181 bool isJetEtPassToolsCut =
false;
182 float jetEtaToolsCut = 2.0;
186 float jet_eta =
static_cast<float>(
jet->eta());
188 isJetEtPassToolsCut =
true;
196 std::vector<HitDVSeed> hitDVSeedsContainer;
197 std::vector<HitDVTrk> hitDVTrksContainer;
198 std::vector<HitDVSpacePoint> hitDVSPsContainer;
201 ATH_CHECK(
findHitDV(context, convertedSpacePoints, *tracks, hitDVSeedsContainer, hitDVTrksContainer, hitDVSPsContainer) );
203 mon_n_dvtrks = hitDVTrksContainer.size();
204 mon_n_dvsps = hitDVSPsContainer.size();
205 const unsigned int N_MAX_SP_STORED = 100000;
206 bool isSPOverflow =
false;
207 if( hitDVSPsContainer.size() >= N_MAX_SP_STORED ) isSPOverflow =
true;
214 averageMu =
static_cast<float>(
m_lumiBlockMuTool->averageInteractionsPerCrossing(context));
220 averageMu = lcd.cptr()->lbAverageInteractionsPerCrossing();
223 mon_average_mu = averageMu;
226 std::vector<float> jetSeeds_pt;
227 std::vector<float> jetSeeds_eta;
228 std::vector<float> jetSeeds_phi;
230 int n_alljetseeds = jetSeeds_eta.size();
232 mon_n_jetseeds = jetSeeds_eta.size();
233 mon_n_jetseedsdel = n_alljetseeds - jetSeeds_eta.size();
236 std::vector<float> spSeeds_eta;
237 std::vector<float> spSeeds_phi;
238 std::vector<float> void_pt;
239 int n_allspseeds = 0;
242 n_allspseeds = spSeeds_eta.size();
244 mon_n_spseeds = spSeeds_eta.size();
245 mon_n_spseedsdel = n_allspseeds - spSeeds_eta.size();
249 mon_n_spseedsdel = 0;
253 auto hitDVContainer = std::make_unique<xAOD::TrigCompositeContainer>();
254 auto hitDVContainerAux = std::make_unique<xAOD::TrigCompositeAuxContainer>();
255 hitDVContainer->setStore(hitDVContainerAux.get());
258 std::vector<TrigHitDVHypoTool::HitDVHypoInfo> hitDVHypoInputs;
259 std::unordered_map<Decision*, size_t> mapDecIdx;
262 if( isJetEtPassToolsCut ) {
263 const float preselBDTthreshold = -0.6;
265 int n_passed_jet = 0;
266 int seed_type = SeedType::HLTJet;
267 ATH_CHECK(
calculateBDT(context, hitDVSPsContainer, hitDVTrksContainer, jetSeeds_pt, jetSeeds_eta, jetSeeds_phi, preselBDTthreshold, seed_type, dvContainer, n_passed_jet) );
271 seed_type = SeedType::SP;
272 ATH_CHECK(
calculateBDT(context, hitDVSPsContainer, hitDVTrksContainer, void_pt, spSeeds_eta, spSeeds_phi, preselBDTthreshold, seed_type, dvContainer, n_passed_sp) );
275 ATH_MSG_DEBUG(
"nr of dv container / jet-seeded / sp-seed candidates = " << dvContainer->
size() <<
" / " << n_passed_jet <<
" / " << n_passed_sp );
278 for (
auto dv : *dvContainer ) {
280 mapDecIdx.emplace( newDecision,
dv->index() );
282 hitDVHypoInputs.push_back( hypoInfo );
297 ATH_CHECK( hitDVHandle.record( std::move( hitDVContainer ), std::move( hitDVContainerAux ) ) );
301 while(
it != outputDecisions->end()) {
305 it = outputDecisions->erase(
it);
311 size_t idx = mapDecIdx.at(*
it);
327 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()
const DataObjIDColl & AthReentrantAlgorithm::extraOutputDeps |
( |
| ) |
const |
|
overridevirtualinherited |
Return the list of extra output dependencies.
This list is extended to include symlinks implied by inheritance relations.
Definition at line 79 of file AthReentrantAlgorithm.cxx.
86 return Algorithm::extraOutputDeps();
◆ filterPassed()
virtual bool AthReentrantAlgorithm::filterPassed |
( |
const EventContext & |
ctx | ) |
const |
|
inlinevirtualinherited |
◆ findHitDV()
Definition at line 1178 of file TrigHitDVHypoAlg.cxx.
1183 std::vector<int> v_dvtrk_id;
1184 std::vector<float> v_dvtrk_pt;
1185 std::vector<float> v_dvtrk_eta;
1186 std::vector<float> v_dvtrk_phi;
1187 std::vector<int> v_dvtrk_n_hits_inner;
1188 std::vector<int> v_dvtrk_n_hits_pix;
1189 std::vector<int> v_dvtrk_n_hits_sct;
1190 std::vector<float> v_dvtrk_a0beam;
1191 std::unordered_map<Identifier, int> umap_fittedTrack_identifier;
1192 int fittedTrack_id = -1;
1194 static constexpr
float TRKCUT_PTGEV_HITDV = 0.5;
1196 for (
const auto track: tracks) {
1197 float shift_x = 0;
float shift_y = 0;
1204 if (not igt) {
continue;}
1211 m =
track->measurementsOnTrack()->begin(),
1212 me =
track->measurementsOnTrack()->end ();
1213 for(;
m!=me; ++
m ) {
1215 if( prd ==
nullptr )
continue;
1217 if( umap_fittedTrack_identifier.find(id_prd) == umap_fittedTrack_identifier.end() ) {
1218 umap_fittedTrack_identifier.insert(std::make_pair(id_prd,fittedTrack_id));
1222 v_dvtrk_id.push_back(fittedTrack_id);
1224 v_dvtrk_eta.push_back(theTrackInfo.
eta);
1225 v_dvtrk_phi.push_back(
phi);
1226 v_dvtrk_n_hits_inner.push_back(theTrackInfo.
n_hits_inner);
1227 v_dvtrk_n_hits_pix.push_back(theTrackInfo.
n_hits_pix);
1228 v_dvtrk_n_hits_sct.push_back(theTrackInfo.
n_hits_sct);
1229 v_dvtrk_a0beam.push_back(theTrackInfo.
a0beam);
1231 ATH_MSG_DEBUG(
"Nr of selected tracks / all = " << fittedTrack_id <<
" / " << tracks.size());
1232 ATH_MSG_DEBUG(
"Nr of Identifiers used by selected tracks = " << umap_fittedTrack_identifier.size());
1236 int n_sp_usedByTrk = 0;
1238 std::unordered_map<Identifier, int> umap_sp_identifier;
1239 umap_sp_identifier.reserve(1.3*convertedSpacePoints.size());
1244 if( umap_sp_identifier.find(id_prd) == umap_sp_identifier.end() ) {
1245 umap_sp_identifier.insert(std::make_pair(id_prd,-1));
1250 for(
unsigned int iSp=0; iSp<convertedSpacePoints.size(); ++iSp) {
1251 bool isPix = convertedSpacePoints[iSp].isPixel();
1252 bool isSct = convertedSpacePoints[iSp].isSCT();
1253 if( !
isPix && ! isSct )
continue;
1254 const Trk::SpacePoint* sp = convertedSpacePoints[iSp].offlineSpacePoint();
1258 int n_id_usedByTrack = 0;
1259 for(
auto it=umap_sp_identifier.begin();
it!=umap_sp_identifier.end(); ++
it) {
1261 if( umap_fittedTrack_identifier.find(id_sp) != umap_fittedTrack_identifier.end() ) {
1262 umap_sp_identifier[id_sp] = umap_fittedTrack_identifier[id_sp];
1266 ATH_MSG_DEBUG(
"Nr of SPs / Identifiers (all) / Identifiers (usedByTrack) = " << convertedSpacePoints.size() <<
" / " << umap_sp_identifier.size() <<
" / " << n_id_usedByTrack);
1269 int usedTrack_id = -1;
1272 if( umap_sp_identifier.find(id_prd) != umap_sp_identifier.end() ) {
1273 usedTrack_id = umap_sp_identifier[id_prd];
1276 return usedTrack_id;
1279 std::vector<float> v_sp_eta;
1280 v_sp_eta.reserve(convertedSpacePoints.size());
1281 std::vector<float> v_sp_r;
1282 v_sp_r.reserve(convertedSpacePoints.size());
1283 std::vector<float> v_sp_phi;
1284 v_sp_phi.reserve(convertedSpacePoints.size());
1285 std::vector<int> v_sp_layer;
1286 v_sp_layer.reserve(convertedSpacePoints.size());
1287 std::vector<bool> v_sp_isPix;
1288 v_sp_isPix.reserve(convertedSpacePoints.size());
1289 std::vector<bool> v_sp_isSct;
1290 v_sp_isSct.reserve(convertedSpacePoints.size());
1291 std::vector<int> v_sp_usedTrkId;
1292 v_sp_usedTrkId.reserve(convertedSpacePoints.size());
1294 for(
const auto& sp : convertedSpacePoints) {
1295 bool isPix = sp.isPixel();
1296 bool isSct = sp.isSCT();
1297 if( !
isPix && ! isSct )
continue;
1300 int usedTrack_id = -1;
1301 int usedTrack_id_first = sp_map_used_id(osp->
clusterList().first);
1302 if (usedTrack_id_first != -1) {
1303 usedTrack_id = usedTrack_id_first;
1305 int usedTrack_id_second = sp_map_used_id(osp->
clusterList().second);
1306 if (usedTrack_id_second != -1) {
1307 usedTrack_id = usedTrack_id_second;
1312 if( usedTrack_id != -1 ) n_sp_usedByTrk++;
1313 int layer = sp.layer();
1314 float sp_r = sp.
r();
1317 float sp_eta = pos_sp.eta();
1318 float sp_phi = pos_sp.phi();
1320 v_sp_eta.push_back(sp_eta);
1321 v_sp_r.push_back(sp_r);
1322 v_sp_phi.push_back(sp_phi);
1323 v_sp_layer.push_back(
layer);
1324 v_sp_isPix.push_back(
isPix);
1325 v_sp_isSct.push_back(isSct);
1326 v_sp_usedTrkId.push_back(usedTrack_id);
1328 ATH_MSG_VERBOSE(
"+++ SP eta / phi / layer / ixPix / usedTrack_id = " << sp_eta <<
" / " << sp_phi <<
" / " <<
layer <<
" / " <<
isPix <<
" / " << usedTrack_id);
1331 ATH_MSG_DEBUG(
"Nr of SPs / all = " << n_sp <<
" / " << convertedSpacePoints.size());
1332 ATH_MSG_DEBUG(
"Nr of SPs used by selected tracks = " << n_sp_usedByTrk);
1335 std::vector<float> v_seeds_eta;
1336 std::vector<float> v_seeds_phi;
1337 std::vector<int16_t> v_seeds_type;
1342 const unsigned int L1JET_ET_CUT = 27;
1346 if (!jetRoiCollectionHandle.isValid()){
1348 return StatusCode::FAILURE;
1352 if( jetRoI ==
nullptr )
continue;
1354 if( jetRoI->
et() >= L1JET_ET_CUT ) {
1355 v_seeds_eta.push_back(jetRoI->
eta());
1356 v_seeds_phi.push_back(jetRoI->
phi());
1357 v_seeds_type.push_back(0);
1360 ATH_MSG_DEBUG(
"Nr of L1_J" << L1JET_ET_CUT <<
" seeds = " << v_seeds_eta.size());
1363 std::vector<float> v_spseeds_eta;
1364 std::vector<float> v_spseeds_phi;
1365 ATH_CHECK(
findSPSeeds(ctx, v_sp_eta, v_sp_phi, v_sp_layer, v_sp_usedTrkId, v_spseeds_eta, v_spseeds_phi) );
1367 for(
size_t idx=0;
idx<v_spseeds_eta.size(); ++
idx) {
1368 v_seeds_eta.push_back(v_spseeds_eta[
idx]);
1369 v_seeds_phi.push_back(v_spseeds_phi[
idx]);
1370 v_seeds_type.push_back(1);
1372 ATH_MSG_DEBUG(
"Nr of SP + L1_J" << L1JET_ET_CUT <<
" seeds = " << v_seeds_eta.size());
1378 const int N_MAX_SEEDS = 200;
1379 int n_seeds =
std::min(N_MAX_SEEDS,(
int)v_seeds_eta.size());
1380 hitDVSeedsContainer.reserve(n_seeds);
1381 for(
auto iSeed=0; iSeed < n_seeds; ++iSeed) {
1383 seed.eta = v_seeds_eta[iSeed];
1384 seed.phi = v_seeds_phi[iSeed];
1385 seed.type = v_seeds_type[iSeed];
1386 hitDVSeedsContainer.push_back(seed);
1390 const float TRKCUT_DELTA_R_TO_SEED = 1.0;
1391 hitDVTrksContainer.reserve(v_dvtrk_pt.size());
1392 for(
unsigned int iTrk=0; iTrk<v_dvtrk_pt.size(); ++iTrk) {
1393 float trk_eta = v_dvtrk_eta[iTrk];
1394 float trk_phi = v_dvtrk_phi[iTrk];
1396 bool isNearSeed =
false;
1397 for (
unsigned int iSeed=0; iSeed<v_seeds_eta.size(); ++iSeed) {
1398 float seed_eta = v_seeds_eta[iSeed];
1399 float seed_phi = v_seeds_phi[iSeed];
1400 float dR2 =
deltaR2(trk_eta,trk_phi,seed_eta,seed_phi);
1401 if( dR2 <= TRKCUT_DELTA_R_TO_SEED*TRKCUT_DELTA_R_TO_SEED ) { isNearSeed =
true;
break; }
1403 if( ! isNearSeed )
continue;
1406 hitDVTrk.
id = v_dvtrk_id[iTrk];
1407 hitDVTrk.
pt = v_dvtrk_pt[iTrk];
1408 hitDVTrk.
eta = v_dvtrk_eta[iTrk];
1409 hitDVTrk.
phi = v_dvtrk_phi[iTrk];
1411 hitDVTrk.
n_hits_pix = v_dvtrk_n_hits_pix[iTrk];
1412 hitDVTrk.
n_hits_sct = v_dvtrk_n_hits_sct[iTrk];
1413 hitDVTrk.
a0beam = v_dvtrk_a0beam[iTrk];
1415 hitDVTrksContainer.push_back(hitDVTrk);
1419 const float SPCUT_DELTA_R_TO_SEED = 1.0;
1420 const size_t n_sp_max = std::min<size_t>(100000, v_sp_eta.size());
1421 size_t n_sp_stored = 0;
1423 hitDVSPsContainer.reserve(n_sp_max);
1425 for(
size_t iSp=0; iSp<v_sp_eta.size(); ++iSp) {
1427 const float sp_eta = v_sp_eta[iSp];
1428 const float sp_phi = v_sp_phi[iSp];
1429 bool isNearSeed =
false;
1430 for (
size_t iSeed=0; iSeed<v_seeds_eta.size(); ++iSeed) {
1431 const float seed_eta = v_seeds_eta[iSeed];
1432 const float seed_phi = v_seeds_phi[iSeed];
1433 const float dR2 =
deltaR2(sp_eta, sp_phi, seed_eta, seed_phi);
1434 if( dR2 <= SPCUT_DELTA_R_TO_SEED*SPCUT_DELTA_R_TO_SEED ) { isNearSeed =
true;
break; }
1436 if( ! isNearSeed )
continue;
1438 if( n_sp_stored >= n_sp_max )
break;
1440 hitDVSP.
eta = v_sp_eta[iSp];
1441 hitDVSP.
r = v_sp_r[iSp];
1442 hitDVSP.
phi = v_sp_phi[iSp];
1443 hitDVSP.
layer = v_sp_layer[iSp];
1444 hitDVSP.
isPix = v_sp_isPix[iSp];
1445 hitDVSP.
isSct = v_sp_isSct[iSp];
1446 hitDVSP.
usedTrkId = v_sp_usedTrkId[iSp];
1447 hitDVSPsContainer.push_back(hitDVSP);
1452 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 709 of file TrigHitDVHypoAlg.cxx.
712 std::vector<float> mnt_jet_pt;
713 std::vector<float> mnt_jet_eta;
718 ATH_MSG_VERBOSE(
"looking for jet seed with pt cut=" << cutJetPt <<
", eta cut=" << cutJetEta);
721 if( jet_pt < cutJetPt ) {
725 mnt_jet_pt.push_back(jet_pt);
726 float jet_eta =
static_cast<float>(
jet->eta());
727 mnt_jet_eta.push_back(jet_eta);
728 if( std::fabs(jet_eta) > cutJetEta ) {
732 float jet_phi =
static_cast<float>(
jet->phi());
733 jetSeeds_pt.push_back(jet_pt);
734 jetSeeds_eta.push_back(jet_eta);
735 jetSeeds_phi.push_back(
jet_phi);
739 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 745 of file TrigHitDVHypoAlg.cxx.
751 const int NBINS_ETA = 50;
752 const float ETA_MIN = -2.5;
753 const float ETA_MAX = 2.5;
755 const int NBINS_PHI = 80;
756 const float PHI_MIN = -4.0;
757 const float PHI_MAX = 4.0;
761 unsigned int slotnr = ctx.slot();
762 unsigned int subSlotnr = ctx.subSlot();
764 sprintf(
hname,
"hitdv_s%u_ss%u_ly6_h2_nsp",slotnr,subSlotnr);
765 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);
766 sprintf(
hname,
"hitdv_s%u_ss%u_ly7_h2_nsp",slotnr,subSlotnr);
767 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);
769 sprintf(
hname,
"hitdv_s%u_ss%u_ly6_h2_nsp_notrk",slotnr,subSlotnr);
770 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);
771 sprintf(
hname,
"hitdv_s%u_ss%u_ly7_h2_nsp_notrk",slotnr,subSlotnr);
772 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);
774 for (
const auto& spData : spsContainer ) {
775 int16_t sp_layer = spData.layer;
776 float sp_eta = spData.eta;
778 if( ilayer<6 )
continue;
780 int sp_trkid = (
int)spData.usedTrkId;
781 bool isUsedByTrk = (sp_trkid != -1);
782 float sp_phi = spData.phi;
784 bool fill_out_of_pi =
false;
787 sp_phi2 = 2*TMath::Pi() + sp_phi;
788 if( sp_phi2 < PHI_MAX ) fill_out_of_pi =
true;
791 sp_phi2 = -2*TMath::Pi() + sp_phi;
792 if( PHI_MIN < sp_phi2 ) fill_out_of_pi =
true;
795 ly6_h2_nsp->Fill(sp_eta,sp_phi);
796 if( fill_out_of_pi ) ly6_h2_nsp->Fill(sp_eta,sp_phi2);
797 if( ! isUsedByTrk ) ly6_h2_nsp_notrk->Fill(sp_eta,sp_phi);
798 if( ! isUsedByTrk && fill_out_of_pi) ly6_h2_nsp_notrk->Fill(sp_eta,sp_phi2);
801 ly7_h2_nsp->Fill(sp_eta,sp_phi);
802 if( fill_out_of_pi ) ly7_h2_nsp->Fill(sp_eta,sp_phi2);
803 if( ! isUsedByTrk ) ly7_h2_nsp_notrk->Fill(sp_eta,sp_phi);
804 if( ! isUsedByTrk && fill_out_of_pi) ly7_h2_nsp_notrk->Fill(sp_eta,sp_phi2);
811 std::vector<std::tuple<int,float,float,float>> QT;
813 for(
int ly6_ieta=1; ly6_ieta<=NBINS_ETA; ly6_ieta++) {
814 float ly6_eta = (ly6_h2_nsp->GetXaxis()->GetBinLowEdge(ly6_ieta) + ly6_h2_nsp->GetXaxis()->GetBinUpEdge(ly6_ieta))/2.0;
815 for(
int ly6_iphi=1; ly6_iphi<=NBINS_PHI; ly6_iphi++) {
816 float ly6_phi = (ly6_h2_nsp->GetYaxis()->GetBinLowEdge(ly6_iphi) + ly6_h2_nsp->GetYaxis()->GetBinUpEdge(ly6_iphi))/2.0;
818 float ly6_nsp = ly6_h2_nsp ->GetBinContent(ly6_ieta,ly6_iphi);
819 float ly6_nsp_notrk = ly6_h2_nsp_notrk->GetBinContent(ly6_ieta,ly6_iphi);
820 float ly6_frac = ( ly6_nsp > 0 ) ? ly6_nsp_notrk / ly6_nsp : 0;
821 if( ly6_nsp < 10 || ly6_frac < 0.85 )
continue;
823 float ly7_frac_max = 0;
824 float ly7_eta_max = 0;
825 float ly7_phi_max = 0;
826 for(
int ly7_ieta=
std::max(1,ly6_ieta-1); ly7_ieta<
std::min(NBINS_ETA,ly6_ieta+1); ly7_ieta++) {
827 for(
int ly7_iphi=
std::max(1,ly6_iphi-1); ly7_iphi<=
std::min(NBINS_PHI,ly6_iphi+1); ly7_iphi++) {
828 float ly7_nsp = ly7_h2_nsp ->GetBinContent(ly7_ieta,ly7_iphi);
829 float ly7_nsp_notrk = ly7_h2_nsp_notrk->GetBinContent(ly7_ieta,ly7_iphi);
830 float ly7_frac = ( ly7_nsp > 0 ) ? ly7_nsp_notrk / ly7_nsp : 0;
831 if( ly7_nsp < 10 )
continue;
832 if( ly7_frac > ly7_frac_max ) {
833 ly7_frac_max = ly7_frac;
834 ly7_eta_max = (ly7_h2_nsp->GetXaxis()->GetBinLowEdge(ly7_ieta) + ly7_h2_nsp->GetXaxis()->GetBinUpEdge(ly7_ieta))/2.0;
835 ly7_phi_max = (ly7_h2_nsp->GetXaxis()->GetBinLowEdge(ly7_iphi) + ly7_h2_nsp->GetXaxis()->GetBinUpEdge(ly7_iphi))/2.0;
839 if( ly7_frac_max < 0.85 )
continue;
841 float wsum = ly6_frac + ly7_frac_max;
842 float weta = (ly6_eta*ly6_frac + ly7_eta_max*ly7_frac_max) / wsum;
843 float wphi = (ly6_phi*ly6_frac + ly7_phi_max*ly7_frac_max) / wsum;
844 float w = wsum / 2.0;
845 QT.push_back(std::make_tuple(-1,
w,weta,wphi));
848 ATH_MSG_VERBOSE(
"nr of ly6/ly7 doublet candidate seeds=" << QT.size() <<
", doing clustering...");
852 [](
const std::tuple<int,float,float,float>& lhs,
const std::tuple<int,float,float,float>& rhs) {
853 return std::get<1>(lhs) > std::get<1>(rhs); } );
856 const double CLUSTCUT_DIST_SQUARED = 0.04;
857 const double CLUSTCUT_SEED_FRAC = 0.9;
859 std::vector<float> seeds_wsum;
861 for(
unsigned int i=0;
i<QT.size();
i++) {
862 float phi = std::get<3>(QT[
i]);
863 float eta = std::get<2>(QT[
i]);
864 float w = std::get<1>(QT[
i]);
866 seeds_eta.push_back(
w*
eta); seeds_phi.push_back(
w*
phi);
867 seeds_wsum.push_back(
w);
870 const int IDX_INITIAL = 100;
871 float dist2_min = 100.0;
873 for(
unsigned j=0; j<seeds_eta.size(); j++) {
874 float ceta = seeds_eta[j]/seeds_wsum[j];
875 float cphi = seeds_phi[j]/seeds_wsum[j];
877 float deta = std::fabs(ceta-
eta);
878 float dphi = std::fabs(cphi-
phi);
879 float dist2 = dphi*dphi+deta*deta;
880 if( dist2 < dist2_min ) {
885 int match_idx = IDX_INITIAL;
887 if( dist2_min < CLUSTCUT_DIST_SQUARED ) { match_idx =
idx_min; }
889 if( match_idx == IDX_INITIAL ) {
890 if(
w > CLUSTCUT_SEED_FRAC && dist2_min > CLUSTCUT_DIST_SQUARED ) {
891 seeds_eta.push_back(
w*
eta); seeds_phi.push_back(
w*
phi);
892 seeds_wsum.push_back(
w);
896 float new_eta = seeds_eta[match_idx] +
w*
eta;
897 float new_phi = seeds_phi[match_idx] +
w*
phi;
898 float new_wsum = seeds_wsum[match_idx] +
w;
899 seeds_eta[match_idx] = new_eta;
900 seeds_phi[match_idx] = new_phi;
901 seeds_wsum[match_idx] = new_wsum;
904 for(
unsigned int i=0;
i<seeds_eta.size();
i++) {
905 float eta = seeds_eta[
i] / seeds_wsum[
i];
906 float phi = seeds_phi[
i] / seeds_wsum[
i];
909 if(
phi < -TMath::Pi() )
phi = 2*TMath::Pi() +
phi;
910 if(
phi > TMath::Pi() )
phi = -2*TMath::Pi() +
phi;
913 ATH_MSG_VERBOSE(
"after clustering, nr of seeds = " << seeds_eta.size());
916 std::vector<unsigned int> idx_to_delete;
917 for(
unsigned int i=0;
i<seeds_eta.size();
i++) {
918 if(
std::find(idx_to_delete.begin(),idx_to_delete.end(),
i) != idx_to_delete.end() )
continue;
919 float eta_i = seeds_eta[
i];
920 float phi_i = seeds_phi[
i];
921 for(
unsigned int j=
i+1; j<seeds_eta.size(); j++) {
922 if(
std::find(idx_to_delete.begin(),idx_to_delete.end(),j) != idx_to_delete.end() )
continue;
923 float eta_j = seeds_eta[j];
924 float phi_j = seeds_phi[j];
925 float dR2 =
deltaR2(eta_i,phi_i,eta_j,phi_j);
926 if( dR2 < CLUSTCUT_DIST_SQUARED ) idx_to_delete.push_back(j);
929 ATH_MSG_VERBOSE(
"nr of duplicated seeds to be removed = " << idx_to_delete.size());
930 if( idx_to_delete.size() > 0 ) {
931 std::sort(idx_to_delete.begin(),idx_to_delete.end());
932 for(
unsigned int j=idx_to_delete.size(); j>0; j--) {
933 unsigned int idx = idx_to_delete[j-1];
934 seeds_eta.erase(seeds_eta.begin()+
idx);
935 seeds_phi.erase(seeds_phi.begin()+
idx);
942 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 978 of file TrigHitDVHypoAlg.cxx.
983 const int NBINS_ETA = 50;
984 const float ETA_MIN = -2.5;
985 const float ETA_MAX = 2.5;
987 const int NBINS_PHI = 80;
988 const float PHI_MIN = -4.0;
989 const float PHI_MAX = 4.0;
993 unsigned int slotnr = ctx.slot();
994 unsigned int subSlotnr = ctx.subSlot();
996 sprintf(
hname,
"ftf_s%u_ss%u_ly6_h2_nsp",slotnr,subSlotnr);
997 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);
998 sprintf(
hname,
"ftf_s%u_ss%u_ly7_h2_nsp",slotnr,subSlotnr);
999 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);
1001 sprintf(
hname,
"ftf_s%u_ss%u_ly6_h2_nsp_notrk",slotnr,subSlotnr);
1002 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);
1003 sprintf(
hname,
"ftf_s%u_ss%u_ly7_h2_nsp_notrk",slotnr,subSlotnr);
1004 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);
1006 for(
unsigned int iSeed=0; iSeed<v_sp_eta.size(); ++iSeed) {
1008 int sp_layer = v_sp_layer[iSeed];
1009 float sp_eta = v_sp_eta[iSeed];
1011 if( ilayer<6 )
continue;
1013 int sp_trkid = v_sp_usedTrkId[iSeed];
1014 bool isUsedByTrk = (sp_trkid != -1);
1015 float sp_phi = v_sp_phi[iSeed];
1017 bool fill_out_of_pi =
false;
1020 sp_phi2 = 2*TMath::Pi() + sp_phi;
1021 if( sp_phi2 < PHI_MAX ) fill_out_of_pi =
true;
1024 sp_phi2 = -2*TMath::Pi() + sp_phi;
1025 if( PHI_MIN < sp_phi2 ) fill_out_of_pi =
true;
1028 ly6_h2_nsp->Fill(sp_eta,sp_phi);
1029 if( fill_out_of_pi ) ly6_h2_nsp->Fill(sp_eta,sp_phi2);
1030 if( ! isUsedByTrk ) ly6_h2_nsp_notrk->Fill(sp_eta,sp_phi);
1031 if( ! isUsedByTrk && fill_out_of_pi) ly6_h2_nsp_notrk->Fill(sp_eta,sp_phi2);
1034 ly7_h2_nsp->Fill(sp_eta,sp_phi);
1035 if( fill_out_of_pi ) ly7_h2_nsp->Fill(sp_eta,sp_phi2);
1036 if( ! isUsedByTrk ) ly7_h2_nsp_notrk->Fill(sp_eta,sp_phi);
1037 if( ! isUsedByTrk && fill_out_of_pi) ly7_h2_nsp_notrk->Fill(sp_eta,sp_phi2);
1044 std::vector<std::tuple<int,float,float,float>> QT;
1046 for(
int ly6_ieta=1; ly6_ieta<=NBINS_ETA; ly6_ieta++) {
1047 float ly6_eta = (ly6_h2_nsp->GetXaxis()->GetBinLowEdge(ly6_ieta) + ly6_h2_nsp->GetXaxis()->GetBinUpEdge(ly6_ieta))/2.0;
1048 for(
int ly6_iphi=1; ly6_iphi<=NBINS_PHI; ly6_iphi++) {
1049 float ly6_phi = (ly6_h2_nsp->GetYaxis()->GetBinLowEdge(ly6_iphi) + ly6_h2_nsp->GetYaxis()->GetBinUpEdge(ly6_iphi))/2.0;
1051 float ly6_nsp = ly6_h2_nsp ->GetBinContent(ly6_ieta,ly6_iphi);
1052 float ly6_nsp_notrk = ly6_h2_nsp_notrk->GetBinContent(ly6_ieta,ly6_iphi);
1053 float ly6_frac = ( ly6_nsp > 0 ) ? ly6_nsp_notrk / ly6_nsp : 0;
1054 if( ly6_nsp < 10 || ly6_frac < 0.85 )
continue;
1056 float ly7_frac_max = 0;
1057 float ly7_eta_max = 0;
1058 float ly7_phi_max = 0;
1059 for(
int ly7_ieta=
std::max(1,ly6_ieta-1); ly7_ieta<
std::min(NBINS_ETA,ly6_ieta+1); ly7_ieta++) {
1060 for(
int ly7_iphi=
std::max(1,ly6_iphi-1); ly7_iphi<=
std::min(NBINS_PHI,ly6_iphi+1); ly7_iphi++) {
1061 float ly7_nsp = ly7_h2_nsp ->GetBinContent(ly7_ieta,ly7_iphi);
1062 float ly7_nsp_notrk = ly7_h2_nsp_notrk->GetBinContent(ly7_ieta,ly7_iphi);
1063 float ly7_frac = ( ly7_nsp > 0 ) ? ly7_nsp_notrk / ly7_nsp : 0;
1064 if( ly7_nsp < 10 )
continue;
1065 if( ly7_frac > ly7_frac_max ) {
1066 ly7_frac_max = ly7_frac;
1067 ly7_eta_max = (ly7_h2_nsp->GetXaxis()->GetBinLowEdge(ly7_ieta) + ly7_h2_nsp->GetXaxis()->GetBinUpEdge(ly7_ieta))/2.0;
1068 ly7_phi_max = (ly7_h2_nsp->GetXaxis()->GetBinLowEdge(ly7_iphi) + ly7_h2_nsp->GetXaxis()->GetBinUpEdge(ly7_iphi))/2.0;
1072 if( ly7_frac_max < 0.85 )
continue;
1074 float wsum = ly6_frac + ly7_frac_max;
1075 float weta = (ly6_eta*ly6_frac + ly7_eta_max*ly7_frac_max) / wsum;
1076 float wphi = (ly6_phi*ly6_frac + ly7_phi_max*ly7_frac_max) / wsum;
1077 float w = wsum / 2.0;
1078 QT.push_back(std::make_tuple(-1,
w,weta,wphi));
1081 ATH_MSG_VERBOSE(
"nr of ly6/ly7 doublet candidate seeds=" << QT.size() <<
", doing clustering...");
1085 [](
const std::tuple<int,float,float,float>& lhs,
const std::tuple<int,float,float,float>& rhs) {
1086 return std::get<1>(lhs) > std::get<1>(rhs); } );
1089 const double CLUSTCUT_DIST_SQUARED = 0.04;
1090 const double CLUSTCUT_SEED_FRAC = 0.9;
1092 std::vector<float> seeds_wsum;
1094 for(
unsigned int i=0;
i<QT.size();
i++) {
1095 float phi = std::get<3>(QT[
i]);
1096 float eta = std::get<2>(QT[
i]);
1097 float w = std::get<1>(QT[
i]);
1099 seeds_eta.push_back(
w*
eta); seeds_phi.push_back(
w*
phi);
1100 seeds_wsum.push_back(
w);
1103 const int IDX_INITIAL = 100;
1104 float dist2_min = 100.0;
1106 for(
unsigned j=0; j<seeds_eta.size(); j++) {
1107 float ceta = seeds_eta[j]/seeds_wsum[j];
1108 float cphi = seeds_phi[j]/seeds_wsum[j];
1110 float deta = std::fabs(ceta-
eta);
1111 float dphi = std::fabs(cphi-
phi);
1112 float dist2 = dphi*dphi+deta*deta;
1113 if( dist2 < dist2_min ) {
1118 int match_idx = IDX_INITIAL;
1119 if(
idx_min != IDX_INITIAL ) {
1120 if( dist2_min < CLUSTCUT_DIST_SQUARED ) { match_idx =
idx_min; }
1122 if( match_idx == IDX_INITIAL ) {
1123 if(
w > CLUSTCUT_SEED_FRAC && dist2_min > CLUSTCUT_DIST_SQUARED ) {
1124 seeds_eta.push_back(
w*
eta); seeds_phi.push_back(
w*
phi);
1125 seeds_wsum.push_back(
w);
1129 float new_eta = seeds_eta[match_idx] +
w*
eta;
1130 float new_phi = seeds_phi[match_idx] +
w*
phi;
1131 float new_wsum = seeds_wsum[match_idx] +
w;
1132 seeds_eta[match_idx] = new_eta;
1133 seeds_phi[match_idx] = new_phi;
1134 seeds_wsum[match_idx] = new_wsum;
1137 for(
unsigned int i=0;
i<seeds_eta.size();
i++) {
1138 float eta = seeds_eta[
i] / seeds_wsum[
i];
1139 float phi = seeds_phi[
i] / seeds_wsum[
i];
1142 if(
phi < -TMath::Pi() )
phi = 2*TMath::Pi() +
phi;
1143 if(
phi > TMath::Pi() )
phi = -2*TMath::Pi() +
phi;
1146 ATH_MSG_VERBOSE(
"after clustering, nr of seeds = " << seeds_eta.size());
1149 std::vector<unsigned int> idx_to_delete;
1150 for(
unsigned int i=0;
i<seeds_eta.size();
i++) {
1151 if(
std::find(idx_to_delete.begin(),idx_to_delete.end(),
i) != idx_to_delete.end() )
continue;
1152 float eta_i = seeds_eta[
i];
1153 float phi_i = seeds_phi[
i];
1154 for(
unsigned int j=
i+1; j<seeds_eta.size(); j++) {
1155 if(
std::find(idx_to_delete.begin(),idx_to_delete.end(),j) != idx_to_delete.end() )
continue;
1156 float eta_j = seeds_eta[j];
1157 float phi_j = seeds_phi[j];
1158 float dR2 =
deltaR2(eta_i,phi_i,eta_j,phi_j);
1159 if( dR2 < CLUSTCUT_DIST_SQUARED ) idx_to_delete.push_back(j);
1162 ATH_MSG_VERBOSE(
"nr of duplicated seeds to be removed = " << idx_to_delete.size());
1163 if( idx_to_delete.size() > 0 ) {
1164 std::sort(idx_to_delete.begin(),idx_to_delete.end());
1165 for(
unsigned int j=idx_to_delete.size(); j>0; j--) {
1166 unsigned int idx = idx_to_delete[j-1];
1167 seeds_eta.erase(seeds_eta.begin()+
idx);
1168 seeds_phi.erase(seeds_phi.begin()+
idx);
1175 return StatusCode::SUCCESS;
◆ getSPLayer()
int TrigHitDVHypoAlg::getSPLayer |
( |
int |
layer, |
|
|
float |
eta |
|
) |
| const |
|
private |
Definition at line 342 of file TrigHitDVHypoAlg.cxx.
344 float abseta = std::fabs(
eta);
357 const float PixBR6limit = 1.29612;
358 const float PixBR5limit = 1.45204;
359 const float PixBR4limit = 1.64909;
360 const float PixBR3limit = 1.90036;
361 const float PixBR2limit = 2.2146;
367 if( abseta > PixBR2limit )
return 2;
375 if( abseta > PixBR2limit )
return 2;
390 if( abseta < PixBR6limit )
return 7;
391 else if( abseta < PixBR5limit )
return 6;
399 if( abseta < PixBR5limit )
return 7;
400 else if( abseta < PixBR4limit )
return 6;
408 if( abseta < PixBR4limit )
return 7;
416 if( abseta < PixBR4limit )
return 6;
417 else if( abseta < PixBR3limit )
return 6;
425 if( abseta < PixBR3limit )
return 7;
433 if( abseta < PixBR3limit )
return 6;
441 if( abseta < PixBR3limit )
return 7;
449 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 33 of file HypoBase.cxx.
41 return StatusCode::SUCCESS;
◆ initialize()
StatusCode TrigHitDVHypoAlg::initialize |
( |
| ) |
|
|
overridevirtual |
Definition at line 52 of file TrigHitDVHypoAlg.cxx.
61 std::string sth =
results[1].str();
62 std::string swp =
results[2].str();
64 int thres = std::stoi(sth);
89 for (
auto&
reader : m_tmva_reader) {
91 auto tmva =
std::array{std::make_unique<TMVA::Reader>(
"!Color:!Silent" ),
92 std::make_unique<TMVA::Reader>(
"!Color:!Silent" )};
93 for (
auto&
t : tmva) {
94 t->AddVariable(
"n_track_qual", &
reader.n_track_qual);
95 t->AddVariable(
"ly0_sp_frac", &
reader.ly0_sp_frac);
96 t->AddVariable(
"ly1_sp_frac", &
reader.ly1_sp_frac);
97 t->AddVariable(
"ly2_sp_frac", &
reader.ly2_sp_frac);
98 t->AddVariable(
"ly3_sp_frac", &
reader.ly3_sp_frac);
99 t->AddVariable(
"ly4_sp_frac", &
reader.ly4_sp_frac);
100 t->AddVariable(
"ly5_sp_frac", &
reader.ly5_sp_frac);
101 t->AddVariable(
"ly6_sp_frac", &
reader.ly6_sp_frac);
102 t->AddVariable(
"ly7_sp_frac", &
reader.ly7_sp_frac);
104 reader.tmva_0eta1 = std::move(tmva[0]);
105 reader.tmva_1eta2 = std::move(tmva[1]);
108 const std::string tuningVer =
"v22a";
109 const std::string methodName =
"BDT method";
112 "TrigHitDVHypo/HitDV.BDT.weights.0eta1." + tuningVer +
".xml");
114 "TrigHitDVHypo/HitDV.BDT.weights.1eta2." + tuningVer +
".xml");
117 reader.tmva_0eta1->BookMVA(methodName, weightfile_0eta1);
118 reader.tmva_1eta2->BookMVA(methodName, weightfile_1eta2);
121 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()
bool AthReentrantAlgorithm::isClonable |
( |
| ) |
const |
|
overridevirtualinherited |
Specify if the algorithm is clonable.
Reentrant algorithms are clonable.
Reimplemented in Simulation::BeamEffectsAlg, InDet::SiTrackerSpacePointFinder, InDet::SCT_Clusterization, InDet::SiSPSeededTrackFinder, SCTRawDataProvider, InDet::GNNSeedingTrackMaker, SCT_PrepDataToxAOD, RoIBResultToxAOD, SCT_CablingCondAlgFromCoraCool, SCT_ReadCalibDataTestAlg, SCT_CablingCondAlgFromText, InDet::SiSPGNNTrackMaker, SCT_ReadCalibChipDataTestAlg, SCT_TestCablingAlg, SCT_ConfigurationConditionsTestAlg, ITkPixelCablingAlg, ITkStripCablingAlg, SCTEventFlagWriter, SCT_ConditionsSummaryTestAlg, SCT_ModuleVetoTestAlg, SCT_MonitorConditionsTestAlg, SCT_LinkMaskingTestAlg, SCT_MajorityConditionsTestAlg, SCT_RODVetoTestAlg, SCT_SensorsTestAlg, SCT_TdaqEnabledTestAlg, SCT_SiliconConditionsTestAlg, SCTSiLorentzAngleTestAlg, SCT_ByteStreamErrorsTestAlg, SCT_ConditionsParameterTestAlg, SCT_FlaggedConditionTestAlg, SCT_StripVetoTestAlg, SCT_RawDataToxAOD, and SCTSiPropertiesTestAlg.
Definition at line 44 of file AthReentrantAlgorithm.cxx.
◆ 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 388 of file HypoBase.cxx.
389 msg << MSG::ERROR <<
"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" <<
endmsg;
◆ printDebugInformation()
Common base function to print information on chains passed by objects considered in the hypo.
Definition at line 404 of file HypoBase.cxx.
407 msg() <<
"Exiting with " << outputHandle->
size() <<
" Decision objects" <<
endmsg;
412 msg() <<
"Number of positive decisions for Decision object #" <<
count++ <<
": " << objDecisions.size() <<
endmsg;
418 return StatusCode::SUCCESS;
◆ printErrorHeader()
A problem was found, print common output data.
Definition at line 393 of file HypoBase.cxx.
397 msg << MSG::ERROR <<
"! RUNTIME TRIGGER NAVIGATION VALIDATION ERROR" <<
endmsg;
398 msg << MSG::ERROR <<
"! Caused by Decision with index:" << (*dEL)->index() <<
endmsg;
400 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 69 of file HypoBase.cxx.
76 if (onlyValidateOneStep && callDepth > 0) {
80 return StatusCode::SUCCESS;
88 return StatusCode::FAILURE;
93 return StatusCode::FAILURE;
99 return StatusCode::FAILURE;
102 return StatusCode::FAILURE;
107 return StatusCode::FAILURE;
110 return StatusCode::FAILURE;
116 if (fullyExploredFrom.count( (*seed) ) == 1) {
119 if ( not
seed.isValid() ) {
120 msg << MSG::ERROR <<
"Invalid seed element link in recursiveValidateGraph" <<
endmsg;
121 return StatusCode::FAILURE;
123 if (
recursiveValidateGraph(seed,
msg, onlyValidateOneStep, runTwoConversion, callDepth + 1, fullyExploredFrom).isFailure() ) {
124 return StatusCode::FAILURE;
128 fullyExploredFrom.insert( *dEL );
129 return StatusCode::SUCCESS;
◆ renounce()
◆ renounceArray()
◆ runtimeValidation()
Executes all individual runtime tests.
Definition at line 45 of file HypoBase.cxx.
51 std::set<const Decision*> fullyExploredFrom;
56 msg << MSG::ERROR <<
"Invalid seed element link in recursiveValidateGraph" <<
endmsg;
57 return StatusCode::FAILURE;
62 return StatusCode::FAILURE;
65 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 948 of file TrigHitDVHypoAlg.cxx.
951 std::vector<unsigned int> idx_to_delete;
952 for(
unsigned int idx=0;
idx<jetSeeds_eta.size(); ++
idx) {
953 const float DR_SQUARED_CUT_TO_FTFSEED = 0.09;
954 float eta = jetSeeds_eta[
idx];
955 float phi = jetSeeds_phi[
idx];
957 for (
const auto& seed : hitDVSeedsContainer ) {
959 if( dR2 < dR2min ) dR2min = dR2;
961 if( dR2min > DR_SQUARED_CUT_TO_FTFSEED ) idx_to_delete.push_back(
idx);
963 if( idx_to_delete.size() > 0 ) {
964 std::sort(idx_to_delete.begin(),idx_to_delete.end());
965 for(
unsigned int j=idx_to_delete.size(); j>0; j--) {
966 unsigned int idx = idx_to_delete[j-1];
967 jetSeeds_eta.erase(jetSeeds_eta.begin()+
idx);
968 jetSeeds_phi.erase(jetSeeds_phi.begin()+
idx);
969 if( jetSeeds_pt.size() > 0 ) jetSeeds_pt.erase(jetSeeds_pt.begin()+
idx);
972 return StatusCode::SUCCESS;
◆ setFilterPassed()
virtual void AthReentrantAlgorithm::setFilterPassed |
( |
bool |
state, |
|
|
const EventContext & |
ctx |
|
) |
| const |
|
inlinevirtualinherited |
◆ sysExecute()
StatusCode AthReentrantAlgorithm::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 67 of file AthReentrantAlgorithm.cxx.
69 return Gaudi::Algorithm::sysExecute (ctx);
◆ 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 207 of file HypoBase.cxx.
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;
220 return StatusCode::FAILURE;
223 return StatusCode::SUCCESS;
◆ validateDuplicatedDecisionID()
Ensure that no space is being wasted by duplicated DecisionIDs in any Decision objects.
Definition at line 227 of file HypoBase.cxx.
233 if (decisionIDSet.size() != (*dEL)->decisions().size()) {
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;
239 return StatusCode::FAILURE;
241 return StatusCode::SUCCESS;
◆ validateHasLinks()
Ensure all Decisions have the named ElementLink graph edges which they are required to by spec.
Definition at line 336 of file HypoBase.cxx.
339 const std::string&
name = (*dEL)->name();
344 return StatusCode::SUCCESS;
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;
352 return StatusCode::FAILURE;
358 if ((*dEL)->hasDetail<int32_t>(
"isEmpty") and (*dEL)->getDetail<int32_t>(
"isEmpty") == 1) {
362 if (not (*dEL)->hasObjectLink(
roiString() ) and not exempt) {
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;
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;
384 return StatusCode::SUCCESS;
◆ validateLogicalFlow()
Ensure that all DecisionIDs have propagated correctly from their parent.
Definition at line 245 of file HypoBase.cxx.
251 return StatusCode::SUCCESS;
260 size_t parentsWithDecision = 0;
262 if ( not
seed.isValid() ) {
263 msg << MSG::ERROR <<
"Invalid seed element link in recursiveValidateGraph" <<
endmsg;
264 return StatusCode::FAILURE;
272 ++parentsWithDecision;
275 for (
auto sid: seedIDSet){
277 ++parentsWithDecision;
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;
292 msg << MSG::ERROR <<
"! Index:" << (*seed)->index() <<
" from collection:" <<
seed.dataID() <<
endmsg;
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;
304 return StatusCode::FAILURE;
305 }
else if (
mode ==
kRequireAll && parentsWithDecision != seeds.size()) {
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;
317 msg << MSG::ERROR <<
"! Index:" << (*seed)->index() <<
" from collection:" <<
seed.dataID() <<
endmsg;
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;
329 return StatusCode::FAILURE;
332 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 133 of file HypoBase.cxx.
139 const std::string&
name = (*dEL)->name();
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;
145 return StatusCode::FAILURE;
149 if (seeds.size() > 0) {
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;
154 return StatusCode::FAILURE;
156 return StatusCode::SUCCESS;
160 static const std::set<std::string> expectedParentsInputMaker = {
filterNodeName()};
164 static const std::set<std::string> expectedParentsSummaryPassed = {
"SF"};
166 const std::set<std::string>* expectedParentsPtr =
nullptr;
168 expectedParentsPtr = &expectedParentsFilter;
170 expectedParentsPtr = &expectedParentsInputMaker;
172 expectedParentsPtr = &expectedParentsFilter;
174 expectedParentsPtr = &expectedParentsHypoAlg;
176 expectedParentsPtr = &expectedParentsComboHypoAlg;
177 }
else if (
name ==
"SF") {
178 expectedParentsPtr = &expectedParentsSummaryFilter;
179 }
else if (
name ==
"HLTPassRaw") {
180 expectedParentsPtr = &expectedParentsSummaryPassed;
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;
186 return StatusCode::FAILURE;
190 if (expectedParentsPtr->count( (*seed)->name() ) == 0) {
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;
197 msg << MSG::ERROR <<
"! SOLUTION: Find where this invalid parent was added and correct it." <<
endmsg;
199 return StatusCode::FAILURE;
203 return StatusCode::SUCCESS;
◆ ATLAS_THREAD_SAFE
◆ m_beamSpotKey
◆ m_detStore
◆ m_doHitDV_Seeding
bool TrigHitDVHypoAlg::m_doHitDV_Seeding = true |
|
private |
◆ m_evtStore
◆ m_extendedExtraObjects
DataObjIDColl AthReentrantAlgorithm::m_extendedExtraObjects |
|
privateinherited |
Extra output dependency collection, extended by AthAlgorithmDHUpdate to add symlinks.
Empty if no symlinks were found.
Definition at line 153 of file AthReentrantAlgorithm.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 |
|
private |
◆ m_tools_lowest_jetEt
int TrigHitDVHypoAlg::m_tools_lowest_jetEt |
|
private |
◆ m_tracksKey
◆ m_useBeamSpot
bool TrigHitDVHypoAlg::m_useBeamSpot |
|
private |
◆ m_varHandleArraysDeclared
◆ m_vhka
The documentation for this class was generated from the following files:
StatusCode calculateBDT(const EventContext &, 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
const std::pair< const PrepRawData *, const PrepRawData * > & clusterList() const
return the pair of cluster pointers by reference
JetConstituentVector::iterator iterator
static std::string find_calib_file(const std::string &logical_file_name)
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
const std::string & hltSeedingNodeName()
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
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
const std::string & hypoAlgNodeName()
T wrapToPi(T phi)
Wrap angle in radians to [-pi, pi].
SG::ReadHandleKey< xAOD::jFexSRJetRoIContainer > m_jetRoiCollectionKey
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()
SG::WriteHandle< DecisionContainer > createAndStore(const SG::WriteHandleKey< DecisionContainer > &key, const EventContext &ctx)
Creates and right away records the DecisionContainer with the key.
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).
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.
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())
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
StatusCode selectSeedsNearby(const std::vector< HitDVSeed > &hitDVSeedsContainer, std::vector< float > &jetSeeds_eta, std::vector< float > &jetSeeds_phi, std::vector< float > &jetSeeds_pt) const
static StatusCode validateDuplicatedDecisionID(const ElementLink< TrigCompositeUtils::DecisionContainer > &dEL, MsgStream &msg)
Ensure that no space is being wasted by duplicated DecisionIDs in any Decision objects.
const std::string & initialRoIString()
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.
bool dPhi(const xAOD::TauJet &tau, const xAOD::TauTrack &track, double &out)
SG::ReadHandleKey< TrigCompositeUtils::DecisionContainer > m_input
input decisions
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)
Class used to describe composite objects in the HLT.
StatusCode doMonitor(const xAOD::TrigCompositeContainer *) const
SG::ReadCondHandleKey< InDet::BeamSpotData > m_beamSpotKey
DataObjIDColl m_extendedExtraObjects
Extra output dependency collection, extended by AthAlgorithmDHUpdate to add symlinks.
virtual void renounce()=0
std::conditional< std::is_base_of< SG::VarHandleKeyArray, T >::value, VarHandleKeyArrayType, type2 >::type type
ElementLink implementation for ROOT usage.
const std::string & featureString()
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
virtual StatusCode sysInitialize() override
Override sysInitialize.
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)
SG::WriteHandleKey< xAOD::TrigCompositeContainer > m_hitDVKey
Eigen::Matrix< double, 3, 1 > Vector3D
SG::ReadCondHandleKey< LuminosityCondData > m_lumiDataKey
Gaudi::Property< bool > m_isMC
const std::string & filterNodeName()
const std::string & seedString()
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
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 if it is enabled or, empty string
SG::VarHandleKey & vhKey()
Return a non-const reference to the HandleKey.
SG::WriteHandleKey< TrigCompositeUtils::DecisionContainer > m_output
output decisions
const std::string & roiString()
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
reader
read the goodrunslist xml file(s)
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
bool dEta(const xAOD::TauJet &tau, const xAOD::TauTrack &track, double &out)
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.
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.
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>
@ kRequireOne
Require all DecisionIDs to be present in at least one of my parent Decision objects.
const std::string & inputMakerNodeName()
int getSPLayer(int, float) const
unsigned int et() const
Methods that require combining results or applying scales.