ATLAS Offline Software
Loading...
Searching...
No Matches
TrigMuonEFHypoTool Class Reference

#include <TrigMuonEFHypoTool.h>

Inheritance diagram for TrigMuonEFHypoTool:
Collaboration diagram for TrigMuonEFHypoTool:

Classes

struct  MuonEFInfo

Public Member Functions

 TrigMuonEFHypoTool (const std::string &type, const std::string &name, const IInterface *parent)
 ~TrigMuonEFHypoTool ()
virtual StatusCode initialize () override
StatusCode decide (std::vector< TrigMuonEFHypoTool::MuonEFInfo > &toolInput) const
float getdphi (float phi1, float phi2) const
ServiceHandle< StoreGateSvc > & evtStore ()
 The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
const ServiceHandle< StoreGateSvc > & detStore () const
 The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
virtual StatusCode sysInitialize () override
 Perform system initialization for an algorithm.
virtual StatusCode sysStart () override
 Handle START transition.
virtual std::vector< Gaudi::DataHandle * > inputHandles () const override
 Return this algorithm's input handles.
virtual std::vector< Gaudi::DataHandle * > outputHandles () const override
 Return this algorithm's output handles.
Gaudi::Details::PropertyBase & declareProperty (Gaudi::Property< T, V, H > &t)
void updateVHKA (Gaudi::Details::PropertyBase &)
MsgStream & msg () const
bool msgLvl (const MSG::Level lvl) const

Protected Member Functions

void renounceArray (SG::VarHandleKeyArray &handlesArray)
 remove all handles from I/O resolution
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce (T &h)
void extraDeps_update_handler (Gaudi::Details::PropertyBase &ExtraDeps)
 Add StoreName to extra input/output deps as needed.

Private Types

enum  { MaxNumberTools = 20 }
typedef ServiceHandle< StoreGateSvcStoreGateSvc_t

Private Member Functions

bool passedQualityCuts (const xAOD::Muon *muon) const
bool decideOnSingleObject (TrigMuonEFHypoTool::MuonEFInfo &input, size_t cutIndex) const
StatusCode inclusiveSelection (std::vector< TrigMuonEFHypoTool::MuonEFInfo > &toolInput) const
StatusCode multiplicitySelection (std::vector< TrigMuonEFHypoTool::MuonEFInfo > &toolInput) const
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey>

Private Attributes

HLT::Identifier m_decisionId
Gaudi::Property< bool > m_nscan
Gaudi::Property< float > m_conesize
Gaudi::Property< bool > m_muonqualityCut
Gaudi::Property< std::vector< std::vector< double > > > m_ptBins
Gaudi::Property< std::vector< std::vector< double > > > m_ptThresholds
Gaudi::Property< bool > m_acceptAll
Gaudi::Property< bool > m_decisionPerRoI
Gaudi::Property< bool > m_threeStationCut
Gaudi::Property< bool > m_doSA
Gaudi::Property< float > m_d0min
Gaudi::Property< bool > m_checkOvlp
Gaudi::Property< bool > m_runCommissioningChain
std::vector< size_t > m_bins ={0}
ToolHandle< GenericMonitoringToolm_monTool { this, "MonTool", "", "Monitoring tool" }
ToolHandle< CP::IMuonSelectionToolm_muonSelTool {this, "MuonSelectionTool", "CP::MuonSelectionTool/MuonSelectionTool", "Tool for muon quality selection"}
xAOD::Muon::TrackParticleType m_type
StoreGateSvc_t m_evtStore
 Pointer to StoreGate (event store by default)
StoreGateSvc_t m_detStore
 Pointer to StoreGate (detector store by default)
std::vector< SG::VarHandleKeyArray * > m_vhka
bool m_varHandleArraysDeclared

Detailed Description

Definition at line 17 of file TrigMuonEFHypoTool.h.

Member Typedef Documentation

◆ StoreGateSvc_t

typedef ServiceHandle<StoreGateSvc> AthCommonDataStore< AthCommonMsg< AlgTool > >::StoreGateSvc_t
privateinherited

Definition at line 388 of file AthCommonDataStore.h.

Member Enumeration Documentation

◆ anonymous enum

anonymous enum
private
Enumerator
MaxNumberTools 

