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::MuonLayerSegmentFinderTool Class Reference

#include <MuonLayerSegmentFinderTool.h>

Inheritance diagram for Muon::MuonLayerSegmentFinderTool:
Collaboration diagram for Muon::MuonLayerSegmentFinderTool:

Public Member Functions

 MuonLayerSegmentFinderTool (const std::string &type, const std::string &name, const IInterface *parent)
 Default AlgTool functions. More...
 
virtual ~MuonLayerSegmentFinderTool ()=default
 
StatusCode initialize () override
 
void find (const EventContext &ctx, const MuonSystemExtension::Intersection &intersection, const MuonLayerPrepRawData &layerPrepRawData, std::vector< std::shared_ptr< const Muon::MuonSegment > > &segments) const override
 IMuonLayerSegmentFinderTool interface: find. More...
 
void findMdtSegmentsFromHough (const EventContext &ctx, const MuonSystemExtension::Intersection &intersection, std::vector< std::shared_ptr< const Muon::MuonSegment > > &segments) const override
 
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 findClusterSegments (const EventContext &ctx, const MuonSystemExtension::Intersection &intersection, const MuonLayerPrepRawData &layerPrepRawData, std::vector< std::shared_ptr< const Muon::MuonSegment > > &segments) const
 find segments from PRD clusters More...
 
void findCscSegments (const EventContext &ctx, const MuonLayerPrepRawData &layerPrepRawData, std::vector< std::shared_ptr< const Muon::MuonSegment > > &segments) const
 find csc segments More...
 
void findMdtSegments (const MuonSystemExtension::Intersection &intersection, const MuonLayerPrepRawData &layerPrepRawData, std::vector< std::shared_ptr< const Muon::MuonSegment > > &segments) const
 find mdt segments from hits in the layer More...
 
void findMdtSegments (const MuonSystemExtension::Intersection &intersection, const std::vector< const MdtDriftCircleOnTrack * > &mdts, const std::vector< const MuonClusterOnTrack * > &clusters, std::vector< std::shared_ptr< const Muon::MuonSegment > > &segments) const
 find mdt segments main routine 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...
 

Private Attributes

ServiceHandle< Muon::IMuonIdHelperSvcm_idHelperSvc
 
PublicToolHandle< MuonEDMPrinterToolm_printer
 
ToolHandle< IMuonPRDSelectionToolm_muonPRDSelectionTool
 
ToolHandle< IMuonSegmentMakerm_segmentMaker
 
ToolHandle< ICscSegmentFinderm_csc2dSegmentFinder
 
ToolHandle< ICscSegmentFinderm_csc4dSegmentFinder
 
ToolHandle< IMuonNSWSegmentFinderToolm_clusterSegMakerNSW
 
ToolHandle< Muon::IMuonLayerSegmentMatchingToolm_segmentMatchingTool
 
SG::ReadHandleKey< Muon::HoughDataPerSectorVecm_houghDataPerSectorVecKey
 Use the hough data to find sectors in the speectrometer traversed by a muon. More...
 
SG::ReadHandleKey< Trk::SegmentCollectionm_patternSegs {this,"InSegmentContainer","TrackMuonSegments"}
 Do not rebuild the segments if the segment is already built upstream. More...
 
const Muon::MuonSectorMapping m_muonSectorMapping {}
 
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 34 of file MuonLayerSegmentFinderTool.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

◆ MuonLayerSegmentFinderTool()

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

Default AlgTool functions.

Definition at line 22 of file MuonLayerSegmentFinderTool.cxx.

22  :
24  declareInterface<IMuonLayerSegmentFinderTool>(this);
25  }

◆ ~MuonLayerSegmentFinderTool()

virtual Muon::MuonLayerSegmentFinderTool::~MuonLayerSegmentFinderTool ( )
virtualdefault

Member Function Documentation

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

◆ 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

◆ find()

void Muon::MuonLayerSegmentFinderTool::find ( const EventContext &  ctx,
const MuonSystemExtension::Intersection intersection,
const MuonLayerPrepRawData layerPrepRawData,
std::vector< std::shared_ptr< const Muon::MuonSegment > > &  segments 
) const
overridevirtual

IMuonLayerSegmentFinderTool interface: find.

Implements Muon::IMuonLayerSegmentFinderTool.

Definition at line 42 of file MuonLayerSegmentFinderTool.cxx.

