- Timestamp:
- Apr 20, 2009, 4:53:50 PM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/source/processes/electromagnetic/utils/include/G4VEmProcess.hh
r991 r1005 24 24 // ******************************************************************** 25 25 // 26 // $Id: G4VEmProcess.hh,v 1. 47 2008/07/31 13:01:26 vnivanch Exp $27 // GEANT4 tag $Name: geant4-09-02 $26 // $Id: G4VEmProcess.hh,v 1.50 2009/02/19 09:57:36 vnivanch Exp $ 27 // GEANT4 tag $Name: geant4-09-02-ref-02 $ 28 28 // 29 29 // ------------------------------------------------------------------- … … 108 108 109 109 //------------------------------------------------------------------------ 110 // Methods with standard implementation; may be overwritten if needed 111 //------------------------------------------------------------------------ 112 113 inline G4double RecalculateLambda(G4double kinEnergy, 114 const G4MaterialCutsCouple* couple); 115 116 //------------------------------------------------------------------------ 117 // Generic methods common to all Discrete processes 110 // Implementation of virtual methods common to all Discrete processes 118 111 //------------------------------------------------------------------------ 119 112 120 113 public: 121 122 void PrintInfoDefinition();123 124 G4VParticleChange* PostStepDoIt(const G4Track&, const G4Step&);125 114 126 115 // Initialise for build of tables … … 129 118 // Build physics table during initialisation 130 119 void BuildPhysicsTable(const G4ParticleDefinition&); 120 121 void PrintInfoDefinition(); 122 123 // implementation of virtual method, specific for G4VEmProcess 124 G4double PostStepGetPhysicalInteractionLength( 125 const G4Track& track, 126 G4double previousStepSize, 127 G4ForceCondition* condition 128 ); 129 130 // implementation of virtual method, specific for G4VEmProcess 131 G4VParticleChange* PostStepDoIt(const G4Track&, const G4Step&); 131 132 132 133 // Store PhysicsTable in a file. … … 145 146 G4bool ascii); 146 147 148 // deexcitation activated per G4Region 149 void ActivateDeexcitation(G4bool, const G4Region* r = 0); 150 147 151 //------------------------------------------------------------------------ 148 152 // Specific methods for Discrete EM post step simulation … … 152 156 G4double CrossSectionPerVolume(G4double kineticEnergy, 153 157 const G4MaterialCutsCouple* couple); 154 155 // implementation of virtual method156 virtual G4double PostStepGetPhysicalInteractionLength(157 const G4Track& track,158 G4double previousStepSize,159 G4ForceCondition* condition160 );161 158 162 159 // It returns the cross section of the process per atom … … 167 164 inline G4double MeanFreePath(const G4Track& track); 168 165 169 inline G4VEmModel* SelectModelForMaterial(G4double kinEnergy,170 size_t& idxRegion) const;171 172 166 // It returns cross section per volume 173 167 inline G4double GetLambda(G4double& kinEnergy, … … 203 197 204 198 //------------------------------------------------------------------------ 205 // Specific methods to set, access, modify models 206 //------------------------------------------------------------------------ 207 208 // Add EM model coupled for the region 199 // Specific methods to set, access, modify models and basic parameters 200 //------------------------------------------------------------------------ 201 202 protected: 203 // Select model in run time 204 inline void SelectModel(G4double& kinEnergy); 205 206 public: 207 // Select model by energy and region index 208 inline G4VEmModel* SelectModelForMaterial(G4double kinEnergy, 209 size_t& idxRegion) const; 210 211 // Add model for region, smaller value of order defines which 212 // model will be selected for a given energy interval 209 213 inline void AddEmModel(G4int, G4VEmModel*, const G4Region* region = 0); 210 214 211 215 // Assign a model to a process 212 inline void SetModel(G4VEmModel* );216 inline void SetModel(G4VEmModel*, G4int index = 1); 213 217 214 218 // return the assigned model 215 inline G4VEmModel* Model( );219 inline G4VEmModel* Model(G4int index = 1); 216 220 217 221 // Define new energy range for the model identified by the name … … 221 225 inline G4VEmModel* GetModelByIndex(G4int idx = 0, G4bool ver = false); 222 226 223 //------------------------------------------------------------------------224 // Get/set parameters used for simulation of energy loss225 //------------------------------------------------------------------------226 227 inline void ActivateDeexcitation(G4bool, const G4Region* r = 0);228 229 227 inline void SetLambdaFactor(G4double val); 230 228 … … 233 231 234 232 inline void SetApplyCuts(G4bool val); 233 234 //------------------------------------------------------------------------ 235 // Other generic methods 236 //------------------------------------------------------------------------ 235 237 236 238 protected: … … 242 244 G4PhysicsVector* LambdaPhysicsVector(const G4MaterialCutsCouple*); 243 245 246 inline G4double RecalculateLambda(G4double kinEnergy, 247 const G4MaterialCutsCouple* couple); 248 244 249 inline G4ParticleChangeForGamma* GetParticleChange(); 245 250 … … 248 253 inline void SetSecondaryParticle(const G4ParticleDefinition* p); 249 254 250 inline G4VEmModel* SelectModel(G4double& kinEnergy);251 252 255 inline size_t CurrentMaterialCutsCoupleIndex() const; 253 256 … … 280 283 inline G4double ComputeCurrentLambda(G4double kinEnergy); 281 284 282 // hide assignment operator 283 285 // copy constructor and hide assignment operator 284 286 G4VEmProcess(G4VEmProcess &); 285 287 G4VEmProcess & operator=(const G4VEmProcess &right); … … 297 299 // ======== Parameters of the class fixed at initialisation ======= 298 300 301 std::vector<G4VEmModel*> emModels; 302 299 303 // tables and vectors 300 304 G4PhysicsTable* theLambdaTable; … … 317 321 G4bool applyCuts; 318 322 G4bool startFromNull; 319 320 G4int nRegions; 321 std::vector<G4Region*> regions; 322 std::vector<G4bool> flagsDeexcitation; 323 G4bool useDeexcitation; 324 325 G4int nDERegions; 326 std::vector<const G4Region*> deRegions; 327 G4bool* idxDERegions; 323 328 324 329 // ======== Cashed values - may be state dependent ================ … … 332 337 std::vector<G4DynamicParticle*> secParticles; 333 338 334 G4VEmModel* selectedModel;339 G4VEmModel* currentModel; 335 340 336 341 const G4ParticleDefinition* particle; … … 348 353 349 354 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 355 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 356 357 inline G4double G4VEmProcess::ComputeCrossSectionPerAtom( 358 G4double kineticEnergy, G4double Z, G4double A, G4double cut) 359 { 360 SelectModel(kineticEnergy); 361 G4double x = 0.0; 362 if(currentModel) { 363 x = currentModel->ComputeCrossSectionPerAtom(particle,kineticEnergy, 364 Z,A,cut); 365 } 366 return x; 367 } 368 369 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 370 371 inline G4double G4VEmProcess::MeanFreePath(const G4Track& track) 372 { 373 DefineMaterial(track.GetMaterialCutsCouple()); 374 preStepLambda = GetCurrentLambda(track.GetKineticEnergy()); 375 G4double x = DBL_MAX; 376 if(DBL_MIN < preStepLambda) x = 1.0/preStepLambda; 377 return x; 378 } 379 380 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 381 382 inline G4double G4VEmProcess::GetLambda(G4double& kineticEnergy, 383 const G4MaterialCutsCouple* couple) 384 { 385 DefineMaterial(couple); 386 return GetCurrentLambda(kineticEnergy); 387 } 388 389 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 390 391 inline void G4VEmProcess::SetLambdaBinning(G4int nbins) 392 { 393 nLambdaBins = nbins; 394 } 395 396 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 397 398 inline G4int G4VEmProcess::LambdaBinning() const 399 { 400 return nLambdaBins; 401 } 402 403 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 404 405 inline void G4VEmProcess::SetMinKinEnergy(G4double e) 406 { 407 minKinEnergy = e; 408 } 409 410 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 411 412 inline G4double G4VEmProcess::MinKinEnergy() const 413 { 414 return minKinEnergy; 415 } 416 417 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 418 419 inline void G4VEmProcess::SetMaxKinEnergy(G4double e) 420 { 421 maxKinEnergy = e; 422 } 423 424 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 425 426 inline G4double G4VEmProcess::MaxKinEnergy() const 427 { 428 return maxKinEnergy; 429 } 430 431 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 432 433 inline void G4VEmProcess::SetPolarAngleLimit(G4double val) 434 { 435 if(val < 0.0) polarAngleLimit = 0.0; 436 else if(val > pi) polarAngleLimit = pi; 437 else polarAngleLimit = val; 438 } 439 440 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 441 442 inline G4double G4VEmProcess::PolarAngleLimit() const 443 { 444 return polarAngleLimit; 445 } 446 447 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 448 449 inline const G4PhysicsTable* G4VEmProcess::LambdaTable() const 450 { 451 return theLambdaTable; 452 } 453 454 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 455 456 inline const G4ParticleDefinition* G4VEmProcess::Particle() const 457 { 458 return particle; 459 } 460 461 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 462 463 inline const G4ParticleDefinition* G4VEmProcess::SecondaryParticle() const 464 { 465 return secondaryParticle; 466 } 467 468 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 469 470 inline void G4VEmProcess::SelectModel(G4double& kinEnergy) 471 { 472 currentModel = modelManager->SelectModel(kinEnergy, currentMaterialIndex); 473 currentModel->SetCurrentCouple(currentCouple); 474 } 475 476 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 477 478 inline G4VEmModel* G4VEmProcess::SelectModelForMaterial( 479 G4double kinEnergy, size_t& idxRegion) const 480 { 481 return modelManager->SelectModel(kinEnergy, idxRegion); 482 } 483 484 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 485 486 inline void G4VEmProcess::AddEmModel(G4int order, G4VEmModel* p, 487 const G4Region* region) 488 { 489 G4VEmFluctuationModel* fm = 0; 490 modelManager->AddEmModel(order, p, fm, region); 491 if(p) p->SetParticleChange(pParticleChange); 492 } 493 494 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 495 496 inline void G4VEmProcess::SetModel(G4VEmModel* p, G4int index) 497 { 498 G4int n = emModels.size(); 499 if(index >= n) for(G4int i=n; i<index+1; i++) {emModels.push_back(0);} 500 emModels[index] = p; 501 } 502 503 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 504 505 inline G4VEmModel* G4VEmProcess::Model(G4int index) 506 { 507 G4VEmModel* p = 0; 508 if(index >= 0 && index < G4int(emModels.size())) p = emModels[index]; 509 return p; 510 } 511 512 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 513 514 inline void G4VEmProcess::UpdateEmModel(const G4String& nam, 515 G4double emin, G4double emax) 516 { 517 modelManager->UpdateEmModel(nam, emin, emax); 518 } 519 520 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 521 522 inline G4VEmModel* G4VEmProcess::GetModelByIndex(G4int idx, G4bool ver) 523 { 524 return modelManager->GetModel(idx, ver); 525 } 526 527 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 528 529 inline void G4VEmProcess::SetLambdaFactor(G4double val) 530 { 531 if(val > 0.0 && val <= 1.0) lambdaFactor = val; 532 } 533 534 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 535 536 inline void G4VEmProcess::SetIntegral(G4bool val) 537 { 538 if(particle && particle != theGamma) integral = val; 539 if(integral) buildLambdaTable = true; 540 } 541 542 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 543 544 inline G4bool G4VEmProcess::IsIntegral() const 545 { 546 return integral; 547 } 548 549 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 550 551 inline void G4VEmProcess::SetApplyCuts(G4bool val) 552 { 553 applyCuts = val; 554 } 555 556 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 557 558 inline G4double G4VEmProcess::RecalculateLambda(G4double e, 559 const G4MaterialCutsCouple* couple) 560 { 561 DefineMaterial(couple); 562 return ComputeCurrentLambda(e); 563 } 564 565 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 566 567 inline G4ParticleChangeForGamma* G4VEmProcess::GetParticleChange() 568 { 569 return &fParticleChange; 570 } 571 572 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 573 574 inline void G4VEmProcess::SetParticle(const G4ParticleDefinition* p) 575 { 576 particle = p; 577 } 578 579 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 580 581 inline void G4VEmProcess::SetSecondaryParticle(const G4ParticleDefinition* p) 582 { 583 secondaryParticle = p; 584 } 585 586 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 587 588 inline size_t G4VEmProcess::CurrentMaterialCutsCoupleIndex() const 589 { 590 return currentMaterialIndex; 591 } 592 593 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 594 595 inline G4double G4VEmProcess::GetGammaEnergyCut() 596 { 597 return (*theCutsGamma)[currentMaterialIndex]; 598 } 599 600 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 601 602 inline G4double G4VEmProcess::GetElectronEnergyCut() 603 { 604 return (*theCutsElectron)[currentMaterialIndex]; 605 } 606 607 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 608 609 inline void G4VEmProcess::SetBuildTableFlag(G4bool val) 610 { 611 buildLambdaTable = val; 612 if(!val) integral = false; 613 } 614 615 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 616 617 inline void G4VEmProcess::SetStartFromNullFlag(G4bool val) 618 { 619 startFromNull = val; 620 } 621 622 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 623 624 inline void G4VEmProcess::InitialiseStep(const G4Track& track) 625 { 626 preStepKinEnergy = track.GetKineticEnergy(); 627 DefineMaterial(track.GetMaterialCutsCouple()); 628 if (theNumberOfInteractionLengthLeft < 0.0) mfpKinEnergy = DBL_MAX; 629 } 630 350 631 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 351 632 … … 358 639 mfpKinEnergy = DBL_MAX; 359 640 } 360 }361 362 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....363 364 inline void G4VEmProcess::InitialiseStep(const G4Track& track)365 {366 preStepKinEnergy = track.GetKineticEnergy();367 DefineMaterial(track.GetMaterialCutsCouple());368 if (theNumberOfInteractionLengthLeft < 0.0) mfpKinEnergy = DBL_MAX;369 }370 371 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....372 373 inline G4double G4VEmProcess::GetLambda(G4double& kineticEnergy,374 const G4MaterialCutsCouple* couple)375 {376 DefineMaterial(couple);377 return GetCurrentLambda(kineticEnergy);378 }379 380 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....381 382 inline G4double G4VEmProcess::GetCurrentLambda(G4double e)383 {384 G4double x = 0.0;385 if(theLambdaTable) x = GetLambdaFromTable(e);386 else x = ComputeCurrentLambda(e);387 return x;388 }389 390 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....391 392 inline G4double G4VEmProcess::RecalculateLambda(G4double e,393 const G4MaterialCutsCouple* couple)394 {395 DefineMaterial(couple);396 return ComputeCurrentLambda(e);397 }398 399 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....400 401 inline G4double G4VEmProcess::ComputeCurrentLambda(G4double e)402 {403 G4VEmModel* currentModel = SelectModel(e);404 G4double x = 0.0;405 if(currentModel)406 x = currentModel->CrossSectionPerVolume(currentMaterial,particle,407 e,(*theCuts)[currentMaterialIndex]);408 return x;409 }410 411 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....412 413 inline G4double G4VEmProcess::GetLambdaFromTable(G4double e)414 {415 G4bool b;416 return (((*theLambdaTable)[currentMaterialIndex])->GetValue(e, b));417 641 } 418 642 … … 442 666 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 443 667 444 inline G4double G4VEmProcess::MeanFreePath(const G4Track& track) 445 { 446 DefineMaterial(track.GetMaterialCutsCouple()); 447 preStepLambda = GetCurrentLambda(track.GetKineticEnergy()); 448 G4double x = DBL_MAX; 449 if(DBL_MIN < preStepLambda) x = 1.0/preStepLambda; 668 inline G4double G4VEmProcess::GetLambdaFromTable(G4double e) 669 { 670 G4bool b; 671 return (((*theLambdaTable)[currentMaterialIndex])->GetValue(e, b)); 672 } 673 674 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 675 676 inline G4double G4VEmProcess::GetCurrentLambda(G4double e) 677 { 678 G4double x = 0.0; 679 if(theLambdaTable) x = GetLambdaFromTable(e); 680 else x = ComputeCurrentLambda(e); 450 681 return x; 451 682 } … … 453 684 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 454 685 455 inline G4VEmModel* G4VEmProcess::SelectModel(G4double& kinEnergy) 456 { 457 return modelManager->SelectModel(kinEnergy, currentMaterialIndex); 458 } 459 460 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 461 462 inline G4VEmModel* G4VEmProcess::SelectModelForMaterial( 463 G4double kinEnergy, size_t& idxRegion) const 464 { 465 return modelManager->SelectModel(kinEnergy, idxRegion); 466 } 467 468 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 469 470 inline const G4ParticleDefinition* G4VEmProcess::Particle() const 471 { 472 return particle; 473 } 474 475 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 476 477 inline const G4ParticleDefinition* G4VEmProcess::SecondaryParticle() const 478 { 479 return secondaryParticle; 480 } 481 482 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 483 484 inline G4double G4VEmProcess::GetGammaEnergyCut() 485 { 486 return (*theCutsGamma)[currentMaterialIndex]; 487 } 488 489 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 490 491 inline G4double G4VEmProcess::GetElectronEnergyCut() 492 { 493 return (*theCutsElectron)[currentMaterialIndex]; 494 } 495 496 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 497 498 inline void G4VEmProcess::SetLambdaFactor(G4double val) 499 { 500 if(val > 0.0 && val <= 1.0) lambdaFactor = val; 501 } 502 503 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 504 505 inline G4VEmModel* G4VEmProcess::GetModelByIndex(G4int idx, G4bool ver) 506 { 507 return modelManager->GetModel(idx, ver); 508 } 509 510 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 511 512 inline G4ParticleChangeForGamma* G4VEmProcess::GetParticleChange() 513 { 514 return &fParticleChange; 515 } 516 517 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 518 519 inline void G4VEmProcess::SetParticle(const G4ParticleDefinition* p) 520 { 521 particle = p; 522 } 523 524 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 525 526 inline void G4VEmProcess::SetSecondaryParticle(const G4ParticleDefinition* p) 527 { 528 secondaryParticle = p; 529 } 530 531 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 532 533 inline void G4VEmProcess::AddEmModel(G4int order, G4VEmModel* p, 534 const G4Region* region) 535 { 536 G4VEmFluctuationModel* fm = 0; 537 modelManager->AddEmModel(order, p, fm, region); 538 if(p) p->SetParticleChange(pParticleChange); 539 } 540 541 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 542 543 inline void G4VEmProcess::SetModel(G4VEmModel* model) 544 { 545 selectedModel = model; 546 } 547 548 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 549 550 inline G4VEmModel* G4VEmProcess::Model() 551 { 552 return selectedModel; 553 } 554 555 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 556 557 inline void G4VEmProcess::UpdateEmModel(const G4String& nam, 558 G4double emin, G4double emax) 559 { 560 modelManager->UpdateEmModel(nam, emin, emax); 561 } 562 563 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 564 565 inline G4double G4VEmProcess::ComputeCrossSectionPerAtom( 566 G4double kineticEnergy, G4double Z, G4double A, G4double cut) 567 { 568 G4VEmModel* model = SelectModel(kineticEnergy); 569 return model->ComputeCrossSectionPerAtom(particle,kineticEnergy,Z,A,cut); 570 } 571 572 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 573 574 inline void G4VEmProcess::SetLambdaBinning(G4int nbins) 575 { 576 nLambdaBins = nbins; 577 } 578 579 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 580 581 inline G4int G4VEmProcess::LambdaBinning() const 582 { 583 return nLambdaBins; 584 } 585 586 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 587 588 inline void G4VEmProcess::SetMinKinEnergy(G4double e) 589 { 590 minKinEnergy = e; 591 } 592 593 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 594 595 inline G4double G4VEmProcess::MinKinEnergy() const 596 { 597 return minKinEnergy; 598 } 599 600 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 601 602 inline void G4VEmProcess::SetMaxKinEnergy(G4double e) 603 { 604 maxKinEnergy = e; 605 } 606 607 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 608 609 inline G4double G4VEmProcess::MaxKinEnergy() const 610 { 611 return maxKinEnergy; 612 } 613 614 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 615 616 inline void G4VEmProcess::SetPolarAngleLimit(G4double val) 617 { 618 if(val < 0.0) polarAngleLimit = 0.0; 619 else if(val > pi) polarAngleLimit = pi; 620 else polarAngleLimit = val; 621 } 622 623 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 624 625 inline G4double G4VEmProcess::PolarAngleLimit() const 626 { 627 return polarAngleLimit; 628 } 629 630 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 631 632 inline void G4VEmProcess::ActivateDeexcitation(G4bool, const G4Region*) 633 {} 634 635 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 636 637 inline const G4PhysicsTable* G4VEmProcess::LambdaTable() const 638 { 639 return theLambdaTable; 640 } 641 642 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 643 644 inline void G4VEmProcess::SetIntegral(G4bool val) 645 { 646 if(particle && particle != theGamma) integral = val; 647 if(integral) buildLambdaTable = true; 648 } 649 650 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 651 652 inline G4bool G4VEmProcess::IsIntegral() const 653 { 654 return integral; 655 } 656 657 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 658 659 inline void G4VEmProcess::SetBuildTableFlag(G4bool val) 660 { 661 buildLambdaTable = val; 662 if(!val) integral = false; 663 } 664 665 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 666 667 inline void G4VEmProcess::SetStartFromNullFlag(G4bool val) 668 { 669 startFromNull = val; 670 } 671 672 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 673 674 inline void G4VEmProcess::SetApplyCuts(G4bool val) 675 { 676 applyCuts = val; 677 } 678 679 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 680 681 inline size_t G4VEmProcess::CurrentMaterialCutsCoupleIndex() const 682 { 683 return currentMaterialIndex; 686 inline G4double G4VEmProcess::ComputeCurrentLambda(G4double e) 687 { 688 SelectModel(e); 689 G4double x = 0.0; 690 if(currentModel) { 691 x = currentModel->CrossSectionPerVolume(currentMaterial,particle, 692 e,(*theCuts)[currentMaterialIndex]); 693 } 694 return x; 684 695 } 685 696
Note: See TracChangeset
for help on using the changeset viewer.