[807] | 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 | // HepMCG4PythiaMessenger.cc |
---|
| 29 | // $Id: HepMCG4PythiaMessenger.cc,v 1.6 2006/07/05 11:06:36 gcosmo Exp $ |
---|
| 30 | // |
---|
| 31 | // ==================================================================== |
---|
| 32 | |
---|
| 33 | #ifdef G4LIB_USE_PYTHIA |
---|
| 34 | |
---|
| 35 | #include "HepMCG4PythiaMessenger.hh" |
---|
| 36 | #include "HepMCG4PythiaInterface.hh" |
---|
| 37 | |
---|
| 38 | #include <sstream> |
---|
| 39 | #include <fstream> |
---|
| 40 | |
---|
| 41 | #include "G4UIdirectory.hh" |
---|
| 42 | #include "G4UIcmdWithoutParameter.hh" |
---|
| 43 | #include "G4UIcmdWithAString.hh" |
---|
| 44 | #include "G4UIcmdWithAnInteger.hh" |
---|
| 45 | |
---|
| 46 | //////////////////////////////////////////////////////////////////////////// |
---|
| 47 | HepMCG4PythiaMessenger::HepMCG4PythiaMessenger(HepMCG4PythiaInterface* agen) |
---|
| 48 | : gen(agen) |
---|
| 49 | //////////////////////////////////////////////////////////////////////////// |
---|
| 50 | { |
---|
| 51 | dir= new G4UIdirectory("/generator/pythia/"); |
---|
| 52 | dir-> SetGuidance("Commands for Pythia event generation"); |
---|
| 53 | |
---|
| 54 | verbose= new G4UIcmdWithAnInteger("/generator/pythia/verbose",this); |
---|
| 55 | verbose-> SetGuidance("set verbose level"); |
---|
| 56 | verbose-> SetParameterName("verboseLevel", false, false); |
---|
| 57 | verbose-> SetRange("verboseLevel>=0 && verboseLevel<=2"); |
---|
| 58 | |
---|
| 59 | mpylist= new G4UIcmdWithAnInteger("/generator/pythia/pylist",this); |
---|
| 60 | mpylist-> SetGuidance("set argument of pylist (not called if mlist=0)"); |
---|
| 61 | mpylist-> SetParameterName("mlist", false, false); |
---|
| 62 | mpylist-> SetRange("mlist>=0 && mlist<=3"); |
---|
| 63 | |
---|
| 64 | print= new G4UIcmdWithoutParameter("/generator/pythia/print", this); |
---|
| 65 | print-> SetGuidance("print user information."); |
---|
| 66 | |
---|
| 67 | cpyinit= new G4UIcommand("/generator/pythia/pyinit", this); |
---|
| 68 | cpyinit-> SetGuidance("call PYINIT"); |
---|
| 69 | G4UIparameter* frame= |
---|
| 70 | new G4UIparameter("frame of the experiment", 's', false); |
---|
| 71 | cpyinit-> SetParameter(frame); |
---|
| 72 | G4UIparameter* beam= new G4UIparameter("beam particle", 's', false); |
---|
| 73 | cpyinit-> SetParameter(beam); |
---|
| 74 | G4UIparameter* target= new G4UIparameter("target particle", 's', false); |
---|
| 75 | cpyinit-> SetParameter(target); |
---|
| 76 | G4UIparameter* win= new G4UIparameter("energy of system (GeV)", 'd', false); |
---|
| 77 | cpyinit-> SetParameter(win); |
---|
| 78 | |
---|
| 79 | cpystat= new G4UIcmdWithAnInteger("/generator/pythia/pystat", this); |
---|
| 80 | cpystat-> SetGuidance("call PYSTAT"); |
---|
| 81 | cpystat-> SetParameterName("mstat", false, false); |
---|
| 82 | cpystat-> SetRange("mstat>=1 && mstat<=5"); |
---|
| 83 | |
---|
| 84 | cpygive= new G4UIcommand("/generator/pythia/pygive",this); |
---|
| 85 | cpygive-> SetGuidance("call PYGIVE"); |
---|
| 86 | G4UIparameter* parameter= new G4UIparameter ("Parameter", 's', false); |
---|
| 87 | cpygive-> SetParameter(parameter); |
---|
| 88 | |
---|
| 89 | setUserParameters= |
---|
| 90 | new G4UIcmdWithoutParameter("/generator/pythia/setUserParameters",this); |
---|
| 91 | setUserParameters-> |
---|
| 92 | SetGuidance("Set user parameters in the Pythia common blocks"); |
---|
| 93 | |
---|
| 94 | setSeed= new G4UIcmdWithAnInteger("/generator/pythia/setSeed", this); |
---|
| 95 | setSeed-> SetGuidance("set initial seed."); |
---|
| 96 | |
---|
| 97 | cpyrget= new G4UIcommand("/generator/pythia/pyrget", this); |
---|
| 98 | cpyrget-> SetGuidance("call PYRGET"); |
---|
| 99 | G4UIparameter* lun, *move; |
---|
| 100 | lun= new G4UIparameter("logical file number", 'i', false); |
---|
| 101 | cpyrget-> SetParameter(lun); |
---|
| 102 | move= new G4UIparameter("choice of adding a new record", 'i', true); |
---|
| 103 | move-> SetDefaultValue(-1); |
---|
| 104 | cpyrget-> SetParameter(move); |
---|
| 105 | |
---|
| 106 | cpyrset= new G4UIcommand("/generator/pythia/pyrset", this); |
---|
| 107 | cpyrset-> SetGuidance("call PYRSET"); |
---|
| 108 | lun= new G4UIparameter("logical file number", 'i', false); |
---|
| 109 | cpyrset-> SetParameter(lun); |
---|
| 110 | move= new G4UIparameter("choice of adding a new record", 'i', true); |
---|
| 111 | move-> SetDefaultValue(0); |
---|
| 112 | cpyrset-> SetParameter(move); |
---|
| 113 | |
---|
| 114 | printRandomStatus= |
---|
| 115 | new G4UIcmdWithAString("/generator/pythia/printRandomStatus", this); |
---|
| 116 | printRandomStatus-> SetGuidance("print random number status."); |
---|
| 117 | printRandomStatus-> SetParameterName("filename", true, false); |
---|
| 118 | printRandomStatus-> SetDefaultValue("std::cout"); |
---|
| 119 | } |
---|
| 120 | |
---|
| 121 | ///////////////////////////////////////////////// |
---|
| 122 | HepMCG4PythiaMessenger::~HepMCG4PythiaMessenger() |
---|
| 123 | ///////////////////////////////////////////////// |
---|
| 124 | { |
---|
| 125 | delete verbose; |
---|
| 126 | delete mpylist; |
---|
| 127 | delete print; |
---|
| 128 | delete cpyinit; |
---|
| 129 | delete cpystat; |
---|
| 130 | delete cpygive; |
---|
| 131 | delete setUserParameters; |
---|
| 132 | delete setSeed; |
---|
| 133 | delete cpyrget; |
---|
| 134 | delete cpyrset; |
---|
| 135 | delete printRandomStatus; |
---|
| 136 | |
---|
| 137 | delete dir; |
---|
| 138 | } |
---|
| 139 | |
---|
| 140 | ////////////////////////////////////////////////////////////// |
---|
| 141 | void HepMCG4PythiaMessenger::SetNewValue(G4UIcommand* command, |
---|
| 142 | G4String newValues) |
---|
| 143 | ////////////////////////////////////////////////////////////// |
---|
| 144 | { |
---|
| 145 | if(command == verbose) { // /verbose ... |
---|
| 146 | G4int level= verbose-> GetNewIntValue(newValues); |
---|
| 147 | gen-> SetVerboseLevel(level); |
---|
| 148 | |
---|
| 149 | } else if (command == mpylist) { // /mpylist ... |
---|
| 150 | G4int mlist= mpylist-> GetNewIntValue(newValues); |
---|
| 151 | gen-> SetPylist(mlist); |
---|
| 152 | |
---|
| 153 | } else if (command == print) { // /print ... |
---|
| 154 | gen-> Print(); |
---|
| 155 | |
---|
| 156 | } else if (command == cpyinit) { // /pyinit ... |
---|
| 157 | const char* strvaluelist= newValues.c_str(); |
---|
| 158 | std::istringstream is(strvaluelist); |
---|
| 159 | G4String sframe, sbeam, starget; G4double dwin; |
---|
| 160 | is >> sframe >> sbeam >> starget >> dwin; |
---|
| 161 | gen-> CallPyinit(sframe, sbeam, starget, dwin); |
---|
| 162 | |
---|
| 163 | } else if (command == cpystat) { // /pystat ... |
---|
| 164 | G4int imod= cpystat-> GetNewIntValue(newValues); |
---|
| 165 | gen-> CallPystat(imod); |
---|
| 166 | |
---|
| 167 | } else if (command == cpygive) { // /pygive ... |
---|
| 168 | G4String s= newValues; |
---|
| 169 | gen-> CallPygive(s); |
---|
| 170 | |
---|
| 171 | } else if (command == setUserParameters) { // /setUserParameters ... |
---|
| 172 | gen-> SetUserParameters(); |
---|
| 173 | |
---|
| 174 | } else if (command == setSeed) { // /setSeed ... |
---|
| 175 | G4int iseed= setSeed-> GetNewIntValue(newValues); |
---|
| 176 | gen-> SetRandomSeed(iseed); |
---|
| 177 | |
---|
| 178 | } else if (command == cpyrget) { // /pyrget ... |
---|
| 179 | const char* strvaluelist= newValues.c_str(); |
---|
| 180 | std::istringstream is(strvaluelist); |
---|
| 181 | G4int lun, move; |
---|
| 182 | is >> lun >> move; |
---|
| 183 | gen-> CallPyrget(lun, move); |
---|
| 184 | |
---|
| 185 | } else if (command == cpyrset) { // /pyrset ... |
---|
| 186 | const char* strvaluelist= newValues.c_str(); |
---|
| 187 | std::istringstream is(strvaluelist); |
---|
| 188 | G4int lun, move; |
---|
| 189 | is >> lun >> move; |
---|
| 190 | gen-> CallPyrset(lun, move); |
---|
| 191 | |
---|
| 192 | } else if (command == printRandomStatus) { // /printRandomStatus ... |
---|
| 193 | G4String s= newValues; |
---|
| 194 | if (newValues == "std::cout") { |
---|
| 195 | gen-> PrintRandomStatus(); |
---|
| 196 | } else { |
---|
| 197 | // to a file (overwrite mode) |
---|
| 198 | std::ofstream ofs; |
---|
| 199 | ofs.open(s.c_str(), std::ios::out); |
---|
| 200 | //ofs.open(randomStatusFileName.c_str(), std::ios::out|std::ios::app); |
---|
| 201 | ofs.setf(std::ios::fixed | std::ios::showpoint); |
---|
| 202 | gen-> PrintRandomStatus(ofs); |
---|
| 203 | ofs.close(); |
---|
| 204 | } |
---|
| 205 | } |
---|
| 206 | } |
---|
| 207 | |
---|
| 208 | ////////////////////////////////////////////////////////////////////// |
---|
| 209 | G4String HepMCG4PythiaMessenger::GetCurrentValue(G4UIcommand* command) |
---|
| 210 | ////////////////////////////////////////////////////////////////////// |
---|
| 211 | { |
---|
| 212 | G4String cv; |
---|
| 213 | if (command == verbose) { |
---|
| 214 | cv= verbose-> ConvertToString(gen->GetVerboseLevel()); |
---|
| 215 | } else if (command == mpylist) { |
---|
| 216 | cv= verbose-> ConvertToString(gen->GetPylist()); |
---|
| 217 | } |
---|
| 218 | return cv; |
---|
| 219 | } |
---|
| 220 | |
---|
| 221 | #endif |
---|