Version 10.0-p01. User Interface II. Makoto Asai (SLAC) Geant4 Tutorial Course



Similar documents
Visual Basic Programming. An Introduction

Object Oriented Software Design II

EE8205: Embedded Computer System Electrical and Computer Engineering, Ryerson University. Multitasking ARM-Applications with uvision and RTX

CpSc212 Goddard Notes Chapter 6. Yet More on Classes. We discuss the problems of comparing, copying, passing, outputting, and destructing

Storage Classes CS 110B - Rule Storage Classes Page 18-1 \handouts\storclas

Primary particle. Geant4 tutorial Paris, 4-8 June Giovanni Santin ESA / ESTEC. Rhea System SA

TUTORIAL FOR INITIALIZING BLUETOOTH COMMUNICATION BETWEEN ANDROID AND ARDUINO

Introduction to Python

Vim, Emacs, and JUnit Testing. Audience: Students in CS 331 Written by: Kathleen Lockhart, CS Tutor

Software documentation systems

The C Programming Language course syllabus associate level

Printer Connection Manager

Facebook Twitter YouTube Google Plus Website

CORBA Programming with TAOX11. The C++11 CORBA Implementation

Polymorphism. Problems with switch statement. Solution - use virtual functions (polymorphism) Polymorphism

Free Java textbook available online. Introduction to the Java programming language. Compilation. A simple java program

An Incomplete C++ Primer. University of Wyoming MA 5310

3.5. cmsg Developer s Guide. Data Acquisition Group JEFFERSON LAB. Version

Free Java textbook available online. Introduction to the Java programming language. Compilation. A simple java program

C++ INTERVIEW QUESTIONS

Sample CSE8A midterm Multiple Choice (circle one)

Using NetBeans IDE to Build Quick UI s Ray Hylock, GISo Tutorial 3/8/2011

Scanner. It takes input and splits it into a sequence of tokens. A token is a group of characters which form some unit.

Crash Course in Java

Netscape Internet Service Broker for C++ Programmer's Guide. Contents

r-one Python Setup 1 Setup 2 Using IDLE 3 Using IDLE with your Robot ENGI 128: Introduction to Engineering Systems Fall, 2014

Textbook: T. Issariyakul and E. Hossain, Introduction to Network Simulator NS2, Springer

java.util.scanner Here are some of the many features of Scanner objects. Some Features of java.util.scanner

CS 111 Classes I 1. Software Organization View to this point:

Multichoice Quetions 1. Atributes a. are listed in the second part of the class box b. its time is preceded by a colon. c. its default value is

Translating to Java. Translation. Input. Many Level Translations. read, get, input, ask, request. Requirements Design Algorithm Java Machine Language

CS193D Handout 06 Winter 2004 January 26, 2004 Copy Constructor and operator=

J a v a Quiz (Unit 3, Test 0 Practice)

MetroPro Remote Access OMP-0476F. Zygo Corporation Laurel Brook Road P.O. Box 448 Middlefield, Connecticut 06455

JDK 1.5 Updates for Introduction to Java Programming with SUN ONE Studio 4

AP Computer Science Java Subset

CISC 181 Project 3 Designing Classes for Bank Accounts

First Java Programs. V. Paúl Pauca. CSC 111D Fall, Department of Computer Science Wake Forest University. Introduction to Computer Science

Certified PHP Developer VS-1054

Chapter 2 Introduction to Java programming

Programming Languages CIS 443

Tutorial: 3D Pipe Junction Using Hexa Meshing

Sources: On the Web: Slides will be available on:

Embedded Systems Design Course Applying the mbed microcontroller

Extracting, Storing And Viewing The Data From Dicom Files

Glossary of Object Oriented Terms

Capabilities of a Java Test Execution Framework by Erick Griffin

Object Oriented Software Design II

JAVA.UTIL.SCANNER CLASS

PART-A Questions. 2. How does an enumerated statement differ from a typedef statement?

Windows PowerShell Essentials

Affdex SDK for Android. Developer Guide For SDK version 1.0

CAPIX Job Scheduler User Guide

Geant4 Visualization. Andrea Dotti April 19th, 2015 Geant4 M&C+SNA+MC 2015

Basic Java Constructs and Data Types Nuts and Bolts. Looking into Specific Differences and Enhancements in Java compared to C

REPAST JAVA GETTING STARTED

16 Collection Classes

Geant4 User's Guide for Application Developers

Fundamentals of Java Programming

Programming and Software Development (PSD)

13 Classes & Objects with Constructors/Destructors

