- Timestamp:
- Nov 19, 2009, 2:53:25 PM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/source/processes/electromagnetic/lowenergy/src/G4hLowEnergyIonisation.cc
r961 r1192 100 100 // parametrised proton model: min(user value, model limit) 101 101 // 26 Jan 2005 S. Chauvie added PrintInfoDefinition() for antiproton 102 103 102 // 30 Sep 2009 ALF Removed dependencies to old shell Ionisation XS models 103 // 11 Nov 2009 ALF Code cleaning for the Dec release 104 // 104 105 // ----------------------------------------------------------------------- 105 106 … … 121 122 #include "G4ShellVacancy.hh" 122 123 #include "G4VhShellCrossSection.hh" 123 #include "G4hShellCrossSection.hh"124 #include "G4hShellCrossSectionExp.hh"125 #include "G4hShellCrossSectionDoubleExp.hh"126 124 #include "G4VEMDataSet.hh" 127 125 #include "G4EMDataSet.hh" … … 132 130 #include "G4ProcessManager.hh" 133 131 #include "G4ProductionCutsTable.hh" 134 132 #include "G4teoCrossSection.hh" 133 #include "G4empCrossSection.hh" 135 134 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 136 135 … … 153 152 shellVacancy(0), 154 153 shellCS(0), 155 theFluo(false), 156 expFlag(false) 154 theFluo(false) 157 155 { 158 156 InitializeMe(); … … 175 173 verboseLevel = 0; 176 174 177 //**************************************************************************** 178 // By default the method of cross section's calculation is swiched on an 179 // 2nd implementation empirical model (G4hShellCrossSectionDoubleExp), 180 // if you want to use Gryzinski's model (G4hShellCrossSection()) or the 181 // 1st empiric one (G4hShellCrossSectionExp), you must change the 182 // selection below and switching expFlag to FALSE 183 //**************************************************************************** 184 185 //shellCS = new G4hShellCrossSection(); 186 //shellCS = new G4hShellCrossSectionExp(); 187 shellCS = new G4hShellCrossSectionDoubleExp(); 188 expFlag=true; 175 shellCS = new G4teoCrossSection("analytical"); 176 189 177 } 190 178 … … 1280 1268 // G4cout << "Fluorescence is switched :" << theFluo << G4endl; 1281 1269 1270 // Fluorescence data start from element 6 1282 1271 if(theFluo && Z > 5) { 1283 1272 1284 1273 1285 1274 1286 // Atom total cross section for the Empiric Model 1287 if (expFlag) { 1275 // Atom total cross section 1288 1276 shellCS->SetTotalCS(totalCrossSectionMap[Z]); 1289 } 1277 1290 1278 G4int shell = shellCS->SelectRandomShell(Z, KineticEnergy,ParticleMass,DeltaKineticEnergy); 1291 1279 1292 if (expFlag && shell==1) { 1293 aParticleChange.ProposeLocalEnergyDeposit (KineticEnergy); 1294 aParticleChange.ProposeEnergy(0); 1295 } 1296 1297 1298 const G4AtomicShell* atomicShell = 1299 (G4AtomicTransitionManager::Instance())->Shell(Z, shell); 1300 G4double bindingEnergy = atomicShell->BindingEnergy(); 1301 1302 if(verboseLevel > 1) { 1303 G4cout << "PostStep Z= " << Z << " shell= " << shell 1304 << " bindingE(keV)= " << bindingEnergy/keV 1305 << " finalE(keV)= " << finalKineticEnergy/keV 1306 << G4endl; 1307 } 1308 1309 // Fluorescence data start from element 6 1310 1311 if (finalKineticEnergy >= bindingEnergy 1312 && (bindingEnergy >= minGammaEnergy 1313 || bindingEnergy >= minElectronEnergy) ) { 1314 1315 G4int shellId = atomicShell->ShellId(); 1316 secondaryVector = deexcitationManager.GenerateParticles(Z, shellId); 1317 1318 if (secondaryVector != 0) { 1319 1320 nSecondaries = secondaryVector->size(); 1321 for (size_t i = 0; i<nSecondaries; i++) { 1322 1323 aSecondary = (*secondaryVector)[i]; 1324 if (aSecondary) { 1325 1326 G4double e = aSecondary->GetKineticEnergy(); 1327 type = aSecondary->GetDefinition(); 1328 if (e < finalKineticEnergy && 1329 ((type == G4Gamma::Gamma() && e > minGammaEnergy ) || 1330 (type == G4Electron::Electron() && e > minElectronEnergy ))) { 1331 1332 finalKineticEnergy -= e; 1333 totalNumber++; 1334 1335 } else { 1336 1337 delete aSecondary; 1338 (*secondaryVector)[i] = 0; 1280 if (shell!=-1) { 1281 1282 const G4AtomicShell* atomicShell = 1283 (G4AtomicTransitionManager::Instance())->Shell(Z, shell); 1284 G4double bindingEnergy = atomicShell->BindingEnergy(); 1285 1286 if(verboseLevel > 1) { 1287 G4cout << "PostStep Z= " << Z << " shell= " << shell 1288 << " bindingE(keV)= " << bindingEnergy/keV 1289 << " finalE(keV)= " << finalKineticEnergy/keV 1290 << G4endl; 1291 } 1292 1293 1294 1295 if (finalKineticEnergy >= bindingEnergy 1296 && (bindingEnergy >= minGammaEnergy 1297 || bindingEnergy >= minElectronEnergy) ) { 1298 1299 G4int shellId = atomicShell->ShellId(); 1300 secondaryVector = deexcitationManager.GenerateParticles(Z, shellId); 1301 1302 if (secondaryVector != 0) { 1303 1304 nSecondaries = secondaryVector->size(); 1305 for (size_t i = 0; i<nSecondaries; i++) { 1306 1307 aSecondary = (*secondaryVector)[i]; 1308 if (aSecondary) { 1309 1310 G4double e = aSecondary->GetKineticEnergy(); 1311 type = aSecondary->GetDefinition(); 1312 if (e < finalKineticEnergy && 1313 ((type == G4Gamma::Gamma() && e > minGammaEnergy ) || 1314 (type == G4Electron::Electron() && e > minElectronEnergy ))) { 1315 1316 finalKineticEnergy -= e; 1317 totalNumber++; 1318 1319 } else { 1320 1321 delete aSecondary; 1322 (*secondaryVector)[i] = 0; 1323 } 1339 1324 } 1340 1325 } … … 1343 1328 } 1344 1329 } 1345 1330 1346 1331 // Save delta-electrons 1347 1332 … … 1401 1386 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 1402 1387 1403 std::vector<G4DynamicParticle*>* 1404 G4hLowEnergyIonisation::DeexciteAtom(const G4MaterialCutsCouple* couple, 1388 1389 1390 void G4hLowEnergyIonisation::SelectShellIonisationCS(G4String val) { 1391 1392 if (shellCS) delete shellCS; 1393 1394 if (val == "empirical") { 1395 shellCS = new G4empCrossSection(); 1396 } 1397 else { 1398 shellCS = new G4teoCrossSection(val); 1399 } 1400 } 1401 1402 1403 1404 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 1405 1406 1407 std::vector<G4DynamicParticle*>* G4hLowEnergyIonisation::DeexciteAtom(const G4MaterialCutsCouple* couple, 1405 1408 G4double incidentEnergy, 1406 1409 G4double hMass,
Note: See TracChangeset
for help on using the changeset viewer.