43  {
45  " Running segment finding in sector "
46  << intersection.layerSurface.sector << " region " << MuonStationIndex::regionName(intersection.layerSurface.regionIndex)
47  << " layer " << MuonStationIndex::layerName(intersection.layerSurface.layerIndex) << " intersection position: r "
48  << intersection.trackParameters->position().perp() << " z " << intersection.trackParameters->position().z() << " locX "
49  << intersection.trackParameters->parameters()[Trk::locX] << " locY " << intersection.trackParameters->parameters()[Trk::locY]
50  << " phi " << intersection.trackParameters->position().phi());
51 
52  // run cluster hit based segment finding on PRDs
53  findClusterSegments(ctx, intersection, layerPrepRawData, segments);
54  ATH_MSG_VERBOSE(" findClusterSegments " << segments.size());
55 
56  // run standard MDT/Trigger hit segment finding either from Hough or hits
57  findMdtSegments(intersection, layerPrepRawData, segments);
58  }

◆ findClusterSegments()

void Muon::MuonLayerSegmentFinderTool::findClusterSegments ( const EventContext &  ctx,
const MuonSystemExtension::Intersection intersection,
const MuonLayerPrepRawData layerPrepRawData,
std::vector< std::shared_ptr< const Muon::MuonSegment > > &  segments 
) const
private

find segments from PRD clusters

Find whether the segment has some hits that are needed

Nope

Segment is compatible

If no NSW was reconstructed thus far there's no hope that we'll do it later as well. Give up Lasst, die Ihr eintretet, alle Hoffnung fahren!

Definition at line 97 of file MuonLayerSegmentFinderTool.cxx.

99  {
100  // if there are CSC hits run CSC segment finding
101  if (!layerPrepRawData.cscs.empty()) findCscSegments(ctx, layerPrepRawData, segments);
102 
103  // No need to call the NSW segment finding
104  if (layerPrepRawData.mms.empty() && layerPrepRawData.stgcs.empty()) return;
105 
106  // NSW segment finding
107  MuonLayerROTs layerROTs;
108  if (!m_muonPRDSelectionTool->calibrateAndSelect(intersection, layerPrepRawData, layerROTs)) {
109  ATH_MSG_WARNING("Failed to calibrate and select layer data");
110  return;
111  }
112 
113  ATH_MSG_DEBUG(" MM prds " << layerPrepRawData.mms.size() << " STGC prds " << layerPrepRawData.stgcs.size());
114 
115  // get STGC and MM clusters
116  const std::vector<const MuonClusterOnTrack*>& clustersSTGC = layerROTs.getClusters(MuonStationIndex::STGC);
117  const std::vector<const MuonClusterOnTrack*>& clustersMM = layerROTs.getClusters(MuonStationIndex::MM);
118 
120  NSWSegmentCache cache{};
121 
122 
123  if (!clustersSTGC.empty()) {
124  ATH_MSG_DEBUG(" STGC clusters " << clustersSTGC.size());
125  std::transform(clustersSTGC.begin(), clustersSTGC.end(), std::back_inserter(cache.inputClust),
126  [](const Muon::MuonClusterOnTrack* cl){ return std::unique_ptr<Muon::MuonClusterOnTrack>{cl->clone()};});
127 
128  }
129  if (!clustersMM.empty()) {
130  ATH_MSG_DEBUG(" MM clusters " << clustersMM.size());
131  std::transform(clustersMM.begin(), clustersMM.end(), std::back_inserter(cache.inputClust),
132  [](const Muon::MuonClusterOnTrack* cl){ return std::unique_ptr<Muon::MuonClusterOnTrack>{cl->clone()};});
133  }
134  if (cache.inputClust.empty()) return;
135 
136 
137  if (!m_patternSegs.empty()) {
138  std::set<Identifier> needed_rios{};
139  for (std::unique_ptr<const MuonClusterOnTrack>& clus : cache.inputClust) {
140  needed_rios.insert(clus->identify());
141  }
143  for (const Trk::Segment *trk_seg : *input_segs) {
144  const MuonSegment *seg = dynamic_cast<const Muon::MuonSegment *>(trk_seg);
145  // Initial check that the segments are on the same detector side
146  if (intersection.trackParameters->associatedSurface().center().z() * seg->globalPosition().z() < 0) continue;
147 
149  bool hasNSW{false};
150  for (size_t n = 0; !hasNSW && n < seg->numberOfContainedROTs(); ++n) {
151  const MuonClusterOnTrack *clus = dynamic_cast<const MuonClusterOnTrack *>(seg->rioOnTrack(n));
152  hasNSW |= (clus && needed_rios.count(clus->identify()));
153  }
155  if (!hasNSW) continue;
157  if (m_segmentMatchingTool->match(ctx, intersection, *seg)) segments.emplace_back(seg->clone());
158  }
161  return;
162  }
163 
164  m_clusterSegMakerNSW->find(ctx, cache);
165 
166  for (std::unique_ptr<MuonSegment>& seg : cache.constructedSegs) {
167  ATH_MSG_DEBUG(" NSW segment " << m_printer->print(*seg));
168  segments.emplace_back(std::move(seg));
169  }
170  }

◆ findCscSegments()

