192 for (
size_t i=0; i<nelm; ++i) {
193 const G4Element* elm = (*theElementVector)[i];
194 cross += theAtomNumDensityVector[i]*
237 for (
size_t i=0; i<nelm; ++i) {
238 const G4Element* elm = (*theElementVector)[i];
239 cross += theAtomNumDensityVector[i]*
282 for (
size_t i=0; i<nelm; ++i) {
283 const G4Element* elm = (*theElementVector)[i];
284 cross += theAtomNumDensityVector[i]*
327 for (
size_t i=0; i<nelm; i++) {
328 const G4Element* elm = (*theElementVector)[i];
329 cross += theAtomNumDensityVector[i]*
372 for (
size_t i=0; i<nelm; ++i) {
373 const G4Element* elm = (*theElementVector)[i];
374 cross += theAtomNumDensityVector[i]*
412 if(
process[i] == proc) {
return; }
439 std::multimap<PD,HP,std::less<PD> >::iterator it;
440 for(it=
p_map.lower_bound(part); it!=
p_map.upper_bound(part); ++it) {
441 if(it->first == part) {
442 HP process2 = (it->second);
443 if(proc == process2) {
return; }
448 p_map.insert(std::multimap<PD,HP>::value_type(part,proc));
461 m_map.insert(std::multimap<HP,HI>::value_type(proc,mod));
465 model.push_back(mod);
518 std::multimap<PD,G4VProcess*,std::less<PD> >::iterator it;
519 for(it=
ep_map.lower_bound(part); it!=
ep_map.upper_bound(part); ++it) {
520 if(it->first == part) {
522 if(proc == process2) {
return; }
527 ep_map.insert(std::multimap<PD,G4VProcess*>::value_type(part,proc));
554 if (getenv(
"G4PhysListDocDir") )
DumpHtml();
566 char* dirName = getenv(
"G4PhysListDocDir");
567 char* physListName = getenv(
"G4PhysListName");
568 if (dirName && physListName) {
573 outFile.open(pathName);
576 outFile <<
"<html>\n";
577 outFile <<
"<head>\n";
578 outFile <<
"<title>Physics List Summary</title>\n";
579 outFile <<
"</head>\n";
580 outFile <<
"<body>\n";
581 outFile <<
"<h2> Summary of Hadronic Processes, Models and Cross Sections for Physics List "
582 <<
G4String(physListName) <<
"</h2>\n";
598 outFile <<
"</ul>\n";
599 outFile <<
"</body>\n";
600 outFile <<
"</html>\n";
614 outFile <<
"<br> <li><h2><font color=\" ff0000 \">"
617 typedef std::multimap<PD,HP,std::less<PD> > PDHPmap;
618 typedef std::multimap<HP,HI,std::less<HP> > HPHImap;
620 std::pair<PDHPmap::iterator, PDHPmap::iterator> itpart =
621 p_map.equal_range(theParticle);
626 for (PDHPmap::iterator it = itpart.first; it != itpart.second; ++it) {
627 theProcess = (*it).second;
628 outFile <<
"<br> <b><font color=\" 0000ff \">process : <a href=\""
632 outFile <<
" <li><b><font color=\" 00AA00 \">models : </font></b>\n";
635 std::pair<HPHImap::iterator, HPHImap::iterator> itmod =
636 m_map.equal_range(theProcess);
638 outFile <<
" <ul>\n";
639 for (HPHImap::iterator jt = itmod.first; jt != itmod.second; ++jt) {
640 outFile <<
" <li><b><a href=\"" << (*jt).second->GetModelName() <<
".html\"> "
641 << (*jt).second->GetModelName() <<
"</a>"
642 <<
" from " << (*jt).second->GetMinEnergy()/
GeV
643 <<
" GeV to " << (*jt).second->GetMaxEnergy()/
GeV
644 <<
" GeV </b></li>\n";
650 outFile <<
" </ul>\n";
651 outFile <<
" </li>\n";
654 outFile <<
" <li><b><font color=\" 00AA00 \">cross sections : </font></b>\n";
655 outFile <<
" <ul>\n";
658 outFile <<
" </ul>\n";
660 outFile <<
" </li>\n";
661 outFile <<
"</ul>\n";
669 G4String dirName(getenv(
"G4PhysListDocDir"));
671 std::ofstream outModel;
672 outModel.open(pathName);
673 outModel <<
"<html>\n";
674 outModel <<
"<head>\n";
675 outModel <<
"<title>Description of " << mod->
GetModelName() <<
"</title>\n";
676 outModel <<
"</head>\n";
677 outModel <<
"<body>\n";
681 outModel <<
"</body>\n";
682 outModel <<
"</html>\n";
690 if (level == 0)
return;
693 <<
"\n====================================================================\n"
694 << std::setw(60) <<
"HADRONIC PROCESSES SUMMARY (verbose level " << level
702 if (level == 1 && (pname ==
"proton" ||
703 pname ==
"neutron" ||
714 pname ==
"GenericIon" ||
715 pname ==
"anti_neutron" ||
716 pname ==
"anti_proton")) yes =
true;
717 if (level > 1) yes =
true;
720 std::multimap<PD,HP,std::less<PD> >::iterator it;
722 for (it=
p_map.lower_bound(part); it!=
p_map.upper_bound(part); ++it) {
723 if (it->first == part) {
724 HP proc = (it->second);
733 std::multimap<PD,G4VProcess*,std::less<PD> >::iterator itp;
734 for(itp=
ep_map.lower_bound(part); itp!=
ep_map.upper_bound(part); ++itp) {
735 if(itp->first == part) {
738 G4cout <<
"\n---------------------------------------------------\n"
739 << std::setw(50) <<
"Hadronic Processes for "
749 G4cout <<
"\n================================================================"
760 G4cout <<
"\n---------------------------------------------------\n"
761 << std::setw(50) <<
"Hadronic Processes for "
768 std::multimap<HP,HI,std::less<HP> >::iterator ih;
769 for(ih=
m_map.lower_bound(proc); ih!=
m_map.upper_bound(proc); ++ih) {
770 if(ih->first == proc) {
774 if(
model[i] == hi) {
break; }
798 if(
model[i]) {
model[i]->SetVerboseLevel(val); }
830 std::multimap<PD,HP,std::less<PD> >::iterator it;
831 for(it=
p_map.lower_bound(part); it!=
p_map.upper_bound(part); ++it) {
832 if(it->first == part && subType == (it->second)->GetProcessSubType()) {
847 G4cout <<
" Setting energy/momentum report level to " << level
848 <<
" for " <<
process.size() <<
" hadronic processes " <<
G4endl;
850 process[i]->SetEpReportLevel(level);
858 G4cout <<
" Setting absolute energy/momentum test level to " << abslevel <<
G4endl;
872 G4cout <<
" Setting relative energy/momentum test level to " << rellevel <<
G4endl;
G4double GetMinEnergy() const
void DeRegisterExtraProcess(G4VProcess *)
void PrintModelHtml(const G4HadronicInteraction *model) const
std::vector< G4String > modelName
void SetVerbose(G4int val)
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
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)
void DumpHtml(const G4ParticleDefinition &, std::ofstream &)
#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
static G4ThreadLocal G4HadronicProcessStore * theInstance
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 G4CrossSectionDataSetRegistry * Instance()
static G4Proton * Proton()
static G4PionPlus * PionPlus()
G4double GetChargeExchangeCrossSectionPerAtom(const G4ParticleDefinition *aParticle, G4double kineticEnergy, const G4Element *anElement, const G4Material *mat=0)
std::multimap< PD, HP > p_map
static G4Neutron * Neutron()
void RegisterParticle(G4HadronicProcess *, const G4ParticleDefinition *)
void Print(G4int idxProcess, G4int idxParticle)
const G4String & GetProcessName() const
void DeRegister(G4HadronicProcess *)
void SetKineticEnergy(G4double aEnergy)
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)
G4double GetElasticCrossSectionPerIsotope(const G4ParticleDefinition *aParticle, G4double kineticEnergy, G4int Z, G4int A)
G4double energy(const ThreeVector &p, const G4double m)
static G4HadronicInteractionRegistry * Instance()
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 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)
void PrintInfo(const G4ParticleDefinition *)