root.bnl valeri fine (bnl, star)

36
http://root.bnl.gov Valeri Fine (BNL, STAR) Whether it is feasible to benefit just from the two best technologies Using the Qt framework to create GUI for the complex interactive HENP applications

Upload: althea

Post on 12-Jan-2016

68 views

Category:

Documents


0 download

DESCRIPTION

Using the Qt framework to create GUI for the complex interactive HENP applications. Whether it is feasible to benefit just from the two best technologies. http://root.bnl.gov Valeri Fine (BNL, STAR). Abstract. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: root.bnl Valeri Fine (BNL, STAR)

http://root.bnl.gov

Valeri Fine (BNL, STAR)

Whether it is feasible to benefit just from the two best technologies

Using the Qt framework to create GUI for the complex interactive HENP

applications

Page 2: root.bnl Valeri Fine (BNL, STAR)

11/22/2004 BNL technology meeting [email protected]

2

Abstract This talk presents the overview of the main components of

the unique technology creating the complex data-analysis and the computer simulation interactive

software packages and problem-oriented applications based on Qt and ROOT frameworks.

The system has been under development for last 4 years. It is developed mainly within STAR (and at some point it

was supported by US Atlas) and it is included in the regular distribution of the ROOT package. The later is a “de facto” standard of the HENP OO frameworks for the

modern HENP experiments

Page 3: root.bnl Valeri Fine (BNL, STAR)

11/22/2004 BNL technology meeting [email protected]

3

Batch and interactive stages

• GUI is not the first concern of the HENP frameworks. We worry whether we are capable to collect, preserve, re-distribute our hard-earned TBytes.

• However the final stages of the job are mainly interactive.

• The very first steps of the data-taking in the “control rooms” are interactive also

Page 4: root.bnl Valeri Fine (BNL, STAR)

11/22/2004 BNL technology meeting [email protected]

4

Operating system “model” for HENP cross-platform applications

“pro”It is not unusual when the life cycle of the major HENP

applications last for dozens years.In other words it is much more then the life cycle of any

known “system components” like operating system, file system, GUI etc. and hardware as well.

To survive the sophisticated and expansive HENP applications must be in possession of some (tiny) layer to separate the HENP applications and the concrete system environment evolvement.

It is possible by introducing some sort of the “virtual operating system model” the applications rely on; and providing the implementation of that model as soon as operating environment evolves.

Page 5: root.bnl Valeri Fine (BNL, STAR)

11/22/2004 BNL technology meeting [email protected]

5

Even though it does allow to prolong the life cycle of the software package that comes for the price.

• One is still required to learn and maintain the specific pieces of the code for many different platforms,

• and the different versions of one and the same platform for the entire application life.

• That sometimes entails the narrowing the number of different platforms the package is available for.

• On the other hand many features one has to deal with are not application specific.

• This implies that the good layer can be ''borrowed'' from some third party dedicated packag

Operating system “model” for HENP cross-platform applications

“cons”

Page 6: root.bnl Valeri Fine (BNL, STAR)

11/22/2004 BNL technology meeting [email protected]

6

ROOT low level GUI interface

TVirtualX

TGX11TGWIN32 TGWin32GDK

