ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
graphics
VP1
VP1Systems
VP1PRDSystems
src
TouchedMuonChamberHelper.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 TouchedMuonChamberHelper //
9
// //
10
// Author: Thomas H. Kittelmann (Thomas.Kittelmann@cern.ch) //
11
// Initial version: January 2008 //
12
// //
14
15
#include "
VP1PRDSystems/TouchedMuonChamberHelper.h
"
16
#include <QTimer>
17
#include <map>
18
#include <set>
19
#include <iostream>
20
21
//____________________________________________________________________
22
class
TouchedMuonChamberHelper::Imp
{
23
public
:
24
TouchedMuonChamberHelper
*
theclass
=
nullptr
;
25
bool
updatesnotcheduled
=
false
;
//true if a timer has already been fired to check status after
26
inline
void
ensureScheduleUpdate
();
27
std::set<GeoPVConstLink>
lastEmittedSet
;
28
std::map<GeoPVConstLink,unsigned>
pv2count
;
//For keeping track of the number
29
//of shown objects's within a given
30
//chamber at any given time.
31
std::set<GeoPVConstLink>
touchedByTracksSet
;
// Filled by signal emitted by TrackSystem
32
};
33
34
35
//____________________________________________________________________
36
TouchedMuonChamberHelper::TouchedMuonChamberHelper
( QObject * parent )
37
: QObject(parent),
m_d
(new
Imp
)
38
{
39
m_d
->theclass =
this
;
40
m_d
->updatesnotcheduled =
true
;
41
}
42
43
//____________________________________________________________________
44
TouchedMuonChamberHelper::~TouchedMuonChamberHelper
()
45
{
46
delete
m_d
;
47
}
48
49
//____________________________________________________________________
50
inline
void
TouchedMuonChamberHelper::Imp::ensureScheduleUpdate
()
51
{
52
if
(
updatesnotcheduled
) {
53
updatesnotcheduled
=
false
;
54
QTimer::singleShot(0,
theclass
, SLOT(
checkForChangeInTouchedChambers
()));
55
}
56
}
57
58
//____________________________________________________________________
59
void
TouchedMuonChamberHelper::incrementNumberOfObjectsForPV
(
const
GeoPVConstLink& chamberPV)
60
{
61
std::map<GeoPVConstLink,unsigned>::iterator it(
m_d
->pv2count.find(chamberPV));
62
if
(it==
m_d
->pv2count.end()) {
63
m_d
->pv2count[chamberPV] = 1;
64
m_d
->ensureScheduleUpdate();
//First object in chamber
65
return
;
66
}
67
++(it->second);
68
if
(
m_d
->updatesnotcheduled&&it->second==1)
69
m_d
->ensureScheduleUpdate();
//First object in chamber
70
}
71
72
//____________________________________________________________________
73
void
TouchedMuonChamberHelper::decrementNumberOfObjectsForPV
(
const
GeoPVConstLink& chamberPV)
74
{
75
std::map<GeoPVConstLink,unsigned>::iterator it(
m_d
->pv2count.find(chamberPV));
76
if
(it==
m_d
->pv2count.end()||it->second==0) {
77
std::cout<<
" TouchedMuonChamberHelper::decrementNumberOfObjectsForPV Error: Asked to decrement to negative values!"
<<std::endl;
78
return
;
79
}
80
--(it->second);
81
if
(
m_d
->updatesnotcheduled&&it->second==0)
82
m_d
->ensureScheduleUpdate();
//Last object in chamber
83
}
84
85
//____________________________________________________________________
86
bool
TouchedMuonChamberHelper::isTouchedByTrack
(
const
GeoPVConstLink& chamberPV)
87
{
88
return
(
m_d
->touchedByTracksSet.find(chamberPV)!=
m_d
->touchedByTracksSet.end());
89
}
90
91
//____________________________________________________________________
92
void
TouchedMuonChamberHelper::checkForChangeInTouchedChambers
()
93
{
94
m_d
->updatesnotcheduled =
true
;
95
96
std::set<GeoPVConstLink> touchedchambers;
97
std::map<GeoPVConstLink,unsigned>::const_iterator it(
m_d
->pv2count.begin()),itE(
m_d
->pv2count.end());
98
for
(;it!=itE;++it) {
99
if
(it->second>0)
100
touchedchambers.insert(it->first);
101
}
102
103
if
(
m_d
->lastEmittedSet!=touchedchambers) {
104
m_d
->lastEmittedSet = touchedchambers;
105
emit
touchedMuonChambersChanged
(touchedchambers);
106
}
107
}
108
109
void
TouchedMuonChamberHelper::updateTouchedByTracks
(
const
std::set<GeoPVConstLink>&
set
){
110
// std::cout<<"TouchedMuonChamberHelper::updateTouchedByTracks - set is this big: "<<set.size()<<std::endl;
111
m_d
->touchedByTracksSet=
set
;
112
emit
muonChambersTouchedByTracksChanged
();
113
}
114
115
//____________________________________________________________________
116
void
TouchedMuonChamberHelper::eraseEventData
()
117
{
118
m_d
->pv2count.clear();
119
m_d
->touchedByTracksSet.clear();
120
checkForChangeInTouchedChambers
();
121
}
TouchedMuonChamberHelper.h
TouchedMuonChamberHelper::Imp
Definition
TouchedMuonChamberHelper.cxx:22
TouchedMuonChamberHelper::Imp::lastEmittedSet
std::set< GeoPVConstLink > lastEmittedSet
Definition
TouchedMuonChamberHelper.cxx:27
TouchedMuonChamberHelper::Imp::touchedByTracksSet
std::set< GeoPVConstLink > touchedByTracksSet
Definition
TouchedMuonChamberHelper.cxx:31
TouchedMuonChamberHelper::Imp::theclass
TouchedMuonChamberHelper * theclass
Definition
TouchedMuonChamberHelper.cxx:24
TouchedMuonChamberHelper::Imp::updatesnotcheduled
bool updatesnotcheduled
Definition
TouchedMuonChamberHelper.cxx:25
TouchedMuonChamberHelper::Imp::ensureScheduleUpdate
void ensureScheduleUpdate()
Definition
TouchedMuonChamberHelper.cxx:50
TouchedMuonChamberHelper::Imp::pv2count
std::map< GeoPVConstLink, unsigned > pv2count
Definition
TouchedMuonChamberHelper.cxx:28
TouchedMuonChamberHelper::TouchedMuonChamberHelper
TouchedMuonChamberHelper(QObject *parent=0)
Definition
TouchedMuonChamberHelper.cxx:36
TouchedMuonChamberHelper::eraseEventData
void eraseEventData()
Definition
TouchedMuonChamberHelper.cxx:116
TouchedMuonChamberHelper::muonChambersTouchedByTracksChanged
void muonChambersTouchedByTracksChanged(void)
TouchedMuonChamberHelper::isTouchedByTrack
bool isTouchedByTrack(const GeoPVConstLink &chamberPV)
Returns true if the passed chamber link has a track or segment.
Definition
TouchedMuonChamberHelper.cxx:86
TouchedMuonChamberHelper::checkForChangeInTouchedChambers
void checkForChangeInTouchedChambers()
Definition
TouchedMuonChamberHelper.cxx:92
TouchedMuonChamberHelper::decrementNumberOfObjectsForPV
void decrementNumberOfObjectsForPV(const GeoPVConstLink &chamberPV)
Definition
TouchedMuonChamberHelper.cxx:73
TouchedMuonChamberHelper::incrementNumberOfObjectsForPV
void incrementNumberOfObjectsForPV(const GeoPVConstLink &chamberPV)
Definition
TouchedMuonChamberHelper.cxx:59
TouchedMuonChamberHelper::~TouchedMuonChamberHelper
virtual ~TouchedMuonChamberHelper()
Definition
TouchedMuonChamberHelper.cxx:44
TouchedMuonChamberHelper::updateTouchedByTracks
void updateTouchedByTracks(const std::set< GeoPVConstLink > &)
Definition
TouchedMuonChamberHelper.cxx:109
TouchedMuonChamberHelper::touchedMuonChambersChanged
void touchedMuonChambersChanged(const std::set< GeoPVConstLink > &)
TouchedMuonChamberHelper::m_d
Imp * m_d
Definition
TouchedMuonChamberHelper.h:56
set
STL class.
Generated on
for ATLAS Offline Software by
1.17.0