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

#include <TrackHandle_TrkTrack.h>

Inheritance diagram for TrackHandle_TrkTrack:
Collaboration diagram for TrackHandle_TrkTrack:

Public Member Functions

 TrackHandle_TrkTrack (TrackCollHandleBase *, const Trk::Track *)
virtual ~TrackHandle_TrkTrack ()
virtual QStringList clicked () const
 Called when user selects the node (stringlist is displayed in messagebox).
virtual Amg::Vector3D momentum () const
const Trk::Trackprovide_pathInfoTrkTrack () const
void ensureTouchedMuonChambersInitialised () const
void ensureTouchedMuonChambersInitialiasedFromMeas (const Trk::MeasurementBase *meas) const
const Trk::TracktrkTrackPointer () const
virtual bool hasSubSystemHitInfo () const
virtual unsigned getNPixelHits () const
virtual unsigned getNSCTHits () const
virtual unsigned getNTRTHits () const
virtual unsigned getNMuonPhiHits () const
 The number of phi hits is part of hit counts below (i.e.
virtual unsigned getNRPCHits () const
virtual unsigned getNMDTHits () const
virtual unsigned getNTGCHits () const
virtual unsigned getNCSCHits () const
virtual unsigned getNMMHits () const
virtual unsigned getNsTGCHits () const
virtual const Trk::FitQualitygetFitQuality () const
virtual bool containsDetElement (const QString &) const
virtual void fillObjectBrowser (QList< QTreeWidgetItem * > &list)
 Called in child classes.
virtual void updateObjectBrowser ()
SoNode * zoomToTSOS (unsigned int index)
 Depending on controller configuration attempt to zoom to the corresponding TSOS & returned detailed node matching it.
virtual QString shortInfo () const
 returns mom and hit information about track
virtual QString type () const
 return very short word with type (maybe link with collection type?)
TrackSysCommonDatacommon () const
void setVisible (bool)
 use by the collection handle.
bool visible () const
TrackCollHandleBasecollHandle () const
const std::set< GeoPVConstLink > & touchedMuonChambers () const
void update3DObjects (bool invalidatePropagatedPoints=false, float maxR=0.0)
void updateInDetProjections ()
void updateMuonProjections ()
void updateMaterial ()
void rerandomiseRandomMaterial ()
void updateRandomColourTransparencyAndBrightness ()
SoMaterial * currentMaterial () const
QStringList baseInfo () const
virtual std::optional< Amg::Vector3DstartPoint () const
 returns 0 if can't find start point.
virtual std::optional< Amg::Vector3DendPoint () const
 returns 0 if can't find start point.
virtual int pdgCode () const
 0 means unknown
double charge () const
virtual double mass () const
bool hasCharge () const
bool hasMass () const
virtual bool isRun4EDM () const
virtual bool isIDTrack () const
virtual unsigned getNMuonHits () const
virtual unsigned getNMuonPrecisionHits () const
virtual const MuonGM::MuonReadoutElementgetMuonReadoutElement (const Trk::RIO_OnTrack &mb) const
QList< AssociatedObjectHandleBase * > getVisibleMeasurements () const
TrackCommonFlags::TSOSPartsFlags shownTSOSParts () const
TrackCommonFlags::TSOSPartsFlags customColouredTSOSParts () const
std::vector< Amg::Vector3D > * hackGetPointsPropagated ()
 FIXME.
QTreeWidgetItem * browserTreeItem () const

Static Public Member Functions

static int numberOfInstances ()
static double unknown ()

Protected Member Functions

virtual double calculateCharge () const
virtual const std::vector< Amg::Vector3D > * provide_pathInfoPoints ()
virtual Trk::ParticleHypothesis extrapolationParticleHypothesis () const
 Default implementation of this next method bases hypothesis on pdgCode() and charge():
void registerTouchedMuonChamber (const GeoPVConstLink &) const
 If not earlier, touched muon chambers must me registered at latest when this method is invoked.
const QList< AssociatedObjectHandleBase * > & getAllAscObjHandles () const
 override if need to take action in this case.
void registerAssocObject (AssociatedObjectHandleBase *)
 Trackhandle assumes ownership.
virtual void ensureInitTSOSs (std::unique_ptr< std::vector< AssociatedObjectHandleBase * > > &)
 Ensure that the TSOSs are initialized.

Protected Attributes

const Trk::Trackm_trk

Private Member Functions

void visibleStateChanged ()
 override if need to take action in this case.
void currentMaterialChanged ()
void ensureInitSubSysHitInfo () const
void clearLine ()
void registerTrack ()
void updateShapes_TSOSWithMeasurements ()
void updateShapes_TSOSWithErrors ()
void updateShapes_TSOSWithMaterialEffects ()
void setShownTSOSParts (TrackCommonFlags::TSOSPartsFlags f)
void setCustomColouredTSOSParts (TrackCommonFlags::TSOSPartsFlags f)
AssocObjAttachmentHandlegetAttachmentHandle (int regionIndex, const double &crossoverval)

Private Attributes

unsigned m_nhits_pixel
unsigned m_nhits_sct
unsigned m_nhits_trt
unsigned m_nhits_muon_phi
unsigned m_nhits_rpc
unsigned m_nhits_mdt
unsigned m_nhits_tgc
unsigned m_nhits_csc
unsigned m_nhits_mm
unsigned m_nhits_stgc
int m_hitInfoStatus
 -1: uninitialized, 0: not present, 1: present.
Impm_d
bool m_visible
TrackCollHandleBasem_collhandle
SoMaterial * m_currentmaterial

Detailed Description

Definition at line 29 of file TrackHandle_TrkTrack.h.

Constructor & Destructor Documentation

◆ TrackHandle_TrkTrack()

TrackHandle_TrkTrack::TrackHandle_TrkTrack ( TrackCollHandleBase * ch,
const Trk::Track * trk )

Definition at line 41 of file TrackHandle_TrkTrack.cxx.

◆ ~TrackHandle_TrkTrack()

TrackHandle_TrkTrack::~TrackHandle_TrkTrack ( )
virtual

Definition at line 50 of file TrackHandle_TrkTrack.cxx.

51{
52}

Member Function Documentation

◆ baseInfo()

QStringList TrackHandleBase::baseInfo ( ) const
inherited

coverity 17186: this code is unreachable int pdg = pdgCode(); if (pdg) { bool ok; QString name = VP1ParticleData::particleName(pdg,ok); if (ok) l << "pdg: "+QString::number(pdg)+" ["+name+"]"; else l << "pdg: "+QString::number(pdg); }

return l;

Definition at line 1550 of file TrackHandleBase.cxx.

1551{
1552 QStringList l;
1554 mom /= CLHEP::GeV;
1555 if (mom.mag2()==0.0) {
1556 l << "Momentum : 0 (undefined)";
1557 } else {
1558 l << "Momentum [GeV]: "+VP1Msg::str(mom);
1559 l << "|Pt|/|P| [GeV]: "+VP1Msg::str(mom.perp())+" / " + VP1Msg::str(mom.mag());
1560 l << VP1Msg::str("(")+QChar(0x03B7)+","+QChar(0x03D5)+VP1Msg::str(")=(")
1562
1563 l << "Eta: "+VP1Msg::str(mom.eta());
1564 l << "Phi: "+VP1Msg::str(VP1LinAlgUtils::phiFromXY(mom.x(), mom.y() ));
1565 }
1566 l<<"Hit summary: Pix["+VP1Msg::str(getNPixelHits())+"], SCT["+VP1Msg::str(getNSCTHits())+"], TRT["+VP1Msg::str(getNTRTHits())
1567 +"], MDT["+QString::number(getNMDTHits())+"], RPC["+QString::number(getNRPCHits())+"], TGC["+QString::number(getNTGCHits())+"], CSC["+QString::number(getNCSCHits())+"] MM["+QString::number(getNMMHits())+"], sTGC["+QString::number(getNsTGCHits())+"]";
1568
1569 return l;
1583}
virtual unsigned getNTRTHits() const
virtual unsigned getNMDTHits() const
virtual unsigned getNMMHits() const
virtual unsigned getNSCTHits() const
virtual unsigned getNTGCHits() const
virtual unsigned getNCSCHits() const
virtual unsigned getNRPCHits() const
virtual Amg::Vector3D momentum() const
virtual unsigned getNsTGCHits() const
virtual unsigned getNPixelHits() const
static double phiFromXY(const double &x, const double &y)
static QString str(const QString &s)
Definition VP1String.h:49
Eigen::Matrix< double, 3, 1 > Vector3D
l
Printing final latex table to .tex output file.

◆ browserTreeItem()

QTreeWidgetItem * TrackHandleBase::browserTreeItem ( ) const
inherited

Definition at line 2025 of file TrackHandleBase.cxx.

2025{return m_d->m_objBrowseTree;}

◆ calculateCharge()

double TrackHandleBase::calculateCharge ( ) const
protectedvirtualinherited

Reimplemented in TrackHandle_SimulationTrack, TrackHandle_TrackParticle, TrackHandle_TruthTrack, and TrackHandle_xAODTrackParticle.

Definition at line 1480 of file TrackHandleBase.cxx.

1481{
1482 //look up from pdgCode(); // valid PDG codes > 0
1483 int pdg = pdgCode();
1484 if (pdg) {
1485 bool ok;
1486 double c = VP1ParticleData::particleCharge(pdg,ok);
1487 if (ok) {
1488 VP1Msg::messageDebug("TrackHandleBase: Determined charge from pdg code "+VP1Msg::str(pdg)+": "+VP1Msg::str(c));
1489 return c;
1490 }
1491 }
1492
1493 //Attempt to look at the first trackparameter.
1494 const Trk::Track * trk = provide_pathInfoTrkTrack();
1495 if (trk&&!trk->trackParameters()->empty()) {
1496 double c = (*(trk->trackParameters()->begin()))->charge();
1497 VP1Msg::messageDebug("TrackHandleBase: Determined charge from first track parameter: "+VP1Msg::str(c));
1498 return c;
1499 }
1500 if (VP1Msg::verbose())
1501 VP1Msg::messageDebug("Failed to determine charge.");
1502
1503 return unknown();
1504}
virtual const Trk::Track * provide_pathInfoTrkTrack() const
virtual int pdgCode() const
0 means unknown
static double unknown()
const DataVector< const TrackParameters > * trackParameters() const
Return a pointer to a vector of TrackParameters.
static bool verbose()
Definition VP1Msg.h:31
static void messageDebug(const QString &)
Definition VP1Msg.cxx:39
static double particleCharge(const int &pdgcode, bool &ok)

◆ charge()

double TrackHandleBase::charge ( ) const
inherited

Definition at line 1507 of file TrackHandleBase.cxx.

1508{
1509 if (m_d->chargeinit)
1510 return m_d->charge;
1511 m_d->chargeinit = true;
1512 m_d->charge = calculateCharge();
1513 return m_d->charge;
1514}
virtual double calculateCharge() const

◆ clearLine()

void TrackHandleBase::clearLine ( )
privateinherited

Definition at line 639 of file TrackHandleBase.cxx.

640{
641 if (m_d->line) {
642 common()->unregisterTrack(m_d->line);
643 m_d->line->unref();
644 m_d->line=nullptr;
645 }
646}
TrackSysCommonData * common() const
void unregisterTrack(SoNode *)

◆ clicked()

QStringList TrackHandle_TrkTrack::clicked ( ) const
virtual

Called when user selects the node (stringlist is displayed in messagebox).

Reimplementations should add info momInfo() to get momentum, eta, phi, pid,charge, mass printed.

Implements TrackHandleBase.

Definition at line 55 of file TrackHandle_TrkTrack.cxx.

56{
57 // Object browser stuff
58 QTreeWidget* trkObjBrowser = common()->controller()->trackObjBrowser();
59 if (trkObjBrowser){
60 trkObjBrowser->setCurrentItem(browserTreeItem());
61 trkObjBrowser->scrollToItem(browserTreeItem());
62 }
63 QStringList l;
64 l << "Trk::Track";
65 if (!m_trk) {
66 l << "ERROR: This TrackHandle_TrkTrack handle has a NULL track pointer!!";
67 return l;
68 }
69 l << "Author info: " << " "+QString(m_trk->info().dumpInfo().c_str());
70
72 if (m_trk->fitQuality())
73 l << "Fit quality [Chi^2, nDoF] = ["+QString::number(m_trk->fitQuality()->chiSquared())+", "+QString::number(m_trk->fitQuality()->doubleNumberDoF())+"]. ";
74 if (common()->controller()->printVerboseInfoOnSingleSelection()) {
75 l << " ===== dump =====";
76 std::ostringstream s;
77 s << *m_trk;
78 l << QString(s.str().c_str()).split('\n');
79 }
80 return l;
81}
QTreeWidgetItem * browserTreeItem() const
QStringList baseInfo() const
TrackSystemController * controller() const
QTreeWidget * trackObjBrowser() const
Returns a pointer to the Track Object Browser (if it exists)

◆ collHandle()

TrackCollHandleBase * TrackHandleBase::collHandle ( ) const
inlineinherited

Definition at line 69 of file TrackHandleBase.h.

69{ return m_collhandle; }
TrackCollHandleBase * m_collhandle

◆ common()

TrackSysCommonData * TrackHandleBase::common ( ) const
inherited

Definition at line 254 of file TrackHandleBase.cxx.

255{
256 return m_collhandle->common();
257}

◆ containsDetElement()

bool TrackHandle_TrkTrack::containsDetElement ( const QString & id) const
virtual

Reimplemented from TrackHandleBase.

Definition at line 402 of file TrackHandle_TrkTrack.cxx.

403{
404 VP1Msg::messageVerbose("TrackHandle_TrkTrack::containsDetElement looking for " + id);
405 Identifier::value_type tmpInt = id.toLong(nullptr,10);//base 10
406 Identifier::value_type tmpInt2 = id.toLong(nullptr,16);//base 16...why?
407
408 VP1Msg::messageVerbose("TrackHandle_TrkTrack::looping over TSOS ");
409
412 for (; it != itE; ++it)
413 {
414 // Still debugging, so leaving this in for now...
415 // std::cout<<(*it)->surface().associatedDetectorElementIdentifier()<<std::endl;
416 if ((*it)->surface().associatedDetectorElementIdentifier()==tmpInt) {
417 VP1Msg::messageVerbose("TrackHandle_TrkTrack::containsDetElement FOUND " + id + "!");
418 return true;
419 }
420 if ((*it)->surface().associatedDetectorElementIdentifier()==tmpInt2) {
421 VP1Msg::messageVerbose("TrackHandle_TrkTrack::containsDetElement FOUND 2 " + id + "!");
422 return true;
423 }
424 }
425 return false;
426}
DataModel_detail::const_iterator< DataVector > const_iterator
Definition DataVector.h:838
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
const Trk::Track * trkTrackPointer() const
const Trk::TrackStates * trackStateOnSurfaces() const
return a pointer to a const DataVector of const TrackStateOnSurfaces.
static void messageVerbose(const QString &)
Definition VP1Msg.cxx:84

◆ currentMaterial()

SoMaterial * TrackHandleBase::currentMaterial ( ) const
inlineinherited

Definition at line 77 of file TrackHandleBase.h.

77{ return m_currentmaterial; }
SoMaterial * m_currentmaterial

◆ currentMaterialChanged()

void TrackHandle_TrkTrack::currentMaterialChanged ( )
privatevirtual

Reimplemented from TrackHandleBase.

Definition at line 149 of file TrackHandle_TrkTrack.cxx.

150{
151 if (visible())
152 static_cast<TrackCollHandle_TrkTrack*>(collHandle())->visibleStateUpdated(this);
153}
bool visible() const
TrackCollHandleBase * collHandle() const

◆ customColouredTSOSParts()

TrackCommonFlags::TSOSPartsFlags TrackHandleBase::customColouredTSOSParts ( ) const
inherited

Definition at line 305 of file TrackHandleBase.cxx.

306{
307 return m_d->customColouredTSOSParts;//FIXME: inline?
308}

◆ endPoint()

std::optional< Amg::Vector3D > TrackHandleBase::endPoint ( ) const
virtualinherited

returns 0 if can't find start point.

Definition at line 1606 of file TrackHandleBase.cxx.

1607{
1608 m_d->ensureLoadPathInfo();
1609 if (m_d->pathInfo_TrkTrack) {
1610 Trk::TrackStates::const_reverse_iterator tsos_iter = m_d->pathInfo_TrkTrack->trackStateOnSurfaces()->rend();
1611 Trk::TrackStates::const_reverse_iterator tsos_end = m_d->pathInfo_TrkTrack->trackStateOnSurfaces()->rbegin();
1612 for (; tsos_iter != tsos_end; ++tsos_iter) {
1613 if (common()->trackSanityHelper()->isSafe(*tsos_iter)) {
1614 const Trk::TrackParameters* trackParam = (*tsos_iter)->trackParameters();
1615 if (common()->trackSanityHelper()->isSafe(trackParam))
1616 return trackParam->position();
1617 }
1618 }
1619 } else if (m_d->pathInfo_Points&&!m_d->pathInfo_Points->empty()) {
1620 return m_d->pathInfo_Points->back();
1621 }
1622 return {};
1623}
std::reverse_iterator< const_iterator > const_reverse_iterator
Definition DataVector.h:847
const Amg::Vector3D & position() const
Access method for the position.
ParametersBase< TrackParametersDim, Charged > TrackParameters

◆ ensureInitSubSysHitInfo()

void TrackHandle_TrkTrack::ensureInitSubSysHitInfo ( ) const
private

Definition at line 156 of file TrackHandle_TrkTrack.cxx.

157{
158 if (m_hitInfoStatus==-1)
160}
static bool countHits(const Trk::Track *, unsigned &nPixelHits, unsigned &nSCTHits, unsigned &nTRTHits, unsigned &nhits_muon_phi, unsigned &nhits_rpc, unsigned &nhits_mdt, unsigned &nhits_tgc, unsigned &nhits_csc, unsigned &nhits_mm, unsigned &nhits_stgc)

◆ ensureInitTSOSs()

void TrackHandleBase::ensureInitTSOSs ( std::unique_ptr< std::vector< AssociatedObjectHandleBase * > > & tsos_ascobjs)
protectedvirtualinherited

Ensure that the TSOSs are initialized.

This is called by update3DObjects() and should be called by any method that needs to access the TSOSs.

Reimplemented in TrackHandle_TrackContainer.

Definition at line 379 of file TrackHandleBase.cxx.

380{
381 std::cout<<"TrackHandleBase::ensureInitTSOSs"<<std::endl;
382 if (tsos_ascobjs)
383 return;
384
385 tsos_ascobjs = std::make_unique<std::vector<AssociatedObjectHandleBase*>>();
386 m_d->ensureLoadPathInfo();
387
388 if (!m_d->pathInfo_TrkTrack||!m_d->pathInfo_TrkTrack->trackParameters()||m_d->pathInfo_TrkTrack->trackParameters()->empty())
389 return;
390
391 tsos_ascobjs->reserve(m_d->pathInfo_TrkTrack->trackParameters()->size());
392
393 unsigned parindex(0);
394
395 AscObj_TSOS* ascObjNeedDistToNext(nullptr);
396 Trk::TrackStates::const_iterator tsos_iter = m_d->pathInfo_TrkTrack->trackStateOnSurfaces()->begin();
397 Trk::TrackStates::const_iterator tsos_end = m_d->pathInfo_TrkTrack->trackStateOnSurfaces()->end();
398 const Trk::TrackParameters* trackParam(nullptr);
399 for (; tsos_iter != tsos_end; ++tsos_iter) {
400 trackParam = (*tsos_iter)->trackParameters();
401 if (!VP1TrackSanity::isSafe(*tsos_iter)) {
402 parindex++;
403 continue;
404 }
405 if (trackParam&&!VP1TrackSanity::isSafe(trackParam)) {
406 parindex++;
407 continue;
408 }
409 //FIXME: likewise check that we don't have a bad measurement, material effect, ...
410 if (ascObjNeedDistToNext&&trackParam) {
411 ascObjNeedDistToNext->setDistToNextPar((trackParam->position()-ascObjNeedDistToNext->approxCenter()).mag());
412 ascObjNeedDistToNext = nullptr;
413 }
414 VP1Msg::messageVerbose("Adding TSOS at index:"+QString::number(parindex));
415 ascObjNeedDistToNext = m_d->addTSOS(*tsos_iter,parindex++);
416 }
417
418}
static bool isSafe(const Trk::TrackStateOnSurface *)

◆ ensureTouchedMuonChambersInitialiasedFromMeas()

void TrackHandle_TrkTrack::ensureTouchedMuonChambersInitialiasedFromMeas ( const Trk::MeasurementBase * meas) const

Definition at line 105 of file TrackHandle_TrkTrack.cxx.

106{
107 if (meas) {
108 const Trk::CompetingRIOsOnTrack* crot = dynamic_cast<const Trk::CompetingRIOsOnTrack*>(meas);
109
110 // for competing ROTs, it is expected that these are in the same DE. If this turns out not to be the case, need to loop & recursively call this method. EJWM
111 if (crot)
112 meas=&(crot->rioOnTrack(0));
113 if (!VP1TrackSanity::isSafe(meas)) {
114 if (VP1Msg::verbose())
115 VP1Msg::messageVerbose("TrackHandle_TrkTrack WARNING: Skipping unsafe TSOS for touched muon chamber determination.");
116 return;
117 }
118
119 const Trk::RIO_OnTrack* rio = dynamic_cast<const Trk::RIO_OnTrack*>(meas);
120 if (rio) {
121 const MuonGM::MuonReadoutElement* muonDetEl = getMuonReadoutElement(*rio);
122 if (muonDetEl)
123 registerTouchedMuonChamber(muonDetEl->getMaterialGeom()->getParent());
124 }
125 }
126}
void registerTouchedMuonChamber(const GeoPVConstLink &) const
If not earlier, touched muon chambers must me registered at latest when this method is invoked.
virtual const MuonGM::MuonReadoutElement * getMuonReadoutElement(const Trk::RIO_OnTrack &mb) const
virtual const RIO_OnTrack & rioOnTrack(unsigned int) const =0
returns the RIO_OnTrack (also known as ROT) objects depending on the integer.

◆ ensureTouchedMuonChambersInitialised()

void TrackHandle_TrkTrack::ensureTouchedMuonChambersInitialised ( ) const
virtual

Reimplemented from TrackHandleBase.

Definition at line 84 of file TrackHandle_TrkTrack.cxx.

85{
86 //Fixme: TO BASE!!!
87
88 VP1TrackSanity * sanity = common()->trackSanityHelper();
89 if (!VP1JobConfigInfo::hasMuonGeometry()||!sanity) {
90 VP1Msg::messageVerbose("TrackHandle_TrkTrack WARNING: can't init touched muon chamber list.");
91 return;
92 }
93 Trk::TrackStates::const_iterator tsos_iter = m_trk->trackStateOnSurfaces()->begin();
94 Trk::TrackStates::const_iterator tsos_end = m_trk->trackStateOnSurfaces()->end();
95 for (; tsos_iter != tsos_end; ++tsos_iter) {
96 if (!VP1TrackSanity::isSafe(*tsos_iter)) {
97 if (VP1Msg::verbose())
98 VP1Msg::messageVerbose("TrackHandle_TrkTrack WARNING: Skipping unsafe TSOS for touched muon chamber determination.");
99 continue;
100 }
101 ensureTouchedMuonChambersInitialiasedFromMeas( (*tsos_iter)->measurementOnTrack() );
102 }
103}
void ensureTouchedMuonChambersInitialiasedFromMeas(const Trk::MeasurementBase *meas) const
VP1TrackSanity * trackSanityHelper() const
static bool hasMuonGeometry()

◆ extrapolationParticleHypothesis()

Trk::ParticleHypothesis TrackHandleBase::extrapolationParticleHypothesis ( ) const
protectedvirtualinherited

Default implementation of this next method bases hypothesis on pdgCode() and charge():

Definition at line 1533 of file TrackHandleBase.cxx.

1534{
1535 switch(abs(pdgCode())) {
1536 case 211: return Trk::pion;
1537 case 2212: return Trk::proton;
1538 case 11: return Trk::electron;
1539 case 13: return Trk::muon;
1540 case 321://k+
1541 case 323://k*+
1542 return Trk::kaon;
1543 case 0:
1544 default:
1546 }
1547}
double charge() const
virtual unsigned getNMuonHits() const
bool hasCharge() const

◆ fillObjectBrowser()

void TrackHandle_TrkTrack::fillObjectBrowser ( QList< QTreeWidgetItem * > & list)
virtual

Called in child classes.

(*it)->type(Trk::TrackStateOnSurface::Measurement) &&

Reimplemented from TrackHandleBase.

Definition at line 162 of file TrackHandle_TrkTrack.cxx.

163{
164 TrackHandleBase::fillObjectBrowser(listOfItems); // Obligatory!
165
166 // Fill sub-data.
167 QList<AssociatedObjectHandleBase*> list = getAllAscObjHandles();
170 unsigned int i=0;
171 for (;it!=itE;++it){
172// VP1Msg::messageVerbose("TSOS #"+QString::number(i++));
173
174 bool visible=false;
175 QTreeWidgetItem* TSOSitem = new QTreeWidgetItem(browserTreeItem());
176
177 AscObj_TSOS* asc=nullptr;
178 if (i<static_cast<unsigned int>(list.size())) asc = dynamic_cast<AscObj_TSOS*>(list.at(i));
179
180 if (asc) {
181 asc->setBrowserTreeItem(TSOSitem);
182 visible=asc->visible();
183 }
184
185 if (!visible) {
186 TSOSitem->setFlags(Qt::ItemFlag());// not selectable, not enabled
187 QFont itemFont = TSOSitem->font(0);
188 itemFont.setStrikeOut(true);
189 TSOSitem->setFont(0, itemFont);
190 TSOSitem->setFont(1, itemFont);
191 }
192 TSOSitem->setText(0, QString("Track State "+QString::number( (int)(it - trkTrackPointer()->trackStateOnSurfaces ()->begin() ) ) ) );
193
194 QString tsosText;
195 bool first=true;
196 const Trk::MeasurementBase* meas = (*it)->measurementOnTrack();
197 if ( meas ){
198 QString measName(TrkObjToString::name(*meas));
199 tsosText+=measName;
200
201 QTreeWidgetItem* measItem = new QTreeWidgetItem(TSOSitem);
202 measItem->setExpanded(true); // want it opened so subparams seen easily
203 measItem->setFlags(Qt::ItemIsEnabled);
204 measItem->setText(0, measName);
205 // measItem->setText(1, TrkObjToString::shortInfo(*meas) );
206
207 QStringList list = TrkObjToString::fullInfo( *((*it)->measurementOnTrack ()) );
208 for (int i = 0; i < (list.size()-1); ){
209 QTreeWidgetItem* subparamItem = new QTreeWidgetItem(measItem);
210 subparamItem->setText(0, list.at(i++) );
211 subparamItem->setText(1, list.at(i++) );
212 subparamItem->setFlags(Qt::ItemIsEnabled);
213 }
214
215 first=false;
216 }
217 if ( (*it)->trackParameters () ) {
218 if (!first) tsosText.append(" + ");
219 tsosText.append("Parameters");
220
221 QTreeWidgetItem* paramItem = new QTreeWidgetItem(TSOSitem);
222 paramItem->setExpanded(true); // want it opened so subparams seen easily
223 paramItem->setFlags(Qt::ItemIsEnabled);
224 paramItem->setText(0, TrkObjToString::name( *((*it)->trackParameters ()) ) );
225 // paramItem->setText(1, TrkObjToString::shortInfo( *((*it)->trackParameters ()) ) );
226
227 QStringList list = TrkObjToString::fullInfo( *((*it)->trackParameters ()) );
228 for (int i = 0; i < (list.size()-1); ){
229 QTreeWidgetItem* subparamItem = new QTreeWidgetItem(paramItem);
230 subparamItem->setText(0, list.at(i++) );
231 subparamItem->setText(1, list.at(i++) );
232 subparamItem->setFlags(Qt::ItemIsEnabled);
233 }
234
235 first=false;
236 }
237 if ( (*it)->materialEffectsOnTrack () ){
238 if (!first) tsosText.append(" + ");
239 tsosText.append("MaterialEffectsOnTrack");
240 QTreeWidgetItem* meItem = new QTreeWidgetItem(TSOSitem);
241 meItem->setExpanded(true); // want it opened so subparams seen easily
242 meItem->setFlags(Qt::ItemIsEnabled);
243
244 meItem->setText(0, TrkObjToString::name( *((*it)->materialEffectsOnTrack ()) ) );
245 meItem->setText(1, TrkObjToString::shortInfo( *((*it)->materialEffectsOnTrack ()) ) );
246
247 first=false;
248 }
249 if ( (*it)->fitQualityOnSurface () ){
250 if (!first) tsosText.append(" + ");
251 tsosText.append("FitQuality");
252 QTreeWidgetItem* fqItem = new QTreeWidgetItem(TSOSitem);
253 fqItem->setExpanded(true); // want it opened so subparams seen easily
254 fqItem->setFlags(Qt::ItemIsEnabled);
255 fqItem->setText(0, QString("FitQuality") );
256 fqItem->setText(1, TrkObjToString::shortInfo( (*it)->fitQualityOnSurface () ) );
257
258 first=false;
259 }
260 // FIXME - add information about chamber for Muon systems?
261
262 if ( (*it)->type(Trk::TrackStateOnSurface::Outlier) ){
263 if (!first) tsosText.append(" + ");
264 tsosText.append("Outlier");
265 }
266
267 if ( (*it)->type(Trk::TrackStateOnSurface::InertMaterial) ){
268 if (!first) tsosText.append(" + ");
269 tsosText.append("InertMaterial");
270 }
271
272 if ( (*it)->type(Trk::TrackStateOnSurface::BremPoint) ){
273 if (!first) tsosText.append(" + ");
274 tsosText.append("BremPoint");
275 }
276
277 if ( (*it)->type(Trk::TrackStateOnSurface::Perigee) ){
278 if (!first) tsosText.append(" + ");
279 tsosText.append("Perigee");
280 }
281
282 if ( (*it)->type(Trk::TrackStateOnSurface::Hole) ){
283 if (!first) tsosText.append(" + ");
284 tsosText.append("Hole");
285 }
286 TSOSitem->setText(1, tsosText );
287 }
288 // listOfItems << browserTreeItem();
289}
virtual void setBrowserTreeItem(QTreeWidgetItem *obt)
Definition AscObj_TSOS.h:74
virtual void fillObjectBrowser(QList< QTreeWidgetItem * > &list)
Called in child classes.
const QList< AssociatedObjectHandleBase * > & getAllAscObjHandles() const
override if need to take action in this case.
static QString name(const Trk::MeasurementBase &mb)
static QString shortInfo(const Trk::MeasurementBase &mb)
static QStringList fullInfo(const Trk::MeasurementBase &tp)
Returns list of key, value, key, value etc.
@ Perigee
This represents a perigee, and so will contain a Perigee object only.
@ BremPoint
This represents a brem point on the track, and so will contain TrackParameters and MaterialEffectsBas...
@ Outlier
This TSoS contains an outlier, that is, it contains a MeasurementBase/RIO_OnTrack which was not used ...
@ InertMaterial
This represents inert material, and so will contain MaterialEffectsBase.
@ Hole
A hole on the track - this is defined in the following way.
bool first
Definition DeMoScan.py:534
list(name, path='/')
Definition histSizes.py:38

◆ getAllAscObjHandles()

const QList< AssociatedObjectHandleBase * > & TrackHandleBase::getAllAscObjHandles ( ) const
protectedinherited

override if need to take action in this case.

Return list of all AscObj handles. Not guaranteed to be filled unless tsoses are visible.

Definition at line 1633 of file TrackHandleBase.cxx.

1634{
1635 return m_d->associatedObjects;
1636}

◆ getAttachmentHandle()

AssocObjAttachmentHandle * TrackHandleBase::getAttachmentHandle ( int regionIndex,
const double & crossoverval )
privateinherited

Definition at line 1467 of file TrackHandleBase.cxx.

1468{
1469 std::map<std::pair<int,double>,AssocObjAttachmentHandle *>::iterator
1470 it = m_d->attachmentHandles.find(std::make_pair(regionIndex,crossoverval));
1471 if (it!=m_d->attachmentHandles.end())
1472 return it->second;
1473 AssocObjAttachmentHandle *attachHandle
1474 = new AssocObjAttachmentHandle(common()->trackLODManager()->getLODHandle(regionIndex,crossoverval),this);
1475 m_d->attachmentHandles[std::make_pair(regionIndex,crossoverval)] = attachHandle;
1476 return attachHandle;
1477}
friend class AssocObjAttachmentHandle

◆ getFitQuality()

const Trk::FitQuality * TrackHandle_TrkTrack::getFitQuality ( ) const
virtual

Reimplemented from TrackHandleBase.

Definition at line 398 of file TrackHandle_TrkTrack.cxx.

398 {
399 return m_trk ? m_trk->fitQuality ():nullptr;
400}

◆ getMuonReadoutElement()

const MuonGM::MuonReadoutElement * TrackHandleBase::getMuonReadoutElement ( const Trk::RIO_OnTrack & mb) const
virtualinherited

Definition at line 1965 of file TrackHandleBase.cxx.

1965 {
1966 const MuonGM::MuonReadoutElement* re = nullptr;
1967 switch (TrkObjToString::type(&mb)){
1970 break;
1973 break;
1976 break;
1979 break;
1982 break;
1983 case TrkObjToString::MM:
1985 break;
1986 default:
1987 VP1Msg::message("TrackHandleBase::getReadoutElement:: Unable to find matching readoutElement");
1988 }
1989 return re;
1990 }
const boost::regex re(r_e)
const RpcReadoutElement * getRpcReadoutElement(const Identifier &id) const
access via extended identifier (requires unpacking)
const MdtReadoutElement * getMdtReadoutElement(const Identifier &id) const
access via extended identifier (requires unpacking)
const MMReadoutElement * getMMReadoutElement(const Identifier &id) const
access via extended identifier (requires unpacking)
const TgcReadoutElement * getTgcReadoutElement(const Identifier &id) const
access via extended identifier (requires unpacking)
const sTgcReadoutElement * getsTgcReadoutElement(const Identifier &id) const
access via extended identifier (requires unpacking)
const CscReadoutElement * getCscReadoutElement(const Identifier &id) const
access via extended identifier (requires unpacking)
static MeasurementType type(const Trk::PrepRawData *prd)
static const MuonGM::MuonDetectorManager * muonDetMgr()
static void message(const QString &, IVP1System *sys=0)
Definition VP1Msg.cxx:30

◆ getNCSCHits()

virtual unsigned TrackHandle_TrkTrack::getNCSCHits ( ) const
inlinevirtual

Reimplemented from TrackHandleBase.

Definition at line 53 of file TrackHandle_TrkTrack.h.

◆ getNMDTHits()

virtual unsigned TrackHandle_TrkTrack::getNMDTHits ( ) const
inlinevirtual

Reimplemented from TrackHandleBase.

Definition at line 51 of file TrackHandle_TrkTrack.h.

◆ getNMMHits()

virtual unsigned TrackHandle_TrkTrack::getNMMHits ( ) const
inlinevirtual

Reimplemented from TrackHandleBase.

Definition at line 54 of file TrackHandle_TrkTrack.h.

◆ getNMuonHits()

virtual unsigned TrackHandleBase::getNMuonHits ( ) const
inlinevirtualinherited

Definition at line 111 of file TrackHandleBase.h.

◆ getNMuonPhiHits()

virtual unsigned TrackHandle_TrkTrack::getNMuonPhiHits ( ) const
inlinevirtual

The number of phi hits is part of hit counts below (i.e.

RPC hits include phi hits), but reported separately due to importance.

Reimplemented from TrackHandleBase.

Definition at line 49 of file TrackHandle_TrkTrack.h.

◆ getNMuonPrecisionHits()

virtual unsigned TrackHandleBase::getNMuonPrecisionHits ( ) const
inlinevirtualinherited

Reimplemented in TrackHandle_TrackParticle.

Definition at line 119 of file TrackHandleBase.h.

119{ return getNMDTHits() + getNCSCHits(); } // This should really only count eta csc hits.

◆ getNPixelHits()

virtual unsigned TrackHandle_TrkTrack::getNPixelHits ( ) const
inlinevirtual

Reimplemented from TrackHandleBase.

Definition at line 46 of file TrackHandle_TrkTrack.h.

◆ getNRPCHits()

virtual unsigned TrackHandle_TrkTrack::getNRPCHits ( ) const
inlinevirtual

Reimplemented from TrackHandleBase.

Definition at line 50 of file TrackHandle_TrkTrack.h.

◆ getNSCTHits()

virtual unsigned TrackHandle_TrkTrack::getNSCTHits ( ) const
inlinevirtual

Reimplemented from TrackHandleBase.

Definition at line 47 of file TrackHandle_TrkTrack.h.

◆ getNsTGCHits()

virtual unsigned TrackHandle_TrkTrack::getNsTGCHits ( ) const
inlinevirtual

Reimplemented from TrackHandleBase.

Definition at line 55 of file TrackHandle_TrkTrack.h.

◆ getNTGCHits()

virtual unsigned TrackHandle_TrkTrack::getNTGCHits ( ) const
inlinevirtual

Reimplemented from TrackHandleBase.

Definition at line 52 of file TrackHandle_TrkTrack.h.

◆ getNTRTHits()

virtual unsigned TrackHandle_TrkTrack::getNTRTHits ( ) const
inlinevirtual

Reimplemented from TrackHandleBase.

Definition at line 48 of file TrackHandle_TrkTrack.h.

◆ getVisibleMeasurements()

QList< AssociatedObjectHandleBase * > TrackHandleBase::getVisibleMeasurements ( ) const
inherited

Definition at line 1995 of file TrackHandleBase.cxx.

1996{
1997 QList<AssociatedObjectHandleBase*> l;
1998 if (!m_d->tsos_ascobjs) return l;
1999 std::vector<AssociatedObjectHandleBase*>::iterator
2000 it(m_d->tsos_ascobjs->begin()),
2001 itE(m_d->tsos_ascobjs->end());
2002 for (;it!=itE;++it)
2003 if ((*it)->hasMeasurement()&&(*it)->visible())
2004 l << (*it);
2005 return l;
2006}

◆ hackGetPointsPropagated()

std::vector< Amg::Vector3D > * TrackHandleBase::hackGetPointsPropagated ( )
inherited

FIXME.

Used to get position of track for use in short tubes etc.

Definition at line 1638 of file TrackHandleBase.cxx.

1639{
1640 m_d->ensureInitPointsPropagated();
1641 return m_d->points_propagated;
1642}

◆ hasCharge()

bool TrackHandleBase::hasCharge ( ) const
inlineinherited

Definition at line 100 of file TrackHandleBase.h.

100{ return charge()!=unknown(); }

◆ hasMass()

bool TrackHandleBase::hasMass ( ) const
inlineinherited

Definition at line 101 of file TrackHandleBase.h.

101{ return mass()!=unknown(); }
virtual double mass() const

◆ hasSubSystemHitInfo()

virtual bool TrackHandle_TrkTrack::hasSubSystemHitInfo ( ) const
inlinevirtual

Reimplemented from TrackHandleBase.

Definition at line 45 of file TrackHandle_TrkTrack.h.

◆ isIDTrack()

bool TrackHandleBase::isIDTrack ( ) const
virtualinherited

Definition at line 1625 of file TrackHandleBase.cxx.

1626{
1627 std::optional<Amg::Vector3D> start = startPoint();
1628 if (!start) return false;
1629 return start->perp()<1100 &&fabs( start->z())<3500;
1630}
virtual std::optional< Amg::Vector3D > startPoint() const
returns 0 if can't find start point.

◆ isRun4EDM()

virtual bool TrackHandleBase::isRun4EDM ( ) const
inlinevirtualinherited

Reimplemented in TrackHandle_TrackContainer.

Definition at line 106 of file TrackHandleBase.h.

106{ return false; }

◆ mass()

double TrackHandleBase::mass ( ) const
virtualinherited

Definition at line 1517 of file TrackHandleBase.cxx.

1518{
1519 if (m_d->massinit)
1520 return m_d->mass;
1521 m_d->massinit = true;
1522 int pdg = pdgCode();
1523 if (pdg) {
1524 bool ok;
1525 double m = VP1ParticleData::particleMass(pdg,ok);
1526 if (ok)
1527 m_d->mass = m;
1528 }
1529 return m_d->mass;
1530}
static double particleMass(const int &pdgcode, bool &ok)

◆ momentum()

Amg::Vector3D TrackHandle_TrkTrack::momentum ( ) const
virtual

Reimplemented from TrackHandleBase.

Definition at line 131 of file TrackHandle_TrkTrack.cxx.

132{
133 for (const Trk::TrackParameters* param : *m_trk->trackParameters()) {
134 if (!common()->trackSanityHelper()->isSafe(param))
135 continue;
136 return param->momentum();
137 }
139}

◆ numberOfInstances()

int TrackHandleBase::numberOfInstances ( )
staticinherited

Definition at line 248 of file TrackHandleBase.cxx.

249{
250 return Imp::ntrackhandles;
251}

◆ pdgCode()

virtual int TrackHandleBase::pdgCode ( ) const
inlinevirtualinherited

0 means unknown

Reimplemented in TrackHandle_SimulationTrack, and TrackHandle_TruthTrack.

Definition at line 87 of file TrackHandleBase.h.

◆ provide_pathInfoPoints()

virtual const std::vector< Amg::Vector3D > * TrackHandleBase::provide_pathInfoPoints ( )
inlineprotectedvirtualinherited

Reimplemented in TrackHandle_TrackContainer, and TrackHandle_TrkSegment.

Definition at line 152 of file TrackHandleBase.h.

152{ return nullptr; }

◆ provide_pathInfoTrkTrack()

const Trk::Track * TrackHandle_TrkTrack::provide_pathInfoTrkTrack ( ) const
inlinevirtual

Reimplemented from TrackHandleBase.

Definition at line 38 of file TrackHandle_TrkTrack.h.

38{ return m_trk; };

◆ registerAssocObject()

void TrackHandleBase::registerAssocObject ( AssociatedObjectHandleBase * ao)
protectedinherited

Trackhandle assumes ownership.

Definition at line 1448 of file TrackHandleBase.cxx.

1449{
1450 if (VP1Msg::verbose()) {
1451 if (m_d->associatedObjects.contains(ao)) {
1452 m_d->theclass->collHandle()->systemBase()->message("TrackHandleBase::registerAssocObject ERROR: object already registered!");
1453 return;
1454 }
1455 }
1456 //Assume ownership of this associated object:
1457 if (!ao) {
1458 m_d->theclass->collHandle()->systemBase()->message("TrackHandleBase::registerAssocObject ERROR: object is null!");
1459 return;
1460 }
1461
1462 m_d->associatedObjects << ao;
1463}

◆ registerTouchedMuonChamber()

void TrackHandleBase::registerTouchedMuonChamber ( const GeoPVConstLink & chamberPV) const
protectedinherited

If not earlier, touched muon chambers must me registered at latest when this method is invoked.

Call this from constructor - (at least) once for each muon chamber "touched" by this track.

Definition at line 1268 of file TrackHandleBase.cxx.

1269{
1270 m_d->touchedmuonchambers.insert(chamberPV);
1271}

◆ registerTrack()

void TrackHandleBase::registerTrack ( )
privateinherited

Definition at line 649 of file TrackHandleBase.cxx.

650{
651 if (m_d->line)
652 common()->registerTrack(m_d->line,this);
653}
void registerTrack(SoNode *, TrackHandleBase *)

◆ rerandomiseRandomMaterial()

void TrackHandleBase::rerandomiseRandomMaterial ( )
inherited

Definition at line 1394 of file TrackHandleBase.cxx.

1395{
1396 if ( !m_d->randommaterial )//We will anyway rerandomize it when we need it
1397 return;
1398
1399 double r2 = 0.3*0.3;
1400 unsigned i(0);
1401 double r,g,b;
1402 bool ok;
1403 while (true) {
1404 r = (rand() / static_cast<double>(RAND_MAX));
1405 g = (rand() / static_cast<double>(RAND_MAX));
1406 b = (rand() / static_cast<double>(RAND_MAX));
1407 ok = true;
1408 //For now we make sure that we avoid black and red. This should be updated from bgd and highlight col automatically! (fixme).
1409 // -> and we should probably also make sure that tracks close in (eta,phi) are well separated in colour-space.
1410 if ( (r-1.0)*(r-1.0)+g*g+b*b < r2*0.5 )//avoid red (distance)
1411 ok = false;
1412 else if ( r*r/(r*r+g*g+b*b) > 0.8 )//avoid red (angle)
1413 ok = false;
1414 else if ( r*r+g*g+b*b < r2*2.0 )//avoid black
1415 ok = false;
1416 if (ok)
1417 break;
1418 ++i;
1419 if (i>50 ) {
1420 r2 *= 0.99;//To avoid problem in case we add too many forbidden spheres.
1421 if (i>1000) {
1422 //Just a safety
1423 m_d->theclass->collHandle()->systemBase()->message("TrackHandleBase::rerandomiseRandomMaterial Warning: Random colour could"
1424 " not be selected such as to satisfy all separation criterias");
1425 break;
1426 }
1427 }
1428 }
1430 collHandle()->collMaterialBrightness(),
1431 collHandle()->collMaterialTransparency());
1432}
static void setMaterialParameters(SoMaterial *m, const QColor &, const double &brightness=0.0, const double &transp=0.0)
int r
Definition globals.cxx:22

