Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
G4UIparameter.cc
Go to the documentation of this file.
1//
2// ********************************************************************
3// * License and Disclaimer *
4// * *
5// * The Geant4 software is copyright of the Copyright Holders of *
6// * the Geant4 Collaboration. It is provided under the terms and *
7// * conditions of the Geant4 Software License, included in the file *
8// * LICENSE and available at http://cern.ch/geant4/license . These *
9// * include a list of copyright holders. *
10// * *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work make any representation or warranty, express or implied, *
14// * regarding this software system or assume any liability for its *
15// * use. Please see the license in the file LICENSE and URL above *
16// * for the full disclaimer and the limitation of liability. *
17// * *
18// * This code implementation is the result of the scientific and *
19// * technical work of the GEANT4 collaboration. *
20// * By using, copying, modifying or distributing the software (or *
21// * any work based on the software) you agree to acknowledge its *
22// * use in resulting scientific publications, and indicate your *
23// * acceptance of all terms of the Geant4 Software license. *
24// ********************************************************************
25//
26//
27// $Id$
28//
29
30#include "G4UIparameter.hh"
31#include "G4UIcommandStatus.hh"
32#include "G4Tokenizer.hh"
33#include "G4ios.hh"
34#include <sstream>
35
36
38{
39 G4String nullString;
40 parameterName = nullString;
41 parameterType = '\0';
42 omittable = false;
43 parameterGuidance = nullString;
44 defaultValue = nullString;
45 parameterRange = nullString;
46 currentAsDefaultFlag = false;
47 parameterCandidate = nullString;
48 widget = 0;
49 bp = 0;
50 token = NONE;
51}
52
53G4UIparameter::G4UIparameter(char theType):paramERR(0)
54{
55 G4String nullString;
56 parameterName = nullString;
57 parameterType = theType;
58 omittable = false;
59 parameterGuidance = nullString;
60 defaultValue = nullString;
61 parameterRange = nullString;
62 currentAsDefaultFlag = false;
63 parameterCandidate = nullString;
64 widget = 0;
65 bp = 0;
66 token = NONE;
67}
68
69G4UIparameter::G4UIparameter(const char * theName, char theType, G4bool theOmittable):paramERR(0)
70{
71 parameterName = theName;
72 parameterType = theType;
73 omittable = theOmittable;
74 G4String nullString;
75 parameterGuidance = nullString;
76 defaultValue = nullString;
77 parameterRange = nullString;
78 currentAsDefaultFlag = false;
79 parameterCandidate = nullString;
80 widget = 0;
81 bp = 0;
82 token = NONE;
83}
84
86{ }
87
89{
90 return ( this == &right );
91}
92
94{
95 return ( this != &right );
96}
97
99{
100 G4cout << G4endl << "Parameter : " << parameterName << G4endl;
101 if( ! parameterGuidance.isNull() )
102 G4cout << parameterGuidance << G4endl ;
103 G4cout << " Parameter type : " << parameterType << G4endl;
104 if(omittable)
105 { G4cout << " Omittable : True" << G4endl; }
106 else
107 { G4cout << " Omittable : False" << G4endl; }
108 if( currentAsDefaultFlag )
109 { G4cout << " Default value : taken from the current value" << G4endl; }
110 else if( ! defaultValue.isNull() )
111 { G4cout << " Default value : " << defaultValue << G4endl; }
112 if( ! parameterRange.isNull() )
113 G4cout << " Parameter range : " << parameterRange << G4endl;
114 if( ! parameterCandidate.isNull() )
115 G4cout << " Candidates : " << parameterCandidate << G4endl;
116}
117
119{
120 std::ostringstream os;
121 os << theDefaultValue;
122 defaultValue = os.str();
123}
124
126{
127 std::ostringstream os;
128 os << theDefaultValue;
129 defaultValue = os.str();
130}
131
132
133// ---------- CheckNewValue() related routines -----------
134#include <ctype.h>
135#include "G4UItokenNum.hh"
136
137//#include "checkNewValue_debug.icc"
138//#define DEBUG 1
139
141CheckNewValue(const char* newValue ) {
142 if( TypeCheck(newValue) == 0) return fParameterUnreadable;
143 if( ! parameterRange.isNull() )
144 { if( RangeCheck(newValue) == 0 ) return fParameterOutOfRange; }
145 if( ! parameterCandidate.isNull() )
146 { if( CandidateCheck(newValue) == 0 ) return fParameterOutOfCandidates; }
147 return 0; // succeeded
148}
149
150G4int G4UIparameter::
151CandidateCheck(const char* newValue) {
152 G4Tokenizer candidateTokenizer(parameterCandidate);
153 G4String aToken;
154 G4int iToken = 0;
155 while( ! (aToken=candidateTokenizer()).isNull() )
156 {
157 iToken++;
158 if(aToken==newValue) return iToken;
159 }
160 G4cerr << "parameter value is not listed in the candidate List." << G4endl;
161 return 0;
162}
163
164G4int G4UIparameter::
165RangeCheck(const char* newValue) {
166 yystype result;
167 bp = 0; // reset buffer pointer for G4UIpGetc()
168 std::istringstream is(newValue);
169 char type = toupper( parameterType );
170 switch (type) {
171 case 'D': { is >> newVal.D; } break;
172 case 'I': { is >> newVal.I; } break;
173 default: ;
174 }
175 // PrintToken(); // Print tokens (consumes all tokens)
176 token= Yylex();
177 result = Expression();
178 if( paramERR == 1 ) return 0;
179 if( result.type != CONSTINT) {
180 G4cerr << "Illegal Expression in parameter range." << G4endl;
181 return 0;
182 }
183 if ( result.I ) return 1;
184 G4cerr << "parameter out of range: "<< parameterRange << G4endl;
185 return 0;
186}
187
188
189G4int G4UIparameter::
190TypeCheck(const char* newValue)
191{
192 G4String newValueString(newValue);
193 char type = toupper( parameterType );
194 switch(type) {
195 case 'D':
196 if( IsDouble(newValueString.data())== 0) {
197 G4cerr<<newValue<<": double value expected."
198 << G4endl;
199 return 0;
200 } break;
201 case 'I':
202 if( IsInt(newValueString.data(),20)== 0) {
203 G4cerr<<newValue<<": integer expected."
204 << G4endl;
205 return 0;
206 } break;
207 case 'S': break;
208 case 'B':
209 newValueString.toUpper();
210 if ( newValueString == "Y" || newValueString == "N"
211 ||newValueString == "YES" || newValueString == "NO"
212 ||newValueString == "1" || newValueString == "0"
213 ||newValueString == "T" || newValueString == "F"
214 ||newValueString == "TRUE" || newValueString == "FALSE")
215 return 1;
216 else {
217 G4cerr<<newValue<<": bool expected." << G4endl;
218 return 0;
219 }
220 default: ;
221 }
222 return 1;
223}
224
225
226G4int G4UIparameter::
227IsInt(const char* buf, short maxDigits) // do not allow any std::ws
228{
229 const char* p= buf;
230 G4int length=0;
231 if( *p == '+' || *p == '-') { ++p; }
232 if( isdigit( (G4int)(*p) )) {
233 while( isdigit( (G4int)(*p) )) { ++p; ++length; }
234 if( *p == '\0' ) {
235 if( length > maxDigits) {
236 G4cerr <<"digit length exceeds"<<G4endl;
237 return 0;
238 }
239 return 1;
240 } else {
241 // G4cerr <<"illegal character after int:"<<buf<<G4endl;
242 }
243 } else {
244 // G4cerr <<"illegal int:"<<buf<<G4endl;
245 }
246 return 0;
247}
248
249
250G4int G4UIparameter::
251ExpectExponent(const char* str) // used only by IsDouble()
252{
253 G4int maxExplength;
254 if( IsInt( str, maxExplength=7 )) return 1;
255 else return 0;
256}
257
258G4int G4UIparameter::
259IsDouble(const char* buf) // see state diagram for this spec.
260{
261 const char* p= buf;
262 switch( *p) {
263 case '+': case '-': ++p;
264 if( isdigit(*p) ) {
265 while( isdigit( (G4int)(*p) )) { ++p; }
266 switch ( *p ) {
267 case '\0': return 1; //break;
268 case 'E': case 'e':
269 return ExpectExponent(++p ); //break;
270 case '.': ++p;
271 if( *p == '\0' ) return 1;
272 if( *p == 'e' || *p =='E' ) return ExpectExponent(++p );
273 if( isdigit(*p) ) {
274 while( isdigit( (G4int)(*p) )) { ++p; }
275 if( *p == '\0' ) return 1;
276 if( *p == 'e' || *p =='E') return ExpectExponent(++p);
277 } else return 0; break;
278 default: return 0;
279 }
280 }
281 if( *p == '.' ) { ++p;
282 if( isdigit(*p) ) {
283 while( isdigit( (G4int)(*p) )) { ++p; }
284 if( *p == '\0' ) return 1;
285 if( *p == 'e' || *p =='E') return ExpectExponent(++p);
286 }
287 }
288 break;
289 case '.': ++p;
290 if( isdigit(*p) ) {
291 while( isdigit( (G4int)(*p) )) { ++p; }
292 if( *p == '\0' ) return 1;
293 if( *p == 'e' || *p =='E' ) return ExpectExponent(++p);
294 } break;
295 default: // digit is expected
296 if( isdigit(*p) ) {
297 while( isdigit( (G4int)(*p) )) { ++p; }
298 if( *p == '\0' ) return 1;
299 if( *p == 'e' || *p =='E') return ExpectExponent(++p);
300 if( *p == '.' ) { ++p;
301 if( *p == '\0' ) return 1;
302 if( *p == 'e' || *p =='E') return ExpectExponent(++p);
303 if( isdigit(*p) ) {
304 while( isdigit( (G4int)(*p) )) { ++p; }
305 if( *p == '\0' ) return 1;
306 if( *p == 'e' || *p =='E') return ExpectExponent(++p);
307 }
308 }
309 }
310 }
311 return 0;
312}
313
314
315// ------------------ syntax node functions ------------------
316
317yystype G4UIparameter::
318Expression(void)
319{
320 yystype result;
321 #ifdef DEBUG
322 G4cerr << " Expression()" << G4endl;
323 #endif
324 result = LogicalORExpression();
325 return result;
326}
327
328yystype G4UIparameter::
329LogicalORExpression(void)
330{
331 yystype result;
332 yystype p;
333 p = LogicalANDExpression();
334 if( token != LOGICALOR) return p;
335 if( p.type == CONSTSTRING || p.type == IDENTIFIER ) {
336 G4cerr << "Parameter range: illegal type at '||'" << G4endl;
337 paramERR = 1;
338 }
339 result.I = p.I;
340 while (token == LOGICALOR)
341 {
342 token = Yylex();
343 p = LogicalANDExpression();
344 if( p.type == CONSTSTRING || p.type == IDENTIFIER ) {
345 G4cerr << "Parameter range: illegal type at '||'" <<G4endl;
346 paramERR = 1;
347 }
348 switch (p.type) {
349 case CONSTINT:
350 result.I += p.I;
351 result.type = CONSTINT; break;
352 case CONSTDOUBLE:
353 result.I += (p.D != 0.0);
354 result.type = CONSTINT; break;
355 default:
356 G4cerr << "Parameter range: unknown type"<<G4endl;
357 paramERR = 1;
358 }
359 }
360 return result;
361}
362
363yystype G4UIparameter::
364LogicalANDExpression(void)
365{
366 yystype result;
367 yystype p;
368 p = EqualityExpression();
369 if( token != LOGICALAND) return p;
370 if( p.type == CONSTSTRING || p.type == IDENTIFIER ) {
371 G4cerr << "Parameter range: illegal type at '&&'" << G4endl;
372 paramERR = 1;
373 }
374 result.I = p.I;
375 while (token == LOGICALAND)
376 {
377 token = Yylex();
378 p = EqualityExpression();
379 if( p.type == CONSTSTRING || p.type == IDENTIFIER ) {
380 G4cerr << "Parameter range: illegal type at '&&'" << G4endl;
381 paramERR = 1;
382 }
383 switch (p.type) {
384 case CONSTINT:
385 result.I *= p.I;
386 result.type = CONSTINT; break;
387 case CONSTDOUBLE:
388 result.I *= (p.D != 0.0);
389 result.type = CONSTINT; break;
390 default:
391 G4cerr << "Parameter range: unknown type."<< G4endl;
392 paramERR = 1;
393 }
394 }
395 return result;
396}
397
398
399yystype G4UIparameter::
400EqualityExpression(void)
401{
402 yystype arg1, arg2;
403 G4int operat;
404 yystype result;
405 #ifdef DEBUG
406 G4cerr << " EqualityExpression()" <<G4endl;
407 #endif
408 result = RelationalExpression();
409 if( token==EQ || token==NE ) {
410 operat = token;
411 token = Yylex();
412 arg1 = result;
413 arg2 = RelationalExpression();
414 result.I = Eval2( arg1, operat, arg2 ); // semantic action
415 result.type = CONSTINT;
416 #ifdef DEBUG
417 G4cerr << " return code of Eval2(): " << result.I <<G4endl;
418 #endif
419 } else {
420 if (result.type != CONSTINT && result.type != CONSTDOUBLE) {
421 G4cerr << "Parameter range: error at EqualityExpression"
422 << G4endl;
423 paramERR = 1;
424 }
425 }
426 return result;
427}
428
429
430yystype G4UIparameter::
431RelationalExpression(void)
432{
433 yystype arg1, arg2;
434 G4int operat;
435 yystype result;
436 #ifdef DEBUG
437 G4cerr << " RelationalExpression()" <<G4endl;
438 #endif
439
440 arg1 = AdditiveExpression();
441 if( token==GT || token==GE || token==LT || token==LE ) {
442 operat = token;
443 token = Yylex();
444 arg2 = AdditiveExpression();
445 result.I = Eval2( arg1, operat, arg2 ); // semantic action
446 result.type = CONSTINT;
447 #ifdef DEBUG
448 G4cerr << " return Eval2(): " << G4endl;
449 #endif
450 } else {
451 result = arg1;
452 }
453 #ifdef DEBUG
454 G4cerr <<" return RelationalExpression()" <<G4endl;
455 #endif
456 return result;
457}
458
459yystype G4UIparameter::
460AdditiveExpression(void)
461{ yystype result;
462 result = MultiplicativeExpression();
463 if( token != '+' && token != '-' ) return result;
464 G4cerr << "Parameter range: operator "
465 << (char)token
466 << " is not supported." << G4endl;
467 paramERR = 1;
468 return result;
469}
470
471yystype G4UIparameter::
472MultiplicativeExpression(void)
473{ yystype result;
474 result = UnaryExpression();
475 if( token != '*' && token != '/' && token != '%' ) return result;
476 G4cerr << "Parameter range: operator "
477 << (char)token
478 << " is not supported." << G4endl;
479 paramERR = 1;
480 return result;
481}
482
483yystype G4UIparameter::
484UnaryExpression(void)
485{
486 yystype result;
487 yystype p;
488 #ifdef DEBUG
489 G4cerr <<" UnaryExpression"<< G4endl;
490 #endif
491 switch(token) {
492 case '-':
493 token = Yylex();
494 p = UnaryExpression();
495 if (p.type == CONSTINT) {
496 result.I = - p.I;
497 result.type = CONSTINT;
498 }
499 if (p.type == CONSTDOUBLE) {
500 result.D = - p.D;
501 result.type = CONSTDOUBLE;
502 } break;
503 case '+':
504 token = Yylex();
505 result = UnaryExpression(); break;
506 case '!':
507 token = Yylex();
508 G4cerr << "Parameter range error: "
509 << "operator '!' is not supported (sorry)."
510 << G4endl;
511 paramERR = 1;
512 result = UnaryExpression(); break;
513 default:
514 result = PrimaryExpression();
515 }
516 return result;
517}
518
519
520yystype G4UIparameter::
521PrimaryExpression(void)
522{
523 yystype result;
524 #ifdef DEBUG
525 G4cerr <<" PrimaryExpression" << G4endl;
526 #endif
527 switch (token) {
528 case IDENTIFIER:
529 result.S = yylval.S;
530 result.type = token;
531 token = Yylex(); break;
532 case CONSTINT:
533 result.I = yylval.I;
534 result.type = token;
535 token= Yylex(); break;
536 case CONSTDOUBLE:
537 result.D = yylval.D;
538 result.type = token;
539 token = Yylex(); break;
540 case '(' :
541 token= Yylex();
542 result = Expression();
543 if( token != ')' ) {
544 G4cerr << " ')' expected" << G4endl;
545 paramERR = 1;
546 }
547 token = Yylex();
548 break;
549 default:
550 return result;
551 }
552 return result; // never executed
553}
554
555//---------------- semantic routines ---------------------------------
556
557G4int G4UIparameter::
558Eval2(yystype arg1, G4int op, yystype arg2)
559{
560 if( (arg1.type != IDENTIFIER) && (arg2.type != IDENTIFIER)) {
561 G4cerr << parameterName
562 << ": meaningless comparison "
563 << G4int(arg1.type) << " " << G4int(arg2.type) << G4endl;
564 paramERR = 1;
565 }
566 char type = toupper( parameterType );
567 if( arg1.type == IDENTIFIER) {
568 switch (type) {
569 case 'I':
570 if ( arg2.type == CONSTINT ) {
571 return CompareInt( newVal.I, op, arg2.I );
572 } else {
573 G4cerr << "integer operand expected for "
574 << parameterRange << '.'
575 << G4endl;
576 }
577 break;
578 case 'D':
579 if ( arg2.type == CONSTDOUBLE ) {
580 return CompareDouble( newVal.D, op, arg2.D );
581 } else
582 if ( arg2.type == CONSTINT ) { // integral promotion
583 return CompareDouble( newVal.D, op, arg2.I );
584 } break;
585 default: ;
586 }
587 }
588 if( arg2.type == IDENTIFIER) {
589 switch (type) {
590 case 'I':
591 if ( arg1.type == CONSTINT ) {
592 return CompareInt( arg1.I, op, newVal.I );
593 } else {
594 G4cerr << "integer operand expected for "
595 << parameterRange << '.'
596 << G4endl;
597 }
598 break;
599 case 'D':
600 if ( arg1.type == CONSTDOUBLE ) {
601 return CompareDouble( arg1.D, op, newVal.D );
602 } else
603 if ( arg1.type == CONSTINT ) { // integral promotion
604 return CompareDouble( arg1.I, op, newVal.D );
605 } break;
606 default: ;
607 }
608 }
609 G4cerr << "no param name is specified at the param range."<<G4endl;
610 return 0;
611}
612
613G4int G4UIparameter::
614CompareInt(G4int arg1, G4int op, G4int arg2)
615{
616 G4int result=-1;
617 G4String opr;
618 switch (op) {
619 case GT: result = ( arg1 > arg2); opr= ">" ; break;
620 case GE: result = ( arg1 >= arg2); opr= ">="; break;
621 case LT: result = ( arg1 < arg2); opr= "<" ; break;
622 case LE: result = ( arg1 <= arg2); opr= "<="; break;
623 case EQ: result = ( arg1 == arg2); opr= "=="; break;
624 case NE: result = ( arg1 != arg2); opr= "!="; break;
625 default:
626 G4cerr << "Parameter range: error at CompareInt" << G4endl;
627 paramERR = 1;
628 }
629 #ifdef DEBUG
630 G4cerr << "CompareInt "
631 << arg1 << " " << opr << arg2
632 << " result: " << result
633 << G4endl;
634 #endif
635 return result;
636}
637
638G4int G4UIparameter::
639CompareDouble(G4double arg1, G4int op, G4double arg2)
640{
641 G4int result=-1;
642 G4String opr;
643 switch (op) {
644 case GT: result = ( arg1 > arg2); opr= ">"; break;
645 case GE: result = ( arg1 >= arg2); opr= ">="; break;
646 case LT: result = ( arg1 < arg2); opr= "<"; break;
647 case LE: result = ( arg1 <= arg2); opr= "<="; break;
648 case EQ: result = ( arg1 == arg2); opr= "=="; break;
649 case NE: result = ( arg1 != arg2); opr= "!="; break;
650 default:
651 G4cerr << "Parameter range: error at CompareDouble" << G4endl;
652 paramERR = 1;
653 }
654 #ifdef DEBUG
655 G4cerr << "CompareDouble "
656 << arg1 <<" " << opr << " "<< arg2
657 << " result: " << result
658 << G4endl;
659 #endif
660 return result;
661}
662
663// --------------------- utility functions --------------------------
664
665tokenNum G4UIparameter::
666Yylex() // reads input and returns token number KR486
667{ // (returns EOF)
668 G4int c;
669 G4String buf;
670
671 while(( c= G4UIpGetc())==' '|| c=='\t' || c== '\n' )
672 ;
673 if (c== EOF)
674 return (tokenNum)EOF; // KR488
675 buf= "";
676 if (isdigit(c) || c== '.') { // I or D
677 do {
678 buf += G4String((unsigned char)c);
679 c=G4UIpGetc();
680 } while (c=='.' || isdigit(c) ||
681 c=='e' || c=='E' || c=='+' || c=='-');
682 G4UIpUngetc(c);
683 const char* t = buf;
684 std::istringstream is(t);
685 if ( IsInt(buf.data(),20) ) {
686 is >> yylval.I;
687 return CONSTINT;
688 } else
689 if ( IsDouble(buf.data()) ) {
690 is >> yylval.D;
691 return CONSTDOUBLE;
692 } else {
693 G4cerr << buf<<": numeric format error."<<G4endl;
694 }
695 }
696 buf="";
697 if (isalpha(c)|| c=='_') { // IDENTIFIER
698 do {
699 buf += G4String((unsigned char)c);
700 } while ((c=G4UIpGetc()) != EOF && (isalnum(c) || c=='_'));
701 G4UIpUngetc(c);
702 if( buf == parameterName ) {
703 yylval.S =buf;
704 return IDENTIFIER;
705 } else {
706 G4cerr << buf << " is not a parameter name."<< G4endl;
707 paramERR = 1;
708 }
709 }
710 switch (c) {
711 case '>': return (tokenNum) Follow('=', GE, GT);
712 case '<': return (tokenNum) Follow('=', LE, LT);
713 case '=': return (tokenNum) Follow('=', EQ, '=');
714 case '!': return (tokenNum) Follow('=', NE, '!');
715 case '|': return (tokenNum) Follow('|', LOGICALOR, '|');
716 case '&': return (tokenNum) Follow('&', LOGICALAND, '&');
717 default:
718 return (tokenNum) c;
719 }
720}
721
722
723G4int G4UIparameter::
724Follow(G4int expect, G4int ifyes, G4int ifno)
725{
726 G4int c = G4UIpGetc();
727 if ( c== expect)
728 return ifyes;
729 G4UIpUngetc(c);
730 return ifno;
731}
732
733//------------------ low level routines -----------------------------
734G4int G4UIparameter::
735G4UIpGetc() { // emulation of getc()
736 G4int length = parameterRange.length();
737 if( bp < length)
738 return parameterRange(bp++);
739 else
740 return EOF;
741}
742G4int G4UIparameter::
743G4UIpUngetc(G4int c) { // emulation of ungetc()
744 if (c<0) return -1;
745 if (bp >0 && c == parameterRange(bp-1)) {
746 --bp;
747 } else {
748 G4cerr << "G4UIpUngetc() failed." << G4endl;
749 G4cerr << "bp="<<bp <<" c="<<c
750 << " pR(bp-1)=" << parameterRange(bp-1)
751 << G4endl;
752 paramERR = 1;
753 return -1;
754 }
755 return 0;
756}
757// ***** end of CheckNewValue() related code ******
758
@ GT
Definition: Evaluator.cc:66
@ LT
Definition: Evaluator.cc:66
@ NE
Definition: Evaluator.cc:66
@ GE
Definition: Evaluator.cc:66
@ LE
Definition: Evaluator.cc:66
@ EQ
Definition: Evaluator.cc:66
double G4double
Definition: G4Types.hh:64
int G4int
Definition: G4Types.hh:66
bool G4bool
Definition: G4Types.hh:67
@ fParameterOutOfCandidates
@ fParameterUnreadable
@ fParameterOutOfRange
tokenNum
Definition: G4UItokenNum.hh:37
@ LOGICALOR
Definition: G4UItokenNum.hh:51
@ IDENTIFIER
Definition: G4UItokenNum.hh:39
@ LOGICALAND
Definition: G4UItokenNum.hh:52
@ NONE
Definition: G4UItokenNum.hh:38
@ CONSTSTRING
Definition: G4UItokenNum.hh:43
@ CONSTINT
Definition: G4UItokenNum.hh:40
@ CONSTDOUBLE
Definition: G4UItokenNum.hh:41
#define G4endl
Definition: G4ios.hh:52
G4DLLIMPORT std::ostream G4cerr
G4DLLIMPORT std::ostream G4cout
G4bool isNull() const
const char * data() const
void SetDefaultValue(const char *theDefaultValue)
G4int CheckNewValue(const char *newValue)
G4int operator==(const G4UIparameter &right) const
G4int operator!=(const G4UIparameter &right) const
G4int I
Definition: G4UItokenNum.hh:64
tokenNum type
Definition: G4UItokenNum.hh:62
G4double D
Definition: G4UItokenNum.hh:63
G4String S
Definition: G4UItokenNum.hh:66