Changeset 1340 for trunk/source/physics_lists/lists/include/LBE.icc
- Timestamp:
- Nov 5, 2010, 3:45:55 PM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/source/physics_lists/lists/include/LBE.icc
r1273 r1340 46 46 // 47 47 // 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 // 49 51 // -------------------------------------------------------------- 50 52 … … 54 56 #include "G4ProcessVector.hh" 55 57 56 #include "G4ParticleDefinition.hh"57 #include "G4ParticleWithCuts.hh"58 58 #include "G4ParticleTypes.hh" 59 59 #include "G4ParticleTable.hh" … … 235 235 #include "G4hMultipleScattering.hh" 236 236 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" 242 246 243 247 244 248 // 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" 247 258 248 259 // e+ 249 #include "G4eIonisation.hh"250 #include "G4eBremsstrahlung.hh"251 260 #include "G4eplusAnnihilation.hh" 252 261 253 262 254 263 // 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" 256 270 #include "G4EnergyLossTables.hh" 257 // hLowEnergyIonisation uses Ziegler 1988 as the default 271 272 273 // msc models 274 #include "G4UrbanMscModel93.hh" 258 275 259 276 … … 269 286 template<class T> void TLBE<T>::ConstructEM() { 270 287 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 // 299 293 this->theParticleIterator->reset(); 300 294 while( (*(this->theParticleIterator))() ){ … … 307 301 if (particleName == "gamma") 308 302 { 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 314 330 } 315 331 else if (particleName == "e-") 316 332 { 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); 324 357 } 325 358 else if (particleName == "e+") 326 359 { 327 360 //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); 333 370 } 334 371 else if( particleName == "mu+" || … … 344 381 pmanager->AddProcess(new G4MuonMinusCaptureAtRest(), 0,-1,-1); 345 382 } 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" || 348 403 particleName == "deuteron" || 349 404 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-") 353 409 { 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); 367 416 } 368 417 else if ((!particle->IsShortLived()) && … … 371 420 { 372 421 //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); 378 424 } 379 425
Note: See TracChangeset
for help on using the changeset viewer.