19#include "BDSElectronOccupancy.hh"
20#include "BDSElectronQuantumLevel.hh"
21#include "BDSUtilities.hh"
25BDSElectronOccupancy::BDSElectronOccupancy(G4int maxn)
28 G4double spinDown=-0.5;
29 for(G4int i=1; i<=maxn; i++)
31 for(G4int j=0; j<i; j++)
33 G4double jSpinOrbit1 = abs(j+spinUp);
34 G4double jSpinOrbit2 = abs(j+spinDown);
35 if(jSpinOrbit1==jSpinOrbit2)
47 sort(stateList.begin(),stateList.end(),CompareEnergy);
51BDSElectronOccupancy::~BDSElectronOccupancy()
54void BDSElectronOccupancy::CreateNewLevel(G4int n, G4int l, G4int j)
61 return (level1->GetLevelEnergy()>level2->GetLevelEnergy());
64void BDSElectronOccupancy::PopulateLevels()
66 G4int size=stateList.size();
67 G4int currentElectrons = totalElectrons;
68 for(G4int i=0; i<size; i++) {
69 if (currentElectrons > 0) {
70 G4int max = stateList[i]->GetMaxOccupancy();
71 G4int current = stateList[i]->GetCurrentOccupancy();
73 if ((max - current) < currentElectrons) {
74 stateList[i]->AddElectrons(max - current);
75 currentElectrons = currentElectrons - (max - current);
79 stateList[i]->AddElectrons(currentElectrons);
88void BDSElectronOccupancy::AddElectrons(G4int number)
90 G4int size=stateList.size();
91 G4int currentElectrons = number;
92 for(G4int i=0; i<size; i++) {
93 if (currentElectrons > 0) {
94 G4int max = stateList[i]->GetMaxOccupancy();
95 G4int current = stateList[i]->GetCurrentOccupancy();
97 if ((max - current) < currentElectrons) {
98 stateList[i]->AddElectrons(max - current);
99 currentElectrons = currentElectrons - (max - current);
103 stateList[i]->AddElectrons(currentElectrons);
104 currentElectrons = 0;
112void BDSElectronOccupancy::AddElectrons(G4int n, G4int l, G4double j, G4int number)
115 G4int size=stateList.size();
116 G4int currentNumber=number;
117 for(G4int i=0; i<size;i++)
119 if(stateList[i]->GetnPrincipleNumnber()==n&&stateList[i]->GetlAngularNumber()==l&&stateList[i]->GetjSpinOrbitCoupling()==j)
123 G4int currentAvailable = stateList[i]->GetMaxOccupancy()-stateList[i]->GetCurrentOccupancy();
124 if (currentAvailable > currentNumber) {
125 stateList[i]->AddElectrons(currentNumber);
136void BDSElectronOccupancy::RemoveElectrons(G4int n, G4int l, G4double j,G4int number)
138 G4int currentNumber=number;
139 G4int size=stateList.size();
140 for(G4int i=0; i<size; i++)
142 if(stateList[i]->GetnPrincipleNumnber() == n && stateList[i]->GetlAngularNumber() == l&&stateList[i]->GetjSpinOrbitCoupling()==j)
144 if(currentNumber>0) {
145 if (stateList[i]->GetCurrentOccupancy() > 0)
147 stateList[i]->RemoveElectrons(number);
148 currentNumber=currentNumber-number;
155G4bool BDSElectronOccupancy::StatePopulated(G4int n, G4int l, G4double j)
157 G4int size=stateList.size();
158 for(
int i=0; i<size;i++)
161 if (stateList[i]->GetnPrincipleNumnber() == n && stateList[i]->GetlAngularNumber() == l&&stateList[i]->GetjSpinOrbitCoupling()==j)
163 if(stateList[i]->GetCurrentOccupancy()>0){
172void BDSElectronOccupancy::SetStateLifetime(G4int n, G4int l, G4double lifetime)
174 G4int size=stateList.size();
175 for(
int i=0; i<size; i++)
177 if (stateList[i]->GetnPrincipleNumnber() == n && stateList[i]->GetlAngularNumber() == l)
179 if(stateList[i]->GetCurrentOccupancy()>0)
181 stateList[i]->SetExcitedLifetime(lifetime);
187void BDSElectronOccupancy::SetTimeOfExciation(G4double timeOfExcitationIn, G4int n, G4int l, G4double j)
189 G4int size=stateList.size();
190 for(
int i=0; i<size; i++)
192 if (stateList[i]->GetnPrincipleNumnber() == n && stateList[i]->GetlAngularNumber() == l && stateList[i]->GetjSpinOrbitCoupling()==j)
194 stateList[i]->SetTimeOfExcitement(timeOfExcitationIn);
199G4double BDSElectronOccupancy::GetStateLifetime(G4int n, G4int l, G4double j)
201 G4int size=stateList.size();
202 for(
int i=0; i<size; i++)
204 if (stateList[i]->GetnPrincipleNumnber() == n && stateList[i]->GetlAngularNumber() == l && stateList[i]->GetjSpinOrbitCoupling()==j)
206 return stateList[i]->GetExcitedLifetime();
213G4double BDSElectronOccupancy::GetTimeOfExcitation(G4int n, G4int l, G4double j){
214 G4int size=stateList.size();
215 for(
int i=0; i<size; i++)
217 if (stateList[i]->GetnPrincipleNumnber() == n && stateList[i]->GetlAngularNumber() == l && stateList[i]->GetjSpinOrbitCoupling()==j)
219 return stateList[i]->GetTimeOfExcitement();
Electron Quantum levels for more than just n quantum number.