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