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