ATLAS Offline Software
Loading...
Searching...
No Matches
VP1RawDataCollBase.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3*/
4
5
7// //
8// Implementation of class VP1RawDataCollBase //
9// //
10// Author: Thomas H. Kittelmann (Thomas.Kittelmann@cern.ch) //
11// Initial version: January 2009 //
12// //
14
21#include "VP1Base/VP1Msg.h"
22
25
26//____________________________________________________________________
28public:
29 QString key;
33 QList<VP1Interval> allowedPhi;
34 VP1RawDataFlags::InDetPartsFlags allowedInDetParts;
35 std::vector<VP1RawDataHandleBase*> handles;
36 int iupdategui = 0;
37};
38
39
40//____________________________________________________________________
42 : VP1StdCollection(common->system(),"RawDataColl_"+key), m_common(common), m_d(new Imp)
43{
44 m_d->key = key;
45 m_d->sepHelper = 0;
46 m_d->iupdategui = 0;
47}
48
49//____________________________________________________________________
51{
52 VP1StdCollection::init();//Must be here
54 connect(this,SIGNAL(visibilityChanged(bool)),this,SLOT(collVisibilityChanged(bool)));
55
56 connect(m_common->controller(),SIGNAL(cutAllowedEtaChanged(const VP1Interval&)),
57 this,SLOT(setAllowedEta(const VP1Interval&)));
58 setAllowedEta(m_common->controller()->cutAllowedEta());
59
60 connect(m_common->controller(),SIGNAL(cutAllowedPhiChanged(const QList<VP1Interval>&)),
61 this,SLOT(setAllowedPhi(const QList<VP1Interval>&)));
62 setAllowedPhi(m_common->controller()->cutAllowedPhi());
63
64 connect(m_common->controller(),SIGNAL(enabledInDetPartsChanged(VP1RawDataFlags::InDetPartsFlags)),
65 this,SLOT(setEnabledInDetParts(VP1RawDataFlags::InDetPartsFlags)));
66 setEnabledInDetParts(m_common->controller()->enabledInDetParts());
67}
68
69//____________________________________________________________________
71{
72 if (!m_d->sepHelper)
73 m_d->sepHelper = new VP1ExtraSepLayerHelper(collSep());
74 return m_d->sepHelper;
75}
76
77//____________________________________________________________________
79{
80 std::vector<VP1RawDataHandleBase*>::iterator it(m_d->handles.begin()),itE(m_d->handles.end());
81 for (;it!=itE;++it)
82 delete *it;
83 m_d->handles.clear();
84
85 delete m_d->sepHelper;
86 delete m_d;
87}
88
89//____________________________________________________________________
91{
92 return m_d->key;
93}
94
95//____________________________________________________________________
97{
98 if (VP1Msg::verbose())
99 messageVerbose("TrackCollHandleBase::collVisibilityChanged => "+str(vis));
100 if (vis)
101 recheckCutStatusOfAllNotVisibleHandles();//Fixme -> ofallhandles? All must be not visible anyway...
102 else
104}
105
106//____________________________________________________________________
108{
109 if (m_d->allowedEta==e)
110 return;
111 bool relaxed(e.contains(m_d->allowedEta));
112 bool tightened(m_d->allowedEta.contains(e));
113 m_d->allowedEta=e;
114 if (relaxed)
116 else if (tightened)
118 else
120}
121
122//____________________________________________________________________
123void VP1RawDataCollBase::setAllowedPhi(const QList<VP1Interval>&l)
124{
125 if (m_d->allowedPhi==l)
126 return;
127 m_d->allowedPhi=l;
129}
130
131//____________________________________________________________________
132void VP1RawDataCollBase::setEnabledInDetParts(VP1RawDataFlags::InDetPartsFlags f)
133{
134 if (!usesInDetPartsCuts())
135 return;
136 if (m_d->allowedInDetParts==f)
137 return;
138 bool relaxed((m_d->allowedInDetParts&f) == m_d->allowedInDetParts);
139 bool tightened((m_d->allowedInDetParts&f) == f);
140 m_d->allowedInDetParts=f;
141 if (relaxed)
143 else if (tightened)
145 else
147}
148
149//____________________________________________________________________
151{
152 if (handle)
153 m_d->handles.push_back(handle);
154 if (!((m_d->iupdategui)++)%200)
156}
157
158//____________________________________________________________________
160{
162 if (!(handle->inInDetParts()&allowedInDetParts))
163 return false;
164
165 bool allPhiAllowed = allowedPhi.count()==1&&allowedPhi.at(0).isAllR();
166 bool allEtaAllowed = allowedEta.isAllR();
167 if (allEtaAllowed&&allPhiAllowed)
168 return true;
169 if (allowedPhi.isEmpty()||allowedEta.isEmpty())
170 return false;
171 Amg::Vector3D p = handle->center();
172 if (!allEtaAllowed) {
173 if (!allowedEta.contains(p.eta()))
174 return false;
175 }
176 if (!allPhiAllowed) {
177 double phi(p.phi());
178 for(const VP1Interval& i : allowedPhi) {
179 if (i.contains(phi)||i.contains(phi+2*M_PI)||i.contains(phi-2*M_PI))
180 return true;
181 }
182 return false;
183 }
184 return true;
185}
186
187//____________________________________________________________________
189{
190 handle->setVisible( visible() && cut(handle) && m_d->commonCuts(handle) );
191}
192
193//____________________________________________________________________
195{
196 if (!isLoaded())
197 return;
198 common()->system()->deselectAll();
200 std::vector<VP1RawDataHandleBase*>::iterator it(m_d->handles.begin()),itE(m_d->handles.end());
201 int i(0);
202 for (;it!=itE;++it) {
203 recheckCutStatus(*it);
204 if (!(i++%200))
205 systemBase()->updateGUI();//since called from ::actualLoad<..>(..)
206 }
208}
209
210//____________________________________________________________________
212{
213 if (!isLoaded())
214 return;
215 //This method is called when a cut is tightened - thus we better start by deselectAll to avoid weird highlighting issues.
216 common()->system()->deselectAll();
217
219 std::vector<VP1RawDataHandleBase*>::iterator it(m_d->handles.begin()),itE(m_d->handles.end());
220 for (;it!=itE;++it) {
221 if ((*it)->visible())
222 recheckCutStatus(*it);
223 }
225}
226
227//____________________________________________________________________
229{
230 if (!isLoaded())
231 return;
233 std::vector<VP1RawDataHandleBase*>::iterator it(m_d->handles.begin()),itE(m_d->handles.end());
234 for (;it!=itE;++it) {
235 if (!(*it)->visible())
236 recheckCutStatus(*it);
237 }
239}
240
241//____________________________________________________________________
242std::vector<VP1RawDataHandleBase*>& VP1RawDataCollBase::getHandles()
243{
244 return m_d->handles;
245}
#define M_PI
Scalar phi() const
phi method
virtual void deselectAll(SoCooperativeSelection *exception_sel=0)
void updateGUI()
void messageVerbose(const QString &) const
IVP1System * systemBase() const
static bool verbose()
Definition VP1Msg.h:31
std::vector< VP1RawDataHandleBase * > handles
QList< VP1Interval > allowedPhi
bool commonCuts(VP1RawDataHandleBase *handle)
VP1RawDataFlags::InDetPartsFlags allowedInDetParts
VP1ExtraSepLayerHelper * sepHelper
virtual bool cut(VP1RawDataHandleBase *)=0
VP1RawDataCommonData * common() const
void setAllowedPhi(const QList< VP1Interval > &)
void recheckCutStatusOfAllNotVisibleHandles()
VP1RawDataCommonData * m_common
VP1ExtraSepLayerHelper * sepHelper() const
void setEnabledInDetParts(VP1RawDataFlags::InDetPartsFlags)
void setAllowedEta(const VP1Interval &)
virtual bool usesInDetPartsCuts()
VP1RawDataCollBase(VP1RawDataCommonData *, const QString &key)
virtual void init(VP1MaterialButtonBase *mat=0)
void addHandle(VP1RawDataHandleBase *)
void recheckCutStatus(VP1RawDataHandleBase *)
QString provideText() const
std::vector< VP1RawDataHandleBase * > & getHandles()
virtual Amg::Vector3D center()
virtual VP1RawDataFlags::InDetPartsFlags inInDetParts() const
virtual void largeChangesEnd()
virtual void init(VP1MaterialButtonBase *button=0)
SoSeparator * collSep() const
All 3D objects from this coll.
virtual void largeChangesBegin()
void visibilityChanged(bool)
VP1StdCollection(IVP1System *, const QString &helperClassName)
Eigen::Matrix< double, 3, 1 > Vector3D