Definition at line 18 of file TrigMuonEFHypoTool.h.

Constructor & Destructor Documentation

◆ TrigMuonEFHypoTool()

TrigMuonEFHypoTool::TrigMuonEFHypoTool ( const std::string & type,
const std::string & name,
const IInterface * parent )

Definition at line 11 of file TrigMuonEFHypoTool.cxx.

11 :
12 AthAlgTool(type, name, parent),
14}
AthAlgTool()
Default constructor:
static HLT::Identifier fromToolName(const std::string &tname)
HLT::Identifier m_decisionId

◆ ~TrigMuonEFHypoTool()

TrigMuonEFHypoTool::~TrigMuonEFHypoTool ( )

Definition at line 15 of file TrigMuonEFHypoTool.cxx.

15 {
16}

Member Function Documentation

◆ decide()

StatusCode TrigMuonEFHypoTool::decide ( std::vector< TrigMuonEFHypoTool::MuonEFInfo > & toolInput) const

Definition at line 184 of file TrigMuonEFHypoTool.cxx.

184 {
185 size_t numTrigger = m_ptBins.size();
186 size_t numMuon=toolInput.size();
187 if(numTrigger==1){
188 ATH_MSG_DEBUG("Applying selection of single << " << m_decisionId);
189 return inclusiveSelection(toolInput);
190 }
191 else{
192 ATH_MSG_DEBUG("Applying selection of multiplicity "<< m_decisionId<<" with nMuons"<<numMuon);
193 return multiplicitySelection(toolInput);
194 }
195 return StatusCode::SUCCESS;
196}
#define ATH_MSG_DEBUG(x)
StatusCode multiplicitySelection(std::vector< TrigMuonEFHypoTool::MuonEFInfo > &toolInput) const
Gaudi::Property< std::vector< std::vector< double > > > m_ptBins
StatusCode inclusiveSelection(std::vector< TrigMuonEFHypoTool::MuonEFInfo > &toolInput) const

◆ decideOnSingleObject()

bool TrigMuonEFHypoTool::decideOnSingleObject ( TrigMuonEFHypoTool::MuonEFInfo & input,
size_t cutIndex ) const
private

Definition at line 62 of file TrigMuonEFHypoTool.cxx.