◆ setCustomColouredTSOSParts()

void TrackHandleBase::setCustomColouredTSOSParts ( TrackCommonFlags::TSOSPartsFlags f)
privateinherited

Definition at line 355 of file TrackHandleBase.cxx.

356{
357 if (m_d->customColouredTSOSParts==f)
358 return;
359 //Figure out changed bits:
360 TrackCommonFlags::TSOSPartsFlags change(m_d->customColouredTSOSParts ^ f);//^ is XOR
361 m_d->customColouredTSOSParts=f;
362
363 if (!m_d->tsos_ascobjs||m_d->shownTSOSParts==TrackCommonFlags::TSOS_NoObjects)
364 return;
365
366 TrackCommonFlags::TSOSPartsFlags changedShownParts(change & m_d->shownTSOSParts);
367
368 if (!changedShownParts)
369 return;
370
371 std::vector<AssociatedObjectHandleBase*>::iterator it(m_d->tsos_ascobjs->begin()), itE(m_d->tsos_ascobjs->end());
372 for (;it!=itE;++it) {
373 if ((*it)->parts()&changedShownParts)
374 (*it)->update3DObjects();
375 }
376}

◆ setShownTSOSParts()

void TrackHandleBase::setShownTSOSParts ( TrackCommonFlags::TSOSPartsFlags f)
privateinherited