Object-Oriented Design Lecture 4 CSU 370 Fall 2007 (Pucella) Tuesday, Sep 18, 2007

JAVA - QUICK GUIDE. Java SE is freely available from the link Download Java. So you download a version based on your operating system.

Other GEANT4 capabilities

Variable Base Interface

N3458: Simple Database Integration in C++11

Invitation to Ezhil : A Tamil Programming Language for Early Computer-Science Education 07/10/13

C++FA 5.1 PRACTICE MID-TERM EXAM

Managing XML Documents Versions and Upgrades with XSLT

Channel Access Client Programming. Andrew Johnson Computer Scientist, AES-SSG

Python Documentation & Startup

Client SuiteScript Developer s Guide

by NetMedia, Inc. All rights reserved. Basic Express, BasicX, BX-01, BX-24 and BX-35 are trademarks of NetMedia, Inc. 2.

Ch 7-1. Object-Oriented Programming and Classes

Exercise 1: Python Language Basics

MPLAB Harmony System Service Libraries Help

Introduction to Java

[PRAKTISCHE ASPEKTE DER INFORMATIK SS 2014]

Creating a Simple, Multithreaded Chat System with Java

Debugging with TotalView

Programmierpraktikum

Moving from CS 61A Scheme to CS 61B Java

Building a Multi-Threaded Web Server

C++ Overloading, Constructors, Assignment operator

Java CPD (I) Frans Coenen Department of Computer Science

Web development... the server side (of the force)

El Dorado Union High School District Educational Services

Java Interview Questions and Answers

Virtuozzo Virtualization SDK

You are to simulate the process by making a record of the balls chosen, in the sequence in which they are chosen. Typical output for a run would be:

Driving a Time-based Simulation from MATLAB for Custom Calculations and Control

Building a Custom User Manager

Getting Started with the Internet Communications Engine

INTRODUCTION TO OBJECTIVE-C CSCI 4448/5448: OBJECT-ORIENTED ANALYSIS & DESIGN LECTURE 12 09/29/2011

Computers. An Introduction to Programming with Python. Programming Languages. Programs and Programming. CCHSG Visit June Dr.-Ing.

Transcription:

Version 10.0-p01 User Interface II Makoto Asai (SLAC) Geant4 Tutorial Course

Contents Mechanism of UI command Defining basic UI command Defining complicated UI command G4GenericMessenger UI command in multithreaded mode UserInterface II - M.Asai (SLAC) 2

Mechanism of UI command Version 10.0-p01

Mechanism of UI command 2. apply (G)UI 1. register command G4UImanager To define user s command : - Object shown in green must be instantiated by the user - Class shown in blue must be implemented and instantiated by the user messenger (G4UImessenger) 3. do it command (G4UIcommand) G4UIparameter 4. invoke Target class UserInterface II - M.Asai (SLAC) 4

Messenger class Each messenger class must be derived from G4UImessenger base class. A messenger class can handle more than one UI commands. A messenger class should be instantiated by the constructor of the target class to which commands should be delivered, and should be deleted by the destructor of the target class. Methods of messenger class Constructor Define (instantiate) commands / command directories Destructor Delete commands / command directories void SetNewValue(G4UIcommand* command, G4String newvalue) Convert "newvalue" parameter string to appropriate value(s) and invoke an appropriate method of the target class This method is invoked when a command is issued. G4String GetCurrentValue(G4UIcommand* command) Access to an appropriate get-method of the target class and convert the current value(s) to a string This method is invoked when the current value(s) of parameter(s) of a command is asked by (G)UI. UserInterface II - M.Asai (SLAC) 5

Defining basic UI command Version 10.0-p01

Definition (instantiation) of a command To be implemented in the constructor of a messenger class. A01DetectorConstMessenger::A01DetectorConstMessenger (A01DetectorConstruction* tgt) :target(tgt) { mydetdir = new G4UIdirectory("/mydet/"); mydetdir->setguidance("a01 detector setup commands."); } armcmd = new G4UIcmdWithADoubleAndUnit("/mydet/ armangle",this); armcmd->setguidance("rotation angle of the second arm."); armcmd->setparametername("angle",true); armcmd->setrange("angle>=0. && angle<180."); armcmd->setdefaultvalue(30.); armcmd->setdefaultunit("deg"); Guidance can (should) be more than one lines. The first line is utilized as a short description of the command. UserInterface II - M.Asai (SLAC) 7