62 {
63 ATH_MSG_DEBUG( "deciding...");
64 //Monitored Variables
65 std::vector<float> fexPt, fexEta, fexPhi, selPt, selEta, selPhi;
66 auto muonPtMon = Monitored::Collection("Pt", fexPt);
67 auto muonEtaMon = Monitored::Collection("Eta", fexEta);
68 auto muonPhiMon = Monitored::Collection("Phi", fexPhi);
69 auto muonPtSelMon = Monitored::Collection("Pt_sel", selPt);
70 auto muonEtaSelMon = Monitored::Collection("Eta_sel", selEta);
71 auto muonPhiSelMon = Monitored::Collection("Phi_sel", selPhi);
72 auto monitorIt = Monitored::Group(m_monTool, muonPtMon, muonEtaMon, muonPhiMon, muonPtSelMon, muonEtaSelMon, muonPhiSelMon);
73 bool result = false;
74 //for pass through mode
75 if(m_acceptAll) {
76 result = true;
77 ATH_MSG_DEBUG("Accept property is set: taking all the events");
78 return result;
79 }
80 // decision making
81 //Get xAOD::MuonContainer from hypotool
82 const xAOD::Muon* muon = input.muon;
83 if( !muon ){
84 ATH_MSG_DEBUG("Retrieval of xAOD::MuonContainer failed");
85 return false;
86 }
87
88 if (muon->primaryTrackParticle()) { // was there a muon in this RoI ?
89 const xAOD::TrackParticle* tr = muon->trackParticle(m_type);
90 if (!tr) {
91 ATH_MSG_DEBUG("No TrackParticle found.");
92 } else {
93 ATH_MSG_DEBUG("Retrieved Track track with abs pt "<< (*tr).pt()/Gaudi::Units::GeV << " GeV ");
94 //fill monitored variables
95 fexPt.push_back(tr->pt()/Gaudi::Units::GeV);
96 fexEta.push_back(tr->eta());
97 fexPhi.push_back(tr->phi());
98 //Apply hypo cuts
99 float absEta = std::abs(tr->eta());
100 float threshold = 0;
101 for (std::vector<float>::size_type k=0; k<m_bins[cutIndex]; ++k) {
102 if (absEta > m_ptBins[cutIndex][k] && absEta <= m_ptBins[cutIndex][k+1]) threshold = m_ptThresholds[cutIndex][k];
103 }
104 if (std::abs(tr->pt())/Gaudi::Units::GeV > (threshold/Gaudi::Units::GeV)){
105 result = true;
106 // If trigger path name includes "muonqual", check whether the muon passes those criteria
107 if(m_muonqualityCut == true) result = passedQualityCuts(muon);
108 //cut on Nprecision layers (for 3layerEC msonly triggers)
110 uint8_t nGoodPrcLayers=0;
111 if (!muon->summaryValue(nGoodPrcLayers, xAOD::numberOfGoodPrecisionLayers)){
112 ATH_MSG_DEBUG("No numberOfGoodPrecisionLayers variable found; not passing hypo");
113 result=false;
114 }
115 if(std::abs(muon->eta()) > 1.3) {
117 if(nGoodPrcLayers < 2){
118 ATH_MSG_DEBUG("Muon has less than two GoodPrecisionLayers; not passing hypo (requrement loosend according to absence of NSW)");
119 result=false;
120 }
121 } else {
122 if(nGoodPrcLayers < 3){
123 ATH_MSG_DEBUG("Muon has less than three GoodPrecisionLayers; not passing hypo");
124 result=false;
125 }
126 }
127 } else if (std::abs(muon->eta()) > 1.05) {
128 if(nGoodPrcLayers < 3){
129 ATH_MSG_DEBUG("Muon has less than three GoodPrecisionLayers; not passing hypo");
130 result=false;
131 }
132 }
133 }
134 if (m_d0min>0.) {
135 ATH_MSG_DEBUG("Muon has d0 less than "<<m_d0min<<"mm; not passing hypo");
136 if (std::abs(tr->d0())<m_d0min) result = false;
137 }
138 }
139 if(result == true){
140 selPt.push_back(tr->pt()/Gaudi::Units::GeV);
141 selEta.push_back(tr->eta());
142 selPhi.push_back(tr->phi());
143 }
144 if (m_d0min>0.) {
145 ATH_MSG_DEBUG(" REGTEST muon pt is " << tr->pt()/Gaudi::Units::GeV << " GeV "
146 << " with Charge " << tr->charge()
147 << " and threshold cut is " << threshold/Gaudi::Units::GeV << " GeV"
148 << " so hypothesis is " << (result?"true":"false"));
149 } else {
150 ATH_MSG_DEBUG(" REGTEST muon pt is " << tr->pt()/Gaudi::Units::GeV << " GeV "
151 << " with Charge " << tr->charge()
152 << " and with d0 " << tr->d0()
153 << " the threshold cut is " << threshold/Gaudi::Units::GeV << " GeV"
154 << " and d0min cut is " << m_d0min<<" mm"
155 << " so hypothesis is " << (result?"true":"false"));
156 }
157 }
158 }
159 return result;
160}
Gaudi::Property< bool > m_runCommissioningChain
std::vector< size_t > m_bins
bool passedQualityCuts(const xAOD::Muon *muon) const
Gaudi::Property< float > m_d0min
Gaudi::Property< bool > m_acceptAll
Gaudi::Property< bool > m_threeStationCut
Gaudi::Property< std::vector< std::vector< double > > > m_ptThresholds
ToolHandle< GenericMonitoringTool > m_monTool
Gaudi::Property< bool > m_muonqualityCut
xAOD::Muon::TrackParticleType m_type
virtual double phi() const override final
The azimuthal angle ( ) of the particle (has range to .)
float d0() const
Returns the parameter.
virtual double pt() const override final
The transverse momentum ( ) of the particle.
virtual double eta() const override final
The pseudorapidity ( ) of the particle.
float charge() const
Returns the charge.
ValuesCollection< T > Collection(std::string name, const T &collection)
Declare a monitored (double-convertible) collection.
bool absEta(const xAOD::TauJet &tau, float &out)
TrackParticle_v1 TrackParticle
Reference the current persistent version:
Muon_v1 Muon
Reference the current persistent version:
@ numberOfGoodPrecisionLayers
layers with at least 3 hits that are not deweighted [uint8_t]