Definition at line 311 of file TrackHandleBase.cxx.

312{
313 VP1Msg::messageDebug(QString("TrackHandleBase::setShownTSOSParts to ")+QString::number(f) );
314
315 if (m_d->shownTSOSParts==f){
316 VP1Msg::messageDebug(QString("->No change in shown parts. Skipping."));
317 return;
318 }
319
320 //Figure out changed bits:
321 TrackCommonFlags::TSOSPartsFlags change(m_d->shownTSOSParts ^ f);//^ is XOR
322 m_d->shownTSOSParts=f;
323 if (!m_d->tsos_ascobjs&&(m_d->shownTSOSParts==TrackCommonFlags::TSOS_NoObjects||!visible()))
324 return;
325
326 ensureInitTSOSs(m_d->tsos_ascobjs);
327 //Loop over all TSOS objects. Those with changed parts needs shape
328 //and visibility update:
329 std::vector<AssociatedObjectHandleBase*>::iterator it(m_d->tsos_ascobjs->begin()), itE(m_d->tsos_ascobjs->end());
330 for (;it!=itE;++it) {
331 const bool vis = (*it)->parts() & m_d->shownTSOSParts;
332 if (!((*it)->parts()&change)){
333 continue;
334 }
335
336 if (vis==(*it)->visible()) {
337 //Just update shape:
338 (*it)->update3DObjects();
339 continue;
340 }
341 //Need both shape and visibility updates.
342 if (vis) {
343 //update shape and then turn visible:
344 (*it)->update3DObjects();
345 (*it)->setVisible(vis);
346 } else {
347 //turn invisible and then update (i.e. invalidate) shape:
348 (*it)->setVisible(vis);
349 (*it)->update3DObjects();
350 }
351 }
352}
virtual void ensureInitTSOSs(std::unique_ptr< std::vector< AssociatedObjectHandleBase * > > &)
Ensure that the TSOSs are initialized.

