80 {
true,
false,
true,
true,
true,
false,
true,
true,
true,
81 true,
true,
true,
true,
true,
true};
83 {
"0",
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
84 "9",
"10",
"11",
"12",
"13",
"14"};
118 if(
nullptr == ptr) {
return; }
160 G4cout <<
"G4GammaGeneralProcess::PreparePhysicsTable() for "
170 ed <<
"### G4GeneralGammaProcess is initialized incorrectly"
225 for(
size_t i=0; i<
nTables; ++i) {
226 if(!
theT[i]) {
continue; }
230 for(
size_t j=0; j<numOfCouples; ++j) {
232 if (bld->GetFlag(j) &&
nullptr == vec) {
255 G4cout <<
"### G4VEmProcess::BuildPhysicsTable() for "
298 G4double sigComp(0.), sigPE(0.), sigConv(0.), sigR(0.),
299 sigN(0.), sigM(0.), val(0.);
301 for(
size_t i=0; i<numOfCouples; ++i) {
311 size_t nn = (*(tables[0]))[idx]->GetVectorLength();
313 G4cout <<
"======= Zone 0 ======= N= " <<
nn
316 for(
size_t j=0; j<
nn; ++j) {
317 G4double e = (*(tables[0]))[idx]->Energy(j);
324 G4cout << j <<
". E= " << e <<
" xs= " << sum
325 <<
" compt= " << sigComp <<
" Rayl= " << sigR <<
G4endl;
327 (*(tables[0]))[idx]->PutValue(j, sum);
330 (*(tables[1]))[idx]->PutValue(j, val);
335 nn = (*(tables[2]))[idx]->GetVectorLength();
339 for(
size_t j=0; j<
nn; ++j) {
340 G4double e = (*(tables[2]))[idx]->Energy(j);
346 G4double sum = sigComp + sigR + sigPE;
348 G4cout << j <<
". E= " << e <<
" xs= " << sum
349 <<
" compt= " << sigComp <<
" conv= " << sigConv
350 <<
" PE= " << sigPE <<
" Rayl= " << sigR
351 <<
" GN= " << sigN <<
G4endl;
353 (*(tables[2]))[idx]->PutValue(j, sum);
356 (*(tables[3]))[idx]->PutValue(j, val);
358 val = (sigR > 0.0) ? (sigComp + sigPE)/sum : 1.0;
359 (*(tables[4]))[idx]->PutValue(j, val);
363 nn = (*(tables[6]))[idx]->GetVectorLength();
367 for(
size_t j=0; j<
nn; ++j) {
368 G4double e = (*(tables[6]))[idx]->Energy(j);
378 G4double sum = sigComp + sigConv + sigPE + sigN;
380 G4cout << j <<
". E= " << e <<
" xs= " << sum
381 <<
" compt= " << sigComp <<
" conv= " << sigConv
383 <<
" GN= " << sigN <<
G4endl;
385 (*(tables[6]))[idx]->PutValue(j, sum);
388 (*(tables[7]))[idx]->PutValue(j, val);
390 val = (sigConv + sigComp)/sum;
391 (*(tables[8]))[idx]->PutValue(j, val);
393 val = (sigN > 0.0) ? (sigConv + sigComp + sigPE)/sum : 1.0;
394 (*(tables[9]))[idx]->PutValue(j, val);
398 nn = (*(tables[10]))[idx]->GetVectorLength();
400 G4cout <<
"======= Zone 3 ======= N= " <<
nn
403 for(
size_t j=0; j<
nn; ++j) {
404 G4double e = (*(tables[10]))[idx]->Energy(j);
417 sigM = (val <
DBL_MAX) ? 1./val : 0.0;
419 G4double sum = sigComp + sigConv + sigPE + sigN + sigM;
421 G4cout << j <<
". E= " << e <<
" xs= " << sum
422 <<
" compt= " << sigComp <<
" conv= " << sigConv
424 <<
" GN= " << sigN <<
G4endl;
426 (*(tables[10]))[idx]->PutValue(j, sum);
428 val = (sigComp + sigPE + sigN + sigM)/sum;
429 (*(tables[11]))[idx]->PutValue(j, val);
431 val = (sigPE + sigN + sigM)/sum;
432 (*(tables[12]))[idx]->PutValue(j, val);
434 val = (sigN + sigM)/sum;
435 (*(tables[13]))[idx]->PutValue(j, val);
438 (*(tables[14]))[idx]->PutValue(j, val);
440 for(
size_t k=0; k<
nTables; ++k) {
442 (*(tables[k]))[idx]->FillSecondDerivatives();
451 G4cout <<
"### G4VEmProcess::BuildPhysicsTable() done for "
673 for(
size_t i=0; i<
nTables; ++i) {
675 G4String nam = (0==i || 2==i || 6==i || 10==i)
676 ?
"LambdaGeneral" +
nameT[i] :
"ProbGeneral" +
nameT[i];
692 G4cout <<
"G4GammaGeneralProcess::RetrievePhysicsTable() for "
707 for(
size_t i=0; i<
nTables; ++i) {
709 G4String nam = (0==i || 2==i || 6==i || 10==i)
710 ?
"LambdaGeneral" +
nameT[i] :
"ProbGeneral" +
nameT[i];
G4double condition(const G4ErrorSymMatrix &m)
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
std::ostringstream G4ExceptionDescription
G4double G4Log(G4double x)
static constexpr double keV
static constexpr double MeV
CLHEP::Hep3Vector G4ThreeVector
G4GLOB_DLL std::ostream G4cout
G4double ComputeCrossSection(const G4DynamicParticle *, const G4Material *)
G4double GetLogKineticEnergy() const
void SetKineticEnergy(G4double aEnergy)
void SetMasterProcess(const G4VEmProcess *)
G4PhysicsTable * MakeTable(size_t idx)
G4bool RetrievePhysicsTable(size_t idx, const G4ParticleDefinition *part, const G4String &fname, G4bool ascii, G4bool spline)
const G4VEmProcess * GetMasterProcess(size_t idx) const
const std::vector< G4PhysicsTable * > & GetTables() const
G4bool StorePhysicsTable(size_t idx, const G4ParticleDefinition *part, const G4String &fname, G4bool ascii)
static G4EmParameters * Instance()
G4double MinKinEnergy() const
G4int NumberOfBinsPerDecade() const
G4int WorkerVerbose() const
G4double MaxKinEnergy() const
G4double ComputeMeanFreePath(G4double GammaEnergy, const G4Material *aMaterial)
void BuildPhysicsTable(const G4ParticleDefinition &) override
void AddHadProcess(G4HadronicProcess *)
static G4String nameT[nTables]
void SelectedProcess(const G4Step &step, G4VProcess *ptr)
G4VParticleChange * PostStepDoIt(const G4Track &, const G4Step &) override
void SelectHadProcess(const G4Track &, const G4Step &, G4HadronicProcess *)
G4bool StorePhysicsTable(const G4ParticleDefinition *, const G4String &directory, G4bool ascii=false) override
G4double GetProbability(size_t idxt)
G4bool IsApplicable(const G4ParticleDefinition &) override
G4VProcess * selectedProc
void AddEmProcess(G4VEmProcess *)
G4int GetSubProcessSubType() const
void StartTracking(G4Track *) override
void BuildPhysicsTable(const G4ParticleDefinition &) override
G4VEmProcess * theCompton
void AddMMProcess(G4GammaConversionToMuons *)
G4double ComputeGeneralLambda(size_t idxe, size_t idxt)
G4VEmProcess * thePhotoElectric
G4VEmProcess * theRayleigh
G4double TotalCrossSectionPerVolume()
void ProcessDescription(std::ostream &outFile) const override
const G4String & GetSubProcessName() const
G4GammaGeneralProcess(const G4String &pname="GammaGeneralProc")
G4VEmProcess * GetEmProcess(const G4String &name) override
void PreparePhysicsTable(const G4ParticleDefinition &) override
~G4GammaGeneralProcess() override
G4VEmProcess * theConversionEE
void InitialiseProcess(const G4ParticleDefinition *) override
void SelectEmProcess(const G4Step &, G4VEmProcess *)
static G4EmDataHandler * theHandler
G4HadronicProcess * theGammaNuclear
static const size_t nTables
G4GammaConversionToMuons * theConversionMM
static G4bool theT[nTables]
G4double GetMeanFreePath(const G4Track &track, G4double previousStepSize, G4ForceCondition *condition) override
G4bool RetrievePhysicsTable(const G4ParticleDefinition *, const G4String &directory, G4bool ascii) override
G4double PostStepGetPhysicalInteractionLength(const G4Track &track, G4double previousStepSize, G4ForceCondition *condition) override
void ProcessDescription(std::ostream &outFile) const override
void PreparePhysicsTable(const G4ParticleDefinition &) override
void BuildPhysicsTable(const G4ParticleDefinition &) override
G4CrossSectionDataStore * GetCrossSectionDataStore()
G4bool GetBaseMaterialFlag()
G4bool GetFlag(size_t idx)
static G4LossTableManager * Instance()
G4LossTableBuilder * GetTableBuilder()
const G4Material * GetMaterial() const
void InitializeForPostStep(const G4Track &)
const G4String & GetParticleName() const
static void SetPhysicsVector(G4PhysicsTable *physTable, std::size_t idx, G4PhysicsVector *vec)
const G4MaterialCutsCouple * GetMaterialCutsCouple(G4int i) const
std::size_t GetTableSize() const
static G4ProductionCutsTable * GetProductionCutsTable()
const G4DynamicParticle * GetDynamicParticle() const
G4double GetKineticEnergy() const
const G4MaterialCutsCouple * GetMaterialCutsCouple() const
G4double MeanFreePath(const G4Track &track)
void BuildPhysicsTable(const G4ParticleDefinition &) override
G4int DensityIndex(G4int idx) const
void SetEmMasterProcess(const G4VEmProcess *)
G4bool RetrievePhysicsTable(const G4ParticleDefinition *, const G4String &directory, G4bool ascii) override
G4bool UseBaseMaterial() const
void ProcessDescription(std::ostream &outFile) const override
G4double DensityFactor(G4int idx) const
const G4MaterialCutsCouple * currentCouple
G4bool StorePhysicsTable(const G4ParticleDefinition *, const G4String &directory, G4bool ascii=false) override
G4double preStepKinEnergy
size_t currentCoupleIndex
G4double GetLambda(G4double kinEnergy, const G4MaterialCutsCouple *couple)
G4ParticleChangeForGamma fParticleChange
void SetParticle(const G4ParticleDefinition *p)
void PreparePhysicsTable(const G4ParticleDefinition &) override
const G4Material * currentMaterial
G4double currentInteractionLength
G4double theInitialNumberOfInteractionLength
void SetVerboseLevel(G4int value)
virtual void ProcessDescription(std::ostream &outfile) const
virtual G4VParticleChange * PostStepDoIt(const G4Track &track, const G4Step &stepData)=0
G4double theNumberOfInteractionLengthLeft
void SetProcessSubType(G4int)
virtual void PreparePhysicsTable(const G4ParticleDefinition &)
G4int GetProcessSubType() const
const G4String & GetPhysicsTableFileName(const G4ParticleDefinition *, const G4String &directory, const G4String &tableName, G4bool ascii=false)
const G4String & GetProcessName() const
G4double energy(const ThreeVector &p, const G4double m)
T max(const T t1, const T t2)
brief Return the largest of the two arguments
const char * name(G4int ptype)