Ignore:
Timestamp:
Nov 19, 2009, 2:53:25 PM (15 years ago)
Author:
garnier
Message:

update par rapport a CVS

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/source/processes/electromagnetic/lowenergy/src/G4hLowEnergyIonisation.cc

    r961 r1192  
    100100//               parametrised proton model: min(user value, model limit)
    101101// 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//
    104105// -----------------------------------------------------------------------
    105106
     
    121122#include "G4ShellVacancy.hh"
    122123#include "G4VhShellCrossSection.hh"
    123 #include "G4hShellCrossSection.hh"
    124 #include "G4hShellCrossSectionExp.hh"
    125 #include "G4hShellCrossSectionDoubleExp.hh"
    126124#include "G4VEMDataSet.hh"
    127125#include "G4EMDataSet.hh"
     
    132130#include "G4ProcessManager.hh"
    133131#include "G4ProductionCutsTable.hh"
    134 
     132#include "G4teoCrossSection.hh"
     133#include "G4empCrossSection.hh"
    135134//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    136135
     
    153152    shellVacancy(0),
    154153    shellCS(0),
    155     theFluo(false),
    156     expFlag(false)
     154    theFluo(false)
    157155{
    158156  InitializeMe();
     
    175173  verboseLevel         = 0;
    176174
    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
    189177}
    190178
     
    12801268  //   G4cout << "Fluorescence is switched :" << theFluo << G4endl;
    12811269
     1270  // Fluorescence data start from element 6
    12821271  if(theFluo && Z > 5) {
    12831272
    12841273
    12851274
    1286     // Atom total cross section for the Empiric Model   
    1287     if (expFlag) {   
     1275    // Atom total cross section     
    12881276    shellCS->SetTotalCS(totalCrossSectionMap[Z]);   
    1289     }
     1277
    12901278    G4int shell = shellCS->SelectRandomShell(Z, KineticEnergy,ParticleMass,DeltaKineticEnergy);
    12911279
    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              }
    13391324            }
    13401325          }
     
    13431328    }
    13441329  }
    1345 
     1330 
    13461331  // Save delta-electrons
    13471332
     
    14011386//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    14021387
    1403 std::vector<G4DynamicParticle*>*
    1404 G4hLowEnergyIonisation::DeexciteAtom(const G4MaterialCutsCouple* couple,
     1388
     1389
     1390void 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
     1407std::vector<G4DynamicParticle*>* G4hLowEnergyIonisation::DeexciteAtom(const G4MaterialCutsCouple* couple,
    14051408                                           G4double incidentEnergy,
    14061409                                           G4double hMass,
Note: See TracChangeset for help on using the changeset viewer.