◆ setVisible()

void TrackHandleBase::setVisible ( bool vis)
inherited

use by the collection handle.

Definition at line 433 of file TrackHandleBase.cxx.

434{
435 std::cout<<"TrackHandleBase::setVisible"<<std::endl;
436 QString tmp = (vis)?"True":"False";
437 QString tmp2 = (m_visible)?"True":"False";
438 VP1Msg::messageDebug(QString("TrackHandleBase calling setVisible with vis=")+tmp+QString(", and m_visible=")+tmp2 );
439 if (vis==m_visible)
440 return;
441 std::cout<<"TrackHandleBase::setVisible 1"<<std::endl;
442
443 m_visible=vis;
444 if (vis) {
445 m_collhandle->incrementNShownHandles();
446 if (!touchedMuonChambers().empty()) {
447 for (std::set<GeoPVConstLink>::iterator it=touchedMuonChambers().begin(); it!=touchedMuonChambers().end(); ++it)
449 }
450 if (!m_d->line)
451 m_d->rebuild3DObjects();//The call to rebuild also fixes attached state.
452 else
453 m_d->attach3DObjects();
454 } else {
455 m_collhandle->decrementNShownHandles();
456 if (!touchedMuonChambers().empty()) {
457 for (std::set<GeoPVConstLink>::iterator it=touchedMuonChambers().begin(); it!=touchedMuonChambers().end(); ++it)
459 }
460 m_d->detach3DObjects();
461 }
462
463 std::cout<<"TrackHandleBase::setVisible 2"<<std::endl;
464
465
466 bool initTSOS(false);
467 if (!m_d->tsos_ascobjs&&vis&&m_d->shownTSOSParts!=TrackCommonFlags::TSOS_NoObjects) {
468 ensureInitTSOSs(m_d->tsos_ascobjs);
469 initTSOS = true;
470 }
471 std::cout<<"m_d->tsos_ascobjs: "<<m_d->tsos_ascobjs<<std::endl;
472 std::cout<<"m_d->shownTSOSParts!=TrackCommonFlags::TSOS_NoObjects "<<(m_d->shownTSOSParts!=TrackCommonFlags::TSOS_NoObjects)<<std::endl;
473 std::cout<<"TrackHandleBase::setVisible 3"<<std::endl;
474
475 if (!initTSOS && m_d->tsos_ascobjs) {
476 std::vector<AssociatedObjectHandleBase*>::iterator
477 it(m_d->tsos_ascobjs->begin()),
478 itE(m_d->tsos_ascobjs->end());
479 if (m_d->shownTSOSParts!=TrackCommonFlags::TSOS_NoObjects) {
480 for (;it!=itE;++it) {
481 if ((*it)->visible()!=((*it)->parts() & m_d->shownTSOSParts))
482 (*it)->toggleVisible();
483 }
484 } else {
485 for (;it!=itE;++it) {
486 if ((*it)->visible())
487 (*it)->setVisible(false);
488 }
489 }
490 }
491 std::cout<<"TrackHandleBase::setVisible 4"<<std::endl;
492
494
495 std::map<std::pair<int,double>,AssocObjAttachmentHandle *>::iterator it,itE(m_d->attachmentHandles.end());
496 for (it = m_d->attachmentHandles.begin();it!=itE;++it)
497 it->second->trackVisibilityChanged();
498
499 //Label
500
501}
static const Attributes_t empty
void decrementNumberOfObjectsForPV(const GeoPVConstLink &chamberPV)
void incrementNumberOfObjectsForPV(const GeoPVConstLink &chamberPV)
const std::set< GeoPVConstLink > & touchedMuonChambers() const
virtual void visibleStateChanged()
override if need to take action in this case.
TouchedMuonChamberHelper * touchedMuonChamberHelper() const

