From bba7fcfa2d51f2d29522f26179c845dca5e40af4 Mon Sep 17 00:00:00 2001 From: Dave Casper <dcasper@uci.edu> Date: Sat, 7 Aug 2021 13:56:46 +0000 Subject: [PATCH] Add waveforms to the event display --- .../test/TestBeamClusterFitDbg.py | 20 +- graphics/VTI12/VTI12Gui/src/VP1MainWindow.cxx | 12 +- graphics/VTI12/VTI12Gui/src/vp1mainwindow.ui | 12 +- .../VTI12WaveformPlugin/CMakeLists.txt | 19 + .../VTI12WaveformPlugin/VP1WaveformChannel.h | 32 + .../VP1WaveformPlugin_VP1AutoFactory.h | 25 + .../src/VP1WaveformChannel.cxx | 32 + .../src/VP1WaveformPlugin_VP1AutoFactory.cxx | 24 + .../VTI12WaveformSystems/CMakeLists.txt | 24 + .../VTI12WaveformSystems/VP1WaveformSystem.h | 59 + .../WaveformSysController.h | 78 ++ .../src/VP1WaveformSystem.cxx | 521 ++++++++ .../src/WaveformSysController.cxx | 1130 +++++++++++++++++ .../src/waveformcontrollerform.ui | 228 ++++ 14 files changed, 2198 insertions(+), 18 deletions(-) create mode 100644 graphics/VTI12/VTI12Plugins/VTI12WaveformPlugin/CMakeLists.txt create mode 100755 graphics/VTI12/VTI12Plugins/VTI12WaveformPlugin/VTI12WaveformPlugin/VP1WaveformChannel.h create mode 100644 graphics/VTI12/VTI12Plugins/VTI12WaveformPlugin/VTI12WaveformPlugin/VP1WaveformPlugin_VP1AutoFactory.h create mode 100755 graphics/VTI12/VTI12Plugins/VTI12WaveformPlugin/src/VP1WaveformChannel.cxx create mode 100644 graphics/VTI12/VTI12Plugins/VTI12WaveformPlugin/src/VP1WaveformPlugin_VP1AutoFactory.cxx create mode 100644 graphics/VTI12/VTI12Systems/VTI12WaveformSystems/CMakeLists.txt create mode 100644 graphics/VTI12/VTI12Systems/VTI12WaveformSystems/VTI12WaveformSystems/VP1WaveformSystem.h create mode 100644 graphics/VTI12/VTI12Systems/VTI12WaveformSystems/VTI12WaveformSystems/WaveformSysController.h create mode 100644 graphics/VTI12/VTI12Systems/VTI12WaveformSystems/src/VP1WaveformSystem.cxx create mode 100644 graphics/VTI12/VTI12Systems/VTI12WaveformSystems/src/WaveformSysController.cxx create mode 100644 graphics/VTI12/VTI12Systems/VTI12WaveformSystems/src/waveformcontrollerform.ui diff --git a/Tracker/TrackerRecAlgs/TrackerClusterFit/test/TestBeamClusterFitDbg.py b/Tracker/TrackerRecAlgs/TrackerClusterFit/test/TestBeamClusterFitDbg.py index a900eeb9..d2d23810 100755 --- a/Tracker/TrackerRecAlgs/TrackerClusterFit/test/TestBeamClusterFitDbg.py +++ b/Tracker/TrackerRecAlgs/TrackerClusterFit/test/TestBeamClusterFitDbg.py @@ -117,12 +117,20 @@ acc.merge(PoolWriteCfg(ConfigFlags)) from FaserByteStreamCnvSvc.FaserByteStreamCnvSvcConfig import FaserByteStreamCnvSvcCfg acc.merge(FaserByteStreamCnvSvcCfg(ConfigFlags)) -#acc.merge(WaveformReconstructionCfg(ConfigFlags)) +acc.merge(WaveformReconstructionCfg(ConfigFlags)) acc.merge(FaserSCT_ClusterizationCfg(ConfigFlags, DataObjectName="SCT_EDGEMODE_RDOs")) acc.merge(ClusterFitAlgCfg(ConfigFlags)) acc.merge(TrackerSpacePointFinderCfg(ConfigFlags)) #acc.getEventAlgo("Tracker::ClusterFitAlg").OutputLevel = DEBUG +from AthenaConfiguration.ComponentFactory import CompFactory +decoderTool = CompFactory.ScintWaveformDecoderTool(name = "ScintWaveformDecoderTool", + CaloChannels = [0, 1, 2, 3, 4, 5], + PreshowerChannels = [6, 7], + TriggerChannels = [8, 9], + VetoChannels=[]) +acc.addPublicTool(decoderTool) + # explicitly save RDO information from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg itemList = [ "xAOD::EventInfo#*", @@ -130,12 +138,12 @@ itemList = [ "xAOD::EventInfo#*", "FaserSCT_RDO_Container#*", "xAOD::FaserTriggerData#*", "xAOD::FaserTriggerDataAux#*", -# "ScintWaveformContainer#*", + "ScintWaveformContainer#*", "TrackCollection#*", -# "xAOD::WaveformHitContainer#*", -# "xAOD::WaveformHitAuxContainer#*", -# "xAOD::WaveformClock#*", -# "xAOD::WaveformClockAuxInfo#*", + "xAOD::WaveformHitContainer#*", + "xAOD::WaveformHitAuxContainer#*", + "xAOD::WaveformClock#*", + "xAOD::WaveformClockAuxInfo#*", ] acc.merge(OutputStreamCfg(ConfigFlags, "ESD", itemList)) acc.getEventAlgo("OutputStreamESD").AcceptAlgs = ["Tracker::ClusterFitAlg"] diff --git a/graphics/VTI12/VTI12Gui/src/VP1MainWindow.cxx b/graphics/VTI12/VTI12Gui/src/VP1MainWindow.cxx index f86ddf08..f3f4dbe1 100644 --- a/graphics/VTI12/VTI12Gui/src/VP1MainWindow.cxx +++ b/graphics/VTI12/VTI12Gui/src/VP1MainWindow.cxx @@ -251,7 +251,7 @@ VP1MainWindow::VP1MainWindow(VP1ExecutionScheduler*sched,VP1AvailEvents * ae,QWi // connect(pushButton_quicksetup_trackingstudies,SIGNAL(clicked()),this,SLOT(quickSetupTriggered())); // connect(pushButton_quicksetup_calostudies,SIGNAL(clicked()),this,SLOT(quickSetupTriggered())); connect(pushButton_quicksetup_geometrystudies,SIGNAL(clicked()),this,SLOT(quickSetupTriggered())); - connect(pushButton_quicksetup_analysisstudies,SIGNAL(clicked()),this,SLOT(quickSetupTriggered())); + connect(pushButton_quicksetup_waveformstudies,SIGNAL(clicked()),this,SLOT(quickSetupTriggered())); //Default application font: m_defaultfont = QApplication::font(); @@ -284,7 +284,7 @@ VP1MainWindow::VP1MainWindow(VP1ExecutionScheduler*sched,VP1AvailEvents * ae,QWi // connect(action_quicklaunch_Tracking_studies,SIGNAL(triggered(bool)),this,SLOT(quickSetupTriggered())); // connect(action_quicklaunch_Calo_studies,SIGNAL(triggered(bool)),this,SLOT(quickSetupTriggered())); connect(action_quicklaunch_Geometry_studies,SIGNAL(triggered(bool)),this,SLOT(quickSetupTriggered())); - connect(action_quicklaunch_analysisstudies,SIGNAL(triggered(bool)),this,SLOT(quickSetupTriggered())); + connect(action_quicklaunch_waveformstudies,SIGNAL(triggered(bool)),this,SLOT(quickSetupTriggered())); connect(action_quicklaunch_Storegate_browser,SIGNAL(triggered(bool)),this,SLOT(quickSetupTriggered())); connect(action_quicklaunch_faser,SIGNAL(triggered(bool)),this,SLOT(quickSetupTriggered())); // connect(action_quicklaunch_trackcalo_commis,SIGNAL(triggered(bool)),this,SLOT(quickSetupTriggered())); @@ -1747,7 +1747,7 @@ void VP1MainWindow::quickSetupTriggered() plugfile="libVP13DCocktailPlugin.so"; channelname="TrackCalo"; tabname = "Track/Calo"; - } */else if (sender()==pushButton_quicksetup_analysisstudies||sender()==action_quicklaunch_analysisstudies) { + } */else if (sender()==pushButton_quicksetup_waveformstudies||sender()==action_quicklaunch_waveformstudies) { //Open AOD file selection dialog for VP1Light #ifdef BUILDVP1LIGHT @@ -1761,9 +1761,9 @@ void VP1MainWindow::quickSetupTriggered() pushButton_eventselect->setEnabled(true); #endif // BUILDVP1LIGHT - plugfile="libVP1AODPlugin.so"; - channelname="AOD"; - tabname = "Analysis"; + plugfile="libVTI12WaveformPlugin.so"; + channelname="Waveform"; + tabname = "Waveforms"; } else { addToMessageBox("quickSetupTriggered() Error: Unknown sender"); return; diff --git a/graphics/VTI12/VTI12Gui/src/vp1mainwindow.ui b/graphics/VTI12/VTI12Gui/src/vp1mainwindow.ui index 6a0b7eef..e23575d7 100644 --- a/graphics/VTI12/VTI12Gui/src/vp1mainwindow.ui +++ b/graphics/VTI12/VTI12Gui/src/vp1mainwindow.ui @@ -608,12 +608,12 @@ p, li { white-space: pre-wrap; } </widget> </item> <item row="2" column="0" colspan="3"> - <widget class="QPushButton" name="pushButton_quicksetup_analysisstudies"> + <widget class="QPushButton" name="pushButton_quicksetup_waveformstudies"> <property name="toolTip"> - <string><html><head/><body><p>Launch the Analysis Object (AOD) plugin within a new tab.</p></body></html></string> + <string><html><head/><body><p>Launch the VP1Waveform plugin within a new tab.</p></body></html></string> </property> <property name="text"> - <string>Unused</string> + <string>Waveform studies</string> </property> </widget> </item> @@ -764,7 +764,7 @@ p, li { white-space: pre-wrap; } <addaction name="action_quicklaunch_Calo_studies"/> --> <addaction name="action_quicklaunch_Geometry_studies"/> <!-- <addaction name="action_quicklaunch_trackcalo_commis"/> --> - <addaction name="action_quicklaunch_analysisstudies"/> + <addaction name="action_quicklaunch_waveformstudies"/> <addaction name="action_quicklaunch_Storegate_browser"/> <addaction name="separator"/> <addaction name="action_exit_VP1"/> @@ -880,9 +880,9 @@ p, li { white-space: pre-wrap; } <string>Open additional settings</string> </property> </action> - <action name="action_quicklaunch_analysisstudies"> + <action name="action_quicklaunch_waveformstudies"> <property name="text"> - <string>A&nalysis Studies</string> + <string>&Waveform Studies</string> </property> </action> </widget> diff --git a/graphics/VTI12/VTI12Plugins/VTI12WaveformPlugin/CMakeLists.txt b/graphics/VTI12/VTI12Plugins/VTI12WaveformPlugin/CMakeLists.txt new file mode 100644 index 00000000..2cf1077d --- /dev/null +++ b/graphics/VTI12/VTI12Plugins/VTI12WaveformPlugin/CMakeLists.txt @@ -0,0 +1,19 @@ +################################################################################ +# Package: VTI12WaveformPlugin +################################################################################ + +# Declare the package name: +atlas_subdir( VTI12WaveformPlugin ) + +# External dependencies: +find_package( Qt5 COMPONENTS Core Gui Widgets ) + +# Generate MOC files automatically: +set( CMAKE_AUTOMOC TRUE ) + +# Build the library. +atlas_add_library( VTI12WaveformPlugin + VTI12WaveformPlugin/*.h src/*.cxx src/*.qrc + PUBLIC_HEADERS VTI12WaveformPlugin + LINK_LIBRARIES Qt5::Core Qt5::Gui Qt5::Widgets + PRIVATE_LINK_LIBRARIES VP1Base VTI12WaveformSystems ) diff --git a/graphics/VTI12/VTI12Plugins/VTI12WaveformPlugin/VTI12WaveformPlugin/VP1WaveformChannel.h b/graphics/VTI12/VTI12Plugins/VTI12WaveformPlugin/VTI12WaveformPlugin/VP1WaveformChannel.h new file mode 100755 index 00000000..b764e096 --- /dev/null +++ b/graphics/VTI12/VTI12Plugins/VTI12WaveformPlugin/VTI12WaveformPlugin/VP1WaveformChannel.h @@ -0,0 +1,32 @@ +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +///////////////////////////////////////////////////////////// +// // +// Header file for class VP1GeometryChannel // +// // +// Author: Thomas Kittelmann <Thomas.Kittelmann@cern.ch> // +// // +// Initial version: May 2007 // +// // +///////////////////////////////////////////////////////////// + +#ifndef VP1GEOMETRYCHANNEL_H +#define VP1GEOMETRYCHANNEL_H + +#include "VP1Base/IVP12DStandardChannelWidget.h" + +class VP1WaveformChannel : public IVP12DStandardChannelWidget { + + Q_OBJECT + +public: + + VP1WaveformChannel(); + void init(); + virtual ~VP1WaveformChannel(){} + +}; + +#endif diff --git a/graphics/VTI12/VTI12Plugins/VTI12WaveformPlugin/VTI12WaveformPlugin/VP1WaveformPlugin_VP1AutoFactory.h b/graphics/VTI12/VTI12Plugins/VTI12WaveformPlugin/VTI12WaveformPlugin/VP1WaveformPlugin_VP1AutoFactory.h new file mode 100644 index 00000000..77bc35b8 --- /dev/null +++ b/graphics/VTI12/VTI12Plugins/VTI12WaveformPlugin/VTI12WaveformPlugin/VP1WaveformPlugin_VP1AutoFactory.h @@ -0,0 +1,25 @@ +/* + Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration +*/ +//Autogenerated VP1 Factory Code Header File (Fri Aug 19 13:36:52 CEST 2016) + +#ifndef VP1WaveformPlugin_VP1AutoFactory_H +#define VP1WaveformPlugin_VP1AutoFactory_H + +#include <QObject> +#include <QStringList> + +#include "VP1Base/IVP1ChannelWidgetFactory.h" + +class VP1WaveformPlugin_VP1AutoFactory : public QObject, public IVP1ChannelWidgetFactory +{ + Q_OBJECT + Q_PLUGIN_METADATA(IID "VP1WaveformPlugin" ) + Q_INTERFACES(IVP1ChannelWidgetFactory) + +public: + virtual QStringList channelWidgetsProvided() const; + virtual IVP1ChannelWidget * getChannelWidget(const QString & channelwidget); +}; + +#endif diff --git a/graphics/VTI12/VTI12Plugins/VTI12WaveformPlugin/src/VP1WaveformChannel.cxx b/graphics/VTI12/VTI12Plugins/VTI12WaveformPlugin/src/VP1WaveformChannel.cxx new file mode 100755 index 00000000..7187a1af --- /dev/null +++ b/graphics/VTI12/VTI12Plugins/VTI12WaveformPlugin/src/VP1WaveformChannel.cxx @@ -0,0 +1,32 @@ +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +///////////////////////////////////////////////////////////// +// // +// Implementation of class VP1WaveformChannel // +// // +// Author: Dave Casper <dcasper@uci.edu> // +// // +// Initial version: August 2021 // +// // +///////////////////////////////////////////////////////////// + +#include "VTI12WaveformPlugin/VP1WaveformChannel.h" +#include "VTI12WaveformSystems/VP1WaveformSystem.h" +#include "VP1Base/VP1QtUtils.h" + +VP1WaveformChannel::VP1WaveformChannel() + : IVP12DStandardChannelWidget(VP1CHANNELNAMEINPLUGIN(VP1WaveformChannel,"Waveform"), + "This channel shows the FASER waveform data.", + "dcasper@uci.edu") +{ +} + +void VP1WaveformChannel::init() +{ + addSystem(new VP1WaveformSystem); + // addSystem(new VP1GeometrySystem); + // if (VP1QtUtils::environmentVariableIsOn("VP1_SECOND_GEOMSYS")) + // addSystem(new VP1GeometrySystem(VP1GeoFlags::None,"AltGeo"),IVP13DStandardChannelWidget::StartDisabled); +} diff --git a/graphics/VTI12/VTI12Plugins/VTI12WaveformPlugin/src/VP1WaveformPlugin_VP1AutoFactory.cxx b/graphics/VTI12/VTI12Plugins/VTI12WaveformPlugin/src/VP1WaveformPlugin_VP1AutoFactory.cxx new file mode 100644 index 00000000..7bd05df2 --- /dev/null +++ b/graphics/VTI12/VTI12Plugins/VTI12WaveformPlugin/src/VP1WaveformPlugin_VP1AutoFactory.cxx @@ -0,0 +1,24 @@ +/* + Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration +*/ +//Autogenerated VP1 Factory Code Implementation File (Fri Aug 19 13:36:52 CEST 2016) + +#include <QtPlugin> +#include "VTI12WaveformPlugin/VP1WaveformPlugin_VP1AutoFactory.h" +#include "VTI12WaveformPlugin/VP1WaveformChannel.h" + +QStringList VP1WaveformPlugin_VP1AutoFactory::channelWidgetsProvided() const +{ + return QStringList() + << "Waveform" + ; +} + +IVP1ChannelWidget * VP1WaveformPlugin_VP1AutoFactory::getChannelWidget(const QString & channelwidget) +{ + if (channelwidget == "Waveform") + return new VP1WaveformChannel(); + + return 0; +} + diff --git a/graphics/VTI12/VTI12Systems/VTI12WaveformSystems/CMakeLists.txt b/graphics/VTI12/VTI12Systems/VTI12WaveformSystems/CMakeLists.txt new file mode 100644 index 00000000..8dcd3e32 --- /dev/null +++ b/graphics/VTI12/VTI12Systems/VTI12WaveformSystems/CMakeLists.txt @@ -0,0 +1,24 @@ +################################################################################ +# Package: VTI12WaveformSystems +################################################################################ + +# Declare the package name: +atlas_subdir( VTI12WaveformSystems ) + +# External dependencies: +find_package( Coin3D ) +find_package( Qt5 COMPONENTS Core Gui Widgets Charts ) + +# Generate UI files automatically: +set( CMAKE_AUTOUIC TRUE ) +# Generate MOC files automatically: +set( CMAKE_AUTOMOC TRUE ) + +# Component(s) in the package: +atlas_add_library( VTI12WaveformSystems VTI12WaveformSystems/*.h src/*.cxx + PUBLIC_HEADERS VTI12WaveformSystems + INCLUDE_DIRS ${COIN3D_INCLUDE_DIRS} ${QT5_INCLUDE_DIRS} + LINK_LIBRARIES ${COIN3D_LIBRARIES} GeoPrimitives VP1Base VTI12Utils ScintRawEvent + Qt5::Core Qt5::Gui Qt5::Charts + PRIVATE_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR} + PRIVATE_LINK_LIBRARIES GaudiKernel VP1HEPVis ) diff --git a/graphics/VTI12/VTI12Systems/VTI12WaveformSystems/VTI12WaveformSystems/VP1WaveformSystem.h b/graphics/VTI12/VTI12Systems/VTI12WaveformSystems/VTI12WaveformSystems/VP1WaveformSystem.h new file mode 100644 index 00000000..d17e3b60 --- /dev/null +++ b/graphics/VTI12/VTI12Systems/VTI12WaveformSystems/VTI12WaveformSystems/VP1WaveformSystem.h @@ -0,0 +1,59 @@ +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +#ifndef VP1WAVEFORMSYSTEM_H +#define VP1WAVEFORMSYSTEM_H + +///////////////////////////////////////////////////////////////////////// +// // +// Header file for class VP1WaveformSystem // +// // +// Author: Dave Casper <dcasper@uci.edu> // +// // +// Initial version: August 2021 // +// // +///////////////////////////////////////////////////////////////////////// + +#include "VP1Base/IVP12DSystemSimple.h" +#include <QColor>//Fixme obsolete + +class VP1WaveformSystem : public IVP12DSystemSimple { + + Q_OBJECT + +public: + + /////////////////// + // Constructor // + /////////////////// + + VP1WaveformSystem(); + + ////////////////////////////////////////// + // Reimplementations from base class: // + ////////////////////////////////////////// + + virtual ~VP1WaveformSystem(); + void buildPermanentItemCollection(StoreGateSvc* detstore, VP1GraphicsItemCollection *root); + void buildEventItemCollection(StoreGateSvc*, VP1GraphicsItemCollection *root); + void systemuncreate(); + QWidget * buildController(); + QByteArray saveState(); + void restoreFromState(QByteArray ba); + +public slots: + + void updateVetoElements(bool); + void updateTriggerElements(bool); + void updatePreshowerElements(bool); + void updateCalorimeterElements(bool); + void updateClockElements(bool); + void updateTestElements(bool); + +private: + class Imp; + Imp * m_d; +}; + +#endif diff --git a/graphics/VTI12/VTI12Systems/VTI12WaveformSystems/VTI12WaveformSystems/WaveformSysController.h b/graphics/VTI12/VTI12Systems/VTI12WaveformSystems/VTI12WaveformSystems/WaveformSysController.h new file mode 100644 index 00000000..95db09ac --- /dev/null +++ b/graphics/VTI12/VTI12Systems/VTI12WaveformSystems/VTI12WaveformSystems/WaveformSysController.h @@ -0,0 +1,78 @@ +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + + +//////////////////////////////////////////////////////////////// +// // +// Header file for class WaveformSysController // +// // +// Description: Waveform system controller. // +// // +// Author: Dave Casper (dcasper@uci.edu) // +// Initial version: August 2021 // +// // +//////////////////////////////////////////////////////////////// + +#ifndef WAVEFORMSYSCONTROLLER_H +#define WAVEFORMSYSCONTROLLER_H + +#include "VP1Base/VP1Controller.h" +#include <Inventor/C/errors/debugerror.h> +#include <Inventor/SbColor4f.h> +class SoMaterial; + +class WaveformSysController : public VP1Controller { + + Q_OBJECT + +public: + + WaveformSysController(IVP1System * sys); + virtual ~WaveformSysController(); + + void actualRestoreSettings(VP1Deserialise&); + int currentSettingsVersion() const; + void actualSaveSettings(VP1Serialise&) const; + + /////////////////////////////////// + // Access Methods for settings // + /////////////////////////////////// + + //Fixme: SoGroup * drawOptions() const; + bool vetoEnabled() const; + bool triggerEnabled() const; + bool preshowerEnabled() const; + bool calorimeterEnabled() const; + bool clockEnabled() const; + bool testEnabled() const; + + + /////////////////////////////////////// + // Signals for changes in settings // + /////////////////////////////////////// +signals: + void vetoEnabledChanged(bool); + void triggerEnabledChanged(bool); + void preshowerEnabledChanged(bool); + void calorimeterEnabledChanged(bool); + void clockEnabledChanged(bool); + void testEnabledChanged(bool); + +private: + + class Imp; + Imp * m_d; + +private slots: + void possibleChange_vetoEnabled(); + void possibleChange_triggerEnabled(); + void possibleChange_preshowerEnabled(); + void possibleChange_calorimeterEnabled(); + void possibleChange_clockEnabled(); + void possibleChange_testEnabled(); + +}; + + +#endif diff --git a/graphics/VTI12/VTI12Systems/VTI12WaveformSystems/src/VP1WaveformSystem.cxx b/graphics/VTI12/VTI12Systems/VTI12WaveformSystems/src/VP1WaveformSystem.cxx new file mode 100644 index 00000000..90eb8b57 --- /dev/null +++ b/graphics/VTI12/VTI12Systems/VTI12WaveformSystems/src/VP1WaveformSystem.cxx @@ -0,0 +1,521 @@ +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + + +///////////////////////////////////////////////////////////////////////// +// // +// Implementation of class VP1WaveformSystem // +// // +// Author: Dave Casper <dcasper@uci.edu> // +// // +// Initial version: August 2021 // +// // +///////////////////////////////////////////////////////////////////////// + +#include "VTI12WaveformSystems/VP1WaveformSystem.h" +#include "VTI12WaveformSystems/WaveformSysController.h" +// #include "VTI12GuideLineSystems/ProjectionSurfacesHelper.h" +// #include "VTI12GuideLineSystems/VP1CoordinateAxes.h" +// #include "VTI12GuideLineSystems/VP1Floor.h" +// #include "VTI12GuideLineSystems/VP1Letters.h" +// #include "VTI12GuideLineSystems/VP1EtaCone.h" +// #include "VTI12GuideLineSystems/VP1CartesianGrid.h" +// #include "VTI12GuideLineSystems/VP1CylindricalGrid.h" +// #include "VTI12GuideLineSystems/VP1TrackingVolumes.h" +// #include "VTI12GuideLineSystems/VP1Lines.h" + +#include "VP1Base/VP1GraphicsItemCollection.h" +#include "VP1Base/VP1Serialise.h" +#include "VP1Base/VP1Deserialise.h" +#include "VP1Base/VP1Msg.h" + +#include "StoreGate/StoreGateSvc.h" + +#include "ScintRawEvent/ScintWaveformContainer.h" + +#include <Inventor/nodes/SoSeparator.h> +#include <Inventor/nodes/SoPickStyle.h> +#include <Inventor/nodes/SoComplexity.h> +#include <Inventor/SbVec3f.h> + +#include <QtCharts> +#include <QtWidgets> +#include <QGraphicsEllipseItem> + +using namespace QtCharts; + +#include <map> + +class VP1WaveformSystem::Imp { +public: + Imp(VP1WaveformSystem*tc) : theclass(tc), + controller(0) {} + // coordinateaxes(0), + // floor(0), + // cartesiangrid(0), + // cylindricalgrid(0), + // letters(0), + // etacone1(0), + // etacone2(0), + // etacone3(0), + // trackingVolumes(0), + // projsurfhelper_pixel(0), + // projsurfhelper_sct(0), + // projsurfhelper_trt(0), + // lastemit_pixel(InDetProjFlags::NoProjections), + // lastemit_sct(InDetProjFlags::NoProjections), + // lastemit_trt(InDetProjFlags::NoProjections) {} + VP1WaveformSystem *theclass; + WaveformSysController * controller; + int nCharts {0}; + std::vector<QChart*> vetoCharts; + std::vector<QChart*> triggerCharts; + std::vector<QChart*> preshowerCharts; + std::vector<QChart*> calorimeterCharts; + std::vector<QChart*> clockCharts; + std::vector<QChart*> testCharts; + QChart* createChart(const std::vector<unsigned int>& data, QGraphicsItem* parent = nullptr, const QString& title = "Default title"); + void createCharts(StoreGateSvc* sg, VP1GraphicsItemCollection* items, bool visible, std::vector<QChart*>& list, const std::string& collectionName); +// VP1CoordinateAxes * coordinateaxes; +// VP1Floor * floor; +// VP1CartesianGrid * cartesiangrid; +// VP1CylindricalGrid * cylindricalgrid; +// VP1Letters * letters; +// VP1EtaCone * etacone1; +// VP1EtaCone * etacone2; +// VP1EtaCone * etacone3; +// VP1TrackingVolumes * trackingVolumes; +// VP1Lines * lines; + +// ProjectionSurfacesHelper * projsurfhelper_pixel; +// ProjectionSurfacesHelper * projsurfhelper_sct; +// ProjectionSurfacesHelper * projsurfhelper_trt; +// InDetProjFlags::InDetProjPartsFlags lastemit_pixel; +// InDetProjFlags::InDetProjPartsFlags lastemit_sct; +// InDetProjFlags::InDetProjPartsFlags lastemit_trt; + + //For knowing which ID parts are used by data systems: +// std::map<QObject*,InDetProjFlags::DetTypeFlags> sender2iddettypeswithprojs; +}; + +//_____________________________________________________________________________________ +VP1WaveformSystem::VP1WaveformSystem() + : IVP12DSystemSimple("Waveforms", + "System displaying waveform data", + "dcasper@uci.edu"), m_d(new Imp(this)) +{ +} + + +//_____________________________________________________________________________________ +VP1WaveformSystem::~VP1WaveformSystem() +{ + delete m_d; +} + +//_____________________________________________________________________________________ +QWidget * VP1WaveformSystem::buildController() +{ + m_d->controller = new WaveformSysController(this); + + connect(m_d->controller,SIGNAL(vetoEnabledChanged(bool)),this,SLOT(updateVetoElements(bool))); + connect(m_d->controller,SIGNAL(triggerEnabledChanged(bool)),this,SLOT(updateTriggerElements(bool))); + connect(m_d->controller,SIGNAL(preshowerEnabledChanged(bool)),this,SLOT(updatePreshowerElements(bool))); + connect(m_d->controller,SIGNAL(calorimeterEnabledChanged(bool)),this,SLOT(updateCalorimeterElements(bool))); + connect(m_d->controller,SIGNAL(clockEnabledChanged(bool)),this,SLOT(updateClockElements(bool))); + connect(m_d->controller,SIGNAL(testEnabledChanged(bool)),this,SLOT(updateTestElements(bool))); + + return m_d->controller; +} + +//_____________________________________________________________________________________ +void VP1WaveformSystem::buildEventItemCollection(StoreGateSvc* sg, VP1GraphicsItemCollection* root) +{ + if(VP1Msg::verbose() || true){ + messageVerbose("buildEventItemCollection"); + } + + m_d->vetoCharts.clear(); + m_d->triggerCharts.clear(); + m_d->preshowerCharts.clear(); + m_d->calorimeterCharts.clear(); + m_d->clockCharts.clear(); + m_d->testCharts.clear(); + m_d->nCharts = 0; + + m_d->createCharts(sg, root, m_d->controller->vetoEnabled(), m_d->vetoCharts, "VetoWaveforms"); + m_d->createCharts(sg, root, m_d->controller->triggerEnabled(), m_d->triggerCharts, "TriggerWaveforms"); + m_d->createCharts(sg, root, m_d->controller->preshowerEnabled(), m_d->preshowerCharts, "PreshowerWaveforms"); + m_d->createCharts(sg, root, m_d->controller->calorimeterEnabled(), m_d->calorimeterCharts, "CaloWaveforms"); + m_d->createCharts(sg, root, m_d->controller->clockEnabled(), m_d->clockCharts, "ClockWaveforms"); + m_d->createCharts(sg, root, m_d->controller->testEnabled(), m_d->testCharts, "TestWaveforms"); + +} + +void VP1WaveformSystem::Imp::createCharts(StoreGateSvc* sg, + VP1GraphicsItemCollection* items, + bool visible, + std::vector<QChart*>& list, + const std::string& collectionName) +{ + typedef DataVector<ScintWaveform>::const_iterator ScintWaveformConstIterator; + + const ScintWaveformContainer* p_container {nullptr}; + if(sg->retrieve(p_container, collectionName)==StatusCode::SUCCESS) + { + for(ScintWaveformConstIterator i_wf=p_container->begin(); i_wf!=p_container->end(); ++i_wf) + { + if ((*i_wf)->n_samples() > 0) + { + QString title { collectionName.c_str() }; + title.append(" ").append(QString::number((*i_wf)->channel())); + QChart* chart = createChart((*i_wf)->adc_counts(), nullptr, title); + chart->setVisible(visible); + list.push_back(chart); + items->addItem(chart, true, true); + } + } + } + else + { + QString errorMsg {"Unable to retrieve "}; + theclass->message(errorMsg.append(collectionName.c_str())); + } +} + +QChart* VP1WaveformSystem::Imp::createChart(const std::vector<unsigned int>& data, QGraphicsItem* parent, const QString& title) +{ + + QChart* chart = new QChart(parent); + QLineSeries *series = new QLineSeries(); +// *series << QPointF(0, 6) << QPointF(9, 4) << QPointF(15, 20) << QPointF(25, 12) << QPointF(29, 26); + unsigned int maxEntry = 0; + for (size_t i = 0; i < data.size(); i++) + { + maxEntry = std::max(maxEntry, data[i]); + series->append(i, data[i]); + } + + QPen pen(QRgb(0xfdb157)); + pen.setWidth(1); + series->setPen(pen); + chart->legend()->hide(); + chart->addSeries(series); + + QFont font; + font.setPixelSize(24); + chart->setTitleFont(font); + chart->setTitleBrush(QBrush(Qt::blue)); + chart->setTitle(title); + QValueAxis* axisX = new QValueAxis(); + QFont labelsFont; + labelsFont.setPixelSize(8); + QPen axisPen(QRgb(0xd18952)); + axisPen.setWidth(2); + axisX->setRange(0, data.size()-1); + axisX->setTickCount(10); + axisX->setLabelsFont(labelsFont); + axisX->setLinePen(axisPen); + chart->addAxis(axisX, Qt::AlignBottom); + QValueAxis* axisY = new QValueAxis(); + axisY->setRange(0, maxEntry); + axisY->setTickCount(8); + axisY->setLabelsFont(labelsFont); + axisY->setLinePen(axisPen); + chart->addAxis(axisY, Qt::AlignLeft); +// chart->resize(500,500); + + qreal x = (nCharts%5) * 550; + qreal y = (nCharts/5) * 550; + + chart->setGeometry(x, y, 500, 500); + nCharts++; + return chart; +} + +//_____________________________________________________________________________________ +void VP1WaveformSystem::buildPermanentItemCollection(StoreGateSvc* /*detstore*/, VP1GraphicsItemCollection* /*root*/) +{ + if(VP1Msg::verbose() || true){ + messageVerbose("buildPermanentItemCollection"); + } +// //No guidelines are pickable: +// SoPickStyle *pickStyle = new SoPickStyle; +// pickStyle->style=SoPickStyle::UNPICKABLE; +// root->addChild(pickStyle); + +// //High complexity val for eta cones: +// SoComplexity * complexity = new SoComplexity; +// complexity->value.setValue(2.0f); +// root->addChild(complexity); + +// //Floor: +// m_d->floor = new VP1Floor(root,this); +// connect(m_d->controller,SIGNAL(floorExtentChanged(const double&)),m_d->floor,SLOT(setExtent(const double&))); +// m_d->floor->setExtent(m_d->controller->floorExtent()); +// connect(m_d->controller,SIGNAL(floorSpacingChanged(const double&)),m_d->floor,SLOT(setSpacing(const double&))); +// m_d->floor->setSpacing(m_d->controller->floorSpacing()); +// connect(m_d->controller,SIGNAL(floorHeightChanged(const double&)),m_d->floor,SLOT(setVerticalPosition(const double&))); +// m_d->floor->setVerticalPosition(m_d->controller->floorHeight()); +// connect(m_d->controller,SIGNAL(floorColourAndTranspChanged( const SbColor4f&)),m_d->floor,SLOT(setColourAndTransp(const SbColor4f&))); +// m_d->floor->setColourAndTransp(m_d->controller->floorColourAndTransp()); +// connect(m_d->controller,SIGNAL(showFloorChanged(bool)),m_d->floor,SLOT(setShown(bool))); +// m_d->floor->setShown(m_d->controller->showFloor()); + +// //CartesianGrid: +// m_d->cartesiangrid = new VP1CartesianGrid(root,this); +// connect(m_d->controller,SIGNAL(gridExtentChanged(const double&)),m_d->cartesiangrid,SLOT(setExtent(const double&))); +// m_d->cartesiangrid->setExtent(m_d->controller->gridExtent()); +// connect(m_d->controller,SIGNAL(gridSpacingChanged(const double&)),m_d->cartesiangrid,SLOT(setSpacing(const double&))); +// m_d->cartesiangrid->setSpacing(m_d->controller->gridSpacing()); +// connect(m_d->controller,SIGNAL(gridColourAndTranspChanged( const SbColor4f&)),m_d->cartesiangrid,SLOT(setColourAndTransp(const SbColor4f&))); +// m_d->cartesiangrid->setColourAndTransp(m_d->controller->gridColourAndTransp()); +// connect(m_d->controller,SIGNAL(showCartesianGridChanged(bool)),m_d->cartesiangrid,SLOT(setShown(bool))); +// m_d->cartesiangrid->setShown(m_d->controller->showCartesianGrid()); + +// //CylindricalGrid: +// m_d->cylindricalgrid = new VP1CylindricalGrid(root,this); +// connect(m_d->controller,SIGNAL(gridExtentChanged(const double&)),m_d->cylindricalgrid,SLOT(setExtent(const double&))); +// m_d->cylindricalgrid->setExtent(m_d->controller->gridExtent()); +// connect(m_d->controller,SIGNAL(gridSpacingChanged(const double&)),m_d->cylindricalgrid,SLOT(setSpacing(const double&))); +// m_d->cylindricalgrid->setSpacing(m_d->controller->gridSpacing()); +// connect(m_d->controller,SIGNAL(gridColourAndTranspChanged( const SbColor4f&)),m_d->cylindricalgrid,SLOT(setColourAndTransp(const SbColor4f&))); +// m_d->cylindricalgrid->setColourAndTransp(m_d->controller->gridColourAndTransp()); +// connect(m_d->controller,SIGNAL(showCylindricalGridChanged(bool)),m_d->cylindricalgrid,SLOT(setShown(bool))); +// m_d->cylindricalgrid->setShown(m_d->controller->showCylindricalGrid()); + +// //Letters: +// m_d->letters = new VP1Letters(m_d->controller->lettersMaterial(),root,this); +// connect(m_d->controller,SIGNAL(lettersZPosChanged(const double&)),m_d->letters,SLOT(setZPos(const double&))); +// m_d->letters->setZPos(m_d->controller->lettersZPos()); +// connect(m_d->controller,SIGNAL(lettersVerticalPosChanged(const double&)),m_d->letters,SLOT(setVerticalPosition(const double&))); +// m_d->letters->setVerticalPosition(m_d->controller->lettersVerticalPos()); +// connect(m_d->controller,SIGNAL(showLettersChanged(bool)),m_d->letters,SLOT(setShown(bool))); +// m_d->letters->setShown(m_d->controller->showLetters()); + +// //Coordinate axes: +// m_d->coordinateaxes = new VP1CoordinateAxes(m_d->controller->xAxisMaterial(), +// m_d->controller->yAxisMaterial(), +// m_d->controller->zAxisMaterial(), +// root,this); +// connect(m_d->controller,SIGNAL(axesLengthChanged(const double&)),m_d->coordinateaxes,SLOT(setLength(const double&))); +// m_d->coordinateaxes->setLength(m_d->controller->axesLength()); +// connect(m_d->controller,SIGNAL(axesPositionChanged(const SbVec3f&)),m_d->coordinateaxes,SLOT(setPosition(const SbVec3f&))); +// m_d->coordinateaxes->setPosition(m_d->controller->axesPosition()); +// connect(m_d->controller,SIGNAL(relAxesThicknessChanged(const double&)),m_d->coordinateaxes,SLOT(setRelativeAxisThickness(const double&))); +// m_d->coordinateaxes->setRelativeAxisThickness(m_d->controller->relAxesThickness()); +// connect(m_d->controller,SIGNAL(showAxesChanged(bool)),m_d->coordinateaxes,SLOT(setShown(bool))); +// m_d->coordinateaxes->setShown(m_d->controller->showAxes()); + +// //Eta cones: +// m_d->etacone1 = new VP1EtaCone(m_d->controller->etaCone1Material(),root,this); +// connect(m_d->controller,SIGNAL(etaExtentChanged(const double&)),m_d->etacone1,SLOT(setExtent(const double&))); +// m_d->etacone1->setExtent(m_d->controller->etaExtent()); +// connect(m_d->controller,SIGNAL(etaConeValue1Changed(const double&)),m_d->etacone1,SLOT(setEtaValue(const double&))); +// m_d->etacone1->setEtaValue(m_d->controller->etaConeValue1()); +// connect(m_d->controller,SIGNAL(showEtaCone1Changed(bool)),m_d->etacone1,SLOT(setShown(bool))); +// m_d->etacone1->setShown(m_d->controller->showEtaCone1()); + +// m_d->etacone2 = new VP1EtaCone(m_d->controller->etaCone2Material(),root,this); +// connect(m_d->controller,SIGNAL(etaExtentChanged(const double&)),m_d->etacone2,SLOT(setExtent(const double&))); +// m_d->etacone2->setExtent(m_d->controller->etaExtent()); +// connect(m_d->controller,SIGNAL(etaConeValue2Changed(const double&)),m_d->etacone2,SLOT(setEtaValue(const double&))); +// m_d->etacone2->setEtaValue(m_d->controller->etaConeValue2()); +// connect(m_d->controller,SIGNAL(showEtaCone2Changed(bool)),m_d->etacone2,SLOT(setShown(bool))); +// m_d->etacone2->setShown(m_d->controller->showEtaCone2()); + +// m_d->etacone3 = new VP1EtaCone(m_d->controller->etaCone3Material(),root,this); +// connect(m_d->controller,SIGNAL(etaExtentChanged(const double&)),m_d->etacone3,SLOT(setExtent(const double&))); +// m_d->etacone3->setExtent(m_d->controller->etaExtent()); +// connect(m_d->controller,SIGNAL(etaConeValue3Changed(const double&)),m_d->etacone3,SLOT(setEtaValue(const double&))); +// m_d->etacone3->setEtaValue(m_d->controller->etaConeValue3()); +// connect(m_d->controller,SIGNAL(showEtaCone3Changed(bool)),m_d->etacone3,SLOT(setShown(bool))); +// m_d->etacone3->setShown(m_d->controller->showEtaCone3()); + +// //Tracking Volumes: +// m_d->trackingVolumes = new VP1TrackingVolumes(m_d->controller->idTrkVolumesMaterial(), +// m_d->controller->caloTrkVolumesMaterial(), +// m_d->controller->msTrkVolumesMaterial(), +// m_d->controller->showInnerDetector(), +// m_d->controller->showCalorimeters(), +// m_d->controller->showMuonSpectrometer(), +// root,this); +// connect(m_d->controller,SIGNAL(showTrackingVolumesChanged(bool)),m_d->trackingVolumes,SLOT(setShown(bool))); +// connect(m_d->controller,SIGNAL(showInnerDetectorChanged(bool)),m_d->trackingVolumes,SLOT(setShownID(bool))); +// connect(m_d->controller,SIGNAL(showCalorimetersChanged(bool)),m_d->trackingVolumes,SLOT(setShownCalo(bool))); +// connect(m_d->controller,SIGNAL(showMuonSpectrometerChanged(bool)),m_d->trackingVolumes,SLOT(setShownMS(bool))); +// m_d->trackingVolumes->setShown(m_d->controller->showTrackingVolumes()); + +// //Lines +// m_d->lines = new VP1Lines(root, this); +// connect(m_d->controller,SIGNAL(showLinesChanged(bool)),m_d->lines,SLOT(setShown(bool))); +// m_d->lines->setShown(m_d->controller->showLines()); +// connect(m_d->controller,SIGNAL(lineDirectionChanged(const SbVec3f&)),m_d->lines,SLOT(setDirection(const SbVec3f&))); +// m_d->lines->setDirection(m_d->controller->lineDirection()); + +// SoSeparator * projsep = new SoSeparator; +// root->addChild(projsep); + +// m_d->projsurfhelper_pixel = ProjectionSurfacesHelper::createPixelHelper(m_d->controller->pixelProjSurfMaterial(),projsep,this,this); +// m_d->projsurfhelper_sct = ProjectionSurfacesHelper::createSCTHelper(m_d->controller->sctProjSurfMaterial(),projsep,this,this); +// m_d->projsurfhelper_trt = ProjectionSurfacesHelper::createTRTHelper(m_d->controller->trtProjSurfMaterial(),projsep,this,this); + +// connect(m_d->controller,SIGNAL(shownPixelProjSurfacesChanged(InDetProjFlags::InDetProjPartsFlags)), +// m_d->projsurfhelper_pixel,SLOT(setSurfaces(InDetProjFlags::InDetProjPartsFlags))); +// m_d->projsurfhelper_pixel->setSurfaces(m_d->controller->shownPixelProjSurfaces()); + +// connect(m_d->controller,SIGNAL(shownSCTProjSurfacesChanged(InDetProjFlags::InDetProjPartsFlags)), +// m_d->projsurfhelper_sct,SLOT(setSurfaces(InDetProjFlags::InDetProjPartsFlags))); +// m_d->projsurfhelper_sct->setSurfaces(m_d->controller->shownSCTProjSurfaces()); + +// connect(m_d->controller,SIGNAL(shownTRTProjSurfacesChanged(InDetProjFlags::InDetProjPartsFlags)), +// m_d->projsurfhelper_trt,SLOT(setSurfaces(InDetProjFlags::InDetProjPartsFlags))); +// m_d->projsurfhelper_trt->setSurfaces(m_d->controller->shownTRTProjSurfaces()); + +// connect(m_d->controller,SIGNAL(applicablePixelProjPartsChanged(InDetProjFlags::InDetProjPartsFlags)),this,SLOT(possiblyEmit_ApplicableProjectionsChanged())); +// connect(m_d->controller,SIGNAL(applicableSCTProjPartsChanged(InDetProjFlags::InDetProjPartsFlags)),this,SLOT(possiblyEmit_ApplicableProjectionsChanged())); +// connect(m_d->controller,SIGNAL(applicableTRTProjPartsChanged(InDetProjFlags::InDetProjPartsFlags)),this,SLOT(possiblyEmit_ApplicableProjectionsChanged())); + +// possiblyEmit_ApplicableProjectionsChanged();//fixme; late enough??? Problem with new delayed init: until guides are enabled, proper projections won't be known!! +// //Thus, the channel should call this slot explicitly after making all connections!!! +} + +//_____________________________________________________________________________________ +void VP1WaveformSystem::systemuncreate() +{ +// delete m_d->coordinateaxes; m_d->coordinateaxes = 0; +// delete m_d->floor; m_d->floor = 0; +// delete m_d->cartesiangrid; m_d->cartesiangrid = 0; +// delete m_d->cylindricalgrid; m_d->cylindricalgrid = 0; +// delete m_d->letters; m_d->letters = 0; +// delete m_d->etacone1; m_d->etacone1 = 0; +// delete m_d->etacone2; m_d->etacone2 = 0; +// delete m_d->etacone3; m_d->etacone3 = 0; +// delete m_d->projsurfhelper_pixel; m_d->projsurfhelper_pixel = 0; +// delete m_d->projsurfhelper_sct; m_d->projsurfhelper_sct = 0; +// delete m_d->projsurfhelper_trt; m_d->projsurfhelper_trt = 0; +// delete m_d->trackingVolumes; m_d->trackingVolumes = 0; + + m_d->controller=0; +} + + +//_____________________________________________________________________________________ +QByteArray VP1WaveformSystem::saveState() { + + if (m_d->controller == nullptr) buildController(); + + VP1Serialise serialise(0/*version*/,this); + serialise.save(IVP12DSystemSimple::saveState()); + serialise.save(m_d->controller->saveSettings()); + serialise.disableUnsavedChecks();//We do the testing in the controller + return serialise.result(); +} + +//_____________________________________________________________________________________ +void VP1WaveformSystem::restoreFromState(QByteArray ba) { + + VP1Deserialise state(ba,this); + if (state.version() != 0) { + message("Warning: State data in .vp1 file is in wrong format - ignoring!"); + state.disableUnrestoredChecks();//We do the testing in the controller + return; + } +// if (state.version() > 0 &&state.version()<=3) { +// message("Warning: State data in .vp1 file is in obsolete format - ignoring!"); +// state.disableUnrestoredChecks();//We do the testing in the controller +// return; +// } + if (m_d->controller == nullptr) buildController(); + + IVP12DSystemSimple::restoreFromState(state.restoreByteArray()); + m_d->controller->restoreSettings(state.restoreByteArray()); + state.disableUnrestoredChecks();//We do the testing in the controller +} + +void VP1WaveformSystem::updateVetoElements(bool enabled) +{ + for (QChart* c : m_d->vetoCharts) + { + c->setVisible(enabled); + } +} + +void VP1WaveformSystem::updateTriggerElements(bool enabled) +{ + for (QChart* c : m_d->triggerCharts) + { + c->setVisible(enabled); + } +} + +void VP1WaveformSystem::updatePreshowerElements(bool enabled) +{ + for (QChart* c : m_d->preshowerCharts) + { + c->setVisible(enabled); + } +} + +void VP1WaveformSystem::updateCalorimeterElements(bool enabled) +{ + for (QChart* c : m_d->calorimeterCharts) + { + c->setVisible(enabled); + } +} + +void VP1WaveformSystem::updateClockElements(bool enabled) +{ + for (QChart* c : m_d->clockCharts) + { + c->setVisible(enabled); + } +} + +void VP1WaveformSystem::updateTestElements(bool enabled) +{ + for (QChart* c : m_d->testCharts) + { + c->setVisible(enabled); + } +} + +//_____________________________________________________________________________________ +// void VP1GuideLineSystem::setIDDetTypesUsingProjections( InDetProjFlags::DetTypeFlags f ) +// { +// ensureBuildController(); +// if (!m_d->controller) +// return;//if receiving signals after uncreate +// if(VP1Msg::verbose()){ +// messageVerbose("Signal received in setIDDetTypesUsingProjections("+str(f)+") slot (from " +// +QString(sender()?sender()->objectName():"NULL sender")+")"); +// } +// m_d->sender2iddettypeswithprojs[sender()] = f; +// InDetProjFlags::DetTypeFlags used(InDetProjFlags::NoDet); +// std::map<QObject*,InDetProjFlags::DetTypeFlags>::iterator it, itE = m_d->sender2iddettypeswithprojs.end(); +// for (it=m_d->sender2iddettypeswithprojs.begin();it!=itE;++it) +// used |= it->second; +// m_d->controller->setInDetDetTypesUsingProjections(used); +// } + +// //_____________________________________________________________________________________ +// void VP1GuideLineSystem::possiblyEmit_ApplicableProjectionsChanged() +// { +// ensureBuildController(); +// if (!m_d->controller) +// return;//if receiving signals after uncreate +// InDetProjFlags::InDetProjPartsFlags new_pixel = m_d->controller->applicablePixelProjParts(); +// InDetProjFlags::InDetProjPartsFlags new_sct = m_d->controller->applicableSCTProjParts(); +// InDetProjFlags::InDetProjPartsFlags new_trt = m_d->controller->applicableTRTProjParts(); +// if (m_d->lastemit_pixel==new_pixel&&m_d->lastemit_sct==new_sct&&m_d->lastemit_trt==new_trt) +// return; +// m_d->lastemit_pixel=new_pixel; +// m_d->lastemit_sct=new_sct; +// m_d->lastemit_trt=new_trt; +// if(VP1Msg::verbose()){ +// messageVerbose("Emitting applicableProjectionsChanged("+str(m_d->lastemit_pixel)+", "+str(m_d->lastemit_sct)+", "+str(m_d->lastemit_trt)+")"); +// } +// emit applicableProjectionsChanged( m_d->lastemit_pixel,m_d->lastemit_sct,m_d->lastemit_trt ); +// } diff --git a/graphics/VTI12/VTI12Systems/VTI12WaveformSystems/src/WaveformSysController.cxx b/graphics/VTI12/VTI12Systems/VTI12WaveformSystems/src/WaveformSysController.cxx new file mode 100644 index 00000000..17702c4e --- /dev/null +++ b/graphics/VTI12/VTI12Systems/VTI12WaveformSystems/src/WaveformSysController.cxx @@ -0,0 +1,1130 @@ +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + + +//////////////////////////////////////////////////////////////// +// // +// Implementation of class WaveformSysController // +// // +// Author: Dave Casper (dcasper@uci.edu) // +// Initial version: August 2021 // +// // +//////////////////////////////////////////////////////////////// + +#define VP1IMPVARNAME m_d + +#include "VTI12WaveformSystems/WaveformSysController.h" +#include "ui_waveformcontrollerform.h" +// #include "ui_guidelinescontrollerform.h" +// #include "ui_guides_settings_coordinateaxes_form.h" +// #include "ui_guides_settings_etacones_form.h" +// #include "ui_guides_settings_floorandletters_form.h" +// #include "ui_guides_settings_grid_form.h" +// #include "ui_guides_settings_idprojsurfs_form.h" +// #include "ui_guides_settings_trkvolumes_form.h" +// #include "ui_guides_settings_lines_form.h" +#include "VP1Base/VP1Serialise.h" +#include "VP1Base/VP1Deserialise.h" + +// System of units +#ifdef BUILDVP1LIGHT + #include "GeoModelKernel/Units.h" + #define SYSTEM_OF_UNITS GeoModelKernelUnits // --> 'GeoModelKernelUnits::cm' +#else + #include "GaudiKernel/SystemOfUnits.h" + #define SYSTEM_OF_UNITS Gaudi::Units // --> 'Gaudi::Units::cm' +#endif + +#include <cmath> + +//____________________________________________________________________ +class WaveformSysController::Imp { +public: + WaveformSysController * theclass; + Ui::VP1WaveformControllerForm ui; + + // Ui::VP1GuidesControllerForm ui; + // Ui::VP1GuidesSysSettingsCoordinateAxesForm ui_axes; + // Ui::VP1GuidesSysSettingsEtaConeForm ui_etacones; + // Ui::VP1GuidesSysSettingsFloorAndLettersForm ui_floorandletters; + // Ui::VP1GuidesSysSettingsGridForm ui_grid; + // Ui::VP1GuidesSysSettingsIDProjSurfsForm ui_idprojsurfs; + // Ui::VP1TrackingVolumesForm ui_trkvolumes; + // Ui::VP1LinesForm ui_lines; + + static SbColor4f color4f(const QColor& col, int transp_int) { + return SbColor4f(std::max<float>(0.0f,std::min<float>(1.0f,col.redF())), + std::max<float>(0.0f,std::min<float>(1.0f,col.greenF())), + std::max<float>(0.0f,std::min<float>(1.0f,col.blueF())), + std::max<float>(0.0f,std::min<float>(1.0f,1.0-transp_int/100.0))); + } + + bool last_vetoEnabled; + bool last_triggerEnabled; + bool last_preshowerEnabled; + bool last_calorimeterEnabled; + bool last_clockEnabled; + bool last_testEnabled; + // bool last_showFloor; + // SbColor4f last_floorColourAndTransp; + // double last_floorExtent; + // double last_floorSpacing; + // double last_floorHeight; + // bool last_showLetters; + // double last_lettersZPos; + // double last_lettersVerticalPos; + // bool last_showAxes; + // double last_axesLength; + // SbVec3f last_axesPosition; + // double last_relAxesThickness; + // bool last_showCartesianGrid; + // bool last_showCylindricalGrid; + // SbColor4f last_gridColourAndTransp; + // double last_gridSpacing; + // double last_gridExtent; + // bool last_showEtaCone1; + // bool last_showEtaCone2; + // bool last_showEtaCone3; + // double last_etaConeValue1; + // double last_etaConeValue2; + // double last_etaConeValue3; + // double last_etaExtent; + // bool last_showTrackingVolumes; + // bool last_showInnerDetector; + // bool last_showCalorimeters; + // bool last_showMuonSpectrometer; + // bool last_showLines; + // SbVec3f last_lineDirection; + // double last_line_eta; // This is needed to update the display in possibleChange_lineDirection + +}; + +//____________________________________________________________________ +WaveformSysController::WaveformSysController(IVP1System * sys) + : VP1Controller(sys,"WaveformSysController"), m_d(new Imp) +{ + m_d->theclass = this; + m_d->ui.setupUi(this); + + // initDialog(m_d->ui_axes, m_d->ui.pushButton_settings_coordinateAxes,m_d->ui.checkBox_coordinateAxes); + // initDialog(m_d->ui_etacones, m_d->ui.pushButton_settings_etaCones,m_d->ui.checkBox_etaCones); + // initDialog(m_d->ui_floorandletters, m_d->ui.pushButton_settings_floorAndLetters,m_d->ui.checkBox_floorAndLetters); + // initDialog(m_d->ui_grid, m_d->ui.pushButton_settings_grid,m_d->ui.checkBox_grid); + // initDialog(m_d->ui_idprojsurfs, m_d->ui.pushButton_settings_inDetProjSurfs,m_d->ui.checkBox_inDetProjSurfs); + // initDialog(m_d->ui_trkvolumes, m_d->ui.pushButton_settings_trkVolumes,m_d->ui.checkBox_trkVolumes); + // initDialog(m_d->ui_lines, m_d->ui.pushButton_settings_lines,m_d->ui.checkBox_lines); + + //Hide SCT/Pixel projection surface controls for now: + // m_d->ui_idprojsurfs.groupBox_pixelproj->setVisible(false); + // m_d->ui_idprojsurfs.groupBox_sctproj->setVisible(false); + + //Since we have different logical groups of radio buttons inside + //same groupboxes, we make sure they are coordinated correctly: + + // QButtonGroup * pixelproj_barrel_radiogroup = defineRadioButtonGroup(m_d->ui_idprojsurfs.radioButton_pixelprojsurf_barrel_inner, + // m_d->ui_idprojsurfs.radioButton_pixelprojsurf_barrel_outer, + // m_d->ui_idprojsurfs.radioButton_pixelprojsurf_barrel_both); + // m_d->ui_idprojsurfs.radioButton_pixelprojsurf_barrel_inner->setChecked(true); + // QButtonGroup * pixelproj_endcap_radiogroup = defineRadioButtonGroup(m_d->ui_idprojsurfs.radioButton_pixelprojsurf_endcap_inner, + // m_d->ui_idprojsurfs.radioButton_pixelprojsurf_endcap_outer, + // m_d->ui_idprojsurfs.radioButton_pixelprojsurf_endcap_both); + // m_d->ui_idprojsurfs.radioButton_pixelprojsurf_endcap_inner->setChecked(true); + + + // QButtonGroup * sctproj_barrel_radiogroup = defineRadioButtonGroup(m_d->ui_idprojsurfs.radioButton_sctprojsurf_barrel_inner, + // m_d->ui_idprojsurfs.radioButton_sctprojsurf_barrel_outer, + // m_d->ui_idprojsurfs.radioButton_sctprojsurf_barrel_both); + // m_d->ui_idprojsurfs.radioButton_sctprojsurf_barrel_inner->setChecked(true); + // QButtonGroup * sctproj_endcap_radiogroup = defineRadioButtonGroup(m_d->ui_idprojsurfs.radioButton_sctprojsurf_endcap_inner, + // m_d->ui_idprojsurfs.radioButton_sctprojsurf_endcap_outer, + // m_d->ui_idprojsurfs.radioButton_sctprojsurf_endcap_both); + // m_d->ui_idprojsurfs.radioButton_sctprojsurf_endcap_inner->setChecked(true); + + + // QButtonGroup * trtproj_barrel_radiogroup = defineRadioButtonGroup(m_d->ui_idprojsurfs.radioButton_trtprojsurf_barrel_inner, + // m_d->ui_idprojsurfs.radioButton_trtprojsurf_barrel_outer, + // m_d->ui_idprojsurfs.radioButton_trtprojsurf_barrel_both); + // m_d->ui_idprojsurfs.radioButton_trtprojsurf_barrel_inner->setChecked(true); + // QButtonGroup * trtproj_endcap_radiogroup = defineRadioButtonGroup(m_d->ui_idprojsurfs.radioButton_trtprojsurf_endcap_inner, + // m_d->ui_idprojsurfs.radioButton_trtprojsurf_endcap_outer, + // m_d->ui_idprojsurfs.radioButton_trtprojsurf_endcap_both); + // m_d->ui_idprojsurfs.radioButton_trtprojsurf_endcap_inner->setChecked(true); + + //Setup material buttons: + // m_d->ui_floorandletters.colorButton_floor->setColor(QColor::fromRgbF(0.5,0.5,0.5)); + // m_d->ui_grid.colorButton_grid->setColor(QColor::fromRgbF(1.0,1.0,1.0)); + // m_d->ui_floorandletters.matButton_letters->setMaterial(VP1MaterialButton::createMaterial(0.5,0.5,0.5,0.1)); + // m_d->ui_axes.matButton_axes_x->setMaterial(VP1MaterialButton::createMaterial(1,0,0,0.15)); + // m_d->ui_axes.matButton_axes_y->setMaterial(VP1MaterialButton::createMaterial(0,1,0,0.15)); + // m_d->ui_axes.matButton_axes_z->setMaterial(VP1MaterialButton::createMaterial(0,0,2,0.15)); + // m_d->ui_etacones.matButton_etaCone1->setMaterial(VP1MaterialButton::createMaterial(1,1,0,0.2,0.5)); + // m_d->ui_etacones.matButton_etaCone2->setMaterial(VP1MaterialButton::createMaterial(1,0.56471,0.20784,0.2,0.5)); + // m_d->ui_etacones.matButton_etaCone3->setMaterial(VP1MaterialButton::createMaterial(1,0.15686,0.08235,0.2,0.5)); + // m_d->ui_idprojsurfs.pushButton_projsurfmaterial_pixel->setMaterial(VP1MaterialButton::createMaterial(126/255.0, 194/255.0, 204/255.0,0.05,0.35)); + // m_d->ui_idprojsurfs.pushButton_projsurfmaterial_sct->setMaterial(VP1MaterialButton::createMaterial(126/255.0, 194/255.0, 204/255.0,0.05,0.35)); + // m_d->ui_idprojsurfs.pushButton_projsurfmaterial_trt->setMaterial(VP1MaterialButton::createMaterial(126/255.0, 194/255.0, 204/255.0,0.05,0.35)); + // m_d->ui_trkvolumes.matButton_ID->setMaterial(VP1MaterialButton::createMaterial(1,0,0,0.15)); + // m_d->ui_trkvolumes.matButton_Calo->setMaterial(VP1MaterialButton::createMaterial(0,1,0,0.15)); + // m_d->ui_trkvolumes.matButton_MS->setMaterial(VP1MaterialButton::createMaterial(0,0,2,0.15)); + + ///////////////////////////////////////////////////////////////////////////////////////////////////////////// + // Setup connections which monitor changes in the controller so that we may emit signals as appropriate: // + ///////////////////////////////////////////////////////////////////////////////////////////////////////////// + + // addUpdateSlot(SLOT(possibleChange_showFloor())); + // connectToLastUpdateSlot(m_d->ui.checkBox_floorAndLetters); + // connectToLastUpdateSlot(m_d->ui_floorandletters.checkBox_floorenabled); + + // addUpdateSlot(SLOT(possibleChange_floorColourAndTransp())); + // connectToLastUpdateSlot(m_d->ui_floorandletters.colorButton_floor); + // connectToLastUpdateSlot(m_d->ui_floorandletters.spinBox_floortransp); + + // addUpdateSlot(SLOT(possibleChange_floorExtent())); + // connectToLastUpdateSlot(m_d->ui_floorandletters.doubleSpinBox_floorextent); + + // addUpdateSlot(SLOT(possibleChange_floorSpacing())); + // connectToLastUpdateSlot(m_d->ui_floorandletters.doubleSpinBox_floorspacing); + + // addUpdateSlot(SLOT(possibleChange_floorHeight())); + // connectToLastUpdateSlot(m_d->ui_floorandletters.doubleSpinBox_floorheight); + + // addUpdateSlot(SLOT(possibleChange_showLetters())); + // connectToLastUpdateSlot(m_d->ui.checkBox_floorAndLetters); + // connectToLastUpdateSlot(m_d->ui_floorandletters.checkBox_acdesignations); + + // addUpdateSlot(SLOT(possibleChange_lettersZPos())); + // connectToLastUpdateSlot(this,SIGNAL(floorExtentChanged(const double&))); + // connectToLastUpdateSlot(this,SIGNAL(floorSpacingChanged(const double&))); + + // addUpdateSlot(SLOT(possibleChange_lettersVerticalPos())); + // connectToLastUpdateSlot(this,SIGNAL(floorHeightChanged(const double&))); + + // addUpdateSlot(SLOT(possibleChange_showAxes())); + // connectToLastUpdateSlot(m_d->ui.checkBox_coordinateAxes); + + // addUpdateSlot(SLOT(possibleChange_axesLength())); + // connectToLastUpdateSlot(m_d->ui_axes.checkBox_axes_shownegativeparts); + // connectToLastUpdateSlot(m_d->ui_axes.doubleSpinBox_axes_lengths_m); + + // addUpdateSlot(SLOT(possibleChange_axesPosition())); + // connectToLastUpdateSlot(m_d->ui_axes.doubleSpinBox_axes_xpos_m); + // connectToLastUpdateSlot(m_d->ui_axes.doubleSpinBox_axes_ypos_m); + // connectToLastUpdateSlot(m_d->ui_axes.doubleSpinBox_axes_zpos_m); + + // addUpdateSlot(SLOT(possibleChange_relAxesThickness())); + // connectToLastUpdateSlot(m_d->ui_axes.doubleSpinBox_axes_relthickness); + + // addUpdateSlot(SLOT(possibleChange_showCartesianGrid())); + // connectToLastUpdateSlot(m_d->ui.checkBox_grid); + // connectToLastUpdateSlot(m_d->ui_grid.radioButton_grid_cartesian); + + // addUpdateSlot(SLOT(possibleChange_showCylindricalGrid())); + // connectToLastUpdateSlot(m_d->ui.checkBox_grid); + // connectToLastUpdateSlot(m_d->ui_grid.radioButton_grid_cylindrical); + + // addUpdateSlot(SLOT(possibleChange_gridColourAndTransp())); + // connectToLastUpdateSlot(m_d->ui_grid.colorButton_grid); + // connectToLastUpdateSlot(m_d->ui_grid.spinBox_gridtransp); + + // addUpdateSlot(SLOT(possibleChange_gridSpacing())); + // connectToLastUpdateSlot(m_d->ui_grid.doubleSpinBox_gridspacing); + + // addUpdateSlot(SLOT(possibleChange_gridExtent())); + // connectToLastUpdateSlot(m_d->ui_grid.doubleSpinBox_gridextent); + + // addUpdateSlot(SLOT(possibleChange_showEtaCone1())); + // connectToLastUpdateSlot(m_d->ui.checkBox_etaCones); + // connectToLastUpdateSlot(m_d->ui_etacones.checkBox_etacone1); + + // addUpdateSlot(SLOT(possibleChange_showEtaCone2())); + // connectToLastUpdateSlot(m_d->ui.checkBox_etaCones); + // connectToLastUpdateSlot(m_d->ui_etacones.checkBox_etacone2); + + // addUpdateSlot(SLOT(possibleChange_showEtaCone3())); + // connectToLastUpdateSlot(m_d->ui.checkBox_etaCones); + // connectToLastUpdateSlot(m_d->ui_etacones.checkBox_etacone3); + + // addUpdateSlot(SLOT(possibleChange_etaConeValue1())); + // connectToLastUpdateSlot(m_d->ui_etacones.doubleSpinBox_etaval1); + + // addUpdateSlot(SLOT(possibleChange_etaConeValue2())); + // connectToLastUpdateSlot(m_d->ui_etacones.doubleSpinBox_etaval2); + + // addUpdateSlot(SLOT(possibleChange_etaConeValue3())); + // connectToLastUpdateSlot(m_d->ui_etacones.doubleSpinBox_etaval3); + + // addUpdateSlot(SLOT(possibleChange_etaExtent())); + // connectToLastUpdateSlot(m_d->ui_etacones.doubleSpinBox_etaconeextent); + // connectToLastUpdateSlot(m_d->ui_etacones.radioButton_etaconeextentisr); + + // addUpdateSlot(SLOT(possibleChange_applicablePixelProjParts())); + // connectToLastUpdateSlot(pixelproj_barrel_radiogroup); + // connectToLastUpdateSlot(pixelproj_endcap_radiogroup); + + // addUpdateSlot(SLOT(possibleChange_applicableSCTProjParts())); + // connectToLastUpdateSlot(sctproj_barrel_radiogroup); + // connectToLastUpdateSlot(sctproj_endcap_radiogroup); + + // addUpdateSlot(SLOT(possibleChange_applicableTRTProjParts())); + // connectToLastUpdateSlot(trtproj_barrel_radiogroup); + // connectToLastUpdateSlot(trtproj_endcap_radiogroup); + // connectToLastUpdateSlot(m_d->ui_idprojsurfs.checkBox_trtprojsurf_z2r); + + // addUpdateSlot(SLOT(possibleChange_shownPixelProjSurfaces())); + // connectToLastUpdateSlot(m_d->ui.checkBox_inDetProjSurfs); + // connectToLastUpdateSlot(this,SIGNAL(applicablePixelProjPartsChanged(InDetProjFlags::InDetProjPartsFlags))); + // connectToLastUpdateSlot(m_d->ui_idprojsurfs.groupBox_pixelproj); + // connectToLastUpdateSlot(m_d->ui_idprojsurfs.checkBox_pixelprojsurf_parts_asneeded); + // connectToLastUpdateSlot(m_d->ui_idprojsurfs.checkBox_pixelprojsurf_parts_barrelA); + // connectToLastUpdateSlot(m_d->ui_idprojsurfs.checkBox_pixelprojsurf_parts_barrelC); + // connectToLastUpdateSlot(m_d->ui_idprojsurfs.checkBox_pixelprojsurf_parts_endcapA); + // connectToLastUpdateSlot(m_d->ui_idprojsurfs.checkBox_pixelprojsurf_parts_endcapC); + + // addUpdateSlot(SLOT(possibleChange_shownSCTProjSurfaces())); + // connectToLastUpdateSlot(m_d->ui.checkBox_inDetProjSurfs); + // connectToLastUpdateSlot(this,SIGNAL(applicableSCTProjPartsChanged(InDetProjFlags::InDetProjPartsFlags))); + // connectToLastUpdateSlot(m_d->ui_idprojsurfs.groupBox_sctproj); + // connectToLastUpdateSlot(m_d->ui_idprojsurfs.checkBox_sctprojsurf_parts_asneeded); + // connectToLastUpdateSlot(m_d->ui_idprojsurfs.checkBox_sctprojsurf_parts_barrelA); + // connectToLastUpdateSlot(m_d->ui_idprojsurfs.checkBox_sctprojsurf_parts_barrelC); + // connectToLastUpdateSlot(m_d->ui_idprojsurfs.checkBox_sctprojsurf_parts_endcapA); + // connectToLastUpdateSlot(m_d->ui_idprojsurfs.checkBox_sctprojsurf_parts_endcapC); + + // addUpdateSlot(SLOT(possibleChange_shownTRTProjSurfaces())); + // connectToLastUpdateSlot(m_d->ui.checkBox_inDetProjSurfs); + // connectToLastUpdateSlot(this,SIGNAL(applicableTRTProjPartsChanged(InDetProjFlags::InDetProjPartsFlags))); + // connectToLastUpdateSlot(m_d->ui_idprojsurfs.groupBox_trtproj); + // connectToLastUpdateSlot(m_d->ui_idprojsurfs.checkBox_trtprojsurf_parts_asneeded); + // connectToLastUpdateSlot(m_d->ui_idprojsurfs.checkBox_trtprojsurf_parts_barrelA); + // connectToLastUpdateSlot(m_d->ui_idprojsurfs.checkBox_trtprojsurf_parts_barrelC); + // connectToLastUpdateSlot(m_d->ui_idprojsurfs.checkBox_trtprojsurf_parts_endcapA); + // connectToLastUpdateSlot(m_d->ui_idprojsurfs.checkBox_trtprojsurf_parts_endcapC); + + // addUpdateSlot(SLOT(updateProjPartsCheckboxStates_Pixel())); + // connectToLastUpdateSlot(m_d->ui_idprojsurfs.checkBox_pixelprojsurf_parts_asneeded); + + // addUpdateSlot(SLOT(updateProjPartsCheckboxStates_SCT())); + // connectToLastUpdateSlot(m_d->ui_idprojsurfs.checkBox_sctprojsurf_parts_asneeded); + + // addUpdateSlot(SLOT(updateProjPartsCheckboxStates_TRT())); + // connectToLastUpdateSlot(m_d->ui_idprojsurfs.checkBox_trtprojsurf_parts_asneeded); + + // addUpdateSlot(SLOT(possibleChange_showTrackingVolumes())); + // connectToLastUpdateSlot(m_d->ui.checkBox_trkVolumes); + + // addUpdateSlot(SLOT(possibleChange_showInnerDetector())); + // connectToLastUpdateSlot(m_d->ui_trkvolumes.checkBox_ID); + // addUpdateSlot(SLOT(possibleChange_showCalorimeters())); + // connectToLastUpdateSlot(m_d->ui_trkvolumes.checkBox_Calo); + // addUpdateSlot(SLOT(possibleChange_showMuonSpectrometer())); + // connectToLastUpdateSlot(m_d->ui_trkvolumes.checkBox_MS); + + // addUpdateSlot(SLOT(possibleChange_showLines())); + // connectToLastUpdateSlot(m_d->ui.checkBox_lines); + + // addUpdateSlot(SLOT(possibleChange_lineDirection())); + // connectToLastUpdateSlot(m_d->ui_lines.doubleSpinBox_phi); + // connectToLastUpdateSlot(m_d->ui_lines.doubleSpinBox_theta); + // connectToLastUpdateSlot(m_d->ui_lines.doubleSpinBox_eta); + // connectToLastUpdateSlot(m_d->ui_lines.doubleSpinBox_length); + + addUpdateSlot(SLOT(possibleChange_vetoEnabled())); + connectToLastUpdateSlot(m_d->ui.checkBox_vetoEnabled); + + addUpdateSlot(SLOT(possibleChange_triggerEnabled())); + connectToLastUpdateSlot(m_d->ui.checkBox_triggerEnabled); + + addUpdateSlot(SLOT(possibleChange_preshowerEnabled())); + connectToLastUpdateSlot(m_d->ui.checkBox_preshowerEnabled); + + addUpdateSlot(SLOT(possibleChange_calorimeterEnabled())); + connectToLastUpdateSlot(m_d->ui.checkBox_calorimeterEnabled); + + addUpdateSlot(SLOT(possibleChange_clockEnabled())); + connectToLastUpdateSlot(m_d->ui.checkBox_clockEnabled); + + addUpdateSlot(SLOT(possibleChange_testEnabled())); + connectToLastUpdateSlot(m_d->ui.checkBox_testEnabled); + + initLastVars(); +} + +//____________________________________________________________________ +WaveformSysController::~WaveformSysController() +{ + delete m_d; +} + +//____________________________________________________________________ +//Material access methods: +// SoMaterial * GuideSysController::lettersMaterial() const { return m_d->ui_floorandletters.matButton_letters->handledMaterials().at(0); } +// SoMaterial * GuideSysController::xAxisMaterial() const { return m_d->ui_axes.matButton_axes_x->handledMaterials().at(0); } +// SoMaterial * GuideSysController::yAxisMaterial() const { return m_d->ui_axes.matButton_axes_y->handledMaterials().at(0); } +// SoMaterial * GuideSysController::zAxisMaterial() const { return m_d->ui_axes.matButton_axes_z->handledMaterials().at(0); } +// SoMaterial * GuideSysController::etaCone1Material() const { return m_d->ui_etacones.matButton_etaCone1->handledMaterials().at(0); } +// SoMaterial * GuideSysController::etaCone2Material() const { return m_d->ui_etacones.matButton_etaCone2->handledMaterials().at(0); } +// SoMaterial * GuideSysController::etaCone3Material() const { return m_d->ui_etacones.matButton_etaCone3->handledMaterials().at(0); } +// SoMaterial * GuideSysController::pixelProjSurfMaterial() const { return m_d->ui_idprojsurfs.pushButton_projsurfmaterial_pixel->handledMaterials().at(0); } +// SoMaterial * GuideSysController::sctProjSurfMaterial() const { return m_d->ui_idprojsurfs.pushButton_projsurfmaterial_sct->handledMaterials().at(0); } +// SoMaterial * GuideSysController::trtProjSurfMaterial() const { return m_d->ui_idprojsurfs.pushButton_projsurfmaterial_trt->handledMaterials().at(0); } +// SoMaterial * GuideSysController::idTrkVolumesMaterial() const { return m_d->ui_trkvolumes.matButton_ID->handledMaterials().at(0); } +// SoMaterial * GuideSysController::caloTrkVolumesMaterial() const { return m_d->ui_trkvolumes.matButton_Calo->handledMaterials().at(0); } +// SoMaterial * GuideSysController::msTrkVolumesMaterial() const { return m_d->ui_trkvolumes.matButton_MS->handledMaterials().at(0); } + +//____________________________________________________________________ +bool WaveformSysController::vetoEnabled() const +{ + return m_d->ui.checkBox_vetoEnabled->isChecked(); +} + +bool WaveformSysController::triggerEnabled() const +{ + return m_d->ui.checkBox_triggerEnabled->isChecked(); +} + +bool WaveformSysController::preshowerEnabled() const +{ + return m_d->ui.checkBox_preshowerEnabled->isChecked(); +} + +bool WaveformSysController::calorimeterEnabled() const +{ + return m_d->ui.checkBox_calorimeterEnabled->isChecked(); +} + +bool WaveformSysController::clockEnabled() const +{ + return m_d->ui.checkBox_clockEnabled->isChecked(); +} + +bool WaveformSysController::testEnabled() const +{ + return m_d->ui.checkBox_testEnabled->isChecked(); +} + +// bool GuideSysController::showFloor() const +// { +// return m_d->ui.checkBox_floorAndLetters->isChecked() && +// m_d->ui_floorandletters.checkBox_floorenabled->isChecked(); +// } + +// //____________________________________________________________________ +// SbColor4f GuideSysController::floorColourAndTransp() const +// { +// return Imp::color4f(m_d->ui_floorandletters.colorButton_floor->color(),m_d->ui_floorandletters.spinBox_floortransp->value()); +// } + +// //____________________________________________________________________ +// double GuideSysController::floorExtent() const +// { +// return m_d->ui_floorandletters.doubleSpinBox_floorextent->value()*SYSTEM_OF_UNITS::m; +// } + +// //____________________________________________________________________ +// double GuideSysController::floorSpacing() const +// { +// return m_d->ui_floorandletters.doubleSpinBox_floorspacing->value()*SYSTEM_OF_UNITS::m; +// } + +// //____________________________________________________________________ +// double GuideSysController::floorHeight() const +// { +// return m_d->ui_floorandletters.doubleSpinBox_floorheight->value()*SYSTEM_OF_UNITS::m; +// } + +// //____________________________________________________________________ +// bool GuideSysController::showLetters() const +// { +// return m_d->ui.checkBox_floorAndLetters->isChecked() && +// m_d->ui_floorandletters.checkBox_acdesignations->isChecked(); +// } + +// //____________________________________________________________________ +// double GuideSysController::lettersZPos() const +// { + +// int nmax; double distmax; +// if (!VP1Floor::calcParsFromExtentAndSpacing( (VP1HelperClassBase*)this, floorExtent(), floorSpacing(), VP1Floor::nMax(), nmax, distmax )) { +// nmax = 10; +// distmax = 10*SYSTEM_OF_UNITS::m; +// message("lettersZPos ERROR: Problems calculating floor nmax/distmax."); +// } +// return distmax*1.1; +// } + +// //____________________________________________________________________ +// double GuideSysController::lettersVerticalPos() const +// { +// return floorHeight()+1.5*SYSTEM_OF_UNITS::m; +// } + +// //____________________________________________________________________ +// bool GuideSysController::showAxes() const +// { +// return m_d->ui.checkBox_coordinateAxes->isChecked(); +// } + +// //____________________________________________________________________ +// double GuideSysController::axesLength() const +// { +// return m_d->ui_axes.doubleSpinBox_axes_lengths_m->value()*SYSTEM_OF_UNITS::m * +// (m_d->ui_axes.checkBox_axes_shownegativeparts->isChecked()?-1.0:1.0); +// } + +// //____________________________________________________________________ +// SbVec3f GuideSysController::axesPosition() const +// { +// return SbVec3f(m_d->ui_axes.doubleSpinBox_axes_xpos_m->value()*SYSTEM_OF_UNITS::m, +// m_d->ui_axes.doubleSpinBox_axes_ypos_m->value()*SYSTEM_OF_UNITS::m, +// m_d->ui_axes.doubleSpinBox_axes_zpos_m->value()*SYSTEM_OF_UNITS::m); +// } + +// //____________________________________________________________________ +// double GuideSysController::relAxesThickness() const +// { +// return m_d->ui_axes.doubleSpinBox_axes_relthickness->value(); +// } + +// //____________________________________________________________________ +// bool GuideSysController::showCartesianGrid() const +// { +// return m_d->ui.checkBox_grid->isChecked() && +// m_d->ui_grid.radioButton_grid_cartesian->isChecked(); +// } + +// //____________________________________________________________________ +// bool GuideSysController::showCylindricalGrid() const +// { +// return m_d->ui.checkBox_grid->isChecked() && +// m_d->ui_grid.radioButton_grid_cylindrical->isChecked(); +// } + +// //____________________________________________________________________ +// SbColor4f GuideSysController::gridColourAndTransp() const +// { +// return Imp::color4f(m_d->ui_grid.colorButton_grid->color(),m_d->ui_grid.spinBox_gridtransp->value()); +// } + +// //____________________________________________________________________ +// double GuideSysController::gridSpacing() const +// { +// return m_d->ui_grid.doubleSpinBox_gridspacing->value()*SYSTEM_OF_UNITS::m; +// } + +// //____________________________________________________________________ +// double GuideSysController::gridExtent() const +// { +// return m_d->ui_grid.doubleSpinBox_gridextent->value()*SYSTEM_OF_UNITS::m; +// } + +// //____________________________________________________________________ +// bool GuideSysController::showEtaCone1() const +// { +// return m_d->ui.checkBox_etaCones->isChecked() && +// m_d->ui_etacones.checkBox_etacone1->isChecked(); +// } + +// //____________________________________________________________________ +// bool GuideSysController::showEtaCone2() const +// { +// return m_d->ui.checkBox_etaCones->isChecked() && +// m_d->ui_etacones.checkBox_etacone2->isChecked(); +// } + +// //____________________________________________________________________ +// bool GuideSysController::showEtaCone3() const +// { +// return m_d->ui.checkBox_etaCones->isChecked() && +// m_d->ui_etacones.checkBox_etacone3->isChecked(); +// } + +// //____________________________________________________________________ +// double GuideSysController::etaConeValue1() const +// { +// return std::max(1.0e-5,m_d->ui_etacones.doubleSpinBox_etaval1->value()); +// } + +// //____________________________________________________________________ +// double GuideSysController::etaConeValue2() const +// { +// return std::max(1.0e-5,m_d->ui_etacones.doubleSpinBox_etaval2->value()); +// } + +// //____________________________________________________________________ +// double GuideSysController::etaConeValue3() const +// { +// return std::max(1.0e-5,m_d->ui_etacones.doubleSpinBox_etaval3->value()); +// } + +// //____________________________________________________________________ +// double GuideSysController::etaExtent() const +// { +// return m_d->ui_etacones.doubleSpinBox_etaconeextent->value() * SYSTEM_OF_UNITS::m +// * (m_d->ui_etacones.radioButton_etaconeextentisr->isChecked() ? 1.0 : -1.0); +// } + +// //____________________________________________________________________ +// bool GuideSysController::showLines() const +// { +// return m_d->ui.checkBox_lines->isChecked(); +// } + + +// //____________________________________________________________________ +// SbVec3f GuideSysController::lineDirection() const +// { +// double r = lineLength(); +// double phi = m_d->ui_lines.doubleSpinBox_phi->value(); +// double theta = m_d->ui_lines.doubleSpinBox_theta->value(); +// SbVec3f direction(r*sin(theta)*cos(phi),r*sin(theta)*sin(phi), r*cos(theta)); +// return direction; +// } + +// //____________________________________________________________________ +// double GuideSysController::lineLength() const +// { +// return m_d->ui_lines.doubleSpinBox_length->value() * SYSTEM_OF_UNITS::m; +// } + +// //_____________________________________________________________________________________ +// InDetProjFlags::InDetProjPartsFlags GuideSysController::Imp::projPartsFlag( bool barrelinner, bool barrelouter, +// bool endcapinner, bool endcapouter, +// bool endcap_hidenormalcyls_when_zasr, +// bool endcap_zasr ) +// { +// InDetProjFlags::InDetProjPartsFlags parts(InDetProjFlags::NoProjections); +// //Given the general parts needed, what specific surfaces do we need: +// if ( barrelinner ) +// parts |= InDetProjFlags::BarrelCentral; +// if ( barrelouter ) { +// parts |= InDetProjFlags::BarrelPositive; +// parts |= InDetProjFlags::BarrelNegative; +// } + +// if ( !( endcap_zasr && endcap_hidenormalcyls_when_zasr ) ) { +// if ( endcapinner ) { +// //Inner: +// parts |= InDetProjFlags::EndCapInnerPositive; +// parts |= InDetProjFlags::EndCapInnerNegative; +// } +// if ( endcapouter ) { +// //Outer: +// parts |= InDetProjFlags::EndCapOuterPositive; +// parts |= InDetProjFlags::EndCapOuterNegative; +// } +// } +// //Special ZasR surfaces for the endcaps, placed in the barrel positions: +// if (endcap_zasr) { +// if ( barrelinner ) +// parts |= InDetProjFlags::TRT_EndCapZToRCentral; +// if ( barrelouter ) { +// parts |= InDetProjFlags::TRT_EndCapZToRPositive; +// parts |= InDetProjFlags::TRT_EndCapZToRNegative; +// } +// } +// return parts; +// } + +// //____________________________________________________________________ +// InDetProjFlags::InDetProjPartsFlags GuideSysController::applicablePixelProjParts() const +// { +// return Imp::projPartsFlag( m_d->ui_idprojsurfs.radioButton_pixelprojsurf_barrel_inner->isChecked() || m_d->ui_idprojsurfs.radioButton_pixelprojsurf_barrel_both->isChecked(), +// m_d->ui_idprojsurfs.radioButton_pixelprojsurf_barrel_outer->isChecked() || m_d->ui_idprojsurfs.radioButton_pixelprojsurf_barrel_both->isChecked(), +// m_d->ui_idprojsurfs.radioButton_pixelprojsurf_endcap_inner->isChecked() || m_d->ui_idprojsurfs.radioButton_pixelprojsurf_endcap_both->isChecked(), +// m_d->ui_idprojsurfs.radioButton_pixelprojsurf_endcap_outer->isChecked() || m_d->ui_idprojsurfs.radioButton_pixelprojsurf_endcap_both->isChecked() ); +// } + +// //____________________________________________________________________ +// InDetProjFlags::InDetProjPartsFlags GuideSysController::applicableSCTProjParts() const +// { +// return Imp::projPartsFlag( m_d->ui_idprojsurfs.radioButton_sctprojsurf_barrel_inner->isChecked() || m_d->ui_idprojsurfs.radioButton_sctprojsurf_barrel_both->isChecked(), +// m_d->ui_idprojsurfs.radioButton_sctprojsurf_barrel_outer->isChecked() || m_d->ui_idprojsurfs.radioButton_sctprojsurf_barrel_both->isChecked(), +// m_d->ui_idprojsurfs.radioButton_sctprojsurf_endcap_inner->isChecked() || m_d->ui_idprojsurfs.radioButton_sctprojsurf_endcap_both->isChecked(), +// m_d->ui_idprojsurfs.radioButton_sctprojsurf_endcap_outer->isChecked() || m_d->ui_idprojsurfs.radioButton_sctprojsurf_endcap_both->isChecked() ); +// } + +// //____________________________________________________________________ +// InDetProjFlags::InDetProjPartsFlags GuideSysController::applicableTRTProjParts() const +// { +// return Imp::projPartsFlag( m_d->ui_idprojsurfs.radioButton_trtprojsurf_barrel_inner->isChecked() || m_d->ui_idprojsurfs.radioButton_trtprojsurf_barrel_both->isChecked(), +// m_d->ui_idprojsurfs.radioButton_trtprojsurf_barrel_outer->isChecked() || m_d->ui_idprojsurfs.radioButton_trtprojsurf_barrel_both->isChecked(), +// m_d->ui_idprojsurfs.radioButton_trtprojsurf_endcap_inner->isChecked() || m_d->ui_idprojsurfs.radioButton_trtprojsurf_endcap_both->isChecked(), +// m_d->ui_idprojsurfs.radioButton_trtprojsurf_endcap_outer->isChecked() || m_d->ui_idprojsurfs.radioButton_trtprojsurf_endcap_both->isChecked(), +// true, m_d->ui_idprojsurfs.checkBox_trtprojsurf_z2r->isChecked() ); +// } + +// //_____________________________________________________________________________________ +// InDetProjFlags::DetTypeFlags GuideSysController::Imp::trtPartsEnabledByGUIOrDataUsage() const +// { +// InDetProjFlags::DetTypeFlags f(InDetProjFlags::NoDet); +// if (ui_idprojsurfs.groupBox_trtproj->isChecked()) { +// if (ui_idprojsurfs.checkBox_trtprojsurf_parts_asneeded->isChecked()) { +// f |= (inDetDetTypesUsingProjections&InDetProjFlags::TRT_all); +// } else { +// if (ui_idprojsurfs.checkBox_trtprojsurf_parts_barrelA->isChecked()) f |= InDetProjFlags::TRT_brlpos; +// if (ui_idprojsurfs.checkBox_trtprojsurf_parts_barrelC->isChecked()) f |= InDetProjFlags::TRT_brlneg; +// if (ui_idprojsurfs.checkBox_trtprojsurf_parts_endcapA->isChecked()) f |= InDetProjFlags::TRT_ecpos; +// if (ui_idprojsurfs.checkBox_trtprojsurf_parts_endcapC->isChecked()) f |= InDetProjFlags::TRT_ecneg; +// } +// } +// return f; +// } + +// //_____________________________________________________________________________________ +// InDetProjFlags::DetTypeFlags GuideSysController::Imp::sctPartsEnabledByGUIOrDataUsage() const +// { +// InDetProjFlags::DetTypeFlags f(InDetProjFlags::NoDet); +// if (ui_idprojsurfs.groupBox_sctproj->isChecked()) { +// if (ui_idprojsurfs.checkBox_sctprojsurf_parts_asneeded->isChecked()) { +// f |= (inDetDetTypesUsingProjections&InDetProjFlags::SCT_all); +// } else { +// if (ui_idprojsurfs.checkBox_sctprojsurf_parts_barrelA->isChecked()) f |= InDetProjFlags::SCT_brlpos; +// if (ui_idprojsurfs.checkBox_sctprojsurf_parts_barrelC->isChecked()) f |= InDetProjFlags::SCT_brlneg; +// if (ui_idprojsurfs.checkBox_sctprojsurf_parts_endcapA->isChecked()) f |= InDetProjFlags::SCT_ecpos; +// if (ui_idprojsurfs.checkBox_sctprojsurf_parts_endcapC->isChecked()) f |= InDetProjFlags::SCT_ecneg; +// } +// } +// return f; +// } + +// //_____________________________________________________________________________________ +// InDetProjFlags::DetTypeFlags GuideSysController::Imp::pixelPartsEnabledByGUIOrDataUsage() const +// { +// InDetProjFlags::DetTypeFlags f(InDetProjFlags::NoDet); +// if (ui_idprojsurfs.groupBox_pixelproj->isChecked()) { +// if (ui_idprojsurfs.checkBox_pixelprojsurf_parts_asneeded->isChecked()) { +// f |= (inDetDetTypesUsingProjections&InDetProjFlags::Pixel_all); +// } else { +// if (ui_idprojsurfs.checkBox_pixelprojsurf_parts_barrelA->isChecked()) f |= InDetProjFlags::Pixel_brlpos; +// if (ui_idprojsurfs.checkBox_pixelprojsurf_parts_barrelC->isChecked()) f |= InDetProjFlags::Pixel_brlneg; +// if (ui_idprojsurfs.checkBox_pixelprojsurf_parts_endcapA->isChecked()) f |= InDetProjFlags::Pixel_ecpos; +// if (ui_idprojsurfs.checkBox_pixelprojsurf_parts_endcapC->isChecked()) f |= InDetProjFlags::Pixel_ecneg; +// } +// } +// return f; +// } + +// //____________________________________________________________________ +// InDetProjFlags::InDetProjPartsFlags GuideSysController::shownPixelProjSurfaces() const +// { +// InDetProjFlags::DetTypeFlags enabledDetRegions = m_d->pixelPartsEnabledByGUIOrDataUsage(); +// if (!(InDetProjFlags::Pixel_all&enabledDetRegions)||!m_d->ui.checkBox_inDetProjSurfs->isChecked()) +// return InDetProjFlags::NoProjections; +// InDetProjFlags::InDetProjPartsFlags pixelProjParts(applicablePixelProjParts()); +// if (pixelProjParts==InDetProjFlags::NoProjections) +// return InDetProjFlags::NoProjections; +// InDetProjFlags::InDetProjPartsFlags dummy_sct(InDetProjFlags::NoProjections), dummy_trt(InDetProjFlags::NoProjections); +// InDetProjFlags::projectionPartsGivenUsedDetectors( pixelProjParts, dummy_sct, dummy_trt, enabledDetRegions ); +// return pixelProjParts; +// } + +// //____________________________________________________________________ +// InDetProjFlags::InDetProjPartsFlags GuideSysController::shownSCTProjSurfaces() const +// { +// InDetProjFlags::DetTypeFlags enabledDetRegions = m_d->sctPartsEnabledByGUIOrDataUsage(); +// if (!(InDetProjFlags::SCT_all&enabledDetRegions)||!m_d->ui.checkBox_inDetProjSurfs->isChecked()) +// return InDetProjFlags::NoProjections; +// InDetProjFlags::InDetProjPartsFlags sctProjParts(applicableSCTProjParts()); +// if (sctProjParts==InDetProjFlags::NoProjections) +// return InDetProjFlags::NoProjections; +// InDetProjFlags::InDetProjPartsFlags dummy_pixel(InDetProjFlags::NoProjections), dummy_trt(InDetProjFlags::NoProjections); +// InDetProjFlags::projectionPartsGivenUsedDetectors( dummy_pixel, sctProjParts, dummy_trt, enabledDetRegions ); +// return sctProjParts; +// } + +// //____________________________________________________________________ +// InDetProjFlags::InDetProjPartsFlags GuideSysController::shownTRTProjSurfaces() const +// { +// InDetProjFlags::DetTypeFlags enabledDetRegions = m_d->trtPartsEnabledByGUIOrDataUsage(); +// if (!(InDetProjFlags::TRT_all&enabledDetRegions)||!m_d->ui.checkBox_inDetProjSurfs->isChecked()) +// return InDetProjFlags::NoProjections; +// InDetProjFlags::InDetProjPartsFlags trtProjParts(applicableTRTProjParts()); +// if (trtProjParts==InDetProjFlags::NoProjections) +// return InDetProjFlags::NoProjections; +// InDetProjFlags::InDetProjPartsFlags dummy_pixel(InDetProjFlags::NoProjections), dummy_sct(InDetProjFlags::NoProjections); +// InDetProjFlags::projectionPartsGivenUsedDetectors( dummy_pixel, dummy_sct, trtProjParts,enabledDetRegions ); +// return trtProjParts; +// } + +// //____________________________________________________________________ +// void GuideSysController::setInDetDetTypesUsingProjections(InDetProjFlags::DetTypeFlags f) +// { +// if (m_d->inDetDetTypesUsingProjections==f) +// return; +// m_d->inDetDetTypesUsingProjections=f; +// possibleChange_shownPixelProjSurfaces(); +// possibleChange_shownSCTProjSurfaces(); +// possibleChange_shownTRTProjSurfaces(); +// } + +// //____________________________________________________________________ +// void GuideSysController::updateProjPartsCheckboxStates_Pixel() +// { +// const bool e(!m_d->ui_idprojsurfs.checkBox_pixelprojsurf_parts_asneeded->isChecked()); +// m_d->ui_idprojsurfs.checkBox_pixelprojsurf_parts_barrelA->setEnabled(e); +// m_d->ui_idprojsurfs.checkBox_pixelprojsurf_parts_barrelC->setEnabled(e); +// m_d->ui_idprojsurfs.checkBox_pixelprojsurf_parts_endcapA->setEnabled(e); +// m_d->ui_idprojsurfs.checkBox_pixelprojsurf_parts_endcapC->setEnabled(e); +// } + +// //____________________________________________________________________ +// void GuideSysController::updateProjPartsCheckboxStates_SCT() +// { +// const bool e(!m_d->ui_idprojsurfs.checkBox_sctprojsurf_parts_asneeded->isChecked()); +// m_d->ui_idprojsurfs.checkBox_sctprojsurf_parts_barrelA->setEnabled(e); +// m_d->ui_idprojsurfs.checkBox_sctprojsurf_parts_barrelC->setEnabled(e); +// m_d->ui_idprojsurfs.checkBox_sctprojsurf_parts_endcapA->setEnabled(e); +// m_d->ui_idprojsurfs.checkBox_sctprojsurf_parts_endcapC->setEnabled(e); +// } + +// //____________________________________________________________________ +// void GuideSysController::updateProjPartsCheckboxStates_TRT() +// { +// const bool e(!m_d->ui_idprojsurfs.checkBox_trtprojsurf_parts_asneeded->isChecked()); +// m_d->ui_idprojsurfs.checkBox_trtprojsurf_parts_barrelA->setEnabled(e); +// m_d->ui_idprojsurfs.checkBox_trtprojsurf_parts_barrelC->setEnabled(e); +// m_d->ui_idprojsurfs.checkBox_trtprojsurf_parts_endcapA->setEnabled(e); +// m_d->ui_idprojsurfs.checkBox_trtprojsurf_parts_endcapC->setEnabled(e); +// } + +// bool GuideSysController::showTrackingVolumes() const +// { +// return m_d->ui.checkBox_trkVolumes->isChecked(); +// } + +// bool GuideSysController::showInnerDetector() const +// { +// return m_d->ui_trkvolumes.checkBox_ID->isChecked(); +// } + +// bool GuideSysController::showCalorimeters() const +// { +// return m_d->ui_trkvolumes.checkBox_Calo->isChecked(); +// } + +// bool GuideSysController::showMuonSpectrometer() const +// { +// return m_d->ui_trkvolumes.checkBox_MS->isChecked(); +// } + +//____________________________________________________________________ +int WaveformSysController::currentSettingsVersion() const +{ + return 0; +} + +//____________________________________________________________________ +void WaveformSysController::actualSaveSettings(VP1Serialise&s) const +{ + + s.save(m_d->ui.checkBox_vetoEnabled); + s.save(m_d->ui.checkBox_triggerEnabled); + s.save(m_d->ui.checkBox_preshowerEnabled); + s.save(m_d->ui.checkBox_calorimeterEnabled); + s.save(m_d->ui.checkBox_clockEnabled); + s.save(m_d->ui.checkBox_testEnabled); + + //Materials + // s.save(m_d->ui_floorandletters.matButton_letters); + // s.save(m_d->ui_axes.matButton_axes_x); + // s.save(m_d->ui_axes.matButton_axes_y); + // s.save(m_d->ui_axes.matButton_axes_z); + // s.save(m_d->ui_etacones.matButton_etaCone1); + // s.save(m_d->ui_etacones.matButton_etaCone2); + // s.save(m_d->ui_etacones.matButton_etaCone3); + // s.save(m_d->ui_idprojsurfs.pushButton_projsurfmaterial_pixel); + // s.save(m_d->ui_idprojsurfs.pushButton_projsurfmaterial_sct); + // s.save(m_d->ui_idprojsurfs.pushButton_projsurfmaterial_trt); + + // //Everything apart from projection surfaces: + // s.save(m_d->ui_grid.colorButton_grid); + // s.save(m_d->ui_grid.spinBox_gridtransp); + // s.save(m_d->ui_floorandletters.colorButton_floor); + // s.save(m_d->ui_floorandletters.spinBox_floortransp); + // s.save(m_d->ui_floorandletters.doubleSpinBox_floorheight); + // s.save(m_d->ui_floorandletters.checkBox_floorenabled); + // s.save(m_d->ui_floorandletters.doubleSpinBox_floorspacing); + // s.save(m_d->ui_floorandletters.doubleSpinBox_floorextent); + // s.save(m_d->ui_floorandletters.checkBox_acdesignations); + // //Version 0 output bool here + // s.save(m_d->ui_axes.checkBox_axes_shownegativeparts); + // s.save(m_d->ui_axes.doubleSpinBox_axes_lengths_m); + // s.save(m_d->ui_axes.doubleSpinBox_axes_relthickness); + // s.save(m_d->ui_axes.doubleSpinBox_axes_xpos_m); + // s.save(m_d->ui_axes.doubleSpinBox_axes_ypos_m); + // s.save(m_d->ui_axes.doubleSpinBox_axes_zpos_m); + // s.save(0/*backwards compat*/,m_d->ui_grid.radioButton_grid_cartesian,m_d->ui_grid.radioButton_grid_cylindrical); + // s.save(m_d->ui_grid.doubleSpinBox_gridspacing); + // s.save(m_d->ui_grid.doubleSpinBox_gridextent); + // s.save(m_d->ui_etacones.checkBox_etacone1); + // s.save(m_d->ui_etacones.doubleSpinBox_etaval1); + // s.save(m_d->ui_etacones.checkBox_etacone2); + // s.save(m_d->ui_etacones.doubleSpinBox_etaval2); + // s.save(m_d->ui_etacones.checkBox_etacone3); + // s.save(m_d->ui_etacones.doubleSpinBox_etaval3); + // s.save(m_d->ui_etacones.doubleSpinBox_etaconeextent); + // s.save(m_d->ui_etacones.radioButton_etaconeextentisr,m_d->ui_etacones.radioButton_etaconeextentisz); + + // //Projection surfaces: + + // s.save(m_d->ui_idprojsurfs.groupBox_pixelproj); + // s.save(m_d->ui_idprojsurfs.checkBox_pixelprojsurf_parts_asneeded); + // s.save(m_d->ui_idprojsurfs.checkBox_pixelprojsurf_parts_barrelA); + // s.save(m_d->ui_idprojsurfs.checkBox_pixelprojsurf_parts_barrelC); + // s.save(m_d->ui_idprojsurfs.checkBox_pixelprojsurf_parts_endcapA); + // s.save(m_d->ui_idprojsurfs.checkBox_pixelprojsurf_parts_endcapC); + // s.save(m_d->ui_idprojsurfs.radioButton_pixelprojsurf_barrel_inner, + // m_d->ui_idprojsurfs.radioButton_pixelprojsurf_barrel_outer, + // m_d->ui_idprojsurfs.radioButton_pixelprojsurf_barrel_both); + // s.save(m_d->ui_idprojsurfs.radioButton_pixelprojsurf_endcap_inner, + // m_d->ui_idprojsurfs.radioButton_pixelprojsurf_endcap_outer, + // m_d->ui_idprojsurfs.radioButton_pixelprojsurf_endcap_both); + // s.save(m_d->ui_idprojsurfs.groupBox_sctproj); + // s.save(m_d->ui_idprojsurfs.checkBox_sctprojsurf_parts_asneeded); + // s.save(m_d->ui_idprojsurfs.checkBox_sctprojsurf_parts_barrelA); + // s.save(m_d->ui_idprojsurfs.checkBox_sctprojsurf_parts_barrelC); + // s.save(m_d->ui_idprojsurfs.checkBox_sctprojsurf_parts_endcapA); + // s.save(m_d->ui_idprojsurfs.checkBox_sctprojsurf_parts_endcapC); + // s.save(m_d->ui_idprojsurfs.radioButton_sctprojsurf_barrel_inner, + // m_d->ui_idprojsurfs.radioButton_sctprojsurf_barrel_outer, + // m_d->ui_idprojsurfs.radioButton_sctprojsurf_barrel_both); + // s.save(m_d->ui_idprojsurfs.radioButton_sctprojsurf_endcap_inner, + // m_d->ui_idprojsurfs.radioButton_sctprojsurf_endcap_outer, + // m_d->ui_idprojsurfs.radioButton_sctprojsurf_endcap_both); + // s.save(m_d->ui_idprojsurfs.groupBox_trtproj); + // s.save(m_d->ui_idprojsurfs.checkBox_trtprojsurf_parts_asneeded); + // s.save(m_d->ui_idprojsurfs.checkBox_trtprojsurf_parts_barrelA); + // s.save(m_d->ui_idprojsurfs.checkBox_trtprojsurf_parts_barrelC); + // s.save(m_d->ui_idprojsurfs.checkBox_trtprojsurf_parts_endcapA); + // s.save(m_d->ui_idprojsurfs.checkBox_trtprojsurf_parts_endcapC); + // s.save(m_d->ui_idprojsurfs.radioButton_trtprojsurf_barrel_inner, + // m_d->ui_idprojsurfs.radioButton_trtprojsurf_barrel_outer, + // m_d->ui_idprojsurfs.radioButton_trtprojsurf_barrel_both); + // s.save(m_d->ui_idprojsurfs.radioButton_trtprojsurf_endcap_inner, + // m_d->ui_idprojsurfs.radioButton_trtprojsurf_endcap_outer, + // m_d->ui_idprojsurfs.radioButton_trtprojsurf_endcap_both); + // s.save(m_d->ui_idprojsurfs.checkBox_trtprojsurf_z2r); + + // s.save(m_d->ui.checkBox_coordinateAxes);//version 1+ + // s.save(m_d->ui.checkBox_etaCones); + // s.save(m_d->ui.checkBox_floorAndLetters);//version 1+ + // s.save(m_d->ui.checkBox_grid);//version 1+ + // s.save(m_d->ui.checkBox_inDetProjSurfs);//version 1+ + + // //Tracking volumes: + // // All version 2+ + // s.save(m_d->ui.checkBox_trkVolumes); + + // //material + // s.save(m_d->ui_trkvolumes.matButton_ID); + // s.save(m_d->ui_trkvolumes.matButton_Calo); + // s.save(m_d->ui_trkvolumes.matButton_MS); + // s.save(m_d->ui_trkvolumes.checkBox_ID); + // s.save(m_d->ui_trkvolumes.checkBox_Calo); + // s.save(m_d->ui_trkvolumes.checkBox_MS); + + // // Line from origin + // s.save(m_d->ui.checkBox_lines); + // s.save(m_d->ui_lines.doubleSpinBox_phi); + // s.save(m_d->ui_lines.doubleSpinBox_phi); + // s.save(m_d->ui_lines.doubleSpinBox_eta); + // s.save(m_d->ui_lines.doubleSpinBox_length); +} + +//____________________________________________________________________ +void WaveformSysController::actualRestoreSettings(VP1Deserialise& s) +{ + if (s.version() != 0) { + message("Warning: State data in .vp1 file has unsupported version ("+str(s.version())+")"); + return; + } + + s.restore(m_d->ui.checkBox_vetoEnabled); + s.restore(m_d->ui.checkBox_triggerEnabled); + s.restore(m_d->ui.checkBox_preshowerEnabled); + s.restore(m_d->ui.checkBox_calorimeterEnabled); + s.restore(m_d->ui.checkBox_clockEnabled); + s.restore(m_d->ui.checkBox_testEnabled); + + // if (s.version()==0) + // s.ignoreInt(); + + // //Materials + // s.restore(m_d->ui_floorandletters.matButton_letters); + // s.restore(m_d->ui_axes.matButton_axes_x); + // s.restore(m_d->ui_axes.matButton_axes_y); + // s.restore(m_d->ui_axes.matButton_axes_z); + // s.restore(m_d->ui_etacones.matButton_etaCone1); + // s.restore(m_d->ui_etacones.matButton_etaCone2); + // s.restore(m_d->ui_etacones.matButton_etaCone3); + // s.restore(m_d->ui_idprojsurfs.pushButton_projsurfmaterial_pixel); + // s.restore(m_d->ui_idprojsurfs.pushButton_projsurfmaterial_sct); + // s.restore(m_d->ui_idprojsurfs.pushButton_projsurfmaterial_trt); + + + // //Everything apart from projection surfaces: + // s.restore(m_d->ui_grid.colorButton_grid); + // s.restore(m_d->ui_grid.spinBox_gridtransp); + // s.restore(m_d->ui_floorandletters.colorButton_floor); + // s.restore(m_d->ui_floorandletters.spinBox_floortransp); + // s.restore(m_d->ui_floorandletters.doubleSpinBox_floorheight); + // s.restore(m_d->ui_floorandletters.checkBox_floorenabled); + // s.restore(m_d->ui_floorandletters.doubleSpinBox_floorspacing); + // s.restore(m_d->ui_floorandletters.doubleSpinBox_floorextent); + // s.restore(m_d->ui_floorandletters.checkBox_acdesignations); + // if (s.version()==0) + // s.ignoreBool(); + // s.restore(m_d->ui_axes.checkBox_axes_shownegativeparts); + // s.restore(m_d->ui_axes.doubleSpinBox_axes_lengths_m); + // s.restore(m_d->ui_axes.doubleSpinBox_axes_relthickness); + // s.restore(m_d->ui_axes.doubleSpinBox_axes_xpos_m); + // s.restore(m_d->ui_axes.doubleSpinBox_axes_ypos_m); + // s.restore(m_d->ui_axes.doubleSpinBox_axes_zpos_m); + // s.restore(0/*backwards compat*/,m_d->ui_grid.radioButton_grid_cartesian,m_d->ui_grid.radioButton_grid_cylindrical); + // s.restore(m_d->ui_grid.doubleSpinBox_gridspacing); + // s.restore(m_d->ui_grid.doubleSpinBox_gridextent); + // s.restore(m_d->ui_etacones.checkBox_etacone1); + // s.restore(m_d->ui_etacones.doubleSpinBox_etaval1); + // s.restore(m_d->ui_etacones.checkBox_etacone2); + // s.restore(m_d->ui_etacones.doubleSpinBox_etaval2); + // s.restore(m_d->ui_etacones.checkBox_etacone3); + // s.restore(m_d->ui_etacones.doubleSpinBox_etaval3); + // s.restore(m_d->ui_etacones.doubleSpinBox_etaconeextent); + // s.restore(m_d->ui_etacones.radioButton_etaconeextentisr,m_d->ui_etacones.radioButton_etaconeextentisz); + + // //Projection surfaces: + + // s.restore(m_d->ui_idprojsurfs.groupBox_pixelproj); + // s.restore(m_d->ui_idprojsurfs.checkBox_pixelprojsurf_parts_asneeded); + // s.restore(m_d->ui_idprojsurfs.checkBox_pixelprojsurf_parts_barrelA); + // s.restore(m_d->ui_idprojsurfs.checkBox_pixelprojsurf_parts_barrelC); + // s.restore(m_d->ui_idprojsurfs.checkBox_pixelprojsurf_parts_endcapA); + // s.restore(m_d->ui_idprojsurfs.checkBox_pixelprojsurf_parts_endcapC); + // s.restore(m_d->ui_idprojsurfs.radioButton_pixelprojsurf_barrel_inner, + // m_d->ui_idprojsurfs.radioButton_pixelprojsurf_barrel_outer, + // m_d->ui_idprojsurfs.radioButton_pixelprojsurf_barrel_both); + // s.restore(m_d->ui_idprojsurfs.radioButton_pixelprojsurf_endcap_inner, + // m_d->ui_idprojsurfs.radioButton_pixelprojsurf_endcap_outer, + // m_d->ui_idprojsurfs.radioButton_pixelprojsurf_endcap_both); + // s.restore(m_d->ui_idprojsurfs.groupBox_sctproj); + // s.restore(m_d->ui_idprojsurfs.checkBox_sctprojsurf_parts_asneeded); + // s.restore(m_d->ui_idprojsurfs.checkBox_sctprojsurf_parts_barrelA); + // s.restore(m_d->ui_idprojsurfs.checkBox_sctprojsurf_parts_barrelC); + // s.restore(m_d->ui_idprojsurfs.checkBox_sctprojsurf_parts_endcapA); + // s.restore(m_d->ui_idprojsurfs.checkBox_sctprojsurf_parts_endcapC); + // s.restore(m_d->ui_idprojsurfs.radioButton_sctprojsurf_barrel_inner, + // m_d->ui_idprojsurfs.radioButton_sctprojsurf_barrel_outer, + // m_d->ui_idprojsurfs.radioButton_sctprojsurf_barrel_both); + // s.restore(m_d->ui_idprojsurfs.radioButton_sctprojsurf_endcap_inner, + // m_d->ui_idprojsurfs.radioButton_sctprojsurf_endcap_outer, + // m_d->ui_idprojsurfs.radioButton_sctprojsurf_endcap_both); + // s.restore(m_d->ui_idprojsurfs.groupBox_trtproj); + // s.restore(m_d->ui_idprojsurfs.checkBox_trtprojsurf_parts_asneeded); + // s.restore(m_d->ui_idprojsurfs.checkBox_trtprojsurf_parts_barrelA); + // s.restore(m_d->ui_idprojsurfs.checkBox_trtprojsurf_parts_barrelC); + // s.restore(m_d->ui_idprojsurfs.checkBox_trtprojsurf_parts_endcapA); + // s.restore(m_d->ui_idprojsurfs.checkBox_trtprojsurf_parts_endcapC); + // s.restore(m_d->ui_idprojsurfs.radioButton_trtprojsurf_barrel_inner, + // m_d->ui_idprojsurfs.radioButton_trtprojsurf_barrel_outer, + // m_d->ui_idprojsurfs.radioButton_trtprojsurf_barrel_both); + // s.restore(m_d->ui_idprojsurfs.radioButton_trtprojsurf_endcap_inner, + // m_d->ui_idprojsurfs.radioButton_trtprojsurf_endcap_outer, + // m_d->ui_idprojsurfs.radioButton_trtprojsurf_endcap_both); + // s.restore(m_d->ui_idprojsurfs.checkBox_trtprojsurf_z2r); + + // if (s.version()>=1) { + // s.restore(m_d->ui.checkBox_coordinateAxes); + // s.restore(m_d->ui.checkBox_etaCones); + // s.restore(m_d->ui.checkBox_floorAndLetters); + // s.restore(m_d->ui.checkBox_grid); + // s.restore(m_d->ui.checkBox_inDetProjSurfs); + // } + + // if (s.version()>=2) { + // s.restore(m_d->ui.checkBox_trkVolumes); + // s.restore(m_d->ui_trkvolumes.matButton_ID); + // s.restore(m_d->ui_trkvolumes.matButton_Calo); + // s.restore(m_d->ui_trkvolumes.matButton_MS); + // s.restore(m_d->ui_trkvolumes.checkBox_ID); + // s.restore(m_d->ui_trkvolumes.checkBox_Calo); + // s.restore(m_d->ui_trkvolumes.checkBox_MS); + // } + // if (s.version()>=3) { + // s.restore(m_d->ui.checkBox_lines); + // s.restore(m_d->ui_lines.doubleSpinBox_phi); + // s.restore(m_d->ui_lines.doubleSpinBox_phi); + // s.restore(m_d->ui_lines.doubleSpinBox_eta); + // s.restore(m_d->ui_lines.doubleSpinBox_length); + // } +} + +// void GuideSysController::possibleChange_lineDirection() { +// // 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 +// double eta = m_d->ui_lines.doubleSpinBox_eta->value(); +// double theta = m_d->ui_lines.doubleSpinBox_theta->value(); + +// if (m_d->last_line_eta != eta){ +// // eta has changed, so update theta in the UI +// theta = 2*std::atan(std::exp(-1.0 * eta)); +// m_d->ui_lines.doubleSpinBox_theta->setValue(theta); +// } else if ( theta!= std::acos(m_d->last_lineDirection[2] / lineLength() ) ){ +// eta = -1.0 * std::log(std::tan(theta/2.0)); +// m_d->ui_lines.doubleSpinBox_eta->setValue(eta); +// } +// m_d->last_line_eta = m_d->ui_lines.doubleSpinBox_eta->value(); +// if (changed( m_d->last_lineDirection , lineDirection() ) ) { +// if (verbose()&&!initVarsMode()) messageVerbose("Emitting "+QString()+"( lineDirectionChanged"+toString(m_d->last_lineDirection)+" )"); +// emit lineDirectionChanged(m_d->last_lineDirection); +// } +// } + + +/////////////////////////////////////////////////////////////////////////// +// Test for possible changes in values and emit signals as appropriate: +// (possibleChange_XXX() slots code provided by macros) +#define VP1CONTROLLERCLASSNAME WaveformSysController +#include "VP1Base/VP1ControllerMacros.h" +POSSIBLECHANGE_IMP(vetoEnabled) +POSSIBLECHANGE_IMP(triggerEnabled) +POSSIBLECHANGE_IMP(preshowerEnabled) +POSSIBLECHANGE_IMP(calorimeterEnabled) +POSSIBLECHANGE_IMP(clockEnabled) +POSSIBLECHANGE_IMP(testEnabled) + +// POSSIBLECHANGE_IMP(showFloor) +// POSSIBLECHANGE_IMP(floorColourAndTransp) +// POSSIBLECHANGE_IMP(floorExtent) +// POSSIBLECHANGE_IMP(floorSpacing) +// POSSIBLECHANGE_IMP(floorHeight) +// POSSIBLECHANGE_IMP(showLetters) +// POSSIBLECHANGE_IMP(lettersZPos) +// POSSIBLECHANGE_IMP(lettersVerticalPos) +// POSSIBLECHANGE_IMP(showAxes) +// POSSIBLECHANGE_IMP(axesLength) +// POSSIBLECHANGE_IMP(axesPosition) +// POSSIBLECHANGE_IMP(relAxesThickness) +// POSSIBLECHANGE_IMP(showCartesianGrid) +// POSSIBLECHANGE_IMP(showCylindricalGrid) +// POSSIBLECHANGE_IMP(gridColourAndTransp) +// POSSIBLECHANGE_IMP(gridSpacing) +// POSSIBLECHANGE_IMP(gridExtent) +// POSSIBLECHANGE_IMP(showEtaCone1) +// POSSIBLECHANGE_IMP(showEtaCone2) +// POSSIBLECHANGE_IMP(showEtaCone3) +// POSSIBLECHANGE_IMP(etaConeValue1) +// POSSIBLECHANGE_IMP(etaConeValue2) +// POSSIBLECHANGE_IMP(etaConeValue3) +// POSSIBLECHANGE_IMP(etaExtent) +// POSSIBLECHANGE_IMP(applicablePixelProjParts) +// POSSIBLECHANGE_IMP(applicableSCTProjParts) +// POSSIBLECHANGE_IMP(applicableTRTProjParts) +// POSSIBLECHANGE_IMP(shownPixelProjSurfaces) +// POSSIBLECHANGE_IMP(shownSCTProjSurfaces) +// POSSIBLECHANGE_IMP(shownTRTProjSurfaces) +// POSSIBLECHANGE_IMP(showTrackingVolumes) +// POSSIBLECHANGE_IMP(showInnerDetector) +// POSSIBLECHANGE_IMP(showCalorimeters) +// POSSIBLECHANGE_IMP(showMuonSpectrometer) +// POSSIBLECHANGE_IMP(showLines) +//POSSIBLECHANGE_IMP(lineDirection) Implemented this manually so we can update eta/theta diff --git a/graphics/VTI12/VTI12Systems/VTI12WaveformSystems/src/waveformcontrollerform.ui b/graphics/VTI12/VTI12Systems/VTI12WaveformSystems/src/waveformcontrollerform.ui new file mode 100644 index 00000000..75fddd8e --- /dev/null +++ b/graphics/VTI12/VTI12Systems/VTI12WaveformSystems/src/waveformcontrollerform.ui @@ -0,0 +1,228 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>VP1WaveformControllerForm</class> + <widget class="QWidget" name="VP1WaveformControllerForm"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>267</width> + <height>182</height> + </rect> + </property> + <property name="windowTitle"> + <string>Form</string> + </property> + <layout class="QGridLayout"> + <property name="rightMargin"> + <number>1</number> + </property> + <property name="bottomMargin"> + <number>1</number> + </property> + <property name="spacing"> + <number>0</number> + </property> + <item row="0" column="0"> + <layout class="QGridLayout"> + <property name="horizontalSpacing"> + <number>2</number> + </property> + <property name="verticalSpacing"> + <number>0</number> + </property> + <item row="0" column="0"> + <widget class="QCheckBox" name="checkBox_vetoEnabled"> + <property name="text"> + <string>Veto</string> + </property> + <property name="checked"> + <bool>true</bool> + </property> + </widget> + </item> + <item row="1" column="0"> + <widget class="QCheckBox" name="checkBox_triggerEnabled"> + <property name="text"> + <string>Trigger</string> + </property> + <property name="checked"> + <bool>true</bool> + </property> + </widget> + </item> + <item row="2" column="0"> + <widget class="QCheckBox" name="checkBox_preshowerEnabled"> + <property name="text"> + <string>Preshower</string> + </property> + <property name="checked"> + <bool>true</bool> + </property> + </widget> + </item> + <item row="3" column="0"> + <widget class="QCheckBox" name="checkBox_calorimeterEnabled"> + <property name="text"> + <string>Calorimeter</string> + </property> + <property name="checked"> + <bool>true</bool> + </property> + </widget> + </item> + <item row="4" column="0"> + <widget class="QCheckBox" name="checkBox_clockEnabled"> + <property name="text"> + <string>Clock</string> + </property> + <property name="checked"> + <bool>true</bool> + </property> + </widget> + </item> + <item row="5" column="0"> + <widget class="QCheckBox" name="checkBox_testEnabled"> + <property name="text"> + <string>Test</string> + </property> + <property name="checked"> + <bool>true</bool> + </property> + </widget> + </item> + <!-- + <item row="0" column="1"> + <widget class="QPushButton" name="pushButton_settings_floorAndLetters"> + <property name="text"> + <string>Configure</string> + </property> + </widget> + </item> + <item row="1" column="0"> + <widget class="QCheckBox" name="checkBox_coordinateAxes"> + <property name="text"> + <string>Coordinate axes</string> + </property> + </widget> + </item> + <item row="1" column="1"> + <widget class="QPushButton" name="pushButton_settings_coordinateAxes"> + <property name="text"> + <string>Configure</string> + </property> + </widget> + </item> + <item row="2" column="0"> + <widget class="QCheckBox" name="checkBox_grid"> + <property name="text"> + <string>Grid</string> + </property> + </widget> + </item> + <item row="2" column="1"> + <widget class="QPushButton" name="pushButton_settings_grid"> + <property name="text"> + <string>Configure</string> + </property> + </widget> + </item> + <item row="3" column="0"> + <widget class="QCheckBox" name="checkBox_etaCones"> + <property name="text"> + <string>Eta Cones</string> + </property> + </widget> + </item> + <item row="3" column="1"> + <widget class="QPushButton" name="pushButton_settings_etaCones"> + <property name="text"> + <string>Configure</string> + </property> + </widget> + </item> + <item row="4" column="0"> + <widget class="QCheckBox" name="checkBox_inDetProjSurfs"> + <property name="text"> + <string>ID projection surfaces</string> + </property> + <property name="checked"> + <bool>true</bool> + </property> + </widget> + </item> + <item row="4" column="1"> + <widget class="QPushButton" name="pushButton_settings_inDetProjSurfs"> + <property name="text"> + <string>Configure</string> + </property> + </widget> + </item> + <item row="5" column="1"> + <widget class="QPushButton" name="pushButton_settings_trkVolumes"> + <property name="text"> + <string>Configure</string> + </property> + </widget> + </item> + <item row="5" column="0"> + <widget class="QCheckBox" name="checkBox_trkVolumes"> + <property name="text"> + <string>Tracking Volumes</string> + </property> + <property name="checked"> + <bool>false</bool> + </property> + </widget> + </item> + <item row="7" column="0"> + <widget class="QCheckBox" name="checkBox_lines"> + <property name="text"> + <string>Line from origin</string> + </property> + <property name="checked"> + <bool>false</bool> + </property> + </widget> + </item> + <item row="7" column="1"> + <widget class="QPushButton" name="pushButton_settings_lines"> + <property name="text"> + <string>Configure</string> + </property> + </widget> + </item> + --> + </layout> + </item> + <item row="0" column="1"> + <spacer> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>1</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item row="1" column="0"> + <spacer> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>1</height> + </size> + </property> + </spacer> + </item> + </layout> + </widget> + <resources/> + <connections/> +</ui> -- GitLab