◆ declareGaudiProperty()

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

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

Definition at line 156 of file AthCommonDataStore.h.

158 {
160 hndl.value(),
161 hndl.documentation());
162
163 }
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)

◆ declareProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty ( Gaudi::Property< T, V, H > & t)
inlineinherited

Definition at line 145 of file AthCommonDataStore.h.

145 {
146 typedef typename SG::HandleClassifier<T>::type htype;
148 }
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>

◆ detStore()

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

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

Definition at line 95 of file AthCommonDataStore.h.

◆ evtStore()

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

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

Definition at line 85 of file AthCommonDataStore.h.

◆ extraDeps_update_handler()

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

Add StoreName to extra input/output deps as needed.

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

◆ getdphi()

float TrigMuonEFHypoTool::getdphi ( float phi1,
float phi2 ) const

Definition at line 304 of file TrigMuonEFHypoTool.cxx.

304 {
305 float dphi = phi1-phi2;
306 if(dphi > TMath::Pi()) dphi -= TMath::TwoPi();
307 if(dphi < -1*TMath::Pi()) dphi += TMath::TwoPi();
308 return fabs(dphi);
309}

◆ inclusiveSelection()

StatusCode TrigMuonEFHypoTool::inclusiveSelection ( std::vector< TrigMuonEFHypoTool::MuonEFInfo > & toolInput) const
private

Definition at line 197 of file TrigMuonEFHypoTool.cxx.

197 {
198 for (uint i=0; i<toolInput.size(); i++){
199 auto& tool = toolInput.at(i);
200 if(TrigCompositeUtils::passed(m_decisionId.numeric(), tool.previousDecisionIDs)){
201 bool overlap = false;
202 if(m_checkOvlp){
203 for(uint j=i+1; j<toolInput.size();j++){
204 auto& tool2 = toolInput.at(j);
205 if(TrigCompositeUtils::passed(m_decisionId.numeric(), tool2.previousDecisionIDs))
206 if(tool2.muon->p4()==tool.muon->p4()) overlap=true;
207 }
208 }
209 if(overlap) continue;
210
211 if(decideOnSingleObject(tool, 0)==true){
212 ATH_MSG_DEBUG("Passes selection");
214 }
215 else ATH_MSG_DEBUG("Does not pass selection");
216 }
217 }
218 return StatusCode::SUCCESS;
219}
unsigned int uint
Gaudi::Property< bool > m_checkOvlp
bool decideOnSingleObject(TrigMuonEFHypoTool::MuonEFInfo &input, size_t cutIndex) const
bool passed(DecisionID id, const DecisionIDContainer &idSet)
checks if required decision ID is in the set of IDs in the container
void addDecisionID(DecisionID id, Decision *d)
Appends the decision (given as ID) to the decision object.

◆ initialize()

StatusCode TrigMuonEFHypoTool::initialize ( )
overridevirtual

Definition at line 17 of file TrigMuonEFHypoTool.cxx.