◆ shortInfo()

QString TrackHandle_TrkTrack::shortInfo ( ) const
virtual

returns mom and hit information about track

Reimplemented from TrackHandleBase.

Definition at line 313 of file TrackHandle_TrkTrack.cxx.

314{
315 // get the track's momentum
317 mom /= CLHEP::GeV;
318
319 // format info string
320 QString l;
321 l += "|Pt|="+VP1Msg::str(mom.perp())+" [GeV], ";
322 l += "|P|="+VP1Msg::str(mom.mag())+" [GeV], ";
323 l += "Pix["+QString::number(getNPixelHits())+"], SCT["+QString::number(getNSCTHits())+"], TRT["+QString::number(getNTRTHits())
324 +"], MDT["+QString::number(getNMDTHits())+"], RPC["+QString::number(getNRPCHits())+"], TGC["+QString::number(getNTGCHits())+"], CSC["+QString::number(getNCSCHits())+"], MM["+QString::number(getNMMHits())+"], sTGC["+QString::number(getNsTGCHits());
325 return l;
326}
virtual unsigned getNMDTHits() const
virtual unsigned getNCSCHits() const
virtual Amg::Vector3D momentum() const
virtual unsigned getNsTGCHits() const
virtual unsigned getNRPCHits() const
virtual unsigned getNTRTHits() const
virtual unsigned getNMMHits() const
virtual unsigned getNSCTHits() const
virtual unsigned getNPixelHits() const
virtual unsigned getNTGCHits() const

