ATLAS Offline Software
Loading...
Searching...
No Matches
FastTrackFinderLRTHypoAlg.cxx
Go to the documentation of this file.
1/*
2Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
3*/
4
9
22
23FastTrackFinderLRTHypoAlg::FastTrackFinderLRTHypoAlg(const std::string& name, ISvcLocator* pSvcLocator) :
24::HypoBase(name, pSvcLocator)
25{
26}
27
29{
30 ATH_CHECK(m_tracksKey.initialize());
31 ATH_CHECK(m_trackCountKey.initialize());
33 ATH_CHECK(m_min_pt.size()==m_min_d0.size());
34
35 if (m_tracksKey.key() == "Undefined" || m_trackCountKey.key() == "Undefined") {
36 ATH_MSG_ERROR("either track Key name or track count key name is undefined " );
37 return StatusCode::FAILURE;
38 }
39
40 ATH_CHECK(m_hypoTools.retrieve());
41 if (!m_monTool.empty()) ATH_CHECK(m_monTool.retrieve());
42
43 return StatusCode::SUCCESS;
44}
45
46StatusCode FastTrackFinderLRTHypoAlg::execute(const EventContext& context) const
47{
48 ATH_MSG_DEBUG ( "Executing " << name() << "..." );
49 auto previousDecisionsHandle = SG::makeHandle( decisionInput(), context );
50
51 if( not previousDecisionsHandle.isValid() ) {//implicit
52 ATH_MSG_DEBUG( "No implicit RH for previous decisions "<< decisionInput().key()<<": is this expected?" );
53 return StatusCode::SUCCESS;
54 }
55
56 if (previousDecisionsHandle->size() == 0) {
57 ATH_MSG_DEBUG( "No previous decision, nothing to do.");
58 return StatusCode::SUCCESS;
59 } else if (previousDecisionsHandle->size() > 1) {
60 ATH_MSG_ERROR("Found " << previousDecisionsHandle->size() <<" previous decisions.");
61 return StatusCode::FAILURE;
62 }
63
64 ATH_MSG_DEBUG( "Running with "<< previousDecisionsHandle->size() <<" implicit ReadHandles for previous decisions. Looking for :"<<viewString());
65
66 std::vector<int> counts(m_min_pt.size());
67
68
69 //taken from isohightpt
70
71 ATH_MSG_DEBUG( "Getting Track Handle "<<m_tracksKey);
72 // get tracks from the key :
73 auto trackHandle = SG::makeHandle(m_tracksKey, context );
74
75 ATH_CHECK( trackHandle.isValid() );
76 ATH_MSG_DEBUG ( "track handle size: " << trackHandle->size() << "..." );
77
78 int ntrks = trackHandle->size();
79
80 const xAOD::TrackParticleContainer * AllTracks = trackHandle.get(); //Later this could be updated to run with tracks above a certain threshold
81
82 // Loop over all tracks and get a track decision associated with it and create the input
83 for ( const xAOD::TrackParticle_v1* track : *AllTracks) {
84 const double pT = track->pt();
85 const float d0 = track->d0();
86 const double xi2 = 0.0; //fq.chiSquared();
87 const float abs_d0 = std::fabs(d0);
88 for (long unsigned int i=0;i<m_min_pt.size();i++){
89 if(pT >= m_min_pt[i] && abs_d0 < m_max_d0[i] && abs_d0 >= m_min_d0[i] && std::fabs(xi2) < m_max_xi2[i]) counts[i]++;
90 }
91 }
92
93 //end taken section
94
95 // Recording Data
96 auto trackCountContainer = std::make_unique< xAOD::TrigCompositeContainer>();
97 auto trackCountContainerAux = std::make_unique< xAOD::TrigCompositeAuxContainer>();
98 trackCountContainer->setStore(trackCountContainerAux.get());
99
100 xAOD::TrigComposite * trackCount = new xAOD::TrigComposite();
101 trackCountContainer->push_back(trackCount);
102 trackCount->setDetail("ntrks", ntrks);
103 trackCount->setDetail("pTcuts", static_cast<std::vector<float>>(m_min_pt));
104 trackCount->setDetail("d0mincuts", static_cast<std::vector<float>>(m_min_d0));
105 trackCount->setDetail("d0maxcuts", static_cast<std::vector<float>>(m_max_d0));
106 trackCount->setDetail("xi2cuts", static_cast<std::vector<float>>(m_max_xi2));
107 trackCount->setDetail("counts", counts);
108
109 // TODO revisit
110
111 auto mon_ntrks = Monitored::Scalar<int>("ntrks",ntrks);
112 Monitored::Group(m_monTool,mon_ntrks);
113 for(long unsigned int i=0;i<counts.size();i++){
114 auto mon_counts = Monitored::Scalar<int>("counts"+std::to_string(i),counts[i]);
115 Monitored::Group(m_monTool,mon_counts);
116 }
117
119 auto decisions = outputHandle.ptr();
120
121 TrigCompositeUtils::Decision* d = newDecisionIn(decisions, previousDecisionsHandle->at(0), hypoAlgNodeName(), context);
122
124 TrigCompositeUtils::decisionIDs( previousDecisionsHandle->at(0), prev );
125
126 FastTrackFinderLRTHypoTool::TrkCountsInfo trkinfo{d, trackCount, prev};
127
128 for(auto &tool:m_hypoTools)
129 {
130 ATH_CHECK(tool->decide(trkinfo));
131 }
132
134 ATH_CHECK(trackCountHandle.record( std::move( trackCountContainer ), std::move( trackCountContainerAux ) ) );
136 ATH_CHECK( hypoBaseOutputProcessing(outputHandle) );
137 return StatusCode::SUCCESS;
138}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_ERROR(x)
#define ATH_MSG_DEBUG(x)
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.
SG::WriteHandle< DecisionContainer > createAndStore(const SG::WriteHandleKey< DecisionContainer > &key, const EventContext &ctx)
Creates and right away records the DecisionContainer with the key.
const std::string & hypoAlgNodeName()
const std::string & featureString()
const std::string & viewString()
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)
Gaudi::Property< std::vector< float > > m_max_xi2
virtual StatusCode initialize() override
Gaudi::Property< std::vector< float > > m_max_d0
Gaudi::Property< std::vector< float > > m_min_d0
ToolHandleArray< FastTrackFinderLRTHypoTool > m_hypoTools
virtual StatusCode execute(const EventContext &context) const override
Gaudi::Property< std::vector< float > > m_min_pt
SG::ReadHandleKey< xAOD::TrackParticleContainer > m_tracksKey
SG::WriteHandleKey< xAOD::TrigCompositeContainer > m_trackCountKey
ToolHandle< GenericMonitoringTool > m_monTool
const SG::ReadHandleKey< TrigCompositeUtils::DecisionContainer > & decisionInput() const
methods for derived classes to access handles of the base class input other read/write handles may be...
Definition HypoBase.cxx:18
const SG::WriteHandleKey< TrigCompositeUtils::DecisionContainer > & decisionOutput() const
methods for derived classes to access handles of the base class output other read/write handles may b...
Definition HypoBase.cxx:22
StatusCode hypoBaseOutputProcessing(SG::WriteHandle< TrigCompositeUtils::DecisionContainer > &outputHandle, MSG::Level lvl=MSG::DEBUG) const
Base class function to be called once slice specific code has finished. Handles debug printing and va...
Definition HypoBase.cxx:35
HypoBase(const std::string &name, ISvcLocator *pSvcLocator)
constructor, to be called by sub-class constructors
Definition HypoBase.cxx:12
Group of local monitoring quantities and retain correlation when filling histograms
Declare a monitored scalar variable.
StatusCode record(std::unique_ptr< T > data)
Record a const object to the store.
pointer_type ptr()
Dereference the pointer.
Class describing a TrackParticle.
bool setDetail(const std::string &name, const TYPE &value)
Set an TYPE detail on the object.
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())
const std::string & viewString()
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.
const std::string & featureString()
xAOD::TrigCompositeAuxContainer DecisionAuxContainer
std::set< DecisionID > DecisionIDContainer
SG::WriteHandle< DecisionContainer > createAndStore(const SG::WriteHandleKey< DecisionContainer > &key, const EventContext &ctx)
Creates and right away records the DecisionContainer with the key.
const std::string & hypoAlgNodeName()
void linkToPrevious(Decision *d, const std::string &previousCollectionKey, size_t previousIndex)
Links to the previous object, location of previous 'seed' decision supplied by hand.
LinkInfo< T > findLink(const Decision *start, const std::string &linkName, const bool suppressMultipleLinksWarning=false)
Perform a recursive search for ElementLinks of type T and name 'linkName', starting from Decision obj...
void decisionIDs(const Decision *d, DecisionIDContainer &destination)
Extracts DecisionIDs stored in the Decision object.
TrigComposite_v1 TrigComposite
Declare the latest version of the class.
TrackParticleContainer_v1 TrackParticleContainer
Definition of the current "TrackParticle container version".
Helper to keep a Decision object, ElementLink and ActiveState (with respect to some requested ChainGr...
Definition LinkInfo.h:22