ATLAS Offline Software
Loading...
Searching...
No Matches
PRDSysCommonData.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 PRDSysCommonData //
9// //
10// Author: Thomas H. Kittelmann (Thomas.Kittelmann@cern.ch) //
11// Initial version: July 2008 //
12// //
14
17
23
26
27#include <Inventor/C/errors/debugerror.h>
28#include <Inventor/nodes/SoSeparator.h>
29#include <Inventor/nodes/SoTransform.h>
30#include <Inventor/SoPath.h>
31
32
33//____________________________________________________________________
35public:
36 //The following map is used to figure out which handle a clicked node corresponds to.
37 //We use the SoTransform node to uniquely identify this association.
38 std::map<SoNode*,PRDHandleBase*> sotransform2prdhandle;
39 PRDHandleBase * pickedPathToHandle( SoPath*pickedPath );
40
41 //The following map is used to find handles for a given prd pointer:
42 std::map< const Trk::PrepRawData *, QList<PRDHandleBase *> > prd2handles;
43};
44
45
46//____________________________________________________________________
48 : VP1HelperClassBase(sys,"PRDSysCommonData"), m_d(new Imp),
50{
51 m_3dsystem = sys;
59
60 QObject::connect(m_touchedMuonChamberHelper,SIGNAL(touchedMuonChambersChanged(const std::set<GeoPVConstLink>&)),
61 sys,SLOT(emitTouchedMuonChambersChanged(const std::set<GeoPVConstLink>&)));//Fixme: need track sys!!
62
63 m_trackAndSegmentHelper = new PRDTrackSegmentHelper(&(m_d->prd2handles),sys);
64}
65
66//____________________________________________________________________
79
80//____________________________________________________________________
82{
83 m_touchedMuonChamberHelper->eraseEventData();
84 m_d->sotransform2prdhandle.clear();
85 m_d->prd2handles.clear();
86}
87
88
89//_____________________________________________________________________________________
91{
92 assert(m_d->sotransform2prdhandle.find(transform)==m_d->sotransform2prdhandle.end());
93 m_d->sotransform2prdhandle[transform] = handle;
94}
95
96//_____________________________________________________________________________________
98{
99 if (m_d->prd2handles.find(prd)==m_d->prd2handles.end()) {
100 QList<PRDHandleBase*> l;
101 l<<handle;
102 m_d->prd2handles[prd] = l;
103 } else {
104 m_d->prd2handles[prd] << handle;
105 }
106}
107
108//_____________________________________________________________________________________
110{
111 while (pickedPath->getLength()>4) {//4 is a bit arbitrary...
112 if (pickedPath->getNodeFromTail(0)->getTypeId()==SoSeparator::getClassTypeId()) {
113 //If at least two children and the first is an SoTransform, then it might be what we are looking for.
114 SoSeparator * sep = static_cast<SoSeparator*>(pickedPath->getNodeFromTail(0));
115 if (sep->getNumChildren()>1&&sep->getChild(0)->getTypeId()==SoTransform::getClassTypeId()) {
116 std::map<SoNode*,PRDHandleBase*>::iterator it = m_d->sotransform2prdhandle.find(sep->getChild(0));
117 if ( it!=m_d->sotransform2prdhandle.end())
118 return it->second;
119 }
120 }
121 pickedPath->pop();//FIXME: NO NEED TO DO ANYTHING ELSE THAN FIND THE HANDLE!!
122 }
123 return 0;
124}
125
static InDetProjHelper * createTRTHelper(IVP1System *sys=0)
static InDetProjHelper * createPixelHelper(IVP1System *sys=0)
static InDetProjHelper * createSCTHelper(IVP1System *sys=0)
std::map< const Trk::PrepRawData *, QList< PRDHandleBase * > > prd2handles
std::map< SoNode *, PRDHandleBase * > sotransform2prdhandle
PRDHandleBase * pickedPathToHandle(SoPath *pickedPath)
MuonChamberProjectionHelper * m_muonChamberProjectionHelper
PRDHandleBase * pickedPathToHandle(SoPath *pickedPath)
PRDTrackSegmentHelper * m_trackAndSegmentHelper
HitsSoNodeManager * m_nodeManager
InDetProjHelper * m_indetProjHelper_SCT
void registerPRD2Handle(const Trk::PrepRawData *prd, PRDHandleBase *handle)
IVP13DSystem * m_3dsystem
PRDSystemController * m_controller
TouchedMuonChamberHelper * m_touchedMuonChamberHelper
InDetProjHelper * m_indetProjHelper_Pixel
PRDSystemController * controller() const
InDetProjHelper * m_indetProjHelper_TRT
VP1SoMaterialMixer * m_materialMixer
PRDSysCommonData(IVP13DSystem *, PRDSystemController *)
void registerTransform2Handle(SoTransform *transform, PRDHandleBase *handle)
VP1HelperClassBase(IVP1System *sys=0, QString helpername="")