Geant4 Cross Reference |
1 // 1 2 // ******************************************* 3 // * License and Disclaimer 4 // * 5 // * The Geant4 software is copyright of th 6 // * the Geant4 Collaboration. It is provided 7 // * conditions of the Geant4 Software License 8 // * LICENSE and available at http://cern.ch/ 9 // * include a list of copyright holders. 10 // * 11 // * Neither the authors of this software syst 12 // * institutes,nor the agencies providing fin 13 // * work make any representation or warran 14 // * regarding this software system or assum 15 // * use. Please see the license in the file 16 // * for the full disclaimer and the limitatio 17 // * 18 // * This code implementation is the result 19 // * technical work of the GEANT4 collaboratio 20 // * By using, copying, modifying or distri 21 // * any work based on the software) you ag 22 // * use in resulting scientific publicati 23 // * acceptance of all terms of the Geant4 Sof 24 // ******************************************* 25 // 26 // ------------------------------------------- 27 // ------------------------------------------- 28 29 //....oooOO0OOooo........oooOO0OOooo........oo 30 31 //....oooOO0OOooo........oooOO0OOooo........oo 32 33 #include "MicroElecPhysics.hh" 34 #include "G4SystemOfUnits.hh" 35 36 37 // Geant4-MicroElec MODELS 38 39 #include "G4MicroElecElastic.hh" 40 #include "G4MicroElecElasticModel_new.hh" 41 42 #include "G4MicroElecInelastic.hh" 43 #include "G4MicroElecInelasticModel_new.hh" 44 45 #include "G4MicroElecLOPhononScattering.hh" 46 #include "G4MicroElecLOPhononModel.hh" 47 #include "G4MicroElecSurface.hh" 48 49 // 50 51 #include "G4LossTableManager.hh" 52 #include "G4EmConfigurator.hh" 53 #include "G4VEmModel.hh" 54 #include "G4DummyModel.hh" 55 #include "G4eIonisation.hh" 56 #include "G4hIonisation.hh" 57 #include "G4ionIonisation.hh" 58 #include "G4eMultipleScattering.hh" 59 #include "G4hMultipleScattering.hh" 60 #include "G4BraggModel.hh" 61 #include "G4BraggIonModel.hh" 62 #include "G4BetheBlochModel.hh" 63 #include "G4UrbanMscModel.hh" 64 #include "G4MollerBhabhaModel.hh" 65 #include "G4IonFluctuations.hh" 66 #include "G4UniversalFluctuation.hh" 67 68 #include "ElectronCapture.hh" 69 70 #include "G4UAtomicDeexcitation.hh" 71 72 73 74 //....oooOO0OOooo........oooOO0OOooo........oo 75 76 MicroElecPhysics::MicroElecPhysics(): G4VUser 77 { 78 defaultCutValue = 1*micrometer; 79 cutForGamma = defaultCutValue; 80 cutForElectron = defaultCutValue; 81 cutForPositron = defaultCutValue; 82 cutForProton = defaultCutValue; 83 84 SetVerboseLevel(1); 85 } 86 87 //....oooOO0OOooo........oooOO0OOooo........oo 88 89 MicroElecPhysics::~MicroElecPhysics() 90 {} 91 92 //....oooOO0OOooo........oooOO0OOooo........oo 93 94 void MicroElecPhysics::ConstructParticle() 95 { 96 ConstructBosons(); 97 ConstructLeptons(); 98 ConstructBarions(); 99 } 100 101 //....oooOO0OOooo........oooOO0OOooo........oo 102 103 void MicroElecPhysics::ConstructBosons() 104 { 105 // gamma 106 G4Gamma::GammaDefinition(); 107 } 108 //....oooOO0OOooo........oooOO0OOooo........o 109 110 void MicroElecPhysics::ConstructLeptons() 111 { 112 // leptons 113 G4Electron::ElectronDefinition(); 114 G4Positron::PositronDefinition(); 115 } 116 117 //....oooOO0OOooo........oooOO0OOooo........oo 118 119 void MicroElecPhysics::ConstructBarions() 120 { 121 // baryons 122 G4Proton::ProtonDefinition(); 123 G4GenericIon::GenericIonDefinition(); 124 } 125 126 //....oooOO0OOooo........oooOO0OOooo........oo 127 128 void MicroElecPhysics::ConstructProcess() 129 { 130 AddTransportation(); 131 ConstructEM(); 132 ConstructGeneral(); 133 } 134 135 //....oooOO0OOooo........oooOO0OOooo........oo 136 137 138 //....oooOO0OOooo........oooOO0OOooo........oo 139 140 void MicroElecPhysics::ConstructEM() 141 { 142 143 G4EmParameters* param = G4EmParameters::Inst 144 //param->SetDefaults(); 145 param->SetBuildCSDARange(true); 146 //param->SetMscStepLimitType(fUseSafetyPlus) 147 //param->SetMscStepLimitType(fUseDistanceToB 148 param->SetMscStepLimitType(fUseSafety); 149 param->RegionsMicroElec(); 150 // physicList ISS 151 param->SetDefaults(); 152 param->SetMinEnergy(0.1*eV); 153 param->SetMaxEnergy(10 * TeV); 154 param->SetLowestElectronEnergy(0 * eV); //<- 155 param->SetNumberOfBinsPerDecade(20); 156 param->ActivateAngularGeneratorForIonisation 157 param->SetAugerCascade(true);//*/ 158 159 auto particleIterator=GetParticleIterator(); 160 particleIterator->reset(); 161 162 while( (*particleIterator)() ) 163 { 164 165 G4ParticleDefinition* particle = particleI 166 G4ProcessManager* pmanager = particle->Get 167 G4String particleName = particle->GetParti 168 169 // ********************************* 170 // 1) Processes for the World region 171 // ********************************* 172 173 if (particleName == "e-") { 174 175 176 // STANDARD msc is active in the world 177 G4eMultipleScattering* msc = new G4eMult 178 msc->AddEmModel(1, new G4UrbanMscModel() 179 pmanager->AddProcess(msc, -1, 1, -1); 180 181 // STANDARD ionisation is active in the 182 G4eIonisation* eion = new G4eIonisation( 183 pmanager->AddProcess(eion, -1, 2, 2); 184 185 // MicroElec elastic is not active in th 186 //G4MicroElecElasticCorrected* theMicroE 187 //theMicroElecElasticProcess->SetEmModel 188 //pmanager->AddDiscreteProcess(theMicroE 189 190 G4MicroElecElastic* theMicroElecElasticProce 191 theMicroElecElasticProcess->SetEmModel 192 // G4MicroElecElasticModel_new* mod = n 193 //theMicroElecElasticProcess->AddEmMod 194 pmanager->AddDiscreteProcess(theMicroE 195 196 // MicroElec ionisation is not active in 197 /*G4MicroElecInelastic* microelecioni = 198 microelecioni->SetEmModel(new G4DummyMod 199 pmanager->AddDiscreteProcess(microelecio 200 201 G4MicroElecInelastic* microelecioni = ne 202 microelecioni->SetEmModel(new G4DummyMod 203 pmanager->AddDiscreteProcess(microelecio 204 205 //Phonons for SiO2 206 207 G4MicroElecLOPhononScattering* opticalPhon 208 opticalPhonon->SetEmModel(new G4DummyModel 209 pmanager->AddDiscreteProcess(opticalPhonon 210 211 /*G4LOPhononScattering* LO60 = new G4LOPho 212 LO60->SetEmModel(new G4DummyModel(), 1); 213 pmanager->AddDiscreteProcess(LO60);//*/ 214 215 216 217 G4MicroElecSurface* MicroElecSurf = new G4 218 MicroElecSurf->SetProcessManager(pmanager) 219 pmanager->AddDiscreteProcess(MicroElecSurf 220 221 ElectronCapture* ecap = new ElectronCaptu 222 pmanager->AddDiscreteProcess(ecap);//*/ 223 224 } else if ( particleName == "proton" ) { 225 226 // STANDARD msc is active in the world 227 /*G4hMultipleScattering* msc = new G4hMu 228 msc->AddEmModel(1, new G4UrbanMscModel() 229 pmanager->AddProcess(msc, -1, 1, -1);*/ 230 231 232 // STANDARD ionisation is active in the 233 G4hIonisation* hion = new G4hIonisation( 234 pmanager->AddProcess(hion, -1, 2, 2); 235 236 // Dielectric ionisation is not active i 237 G4MicroElecInelastic* dielectricioni = n 238 dielectricioni->SetEmModel(new G4DummyMo 239 //dielectricioni->SetEmModel(new G4Dummy 240 pmanager->AddDiscreteProcess(dielectrici 241 242 } else if(particleName == "alpha") { 243 244 245 // STANDARD ionisation is active in the 246 G4ionIonisation* hion = new G4ionIonisat 247 pmanager->AddProcess(hion, -1, 2, 2); 248 // Dielectric ionisation is not active i 249 G4MicroElecInelastic* dielectricioni = new 250 dielectricioni->SetEmModel(new G4DummyMode 251 dielectricioni->SetEmModel(new G4DummyMode 252 pmanager->AddDiscreteProcess(dielectricion 253 254 } else if (particleName == "GenericIon") { 255 256 // STANDARD msc is active in the world 257 /*G4hMultipleScattering* msc = new G4hMu 258 msc->AddEmModel(1, new G4UrbanMscModel() 259 pmanager->AddProcess(new G4hMultipleScat 260 261 /*G4CoulombScattering* cs = new G4Coulom 262 cs->AddEmModel(0, new G4IonCoulombScatte 263 cs->SetBuildTableFlag(false); 264 pmanager->AddDiscreteProcess(cs);*/ 265 266 267 268 // STANDARD ionisation is active in the 269 G4ionIonisation* hion = new G4ionIonisat 270 pmanager->AddProcess(hion, -1, 2, 2); 271 272 // Dielectric ionisation is not actived 273 G4MicroElecInelastic* dielectricioni = n 274 dielectricioni->SetEmModel(new G4DummyMo 275 dielectricioni->SetEmModel(new G4DummyMo 276 pmanager->AddDiscreteProcess(dielectrici 277 } 278 } 279 280 // ************************************** 281 // 2) Define processes for Target region 282 // ************************************** 283 284 // STANDARD EM processes should be inactivat 285 // - STANDARD EM e- processes are inactivate 286 // - STANDARD EM proton & ion processes are 287 // 288 G4EmConfigurator* em_config = G4LossTableMan 289 290 G4VEmModel* mod; 291 // *** e- 292 293 // ---> STANDARD EM processes are inactivate 294 295 G4UrbanMscModel* msc = new G4UrbanMscModel( 296 msc->SetActivationLowEnergyLimit(100*MeV); 297 em_config->SetExtraEmModel("e-","msc",msc,"T 298 299 300 mod = new G4MollerBhabhaModel(); 301 mod->SetActivationLowEnergyLimit(10*MeV); 302 em_config->SetExtraEmModel("e-","eIoni",mod, 303 304 305 // ---> MicroElec processes activated 306 307 308 mod = new G4MicroElecElasticModel_new(); 309 em_config->SetExtraEmModel("e-","e-_G4MicroE 310 311 mod = new G4MicroElecInelasticModel_new(); 312 em_config->SetExtraEmModel("e-","e-_G4Dielec 313 314 // G4double hw = 0.15*eV; 315 316 //Old phonon 317 318 /*mod = new LOPhononModel(0.153*eV,false); 319 em_config->SetExtraEmModel("e-", "e-_G4LOPho 320 321 mod = new LOPhononModel(0.063*eV,false); 322 em_config->SetExtraEmModel("e-", "e-_G4LO60" 323 324 //Phonons LO pour sio2 et al2o3 325 326 mod = new G4MicroElecLOPhononModel(); 327 em_config->SetExtraEmModel("e-", "e-_G4LOPho 328 329 330 // *** proton ------------------------------ 331 332 // ---> STANDARD EM processes inactivated be 333 334 // STANDARD msc is still active 335 // Inactivate following STANDARD processes 336 337 // il faut desactiver Bragg puisque notre mo 338 /*mod = new G4BraggModel(); 339 mod->SetActivationHighEnergyLimit(50*keV); 340 em_config->SetExtraEmModel("proton","hIoni", 341 342 mod = new G4BetheBlochModel(); 343 mod->SetActivationLowEnergyLimit(10*MeV); 344 em_config->SetExtraEmModel("proton","hIoni", 345 346 // ---> Dielectric processes activated 347 348 349 mod = new G4MicroElecInelasticModel_new(); 350 mod->SetActivationLowEnergyLimit(100*eV); 351 em_config->SetExtraEmModel("proton","p_G4Die 352 //em_config->SetExtraEmModel("proton","p_G4D 353 354 //*/ 355 356 357 // *** alpha ------------------------------- 358 mod = new G4BetheBlochModel(); 359 mod->SetActivationLowEnergyLimit(10*MeV); 360 em_config->SetExtraEmModel("alpha","ionIoni" 361 362 /*mod = new G4MicroElecInelasticModel_new(); 363 //mod->SetActivationLowEnergyLimit(100*eV); 364 em_config->SetExtraEmModel("alpha","alpha_G4 365 366 // *** ion --------------------------------- 367 368 // ---> STANDARD EM processes inactivated be 369 370 // STANDARD msc is still active 371 // Inactivate following STANDARD processes 372 373 374 /*mod = new G4BraggIonModel(); 375 mod->SetActivationHighEnergyLimit(50*keV); 376 em_config->SetExtraEmModel("GenericIon","ion 377 378 mod = new G4BetheBlochModel(); 379 mod->SetActivationLowEnergyLimit(10*MeV); 380 em_config->SetExtraEmModel("GenericIon","ion 381 382 // ---> Dielectric processes activated 383 mod = new G4MicroElecInelasticModel_new(); 384 mod->SetActivationLowEnergyLimit(100*eV); 385 em_config->SetExtraEmModel("GenericIon","ion 386 //em_config->SetExtraEmModel("GenericIon","i 387 388 // Deexcitation 389 // 390 G4VAtomDeexcitation* de = new G4UAtomicDeexc 391 G4LossTableManager::Instance()->SetAtomDeexc 392 de->SetFluo(true); 393 de->SetAuger(true); 394 de->SetPIXE(true); 395 de->InitialiseForNewRun(); 396 397 // G4ProductionCutsTable::GetProductionCutsTa 398 399 } 400 401 //....oooOO0OOooo........oooOO0OOooo........oo 402 403 void MicroElecPhysics::ConstructGeneral() 404 { } 405 406 //....oooOO0OOooo........oooOO0OOooo........oo 407 408 void MicroElecPhysics::SetCuts() 409 { 410 if (verboseLevel >0) 411 { 412 G4cout << "MicroElecPhysics::SetCuts:"; 413 G4cout << "CutLength : " << G4BestUnit(def 414 } 415 416 // set cut values for gamma at first and for 417 // because some processes for e+/e- need cut 418 SetCutValue(cutForGamma, "gamma"); 419 SetCutValue(cutForElectron, "e-"); 420 SetCutValue(cutForPositron, "e+"); 421 SetCutValue(cutForProton, "proton"); 422 423 if (verboseLevel>0) { DumpCutValuesTable(); 424 } 425