void Muon::MuonLayerSegmentFinderTool::findCscSegments ( const EventContext &  ctx,
const MuonLayerPrepRawData layerPrepRawData,
std::vector< std::shared_ptr< const Muon::MuonSegment > > &  segments 
) const
private

find csc segments

Definition at line 172 of file MuonLayerSegmentFinderTool.cxx.

173  {
174  // run 2d segment finder
175  std::unique_ptr<MuonSegmentCombinationCollection> combi2D = m_csc2dSegmentFinder->find(layerPrepRawData.cscs, ctx);
176  if (!combi2D) return;
177 
178  // run 4d segment finder
179  std::unique_ptr<MuonSegmentCombinationCollection> combi4D = m_csc4dSegmentFinder->find(*combi2D, ctx);
180  if (!combi4D) return;
181 
182  // extract segments and clean-up memory
183  for (auto com : *combi4D) {
184  const Muon::MuonSegmentCombination& combi = *com;
185  unsigned int nstations = combi.numberOfStations();
186 
187  // loop over chambers in combi and extract segments
188  for (unsigned int i = 0; i < nstations; ++i) {
189  // loop over segments in station
191 
192  // check if not empty
193  if (!segs || segs->empty()) continue;
194  // loop over new segments, copy them into collection
195  for (std::unique_ptr<MuonSegment>& seg_it : *segs) {
196  ATH_MSG_DEBUG(" " << m_printer->print(*seg_it));
197  segments.emplace_back(std::move(seg_it));
198  }
199  }
200  }
201  }

◆ findMdtSegments() [1/2]

void Muon::MuonLayerSegmentFinderTool::findMdtSegments ( const MuonSystemExtension::Intersection intersection,
const MuonLayerPrepRawData layerPrepRawData,
std::vector< std::shared_ptr< const Muon::MuonSegment > > &  segments 
) const
private

find mdt segments from hits in the layer

◆ findMdtSegments() [2/2]

void Muon::MuonLayerSegmentFinderTool::findMdtSegments ( const MuonSystemExtension::Intersection intersection,
const std::vector< const MdtDriftCircleOnTrack * > &  mdts,
const std::vector< const MuonClusterOnTrack * > &  clusters,
std::vector< std::shared_ptr< const Muon::MuonSegment > > &  segments 
) const
private

find mdt segments main routine

◆ findMdtSegmentsFromHough()

void Muon::MuonLayerSegmentFinderTool::findMdtSegmentsFromHough ( const EventContext &  ctx,
const MuonSystemExtension::Intersection intersection,
std::vector< std::shared_ptr< const Muon::MuonSegment > > &  segments 
) const
overridevirtual

Implements Muon::IMuonLayerSegmentFinderTool.

Definition at line 202 of file MuonLayerSegmentFinderTool.cxx.