◆ shownTSOSParts()

TrackCommonFlags::TSOSPartsFlags TrackHandleBase::shownTSOSParts ( ) const
inherited

Definition at line 299 of file TrackHandleBase.cxx.

300{
301 return m_d->shownTSOSParts;//FIXME: inline?
302}

◆ startPoint()

std::optional< Amg::Vector3D > TrackHandleBase::startPoint ( ) const
virtualinherited

returns 0 if can't find start point.

Definition at line 1586 of file TrackHandleBase.cxx.

1587{
1588 m_d->ensureLoadPathInfo();
1589 if (m_d->pathInfo_TrkTrack) {
1590 Trk::TrackStates::const_iterator tsos_iter = m_d->pathInfo_TrkTrack->trackStateOnSurfaces()->begin();
1591 Trk::TrackStates::const_iterator tsos_end = m_d->pathInfo_TrkTrack->trackStateOnSurfaces()->end();
1592 for (; tsos_iter != tsos_end; ++tsos_iter) {
1593 if (common()->trackSanityHelper()->isSafe(*tsos_iter)) {
1594 const Trk::TrackParameters* trackParam = (*tsos_iter)->trackParameters();
1595 if (common()->trackSanityHelper()->isSafe(trackParam))
1596 return trackParam->position();
1597 }
1598 }
1599 } else if (m_d->pathInfo_Points&&!m_d->pathInfo_Points->empty()) {
1600 return m_d->pathInfo_Points->at(0);
1601 }
1602 return {};
1603}

