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