Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/visualization/gMocren/src/G4GMocrenMessenger.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 ]

  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 //
 28 //
 29 // Created:  Mar. 31, 2009  Akinori Kimura  
 30 //
 31 #include "G4GMocrenMessenger.hh"
 32 
 33 #include "G4UIdirectory.hh"
 34 #include "G4UIcmdWithABool.hh"
 35 #include "G4UIcmdWithAString.hh"
 36 #include "G4UIcmdWithoutParameter.hh"
 37 #include "G4UIcommand.hh"
 38 #include "G4Tokenizer.hh"
 39 
 40 #include <utility>
 41 
 42 G4GMocrenMessenger::G4GMocrenMessenger()
 43   : suffix (""), geometry(true), pointAttributes(false), solids(true), invisibles(true),
 44     kgMocrenVolumeName("gMocrenVolume"),
 45     kgMocrenScoringMeshName("gMocrenScoringMesh"),
 46     kDrawVolumeGrid(false) {
 47 
 48   kgMocrenDirectory = new G4UIdirectory("/vis/gMocren/");
 49   kgMocrenDirectory->SetGuidance("gMocren commands.");
 50 
 51   setEventNumberSuffixCommand = new G4UIcmdWithAString("/vis/gMocren/setEventNumberSuffix", this);
 52   setEventNumberSuffixCommand->SetGuidance("Write separate event files, appended with given suffix.");
 53   setEventNumberSuffixCommand->SetGuidance("Define the suffix with a pattern such as '-0000'.");
 54   setEventNumberSuffixCommand->SetParameterName("suffix",false);
 55   setEventNumberSuffixCommand->SetDefaultValue("");
 56   setEventNumberSuffixCommand->AvailableForStates(G4State_Idle);
 57     
 58   appendGeometryCommand = new G4UIcmdWithABool("/vis/gMocren/appendGeometry", this);
 59   appendGeometryCommand->SetGuidance("Appends copy of geometry to every event.");
 60   appendGeometryCommand->SetParameterName("flag",false);
 61   appendGeometryCommand->SetDefaultValue(true);
 62   appendGeometryCommand->AvailableForStates(G4State_Idle);
 63 
 64   addPointAttributesCommand = new G4UIcmdWithABool("/vis/gMocren/addPointAttributes", this);
 65   addPointAttributesCommand->SetGuidance("Adds point attributes to the points of trajectories.");
 66   addPointAttributesCommand->SetParameterName("flag",false);
 67   addPointAttributesCommand->SetDefaultValue(false);
 68   addPointAttributesCommand->AvailableForStates(G4State_Idle);
 69 
 70   useSolidsCommand = new G4UIcmdWithABool("/vis/gMocren/useSolids", this);
 71   useSolidsCommand->SetGuidance("Use GMocren Solids, rather than Geant4 Primitives.");
 72   useSolidsCommand->SetParameterName("flag",false);
 73   useSolidsCommand->SetDefaultValue(true);
 74   useSolidsCommand->AvailableForStates(G4State_Idle);
 75 
 76   /* Not Enabled Yet
 77      writeInvisiblesCommand = new G4UIcmdWithABool("/vis/gMocren/writeInvisibles", this);
 78      writeInvisiblesCommand->SetGuidance("Write invisible objects.");
 79      writeInvisiblesCommand->SetParameterName("flag",false);
 80      writeInvisiblesCommand->SetDefaultValue(true);
 81      writeInvisiblesCommand->AvailableForStates(G4State_Idle);
 82   */
 83 
 84   kSetgMocrenVolumeNameCommand = new G4UIcmdWithAString("/vis/gMocren/setVolumeName", this);
 85   kSetgMocrenVolumeNameCommand->SetGuidance("detector name for a volume data in gMocren data.");
 86   kSetgMocrenVolumeNameCommand->SetParameterName("kgMocrenVolumeName",false);
 87   kSetgMocrenVolumeNameCommand->SetDefaultValue("gMocrenVolume");
 88   kSetgMocrenVolumeNameCommand->AvailableForStates(G4State_Idle);
 89 
 90   kAddgMocrenHitNameCommand = new G4UIcmdWithAString("/vis/gMocren/addHitName", this);
 91   kAddgMocrenHitNameCommand->SetGuidance("hit name for a dose distribution in gMocren data.");
 92   kAddgMocrenHitNameCommand->SetParameterName("kgMocrenHitName",false);
 93   kAddgMocrenHitNameCommand->AvailableForStates(G4State_Idle);
 94 
 95   kResetgMocrenHitNameCommand = new G4UIcmdWithoutParameter("/vis/gMocren/resetHitNames", this);
 96   kResetgMocrenHitNameCommand->SetGuidance("reset all hit names.");
 97   kResetgMocrenHitNameCommand->AvailableForStates(G4State_Idle);
 98 
 99   kSetgMocrenScoringMeshNameCommand = new G4UIcmdWithAString("/vis/gMocren/setScoringMeshName", this);
100   kSetgMocrenScoringMeshNameCommand->SetGuidance("scoring mesh name for a dose distribution in gMocren data.");
101   kSetgMocrenScoringMeshNameCommand->SetParameterName("kgMocrenScoringMeshName",false);
102   kSetgMocrenScoringMeshNameCommand->SetDefaultValue("gMocrenScoringMesh");
103   kSetgMocrenScoringMeshNameCommand->AvailableForStates(G4State_Idle);
104 
105   kAddgMocrenHitScorerNameCommand = new G4UIcmdWithAString("/vis/gMocren/addHitScorerName", this);
106   kAddgMocrenHitScorerNameCommand->SetGuidance("hit scorer name for a dose distribution in gMocren data.");
107   kAddgMocrenHitScorerNameCommand->SetParameterName("kgMocrenHitScorerNames",false);
108   kAddgMocrenHitScorerNameCommand->AvailableForStates(G4State_Idle);
109 
110   kResetgMocrenHitScorerNameCommand = new G4UIcmdWithoutParameter("/vis/gMocren/resetHitScorerName", this);
111   kResetgMocrenHitScorerNameCommand->SetGuidance("reset all hit scorer names.");
112   kResetgMocrenHitScorerNameCommand->AvailableForStates(G4State_Idle);
113 
114   kSetgMocrenNoVoxelsCommand = new G4UIcommand("/vis/gMocren/setNumberOfVoxels", this);
115   kSetgMocrenNoVoxelsCommand->SetGuidance("set number of voxels.");
116   kSetgMocrenNoVoxelsCommand->AvailableForStates(G4State_Idle);
117   G4UIparameter * param = new G4UIparameter("nX", 'i', false);
118   param->SetDefaultValue("1");
119   param->SetParameterRange("nX>0");
120   kSetgMocrenNoVoxelsCommand->SetParameter(param);
121   param = new G4UIparameter("nY", 'i', false);
122   param->SetDefaultValue("1");
123   param->SetParameterRange("nY>0");
124   kSetgMocrenNoVoxelsCommand->SetParameter(param);
125   param = new G4UIparameter("nZ", 'i', false);
126   param->SetDefaultValue("1");
127   param->SetParameterRange("nZ>0");
128   kSetgMocrenNoVoxelsCommand->SetParameter(param);
129 
130   kListgMocrenCommand = new G4UIcmdWithoutParameter("/vis/gMocren/list", this);
131   kListgMocrenCommand->SetGuidance("list gMocren command parameters.");
132   kListgMocrenCommand->AvailableForStates(G4State_Idle);
133 
134   kDrawVolumeGridCommand = new G4UIcmdWithABool("/vis/gMocren/drawVolumeGrid", this);
135   kDrawVolumeGridCommand->SetGuidance("Add grid of the volume.");
136   kDrawVolumeGridCommand->SetParameterName("kDrawVolumeGrid",false);
137   kDrawVolumeGridCommand->SetDefaultValue(false);
138   kDrawVolumeGridCommand->AvailableForStates(G4State_Idle);
139 
140 }
141 
142 G4GMocrenMessenger::~G4GMocrenMessenger() {
143   delete setEventNumberSuffixCommand;
144   delete appendGeometryCommand;
145   delete addPointAttributesCommand;
146   delete useSolidsCommand;
147   //    delete writeInvisiblesCommand;
148   delete kSetgMocrenVolumeNameCommand;
149   delete kAddgMocrenHitNameCommand;
150   delete kResetgMocrenHitNameCommand;
151   //
152   delete kSetgMocrenScoringMeshNameCommand;
153   delete kAddgMocrenHitScorerNameCommand;
154   delete kResetgMocrenHitScorerNameCommand;
155   //
156   delete kSetgMocrenNoVoxelsCommand;
157   //
158   delete kgMocrenDirectory;
159   //
160   delete kDrawVolumeGridCommand;
161 }
162 
163 G4String G4GMocrenMessenger::GetCurrentValue(G4UIcommand * command) {
164   if (command==setEventNumberSuffixCommand) {
165     return suffix;
166   } else if (command==appendGeometryCommand) {
167     return appendGeometryCommand->ConvertToString(geometry); 
168   } else if (command==addPointAttributesCommand) {
169     return addPointAttributesCommand->ConvertToString(pointAttributes); 
170   } else if (command==useSolidsCommand) {
171     return useSolidsCommand->ConvertToString(solids);
172     //    } else if (command==writeInvisiblesCommand) {
173     //        return writeInvisiblesCommand->ConvertToString(invisibles);
174   } else if (command == kSetgMocrenVolumeNameCommand) {
175     return kgMocrenVolumeName;
176   } else if (command == kAddgMocrenHitNameCommand) {
177     G4String strval;
178     std::vector<G4String>::iterator itr = kgMocrenHitNames.begin();
179     for(; itr != kgMocrenHitNames.end(); itr++) {
180       strval += *itr;
181       strval += " ";
182     }
183     return strval;
184   } else if (command == kSetgMocrenScoringMeshNameCommand) {
185     return kgMocrenScoringMeshName;
186   } else if (command == kAddgMocrenHitScorerNameCommand) {
187     G4String strval;
188     std::vector<G4String>::iterator itr = kgMocrenHitScorerNames.begin();
189     for(; itr != kgMocrenHitScorerNames.end(); itr++) {
190       strval += *itr;
191       strval += " ";
192     }
193     return strval;
194   } else if (command==kDrawVolumeGridCommand) {
195     return kDrawVolumeGridCommand->ConvertToString(kDrawVolumeGrid);
196   } else {
197     return "";
198   }
199 }
200 
201 void G4GMocrenMessenger::SetNewValue(G4UIcommand * command, G4String newValue) {
202   if (command==setEventNumberSuffixCommand) {
203     suffix = std::move(newValue);
204   } else if (command==appendGeometryCommand) {
205     geometry = appendGeometryCommand->GetNewBoolValue(newValue);
206   } else if (command==addPointAttributesCommand) {
207     pointAttributes = addPointAttributesCommand->GetNewBoolValue(newValue);
208   } else if (command==useSolidsCommand) {
209     solids = useSolidsCommand->GetNewBoolValue(newValue);
210     //    } else if (command==writeInvisiblesCommand) {
211     //        invisibles = writeInvisiblesCommand->GetNewBoolValue(newValue);
212   } else if (command == kSetgMocrenVolumeNameCommand) {
213     kgMocrenVolumeName = std::move(newValue);
214   } else if (command == kAddgMocrenHitNameCommand) {
215     kgMocrenHitNames.push_back(std::move(newValue));
216   } else if (command == kResetgMocrenHitNameCommand) {
217     kgMocrenHitNames.clear();
218   } else if (command == kSetgMocrenScoringMeshNameCommand) {
219     kgMocrenScoringMeshName = std::move(newValue);
220   } else if (command == kAddgMocrenHitScorerNameCommand) {
221     kgMocrenHitScorerNames.push_back(std::move(newValue));
222   } else if (command == kResetgMocrenHitScorerNameCommand) {
223     kgMocrenHitScorerNames.clear();
224   } else if (command == kListgMocrenCommand) {
225     list();
226   } else if (command == kSetgMocrenNoVoxelsCommand) {
227     G4Tokenizer next(newValue);
228     for(int i = 0; i < 3; i++) {
229       kgMocrenNoVoxels[i] = StoI(next());
230     }
231   } else if (command==kDrawVolumeGridCommand) {
232     kDrawVolumeGrid = kDrawVolumeGridCommand->GetNewBoolValue(newValue);
233   } 
234 }
235 
236 G4String G4GMocrenMessenger::getEventNumberSuffix() {
237   return suffix;
238 }
239 
240 G4bool G4GMocrenMessenger::appendGeometry() {
241   return geometry;
242 }
243 
244 G4bool G4GMocrenMessenger::addPointAttributes() {
245   return pointAttributes;
246 }
247 
248 G4bool G4GMocrenMessenger::useSolids() {
249   return solids;
250 }
251 
252 G4bool G4GMocrenMessenger::writeInvisibles() {
253   return invisibles;
254 }
255 
256 G4String G4GMocrenMessenger::getVolumeName() {
257   return kgMocrenVolumeName;
258 }
259 
260 std::vector<G4String> G4GMocrenMessenger::getHitNames() {
261   return kgMocrenHitNames;
262 }
263 
264 G4String G4GMocrenMessenger::getScoringMeshName() {
265   return kgMocrenScoringMeshName;
266 }
267 
268 std::vector<G4String> G4GMocrenMessenger::getHitScorerNames() {
269   return kgMocrenHitScorerNames;
270 }
271 
272 void G4GMocrenMessenger::list() {
273   G4cout << "  Current valuess of gMocren command parameters:" << G4endl;
274   //
275   G4cout << "    volume name:        " << kgMocrenVolumeName << G4endl;
276   //
277   G4cout << "    hit names:          ";
278   if(kgMocrenHitNames.size() > 0) {
279     std::vector<G4String>::iterator itr = kgMocrenHitNames.begin();
280     for(; itr != kgMocrenHitNames.end(); itr++)
281       G4cout << *itr << "  " << G4endl;
282   } else {
283     G4cout << G4endl;
284   }
285   //
286   G4cout << "    scoring mesh name:  " << kgMocrenScoringMeshName << G4endl;
287   //
288   G4cout << "    scorer names:       ";
289   if(kgMocrenHitScorerNames.size() > 0) {
290     std::vector<G4String>::iterator itr = kgMocrenHitScorerNames.begin();
291     for(; itr != kgMocrenHitScorerNames.end(); itr++)
292       G4cout << *itr << "  " << G4endl;
293   } else {
294     G4cout << G4endl;
295   }
296   G4cout << G4endl;
297 }
298 
299 void G4GMocrenMessenger::getNoVoxels(G4int & nx, G4int & ny, G4int & nz) const {
300   nx = kgMocrenNoVoxels[0];
301   ny = kgMocrenNoVoxels[1];
302   nz = kgMocrenNoVoxels[2];
303 }
304