17 {
18
20 if(m_muonSelTool.retrieve().isFailure()) {
21 ATH_MSG_ERROR("Unable to retrieve " << m_muonSelTool);
22 return StatusCode::FAILURE;
23 }
24 } else m_muonSelTool.disable();
25
26 if(m_acceptAll) {
27 ATH_MSG_DEBUG("Accepting all the events!");
28 } else {
29 if(m_ptBins.size()<=0){
30 ATH_MSG_ERROR("Trying to configure hypo with no pT bins. This is probably a configuration mistake.");
31 return StatusCode::FAILURE;
32 }
33 m_bins.resize(m_ptBins.size());
34 for(size_t j=0; j<m_ptBins.size(); j++){
35 m_bins[j] = m_ptBins[j].size() - 1;
36 if (m_bins[j] != m_ptThresholds[j].size()) {
37 ATH_MSG_ERROR("bad thresholds setup .... exiting!");
38 return StatusCode::FAILURE;
39 }
40 if (msgLvl(MSG::DEBUG)) {
41 for (std::vector<float>::size_type i=0; i<m_bins[j];++i) {
42 ATH_MSG_DEBUG( "bin " << m_ptBins[j][i] << " - " << m_ptBins[j][i+1]<<" with Pt Threshold of " << (m_ptThresholds[j][i])/Gaudi::Units::GeV<< " GeV");
43 }
44 }
45 }
46 }
47 // minimum d0 cut for displaced muon triggers
48 if (m_d0min>0.) ATH_MSG_DEBUG( " Rejecting muons with abs(d0) < "<<m_d0min<<" mm");
49
50 if (m_runCommissioningChain) ATH_MSG_INFO("m_runCommissioningChain set to true (for absence of NSW)");
51
52 if ( not m_monTool.name().empty() ) {
53 ATH_CHECK( m_monTool.retrieve() );
54 ATH_MSG_DEBUG("MonTool name: " << m_monTool);
55 }
56
57 if(m_doSA) m_type = xAOD::Muon::TrackParticleType::ExtrapolatedMuonSpectrometerTrackParticle;
58 else m_type = xAOD::Muon::TrackParticleType::CombinedTrackParticle;
59
60 return StatusCode::SUCCESS;
61}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_ERROR(x)
#define ATH_MSG_INFO(x)
bool msgLvl(const MSG::Level lvl) const
ToolHandle< CP::IMuonSelectionTool > m_muonSelTool
Gaudi::Property< bool > m_doSA

◆ inputHandles()

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

Return this algorithm's input handles.

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

◆ msg()

MsgStream & AthCommonMsg< AlgTool >::msg ( ) const
inlineinherited

Definition at line 24 of file AthCommonMsg.h.

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

◆ msgLvl()

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

Definition at line 30 of file AthCommonMsg.h.

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

◆ multiplicitySelection()

StatusCode TrigMuonEFHypoTool::multiplicitySelection ( std::vector< TrigMuonEFHypoTool::MuonEFInfo > & toolInput) const
private

Definition at line 220 of file TrigMuonEFHypoTool.cxx.