204  {
205 
206  if(m_houghDataPerSectorVecKey.empty()) return;
207  unsigned int nprevSegments = segments.size(); // keep track of what is already there
208  int sector = intersection.layerSurface.sector;
209  MuonStationIndex::DetectorRegionIndex regionIndex = intersection.layerSurface.regionIndex;
210  MuonStationIndex::LayerIndex layerIndex = intersection.layerSurface.layerIndex;
211 
212  // get hough data
214  if (!houghDataPerSectorVec.isValid()) {
215  ATH_MSG_ERROR("Hough data per sector vector not found");
216  return;
217  }
218 
219  // sanity check
220  if (static_cast<int>(houghDataPerSectorVec->vec.size()) <= sector - 1) {
221  ATH_MSG_WARNING(" MuonLayerHoughTool::HoughDataPerSectorVec smaller than sector "
222  << houghDataPerSectorVec->vec.size() << " sector " << sector);
223  return;
224  }
225 
226  // get hough maxima in the layer
227  unsigned int sectorLayerHash = MuonStationIndex::sectorLayerHash(regionIndex, layerIndex);
228  const MuonLayerHoughTool::HoughDataPerSector& houghDataPerSector = houghDataPerSectorVec->vec[sector - 1];
229  ATH_MSG_DEBUG(" findMdtSegmentsFromHough: sector "
230  << sector << " " << MuonStationIndex::regionName(regionIndex) << " "
231  << MuonStationIndex::layerName(layerIndex) << " sector hash " << sectorLayerHash << " houghData "
232  << houghDataPerSectorVec->vec.size() << " " << houghDataPerSector.maxVec.size());
233 
234  // sanity check
235  if (houghDataPerSector.maxVec.size() <= sectorLayerHash) {
236  ATH_MSG_WARNING(" houghDataPerSector.maxVec.size() smaller than hash " << houghDataPerSector.maxVec.size()
237  << " hash " << sectorLayerHash);
238  return;
239  }
240  const MuonLayerHoughTool::MaximumVec& maxVec = houghDataPerSector.maxVec[sectorLayerHash];
241 
242  // get local coordinates in the layer frame
243  bool barrelLike = intersection.layerSurface.regionIndex == MuonStationIndex::Barrel;
244 
245  float phi = intersection.trackParameters->position().phi();
246 
247  // in the endcaps take the r in the sector frame from the local position of the extrapolation
248  float r = barrelLike ? m_muonSectorMapping.transformRToSector(intersection.trackParameters->position().perp(), phi,
249  intersection.layerSurface.sector, true)
250  : intersection.trackParameters->parameters()[Trk::locX];
251 
252  float z = intersection.trackParameters->position().z();
253  float errx = Amg::error(*intersection.trackParameters->covariance(), Trk::locX);
254  float x = barrelLike ? r : z;
255  float y = barrelLike ? z : r;
256  float theta = std::atan2(x, y);
257 
258  ATH_MSG_DEBUG(" Got Hough maxima " << maxVec.size() << " extrapolated position in Hough space (" << x << "," << y
259  << ") error " << errx << " "
260  << " angle " << theta);
261 
262  // lambda to handle calibration and selection of MDTs
263  std::vector<std::unique_ptr<const Trk::MeasurementBase>> garbage;
264  auto handleMdt = [this, intersection, &garbage](const MdtPrepData& prd, std::vector<const MdtDriftCircleOnTrack*>& mdts) {
265  const MdtDriftCircleOnTrack* mdt = m_muonPRDSelectionTool->calibrateAndSelect(intersection, prd);
266  if (!mdt) return;
267  mdts.push_back(mdt);
268  garbage.emplace_back(mdt);
269  };
270 
271 
272  // lambda to handle calibration and selection of clusters
273  auto handleCluster = [this, intersection,&garbage](const MuonCluster& prd,
274  std::vector<const MuonClusterOnTrack*>& clusters) {
275  const MuonClusterOnTrack* cluster = m_muonPRDSelectionTool->calibrateAndSelect(intersection, prd);
276  if (!cluster) return;
277  clusters.push_back(cluster);
278  garbage.emplace_back(cluster);
279  };
280 
281 
282  // loop over maxima and associate them to the extrapolation
283  MuonLayerHoughTool::MaximumVec::const_iterator mit = maxVec.begin();
284  MuonLayerHoughTool::MaximumVec::const_iterator mit_end = maxVec.end();
285  for (; mit != mit_end; ++mit) {
286  const MuonHough::MuonLayerHough::Maximum& maximum = **mit;
287  float residual = maximum.pos - y;
288  float residualTheta = maximum.theta - theta;
289  float refPos = (maximum.hough != nullptr) ? maximum.hough->m_descriptor.referencePosition : 0;
290  float maxwidth = (maximum.binposmax - maximum.binposmin);
291  if (maximum.hough) maxwidth *= maximum.hough->m_binsize;
292  float pull = residual / std::hypot(errx , maxwidth * OneOverSqrt12);
293 
294 
295  ATH_MSG_DEBUG(" Hough maximum " << maximum.max << " position (" << refPos << "," << maximum.pos
296  << ") residual " << residual << " pull " << pull << " angle " << maximum.theta
297  << " residual " << residualTheta);
298 
299  // select maximum
300  if (std::abs(pull) > 5) continue;
301 
302  // loop over hits in maximum and add them to the hit list
303  std::vector<const MdtDriftCircleOnTrack*> mdts;
304  std::vector<const MuonClusterOnTrack*> clusters;
305  for (const auto& hit : maximum.hits) {
306 
307  // treat the case that the hit is a composite TGC hit
308  if (hit->tgc) {
309  for (const auto& prd : hit->tgc->etaCluster) {
310  handleCluster(*prd, clusters);
311  }
312  } else if (hit->prd) {
313  Identifier id = hit->prd->identify();
314  if (m_idHelperSvc->isMdt(id))
315  handleMdt(static_cast<const MdtPrepData&>(*hit->prd), mdts);
316  else
317  handleCluster(static_cast<const MuonCluster&>(*hit->prd), clusters);
318  }
319  }
320 
321  // get phi hits
322  const MuonLayerHoughTool::PhiMaximumVec& phiMaxVec =
323  houghDataPerSector.phiMaxVec[intersection.layerSurface.regionIndex];
324  ATH_MSG_DEBUG(" Got Phi Hough maxima " << phiMaxVec.size() << " phi " << phi);
325 
326  // loop over maxima and associate them to the extrapolation
327  MuonLayerHoughTool::PhiMaximumVec::const_iterator pit = phiMaxVec.begin();
328  MuonLayerHoughTool::PhiMaximumVec::const_iterator pit_end = phiMaxVec.end();
329  for (; pit != pit_end; ++pit) {
330  const MuonHough::MuonPhiLayerHough::Maximum& maximum = **pit;
331  const float residual = deltaPhi( maximum.pos, phi);
332 
333  ATH_MSG_DEBUG(" Phi Hough maximum " << maximum.max << " phi " << maximum.pos << ") angle "
334  << maximum.pos << " residual " << residual);
335 
336  for (const auto& phi_hit : maximum.hits) {
337  // treat the case that the hit is a composite TGC hit
338  if (phi_hit->tgc) {
339  Identifier id = phi_hit->tgc->phiCluster.front()->identify();
340  if (m_idHelperSvc->layerIndex(id) != intersection.layerSurface.layerIndex) continue;
341  for (const auto& prd : phi_hit->tgc->phiCluster) handleCluster(*prd, clusters);
342  } else if (phi_hit->prd) {
343  Identifier id = phi_hit->prd->identify();
344  if (m_idHelperSvc->layerIndex(id) != intersection.layerSurface.layerIndex) continue;
345  handleCluster(static_cast<const MuonCluster&>(*phi_hit->prd), clusters);
346  }
347  }
348  }
349 
350  // call segment finder
351  ATH_MSG_DEBUG(" Got hits: mdts " << mdts.size() << " clusters " << clusters.size());
352  findMdtSegments(intersection, mdts, clusters, segments);
353 
354  // clean-up memory
355  garbage.clear();
356  ATH_MSG_DEBUG(" Done maximum: new segments " << segments.size() - nprevSegments);
357  }
358  ATH_MSG_DEBUG(" Done with layer: new segments " << segments.size() - nprevSegments);
359  }

