ATLAS Offline Software
Loading...
Searching...
No Matches
VertexSysController.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 VertexSysController //
9// //
10// Author: Thomas H. Kittelmann (Thomas.Kittelmann@cern.ch) //
11// Initial version: July 2008 //
12// //
14
15#define VP1IMPVARNAME m_d
16
18#include "ui_vp1vertexcontrollerform.h"
19#include "ui_vertex_settings_display_form.h"
20#include "ui_vertex_settings_interactions_form.h"
21#include "ui_vertex_settings_cuts_form.h"
25
26//#include "CLHEP/Units/SystemOfUnits.h"
27#include "GaudiKernel/SystemOfUnits.h"
28
29//____________________________________________________________________
31public:
32 Ui::VP1VertexControllerForm ui{};
33 Ui::VertexSysSettingsCutsForm ui_cuts{};
34 Ui::VertexSysSettingsInteractionsForm ui_int{};
35 Ui::VertexSysSettingsColouringForm ui_display{};
37
39 QList<VP1Interval> last_truthCutAllowedPhi;//All off: empty list. All on: list with one entry: ]-inf,inf[
41 QPair<VertexCommonFlags::QUANTITY,VP1Interval> last_truthCutQuantity;
42 QPair<VertexCommonFlags::QUANTITY,double> last_truthCrossLength;
43 VertexCommonFlags::ReconVertexTypeFlags last_reconCutAllowedTypes;
45};
46
47//____________________________________________________________________
49 : VP1Controller(sys,"VertexSysController"), m_d(new Imp)
50{
51 m_d->ui.setupUi(this);
52
53 m_d->collWidget = new VP1CollectionWidget;
54 setupCollWidgetInScrollArea(m_d->ui.collWidgetScrollArea,m_d->collWidget);
55
56 initDialog(m_d->ui_display, m_d->ui.pushButton_settings_display);
57 initDialog(m_d->ui_int, m_d->ui.pushButton_settings_interactions);
58 initDialog(m_d->ui_cuts, m_d->ui.pushButton_settings_cuts);
59
60 m_d->ui_cuts.etaPhiCutWidget->setEtaCutEnabled(false);
61 m_d->ui_display.widget_drawOptions->setBaseLightingDisabled();
62
63 defineRadioButtonGroup(m_d->ui_display.radioButton_truthCrossSize_ProptoQuantity,
64 m_d->ui_display.radioButton_truthCrossSize_Fixed);
65 m_d->ui_display.radioButton_truthCrossSize_Fixed->setChecked(true);
66
67 defineRadioButtonGroup(m_d->ui_display.radioButton_truthCrossSize_quantityIsEnergy,
68 m_d->ui_display.radioButton_truthCrossSize_quantityIsAbsMomentum,
69 m_d->ui_display.radioButton_truthCrossSize_quantityIsAbsTransverseMomentum,
70 m_d->ui_display.radioButton_truthCrossSize_quantityIsMass);
71 m_d->ui_display.radioButton_truthCrossSize_quantityIsEnergy->setChecked(true);
72
74 connectToLastUpdateSlot(m_d->ui_cuts.etaPhiCutWidget,SIGNAL(allowedEtaChanged(const VP1Interval&)));
75
77 connectToLastUpdateSlot(m_d->ui_cuts.etaPhiCutWidget,SIGNAL(allowedPhiChanged(const QList<VP1Interval>&)));
78
80 connectToLastUpdateSlot(m_d->ui_cuts.checkBox_truthcut_primaryonly);
81
83 connectToLastUpdateSlot(m_d->ui_cuts.checkBox_truthcut_incomingParticleRequirement);
84 connectToLastUpdateSlot(m_d->ui_cuts.checkBox_truthcut_quantity_min);
85 connectToLastUpdateSlot(m_d->ui_cuts.checkBox_truthcut_quantity_max);
86 connectToLastUpdateSlot(m_d->ui_cuts.doubleSpinBox_truthcut_quantity_min_gev);
87 connectToLastUpdateSlot(m_d->ui_cuts.doubleSpinBox_truthcut_quantity_max_gev);
88 connectToLastUpdateSlot(m_d->ui_cuts.radioButton_truthcut_quantityIsEnergy);
89 connectToLastUpdateSlot(m_d->ui_cuts.radioButton_truthcut_quantityIsAbsMomentum);
90 connectToLastUpdateSlot(m_d->ui_cuts.radioButton_truthcut_quantityIsAbsTransverseMomentum);
91 connectToLastUpdateSlot(m_d->ui_cuts.radioButton_truthcut_quantityIsMass);
92
94 connectToLastUpdateSlot(m_d->ui_display.radioButton_truthCrossSize_ProptoQuantity);
95 connectToLastUpdateSlot(m_d->ui_display.doubleSpinBox_truthCrossSize_ProptoQuantity);
96 connectToLastUpdateSlot(m_d->ui_display.radioButton_truthCrossSize_quantityIsEnergy);
97 connectToLastUpdateSlot(m_d->ui_display.radioButton_truthCrossSize_quantityIsAbsMomentum);
98 connectToLastUpdateSlot(m_d->ui_display.radioButton_truthCrossSize_quantityIsAbsTransverseMomentum);
99 connectToLastUpdateSlot(m_d->ui_display.radioButton_truthCrossSize_quantityIsMass);
100 connectToLastUpdateSlot(m_d->ui_display.radioButton_truthCrossSize_Fixed);
101 connectToLastUpdateSlot(m_d->ui_display.doubleSpinBox_truthCrossSize_fixed);
102
104 connectToLastUpdateSlot(m_d->ui_cuts.checkBox_reconcuts_onlyShowTypes);
105 connectToLastUpdateSlot(m_d->ui_cuts.checkBox_reconcut_type_primary);
106 connectToLastUpdateSlot(m_d->ui_cuts.checkBox_reconcut_type_secondary);
107 connectToLastUpdateSlot(m_d->ui_cuts.checkBox_reconcut_type_v0);
108 connectToLastUpdateSlot(m_d->ui_cuts.checkBox_reconcut_type_conversion);
109 connectToLastUpdateSlot(m_d->ui_cuts.checkBox_reconcut_type_kink);
110 connectToLastUpdateSlot(m_d->ui_cuts.checkBox_reconcut_type_pileup);
111 connectToLastUpdateSlot(m_d->ui_cuts.checkBox_reconcut_type_other);
112
114 connectToLastUpdateSlot(m_d->ui_display.radioButton_reconVert_point);
115 connectToLastUpdateSlot(m_d->ui_display.radioButton_reconVert_sphere);
116 connectToLastUpdateSlot(m_d->ui_display.doubleSpinBox_reconVert_sphereRadius_mm);
117 connectToLastUpdateSlot(m_d->ui_display.radioButton_reconVert_ellipsoid);
118 connectToLastUpdateSlot(m_d->ui_display.doubleSpinBox_reconVert_ellipsoid_nsigma);
119 // Special: -> rerandomise
120 connect(m_d->ui_display.pushButton_colourbyrandom_rerandomise,SIGNAL(clicked()),this,SLOT(emitRerandomise()));
121
122 initLastVars();
123}
124
125//____________________________________________________________________
130
131//____________________________________________________________________
133{
134 return 0;
135}
136
137//____________________________________________________________________
139{
140 //Display:
141 s.save(m_d->ui_display.widget_drawOptions);
142 s.save(m_d->ui_display.radioButton_reconVert_point,
143 m_d->ui_display.radioButton_reconVert_sphere,
144 m_d->ui_display.radioButton_reconVert_ellipsoid);
145 s.save(m_d->ui_display.doubleSpinBox_reconVert_sphereRadius_mm);
146 s.save(m_d->ui_display.doubleSpinBox_reconVert_ellipsoid_nsigma);
147 s.save(m_d->ui_display.radioButton_truthCrossSize_ProptoQuantity,
148 m_d->ui_display.radioButton_truthCrossSize_Fixed);
149 s.save(m_d->ui_display.radioButton_truthCrossSize_quantityIsEnergy,
150 m_d->ui_display.radioButton_truthCrossSize_quantityIsAbsMomentum,
151 m_d->ui_display.radioButton_truthCrossSize_quantityIsAbsTransverseMomentum,
152 m_d->ui_display.radioButton_truthCrossSize_quantityIsMass);
153 s.save(m_d->ui_display.doubleSpinBox_truthCrossSize_fixed);
154 s.save(m_d->ui_display.doubleSpinBox_truthCrossSize_ProptoQuantity);
155
156 //Interactions:
157 s.save(m_d->ui_int.checkBox_printinfo);
158 s.save(m_d->ui_int.checkBox_printinfo_verbose);
159 s.save(m_d->ui_int.checkBox_zoom);
160
161 //Cuts:
162 s.save(m_d->ui_cuts.etaPhiCutWidget);
163 s.save(m_d->ui_cuts.checkBox_truthcut_primaryonly);
164 s.save(m_d->ui_cuts.checkBox_truthcut_incomingParticleRequirement);
165 s.save(m_d->ui_cuts.checkBox_truthcut_quantity_min);
166 s.save(m_d->ui_cuts.checkBox_truthcut_quantity_max);
167 s.save(m_d->ui_cuts.doubleSpinBox_truthcut_quantity_min_gev);
168 s.save(m_d->ui_cuts.doubleSpinBox_truthcut_quantity_max_gev);
169 s.save(m_d->ui_cuts.radioButton_truthcut_quantityIsEnergy,
170 m_d->ui_cuts.radioButton_truthcut_quantityIsAbsMomentum,
171 m_d->ui_cuts.radioButton_truthcut_quantityIsAbsTransverseMomentum,
172 m_d->ui_cuts.radioButton_truthcut_quantityIsMass);
173 s.save(m_d->ui_cuts.checkBox_reconcuts_onlyShowTypes);
174 s.save(m_d->ui_cuts.checkBox_reconcut_type_primary);
175 s.save(m_d->ui_cuts.checkBox_reconcut_type_secondary);
176 s.save(m_d->ui_cuts.checkBox_reconcut_type_v0);
177 s.save(m_d->ui_cuts.checkBox_reconcut_type_conversion);
178 s.save(m_d->ui_cuts.checkBox_reconcut_type_kink);
179 s.save(m_d->ui_cuts.checkBox_reconcut_type_pileup);
180 s.save(m_d->ui_cuts.checkBox_reconcut_type_other);
181}
182
183//____________________________________________________________________
185{
186 if (s.version()<0||s.version()>0) {
187 message("Warning: State data in .vp1 file has unsupported version ("+str(s.version())+")");
188 return;
189 }
190
191 //Display:
192 s.restore(m_d->ui_display.widget_drawOptions);
193 s.restore(m_d->ui_display.radioButton_reconVert_point,
194 m_d->ui_display.radioButton_reconVert_sphere,
195 m_d->ui_display.radioButton_reconVert_ellipsoid);
196 s.restore(m_d->ui_display.doubleSpinBox_reconVert_sphereRadius_mm);
197 s.restore(m_d->ui_display.doubleSpinBox_reconVert_ellipsoid_nsigma);
198 s.restore(m_d->ui_display.radioButton_truthCrossSize_ProptoQuantity,
199 m_d->ui_display.radioButton_truthCrossSize_Fixed);
200 s.restore(m_d->ui_display.radioButton_truthCrossSize_quantityIsEnergy,
201 m_d->ui_display.radioButton_truthCrossSize_quantityIsAbsMomentum,
202 m_d->ui_display.radioButton_truthCrossSize_quantityIsAbsTransverseMomentum,
203 m_d->ui_display.radioButton_truthCrossSize_quantityIsMass);
204 s.restore(m_d->ui_display.doubleSpinBox_truthCrossSize_fixed);
205 s.restore(m_d->ui_display.doubleSpinBox_truthCrossSize_ProptoQuantity);
206
207 //Interactions:
208 s.restore(m_d->ui_int.checkBox_printinfo);
209 s.restore(m_d->ui_int.checkBox_printinfo_verbose);
210 s.restore(m_d->ui_int.checkBox_zoom);
211
212 //Cuts:
213 s.restore(m_d->ui_cuts.etaPhiCutWidget);
214 s.restore(m_d->ui_cuts.checkBox_truthcut_primaryonly);
215 s.restore(m_d->ui_cuts.checkBox_truthcut_incomingParticleRequirement);
216 s.restore(m_d->ui_cuts.checkBox_truthcut_quantity_min);
217 s.restore(m_d->ui_cuts.checkBox_truthcut_quantity_max);
218 s.restore(m_d->ui_cuts.doubleSpinBox_truthcut_quantity_min_gev);
219 s.restore(m_d->ui_cuts.doubleSpinBox_truthcut_quantity_max_gev);
220 s.restore(m_d->ui_cuts.radioButton_truthcut_quantityIsEnergy,
221 m_d->ui_cuts.radioButton_truthcut_quantityIsAbsMomentum,
222 m_d->ui_cuts.radioButton_truthcut_quantityIsAbsTransverseMomentum,
223 m_d->ui_cuts.radioButton_truthcut_quantityIsMass);
224 s.restore(m_d->ui_cuts.checkBox_reconcuts_onlyShowTypes);
225 s.restore(m_d->ui_cuts.checkBox_reconcut_type_primary);
226 s.restore(m_d->ui_cuts.checkBox_reconcut_type_secondary);
227 s.restore(m_d->ui_cuts.checkBox_reconcut_type_v0);
228 s.restore(m_d->ui_cuts.checkBox_reconcut_type_conversion);
229 s.restore(m_d->ui_cuts.checkBox_reconcut_type_kink);
230 s.restore(m_d->ui_cuts.checkBox_reconcut_type_pileup);
231 s.restore(m_d->ui_cuts.checkBox_reconcut_type_other);
232}
233
234//____________________________________________________________________
235QString VertexSysController::toString( const QPair<VertexCommonFlags::QUANTITY,VP1Interval>& par )
236{
237 return "<"+VertexCommonFlags::toString(par.first)+", "+str(par.second)+">";
238}
239
240//____________________________________________________________________
241QString VertexSysController::toString( const QPair<VertexCommonFlags::QUANTITY,double>& par )
242{
243 return "<"+VertexCommonFlags::toString(par.first)+", "+str(par.second)+">";
244}
245
246//____________________________________________________________________
248{
249 return m_d->ui_display.widget_drawOptions->drawOptionsGroup();
250}
251
252//____________________________________________________________________
254bool VertexSysController::printInfoOnClick() const { return m_d->ui_int.checkBox_printinfo->isChecked(); }
255bool VertexSysController::printVerboseInfoOnClick() const { return m_d->ui_int.checkBox_printinfo_verbose->isChecked(); }
256bool VertexSysController::zoomOnClick() const { return m_d->ui_int.checkBox_zoom->isChecked(); }
257VP1Interval VertexSysController::truthCutAllowedEta() const { return m_d->ui_cuts.etaPhiCutWidget->allowedEta(); }
258QList<VP1Interval> VertexSysController::truthCutAllowedPhi() const { return m_d->ui_cuts.etaPhiCutWidget->allowedPhi(); }
259bool VertexSysController::truthCutPrimaryVertexOnly() const { return m_d->ui_cuts.checkBox_truthcut_primaryonly->isChecked(); }
260
261//____________________________________________________________________
262QPair<VertexCommonFlags::QUANTITY,double> VertexSysController::truthCrossLength() const
263{
265 double range(0);
266 if (m_d->ui_display.radioButton_truthCrossSize_Fixed->isChecked()) {
267 range = - m_d->ui_display.doubleSpinBox_truthCrossSize_fixed->value()*Gaudi::Units::mm;
268 } else {
269 range = m_d->ui_display.doubleSpinBox_truthCrossSize_ProptoQuantity->value()*(Gaudi::Units::mm/Gaudi::Units::GeV);
270 if (m_d->ui_display.radioButton_truthCrossSize_quantityIsAbsMomentum->isChecked())
272 else if (m_d->ui_display.radioButton_truthCrossSize_quantityIsAbsTransverseMomentum->isChecked())
274 else if (m_d->ui_display.radioButton_truthCrossSize_quantityIsMass->isChecked())
275 quantity = VertexCommonFlags::MASS;
276 }
277 return QPair<VertexCommonFlags::QUANTITY,double>(quantity,range);
278}
279
280//____________________________________________________________________
281QPair<VertexCommonFlags::QUANTITY,VP1Interval> VertexSysController::truthCutQuantity() const
282{
285
286 if (!m_d->ui_cuts.checkBox_truthcut_incomingParticleRequirement->isChecked())
287 return QPair<VertexCommonFlags::QUANTITY,VP1Interval>(quantity,range);
288
289 if (m_d->ui_cuts.checkBox_truthcut_quantity_min->isChecked())
290 range.setLower(m_d->ui_cuts.doubleSpinBox_truthcut_quantity_min_gev->value()*Gaudi::Units::GeV);
291 if (m_d->ui_cuts.checkBox_truthcut_quantity_max->isChecked())
292 range.setUpper(m_d->ui_cuts.doubleSpinBox_truthcut_quantity_max_gev->value()*Gaudi::Units::GeV);
293
294 if (range.isAllR())
295 return QPair<VertexCommonFlags::QUANTITY,VP1Interval>(quantity,range);
296
297 if (m_d->ui_cuts.radioButton_truthcut_quantityIsAbsMomentum->isChecked())
299 else if (m_d->ui_cuts.radioButton_truthcut_quantityIsAbsTransverseMomentum->isChecked())
301 else if (m_d->ui_cuts.radioButton_truthcut_quantityIsMass->isChecked())
302 quantity = VertexCommonFlags::MASS;
303
304 return QPair<VertexCommonFlags::QUANTITY,VP1Interval>(quantity,range);
305}
306
307//____________________________________________________________________
309{
310 if (m_d->ui_display.radioButton_reconVert_point->isChecked())
311 return 0.0;
312 if (m_d->ui_display.radioButton_reconVert_sphere->isChecked())
313 return - m_d->ui_display.doubleSpinBox_reconVert_sphereRadius_mm->value()*Gaudi::Units::mm;
314 return m_d->ui_display.doubleSpinBox_reconVert_ellipsoid_nsigma->value();
315}
316
317//____________________________________________________________________
318VertexCommonFlags::ReconVertexTypeFlags VertexSysController::reconCutAllowedTypes() const
319{
320 if (!m_d->ui_cuts.checkBox_reconcuts_onlyShowTypes->isChecked())
322
323 VertexCommonFlags::ReconVertexTypeFlags f;
324
325 if (m_d->ui_cuts.checkBox_reconcut_type_primary->isChecked())
327 if (m_d->ui_cuts.checkBox_reconcut_type_secondary->isChecked())
329 if (m_d->ui_cuts.checkBox_reconcut_type_v0->isChecked())
331 if (m_d->ui_cuts.checkBox_reconcut_type_conversion->isChecked())
333 if (m_d->ui_cuts.checkBox_reconcut_type_kink->isChecked())
335 if (m_d->ui_cuts.checkBox_reconcut_type_pileup->isChecked())
337 if (m_d->ui_cuts.checkBox_reconcut_type_other->isChecked())
339 return f;
340}
341
342//____________________________________________________________________
344{
345 messageVerbose("Emitting rerandomise");
346 emit rerandomise();
347}
348
350// Test for possible changes in values and emit signals as appropriate:
351// (possibleChange_XXX() slots code provided by macros)
352#define VP1CONTROLLERCLASSNAME VertexSysController
354POSSIBLECHANGE_IMP(truthCutAllowedEta)
355POSSIBLECHANGE_IMP(truthCutAllowedPhi)
356POSSIBLECHANGE_IMP(truthCutPrimaryVertexOnly)
357POSSIBLECHANGE_IMP(truthCutQuantity)
358POSSIBLECHANGE_IMP(reconCutAllowedTypes)
359POSSIBLECHANGE_IMP(reconVertexRepresentation)
360POSSIBLECHANGE_IMP(truthCrossLength)
#define POSSIBLECHANGE_IMP(x)
void initDialog(T &theUI, QPushButton *launchbutton, QAbstractButton *enabledButton=0)
void connectToLastUpdateSlot(QObject *sender, const char *signal)
void setupCollWidgetInScrollArea(QScrollArea *scrollarea, VP1CollectionWidget *collWidget)
const char * addUpdateSlot(const char *slot)
QButtonGroup * defineRadioButtonGroup(QRadioButton *rb0, QRadioButton *rb1, QRadioButton *rb2=0, QRadioButton *rb3=0, QRadioButton *rb4=0, QRadioButton *rb5=0, QRadioButton *rb6=0, QRadioButton *rb7=0, QRadioButton *rb8=0, QRadioButton *rb9=0)
VP1Controller(IVP1System *sys, const QString &classname)
void messageVerbose(const QString &) const
void message(const QString &) const
static double inf()
Definition VP1Interval.h:25
static QString toString(const QUANTITY &)
Ui::VertexSysSettingsColouringForm ui_display
Ui::VP1VertexControllerForm ui
Ui::VertexSysSettingsInteractionsForm ui_int
VertexCommonFlags::ReconVertexTypeFlags last_reconCutAllowedTypes
QPair< VertexCommonFlags::QUANTITY, VP1Interval > last_truthCutQuantity
VP1CollectionWidget * collWidget
QPair< VertexCommonFlags::QUANTITY, double > last_truthCrossLength
QList< VP1Interval > last_truthCutAllowedPhi
Ui::VertexSysSettingsCutsForm ui_cuts
QPair< VertexCommonFlags::QUANTITY, VP1Interval > truthCutQuantity() const
void actualSaveSettings(VP1Serialise &) const
void possibleChange_truthCutPrimaryVertexOnly()
QList< VP1Interval > truthCutAllowedPhi() const
QPair< VertexCommonFlags::QUANTITY, double > truthCrossLength() const
void possibleChange_truthCutQuantity()
void possibleChange_truthCrossLength()
void possibleChange_truthCutAllowedPhi()
double reconVertexRepresentation() const
VertexCommonFlags::ReconVertexTypeFlags reconCutAllowedTypes() const
VP1CollectionWidget * collWidget() const
void possibleChange_reconVertexRepresentation()
VertexSysController(IVP1System *sys)
void actualRestoreSettings(VP1Deserialise &)
VP1Interval truthCutAllowedEta() const
void possibleChange_truthCutAllowedEta()
bool truthCutPrimaryVertexOnly() const
SoGroup * drawOptions() const
static QString toString(const T &t)
void possibleChange_reconCutAllowedTypes()