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_int.checkBox_AutomaticMuonChamberEndViews->setVisible(VP1JobConfigInfo::hasMuonGeometry());
125 }
126 #endif
127
128
129 m_d->zappedVolumeListModel = new ZappedVolumeListModel(m_d->ui_iconisedvols.listView_iconisedvolumes);
130 m_d->ui_iconisedvols.listView_iconisedvolumes->setUniformItemSizes(true);
131 m_d->ui_iconisedvols.listView_iconisedvolumes->setSelectionMode(QAbstractItemView::ExtendedSelection);
132 m_d->ui_iconisedvols.listView_iconisedvolumes->setModel(m_d->zappedVolumeListModel);
133
134 connect(m_d->ui_iconisedvols.listView_iconisedvolumes,SIGNAL(activated(const QModelIndex&)),
135 m_d->zappedVolumeListModel,SLOT(activated(const QModelIndex&)));
136
138 // Setup connections which monitor changes in the controller so that we may emit signals as appropriate: //
140
142 connectToLastUpdateSlot(m_d->ui_int.checkBox_geomselectable);
143
145 connectToLastUpdateSlot(m_d->ui_disp.checkBox_showVolumeOutLines);
146
148 connectToLastUpdateSlot(m_d->ui_disp.spinBox_transp);
149
151 connectToLastUpdateSlot(m_d->ui_muon.checkBox_muonadapt_openmdtchambers);
152 connectToLastUpdateSlot(m_d->ui_muon.checkBox_muonadapt_hidetubes);
153 connectToLastUpdateSlot(m_d->ui_muon.checkBox_muonadapt_hiderpcvolumes);
154 connectToLastUpdateSlot(m_d->ui_muon.checkBox_muonadapt_opencscchambers);
155 connectToLastUpdateSlot(m_d->ui_muon.checkBox_muonadapt_opentgcchambers);
156
157 initLastVars();
158
159 //Connections for state-less signals:
160
161 connect(m_d->ui_disp.pushButton_saveChangedMaterials,SIGNAL(clicked()),this,SLOT(saveMaterialsRequested()));
162 connect(m_d->ui_disp.pushButton_loadMaterials,SIGNAL(clicked()),this,SLOT(loadMaterialsRequested()));
163
164 connect(m_d->ui_misc.pushButton_nonStandardShapes_Iconify,SIGNAL(clicked()),
166 connect(m_d->ui_misc.pushButton_nonStandardShapes_Expand,SIGNAL(clicked()),
168
169 // Expand volumes based on Material
170 connect(m_d->ui_misc.lineEdit_expand_vols_matname,SIGNAL(returnPressed()),this,SLOT(emit_autoExpandByVolumeOrMaterialName()));
171 connect(m_d->ui_misc.pushButton_expand_vols_matname,SIGNAL(clicked()),this,SLOT(emit_autoExpandByVolumeOrMaterialName()));
172
173 // Expand volumes based on Name
174 connect(m_d->ui_misc.lineEdit_expand_vols_volname,SIGNAL(returnPressed()),this,SLOT(emit_autoExpandByVolumeOrMaterialName()));
175 connect(m_d->ui_misc.pushButton_expand_vols_volname,SIGNAL(clicked()),this,SLOT(emit_autoExpandByVolumeOrMaterialName()));
176
177 // Iconify/Zap volumes based on Name
178 connect(m_d->ui_misc.lineEdit_iconify_vols_volname,SIGNAL(returnPressed()),this,SLOT(emit_autoIconifyByVolumeOrMaterialName()));
179 connect(m_d->ui_misc.pushButton_iconify_vols_volname,SIGNAL(clicked()),this,SLOT(emit_autoIconifyByVolumeOrMaterialName()));
180
181 connect(m_d->ui_muon.pushButton_muonadapt_adapttoevtdata,SIGNAL(clicked()),this,SLOT(emit_adaptMuonChambersToEventData()));
182
183 connect(m_d->ui_misc.toolButton_pixelmod_adapt,SIGNAL(clicked(bool)),this,SLOT(emit_autoAdaptPixelsOrSCT()));
184 connect(m_d->ui_misc.toolButton_sctmod_adapt,SIGNAL(clicked(bool)),this,SLOT(emit_autoAdaptPixelsOrSCT()));
185
186 connect(m_d->ui_misc.toolButton_nswchambers_adapt,SIGNAL(clicked(bool)),this,SLOT(emit_autoAdaptMuonNSW()));
187 connect(m_d->ui_misc.toolButton_nswchambers_reset,SIGNAL(clicked(bool)),this,SLOT(emit_autoAdaptMuonNSW()));
188
189 connect(m_d->ui_misc.toolButton_hgtd_adapt,SIGNAL(clicked(bool)),this,SLOT(emit_autoAdaptHGTD()));
190 connect(m_d->ui_misc.toolButton_hgtd_reset,SIGNAL(clicked(bool)),this,SLOT(emit_autoAdaptHGTD()));
191
192 connect(m_d->ui_misc.toolButton_pixelmod_reset,SIGNAL(clicked(bool)),this,SLOT(emit_resetSubSystems()));
193 connect(m_d->ui_misc.toolButton_sctmod_reset,SIGNAL(clicked(bool)),this,SLOT(emit_resetSubSystems()));
194 connect(m_d->ui_muon.pushButton_muonadapt_resetToAllChambers,SIGNAL(clicked()),this,SLOT(emit_resetSubSystems()));
195
197
198 // INNER DETECTOR
199 m_d->subSysCheckBoxMap[VP1GeoFlags::Pixel] = m_d->ui.checkBox_Pixel;
200 m_d->subSysCheckBoxMap[VP1GeoFlags::SCT] = m_d->ui.checkBox_SCT;
201 m_d->subSysCheckBoxMap[VP1GeoFlags::TRT] = m_d->ui.checkBox_TRT;
202 m_d->subSysCheckBoxMap[VP1GeoFlags::InDetServMat] = m_d->ui.checkBox_InDetServMat;
203 // Phase-II
204 m_d->subSysCheckBoxMap[VP1GeoFlags::ITkPixel] = m_d->ui.checkBox_ITkPixel;
205 m_d->subSysCheckBoxMap[VP1GeoFlags::ITkStrip] = m_d->ui.checkBox_ITkStrip;
206 m_d->subSysCheckBoxMap[VP1GeoFlags::HGTD] = m_d->ui.checkBox_HGTD;
207
208 // CALO
209 m_d->subSysCheckBoxMap[VP1GeoFlags::LAr] = m_d->ui.checkBox_LAr;
210 m_d->subSysCheckBoxMap[VP1GeoFlags::Tile] = m_d->ui.checkBox_Tile;
211
212 // MUON TOROID
213 m_d->subSysCheckBoxMap[VP1GeoFlags::BarrelToroid] = m_d->ui.checkBox_MuonBarrelToroid;
214 m_d->subSysCheckBoxMap[VP1GeoFlags::ToroidECA] = m_d->ui.checkBox_MuonECAToroid;
215 // m_d->subSysCheckBoxMap[VP1GeoFlags::ToroidECC] = m_d->ui.checkBox_MuonECCToroid;
216 // MUON MISC
217 m_d->subSysCheckBoxMap[VP1GeoFlags::MuonFeet] = m_d->ui.checkBox_MuonFeet;
218 m_d->subSysCheckBoxMap[VP1GeoFlags::MuonShielding] = m_d->ui.checkBox_MuonShielding;
219 m_d->subSysCheckBoxMap[VP1GeoFlags::MuonToroidsEtc] = m_d->ui.checkBox_MuonEtc; // this is the "Services" checkbox in the GUI
220 // MUON CHAMBERS
221 m_d->subSysCheckBoxMap[VP1GeoFlags::MuonEndcapStationCSC] = m_d->ui.checkBox_MuonEndcapStationCSC;
222 m_d->subSysCheckBoxMap[VP1GeoFlags::MuonEndcapStationTGC] = m_d->ui.checkBox_MuonEndcapStationTGC;
223 m_d->subSysCheckBoxMap[VP1GeoFlags::MuonEndcapStationMDT] = m_d->ui.checkBox_MuonEndcapStationMDT;
224 m_d->subSysCheckBoxMap[VP1GeoFlags::MuonEndcapStationNSW] = m_d->ui.checkBox_NSW;
225 m_d->subSysCheckBoxMap[VP1GeoFlags::MuonBarrelStationInner] = m_d->ui.checkBox_MuonBarrelStationInner;
226 m_d->subSysCheckBoxMap[VP1GeoFlags::MuonBarrelStationMiddle] = m_d->ui.checkBox_MuonBarrelStationMiddle;
227 m_d->subSysCheckBoxMap[VP1GeoFlags::MuonBarrelStationOuter] = m_d->ui.checkBox_MuonBarrelStationOuter;
228
229 // MISCELLANEOUS
230 m_d->subSysCheckBoxMap[VP1GeoFlags::CavernInfra] = m_d->ui.checkBox_CavernInfra;
231 m_d->subSysCheckBoxMap[VP1GeoFlags::BeamPipe] = m_d->ui.checkBox_BeamPipe;
232 m_d->subSysCheckBoxMap[VP1GeoFlags::LUCID] = m_d->ui.checkBox_LUCID;
233 m_d->subSysCheckBoxMap[VP1GeoFlags::ZDC] = m_d->ui.checkBox_ZDC;
234 m_d->subSysCheckBoxMap[VP1GeoFlags::ALFA] = m_d->ui.checkBox_ALFA;
235 m_d->subSysCheckBoxMap[VP1GeoFlags::AFP] = m_d->ui.checkBox_AFP;
236 m_d->subSysCheckBoxMap[VP1GeoFlags::ForwardRegion] = m_d->ui.checkBox_ForwardRegion;
237 // OTHER
238 m_d->subSysCheckBoxMap[VP1GeoFlags::AllUnrecognisedVolumes] = m_d->ui.checkBox_other;
239
240 // -> labels
242 connectToLastUpdateSlot(m_d->ui_disp.groupBox_labels);
243 connectToLastUpdateSlot(m_d->ui_disp.checkBox_labels_names);
244 connectToLastUpdateSlot(m_d->ui_disp.checkBox_labels_mooret0s);
245 connectToLastUpdateSlot(m_d->ui_disp.checkBox_labels_mboyt0s);
246 connectToLastUpdateSlot(m_d->ui_disp.checkBox_labels_hits);
247
249 connectToLastUpdateSlot(m_d->ui_disp.horizontalSlider_labels_xOffset);
250 connectToLastUpdateSlot(m_d->ui_disp.horizontalSlider_labels_yOffset);
251 connectToLastUpdateSlot(m_d->ui_disp.horizontalSlider_labels_zOffset);
252
253 m_d->last_labels=0;
254}
255
256//____________________________________________________________________
258{
259 m_d->pickStyle->unref();
260 delete m_d;
261}
262
263//____________________________________________________________________
265{
266 m_d->ui_int.checkBox_geomselectable->setChecked(b);
268}
269
270//____________________________________________________________________
272{
273 m_d->ui_disp.widget_drawOptions->setComplexity(c);
274}
275
276//____________________________________________________________________
278{
279 m_d->ui_int.checkBox_zoomToVolumes->setChecked(b);
280}
281
282//____________________________________________________________________
284{
285 m_d->ui_int.checkBox_AutomaticMuonChamberEndViews->setChecked(b);
286}
287
288//____________________________________________________________________
290{
291 m_d->ui_muon.checkBox_muonadapt_autoadapt->setChecked(b);
292}
293
294//____________________________________________________________________
296{
297 m_d->lastSelectedVolHandle = vh;
298 m_d->ui_disp.matButton_lastSel->setEnabled(vh!=0);
299 if (vh) {
300 QList<SoMaterial*> mats = m_d->ui_disp.matButton_lastSel->handledMaterials();
301 if (mats.isEmpty()||mats.at(0)!=vh->material()) {
302 m_d->ui_disp.matButton_lastSel->clearHandledMaterials();
303 m_d->ui_disp.matButton_lastSel->setMaterial(vh->material());
304 }
305 } else {
306 m_d->ui_disp.matButton_lastSel->clearHandledMaterials();
307 }
308}
309
310//____________________________________________________________________
312{
313 return m_d->lastSelectedVolHandle;
314}
315
316//____________________________________________________________________
318{
319 const bool ctrl_isdown = (Qt::ControlModifier & QApplication::keyboardModifiers());
320 const bool onlyChangedMaterials = !ctrl_isdown;
321
322 QString filename
323 = QFileDialog::getSaveFileName(this, "Select geometry material file to save",
324 (m_d->lastSaveMaterialsFile.isEmpty()?
326 :m_d->lastSaveMaterialsFile),
327 "VP1 geometry material files (*.vp1geomat)",
328 0,QFileDialog::DontResolveSymlinks);
329
330 if(filename.isEmpty())
331 return;
332
333 if (!filename.endsWith(".vp1geomat"))
334 filename += ".vp1geomat";
335
336 m_d->lastSaveMaterialsFile = filename;
337
338 messageVerbose("Emitting saveMaterialsToFile(\""+filename+"\","+str(onlyChangedMaterials)+")");
339 emit saveMaterialsToFile(filename,onlyChangedMaterials);
340
341}
342
343//____________________________________________________________________
345{
346 QString filename = QFileDialog::getOpenFileName(this, "Select geometry material file to load",
347 (m_d->lastLoadMaterialsFile.isEmpty()?
349 :m_d->lastLoadMaterialsFile),
350 "VP1 geometry material files (*.vp1geomat)",
351 0,QFileDialog::DontResolveSymlinks);
352 if(filename.isEmpty())
353 return;
354
355 m_d->lastLoadMaterialsFile = filename;
356
357 messageVerbose("Emitting loadMaterialsFromFile(\""+filename+"\")");
358 emit loadMaterialsFromFile(filename);
359}
360
361//____________________________________________________________________
363{
364 std::map<VP1GeoFlags::SubSystemFlag,QCheckBox*>::const_iterator it = m_d->subSysCheckBoxMap.find(f);
365 return it==m_d->subSysCheckBoxMap.end() ? 0 : it->second;
366}
367
368//____________________________________________________________________
370{
371 return m_d->ui_disp.widget_drawOptions->drawOptionsGroup();
372}
373
374//____________________________________________________________________
375SoPickStyle * GeoSysController::pickStyle() const
376{
377 return m_d->pickStyle;
378}
379
380//____________________________________________________________________
382{
383 return m_d->ui_treebrowser.treeView_volumebrowser;
384}
385
386//____________________________________________________________________
388{
389 return m_d->ui_disp.phisectionwidget;
390}
391
392//____________________________________________________________________
394{
395 return m_d->zappedVolumeListModel;
396}
397
398//____________________________________________________________________
400{
401 return m_d->ui_int.checkBox_zoomToVolumes->isChecked();
402}
403
404//____________________________________________________________________
406{
407 return m_d->ui_int.checkBox_AutomaticMuonChamberEndViews->isChecked();
408}
409
410//____________________________________________________________________
412{
413 return m_d->ui_int.checkBox_print_shape->isChecked();
414}
415
416//____________________________________________________________________
418{
419 return m_d->ui_int.checkBox_print_material->isChecked();
420}
421
422//____________________________________________________________________
424{
425 return m_d->ui_int.checkBox_print_copyno->isChecked();
426}
427
428//____________________________________________________________________
430{
431 return m_d->ui_int.checkBox_print_transform->isChecked();
432}
433
434//____________________________________________________________________
436{
437 return m_d->ui_int.checkBox_print_tree->isChecked();
438}
439
440//____________________________________________________________________
442{
443 return m_d->ui_int.checkBox_print_mass->isChecked();
444}
445
446//____________________________________________________________________
448{
449 return m_d->ui_int.checkBox_print_muonstationinfo->isChecked();
450}
451
452//____________________________________________________________________
454{
455 return m_d->ui_muon.checkBox_muonadapt_autoadapt->isChecked();
456}
457
458//_____________________________________________________________________________________
460{
461 m_d->pickStyle->style = m_d->ui_int.checkBox_geomselectable->isChecked()
462 ? SoPickStyle::SHAPE : SoPickStyle::UNPICKABLE;
463}
464
465//____________________________________________________________________
467{
468 int v(m_d->ui_disp.spinBox_transp->value());
469 return (v>=100?1.0:(v<=0?0.0:v/100.0));
470}
471
472//____________________________________________________________________
474{
475 return m_d->ui_disp.checkBox_showVolumeOutLines->isChecked();
476}
477
478//____________________________________________________________________
479VP1GeoFlags::MuonChamberAdaptionStyleFlags GeoSysController::muonChamberAdaptionStyle() const
480{
481 VP1GeoFlags::MuonChamberAdaptionStyleFlags f;
482 if (m_d->ui_muon.checkBox_muonadapt_openmdtchambers->isChecked())
484 if (m_d->ui_muon.checkBox_muonadapt_hidetubes->isChecked())
486 if (m_d->ui_muon.checkBox_muonadapt_hiderpcvolumes->isChecked())
488 if (m_d->ui_muon.checkBox_muonadapt_opencscchambers->isChecked())
490 if (m_d->ui_muon.checkBox_muonadapt_opentgcchambers->isChecked())
492 return f;
493}
494
495//void GeoSysController::setAvailableLabels(IVP1System* sys, QStringList providedLabels){
496// messageVerbose("setAvailableLabels for "+sys->name() );
497// if (m_d->labelProvidingSystems.find(sys->name())!=m_d->labelProvidingSystems.end())
498// return;
499// QList<QCheckBox*> checkboxes;
500// for(const QString& label : providedLabels) {
501// QCheckBox *checkbox = new QCheckBox(label, this);
502// checkboxes.append(checkbox);
503// }
504// m_d->labelProvidingSystems[sys->name()]= checkboxes;
506//
507//}
508
509void GeoSysController::setLabelsEnabled(bool t0s, bool hits){
510 // make sure that when labels are enabled, only the systems which we have are enabled too
511 if (t0s) {
512 connect(m_d->ui_disp.groupBox_labels,SIGNAL(toggled(bool)),
513 m_d->ui_disp.checkBox_labels_mooret0s,SLOT(setEnabled(bool)));
514 connect(m_d->ui_disp.groupBox_labels,SIGNAL(toggled(bool)),
515 m_d->ui_disp.checkBox_labels_mboyt0s,SLOT(setEnabled(bool)));
516 } else {
517 m_d->ui_disp.checkBox_labels_mooret0s->setEnabled(false);
518 m_d->ui_disp.checkBox_labels_mboyt0s->setEnabled(false);
519 }
520 if (hits) {
521 connect(m_d->ui_disp.groupBox_labels,SIGNAL(toggled(bool)),
522 m_d->ui_disp.checkBox_labels_hits,SLOT(setEnabled(bool)));
523 } else {
524 m_d->ui_disp.checkBox_labels_hits->setEnabled(false);
525 }
526
527 messageVerbose("setLabelsEnabled() t0s="+str(t0s)+", hits="+str(hits));
528}
529
530
532 if (!m_d->ui_disp.groupBox_labels->isChecked()) return 0;
533 int labels=0;
534 if (m_d->ui_disp.checkBox_labels_names->isChecked()) labels|=0x1;
535 if (m_d->ui_disp.checkBox_labels_mooret0s->isChecked()) labels|=0x2;
536 if (m_d->ui_disp.checkBox_labels_mboyt0s->isChecked()) labels|=0x4;
537 // leaving space for another t0 type, if necessary
538 if (m_d->ui_disp.checkBox_labels_hits->isChecked()) labels|=0x10;
539 return labels;
540}
541
543{
544 QList<int> values;
545 values << m_d->ui_disp.horizontalSlider_labels_xOffset->value();
546 values << m_d->ui_disp.horizontalSlider_labels_yOffset->value();
547 values << m_d->ui_disp.horizontalSlider_labels_zOffset->value();
548 return values;
549}
550
551//____________________________________________________________________
553{
554 messageVerbose("Emitting adaptMuonChambersToEventData()");
556}
557
558//____________________________________________________________________
560{
561 bool pixel(sender()==m_d->ui_misc.toolButton_pixelmod_adapt);
562 bool brl = pixel ? m_d->ui_misc.checkBox_pixelmod_barrel->isChecked()
563 : m_d->ui_misc.checkBox_sctmod_barrel->isChecked();
564 bool ecA = pixel ? m_d->ui_misc.checkBox_pixelmod_endcapA->isChecked()
565 : m_d->ui_misc.checkBox_sctmod_endcapA->isChecked();
566 bool ecC = pixel ? m_d->ui_misc.checkBox_pixelmod_endcapC->isChecked()
567 : m_d->ui_misc.checkBox_sctmod_endcapC->isChecked();
568 bool bcmA = pixel ? m_d->ui_misc.checkBox_bcmMod_Aside->isChecked() : false;
569 bool bcmC = pixel ? m_d->ui_misc.checkBox_bcmMod_Cside->isChecked() : false;
570
571 messageVerbose ("Emitting autoAdaptPixelsOrSCT("+str(pixel)+", "+str(brl)+","+str(ecA)+","+str(ecC)+","+str(bcmA)+","+str(bcmC)+")");
572 emit autoAdaptPixelsOrSCT(pixel,brl,ecA,ecC,bcmA,bcmC);
573}
574
575
576//____________________________________________________________________
578{
579 bool reset = false;
580 if (sender()==m_d->ui_misc.toolButton_nswchambers_reset) {
581 reset = true;
582 }
583 bool stgc = m_d->ui_misc.checkBox_NSW_sTGC->isChecked();
584 bool mm = m_d->ui_misc.checkBox_NSW_MM->isChecked();
585 bool pSp = m_d->ui_misc.checkBox_NSW_Passive_Spacer->isChecked();
586 bool pSt = m_d->ui_misc.checkBox_NSW_Passive_Structure->isChecked();
587 bool pAP = m_d->ui_misc.checkBox_NSW_Passive_APlate->isChecked();
588
589 messageVerbose ("Emitting autoAdaptMuonNSW("+str(reset)+","+str(stgc)+","+str(mm)+")");
590 emit autoAdaptMuonNSW(reset, stgc, mm, pSp, pSt, pAP);
591}
592
593
594//____________________________________________________________________
596{
597 bool reset = false;
598 if (sender()==m_d->ui_misc.toolButton_hgtd_reset) {
599 reset = true;
600 }
601 bool flex = m_d->ui_misc.checkBox_HGTD_Flex->isChecked();
602 bool hybrid = m_d->ui_misc.checkBox_HGTD_Hybrid->isChecked();
603 bool glue = m_d->ui_misc.checkBox_HGTD_Glue->isChecked();
604 bool sensors = m_d->ui_misc.checkBox_HGTD_Sensors->isChecked();
605 bool inactive = m_d->ui_misc.checkBox_HGTD_Inactive->isChecked();
606 bool asic = m_d->ui_misc.checkBox_HGTD_ASIC->isChecked();
607 bool supportPlate = m_d->ui_misc.checkBox_HGTD_SupportPlate->isChecked();
608 bool frontCover = m_d->ui_misc.checkBox_HGTD_FrontCover->isChecked();
609 bool backCover = m_d->ui_misc.checkBox_HGTD_BackCover->isChecked();
610 bool moderatorIn = m_d->ui_misc.checkBox_HGTD_ModeratorIn->isChecked();
611 bool moderatorOut = m_d->ui_misc.checkBox_HGTD_ModeratorOut->isChecked();
612 bool outerRCover = m_d->ui_misc.checkBox_HGTD_OuterRCover->isChecked();
613 bool coolingLines = m_d->ui_misc.checkBox_HGTD_CoolingLines->isChecked();
614
615 messageVerbose ("Emitting autoAdaptHGTD("+str(reset)+","+str(flex)+","+str(hybrid)+","+str(glue)+","+str(sensors)+","+str(inactive)+","+str(asic)+","+str(supportPlate)+","+str(frontCover)+","+str(backCover)+","+str(moderatorIn)+","+str(moderatorOut)+","+str(outerRCover)+","+str(coolingLines)+")");
616 emit autoAdaptHGTD(reset, flex, hybrid, glue, sensors, inactive, asic, supportPlate, frontCover, backCover, moderatorIn, moderatorOut, outerRCover, coolingLines);
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
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 autoAdaptHGTD(bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, 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()