Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/digits_hits/utils/src/G4ScoringMessenger.cc

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

Diff markup

Differences between /digits_hits/utils/src/G4ScoringMessenger.cc (Version 11.3.0) and /digits_hits/utils/src/G4ScoringMessenger.cc (Version 5.0)


  1 //                                                  1 
  2 // *******************************************    
  3 // * License and Disclaimer                       
  4 // *                                              
  5 // * The  Geant4 software  is  copyright of th    
  6 // * the Geant4 Collaboration.  It is provided    
  7 // * conditions of the Geant4 Software License    
  8 // * LICENSE and available at  http://cern.ch/    
  9 // * include a list of copyright holders.         
 10 // *                                              
 11 // * Neither the authors of this software syst    
 12 // * institutes,nor the agencies providing fin    
 13 // * work  make  any representation or  warran    
 14 // * regarding  this  software system or assum    
 15 // * use.  Please see the license in the file     
 16 // * for the full disclaimer and the limitatio    
 17 // *                                              
 18 // * This  code  implementation is the result     
 19 // * technical work of the GEANT4 collaboratio    
 20 // * By using,  copying,  modifying or  distri    
 21 // * any work based  on the software)  you  ag    
 22 // * use  in  resulting  scientific  publicati    
 23 // * acceptance of all terms of the Geant4 Sof    
 24 // *******************************************    
 25 //                                                
 26 // G4ScoringMessenger                             
 27 // -------------------------------------------    
 28                                                   
 29 #include "G4ScoringMessenger.hh"                  
 30 #include "G4ScoringManager.hh"                    
 31 #include "G4VScoringMesh.hh"                      
 32 #include "G4ScoringBox.hh"                        
 33 #include "G4ScoringCylinder.hh"                   
 34 #include "G4ScoringRealWorld.hh"                  
 35 #include "G4ScoringProbe.hh"                      
 36                                                   
 37 #include "G4UIdirectory.hh"                       
 38 #include "G4UIcmdWithoutParameter.hh"             
 39 #include "G4UIcmdWithAnInteger.hh"                
 40 #include "G4UIcmdWithAString.hh"                  
 41 #include "G4UIcmdWithABool.hh"                    
 42 #include "G4UIcmdWithADoubleAndUnit.hh"           
 43 #include "G4UIcmdWith3VectorAndUnit.hh"           
 44 #include "G4UIcommand.hh"                         
 45 #include "G4UIparameter.hh"                       
 46 #include "G4Tokenizer.hh"                         
 47 #include "G4UnitsTable.hh"                        
 48 #include "G4VScoreColorMap.hh"                    
 49                                                   
 50 #include "G4VPrimitivePlotter.hh"                 
 51 #include "G4VScoreHistFiller.hh"                  
 52                                                   
 53 G4ScoringMessenger::G4ScoringMessenger(G4Scori    
 54   : fSMan(SManager)                               
 55 {                                                 
 56   G4UIparameter* param = nullptr;                 
 57                                                   
 58   scoreDir = new G4UIdirectory("/score/");        
 59   scoreDir->SetGuidance("Interactive scoring c    
 60                                                   
 61   listCmd = new G4UIcmdWithoutParameter("/scor    
 62   listCmd->SetGuidance("List scoring worlds.")    
 63                                                   
 64   dumpCmd = new G4UIcmdWithoutParameter("/scor    
 65   dumpCmd->SetGuidance("Dump results of scorer    
 66                                                   
 67   verboseCmd = new G4UIcmdWithAnInteger("/scor    
 68   verboseCmd->SetGuidance("Verbosity.");          
 69   verboseCmd->SetGuidance("  0) errors or warn    
 70   verboseCmd->SetGuidance("  1) information wi    
 71                                                   
 72   meshCreateDir = new G4UIdirectory("/score/cr    
 73   meshCreateDir->SetGuidance("  Mesh creation     
 74   //                                              
 75   // Mesh commands                                
 76   meshBoxCreateCmd = new G4UIcmdWithAString("/    
 77   meshBoxCreateCmd->SetGuidance("Create scorin    
 78   meshBoxCreateCmd->SetParameterName("MeshName    
 79   //                                              
 80   meshCylinderCreateCmd =                         
 81     new G4UIcmdWithAString("/score/create/cyli    
 82   meshCylinderCreateCmd->SetGuidance("Create s    
 83   meshCylinderCreateCmd->SetParameterName("Mes    
 84                                                   
 85   meshRWLogVolCreateCmd =                         
 86     new G4UIcommand("/score/create/realWorldLo    
 87   meshRWLogVolCreateCmd->SetGuidance(             
 88     "Define scorers to a logical volume define    
 89   meshRWLogVolCreateCmd->SetGuidance(             
 90     "  - Name of the specified logical volume     
 91   meshRWLogVolCreateCmd->SetGuidance(             
 92     "  - /score/mesh commands do not affect fo    
 93   meshRWLogVolCreateCmd->SetGuidance(             
 94     "  - If copyNumberLevel is set, the copy n    
 95   meshRWLogVolCreateCmd->SetGuidance(             
 96     "    in the geometrical hierarchy is used     
 97   param = new G4UIparameter("logVol", 's', fal    
 98   meshRWLogVolCreateCmd->SetParameter(param);     
 99   param = new G4UIparameter("copyNumberLevel",    
100   param->SetParameterRange("copyNumberLevel>=0    
101   param->SetDefaultValue(0);                      
102   meshRWLogVolCreateCmd->SetParameter(param);     
103   //                                              
104   probeCreateCmd = new G4UIcommand("/score/cre    
105   probeCreateCmd->SetGuidance("Define scoring     
106   probeCreateCmd->SetGuidance(                    
107     "  halfSize defines the half-width of the     
108   param = new G4UIparameter("pname", 's', fals    
109   probeCreateCmd->SetParameter(param);            
110   param = new G4UIparameter("halfSize", 'd', f    
111   probeCreateCmd->SetParameter(param);            
112   param = new G4UIparameter("unit", 's', true)    
113   param->SetDefaultUnit("mm");                    
114   probeCreateCmd->SetParameter(param);            
115   param = new G4UIparameter("checkOverlap", 'b    
116   param->SetDefaultValue(0);                      
117   probeCreateCmd->SetParameter(param);            
118   //                                              
119   meshOpnCmd = new G4UIcmdWithAString("/score/    
120   meshOpnCmd->SetGuidance("Open scoring mesh."    
121   meshOpnCmd->SetParameterName("MeshName", fal    
122   //                                              
123   meshClsCmd = new G4UIcmdWithoutParameter("/s    
124   meshClsCmd->SetGuidance("Close scoring mesh.    
125                                                   
126   meshDir = new G4UIdirectory("/score/mesh/");    
127   meshDir->SetGuidance("    Mesh processing co    
128   //                                              
129   mBoxSizeCmd = new G4UIcmdWith3VectorAndUnit(    
130   mBoxSizeCmd->SetGuidance("Define size of the    
131   mBoxSizeCmd->SetGuidance("Dx  Dy  Dz  unit")    
132   mBoxSizeCmd->SetParameterName("Di", "Dj", "D    
133   mBoxSizeCmd->SetRange("Di>0. && Dj>0. && Dk>    
134   mBoxSizeCmd->SetDefaultUnit("mm");              
135   //                                              
136   mCylinderSizeCmd = new G4UIcommand("/score/m    
137   mCylinderSizeCmd->SetGuidance("Define size o    
138   mCylinderSizeCmd->SetGuidance("R   Dz  unit"    
139   param = new G4UIparameter("R", 'd', false);     
140   param->SetParameterRange("R>0");                
141   mCylinderSizeCmd->SetParameter(param);          
142   param = new G4UIparameter("Dz", 'd', false);    
143   param->SetParameterRange("Dz>0");               
144   mCylinderSizeCmd->SetParameter(param);          
145   param = new G4UIparameter("unit", 's', true)    
146   param->SetDefaultUnit("mm");                    
147   mCylinderSizeCmd->SetParameter(param);          
148   //                                              
149   mCylinderRMinCmd =                              
150     new G4UIcmdWithADoubleAndUnit("/score/mesh    
151   mCylinderRMinCmd->SetGuidance("Define the in    
152   mCylinderRMinCmd->SetGuidance("This command     
153   mCylinderRMinCmd->SetParameterName("RMin", f    
154   mCylinderRMinCmd->SetRange("RMin>=0.");         
155   mCylinderRMinCmd->SetDefaultUnit("mm");         
156   //                                              
157   mCylinderAngleCmd = new G4UIcommand("/score/    
158   mCylinderAngleCmd->SetGuidance(                 
159     "Define starting angle and span for tube s    
160   mCylinderAngleCmd->SetGuidance(                 
161     "This command is not needed for cylinder m    
162   param = new G4UIparameter("startPhi", 'd', f    
163   mCylinderAngleCmd->SetParameter(param);         
164   param = new G4UIparameter("deltaPhi", 'd', f    
165   param->SetParameterRange("deltaPhi>0.");        
166   mCylinderAngleCmd->SetParameter(param);         
167   param = new G4UIparameter("unit", 's', true)    
168   param->SetDefaultUnit("deg");                   
169   mCylinderAngleCmd->SetParameter(param);         
170   //                                              
171   //   Division command                           
172   mBinCmd = new G4UIcommand("/score/mesh/nBin"    
173   mBinCmd->SetGuidance("Define segments of the    
174   mBinCmd->SetGuidance("[usage] /score/mesh/nB    
175   mBinCmd->SetGuidance(" In case of boxMesh, p    
176   mBinCmd->SetGuidance("   Ni  :(int) Number o    
177   mBinCmd->SetGuidance("   Nj  :(int) Number o    
178   mBinCmd->SetGuidance("   Nk  :(int) Number o    
179   mBinCmd->SetGuidance(" In case of cylinderMe    
180   mBinCmd->SetGuidance("   Nr  :(int) Number o    
181   mBinCmd->SetGuidance("   Nz  :(int) Number o    
182   mBinCmd->SetGuidance("   Nphi:(int) Number o    
183                                                   
184   param = new G4UIparameter("Ni", 'i', false);    
185   param->SetDefaultValue("1");                    
186   param->SetParameterRange("Ni>0");               
187   mBinCmd->SetParameter(param);                   
188   param = new G4UIparameter("Nj", 'i', false);    
189   param->SetDefaultValue("1");                    
190   param->SetParameterRange("Nj>0");               
191   mBinCmd->SetParameter(param);                   
192   param = new G4UIparameter("Nk", 'i', false);    
193   param->SetDefaultValue("1");                    
194   mBinCmd->SetParameter(param);                   
195   param->SetParameterRange("Nk>0");               
196                                                   
197   //   Placement command                          
198   mTransDir = new G4UIdirectory("/score/mesh/t    
199   mTransDir->SetGuidance("Mesh translation com    
200   //                                              
201   mTResetCmd = new G4UIcmdWithoutParameter("/s    
202   mTResetCmd->SetGuidance("Reset translated po    
203   //                                              
204   mTXyzCmd = new G4UIcmdWith3VectorAndUnit("/s    
205   mTXyzCmd->SetGuidance("Translate the scoring    
206   mTXyzCmd->SetParameterName("X", "Y", "Z", fa    
207   mTXyzCmd->SetDefaultUnit("mm");                 
208   //                                              
209   mRotDir = new G4UIdirectory("/score/mesh/rot    
210   mRotDir->SetGuidance("Mesh rotation commands    
211                                                   
212   mRotXCmd = new G4UIcmdWithADoubleAndUnit("/s    
213   mRotXCmd->SetGuidance("Rotate the scoring me    
214   mRotXCmd->SetParameterName("Rx", false);        
215   mRotXCmd->SetDefaultUnit("deg");                
216   //                                              
217   mRotYCmd = new G4UIcmdWithADoubleAndUnit("/s    
218   mRotYCmd->SetGuidance("Rotate the scoring me    
219   mRotYCmd->SetParameterName("Ry", false);        
220   mRotYCmd->SetDefaultUnit("deg");                
221   //                                              
222   mRotZCmd = new G4UIcmdWithADoubleAndUnit("/s    
223   mRotZCmd->SetGuidance("Rotate the scoring me    
224   mRotZCmd->SetParameterName("Rz", false);        
225   mRotZCmd->SetDefaultUnit("deg");                
226   //                                              
227   probeDir = new G4UIdirectory("/score/probe/"    
228   probeDir->SetGuidance("Probe commands");        
229                                                   
230   probeMatCmd = new G4UIcmdWithAString("/score    
231   probeMatCmd->SetGuidance("Specify a material    
232   probeMatCmd->SetGuidance("Material name has     
233   probeMatCmd->SetGuidance("Once this command     
234                            "overlays the mater    
235   probeMatCmd->SetGuidance("with \"Layered Mas    
236                            "physics quantities    
237   probeMatCmd->SetGuidance("or dose will be ca    
238   probeMatCmd->SetGuidance("To switch-off this    
239   probeMatCmd->SetParameterName("matName", tru    
240   probeMatCmd->SetDefaultValue("none");           
241                                                   
242   probeLocateCmd = new G4UIcmdWith3VectorAndUn    
243   probeLocateCmd->SetGuidance(                    
244     "Locate a probe in the global coordinate s    
245   probeLocateCmd->SetParameterName("x", "y", "    
246   probeLocateCmd->SetDefaultUnit("mm");           
247                                                   
248   // Draw Scoring result                          
249   drawCmd = new G4UIcommand("/score/drawProjec    
250   drawCmd->SetGuidance("Draw projection(s) of     
251   drawCmd->SetGuidance(                           
252     "Parameter <proj> specified which projecti    
253   drawCmd->SetGuidance(                           
254     "  100 : xy-plane, 010 : yz-plane,    001     
255   drawCmd->SetGuidance(                           
256     "  100 : N/A,      010 : z_phi-plane, 001     
257   param = new G4UIparameter("meshName", 's', f    
258   drawCmd->SetParameter(param);                   
259   param = new G4UIparameter("psName", 's', fal    
260   drawCmd->SetParameter(param);                   
261   param = new G4UIparameter("colorMapName", 's    
262   param->SetDefaultValue("defaultLinearColorMa    
263   drawCmd->SetParameter(param);                   
264   param = new G4UIparameter("proj", 'i', true)    
265   param->SetDefaultValue(111);                    
266   drawCmd->SetParameter(param);                   
267   drawCmd->SetToBeBroadcasted(false);             
268                                                   
269   // Draw column                                  
270   drawColumnCmd = new G4UIcommand("/score/draw    
271   drawColumnCmd->SetGuidance("Draw a cell colu    
272   drawColumnCmd->SetGuidance(" plane = 0 : x-y    
273   drawColumnCmd->SetGuidance(                     
274     "         0 : z-phi, 1: r-phi, 2: r-z  for    
275   param = new G4UIparameter("meshName", 's', f    
276   drawColumnCmd->SetParameter(param);             
277   param = new G4UIparameter("psName", 's', fal    
278   drawColumnCmd->SetParameter(param);             
279   param = new G4UIparameter("plane", 'i', fals    
280   param->SetParameterRange("plane>=0 && plane<    
281   drawColumnCmd->SetParameter(param);             
282   param = new G4UIparameter("column", 'i', fal    
283   drawColumnCmd->SetParameter(param);             
284   param = new G4UIparameter("colorMapName", 's    
285   param->SetDefaultValue("defaultLinearColorMa    
286   drawColumnCmd->SetParameter(param);             
287   drawColumnCmd->SetToBeBroadcasted(false);       
288                                                   
289   colorMapDir = new G4UIdirectory("/score/colo    
290   colorMapDir->SetGuidance("Color map commands    
291                                                   
292   listColorMapCmd =                               
293     new G4UIcmdWithoutParameter("/score/colorM    
294   listColorMapCmd->SetGuidance("List registere    
295   listColorMapCmd->SetToBeBroadcasted(false);     
296                                                   
297   floatMinMaxCmd = new G4UIcmdWithAString("/sc    
298   floatMinMaxCmd->SetGuidance(                    
299     "Min/Max of the color map is calculated ac    
300   floatMinMaxCmd->SetParameterName("colorMapNa    
301   floatMinMaxCmd->SetDefaultValue("defaultLine    
302   floatMinMaxCmd->SetToBeBroadcasted(false);      
303                                                   
304   colorMapMinMaxCmd = new G4UIcommand("/score/    
305   colorMapMinMaxCmd->SetGuidance("Define min/m    
306   param = new G4UIparameter("colorMapMame", 's    
307   param->SetDefaultValue("defaultLinearColorMa    
308   colorMapMinMaxCmd->SetParameter(param);         
309   param = new G4UIparameter("minValue", 'd', f    
310   colorMapMinMaxCmd->SetParameter(param);         
311   param = new G4UIparameter("maxValue", 'd', f    
312   colorMapMinMaxCmd->SetParameter(param);         
313   colorMapMinMaxCmd->SetToBeBroadcasted(false)    
314                                                   
315   // Dump a scored quantity                       
316   dumpQtyToFileCmd = new G4UIcommand("/score/d    
317   dumpQtyToFileCmd->SetGuidance("Dump one scor    
318   param = new G4UIparameter("meshName", 's', f    
319   dumpQtyToFileCmd->SetParameter(param);          
320   param = new G4UIparameter("psName", 's', fal    
321   dumpQtyToFileCmd->SetParameter(param);          
322   param = new G4UIparameter("fileName", 's', f    
323   dumpQtyToFileCmd->SetParameter(param);          
324   param = new G4UIparameter("option", 's', tru    
325   dumpQtyToFileCmd->SetParameter(param);          
326   dumpQtyToFileCmd->SetToBeBroadcasted(false);    
327                                                   
328   dumpQtyWithFactorCmd = new G4UIcommand("/sco    
329   dumpQtyWithFactorCmd->SetGuidance("Dump one     
330   dumpQtyWithFactorCmd->SetGuidance(              
331     "Each value is multiplied by the specified    
332   param = new G4UIparameter("meshName", 's', f    
333   dumpQtyWithFactorCmd->SetParameter(param);      
334   param = new G4UIparameter("psName", 's', fal    
335   dumpQtyWithFactorCmd->SetParameter(param);      
336   param = new G4UIparameter("fileName", 's', f    
337   dumpQtyWithFactorCmd->SetParameter(param);      
338   param = new G4UIparameter("factor", 'd', fal    
339   param->SetParameterRange("factor>0.");          
340   dumpQtyWithFactorCmd->SetParameter(param);      
341   param = new G4UIparameter("option", 's', tru    
342   dumpQtyWithFactorCmd->SetParameter(param);      
343   dumpQtyWithFactorCmd->SetToBeBroadcasted(fal    
344                                                   
345   // Dump all scored quantities                   
346   dumpAllQtsToFileCmd = new G4UIcommand("/scor    
347   dumpAllQtsToFileCmd->SetGuidance("Dump all q    
348   param = new G4UIparameter("meshName", 's', f    
349   dumpAllQtsToFileCmd->SetParameter(param);       
350   param = new G4UIparameter("fileName", 's', f    
351   dumpAllQtsToFileCmd->SetParameter(param);       
352   param = new G4UIparameter("option", 's', tru    
353   dumpAllQtsToFileCmd->SetParameter(param);       
354   dumpAllQtsToFileCmd->SetToBeBroadcasted(fals    
355                                                   
356   dumpAllQtsWithFactorCmd =                       
357     new G4UIcommand("/score/dumpAllQuantitiesW    
358   dumpAllQtsWithFactorCmd->SetGuidance(           
359     "Dump all quantities of the mesh to file."    
360   dumpAllQtsWithFactorCmd->SetGuidance(           
361     "Each value is multiplied by the specified    
362   param = new G4UIparameter("meshName", 's', f    
363   dumpAllQtsWithFactorCmd->SetParameter(param)    
364   param = new G4UIparameter("fileName", 's', f    
365   dumpAllQtsWithFactorCmd->SetParameter(param)    
366   param = new G4UIparameter("factor", 'd', fal    
367   param->SetParameterRange("factor>0.");          
368   dumpAllQtsWithFactorCmd->SetParameter(param)    
369   param = new G4UIparameter("option", 's', tru    
370   dumpAllQtsWithFactorCmd->SetParameter(param)    
371   dumpAllQtsWithFactorCmd->SetToBeBroadcasted(    
372                                                   
373   fill1DCmd = new G4UIcommand("/score/fill1D",    
374   fill1DCmd->SetGuidance("Let a primitive scor    
375   fill1DCmd->SetGuidance("Before using this co    
376                          "defined and assigned    
377   fill1DCmd->SetGuidance("Also before using th    
378                          "be defined by /analy    
379   fill1DCmd->SetGuidance(                         
380     "This command is available only for real-w    
381   fill1DCmd->SetGuidance("Please note that thi    
382                          "each copy number of     
383   fill1DCmd->SetGuidance("If same histogram ID    
384                          "than one scorers fil    
385   param = new G4UIparameter("histID", 'i', fal    
386   fill1DCmd->SetParameter(param);                 
387   param = new G4UIparameter("meshName", 's', f    
388   fill1DCmd->SetParameter(param);                 
389   param = new G4UIparameter("scorerName", 's',    
390   fill1DCmd->SetParameter(param);                 
391   param = new G4UIparameter("copyNo", 'i', tru    
392   param->SetDefaultValue(0);                      
393   fill1DCmd->SetParameter(param);                 
394 }                                                 
395                                                   
396 G4ScoringMessenger::~G4ScoringMessenger()         
397 {                                                 
398   delete listCmd;                                 
399   delete verboseCmd;                              
400   //                                              
401   delete meshBoxCreateCmd;                        
402   delete meshCylinderCreateCmd;                   
403   delete meshRWLogVolCreateCmd;                   
404   delete probeCreateCmd;                          
405   delete meshCreateDir;                           
406   //                                              
407   delete meshOpnCmd;                              
408   //                                              
409   delete meshClsCmd;                              
410   delete meshDir;                                 
411   //                                              
412   delete mBoxSizeCmd;                             
413   delete mCylinderSizeCmd;                        
414   delete mCylinderRMinCmd;                        
415   delete mCylinderAngleCmd;                       
416   //                                              
417   delete mBinCmd;                                 
418   //                                              
419   delete mTResetCmd;                              
420   delete mTXyzCmd;                                
421   delete mTransDir;                               
422   delete mRotXCmd;                                
423   delete mRotYCmd;                                
424   delete mRotZCmd;                                
425   delete mRotDir;                                 
426   //                                              
427   delete probeLocateCmd;                          
428   delete probeMatCmd;                             
429   delete probeDir;                                
430   //                                              
431   delete dumpCmd;                                 
432   delete drawCmd;                                 
433   delete drawColumnCmd;                           
434   delete listColorMapCmd;                         
435   delete floatMinMaxCmd;                          
436   delete colorMapMinMaxCmd;                       
437   delete colorMapDir;                             
438   delete dumpQtyToFileCmd;                        
439   delete dumpQtyWithFactorCmd;                    
440   delete dumpAllQtsToFileCmd;                     
441   delete dumpAllQtsWithFactorCmd;                 
442   delete fill1DCmd;                               
443   //                                              
444   delete scoreDir;                                
445 }                                                 
446                                                   
447 void G4ScoringMessenger::SetNewValue(G4UIcomma    
448 {                                                 
449   using MeshShape = G4VScoringMesh::MeshShape;    
450                                                   
451   if(command == listCmd)                          
452   {                                               
453     fSMan->List();                                
454   }                                               
455   else if(command == dumpCmd)                     
456   {                                               
457     fSMan->Dump();                                
458   }                                               
459   else if(command == drawCmd)                     
460   {                                               
461     G4Tokenizer next(newVal);                     
462     G4String meshName     = next();               
463     G4String psName       = next();               
464     G4String colorMapName = next();               
465     G4int axflg           = StoI(next());         
466     fSMan->DrawMesh(meshName, psName, colorMap    
467   }                                               
468   else if(command == drawColumnCmd)               
469   {                                               
470     G4Tokenizer next(newVal);                     
471     G4String meshName     = next();               
472     G4String psName       = next();               
473     G4int iPlane          = StoI(next());         
474     G4int iColumn         = StoI(next());         
475     G4String colorMapName = next();               
476     fSMan->DrawMesh(meshName, psName, iPlane,     
477   }                                               
478   else if(command == dumpQtyToFileCmd)            
479   {                                               
480     G4Tokenizer next(newVal);                     
481     G4String meshName = next();                   
482     G4String psName   = next();                   
483     G4String fileName = next();                   
484     G4String option   = next("\n");               
485     auto mesh         = fSMan->FindMesh(meshNa    
486     if(mesh == nullptr)                           
487     {                                             
488       G4ExceptionDescription ed;                  
489       ed << "Mesh name <" << meshName << "> is    
490       command->CommandFailed(ed);                 
491       return;                                     
492     }                                             
493     fSMan->DumpQuantityToFile(meshName, psName    
494   }                                               
495   else if(command == dumpQtyWithFactorCmd)        
496   {                                               
497     G4Tokenizer next(newVal);                     
498     G4String meshName = next();                   
499     G4String psName   = next();                   
500     G4String fileName = next();                   
501     G4double fac      = StoD(next());             
502     G4String option   = next("\n");               
503     auto mesh         = fSMan->FindMesh(meshNa    
504     if(mesh == nullptr)                           
505     {                                             
506       G4ExceptionDescription ed;                  
507       ed << "Mesh name <" << meshName << "> is    
508       command->CommandFailed(ed);                 
509       return;                                     
510     }                                             
511     fSMan->SetFactor(fac);                        
512     fSMan->DumpQuantityToFile(meshName, psName    
513     fSMan->SetFactor(1.0);                        
514   }                                               
515   else if(command == dumpAllQtsToFileCmd)         
516   {                                               
517     G4Tokenizer next(newVal);                     
518     G4String meshName = next();                   
519     G4String fileName = next();                   
520     G4String option   = next("\n");               
521     auto mesh         = fSMan->FindMesh(meshNa    
522     if(mesh == nullptr)                           
523     {                                             
524       G4ExceptionDescription ed;                  
525       ed << "Mesh name <" << meshName << "> is    
526       command->CommandFailed(ed);                 
527       return;                                     
528     }                                             
529     fSMan->DumpAllQuantitiesToFile(meshName, f    
530   }                                               
531   else if(command == dumpAllQtsWithFactorCmd)     
532   {                                               
533     G4Tokenizer next(newVal);                     
534     G4String meshName = next();                   
535     G4String fileName = next();                   
536     G4double fac      = StoD(next());             
537     G4String option   = next("\n");               
538     auto mesh         = fSMan->FindMesh(meshNa    
539     if(mesh == nullptr)                           
540     {                                             
541       G4ExceptionDescription ed;                  
542       ed << "Mesh name <" << meshName << "> is    
543       command->CommandFailed(ed);                 
544       return;                                     
545     }                                             
546     fSMan->SetFactor(fac);                        
547     fSMan->DumpAllQuantitiesToFile(meshName, f    
548     fSMan->SetFactor(1.0);                        
549   }                                               
550   else if(command == fill1DCmd)                   
551   {                                               
552     Fill1D(command, newVal);                      
553   }                                               
554   else if(command == verboseCmd)                  
555   {                                               
556     fSMan->SetVerboseLevel(verboseCmd->GetNewI    
557   }                                               
558   else if(command == meshBoxCreateCmd)            
559   {                                               
560     G4VScoringMesh* currentmesh = fSMan->GetCu    
561     if(currentmesh != nullptr)                    
562     {                                             
563       G4ExceptionDescription ed;                  
564       ed << "ERROR[" << meshBoxCreateCmd->GetC    
565          << currentmesh->GetWorldName()           
566          << "> is still open. Close it first.     
567       command->CommandFailed(ed);                 
568     }                                             
569     else                                          
570     {                                             
571       G4VScoringMesh* mesh = fSMan->FindMesh(n    
572       if(mesh == nullptr)                         
573       {                                           
574         mesh = new G4ScoringBox(newVal);          
575         fSMan->RegisterScoringMesh(mesh);         
576       }                                           
577       else                                        
578       {                                           
579         G4ExceptionDescription ed;                
580         ed << "ERROR[" << meshBoxCreateCmd->Ge    
581            << "] : Scoring mesh <" << newVal      
582            << "> already exists. Command ignor    
583         command->CommandFailed(ed);               
584       }                                           
585     }                                             
586   }                                               
587   else if(command == meshCylinderCreateCmd)       
588   {                                               
589     G4VScoringMesh* currentmesh = fSMan->GetCu    
590     if(currentmesh != nullptr)                    
591     {                                             
592       G4ExceptionDescription ed;                  
593       ed << "ERROR[" << meshCylinderCreateCmd-    
594          << currentmesh->GetWorldName()           
595          << "> is still open. Close it first.     
596       command->CommandFailed(ed);                 
597     }                                             
598     else                                          
599     {                                             
600       G4VScoringMesh* mesh = fSMan->FindMesh(n    
601       if(mesh == nullptr)                         
602       {                                           
603         mesh = new G4ScoringCylinder(newVal);     
604         fSMan->RegisterScoringMesh(mesh);         
605       }                                           
606       else                                        
607       {                                           
608         G4ExceptionDescription ed;                
609         ed << "ERROR[" << meshCylinderCreateCm    
610            << "] : Scoring mesh <" << newVal      
611            << "> already exists. Command ignor    
612         command->CommandFailed(ed);               
613       }                                           
614     }                                             
615   }                                               
616   else if(command == meshRWLogVolCreateCmd)       
617   {                                               
618     auto mesh = fSMan->GetCurrentMesh();          
619     if(mesh != nullptr)                           
620     {                                             
621       G4ExceptionDescription ed;                  
622       ed << "ERROR[" << meshRWLogVolCreateCmd-    
623          << mesh->GetWorldName()                  
624          << "> is still open. Close it first.     
625       command->CommandFailed(ed);                 
626     }                                             
627     else                                          
628     {                                             
629       G4Tokenizer next(newVal);                   
630       G4String meshName = next();                 
631       G4int idx         = StoI(next());           
632       mesh              = fSMan->FindMesh(mesh    
633       if(mesh == nullptr)                         
634       {                                           
635         mesh = new G4ScoringRealWorld(meshName    
636         mesh->SetCopyNumberLevel(idx);            
637         fSMan->RegisterScoringMesh(mesh);         
638       }                                           
639       else                                        
640       {                                           
641         G4ExceptionDescription ed;                
642         ed << "ERROR[" << meshRWLogVolCreateCm    
643            << "] : Scoring mesh <" << meshName    
644            << "> already exists. Command ignor    
645         command->CommandFailed(ed);               
646       }                                           
647     }                                             
648   }                                               
649   else if(command == probeCreateCmd)              
650   {                                               
651     auto mesh = fSMan->GetCurrentMesh();          
652     if(mesh != nullptr)                           
653     {                                             
654       G4ExceptionDescription ed;                  
655       ed << "ERROR[" << meshRWLogVolCreateCmd-    
656          << mesh->GetWorldName()                  
657          << "> is still open. Close it first.     
658       command->CommandFailed(ed);                 
659     }                                             
660     else                                          
661     {                                             
662       G4Tokenizer next(newVal);                   
663       G4String qname    = next();                 
664       G4double halfSize = StoD(next());           
665       halfSize *= G4UIcommand::ValueOf(next())    
666       G4bool checkOverlap = StoB(next());         
667       mesh                = fSMan->FindMesh(qn    
668       if(mesh == nullptr)                         
669       {                                           
670         mesh = new G4ScoringProbe(qname, halfS    
671         fSMan->RegisterScoringMesh(mesh);         
672       }                                           
673       else                                        
674       {                                           
675         G4ExceptionDescription ed;                
676         ed << "ERROR[" << probeCreateCmd->GetC    
677            << qname << "> already exists. Use     
678         command->CommandFailed(ed);               
679       }                                           
680     }                                             
681   }                                               
682   else if(command == probeMatCmd || command ==    
683   {                                               
684     auto mesh = fSMan->GetCurrentMesh();          
685     if(mesh == nullptr)                           
686     {                                             
687       G4ExceptionDescription ed;                  
688       ed << "ERROR : No mesh is currently open    
689             "Command ignored.";                   
690       command->CommandFailed(ed);                 
691       return;                                     
692     }                                             
693     if(mesh->GetShape() != MeshShape::probe)      
694     {                                             
695       G4ExceptionDescription ed;                  
696       ed << "ERROR : Inconsistent mesh type. C    
697             "Scoring Probe.";                     
698       command->CommandFailed(ed);                 
699       return;                                     
700     }                                             
701                                                   
702     if(command == probeMatCmd)                    
703     {                                             
704       G4bool succ = static_cast<G4ScoringProbe    
705       if(!succ)                                   
706       {                                           
707         G4ExceptionDescription ed;                
708         ed << "Material <" << newVal              
709            << "> is not defind in G4NistManage    
710            << "Use /material/nist/listMaterial    
711               "materials.";                       
712         command->CommandFailed(ed);               
713         return;                                   
714       }                                           
715     }                                             
716     else if(command == probeLocateCmd)            
717     {                                             
718       G4ThreeVector loc = probeLocateCmd->GetN    
719       static_cast<G4ScoringProbe*>(mesh)->Loca    
720     }                                             
721   }                                               
722   else if(command == listColorMapCmd)             
723   {                                               
724     fSMan->ListScoreColorMaps();                  
725   }                                               
726   else if(command == floatMinMaxCmd)              
727   {                                               
728     G4VScoreColorMap* colorMap = fSMan->GetSco    
729     if(colorMap != nullptr)                       
730     {                                             
731       colorMap->SetFloatingMinMax(true);          
732     }                                             
733     else                                          
734     {                                             
735       G4ExceptionDescription ed;                  
736       ed << "ERROR[" << floatMinMaxCmd->GetCom    
737          << newVal << "> is not defined. Comma    
738       command->CommandFailed(ed);                 
739     }                                             
740   }                                               
741   else if(command == colorMapMinMaxCmd)           
742   {                                               
743     G4Tokenizer next(newVal);                     
744     G4String mapName           = next();          
745     G4double minVal            = StoD(next());    
746     G4double maxVal            = StoD(next());    
747     G4VScoreColorMap* colorMap = fSMan->GetSco    
748     if(colorMap != nullptr)                       
749     {                                             
750       colorMap->SetFloatingMinMax(false);         
751       colorMap->SetMinMax(minVal, maxVal);        
752     }                                             
753     else                                          
754     {                                             
755       G4ExceptionDescription ed;                  
756       ed << "ERROR[" << colorMapMinMaxCmd->Get    
757          << newVal << "> is not defined. Comma    
758       command->CommandFailed(ed);                 
759     }                                             
760   }                                               
761   else if(command == meshOpnCmd)                  
762   {                                               
763     G4VScoringMesh* currentmesh = fSMan->GetCu    
764     if(currentmesh != nullptr)                    
765     {                                             
766       G4ExceptionDescription ed;                  
767       ed << "ERROR[" << meshOpnCmd->GetCommand    
768          << currentmesh->GetWorldName()           
769          << "> is still open. Close it first.     
770       command->CommandFailed(ed);                 
771     }                                             
772     else                                          
773     {                                             
774       G4VScoringMesh* mesh = fSMan->FindMesh(n    
775       if(mesh == nullptr)                         
776       {                                           
777         G4ExceptionDescription ed;                
778         ed << "ERROR[" << meshOpnCmd->GetComma    
779            << newVal << "> does not exist. Com    
780         command->CommandFailed(ed);               
781       }                                           
782       else                                        
783       {                                           
784         fSMan->SetCurrentMesh(mesh);              
785       }                                           
786     }                                             
787   }                                               
788   else if(command == meshClsCmd)                  
789   {                                               
790     fSMan->CloseCurrentMesh();                    
791   }                                               
792   else                                            
793   {                                               
794     //                                            
795     // Get Current Mesh                           
796     //                                            
797     G4VScoringMesh* mesh = fSMan->GetCurrentMe    
798     //                                            
799     // Commands for Current Mesh                  
800     if(mesh != nullptr)                           
801     {                                             
802       MeshShape shape = mesh->GetShape();         
803       if(shape == MeshShape::realWorldLogVol)     
804       {                                           
805         G4ExceptionDescription ed;                
806         ed << "ERROR[" << mBinCmd->GetCommandP    
807            << "] : Number of mesh command cann    
808               "Command ignored.";                 
809         command->CommandFailed(ed);               
810       }                                           
811       else                                        
812       {                                           
813         // Tokens                                 
814         G4TokenVec token;                         
815         FillTokenVec(newVal, token);              
816         //                                        
817         // Mesh Geometry                          
818         if(command == mBoxSizeCmd)                
819         {                                         
820           if(shape == MeshShape::box)             
821           {                                       
822             G4ThreeVector size = mBoxSizeCmd->    
823             G4double vsize[3];                    
824             vsize[0] = size.x();                  
825             vsize[1] = size.y();                  
826             vsize[2] = size.z();                  
827             mesh->SetSize(vsize);                 
828           }                                       
829           else                                    
830           {                                       
831             G4ExceptionDescription ed;            
832             ed << "ERROR[" << mBoxSizeCmd->Get    
833                << "] : This mesh is not Box. C    
834             command->CommandFailed(ed);           
835           }                                       
836         }                                         
837         else if(command == mCylinderSizeCmd ||    
838                 command == mCylinderAngleCmd)     
839         {                                         
840           if(shape != MeshShape::cylinder)        
841           {                                       
842             G4ExceptionDescription ed;            
843             ed << "ERROR[" << command->GetComm    
844                << "] : This mesh is not Cylind    
845             command->CommandFailed(ed);           
846           }                                       
847           else                                    
848           {                                       
849             if(command == mCylinderSizeCmd)       
850             {                                     
851               G4double vsize[3];                  
852               vsize[0]     = (mesh->GetSize())    
853               vsize[1]     = StoD(token[0]);      
854               vsize[2]     = StoD(token[1]);      
855               G4double unt = mCylinderSizeCmd-    
856               vsize[1] *= unt;                    
857               vsize[2] *= unt;                    
858               mesh->SetSize(vsize);               
859             }                                     
860             else if(command == mCylinderRMinCm    
861             {                                     
862               G4double vsize[3];                  
863               vsize[0] = mCylinderRMinCmd->Get    
864               vsize[1] = (mesh->GetSize()).y()    
865               vsize[2] = (mesh->GetSize()).z()    
866               mesh->SetSize(vsize);               
867             }                                     
868             else if(command == mCylinderAngleC    
869             {                                     
870               G4double stphi = StoD(token[0]);    
871               G4double spphi = StoD(token[1]);    
872               G4double unt   = mCylinderAngleC    
873               mesh->SetAngles(stphi * unt, spp    
874             }                                     
875           }                                       
876         }                                         
877         else if(command == mBinCmd)               
878         {                                         
879           MeshBinCommand(mesh, token);            
880         }                                         
881         else if(command == mTResetCmd)            
882         {                                         
883           G4double centerPosition[3] = { 0., 0    
884           mesh->SetCenterPosition(centerPositi    
885         }                                         
886         else if(command == mTXyzCmd)              
887         {                                         
888           G4ThreeVector xyz = mTXyzCmd->GetNew    
889           G4double centerPosition[3];             
890           centerPosition[0] = xyz.x();            
891           centerPosition[1] = xyz.y();            
892           centerPosition[2] = xyz.z();            
893           mesh->SetCenterPosition(centerPositi    
894         }                                         
895         else if(command == mRotXCmd)              
896         {                                         
897           G4double value = mRotXCmd->GetNewDou    
898           mesh->RotateX(value);                   
899         }                                         
900         else if(command == mRotYCmd)              
901         {                                         
902           G4double value = mRotYCmd->GetNewDou    
903           mesh->RotateY(value);                   
904         }                                         
905         else if(command == mRotZCmd)              
906         {                                         
907           G4double value = mRotZCmd->GetNewDou    
908           mesh->RotateZ(value);                   
909         }                                         
910       }                                           
911     }                                             
912     else                                          
913     {                                             
914       G4ExceptionDescription ed;                  
915       ed << "ERROR: No mesh is currently open.    
916             "Command ignored.";                   
917       command->CommandFailed(ed);                 
918     }                                             
919   }                                               
920 }                                                 
921                                                   
922 G4String G4ScoringMessenger::GetCurrentValue(G    
923 {                                                 
924   G4String val;                                   
925   if(command == verboseCmd)                       
926   {                                               
927     val = verboseCmd->ConvertToString(fSMan->G    
928   }                                               
929                                                   
930   return val;                                     
931 }                                                 
932                                                   
933 void G4ScoringMessenger::FillTokenVec(const G4    
934 {                                                 
935   G4Tokenizer next(newValues);                    
936   G4String val;                                   
937   while(!(val = next()).empty())                  
938   {  // Loop checking 12.18.2015 M.Asai           
939     token.push_back(val);                         
940   }                                               
941 }                                                 
942                                                   
943 void G4ScoringMessenger::MeshBinCommand(G4VSco    
944 {                                                 
945   G4int Ni = StoI(token[0]);                      
946   G4int Nj = StoI(token[1]);                      
947   G4int Nk = StoI(token[2]);                      
948   G4int nSegment[3];                              
949                                                   
950   if(dynamic_cast<G4ScoringBox*>(mesh) != null    
951   {                                               
952     G4cout << ".... G4ScoringMessenger::MeshBi    
953            << G4endl;                             
954     nSegment[0] = Ni;                             
955     nSegment[1] = Nj;                             
956     nSegment[2] = Nk;                             
957   }                                               
958   else if(dynamic_cast<G4ScoringCylinder*>(mes    
959   {                                               
960     G4cout << ".... G4ScoringMessenger::MeshBi    
961            << G4endl;                             
962     nSegment[0] = Nj;                             
963     nSegment[1] = Nk;                             
964     nSegment[2] = Ni;                             
965   }                                               
966   else                                            
967   {                                               
968     G4Exception("G4ScoringMessenger::MeshBinCo    
969                 "invalid mesh type");             
970     return;                                       
971   }                                               
972   //                                              
973   mesh->SetNumberOfSegments(nSegment);            
974 }                                                 
975                                                   
976 void G4ScoringMessenger::Fill1D(G4UIcommand* c    
977 {                                                 
978   using MeshShape = G4VScoringMesh::MeshShape;    
979                                                   
980   G4Tokenizer next(newVal);                       
981   G4int histID      = StoI(next());               
982   G4String meshName = next();                     
983   G4String primName = next();                     
984   G4int copyNo      = StoI(next());               
985                                                   
986   auto filler = G4VScoreHistFiller::Instance()    
987   if(filler == nullptr)                           
988   {                                               
989     G4ExceptionDescription ed;                    
990     ed << "G4TScoreHistFiller is not instantia    
991     cmd->CommandFailed(ed);                       
992     return;                                       
993   }                                               
994   //                                              
995   // To do : check the validity of histID         
996   //                                              
997                                                   
998   auto sm   = G4ScoringManager::GetScoringMana    
999   auto mesh = sm->FindMesh(meshName);             
1000   if(mesh == nullptr)                            
1001   {                                              
1002     G4ExceptionDescription ed;                   
1003     ed << "Mesh name <" << meshName << "> is     
1004     cmd->CommandFailed(ed);                      
1005     return;                                      
1006   }                                              
1007   auto shape = mesh->GetShape();                 
1008   if(shape != MeshShape::realWorldLogVol && s    
1009   {                                              
1010     G4ExceptionDescription ed;                   
1011     ed << "Mesh <" << meshName                   
1012        << "> is not real-world logical volume    
1013     cmd->CommandFailed(ed);                      
1014     return;                                      
1015   }                                              
1016                                                  
1017   auto prim = mesh->GetPrimitiveScorer(primNa    
1018   if(prim == nullptr)                            
1019   {                                              
1020     G4ExceptionDescription ed;                   
1021     ed << "Primitive scorer name <" << primNa    
1022     cmd->CommandFailed(ed);                      
1023     return;                                      
1024   }                                              
1025   auto pp = dynamic_cast<G4VPrimitivePlotter*    
1026   if(pp == nullptr)                              
1027   {                                              
1028     G4ExceptionDescription ed;                   
1029     ed << "Primitive scorer <" << primName       
1030        << "> does not support direct histogra    
1031     cmd->CommandFailed(ed);                      
1032     return;                                      
1033   }                                              
1034                                                  
1035   pp->Plot(copyNo, histID);                      
1036 }                                                
1037