G4UIcommand and its derivatives G4UIcommand is a class which represent a UI command. G4UIparameter represents a parameter. G4UIcommand can be directly used for a UI command. Geant4 provides its derivatives according to the types of associating parameters. These derivative command classes already have necessary parameter class object(s), thus you don t have to instantiate G4UIparameter object(s). G4UIcmdWithoutParameter G4UIcmdWithAString G4UIcmdWithABool G4UIcmdWithAnInteger G4UIcmdWithADouble, G4UIcmdWithADoubleAndUnit G4UIcmdWith3Vector, G4UIcmdWith3VectorAndUnit G4UIdirectory A UI command with other type of parameters must be defined by G4UIcommand base class with G4UIparameter. UserInterface II - M.Asai (SLAC) 8

Parameter name(s) These methods are available for derivative command classes which take parameter(s). void SetParameterName( const char*parname, G4bool omittable, G4bool currentasdefault=false); void SetParameterName( const char*nam1, const char*nam2, const char*nam3, G4bool omittable, G4bool currentasdefault=false); Parameter names are used in help, and also in the definition of parameter range. If "omittable" is true, the command can be issued without this particular parameter, and the default value will be used. If "currentasdefalult" is true, current value of the parameter is used as a default value, otherwise default value must be defined with SetDefaultValue() method. UserInterface II - M.Asai (SLAC) 9

Range, unit and candidates void SetRange(const char* rangestring) Available for a command with numeric-type parameters. Range of parameter(s) must be given in C++ syntax. acmd->setrange("x>0. && y>z && z<(x+y)"); Not only comparison with hard-coded number but also comparison between variables and simple calculation are available. Names of variables must be defined by SetParameterName() method. void SetDefaultUnit(const char* defunit) Available for a command which takes unit. Once the default unit is defined, no other unit of different dimension will be accepted. Alternatively, you can define a dimension (unit category) without setting a default unit. void SetUnitCategory(const char* unitcategory) void SetCandidates(const char* candidatelist) Available for a command with string type parameter Candidates must be delimited by a space. Candidates can be dynamically updated. UserInterface II - M.Asai (SLAC) 10

Available state void AvailableForStates(G4ApplicationState s1, ) Define command's applicability for Geant4 application states. Geant4 has six application states. G4State_PreInit Material, Geometry, Particle and/or Physics Process need to be initialized G4State_Idle Ready to start a run G4State_GeomClosed Geometry is optimized and ready to process an event G4State_EventProc An event is processing G4State_Quit, G4State_Abort UI command unavailable PreInit initialize beamon GeomClosed EventProc Abort Idle exit Quit UserInterface II - M.Asai (SLAC) 11

Conversion between string and values Derivatives of G4UIcommand with numeric and boolean parameters have corresponding conversion methods. From a string to value G4bool GetNewBoolValue(const char*) G4int GetNewIntValue(const char*) G4double GetNewDoubleValue(const char*) G4ThreeVector GetNew3VectorValue(const char*) To be used in SetNewValue() method in messenger. Unit is taken into account automatically. From value to string G4String ConvertToString(...) G4String ConvertToString(...,const char* unit) To be used in GetCurrentValue() method in messenger. UserInterface II - M.Asai (SLAC) 12

SetNewValue and GetCurrentValue void A01DetectorConstMessenger ::SetNewValue(G4UIcommand* command,g4string newvalue) { } if( command==armcmd ) { target->setarmangle(armcmd->getnewdoublevalue(newvalue)); } G4String A01DetectorConstMessenger ::GetCurrentValue(G4UIcommand* command) { } G4String cv; if( command==armcmd ) { cv = armcmd->converttostring(target->getarmangle(),"deg"); } return cv; UserInterface II - M.Asai (SLAC) 13

Defining complicated UI command Version 10.0-p01

Complicated UI command Complicated UI command means a UI command with parameters which is not included in the deliverable classes. G4UIcmdWithoutParameter, G4UIcmdWithAString, G4UIcmdWithABool, G4UIcmdWithAnInteger, G4UIcmdWithADouble, G4UIcmdWithADoubleAndUnit, G4UIcmdWith3Vector, G4UIcmdWith3VectorAndUnit A UI command with other type of parameters must be defined by G4UIcommand base class with G4UIparameter. G4UIparameter(const char * parname, char thetype, G4bool theomittable); parname" is the name of the parameter which will be used by the range checking and help "thetype" is the type of the parameter. b (boolean), i (integer), d (double), and s (string) Each parameter can take one line of guidance, a default value in case theomittable is true, a range (for numeric type parameter), and a candidate list (for string type parameter). UserInterface II - M.Asai (SLAC) 15

