ATLAS Offline Software
Public Member Functions | Static Public Member Functions | Protected Member Functions | Private Types | Private Member Functions | Private Attributes | List of all members
Muon::MuonLayerAmbiguitySolverTool Class Reference

#include <MuonLayerAmbiguitySolverTool.h>

Inheritance diagram for Muon::MuonLayerAmbiguitySolverTool:
Collaboration diagram for Muon::MuonLayerAmbiguitySolverTool:

Public Member Functions

 MuonLayerAmbiguitySolverTool (const std::string &type, const std::string &name, const IInterface *parent)
 Default AlgTool functions. More...
 
virtual ~MuonLayerAmbiguitySolverTool ()=default
 
virtual StatusCode initialize () override
 
virtual void resolveOverlaps (const EventContext &ctx, const std::vector< Muon::MuonLayerRecoData > &allLayers, std::vector< MuonCandidate > &resolvedCandidates) const override
 IMuonLayerAmbiguitySolverTool interface: find. More...
 
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 sysInitialize () override
 Perform system initialization for an algorithm. 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
 

Static Public Member Functions

static const InterfaceID & interfaceID ()
 IAlgTool interface. More...
 

Protected Member Functions

void renounceArray (SG::VarHandleKeyArray &handlesArray)
 remove all handles from I/O resolution More...
 
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. More...
 

Private Types

typedef ServiceHandle< StoreGateSvcStoreGateSvc_t
 

Private Member Functions

void buildLayerVec (const EventContext &ctx, const std::vector< MuonLayerRecoData > &allLayers, std::vector< std::vector< MuonLayerIntersection > > &muonLayerDataHashVec) const
 
bool getNextSeed (const std::vector< std::vector< MuonLayerIntersection > > &muonLayerDataHashVec, std::set< const MuonSegment * > &usedSegments, std::vector< MuonStationIndex::StIndex > &inverseSeedLayerOrder, MuonLayerIntersection &layerIntersection) const
 
bool extendCandidatesWithLayers (const EventContext &ctx, std::vector< MuonCandidate > &candidates, const std::vector< std::vector< MuonLayerIntersection > > &muonLayerRecoDataHashVec, const std::vector< MuonStationIndex::StIndex > &inverseSeedLayerOrder) const
 
void resolveSmallLargeOverlaps (const EventContext &ctx, std::vector< MuonLayerIntersection > &existingLayerIntersections, std::vector< MuonLayerIntersection > &newLayerIntersections) const
 
bool match (const EventContext &ctx, const MuonCandidate &candidate, const MuonLayerIntersection &layerIntersection) const
 
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...
 

Private Attributes

ToolHandle< IMuonSegmentSelectionToolm_segmentSelector
 
ToolHandle< IMuonSegmentMatchingToolm_segmentMatchingTool
 
ToolHandle< IMuonSegmentTrackBuilderm_muonTrackBuilder
 
PublicToolHandle< MuonEDMPrinterToolm_printer {this, "MuonEDMPrinterTool", "Muon::MuonEDMPrinterTool/MuonEDMPrinterTool"}
 
Gaudi::Property< unsigned int > m_maxSeeds {this, "MaxSeeds", 30, "maximum number of seeds to be tried"}
 
Gaudi::Property< int > m_seedQualityThreshold {this, "SeedQualityThreshold", 2, "seed quality threshold"}
 
Gaudi::Property< int > m_minSegmentQuality {this, "MinimumSegmentQuality", 1, "minimum quality for a segment to be considered"}
 
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
 

Detailed Description

Definition at line 24 of file MuonLayerAmbiguitySolverTool.h.

Member Typedef Documentation

◆ StoreGateSvc_t

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

Definition at line 388 of file AthCommonDataStore.h.

Constructor & Destructor Documentation

◆ MuonLayerAmbiguitySolverTool()

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

Default AlgTool functions.

Definition at line 13 of file MuonLayerAmbiguitySolverTool.cxx.

13  :
15  declareInterface<IMuonLayerAmbiguitySolverTool>(this);
16  }

◆ ~MuonLayerAmbiguitySolverTool()

virtual Muon::MuonLayerAmbiguitySolverTool::~MuonLayerAmbiguitySolverTool ( )
virtualdefault

Member Function Documentation

◆ buildLayerVec()

void Muon::MuonLayerAmbiguitySolverTool::buildLayerVec ( const EventContext &  ctx,
const std::vector< MuonLayerRecoData > &  allLayers,
std::vector< std::vector< MuonLayerIntersection > > &  muonLayerDataHashVec 
) const
private

Definition at line 167 of file MuonLayerAmbiguitySolverTool.cxx.

