ATLAS Offline Software
Loading...
Searching...
No Matches
TrackSysCommonData.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
3*/
4
5
7// //
8// Implementation of class TrackSysCommonData //
9// //
10// Author: Thomas H. Kittelmann (Thomas.Kittelmann@cern.ch) //
11// Initial version: April 2008 //
12// //
14
16
25
28
30
32#include "VP1Base/VP1Msg.h"
34
35#include <Inventor/C/errors/debugerror.h>
36#include <Inventor/nodes/SoVertexProperty.h>
37#include <Inventor/nodes/SoPointSet.h>
38#include <Inventor/nodes/SoSeparator.h>
39
40#include <QTreeWidgetItem>
41
42#include<map>
43
44//____________________________________________________________________
46public:
47 std::map<SoNode*,TrackHandleBase*> nodeToTrackHandle;
48};
49
50//____________________________________________________________________
52 : VP1HelperClassBase(sys,"TrackSysCommonData"), m_textSep(nullptr), m_d(new Imp),
54{
55 m_3dsystem = sys;
63
64 m_singlePoint = new SoPointSet;
65 m_singlePoint->ref();
66 SoVertexProperty * vertices = new SoVertexProperty;
67 vertices->vertex.set1Value(0,0.0f,0.0f,0.0f);
68 m_singlePoint->numPoints=1;
69 m_singlePoint->vertexProperty.setValue(vertices);
70
71 m_trackLODManager = new TrackLODManager(nullptr,sys);
72 QObject::connect( m_controller,SIGNAL(assocObjDetailLevelChanged(TrackCommonFlags::DETAILLEVEL)),
74 m_trackLODManager->setDetailLevel(m_controller->assocObjDetailLevel());
75
76 QObject::connect(m_touchedMuonChamberHelper,SIGNAL(touchedMuonChambersChanged(const std::set<GeoPVConstLink>&)),
77 sys,SLOT(emitTouchedMuonChambersChanged(const std::set<GeoPVConstLink>&)));//Fixme: need track sys!!
78
81 QObject::connect(m_visTrkTracksToMaterialHelper,SIGNAL(visibleObjectsChanged()),sys,SLOT(visibleObjectsChanged()));
82 QObject::connect(m_visTrkSegmentsToMaterialHelper,SIGNAL(visibleObjectsChanged()),sys,SLOT(visibleObjectsChanged()));
83
84 // Get geometry context
85 if (!VP1SGAccessHelper(m_3dsystem).retrieve(m_geometryContext , "ActsAlignment")) {
86 message("Error: Could not retrieve ACTS alignment=");
87 }
88
89}
90
91//____________________________________________________________________
111
112//____________________________________________________________________
117
118//____________________________________________________________________
120{
121 m_ascObjSelectionManager->aboutTodelete();//To allow to emit signals.
123 m_ascObjSelectionManager = nullptr;
124 m_touchedMuonChamberHelper->eraseEventData();
125 m_trackLODManager->eraseEventData();
126 m_visTrkTracksToMaterialHelper->setNoVisibleObjects();
127 m_visTrkSegmentsToMaterialHelper->setNoVisibleObjects();
128 // m_d->nodeToTrackHandle.clear(); TrackHandle destructor already ensures that unregister... below is called.
129}
130
131//____________________________________________________________________
133{
134 if (VP1Msg::verbose()) {
135 if (!node||!handle) {
136 message("registerTrack ERROR: Received null pointer!");
137 return;
138 }
139 std::map<SoNode*,TrackHandleBase*>::iterator it = m_d->nodeToTrackHandle.find(node);
140 if (it!=m_d->nodeToTrackHandle.end())
141 message("registerTrack ERROR: Node already registered!");
142 }
143 m_d->nodeToTrackHandle[node]=handle;
144}
145
146//____________________________________________________________________
148{
149 if (VP1Msg::verbose()) {
150 if (!node) {
151 message("unregisterTrack ERROR: Received null pointer!");
152 return;
153 }
154 }
155 std::map<SoNode*,TrackHandleBase*>::iterator it = m_d->nodeToTrackHandle.find(node);
156 if (it==m_d->nodeToTrackHandle.end()) {
157 message("unregisterTrack ERROR: Not previously registered!");
158 return;
159 }
160 m_d->nodeToTrackHandle.erase(it);
161}
162
163//____________________________________________________________________
165{
166 if (!n)
167 return nullptr;
168 std::map<SoNode*,TrackHandleBase*>::iterator it = m_d->nodeToTrackHandle.find(n);
169 if (it!=m_d->nodeToTrackHandle.end())
170 return it->second;
171 return nullptr;
172}
173
174//____________________________________________________________________
176{
177 if (!h)
178 return nullptr;
179 std::map<SoNode*,TrackHandleBase*>::iterator it = m_d->nodeToTrackHandle.begin(), itEnd=m_d->nodeToTrackHandle.end();
180 for (; it!=itEnd;++it)
181 if (it->second==h) return it->first;
182 return nullptr;
183}
184
185//____________________________________________________________________
186SoNode* TrackSysCommonData::node(QTreeWidgetItem* item)
187{
188 if (!item)
189 return nullptr;
190 std::map<SoNode*,TrackHandleBase*>::iterator it = m_d->nodeToTrackHandle.begin(), itEnd=m_d->nodeToTrackHandle.end();
191 for (; it!=itEnd;++it)
192 if (it->second->browserTreeItem()==item) return it->first;
193 return nullptr;
194}
195
197{
198 if (!trk) {
199 messageVerbose("TrackSysCommonData::getHandle(): Received null pointer!");
200 return nullptr;
201 }
202// messageVerbose("TrackSysCommonData::getHandle(): about to loop over this many elements:"+QString::number(m_d->nodeToTrackHandle.size()));
203
204 std::map<SoNode*,TrackHandleBase*>::iterator it = m_d->nodeToTrackHandle.begin(), itEnd=m_d->nodeToTrackHandle.end();
205 for (; it!=itEnd;++it){
206 const TrackHandle_TrkTrack* trkHandle = dynamic_cast<const TrackHandle_TrkTrack*>(it->second);
207 if (trkHandle && trkHandle->trkTrackPointer()==trk) return trkHandle;
208 }
209 return nullptr;
210}
211
215
216
218 if (m_idHelperSvc.retrieve().isFailure()) {
219 message("IMuonIdHelperSvc ERROR: Can not retrieve");
220 }
221 return m_idHelperSvc;
222 }
223
224
Header file for AthHistogramAlgorithm.
static InDetProjHelper * createTRTHelper(IVP1System *sys=0)
static InDetProjHelper * createPixelHelper(IVP1System *sys=0)
static InDetProjHelper * createSCTHelper(IVP1System *sys=0)
const Trk::Track * trkTrackPointer() const
std::map< SoNode *, TrackHandleBase * > nodeToTrackHandle
AscObjSelectionManager * m_ascObjSelectionManager
const ActsTrk::GeometryContext * m_geometryContext
InDetProjHelper * m_indetProjHelper_SCT
TrackHandleBase * trackHandle(SoNode *n)
TouchedMuonChamberHelper * m_touchedMuonChamberHelper
InDetProjHelper * m_indetProjHelper_TRT
void registerTrack(SoNode *, TrackHandleBase *)
TrackLODManager * m_trackLODManager
TrackSysCommonData(VP1TrackSystem *sys, TrackSystemController *)
VisibleObjectToMaterialHelper< Trk::Segment > * m_visTrkSegmentsToMaterialHelper
VP1TrackSanity * m_trackSanity
MuonChamberProjectionHelper * m_muonChamberProjectionHelper
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
ServiceHandle< Muon::IMuonIdHelperSvc > & muonIdHelperSvc()
const TrackHandleBase * getHandle(const Trk::Track *trk)
TrackSystemController * m_controller
VisibleObjectToMaterialHelper< Trk::Track > * m_visTrkTracksToMaterialHelper
void unregisterTrack(SoNode *)
SoNode * node(TrackHandleBase *h)
Returns the node associated with this handle.
TrackPropagationHelper * m_trackPropagationHelper
const ActsTrk::GeometryContext & geometryContext() const
TrackHandleBase * m_lastSelectedTrack
TrackSystemController * controller() const
VP1TrackSystem * m_3dsystem
void setEventData(AscObjSelectionManager *)
InDetProjHelper * m_indetProjHelper_Pixel
VP1HelperClassBase(IVP1System *sys=0, QString helpername="")
void messageVerbose(const QString &) const
void message(const QString &) const
static bool verbose()
Definition VP1Msg.h:31