Ignore:
Timestamp:
Nov 5, 2010, 3:45:55 PM (14 years ago)
Author:
garnier
Message:

update ti head

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/source/physics_lists/lists/include/LBE.icc

    r1273 r1340  
    4646//
    4747// 14-02-03 Fix bugs in msc and hIon instanciation + cut per region
    48 //
     48// 16-08-10 Remove inclusion of obsolete class of G4ParticleWithCuts
     49// 20-10-10 Migrate LowEnergy process to Livermore models, LP
     50//
    4951// --------------------------------------------------------------
    5052
     
    5456#include "G4ProcessVector.hh"
    5557
    56 #include "G4ParticleDefinition.hh"
    57 #include "G4ParticleWithCuts.hh"
    5858#include "G4ParticleTypes.hh"
    5959#include "G4ParticleTable.hh"
     
    235235#include "G4hMultipleScattering.hh"
    236236
    237 // gamma
    238 #include "G4LowEnergyRayleigh.hh"
    239 #include "G4LowEnergyPhotoElectric.hh"
    240 #include "G4LowEnergyCompton.hh" 
    241 #include "G4LowEnergyGammaConversion.hh"
     237// gamma. Use Livermore models
     238#include "G4PhotoElectricEffect.hh"
     239#include "G4LivermorePhotoElectricModel.hh"
     240#include "G4ComptonScattering.hh"
     241#include "G4LivermoreComptonModel.hh"
     242#include "G4GammaConversion.hh"
     243#include "G4LivermoreGammaConversionModel.hh"
     244#include "G4RayleighScattering.hh"
     245#include "G4LivermoreRayleighModel.hh"
    242246
    243247
    244248// e-
    245 #include "G4LowEnergyIonisation.hh"
    246 #include "G4LowEnergyBremsstrahlung.hh"
     249#include "G4eMultipleScattering.hh"
     250#include "G4UniversalFluctuation.hh"
     251#include "G4UrbanMscModel93.hh"
     252
     253#include "G4eIonisation.hh"
     254#include "G4LivermoreIonisationModel.hh"
     255
     256#include "G4eBremsstrahlung.hh"
     257#include "G4LivermoreBremsstrahlungModel.hh"
    247258
    248259// e+
    249 #include "G4eIonisation.hh"
    250 #include "G4eBremsstrahlung.hh"
    251260#include "G4eplusAnnihilation.hh"
    252261
    253262
    254263// alpha and GenericIon and deuterons, triton, He3:
    255 #include "G4hLowEnergyIonisation.hh"
     264#include "G4ionIonisation.hh"
     265#include "G4hIonisation.hh"
     266#include "G4hBremsstrahlung.hh"
     267//
     268#include "G4IonParametrisedLossModel.hh"
     269#include "G4NuclearStopping.hh"
    256270#include "G4EnergyLossTables.hh"
    257 // hLowEnergyIonisation uses Ziegler 1988 as the default
     271
     272
     273// msc models
     274#include "G4UrbanMscModel93.hh"
    258275
    259276
     
    269286 template<class T> void TLBE<T>::ConstructEM() {
    270287
    271 // processes:
    272 
    273   G4LowEnergyPhotoElectric* lowePhot = new G4LowEnergyPhotoElectric();
    274   G4LowEnergyIonisation* loweIon  = new G4LowEnergyIonisation();
    275   G4LowEnergyBremsstrahlung* loweBrem = new G4LowEnergyBremsstrahlung();
    276 
    277   // note LowEIon uses proton as basis for its data-base, therefore
    278   // cannot specify different LowEnergyIonisation models for different
    279   // particles, but can change model globally for Ion, Alpha and Proton.
    280 
    281 
    282   //fluorescence apply specific cut for fluorescence from photons, electrons
    283   //and bremsstrahlung photons:
    284   G4double fluorcut = 250*eV;
    285   lowePhot->SetCutForLowEnSecPhotons(fluorcut);
    286   loweIon->SetCutForLowEnSecPhotons(fluorcut);
    287   loweBrem->SetCutForLowEnSecPhotons(fluorcut);
    288  
    289   // setting tables explicitly for electronic stopping power
    290   //  ahadronLowEIon->SetElectronicStoppingPowerModel
    291   //  (G4GenericIon::GenericIonDefinition(), "ICRU_R49p") ;
    292   //  ahadronLowEIon->SetElectronicStoppingPowerModel
    293   //  (G4Proton::ProtonDefinition(), "ICRU_R49p") ;
    294 
    295   // Switch off the Barkas and Bloch corrections
    296   //  ahadronLowEIon->SetBarkasOff();
    297 
    298 
     288 // models & processes:
     289 // Use Livermore models up to 20 MeV, and standard
     290 // models for higher energy
     291 G4double LivermoreHighEnergyLimit = 20*MeV;
     292 //
    299293  this->theParticleIterator->reset();
    300294  while( (*(this->theParticleIterator))() ){
     
    307301    if (particleName == "gamma")
    308302      {
    309         //gamma
    310         pmanager->AddDiscreteProcess(new G4LowEnergyRayleigh());
    311         pmanager->AddDiscreteProcess(lowePhot);
    312         pmanager->AddDiscreteProcess(new G4LowEnergyCompton());
    313         pmanager->AddDiscreteProcess(new G4LowEnergyGammaConversion());
     303      G4PhotoElectricEffect* thePhotoElectricEffect = new G4PhotoElectricEffect();
     304      G4LivermorePhotoElectricModel* theLivermorePhotoElectricModel =
     305        new G4LivermorePhotoElectricModel();
     306      theLivermorePhotoElectricModel->SetHighEnergyLimit(LivermoreHighEnergyLimit);
     307      thePhotoElectricEffect->AddEmModel(0, theLivermorePhotoElectricModel);
     308      pmanager->AddDiscreteProcess(thePhotoElectricEffect);
     309
     310      G4ComptonScattering* theComptonScattering = new G4ComptonScattering();
     311      G4LivermoreComptonModel* theLivermoreComptonModel =
     312        new G4LivermoreComptonModel();
     313      theLivermoreComptonModel->SetHighEnergyLimit(LivermoreHighEnergyLimit);
     314      theComptonScattering->AddEmModel(0, theLivermoreComptonModel);
     315      pmanager->AddDiscreteProcess(theComptonScattering);
     316
     317      G4GammaConversion* theGammaConversion = new G4GammaConversion();
     318      G4LivermoreGammaConversionModel* theLivermoreGammaConversionModel =
     319        new G4LivermoreGammaConversionModel();
     320      theLivermoreGammaConversionModel->SetHighEnergyLimit(LivermoreHighEnergyLimit);
     321      theGammaConversion->AddEmModel(0, theLivermoreGammaConversionModel);
     322      pmanager->AddDiscreteProcess(theGammaConversion);
     323
     324      G4RayleighScattering* theRayleigh = new G4RayleighScattering();
     325      G4LivermoreRayleighModel* theRayleighModel = new G4LivermoreRayleighModel();
     326      theRayleighModel->SetHighEnergyLimit(LivermoreHighEnergyLimit);
     327      theRayleigh->AddEmModel(0, theRayleighModel);
     328      pmanager->AddDiscreteProcess(theRayleigh);
     329
    314330      }
    315331    else if (particleName == "e-")
    316332      {
    317         //electron
    318         // process ordering: AddProcess(name, at rest, along step, post step)
    319         // -1 = not implemented, then ordering
    320         G4eMultipleScattering* aMultipleScattering = new G4eMultipleScattering();
    321         pmanager->AddProcess(aMultipleScattering,     -1, 1, 1);
    322         pmanager->AddProcess(loweIon,                 -1, 2, 2);
    323         pmanager->AddProcess(loweBrem,                -1,-1, 3);
     333       //electron
     334       // process ordering: AddProcess(name, at rest, along step, post step)
     335       // -1 = not implemented, then ordering
     336        G4eMultipleScattering* msc = new G4eMultipleScattering();     
     337        msc->AddEmModel(0, new G4UrbanMscModel93());
     338        msc->SetStepLimitType(fUseDistanceToBoundary);
     339        pmanager->AddProcess(msc,                   -1, 1, 1);
     340     
     341       // Ionisation
     342       G4eIonisation* eIoni = new G4eIonisation();
     343       G4LivermoreIonisationModel* theIoniLivermore = new
     344        G4LivermoreIonisationModel();
     345       theIoniLivermore->SetHighEnergyLimit(1*MeV);
     346       eIoni->AddEmModel(0, theIoniLivermore, new G4UniversalFluctuation() );
     347       eIoni->SetStepFunction(0.2, 100*um); //     
     348       pmanager->AddProcess(eIoni,                 -1, 2, 2);
     349     
     350       // Bremsstrahlung
     351       G4eBremsstrahlung* eBrem = new G4eBremsstrahlung();
     352       G4LivermoreBremsstrahlungModel* theBremLivermore = new
     353         G4LivermoreBremsstrahlungModel();
     354       theBremLivermore->SetHighEnergyLimit(LivermoreHighEnergyLimit);
     355       eBrem->AddEmModel(0, theBremLivermore);
     356       pmanager->AddProcess(eBrem, -1,-3, 3);   
    324357      }
    325358    else if (particleName == "e+")
    326359      {
    327360        //positron
    328         G4eMultipleScattering* aMultipleScattering = new G4eMultipleScattering();
    329         pmanager->AddProcess(aMultipleScattering,     -1, 1, 1);
    330         pmanager->AddProcess(new G4eIonisation(),     -1, 2, 2);
    331         pmanager->AddProcess(new G4eBremsstrahlung(), -1,-1, 3);
    332         pmanager->AddProcess(new G4eplusAnnihilation(),0,-1, 4);     
     361      G4eMultipleScattering* msc = new G4eMultipleScattering();
     362      msc->AddEmModel(0, new G4UrbanMscModel93());     
     363      msc->SetStepLimitType(fUseDistanceToBoundary);
     364      pmanager->AddProcess(msc,                   -1, 1, 1);
     365      G4eIonisation* eIoni = new G4eIonisation();
     366      eIoni->SetStepFunction(0.2, 100*um);     
     367      pmanager->AddProcess(eIoni,                 -1, 2, 2);
     368      pmanager->AddProcess(new G4eBremsstrahlung, -1,-3, 3);     
     369      pmanager->AddProcess(new G4eplusAnnihilation,0,-1, 4);
    333370      }
    334371    else if( particleName == "mu+" ||
     
    344381          pmanager->AddProcess(new G4MuonMinusCaptureAtRest(), 0,-1,-1);
    345382      }
    346     else if (particleName == "proton"     ||
    347              particleName == "alpha"      ||
     383    else if (particleName == "GenericIon")
     384    {
     385      pmanager->AddProcess(new G4hMultipleScattering, -1, 1, 1);
     386      G4ionIonisation* ionIoni = new G4ionIonisation();
     387      ionIoni->SetEmModel(new G4IonParametrisedLossModel());
     388      ionIoni->SetStepFunction(0.1, 10*um);
     389      pmanager->AddProcess(ionIoni,                   -1, 2, 2);
     390      pmanager->AddProcess(new G4NuclearStopping(),   -1, 3,-1);       
     391    }
     392    else if (particleName == "alpha" || particleName == "He3")
     393    {
     394      //MSC, ion-Ionisation, Nuclear Stopping
     395      pmanager->AddProcess(new G4hMultipleScattering, -1, 1, 1);
     396
     397      G4ionIonisation* ionIoni = new G4ionIonisation();
     398      ionIoni->SetStepFunction(0.1, 20*um);
     399      pmanager->AddProcess(ionIoni,                   -1, 2, 2);
     400      pmanager->AddProcess(new G4NuclearStopping(),   -1, 3,-1);
     401    }
     402    else if (particleName == "proton"     ||     
    348403             particleName == "deuteron"   ||
    349404             particleName == "triton"     ||
    350              particleName == "He3"        ||
    351              particleName == "GenericIon" ||
    352              (particleType == "nucleus" && charge != 0))
     405             particleName == "pi+" ||
     406             particleName == "pi-" ||
     407             particleName == "kaon+" ||
     408             particleName == "kaon-")
    353409      {
    354         // OBJECT may be dynamically created as either a GenericIon or nucleus
    355         // G4Nucleus exists and therefore has particle type nucleus
    356         // genericIon:
    357         G4hMultipleScattering* aMultipleScattering = new G4hMultipleScattering();
    358         G4hLowEnergyIonisation* ahadronLowEIon = new G4hLowEnergyIonisation();
    359         pmanager->AddProcess(aMultipleScattering,-1,1,1);
    360         pmanager->AddProcess(ahadronLowEIon,-1,2,2);
    361         // ahadronLowEIon->SetNuclearStoppingOff() ;
    362         //        ahadronLowEIon->SetNuclearStoppingPowerModel("ICRU_R49") ;
    363         //        ahadronLowEIon->SetNuclearStoppingOn() ;
    364  
    365         //fluorescence switch off for hadrons (for now) PIXE:
    366         ahadronLowEIon->SetFluorescence(false);
     410       //MSC, h-ionisation, bremsstrahlung
     411       pmanager->AddProcess(new G4hMultipleScattering, -1, 1, 1);     
     412       G4hIonisation* hIoni = new G4hIonisation();
     413       hIoni->SetStepFunction(0.2, 50*um);
     414       pmanager->AddProcess(hIoni,                     -1, 2, 2);     
     415       pmanager->AddProcess(new G4hBremsstrahlung,     -1,-3, 3);   
    367416      }
    368417    else if ((!particle->IsShortLived()) &&
     
    371420      {
    372421        //all others charged particles except geantino
    373         G4hMultipleScattering* aMultipleScattering = new G4hMultipleScattering();
    374         G4hLowEnergyIonisation* ahadronLowEIon = new G4hLowEnergyIonisation();
    375         pmanager->AddProcess(aMultipleScattering,-1,1,1);
    376         pmanager->AddProcess(ahadronLowEIon,       -1,2,2);     
    377         //      pmanager->AddProcess(new G4hIonisation(),       -1,2,2);     
     422        pmanager->AddProcess(new G4hMultipleScattering, -1, 1, 1);
     423        pmanager->AddProcess(new G4hIonisation,         -1, 2, 2);
    378424      }
    379425   
Note: See TracChangeset for help on using the changeset viewer.