◆ initialize()

StatusCode Muon::MuonLayerSegmentFinderTool::initialize ( )
override

Definition at line 27 of file MuonLayerSegmentFinderTool.cxx.

27  {
28  ATH_CHECK(m_idHelperSvc.retrieve());
29  ATH_CHECK(m_printer.retrieve());
31  ATH_CHECK(m_segmentMaker.retrieve());
32  ATH_CHECK(m_csc2dSegmentFinder.retrieve(DisableTool{!m_idHelperSvc->hasCSC() || m_csc2dSegmentFinder.empty()}));
33  ATH_CHECK(m_csc4dSegmentFinder.retrieve(DisableTool{!m_idHelperSvc->hasCSC() || m_csc4dSegmentFinder.empty()}));
34  ATH_CHECK(m_patternSegs.initialize(!m_patternSegs.empty()));
35  ATH_CHECK(m_segmentMatchingTool.retrieve(DisableTool{m_patternSegs.empty()}));
37  ATH_CHECK(m_clusterSegMakerNSW.retrieve(DisableTool{m_clusterSegMakerNSW.empty()|| !m_patternSegs.empty()}));
38 
39  return StatusCode::SUCCESS;
40  }

◆ 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::IMuonLayerSegmentFinderTool::interfaceID ( )
inlinestaticinherited

IAlgTool interface.

Definition at line 22 of file IMuonLayerSegmentFinderTool.h.

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

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

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

ToolHandle<IMuonNSWSegmentFinderTool> Muon::MuonLayerSegmentFinderTool::m_clusterSegMakerNSW
private
Initial value:
{
this,
"NSWMuonClusterSegmentFinderTool",
"",
}

Definition at line 100 of file MuonLayerSegmentFinderTool.h.

◆ m_csc2dSegmentFinder

ToolHandle<ICscSegmentFinder> Muon::MuonLayerSegmentFinderTool::m_csc2dSegmentFinder
private
Initial value:
{
this,
"Csc2DSegmentMaker",
"Csc2dSegmentMaker/Csc2dSegmentMaker",
}

Definition at line 90 of file MuonLayerSegmentFinderTool.h.

◆ m_csc4dSegmentFinder

ToolHandle<ICscSegmentFinder> Muon::MuonLayerSegmentFinderTool::m_csc4dSegmentFinder
private
Initial value:
{
this,
"Csc4DSegmentMaker",
"Csc4dSegmentMaker/Csc4dSegmentMaker",
}

Definition at line 95 of file MuonLayerSegmentFinderTool.h.

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

SG::ReadHandleKey<Muon::HoughDataPerSectorVec> Muon::MuonLayerSegmentFinderTool::m_houghDataPerSectorVecKey
private
Initial value:
{this, "HoughKey",
"", "HoughDataPerSectorVec key"}

Use the hough data to find sectors in the speectrometer traversed by a muon.

Definition at line 110 of file MuonLayerSegmentFinderTool.h.

◆ m_idHelperSvc

ServiceHandle<Muon::IMuonIdHelperSvc> Muon::MuonLayerSegmentFinderTool::m_idHelperSvc
private
Initial value:
{
this,
"MuonIdHelperSvc",
"Muon::MuonIdHelperSvc/MuonIdHelperSvc",
}

Definition at line 69 of file MuonLayerSegmentFinderTool.h.

