67 : lowestKinEnergy(keV), verbose(1), name(modname), namePIXE(pname),
68 nameElectronPIXE(
""), isActive(false), flagAuger(false), flagPIXE(false)
88 if(0 == numOfCouples) { numOfCouples = 1; }
90 activeDeexcitationMedia.resize(numOfCouples,
false);
91 activeAugerMedia.resize(numOfCouples,
false);
92 activePIXEMedia.resize(numOfCouples,
false);
93 activeZ.resize(93,
false);
96 if( !isActive ) {
return; }
99 size_t nRegions = deRegions.size();
108 G4cout <<
"### === Deexcitation model " << name
109 <<
" is activated for " << nRegions;
116 for(
size_t j=0; j<nRegions; ++j) {
123 for(
size_t i=0; i<numOfCouples; ++i) {
127 activeDeexcitationMedia[i] = deRegions[j];
128 activeAugerMedia[i] = AugerRegions[j];
129 activePIXEMedia[i] = PIXERegions[j];
135 for(
G4int k=0; k<nelm; ++k) {
137 if(Z > 5 && Z < 93) {
150 if(0 < verbose && flagPIXE) {
151 G4cout <<
"### === PIXE model for hadrons: " << namePIXE
154 G4cout <<
"### === PIXE model for e+-: " << nameElectronPIXE
172 if(ss ==
"world" || ss ==
"World" || ss ==
"WORLD") {
173 ss =
"DefaultRegionForTheWorld";
175 size_t n = deRegions.size();
177 for(
size_t i=0; i<n; ++i) {
180 if(ss == activeRegions[i]) {
181 deRegions[i] = valDeexcitation;
182 AugerRegions[i] = valAuger;
183 PIXERegions[i] = valPIXE;
189 activeRegions.push_back(ss);
190 deRegions.push_back(valDeexcitation);
191 AugerRegions.push_back(valAuger);
192 PIXERegions.push_back(valPIXE);
204 if(!flagPIXE && !activePIXEMedia[coupleIndex]) {
return; }
205 if(eLossMax <= 0.0 || truelength <= 0.0) {
return; }
235 for(
G4int i=0; i<nelm; ++i) {
237 if(activeZ[Z] && Z < 93) {
238 G4int nshells = std::min(9,(*theElementVector)[i]->GetNbOfAtomicShells());
239 G4double rho = truelength*theAtomNumDensityVector[i];
241 for(
G4int ii=0; ii<nshells; ++ii) {
246 if(gCut > bindingEnergy) {
break; }
248 if(eLossMax > bindingEnergy) {
260 if( stot > 1.0 || eLossMax < bindingEnergy) {
break; }
264 G4int nsec = vdyn.size();
268 for(
G4int j=0; j<nsec; ++j) {
282 }
while (stot < 1.0);
std::vector< G4Element * > G4ElementVector
G4DLLIMPORT std::ostream G4cout
G4double BindingEnergy() const
G4double GetKineticEnergy() const
const G4Material * GetMaterial() const
G4ProductionCuts * GetProductionCuts() const
const G4ElementVector * GetElementVector() const
size_t GetNumberOfElements() const
const G4double * GetVecNbOfAtomsPerVolume() const
const G4MaterialCutsCouple * GetMaterialCutsCouple(G4int i) const
size_t GetTableSize() const
const std::vector< G4double > * GetEnergyCutsVector(size_t pcIdx) const
static G4ProductionCutsTable * GetProductionCutsTable()
static G4RegionStore * GetInstance()
G4Region * GetRegion(const G4String &name, G4bool verbose=true) const
G4ProductionCuts * GetProductionCuts() const
G4double GetGlobalTime() const
G4Material * GetMaterial() const
const G4ThreeVector & GetPosition() const
G4double GetKineticEnergy() const
G4Track * GetTrack() const
G4StepPoint * GetPreStepPoint() const
G4double GetStepLength() const
G4StepPoint * GetPostStepPoint() const
G4ParticleDefinition * GetDefinition() const
virtual G4double GetShellIonisationCrossSectionPerAtom(const G4ParticleDefinition *, G4int Z, G4AtomicShellEnumerator shell, G4double kinE, const G4Material *mat=0)=0
virtual const G4AtomicShell * GetAtomicShell(G4int Z, G4AtomicShellEnumerator shell)=0
G4bool CheckAugerActiveRegion(G4int coupleIndex)
void GenerateParticles(std::vector< G4DynamicParticle * > *secVect, const G4AtomicShell *, G4int Z, G4int coupleIndex)
void InitialiseAtomicDeexcitation()
virtual ~G4VAtomDeexcitation()
void AlongStepDeexcitation(std::vector< G4Track * > &tracks, const G4Step &step, G4double &eLoss, G4int coupleIndex)
G4VAtomDeexcitation(const G4String &modname="Deexcitation", const G4String &pixename="")
void SetDeexcitationActiveRegion(const G4String &rname, G4bool valDeexcitation, G4bool valAuger, G4bool valPIXE)
G4bool IsPIXEActive() const
virtual void InitialiseForNewRun()=0