◆ touchedMuonChambers()

const std::set< GeoPVConstLink > & TrackHandleBase::touchedMuonChambers ( ) const
inherited

Definition at line 1274 of file TrackHandleBase.cxx.

1275{
1276 if (!m_d->inittouchedchambers) {
1279 m_d->inittouchedchambers=true;
1280 }
1281 return m_d->touchedmuonchambers;
1282}
virtual void ensureTouchedMuonChambersInitialised() const

◆ trkTrackPointer()

const Trk::Track * TrackHandle_TrkTrack::trkTrackPointer ( ) const
inline

Definition at line 43 of file TrackHandle_TrkTrack.h.

43{ return m_trk; }

◆ type()

virtual QString TrackHandle_TrkTrack::type ( ) const
inlinevirtual

return very short word with type (maybe link with collection type?)

Reimplemented from TrackHandleBase.

Definition at line 65 of file TrackHandle_TrkTrack.h.

◆ unknown()

double TrackHandleBase::unknown ( )
inlinestaticinherited

Definition at line 103 of file TrackHandleBase.h.

103{ return -999.0; }

◆ update3DObjects()

void TrackHandleBase::update3DObjects ( bool invalidatePropagatedPoints = false,
float maxR = 0.0 )
inherited

Definition at line 504 of file TrackHandleBase.cxx.

505{
506 VP1Msg::messageVerbose(QString("TrackHandleBase::update3DObject with maxR set to ")+QString::number(maxR) );
507 if (maxR>0.0) {
508 m_d->tempMaxPropRadius=maxR;
509 }
510 if ( invalidatePropagatedPoints) {
511 if (m_d->points_propagated != m_d->points_raw) {
512 delete m_d->points_propagated;m_d->points_propagated = nullptr;
513 }
514 delete m_d->points_raw;m_d->points_raw = nullptr;
515 if (m_d->points_propagated_id_projections) { delete m_d->points_propagated_id_projections; m_d->points_propagated_id_projections = nullptr; }
516 if (m_d->points_propagated_muon_projections) { delete m_d->points_propagated_muon_projections; m_d->points_propagated_muon_projections = nullptr; }
517 }
518 if (m_visible) {
519 m_d->rebuild3DObjects();
520 } else {
521 //Simply clear the present 3D objects. They will only be recreated if/when the track becomes visible again.
522 clearLine();
523 }
524 m_d->tempMaxPropRadius=0.0;
525}

◆ updateInDetProjections()

void TrackHandleBase::updateInDetProjections ( )
inherited

Definition at line 528 of file TrackHandleBase.cxx.

529{
530 //Invalidate points of indet projections if already calculated:
531 if (m_d->points_raw_id_projections!=m_d->points_propagated_id_projections)
532 delete m_d->points_propagated_id_projections;
533 delete m_d->points_raw_id_projections;
534 m_d->points_raw_id_projections = nullptr;
535 m_d->points_propagated_id_projections = nullptr;
536 //Rebuild 3D objects:
538}
void update3DObjects(bool invalidatePropagatedPoints=false, float maxR=0.0)

◆ updateMaterial()

void TrackHandleBase::updateMaterial ( )
inherited

Definition at line 953 of file TrackHandleBase.cxx.

954{
955 //We need to change the current material. This means we need to
956 //clear the cache. Only if we are visible do we need to do a
957 //detach->clear material->attach cycle to trigger attachment under new material.
958
960 return;//We have no material cached and is thus not attached either.
961 if (m_visible) {
962 //See if the material changed. If it did, detach, update the material, attach again.
963 SoMaterial * newmat = m_d->determineMaterial();
964 newmat->ref();
965 if (newmat!=m_currentmaterial) {
966 m_d->detach3DObjects();
967 m_currentmaterial->unref();
968 m_currentmaterial = newmat;
969 m_d->attach3DObjects();
970 m_d->materialChanged();
971 } else {
972 newmat->unref();
973 }
974 } else {
975 //Just clear material.
976 m_currentmaterial->unref();
977 m_currentmaterial = nullptr;
978 m_d->materialChanged();
979 }
980}

◆ updateMuonProjections()

void TrackHandleBase::updateMuonProjections ( )
inherited

Definition at line 541 of file TrackHandleBase.cxx.

542{
543 //Invalidate points of indet projections if already calculated:
544 if (m_d->points_raw_muon_projections!=m_d->points_propagated_muon_projections)
545 delete m_d->points_propagated_muon_projections;
546 delete m_d->points_raw_muon_projections;
547 m_d->points_raw_muon_projections = nullptr;
548 m_d->points_propagated_muon_projections = nullptr;
549 //Rebuild 3D objects:
551}

◆ updateObjectBrowser()

void TrackHandle_TrkTrack::updateObjectBrowser ( )
virtual

Reimplemented from TrackHandleBase.

Definition at line 329 of file TrackHandle_TrkTrack.cxx.