168  {
169  // clear and resize hash vector, initialize with null_ptr
170  muonLayerDataHashVec.clear();
171  muonLayerDataHashVec.resize(MuonStationIndex::StIndexMax);
172 
173  // loop over layers
174  for (const MuonLayerRecoData& layer : allLayers) {
175  const MuonLayerSurface& layerSurface = layer.intersection.layerSurface;
176  MuonStationIndex::StIndex stIndex = MuonStationIndex::toStationIndex(layerSurface.regionIndex, layerSurface.layerIndex);
177 
178  // create layer intersections
179  std::vector<MuonLayerIntersection> layerIntersections;
180  layerIntersections.reserve(layer.segments.size());
181  for (const std::shared_ptr<const MuonSegment>& segment : layer.segments) {
182  // get quality and skip bad ones
183  int quality = m_segmentSelector->quality(*segment);
184  if (quality < m_minSegmentQuality) continue;
185  layerIntersections.emplace_back(layer.intersection, segment, quality);
186  }
187 
188  // if there are no segments yet in the layer, directly add them
189  if (muonLayerDataHashVec[stIndex].empty()) {
190  muonLayerDataHashVec[stIndex] = std::move(layerIntersections);
191  } else {
192  // there are already segment, try resolving small/large overlaps
193  resolveSmallLargeOverlaps(ctx, muonLayerDataHashVec[stIndex], layerIntersections);
194  }
195 
196  // finally sort the segments
198  muonLayerDataHashVec[stIndex].begin(), muonLayerDataHashVec[stIndex].end(),
199  [](const Muon::MuonLayerIntersection& a, const Muon::MuonLayerIntersection& b) { return a.quality > b.quality; });
200  }
201 
202  if (msgLvl(MSG::DEBUG)) {
203  msg(MSG::DEBUG) << " Done building segment vector ";
204  for (const auto& vec : muonLayerDataHashVec) {
205  for (const auto& entry : vec) { msg(MSG::DEBUG) << std::endl << " " << m_printer->print(*entry.segment); }
206  }
207  msg(MSG::DEBUG) << endmsg;
208  }
209  }

◆ declareGaudiProperty() [1/4]

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

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

Definition at line 170 of file AthCommonDataStore.h.

172  {
173  return *AthCommonDataStore<PBASE>::declareProperty(hndl.name(),
174  hndl.value(),
175  hndl.documentation());
176 
177  }

◆ declareGaudiProperty() [2/4]

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

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

Definition at line 156 of file AthCommonDataStore.h.

158  {
159  return *AthCommonDataStore<PBASE>::declareProperty(hndl.name(),
160  hndl.value(),
161  hndl.documentation());
162 
163  }

◆ declareGaudiProperty() [3/4]

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

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

Definition at line 184 of file AthCommonDataStore.h.

186  {
187  return *AthCommonDataStore<PBASE>::declareProperty(hndl.name(),
188  hndl.value(),
189  hndl.documentation());
190  }

◆ declareGaudiProperty() [4/4]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< AlgTool > >::declareGaudiProperty ( Gaudi::Property< T > &  t,
const SG::NotHandleType  
)
inlineprivateinherited

specialization for handling everything that's not a Gaudi::Property<SG::VarHandleKey> or a <SG::VarHandleKeyArray>

Definition at line 199 of file AthCommonDataStore.h.

200  {
201  return PBASE::declareProperty(t);
202  }

