ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
graphics
VP1
VP1Systems
VP1PRDSystems
src
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
15
#include "
VP1PRDSystems/PRDSysCommonData.h
"
16
#include "
VP1Base/IVP13DSystem.h
"
17
18
#include "
VP1Utils/HitsSoNodeManager.h
"
19
#include "
VP1PRDSystems/MuonChamberProjectionHelper.h
"
20
#include "
VP1PRDSystems/TouchedMuonChamberHelper.h
"
21
#include "
VP1PRDSystems/PRDSystemController.h
"
22
#include "
VP1PRDSystems/PRDTrackSegmentHelper.h
"
23
24
#include "
VP1GuideLineSystems/InDetProjHelper.h
"
25
#include "
VP1Base/VP1SoMaterialMixer.h
"
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
//____________________________________________________________________
34
class
PRDSysCommonData::Imp
{
35
public
:
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
//____________________________________________________________________
47
PRDSysCommonData::PRDSysCommonData
(
IVP13DSystem
*sys,
PRDSystemController
*
controller
)
48
:
VP1HelperClassBase
(sys,
"PRDSysCommonData"
),
m_d
(new
Imp
),
49
m_controller
(
controller
)
50
{
51
m_3dsystem
= sys;
52
m_nodeManager
=
new
HitsSoNodeManager
(sys);
53
m_materialMixer
=
new
VP1SoMaterialMixer
;
54
m_muonChamberProjectionHelper
=
new
MuonChamberProjectionHelper
(sys);
55
m_indetProjHelper_Pixel
=
InDetProjHelper::createPixelHelper
(sys);
56
m_indetProjHelper_SCT
=
InDetProjHelper::createSCTHelper
(sys);
57
m_indetProjHelper_TRT
=
InDetProjHelper::createTRTHelper
(sys);
58
m_touchedMuonChamberHelper
=
new
TouchedMuonChamberHelper
;
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
//____________________________________________________________________
67
PRDSysCommonData::~PRDSysCommonData
()
68
{
69
delete
m_nodeManager
;
70
delete
m_materialMixer
;
71
delete
m_muonChamberProjectionHelper
;
72
delete
m_indetProjHelper_Pixel
;
73
delete
m_indetProjHelper_SCT
;
74
delete
m_indetProjHelper_TRT
;
75
delete
m_touchedMuonChamberHelper
;
76
delete
m_trackAndSegmentHelper
;
77
delete
m_d
;
78
}
79
80
//____________________________________________________________________
81
void
PRDSysCommonData::clearEventData
()
82
{
83
m_touchedMuonChamberHelper
->eraseEventData();
84
m_d
->sotransform2prdhandle.clear();
85
m_d
->prd2handles.clear();
86
}
87
88
89
//_____________________________________________________________________________________
90
void
PRDSysCommonData::registerTransform2Handle
(SoTransform*transform,
PRDHandleBase
*handle)
91
{
92
assert(
m_d
->sotransform2prdhandle.find(transform)==
m_d
->sotransform2prdhandle.end());
93
m_d
->sotransform2prdhandle[transform] = handle;
94
}
95
96
//_____________________________________________________________________________________
97
void
PRDSysCommonData::registerPRD2Handle
(
const
Trk::PrepRawData
*prd,
PRDHandleBase
*handle)
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
//_____________________________________________________________________________________
109
PRDHandleBase
*
PRDSysCommonData::pickedPathToHandle
( SoPath*pickedPath )
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
HitsSoNodeManager.h
IVP13DSystem.h
InDetProjHelper.h
MuonChamberProjectionHelper.h
PRDSysCommonData.h
PRDSystemController.h
PRDTrackSegmentHelper.h
TouchedMuonChamberHelper.h
VP1SoMaterialMixer.h
HitsSoNodeManager
Definition
HitsSoNodeManager.h:17
IVP13DSystem
Definition
IVP13DSystem.h:31
InDetProjHelper::createTRTHelper
static InDetProjHelper * createTRTHelper(IVP1System *sys=0)
Definition
InDetProjHelper.cxx:68
InDetProjHelper::createPixelHelper
static InDetProjHelper * createPixelHelper(IVP1System *sys=0)
Definition
InDetProjHelper.cxx:32
InDetProjHelper::createSCTHelper
static InDetProjHelper * createSCTHelper(IVP1System *sys=0)
Definition
InDetProjHelper.cxx:50
MuonChamberProjectionHelper
Definition
MuonChamberProjectionHelper.h:32
PRDHandleBase
Definition
PRDHandleBase.h:35
PRDSysCommonData::Imp
Definition
PRDSysCommonData.cxx:34
PRDSysCommonData::Imp::prd2handles
std::map< const Trk::PrepRawData *, QList< PRDHandleBase * > > prd2handles
Definition
PRDSysCommonData.cxx:42
PRDSysCommonData::Imp::sotransform2prdhandle
std::map< SoNode *, PRDHandleBase * > sotransform2prdhandle
Definition
PRDSysCommonData.cxx:38
PRDSysCommonData::Imp::pickedPathToHandle
PRDHandleBase * pickedPathToHandle(SoPath *pickedPath)
PRDSysCommonData::~PRDSysCommonData
virtual ~PRDSysCommonData()
Definition
PRDSysCommonData.cxx:67
PRDSysCommonData::m_muonChamberProjectionHelper
MuonChamberProjectionHelper * m_muonChamberProjectionHelper
Definition
PRDSysCommonData.h:68
PRDSysCommonData::pickedPathToHandle
PRDHandleBase * pickedPathToHandle(SoPath *pickedPath)
Definition
PRDSysCommonData.cxx:109
PRDSysCommonData::m_trackAndSegmentHelper
PRDTrackSegmentHelper * m_trackAndSegmentHelper
Definition
PRDSysCommonData.h:74
PRDSysCommonData::m_nodeManager
HitsSoNodeManager * m_nodeManager
Definition
PRDSysCommonData.h:65
PRDSysCommonData::clearEventData
void clearEventData()
Definition
PRDSysCommonData.cxx:81
PRDSysCommonData::m_indetProjHelper_SCT
InDetProjHelper * m_indetProjHelper_SCT
Definition
PRDSysCommonData.h:70
PRDSysCommonData::registerPRD2Handle
void registerPRD2Handle(const Trk::PrepRawData *prd, PRDHandleBase *handle)
Definition
PRDSysCommonData.cxx:97
PRDSysCommonData::m_3dsystem
IVP13DSystem * m_3dsystem
Definition
PRDSysCommonData.h:64
PRDSysCommonData::m_d
Imp * m_d
Definition
PRDSysCommonData.h:62
PRDSysCommonData::m_controller
PRDSystemController * m_controller
Definition
PRDSysCommonData.h:66
PRDSysCommonData::m_touchedMuonChamberHelper
TouchedMuonChamberHelper * m_touchedMuonChamberHelper
Definition
PRDSysCommonData.h:72
PRDSysCommonData::m_indetProjHelper_Pixel
InDetProjHelper * m_indetProjHelper_Pixel
Definition
PRDSysCommonData.h:69
PRDSysCommonData::controller
PRDSystemController * controller() const
Definition
PRDSysCommonData.h:80
PRDSysCommonData::m_indetProjHelper_TRT
InDetProjHelper * m_indetProjHelper_TRT
Definition
PRDSysCommonData.h:71
PRDSysCommonData::m_materialMixer
VP1SoMaterialMixer * m_materialMixer
Definition
PRDSysCommonData.h:67
PRDSysCommonData::PRDSysCommonData
PRDSysCommonData(IVP13DSystem *, PRDSystemController *)
Definition
PRDSysCommonData.cxx:47
PRDSysCommonData::registerTransform2Handle
void registerTransform2Handle(SoTransform *transform, PRDHandleBase *handle)
Definition
PRDSysCommonData.cxx:90
PRDSystemController
Definition
PRDSystemController.h:34
PRDTrackSegmentHelper
Definition
PRDTrackSegmentHelper.h:36
TouchedMuonChamberHelper
Definition
TouchedMuonChamberHelper.h:30
Trk::PrepRawData
Definition
PrepRawData.h:62
VP1HelperClassBase::VP1HelperClassBase
VP1HelperClassBase(IVP1System *sys=0, QString helpername="")
Definition
VP1HelperClassBase.cxx:28
VP1SoMaterialMixer
Definition
VP1SoMaterialMixer.h:19
Generated on
for ATLAS Offline Software by
1.17.0