Geant4 Cross Reference |
1 // 1 2 // ******************************************* 3 // * License and Disclaimer 4 // * 5 // * The Geant4 software is copyright of th 6 // * the Geant4 Collaboration. It is provided 7 // * conditions of the Geant4 Software License 8 // * LICENSE and available at http://cern.ch/ 9 // * include a list of copyright holders. 10 // * 11 // * Neither the authors of this software syst 12 // * institutes,nor the agencies providing fin 13 // * work make any representation or warran 14 // * regarding this software system or assum 15 // * use. Please see the license in the file 16 // * for the full disclaimer and the limitatio 17 // * 18 // * This code implementation is the result 19 // * technical work of the GEANT4 collaboratio 20 // * By using, copying, modifying or distri 21 // * any work based on the software) you ag 22 // * use in resulting scientific publicati 23 // * acceptance of all terms of the Geant4 Sof 24 // ******************************************* 25 // 26 /// \file eventgenerator/HepMC/HepMCEx01/src/H 27 /// \brief Implementation of the HepMCG4Pythia 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........oo 46 HepMCG4PythiaMessenger::HepMCG4PythiaMessenger 47 { 48 dir = new G4UIdirectory("/generator/pythia/" 49 dir->SetGuidance("Commands for Pythia event 50 51 verbose = new G4UIcmdWithAnInteger("/generat 52 verbose->SetGuidance("set verbose level"); 53 verbose->SetParameterName("verboseLevel", fa 54 verbose->SetRange("verboseLevel>=0 && verbos 55 56 mpylist = new G4UIcmdWithAnInteger("/generat 57 mpylist->SetGuidance("set argument of pylist 58 mpylist->SetParameterName("mlist", false, fa 59 mpylist->SetRange("mlist>=0 && mlist<=3"); 60 61 print = new G4UIcmdWithoutParameter("/genera 62 print->SetGuidance("print user information." 63 64 cpyinit = new G4UIcommand("/generator/pythia 65 cpyinit->SetGuidance("call PYINIT"); 66 G4UIparameter* frame = new G4UIparameter("fr 67 cpyinit->SetParameter(frame); 68 G4UIparameter* beam = new G4UIparameter("bea 69 cpyinit->SetParameter(beam); 70 G4UIparameter* target = new G4UIparameter("t 71 cpyinit->SetParameter(target); 72 G4UIparameter* win = new G4UIparameter("ener 73 cpyinit->SetParameter(win); 74 75 cpystat = new G4UIcmdWithAnInteger("/generat 76 cpystat->SetGuidance("call PYSTAT"); 77 cpystat->SetParameterName("mstat", false, fa 78 cpystat->SetRange("mstat>=1 && mstat<=5"); 79 80 cpygive = new G4UIcommand("/generator/pythia 81 cpygive->SetGuidance("call PYGIVE"); 82 G4UIparameter* parameter = new G4UIparameter 83 cpygive->SetParameter(parameter); 84 85 setUserParameters = new G4UIcmdWithoutParame 86 setUserParameters->SetGuidance("Set user par 87 88 setSeed = new G4UIcmdWithAnInteger("/generat 89 setSeed->SetGuidance("set initial seed."); 90 91 cpyrget = new G4UIcommand("/generator/pythia 92 cpyrget->SetGuidance("call PYRGET"); 93 G4UIparameter *lun, *move; 94 lun = new G4UIparameter("logical file number 95 cpyrget->SetParameter(lun); 96 move = new G4UIparameter("choice of adding a 97 move->SetDefaultValue(-1); 98 cpyrget->SetParameter(move); 99 100 cpyrset = new G4UIcommand("/generator/pythia 101 cpyrset->SetGuidance("call PYRSET"); 102 lun = new G4UIparameter("logical file number 103 cpyrset->SetParameter(lun); 104 move = new G4UIparameter("choice of adding a 105 move->SetDefaultValue(0); 106 cpyrset->SetParameter(move); 107 108 printRandomStatus = new G4UIcmdWithAString(" 109 printRandomStatus->SetGuidance("print random 110 printRandomStatus->SetParameterName("filenam 111 printRandomStatus->SetDefaultValue("std::cou 112 } 113 114 //....oooOO0OOooo........oooOO0OOooo........oo 115 HepMCG4PythiaMessenger::~HepMCG4PythiaMessenge 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........oo 133 void HepMCG4PythiaMessenger::SetNewValue(G4UIc 134 { 135 if (command == verbose) { // /verbose ... 136 G4int level = verbose->GetNewIntValue(newV 137 gen->SetVerboseLevel(level); 138 } 139 else if (command == mpylist) { // /mpylist 140 G4int mlist = mpylist->GetNewIntValue(newV 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, dw 153 } 154 else if (command == cpystat) { // /pystat . 155 G4int imod = cpystat->GetNewIntValue(newVa 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) { // 163 gen->SetUserParameters(); 164 } 165 else if (command == setSeed) { // /setSeed 166 G4int iseed = setSeed->GetNewIntValue(newV 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) { // 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() 193 ofs.setf(std::ios::fixed | std::ios::sho 194 gen->PrintRandomStatus(ofs); 195 ofs.close(); 196 } 197 } 198 } 199 200 //....oooOO0OOooo........oooOO0OOooo........oo 201 G4String HepMCG4PythiaMessenger::GetCurrentVal 202 { 203 G4String cv; 204 if (command == verbose) { 205 cv = verbose->ConvertToString(gen->GetVerb 206 } 207 else if (command == mpylist) { 208 cv = verbose->ConvertToString(gen->GetPyli 209 } 210 return cv; 211 } 212 213 #endif 214