ATLAS Offline Software
Loading...
Searching...
No Matches
GuideSysController.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3*/
4
5
7// //
8// Implementation of class GuideSysController //
9// //
10// Author: Thomas H. Kittelmann (Thomas.Kittelmann@cern.ch) //
11// Initial version: July 2008 //
12// //
13// Updates: //
14// - 2021, Nov - Riccardo Maria BIANCHI <rbianchi@cern.ch> //
15// Added VP1People class to show people //
16// figures at scale //
17// //
19
20#define VP1IMPVARNAME m_d
21
24#include "ui_guidelinescontrollerform.h"
25#include "ui_guides_settings_coordinateaxes_form.h"
26#include "ui_guides_settings_etacones_form.h"
27#include "ui_guides_settings_floorandletters_form.h"
28#include "ui_guides_settings_people_form.h"
29#include "ui_guides_settings_grid_form.h"
30#include "ui_guides_settings_idprojsurfs_form.h"
31#include "ui_guides_settings_trkvolumes_form.h"
32#include "ui_guides_settings_lines_form.h"
35
36// System of units
37#ifdef BUILDVP1LIGHT
38 #include "GeoModelKernel/Units.h"
39 #define SYSTEM_OF_UNITS GeoModelKernelUnits // --> 'GeoModelKernelUnits::cm'
40#else
41 #include "GaudiKernel/SystemOfUnits.h"
42 #define SYSTEM_OF_UNITS Gaudi::Units // --> 'Gaudi::Units::cm'
43#endif
44
45#include <cmath>
46
47//____________________________________________________________________
49public:
51 Ui::VP1GuidesControllerForm ui{};
52 Ui::VP1GuidesSysSettingsCoordinateAxesForm ui_axes{};
53 Ui::VP1GuidesSysSettingsEtaConeForm ui_etacones{};
54 Ui::VP1GuidesSysSettingsFloorAndLettersForm ui_floorandletters{};
55 Ui::VP1GuidesSysSettingsPeopleForm ui_people{};
56 Ui::VP1GuidesSysSettingsGridForm ui_grid{};
57 Ui::VP1GuidesSysSettingsIDProjSurfsForm ui_idprojsurfs{};
58 Ui::VP1TrackingVolumesForm ui_trkvolumes{};
59 Ui::VP1LinesForm ui_lines{};
60
61 static SbColor4f color4f(const QColor& col, int transp_int) {
62 return SbColor4f(std::max<float>(0.0f,std::min<float>(1.0f,col.redF())),
63 std::max<float>(0.0f,std::min<float>(1.0f,col.greenF())),
64 std::max<float>(0.0f,std::min<float>(1.0f,col.blueF())),
65 std::max<float>(0.0f,std::min<float>(1.0f,1.0-transp_int/100.0)));
66 }
67
68 InDetProjFlags::DetTypeFlags inDetDetTypesUsingProjections;
69
70 bool last_showFloor = false;
72 double last_floorExtent = 0.0;
73 double last_floorSpacing = 0.0;
74 double last_floorHeight = 0.0;
75 bool last_showLetters = false;
76 double last_lettersZPos = 0.0;
78 bool last_showAxes = false;
79 double last_axesLength = 0.0;
85 double last_gridSpacing = 0.0;
86 double last_gridExtent = 0.0;
87 bool last_showEtaCone1 = false;
88 bool last_showEtaCone2 = false;
89 bool last_showEtaCone3 = false;
90 double last_etaConeValue1 = 0.0;
91 double last_etaConeValue2 = 0.0;
92 double last_etaConeValue3 = 0.0;
93 double last_etaExtent = 0.0;
98 bool last_showLines = false;
100 double last_line_eta = 0.0; // This is needed to update the display in possibleChange_lineDirection
101 bool last_showPeople = false;
104
105 InDetProjFlags::InDetProjPartsFlags last_applicablePixelProjParts;
106 InDetProjFlags::InDetProjPartsFlags last_applicableSCTProjParts;
107 InDetProjFlags::InDetProjPartsFlags last_applicableTRTProjParts;
108 InDetProjFlags::InDetProjPartsFlags last_shownPixelProjSurfaces;
109 InDetProjFlags::InDetProjPartsFlags last_shownSCTProjSurfaces;
110 InDetProjFlags::InDetProjPartsFlags last_shownTRTProjSurfaces;
111
112 static InDetProjFlags::InDetProjPartsFlags projPartsFlag( bool barrelinner, bool barrelouter,
113 bool endcapinner, bool endcapouter,
114 bool endcap_hidenormalcyls_when_zasr = false,
115 bool endcap_zasr = false );
116 InDetProjFlags::DetTypeFlags pixelPartsEnabledByGUIOrDataUsage() const;
117 InDetProjFlags::DetTypeFlags sctPartsEnabledByGUIOrDataUsage() const;
118 InDetProjFlags::DetTypeFlags trtPartsEnabledByGUIOrDataUsage() const;
119};
120
121//____________________________________________________________________
123 : VP1Controller(sys,"GuideSysController"), m_d(new Imp)
124{
125 m_d->theclass = this;
126 m_d->ui.setupUi(this);
127
128 initDialog(m_d->ui_axes, m_d->ui.pushButton_settings_coordinateAxes,m_d->ui.checkBox_coordinateAxes);
129 initDialog(m_d->ui_etacones, m_d->ui.pushButton_settings_etaCones,m_d->ui.checkBox_etaCones);
130 initDialog(m_d->ui_floorandletters, m_d->ui.pushButton_settings_floorAndLetters,m_d->ui.checkBox_floorAndLetters);
131 initDialog(m_d->ui_people, m_d->ui.pushButton_settings_people,m_d->ui.checkBox_people);
132 initDialog(m_d->ui_grid, m_d->ui.pushButton_settings_grid,m_d->ui.checkBox_grid);
133 initDialog(m_d->ui_idprojsurfs, m_d->ui.pushButton_settings_inDetProjSurfs,m_d->ui.checkBox_inDetProjSurfs);
134 initDialog(m_d->ui_trkvolumes, m_d->ui.pushButton_settings_trkVolumes,m_d->ui.checkBox_trkVolumes);
135 initDialog(m_d->ui_lines, m_d->ui.pushButton_settings_lines,m_d->ui.checkBox_lines);
136
137 //Hide SCT/Pixel projection surface controls for now:
138 m_d->ui_idprojsurfs.groupBox_pixelproj->setVisible(false);
139 m_d->ui_idprojsurfs.groupBox_sctproj->setVisible(false);
140
141 //Since we have different logical groups of radio buttons inside
142 //same groupboxes, we make sure they are coordinated correctly:
143
144 QButtonGroup * pixelproj_barrel_radiogroup = defineRadioButtonGroup(m_d->ui_idprojsurfs.radioButton_pixelprojsurf_barrel_inner,
145 m_d->ui_idprojsurfs.radioButton_pixelprojsurf_barrel_outer,
146 m_d->ui_idprojsurfs.radioButton_pixelprojsurf_barrel_both);
147 m_d->ui_idprojsurfs.radioButton_pixelprojsurf_barrel_inner->setChecked(true);
148 QButtonGroup * pixelproj_endcap_radiogroup = defineRadioButtonGroup(m_d->ui_idprojsurfs.radioButton_pixelprojsurf_endcap_inner,
149 m_d->ui_idprojsurfs.radioButton_pixelprojsurf_endcap_outer,
150 m_d->ui_idprojsurfs.radioButton_pixelprojsurf_endcap_both);
151 m_d->ui_idprojsurfs.radioButton_pixelprojsurf_endcap_inner->setChecked(true);
152
153
154 QButtonGroup * sctproj_barrel_radiogroup = defineRadioButtonGroup(m_d->ui_idprojsurfs.radioButton_sctprojsurf_barrel_inner,
155 m_d->ui_idprojsurfs.radioButton_sctprojsurf_barrel_outer,
156 m_d->ui_idprojsurfs.radioButton_sctprojsurf_barrel_both);
157 m_d->ui_idprojsurfs.radioButton_sctprojsurf_barrel_inner->setChecked(true);
158 QButtonGroup * sctproj_endcap_radiogroup = defineRadioButtonGroup(m_d->ui_idprojsurfs.radioButton_sctprojsurf_endcap_inner,
159 m_d->ui_idprojsurfs.radioButton_sctprojsurf_endcap_outer,
160 m_d->ui_idprojsurfs.radioButton_sctprojsurf_endcap_both);
161 m_d->ui_idprojsurfs.radioButton_sctprojsurf_endcap_inner->setChecked(true);
162
163
164 QButtonGroup * trtproj_barrel_radiogroup = defineRadioButtonGroup(m_d->ui_idprojsurfs.radioButton_trtprojsurf_barrel_inner,
165 m_d->ui_idprojsurfs.radioButton_trtprojsurf_barrel_outer,
166 m_d->ui_idprojsurfs.radioButton_trtprojsurf_barrel_both);
167 m_d->ui_idprojsurfs.radioButton_trtprojsurf_barrel_inner->setChecked(true);
168 QButtonGroup * trtproj_endcap_radiogroup = defineRadioButtonGroup(m_d->ui_idprojsurfs.radioButton_trtprojsurf_endcap_inner,
169 m_d->ui_idprojsurfs.radioButton_trtprojsurf_endcap_outer,
170 m_d->ui_idprojsurfs.radioButton_trtprojsurf_endcap_both);
171 m_d->ui_idprojsurfs.radioButton_trtprojsurf_endcap_inner->setChecked(true);
172
173 //Setup material buttons:
174 m_d->ui_floorandletters.colorButton_floor->setColor(QColor::fromRgbF(0.5,0.5,0.5));
175 m_d->ui_people.colorButton_people->setColor(QColor::fromRgbF(0.5,0.5,0.5));
176 m_d->ui_grid.colorButton_grid->setColor(QColor::fromRgbF(1.0,1.0,1.0));
177 m_d->ui_floorandletters.matButton_letters->setMaterial(VP1MaterialButton::createMaterial(0.5,0.5,0.5,0.1));
178 m_d->ui_people.matButton_people->setMaterial(VP1MaterialButton::createMaterial(0.5,0.5,0.5,0.1));
179 m_d->ui_axes.matButton_axes_x->setMaterial(VP1MaterialButton::createMaterial(1,0,0,0.15));
180 m_d->ui_axes.matButton_axes_y->setMaterial(VP1MaterialButton::createMaterial(0,1,0,0.15));
181 m_d->ui_axes.matButton_axes_z->setMaterial(VP1MaterialButton::createMaterial(0,0,2,0.15));
182 m_d->ui_etacones.matButton_etaCone1->setMaterial(VP1MaterialButton::createMaterial(1,1,0,0.2,0.5));
183 m_d->ui_etacones.matButton_etaCone2->setMaterial(VP1MaterialButton::createMaterial(1,0.56471,0.20784,0.2,0.5));
184 m_d->ui_etacones.matButton_etaCone3->setMaterial(VP1MaterialButton::createMaterial(1,0.15686,0.08235,0.2,0.5));
185 m_d->ui_idprojsurfs.pushButton_projsurfmaterial_pixel->setMaterial(VP1MaterialButton::createMaterial(126/255.0, 194/255.0, 204/255.0,0.05,0.35));
186 m_d->ui_idprojsurfs.pushButton_projsurfmaterial_sct->setMaterial(VP1MaterialButton::createMaterial(126/255.0, 194/255.0, 204/255.0,0.05,0.35));
187 m_d->ui_idprojsurfs.pushButton_projsurfmaterial_trt->setMaterial(VP1MaterialButton::createMaterial(126/255.0, 194/255.0, 204/255.0,0.05,0.35));
188 m_d->ui_trkvolumes.matButton_ID->setMaterial(VP1MaterialButton::createMaterial(1,0,0,0.15));
189 m_d->ui_trkvolumes.matButton_Calo->setMaterial(VP1MaterialButton::createMaterial(0,1,0,0.15));
190 m_d->ui_trkvolumes.matButton_MS->setMaterial(VP1MaterialButton::createMaterial(0,0,2,0.15));
191
193 // Setup connections which monitor changes in the controller so that we may emit signals as appropriate: //
195
196 // === Floor and Letters ===
198 connectToLastUpdateSlot(m_d->ui.checkBox_floorAndLetters);
199 connectToLastUpdateSlot(m_d->ui_floorandletters.checkBox_floorenabled);
200
202 connectToLastUpdateSlot(m_d->ui_floorandletters.colorButton_floor);
203 connectToLastUpdateSlot(m_d->ui_floorandletters.spinBox_floortransp);
204
206 connectToLastUpdateSlot(m_d->ui_floorandletters.doubleSpinBox_floorextent);
207
209 connectToLastUpdateSlot(m_d->ui_floorandletters.doubleSpinBox_floorspacing);
210
212 connectToLastUpdateSlot(m_d->ui_floorandletters.doubleSpinBox_floorheight);
213
215 connectToLastUpdateSlot(m_d->ui.checkBox_floorAndLetters);
216 connectToLastUpdateSlot(m_d->ui_floorandletters.checkBox_acdesignations);
217
219 connectToLastUpdateSlot(this,SIGNAL(floorExtentChanged(const double&)));
220 connectToLastUpdateSlot(this,SIGNAL(floorSpacingChanged(const double&)));
221
223 connectToLastUpdateSlot(this,SIGNAL(floorHeightChanged(const double&)));
224
225 // === People ===
227 connectToLastUpdateSlot(m_d->ui.checkBox_people);
228 connectToLastUpdateSlot(m_d->ui_people.checkBox_peopleenabled);
229
231 connectToLastUpdateSlot(m_d->ui_people.colorButton_people);
232 connectToLastUpdateSlot(m_d->ui_people.spinBox_peopletransp);
233
234 // Commenting this out for the moment as it is not implemented and is causing connect warnings
235
236 // addUpdateSlot(SLOT(possibleChange_peopleExtent()));
237 // connectToLastUpdateSlot(m_d->ui_people.doubleSpinBox_peopleextent);
238
239 // addUpdateSlot(SLOT(possibleChange_peopleSpacing()));
240 // connectToLastUpdateSlot(m_d->ui_people.doubleSpinBox_peoplespacing);
241
242 // addUpdateSlot(SLOT(possibleChange_peopleHeight()));
243 // connectToLastUpdateSlot(m_d->ui_people.doubleSpinBox_peopleheight);
244
245 // addUpdateSlot(SLOT(possibleChange_peopleZPos()));
246 // connectToLastUpdateSlot(this,SIGNAL(peopleExtentChanged(const double&)));
247 // connectToLastUpdateSlot(this,SIGNAL(peopleSpacingChanged(const double&)));
248
249 // addUpdateSlot(SLOT(possibleChange_peopleVerticalPos()));
250 // connectToLastUpdateSlot(this,SIGNAL(floorHeightChanged(const double&)));
251
252 // === Axes ===
254 connectToLastUpdateSlot(m_d->ui.checkBox_coordinateAxes);
255
257 connectToLastUpdateSlot(m_d->ui_axes.checkBox_axes_shownegativeparts);
258 connectToLastUpdateSlot(m_d->ui_axes.doubleSpinBox_axes_lengths_m);
259
261 connectToLastUpdateSlot(m_d->ui_axes.doubleSpinBox_axes_xpos_m);
262 connectToLastUpdateSlot(m_d->ui_axes.doubleSpinBox_axes_ypos_m);
263 connectToLastUpdateSlot(m_d->ui_axes.doubleSpinBox_axes_zpos_m);
264
266 connectToLastUpdateSlot(m_d->ui_axes.doubleSpinBox_axes_relthickness);
267
269 connectToLastUpdateSlot(m_d->ui.checkBox_grid);
270 connectToLastUpdateSlot(m_d->ui_grid.radioButton_grid_cartesian);
271
273 connectToLastUpdateSlot(m_d->ui.checkBox_grid);
274 connectToLastUpdateSlot(m_d->ui_grid.radioButton_grid_cylindrical);
275
277 connectToLastUpdateSlot(m_d->ui_grid.colorButton_grid);
278 connectToLastUpdateSlot(m_d->ui_grid.spinBox_gridtransp);
279
281 connectToLastUpdateSlot(m_d->ui_grid.doubleSpinBox_gridspacing);
282
284 connectToLastUpdateSlot(m_d->ui_grid.doubleSpinBox_gridextent);
285
287 connectToLastUpdateSlot(m_d->ui.checkBox_etaCones);
288 connectToLastUpdateSlot(m_d->ui_etacones.checkBox_etacone1);
289
291 connectToLastUpdateSlot(m_d->ui.checkBox_etaCones);
292 connectToLastUpdateSlot(m_d->ui_etacones.checkBox_etacone2);
293
295 connectToLastUpdateSlot(m_d->ui.checkBox_etaCones);
296 connectToLastUpdateSlot(m_d->ui_etacones.checkBox_etacone3);
297
299 connectToLastUpdateSlot(m_d->ui_etacones.doubleSpinBox_etaval1);
300
302 connectToLastUpdateSlot(m_d->ui_etacones.doubleSpinBox_etaval2);
303
305 connectToLastUpdateSlot(m_d->ui_etacones.doubleSpinBox_etaval3);
306
308 connectToLastUpdateSlot(m_d->ui_etacones.doubleSpinBox_etaconeextent);
309 connectToLastUpdateSlot(m_d->ui_etacones.radioButton_etaconeextentisr);
310
312 connectToLastUpdateSlot(pixelproj_barrel_radiogroup);
313 connectToLastUpdateSlot(pixelproj_endcap_radiogroup);
314
316 connectToLastUpdateSlot(sctproj_barrel_radiogroup);
317 connectToLastUpdateSlot(sctproj_endcap_radiogroup);
318
320 connectToLastUpdateSlot(trtproj_barrel_radiogroup);
321 connectToLastUpdateSlot(trtproj_endcap_radiogroup);
322 connectToLastUpdateSlot(m_d->ui_idprojsurfs.checkBox_trtprojsurf_z2r);
323
325 connectToLastUpdateSlot(m_d->ui.checkBox_inDetProjSurfs);
326 connectToLastUpdateSlot(this,SIGNAL(applicablePixelProjPartsChanged(InDetProjFlags::InDetProjPartsFlags)));
327 connectToLastUpdateSlot(m_d->ui_idprojsurfs.groupBox_pixelproj);
328 connectToLastUpdateSlot(m_d->ui_idprojsurfs.checkBox_pixelprojsurf_parts_asneeded);
329 connectToLastUpdateSlot(m_d->ui_idprojsurfs.checkBox_pixelprojsurf_parts_barrelA);
330 connectToLastUpdateSlot(m_d->ui_idprojsurfs.checkBox_pixelprojsurf_parts_barrelC);
331 connectToLastUpdateSlot(m_d->ui_idprojsurfs.checkBox_pixelprojsurf_parts_endcapA);
332 connectToLastUpdateSlot(m_d->ui_idprojsurfs.checkBox_pixelprojsurf_parts_endcapC);
333
335 connectToLastUpdateSlot(m_d->ui.checkBox_inDetProjSurfs);
336 connectToLastUpdateSlot(this,SIGNAL(applicableSCTProjPartsChanged(InDetProjFlags::InDetProjPartsFlags)));
337 connectToLastUpdateSlot(m_d->ui_idprojsurfs.groupBox_sctproj);
338 connectToLastUpdateSlot(m_d->ui_idprojsurfs.checkBox_sctprojsurf_parts_asneeded);
339 connectToLastUpdateSlot(m_d->ui_idprojsurfs.checkBox_sctprojsurf_parts_barrelA);
340 connectToLastUpdateSlot(m_d->ui_idprojsurfs.checkBox_sctprojsurf_parts_barrelC);
341 connectToLastUpdateSlot(m_d->ui_idprojsurfs.checkBox_sctprojsurf_parts_endcapA);
342 connectToLastUpdateSlot(m_d->ui_idprojsurfs.checkBox_sctprojsurf_parts_endcapC);
343
345 connectToLastUpdateSlot(m_d->ui.checkBox_inDetProjSurfs);
346 connectToLastUpdateSlot(this,SIGNAL(applicableTRTProjPartsChanged(InDetProjFlags::InDetProjPartsFlags)));
347 connectToLastUpdateSlot(m_d->ui_idprojsurfs.groupBox_trtproj);
348 connectToLastUpdateSlot(m_d->ui_idprojsurfs.checkBox_trtprojsurf_parts_asneeded);
349 connectToLastUpdateSlot(m_d->ui_idprojsurfs.checkBox_trtprojsurf_parts_barrelA);
350 connectToLastUpdateSlot(m_d->ui_idprojsurfs.checkBox_trtprojsurf_parts_barrelC);
351 connectToLastUpdateSlot(m_d->ui_idprojsurfs.checkBox_trtprojsurf_parts_endcapA);
352 connectToLastUpdateSlot(m_d->ui_idprojsurfs.checkBox_trtprojsurf_parts_endcapC);
353
355 connectToLastUpdateSlot(m_d->ui_idprojsurfs.checkBox_pixelprojsurf_parts_asneeded);
356
358 connectToLastUpdateSlot(m_d->ui_idprojsurfs.checkBox_sctprojsurf_parts_asneeded);
359
361 connectToLastUpdateSlot(m_d->ui_idprojsurfs.checkBox_trtprojsurf_parts_asneeded);
362
364 connectToLastUpdateSlot(m_d->ui.checkBox_trkVolumes);
365
367 connectToLastUpdateSlot(m_d->ui_trkvolumes.checkBox_ID);
369 connectToLastUpdateSlot(m_d->ui_trkvolumes.checkBox_Calo);
371 connectToLastUpdateSlot(m_d->ui_trkvolumes.checkBox_MS);
372
374 connectToLastUpdateSlot(m_d->ui.checkBox_lines);
375
377 connectToLastUpdateSlot(m_d->ui_lines.doubleSpinBox_phi);
378 connectToLastUpdateSlot(m_d->ui_lines.doubleSpinBox_theta);
379 connectToLastUpdateSlot(m_d->ui_lines.doubleSpinBox_eta);
380 connectToLastUpdateSlot(m_d->ui_lines.doubleSpinBox_length);
381
382
383 initLastVars();
384}
385
386//____________________________________________________________________
391
392//____________________________________________________________________
393//Material access methods:
394SoMaterial * GuideSysController::lettersMaterial() const { return m_d->ui_floorandletters.matButton_letters->handledMaterials().at(0); }
395SoMaterial * GuideSysController::peopleMaterial() const { return m_d->ui_people.matButton_people->handledMaterials().at(0); }
396SoMaterial * GuideSysController::xAxisMaterial() const { return m_d->ui_axes.matButton_axes_x->handledMaterials().at(0); }
397SoMaterial * GuideSysController::yAxisMaterial() const { return m_d->ui_axes.matButton_axes_y->handledMaterials().at(0); }
398SoMaterial * GuideSysController::zAxisMaterial() const { return m_d->ui_axes.matButton_axes_z->handledMaterials().at(0); }
399SoMaterial * GuideSysController::etaCone1Material() const { return m_d->ui_etacones.matButton_etaCone1->handledMaterials().at(0); }
400SoMaterial * GuideSysController::etaCone2Material() const { return m_d->ui_etacones.matButton_etaCone2->handledMaterials().at(0); }
401SoMaterial * GuideSysController::etaCone3Material() const { return m_d->ui_etacones.matButton_etaCone3->handledMaterials().at(0); }
402SoMaterial * GuideSysController::pixelProjSurfMaterial() const { return m_d->ui_idprojsurfs.pushButton_projsurfmaterial_pixel->handledMaterials().at(0); }
403SoMaterial * GuideSysController::sctProjSurfMaterial() const { return m_d->ui_idprojsurfs.pushButton_projsurfmaterial_sct->handledMaterials().at(0); }
404SoMaterial * GuideSysController::trtProjSurfMaterial() const { return m_d->ui_idprojsurfs.pushButton_projsurfmaterial_trt->handledMaterials().at(0); }
405SoMaterial * GuideSysController::idTrkVolumesMaterial() const { return m_d->ui_trkvolumes.matButton_ID->handledMaterials().at(0); }
406SoMaterial * GuideSysController::caloTrkVolumesMaterial() const { return m_d->ui_trkvolumes.matButton_Calo->handledMaterials().at(0); }
407SoMaterial * GuideSysController::msTrkVolumesMaterial() const { return m_d->ui_trkvolumes.matButton_MS->handledMaterials().at(0); }
408
409//____________________________________________________________________
411{
412 return m_d->ui.checkBox_floorAndLetters->isChecked() &&
413 m_d->ui_floorandletters.checkBox_floorenabled->isChecked();
414}
415
416//____________________________________________________________________
418{
419 return m_d->ui.checkBox_people->isChecked() &&
420 m_d->ui_people.checkBox_peopleenabled->isChecked();
421}
422
423//____________________________________________________________________
425{
426 return Imp::color4f(m_d->ui_floorandletters.colorButton_floor->color(),m_d->ui_floorandletters.spinBox_floortransp->value());
427}
428
429//____________________________________________________________________
431{
432 return Imp::color4f(m_d->ui_people.colorButton_people->color(),m_d->ui_people.spinBox_peopletransp->value());
433}
434
435
436//____________________________________________________________________
438{
439 return m_d->ui_floorandletters.doubleSpinBox_floorextent->value()*SYSTEM_OF_UNITS::m;
440}
441
442//____________________________________________________________________
444{
445 return m_d->ui_floorandletters.doubleSpinBox_floorspacing->value()*SYSTEM_OF_UNITS::m;
446}
447
448//____________________________________________________________________
450{
451 return m_d->ui_floorandletters.doubleSpinBox_floorheight->value()*SYSTEM_OF_UNITS::m;
452}
453
454//____________________________________________________________________
456{
457 return m_d->ui.checkBox_floorAndLetters->isChecked() &&
458 m_d->ui_floorandletters.checkBox_acdesignations->isChecked();
459}
460
461//____________________________________________________________________
463{
464
465 int nmax; double distmax;
466 if (!VP1Floor::calcParsFromExtentAndSpacing( static_cast<const VP1HelperClassBase*>(this), floorExtent(), floorSpacing(), VP1Floor::nMax(), nmax, distmax )) {
467 nmax = 10;
468 distmax = 10*SYSTEM_OF_UNITS::m;
469 message("lettersZPos ERROR: Problems calculating floor nmax/distmax.");
470 }
471 return distmax*1.1;
472}
473
474//____________________________________________________________________
476{
477 return floorHeight()+1.5*SYSTEM_OF_UNITS::m;
478}
479
480//____________________________________________________________________
482{
483 return floorHeight();
484}
485
486//____________________________________________________________________
488{
489
490 int nmax; double distmax;
491 if (!VP1Floor::calcParsFromExtentAndSpacing( static_cast<const VP1HelperClassBase*>(this), floorExtent(), floorSpacing(), VP1Floor::nMax(), nmax, distmax )) {
492 nmax = 10;
493 distmax = 10*SYSTEM_OF_UNITS::m;
494 message("lettersZPos ERROR: Problems calculating floor nmax/distmax.");
495 }
496 return distmax*1.1;
497}
498
499//____________________________________________________________________
501{
502 return m_d->ui.checkBox_coordinateAxes->isChecked();
503}
504
505//____________________________________________________________________
507{
508 return m_d->ui_axes.doubleSpinBox_axes_lengths_m->value()*SYSTEM_OF_UNITS::m *
509 (m_d->ui_axes.checkBox_axes_shownegativeparts->isChecked()?-1.0:1.0);
510}
511
512//____________________________________________________________________
514{
515 return SbVec3f(m_d->ui_axes.doubleSpinBox_axes_xpos_m->value()*SYSTEM_OF_UNITS::m,
516 m_d->ui_axes.doubleSpinBox_axes_ypos_m->value()*SYSTEM_OF_UNITS::m,
517 m_d->ui_axes.doubleSpinBox_axes_zpos_m->value()*SYSTEM_OF_UNITS::m);
518}
519
520//____________________________________________________________________
522{
523 return m_d->ui_axes.doubleSpinBox_axes_relthickness->value();
524}
525
526//____________________________________________________________________
528{
529 return m_d->ui.checkBox_grid->isChecked() &&
530 m_d->ui_grid.radioButton_grid_cartesian->isChecked();
531}
532
533//____________________________________________________________________
535{
536 return m_d->ui.checkBox_grid->isChecked() &&
537 m_d->ui_grid.radioButton_grid_cylindrical->isChecked();
538}
539
540//____________________________________________________________________
542{
543 return Imp::color4f(m_d->ui_grid.colorButton_grid->color(),m_d->ui_grid.spinBox_gridtransp->value());
544}
545
546//____________________________________________________________________
548{
549 return m_d->ui_grid.doubleSpinBox_gridspacing->value()*SYSTEM_OF_UNITS::m;
550}
551
552//____________________________________________________________________
554{
555 return m_d->ui_grid.doubleSpinBox_gridextent->value()*SYSTEM_OF_UNITS::m;
556}
557
558//____________________________________________________________________
560{
561 return m_d->ui.checkBox_etaCones->isChecked() &&
562 m_d->ui_etacones.checkBox_etacone1->isChecked();
563}
564
565//____________________________________________________________________
567{
568 return m_d->ui.checkBox_etaCones->isChecked() &&
569 m_d->ui_etacones.checkBox_etacone2->isChecked();
570}
571
572//____________________________________________________________________
574{
575 return m_d->ui.checkBox_etaCones->isChecked() &&
576 m_d->ui_etacones.checkBox_etacone3->isChecked();
577}
578
579//____________________________________________________________________
581{
582 return std::max(1.0e-5,m_d->ui_etacones.doubleSpinBox_etaval1->value());
583}
584
585//____________________________________________________________________
587{
588 return std::max(1.0e-5,m_d->ui_etacones.doubleSpinBox_etaval2->value());
589}
590
591//____________________________________________________________________
593{
594 return std::max(1.0e-5,m_d->ui_etacones.doubleSpinBox_etaval3->value());
595}
596
597//____________________________________________________________________
599{
600 return m_d->ui_etacones.doubleSpinBox_etaconeextent->value() * SYSTEM_OF_UNITS::m
601 * (m_d->ui_etacones.radioButton_etaconeextentisr->isChecked() ? 1.0 : -1.0);
602}
603
604//____________________________________________________________________
606{
607 return m_d->ui.checkBox_lines->isChecked();
608}
609
610
611//____________________________________________________________________
613{
614 double r = lineLength();
615 double phi = m_d->ui_lines.doubleSpinBox_phi->value();
616 double theta = m_d->ui_lines.doubleSpinBox_theta->value();
617 SbVec3f direction(r*sin(theta)*cos(phi),r*sin(theta)*sin(phi), r*cos(theta));
618 return direction;
619}
620
621//____________________________________________________________________
623{
624 return m_d->ui_lines.doubleSpinBox_length->value() * SYSTEM_OF_UNITS::m;
625}
626
627//_____________________________________________________________________________________
628InDetProjFlags::InDetProjPartsFlags GuideSysController::Imp::projPartsFlag( bool barrelinner, bool barrelouter,
629 bool endcapinner, bool endcapouter,
630 bool endcap_hidenormalcyls_when_zasr,
631 bool endcap_zasr )
632{
633 InDetProjFlags::InDetProjPartsFlags parts(InDetProjFlags::NoProjections);
634 //Given the general parts needed, what specific surfaces do we need:
635 if ( barrelinner )
637 if ( barrelouter ) {
640 }
641
642 if ( !( endcap_zasr && endcap_hidenormalcyls_when_zasr ) ) {
643 if ( endcapinner ) {
644 //Inner:
647 }
648 if ( endcapouter ) {
649 //Outer:
652 }
653 }
654 //Special ZasR surfaces for the endcaps, placed in the barrel positions:
655 if (endcap_zasr) {
656 if ( barrelinner )
658 if ( barrelouter ) {
661 }
662 }
663 return parts;
664}
665
666//____________________________________________________________________
667InDetProjFlags::InDetProjPartsFlags GuideSysController::applicablePixelProjParts() const
668{
669 return Imp::projPartsFlag( m_d->ui_idprojsurfs.radioButton_pixelprojsurf_barrel_inner->isChecked() || m_d->ui_idprojsurfs.radioButton_pixelprojsurf_barrel_both->isChecked(),
670 m_d->ui_idprojsurfs.radioButton_pixelprojsurf_barrel_outer->isChecked() || m_d->ui_idprojsurfs.radioButton_pixelprojsurf_barrel_both->isChecked(),
671 m_d->ui_idprojsurfs.radioButton_pixelprojsurf_endcap_inner->isChecked() || m_d->ui_idprojsurfs.radioButton_pixelprojsurf_endcap_both->isChecked(),
672 m_d->ui_idprojsurfs.radioButton_pixelprojsurf_endcap_outer->isChecked() || m_d->ui_idprojsurfs.radioButton_pixelprojsurf_endcap_both->isChecked() );
673}
674
675//____________________________________________________________________
676InDetProjFlags::InDetProjPartsFlags GuideSysController::applicableSCTProjParts() const
677{
678 return Imp::projPartsFlag( m_d->ui_idprojsurfs.radioButton_sctprojsurf_barrel_inner->isChecked() || m_d->ui_idprojsurfs.radioButton_sctprojsurf_barrel_both->isChecked(),
679 m_d->ui_idprojsurfs.radioButton_sctprojsurf_barrel_outer->isChecked() || m_d->ui_idprojsurfs.radioButton_sctprojsurf_barrel_both->isChecked(),
680 m_d->ui_idprojsurfs.radioButton_sctprojsurf_endcap_inner->isChecked() || m_d->ui_idprojsurfs.radioButton_sctprojsurf_endcap_both->isChecked(),
681 m_d->ui_idprojsurfs.radioButton_sctprojsurf_endcap_outer->isChecked() || m_d->ui_idprojsurfs.radioButton_sctprojsurf_endcap_both->isChecked() );
682}
683
684//____________________________________________________________________
685InDetProjFlags::InDetProjPartsFlags GuideSysController::applicableTRTProjParts() const
686{
687 return Imp::projPartsFlag( m_d->ui_idprojsurfs.radioButton_trtprojsurf_barrel_inner->isChecked() || m_d->ui_idprojsurfs.radioButton_trtprojsurf_barrel_both->isChecked(),
688 m_d->ui_idprojsurfs.radioButton_trtprojsurf_barrel_outer->isChecked() || m_d->ui_idprojsurfs.radioButton_trtprojsurf_barrel_both->isChecked(),
689 m_d->ui_idprojsurfs.radioButton_trtprojsurf_endcap_inner->isChecked() || m_d->ui_idprojsurfs.radioButton_trtprojsurf_endcap_both->isChecked(),
690 m_d->ui_idprojsurfs.radioButton_trtprojsurf_endcap_outer->isChecked() || m_d->ui_idprojsurfs.radioButton_trtprojsurf_endcap_both->isChecked(),
691 true, m_d->ui_idprojsurfs.checkBox_trtprojsurf_z2r->isChecked() );
692}
693
694//_____________________________________________________________________________________
696{
697 InDetProjFlags::DetTypeFlags f(InDetProjFlags::NoDet);
698 if (ui_idprojsurfs.groupBox_trtproj->isChecked()) {
699 if (ui_idprojsurfs.checkBox_trtprojsurf_parts_asneeded->isChecked()) {
701 } else {
702 if (ui_idprojsurfs.checkBox_trtprojsurf_parts_barrelA->isChecked()) f |= InDetProjFlags::TRT_brlpos;
703 if (ui_idprojsurfs.checkBox_trtprojsurf_parts_barrelC->isChecked()) f |= InDetProjFlags::TRT_brlneg;
704 if (ui_idprojsurfs.checkBox_trtprojsurf_parts_endcapA->isChecked()) f |= InDetProjFlags::TRT_ecpos;
705 if (ui_idprojsurfs.checkBox_trtprojsurf_parts_endcapC->isChecked()) f |= InDetProjFlags::TRT_ecneg;
706 }
707 }
708 return f;
709}
710
711//_____________________________________________________________________________________
713{
714 InDetProjFlags::DetTypeFlags f(InDetProjFlags::NoDet);
715 if (ui_idprojsurfs.groupBox_sctproj->isChecked()) {
716 if (ui_idprojsurfs.checkBox_sctprojsurf_parts_asneeded->isChecked()) {
718 } else {
719 if (ui_idprojsurfs.checkBox_sctprojsurf_parts_barrelA->isChecked()) f |= InDetProjFlags::SCT_brlpos;
720 if (ui_idprojsurfs.checkBox_sctprojsurf_parts_barrelC->isChecked()) f |= InDetProjFlags::SCT_brlneg;
721 if (ui_idprojsurfs.checkBox_sctprojsurf_parts_endcapA->isChecked()) f |= InDetProjFlags::SCT_ecpos;
722 if (ui_idprojsurfs.checkBox_sctprojsurf_parts_endcapC->isChecked()) f |= InDetProjFlags::SCT_ecneg;
723 }
724 }
725 return f;
726}
727
728//_____________________________________________________________________________________
730{
731 InDetProjFlags::DetTypeFlags f(InDetProjFlags::NoDet);
732 if (ui_idprojsurfs.groupBox_pixelproj->isChecked()) {
733 if (ui_idprojsurfs.checkBox_pixelprojsurf_parts_asneeded->isChecked()) {
735 } else {
736 if (ui_idprojsurfs.checkBox_pixelprojsurf_parts_barrelA->isChecked()) f |= InDetProjFlags::Pixel_brlpos;
737 if (ui_idprojsurfs.checkBox_pixelprojsurf_parts_barrelC->isChecked()) f |= InDetProjFlags::Pixel_brlneg;
738 if (ui_idprojsurfs.checkBox_pixelprojsurf_parts_endcapA->isChecked()) f |= InDetProjFlags::Pixel_ecpos;
739 if (ui_idprojsurfs.checkBox_pixelprojsurf_parts_endcapC->isChecked()) f |= InDetProjFlags::Pixel_ecneg;
740 }
741 }
742 return f;
743}
744
745//____________________________________________________________________
746InDetProjFlags::InDetProjPartsFlags GuideSysController::shownPixelProjSurfaces() const
747{
748 InDetProjFlags::DetTypeFlags enabledDetRegions = m_d->pixelPartsEnabledByGUIOrDataUsage();
749 if (!(InDetProjFlags::Pixel_all&enabledDetRegions)||!m_d->ui.checkBox_inDetProjSurfs->isChecked())
751 InDetProjFlags::InDetProjPartsFlags pixelProjParts(applicablePixelProjParts());
752 if (pixelProjParts==InDetProjFlags::NoProjections)
754 InDetProjFlags::InDetProjPartsFlags dummy_sct(InDetProjFlags::NoProjections), dummy_trt(InDetProjFlags::NoProjections);
755 InDetProjFlags::projectionPartsGivenUsedDetectors( pixelProjParts, dummy_sct, dummy_trt, enabledDetRegions );
756 return pixelProjParts;
757}
758
759//____________________________________________________________________
760InDetProjFlags::InDetProjPartsFlags GuideSysController::shownSCTProjSurfaces() const
761{
762 InDetProjFlags::DetTypeFlags enabledDetRegions = m_d->sctPartsEnabledByGUIOrDataUsage();
763 if (!(InDetProjFlags::SCT_all&enabledDetRegions)||!m_d->ui.checkBox_inDetProjSurfs->isChecked())
765 InDetProjFlags::InDetProjPartsFlags sctProjParts(applicableSCTProjParts());
766 if (sctProjParts==InDetProjFlags::NoProjections)
768 InDetProjFlags::InDetProjPartsFlags dummy_pixel(InDetProjFlags::NoProjections), dummy_trt(InDetProjFlags::NoProjections);
769 InDetProjFlags::projectionPartsGivenUsedDetectors( dummy_pixel, sctProjParts, dummy_trt, enabledDetRegions );
770 return sctProjParts;
771}
772
773//____________________________________________________________________
774InDetProjFlags::InDetProjPartsFlags GuideSysController::shownTRTProjSurfaces() const
775{
776 InDetProjFlags::DetTypeFlags enabledDetRegions = m_d->trtPartsEnabledByGUIOrDataUsage();
777 if (!(InDetProjFlags::TRT_all&enabledDetRegions)||!m_d->ui.checkBox_inDetProjSurfs->isChecked())
779 InDetProjFlags::InDetProjPartsFlags trtProjParts(applicableTRTProjParts());
780 if (trtProjParts==InDetProjFlags::NoProjections)
782 InDetProjFlags::InDetProjPartsFlags dummy_pixel(InDetProjFlags::NoProjections), dummy_sct(InDetProjFlags::NoProjections);
783 InDetProjFlags::projectionPartsGivenUsedDetectors( dummy_pixel, dummy_sct, trtProjParts,enabledDetRegions );
784 return trtProjParts;
785}
786
787//____________________________________________________________________
789{
790 if (m_d->inDetDetTypesUsingProjections==f)
791 return;
792 m_d->inDetDetTypesUsingProjections=f;
796}
797
798//____________________________________________________________________
800{
801 const bool e(!m_d->ui_idprojsurfs.checkBox_pixelprojsurf_parts_asneeded->isChecked());
802 m_d->ui_idprojsurfs.checkBox_pixelprojsurf_parts_barrelA->setEnabled(e);
803 m_d->ui_idprojsurfs.checkBox_pixelprojsurf_parts_barrelC->setEnabled(e);
804 m_d->ui_idprojsurfs.checkBox_pixelprojsurf_parts_endcapA->setEnabled(e);
805 m_d->ui_idprojsurfs.checkBox_pixelprojsurf_parts_endcapC->setEnabled(e);
806}
807
808//____________________________________________________________________
810{
811 const bool e(!m_d->ui_idprojsurfs.checkBox_sctprojsurf_parts_asneeded->isChecked());
812 m_d->ui_idprojsurfs.checkBox_sctprojsurf_parts_barrelA->setEnabled(e);
813 m_d->ui_idprojsurfs.checkBox_sctprojsurf_parts_barrelC->setEnabled(e);
814 m_d->ui_idprojsurfs.checkBox_sctprojsurf_parts_endcapA->setEnabled(e);
815 m_d->ui_idprojsurfs.checkBox_sctprojsurf_parts_endcapC->setEnabled(e);
816}
817
818//____________________________________________________________________
820{
821 const bool e(!m_d->ui_idprojsurfs.checkBox_trtprojsurf_parts_asneeded->isChecked());
822 m_d->ui_idprojsurfs.checkBox_trtprojsurf_parts_barrelA->setEnabled(e);
823 m_d->ui_idprojsurfs.checkBox_trtprojsurf_parts_barrelC->setEnabled(e);
824 m_d->ui_idprojsurfs.checkBox_trtprojsurf_parts_endcapA->setEnabled(e);
825 m_d->ui_idprojsurfs.checkBox_trtprojsurf_parts_endcapC->setEnabled(e);
826}
827
829{
830 return m_d->ui.checkBox_trkVolumes->isChecked();
831}
832
834{
835 return m_d->ui_trkvolumes.checkBox_ID->isChecked();
836}
837
839{
840 return m_d->ui_trkvolumes.checkBox_Calo->isChecked();
841}
842
844{
845 return m_d->ui_trkvolumes.checkBox_MS->isChecked();
846}
847
848//____________________________________________________________________
850{
851 return 3;
852}
853
854//____________________________________________________________________
856{
857
858 //version 0 output an integer here.
859
860 //Materials
861 s.save(m_d->ui_floorandletters.matButton_letters);
862 s.save(m_d->ui_axes.matButton_axes_x);
863 s.save(m_d->ui_axes.matButton_axes_y);
864 s.save(m_d->ui_axes.matButton_axes_z);
865 s.save(m_d->ui_etacones.matButton_etaCone1);
866 s.save(m_d->ui_etacones.matButton_etaCone2);
867 s.save(m_d->ui_etacones.matButton_etaCone3);
868 s.save(m_d->ui_idprojsurfs.pushButton_projsurfmaterial_pixel);
869 s.save(m_d->ui_idprojsurfs.pushButton_projsurfmaterial_sct);
870 s.save(m_d->ui_idprojsurfs.pushButton_projsurfmaterial_trt);
871
872 //Everything apart from projection surfaces:
873 s.save(m_d->ui_grid.colorButton_grid);
874 s.save(m_d->ui_grid.spinBox_gridtransp);
875 s.save(m_d->ui_floorandletters.colorButton_floor);
876 s.save(m_d->ui_floorandletters.spinBox_floortransp);
877 s.save(m_d->ui_floorandletters.doubleSpinBox_floorheight);
878 s.save(m_d->ui_floorandletters.checkBox_floorenabled);
879 s.save(m_d->ui_floorandletters.doubleSpinBox_floorspacing);
880 s.save(m_d->ui_floorandletters.doubleSpinBox_floorextent);
881 s.save(m_d->ui_floorandletters.checkBox_acdesignations);
882 //Version 0 output bool here
883 s.save(m_d->ui_axes.checkBox_axes_shownegativeparts);
884 s.save(m_d->ui_axes.doubleSpinBox_axes_lengths_m);
885 s.save(m_d->ui_axes.doubleSpinBox_axes_relthickness);
886 s.save(m_d->ui_axes.doubleSpinBox_axes_xpos_m);
887 s.save(m_d->ui_axes.doubleSpinBox_axes_ypos_m);
888 s.save(m_d->ui_axes.doubleSpinBox_axes_zpos_m);
889 s.save(0/*backwards compat*/,m_d->ui_grid.radioButton_grid_cartesian,m_d->ui_grid.radioButton_grid_cylindrical);
890 s.save(m_d->ui_grid.doubleSpinBox_gridspacing);
891 s.save(m_d->ui_grid.doubleSpinBox_gridextent);
892 s.save(m_d->ui_etacones.checkBox_etacone1);
893 s.save(m_d->ui_etacones.doubleSpinBox_etaval1);
894 s.save(m_d->ui_etacones.checkBox_etacone2);
895 s.save(m_d->ui_etacones.doubleSpinBox_etaval2);
896 s.save(m_d->ui_etacones.checkBox_etacone3);
897 s.save(m_d->ui_etacones.doubleSpinBox_etaval3);
898 s.save(m_d->ui_etacones.doubleSpinBox_etaconeextent);
899 s.save(m_d->ui_etacones.radioButton_etaconeextentisr,m_d->ui_etacones.radioButton_etaconeextentisz);
900
901 //Projection surfaces:
902
903 s.save(m_d->ui_idprojsurfs.groupBox_pixelproj);
904 s.save(m_d->ui_idprojsurfs.checkBox_pixelprojsurf_parts_asneeded);
905 s.save(m_d->ui_idprojsurfs.checkBox_pixelprojsurf_parts_barrelA);
906 s.save(m_d->ui_idprojsurfs.checkBox_pixelprojsurf_parts_barrelC);
907 s.save(m_d->ui_idprojsurfs.checkBox_pixelprojsurf_parts_endcapA);
908 s.save(m_d->ui_idprojsurfs.checkBox_pixelprojsurf_parts_endcapC);
909 s.save(m_d->ui_idprojsurfs.radioButton_pixelprojsurf_barrel_inner,
910 m_d->ui_idprojsurfs.radioButton_pixelprojsurf_barrel_outer,
911 m_d->ui_idprojsurfs.radioButton_pixelprojsurf_barrel_both);
912 s.save(m_d->ui_idprojsurfs.radioButton_pixelprojsurf_endcap_inner,
913 m_d->ui_idprojsurfs.radioButton_pixelprojsurf_endcap_outer,
914 m_d->ui_idprojsurfs.radioButton_pixelprojsurf_endcap_both);
915 s.save(m_d->ui_idprojsurfs.groupBox_sctproj);
916 s.save(m_d->ui_idprojsurfs.checkBox_sctprojsurf_parts_asneeded);
917 s.save(m_d->ui_idprojsurfs.checkBox_sctprojsurf_parts_barrelA);
918 s.save(m_d->ui_idprojsurfs.checkBox_sctprojsurf_parts_barrelC);
919 s.save(m_d->ui_idprojsurfs.checkBox_sctprojsurf_parts_endcapA);
920 s.save(m_d->ui_idprojsurfs.checkBox_sctprojsurf_parts_endcapC);
921 s.save(m_d->ui_idprojsurfs.radioButton_sctprojsurf_barrel_inner,
922 m_d->ui_idprojsurfs.radioButton_sctprojsurf_barrel_outer,
923 m_d->ui_idprojsurfs.radioButton_sctprojsurf_barrel_both);
924 s.save(m_d->ui_idprojsurfs.radioButton_sctprojsurf_endcap_inner,
925 m_d->ui_idprojsurfs.radioButton_sctprojsurf_endcap_outer,
926 m_d->ui_idprojsurfs.radioButton_sctprojsurf_endcap_both);
927 s.save(m_d->ui_idprojsurfs.groupBox_trtproj);
928 s.save(m_d->ui_idprojsurfs.checkBox_trtprojsurf_parts_asneeded);
929 s.save(m_d->ui_idprojsurfs.checkBox_trtprojsurf_parts_barrelA);
930 s.save(m_d->ui_idprojsurfs.checkBox_trtprojsurf_parts_barrelC);
931 s.save(m_d->ui_idprojsurfs.checkBox_trtprojsurf_parts_endcapA);
932 s.save(m_d->ui_idprojsurfs.checkBox_trtprojsurf_parts_endcapC);
933 s.save(m_d->ui_idprojsurfs.radioButton_trtprojsurf_barrel_inner,
934 m_d->ui_idprojsurfs.radioButton_trtprojsurf_barrel_outer,
935 m_d->ui_idprojsurfs.radioButton_trtprojsurf_barrel_both);
936 s.save(m_d->ui_idprojsurfs.radioButton_trtprojsurf_endcap_inner,
937 m_d->ui_idprojsurfs.radioButton_trtprojsurf_endcap_outer,
938 m_d->ui_idprojsurfs.radioButton_trtprojsurf_endcap_both);
939 s.save(m_d->ui_idprojsurfs.checkBox_trtprojsurf_z2r);
940
941 s.save(m_d->ui.checkBox_coordinateAxes);//version 1+
942 s.save(m_d->ui.checkBox_etaCones);
943 s.save(m_d->ui.checkBox_floorAndLetters);//version 1+
944 s.save(m_d->ui.checkBox_grid);//version 1+
945 s.save(m_d->ui.checkBox_inDetProjSurfs);//version 1+
946
947 //Tracking volumes:
948 // All version 2+
949 s.save(m_d->ui.checkBox_trkVolumes);
950
951 //material
952 s.save(m_d->ui_trkvolumes.matButton_ID);
953 s.save(m_d->ui_trkvolumes.matButton_Calo);
954 s.save(m_d->ui_trkvolumes.matButton_MS);
955 s.save(m_d->ui_trkvolumes.checkBox_ID);
956 s.save(m_d->ui_trkvolumes.checkBox_Calo);
957 s.save(m_d->ui_trkvolumes.checkBox_MS);
958
959 // Line from origin
960 s.save(m_d->ui.checkBox_lines);
961 s.save(m_d->ui_lines.doubleSpinBox_phi);
962 s.save(m_d->ui_lines.doubleSpinBox_phi);
963 s.save(m_d->ui_lines.doubleSpinBox_eta);
964 s.save(m_d->ui_lines.doubleSpinBox_length);
965
966 // People
967 s.save(m_d->ui.checkBox_people);
968 s.save(m_d->ui_people.matButton_people);
969}
970
971//____________________________________________________________________
973{
974 if (s.version()<0||s.version()>2) {
975 message("Warning: State data in .vp1 file has unsupported version ("+str(s.version())+")");
976 return;
977 }
978
979 if (s.version()==0)
980 s.ignoreInt();
981
982 //Materials
983 s.restore(m_d->ui_floorandletters.matButton_letters);
984 s.restore(m_d->ui_axes.matButton_axes_x);
985 s.restore(m_d->ui_axes.matButton_axes_y);
986 s.restore(m_d->ui_axes.matButton_axes_z);
987 s.restore(m_d->ui_etacones.matButton_etaCone1);
988 s.restore(m_d->ui_etacones.matButton_etaCone2);
989 s.restore(m_d->ui_etacones.matButton_etaCone3);
990 s.restore(m_d->ui_idprojsurfs.pushButton_projsurfmaterial_pixel);
991 s.restore(m_d->ui_idprojsurfs.pushButton_projsurfmaterial_sct);
992 s.restore(m_d->ui_idprojsurfs.pushButton_projsurfmaterial_trt);
993
994
995 //Everything apart from projection surfaces:
996 s.restore(m_d->ui_grid.colorButton_grid);
997 s.restore(m_d->ui_grid.spinBox_gridtransp);
998 s.restore(m_d->ui_floorandletters.colorButton_floor);
999 s.restore(m_d->ui_floorandletters.spinBox_floortransp);
1000 s.restore(m_d->ui_floorandletters.doubleSpinBox_floorheight);
1001 s.restore(m_d->ui_floorandletters.checkBox_floorenabled);
1002 s.restore(m_d->ui_floorandletters.doubleSpinBox_floorspacing);
1003 s.restore(m_d->ui_floorandletters.doubleSpinBox_floorextent);
1004 s.restore(m_d->ui_floorandletters.checkBox_acdesignations);
1005 if (s.version()==0)
1006 s.ignoreBool();
1007 s.restore(m_d->ui_axes.checkBox_axes_shownegativeparts);
1008 s.restore(m_d->ui_axes.doubleSpinBox_axes_lengths_m);
1009 s.restore(m_d->ui_axes.doubleSpinBox_axes_relthickness);
1010 s.restore(m_d->ui_axes.doubleSpinBox_axes_xpos_m);
1011 s.restore(m_d->ui_axes.doubleSpinBox_axes_ypos_m);
1012 s.restore(m_d->ui_axes.doubleSpinBox_axes_zpos_m);
1013 s.restore(0/*backwards compat*/,m_d->ui_grid.radioButton_grid_cartesian,m_d->ui_grid.radioButton_grid_cylindrical);
1014 s.restore(m_d->ui_grid.doubleSpinBox_gridspacing);
1015 s.restore(m_d->ui_grid.doubleSpinBox_gridextent);
1016 s.restore(m_d->ui_etacones.checkBox_etacone1);
1017 s.restore(m_d->ui_etacones.doubleSpinBox_etaval1);
1018 s.restore(m_d->ui_etacones.checkBox_etacone2);
1019 s.restore(m_d->ui_etacones.doubleSpinBox_etaval2);
1020 s.restore(m_d->ui_etacones.checkBox_etacone3);
1021 s.restore(m_d->ui_etacones.doubleSpinBox_etaval3);
1022 s.restore(m_d->ui_etacones.doubleSpinBox_etaconeextent);
1023 s.restore(m_d->ui_etacones.radioButton_etaconeextentisr,m_d->ui_etacones.radioButton_etaconeextentisz);
1024
1025 //Projection surfaces:
1026
1027 s.restore(m_d->ui_idprojsurfs.groupBox_pixelproj);
1028 s.restore(m_d->ui_idprojsurfs.checkBox_pixelprojsurf_parts_asneeded);
1029 s.restore(m_d->ui_idprojsurfs.checkBox_pixelprojsurf_parts_barrelA);
1030 s.restore(m_d->ui_idprojsurfs.checkBox_pixelprojsurf_parts_barrelC);
1031 s.restore(m_d->ui_idprojsurfs.checkBox_pixelprojsurf_parts_endcapA);
1032 s.restore(m_d->ui_idprojsurfs.checkBox_pixelprojsurf_parts_endcapC);
1033 s.restore(m_d->ui_idprojsurfs.radioButton_pixelprojsurf_barrel_inner,
1034 m_d->ui_idprojsurfs.radioButton_pixelprojsurf_barrel_outer,
1035 m_d->ui_idprojsurfs.radioButton_pixelprojsurf_barrel_both);
1036 s.restore(m_d->ui_idprojsurfs.radioButton_pixelprojsurf_endcap_inner,
1037 m_d->ui_idprojsurfs.radioButton_pixelprojsurf_endcap_outer,
1038 m_d->ui_idprojsurfs.radioButton_pixelprojsurf_endcap_both);
1039 s.restore(m_d->ui_idprojsurfs.groupBox_sctproj);
1040 s.restore(m_d->ui_idprojsurfs.checkBox_sctprojsurf_parts_asneeded);
1041 s.restore(m_d->ui_idprojsurfs.checkBox_sctprojsurf_parts_barrelA);
1042 s.restore(m_d->ui_idprojsurfs.checkBox_sctprojsurf_parts_barrelC);
1043 s.restore(m_d->ui_idprojsurfs.checkBox_sctprojsurf_parts_endcapA);
1044 s.restore(m_d->ui_idprojsurfs.checkBox_sctprojsurf_parts_endcapC);
1045 s.restore(m_d->ui_idprojsurfs.radioButton_sctprojsurf_barrel_inner,
1046 m_d->ui_idprojsurfs.radioButton_sctprojsurf_barrel_outer,
1047 m_d->ui_idprojsurfs.radioButton_sctprojsurf_barrel_both);
1048 s.restore(m_d->ui_idprojsurfs.radioButton_sctprojsurf_endcap_inner,
1049 m_d->ui_idprojsurfs.radioButton_sctprojsurf_endcap_outer,
1050 m_d->ui_idprojsurfs.radioButton_sctprojsurf_endcap_both);
1051 s.restore(m_d->ui_idprojsurfs.groupBox_trtproj);
1052 s.restore(m_d->ui_idprojsurfs.checkBox_trtprojsurf_parts_asneeded);
1053 s.restore(m_d->ui_idprojsurfs.checkBox_trtprojsurf_parts_barrelA);
1054 s.restore(m_d->ui_idprojsurfs.checkBox_trtprojsurf_parts_barrelC);
1055 s.restore(m_d->ui_idprojsurfs.checkBox_trtprojsurf_parts_endcapA);
1056 s.restore(m_d->ui_idprojsurfs.checkBox_trtprojsurf_parts_endcapC);
1057 s.restore(m_d->ui_idprojsurfs.radioButton_trtprojsurf_barrel_inner,
1058 m_d->ui_idprojsurfs.radioButton_trtprojsurf_barrel_outer,
1059 m_d->ui_idprojsurfs.radioButton_trtprojsurf_barrel_both);
1060 s.restore(m_d->ui_idprojsurfs.radioButton_trtprojsurf_endcap_inner,
1061 m_d->ui_idprojsurfs.radioButton_trtprojsurf_endcap_outer,
1062 m_d->ui_idprojsurfs.radioButton_trtprojsurf_endcap_both);
1063 s.restore(m_d->ui_idprojsurfs.checkBox_trtprojsurf_z2r);
1064
1065 if (s.version()>=1) {
1066 s.restore(m_d->ui.checkBox_coordinateAxes);
1067 s.restore(m_d->ui.checkBox_etaCones);
1068 s.restore(m_d->ui.checkBox_floorAndLetters);
1069 s.restore(m_d->ui.checkBox_grid);
1070 s.restore(m_d->ui.checkBox_inDetProjSurfs);
1071 }
1072
1073 if (s.version()>=2) {
1074 s.restore(m_d->ui.checkBox_trkVolumes);
1075 s.restore(m_d->ui_trkvolumes.matButton_ID);
1076 s.restore(m_d->ui_trkvolumes.matButton_Calo);
1077 s.restore(m_d->ui_trkvolumes.matButton_MS);
1078 s.restore(m_d->ui_trkvolumes.checkBox_ID);
1079 s.restore(m_d->ui_trkvolumes.checkBox_Calo);
1080 s.restore(m_d->ui_trkvolumes.checkBox_MS);
1081 }
1082 if (s.version()>=3) {
1083 s.restore(m_d->ui.checkBox_lines);
1084 s.restore(m_d->ui_lines.doubleSpinBox_phi);
1085 s.restore(m_d->ui_lines.doubleSpinBox_phi);
1086 s.restore(m_d->ui_lines.doubleSpinBox_eta);
1087 s.restore(m_d->ui_lines.doubleSpinBox_length);
1088 }
1089
1090 // People
1091 if (s.version()>=3) {
1092 s.restore(m_d->ui.checkBox_people);
1093 s.restore(m_d->ui_people.matButton_people);
1094 }
1095}
1096
1098 // Bit of a hack possibly to do this here, but I want to be able to update the direction by changing either theta or eta
1099 double eta = m_d->ui_lines.doubleSpinBox_eta->value();
1100 double theta = m_d->ui_lines.doubleSpinBox_theta->value();
1101
1102 if (m_d->last_line_eta != eta){
1103 // eta has changed, so update theta in the UI
1104 theta = 2*std::atan(std::exp(-1.0 * eta));
1105 m_d->ui_lines.doubleSpinBox_theta->setValue(theta);
1106 } else if ( theta!= std::acos(m_d->last_lineDirection[2] / lineLength() ) ){
1107 eta = -1.0 * std::log(std::tan(theta/2.0));
1108 m_d->ui_lines.doubleSpinBox_eta->setValue(eta);
1109 }
1110 m_d->last_line_eta = m_d->ui_lines.doubleSpinBox_eta->value();
1111 if (changed( m_d->last_lineDirection , lineDirection() ) ) {
1112 if (verbose()&&!initVarsMode()) messageVerbose("Emitting "+QString()+"( lineDirectionChanged"+toString(m_d->last_lineDirection)+" )");
1113 emit lineDirectionChanged(m_d->last_lineDirection);
1114 }
1115}
1116
1117
1119// Test for possible changes in values and emit signals as appropriate:
1120// (possibleChange_XXX() slots code provided by macros)
1121#define VP1CONTROLLERCLASSNAME GuideSysController
1158//POSSIBLECHANGE_IMP(lineDirection) Implemented this manually so we can update eta/theta
1162
1163
Scalar eta() const
pseudorapidity method
Scalar phi() const
phi method
Scalar theta() const
theta method
const int nmax(200)
#define POSSIBLECHANGE_IMP(x)
Ui::VP1GuidesSysSettingsFloorAndLettersForm ui_floorandletters
InDetProjFlags::InDetProjPartsFlags last_shownSCTProjSurfaces
Ui::VP1GuidesSysSettingsCoordinateAxesForm ui_axes
InDetProjFlags::InDetProjPartsFlags last_applicablePixelProjParts
static InDetProjFlags::InDetProjPartsFlags projPartsFlag(bool barrelinner, bool barrelouter, bool endcapinner, bool endcapouter, bool endcap_hidenormalcyls_when_zasr=false, bool endcap_zasr=false)
InDetProjFlags::InDetProjPartsFlags last_applicableSCTProjParts
InDetProjFlags::DetTypeFlags trtPartsEnabledByGUIOrDataUsage() const
static SbColor4f color4f(const QColor &col, int transp_int)
Ui::VP1TrackingVolumesForm ui_trkvolumes
Ui::VP1GuidesSysSettingsGridForm ui_grid
Ui::VP1GuidesSysSettingsIDProjSurfsForm ui_idprojsurfs
GuideSysController * theclass
InDetProjFlags::DetTypeFlags inDetDetTypesUsingProjections
InDetProjFlags::DetTypeFlags pixelPartsEnabledByGUIOrDataUsage() const
Ui::VP1GuidesSysSettingsEtaConeForm ui_etacones
Ui::VP1GuidesSysSettingsPeopleForm ui_people
InDetProjFlags::InDetProjPartsFlags last_applicableTRTProjParts
InDetProjFlags::InDetProjPartsFlags last_shownTRTProjSurfaces
InDetProjFlags::InDetProjPartsFlags last_shownPixelProjSurfaces
InDetProjFlags::DetTypeFlags sctPartsEnabledByGUIOrDataUsage() const
Ui::VP1GuidesControllerForm ui
void possibleChange_axesLength()
void possibleChange_showCylindricalGrid()
void possibleChange_etaExtent()
bool showMuonSpectrometer() const
SoMaterial * sctProjSurfMaterial() const
double lettersVerticalPos() const
void possibleChange_relAxesThickness()
SbColor4f gridColourAndTransp() const
void possibleChange_floorHeight()
SoMaterial * etaCone2Material() const
void possibleChange_etaConeValue2()
double peopleVerticalPos() const
void possibleChange_showInnerDetector()
void possibleChange_showCalorimeters()
SoMaterial * trtProjSurfMaterial() const
void possibleChange_etaConeValue3()
void actualSaveSettings(VP1Serialise &) const
void possibleChange_showCartesianGrid()
void possibleChange_showFloor()
InDetProjFlags::InDetProjPartsFlags applicableTRTProjParts() const
void possibleChange_applicableSCTProjParts()
void possibleChange_gridSpacing()
void possibleChange_lettersZPos()
void possibleChange_showEtaCone3()
void possibleChange_floorExtent()
void possibleChange_floorColourAndTransp()
SoMaterial * etaCone3Material() const
void setInDetDetTypesUsingProjections(InDetProjFlags::DetTypeFlags)
SoMaterial * etaCone1Material() const
GuideSysController(IVP1System *sys)
void possibleChange_axesPosition()
SoMaterial * peopleMaterial() const
void floorHeightChanged(const double &)
void possibleChange_shownTRTProjSurfaces()
void possibleChange_showLetters()
void possibleChange_etaConeValue1()
void possibleChange_showPeople()
SbColor4f peopleColourAndTransp() const
double relAxesThickness() const
void possibleChange_gridExtent()
SoMaterial * idTrkVolumesMaterial() const
void lineDirectionChanged(const SbVec3f &)
void actualRestoreSettings(VP1Deserialise &)
InDetProjFlags::InDetProjPartsFlags applicablePixelProjParts() const
SoMaterial * xAxisMaterial() const
void possibleChange_applicableTRTProjParts()
void applicablePixelProjPartsChanged(InDetProjFlags::InDetProjPartsFlags)
void possibleChange_lettersVerticalPos()
SbVec3f lineDirection() const
void applicableTRTProjPartsChanged(InDetProjFlags::InDetProjPartsFlags)
InDetProjFlags::InDetProjPartsFlags applicableSCTProjParts() const
void possibleChange_showEtaCone1()
void possibleChange_applicablePixelProjParts()
void possibleChange_gridColourAndTransp()
void floorSpacingChanged(const double &)
SoMaterial * caloTrkVolumesMaterial() const
SbColor4f floorColourAndTransp() const
void applicableSCTProjPartsChanged(InDetProjFlags::InDetProjPartsFlags)
void possibleChange_showMuonSpectrometer()
void possibleChange_shownPixelProjSurfaces()
void floorExtentChanged(const double &)
SbVec3f axesPosition() const
void possibleChange_showEtaCone2()
InDetProjFlags::InDetProjPartsFlags shownTRTProjSurfaces() const
SoMaterial * zAxisMaterial() const
void possibleChange_showLines()
void possibleChange_showAxes()
void possibleChange_floorSpacing()
InDetProjFlags::InDetProjPartsFlags shownPixelProjSurfaces() const
SoMaterial * yAxisMaterial() const
void possibleChange_peopleColourAndTransp()
SoMaterial * pixelProjSurfMaterial() const
SoMaterial * msTrkVolumesMaterial() const
void possibleChange_showTrackingVolumes()
InDetProjFlags::InDetProjPartsFlags shownSCTProjSurfaces() const
void possibleChange_shownSCTProjSurfaces()
SoMaterial * lettersMaterial() const
static void projectionPartsGivenUsedDetectors(InDetProjPartsFlags &proj_pixel, InDetProjPartsFlags &proj_sct, InDetProjPartsFlags &proj_trt, const DetTypeFlags &useddets)
void initDialog(T &theUI, QPushButton *launchbutton, QAbstractButton *enabledButton=0)
static QString toString(const T &par)
void connectToLastUpdateSlot(QObject *sender, const char *signal)
const char * addUpdateSlot(const char *slot)
bool initVarsMode() const
bool changed(T &lastval, const T &newval)
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)
static bool calcParsFromExtentAndSpacing(const VP1HelperClassBase *, const double &extent, const double &spacing, const int &nmaxlimit, int &nmax, double &distmax)
Definition VP1Floor.cxx:30
static int nMax()
Definition VP1Floor.h:33
VP1HelperClassBase(IVP1System *sys=0, QString helpername="")
void messageVerbose(const QString &) const
void message(const QString &) const
static SoMaterial * createMaterial(const QColor &, const double &brightness=0.0, const double &transp=0.0)
int r
Definition globals.cxx:22