◆ declareProperty() [1/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty ( const std::string &  name,
SG::VarHandleBase hndl,
const std::string &  doc,
const SG::VarHandleType  
)
inlineinherited

Declare a new Gaudi property.

Parameters
nameName of the property.
hndlObject holding the property value.
docDocumentation 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.

249  {
250  this->declare(hndl.vhKey());
251  hndl.vhKey().setOwner(this);
252 
253  return PBASE::declareProperty(name,hndl,doc);
254  }

◆ declareProperty() [2/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty ( const std::string &  name,
SG::VarHandleKey hndl,
const std::string &  doc,
const SG::VarHandleKeyType  
)
inlineinherited

Declare a new Gaudi property.

Parameters
nameName of the property.
hndlObject holding the property value.
docDocumentation 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.

225  {
226  this->declare(hndl);
227  hndl.setOwner(this);
228 
229  return PBASE::declareProperty(name,hndl,doc);
230  }

◆ declareProperty() [3/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty ( const std::string &  name,
SG::VarHandleKeyArray hndArr,
const std::string &  doc,
const SG::VarHandleKeyArrayType  
)
inlineinherited

Definition at line 259 of file AthCommonDataStore.h.

263  {
264 
265  // std::ostringstream ost;
266  // ost << Algorithm::name() << " VHKA declareProp: " << name
267  // << " size: " << hndArr.keys().size()
268  // << " mode: " << hndArr.mode()
269  // << " vhka size: " << m_vhka.size()
270  // << "\n";
271  // debug() << ost.str() << endmsg;
272 
273  hndArr.setOwner(this);
274  m_vhka.push_back(&hndArr);
275 
276  Gaudi::Details::PropertyBase* p = PBASE::declareProperty(name, hndArr, doc);
277  if (p != 0) {
278  p->declareUpdateHandler(&AthCommonDataStore<PBASE>::updateVHKA, this);
279  } else {
280  ATH_MSG_ERROR("unable to call declareProperty on VarHandleKeyArray "
281  << name);
282  }
283 
284  return p;
285 
286  }

◆ declareProperty() [4/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty ( const std::string &  name,
T &  property,
const std::string &  doc,
const SG::NotHandleType  
)
inlineinherited

Declare a new Gaudi property.

Parameters
nameName of the property.
propertyObject holding the property value.
docDocumentation 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.

337  {
338  return PBASE::declareProperty(name, property, doc);
339  }

◆ declareProperty() [5/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty ( const std::string &  name,
T &  property,
const std::string &  doc = "none" 
)
inlineinherited

Declare a new Gaudi property.

Parameters
nameName of the property.
propertyObject holding the property value.
docDocumentation 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.

355  {
356  typedef typename SG::HandleClassifier<T>::type htype;
357  return declareProperty (name, property, doc, htype());
358  }

◆ declareProperty() [6/6]

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

Definition at line 145 of file AthCommonDataStore.h.

145  {
146  typedef typename SG::HandleClassifier<T>::type htype;
148  }

◆ 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.

95 { return m_detStore; }

◆ evtStore() [1/2]

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.

85 { return m_evtStore; }

◆ evtStore() [2/2]

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

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

Definition at line 90 of file AthCommonDataStore.h.

90 { return m_evtStore; }

◆ extendCandidatesWithLayers()

bool Muon::MuonLayerAmbiguitySolverTool::extendCandidatesWithLayers ( const EventContext &  ctx,
std::vector< MuonCandidate > &  candidates,
const std::vector< std::vector< MuonLayerIntersection > > &  muonLayerRecoDataHashVec,
const std::vector< MuonStationIndex::StIndex > &  inverseSeedLayerOrder 
) const
private

replace the last intersection on the original candidate

Definition at line 77 of file MuonLayerAmbiguitySolverTool.cxx.

80  {
81  // break recursive call chain once we processed all layers
82  if (inverseSeedLayerOrder.empty()) return true;
83 
84  ATH_MSG_VERBOSE("extendCandidates " << candidates.size() << " remaining layers " << inverseSeedLayerOrder.size());
85 
86  // get data in current layer
87  MuonStationIndex::StIndex currentStIndex = inverseSeedLayerOrder.back();
88  const std::vector<MuonLayerIntersection>& layerIntersections = muonLayerDataHashVec[currentStIndex];
89  if (!layerIntersections.empty()) {
90  // store new MuonCandidates
91  std::vector<MuonCandidate> newCandidates;
92 
93  // loop over candidates
94  for (MuonCandidate& candidate : candidates) {
95  // if more than one segment is selected in the layer, create a new candidate
96  unsigned int selectedSegmentsInLayer = 0;
97  // loop over data in layer
98  for (const MuonLayerIntersection& layerIntersection : layerIntersections) {
99  // match segment to candidate. Segment pairs with the same identifier are
100  // excluded from the beginning
101  if (match(ctx, candidate, layerIntersection)) {
102  // if first add to existing candidate, else create a new candidate
103  if (selectedSegmentsInLayer == 0) {
104  candidate.layerIntersections.push_back(layerIntersection);
105  } else {
106  MuonCandidate newCandidate = candidate;
108  newCandidate.layerIntersections.back() = layerIntersection;
109  newCandidates.emplace_back(std::move(newCandidate));
110  }
111  ++selectedSegmentsInLayer;
112  }
113  }
114  }
115  // add new candidates to list
116  if (!newCandidates.empty()) {
117  ATH_MSG_VERBOSE("Found multiple solutions, add new candidates " << newCandidates.size());
118  candidates.insert(candidates.end(), std::make_move_iterator(newCandidates.begin()),
119  std::make_move_iterator(newCandidates.end()));
120  }
121  }
122 
123  // remove the current layer and call extendCandidatesWithLayers for the next layer
124  std::vector<MuonStationIndex::StIndex> newInverseSeedLayerOrder = inverseSeedLayerOrder;
125  newInverseSeedLayerOrder.pop_back();
126  return extendCandidatesWithLayers(ctx, candidates, muonLayerDataHashVec, newInverseSeedLayerOrder);
127  }

◆ 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

◆ getNextSeed()

bool Muon::MuonLayerAmbiguitySolverTool::getNextSeed ( const std::vector< std::vector< MuonLayerIntersection > > &  muonLayerDataHashVec,
std::set< const MuonSegment * > &  usedSegments,
std::vector< MuonStationIndex::StIndex > &  inverseSeedLayerOrder,
MuonLayerIntersection layerIntersection 
) const
private

select segment

Definition at line 138 of file MuonLayerAmbiguitySolverTool.cxx.

141  {
142  ATH_MSG_VERBOSE("getNextSeed, remaining layers " << inverseSeedLayerOrder.size());
143  // loop over the inverse seed layers
144  std::vector<MuonStationIndex::StIndex>::const_reverse_iterator rit = inverseSeedLayerOrder.rbegin();
145  std::vector<MuonStationIndex::StIndex>::const_reverse_iterator rit_end = inverseSeedLayerOrder.rend();
146  for (; rit != rit_end; ++rit) {
147  // loop over segments and find the next 'good' one that was not used yet
148  for (const MuonLayerIntersection& muonLayerIntersection : muonLayerDataHashVec[*rit]) {
150  if (muonLayerIntersection.quality < m_seedQualityThreshold) continue;
151  // only consider once
152  const MuonSegment* segment = muonLayerIntersection.segment.get();
153  if (usedSegments.count(segment)) continue;
154  usedSegments.insert(segment);
155 
156  // return result
157  layerIntersection = muonLayerIntersection;
158  ATH_MSG_VERBOSE("Selected seed " << m_printer->print(*segment));
159  return true;
160  }
161  // if we get here, we processed all the possible seeds in the layer so we can remove it from the list
162  inverseSeedLayerOrder.pop_back();
163  }
164  return false;
165  }

◆ initialize()

StatusCode Muon::MuonLayerAmbiguitySolverTool::initialize ( )
overridevirtual

Definition at line 18 of file MuonLayerAmbiguitySolverTool.cxx.

18  {
19  ATH_CHECK(m_segmentSelector.retrieve());
20  ATH_CHECK(m_segmentMatchingTool.retrieve());
21  ATH_CHECK(m_muonTrackBuilder.retrieve());
22  ATH_CHECK(m_printer.retrieve());
23 
24  return StatusCode::SUCCESS;
25  }

◆ 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.

◆ interfaceID()

static const InterfaceID& Muon::IMuonLayerAmbiguitySolverTool::interfaceID ( )
inlinestaticinherited

IAlgTool interface.

Definition at line 22 of file IMuonLayerAmbiguitySolverTool.h.

22  {
23  static const InterfaceID IID_IMuonLayerAmbiguitySolverTool("Muon::IMuonLayerAmbiguitySolverTool", 1, 0);
24  return IID_IMuonLayerAmbiguitySolverTool;
25  }

◆ match()

bool Muon::MuonLayerAmbiguitySolverTool::match ( const EventContext &  ctx,
const MuonCandidate candidate,
const MuonLayerIntersection layerIntersection 
) const
private

Definition at line 129 of file MuonLayerAmbiguitySolverTool.cxx.

130  {
131  // loop over layers and match each segment to the new one, if any fails, fail the combination
132  for (const Muon::MuonLayerIntersection& layer : candidate.layerIntersections) {
133  if (!m_segmentMatchingTool->match(ctx, *layer.segment, *layerIntersection.segment)) return false;
134  }
135  return true;
136  }

◆ msg() [1/2]

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

Definition at line 24 of file AthCommonMsg.h.

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

◆ msg() [2/2]

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

Definition at line 27 of file AthCommonMsg.h.

27  {
28  return this->msgStream(lvl);
29  }

◆ 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  }

◆ 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.

◆ 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();
383  PBASE::renounce (h);
384  }

◆ 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  {
365  handlesArray.renounce();
366  }

◆ resolveOverlaps()

void Muon::MuonLayerAmbiguitySolverTool::resolveOverlaps ( const EventContext &  ctx,
const std::vector< Muon::MuonLayerRecoData > &  allLayers,
std::vector< MuonCandidate > &  resolvedCandidates 
) const
overridevirtual

IMuonLayerAmbiguitySolverTool interface: find.

Implements Muon::IMuonLayerAmbiguitySolverTool.

Definition at line 27 of file MuonLayerAmbiguitySolverTool.cxx.

28  {
29  // re-organise data to allow hash based access, resolve small large overlaps
30  std::vector<std::vector<MuonLayerIntersection> > muonLayerDataHashVec;
31  buildLayerVec(ctx, allLayers, muonLayerDataHashVec);
32 
33  // build candidate by selecting seeds and extending them
34  unsigned int nseeds = 0; // counter for number of seeds up to now
35  std::set<const MuonSegment*> usedSegments; // keep track of the segments already used
36  std::vector<MuonStationIndex::StIndex> inverseSeedLayerOrder = {MuonStationIndex::BO, MuonStationIndex::BI, MuonStationIndex::BM,
39  while (nseeds < m_maxSeeds) {
40  // first get a seed
41  MuonLayerIntersection layerIntersection;
42  if (!getNextSeed(muonLayerDataHashVec, usedSegments, inverseSeedLayerOrder, layerIntersection)) {
43  ATH_MSG_VERBOSE("No more seeds, total used seeds " << nseeds);
44  break;
45  }
46 
47  // create first candidate from seed and extend it
48  std::vector<MuonLayerIntersection> layerIntersections = {layerIntersection};
49  std::vector<MuonCandidate> candidates = {MuonCandidate(std::move(layerIntersections))};
50  if (extendCandidatesWithLayers(ctx, candidates, muonLayerDataHashVec, inverseSeedLayerOrder)) {
51  // add candidates to output list
52  ATH_MSG_DEBUG(" Completed seed extension " << candidates.size());
53  if (msgLvl(MSG::VERBOSE)) {
54  for (const auto& candidate : candidates) {
55  msg(MSG::VERBOSE) << " Candidate with layers " << candidate.layerIntersections.size();
56  for (const auto& entry : candidate.layerIntersections) {
57  msg(MSG::VERBOSE) << std::endl << " " << m_printer->print(*entry.segment);
58  }
59  }
61  }
62 
63  // add all segments on the candidates to the exlusion list
64  for (const auto& candidate : candidates) {
65  for (const auto& layer : candidate.layerIntersections) { usedSegments.insert(layer.segment.get()); }
66  }
67  resolvedCandidates.insert(resolvedCandidates.end(), std::make_move_iterator(candidates.begin()),
68  std::make_move_iterator(candidates.end()));
69  }
70  ++nseeds;
71  }
72 
73  ATH_MSG_DEBUG("Completed ambiguity solving using " << nseeds << " seeds, resulting in " << resolvedCandidates.size()
74  << " track candidates ");
75  }

◆ resolveSmallLargeOverlaps()

void Muon::MuonLayerAmbiguitySolverTool::resolveSmallLargeOverlaps ( const EventContext &  ctx,
std::vector< MuonLayerIntersection > &  existingLayerIntersections,
std::vector< MuonLayerIntersection > &  newLayerIntersections 
) const
private

Definition at line 211 of file MuonLayerAmbiguitySolverTool.cxx.

213  {
214  ATH_MSG_VERBOSE(" resolveSmallLargeOverlaps: existing " << existingLayerIntersections.size() << " new "
215  << newLayerIntersections.size());
216 
217  // keep track of segments that have been merged
218  std::set<const MuonSegment*> combinedSegments;
219  std::vector<MuonLayerIntersection> combinedIntersections;
220 
221  // loop over all permutations
222  for (const MuonLayerIntersection& layerIntersection1 : existingLayerIntersections) {
223  // get quality and skip bad ones
224  if (layerIntersection1.quality < m_minSegmentQuality) continue;
225  for (const MuonLayerIntersection& layerIntersection2 : newLayerIntersections) {
226  // get quality and skip bad ones
227  if (layerIntersection2.quality < m_minSegmentQuality) continue;
228 
229  // require at least one of the segments to be above seeding threshold
230  if (layerIntersection1.quality < m_seedQualityThreshold && layerIntersection2.quality < m_seedQualityThreshold) continue;
231 
232  // match segments
233  if (!m_segmentMatchingTool->match(ctx, *layerIntersection1.segment, *layerIntersection2.segment)) continue;
234 
235  // build new segment
236  static const IMuonSegmentTrackBuilder::PrepVec emptyVec{};
237  std::shared_ptr<const MuonSegment> newseg{
238  m_muonTrackBuilder->combineToSegment(ctx, *layerIntersection1.segment, *layerIntersection2.segment, emptyVec)};
239  if (!newseg) {
240  ATH_MSG_DEBUG(" Fit of combination of segments failed ");
241  continue;
242  }
243 
244  // check fit quality
245  const Trk::FitQuality* fq = newseg->fitQuality();
246  if (!fq || fq->numberDoF() == 0) {
247  ATH_MSG_WARNING(" No fit quality, dropping segment ");
248  continue;
249  }
250  if (fq->chiSquared() / fq->numberDoF() > 2.5) {
251  ATH_MSG_DEBUG("Bad fit quality, dropping segment " << fq->chiSquared() / fq->numberDoF());
252  continue;
253  }
254 
255  // check that quality of the combined segment is not worse that the original ones
256  int qualitynew = m_segmentSelector->quality(*newseg);
257  if (qualitynew < layerIntersection1.quality || qualitynew < layerIntersection2.quality) {
258  ATH_MSG_DEBUG("Quality got worse after combination: new " << qualitynew << " q1 " << layerIntersection1.quality
259  << " q2 " << layerIntersection2.quality);
260  continue;
261  }
262 
263  // select intersection closest to the IP and create new MuonLayerIntersection
264  // get line from combined segment to the IP
265  Amg::Vector3D direction = newseg->globalPosition().unit();
266  // lambda to project the intersection positions on the line, treats the case where pointer is null
267  auto getDistance = [](const MuonLayerIntersection& layerIntersection, const Amg::Vector3D& direction) {
268  if (!layerIntersection.intersection.trackParameters) return 1e9;
269  return layerIntersection.intersection.trackParameters->position().dot(direction);
270  };
271  double dist1 = getDistance(layerIntersection1, direction);
272  double dist2 = getDistance(layerIntersection2, direction);
273  if (dist1 < dist2)
274  combinedIntersections.emplace_back(layerIntersection1.intersection, newseg, qualitynew);
275  else
276  combinedIntersections.emplace_back(layerIntersection2.intersection, newseg, qualitynew);
277 
278  ATH_MSG_DEBUG(" Combined segments " << std::endl
279  << " first " << m_printer->print(*layerIntersection1.segment) << std::endl
280  << " second " << m_printer->print(*layerIntersection2.segment) << std::endl
281  << " combined " << m_printer->print(*newseg));
282 
283  // add segments to exclusion list
284  combinedSegments.insert(layerIntersection1.segment.get());
285  combinedSegments.insert(layerIntersection2.segment.get());
286  }
287  }
288 
289  // lambda to loop over the input intersections and add them to the new list
290  auto insert_intersection = [&combinedSegments](const Muon::MuonLayerIntersection& inter_sect) {
291  return !combinedSegments.count(inter_sect.segment.get());
292  };
293  // do the insertion and swap the new vector with the existingLayerIntersections
294  combinedIntersections.reserve(existingLayerIntersections.size() + newLayerIntersections.size());
295  std::copy_if(std::make_move_iterator(existingLayerIntersections.begin()), std::make_move_iterator(existingLayerIntersections.end()),
296  std::back_inserter(combinedIntersections), insert_intersection);
297  std::copy_if(std::make_move_iterator(newLayerIntersections.begin()), std::make_move_iterator(newLayerIntersections.end()),
298  std::back_inserter(combinedIntersections), insert_intersection);
299  existingLayerIntersections = std::move(combinedIntersections);
300  }

◆ 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 DerivationFramework::CfAthAlgTool, AthCheckedComponent< AthAlgTool >, AthCheckedComponent<::AthAlgTool >, and asg::AsgMetadataTool.

◆ 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) {
312  std::vector<SG::VarHandleKey*> keys = a->keys();
313  for (auto k : keys) {
314  k->setOwner(this);
315  }
316  }
317  }

Member Data Documentation

◆ 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_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_maxSeeds

Gaudi::Property<unsigned int> Muon::MuonLayerAmbiguitySolverTool::m_maxSeeds {this, "MaxSeeds", 30, "maximum number of seeds to be tried"}
private

Definition at line 60 of file MuonLayerAmbiguitySolverTool.h.

◆ m_minSegmentQuality

Gaudi::Property<int> Muon::MuonLayerAmbiguitySolverTool::m_minSegmentQuality {this, "MinimumSegmentQuality", 1, "minimum quality for a segment to be considered"}
private

Definition at line 62 of file MuonLayerAmbiguitySolverTool.h.

◆ m_muonTrackBuilder

ToolHandle<IMuonSegmentTrackBuilder> Muon::MuonLayerAmbiguitySolverTool::m_muonTrackBuilder
private
Initial value:
{this, "MuonSegmentTrackBuilder",
"Muon::MooTrackBuilder/MooMuonTrackBuilder"}

Definition at line 56 of file MuonLayerAmbiguitySolverTool.h.

◆ m_printer

PublicToolHandle<MuonEDMPrinterTool> Muon::MuonLayerAmbiguitySolverTool::m_printer {this, "MuonEDMPrinterTool", "Muon::MuonEDMPrinterTool/MuonEDMPrinterTool"}
private

Definition at line 58 of file MuonLayerAmbiguitySolverTool.h.

◆ m_seedQualityThreshold

Gaudi::Property<int> Muon::MuonLayerAmbiguitySolverTool::m_seedQualityThreshold {this, "SeedQualityThreshold", 2, "seed quality threshold"}
private

Definition at line 61 of file MuonLayerAmbiguitySolverTool.h.

◆ m_segmentMatchingTool

ToolHandle<IMuonSegmentMatchingTool> Muon::MuonLayerAmbiguitySolverTool::m_segmentMatchingTool
private
Initial value:
{this, "MuonSegmentMatchingTool",
"Muon::MuonSegmentMatchingTool/MuonSegmentMatchingToolTight"}

Definition at line 54 of file MuonLayerAmbiguitySolverTool.h.

◆ m_segmentSelector

ToolHandle<IMuonSegmentSelectionTool> Muon::MuonLayerAmbiguitySolverTool::m_segmentSelector
private
Initial value:
{this, "MuonSegmentSelectionTool",
"Muon::MuonSegmentSelectionTool/MuonSegmentSelectionTool"}

Definition at line 52 of file MuonLayerAmbiguitySolverTool.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:
Muon::MuonLayerAmbiguitySolverTool::m_segmentMatchingTool
ToolHandle< IMuonSegmentMatchingTool > m_segmentMatchingTool
Definition: MuonLayerAmbiguitySolverTool.h:54
Muon::MuonStationIndex::toStationIndex
static StIndex toStationIndex(ChIndex index)
convert ChIndex into StIndex
Definition: MuonStationIndex.cxx:43
Muon::MuonLayerAmbiguitySolverTool::m_minSegmentQuality
Gaudi::Property< int > m_minSegmentQuality
Definition: MuonLayerAmbiguitySolverTool.h:62
Muon::MuonLayerAmbiguitySolverTool::m_segmentSelector
ToolHandle< IMuonSegmentSelectionTool > m_segmentSelector
Definition: MuonLayerAmbiguitySolverTool.h:52
Muon::MuonStationIndex::EO
@ EO
Definition: MuonStationIndex.h:26
drawFromPickle.candidates
candidates
Definition: drawFromPickle.py:271
AthCommonDataStore::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
Muon::MuonLayerAmbiguitySolverTool::resolveSmallLargeOverlaps
void resolveSmallLargeOverlaps(const EventContext &ctx, std::vector< MuonLayerIntersection > &existingLayerIntersections, std::vector< MuonLayerIntersection > &newLayerIntersections) const
Definition: MuonLayerAmbiguitySolverTool.cxx:211
PlotCalibFromCool.begin
begin
Definition: PlotCalibFromCool.py:94
AthCommonDataStore< AthCommonMsg< AlgTool > >::m_evtStore
StoreGateSvc_t m_evtStore
Pointer to StoreGate (event store by default)
Definition: AthCommonDataStore.h:390
AthCommonDataStore< AthCommonMsg< AlgTool > >::m_vhka
std::vector< SG::VarHandleKeyArray * > m_vhka
Definition: AthCommonDataStore.h:398
AthCommonMsg< AlgTool >::msgLvl
bool msgLvl(const MSG::Level lvl) const
Definition: AthCommonMsg.h:30
Muon::MuonStationIndex::BI
@ BI
Definition: MuonStationIndex.h:25
vec
std::vector< size_t > vec
Definition: CombinationsGeneratorTest.cxx:12
Muon::MuonLayerAmbiguitySolverTool::m_maxSeeds
Gaudi::Property< unsigned int > m_maxSeeds
Definition: MuonLayerAmbiguitySolverTool.h:60
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
Muon::MuonLayerAmbiguitySolverTool::getNextSeed
bool getNextSeed(const std::vector< std::vector< MuonLayerIntersection > > &muonLayerDataHashVec, std::set< const MuonSegment * > &usedSegments, std::vector< MuonStationIndex::StIndex > &inverseSeedLayerOrder, MuonLayerIntersection &layerIntersection) const
Definition: MuonLayerAmbiguitySolverTool.cxx:138
xAOD::MuonSegment
MuonSegment_v1 MuonSegment
Reference the current persistent version:
Definition: Event/xAOD/xAODMuon/xAODMuon/MuonSegment.h:13
empty
bool empty(TH1 *h)
Definition: computils.cxx:295
std::stable_sort
void stable_sort(std::reverse_iterator< DataModel_detail::iterator< DVL > > beg, std::reverse_iterator< DataModel_detail::iterator< DVL > > end, Compare comp)
Specialization of stable_sort for DataVector/List.
Definition: DVL_algorithms.h:711
mergePhysValFiles.end
end
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:93
SG::VarHandleKeyArray::setOwner
virtual void setOwner(IDataHandleHolder *o)=0
IDTPMcnv.htype
htype
Definition: IDTPMcnv.py:29
python.utils.AtlRunQueryDQUtils.p
p
Definition: AtlRunQueryDQUtils.py:210
AthCommonDataStore
Definition: AthCommonDataStore.h:52
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
Prompt::getDistance
double getDistance(const xAOD::Vertex *vtx1, const xAOD::Vertex *vtx2)
Definition: PromptUtils.cxx:41
Muon::MuonStationIndex::BM
@ BM
Definition: MuonStationIndex.h:25
endmsg
#define endmsg
Definition: AnalysisConfig_Ntuple.cxx:63
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
Muon::MuonStationIndex::EI
@ EI
Definition: MuonStationIndex.h:26
TRT::Hit::layer
@ layer
Definition: HitInfo.h:79
test_pyathena.parent
parent
Definition: test_pyathena.py:15
AnalysisUtils::copy_if
Out copy_if(In first, const In &last, Out res, const Pred &p)
Definition: IFilterUtils.h:30
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
Trk::FitQuality
Class to represent and store fit qualities from track reconstruction in terms of and number of degre...
Definition: FitQuality.h:97
AthCommonDataStore< AthCommonMsg< AlgTool > >::m_detStore
StoreGateSvc_t m_detStore
Pointer to StoreGate (detector store by default)
Definition: AthCommonDataStore.h:393
Muon::MuonLayerAmbiguitySolverTool::match
bool match(const EventContext &ctx, const MuonCandidate &candidate, const MuonLayerIntersection &layerIntersection) const
Definition: MuonLayerAmbiguitySolverTool.cxx:129
AthAlgTool::AthAlgTool
AthAlgTool()
Default constructor:
SG::VarHandleKeyArray::renounce
virtual void renounce()=0
SG::HandleClassifier::type
std::conditional< std::is_base_of< SG::VarHandleKeyArray, T >::value, VarHandleKeyArrayType, type2 >::type type
Definition: HandleClassifier.h:54
Muon::MuonLayerAmbiguitySolverTool::extendCandidatesWithLayers
bool extendCandidatesWithLayers(const EventContext &ctx, std::vector< MuonCandidate > &candidates, const std::vector< std::vector< MuonLayerIntersection > > &muonLayerRecoDataHashVec, const std::vector< MuonStationIndex::StIndex > &inverseSeedLayerOrder) const
Definition: MuonLayerAmbiguitySolverTool.cxx:77
GetAllXsec.entry
list entry
Definition: GetAllXsec.py:132
merge_scale_histograms.doc
string doc
Definition: merge_scale_histograms.py:9
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:228
Muon::MuonStationIndex::StIndexMax
@ StIndexMax
Definition: MuonStationIndex.h:27
plotBeamSpotMon.b
b
Definition: plotBeamSpotMon.py:77
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
Muon::MuonLayerAmbiguitySolverTool::buildLayerVec
void buildLayerVec(const EventContext &ctx, const std::vector< MuonLayerRecoData > &allLayers, std::vector< std::vector< MuonLayerIntersection > > &muonLayerDataHashVec) const
Definition: MuonLayerAmbiguitySolverTool.cxx:167
a
TList * a
Definition: liststreamerinfos.cxx:10
h
Muon::MuonStationIndex::BO
@ BO
Definition: MuonStationIndex.h:25
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
DEBUG
#define DEBUG
Definition: page_access.h:11
AthCommonMsg< AlgTool >::msg
MsgStream & msg() const
Definition: AthCommonMsg.h:24
SG::VarHandleBase::vhKey
SG::VarHandleKey & vhKey()
Return a non-const reference to the HandleKey.
Definition: StoreGate/src/VarHandleBase.cxx:623
Trk::FitQuality::chiSquared
double chiSquared() const
returns the of the overall track fit
Definition: FitQuality.h:56
Muon::MuonStationIndex::StIndex
StIndex
enum to classify the different station layers in the muon spectrometer
Definition: MuonStationIndex.h:23
python.Bindings.keys
keys
Definition: Control/AthenaPython/python/Bindings.py:798
Trk::FitQuality::numberDoF
int numberDoF() const
returns the number of degrees of freedom of the overall track or vertex fit as integer
Definition: FitQuality.h:60
Muon::MuonLayerAmbiguitySolverTool::m_printer
PublicToolHandle< MuonEDMPrinterTool > m_printer
Definition: MuonLayerAmbiguitySolverTool.h:58
python.Constants.VERBOSE
int VERBOSE
Definition: Control/AthenaCommon/python/Constants.py:14
Muon::MuonLayerAmbiguitySolverTool::m_muonTrackBuilder
ToolHandle< IMuonSegmentTrackBuilder > m_muonTrackBuilder
Definition: MuonLayerAmbiguitySolverTool.h:56
Muon::MuonStationIndex::EE
@ EE
Definition: MuonStationIndex.h:26
Muon::IMuonSegmentTrackBuilder::PrepVec
std::vector< const Trk::PrepRawData * > PrepVec
Definition: IMuonSegmentTrackBuilder.h:26
AthCommonDataStore::declareGaudiProperty
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>
Definition: AthCommonDataStore.h:156
Muon::MuonLayerIntersection
Definition: MuonLayerIntersection.h:13
Muon::MuonStationIndex::EM
@ EM
Definition: MuonStationIndex.h:26
Muon::MuonLayerAmbiguitySolverTool::m_seedQualityThreshold
Gaudi::Property< int > m_seedQualityThreshold
Definition: MuonLayerAmbiguitySolverTool.h:61
fitman.k
k
Definition: fitman.py:528
NSWL1::PadTriggerAdapter::segment
Muon::NSW_PadTriggerSegment segment(const NSWL1::PadTrigger &data)
Definition: PadTriggerAdapter.cxx:5