67 G4int G4VAtomDeexcitation::pixeIDg = -1;
68 G4int G4VAtomDeexcitation::pixeIDe = -1;
71 : verbose(1),
name(modname), isActive(false), flagAuger(false),
72 flagAugerCascade(false), flagPIXE(false), ignoreCuts(false),
73 isActiveLocked(false), isAugerLocked(false),
74 isAugerCascadeLocked(false), isPIXELocked(false)
78 theCoupleTable =
nullptr;
103 activeDeexcitationMedia.resize(nn,
false);
104 activeAugerMedia.resize(nn,
false);
105 activePIXEMedia.resize(nn,
false);
106 activeZ.resize(93,
false);
110 if(!isActiveLocked) { isActive = theParameters->
Fluo(); }
111 if(!isAugerLocked) { flagAuger = theParameters->
Auger(); }
112 if(!isAugerCascadeLocked) { flagAugerCascade = theParameters->
AugerCascade(); }
113 if(!isPIXELocked) { flagPIXE = theParameters->
Pixe(); }
117 size_t nRegions = deRegions.size();
119 if(!isActive && 0 == nRegions) {
return; }
124 nRegions = deRegions.size();
129 G4cout <<
"### === Deexcitation model " <<
name
130 <<
" is activated for " << nRegions;
137 for(
size_t j=0; j<nRegions; ++j) {
139 if(reg && 0 < numOfCouples) {
142 G4cout <<
" " << activeRegions[j]
143 <<
" " << deRegions[j] <<
" " << AugerRegions[j]
144 <<
" " << PIXERegions[j] <<
G4endl;
146 for(
G4int i=0; i<numOfCouples; ++i) {
150 activeDeexcitationMedia[i] = deRegions[j];
151 activeAugerMedia[i] = AugerRegions[j];
152 activePIXEMedia[i] = PIXERegions[j];
159 for(
G4int k=0; k<nelm; ++k) {
161 if(Z > 5 && Z < 93) {
170 if(0 < verbose && flagAuger) {
171 G4cout <<
"### === Auger cascade flag: " << flagAugerCascade
175 G4cout <<
"### === Ignore cuts flag: " << ignoreCuts
178 if(0 < verbose && flagPIXE) {
179 G4cout <<
"### === PIXE model for hadrons: "
182 G4cout <<
"### === PIXE model for e+-: "
197 if(rname ==
"DefaultRegionForParallelWorld") {
return; }
205 if(ss ==
"world" || ss ==
"World" || ss ==
"WORLD") {
206 ss =
"DefaultRegionForTheWorld";
208 size_t n = deRegions.size();
209 for(
size_t i=0; i<
n; ++i) {
212 if(ss == activeRegions[i]) {
213 deRegions[i] = valDeexcitation;
214 AugerRegions[i] = valAuger;
215 PIXERegions[i] = valPIXE;
220 activeRegions.push_back(ss);
221 deRegions.push_back(valDeexcitation);
222 AugerRegions.push_back(valAuger);
223 PIXERegions.push_back(valPIXE);
227 if(ss ==
"DefaultRegionForTheWorld") {
231 if(ss == (*regions)[i]->
GetName()) {
continue; }
248 if(!flagPIXE && !activePIXEMedia[coupleIndex]) {
return; }
249 if(eLossMax <= 0.0 || truelength <= 0.0) {
return; }
265 if(ignoreCuts) { gCut = 0.0; }
269 if(ignoreCuts) { eCut = 0.0; }
277 const G4double* theAtomNumDensityVector =
282 for(
G4int i=0; i<nelm; ++i) {
283 G4int Z = (*theElementVector)[i]->GetZasInt();
284 if(activeZ[Z] && Z < 93) {
286 std::min(9,(*theElementVector)[i]->GetNbOfAtomicShells());
287 G4double rho = truelength*theAtomNumDensityVector[i];
289 for(
G4int ii=0; ii<nshells; ++ii) {
294 if(gCut > bindingEnergy) {
break; }
296 if(eLossMax > bindingEnergy) {
308 if( stot > 1.0 || eLossMax < bindingEnergy) {
break; }
312 G4int nsec = vdyn.size();
316 for(
G4int j=0; j<nsec; ++j) {
339 }
while (stot < 1.0);
G4ParticleDefinition * GetDefinition() const
G4ProductionCuts * GetProductionCuts() const
G4Region * GetRegion(const G4String &name, G4bool verbose=true) const
const std::vector< G4double > * GetEnergyCutsVector(size_t pcIdx) const
void InitialiseAtomicDeexcitation()
void AlongStepDeexcitation(std::vector< G4Track * > &tracks, const G4Step &step, G4double &eLoss, G4int coupleIndex)
std::vector< G4Element * > G4ElementVector
virtual G4double GetShellIonisationCrossSectionPerAtom(const G4ParticleDefinition *, G4int Z, G4AtomicShellEnumerator shell, G4double kinE, const G4Material *mat=nullptr)=0
G4double GetKineticEnergy() const
G4double GetStepLength() const
G4bool AugerCascade() const
G4Material * GetMaterial() const
void SetDeexcitationActiveRegion(const G4String &rname, G4bool valDeexcitation, G4bool valAuger, G4bool valPIXE)
G4ParticleDefinition * GetDefinition() const
G4double BindingEnergy() const
const G4ElementVector * GetElementVector() const
G4bool DeexcitationIgnoreCut() const
void SetCreatorModelIndex(G4int idx)
static const G4double reg
static G4RegionStore * GetInstance()
G4StepPoint * GetPreStepPoint() const
virtual const G4AtomicShell * GetAtomicShell(G4int Z, G4AtomicShellEnumerator shell)=0
const G4double * GetVecNbOfAtomsPerVolume() const
G4GLOB_DLL std::ostream G4cout
static size_t GetNumberOfElements()
size_t GetTableSize() const
const G4ThreeVector & GetPosition() const
const G4String & PIXECrossSectionModel()
static G4ProductionCutsTable * GetProductionCutsTable()
G4bool CheckAugerActiveRegion(G4int coupleIndex)
const G4MaterialCutsCouple * GetMaterialCutsCouple(G4int i) const
T max(const T t1, const T t2)
brief Return the largest of the two arguments
static G4int Register(const G4String &)
const G4String & GetName() const
G4StepPoint * GetPostStepPoint() const
static G4EmParameters * Instance()
void DefineRegParamForDeex(G4VAtomDeexcitation *) const
virtual ~G4VAtomDeexcitation()
T min(const T t1, const T t2)
brief Return the smallest of the two arguments
virtual void InitialiseForNewRun()=0
G4double GetGlobalTime() const
size_t GetNumberOfElements() const
G4double GetKineticEnergy() const
void GenerateParticles(std::vector< G4DynamicParticle * > *secVect, const G4AtomicShell *, G4int Z, G4int coupleIndex)
G4Track * GetTrack() const
static G4ElementTable * GetElementTable()
G4double bindingEnergy(G4int A, G4int Z)
G4ProductionCuts * GetProductionCuts() const
G4VAtomDeexcitation(const G4String &modname="Deexcitation")
const G4String & PIXEElectronCrossSectionModel()