◆ m_muonPRDSelectionTool

ToolHandle<IMuonPRDSelectionTool> Muon::MuonLayerSegmentFinderTool::m_muonPRDSelectionTool
private
Initial value:
{
this,
"MuonPRDSelectionTool",
"Muon::MuonPRDSelectionTool/MuonPRDSelectionTool",
}

Definition at line 80 of file MuonLayerSegmentFinderTool.h.

◆ m_muonSectorMapping

const Muon::MuonSectorMapping Muon::MuonLayerSegmentFinderTool::m_muonSectorMapping {}
private

Definition at line 116 of file MuonLayerSegmentFinderTool.h.

◆ m_patternSegs

SG::ReadHandleKey<Trk::SegmentCollection> Muon::MuonLayerSegmentFinderTool::m_patternSegs {this,"InSegmentContainer","TrackMuonSegments"}
private

Do not rebuild the segments if the segment is already built upstream.

Definition at line 114 of file MuonLayerSegmentFinderTool.h.

◆ m_printer

PublicToolHandle<MuonEDMPrinterTool> Muon::MuonLayerSegmentFinderTool::m_printer
private
Initial value:
{
this,
"MuonEDMPrinterTool",
"Muon::MuonEDMPrinterTool/MuonEDMPrinterTool",
}

Definition at line 75 of file MuonLayerSegmentFinderTool.h.

◆ m_segmentMaker

ToolHandle<IMuonSegmentMaker> Muon::MuonLayerSegmentFinderTool::m_segmentMaker
private
Initial value:
{
this,
"SegmentMaker",
"Muon::DCMathSegmentMaker/DCMathSegmentMaker",
}

Definition at line 85 of file MuonLayerSegmentFinderTool.h.

◆ m_segmentMatchingTool

ToolHandle<Muon::IMuonLayerSegmentMatchingTool> Muon::MuonLayerSegmentFinderTool::m_segmentMatchingTool
private
Initial value:
{
this, "MuonLayerSegmentMatchingTool", "Muon::MuonLayerSegmentMatchingTool/MuonLayerSegmentMatchingTool"}

