Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4PersistencyCenterMessenger.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// File: G4PersistencyCenterMessenger.cc
27//
28// History:
29// 01.07.18 Youhei Morita Initial creation (with "fadsclass")
30
32
33// Implementation of Constructor #1
35 : pc(p)
36{
37 std::string name = "/persistency/";
38 directory=new G4UIdirectory(name.c_str());
39 directory->SetGuidance("Control commands for Persistency package");
40
41 std::string cmd = name + "verbose";
42
43 verboseCmd = new G4UIcmdWithAnInteger(cmd.c_str(),this);
44 verboseCmd->SetGuidance("Set the verbose level of G4PersistencyManager.");
45 verboseCmd->SetGuidance(" 0 : Silent (default)");
46 verboseCmd->SetGuidance(" 1 : Display main topics");
47 verboseCmd->SetGuidance(" 2 : Display event-level topics");
48 verboseCmd->SetGuidance(" 3 : Display debug information");
49 verboseCmd->SetParameterName("level",true);
50 verboseCmd->SetDefaultValue(0);
51 verboseCmd->SetRange("level >=0 && level <=3");
52
53 std::string vname = name + "select";
54
55 cmd = vname;
56 select = new G4UIcmdWithAString(cmd.c_str(),this);
57 select->SetGuidance("Selection of a persistency package");
58 select->SetParameterName("Persistency package name", true, true);
59 select->SetCandidates("ODBMS ROOT None");
60
61 vname = name + "store/";
62
63 subdir1 = new G4UIdirectory(vname.c_str());
64 subdir1->SetGuidance("Specifiy object types for store");
65
66 wrObj.push_back("HepMC");
67 wrObj.push_back("MCTruth");
68 wrObj.push_back("Hits");
69
70 std::string guidance;
71 int i;
72
73 for ( i = 0; i < 3; i++ )
74 {
75 cmd = vname + wrObj[i];
76 guidance = "Store " + wrObj[i] + " objects for output";
77 storeObj.push_back(new G4UIcmdWithAString(cmd.c_str(),this));
78 storeObj[i]->SetGuidance(guidance.c_str());
79 if ( wrObj[i] == "HepMC" ) {
80 storeObj[i]->SetCandidates("on off recycle");
81 } else {
82 storeObj[i]->SetCandidates("on off");
83 }
84 }
85
86 vname += "using/";
87 subdir2 = new G4UIdirectory(vname.c_str());
88 subdir2->SetGuidance("Select I/O manager for store");
89
90 cmd = vname + "hitIO";
91 regHitIO = new G4UIcmdWithAString(cmd.c_str(),this);
92 regHitIO->SetGuidance("Resiter Hits I/O Manager");
93 regHitIO->SetParameterName("Name of Hits I/O Manager", true, true);
94
95 vname = name + "set/";
96 subdir3 = new G4UIdirectory(vname.c_str());
97 subdir3->SetGuidance("Set various parameters");
98
99 vname += "writeFile/";
100 subdir4 = new G4UIdirectory(vname.c_str());
101 subdir4->SetGuidance("Set output file names for object types");
102
103 for ( i = 0; i < 3; i++ )
104 {
105 cmd = vname + wrObj[i];
106 guidance = "Set an output file name for " + wrObj[i] + ".";
107 setWrFile.push_back(new G4UIcmdWithAString(cmd.c_str(),this));
108 setWrFile[i]->SetGuidance(guidance.c_str());
109 setWrFile[i]->SetParameterName("file name", true, true);
110 }
111
112 vname = name + "set/ReadFile/";
113 subdir5 = new G4UIdirectory(vname.c_str());
114 subdir5->SetGuidance("Set input file names for object types");
115
116 rdObj.push_back("Hits");
117
118 cmd = vname + rdObj[0];
119 guidance = "Set an input file name for " + rdObj[0] + ".";
120 setRdFile.push_back(new G4UIcmdWithAString(cmd.c_str(),this));
121 setRdFile[0]->SetGuidance(guidance.c_str());
122 setRdFile[0]->SetParameterName("file name", true, true);
123
124 cmd = name + "printall";
125 printAll = new G4UIcmdWithoutParameter(cmd.c_str(),this);
126 printAll->SetGuidance("Print all parameters.");
127
128}
129
130// Implementation of Destructor #1
132{
133 delete directory;
134 delete subdir1;
135 delete subdir2;
136 delete subdir3;
137 delete subdir4;
138 delete subdir5;
139 delete verboseCmd;
140 delete select;
141 delete regHitIO;
142 for ( int i = 0; i < 3; i++ )
143 {
144 delete storeObj[i];
145 delete setWrFile[i];
146 }
147 delete setRdFile[0];
148 delete printAll;
149}
150
151// Implementation of SetNewValue
153{
154 if (command==verboseCmd)
155 {
156 pc->SetVerboseLevel(verboseCmd->GetNewIntValue(newValues));
157 }
158 else if (command==select)
159 {
160 pc->SelectSystem(newValues);
161 }
162 else if (command==regHitIO)
163 {
164 pc->AddHCIOmanager(PopWord(newValues,1," "),PopWord(newValues,2," "));
165 }
166 else if (command==setRdFile[0])
167 {
168 pc -> SetReadFile ( rdObj[0],newValues);
169 }
170 else if (command==printAll)
171 {
172 pc->PrintAll();
173 }
174 else
175 {
176 for( int i=0; i<3; i++ ) {
177 if( command==storeObj[i] )
178 {
179 StoreMode mode = kOff;
180 if( newValues == "on" ) {
181 mode = kOn;
182 } else if ( newValues == "off" ) {
183 mode = kOff;
184 } else if ( newValues == "recycle" ) {
185 mode = kRecycle;
186 } else {
187 G4cerr << "Unrecognized keyword - \"" << newValues << "\"."
188 << G4endl;
189 }
190 pc->SetStoreMode(wrObj[i],mode);
191 break;
192 }
193 else if( command==setWrFile[i] )
194 {
195 pc->SetWriteFile(wrObj[i],newValues);
196 break;
197 }
198 }
199 }
200}
201
202// Implementation of GetCurrentValue
204{
205 G4String ustr="Undefined";
206
207 if (command==select)
208 {
209 return pc->VerboseLevel();
210 }
211 else if (command==select)
212 {
213 return pc->CurrentSystem();
214 }
215 else if (command==regHitIO)
216 {
217 return pc->CurrentHCIOmanager();
218 }
219 else if (command==setRdFile[0])
220 {
221 return pc->CurrentReadFile(rdObj[0]);
222 }
223 else
224 {
225 for( int i=0; i<3; i++ ) {
226 if( command==storeObj[i] )
227 {
228 switch (pc->CurrentStoreMode(wrObj[i])) {
229 case kOn:
230 return "on";
231 break;
232 case kOff:
233 return "off";
234 break;
235 case kRecycle:
236 return "recycle";
237 break;
238 default:
239 return "?????";
240 break;
241 };
242 }
243 else if( command==setWrFile[i] )
244 {
245 return pc->CurrentWriteFile(wrObj[i]);
246 }
247 }
248 }
249
250 return ustr;
251}
252
253// Implementation of PopWord
254std::string G4PersistencyCenterMessenger::PopWord(std::string text, int n, std::string delim)
255{
256 if ( text.length() <= 0 ) return "";
257 int p = 0, p0 = 0;
258 int p1 = 0;
259 for ( int i = 0; i < n; i++ ) {
260 p1 = text.find_first_of(delim,p0+1);
261 while( p1 == p0+1 ) {
262 p0 = p1;
263 p1 = text.find_first_of(delim,p0+1);
264 }
265 p = p0;
266 if ( p1 < 0 ) {
267 if ( i+1 < n ) return "";
268 p1 = text.length();
269 break;
270 }
271 p0 = p1;
272 }
273 if (p > 0) p++;
274 return text.substr(p,p1-p);
275}
276
277// End of G4PersistencyCenterMessenger.cc
278
@ kRecycle
#define G4endl
Definition: G4ios.hh:52
G4DLLIMPORT std::ostream G4cerr
void SetNewValue(G4UIcommand *command, G4String newValues)
G4String GetCurrentValue(G4UIcommand *command)
G4PersistencyCenterMessenger(G4PersistencyCenter *p)
void SelectSystem(std::string systemName)
const std::string CurrentSystem()
std::string CurrentHCIOmanager()
std::string CurrentWriteFile(std::string objName)
StoreMode CurrentStoreMode(std::string objName)
void SetStoreMode(std::string objName, StoreMode mode)
void AddHCIOmanager(std::string detName, std::string colName)
G4bool SetWriteFile(std::string objName, std::string writeFileName)
std::string CurrentReadFile(std::string objName)
void SetCandidates(const char *candidateList)
void SetParameterName(const char *theName, G4bool omittable, G4bool currentAsDefault=false)
void SetParameterName(const char *theName, G4bool omittable, G4bool currentAsDefault=false)
static G4int GetNewIntValue(const char *paramString)
void SetDefaultValue(G4int defVal)
void SetGuidance(const char *aGuidance)
Definition: G4UIcommand.hh:156
void SetRange(const char *rs)
Definition: G4UIcommand.hh:120