220 {
221 HLT::Index2DVec passingSelection(m_ptBins.size());
222 bool passingNscan=false;
223 for(size_t cutIndex=0; cutIndex < m_ptBins.size(); ++cutIndex) {
224 size_t elementIndex{0};
225 for(auto& tool : toolInput){
226 if(TrigCompositeUtils::passed(m_decisionId.numeric(), tool.previousDecisionIDs)){
227 if(decideOnSingleObject(tool, cutIndex)==true){
228 if(m_nscan && cutIndex==0 && (!passingNscan)){
229 ATH_MSG_DEBUG("Applying narrow-scan selection");
230 float deta,dphi=10;
231 unsigned int nInCone=0;
232 float muonR = sqrt( pow(tool.muon->eta(),2) +pow(tool.muon->phi(),2));
233 float coneCheck=m_conesize*muonR;
234 for (auto& tooltmp : toolInput){
235 ATH_MSG_DEBUG(">>Testing Muon with pt: "<<tooltmp.muon->pt()/Gaudi::Units::GeV << "GeV, eta: "
236 << tooltmp.muon->eta() << ", phi: " << tooltmp.muon->phi());
237 if (tooltmp.muon->p4() == tool.muon->p4()) {
238 ATH_MSG_DEBUG("<< same muon, skipping...");
239 }else {
240 deta = std::abs(tooltmp.muon->eta()-tool.muon->eta());
241 dphi = getdphi(tooltmp.muon->phi(),tool.muon->phi());
242 if(deta<coneCheck && dphi<coneCheck){
243 nInCone++;
244 }
245
246 ATH_MSG_DEBUG(">> dPhi is: " << dphi);
247 ATH_MSG_DEBUG(">> dEta is: " << deta);
248 ATH_MSG_DEBUG(">> dR is: " <<sqrt( pow( deta, 2) + pow( dphi, 2) ));
249
250 }
251 }
252 //end test nscan
253
254 if (nInCone > 0) {
255 ATH_MSG_DEBUG("Passes narrow-scan selection Index["<<elementIndex<<"]");
256 passingNscan=true;
257 }else ATH_MSG_DEBUG("Does not pass narrow-scan selection Index["<<elementIndex<<"]");
258 }
259 ATH_MSG_DEBUG("Passing selection "<<m_decisionId << " , Index["<<elementIndex<<"]");
260 passingSelection[cutIndex].push_back(elementIndex);
261 }
262 else ATH_MSG_DEBUG("Not passing selection "<<m_decisionId << " , Index["<<elementIndex<<"]");
263 }
264 else{
265 ATH_MSG_DEBUG("No match for decisionId "<<m_decisionId);
266 }
267 elementIndex++;
268 }
269 if (m_nscan &&(!passingNscan)){
270 ATH_MSG_DEBUG("Narrow-scan is required and no muons passed, all muons will be rejected ");
271 return StatusCode::SUCCESS;
272 }
273 //If nothing passes, then we should stop
274 if(passingSelection[cutIndex].empty()){
275 ATH_MSG_DEBUG("No muons passed the selection "<<cutIndex<<" rejecting...");
276 return StatusCode::SUCCESS;
277 }
278 }
279 std::set<size_t> passingIndices;
280 if(m_decisionPerRoI==true){
281 auto notFromSameRoI = [&](const HLT::Index1DVec& comb){
282 std::set<const xAOD::Muon*> setOfMuons;
283 for (auto index : comb){
284 setOfMuons.insert(toolInput[index].muon);
285 }
286 return setOfMuons.size()==comb.size();
287 };
288
289 HLT::elementsInUniqueCombinations(passingSelection, passingIndices, std::move(notFromSameRoI));
290 }
291 else{
292 HLT::elementsInUniqueCombinations(passingSelection, passingIndices);
293 }
294 if(passingIndices.empty()){
295 ATH_MSG_DEBUG("No muons passed selection "<<m_decisionId);
296 return StatusCode::SUCCESS;
297 }
298 for(auto i : passingIndices){
299 ATH_MSG_DEBUG("Muon["<<i<<"] passes "<<m_decisionId<<" with pT = "<<toolInput[i].muon->pt()/Gaudi::Units::GeV << "GeV");
300 TrigCompositeUtils::addDecisionID(m_decisionId.numeric(), toolInput[i].decision);
301 }
302 return StatusCode::SUCCESS;
303}
static const Attributes_t empty
constexpr int pow(int base, int exp) noexcept
Gaudi::Property< float > m_conesize
Gaudi::Property< bool > m_nscan
float getdphi(float phi1, float phi2) const
Gaudi::Property< bool > m_decisionPerRoI
void elementsInUniqueCombinations(const Index2DVec &indices, std::set< size_t > &participants, const std::function< bool(const Index1DVec &)> &filter)
std::vector< Index1DVec > Index2DVec
std::vector< size_t > Index1DVec
Unique combinations for case when one can not repeat the index (i.e.

◆ outputHandles()

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

Return this algorithm's output handles.

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

◆ passedQualityCuts()

bool TrigMuonEFHypoTool::passedQualityCuts ( const xAOD::Muon * muon) const
private

Definition at line 162 of file TrigMuonEFHypoTool.cxx.

162 {
163 bool passCut = false;
164 const xAOD::TrackParticle* idtrack = muon->trackParticle( xAOD::Muon::InnerDetectorTrackParticle );
165 const xAOD::TrackParticle* metrack = muon->trackParticle( xAOD::Muon::ExtrapolatedMuonSpectrometerTrackParticle );
166 float mePt = -999999., idPt = -999999.;
167
168 float reducedChi2 = -10, qOverPsignif = -10;
169
170 if(idtrack && metrack) {
171 mePt = metrack->pt();
172 idPt = idtrack->pt();
173 float meP = 1.0 / ( sin(metrack->theta()) / mePt);
174 float idP = 1.0 / ( sin(idtrack->theta()) / idPt);
175 qOverPsignif = std::abs( (metrack->charge() / meP) - (idtrack->charge() / idP) ) / sqrt( idtrack->definingParametersCovMatrix()(4,4) + metrack->definingParametersCovMatrix()(4,4) );
176 reducedChi2 = muon->primaryTrackParticle()->chiSquared()/muon->primaryTrackParticle()->numberDoF();
177 // Selection criteria based on the requirements that are part of the muon quality working points (offline)
178 if(std::abs(reducedChi2) < 8.0 && !m_muonSelTool->isBadMuon(*muon) && qOverPsignif<7.0 && muon->author()==xAOD::Muon::MuidCo) passCut = true;
179 }
180
181 return passCut;
182}
float theta() const
Returns the parameter, which has range 0 to .
const ParametersCovMatrix_t definingParametersCovMatrix() const
Returns the 5x5 symmetric matrix containing the defining parameters covariance matrix.

◆ renounce()

std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > AthCommonDataStore< AthCommonMsg< AlgTool > >::renounce ( T & h)
inlineprotectedinherited

Definition at line 380 of file AthCommonDataStore.h.

381 {
382 h.renounce();
384 }
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)