ROOT(TG<family

>

ROOT(TVirtualPad)

3 different implementations to develop and support

Page 7: root.bnl Valeri Fine (BNL, STAR)

11/22/2004 BNL technology meeting [email protected]

7

Why Qt?The present model has been serving ROOT and ROOT users

very well for 9 years soon.On the other hand, most tasks to be performed and implement

have no ROOT specific and have been successfully solved by other packages.

• Qt package from TrollTech AS was especially attractive not only due to its superior quality and high level technical support but because it comes with the source code and tools to build it in place (including a commercial version for Windows).

• The rich set of Qt documentation can be found on Web and available from the leading publishers as well.

• Qt is a multi-platform C++ application framework that developers can use to write single-source applications that run-natively-on Windows, Linux, Unix, Mac OS X and embedded Linux.

• Qt has been used to build thousands of successful commercial applications worldwide,

• and is the basis of the open source KDE desktop environment.

Page 8: root.bnl Valeri Fine (BNL, STAR)

11/22/2004 BNL technology meeting [email protected]

8

Why Qt (cont.)• Cross platforms• Documentation• Open Source (including Win32)• The “native” development tool integration• “Native” GUI (Win32, Mac) integration• Free (for x11 and Mac)• “non-commercial” for Win32• Microsoft Foundation classes migration• Motif migration• Embedded platform

The review http://www.geocities.com/SiliconValley/Vista/7184/guitool.html of the more then 100 different GUI packages named Qt “the best GUI packages”

Page 9: root.bnl Valeri Fine (BNL, STAR)

11/22/2004 BNL technology meeting [email protected]

9

Qt – “softgate” to 3d party applications

• Qt – rich itself, but there is nothing up with that. All modern GUI system (GDK, MFC, Motif etc) are in possession more/less the same functionality.

• Qt authors addressed many hot issues and the main one is how to connect the different packages within one application seamlessly?

Page 10: root.bnl Valeri Fine (BNL, STAR)

11/22/2004 BNL technology meeting [email protected]

10

Qt cornerstones

• Signal / Slot C++ object communication mechanism

• OO model: Qt uses the named generic container of the named generic containers. In other words Qt basic OO model is a the tree-like structure

These allow significantly simply the 3d-These allow significantly simply the 3d-party interactive libraries integration. party interactive libraries integration.

They made it possible at last!They made it possible at last!

Page 11: root.bnl Valeri Fine (BNL, STAR)

11/22/2004 BNL technology meeting [email protected]

11

Why now?Qt and ROOT timeline

• 1994: Trolltech founded in Oslo, Norway

• 1996: First sale of Qt (to European Space Agency)

• 1998: Created the KDE Free Qt Foundation • 1998: Released Qt/X11 under the QPL• 1999: Qt 2 released • 1999: Opened Australian office • 1999: Received first-round funding • 2000: Released Qt/Embedded • 2000: Opened US office • 2000: Released Qt/X11 under the GPL• 2001: First Qtopia adoption (by Sharp Electronics)

2001: Qt 3 released • 2002: Teambuilder released • 2003: QSA released • 2003: Released Qt/Mac under the GPL• 2003: Introduces Qt Solutions • 2004: Released Qtopia Phone Edition

http://www.trolltech.com/company/history.html

• Jan 95: Thinking/writing/rewriting/???• November 95: Public seminar, show Root 0.5• Spring 96: decision to use CINT• Jan 97: Root version 1.0 • Jan 98: Root version 2.0 – STAR ROOT-based

offline framework

• Mar 99: Root version 2.21/08 (1st Root workshop FNAL)

• Feb 00: Root version 2.23/12 (2nd Root workshop CERN)

• Mar 01: Root version 3.00/06• Jun 01: Root version 3.01/05 (3rd Root workshop

FNAL)• Jan 02: Root version 3.02/07 (LCG project starts:

RTAGs)• Oct 02: Root version 3.03/09 (4th Root workshop

CERN)• Dec 03: Root version 3.10/02 (last PRO release)• Feb 04: Towards version 4.00 (5th Root workshop

SLAC) http://www.slac.stanford.edu/BFROOT/www/Computing/Distributed/ROOT2004/files/brun.ppt

Page 12: root.bnl Valeri Fine (BNL, STAR)

11/22/2004 BNL technology meeting [email protected]

12

Approaching Qt

• Qt “alone” - LHC++ (CERN)• Qt “outside” - GO4 approach (GSI)• Qt “just inside” - Acat2002 (STAR)• Qt “side by side” - Qt CINT approach

(Masa Goto, HP Japan)• Qt “deep inside” - Acat2003 (STAR)

Goals:

• Immediate man-power conservation – “experiment target”

• Insure the package long healthy life (25 years?) – “developer target”

Page 13: root.bnl Valeri Fine (BNL, STAR)

11/22/2004 BNL technology meeting [email protected]

13

LHC++ about QT

Page 14: root.bnl Valeri Fine (BNL, STAR)

11/22/2004 BNL technology meeting [email protected]

14

ROOT Qt-based GUI interface

TVirtualX

TGQt

ROOTROOT

only one (!) implementation

Page 15: root.bnl Valeri Fine (BNL, STAR)

11/22/2004 BNL technology meeting [email protected]

15

ROOT GUI class library and Qt layer

• The above Qt layer first was present last year on Acat2002 @ Moscow and has the significant drawback.

• Event though it solves the problem of combining the ROOT Canvas and Qt widgets within one single application it was not compatible with the ROOT GUI class library and the compatibility with the conventional ROOT development.

Page 16: root.bnl Valeri Fine (BNL, STAR)

TVirtualX

TGQt

QObject

TQtClientFilter

TGQt::CreateWindow(…)

TGQt::Init(…)

QWidget::installEventFilter

QFrame

TQtClientWidget

QWidget

QPtrQueue<Event_t> fRootEventQueue

TGQt::NextEvent()

TGClient::ProcessOneEvent

Event_t QEvent

Transformation the QEvent Q-object into the ROOT Event_t structure

QWidget

TQtWidget

TGQt::InitWindow(…)

method

• “Clear boxes” show the overloaded methods of the TVirtualX interface

Class name

• “Gray boxes” show the Classes inheritance diagram

Page 17: root.bnl Valeri Fine (BNL, STAR)

11/22/2004 BNL technology meeting [email protected]

17

ROOT Qt-based GUI interface

TVirtualX

TGQt

ROOTROOT

TCanvas/TPadROOT Gui class

library

Page 18: root.bnl Valeri Fine (BNL, STAR)

11/22/2004 BNL technology meeting [email protected]

18

ROOT vs Qt

• To run ROOT– Create TApplication– Enter ROOT event loop TApplication::Run

• To run Qt– Create QApplication– Enter Qt event loop QApplication::exec()

This implementation:

TApplication QApplication

TApplication::Run() QApplication::exec()

Bottom line: No need to deal with QApplication!

Page 19: root.bnl Valeri Fine (BNL, STAR)

11/22/2004 BNL technology meeting [email protected]

19

Qt Root “Hello Word”

2. QtROOT “Hello Word” source file

1. Qt “Hello Word” source file#include <qapplication.h>#include <qpushbutton.h>int main( int argc, char **argv ){ QApplication a( argc, argv );// to be replaced QPushButton hello( "Hello world!", 0 ); hello.resize( 100, 30 ); a.setMainWidget( &hello ); // to be removed hello.show(); return a.exec(); // to be replaced}

#include <TRint.h>#include <qpushbutton.h>int main( int argc, char **argv ){ // Create an interactive ROOT application TRint *theApp = new TRint("Rint", &argc, argv); QPushButton hello( "Hello world!", 0 ); hello.resize( 100, 30 ); hello.show(); theApp->Run(); // and enter the event loop...}

Page 20: root.bnl Valeri Fine (BNL, STAR)

11/22/2004 BNL technology meeting [email protected]

20

How to make ROOT application Qt-aware

Copy the custom version of ".rootrc" file into your working directory

Unix:Gui.Backend: qt Gui.Factory: qtguiPlugin.TGuiFactory: qtgui TQtGUIFactory QtGui "TQtGUIFactory()"

Gui.Backend: qt Gui.Factory: qt

Windows:Gui.Backend: qtwin32 Gui.Factory: qtguiwin32

No correction of the user code!

Page 21: root.bnl Valeri Fine (BNL, STAR)

11/22/2004 BNL technology meeting [email protected]

21

Additional resource parameters

Plugin.TVirtualPadEditor: Ged TQtGedEditor QtGed "TQtGedEditor(TCanvas*)"

# GUI specific settingsGui.Style: windows

Plugin.TPaletteEditor: * TQtPaletteEditor QtImage "TQtPaletteEditor(TAttImage*,UInt_t,UInt_t)“

Plugin.TImage: * TQtImage QtImage "TQtImage()"

Qt-base “Pad” Editor

TImage class Qt-based implementation

Customize “look and fell”

Page 22: root.bnl Valeri Fine (BNL, STAR)

11/22/2004 BNL technology meeting [email protected]

22

BenefitsOne can include Qt-based GUI

components and packages into ROOT based applications

Coin3D

GO4

Qwt

QGLViewer

Page 23: root.bnl Valeri Fine (BNL, STAR)

11/22/2004 BNL technology meeting [email protected]

23

A test application to combine ROOT and Qt Widget

Page 24: root.bnl Valeri Fine (BNL, STAR)

11/22/2004 BNL technology meeting [email protected]

24

ROOT QtGLWidget

A fragment of STAR “Event Display” QtGLViewer

class based viewer

see: http://www.rhic.bnl.gov/~fine/EventDisplay )

Page 25: root.bnl Valeri Fine (BNL, STAR)

11/22/2004 BNL technology meeting [email protected]

25

High resolution OpenGL pictures(fragment STAR detector at RHIC

Page 26: root.bnl Valeri Fine (BNL, STAR)

11/22/2004 BNL technology meeting [email protected]

26

Qt-based ROOT geometry browser

Page 27: root.bnl Valeri Fine (BNL, STAR)

11/22/2004 BNL technology meeting [email protected]

27

STAR reconstructed eventsIt is also possible to use the Coin3D package to visualize ROOT objects

STAR Detector with real tracks

Page 28: root.bnl Valeri Fine (BNL, STAR)

11/22/2004 BNL technology meeting [email protected]

28

How to make Qt application ROOT-aware

That’s easy!!!One needs a few standard and well defined

by Qt documentation steps, namely:1.Launch the Qt “designer”2.Load the TQtWidget.cw file which is a Qt

designer definition of the “custom widget”3.Add the list of ROOT libraries and header

file to your Qt project4.That’s all5.Use Qt desinger the why Qt prescribes

No correction of the Qt documentation

http://doc.trolltech.com/3.3/designer-manual-2.html

Page 29: root.bnl Valeri Fine (BNL, STAR)

11/22/2004 BNL technology meeting [email protected]

29

http://root.bnl.gov/QtRoot/root/qtExamples/ex1/README

• wget http://root.bnl.gov/QtRoot/downloads/qtRootProject.tar.gz"

• qmake tqrootexample.pro• make• tqrootexample [-style=windows | platinum | motif ]

Page 30: root.bnl Valeri Fine (BNL, STAR)

11/22/2004 BNL technology meeting [email protected]

30

How to make ROOT application Qt-aware

1.Install the ROOT with the Qt layer. 2.Use any Qt widgets as prescribed. No

need to worry about Qt initilization and qt event loop. ROOT Qt layer takes carre about this.

That’s simple nowadays!!!

Page 31: root.bnl Valeri Fine (BNL, STAR)

11/22/2004 BNL technology meeting [email protected]

31

Where to get Qt-ROOT from?

Page 32: root.bnl Valeri Fine (BNL, STAR)

11/22/2004 BNL technology meeting [email protected]

32

Qt-ROOT FAQ

Page 33: root.bnl Valeri Fine (BNL, STAR)

11/22/2004 BNL technology meeting [email protected]

33

How to install

Page 34: root.bnl Valeri Fine (BNL, STAR)

11/22/2004 BNL technology meeting [email protected]

34

ConclusionThere are enough evidences the present approach allows the ROOT developers as well as ROOT users to work with code that has no X11 / WIN32 graphics subsystem dependencies and at the same time opens unrestricted access to a rich set of ready-to-use commercial and free GUI Qt-based widgets and interactive applications.

Qt layer is provided as the standard ROOT “plug-in” share library. That allows user to turn the layer on/off at run time with no change of recompilation of the user’s code.

At the moment the project consists of two large pieces. The core part called “Root Qt layer” had been adopted by ROOT team and it is included since ROOT release 4.00.08 in the standard ROOT CERN distribution and available from ROOT CVS repository @ CERN. The second part is a set of the Qt-based application built on the top of the “Qt layer”. It is called “ROOT Qt extensions” and available from BNL CVS repository (provided by ITD@BNL)

Information about progress can be found on BNL Web site:

http://root.bnl.gov

Page 35: root.bnl Valeri Fine (BNL, STAR)

11/22/2004 BNL technology meeting [email protected]

35

Qt framework + Qt GUI +

ROOT Data-Analysis and Visualization facility

= New generation of the powerful interactive applications

Page 36: root.bnl Valeri Fine (BNL, STAR)

11/22/2004 BNL technology meeting [email protected]

36

References • CINT status, Masa Goto

http://www.slac.stanford.edu/BFROOT/www/Computing/Distributed/ROOT2004/files/goto.ppt

• Cross-platform approach to create the interactive application based on ROOT and Qt GUI libraries.http://www-conf.kek.jp/acat03/prog/presen/id0112.ppt

• ROOT in GO4, Joern Adamczewski http://www.slac.stanford.edu/BFROOT/www/Computing/Distributed/ROOT2004/files/adamczewski.ppt

• Cross-platform Qt-based implementation of low level GUI layer of ROOT

http://acat02.sinp.msu.ru/presentations/fine/Acat2002.ppt

• Cross-platform approach to create the interactive application based on ROOT and Qt GUI librarieshttp://www-conf.kek.jp/acat03/prog/presen/id0112.ppt

• Visualization of the ROOT 3D class objects with Open Inventor-like viewers http://www-conf.kek.jp/acat03/prog/presen/id0113.ppt

• C++ GUI Programming with Qt3 http://phptr.com/content/images/0131240722/downloads/blanchette_book.pdf