ATLAS Offline Software
TrackHandleBase.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 
7 // //
8 // Header file for class TrackHandleBase //
9 // //
10 // Description: Base class for track handles. //
11 // //
12 // Author: Thomas H. Kittelmann (Thomas.Kittelmann@cern.ch) //
13 // Initial version: February 2008 //
14 // //
16 
17 #ifndef TRACKHANDLEBASE_H
18 #define TRACKHANDLEBASE_H
19 
21 
23 
24 // GeoModel
26 //
27 #include "GeoModelKernel/GeoVPhysVol.h"
28 
29 #include <QStringList>
30 #include <QTreeWidgetItem>
31 #include <vector>
32 #include <set>
33 #include <optional>
34 #include <QList>
35 #include <QFlags>
36 
37 
41 class TrackSysCommonData;
42 class SoMaterial;
43 class SoNode;
44 class TrackLODHandle;
45 
46 namespace Trk {
47  class Track;
48  class FitQuality;
49  class RIO_OnTrack;
50 }
51 
52 namespace MuonGM {
53  class MuonReadoutElement;
54 }
55 
57 public:
58 
59  static int numberOfInstances();
60 
62  virtual ~TrackHandleBase();
63 
64  TrackSysCommonData * common() const;
65 
66  void setVisible(bool);
67  bool visible() const { return m_visible; }
69  const std::set<GeoPVConstLink>& touchedMuonChambers() const;
70  void update3DObjects(bool invalidatePropagatedPoints = false, float maxR=0.0);
72  void updateMuonProjections();
73  void updateMaterial();
76  SoMaterial * currentMaterial() const { return m_currentmaterial; }
77 
78  QStringList baseInfo() const;
81  virtual QStringList clicked() const = 0;
82 
83  virtual Amg::Vector3D momentum() const { return Amg::Vector3D(0,0,0); }
84  virtual std::optional<Amg::Vector3D> startPoint() const;
85  virtual std::optional<Amg::Vector3D> endPoint() const;
86  virtual int pdgCode() const { return 0; }
87 
88  //Default implementation of the following two methods will based on
89  //pdgCode(). In the case of charge(), if it can't be determined
90  //based on pdgCode(), and attempt will be made by looking at the
91  //first track parameters charge (if a Trk::Track is
92  //provided). Override in case the charge/mass can be determined, but
93  //the pdg code not. (or if there is a faster way to get the charge than by constructing the Trk::Track first).
94  //
95  //NB: update: it is the calculateCharge() method which must be reimplemented for the charge!
96  double charge() const;//Returns unknown() in case of trouble.
97  virtual double mass() const;//Returns unknown() in case of trouble.
98 
99  bool hasCharge() const { return charge()!=unknown(); }
100  bool hasMass() const { return mass()!=unknown(); }
101 
102  static double unknown() { return -999.0; }
103 
104  virtual bool hasSubSystemHitInfo() const { return false; }
105  virtual bool isIDTrack() const ;
106  virtual unsigned getNPixelHits() const { return 0; }
107  virtual unsigned getNSCTHits() const { return 0; }
108  virtual unsigned getNTRTHits() const { return 0; }
109  virtual unsigned getNMuonHits() const { return (getNMDTHits()+getNRPCHits()+getNTGCHits()+getNCSCHits()+getNMMHits()+getNsTGCHits()); }
110  virtual unsigned getNMuonPhiHits() const { return 0; }
111  virtual unsigned getNMDTHits() const { return 0; }
112  virtual unsigned getNRPCHits() const { return 0; }
113  virtual unsigned getNTGCHits() const { return 0; }
114  virtual unsigned getNCSCHits() const { return 0; }
115  virtual unsigned getNMMHits() const { return 0; }
116  virtual unsigned getNsTGCHits() const { return 0; }
117  virtual unsigned getNMuonPrecisionHits() const { return getNMDTHits() + getNCSCHits(); } // This should really only count eta csc hits.
118  virtual const Trk::FitQuality* getFitQuality() const {return nullptr;}
120 
121  QList<AssociatedObjectHandleBase*> getVisibleMeasurements() const;
122  TrackCommonFlags::TSOSPartsFlags shownTSOSParts() const;
123  TrackCommonFlags::TSOSPartsFlags customColouredTSOSParts() const;
124 
125  std::vector< Amg::Vector3D > * hackGetPointsPropagated();
126 
127  virtual QString shortInfo() const { return QString("Not yet implemented"); }
128  virtual QString type() const { return QString("Not yet implemented"); }
129 
130  // Object browser code
131  // @TODO revisit this once plan for more general approach is completed.
132  virtual void fillObjectBrowser(QList<QTreeWidgetItem *>& list);
134  QTreeWidgetItem* browserTreeItem() const ;
135 
136 protected:
137 
138  virtual double calculateCharge() const;
139 
140  //Ways of providing path information:
141  // * Provide a Trk::Track
142  // * Provide a vector of Amg::Vector3D (this precludes extrapolation) // BEFORE EIGEN MIGRATION WAS: HepGeom::Point3D<double>'s
143  //
144  //Override exactly one of the two following methods, in order to
145  //provide path information. It will be called exactly once and the
146  //derived class destructor will be responsible of any necessary
147  //memory cleanup of the returned objects:
148  virtual const Trk::Track * provide_pathInfoTrkTrack() const { return nullptr; };
149  // virtual const std::vector< HepGeom::Point3D<double> > * provide_pathInfoPoints() const { return 0; }
150  virtual const std::vector< Amg::Vector3D > * provide_pathInfoPoints() const { return nullptr; }
151 
154 
155  virtual void ensureTouchedMuonChambersInitialised() const {};
156  void registerTouchedMuonChamber(const GeoPVConstLink&) const;
157 
158  virtual void visibleStateChanged();
159  virtual void currentMaterialChanged() {};
160 
161  QList<AssociatedObjectHandleBase*> getAllAscObjHandles() const;
162 
163  virtual bool containsDetElement(const QString&) const {return false; }
164 private:
165 
166  // It is illegal to copy/assign a TrackHandleBase:
169 
171  class Imp;
172  Imp * m_d;
173 
174 
175  //Here for inlining:
176  bool m_visible;
178  SoMaterial * m_currentmaterial;
179  void clearLine();
180  void registerTrack();
181 
185  void setShownTSOSParts(TrackCommonFlags::TSOSPartsFlags f);
186  void setCustomColouredTSOSParts(TrackCommonFlags::TSOSPartsFlags f);
187 
188  //For associated objects:
190  friend class TrackCollHandleBase; // Troels: maybe not needed...
191  AssocObjAttachmentHandle * getAttachmentHandle(int regionIndex, const double& crossoverval);
192 protected:
194 
195 };
196 
198 public:
199  void attachNodes( SoNode*simple, SoNode*detailed, bool unpickable );
200  void setPickableStateOfNodes( SoNode*simple, SoNode*detailed, bool unpickable );
201  void detachNodes( SoNode*simple, SoNode*detailed );
202 private:
203  friend class TrackHandleBase;//The life of these classes are entirely owned by TrackHandleBase.
204  friend class TrackHandleBase::Imp;//The life of these classes are entirely owned by TrackHandleBase.
209  void trackMaterialChanged();
210  void trackVisibilityChanged();
211  class Imp;
212  Imp * m_d;
213 };
214 
215 
216 #endif
TrackHandleBase::browserTreeItem
QTreeWidgetItem * browserTreeItem() const
Definition: TrackHandleBase.cxx:2009
AssociatedObjectHandleBase
Definition: AssociatedObjectHandleBase.h:33
TrackHandleBase::~TrackHandleBase
virtual ~TrackHandleBase()
Definition: TrackHandleBase.cxx:212
TrackHandleBase::customColouredTSOSParts
TrackCommonFlags::TSOSPartsFlags customColouredTSOSParts() const
Definition: TrackHandleBase.cxx:306
AssocObjAttachmentHandle::setPickableStateOfNodes
void setPickableStateOfNodes(SoNode *simple, SoNode *detailed, bool unpickable)
Will attach if not currently attached.
Definition: TrackHandleBase.cxx:1820
TrackHandleBase::touchedMuonChambers
const std::set< GeoPVConstLink > & touchedMuonChambers() const
Definition: TrackHandleBase.cxx:1258
TrackHandleBase::visibleStateChanged
virtual void visibleStateChanged()
override if need to take action in this case.
Definition: TrackHandleBase.cxx:2012
python.CaloRecoConfig.f
f
Definition: CaloRecoConfig.py:127
TrackCollHandleBase
Definition: TrackCollHandleBase.h:49
MuonGM
Ensure that the Athena extensions are properly loaded.
Definition: GeoMuonHits.h:27
TrackHandleBase::fillObjectBrowser
virtual void fillObjectBrowser(QList< QTreeWidgetItem * > &list)
Overload in child classes.
Definition: TrackHandleBase.cxx:1992
TrackHandleBase::operator=
TrackHandleBase & operator=(const TrackHandleBase &)
TrackHandleBase::registerTouchedMuonChamber
void registerTouchedMuonChamber(const GeoPVConstLink &) const
If not earlier, touched muon chambers must me registered at latest when this method is invoked.
Definition: TrackHandleBase.cxx:1252
AssocObjAttachmentHandle::~AssocObjAttachmentHandle
~AssocObjAttachmentHandle()
Definition: TrackHandleBase.cxx:1696
TrackHandleBase::hasMass
bool hasMass() const
Definition: TrackHandleBase.h:100
TrackCommonFlags.h
TrackHandleBase::clearLine
void clearLine()
Definition: TrackHandleBase.cxx:623
TrackLODHandle
Definition: TrackLODManager.h:56
Trk::Track
The ATLAS Track class.
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/Track.h:73
TrackHandleBase::currentMaterialChanged
virtual void currentMaterialChanged()
Definition: TrackHandleBase.h:159
TrackHandleBase::charge
double charge() const
Definition: TrackHandleBase.cxx:1491
TrackHandleBase::getNMuonPhiHits
virtual unsigned getNMuonPhiHits() const
The number of phi hits is part of hit counts below (i.e.
Definition: TrackHandleBase.h:110
TrackHandleBase::clicked
virtual QStringList clicked() const =0
Called when user selects the node (stringlist is displayed in messagebox).
TrackHandleBase::m_currentmaterial
SoMaterial * m_currentmaterial
Definition: TrackHandleBase.h:178
TrackHandleBase::Imp
Definition: TrackHandleBase.cxx:75
TrackHandleBase::getNTGCHits
virtual unsigned getNTGCHits() const
Definition: TrackHandleBase.h:113
TrackHandleBase::collHandle
TrackCollHandleBase * collHandle() const
Definition: TrackHandleBase.h:68
TrackHandleBase::updateObjectBrowser
void updateObjectBrowser()
Definition: TrackHandleBase.h:133
TrackHandleBase::updateShapes_TSOSWithMeasurements
void updateShapes_TSOSWithMeasurements()
Definition: TrackHandleBase.cxx:261
AssocObjAttachmentHandle::detachNodes
void detachNodes(SoNode *simple, SoNode *detailed)
Definition: TrackHandleBase.cxx:1903
Trk::RIO_OnTrack
Definition: RIO_OnTrack.h:70
TrackHandleBase::updateMuonProjections
void updateMuonProjections()
Definition: TrackHandleBase.cxx:525
AssocObjAttachmentHandle::AssocObjAttachmentHandle
AssocObjAttachmentHandle(TrackLODHandle *, TrackHandleBase *)
Definition: TrackHandleBase.cxx:1684
TrackHandleBase::getNSCTHits
virtual unsigned getNSCTHits() const
Definition: TrackHandleBase.h:107
AssocObjAttachmentHandle::trackMaterialChanged
void trackMaterialChanged()
Definition: TrackHandleBase.cxx:1724
TrackHandleBase::TrackHandleBase
TrackHandleBase(const TrackHandleBase &)
TrackHandleBase::type
virtual QString type() const
return very short word with type (maybe link with collection type?)
Definition: TrackHandleBase.h:128
TrackHandleBase::getMuonReadoutElement
virtual const MuonGM::MuonReadoutElement * getMuonReadoutElement(const Trk::RIO_OnTrack &mb) const
Definition: TrackHandleBase.cxx:1949
MuonGM::MuonReadoutElement
Base class for the XxxReadoutElement, with Xxx = Mdt, Rpc, Tgc, Csc.
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h:40
TrackHandleBase::hackGetPointsPropagated
std::vector< Amg::Vector3D > * hackGetPointsPropagated()
FIXME.
Definition: TrackHandleBase.cxx:1622
TrackHandleBase::getNsTGCHits
virtual unsigned getNsTGCHits() const
Definition: TrackHandleBase.h:116
Trk::ParticleHypothesis
ParticleHypothesis
Definition: ParticleHypothesis.h:25
TrackHandleBase::registerAssocObject
void registerAssocObject(AssociatedObjectHandleBase *)
Trackhandle assumes ownership.
Definition: TrackHandleBase.cxx:1432
AssocObjAttachmentHandle::AssocObjAttachmentHandle
AssocObjAttachmentHandle(const AssocObjAttachmentHandle &)
TrackHandleBase::calculateCharge
virtual double calculateCharge() const
Definition: TrackHandleBase.cxx:1464
GeoPrimitives.h
TrackHandleBase::endPoint
virtual std::optional< Amg::Vector3D > endPoint() const
returns 0 if can't find start point.
Definition: TrackHandleBase.cxx:1590
TrackHandleBase::ensureTouchedMuonChambersInitialised
virtual void ensureTouchedMuonChambersInitialised() const
Definition: TrackHandleBase.h:155
TrackHandleBase::getNTRTHits
virtual unsigned getNTRTHits() const
Definition: TrackHandleBase.h:108
TrackHandleBase::getFitQuality
virtual const Trk::FitQuality * getFitQuality() const
Definition: TrackHandleBase.h:118
TrackHandleBase::updateShapes_TSOSWithErrors
void updateShapes_TSOSWithErrors()
Definition: TrackHandleBase.cxx:274
AssocObjAttachmentHandle::Imp
Definition: TrackHandleBase.cxx:1629
TrackSysCommonData
Definition: TrackSysCommonData.h:47
TrackHandleBase::setCustomColouredTSOSParts
void setCustomColouredTSOSParts(TrackCommonFlags::TSOSPartsFlags f)
Definition: TrackHandleBase.cxx:351
TrackHandleBase::updateRandomColourTransparencyAndBrightness
void updateRandomColourTransparencyAndBrightness()
Definition: TrackHandleBase.cxx:1419
AssocObjAttachmentHandle::attachNodes
void attachNodes(SoNode *simple, SoNode *detailed, bool unpickable)
Definition: TrackHandleBase.cxx:1768
TrackHandleBase::hasSubSystemHitInfo
virtual bool hasSubSystemHitInfo() const
Definition: TrackHandleBase.h:104
TrackHandleBase::momentum
virtual Amg::Vector3D momentum() const
Definition: TrackHandleBase.h:83
TrackHandleBase::visible
bool visible() const
Definition: TrackHandleBase.h:67
TrackHandleBase::getNRPCHits
virtual unsigned getNRPCHits() const
Definition: TrackHandleBase.h:112
TrackHandleBase::setShownTSOSParts
void setShownTSOSParts(TrackCommonFlags::TSOSPartsFlags f)
Definition: TrackHandleBase.cxx:312
TrackHandleBase::getAllAscObjHandles
QList< AssociatedObjectHandleBase * > getAllAscObjHandles() const
override if need to take action in this case.
Definition: TrackHandleBase.cxx:1617
TrackHandleBase::rerandomiseRandomMaterial
void rerandomiseRandomMaterial()
Definition: TrackHandleBase.cxx:1378
AssocObjAttachmentHandle
Definition: TrackHandleBase.h:197
TrackHandleBase::provide_pathInfoPoints
virtual const std::vector< Amg::Vector3D > * provide_pathInfoPoints() const
Definition: TrackHandleBase.h:150
TrackHandleBase::getNMuonHits
virtual unsigned getNMuonHits() const
Definition: TrackHandleBase.h:109
TrackHandleBase::currentMaterial
SoMaterial * currentMaterial() const
Definition: TrackHandleBase.h:76
TrackHandleBase::shortInfo
virtual QString shortInfo() const
returns mom and hit information about track
Definition: TrackHandleBase.h:127
AssocObjAttachmentHandle::m_d
Imp * m_d
Definition: TrackHandleBase.h:211
histSizes.list
def list(name, path='/')
Definition: histSizes.py:38
Trk::FitQuality
Class to represent and store fit qualities from track reconstruction in terms of and number of degre...
Definition: FitQuality.h:97
ParticleHypothesis.h
TrackHandleBase::pdgCode
virtual int pdgCode() const
0 means unknown
Definition: TrackHandleBase.h:86
TrackHandleBase::getNMDTHits
virtual unsigned getNMDTHits() const
Definition: TrackHandleBase.h:111
TrackHandleBase::registerTrack
void registerTrack()
Definition: TrackHandleBase.cxx:633
TrackHandleBase::getNMMHits
virtual unsigned getNMMHits() const
Definition: TrackHandleBase.h:115
TrackHandleBase::m_collhandle
TrackCollHandleBase * m_collhandle
Definition: TrackHandleBase.h:177
TrackHandleBase::common
TrackSysCommonData * common() const
Definition: TrackHandleBase.cxx:255
TrackHandleBase::TrackHandleBase
TrackHandleBase(TrackCollHandleBase *)
Definition: TrackHandleBase.cxx:204
TrackHandleBase::extrapolationParticleHypothesis
virtual Trk::ParticleHypothesis extrapolationParticleHypothesis() const
Default implementation of this next method bases hypothesis on pdgCode() and charge():
Definition: TrackHandleBase.cxx:1517
TrackHandleBase::updateMaterial
void updateMaterial()
Definition: TrackHandleBase.cxx:937
TrackHandleBase::getNPixelHits
virtual unsigned getNPixelHits() const
Definition: TrackHandleBase.h:106
Trk
Ensure that the ATLAS eigen extensions are properly loaded.
Definition: FakeTrackBuilder.h:9
TrackHandleBase::startPoint
virtual std::optional< Amg::Vector3D > startPoint() const
returns 0 if can't find start point.
Definition: TrackHandleBase.cxx:1570
AssocObjAttachmentHandle::operator=
AssocObjAttachmentHandle & operator=(const AssocObjAttachmentHandle &)
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
Trk::MeasurementBaseType::RIO_OnTrack
@ RIO_OnTrack
Definition: MeasurementBase.h:49
TrackHandleBase::isIDTrack
virtual bool isIDTrack() const
Definition: TrackHandleBase.cxx:1609
TrackHandleBase::updateShapes_TSOSWithMaterialEffects
void updateShapes_TSOSWithMaterialEffects()
Definition: TrackHandleBase.cxx:287
TrackHandleBase::m_d
Imp * m_d
Definition: TrackHandleBase.h:171
TrackHandleBase::getNCSCHits
virtual unsigned getNCSCHits() const
Definition: TrackHandleBase.h:114
TrackHandleBase::getVisibleMeasurements
QList< AssociatedObjectHandleBase * > getVisibleMeasurements() const
Definition: TrackHandleBase.cxx:1979
TrackHandleBase::updateInDetProjections
void updateInDetProjections()
Definition: TrackHandleBase.cxx:512
TrackHandleBase::getNMuonPrecisionHits
virtual unsigned getNMuonPrecisionHits() const
Definition: TrackHandleBase.h:117
TrackHandleBase::setVisible
void setVisible(bool)
use by the collection handle.
Definition: TrackHandleBase.cxx:426
TRT_PAI_physicsConstants::mb
const double mb
1mb to cm2
Definition: TRT_PAI_physicsConstants.h:15
AssocObjAttachmentHandle::trackVisibilityChanged
void trackVisibilityChanged()
Definition: TrackHandleBase.cxx:1672
TrackHandleBase::update3DObjects
void update3DObjects(bool invalidatePropagatedPoints=false, float maxR=0.0)
Definition: TrackHandleBase.cxx:488
TrackHandleBase::provide_pathInfoTrkTrack
virtual const Trk::Track * provide_pathInfoTrkTrack() const
Definition: TrackHandleBase.h:148
TrackHandleBase::containsDetElement
virtual bool containsDetElement(const QString &) const
Definition: TrackHandleBase.h:163
TrackHandleBase::shownTSOSParts
TrackCommonFlags::TSOSPartsFlags shownTSOSParts() const
Definition: TrackHandleBase.cxx:300
Track
Definition: TriggerChamberClusterOnTrackCreator.h:21
TrackHandleBase::getAttachmentHandle
AssocObjAttachmentHandle * getAttachmentHandle(int regionIndex, const double &crossoverval)
Definition: TrackHandleBase.cxx:1451
TrackHandleBase::baseInfo
QStringList baseInfo() const
Definition: TrackHandleBase.cxx:1534
TrackHandleBase::hasCharge
bool hasCharge() const
Definition: TrackHandleBase.h:99
TrackHandleBase::m_visible
bool m_visible
Definition: TrackHandleBase.h:176
TrackHandleBase::mass
virtual double mass() const
Definition: TrackHandleBase.cxx:1501
TrackHandleBase
Definition: TrackHandleBase.h:56
TrackHandleBase::numberOfInstances
static int numberOfInstances()
Definition: TrackHandleBase.cxx:249
TrackHandleBase::unknown
static double unknown()
Definition: TrackHandleBase.h:102
python.Dumpers.FitQuality
FitQuality
Definition: Dumpers.py:63