◆ renounceArray()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::renounceArray ( SG::VarHandleKeyArray & handlesArray)
inlineprotectedinherited

remove all handles from I/O resolution

Definition at line 364 of file AthCommonDataStore.h.

364 {
366 }

◆ sysInitialize()

virtual StatusCode AthCommonDataStore< AthCommonMsg< AlgTool > >::sysInitialize ( )
overridevirtualinherited

Perform system initialization for an algorithm.

We override this to declare all the elements of handle key arrays at the end of initialization. See comments on updateVHKA.

Reimplemented in asg::AsgMetadataTool, AthCheckedComponent< AthAlgTool >, AthCheckedComponent<::AthAlgTool >, and DerivationFramework::CfAthAlgTool.

◆ sysStart()

virtual StatusCode AthCommonDataStore< AthCommonMsg< AlgTool > >::sysStart ( )
overridevirtualinherited

Handle START transition.

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

◆ updateVHKA()

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

Definition at line 308 of file AthCommonDataStore.h.

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

Member Data Documentation

◆ m_acceptAll

Gaudi::Property< bool > TrigMuonEFHypoTool::m_acceptAll
private
Initial value:
{
this, "AcceptAll", false, "Ignore selection" }

Definition at line 58 of file TrigMuonEFHypoTool.h.

58 {
59 this, "AcceptAll", false, "Ignore selection" };

◆ m_bins

std::vector<size_t> TrigMuonEFHypoTool::m_bins ={0}
private

Definition at line 74 of file TrigMuonEFHypoTool.h.

74{0};

◆ m_checkOvlp

Gaudi::Property< bool > TrigMuonEFHypoTool::m_checkOvlp
private
Initial value:
{
this, "RemoveOverlaps", false, "do overlap removal"}

Definition at line 68 of file TrigMuonEFHypoTool.h.

68 {
69 this, "RemoveOverlaps", false, "do overlap removal"};

◆ m_conesize

Gaudi::Property< float > TrigMuonEFHypoTool::m_conesize
private
Initial value:
{
this, "ConeSize", 0.5, "Narrow scan cone size" }

Definition at line 50 of file TrigMuonEFHypoTool.h.

50 {
51 this, "ConeSize", 0.5, "Narrow scan cone size" };

◆ m_d0min

Gaudi::Property< float > TrigMuonEFHypoTool::m_d0min
private
Initial value:
{
this, "MinimumD0", 0., "lower d0 cut (mm)"}

Definition at line 66 of file TrigMuonEFHypoTool.h.

66 {
67 this, "MinimumD0", 0., "lower d0 cut (mm)"};

◆ m_decisionId

HLT::Identifier TrigMuonEFHypoTool::m_decisionId
private

Definition at line 46 of file TrigMuonEFHypoTool.h.

◆ m_decisionPerRoI

Gaudi::Property<bool> TrigMuonEFHypoTool::m_decisionPerRoI
private
Initial value:
{
this, "DecisionPerRoI", true, "Is multiplicity requirement refering to muons ( false ) or RoIs with muons ( true ), relevant only in when multiplicity > 1" }

Definition at line 60 of file TrigMuonEFHypoTool.h.

60 {
61 this, "DecisionPerRoI", true, "Is multiplicity requirement refering to muons ( false ) or RoIs with muons ( true ), relevant only in when multiplicity > 1" };

◆ m_detStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< AlgTool > >::m_detStore
privateinherited

Pointer to StoreGate (detector store by default)

Definition at line 393 of file AthCommonDataStore.h.