Complicated UI command A G4UIcommand object can take arbitrary number of G4UIparameter objects. Names of parameter must be different to each other (within the command). It takes arbitrary number of guidance lines. Availability for Geant4 states can be set. In addition to ranges defined to individual parameters, it may take another range definition where values of more than one parameters can be compared to each other. UserInterface II - M.Asai (SLAC) 16

/gun/ion command ioncmd = new G4UIcommand("/gun/ion",this); ioncmd->setguidance("set properties of ion to be generated."); ioncmd->setguidance("[usage] /gun/ion Z A Q"); ioncmd->setguidance(" Z:(int) AtomicNumber"); ioncmd->setguidance(" A:(int) AtomicMass"); ioncmd->setguidance(" Q:(int) Charge of Ion (in unit of e)"); ioncmd->setguidance(" E:(double) Excitation energy (in kev)"); G4UIparameter* param; param = new G4UIparameter("Z",'i',false); ioncmd->setparameter(param); param = new G4UIparameter("A",'i',false); ioncmd->setparameter(param); param = new G4UIparameter("Q",'i',true); param->setdefaultvalue("0"); ioncmd->setparameter(param); param = new G4UIparameter("E",'d',true); param->setdefaultvalue("0.0"); Parameters are registered along their orders. ioncmd->setparameter(param); UserInterface II - M.Asai (SLAC) 17

Converting string to values For complicated command, convenient conversion method is not available. Please use G4Tokenizer to tokenize the string and convert each token to numerical values. SetNewValue(G4UIcommand * command,g4string newvalues) { G4Tokenizer next( newvalues ); fatomicnumber = StoI(next()); fatomicmass = StoI(next()); G4String sq = next(); if (sq.isnull()) { fioncharge = fatomicnumber; } else { fioncharge = StoI(sQ); sq = next(); if (sq.isnull()) { fionexciteenergy = 0.0; } else { fionexciteenergy = StoD(sQ) * kev; G4UIcommand class has some basic conversion methods. StoI() : convert string to int StoD() : convert string to double ItoS() : convert int to string DtoS() : convert double to string Be careful of omittable parameters. } } UserInterface II - M.Asai (SLAC) 18

G4GeneralMessenger Version 10.0-p01

G4GenericMessenger G4GenericMessenger is a short- cut for defining simple UI commands that are associated with one target class, grouped in one command directory, and dealing only with na=ve variable types. G4GenericMessenger is a concrete class you can just instan=ate without implemen=ng a dedicated messenger class. class G4GenericMessenger : public G4UImessenger { Target class object public: G4GenericMessenger(void* obj, const G4String& dir = "", const G4String& doc = ""); Command& DeclareProperty (const G4String& name, const G4AnyType& variable, const G4String& doc = ""); Command& DeclarePropertyWithUnit (const G4String& name, const G4String& defaultunit, const G4AnyType& variable, const G4String& doc = ""); Command& DeclareMethod (const G4String& name, const G4AnyMethod& fun, const G4String& doc = ""); Command& DeclareMethodWithUnit (const G4String& name, const G4String& defaultunit, Command name Command directory Target class data member Target class public set method const G4AnyMethod& fun, const G4String& doc = ""); UserInterface II - M.Asai (SLAC) 20

example B5PrimaryGeneratorAc=on::B5PrimaryGeneratorAc=on() { fmessenger = new G4GenericMessenger(this, "/B5/generator/, "Primary generator control"); } // momentum command G4GenericMessenger::Command& momentumcmd = fmessenger- >DeclarePropertyWithUnit("momentum", "GeV", fmomentum, "Mean momentum of primaries."); momentumcmd.setparametername("p", true); momentumcmd.setrange("p>=0."); momentumcmd.setdefaultvalue("1."); B5PrimaryGeneratorAc=on::~B5PrimaryGeneratorAc=on() { delete fmessenger; } UserInterface II - M.Asai (SLAC) 21

UI command in multithreaded mode Version 10.0-p01

UI command in mul=threaded mode In mul=threaded mode, each thread (both master and worker) has its own G4UImanager object. Commands instan=ated in a thread are registered to the G4UImanager of that thread. Every UI command is executed in the master thread if the command is defined in the master thread, and then distributed to G4UImanager object of each worker thread prior to the beginning of thread- local event loop. If a command should not be distributed to worker threads, SetToBeBroadcasted(false) should be invoked for the command. If a command is hard- coded in a object in a worker thread, it is executed only in that worker thread. UserInterface II - M.Asai (SLAC) 23