- Timestamp:
- Jun 18, 2010, 11:42:07 AM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/source/processes/electromagnetic/utils/include/G4VMultipleScattering.hh
r1228 r1315 24 24 // ******************************************************************** 25 25 // 26 // $Id: G4VMultipleScattering.hh,v 1.6 2 2009/10/29 17:56:04vnivanch Exp $27 // GEANT4 tag $Name: geant4-09-0 3$26 // $Id: G4VMultipleScattering.hh,v 1.63 2010/03/10 18:29:51 vnivanch Exp $ 27 // GEANT4 tag $Name: geant4-09-04-beta-cand-01 $ 28 28 // 29 29 // ------------------------------------------------------------------- … … 154 154 // The function overloads the corresponding function of the base 155 155 // class. 156 inlineG4double PostStepGetPhysicalInteractionLength(156 G4double PostStepGetPhysicalInteractionLength( 157 157 const G4Track&, 158 158 G4double previousStepSize, … … 160 160 161 161 // Along step actions 162 inlineG4VParticleChange* AlongStepDoIt(const G4Track&, const G4Step&);162 G4VParticleChange* AlongStepDoIt(const G4Track&, const G4Step&); 163 163 164 164 // Post step actions 165 inlineG4VParticleChange* PostStepDoIt(const G4Track&, const G4Step&);165 G4VParticleChange* PostStepDoIt(const G4Track&, const G4Step&); 166 166 167 167 // This method does not used for tracking, it is intended only for tests 168 inlineG4double ContinuousStepLimit(const G4Track& track,169 170 171 168 G4double ContinuousStepLimit(const G4Track& track, 169 G4double previousStepSize, 170 G4double currentMinimalStep, 171 G4double& currentSafety); 172 172 173 173 //------------------------------------------------------------------------ … … 318 318 }; 319 319 320 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 321 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 322 323 inline G4double G4VMultipleScattering::ContinuousStepLimit( 324 const G4Track& track, 325 G4double previousStepSize, 326 G4double currentMinimalStep, 327 G4double& currentSafety) 328 { 329 return GetContinuousStepLimit(track,previousStepSize,currentMinimalStep, 330 currentSafety); 331 } 332 333 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 334 335 inline void G4VMultipleScattering::SetBinning(G4int nbins) 336 { 337 nBins = nbins; 338 } 339 340 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 341 342 inline G4int G4VMultipleScattering::Binning() const 343 { 344 return nBins; 345 } 346 347 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 348 349 inline void G4VMultipleScattering::SetMinKinEnergy(G4double e) 350 { 351 minKinEnergy = e; 352 } 353 354 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 355 356 inline G4double G4VMultipleScattering::MinKinEnergy() const 357 { 358 return minKinEnergy; 359 } 360 361 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 362 363 inline void G4VMultipleScattering::SetMaxKinEnergy(G4double e) 364 { 365 maxKinEnergy = e; 366 } 367 368 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 369 370 inline G4double G4VMultipleScattering::MaxKinEnergy() const 371 { 372 return maxKinEnergy; 373 } 374 375 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 376 377 inline void G4VMultipleScattering::SetBuildLambdaTable(G4bool val) 378 { 379 buildLambdaTable = val; 380 } 381 382 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 383 384 inline G4PhysicsTable* G4VMultipleScattering::LambdaTable() const 385 { 386 return theLambdaTable; 387 } 388 389 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 390 391 inline const G4ParticleDefinition* G4VMultipleScattering::Particle() const 392 { 393 return currentParticle; 394 } 395 396 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 397 398 inline G4VEmModel* G4VMultipleScattering::SelectModel(G4double kinEnergy) 399 { 400 return modelManager->SelectModel(kinEnergy, currentMaterialIndex); 401 } 402 403 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 404 405 inline G4VEmModel* G4VMultipleScattering::SelectModelForMaterial( 406 G4double kinEnergy, size_t& idxRegion) const 407 { 408 return modelManager->SelectModel(kinEnergy, idxRegion); 409 } 410 411 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 412 413 inline G4bool G4VMultipleScattering::LateralDisplasmentFlag() const 414 { 415 return latDisplasment; 416 } 417 418 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 419 420 inline void G4VMultipleScattering::SetLateralDisplasmentFlag(G4bool val) 421 { 422 latDisplasment = val; 423 } 424 425 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 426 427 inline G4double G4VMultipleScattering::Skin() const 428 { 429 return skin; 430 } 431 432 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 433 434 inline void G4VMultipleScattering::SetSkin(G4double val) 435 { 436 if(val < 1.0) skin = 0.0; 437 else skin = val; 438 } 439 440 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 441 442 inline G4double G4VMultipleScattering::RangeFactor() const 443 { 444 return facrange; 445 } 446 447 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 448 449 inline void G4VMultipleScattering::SetRangeFactor(G4double val) 450 { 451 if(val > 0.0) facrange = val; 452 } 453 454 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 455 456 inline G4double G4VMultipleScattering::GeomFactor() const 457 { 458 return facgeom; 459 } 460 461 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 462 463 inline void G4VMultipleScattering::SetGeomFactor(G4double val) 464 { 465 if(val > 0.0) facgeom = val; 466 } 467 468 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 469 470 inline G4double G4VMultipleScattering::PolarAngleLimit() const 471 { 472 return polarAngleLimit; 473 } 474 475 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 476 477 inline void G4VMultipleScattering::SetPolarAngleLimit(G4double val) 478 { 479 if(val < 0.0) polarAngleLimit = 0.0; 480 else if(val > pi) polarAngleLimit = pi; 481 else polarAngleLimit = val; 482 } 483 484 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 485 486 inline G4MscStepLimitType G4VMultipleScattering::StepLimitType() const 487 { 488 return stepLimit; 489 } 490 491 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 492 493 inline void G4VMultipleScattering::SetStepLimitType(G4MscStepLimitType val) 494 { 495 stepLimit = val; 496 if(val == fMinimal) facrange = 0.2; 320 // ======== Run time inline methods ================ 321 322 inline const G4MaterialCutsCouple* 323 G4VMultipleScattering::CurrentMaterialCutsCouple() const 324 { 325 return currentCouple; 326 } 327 328 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 329 330 inline 331 void G4VMultipleScattering::DefineMaterial(const G4MaterialCutsCouple* couple) 332 { 333 if(couple != currentCouple) { 334 currentCouple = couple; 335 currentMaterialIndex = couple->GetIndex(); 336 } 497 337 } 498 338 … … 509 349 x = currentModel->CrossSection(currentCouple,p,e); 510 350 } 511 if(x > DBL_MIN) x = 1./x;512 else x = DBL_MAX;351 if(x > DBL_MIN) { x = 1./x; } 352 else { x = DBL_MAX; } 513 353 return x; 514 354 } … … 516 356 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 517 357 518 inline 519 void G4VMultipleScattering::DefineMaterial(const G4MaterialCutsCouple* couple) 520 { 521 if(couple != currentCouple) { 522 currentCouple = couple; 523 currentMaterialIndex = couple->GetIndex(); 524 } 525 } 526 527 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 528 529 inline const G4MaterialCutsCouple* 530 G4VMultipleScattering::CurrentMaterialCutsCouple() const 531 { 532 return currentCouple; 533 } 534 535 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 536 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 537 538 // Follwoing methods are virtual, they are inlined because they applied at 539 // each simulation step and some compilers may inline these methods 540 541 inline G4double 542 G4VMultipleScattering::PostStepGetPhysicalInteractionLength( 543 const G4Track&, G4double, G4ForceCondition* condition) 544 { 545 *condition = Forced; 546 return DBL_MAX; 547 } 548 549 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 550 551 inline G4VParticleChange* 552 G4VMultipleScattering::AlongStepDoIt(const G4Track& track, const G4Step& step) 553 { 554 if(currentModel->IsActive(track.GetKineticEnergy())) { 555 fParticleChange.ProposeTrueStepLength(currentModel->ComputeTrueStepLength(step.GetStepLength())); 556 } 557 return &fParticleChange; 558 } 559 560 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 561 562 inline G4VParticleChange* 563 G4VMultipleScattering::PostStepDoIt(const G4Track& track, const G4Step& step) 564 { 565 fParticleChange.Initialize(track); 566 if(currentModel->IsActive(track.GetKineticEnergy())) { 567 currentModel->SampleScattering(track.GetDynamicParticle(), 568 step.GetPostStepPoint()->GetSafety()); 569 } 570 return &fParticleChange; 358 inline G4VEmModel* G4VMultipleScattering::SelectModel(G4double kinEnergy) 359 { 360 return modelManager->SelectModel(kinEnergy, currentMaterialIndex); 361 } 362 363 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 364 365 inline G4VEmModel* G4VMultipleScattering::SelectModelForMaterial( 366 G4double kinEnergy, size_t& idxRegion) const 367 { 368 return modelManager->SelectModel(kinEnergy, idxRegion); 369 } 370 371 // ======== Get/Set inline methods used at initialisation ================ 372 373 inline void G4VMultipleScattering::SetBinning(G4int nbins) 374 { 375 nBins = nbins; 376 } 377 378 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 379 380 inline G4int G4VMultipleScattering::Binning() const 381 { 382 return nBins; 383 } 384 385 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 386 387 inline void G4VMultipleScattering::SetMinKinEnergy(G4double e) 388 { 389 minKinEnergy = e; 390 } 391 392 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 393 394 inline G4double G4VMultipleScattering::MinKinEnergy() const 395 { 396 return minKinEnergy; 397 } 398 399 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 400 401 inline void G4VMultipleScattering::SetMaxKinEnergy(G4double e) 402 { 403 maxKinEnergy = e; 404 } 405 406 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 407 408 inline G4double G4VMultipleScattering::MaxKinEnergy() const 409 { 410 return maxKinEnergy; 411 } 412 413 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 414 415 inline void G4VMultipleScattering::SetBuildLambdaTable(G4bool val) 416 { 417 buildLambdaTable = val; 418 } 419 420 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 421 422 inline G4PhysicsTable* G4VMultipleScattering::LambdaTable() const 423 { 424 return theLambdaTable; 425 } 426 427 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 428 429 inline const G4ParticleDefinition* G4VMultipleScattering::Particle() const 430 { 431 return currentParticle; 432 } 433 434 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 435 436 inline G4bool G4VMultipleScattering::LateralDisplasmentFlag() const 437 { 438 return latDisplasment; 439 } 440 441 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 442 443 inline void G4VMultipleScattering::SetLateralDisplasmentFlag(G4bool val) 444 { 445 latDisplasment = val; 446 } 447 448 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 449 450 inline G4double G4VMultipleScattering::Skin() const 451 { 452 return skin; 453 } 454 455 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 456 457 inline void G4VMultipleScattering::SetSkin(G4double val) 458 { 459 if(val < 1.0) { skin = 0.0; } 460 else { skin = val; } 461 } 462 463 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 464 465 inline G4double G4VMultipleScattering::RangeFactor() const 466 { 467 return facrange; 468 } 469 470 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 471 472 inline void G4VMultipleScattering::SetRangeFactor(G4double val) 473 { 474 if(val > 0.0) facrange = val; 475 } 476 477 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 478 479 inline G4double G4VMultipleScattering::GeomFactor() const 480 { 481 return facgeom; 482 } 483 484 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 485 486 inline void G4VMultipleScattering::SetGeomFactor(G4double val) 487 { 488 if(val > 0.0) facgeom = val; 489 } 490 491 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 492 493 inline G4double G4VMultipleScattering::PolarAngleLimit() const 494 { 495 return polarAngleLimit; 496 } 497 498 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 499 500 inline void G4VMultipleScattering::SetPolarAngleLimit(G4double val) 501 { 502 if(val < 0.0) { polarAngleLimit = 0.0; } 503 else if(val > CLHEP::pi) { polarAngleLimit = CLHEP::pi; } 504 else { polarAngleLimit = val; } 505 } 506 507 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 508 509 inline G4MscStepLimitType G4VMultipleScattering::StepLimitType() const 510 { 511 return stepLimit; 512 } 513 514 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 515 516 inline void G4VMultipleScattering::SetStepLimitType(G4MscStepLimitType val) 517 { 518 stepLimit = val; 519 if(val == fMinimal) { facrange = 0.2; } 571 520 } 572 521
Note: See TracChangeset
for help on using the changeset viewer.