Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4ScoreQuantityMessenger.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// Modifications
31// 08-Oct-2010 T.Aso remove unit of G4PSPassageCellCurrent.
32// 24-Mar-2011 T.Aso Add StepChecker for debugging.
33// 24-Mar-2011 T.Aso Size and segmentation for replicated cylinder.
34// 01-Jun-2012 T.Aso Support weighted/dividedByArea options
35// in flatCurrent and flatFulx commands.
36// ---------------------------------------------------------------------
37
39#include "G4ScoringManager.hh"
40#include "G4VScoringMesh.hh"
41
42#include "G4PSCellCharge3D.hh"
43#include "G4PSCellFlux3D.hh"
48#include "G4PSDoseDeposit3D.hh"
50#include "G4PSNofStep3D.hh"
51#include "G4PSNofSecondary3D.hh"
52//
53#include "G4PSTrackLength3D.hh"
62#include "G4PSNofCollision3D.hh"
63#include "G4PSPopulation3D.hh"
64#include "G4PSTrackCounter3D.hh"
65#include "G4PSTermination3D.hh"
67//
68// For debug purpose
69#include "G4PSStepChecker3D.hh"
70
71#include "G4SDChargedFilter.hh"
72#include "G4SDNeutralFilter.hh"
74#include "G4SDParticleFilter.hh"
76
77#include "G4UIdirectory.hh"
80#include "G4UIcmdWithAString.hh"
81#include "G4UIcmdWithABool.hh"
84#include "G4UIcommand.hh"
85#include "G4Tokenizer.hh"
86#include "G4UnitsTable.hh"
87
89:fSMan(SManager)
90{
91 QuantityCommands();
92 FilterCommands();
93}
94
95void G4ScoreQuantityMessenger::FilterCommands()
96{
97 G4UIparameter* param;
98
99 //
100 // Filter commands
101 filterDir = new G4UIdirectory("/score/filter/");
102 filterDir->SetGuidance(" Scoring filter commands.");
103 //
104 fchargedCmd = new G4UIcmdWithAString("/score/filter/charged",this);
105 fchargedCmd->SetGuidance("Charged particle filter.");
106 fchargedCmd->SetParameterName("fname",false);
107 //
108 fneutralCmd = new G4UIcmdWithAString("/score/filter/neutral",this);
109 fneutralCmd->SetGuidance("Neutral particle filter.");
110 fneutralCmd->SetParameterName("fname",false);
111 //
112 fkinECmd = new G4UIcommand("/score/filter/kineticEnergy",this);
113 fkinECmd->SetGuidance("Kinetic energy filter.");
114 fkinECmd->SetGuidance("[usage] /score/filter/kineticEnergy fname Elow Ehigh unit");
115 fkinECmd->SetGuidance(" fname :(String) Filter Name ");
116 fkinECmd->SetGuidance(" Elow :(Double) Lower edge of kinetic energy");
117 fkinECmd->SetGuidance(" Ehigh :(Double) Higher edge of kinetic energy");
118 fkinECmd->SetGuidance(" unit :(String) unit of given kinetic energy");
119 param = new G4UIparameter("fname",'s',false);
120 fkinECmd->SetParameter(param);
121 param = new G4UIparameter("elow",'d',true);
122 param->SetDefaultValue("0.0");
123 fkinECmd->SetParameter(param);
124 param = new G4UIparameter("ehigh",'d',false);
125 fkinECmd->SetParameter(param);
126 G4String smax = DtoS(DBL_MAX);
127 param->SetDefaultValue(smax);
128 param = new G4UIparameter("unit",'s',false);
129 param->SetDefaultValue("keV");
130 fkinECmd->SetParameter(param);
131 //
132 fparticleCmd = new G4UIcommand("/score/filter/particle",this);
133 fparticleCmd->SetGuidance("Particle filter.");
134 fparticleCmd->SetGuidance("[usage] /score/filter/particle fname p0 .. pn");
135 fparticleCmd->SetGuidance(" fname :(String) Filter Name ");
136 fparticleCmd->SetGuidance(" p0 .. pn :(String) particle names");
137 param = new G4UIparameter("fname",'s',false);
138 fparticleCmd->SetParameter(param);
139 param = new G4UIparameter("particlelist",'s',false);
140 param->SetDefaultValue("");
141 fparticleCmd->SetParameter(param);
142 //
143 //
144 //
145 fparticleKinECmd = new G4UIcommand("/score/filter/particleWithKineticEnergy",this);
146 fparticleKinECmd->SetGuidance("Particle with kinetic energy filter.");
147 fparticleKinECmd->SetGuidance("[usage] /score/filter/particleWithKineticEnergy fname Elow Ehigh unit p0 .. pn");
148 fparticleKinECmd->SetGuidance(" fname :(String) Filter Name ");
149 fparticleKinECmd->SetGuidance(" Elow :(Double) Lower edge of kinetic energy");
150 fparticleKinECmd->SetGuidance(" Ehigh :(Double) Higher edge of kinetic energy");
151 fparticleKinECmd->SetGuidance(" unit :(String) unit of given kinetic energy");
152 fparticleKinECmd->SetGuidance(" p0 .. pn :(String) particle names");
153 param = new G4UIparameter("fname",'s',false);
154 fparticleKinECmd->SetParameter(param);
155 param = new G4UIparameter("elow",'d',false);
156 param->SetDefaultValue("0.0");
157 fparticleKinECmd->SetParameter(param);
158 param = new G4UIparameter("ehigh",'d',true);
159 param->SetDefaultValue(smax);
160 fparticleKinECmd->SetParameter(param);
161 param = new G4UIparameter("unit",'s',true);
162 param->SetDefaultValue("keV");
163 fparticleKinECmd->SetParameter(param);
164 param = new G4UIparameter("particlelist",'s',false);
165 param->SetDefaultValue("");
166 fparticleKinECmd->SetParameter(param);
167 //
168 //
169}
170
172{
173 delete quantityDir;
174 delete qTouchCmd;
175 delete qGetUnitCmd;
176 delete qSetUnitCmd;
177
178 //
179 delete qCellChgCmd;
180 delete qCellFluxCmd;
181 delete qPassCellFluxCmd;
182 delete qeDepCmd;
183 delete qdoseDepCmd;
184 delete qnOfStepCmd;
185 delete qnOfSecondaryCmd;
186 //
187 delete qTrackLengthCmd;
188 delete qPassCellCurrCmd;
189 delete qPassTrackLengthCmd;
190 delete qFlatSurfCurrCmd;
191 delete qFlatSurfFluxCmd;
192// delete qSphereSurfCurrCmd;
193// delete qSphereSurfFluxCmd;
194// delete qCylSurfCurrCmd;
195// delete qCylSurfFluxCmd;
196 delete qNofCollisionCmd;
197 delete qPopulationCmd;
198 delete qTrackCountCmd;
199 delete qTerminationCmd;
200 delete qMinKinEAtGeneCmd;
201 //
202 delete qStepCheckerCmd;
203 //
204 delete filterDir;
205 delete fchargedCmd;
206 delete fneutralCmd;
207 delete fkinECmd;
208 delete fparticleCmd;
209 delete fparticleKinECmd;
210}
211
213{
214 //
215 // Get Current Mesh
216 //
217 G4VScoringMesh* mesh = fSMan->GetCurrentMesh();
218 if(!mesh)
219 {
220 G4cerr << "ERROR : No mesh is currently open. Open/create a mesh first. Command ignored." << G4endl;
221 return;
222 }
223 // Tokens
224 G4TokenVec token;
225 FillTokenVec(newVal,token);
226 //
227 // Commands for Current Mesh
228 if(command==qTouchCmd) {
229 mesh->SetCurrentPrimitiveScorer(newVal);
230 } else if(command == qGetUnitCmd ){
231 G4cout << "Unit: "<< mesh->GetCurrentPSUnit() <<G4endl;
232 } else if(command == qSetUnitCmd ){
233 mesh->SetCurrentPSUnit(newVal);
234 } else if(command== qCellChgCmd) {
235 if ( CheckMeshPS(mesh,token[0]) ){
236 G4PSCellCharge3D* ps = new G4PSCellCharge3D(token[0]);
237 ps->SetUnit(token[1]);
238 mesh->SetPrimitiveScorer(ps);
239 }
240 } else if(command== qCellFluxCmd) {
241 if ( CheckMeshPS(mesh,token[0]) ){
242 if( mesh->GetShape()==boxMesh ) {
243 G4PSCellFlux3D* ps = new G4PSCellFlux3D(token[0]);
244 ps->SetUnit(token[1]);
245 mesh->SetPrimitiveScorer(ps);
246 } else if( mesh->GetShape()==cylinderMesh ) {
248 new G4PSCellFluxForCylinder3D(token[0]);
249 ps->SetUnit(token[1]);
250 G4ThreeVector msize = mesh->GetSize(); // gevin in R Z N/A
251 ps->SetCylinderSize(msize[0],msize[1]); // given in dr dz
252 G4int nSeg[3];
253 mesh->GetNumberOfSegments(nSeg);
254 ps->SetNumberOfSegments(nSeg);
255 mesh->SetPrimitiveScorer(ps);
256 }
257 }
258 } else if(command== qPassCellFluxCmd) {
259 if ( CheckMeshPS(mesh,token[0]) ){
260 if( mesh->GetShape()==boxMesh ) {
262 ps->SetUnit(token[1]);
263 mesh->SetPrimitiveScorer(ps);
264 } else if( mesh->GetShape()==cylinderMesh ) {
267 ps->SetUnit(token[1]);
268 G4ThreeVector msize = mesh->GetSize(); // gevin in R Z N/A
269 ps->SetCylinderSize(msize[0],msize[1]); // given in dr dz
270 G4int nSeg[3];
271 mesh->GetNumberOfSegments(nSeg);
272 ps->SetNumberOfSegments(nSeg);
273 mesh->SetPrimitiveScorer(ps);
274 }
275 }
276 } else if(command==qeDepCmd) {
277 if ( CheckMeshPS(mesh,token[0]) ){
278 G4PSEnergyDeposit3D* ps =new G4PSEnergyDeposit3D(token[0]);
279 ps->SetUnit(token[1]);
280 mesh->SetPrimitiveScorer(ps);
281 }
282 } else if(command== qdoseDepCmd) {
283 if ( CheckMeshPS(mesh,token[0]) ){
284 if( mesh->GetShape()==boxMesh ) {
285 G4PSDoseDeposit3D* ps = new G4PSDoseDeposit3D(token[0]);
286 ps->SetUnit(token[1]);
287 mesh->SetPrimitiveScorer(ps);
288 } else if( mesh->GetShape()==cylinderMesh ) {
290 new G4PSDoseDepositForCylinder3D(token[0]);
291 ps->SetUnit(token[1]);
292 G4ThreeVector msize = mesh->GetSize(); // gevin in R Z N/A
293 ps->SetCylinderSize(msize[0],msize[1]); // given in dr dz
294 G4int nSeg[3];
295 mesh->GetNumberOfSegments(nSeg);
296 ps->SetNumberOfSegments(nSeg);
297 mesh->SetPrimitiveScorer(ps);
298 }
299 }
300 } else if(command== qnOfStepCmd) {
301 if ( CheckMeshPS(mesh,token[0]) ){
302 G4PSNofStep3D* ps = new G4PSNofStep3D(token[0]);
303 mesh->SetPrimitiveScorer(ps);
304 }
305 } else if(command== qnOfSecondaryCmd) {
306 if ( CheckMeshPS(mesh,token[0]) ){
307 G4PSNofSecondary3D* ps =new G4PSNofSecondary3D(token[0]);
308 mesh->SetPrimitiveScorer(ps);
309 }
310 } else if(command== qTrackLengthCmd) {
311 if ( CheckMeshPS(mesh,token[0]) ){
312 G4PSTrackLength3D* ps = new G4PSTrackLength3D(token[0]);
313 ps->Weighted(StoB(token[1]));
314 ps->MultiplyKineticEnergy(StoB(token[2]));
315 ps->DivideByVelocity(StoB(token[3]));
316 ps->SetUnit(token[4]);
317 mesh->SetPrimitiveScorer(ps);
318 }
319 } else if(command== qPassCellCurrCmd){
320 if( CheckMeshPS(mesh,token[0]) ) {
322 ps->Weighted(StoB(token[1]));
323 //ps->SetUnit(token[2]);
324 mesh->SetPrimitiveScorer(ps);
325 }
326 } else if(command== qPassTrackLengthCmd){
327 if( CheckMeshPS(mesh,token[0]) ) {
329 ps->Weighted(StoB(token[1]));
330 mesh->SetPrimitiveScorer(ps);
331 }
332 } else if(command== qFlatSurfCurrCmd){
333 if( CheckMeshPS(mesh,token[0])) {
335 new G4PSFlatSurfaceCurrent3D(token[0],StoI(token[1]));
336 ps->Weighted(StoB(token[2]));
337 ps->DivideByArea(StoB(token[3]));
338 if ( StoB(token[3]) ){
339 ps->SetUnit(token[4]);
340 }else{
341 ps->SetUnit("");
342 }
343 mesh->SetPrimitiveScorer(ps);
344 }
345 } else if(command== qFlatSurfFluxCmd){
346 if( CheckMeshPS(mesh, token[0] )) {
347 G4PSFlatSurfaceFlux3D* ps = new G4PSFlatSurfaceFlux3D(token[0],StoI(token[1]));
348 ps->Weighted(StoB(token[2]));
349 ps->DivideByArea(StoB(token[3]));
350 if ( StoB(token[3]) ){
351 ps->SetUnit(token[4]);
352 }else{
353 ps->SetUnit("");
354 }
355 mesh->SetPrimitiveScorer(ps);
356 }
357// } else if(command== qSphereSurfCurrCmd){
358// if( CheckMeshPS(mesh, token[0] )) {
359// G4PSSphereSurfaceCurrent3D* ps =
360// new G4PSSphereSurfaceCurrent3D(token[0],StoI(token[1]));
361// ps->Weighted(StoB(token[2]));
362// ps->DivideByArea(StoB(token[3]));
363// if ( StoB(token[3]) ){
364// ps->SetUnit(token[4]);
365// }else{
366// ps->SetUnit("");
367// }
368// mesh->SetPrimitiveScorer(ps);
369// }
370// } else if(command== qSphereSurfFluxCmd){
371// if( CheckMeshPS(mesh,token[0])) {
372// G4PSSphereSurfaceFlux3D* ps = new G4PSSphereSurfaceFlux3D(token[0], StoI(token[1]));
373// ps->Weighted(StoB(token[2]));
374// ps->DivideByArea(StoB(token[3]));
375// if ( StoB(token[3]) ){
376// ps->SetUnit(token[4]);
377// }else{
378// ps->SetUnit("");
379// }
380// mesh->SetPrimitiveScorer(ps);
381// }
382// } else if(command== qCylSurfCurrCmd){
383// if( CheckMeshPS(mesh, token[0] ) ) {
384// G4PSCylinderSurfaceCurrent3D* ps =
385// new G4PSCylinderSurfaceCurrent3D(token[0],StoI(token[1]));
386// ps->Weighted(StoB(token[2]));
387// ps->DivideByArea(StoB(token[3]));
388// if ( StoB(token[3]) ){
389// ps->SetUnit(token[4]);
390// }else{
391// ps->SetUnit("");
392// }
393// ps->SetUnit(token[4]);
394// mesh->SetPrimitiveScorer(ps);
395// }
396// } else if(command== qCylSurfFluxCmd){
397// if( CheckMeshPS(mesh, token[0] ) {
398// G4PSCylinerSurfaceFlux3D* ps =new G4PSCylinderSurfaceFlux3D(token[0], StoI(token[1]));
399// ps->Weighted(StoB(token[2]));
400// ps->DivideByArea(StoB(token[3]));
401// if ( StoB(token[3]) ){
402// ps->SetUnit(token[4]);
403// }else{
404// ps->SetUnit("");
405// }
406// mesh->SetPrimitiveScorer(ps);
407// }
408 } else if(command== qNofCollisionCmd){
409 if( CheckMeshPS(mesh,token[0])) {
410 G4PSNofCollision3D* ps =new G4PSNofCollision3D(token[0]);
411 ps->Weighted(StoB(token[1]));
412 mesh->SetPrimitiveScorer(ps);
413 }
414 } else if(command== qPopulationCmd){
415 if( CheckMeshPS(mesh,token[0]) ) {
416 G4PSPopulation3D* ps =new G4PSPopulation3D(token[0]);
417 ps->Weighted(StoB(token[1]));
418 mesh->SetPrimitiveScorer(ps);
419 }
420 } else if(command== qTrackCountCmd){
421 if( CheckMeshPS(mesh,token[0])) {
422 G4PSTrackCounter3D* ps =new G4PSTrackCounter3D(token[0],StoI(token[1]));
423 mesh->SetPrimitiveScorer(ps);
424 }
425 } else if(command== qTerminationCmd){
426 if( CheckMeshPS(mesh,token[0])) {
427 G4PSTermination3D* ps =new G4PSTermination3D(token[0]);
428 ps->Weighted(StoB(token[1]));
429 mesh->SetPrimitiveScorer(ps);
430 }
431
432 } else if(command== qMinKinEAtGeneCmd){
433 if( CheckMeshPS(mesh,token[0]) ){
435 ps->SetUnit(token[1]);
436 mesh->SetPrimitiveScorer(ps);
437 }
438 } else if(command== qStepCheckerCmd){
439 if( CheckMeshPS(mesh,token[0]) ){
440 G4PSStepChecker3D* ps =new G4PSStepChecker3D(token[0]);
441 mesh->SetPrimitiveScorer(ps);
442 }
443
444 //
445 // Filters
446 //
447 }else if(command== fchargedCmd){
448 if(!mesh->IsCurrentPrimitiveScorerNull()) {
449 mesh->SetFilter(new G4SDChargedFilter(token[0]));
450 } else {
451 G4cout << "WARNING[" << fchargedCmd->GetCommandPath()
452 << "] : Current quantity is not set. Set or touch a quantity first." << G4endl;
453 }
454 }else if(command== fneutralCmd){
455 if(!mesh->IsCurrentPrimitiveScorerNull()) {
456 mesh->SetFilter(new G4SDNeutralFilter(token[0]));
457 } else {
458 G4cout << "WARNING[" << fneutralCmd->GetCommandPath()
459 << "] : Current quantity is not set. Set or touch a quantity first." << G4endl;
460 }
461 }else if(command== fkinECmd){
462 if(!mesh->IsCurrentPrimitiveScorerNull()) {
463 G4String& name = token[0];
464 G4double elow = StoD(token[1]);
465 G4double ehigh = StoD(token[2]);
466 mesh->SetFilter(new G4SDKineticEnergyFilter(name,elow,ehigh));
467 } else {
468 G4cout << "WARNING[" << fkinECmd->GetCommandPath()
469 << "] : Current quantity is not set. Set or touch a quantity first." << G4endl;
470 }
471 }else if(command== fparticleKinECmd){
472 if(!mesh->IsCurrentPrimitiveScorerNull()) {
473 FParticleWithEnergyCommand(mesh,token);
474 } else {
475 G4cout << "WARNING[" << fparticleKinECmd->GetCommandPath()
476 << "] : Current quantity is not set. Set or touch a quantity first." << G4endl;
477 }
478 } else if(command==fparticleCmd) {
479 if(!mesh->IsCurrentPrimitiveScorerNull()) {
480 FParticleCommand(mesh,token);
481 } else {
482 G4cout << "WARNING[" << fparticleCmd->GetCommandPath()
483 << "] : Current quantity is not set. Set or touch a quantity first." << G4endl;
484 }
485 }
486}
487
489{
490 G4String val;
491
492 return val;
493}
494
496
497 G4Tokenizer next(newValues);
498 G4String val;
499 while ( !(val = next()).isNull() ) {
500 token.push_back(val);
501 }
502}
503
504
506 //
507 // Filter name
508 G4String name = token[0];
509 //
510 // particle list
511 std::vector<G4String> pnames;
512 for ( G4int i = 1; i<(G4int)token.size(); i++){
513 pnames.push_back(token[i]);
514 }
515 //
516 // Attach Filter
517 mesh->SetFilter(new G4SDParticleFilter(name,pnames));
518}
519
521 G4String& name = token[0];
522 G4double elow = StoD(token[1]);
523 G4double ehigh= StoD(token[2]);
524 G4double unitVal = G4UnitDefinition::GetValueOf(token[3]);
526 new G4SDParticleWithEnergyFilter(name,elow*unitVal,ehigh*unitVal);
527 for ( G4int i = 4; i < (G4int)token.size(); i++){
528 filter->add(token[i]);
529 }
530 mesh->SetFilter(filter);
531}
532
534 if(!mesh->FindPrimitiveScorer(psname)) {
535 return true;
536 } else {
537 G4cout << "WARNING[" << qTouchCmd->GetCommandPath()
538 << "] : Quantity name, \"" << psname << "\", is already existing." << G4endl;
540 return false;
541 }
542}
std::vector< G4String > G4TokenVec
double G4double
Definition: G4Types.hh:64
int G4int
Definition: G4Types.hh:66
bool G4bool
Definition: G4Types.hh:67
@ boxMesh
@ cylinderMesh
#define G4endl
Definition: G4ios.hh:52
G4DLLIMPORT std::ostream G4cerr
G4DLLIMPORT std::ostream G4cout
virtual void SetUnit(const G4String &unit)
void SetCylinderSize(G4double dr, G4double dz)
virtual void SetUnit(const G4String &unit)
void SetCylinderSize(G4double dr, G4double dz)
virtual void SetUnit(const G4String &unit)
virtual void SetUnit(const G4String &unit)
void DivideByArea(G4bool flg=true)
void Weighted(G4bool flg=true)
virtual void SetUnit(const G4String &unit)
void Weighted(G4bool flg=true)
void DivideByArea(G4bool flg=true)
virtual void SetUnit(const G4String &unit)
virtual void SetUnit(const G4String &unit)
void Weighted(G4bool flg=true)
void Weighted(G4bool flg=true)
void SetCylinderSize(G4double dr, G4double dz)
virtual void SetUnit(const G4String &unit)
void Weighted(G4bool flg=true)
void Weighted(G4bool flg=true)
void Weighted(G4bool flg=true)
virtual void SetUnit(const G4String &unit)
void MultiplyKineticEnergy(G4bool flg=true)
void Weighted(G4bool flg=true)
void DivideByVelocity(G4bool flg=true)
void add(const G4String &particleName)
G4bool CheckMeshPS(G4VScoringMesh *mesh, G4String &psname)
void FParticleWithEnergyCommand(G4VScoringMesh *mesh, G4TokenVec &token)
G4String GetCurrentValue(G4UIcommand *)
void SetNewValue(G4UIcommand *command, G4String newValues)
G4ScoreQuantityMessenger(G4ScoringManager *SManager)
void FillTokenVec(G4String newValues, G4TokenVec &token)
void FParticleCommand(G4VScoringMesh *mesh, G4TokenVec &token)
G4VScoringMesh * GetCurrentMesh() const
void SetParameterName(const char *theName, G4bool omittable, G4bool currentAsDefault=false)
const G4String & GetCommandPath() const
Definition: G4UIcommand.hh:134
void SetParameter(G4UIparameter *const newParameter)
Definition: G4UIcommand.hh:147
void SetGuidance(const char *aGuidance)
Definition: G4UIcommand.hh:156
G4int StoI(G4String s)
G4String DtoS(G4double a)
G4double StoD(G4String s)
G4bool StoB(G4String s)
void SetDefaultValue(const char *theDefaultValue)
static G4double GetValueOf(const G4String &)
void SetFilter(G4VSDFilter *filter)
void SetNullToCurrentPrimitiveScorer()
G4ThreeVector GetSize() const
MeshShape GetShape() const
void GetNumberOfSegments(G4int nSegment[3])
void SetCurrentPSUnit(const G4String &unit)
void SetCurrentPrimitiveScorer(const G4String &name)
void SetPrimitiveScorer(G4VPrimitiveScorer *ps)
G4String GetCurrentPSUnit()
G4bool IsCurrentPrimitiveScorerNull()
G4bool FindPrimitiveScorer(const G4String &psname)
#define DBL_MAX
Definition: templates.hh:83