source: trunk/source/persistency/mctruth/src/G4PersistencyCenterMessenger.cc @ 1202

Last change on this file since 1202 was 818, checked in by garnier, 16 years ago

import all except CVS

File size: 8.0 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// File: G4PersistencyCenterMessenger.cc
27//
28// History:
29//   01.07.18  Youhei Morita  Initial creation (with "fadsclass")
30
31#include "G4PersistencyCenterMessenger.hh"
32
33// Implementation of Constructor #1
34G4PersistencyCenterMessenger::G4PersistencyCenterMessenger(G4PersistencyCenter* p)
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
131G4PersistencyCenterMessenger::~G4PersistencyCenterMessenger()
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
152void G4PersistencyCenterMessenger::SetNewValue(G4UIcommand* command, G4String newValues)
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
203G4String G4PersistencyCenterMessenger::GetCurrentValue(G4UIcommand* command)
204{
205  G4String s="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 s;
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
Note: See TracBrowser for help on using the repository browser.