Definition at line 106 of file MuonLayerSegmentFinderTool.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:
beamspotman.r
def r
Definition: beamspotman.py:676
Trk::PrepRawDataType::MdtPrepData
@ MdtPrepData
Muon::MuonSegmentCombination
Definition: MuonSegmentCombination.h:30
MuonHough::MuonPhiLayerHough::Maximum::pos
float pos
Definition: MuonPhiLayerHough.h:27
python.PerfMonSerializer.p
def p
Definition: PerfMonSerializer.py:743
Muon::MuonLayerSegmentFinderTool::m_csc4dSegmentFinder
ToolHandle< ICscSegmentFinder > m_csc4dSegmentFinder
Definition: MuonLayerSegmentFinderTool.h:95
phi
Scalar phi() const
phi method
Definition: AmgMatrixBasePlugin.h:64
Muon::MuonLayerSegmentFinderTool::m_patternSegs
SG::ReadHandleKey< Trk::SegmentCollection > m_patternSegs
Do not rebuild the segments if the segment is already built upstream.
Definition: MuonLayerSegmentFinderTool.h:114
Trk::locX
@ locX
Definition: ParamDefs.h:43
Trk::locY
@ locY
local cartesian
Definition: ParamDefs.h:44
Muon::MuonSectorMapping::transformRToSector
double transformRToSector(double r, double phi, int sector, bool toSector=true) const
expresses a radial position from and to the sector coordinate frame, the phi position should always b...
Definition: MuonSectorMapping.h:136
MuonHough::MuonLayerHough::m_binsize
float m_binsize
Definition: MuonLayerHough.h:168
ClusterSeg::residual
@ residual
Definition: ClusterNtuple.h:20
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
AthCommonDataStore::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
xAOD::deltaPhi
setSAddress setEtaMS setDirPhiMS setDirZMS setBarrelRadius setEndcapAlpha setEndcapRadius setInterceptInner setEtaMap setEtaBin setIsTgcFailure setDeltaPt deltaPhi
Definition: L2StandAloneMuon_v1.cxx:160
Muon::MuonLayerSegmentFinderTool::m_clusterSegMakerNSW
ToolHandle< IMuonNSWSegmentFinderTool > m_clusterSegMakerNSW
Definition: MuonLayerSegmentFinderTool.h:100
Muon::MuonLayerSegmentFinderTool::m_idHelperSvc
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
Definition: MuonLayerSegmentFinderTool.h:69
MuonHough::MuonLayerHough::m_descriptor
RegionDescriptor m_descriptor
Definition: MuonLayerHough.h:179
Muon::MuonLayerSegmentFinderTool::m_segmentMaker
ToolHandle< IMuonSegmentMaker > m_segmentMaker
Definition: MuonLayerSegmentFinderTool.h:85
Muon::MuonLayerSegmentFinderTool::findMdtSegments
void findMdtSegments(const MuonSystemExtension::Intersection &intersection, const MuonLayerPrepRawData &layerPrepRawData, std::vector< std::shared_ptr< const Muon::MuonSegment > > &segments) const
find mdt segments from hits in the layer
theta
Scalar theta() const
theta method
Definition: AmgMatrixBasePlugin.h:71
Muon::MuonStationIndex::LayerIndex
LayerIndex
enum to classify the different layers in the muon spectrometer
Definition: MuonStationIndex.h:38
Muon::MuonStationIndex::sectorLayerHash
static unsigned int sectorLayerHash(DetectorRegionIndex detectorRegionIndex, LayerIndex layerIndex)
create a hash out of region and layer
Definition: MuonStationIndex.cxx:226
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
Muon::MuonSegmentCombination::stationSegments
SegmentVec * stationSegments(unsigned int index) const
Access to segments in a given station.
Definition: MuonSegmentCombination.h:114
Muon::MuonLayerSegmentFinderTool::m_muonSectorMapping
const Muon::MuonSectorMapping m_muonSectorMapping
Definition: MuonLayerSegmentFinderTool.h:116
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
MuonHough::RegionDescriptor::referencePosition
float referencePosition
Definition: MuonLayerHough.h:43
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
SG::VarHandleKey::empty
bool empty() const
Test if the key is blank.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:150
Muon::MuonStationIndex::MM
@ MM
Definition: MuonStationIndex.h:56
x
#define x
intersection
std::vector< std::string > intersection(std::vector< std::string > &v1, std::vector< std::string > &v2)
Definition: compareFlatTrees.cxx:25
xAOD::MuonSegment
MuonSegment_v1 MuonSegment
Reference the current persistent version:
Definition: Event/xAOD/xAODMuon/xAODMuon/MuonSegment.h:13
SG::VarHandleKeyArray::setOwner
virtual void setOwner(IDataHandleHolder *o)=0
MuonHough::MuonLayerHough::Maximum::binposmin
int binposmin
Definition: MuonLayerHough.h:68
MuonHough::MuonLayerHough::Maximum
struct representing the maximum in the hough space
Definition: MuonLayerHough.h:56
Muon::MuonLayerHoughTool::MaximumVec
HoughDataPerSec::MaximumVec MaximumVec
Definition: MuonLayerHoughTool.h:64
Muon::MuonStationIndex::regionName
static const std::string & regionName(DetectorRegionIndex index)
convert DetectorRegionIndex into a string
Definition: MuonStationIndex.cxx:176
MuonHough::MuonLayerHough::Maximum::theta
float theta
Definition: MuonLayerHough.h:61
AthCommonDataStore
Definition: AthCommonDataStore.h:52
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
Muon::MuonLayerSegmentFinderTool::findClusterSegments
void findClusterSegments(const EventContext &ctx, const MuonSystemExtension::Intersection &intersection, const MuonLayerPrepRawData &layerPrepRawData, std::vector< std::shared_ptr< const Muon::MuonSegment > > &segments) const
find segments from PRD clusters
Definition: MuonLayerSegmentFinderTool.cxx:97
MuonHough::MuonLayerHough::Maximum::max
float max
Definition: MuonLayerHough.h:59
Muon::MuonLayerSegmentFinderTool::m_muonPRDSelectionTool
ToolHandle< IMuonPRDSelectionTool > m_muonPRDSelectionTool
Definition: MuonLayerSegmentFinderTool.h:80
lumiFormat.i
int i
Definition: lumiFormat.py:92
z
#define z
beamspotman.n
n
Definition: beamspotman.py:731
Muon::MuonStationIndex::STGC
@ STGC
Definition: MuonStationIndex.h:56
MuonHough::MuonPhiLayerHough::Maximum
Definition: MuonPhiLayerHough.h:23
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
Muon::MuonLayerSegmentFinderTool::m_houghDataPerSectorVecKey
SG::ReadHandleKey< Muon::HoughDataPerSectorVec > m_houghDataPerSectorVecKey
Use the hough data to find sectors in the speectrometer traversed by a muon.
Definition: MuonLayerSegmentFinderTool.h:110
Muon::MuonStationIndex::Barrel
@ Barrel
Definition: MuonStationIndex.h:49
MuonHough::MuonPhiLayerHough::Maximum::hits
PhiHitVec hits
Definition: MuonPhiLayerHough.h:35
Trk::Segment
Definition: TrkEvent/TrkSegment/TrkSegment/Segment.h:56
Amg::transform
Amg::Vector3D transform(Amg::Vector3D &v, Amg::Transform3D &tr)
Transform a point from a Trasformation3D.
Definition: GeoPrimitivesHelpers.h:156
test_pyathena.parent
parent
Definition: test_pyathena.py:15
Muon::MuonLayerSegmentFinderTool::findCscSegments
void findCscSegments(const EventContext &ctx, const MuonLayerPrepRawData &layerPrepRawData, std::vector< std::shared_ptr< const Muon::MuonSegment > > &segments) const
find csc segments
Definition: MuonLayerSegmentFinderTool.cxx:172
python.StandardJetMods.pull
pull
Definition: StandardJetMods.py:264
Muon::MuonLayerHoughTool::PhiMaximumVec
HoughDataPerSec::PhiMaximumVec PhiMaximumVec
Definition: MuonLayerHoughTool.h:65
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
Muon::MuonLayerSegmentFinderTool::m_printer
PublicToolHandle< MuonEDMPrinterTool > m_printer
Definition: MuonLayerSegmentFinderTool.h:75
Muon::MuonStationIndex::layerName
static const std::string & layerName(LayerIndex index)
convert LayerIndex into a string
Definition: MuonStationIndex.cxx:192
AthCommonDataStore< AthCommonMsg< AlgTool > >::m_detStore
StoreGateSvc_t m_detStore
Pointer to StoreGate (detector store by default)
Definition: AthCommonDataStore.h:393
SG::VarHandleKey::initialize
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:103
MuonHough::MuonLayerHough::Maximum::hough
const MuonLayerHough * hough
Definition: MuonLayerHough.h:75
AthAlgTool::AthAlgTool
AthAlgTool()
Default constructor:
MuonHough::MuonPhiLayerHough::Maximum::max
float max
Definition: MuonPhiLayerHough.h:26
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::MuonStationIndex::DetectorRegionIndex
DetectorRegionIndex
enum to classify the different layers in the muon spectrometer
Definition: MuonStationIndex.h:47
merge_scale_histograms.doc
string doc
Definition: merge_scale_histograms.py:9
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:192
Amg::error
double error(const Amg::MatrixX &mat, int index)
return diagonal error of the matrix caller should ensure the matrix is symmetric and the index is in ...
Definition: EventPrimitivesHelpers.h:40
MuonHough::MuonLayerHough::Maximum::pos
float pos
Definition: MuonLayerHough.h:60
MuonCluster
Definition: Trigger/TrigAlgorithms/TrigLongLivedParticles/src/MuonCluster.h:46
MuonHough::MuonLayerHough::Maximum::hits
HitVec hits
Definition: MuonLayerHough.h:73
Muon::MuonLayerHoughTool::HoughDataPerSector
HoughDataPerSec HoughDataPerSector
Definition: MuonLayerHoughTool.h:70
a
TList * a
Definition: liststreamerinfos.cxx:10
y
#define y
h
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
Muon::MuonSegmentCombination::SegmentVec
std::vector< std::unique_ptr< MuonSegment > > SegmentVec
Definition: MuonSegmentCombination.h:32
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
Muon::IMuonNSWSegmentFinderTool::SegmentMakingCache
Helper struct to parse the data around.
Definition: IMuonNSWSegmentFinderTool.h:31
RunTileMonitoring.clusters
clusters
Definition: RunTileMonitoring.py:133
SG::VarHandleBase::vhKey
SG::VarHandleKey & vhKey()
Return a non-const reference to the HandleKey.
Definition: StoreGate/src/VarHandleBase.cxx:616
declareProperty
#define declareProperty(n, p, h)
Definition: BaseFakeBkgTool.cxx:15
Muon::MuonLayerSegmentFinderTool::m_segmentMatchingTool
ToolHandle< Muon::IMuonLayerSegmentMatchingTool > m_segmentMatchingTool
Definition: MuonLayerSegmentFinderTool.h:106
python.Bindings.keys
keys
Definition: Control/AthenaPython/python/Bindings.py:790
Muon::MuonSegment
Definition: MuonSpectrometer/MuonReconstruction/MuonRecEvent/MuonSegment/MuonSegment/MuonSegment.h:45
Muon::MuonLayerSegmentFinderTool::m_csc2dSegmentFinder
ToolHandle< ICscSegmentFinder > m_csc2dSegmentFinder
Definition: MuonLayerSegmentFinderTool.h:90
MuonHough::MuonLayerHough::Maximum::binposmax
int binposmax
Definition: MuonLayerHough.h:69
dq_make_web_display.cl
cl
print [x.__class__ for x in toList(dqregion.getSubRegions()) ]
Definition: dq_make_web_display.py:26
Muon::MuonSegmentCombination::numberOfStations
unsigned int numberOfStations() const
Number of stations with segment.
Definition: MuonSegmentCombination.h:108
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::MuonClusterOnTrack
Base class for Muon cluster RIO_OnTracks.
Definition: MuonClusterOnTrack.h:34
fitman.k
k
Definition: fitman.py:528