329 {
330
331 if ( !browserTreeItem()) {
332 VP1Msg::messageVerbose("updateObjectBrowser: No m_objBrowseTree!");
333 return;
334 }
335
336 if (!visible()) {
337 browserTreeItem()->setFlags(Qt::ItemFlag()); // not selectable, not enabled
338 } else {
339 browserTreeItem()->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); // selectable, enabled
340 }
341 QFont font= browserTreeItem()->font(0);
342 font.setStrikeOut(!visible());
343 browserTreeItem()->setFont(0, font );
344 browserTreeItem()->setFont(1, font );
345
346
347 // FIXME! Only do if necessary i.e. if something affecting this TSOS has changed.
348
349 QList<AssociatedObjectHandleBase*> list = getAllAscObjHandles();
350
351 if (list.empty()) {
352 VP1Msg::message("No ASC objects associated with this track - no track components visible yet?");
353 return;
354 }
355
358 unsigned int numOfTSOS=0;
359 for (;it!=itE;++it,++numOfTSOS){
360 AscObj_TSOS* asc = dynamic_cast<AscObj_TSOS*>(list.at(numOfTSOS));
361 if (!(asc && asc->trackStateOnSurface()==*it && !list.empty()) ) {
362 // Fallback.
363 VP1Msg::message("TSOS#"+QString::number(numOfTSOS)+" does not seem to match AscObj_TSOS in list, which has size="+QString::number(list.size())+" Will try fallback.");
364 for (int i = 0; i < list.size(); ++i) {
365 AscObj_TSOS* asc = dynamic_cast<AscObj_TSOS*>(list.at(i));
366 if (asc && asc->trackStateOnSurface()==*it) {
367 VP1Msg::message("-> this ASC matches "+QString::number(i));
368 }
369 }
370 }
371 if (!asc) {
372 VP1Msg::message("Could not find matching Asc in list of size "+QString::number(list.size()));
373 continue;
374 }
375
376 if (!asc->browserTreeItem()){
377 // not set yet - so need to do this now. Can we just use the index?
378 asc->setBrowserTreeItem(browserTreeItem()->child(numOfTSOS));
379 }
380
381 if (!asc->browserTreeItem()){
382 VP1Msg::message("Could not find matching browserTreeItem");
383 continue;
384 }
385
386 if (!asc->visible()) {
387 asc->browserTreeItem()->setFlags(Qt::ItemFlag()); // not selectable, not enabled
388 } else {
389 asc->browserTreeItem()->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); // selectable, enabled
390 }
391 QFont itemFont = asc->browserTreeItem()->font(0);
392 itemFont.setStrikeOut(!asc->visible());
393 asc->browserTreeItem()->setFont(0, itemFont);
394 asc->browserTreeItem()->setFont(1, itemFont);
395 }
396}
virtual QTreeWidgetItem * browserTreeItem() const
Definition AscObj_TSOS.h:73
const Trk::TrackStateOnSurface * trackStateOnSurface() const
Definition AscObj_TSOS.h:65

◆ updateRandomColourTransparencyAndBrightness()

void TrackHandleBase::updateRandomColourTransparencyAndBrightness ( )
inherited

Definition at line 1435 of file TrackHandleBase.cxx.

1436{
1437 if ( !m_d->randommaterial )//We will anyway set up correctly when needed.
1438 return;
1439 float r,g,b;
1440 m_d->randommaterial->diffuseColor[0].getValue(r,g,b);
1442 collHandle()->collMaterialBrightness(),
1443 collHandle()->collMaterialTransparency());
1444}

◆ updateShapes_TSOSWithErrors()

void TrackHandleBase::updateShapes_TSOSWithErrors ( )
privateinherited

Definition at line 273 of file TrackHandleBase.cxx.

274{
275 if (!m_d->tsos_ascobjs)
276 return;
277 std::vector<AssociatedObjectHandleBase*>::iterator
278 it(m_d->tsos_ascobjs->begin()),
279 itE(m_d->tsos_ascobjs->end());
280 for (;it!=itE;++it)
281 if ((*it)->hasError())
282 (*it)->update3DObjects();
283}

◆ updateShapes_TSOSWithMaterialEffects()

void TrackHandleBase::updateShapes_TSOSWithMaterialEffects ( )
privateinherited

Definition at line 286 of file TrackHandleBase.cxx.

287{
288 if (!m_d->tsos_ascobjs)
289 return;
290 std::vector<AssociatedObjectHandleBase*>::iterator
291 it(m_d->tsos_ascobjs->begin()),
292 itE(m_d->tsos_ascobjs->end());
293 for (;it!=itE;++it)
294 if ((*it)->hasMaterialEffect())
295 (*it)->update3DObjects();
296}

◆ updateShapes_TSOSWithMeasurements()

void TrackHandleBase::updateShapes_TSOSWithMeasurements ( )
privateinherited

Definition at line 260 of file TrackHandleBase.cxx.

261{
262 if (!m_d->tsos_ascobjs)
263 return;
264 std::vector<AssociatedObjectHandleBase*>::iterator
265 it(m_d->tsos_ascobjs->begin()),
266 itE(m_d->tsos_ascobjs->end());
267 for (;it!=itE;++it)
268 if ((*it)->hasMeasurement())
269 (*it)->update3DObjects();
270}

◆ visible()

bool TrackHandleBase::visible ( ) const
inlineinherited

Definition at line 68 of file TrackHandleBase.h.

68{ return m_visible; }

◆ visibleStateChanged()

void TrackHandle_TrkTrack::visibleStateChanged ( )
privatevirtual

override if need to take action in this case.

Reimplemented from TrackHandleBase.

Definition at line 142 of file TrackHandle_TrkTrack.cxx.

143{
144 static_cast<TrackCollHandle_TrkTrack*>(collHandle())->visibleStateUpdated(this);
146}

◆ zoomToTSOS()

SoNode * TrackHandle_TrkTrack::zoomToTSOS ( unsigned int index)

Depending on controller configuration attempt to zoom to the corresponding TSOS & returned detailed node matching it.

Definition at line 291 of file TrackHandle_TrkTrack.cxx.

292{
293 if (trkTrackPointer() && (index<trkTrackPointer()->trackStateOnSurfaces()->size() )){
294 const Trk::TrackStateOnSurface* tsos = (*trkTrackPointer()->trackStateOnSurfaces())[index];
295 // now find matching AscObj_TSOS
296 QList<AssociatedObjectHandleBase*> list = getAllAscObjHandles();
297 for (int i = 0; i < list.size(); ++i) {
298 // VP1Msg::messageVerbose("TrackSystemController::objectBrowserClicked: checking ASC "+QString::number(i));
299
300 AscObj_TSOS* asc = dynamic_cast<AscObj_TSOS*>(list.at(i));
301 if (asc) {
302 if (asc && asc->trackStateOnSurface()==tsos) {
303 VP1Msg::messageVerbose("TrackSystemController::objectBrowserClicked: this ASC matches "+QString::number(i));
304 //asc->zoomView();
305 return asc->shapeDetailed();
306 }
307 }
308 }
309 }
310 return nullptr;
311}

Member Data Documentation

◆ m_collhandle

TrackCollHandleBase* TrackHandleBase::m_collhandle
privateinherited

Definition at line 179 of file TrackHandleBase.h.

◆ m_currentmaterial

SoMaterial* TrackHandleBase::m_currentmaterial
privateinherited

Definition at line 180 of file TrackHandleBase.h.

◆ m_d

Imp* TrackHandleBase::m_d
privateinherited

Definition at line 174 of file TrackHandleBase.h.

◆ m_hitInfoStatus

int TrackHandle_TrkTrack::m_hitInfoStatus
mutableprivate

-1: uninitialized, 0: not present, 1: present.

Definition at line 80 of file TrackHandle_TrkTrack.h.

◆ m_nhits_csc

unsigned TrackHandle_TrkTrack::m_nhits_csc
mutableprivate

Definition at line 77 of file TrackHandle_TrkTrack.h.

◆ m_nhits_mdt

unsigned TrackHandle_TrkTrack::m_nhits_mdt
mutableprivate

Definition at line 75 of file TrackHandle_TrkTrack.h.

◆ m_nhits_mm

unsigned TrackHandle_TrkTrack::m_nhits_mm
mutableprivate

Definition at line 78 of file TrackHandle_TrkTrack.h.

◆ m_nhits_muon_phi

unsigned TrackHandle_TrkTrack::m_nhits_muon_phi
mutableprivate

Definition at line 73 of file TrackHandle_TrkTrack.h.

◆ m_nhits_pixel

unsigned TrackHandle_TrkTrack::m_nhits_pixel
mutableprivate

Definition at line 70 of file TrackHandle_TrkTrack.h.

◆ m_nhits_rpc

unsigned TrackHandle_TrkTrack::m_nhits_rpc
mutableprivate

Definition at line 74 of file TrackHandle_TrkTrack.h.

◆ m_nhits_sct

unsigned TrackHandle_TrkTrack::m_nhits_sct
mutableprivate

Definition at line 71 of file TrackHandle_TrkTrack.h.

◆ m_nhits_stgc

unsigned TrackHandle_TrkTrack::m_nhits_stgc
mutableprivate

Definition at line 79 of file TrackHandle_TrkTrack.h.

◆ m_nhits_tgc

unsigned TrackHandle_TrkTrack::m_nhits_tgc
mutableprivate

Definition at line 76 of file TrackHandle_TrkTrack.h.

◆ m_nhits_trt

unsigned TrackHandle_TrkTrack::m_nhits_trt
mutableprivate

Definition at line 72 of file TrackHandle_TrkTrack.h.

◆ m_trk

const Trk::Track* TrackHandle_TrkTrack::m_trk
protected

Definition at line 84 of file TrackHandle_TrkTrack.h.

◆ m_visible

bool TrackHandleBase::m_visible
privateinherited

Definition at line 178 of file TrackHandleBase.h.


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