Geant4 Cross Reference |
1 // 1 // 2 // ******************************************* 2 // ******************************************************************** 3 // * License and Disclaimer 3 // * License and Disclaimer * 4 // * 4 // * * 5 // * The Geant4 software is copyright of th 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/ 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. 9 // * include a list of copyright holders. * 10 // * 10 // * * 11 // * Neither the authors of this software syst 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing fin 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warran 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assum 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitatio 16 // * for the full disclaimer and the limitation of liability. * 17 // * 17 // * * 18 // * This code implementation is the result 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboratio 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distri 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you ag 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publicati 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Sof 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************* 24 // ******************************************************************** 25 // 25 // 26 /// \file eventgenerator/HepMC/HepMCEx01/src/H << 26 // ==================================================================== 27 /// \brief Implementation of the HepMCG4Pythia << 28 // 27 // >> 28 // HepMCG4PythiaMessenger.cc >> 29 // $Id: HepMCG4PythiaMessenger.cc,v 1.6 2006-07-05 11:06:36 gcosmo Exp $ 29 // 30 // >> 31 // ==================================================================== 30 32 31 #ifdef G4LIB_USE_PYTHIA 33 #ifdef G4LIB_USE_PYTHIA 32 34 33 # include "HepMCG4PythiaMessenger.hh" << 35 #include "HepMCG4PythiaMessenger.hh" >> 36 #include "HepMCG4PythiaInterface.hh" 34 37 35 # include "HepMCG4PythiaInterface.hh" << 38 #include <sstream> >> 39 #include <fstream> 36 40 37 # include "G4UIcmdWithAString.hh" << 41 #include "G4UIdirectory.hh" 38 # include "G4UIcmdWithAnInteger.hh" << 42 #include "G4UIcmdWithoutParameter.hh" 39 # include "G4UIcmdWithoutParameter.hh" << 43 #include "G4UIcmdWithAString.hh" 40 # include "G4UIdirectory.hh" << 44 #include "G4UIcmdWithAnInteger.hh" 41 << 45 42 # include <fstream> << 46 //////////////////////////////////////////////////////////////////////////// 43 # include <sstream> << 47 HepMCG4PythiaMessenger::HepMCG4PythiaMessenger(HepMCG4PythiaInterface* agen) 44 << 48 : gen(agen) 45 //....oooOO0OOooo........oooOO0OOooo........oo << 49 //////////////////////////////////////////////////////////////////////////// 46 HepMCG4PythiaMessenger::HepMCG4PythiaMessenger << 47 { 50 { 48 dir = new G4UIdirectory("/generator/pythia/" << 51 dir= new G4UIdirectory("/generator/pythia/"); 49 dir->SetGuidance("Commands for Pythia event << 52 dir-> SetGuidance("Commands for Pythia event generation"); 50 53 51 verbose = new G4UIcmdWithAnInteger("/generat << 54 verbose= new G4UIcmdWithAnInteger("/generator/pythia/verbose",this); 52 verbose->SetGuidance("set verbose level"); << 55 verbose-> SetGuidance("set verbose level"); 53 verbose->SetParameterName("verboseLevel", fa << 56 verbose-> SetParameterName("verboseLevel", false, false); 54 verbose->SetRange("verboseLevel>=0 && verbos << 57 verbose-> SetRange("verboseLevel>=0 && verboseLevel<=2"); 55 << 58 56 mpylist = new G4UIcmdWithAnInteger("/generat << 59 mpylist= new G4UIcmdWithAnInteger("/generator/pythia/pylist",this); 57 mpylist->SetGuidance("set argument of pylist << 60 mpylist-> SetGuidance("set argument of pylist (not called if mlist=0)"); 58 mpylist->SetParameterName("mlist", false, fa << 61 mpylist-> SetParameterName("mlist", false, false); 59 mpylist->SetRange("mlist>=0 && mlist<=3"); << 62 mpylist-> SetRange("mlist>=0 && mlist<=3"); 60 << 63 61 print = new G4UIcmdWithoutParameter("/genera << 64 print= new G4UIcmdWithoutParameter("/generator/pythia/print", this); 62 print->SetGuidance("print user information." << 65 print-> SetGuidance("print user information."); 63 << 66 64 cpyinit = new G4UIcommand("/generator/pythia << 67 cpyinit= new G4UIcommand("/generator/pythia/pyinit", this); 65 cpyinit->SetGuidance("call PYINIT"); << 68 cpyinit-> SetGuidance("call PYINIT"); 66 G4UIparameter* frame = new G4UIparameter("fr << 69 G4UIparameter* frame= 67 cpyinit->SetParameter(frame); << 70 new G4UIparameter("frame of the experiment", 's', false); 68 G4UIparameter* beam = new G4UIparameter("bea << 71 cpyinit-> SetParameter(frame); 69 cpyinit->SetParameter(beam); << 72 G4UIparameter* beam= new G4UIparameter("beam particle", 's', false); 70 G4UIparameter* target = new G4UIparameter("t << 73 cpyinit-> SetParameter(beam); 71 cpyinit->SetParameter(target); << 74 G4UIparameter* target= new G4UIparameter("target particle", 's', false); 72 G4UIparameter* win = new G4UIparameter("ener << 75 cpyinit-> SetParameter(target); 73 cpyinit->SetParameter(win); << 76 G4UIparameter* win= new G4UIparameter("energy of system (GeV)", 'd', false); 74 << 77 cpyinit-> SetParameter(win); 75 cpystat = new G4UIcmdWithAnInteger("/generat << 78 76 cpystat->SetGuidance("call PYSTAT"); << 79 cpystat= new G4UIcmdWithAnInteger("/generator/pythia/pystat", this); 77 cpystat->SetParameterName("mstat", false, fa << 80 cpystat-> SetGuidance("call PYSTAT"); 78 cpystat->SetRange("mstat>=1 && mstat<=5"); << 81 cpystat-> SetParameterName("mstat", false, false); 79 << 82 cpystat-> SetRange("mstat>=1 && mstat<=5"); 80 cpygive = new G4UIcommand("/generator/pythia << 83 81 cpygive->SetGuidance("call PYGIVE"); << 84 cpygive= new G4UIcommand("/generator/pythia/pygive",this); 82 G4UIparameter* parameter = new G4UIparameter << 85 cpygive-> SetGuidance("call PYGIVE"); 83 cpygive->SetParameter(parameter); << 86 G4UIparameter* parameter= new G4UIparameter ("Parameter", 's', false); 84 << 87 cpygive-> SetParameter(parameter); 85 setUserParameters = new G4UIcmdWithoutParame << 88 86 setUserParameters->SetGuidance("Set user par << 89 setUserParameters= 87 << 90 new G4UIcmdWithoutParameter("/generator/pythia/setUserParameters",this); 88 setSeed = new G4UIcmdWithAnInteger("/generat << 91 setUserParameters-> 89 setSeed->SetGuidance("set initial seed."); << 92 SetGuidance("Set user parameters in the Pythia common blocks"); 90 << 93 91 cpyrget = new G4UIcommand("/generator/pythia << 94 setSeed= new G4UIcmdWithAnInteger("/generator/pythia/setSeed", this); 92 cpyrget->SetGuidance("call PYRGET"); << 95 setSeed-> SetGuidance("set initial seed."); 93 G4UIparameter *lun, *move; << 96 94 lun = new G4UIparameter("logical file number << 97 cpyrget= new G4UIcommand("/generator/pythia/pyrget", this); 95 cpyrget->SetParameter(lun); << 98 cpyrget-> SetGuidance("call PYRGET"); 96 move = new G4UIparameter("choice of adding a << 99 G4UIparameter* lun, *move; 97 move->SetDefaultValue(-1); << 100 lun= new G4UIparameter("logical file number", 'i', false); 98 cpyrget->SetParameter(move); << 101 cpyrget-> SetParameter(lun); 99 << 102 move= new G4UIparameter("choice of adding a new record", 'i', true); 100 cpyrset = new G4UIcommand("/generator/pythia << 103 move-> SetDefaultValue(-1); 101 cpyrset->SetGuidance("call PYRSET"); << 104 cpyrget-> SetParameter(move); 102 lun = new G4UIparameter("logical file number << 105 103 cpyrset->SetParameter(lun); << 106 cpyrset= new G4UIcommand("/generator/pythia/pyrset", this); 104 move = new G4UIparameter("choice of adding a << 107 cpyrset-> SetGuidance("call PYRSET"); 105 move->SetDefaultValue(0); << 108 lun= new G4UIparameter("logical file number", 'i', false); 106 cpyrset->SetParameter(move); << 109 cpyrset-> SetParameter(lun); 107 << 110 move= new G4UIparameter("choice of adding a new record", 'i', true); 108 printRandomStatus = new G4UIcmdWithAString(" << 111 move-> SetDefaultValue(0); 109 printRandomStatus->SetGuidance("print random << 112 cpyrset-> SetParameter(move); 110 printRandomStatus->SetParameterName("filenam << 113 111 printRandomStatus->SetDefaultValue("std::cou << 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"); 112 } 119 } 113 120 114 //....oooOO0OOooo........oooOO0OOooo........oo << 121 ///////////////////////////////////////////////// 115 HepMCG4PythiaMessenger::~HepMCG4PythiaMessenge 122 HepMCG4PythiaMessenger::~HepMCG4PythiaMessenger() >> 123 ///////////////////////////////////////////////// 116 { 124 { 117 delete verbose; 125 delete verbose; 118 delete mpylist; 126 delete mpylist; 119 delete print; 127 delete print; 120 delete cpyinit; 128 delete cpyinit; 121 delete cpystat; << 129 delete cpystat; 122 delete cpygive; 130 delete cpygive; 123 delete setUserParameters; 131 delete setUserParameters; 124 delete setSeed; 132 delete setSeed; 125 delete cpyrget; 133 delete cpyrget; 126 delete cpyrset; 134 delete cpyrset; 127 delete printRandomStatus; 135 delete printRandomStatus; 128 136 129 delete dir; 137 delete dir; 130 } 138 } 131 139 132 //....oooOO0OOooo........oooOO0OOooo........oo << 140 ////////////////////////////////////////////////////////////// 133 void HepMCG4PythiaMessenger::SetNewValue(G4UIc << 141 void HepMCG4PythiaMessenger::SetNewValue(G4UIcommand* command, >> 142 G4String newValues) >> 143 ////////////////////////////////////////////////////////////// 134 { 144 { 135 if (command == verbose) { // /verbose ... << 145 if(command == verbose) { // /verbose ... 136 G4int level = verbose->GetNewIntValue(newV << 146 G4int level= verbose-> GetNewIntValue(newValues); 137 gen->SetVerboseLevel(level); << 147 gen-> SetVerboseLevel(level); 138 } << 148 139 else if (command == mpylist) { // /mpylist << 149 } else if (command == mpylist) { // /mpylist ... 140 G4int mlist = mpylist->GetNewIntValue(newV << 150 G4int mlist= mpylist-> GetNewIntValue(newValues); 141 gen->SetPylist(mlist); << 151 gen-> SetPylist(mlist); 142 } << 152 143 else if (command == print) { // /print ... << 153 } else if (command == print) { // /print ... 144 gen->Print(); << 154 gen-> Print(); 145 } << 155 146 else if (command == cpyinit) { // /pyinit . << 156 } else if (command == cpyinit) { // /pyinit ... 147 const char* strvaluelist = newValues.c_str << 157 const char* strvaluelist= newValues.c_str(); 148 std::istringstream is(strvaluelist); 158 std::istringstream is(strvaluelist); 149 G4String sframe, sbeam, starget; << 159 G4String sframe, sbeam, starget; G4double dwin; 150 G4double dwin; << 151 is >> sframe >> sbeam >> starget >> dwin; 160 is >> sframe >> sbeam >> starget >> dwin; 152 gen->CallPyinit(sframe, sbeam, starget, dw << 161 gen-> CallPyinit(sframe, sbeam, starget, dwin); 153 } << 162 154 else if (command == cpystat) { // /pystat . << 163 } else if (command == cpystat) { // /pystat ... 155 G4int imod = cpystat->GetNewIntValue(newVa << 164 G4int imod= cpystat-> GetNewIntValue(newValues); 156 gen->CallPystat(imod); << 165 gen-> CallPystat(imod); 157 } << 166 158 else if (command == cpygive) { // /pygive . << 167 } else if (command == cpygive) { // /pygive ... 159 G4String s = newValues; << 168 G4String s= newValues; 160 gen->CallPygive(s); << 169 gen-> CallPygive(s); 161 } << 170 162 else if (command == setUserParameters) { // << 171 } else if (command == setUserParameters) { // /setUserParameters ... 163 gen->SetUserParameters(); << 172 gen-> SetUserParameters(); 164 } << 173 165 else if (command == setSeed) { // /setSeed << 174 } else if (command == setSeed) { // /setSeed ... 166 G4int iseed = setSeed->GetNewIntValue(newV << 175 G4int iseed= setSeed-> GetNewIntValue(newValues); 167 gen->SetRandomSeed(iseed); << 176 gen-> SetRandomSeed(iseed); 168 } << 177 169 else if (command == cpyrget) { // /pyrget . << 178 } else if (command == cpyrget) { // /pyrget ... 170 const char* strvaluelist = newValues.c_str << 179 const char* strvaluelist= newValues.c_str(); 171 std::istringstream is(strvaluelist); 180 std::istringstream is(strvaluelist); 172 G4int lun, move; 181 G4int lun, move; 173 is >> lun >> move; 182 is >> lun >> move; 174 gen->CallPyrget(lun, move); << 183 gen-> CallPyrget(lun, move); 175 } << 184 176 else if (command == cpyrset) { // /pyrset . << 185 } else if (command == cpyrset) { // /pyrset ... 177 const char* strvaluelist = newValues.c_str << 186 const char* strvaluelist= newValues.c_str(); 178 std::istringstream is(strvaluelist); 187 std::istringstream is(strvaluelist); 179 G4int lun, move; 188 G4int lun, move; 180 is >> lun >> move; 189 is >> lun >> move; 181 gen->CallPyrset(lun, move); << 190 gen-> CallPyrset(lun, move); 182 } << 191 183 else if (command == printRandomStatus) { // << 192 } else if (command == printRandomStatus) { // /printRandomStatus ... 184 G4String s = newValues; << 193 G4String s= newValues; 185 if (newValues == "std::cout") { 194 if (newValues == "std::cout") { 186 gen->PrintRandomStatus(); << 195 gen-> PrintRandomStatus(); 187 } << 196 } else { 188 else { << 189 // to a file (overwrite mode) 197 // to a file (overwrite mode) 190 std::ofstream ofs; 198 std::ofstream ofs; 191 ofs.open(s.c_str(), std::ios::out); << 199 ofs.open(s.c_str(), std::ios::out); 192 // ofs.open(randomStatusFileName.c_str() << 200 //ofs.open(randomStatusFileName.c_str(), std::ios::out|std::ios::app); 193 ofs.setf(std::ios::fixed | std::ios::sho 201 ofs.setf(std::ios::fixed | std::ios::showpoint); 194 gen->PrintRandomStatus(ofs); << 202 gen-> PrintRandomStatus(ofs); 195 ofs.close(); 203 ofs.close(); 196 } 204 } 197 } 205 } 198 } 206 } 199 207 200 //....oooOO0OOooo........oooOO0OOooo........oo << 208 ////////////////////////////////////////////////////////////////////// 201 G4String HepMCG4PythiaMessenger::GetCurrentVal 209 G4String HepMCG4PythiaMessenger::GetCurrentValue(G4UIcommand* command) >> 210 ////////////////////////////////////////////////////////////////////// 202 { 211 { 203 G4String cv; 212 G4String cv; 204 if (command == verbose) { 213 if (command == verbose) { 205 cv = verbose->ConvertToString(gen->GetVerb << 214 cv= verbose-> ConvertToString(gen->GetVerboseLevel()); 206 } << 215 } else if (command == mpylist) { 207 else if (command == mpylist) { << 216 cv= verbose-> ConvertToString(gen->GetPylist()); 208 cv = verbose->ConvertToString(gen->GetPyli << 209 } 217 } 210 return cv; 218 return cv; 211 } 219 } 212 220 213 #endif 221 #endif 214 222