source: trunk/examples/advanced/radiation_monitor/analysis/src/RadmonAnalysisMessenger.cc@ 809

Last change on this file since 809 was 807, checked in by garnier, 17 years ago

update

File size: 11.5 KB
Line 
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// File name: RadmonAnalysisMessenger.cc
28// Creation date: Sep 2005
29// Main author: Riccardo Capra <capra@ge.infn.it>
30//
31// Id: $Id: RadmonAnalysisMessenger.cc,v 1.3 2006/06/29 16:07:39 gunter Exp $
32// Tag: $Name: $
33//
34
35// Messenger commands path
36#define COMMANDS_PATH "/radmon/analysis/"
37
38// Include files
39#include "RadmonAnalysisMessenger.hh"
40#include "RadmonVAnalysisLayout.hh"
41#include "G4UnitsTable.hh"
42
43
44
45 RadmonAnalysisMessenger :: RadmonAnalysisMessenger(RadmonVAnalysisLayout * layout)
46:
47 RadmonMessenger(COMMANDS_PATH, "Interactive analysis configuration commands."),
48 analysisLayout(layout),
49 RADMON_INITIALIZE_COMMAND(SetOutputFileName),
50 RADMON_INITIALIZE_COMMAND(SetOutputFileFormat),
51 RADMON_INITIALIZE_COMMAND(CreateSensitiveDetector),
52 RADMON_INITIALIZE_COMMAND(SetSensitiveDetectorType),
53 RADMON_INITIALIZE_COMMAND(RemoveSensitiveDetector),
54 RADMON_INITIALIZE_COMMAND(CreateSensitiveDetectorType),
55 RADMON_INITIALIZE_COMMAND(RemoveSensitiveDetectorType),
56 RADMON_INITIALIZE_COMMAND(AppendDataAnalysisToSensitiveDetectorType),
57 RADMON_INITIALIZE_COMMAND(SetDataAnalysisType),
58 RADMON_INITIALIZE_COMMAND(RemoveDataAnalysis),
59 RADMON_INITIALIZE_COMMAND(SetDataAnalysisAttribute),
60 RADMON_INITIALIZE_COMMAND(ClearDataAnalysisAttribute),
61 RADMON_INITIALIZE_COMMAND(DumpLayout),
62 RADMON_INITIALIZE_COMMAND(Load),
63 RADMON_INITIALIZE_COMMAND(Save)
64{
65 if (layout==0)
66 G4Exception("RadmonAnalysisMessenger::RadmonAnalysisMessenger: layout==0.");
67
68 RADMON_CREATE_COMMAND_1ARG (SetOutputFileName, "Sets the name of the analysis file", "fileName");
69 RADMON_CREATE_COMMAND_1ARG (SetOutputFileFormat, "Sets the format of the analysis file", "format");
70 RADMON_CREATE_COMMAND_2ARGS(CreateSensitiveDetector, "Creates a sensitive detector", "sensitiveDetectorName", "sensitiveDetectorType");
71 RADMON_CREATE_COMMAND_2ARGS(SetSensitiveDetectorType, "Changes the type of sensitive detector", "sensitiveDetectorName", "sensitiveDetectorType");
72 RADMON_CREATE_COMMAND_1ARG (RemoveSensitiveDetector, "Removes a sensitive detector", "sensitiveDetectorName");
73 RADMON_CREATE_COMMAND_1ARG (CreateSensitiveDetectorType, "Creates a sensitive detector type", "sensitiveDetectorType");
74 RADMON_CREATE_COMMAND_1ARG (RemoveSensitiveDetectorType, "Removes a sensitive detector type", "sensitiveDetectorType");
75 RADMON_CREATE_COMMAND_2ARGS(AppendDataAnalysisToSensitiveDetectorType, "Appends a analysis module to the sensitive detector type", "sensitiveDetectorType", "analysisModuleLabel");
76 RADMON_CREATE_COMMAND_3ARGS(SetDataAnalysisType, "Sets the type of analysis module", "sensitiveDetectorType", "analysisModuleLabel", "analysisModuleType");
77 RADMON_CREATE_COMMAND_2ARGS(RemoveDataAnalysis, "Removes a analysis module from the sensitive detector type", "sensitiveDetectorType", "analysisModuleLabel");
78 RADMON_CREATE_COMMAND_4ARGS(SetDataAnalysisAttribute, "Sets an attribute of a analysis module", "sensitiveDetectorType", "analysisModuleLabel", "attributeName", "attributeValue");
79 RADMON_CREATE_COMMAND_3ARGS(ClearDataAnalysisAttribute, "Clears an attribute of a analysis module", "sensitiveDetectorType", "analysisModuleLabel", "attributeName");
80 RADMON_CREATE_COMMAND_0ARGS(DumpLayout, "Dumps the layout");
81 RADMON_CREATE_COMMAND_1ARG (Load, "Loads the configuration from file", "fileName");
82 RADMON_CREATE_COMMAND_1ARG (Save, "Saves the configuration from file", "fileName");
83}
84
85
86
87 RadmonAnalysisMessenger :: ~RadmonAnalysisMessenger()
88{
89 RADMON_DESTROY_COMMAND(Save);
90 RADMON_DESTROY_COMMAND(Load);
91 RADMON_DESTROY_COMMAND(DumpLayout);
92 RADMON_DESTROY_COMMAND(ClearDataAnalysisAttribute);
93 RADMON_DESTROY_COMMAND(SetDataAnalysisAttribute);
94 RADMON_DESTROY_COMMAND(RemoveDataAnalysis);
95 RADMON_DESTROY_COMMAND(SetDataAnalysisType);
96 RADMON_DESTROY_COMMAND(AppendDataAnalysisToSensitiveDetectorType);
97 RADMON_DESTROY_COMMAND(RemoveSensitiveDetectorType);
98 RADMON_DESTROY_COMMAND(CreateSensitiveDetectorType);
99 RADMON_DESTROY_COMMAND(RemoveSensitiveDetector);
100 RADMON_DESTROY_COMMAND(SetSensitiveDetectorType);
101 RADMON_DESTROY_COMMAND(CreateSensitiveDetector);
102 RADMON_DESTROY_COMMAND(SetOutputFileFormat);
103 RADMON_DESTROY_COMMAND(SetOutputFileName);
104}
105
106
107
108
109
110G4String RadmonAnalysisMessenger :: GetCurrentValue(G4UIcommand * /* command */)
111{
112 G4cout << "RadmonAnalysisMessenger::GetCurrentValue(): Not supported" << G4endl;
113
114 return G4String();
115}
116
117
118
119void RadmonAnalysisMessenger :: SetNewValue(G4UIcommand * command, G4String newValue)
120{
121 RADMON_BEGIN_LIST_SET_COMMANDS
122 RADMON_SET_COMMAND(SetOutputFileName)
123 RADMON_SET_COMMAND(SetOutputFileFormat)
124 RADMON_SET_COMMAND(CreateSensitiveDetector)
125 RADMON_SET_COMMAND(SetSensitiveDetectorType)
126 RADMON_SET_COMMAND(RemoveSensitiveDetector)
127 RADMON_SET_COMMAND(CreateSensitiveDetectorType)
128 RADMON_SET_COMMAND(RemoveSensitiveDetectorType)
129 RADMON_SET_COMMAND(AppendDataAnalysisToSensitiveDetectorType)
130 RADMON_SET_COMMAND(SetDataAnalysisType)
131 RADMON_SET_COMMAND(RemoveDataAnalysis)
132 RADMON_SET_COMMAND(SetDataAnalysisAttribute)
133 RADMON_SET_COMMAND(ClearDataAnalysisAttribute)
134 RADMON_SET_COMMAND(DumpLayout)
135 RADMON_SET_COMMAND(Load)
136 RADMON_SET_COMMAND(Save)
137 RADMON_END_LIST_SET_COMMANDS
138}
139
140
141
142
143
144// Events
145void RadmonAnalysisMessenger :: OnSetOutputFileName(const G4String & value)
146{
147 G4String args;
148
149 if (!ProcessArguments(value, 1, &args))
150 return;
151
152 analysisLayout->SetOutputFileName(args);
153}
154
155
156
157void RadmonAnalysisMessenger :: OnSetOutputFileFormat(const G4String & value)
158{
159 G4String args;
160
161 if (!ProcessArguments(value, 1, &args))
162 return;
163
164 analysisLayout->SetOutputFileFormat(args);
165}
166
167
168
169void RadmonAnalysisMessenger :: OnCreateSensitiveDetector(const G4String & value)
170{
171 G4String args[2];
172
173 if (!ProcessArguments(value, 2, args))
174 return;
175
176 analysisLayout->CreateSensitiveDetector(args[0], args[1]);
177}
178
179
180
181void RadmonAnalysisMessenger :: OnSetSensitiveDetectorType(const G4String & value)
182{
183 G4String args[2];
184
185 if (!ProcessArguments(value, 2, args))
186 return;
187
188 analysisLayout->SetSensitiveDetectorType(args[0], args[1]);
189}
190
191
192
193void RadmonAnalysisMessenger :: OnRemoveSensitiveDetector(const G4String & value)
194{
195 G4String args;
196
197 if (!ProcessArguments(value, 1, &args))
198 return;
199
200 analysisLayout->RemoveSensitiveDetector(args);
201}
202
203
204
205void RadmonAnalysisMessenger :: OnCreateSensitiveDetectorType(const G4String & value)
206{
207 G4String args;
208
209 if (!ProcessArguments(value, 1, &args))
210 return;
211
212 analysisLayout->CreateSensitiveDetectorType(args);
213}
214
215
216
217void RadmonAnalysisMessenger :: OnRemoveSensitiveDetectorType(const G4String & value)
218{
219 G4String args;
220
221 if (!ProcessArguments(value, 1, &args))
222 return;
223
224 analysisLayout->RemoveSensitiveDetectorType(args);
225}
226
227
228
229void RadmonAnalysisMessenger :: OnAppendDataAnalysisToSensitiveDetectorType(const G4String & value)
230{
231 G4String args[2];
232
233 if (!ProcessArguments(value, 2, args))
234 return;
235
236 analysisLayout->AppendDataAnalysisToSensitiveDetectorType(args[0], args[1]);
237}
238
239
240
241void RadmonAnalysisMessenger :: OnSetDataAnalysisType(const G4String & value)
242{
243 G4String args[3];
244
245 if (!ProcessArguments(value, 3, args))
246 return;
247
248 analysisLayout->SetDataAnalysisType(args[0], args[1], args[2]);
249}
250
251
252
253void RadmonAnalysisMessenger :: OnRemoveDataAnalysis(const G4String & value)
254{
255 G4String args[2];
256
257 if (!ProcessArguments(value, 2, args))
258 return;
259
260 analysisLayout->RemoveDataAnalysis(args[0], args[1]);
261}
262
263
264
265void RadmonAnalysisMessenger :: OnSetDataAnalysisAttribute(const G4String & value)
266{
267 G4String args[4];
268
269 if (!ProcessArguments(value, 4, args))
270 return;
271
272 analysisLayout->SetDataAnalysisAttribute(args[0], args[1], args[2], args[3]);
273}
274
275
276
277void RadmonAnalysisMessenger :: OnClearDataAnalysisAttribute(const G4String & value)
278{
279 G4String args[3];
280
281 if (!ProcessArguments(value, 3, args))
282 return;
283
284 analysisLayout->ClearDataAnalysisAttribute(args[0], args[1], args[2]);
285}
286
287
288
289void RadmonAnalysisMessenger :: OnDumpLayout(const G4String & /* value */)
290{
291 analysisLayout->DumpLayout(G4cout);
292 G4cout << G4endl;
293}
294
295
296
297void RadmonAnalysisMessenger :: OnLoad(const G4String & value)
298{
299 G4String args;
300
301 if (!ProcessArguments(value, 1, &args))
302 return;
303
304 std::istream * in(OpenForInput(args));
305
306 if (!in)
307 return;
308
309 if (!analysisLayout->Load(*in))
310 G4cout << "RadmonAnalysisMessenger::OnLoad(): Error reading from file \"" << args << "\"." << G4endl;
311
312 delete in;
313}
314
315
316
317void RadmonAnalysisMessenger :: OnSave(const G4String & value)
318{
319 G4String args;
320
321 if (!ProcessArguments(value, 1, &args))
322 return;
323
324 std::ostream * out(OpenForOutput(args));
325
326 if (!out)
327 return;
328
329 if (!analysisLayout->Save(*out))
330 G4cout << "RadmonAnalysisMessenger::OnSave(): Cannot write layout into file \"" << args << "\"." << G4endl;
331
332 delete out;
333}
Note: See TracBrowser for help on using the repository browser.