◆ m_doSA

Gaudi::Property<bool> TrigMuonEFHypoTool::m_doSA
private
Initial value:
{
this, "RequireSAMuons", false, "Apply cut on SA muons (otherwise require combined muons)"}

Definition at line 64 of file TrigMuonEFHypoTool.h.

64 {
65 this, "RequireSAMuons", false, "Apply cut on SA muons (otherwise require combined muons)"};

◆ m_evtStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< AlgTool > >::m_evtStore
privateinherited

Pointer to StoreGate (event store by default)

Definition at line 390 of file AthCommonDataStore.h.

◆ m_monTool

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

Definition at line 75 of file TrigMuonEFHypoTool.h.

75{ this, "MonTool", "", "Monitoring tool" };

◆ m_muonqualityCut

Gaudi::Property< bool > TrigMuonEFHypoTool::m_muonqualityCut
private
Initial value:
{
this, "MuonQualityCut", false, "Ignore selection" }

Definition at line 52 of file TrigMuonEFHypoTool.h.

52 {
53 this, "MuonQualityCut", false, "Ignore selection" };

◆ m_muonSelTool

ToolHandle<CP::IMuonSelectionTool> TrigMuonEFHypoTool::m_muonSelTool {this, "MuonSelectionTool", "CP::MuonSelectionTool/MuonSelectionTool", "Tool for muon quality selection"}
private

Definition at line 76 of file TrigMuonEFHypoTool.h.

76{this, "MuonSelectionTool", "CP::MuonSelectionTool/MuonSelectionTool", "Tool for muon quality selection"};

◆ m_nscan

Gaudi::Property< bool > TrigMuonEFHypoTool::m_nscan
private
Initial value:
{
this, "NarrowScan", false, "Apply narrow scan" }

Definition at line 48 of file TrigMuonEFHypoTool.h.

48 {
49 this, "NarrowScan", false, "Apply narrow scan" };

◆ m_ptBins

Gaudi::Property< std::vector<std::vector<double> > > TrigMuonEFHypoTool::m_ptBins
private
Initial value:
{
this, "PtBins", { {0, 2.5} }, "Bins range of each pT threshold" }

Definition at line 54 of file TrigMuonEFHypoTool.h.

54 {
55 this, "PtBins", { {0, 2.5} }, "Bins range of each pT threshold" };

◆ m_ptThresholds

Gaudi::Property< std::vector<std::vector<double> > > TrigMuonEFHypoTool::m_ptThresholds
private
Initial value:
{
this, "PtThresholds", { {5.49*Gaudi::Units::GeV} }, "Track pT requirement ( separate threshold for each muon )" }

Definition at line 56 of file TrigMuonEFHypoTool.h.

56 {
57 this, "PtThresholds", { {5.49*Gaudi::Units::GeV} }, "Track pT requirement ( separate threshold for each muon )" };

◆ m_runCommissioningChain

Gaudi::Property<bool> TrigMuonEFHypoTool::m_runCommissioningChain
private
Initial value:
{
this, "RunCommissioningChain", false, "Apply a looser requirement according to absence of NSW"}

Definition at line 70 of file TrigMuonEFHypoTool.h.

70 {
71 this, "RunCommissioningChain", false, "Apply a looser requirement according to absence of NSW"};

◆ m_threeStationCut

Gaudi::Property<bool> TrigMuonEFHypoTool::m_threeStationCut
private
Initial value:
{
this, "RequireThreeStations", false, "Apply cut on N GoodPrecisionLayers in endcaps"}

Definition at line 62 of file TrigMuonEFHypoTool.h.

62 {
63 this, "RequireThreeStations", false, "Apply cut on N GoodPrecisionLayers in endcaps"};

◆ m_type

xAOD::Muon::TrackParticleType TrigMuonEFHypoTool::m_type
private

Definition at line 77 of file TrigMuonEFHypoTool.h.

◆ m_varHandleArraysDeclared

bool AthCommonDataStore< AthCommonMsg< AlgTool > >::m_varHandleArraysDeclared
privateinherited

Definition at line 399 of file AthCommonDataStore.h.

◆ m_vhka

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

Definition at line 398 of file AthCommonDataStore.h.


The documentation for this class was generated from the following files: