ATLAS Offline Software
Loading...
Searching...
No Matches
GeoSysController.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3*/
4
5
7// //
8// Implementation of class GeoSysController //
9// //
10// Author: Thomas H. Kittelmann (Thomas.Kittelmann@cern.ch) //
11// Initial version: October 2008 //
12// //
14
15#define VP1IMPVARNAME m_d
16
21#include "VP1Base/VP1Settings.h"
22#include "VP1Base/IVP1System.h"
23#ifndef BUILDVP1LIGHT
25#endif
26
27#include "ui_geometrysystemcontroller.h"
28#include "ui_settings_display_form.h"
29#include "ui_settings_iconisedvols_form.h"
30#include "ui_settings_interactions_form.h"
31#include "ui_settings_misc_form.h"
32#include "ui_settings_muonchamber_form.h"
33#include "ui_settings_treebrowser_form.h"
34
35#include <Inventor/nodes/SoPickStyle.h>
36
37#include <QFileDialog>
38
39#include <map>
40
41
42//____________________________________________________________________
44public:
46 Ui::GeometrySystemControllerForm ui{};
47 Ui::GeoSysSettingsDisplayForm ui_disp{};
48 Ui::GeoSysSettingsIconisedVolumesForm ui_iconisedvols{};
49 Ui::GeoSysSettingsInteractionsForm ui_int{};
50 Ui::GeoSysSettingsMiscForm ui_misc{};
51 Ui::GeoSysSettingsMuonChamberForm ui_muon{};
52 Ui::GeoSysSettingsTreeBrowserForm ui_treebrowser{};
53 std::map<VP1GeoFlags::SubSystemFlag,QCheckBox*> subSysCheckBoxMap;
54 float last_transparency = 0.0F;
56 VP1GeoFlags::MuonChamberAdaptionStyleFlags last_muonChamberAdaptionStyle;
57 int last_labels = 0;
59 SoPickStyle * pickStyle = nullptr;
62
65
66// std::map<QString, QList<QCheckBox*> > labelProvidingSystems; //!< First is name of system, second is list of types of information provided (system stores actual information)
67};
68
69
70//____________________________________________________________________
72 : VP1Controller(sys,"GeoSysController"), m_d(new Imp)
73{
74 m_d->theclass = this;
75 m_d->ui.setupUi(this);
76
77 initDialog(m_d->ui_disp, m_d->ui.pushButton_settings_display);
78 initDialog(m_d->ui_iconisedvols, m_d->ui.pushButton_settings_iconisedvols);
79 initDialog(m_d->ui_int, m_d->ui.pushButton_settings_interactions);
80 initDialog(m_d->ui_misc, m_d->ui.pushButton_settings_misc);
81 initDialog(m_d->ui_muon, m_d->ui.pushButton_settings_muonchambers);
82 initDialog(m_d->ui_treebrowser, m_d->ui.pushButton_settings_treebrowser);
83
84 // m_d->ui_disp.widget_drawOptions->setLineWidthsDisabled();
85 m_d->ui_disp.widget_drawOptions->setPointSizesDisabled();
86// m_d->ui_disp.widget_drawOptions->setBaseLightingDisabled();
87 m_d->ui_disp.widget_drawOptions->setComplexity(0.6);
88
89 m_d->pickStyle = new SoPickStyle;
90 m_d->pickStyle->ref();
91
92 #ifndef BUILDVP1LIGHT
93 //Possibly hide parts of gui, depending on job configuration:
95 m_d->ui.groupBox_innerdetector->setVisible(false);
96 m_d->ui.groupBox_calorimeters->setVisible(false);
97 m_d->ui.groupBox_muonsystems->setVisible(false);
98 m_d->ui.pushButton_settings_muonchambers->setEnabled(false);
99 m_d->ui_misc.groupBox_pixelactivemodules->setVisible(false);
100 m_d->ui_misc.groupBox_sctactivemodules->setVisible(false);
101 m_d->ui.groupBox_misc->setVisible(false);
102 m_d->ui_muon.groupBox_muonchamberconfig->setVisible(false);
103 m_d->ui_misc.groupBox_show_NSW_chambers->setVisible(false);
104 m_d->ui_misc.groupBox_show_HGTD->setVisible(false);
105 m_d->ui_int.checkBox_AutomaticMuonChamberEndViews->setVisible(false);
106 message("GeoModel not properly initialised.");
107 } else {
108 m_d->ui.groupBox_innerdetector->setVisible(VP1JobConfigInfo::hasPixelGeometry()
114 m_d->ui_misc.groupBox_pixelactivemodules->setVisible(VP1JobConfigInfo::hasPixelGeometry() || VP1JobConfigInfo::hasITkGeometry() );
115 m_d->ui_misc.groupBox_sctactivemodules->setVisible(VP1JobConfigInfo::hasSCTGeometry() || VP1JobConfigInfo::hasITkGeometry() );
116 m_d->ui.groupBox_calorimeters->setVisible(VP1JobConfigInfo::hasLArGeometry()
118 m_d->ui.groupBox_muonsystems->setVisible(VP1JobConfigInfo::hasMuonGeometry());
119 m_d->ui.pushButton_settings_muonchambers->setEnabled(VP1JobConfigInfo::hasMuonGeometry());
120 m_d->ui_int.checkBox_print_muonstationinfo->setVisible(VP1JobConfigInfo::hasMuonGeometry());
121 m_d->ui_muon.groupBox_muonchamberconfig->setVisible(VP1JobConfigInfo::hasMuonGeometry());
122 m_d->ui_misc.groupBox_show_NSW_chambers->setVisible(VP1JobConfigInfo::hasMuonNSWGeometry());
123 m_d->ui_misc.groupBox_show_HGTD->setVisible(VP1JobConfigInfo::hasHGTDGeometry());
124 m_d->ui_misc.checkBox_HGTD_Glue->setVisible(false);
125 m_d->ui_misc.checkBox_HGTD_Sensors->setVisible(false);
126 m_d->ui_misc.checkBox_HGTD_Inactive->setVisible(false);
127 m_d->ui_misc.checkBox_HGTD_ASIC->setVisible(false);
128 m_d->ui_misc.checkBox_HGTD_BackCover->setVisible(false);
129 m_d->ui_misc.checkBox_HGTD_ModeratorOut->setVisible(false);
130 m_d->ui_misc.checkBox_HGTD_OuterRCover->setVisible(false);
131 m_d->ui_int.checkBox_AutomaticMuonChamberEndViews->setVisible(VP1JobConfigInfo::hasMuonGeometry());
132 }
133 #endif
134
135
136 m_d->zappedVolumeListModel = new ZappedVolumeListModel(m_d->ui_iconisedvols.listView_iconisedvolumes);
137 m_d->ui_iconisedvols.listView_iconisedvolumes->setUniformItemSizes(true);
138 m_d->ui_iconisedvols.listView_iconisedvolumes->setSelectionMode(QAbstractItemView::ExtendedSelection);
139 m_d->ui_iconisedvols.listView_iconisedvolumes->setModel(m_d->zappedVolumeListModel);
140
141 connect(m_d->ui_iconisedvols.listView_iconisedvolumes,SIGNAL(activated(const QModelIndex&)),
142 m_d->zappedVolumeListModel,SLOT(activated(const QModelIndex&)));
143
145 // Setup connections which monitor changes in the controller so that we may emit signals as appropriate: //
147
149 connectToLastUpdateSlot(m_d->ui_int.checkBox_geomselectable);
150
152 connectToLastUpdateSlot(m_d->ui_disp.checkBox_showVolumeOutLines);
153
155 connectToLastUpdateSlot(m_d->ui_disp.spinBox_transp);
156
158 connectToLastUpdateSlot(m_d->ui_muon.checkBox_muonadapt_openmdtchambers);
159 connectToLastUpdateSlot(m_d->ui_muon.checkBox_muonadapt_hidetubes);
160 connectToLastUpdateSlot(m_d->ui_muon.checkBox_muonadapt_hiderpcvolumes);
161 connectToLastUpdateSlot(m_d->ui_muon.checkBox_muonadapt_opencscchambers);
162 connectToLastUpdateSlot(m_d->ui_muon.checkBox_muonadapt_opentgcchambers);
163
164 initLastVars();
165
166 //Connections for state-less signals:
167
168 connect(m_d->ui_disp.pushButton_saveChangedMaterials,SIGNAL(clicked()),this,SLOT(saveMaterialsRequested()));
169 connect(m_d->ui_disp.pushButton_loadMaterials,SIGNAL(clicked()),this,SLOT(loadMaterialsRequested()));
170
171 connect(m_d->ui_misc.pushButton_nonStandardShapes_Iconify,SIGNAL(clicked()),
173 connect(m_d->ui_misc.pushButton_nonStandardShapes_Expand,SIGNAL(clicked()),
175
176 // Expand volumes based on Material
177 connect(m_d->ui_misc.lineEdit_expand_vols_matname,SIGNAL(returnPressed()),this,SLOT(emit_autoExpandByVolumeOrMaterialName()));
178 connect(m_d->ui_misc.pushButton_expand_vols_matname,SIGNAL(clicked()),this,SLOT(emit_autoExpandByVolumeOrMaterialName()));
179
180 // Expand volumes based on Name
181 connect(m_d->ui_misc.lineEdit_expand_vols_volname,SIGNAL(returnPressed()),this,SLOT(emit_autoExpandByVolumeOrMaterialName()));
182 connect(m_d->ui_misc.pushButton_expand_vols_volname,SIGNAL(clicked()),this,SLOT(emit_autoExpandByVolumeOrMaterialName()));
183
184 // Iconify/Zap volumes based on Name
185 connect(m_d->ui_misc.lineEdit_iconify_vols_volname,SIGNAL(returnPressed()),this,SLOT(emit_autoIconifyByVolumeOrMaterialName()));
186 connect(m_d->ui_misc.pushButton_iconify_vols_volname,SIGNAL(clicked()),this,SLOT(emit_autoIconifyByVolumeOrMaterialName()));
187
188 connect(m_d->ui_muon.pushButton_muonadapt_adapttoevtdata,SIGNAL(clicked()),this,SLOT(emit_adaptMuonChambersToEventData()));
189
190 connect(m_d->ui_misc.toolButton_pixelmod_adapt,SIGNAL(clicked(bool)),this,SLOT(emit_autoAdaptPixelsOrSCT()));
191 connect(m_d->ui_misc.toolButton_sctmod_adapt,SIGNAL(clicked(bool)),this,SLOT(emit_autoAdaptPixelsOrSCT()));
192
193 connect(m_d->ui_misc.toolButton_nswchambers_adapt,SIGNAL(clicked(bool)),this,SLOT(emit_autoAdaptMuonNSW()));
194 connect(m_d->ui_misc.toolButton_nswchambers_reset,SIGNAL(clicked(bool)),this,SLOT(emit_autoAdaptMuonNSW()));
195
196 connect(m_d->ui_misc.toolButton_hgtd_adapt,SIGNAL(clicked(bool)),this,SLOT(emit_autoAdaptHGTD()));
197 connect(m_d->ui_misc.toolButton_hgtd_reset,SIGNAL(clicked(bool)),this,SLOT(emit_autoAdaptHGTD()));
198
199 connect(m_d->ui_misc.toolButton_pixelmod_reset,SIGNAL(clicked(bool)),this,SLOT(emit_resetSubSystems()));
200 connect(m_d->ui_misc.toolButton_sctmod_reset,SIGNAL(clicked(bool)),this,SLOT(emit_resetSubSystems()));
201 connect(m_d->ui_muon.pushButton_muonadapt_resetToAllChambers,SIGNAL(clicked()),this,SLOT(emit_resetSubSystems()));
202
204
205 // INNER DETECTOR
206 m_d->subSysCheckBoxMap[VP1GeoFlags::Pixel] = m_d->ui.checkBox_Pixel;
207 m_d->subSysCheckBoxMap[VP1GeoFlags::SCT] = m_d->ui.checkBox_SCT;
208 m_d->subSysCheckBoxMap[VP1GeoFlags::TRT] = m_d->ui.checkBox_TRT;
209 m_d->subSysCheckBoxMap[VP1GeoFlags::InDetServMat] = m_d->ui.checkBox_InDetServMat;
210 // Phase-II
211 m_d->subSysCheckBoxMap[VP1GeoFlags::ITkPixel] = m_d->ui.checkBox_ITkPixel;
212 m_d->subSysCheckBoxMap[VP1GeoFlags::ITkStrip] = m_d->ui.checkBox_ITkStrip;
213 m_d->subSysCheckBoxMap[VP1GeoFlags::HGTD] = m_d->ui.checkBox_HGTD;
214
215 // CALO
216 m_d->subSysCheckBoxMap[VP1GeoFlags::LAr] = m_d->ui.checkBox_LAr;
217 m_d->subSysCheckBoxMap[VP1GeoFlags::Tile] = m_d->ui.checkBox_Tile;
218
219 // MUON TOROID
220 m_d->subSysCheckBoxMap[VP1GeoFlags::BarrelToroid] = m_d->ui.checkBox_MuonBarrelToroid;
221 m_d->subSysCheckBoxMap[VP1GeoFlags::ToroidECA] = m_d->ui.checkBox_MuonECAToroid;
222 // m_d->subSysCheckBoxMap[VP1GeoFlags::ToroidECC] = m_d->ui.checkBox_MuonECCToroid;
223 // MUON MISC
224 m_d->subSysCheckBoxMap[VP1GeoFlags::MuonFeet] = m_d->ui.checkBox_MuonFeet;
225 m_d->subSysCheckBoxMap[VP1GeoFlags::MuonShielding] = m_d->ui.checkBox_MuonShielding;
226 m_d->subSysCheckBoxMap[VP1GeoFlags::MuonToroidsEtc] = m_d->ui.checkBox_MuonEtc; // this is the "Services" checkbox in the GUI
227 // MUON CHAMBERS
228 m_d->subSysCheckBoxMap[VP1GeoFlags::MuonEndcapStationCSC] = m_d->ui.checkBox_MuonEndcapStationCSC;
229 m_d->subSysCheckBoxMap[VP1GeoFlags::MuonEndcapStationTGC] = m_d->ui.checkBox_MuonEndcapStationTGC;
230 m_d->subSysCheckBoxMap[VP1GeoFlags::MuonEndcapStationMDT] = m_d->ui.checkBox_MuonEndcapStationMDT;
231 m_d->subSysCheckBoxMap[VP1GeoFlags::MuonEndcapStationNSW] = m_d->ui.checkBox_NSW;
232 m_d->subSysCheckBoxMap[VP1GeoFlags::MuonBarrelStationInner] = m_d->ui.checkBox_MuonBarrelStationInner;
233 m_d->subSysCheckBoxMap[VP1GeoFlags::MuonBarrelStationMiddle] = m_d->ui.checkBox_MuonBarrelStationMiddle;
234 m_d->subSysCheckBoxMap[VP1GeoFlags::MuonBarrelStationOuter] = m_d->ui.checkBox_MuonBarrelStationOuter;
235
236 // MISCELLANEOUS
237 m_d->subSysCheckBoxMap[VP1GeoFlags::CavernInfra] = m_d->ui.checkBox_CavernInfra;
238 m_d->subSysCheckBoxMap[VP1GeoFlags::BeamPipe] = m_d->ui.checkBox_BeamPipe;
239 m_d->subSysCheckBoxMap[VP1GeoFlags::LUCID] = m_d->ui.checkBox_LUCID;
240 m_d->subSysCheckBoxMap[VP1GeoFlags::ZDC] = m_d->ui.checkBox_ZDC;
241 m_d->subSysCheckBoxMap[VP1GeoFlags::ALFA] = m_d->ui.checkBox_ALFA;
242 m_d->subSysCheckBoxMap[VP1GeoFlags::AFP] = m_d->ui.checkBox_AFP;
243 m_d->subSysCheckBoxMap[VP1GeoFlags::ForwardRegion] = m_d->ui.checkBox_ForwardRegion;
244 // OTHER
245 m_d->subSysCheckBoxMap[VP1GeoFlags::AllUnrecognisedVolumes] = m_d->ui.checkBox_other;
246
247 // -> labels
249 connectToLastUpdateSlot(m_d->ui_disp.groupBox_labels);
250 connectToLastUpdateSlot(m_d->ui_disp.checkBox_labels_names);
251 connectToLastUpdateSlot(m_d->ui_disp.checkBox_labels_mooret0s);
252 connectToLastUpdateSlot(m_d->ui_disp.checkBox_labels_mboyt0s);
253 connectToLastUpdateSlot(m_d->ui_disp.checkBox_labels_hits);
254
256 connectToLastUpdateSlot(m_d->ui_disp.horizontalSlider_labels_xOffset);
257 connectToLastUpdateSlot(m_d->ui_disp.horizontalSlider_labels_yOffset);
258 connectToLastUpdateSlot(m_d->ui_disp.horizontalSlider_labels_zOffset);
259
260 m_d->last_labels=0;
261}
262
263//____________________________________________________________________
265{
266 m_d->pickStyle->unref();
267 delete m_d;
268}
269
270//____________________________________________________________________
272{
273 m_d->ui_int.checkBox_geomselectable->setChecked(b);
275}
276
277//____________________________________________________________________
279{
280 m_d->ui_disp.widget_drawOptions->setComplexity(c);
281}
282
283//____________________________________________________________________
285{
286 m_d->ui_int.checkBox_zoomToVolumes->setChecked(b);
287}
288
289//____________________________________________________________________
291{
292 m_d->ui_int.checkBox_AutomaticMuonChamberEndViews->setChecked(b);
293}
294
295//____________________________________________________________________
297{
298 m_d->ui_muon.checkBox_muonadapt_autoadapt->setChecked(b);
299}
300
301//____________________________________________________________________
303{
304 m_d->lastSelectedVolHandle = vh;
305 m_d->ui_disp.matButton_lastSel->setEnabled(vh!=0);
306 if (vh) {
307 QList<SoMaterial*> mats = m_d->ui_disp.matButton_lastSel->handledMaterials();
308 if (mats.isEmpty()||mats.at(0)!=vh->material()) {
309 m_d->ui_disp.matButton_lastSel->clearHandledMaterials();
310 m_d->ui_disp.matButton_lastSel->setMaterial(vh->material());
311 }
312 } else {
313 m_d->ui_disp.matButton_lastSel->clearHandledMaterials();
314 }
315}
316
317//____________________________________________________________________
319{
320 return m_d->lastSelectedVolHandle;
321}
322
323//____________________________________________________________________
325{
326 const bool ctrl_isdown = (Qt::ControlModifier & QApplication::keyboardModifiers());
327 const bool onlyChangedMaterials = !ctrl_isdown;
328
329 QString filename
330 = QFileDialog::getSaveFileName(this, "Select geometry material file to save",
331 (m_d->lastSaveMaterialsFile.isEmpty()?
333 :m_d->lastSaveMaterialsFile),
334 "VP1 geometry material files (*.vp1geomat)",
335 0,QFileDialog::DontResolveSymlinks);
336
337 if(filename.isEmpty())
338 return;
339
340 if (!filename.endsWith(".vp1geomat"))
341 filename += ".vp1geomat";
342
343 m_d->lastSaveMaterialsFile = filename;
344
345 messageVerbose("Emitting saveMaterialsToFile(\""+filename+"\","+str(onlyChangedMaterials)+")");
346 emit saveMaterialsToFile(filename,onlyChangedMaterials);
347
348}
349
350//____________________________________________________________________
352{
353 QString filename = QFileDialog::getOpenFileName(this, "Select geometry material file to load",
354 (m_d->lastLoadMaterialsFile.isEmpty()?
356 :m_d->lastLoadMaterialsFile),
357 "VP1 geometry material files (*.vp1geomat)",
358 0,QFileDialog::DontResolveSymlinks);
359 if(filename.isEmpty())
360 return;
361
362 m_d->lastLoadMaterialsFile = filename;
363
364 messageVerbose("Emitting loadMaterialsFromFile(\""+filename+"\")");
365 emit loadMaterialsFromFile(filename);
366}
367
368//____________________________________________________________________
370{
371 std::map<VP1GeoFlags::SubSystemFlag,QCheckBox*>::const_iterator it = m_d->subSysCheckBoxMap.find(f);
372 return it==m_d->subSysCheckBoxMap.end() ? 0 : it->second;
373}
374
375//____________________________________________________________________
377{
378 return m_d->ui_disp.widget_drawOptions->drawOptionsGroup();
379}
380
381//____________________________________________________________________
382SoPickStyle * GeoSysController::pickStyle() const
383{
384 return m_d->pickStyle;
385}
386
387//____________________________________________________________________
389{
390 return m_d->ui_treebrowser.treeView_volumebrowser;
391}
392
393//____________________________________________________________________
395{
396 return m_d->ui_disp.phisectionwidget;
397}
398
399//____________________________________________________________________
401{
402 return m_d->zappedVolumeListModel;
403}
404
405//____________________________________________________________________
407{
408 return m_d->ui_int.checkBox_zoomToVolumes->isChecked();
409}
410
411//____________________________________________________________________
413{
414 return m_d->ui_int.checkBox_AutomaticMuonChamberEndViews->isChecked();
415}
416
417//____________________________________________________________________
419{
420 return m_d->ui_int.checkBox_print_shape->isChecked();
421}
422
423//____________________________________________________________________
425{
426 return m_d->ui_int.checkBox_print_material->isChecked();
427}
428
429//____________________________________________________________________
431{
432 return m_d->ui_int.checkBox_print_copyno->isChecked();
433}
434
435//____________________________________________________________________
437{
438 return m_d->ui_int.checkBox_print_transform->isChecked();
439}
440
441//____________________________________________________________________
443{
444 return m_d->ui_int.checkBox_print_tree->isChecked();
445}
446
447//____________________________________________________________________
449{
450 return m_d->ui_int.checkBox_print_mass->isChecked();
451}
452
453//____________________________________________________________________
455{
456 return m_d->ui_int.checkBox_print_muonstationinfo->isChecked();
457}
458
459//____________________________________________________________________
461{
462 return m_d->ui_muon.checkBox_muonadapt_autoadapt->isChecked();
463}
464
465//_____________________________________________________________________________________
467{
468 m_d->pickStyle->style = m_d->ui_int.checkBox_geomselectable->isChecked()
469 ? SoPickStyle::SHAPE : SoPickStyle::UNPICKABLE;
470}
471
472//____________________________________________________________________
474{
475 int v(m_d->ui_disp.spinBox_transp->value());
476 return (v>=100?1.0:(v<=0?0.0:v/100.0));
477}
478
479//____________________________________________________________________
481{
482 return m_d->ui_disp.checkBox_showVolumeOutLines->isChecked();
483}
484
485//____________________________________________________________________
486VP1GeoFlags::MuonChamberAdaptionStyleFlags GeoSysController::muonChamberAdaptionStyle() const
487{
488 VP1GeoFlags::MuonChamberAdaptionStyleFlags f;
489 if (m_d->ui_muon.checkBox_muonadapt_openmdtchambers->isChecked())
491 if (m_d->ui_muon.checkBox_muonadapt_hidetubes->isChecked())
493 if (m_d->ui_muon.checkBox_muonadapt_hiderpcvolumes->isChecked())
495 if (m_d->ui_muon.checkBox_muonadapt_opencscchambers->isChecked())
497 if (m_d->ui_muon.checkBox_muonadapt_opentgcchambers->isChecked())
499 return f;
500}
501
502//void GeoSysController::setAvailableLabels(IVP1System* sys, QStringList providedLabels){
503// messageVerbose("setAvailableLabels for "+sys->name() );
504// if (m_d->labelProvidingSystems.find(sys->name())!=m_d->labelProvidingSystems.end())
505// return;
506// QList<QCheckBox*> checkboxes;
507// for(const QString& label : providedLabels) {
508// QCheckBox *checkbox = new QCheckBox(label, this);
509// checkboxes.append(checkbox);
510// }
511// m_d->labelProvidingSystems[sys->name()]= checkboxes;
513//
514//}
515
516void GeoSysController::setLabelsEnabled(bool t0s, bool hits){
517 // make sure that when labels are enabled, only the systems which we have are enabled too
518 if (t0s) {
519 connect(m_d->ui_disp.groupBox_labels,SIGNAL(toggled(bool)),
520 m_d->ui_disp.checkBox_labels_mooret0s,SLOT(setEnabled(bool)));
521 connect(m_d->ui_disp.groupBox_labels,SIGNAL(toggled(bool)),
522 m_d->ui_disp.checkBox_labels_mboyt0s,SLOT(setEnabled(bool)));
523 } else {
524 m_d->ui_disp.checkBox_labels_mooret0s->setEnabled(false);
525 m_d->ui_disp.checkBox_labels_mboyt0s->setEnabled(false);
526 }
527 if (hits) {
528 connect(m_d->ui_disp.groupBox_labels,SIGNAL(toggled(bool)),
529 m_d->ui_disp.checkBox_labels_hits,SLOT(setEnabled(bool)));
530 } else {
531 m_d->ui_disp.checkBox_labels_hits->setEnabled(false);
532 }
533
534 messageVerbose("setLabelsEnabled() t0s="+str(t0s)+", hits="+str(hits));
535}
536
537
539 if (!m_d->ui_disp.groupBox_labels->isChecked()) return 0;
540 int labels=0;
541 if (m_d->ui_disp.checkBox_labels_names->isChecked()) labels|=0x1;
542 if (m_d->ui_disp.checkBox_labels_mooret0s->isChecked()) labels|=0x2;
543 if (m_d->ui_disp.checkBox_labels_mboyt0s->isChecked()) labels|=0x4;
544 // leaving space for another t0 type, if necessary
545 if (m_d->ui_disp.checkBox_labels_hits->isChecked()) labels|=0x10;
546 return labels;
547}
548
550{
551 QList<int> values;
552 values << m_d->ui_disp.horizontalSlider_labels_xOffset->value();
553 values << m_d->ui_disp.horizontalSlider_labels_yOffset->value();
554 values << m_d->ui_disp.horizontalSlider_labels_zOffset->value();
555 return values;
556}
557
558//____________________________________________________________________
560{
561 messageVerbose("Emitting adaptMuonChambersToEventData()");
563}
564
565//____________________________________________________________________
567{
568 bool pixel(sender()==m_d->ui_misc.toolButton_pixelmod_adapt);
569 bool brl = pixel ? m_d->ui_misc.checkBox_pixelmod_barrel->isChecked()
570 : m_d->ui_misc.checkBox_sctmod_barrel->isChecked();
571 bool ecA = pixel ? m_d->ui_misc.checkBox_pixelmod_endcapA->isChecked()
572 : m_d->ui_misc.checkBox_sctmod_endcapA->isChecked();
573 bool ecC = pixel ? m_d->ui_misc.checkBox_pixelmod_endcapC->isChecked()
574 : m_d->ui_misc.checkBox_sctmod_endcapC->isChecked();
575 bool bcmA = pixel ? m_d->ui_misc.checkBox_bcmMod_Aside->isChecked() : false;
576 bool bcmC = pixel ? m_d->ui_misc.checkBox_bcmMod_Cside->isChecked() : false;
577
578 messageVerbose ("Emitting autoAdaptPixelsOrSCT("+str(pixel)+", "+str(brl)+","+str(ecA)+","+str(ecC)+","+str(bcmA)+","+str(bcmC)+")");
579 emit autoAdaptPixelsOrSCT(pixel,brl,ecA,ecC,bcmA,bcmC);
580}
581
582
583//____________________________________________________________________
585{
586 bool reset = false;
587 if (sender()==m_d->ui_misc.toolButton_nswchambers_reset) {
588 reset = true;
589 }
590 bool stgc = m_d->ui_misc.checkBox_NSW_sTGC->isChecked();
591 bool mm = m_d->ui_misc.checkBox_NSW_MM->isChecked();
592 bool pSp = m_d->ui_misc.checkBox_NSW_Passive_Spacer->isChecked();
593 bool pSt = m_d->ui_misc.checkBox_NSW_Passive_Structure->isChecked();
594 bool pAP = m_d->ui_misc.checkBox_NSW_Passive_APlate->isChecked();
595
596 messageVerbose ("Emitting autoAdaptMuonNSW("+str(reset)+","+str(stgc)+","+str(mm)+")");
597 emit autoAdaptMuonNSW(reset, stgc, mm, pSp, pSt, pAP);
598}
599
600
601//____________________________________________________________________
603{
604 bool reset = false;
605 if (sender()==m_d->ui_misc.toolButton_hgtd_reset) {
606 reset = true;
607 }
608 bool modules = m_d->ui_misc.checkBox_HGTD_Flex->isChecked();
609 bool supportStructure = m_d->ui_misc.checkBox_HGTD_SupportPlate->isChecked();
610 bool coolingLines = m_d->ui_misc.checkBox_HGTD_CoolingLines->isChecked();
611 bool covers = m_d->ui_misc.checkBox_HGTD_FrontCover->isChecked();
612 bool moderator = m_d->ui_misc.checkBox_HGTD_ModeratorIn->isChecked();
613 bool servicesElectronics = m_d->ui_misc.checkBox_HGTD_Hybrid->isChecked();
614
615 messageVerbose ("Emitting autoAdaptHGTD("+str(reset)+","+str(modules)+","+str(supportStructure)+","+str(coolingLines)+","+str(covers)+","+str(moderator)+","+str(servicesElectronics)+")");
616 emit autoAdaptHGTD(reset, modules, supportStructure, coolingLines, covers, moderator, servicesElectronics);
617}
618
619
620
621//____________________________________________________________________
623{
624 bool volname(sender()==m_d->ui_misc.pushButton_iconify_vols_volname
625 ||sender()==m_d->ui_misc.lineEdit_iconify_vols_volname);
626
627 QString name(volname ? m_d->ui_misc.lineEdit_iconify_vols_volname->text()
628 : "" );
629
630 if (name.isEmpty())
631 return;
632 messageVerbose("emitting autoIconifyByVolumeOrMaterialName("+str(!volname)+", "+name+")");
633 emit autoIconifyByVolumeOrMaterialName(!volname,name);
634}
635
636//____________________________________________________________________
638{
639 bool volname(sender()==m_d->ui_misc.pushButton_expand_vols_volname
640 ||sender()==m_d->ui_misc.lineEdit_expand_vols_volname);
641 QString name(volname?m_d->ui_misc.lineEdit_expand_vols_volname->text()
642 :m_d->ui_misc.lineEdit_expand_vols_matname->text());
643 if (name.isEmpty())
644 return;
645 messageVerbose("emitting autoExpandByVolumeOrMaterialName("+str(!volname)+", "+name+")");
646 emit autoExpandByVolumeOrMaterialName(!volname,name);
647}
648
649//____________________________________________________________________
651 bool zap(sender()==m_d->ui_misc.pushButton_nonStandardShapes_Iconify);
652 messageVerbose("emitting actionOnAllNonStandardVolumes("+str(zap)+")");
654}
655
656//____________________________________________________________________
658
674{
675 VP1GeoFlags::SubSystemFlags f;
676 if (sender()==m_d->ui_misc.toolButton_pixelmod_reset)
678 else if (sender()==m_d->ui_misc.toolButton_sctmod_reset)
680 else if (sender()==m_d->ui_muon.pushButton_muonadapt_resetToAllChambers)
682 messageVerbose(" Emitting resetSubSystems("+str(f)+")");
683 emit resetSubSystems(f);
684}
685
686//____________________________________________________________________
688{
689 return 9;
690}
691
692//____________________________________________________________________
694{
695 s.save(m_d->ui_disp.phisectionwidget);//version <=1 saved in old format
696 s.save(m_d->ui_disp.spinBox_transp);
697 s.save(m_d->ui_muon.checkBox_muonadapt_autoadapt);
698 s.save(m_d->ui_muon.checkBox_muonadapt_openmdtchambers);
699 s.save(m_d->ui_muon.checkBox_muonadapt_hidetubes);
700 s.save(m_d->ui_muon.checkBox_muonadapt_hiderpcvolumes);
701 s.save(m_d->ui_muon.checkBox_muonadapt_opencscchambers);
702 s.save(m_d->ui_muon.checkBox_muonadapt_opentgcchambers);
703 s.save(m_d->ui_misc.checkBox_pixelmod_barrel);
704 s.save(m_d->ui_misc.checkBox_pixelmod_endcapA);
705 s.save(m_d->ui_misc.checkBox_pixelmod_endcapC);
706 s.save(m_d->ui_misc.checkBox_sctmod_barrel);
707 s.save(m_d->ui_misc.checkBox_sctmod_endcapA);
708 s.save(m_d->ui_misc.checkBox_sctmod_endcapC);
709 s.save(m_d->ui_disp.widget_drawOptions);
710 s.save(m_d->ui_misc.lineEdit_expand_vols_matname);
711 s.save(m_d->ui_misc.lineEdit_expand_vols_volname);
712 s.save(m_d->ui_int.checkBox_geomselectable);
713 s.save(m_d->ui_int.checkBox_print_shape);
714 s.save(m_d->ui_int.checkBox_print_material);
715 s.save(m_d->ui_int.checkBox_print_transform);
716 s.save(m_d->ui_int.checkBox_print_mass);
717 s.save(m_d->ui_int.checkBox_print_copyno);
718 s.save(m_d->ui_int.checkBox_print_tree);
719 s.save(m_d->ui_int.checkBox_print_muonstationinfo);
720 s.save(m_d->ui_int.checkBox_zoomToVolumes);
721 s.save(m_d->ui_int.checkBox_AutomaticMuonChamberEndViews);
722 s.save(m_d->ui_disp.checkBox_showVolumeOutLines);//version 1+
723 s.save(m_d->ui_misc.checkBox_bcmMod_Aside);//version 3+
724 s.save(m_d->ui_misc.checkBox_bcmMod_Cside);//version 3+
725
726 // labels - version 4+
727 s.save(m_d->ui_disp.groupBox_labels);
728 s.save(m_d->ui_disp.horizontalSlider_labels_xOffset);
729 s.save(m_d->ui_disp.horizontalSlider_labels_yOffset);
730 s.save(m_d->ui_disp.horizontalSlider_labels_zOffset);
731 s.save(m_d->ui_disp.checkBox_labels_names);
732 //version 5+
733 s.save(m_d->ui_disp.checkBox_labels_mboyt0s);
734 s.save(m_d->ui_disp.checkBox_labels_mooret0s);
735 s.save(m_d->ui_disp.checkBox_labels_hits);
736 // version >=6
737 s.save(m_d->ui_misc.checkBox_NSW_MM);
738 s.save(m_d->ui_misc.checkBox_NSW_sTGC);
739 s.save(m_d->ui_misc.checkBox_NSW_Passive_Spacer);
740 s.save(m_d->ui_misc.checkBox_NSW_Passive_Structure);
741 s.save(m_d->ui_misc.checkBox_NSW_Passive_APlate);
742 // version >=7
743 s.save(m_d->ui_misc.checkBox_HGTD_Flex);
744 s.save(m_d->ui_misc.checkBox_HGTD_Hybrid);
745 s.save(m_d->ui_misc.checkBox_HGTD_Glue);
746 s.save(m_d->ui_misc.checkBox_HGTD_Sensors);
747 s.save(m_d->ui_misc.checkBox_HGTD_Inactive);
748 s.save(m_d->ui_misc.checkBox_HGTD_ASIC);
749 // version >=9
750 s.save(m_d->ui_misc.checkBox_HGTD_SupportPlate);
751 s.save(m_d->ui_misc.checkBox_HGTD_FrontCover);
752 s.save(m_d->ui_misc.checkBox_HGTD_BackCover);
753 s.save(m_d->ui_misc.checkBox_HGTD_ModeratorIn);
754 s.save(m_d->ui_misc.checkBox_HGTD_ModeratorOut);
755 s.save(m_d->ui_misc.checkBox_HGTD_OuterRCover);
756 s.save(m_d->ui_misc.checkBox_HGTD_CoolingLines);
757
758
759 s.ignoreWidget(m_d->ui_disp.matButton_lastSel);
760 std::map<VP1GeoFlags::SubSystemFlag,QCheckBox*>::const_iterator it,itE(m_d->subSysCheckBoxMap.end());
761 for (it=m_d->subSysCheckBoxMap.begin();it!=itE;++it)
762 s.ignoreWidget(it->second);
763}
764
765//____________________________________________________________________
767{
768 if (s.version()<0||s.version()>currentSettingsVersion()) {
769 message("Warning: State data in .vp1 file has unsupported version ("+str(s.version())+")");
770 return;
771 }
772
773 if (s.version()<=1) {
774 s.ignoreObsoletePhiSectionWidgetState();
775 s.ignoreWidget(m_d->ui_disp.phisectionwidget);
776 } else {
777 s.restore(m_d->ui_disp.phisectionwidget);
778 }
779 s.restore(m_d->ui_disp.spinBox_transp);
780 s.restore(m_d->ui_muon.checkBox_muonadapt_autoadapt);
781 s.restore(m_d->ui_muon.checkBox_muonadapt_openmdtchambers);
782 s.restore(m_d->ui_muon.checkBox_muonadapt_hidetubes);
783 s.restore(m_d->ui_muon.checkBox_muonadapt_hiderpcvolumes);
784 s.restore(m_d->ui_muon.checkBox_muonadapt_opencscchambers);
785 s.restore(m_d->ui_muon.checkBox_muonadapt_opentgcchambers);
786 s.restore(m_d->ui_misc.checkBox_pixelmod_barrel);
787 s.restore(m_d->ui_misc.checkBox_pixelmod_endcapA);
788 s.restore(m_d->ui_misc.checkBox_pixelmod_endcapC);
789 s.restore(m_d->ui_misc.checkBox_sctmod_barrel);
790 s.restore(m_d->ui_misc.checkBox_sctmod_endcapA);
791 s.restore(m_d->ui_misc.checkBox_sctmod_endcapC);
792 s.restore(m_d->ui_disp.widget_drawOptions);
793 s.restore(m_d->ui_misc.lineEdit_expand_vols_matname);
794 s.restore(m_d->ui_misc.lineEdit_expand_vols_volname);
795 s.restore(m_d->ui_int.checkBox_geomselectable);
796 s.restore(m_d->ui_int.checkBox_print_shape);
797 s.restore(m_d->ui_int.checkBox_print_material);
798 s.restore(m_d->ui_int.checkBox_print_transform);
799 s.restore(m_d->ui_int.checkBox_print_mass);
800 s.restore(m_d->ui_int.checkBox_print_copyno);
801 s.restore(m_d->ui_int.checkBox_print_tree);
802 s.restore(m_d->ui_int.checkBox_print_muonstationinfo);
803 s.restore(m_d->ui_int.checkBox_zoomToVolumes);
804 s.restore(m_d->ui_int.checkBox_AutomaticMuonChamberEndViews);
805 if (s.version()>=1)
806 s.restore(m_d->ui_disp.checkBox_showVolumeOutLines);
807
808 if (s.version()>=3) {
809 s.restore(m_d->ui_misc.checkBox_bcmMod_Aside);
810 s.restore(m_d->ui_misc.checkBox_bcmMod_Cside);
811 }
812
813 // labels
814 if (s.version()>=4){
815 s.restore(m_d->ui_disp.groupBox_labels);
816 s.restore(m_d->ui_disp.horizontalSlider_labels_xOffset);
817 s.restore(m_d->ui_disp.horizontalSlider_labels_yOffset);
818 s.restore(m_d->ui_disp.horizontalSlider_labels_zOffset);
819 s.restore(m_d->ui_disp.checkBox_labels_names);
820 }
821 if (s.version()>=5){
822 s.restore(m_d->ui_disp.checkBox_labels_mboyt0s);
823 s.restore(m_d->ui_disp.checkBox_labels_mooret0s);
824 s.restore(m_d->ui_disp.checkBox_labels_hits);
825 }
826 if (s.version()>=6){
827 s.restore(m_d->ui_misc.checkBox_NSW_MM);
828 s.restore(m_d->ui_misc.checkBox_NSW_sTGC);
829 s.restore(m_d->ui_misc.checkBox_NSW_Passive_Spacer);
830 s.restore(m_d->ui_misc.checkBox_NSW_Passive_Structure);
831 s.restore(m_d->ui_misc.checkBox_NSW_Passive_APlate);
832 }
833 if (s.version()>=7){
834 s.restore(m_d->ui_misc.checkBox_HGTD_Flex);
835 s.restore(m_d->ui_misc.checkBox_HGTD_Hybrid);
836 s.restore(m_d->ui_misc.checkBox_HGTD_Glue);
837 s.restore(m_d->ui_misc.checkBox_HGTD_Sensors);
838 s.restore(m_d->ui_misc.checkBox_HGTD_Inactive);
839 s.restore(m_d->ui_misc.checkBox_HGTD_ASIC);
840 }
841 if (s.version()>=9){
842 s.restore(m_d->ui_misc.checkBox_HGTD_SupportPlate);
843 s.restore(m_d->ui_misc.checkBox_HGTD_FrontCover);
844 s.restore(m_d->ui_misc.checkBox_HGTD_BackCover);
845 s.restore(m_d->ui_misc.checkBox_HGTD_ModeratorIn);
846 s.restore(m_d->ui_misc.checkBox_HGTD_ModeratorOut);
847 s.restore(m_d->ui_misc.checkBox_HGTD_OuterRCover);
848 s.restore(m_d->ui_misc.checkBox_HGTD_CoolingLines);
849 }
850
851 s.ignoreWidget(m_d->ui_disp.matButton_lastSel);
852 std::map<VP1GeoFlags::SubSystemFlag,QCheckBox*>::const_iterator it,itE(m_d->subSysCheckBoxMap.end());
853 for (it=m_d->subSysCheckBoxMap.begin();it!=itE;++it)
854 s.ignoreWidget(it->second);
855
856 m_d->ui_int.groupBox_printOnSelection->setEnabled(m_d->ui_int.checkBox_geomselectable->isChecked());
857 m_d->ui_int.groupBox_automaticViewReorientations->setEnabled(m_d->ui_int.checkBox_geomselectable->isChecked());
858
859}
860
862// Test for possible changes in values and emit signals as appropriate:
863// (possibleChange_XXX() slots code provided by macros)
864#define VP1CONTROLLERCLASSNAME GeoSysController
866POSSIBLECHANGE_IMP(transparency)
867POSSIBLECHANGE_IMP(showVolumeOutLines)
868POSSIBLECHANGE_IMP(muonChamberAdaptionStyle)
869POSSIBLECHANGE_IMP(labels)
870POSSIBLECHANGE_IMP(labelPosOffset)
#define POSSIBLECHANGE_IMP(x)
Ui::GeoSysSettingsMuonChamberForm ui_muon
QList< int > last_labelPosOffset
needed for POSSIBLECHANGE_IMP macro.
Ui::GeometrySystemControllerForm ui
int last_labels
needed for POSSIBLECHANGE_IMP macro.
std::map< VP1GeoFlags::SubSystemFlag, QCheckBox * > subSysCheckBoxMap
Ui::GeoSysSettingsMiscForm ui_misc
Ui::GeoSysSettingsIconisedVolumesForm ui_iconisedvols
Ui::GeoSysSettingsTreeBrowserForm ui_treebrowser
VolumeHandle * lastSelectedVolHandle
VP1GeoFlags::MuonChamberAdaptionStyleFlags last_muonChamberAdaptionStyle
Ui::GeoSysSettingsInteractionsForm ui_int
ZappedVolumeListModel * zappedVolumeListModel
GeoSysController * theclass
Ui::GeoSysSettingsDisplayForm ui_disp
void autoAdaptHGTD(bool, bool, bool, bool, bool, bool, bool)
bool printInfoOnClick_Transform() const
void adaptMuonChambersToEventData()
void possibleChange_labels()
void loadMaterialsFromFile(QString)
void possibleChange_muonChamberAdaptionStyle()
void autoAdaptMuonNSW(bool, bool, bool, bool, bool, bool)
void setGeometrySelectable(bool)
void emit_resetSubSystems()
Reset to the sub-system top volume.
bool showVolumeOutLines() const
int currentSettingsVersion() const
bool printInfoOnClick_Tree() const
bool printInfoOnClick_Shape() const
void actionOnAllNonStandardVolumes(bool)
SoPickStyle * pickStyle() const
VP1GeoFlags::MuonChamberAdaptionStyleFlags muonChamberAdaptionStyle() const
GeoSysController(IVP1System *sys)
void emit_autoIconifyByVolumeOrMaterialName()
void emit_actionOnAllNonStandardVolumes()
void possibleChange_transparency()
bool autoAdaptMuonChambersToEventData() const
VolumeHandle * lastSelectedVolume() const
void actualRestoreSettings(VP1Deserialise &)
bool printInfoOnClick_MuonStationInfo() const
void autoIconifyByVolumeOrMaterialName(bool, QString)
void possibleChange_showVolumeOutLines()
void setAutoAdaptMuonChambersToEventData(bool)
ZappedVolumeListModel * zappedVolumeListModel() const
void setZoomToVolumeOnClick(bool)
void setLabelsEnabled(bool t0s, bool hits)
controls whether the checkboxes are enabled or not.
bool printInfoOnClick_CopyNumber() const
VP1GeoTreeView * volumeTreeBrowser() const
PhiSectionWidget * phiSectionWidget() const
QList< int > labelPosOffset()
Offset in x,y,z.
bool orientViewToMuonChambersOnClick() const
void resetSubSystems(VP1GeoFlags::SubSystemFlags)
bool printInfoOnClick_Mass() const
bool zoomToVolumeOnClick() const
SoGroup * drawOptions() const
QCheckBox * subSystemCheckBox(VP1GeoFlags::SubSystemFlag) const
void autoAdaptPixelsOrSCT(bool, bool, bool, bool, bool, bool)
void possibleChange_labelPosOffset()
void setLastSelectedVolume(VolumeHandle *)
void saveMaterialsToFile(QString, bool)
void autoExpandByVolumeOrMaterialName(bool, QString)
void actualSaveSettings(VP1Serialise &) const
void emit_adaptMuonChambersToEventData()
void emit_autoExpandByVolumeOrMaterialName()
void setComplexity(double)
bool printInfoOnClick_Material() const
float transparency() const
void setOrientViewToMuonChambersOnClick(bool)
void initDialog(T &theUI, QPushButton *launchbutton, QAbstractButton *enabledButton=0)
void connectToLastUpdateSlot(QObject *sender, const char *signal)
const char * addUpdateSlot(const char *slot)
VP1Controller(IVP1System *sys, const QString &classname)
@ MuonEndcapStationTGC
Definition VP1GeoFlags.h:47
@ AllUnrecognisedVolumes
Definition VP1GeoFlags.h:73
@ MuonEndcapStationNSW
Definition VP1GeoFlags.h:65
@ MuonBarrelStationInner
Definition VP1GeoFlags.h:42
@ MuonBarrelStationMiddle
Definition VP1GeoFlags.h:44
@ MuonBarrelStationOuter
Definition VP1GeoFlags.h:45
@ MuonEndcapStationCSC
Definition VP1GeoFlags.h:46
@ MuonEndcapStationMDT
Definition VP1GeoFlags.h:49
void messageVerbose(const QString &) const
void message(const QString &) const
static bool hasTileGeometry()
static bool hasTRTGeometry()
static bool hasInDetServiceMaterialGeometry()
static bool hasMuonNSWGeometry()
static bool hasLArGeometry()
static bool hasGeoModelExperiment()
static bool hasPixelGeometry()
static bool hasSCTGeometry()
static bool hasHGTDGeometry()
static bool hasITkGeometry()
static bool hasMuonGeometry()
static QString defaultFileSelectDirectory()
SoMaterial * material()