|
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< DataVector< LVL1::RecJetRoI > > | m_recJetRoiCollectionKey {this, "RecJetRoI", "", ""} |
|
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 564 of file TrigHitDVHypoAlg.cxx.
572 if( seeds_eta.size() != seeds_phi.size() )
return StatusCode::SUCCESS;
575 for(
unsigned int iseed=0; iseed<seeds_eta.size(); iseed++) {
577 float seed_eta = seeds_eta[iseed];
578 float seed_phi = seeds_phi[iseed];
580 ATH_MSG_VERBOSE(
"+++++ seed eta: " << seed_eta <<
", phi:" << seed_phi <<
" +++++");
584 const float DR_SQUARED_TO_REF_CUT = 0.16;
587 int n_sp_injet_usedByTrk = 0;
589 int v_n_sp_injet_usedByTrk[
N_LAYER];
590 for(
int i=0;
i<
N_LAYER;
i++) { v_n_sp_injet[
i]=0; v_n_sp_injet_usedByTrk[
i]=0; }
592 for (
const auto & spData : spsContainer ) {
594 float sp_eta = spData.eta;
595 float sp_phi = spData.phi;
596 float dR2 =
deltaR2(sp_eta,sp_phi,seed_eta,seed_phi);
597 if( dR2 > DR_SQUARED_TO_REF_CUT )
continue;
600 int sp_layer = (
int)spData.layer;
601 int sp_trkid = (
int)spData.usedTrkId;
602 bool isUsedByTrk = (sp_trkid != -1);
608 v_n_sp_injet[ilayer]++;
610 n_sp_injet_usedByTrk++;
611 v_n_sp_injet_usedByTrk[ilayer]++;
615 ATH_MSG_VERBOSE(
"nr of SPs in jet: usedByTrk / all = " << n_sp_injet_usedByTrk <<
" / " << n_sp_injet);
619 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]);
620 v_ly_sp_frac[
i] =
frac;
621 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]);
625 const float TRK_PT_GEV_CUT = 2.0;
627 unsigned int n_qtrk_injet = 0;
628 for (
const auto& trk : trksContainer ) {
629 float trk_ptGeV = trk.pt;
631 if( trk_ptGeV < TRK_PT_GEV_CUT )
continue;
632 float dR2 =
deltaR2(trk.eta,trk.phi,seed_eta,seed_phi);
633 if( dR2 > DR_SQUARED_TO_REF_CUT )
continue;
636 ATH_MSG_DEBUG(
"nr of all / quality tracks matched = " << trksContainer.size() <<
" / " << n_qtrk_injet);
639 bool isSeedOutOfRange =
false;
640 if( n_qtrk_injet == 0 ) {
641 isSeedOutOfRange =
true;
643 if( std::fabs(v_ly_sp_frac[
i]) > 1
e-3 ) {
644 isSeedOutOfRange =
false;
break;
648 float bdt_score = -2.0;
649 if( ! isSeedOutOfRange ) {
650 auto&
reader = *m_tmva_reader.get(context);
651 reader.n_track_qual =
static_cast<float>(n_qtrk_injet);
652 reader.ly0_sp_frac = v_ly_sp_frac[0];
653 reader.ly1_sp_frac = v_ly_sp_frac[1];
654 reader.ly2_sp_frac = v_ly_sp_frac[2];
655 reader.ly3_sp_frac = v_ly_sp_frac[3];
656 reader.ly4_sp_frac = v_ly_sp_frac[4];
657 reader.ly5_sp_frac = v_ly_sp_frac[5];
658 reader.ly6_sp_frac = v_ly_sp_frac[6];
659 reader.ly7_sp_frac = v_ly_sp_frac[7];
661 if ( std::abs(seed_eta) < 1 ) {
662 bdt_score =
reader.tmva_0eta1->EvaluateMVA(
"BDT method");
663 }
else if ( std::abs(seed_eta) < 2 ) {
664 bdt_score =
reader.tmva_1eta2->EvaluateMVA(
"BDT method");
669 if( bdt_score < cutBDTthreshold )
continue;
677 dv->makePrivateStore();
681 if ( seed_type == SeedType::HLTJet ) seed_pt = seeds_pt[iseed];
682 dv->setDetail<
float>(
"hitDV_seed_pt", seed_pt);
683 dv->setDetail<
float>(
"hitDV_seed_eta", seed_eta);
684 dv->setDetail<
float>(
"hitDV_seed_phi", seed_phi);
685 dv->setDetail<
int> (
"hitDV_seed_type", seed_type);
686 dv->setDetail<
int> (
"hitDV_n_track_qual", n_qtrk_injet);
687 dv->setDetail<
float>(
"hitDV_ly0_sp_frac", v_ly_sp_frac[0]);
688 dv->setDetail<
float>(
"hitDV_ly1_sp_frac", v_ly_sp_frac[1]);
689 dv->setDetail<
float>(
"hitDV_ly2_sp_frac", v_ly_sp_frac[2]);
690 dv->setDetail<
float>(
"hitDV_ly3_sp_frac", v_ly_sp_frac[3]);
691 dv->setDetail<
float>(
"hitDV_ly4_sp_frac", v_ly_sp_frac[4]);
692 dv->setDetail<
float>(
"hitDV_ly5_sp_frac", v_ly_sp_frac[5]);
693 dv->setDetail<
float>(
"hitDV_ly6_sp_frac", v_ly_sp_frac[6]);
694 dv->setDetail<
float>(
"hitDV_ly7_sp_frac", v_ly_sp_frac[7]);
695 dv->setDetail<
float>(
"hitDV_bdt_score", bdt_score);
702 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 465 of file TrigHitDVHypoAlg.cxx.
467 std::vector<float> mnt_eta1_ly0_spfr;
468 std::vector<float> mnt_eta1_ly1_spfr;
469 std::vector<float> mnt_eta1_ly2_spfr;
470 std::vector<float> mnt_eta1_ly3_spfr;
471 std::vector<float> mnt_eta1_ly4_spfr;
472 std::vector<float> mnt_eta1_ly5_spfr;
473 std::vector<float> mnt_eta1_ly6_spfr;
474 std::vector<float> mnt_eta1_ly7_spfr;
475 std::vector<int> mnt_eta1_n_qtrk;
476 std::vector<float> mnt_eta1_bdtscore;
477 std::vector<float> mnt_1eta2_ly0_spfr;
478 std::vector<float> mnt_1eta2_ly1_spfr;
479 std::vector<float> mnt_1eta2_ly2_spfr;
480 std::vector<float> mnt_1eta2_ly3_spfr;
481 std::vector<float> mnt_1eta2_ly4_spfr;
482 std::vector<float> mnt_1eta2_ly5_spfr;
483 std::vector<float> mnt_1eta2_ly6_spfr;
484 std::vector<float> mnt_1eta2_ly7_spfr;
485 std::vector<int> mnt_1eta2_n_qtrk;
486 std::vector<float> mnt_1eta2_bdtscore;
508 mon_eta1_ly0_spfr, mon_eta1_ly1_spfr, mon_eta1_ly2_spfr, mon_eta1_ly3_spfr,
509 mon_eta1_ly4_spfr, mon_eta1_ly5_spfr, mon_eta1_ly6_spfr, mon_eta1_ly7_spfr,
510 mon_eta1_n_qtrk, mon_eta1_bdtscore,
511 mon_1eta2_ly0_spfr, mon_1eta2_ly1_spfr, mon_1eta2_ly2_spfr, mon_1eta2_ly3_spfr,
512 mon_1eta2_ly4_spfr, mon_1eta2_ly5_spfr, mon_1eta2_ly6_spfr, mon_1eta2_ly7_spfr,
513 mon_1eta2_n_qtrk, mon_1eta2_bdtscore);
516 for (
auto dv : *dvContainer ) {
517 int seed_type =
dv->getDetail<
int> (
"hitDV_seed_type");
519 if( seed_type == SeedType::SP )
continue;
520 float seed_eta =
dv->getDetail<
float>(
"hitDV_seed_eta");
521 int n_track_qual=
dv->getDetail<
int> (
"hitDV_n_track_qual");
522 float bdt_score =
dv->getDetail<
float>(
"hitDV_bdt_score");
523 float ly0_sp_frac =
dv->getDetail<
float>(
"hitDV_ly0_sp_frac");
524 float ly1_sp_frac =
dv->getDetail<
float>(
"hitDV_ly1_sp_frac");
525 float ly2_sp_frac =
dv->getDetail<
float>(
"hitDV_ly2_sp_frac");
526 float ly3_sp_frac =
dv->getDetail<
float>(
"hitDV_ly3_sp_frac");
527 float ly4_sp_frac =
dv->getDetail<
float>(
"hitDV_ly4_sp_frac");
528 float ly5_sp_frac =
dv->getDetail<
float>(
"hitDV_ly5_sp_frac");
529 float ly6_sp_frac =
dv->getDetail<
float>(
"hitDV_ly6_sp_frac");
530 float ly7_sp_frac =
dv->getDetail<
float>(
"hitDV_ly7_sp_frac");
531 if( std::abs(seed_eta) < 1.0 ) {
532 mnt_eta1_ly0_spfr.push_back(ly0_sp_frac);
533 mnt_eta1_ly1_spfr.push_back(ly1_sp_frac);
534 mnt_eta1_ly2_spfr.push_back(ly2_sp_frac);
535 mnt_eta1_ly3_spfr.push_back(ly3_sp_frac);
536 mnt_eta1_ly4_spfr.push_back(ly4_sp_frac);
537 mnt_eta1_ly5_spfr.push_back(ly5_sp_frac);
538 mnt_eta1_ly6_spfr.push_back(ly6_sp_frac);
539 mnt_eta1_ly7_spfr.push_back(ly7_sp_frac);
540 mnt_eta1_n_qtrk.push_back(n_track_qual);
541 mnt_eta1_bdtscore.push_back(bdt_score);
543 else if( std::abs(seed_eta) < 2.0 ) {
544 mnt_1eta2_ly0_spfr.push_back(ly0_sp_frac);
545 mnt_1eta2_ly1_spfr.push_back(ly1_sp_frac);
546 mnt_1eta2_ly2_spfr.push_back(ly2_sp_frac);
547 mnt_1eta2_ly3_spfr.push_back(ly3_sp_frac);
548 mnt_1eta2_ly4_spfr.push_back(ly4_sp_frac);
549 mnt_1eta2_ly5_spfr.push_back(ly5_sp_frac);
550 mnt_1eta2_ly6_spfr.push_back(ly6_sp_frac);
551 mnt_1eta2_ly7_spfr.push_back(ly7_sp_frac);
552 mnt_1eta2_n_qtrk.push_back(n_track_qual);
553 mnt_1eta2_bdtscore.push_back(bdt_score);
558 return StatusCode::SUCCESS;
◆ evtStore() [1/2]
◆ evtStore() [2/2]
◆ execute()
StatusCode TrigHitDVHypoAlg::execute |
( |
const EventContext & |
context | ) |
const |
|
overridevirtual |
Definition at line 126 of file TrigHitDVHypoAlg.cxx.
130 std::vector<TrigSiSpacePointBase> convertedSpacePoints;
131 convertedSpacePoints.reserve(5000);
144 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 );
149 ATH_CHECK( previousDecisionsHandle.isValid() );
151 ATH_MSG_DEBUG(
"Running with " << previousDecisionsHandle->size() <<
" previous decisions" );
152 if( previousDecisionsHandle->size()!=1 ) {
153 ATH_MSG_ERROR(
"Previous decision handle size is not 1. It is" << previousDecisionsHandle->size() );
154 return StatusCode::FAILURE;
156 const Decision * previousDecision = previousDecisionsHandle->at(0);
161 for(
auto decisionID: previousDecisionIDs) {
ATH_MSG_DEBUG(
" " << decisionID ); }
166 auto outputDecisions = outputHandle.
ptr();
176 if( jetsContainer ==
nullptr ) {
178 return StatusCode::FAILURE;
180 bool isJetEtPassToolsCut =
false;
181 float jetEtaToolsCut = 2.0;
185 float jet_eta =
static_cast<float>(
jet->eta());
187 isJetEtPassToolsCut =
true;
195 std::vector<HitDVSeed> hitDVSeedsContainer;
196 std::vector<HitDVTrk> hitDVTrksContainer;
197 std::vector<HitDVSpacePoint> hitDVSPsContainer;
200 ATH_CHECK(
findHitDV(context, convertedSpacePoints, *tracks, hitDVSeedsContainer, hitDVTrksContainer, hitDVSPsContainer) );
202 mon_n_dvtrks = hitDVTrksContainer.size();
203 mon_n_dvsps = hitDVSPsContainer.size();
204 const unsigned int N_MAX_SP_STORED = 100000;
205 bool isSPOverflow =
false;
206 if( hitDVSPsContainer.size() >= N_MAX_SP_STORED ) isSPOverflow =
true;
213 averageMu =
static_cast<float>(
m_lumiBlockMuTool->averageInteractionsPerCrossing());
219 averageMu = lcd.cptr()->lbAverageInteractionsPerCrossing();
222 mon_average_mu = averageMu;
225 std::vector<float> jetSeeds_pt;
226 std::vector<float> jetSeeds_eta;
227 std::vector<float> jetSeeds_phi;
229 int n_alljetseeds = jetSeeds_eta.size();
231 mon_n_jetseeds = jetSeeds_eta.size();
232 mon_n_jetseedsdel = n_alljetseeds - jetSeeds_eta.size();
235 std::vector<float> spSeeds_eta;
236 std::vector<float> spSeeds_phi;
237 std::vector<float> void_pt;
238 int n_allspseeds = 0;
241 n_allspseeds = spSeeds_eta.size();
243 mon_n_spseeds = spSeeds_eta.size();
244 mon_n_spseedsdel = n_allspseeds - spSeeds_eta.size();
248 mon_n_spseedsdel = 0;
252 auto hitDVContainer = std::make_unique<xAOD::TrigCompositeContainer>();
253 auto hitDVContainerAux = std::make_unique<xAOD::TrigCompositeAuxContainer>();
254 hitDVContainer->setStore(hitDVContainerAux.get());
257 std::vector<TrigHitDVHypoTool::HitDVHypoInfo> hitDVHypoInputs;
258 std::unordered_map<Decision*, size_t> mapDecIdx;
261 if( isJetEtPassToolsCut ) {
262 const float preselBDTthreshold = -0.6;
264 int n_passed_jet = 0;
265 int seed_type = SeedType::HLTJet;
266 ATH_CHECK(
calculateBDT(context, hitDVSPsContainer, hitDVTrksContainer, jetSeeds_pt, jetSeeds_eta, jetSeeds_phi, preselBDTthreshold, seed_type, dvContainer, n_passed_jet) );
270 seed_type = SeedType::SP;
271 ATH_CHECK(
calculateBDT(context, hitDVSPsContainer, hitDVTrksContainer, void_pt, spSeeds_eta, spSeeds_phi, preselBDTthreshold, seed_type, dvContainer, n_passed_sp) );
274 ATH_MSG_DEBUG(
"nr of dv container / jet-seeded / sp-seed candidates = " << dvContainer->
size() <<
" / " << n_passed_jet <<
" / " << n_passed_sp );
277 for (
auto dv : *dvContainer ) {
279 mapDecIdx.emplace( newDecision,
dv->index() );
281 hitDVHypoInputs.push_back( hypoInfo );
296 ATH_CHECK( hitDVHandle.record( std::move( hitDVContainer ), std::move( hitDVContainerAux ) ) );
300 while(
it != outputDecisions->end()) {
304 it = outputDecisions->erase(
it);
310 size_t idx = mapDecIdx.at(*
it);
326 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 1177 of file TrigHitDVHypoAlg.cxx.
1182 std::vector<int> v_dvtrk_id;
1183 std::vector<float> v_dvtrk_pt;
1184 std::vector<float> v_dvtrk_eta;
1185 std::vector<float> v_dvtrk_phi;
1186 std::vector<int> v_dvtrk_n_hits_inner;
1187 std::vector<int> v_dvtrk_n_hits_pix;
1188 std::vector<int> v_dvtrk_n_hits_sct;
1189 std::vector<float> v_dvtrk_a0beam;
1190 std::unordered_map<Identifier, int> umap_fittedTrack_identifier;
1191 int fittedTrack_id = -1;
1193 static constexpr
float TRKCUT_PTGEV_HITDV = 0.5;
1195 for (
const auto track: tracks) {
1196 float shift_x = 0;
float shift_y = 0;
1203 if (not igt) {
continue;}
1210 m =
track->measurementsOnTrack()->begin(),
1211 me =
track->measurementsOnTrack()->end ();
1212 for(;
m!=me; ++
m ) {
1214 if( prd ==
nullptr )
continue;
1216 if( umap_fittedTrack_identifier.find(id_prd) == umap_fittedTrack_identifier.end() ) {
1217 umap_fittedTrack_identifier.insert(std::make_pair(id_prd,fittedTrack_id));
1221 v_dvtrk_id.push_back(fittedTrack_id);
1223 v_dvtrk_eta.push_back(theTrackInfo.
eta);
1224 v_dvtrk_phi.push_back(
phi);
1225 v_dvtrk_n_hits_inner.push_back(theTrackInfo.
n_hits_inner);
1226 v_dvtrk_n_hits_pix.push_back(theTrackInfo.
n_hits_pix);
1227 v_dvtrk_n_hits_sct.push_back(theTrackInfo.
n_hits_sct);
1228 v_dvtrk_a0beam.push_back(theTrackInfo.
a0beam);
1230 ATH_MSG_DEBUG(
"Nr of selected tracks / all = " << fittedTrack_id <<
" / " << tracks.size());
1231 ATH_MSG_DEBUG(
"Nr of Identifiers used by selected tracks = " << umap_fittedTrack_identifier.size());
1235 int n_sp_usedByTrk = 0;
1237 std::unordered_map<Identifier, int> umap_sp_identifier;
1238 umap_sp_identifier.reserve(1.3*convertedSpacePoints.size());
1243 if( umap_sp_identifier.find(id_prd) == umap_sp_identifier.end() ) {
1244 umap_sp_identifier.insert(std::make_pair(id_prd,-1));
1249 for(
unsigned int iSp=0; iSp<convertedSpacePoints.size(); ++iSp) {
1250 bool isPix = convertedSpacePoints[iSp].isPixel();
1251 bool isSct = convertedSpacePoints[iSp].isSCT();
1252 if( !
isPix && ! isSct )
continue;
1253 const Trk::SpacePoint* sp = convertedSpacePoints[iSp].offlineSpacePoint();
1257 int n_id_usedByTrack = 0;
1258 for(
auto it=umap_sp_identifier.begin();
it!=umap_sp_identifier.end(); ++
it) {
1260 if( umap_fittedTrack_identifier.find(id_sp) != umap_fittedTrack_identifier.end() ) {
1261 umap_sp_identifier[id_sp] = umap_fittedTrack_identifier[id_sp];
1265 ATH_MSG_DEBUG(
"Nr of SPs / Identifiers (all) / Identifiers (usedByTrack) = " << convertedSpacePoints.size() <<
" / " << umap_sp_identifier.size() <<
" / " << n_id_usedByTrack);
1268 int usedTrack_id = -1;
1271 if( umap_sp_identifier.find(id_prd) != umap_sp_identifier.end() ) {
1272 usedTrack_id = umap_sp_identifier[id_prd];
1275 return usedTrack_id;
1278 std::vector<float> v_sp_eta;
1279 v_sp_eta.reserve(convertedSpacePoints.size());
1280 std::vector<float> v_sp_r;
1281 v_sp_r.reserve(convertedSpacePoints.size());
1282 std::vector<float> v_sp_phi;
1283 v_sp_phi.reserve(convertedSpacePoints.size());
1284 std::vector<int> v_sp_layer;
1285 v_sp_layer.reserve(convertedSpacePoints.size());
1286 std::vector<bool> v_sp_isPix;
1287 v_sp_isPix.reserve(convertedSpacePoints.size());
1288 std::vector<bool> v_sp_isSct;
1289 v_sp_isSct.reserve(convertedSpacePoints.size());
1290 std::vector<int> v_sp_usedTrkId;
1291 v_sp_usedTrkId.reserve(convertedSpacePoints.size());
1293 for(
const auto& sp : convertedSpacePoints) {
1294 bool isPix = sp.isPixel();
1295 bool isSct = sp.isSCT();
1296 if( !
isPix && ! isSct )
continue;
1299 int usedTrack_id = -1;
1300 int usedTrack_id_first = sp_map_used_id(osp->
clusterList().first);
1301 if (usedTrack_id_first != -1) {
1302 usedTrack_id = usedTrack_id_first;
1304 int usedTrack_id_second = sp_map_used_id(osp->
clusterList().second);
1305 if (usedTrack_id_second != -1) {
1306 usedTrack_id = usedTrack_id_second;
1311 if( usedTrack_id != -1 ) n_sp_usedByTrk++;
1312 int layer = sp.layer();
1313 float sp_r = sp.
r();
1316 float sp_eta = pos_sp.eta();
1317 float sp_phi = pos_sp.phi();
1319 v_sp_eta.push_back(sp_eta);
1320 v_sp_r.push_back(sp_r);
1321 v_sp_phi.push_back(sp_phi);
1322 v_sp_layer.push_back(
layer);
1323 v_sp_isPix.push_back(
isPix);
1324 v_sp_isSct.push_back(isSct);
1325 v_sp_usedTrkId.push_back(usedTrack_id);
1327 ATH_MSG_VERBOSE(
"+++ SP eta / phi / layer / ixPix / usedTrack_id = " << sp_eta <<
" / " << sp_phi <<
" / " <<
layer <<
" / " <<
isPix <<
" / " << usedTrack_id);
1330 ATH_MSG_DEBUG(
"Nr of SPs / all = " << n_sp <<
" / " << convertedSpacePoints.size());
1331 ATH_MSG_DEBUG(
"Nr of SPs used by selected tracks = " << n_sp_usedByTrk);
1334 std::vector<float> v_seeds_eta;
1335 std::vector<float> v_seeds_phi;
1336 std::vector<int16_t> v_seeds_type;
1341 const unsigned int L1JET_ET_CUT = 30;
1345 if (!recJetRoiCollectionHandle.isValid()){
1347 return StatusCode::FAILURE;
1351 if( recRoI ==
nullptr )
continue;
1352 bool isSeed =
false;
1360 if( ! isSeed )
continue;
1364 v_seeds_eta.push_back(recRoI->
eta());
1365 v_seeds_phi.push_back(
roiPhi);
1366 v_seeds_type.push_back(0);
1368 ATH_MSG_DEBUG(
"Nr of L1_J" << L1JET_ET_CUT <<
" seeds = " << v_seeds_eta.size());
1371 std::vector<float> v_spseeds_eta;
1372 std::vector<float> v_spseeds_phi;
1373 ATH_CHECK(
findSPSeeds(ctx, v_sp_eta, v_sp_phi, v_sp_layer, v_sp_usedTrkId, v_spseeds_eta, v_spseeds_phi) );
1375 for(
size_t idx=0;
idx<v_spseeds_eta.size(); ++
idx) {
1376 v_seeds_eta.push_back(v_spseeds_eta[
idx]);
1377 v_seeds_phi.push_back(v_spseeds_phi[
idx]);
1378 v_seeds_type.push_back(1);
1380 ATH_MSG_DEBUG(
"Nr of SP + L1_J" << L1JET_ET_CUT <<
" seeds = " << v_seeds_eta.size());
1386 const int N_MAX_SEEDS = 200;
1387 int n_seeds =
std::min(N_MAX_SEEDS,(
int)v_seeds_eta.size());
1388 hitDVSeedsContainer.reserve(n_seeds);
1389 for(
auto iSeed=0; iSeed < n_seeds; ++iSeed) {
1391 seed.eta = v_seeds_eta[iSeed];
1392 seed.phi = v_seeds_phi[iSeed];
1393 seed.type = v_seeds_type[iSeed];
1394 hitDVSeedsContainer.push_back(seed);
1398 const float TRKCUT_DELTA_R_TO_SEED = 1.0;
1399 hitDVTrksContainer.reserve(v_dvtrk_pt.size());
1400 for(
unsigned int iTrk=0; iTrk<v_dvtrk_pt.size(); ++iTrk) {
1401 float trk_eta = v_dvtrk_eta[iTrk];
1402 float trk_phi = v_dvtrk_phi[iTrk];
1404 bool isNearSeed =
false;
1405 for (
unsigned int iSeed=0; iSeed<v_seeds_eta.size(); ++iSeed) {
1406 float seed_eta = v_seeds_eta[iSeed];
1407 float seed_phi = v_seeds_phi[iSeed];
1408 float dR2 =
deltaR2(trk_eta,trk_phi,seed_eta,seed_phi);
1409 if( dR2 <= TRKCUT_DELTA_R_TO_SEED*TRKCUT_DELTA_R_TO_SEED ) { isNearSeed =
true;
break; }
1411 if( ! isNearSeed )
continue;
1414 hitDVTrk.
id = v_dvtrk_id[iTrk];
1415 hitDVTrk.
pt = v_dvtrk_pt[iTrk];
1416 hitDVTrk.
eta = v_dvtrk_eta[iTrk];
1417 hitDVTrk.
phi = v_dvtrk_phi[iTrk];
1419 hitDVTrk.
n_hits_pix = v_dvtrk_n_hits_pix[iTrk];
1420 hitDVTrk.
n_hits_sct = v_dvtrk_n_hits_sct[iTrk];
1421 hitDVTrk.
a0beam = v_dvtrk_a0beam[iTrk];
1423 hitDVTrksContainer.push_back(hitDVTrk);
1427 const float SPCUT_DELTA_R_TO_SEED = 1.0;
1428 const size_t n_sp_max = std::min<size_t>(100000, v_sp_eta.size());
1429 size_t n_sp_stored = 0;
1431 hitDVSPsContainer.reserve(n_sp_max);
1433 for(
size_t iSp=0; iSp<v_sp_eta.size(); ++iSp) {
1435 const float sp_eta = v_sp_eta[iSp];
1436 const float sp_phi = v_sp_phi[iSp];
1437 bool isNearSeed =
false;
1438 for (
size_t iSeed=0; iSeed<v_seeds_eta.size(); ++iSeed) {
1439 const float seed_eta = v_seeds_eta[iSeed];
1440 const float seed_phi = v_seeds_phi[iSeed];
1441 const float dR2 =
deltaR2(sp_eta, sp_phi, seed_eta, seed_phi);
1442 if( dR2 <= SPCUT_DELTA_R_TO_SEED*SPCUT_DELTA_R_TO_SEED ) { isNearSeed =
true;
break; }
1444 if( ! isNearSeed )
continue;
1446 if( n_sp_stored >= n_sp_max )
break;
1448 hitDVSP.
eta = v_sp_eta[iSp];
1449 hitDVSP.
r = v_sp_r[iSp];
1450 hitDVSP.
phi = v_sp_phi[iSp];
1451 hitDVSP.
layer = v_sp_layer[iSp];
1452 hitDVSP.
isPix = v_sp_isPix[iSp];
1453 hitDVSP.
isSct = v_sp_isSct[iSp];
1454 hitDVSP.
usedTrkId = v_sp_usedTrkId[iSp];
1455 hitDVSPsContainer.push_back(hitDVSP);
1460 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 708 of file TrigHitDVHypoAlg.cxx.
711 std::vector<float> mnt_jet_pt;
712 std::vector<float> mnt_jet_eta;
717 ATH_MSG_VERBOSE(
"looking for jet seed with pt cut=" << cutJetPt <<
", eta cut=" << cutJetEta);
720 if( jet_pt < cutJetPt ) {
724 mnt_jet_pt.push_back(jet_pt);
725 float jet_eta =
static_cast<float>(
jet->eta());
726 mnt_jet_eta.push_back(jet_eta);
727 if( std::fabs(jet_eta) > cutJetEta ) {
731 float jet_phi =
static_cast<float>(
jet->phi());
732 jetSeeds_pt.push_back(jet_pt);
733 jetSeeds_eta.push_back(jet_eta);
734 jetSeeds_phi.push_back(
jet_phi);
738 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 744 of file TrigHitDVHypoAlg.cxx.
750 const int NBINS_ETA = 50;
751 const float ETA_MIN = -2.5;
754 const int NBINS_PHI = 80;
755 const float PHI_MIN = -4.0;
756 const float PHI_MAX = 4.0;
760 unsigned int slotnr = ctx.slot();
761 unsigned int subSlotnr = ctx.subSlot();
763 sprintf(
hname,
"hitdv_s%u_ss%u_ly6_h2_nsp",slotnr,subSlotnr);
764 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);
765 sprintf(
hname,
"hitdv_s%u_ss%u_ly7_h2_nsp",slotnr,subSlotnr);
766 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);
768 sprintf(
hname,
"hitdv_s%u_ss%u_ly6_h2_nsp_notrk",slotnr,subSlotnr);
769 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);
770 sprintf(
hname,
"hitdv_s%u_ss%u_ly7_h2_nsp_notrk",slotnr,subSlotnr);
771 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);
773 for (
const auto& spData : spsContainer ) {
774 int16_t sp_layer = spData.layer;
775 float sp_eta = spData.eta;
777 if( ilayer<6 )
continue;
779 int sp_trkid = (
int)spData.usedTrkId;
780 bool isUsedByTrk = (sp_trkid != -1);
781 float sp_phi = spData.phi;
783 bool fill_out_of_pi =
false;
786 sp_phi2 = 2*TMath::Pi() + sp_phi;
787 if( sp_phi2 < PHI_MAX ) fill_out_of_pi =
true;
790 sp_phi2 = -2*TMath::Pi() + sp_phi;
791 if( PHI_MIN < sp_phi2 ) fill_out_of_pi =
true;
794 ly6_h2_nsp->Fill(sp_eta,sp_phi);
795 if( fill_out_of_pi ) ly6_h2_nsp->Fill(sp_eta,sp_phi2);
796 if( ! isUsedByTrk ) ly6_h2_nsp_notrk->Fill(sp_eta,sp_phi);
797 if( ! isUsedByTrk && fill_out_of_pi) ly6_h2_nsp_notrk->Fill(sp_eta,sp_phi2);
800 ly7_h2_nsp->Fill(sp_eta,sp_phi);
801 if( fill_out_of_pi ) ly7_h2_nsp->Fill(sp_eta,sp_phi2);
802 if( ! isUsedByTrk ) ly7_h2_nsp_notrk->Fill(sp_eta,sp_phi);
803 if( ! isUsedByTrk && fill_out_of_pi) ly7_h2_nsp_notrk->Fill(sp_eta,sp_phi2);
810 std::vector<std::tuple<int,float,float,float>> QT;
812 for(
int ly6_ieta=1; ly6_ieta<=NBINS_ETA; ly6_ieta++) {
813 float ly6_eta = (ly6_h2_nsp->GetXaxis()->GetBinLowEdge(ly6_ieta) + ly6_h2_nsp->GetXaxis()->GetBinUpEdge(ly6_ieta))/2.0;
814 for(
int ly6_iphi=1; ly6_iphi<=NBINS_PHI; ly6_iphi++) {
815 float ly6_phi = (ly6_h2_nsp->GetYaxis()->GetBinLowEdge(ly6_iphi) + ly6_h2_nsp->GetYaxis()->GetBinUpEdge(ly6_iphi))/2.0;
817 float ly6_nsp = ly6_h2_nsp ->
GetBinContent(ly6_ieta,ly6_iphi);
818 float ly6_nsp_notrk = ly6_h2_nsp_notrk->
GetBinContent(ly6_ieta,ly6_iphi);
819 float ly6_frac = ( ly6_nsp > 0 ) ? ly6_nsp_notrk / ly6_nsp : 0;
820 if( ly6_nsp < 10 || ly6_frac < 0.85 )
continue;
822 float ly7_frac_max = 0;
823 float ly7_eta_max = 0;
824 float ly7_phi_max = 0;
825 for(
int ly7_ieta=
std::max(1,ly6_ieta-1); ly7_ieta<
std::min(NBINS_ETA,ly6_ieta+1); ly7_ieta++) {
826 for(
int ly7_iphi=
std::max(1,ly6_iphi-1); ly7_iphi<=
std::min(NBINS_PHI,ly6_iphi+1); ly7_iphi++) {
827 float ly7_nsp = ly7_h2_nsp ->
GetBinContent(ly7_ieta,ly7_iphi);
828 float ly7_nsp_notrk = ly7_h2_nsp_notrk->
GetBinContent(ly7_ieta,ly7_iphi);
829 float ly7_frac = ( ly7_nsp > 0 ) ? ly7_nsp_notrk / ly7_nsp : 0;
830 if( ly7_nsp < 10 )
continue;
831 if( ly7_frac > ly7_frac_max ) {
832 ly7_frac_max = ly7_frac;
833 ly7_eta_max = (ly7_h2_nsp->GetXaxis()->GetBinLowEdge(ly7_ieta) + ly7_h2_nsp->GetXaxis()->GetBinUpEdge(ly7_ieta))/2.0;
834 ly7_phi_max = (ly7_h2_nsp->GetXaxis()->GetBinLowEdge(ly7_iphi) + ly7_h2_nsp->GetXaxis()->GetBinUpEdge(ly7_iphi))/2.0;
838 if( ly7_frac_max < 0.85 )
continue;
840 float wsum = ly6_frac + ly7_frac_max;
841 float weta = (ly6_eta*ly6_frac + ly7_eta_max*ly7_frac_max) / wsum;
842 float wphi = (ly6_phi*ly6_frac + ly7_phi_max*ly7_frac_max) / wsum;
843 float w = wsum / 2.0;
844 QT.push_back(std::make_tuple(-1,
w,weta,wphi));
847 ATH_MSG_VERBOSE(
"nr of ly6/ly7 doublet candidate seeds=" << QT.size() <<
", doing clustering...");
851 [](
const std::tuple<int,float,float,float>& lhs,
const std::tuple<int,float,float,float>& rhs) {
852 return std::get<1>(lhs) > std::get<1>(rhs); } );
855 const double CLUSTCUT_DIST_SQUARED = 0.04;
856 const double CLUSTCUT_SEED_FRAC = 0.9;
858 std::vector<float> seeds_wsum;
860 for(
unsigned int i=0;
i<QT.size();
i++) {
861 float phi = std::get<3>(QT[
i]);
862 float eta = std::get<2>(QT[
i]);
863 float w = std::get<1>(QT[
i]);
865 seeds_eta.push_back(
w*
eta); seeds_phi.push_back(
w*
phi);
866 seeds_wsum.push_back(
w);
869 const int IDX_INITIAL = 100;
870 float dist2_min = 100.0;
872 for(
unsigned j=0; j<seeds_eta.size(); j++) {
873 float ceta = seeds_eta[j]/seeds_wsum[j];
874 float cphi = seeds_phi[j]/seeds_wsum[j];
876 float deta = std::fabs(ceta-
eta);
877 float dphi = std::fabs(cphi-
phi);
878 float dist2 = dphi*dphi+deta*deta;
879 if( dist2 < dist2_min ) {
884 int match_idx = IDX_INITIAL;
886 if( dist2_min < CLUSTCUT_DIST_SQUARED ) { match_idx =
idx_min; }
888 if( match_idx == IDX_INITIAL ) {
889 if(
w > CLUSTCUT_SEED_FRAC && dist2_min > CLUSTCUT_DIST_SQUARED ) {
890 seeds_eta.push_back(
w*
eta); seeds_phi.push_back(
w*
phi);
891 seeds_wsum.push_back(
w);
895 float new_eta = seeds_eta[match_idx] +
w*
eta;
896 float new_phi = seeds_phi[match_idx] +
w*
phi;
897 float new_wsum = seeds_wsum[match_idx] +
w;
898 seeds_eta[match_idx] = new_eta;
899 seeds_phi[match_idx] = new_phi;
900 seeds_wsum[match_idx] = new_wsum;
903 for(
unsigned int i=0;
i<seeds_eta.size();
i++) {
904 float eta = seeds_eta[
i] / seeds_wsum[
i];
905 float phi = seeds_phi[
i] / seeds_wsum[
i];
908 if(
phi < -TMath::Pi() )
phi = 2*TMath::Pi() +
phi;
909 if(
phi > TMath::Pi() )
phi = -2*TMath::Pi() +
phi;
912 ATH_MSG_VERBOSE(
"after clustering, nr of seeds = " << seeds_eta.size());
915 std::vector<unsigned int> idx_to_delete;
916 for(
unsigned int i=0;
i<seeds_eta.size();
i++) {
917 if(
std::find(idx_to_delete.begin(),idx_to_delete.end(),
i) != idx_to_delete.end() )
continue;
918 float eta_i = seeds_eta[
i];
919 float phi_i = seeds_phi[
i];
920 for(
unsigned int j=
i+1; j<seeds_eta.size(); j++) {
921 if(
std::find(idx_to_delete.begin(),idx_to_delete.end(),j) != idx_to_delete.end() )
continue;
922 float eta_j = seeds_eta[j];
923 float phi_j = seeds_phi[j];
924 float dR2 =
deltaR2(eta_i,phi_i,eta_j,phi_j);
925 if( dR2 < CLUSTCUT_DIST_SQUARED ) idx_to_delete.push_back(j);
928 ATH_MSG_VERBOSE(
"nr of duplicated seeds to be removed = " << idx_to_delete.size());
929 if( idx_to_delete.size() > 0 ) {
930 std::sort(idx_to_delete.begin(),idx_to_delete.end());
931 for(
unsigned int j=idx_to_delete.size(); j>0; j--) {
932 unsigned int idx = idx_to_delete[j-1];
933 seeds_eta.erase(seeds_eta.begin()+
idx);
934 seeds_phi.erase(seeds_phi.begin()+
idx);
941 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 977 of file TrigHitDVHypoAlg.cxx.
982 const int NBINS_ETA = 50;
983 const float ETA_MIN = -2.5;
986 const int NBINS_PHI = 80;
987 const float PHI_MIN = -4.0;
988 const float PHI_MAX = 4.0;
992 unsigned int slotnr = ctx.slot();
993 unsigned int subSlotnr = ctx.subSlot();
995 sprintf(
hname,
"ftf_s%u_ss%u_ly6_h2_nsp",slotnr,subSlotnr);
996 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);
997 sprintf(
hname,
"ftf_s%u_ss%u_ly7_h2_nsp",slotnr,subSlotnr);
998 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);
1000 sprintf(
hname,
"ftf_s%u_ss%u_ly6_h2_nsp_notrk",slotnr,subSlotnr);
1001 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);
1002 sprintf(
hname,
"ftf_s%u_ss%u_ly7_h2_nsp_notrk",slotnr,subSlotnr);
1003 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);
1005 for(
unsigned int iSeed=0; iSeed<v_sp_eta.size(); ++iSeed) {
1007 int sp_layer = v_sp_layer[iSeed];
1008 float sp_eta = v_sp_eta[iSeed];
1010 if( ilayer<6 )
continue;
1012 int sp_trkid = v_sp_usedTrkId[iSeed];
1013 bool isUsedByTrk = (sp_trkid != -1);
1014 float sp_phi = v_sp_phi[iSeed];
1016 bool fill_out_of_pi =
false;
1019 sp_phi2 = 2*TMath::Pi() + sp_phi;
1020 if( sp_phi2 < PHI_MAX ) fill_out_of_pi =
true;
1023 sp_phi2 = -2*TMath::Pi() + sp_phi;
1024 if( PHI_MIN < sp_phi2 ) fill_out_of_pi =
true;
1027 ly6_h2_nsp->Fill(sp_eta,sp_phi);
1028 if( fill_out_of_pi ) ly6_h2_nsp->Fill(sp_eta,sp_phi2);
1029 if( ! isUsedByTrk ) ly6_h2_nsp_notrk->Fill(sp_eta,sp_phi);
1030 if( ! isUsedByTrk && fill_out_of_pi) ly6_h2_nsp_notrk->Fill(sp_eta,sp_phi2);
1033 ly7_h2_nsp->Fill(sp_eta,sp_phi);
1034 if( fill_out_of_pi ) ly7_h2_nsp->Fill(sp_eta,sp_phi2);
1035 if( ! isUsedByTrk ) ly7_h2_nsp_notrk->Fill(sp_eta,sp_phi);
1036 if( ! isUsedByTrk && fill_out_of_pi) ly7_h2_nsp_notrk->Fill(sp_eta,sp_phi2);
1043 std::vector<std::tuple<int,float,float,float>> QT;
1045 for(
int ly6_ieta=1; ly6_ieta<=NBINS_ETA; ly6_ieta++) {
1046 float ly6_eta = (ly6_h2_nsp->GetXaxis()->GetBinLowEdge(ly6_ieta) + ly6_h2_nsp->GetXaxis()->GetBinUpEdge(ly6_ieta))/2.0;
1047 for(
int ly6_iphi=1; ly6_iphi<=NBINS_PHI; ly6_iphi++) {
1048 float ly6_phi = (ly6_h2_nsp->GetYaxis()->GetBinLowEdge(ly6_iphi) + ly6_h2_nsp->GetYaxis()->GetBinUpEdge(ly6_iphi))/2.0;
1050 float ly6_nsp = ly6_h2_nsp ->
GetBinContent(ly6_ieta,ly6_iphi);
1051 float ly6_nsp_notrk = ly6_h2_nsp_notrk->
GetBinContent(ly6_ieta,ly6_iphi);
1052 float ly6_frac = ( ly6_nsp > 0 ) ? ly6_nsp_notrk / ly6_nsp : 0;
1053 if( ly6_nsp < 10 || ly6_frac < 0.85 )
continue;
1055 float ly7_frac_max = 0;
1056 float ly7_eta_max = 0;
1057 float ly7_phi_max = 0;
1058 for(
int ly7_ieta=
std::max(1,ly6_ieta-1); ly7_ieta<
std::min(NBINS_ETA,ly6_ieta+1); ly7_ieta++) {
1059 for(
int ly7_iphi=
std::max(1,ly6_iphi-1); ly7_iphi<=
std::min(NBINS_PHI,ly6_iphi+1); ly7_iphi++) {
1060 float ly7_nsp = ly7_h2_nsp ->
GetBinContent(ly7_ieta,ly7_iphi);
1061 float ly7_nsp_notrk = ly7_h2_nsp_notrk->
GetBinContent(ly7_ieta,ly7_iphi);
1062 float ly7_frac = ( ly7_nsp > 0 ) ? ly7_nsp_notrk / ly7_nsp : 0;
1063 if( ly7_nsp < 10 )
continue;
1064 if( ly7_frac > ly7_frac_max ) {
1065 ly7_frac_max = ly7_frac;
1066 ly7_eta_max = (ly7_h2_nsp->GetXaxis()->GetBinLowEdge(ly7_ieta) + ly7_h2_nsp->GetXaxis()->GetBinUpEdge(ly7_ieta))/2.0;
1067 ly7_phi_max = (ly7_h2_nsp->GetXaxis()->GetBinLowEdge(ly7_iphi) + ly7_h2_nsp->GetXaxis()->GetBinUpEdge(ly7_iphi))/2.0;
1071 if( ly7_frac_max < 0.85 )
continue;
1073 float wsum = ly6_frac + ly7_frac_max;
1074 float weta = (ly6_eta*ly6_frac + ly7_eta_max*ly7_frac_max) / wsum;
1075 float wphi = (ly6_phi*ly6_frac + ly7_phi_max*ly7_frac_max) / wsum;
1076 float w = wsum / 2.0;
1077 QT.push_back(std::make_tuple(-1,
w,weta,wphi));
1080 ATH_MSG_VERBOSE(
"nr of ly6/ly7 doublet candidate seeds=" << QT.size() <<
", doing clustering...");
1084 [](
const std::tuple<int,float,float,float>& lhs,
const std::tuple<int,float,float,float>& rhs) {
1085 return std::get<1>(lhs) > std::get<1>(rhs); } );
1088 const double CLUSTCUT_DIST_SQUARED = 0.04;
1089 const double CLUSTCUT_SEED_FRAC = 0.9;
1091 std::vector<float> seeds_wsum;
1093 for(
unsigned int i=0;
i<QT.size();
i++) {
1094 float phi = std::get<3>(QT[
i]);
1095 float eta = std::get<2>(QT[
i]);
1096 float w = std::get<1>(QT[
i]);
1098 seeds_eta.push_back(
w*
eta); seeds_phi.push_back(
w*
phi);
1099 seeds_wsum.push_back(
w);
1102 const int IDX_INITIAL = 100;
1103 float dist2_min = 100.0;
1105 for(
unsigned j=0; j<seeds_eta.size(); j++) {
1106 float ceta = seeds_eta[j]/seeds_wsum[j];
1107 float cphi = seeds_phi[j]/seeds_wsum[j];
1109 float deta = std::fabs(ceta-
eta);
1110 float dphi = std::fabs(cphi-
phi);
1111 float dist2 = dphi*dphi+deta*deta;
1112 if( dist2 < dist2_min ) {
1117 int match_idx = IDX_INITIAL;
1118 if(
idx_min != IDX_INITIAL ) {
1119 if( dist2_min < CLUSTCUT_DIST_SQUARED ) { match_idx =
idx_min; }
1121 if( match_idx == IDX_INITIAL ) {
1122 if(
w > CLUSTCUT_SEED_FRAC && dist2_min > CLUSTCUT_DIST_SQUARED ) {
1123 seeds_eta.push_back(
w*
eta); seeds_phi.push_back(
w*
phi);
1124 seeds_wsum.push_back(
w);
1128 float new_eta = seeds_eta[match_idx] +
w*
eta;
1129 float new_phi = seeds_phi[match_idx] +
w*
phi;
1130 float new_wsum = seeds_wsum[match_idx] +
w;
1131 seeds_eta[match_idx] = new_eta;
1132 seeds_phi[match_idx] = new_phi;
1133 seeds_wsum[match_idx] = new_wsum;
1136 for(
unsigned int i=0;
i<seeds_eta.size();
i++) {
1137 float eta = seeds_eta[
i] / seeds_wsum[
i];
1138 float phi = seeds_phi[
i] / seeds_wsum[
i];
1141 if(
phi < -TMath::Pi() )
phi = 2*TMath::Pi() +
phi;
1142 if(
phi > TMath::Pi() )
phi = -2*TMath::Pi() +
phi;
1145 ATH_MSG_VERBOSE(
"after clustering, nr of seeds = " << seeds_eta.size());
1148 std::vector<unsigned int> idx_to_delete;
1149 for(
unsigned int i=0;
i<seeds_eta.size();
i++) {
1150 if(
std::find(idx_to_delete.begin(),idx_to_delete.end(),
i) != idx_to_delete.end() )
continue;
1151 float eta_i = seeds_eta[
i];
1152 float phi_i = seeds_phi[
i];
1153 for(
unsigned int j=
i+1; j<seeds_eta.size(); j++) {
1154 if(
std::find(idx_to_delete.begin(),idx_to_delete.end(),j) != idx_to_delete.end() )
continue;
1155 float eta_j = seeds_eta[j];
1156 float phi_j = seeds_phi[j];
1157 float dR2 =
deltaR2(eta_i,phi_i,eta_j,phi_j);
1158 if( dR2 < CLUSTCUT_DIST_SQUARED ) idx_to_delete.push_back(j);
1161 ATH_MSG_VERBOSE(
"nr of duplicated seeds to be removed = " << idx_to_delete.size());
1162 if( idx_to_delete.size() > 0 ) {
1163 std::sort(idx_to_delete.begin(),idx_to_delete.end());
1164 for(
unsigned int j=idx_to_delete.size(); j>0; j--) {
1165 unsigned int idx = idx_to_delete[j-1];
1166 seeds_eta.erase(seeds_eta.begin()+
idx);
1167 seeds_phi.erase(seeds_phi.begin()+
idx);
1174 return StatusCode::SUCCESS;
◆ getSPLayer()
int TrigHitDVHypoAlg::getSPLayer |
( |
int |
layer, |
|
|
float |
eta |
|
) |
| const |
|
private |
Definition at line 341 of file TrigHitDVHypoAlg.cxx.
343 float abseta = std::fabs(
eta);
356 const float PixBR6limit = 1.29612;
357 const float PixBR5limit = 1.45204;
358 const float PixBR4limit = 1.64909;
359 const float PixBR3limit = 1.90036;
360 const float PixBR2limit = 2.2146;
366 if( abseta > PixBR2limit )
return 2;
374 if( abseta > PixBR2limit )
return 2;
389 if( abseta < PixBR6limit )
return 7;
390 else if( abseta < PixBR5limit )
return 6;
398 if( abseta < PixBR5limit )
return 7;
399 else if( abseta < PixBR4limit )
return 6;
407 if( abseta < PixBR4limit )
return 7;
415 if( abseta < PixBR4limit )
return 6;
416 else if( abseta < PixBR3limit )
return 6;
424 if( abseta < PixBR3limit )
return 7;
432 if( abseta < PixBR3limit )
return 6;
440 if( abseta < PixBR3limit )
return 7;
448 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 51 of file TrigHitDVHypoAlg.cxx.
60 std::string sth =
results[1].str();
61 std::string swp =
results[2].str();
63 int thres = std::stoi(sth);
88 for (
auto&
reader : m_tmva_reader) {
90 auto tmva =
std::array{std::make_unique<TMVA::Reader>(
"!Color:!Silent" ),
91 std::make_unique<TMVA::Reader>(
"!Color:!Silent" )};
92 for (
auto&
t : tmva) {
93 t->AddVariable(
"n_track_qual", &
reader.n_track_qual);
94 t->AddVariable(
"ly0_sp_frac", &
reader.ly0_sp_frac);
95 t->AddVariable(
"ly1_sp_frac", &
reader.ly1_sp_frac);
96 t->AddVariable(
"ly2_sp_frac", &
reader.ly2_sp_frac);
97 t->AddVariable(
"ly3_sp_frac", &
reader.ly3_sp_frac);
98 t->AddVariable(
"ly4_sp_frac", &
reader.ly4_sp_frac);
99 t->AddVariable(
"ly5_sp_frac", &
reader.ly5_sp_frac);
100 t->AddVariable(
"ly6_sp_frac", &
reader.ly6_sp_frac);
101 t->AddVariable(
"ly7_sp_frac", &
reader.ly7_sp_frac);
103 reader.tmva_0eta1 = std::move(tmva[0]);
104 reader.tmva_1eta2 = std::move(tmva[1]);
107 const std::string tuningVer =
"v22a";
108 const std::string methodName =
"BDT method";
111 "TrigHitDVHypo/HitDV.BDT.weights.0eta1." + tuningVer +
".xml");
113 "TrigHitDVHypo/HitDV.BDT.weights.1eta2." + tuningVer +
".xml");
116 reader.tmva_0eta1->BookMVA(methodName, weightfile_0eta1);
117 reader.tmva_1eta2->BookMVA(methodName, weightfile_1eta2);
120 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, 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 947 of file TrigHitDVHypoAlg.cxx.
950 std::vector<unsigned int> idx_to_delete;
951 for(
unsigned int idx=0;
idx<jetSeeds_eta.size(); ++
idx) {
952 const float DR_SQUARED_CUT_TO_FTFSEED = 0.09;
953 float eta = jetSeeds_eta[
idx];
954 float phi = jetSeeds_phi[
idx];
956 for (
const auto& seed : hitDVSeedsContainer ) {
958 if( dR2 < dR2min ) dR2min = dR2;
960 if( dR2min > DR_SQUARED_CUT_TO_FTFSEED ) idx_to_delete.push_back(
idx);
962 if( idx_to_delete.size() > 0 ) {
963 std::sort(idx_to_delete.begin(),idx_to_delete.end());
964 for(
unsigned int j=idx_to_delete.size(); j>0; j--) {
965 unsigned int idx = idx_to_delete[j-1];
966 jetSeeds_eta.erase(jetSeeds_eta.begin()+
idx);
967 jetSeeds_phi.erase(jetSeeds_phi.begin()+
idx);
968 if( jetSeeds_pt.size() > 0 ) jetSeeds_pt.erase(jetSeeds_pt.begin()+
idx);
971 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_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_recJetRoiCollectionKey
◆ 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
unsigned int triggerThreshold(unsigned int thresh) const
returns the value of the trigger threshold for the threshold passed.
static std::string find_calib_file(const std::string &logical_file_name)
Group
Properties of a chain group.
constexpr float roiPhi(const AnyRoIPointer &roi)
This class defines the reconstructed em/tau hadron ROI.
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].
std::vector< unsigned int > thresholdsPassed() const
returns a vector of thresholds passed.
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)
const std::string & key() const
Return the StoreGate ID for the referenced object.
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...
SG::ReadHandleKey< DataVector< LVL1::RecJetRoI > > m_recJetRoiCollectionKey
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)
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.
StatusCode doMonitor(const xAOD::TrigCompositeContainer *) const
SG::ReadCondHandleKey< InDet::BeamSpotData > m_beamSpotKey
double GetBinContent(int) const
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.
virtual double eta() const
returns eta coord of ROI
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
virtual double phi() const
returns phi coord of ROI