185   const G4double* theAtomNumDensityVector = 
 
  188   for (
size_t i=0; i<nelm; ++i) {
 
  189     const G4Element* elm = (*theElementVector)[i];
 
  190     cross += theAtomNumDensityVector[i]*
 
  231   const G4double* theAtomNumDensityVector = 
 
  234   for (
size_t i=0; i<nelm; ++i) {
 
  235     const G4Element* elm = (*theElementVector)[i];
 
  236     cross += theAtomNumDensityVector[i]*
 
  277   const G4double* theAtomNumDensityVector = 
 
  280   for (
size_t i=0; i<nelm; ++i) {
 
  281     const G4Element* elm = (*theElementVector)[i];
 
  282     cross += theAtomNumDensityVector[i]*
 
  323   const G4double* theAtomNumDensityVector = 
 
  326   for (
size_t i=0; i<nelm; i++) {
 
  327     const G4Element* elm = (*theElementVector)[i];
 
  328     cross += theAtomNumDensityVector[i]*
 
  369   const G4double* theAtomNumDensityVector = 
 
  372   for (
size_t i=0; i<nelm; ++i) {
 
  373     const G4Element* elm = (*theElementVector)[i];
 
  374     cross += theAtomNumDensityVector[i]*
 
  411     if(
process[i] == proc) { 
return; }
 
  414     G4cout << 
"G4HadronicProcessStore::Register hadronic " << n_proc
 
  432     G4cout << 
"G4HadronicProcessStore::RegisterParticle "  
  444     std::multimap<PD,HP,std::less<PD> >::iterator it;
 
  445     for(it=
p_map.lower_bound(part); it!=
p_map.upper_bound(part); ++it) {
 
  446       if(it->first == part) {
 
  447         HP process2 = (it->second);
 
  448         if(proc == process2) { 
return; }
 
  453   p_map.insert(std::multimap<PD,HP>::value_type(part,proc));
 
  466   m_map.insert(std::multimap<HP,HI>::value_type(proc,mod));
 
  470     model.push_back(mod);
 
  498       if(
process[i] == hproc) { 
return; }
 
  502     G4cout << 
"Extra Process: " << n_extra 
 
  528     std::multimap<PD,G4VProcess*,std::less<PD> >::iterator it;
 
  529     for(it=
ep_map.lower_bound(part); it!=
ep_map.upper_bound(part); ++it) {
 
  530       if(it->first == part) {
 
  532         if(proc == process2) { 
return; }
 
  537   ep_map.insert(std::multimap<PD,G4VProcess*>::value_type(part,proc));
 
  548         G4cout << 
"Extra Process: " << i << 
"  "  
  565     if (getenv(
"G4PhysListDocDir") ) 
DumpHtml();
 
  577   char* dirName = getenv(
"G4PhysListDocDir");
 
  578   char* physListName = getenv(
"G4PhysListName");
 
  579   if (dirName && physListName) {
 
  583     std::ofstream outFile;
 
  584     outFile.open(pathName);
 
  587     outFile << 
"<html>\n";
 
  588     outFile << 
"<head>\n";
 
  589     outFile << 
"<title>Physics List Summary</title>\n";
 
  590     outFile << 
"</head>\n";
 
  591     outFile << 
"<body>\n";
 
  592     outFile << 
"<h2> Summary of Hadronic Processes, Models and Cross Sections for Physics List " 
  593             << 
G4String(physListName) << 
"</h2>\n";
 
  609     outFile << 
"</ul>\n";
 
  610     outFile << 
"</body>\n";
 
  611     outFile << 
"</html>\n";
 
  619                                        std::ofstream& outFile)
 
  625   outFile << 
"<br> <li><h2><font color=\" ff0000 \">"  
  628   typedef std::multimap<PD,HP,std::less<PD> > PDHPmap;
 
  629   typedef std::multimap<HP,HI,std::less<HP> > HPHImap;
 
  631   std::pair<PDHPmap::iterator, PDHPmap::iterator> itpart =
 
  632                         p_map.equal_range(theParticle);
 
  637   for (PDHPmap::iterator it = itpart.first; it != itpart.second; ++it) {
 
  638     theProcess = (*it).second;
 
  643     outFile << 
"<br>    <b><font color=\" 0000ff \">process : " 
  648    outFile << 
"  <li><b><font color=\" 00AA00 \">models : </font></b>\n";
 
  650     std::pair<HPHImap::iterator, HPHImap::iterator> itmod =
 
  651                         m_map.equal_range(theProcess);
 
  653     outFile << 
"    <ul>\n";
 
  654          G4String physListName(getenv(
"G4PhysListName"));
 
  656     for (HPHImap::iterator jt = itmod.first; jt != itmod.second; ++jt) {
 
  657       outFile << 
"    <li><b><a href=\"" << physListName << 
"_"  
  659               << (*jt).second->GetModelName() << 
"</a>"  
  660               << 
" from " << (*jt).second->GetMinEnergy()/
GeV 
  661               << 
" GeV to " << (*jt).second->GetMaxEnergy()/
GeV 
  662               << 
" GeV </b></li>\n";
 
  668     outFile << 
"    </ul>\n";
 
  669     outFile << 
"  </li>\n";
 
  672     outFile << 
"  <li><b><font color=\" 00AA00 \">cross sections : </font></b>\n";
 
  673     outFile << 
"    <ul>\n";
 
  676     outFile << 
"    </ul>\n";
 
  678     outFile << 
"  </li>\n";
 
  679     outFile << 
"</ul>\n";
 
  688         G4String dirName(getenv(
"G4PhysListDocDir"));
 
  689         G4String physListName(getenv(
"G4PhysListName"));
 
  691         std::ofstream outModel;
 
  692         outModel.open(pathName);
 
  693         outModel << 
"<html>\n";
 
  694         outModel << 
"<head>\n";
 
  695         outModel << 
"<title>Description of " << mod->
GetModelName() 
 
  697         outModel << 
"</head>\n";
 
  698         outModel << 
"<body>\n";
 
  702         outModel << 
"</body>\n";
 
  703         outModel << 
"</html>\n";
 
  714         std::transform(str.begin(), str.end(), str.begin(), [](
char ch) {
 
  715      return ch == 
' ' ? 
'_' : ch;
 
  719            for(std::string::iterator it = str.begin(); it != str.end(); ++it) {
 
  720         if(*it == 
' ') *it = 
'_';
 
  731  if (level == 0) 
return;
 
  734    << 
"\n====================================================================\n" 
  735    << std::setw(60) << 
"HADRONIC PROCESSES SUMMARY (verbose level " << level
 
  743     if (level == 1 && (pname == 
"proton" || 
 
  744                        pname == 
"neutron" ||
 
  745                        pname == 
"deuteron" ||
 
  759                        pname == 
"GenericIon" ||
 
  760                        pname == 
"anti_neutron" ||
 
  761                        pname == 
"anti_proton" ||
 
  762                        pname == 
"anti_deuteron" ||
 
  763                        pname == 
"anti_triton" ||
 
  764                        pname == 
"anti_He3" ||
 
  765                        pname == 
"anti_alpha")) yes = 
true;
 
  766     if (level > 1) yes = 
true;                     
 
  769       std::multimap<PD,HP,std::less<PD> >::iterator it;
 
  771       for (it=
p_map.lower_bound(part); it!=
p_map.upper_bound(part); ++it) {
 
  772         if (it->first == part) {
 
  773           HP proc = (it->second);
 
  782       std::multimap<PD,G4VProcess*,std::less<PD> >::iterator itp;
 
  783       for(itp=
ep_map.lower_bound(part); itp!=
ep_map.upper_bound(part); ++itp) {
 
  784         if(itp->first == part) {
 
  787             G4cout << 
"\n---------------------------------------------------\n" 
  788            << std::setw(50) << 
"Hadronic Processes for "  
  798   G4cout << 
"\n================================================================" 
  809     G4cout << 
"\n---------------------------------------------------\n"   
  810            << std::setw(50) << 
"Hadronic Processes for "  
  818   G4String stringEnergyPerNucleon = 
"";
 
  822     stringEnergyPerNucleon = 
"/n";
 
  826   std::multimap<HP,HI,std::less<HP> >::iterator ih;
 
  827   for(ih=
m_map.lower_bound(proc); ih!=
m_map.upper_bound(proc); ++ih) {
 
  828     if(ih->first == proc) {
 
  832         if(
model[i] == hi) { 
break; }
 
  856     if(
model[i]) { 
model[i]->SetVerboseLevel(val); }
 
  896     std::multimap<PD,HP,std::less<PD> >::iterator it;
 
  900          subType == (it->second)->GetProcessSubType()) {
 
  914   G4cout << 
" Setting energy/momentum report level to " << level 
 
  915          << 
" for " << 
process.size() << 
" hadronic processes " << 
G4endl;
 
  917     process[i]->SetEpReportLevel(level);
 
  925   G4cout << 
" Setting absolute energy/momentum test level to " << abslevel 
 
  940   G4cout << 
" Setting relative energy/momentum test level to " << rellevel 
 
G4double GetMinEnergy() const 
 
void DeRegisterExtraProcess(G4VProcess *)
 
void PrintModelHtml(const G4HadronicInteraction *model) const 
 
std::vector< G4String > modelName
 
void SetVerbose(G4int val)
 
G4ParticleDefinition * FindParticle(G4int PDGEncoding)
 
void SetProcessAbsLevel(G4double absoluteLevel)
 
G4double GetCaptureCrossSectionPerIsotope(const G4ParticleDefinition *aParticle, G4double kineticEnergy, G4int Z, G4int A)
 
void RegisterInteraction(G4HadronicProcess *, G4HadronicInteraction *)
 
std::vector< G4Element * > G4ElementVector
 
std::vector< G4HadronicProcess * > process
 
G4double GetMaxEnergy() const 
 
void PrintHtml(const G4ParticleDefinition *, std::ofstream &)
 
static G4HadronicProcessStore * Instance()
 
G4double GetElasticCrossSectionPerAtom(const G4ParticleDefinition *aParticle, G4double kineticEnergy, const G4Element *anElement, const G4Material *mat=0)
 
std::vector< PD > particle
 
~G4HadronicProcessStore()
 
std::vector< G4int > wasPrinted
 
static G4GenericIon * Definition()
 
std::multimap< PD, G4VProcess * > ep_map
 
virtual void ModelDescription(std::ostream &outFile) const 
 
G4DynamicParticle localDP
 
std::vector< G4HadronicInteraction * > model
 
G4double GetFissionCrossSectionPerIsotope(const G4ParticleDefinition *aParticle, G4double kineticEnergy, G4int Z, G4int A)
 
#define G4BestUnit(a, b)
#define G4_USE_G4BESTUNIT_FOR_VERBOSE 1 
 
const G4String & GetModelName() const 
 
G4double GetFissionCrossSectionPerAtom(const G4ParticleDefinition *aParticle, G4double kineticEnergy, const G4Element *anElement, const G4Material *mat=0)
 
const G4ElementVector * GetElementVector() const 
 
const G4String & GetParticleName() const 
 
static G4KaonMinus * KaonMinus()
 
const G4double * GetVecNbOfAtomsPerVolume() const 
 
std::multimap< HP, HI > m_map
 
void RegisterParticleForExtraProcess(G4VProcess *, const G4ParticleDefinition *)
 
G4GLOB_DLL std::ostream G4cout
 
std::vector< G4VProcess * > extraProcess
 
G4HadronicProcess * FindProcess(const G4ParticleDefinition *, G4HadronicProcessType subType)
 
void Register(G4HadronicProcess *)
 
G4double GetChargeExchangeCrossSectionPerIsotope(const G4ParticleDefinition *aParticle, G4double kineticEnergy, G4int Z, G4int A)
 
G4double GetInelasticCrossSectionPerAtom(const G4ParticleDefinition *aParticle, G4double kineticEnergy, const G4Element *anElement, const G4Material *mat=0)
 
G4CrossSectionDataStore * GetCrossSectionDataStore()
 
G4double GetInelasticCrossSectionPerIsotope(const G4ParticleDefinition *aParticle, G4double kineticEnergy, G4int Z, G4int A)
 
static G4Proton * Proton()
 
static G4PionPlus * PionPlus()
 
const G4String & GetParticleType() const 
 
G4double GetChargeExchangeCrossSectionPerAtom(const G4ParticleDefinition *aParticle, G4double kineticEnergy, const G4Element *anElement, const G4Material *mat=0)
 
std::multimap< PD, HP > p_map
 
static G4Neutron * Neutron()
 
virtual void ProcessDescription(std::ostream &outFile) const 
 
void RegisterParticle(G4HadronicProcess *, const G4ParticleDefinition *)
 
void Print(G4int idxProcess, G4int idxParticle)
 
const G4String & GetProcessName() const 
 
void DeRegister(G4HadronicProcess *)
 
void SetKineticEnergy(G4double aEnergy)
 
G4String HtmlFileName(const G4String &) const 
 
void RegisterExtraProcess(G4VProcess *)
 
G4HadronicEPTestMessenger * theEPTestMessenger
 
void SetEnergyMomentumCheckLevels(G4double relativeLevel, G4double absoluteLevel)
 
static G4Positron * Positron()
 
void DumpPhysicsTable(const G4ParticleDefinition &)
 
G4double GetElementCrossSection(const G4DynamicParticle *part, const G4Element *elm, const G4Material *mat=0)
 
G4double GetChargeExchangeCrossSectionPerVolume(const G4ParticleDefinition *aParticle, G4double kineticEnergy, const G4Material *material)
 
G4double GetFissionCrossSectionPerVolume(const G4ParticleDefinition *aParticle, G4double kineticEnergy, const G4Material *material)
 
void DumpHtml(const G4ParticleDefinition &, std::ofstream &) const 
 
static G4ParticleTable * GetParticleTable()
 
G4double GetElasticCrossSectionPerIsotope(const G4ParticleDefinition *aParticle, G4double kineticEnergy, G4int Z, G4int A)
 
G4double energy(const ThreeVector &p, const G4double m)
 
G4double GetCrossSectionPerVolume(const G4ParticleDefinition *particle, G4double kineticEnergy, const G4VProcess *process, const G4Material *material)
 
static G4PionMinus * PionMinus()
 
void SetProcessRelLevel(G4double relativeLevel)
 
static G4Electron * Electron()
 
void SetEpReportLevel(G4int level)
 
G4double GetCaptureCrossSectionPerVolume(const G4ParticleDefinition *aParticle, G4double kineticEnergy, const G4Material *material)
 
size_t GetNumberOfElements() const 
 
static G4Lambda * Lambda()
 
G4double GetElasticCrossSectionPerVolume(const G4ParticleDefinition *aParticle, G4double kineticEnergy, const G4Material *material)
 
void SetDefinition(const G4ParticleDefinition *aParticleDefinition)
 
static G4ThreadLocal G4HadronicProcessStore * instance
 
static G4KaonPlus * KaonPlus()
 
G4double GetInelasticCrossSectionPerVolume(const G4ParticleDefinition *aParticle, G4double kineticEnergy, const G4Material *material)
 
G4int GetProcessSubType() const 
 
std::pair< G4double, G4double > GetEnergyMomentumCheckLevels() const 
 
G4double GetCrossSectionPerAtom(const G4ParticleDefinition *particle, G4double kineticEnergy, const G4VProcess *process, const G4Element *element, const G4Material *material=0)
 
G4double GetCaptureCrossSectionPerAtom(const G4ParticleDefinition *aParticle, G4double kineticEnergy, const G4Element *anElement, const G4Material *mat=0)
 
G4int GetBaryonNumber() const 
 
void PrintInfo(const G4ParticleDefinition *)