Ignore:
Timestamp:
Jun 18, 2010, 11:42:07 AM (14 years ago)
Author:
garnier
Message:

update geant4-09-04-beta-cand-01 interfaces-V09-03-09 vis-V09-03-08

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/source/processes/electromagnetic/utils/include/G4VEmProcess.hh

    r1228 r1315  
    2424// ********************************************************************
    2525//
    26 // $Id: G4VEmProcess.hh,v 1.55 2009/09/23 14:42:47 vnivanch Exp $
    27 // GEANT4 tag $Name: geant4-09-03 $
     26// $Id: G4VEmProcess.hh,v 1.60 2010/04/28 14:43:13 vnivanch Exp $
     27// GEANT4 tag $Name: geant4-09-04-beta-cand-01 $
    2828//
    2929// -------------------------------------------------------------------
     
    5656// 27-10-07 Virtual functions moved to source (V.Ivanchenko)
    5757// 15-07-08 Reorder class members for further multi-thread development (VI)
     58// 17-02-10 Added pointer currentParticle (VI)
    5859//
    5960// Class Description:
     
    158159
    159160  // It returns the cross section of the process per atom
    160   inline G4double ComputeCrossSectionPerAtom(G4double kineticEnergy,
    161                                              G4double Z, G4double A=0.,
    162                                              G4double cut=0.0);
    163 
    164   inline G4double MeanFreePath(const G4Track& track);
     161  G4double ComputeCrossSectionPerAtom(G4double kineticEnergy,
     162                                      G4double Z, G4double A=0.,
     163                                      G4double cut=0.0);
     164
     165  G4double MeanFreePath(const G4Track& track);
    165166
    166167  // It returns cross section per volume
     
    225226  G4VEmModel* GetModelByIndex(G4int idx = 0, G4bool ver = false);
    226227
     228  // access atom on which interaction happens
     229  const G4Element* GetCurrentElement() const;
     230
    227231  inline void SetLambdaFactor(G4double val);
    228232
     
    231235
    232236  inline void SetApplyCuts(G4bool val);
     237
     238  inline void SetBuildTableFlag(G4bool val);
    233239
    234240  //------------------------------------------------------------------------
     
    245251
    246252  inline G4double RecalculateLambda(G4double kinEnergy,
    247                                     const G4MaterialCutsCouple* couple);
     253                                    const G4MaterialCutsCouple* couple);
    248254
    249255  inline G4ParticleChangeForGamma* GetParticleChange();
     
    258264
    259265  inline G4double GetElectronEnergyCut();
    260 
    261   inline void SetBuildTableFlag(G4bool val);
    262266
    263267  inline void SetStartFromNullFlag(G4bool val);
     
    340344
    341345  const G4ParticleDefinition*  particle;
     346  const G4ParticleDefinition*  currentParticle;
    342347
    343348  // cash
     
    352357};
    353358
    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, currentCoupleIndex);
    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
    471 G4VEmModel* G4VEmProcess::SelectModel(G4double& kinEnergy, size_t index)
    472 {
    473   currentModel = modelManager->SelectModel(kinEnergy, index);
    474   currentModel->SetCurrentCouple(currentCouple);
    475   return currentModel;
    476 }
    477 
    478 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    479 
    480 inline
    481 G4VEmModel* G4VEmProcess::SelectModelForMaterial(G4double kinEnergy,
    482                                                  size_t& idxRegion) const
    483 {
    484   return modelManager->SelectModel(kinEnergy, idxRegion);
    485 }
    486 
    487 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    488 
    489 inline void G4VEmProcess::SetLambdaFactor(G4double val)
    490 {
    491   if(val > 0.0 && val <= 1.0) lambdaFactor = val;
    492 }
    493 
    494 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    495 
    496 inline void G4VEmProcess::SetIntegral(G4bool val)
    497 {
    498   if(particle && particle != theGamma) integral = val;
    499   if(integral) buildLambdaTable = true;
    500 }
    501 
    502 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    503 
    504 inline G4bool G4VEmProcess::IsIntegral() const
    505 {
    506   return integral;
    507 }
    508 
    509 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    510 
    511 inline void G4VEmProcess::SetApplyCuts(G4bool val)
    512 {
    513   applyCuts = val;
    514 }
    515 
    516 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    517 
    518 inline G4double G4VEmProcess::RecalculateLambda(G4double e,
    519                                                 const G4MaterialCutsCouple* couple)
    520 {
    521   DefineMaterial(couple);
    522   return ComputeCurrentLambda(e);
    523 }
    524 
    525 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    526 
    527 inline G4ParticleChangeForGamma* G4VEmProcess::GetParticleChange()
    528 {
    529   return &fParticleChange;
    530 }
    531 
    532 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    533 
    534 inline void G4VEmProcess::SetParticle(const G4ParticleDefinition* p)
    535 {
    536   particle = p;
    537 }
    538 
    539 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    540 
    541 inline void G4VEmProcess::SetSecondaryParticle(const G4ParticleDefinition* p)
    542 {
    543   secondaryParticle = p;
    544 }
    545 
    546 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     359// ======== Run time inline methods ================
    547360
    548361inline size_t G4VEmProcess::CurrentMaterialCutsCoupleIndex() const
     
    563376{
    564377  return (*theCutsElectron)[currentCoupleIndex];
    565 }
    566 
    567 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    568 
    569 inline void G4VEmProcess::SetBuildTableFlag(G4bool val)
    570 {
    571   buildLambdaTable = val;
    572   if(!val) integral = false;
    573 }
    574 
    575 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    576 
    577 inline void G4VEmProcess::SetStartFromNullFlag(G4bool val)
    578 {
    579   startFromNull = val;
    580 }
    581 
    582 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    583 
    584 inline void G4VEmProcess::InitialiseStep(const G4Track& track)
    585 {
    586   preStepKinEnergy = track.GetKineticEnergy();
    587   DefineMaterial(track.GetMaterialCutsCouple());
    588   SelectModel(preStepKinEnergy, currentCoupleIndex);
    589   if (theNumberOfInteractionLengthLeft < 0.0) mfpKinEnergy = DBL_MAX;
    590378}
    591379
     
    600388    mfpKinEnergy = DBL_MAX;
    601389  }
     390}
     391
     392//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     393
     394inline
     395G4VEmModel* G4VEmProcess::SelectModel(G4double& kinEnergy, size_t index)
     396{
     397  currentModel = modelManager->SelectModel(kinEnergy, index);
     398  currentModel->SetCurrentCouple(currentCouple);
     399  return currentModel;
     400}
     401
     402//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     403
     404inline
     405G4VEmModel* G4VEmProcess::SelectModelForMaterial(G4double kinEnergy,
     406                                                 size_t& idxRegion) const
     407{
     408  return modelManager->SelectModel(kinEnergy, idxRegion);
     409}
     410
     411//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     412
     413inline void G4VEmProcess::InitialiseStep(const G4Track& track)
     414{
     415  currentParticle = track.GetDefinition();
     416  preStepKinEnergy = track.GetKineticEnergy();
     417  DefineMaterial(track.GetMaterialCutsCouple());
     418  SelectModel(preStepKinEnergy, currentCoupleIndex);
     419  if (theNumberOfInteractionLengthLeft < 0.0) mfpKinEnergy = DBL_MAX;
     420}
     421
     422//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     423
     424inline G4double G4VEmProcess::GetLambdaFromTable(G4double e)
     425{
     426  return (((*theLambdaTable)[currentCoupleIndex])->Value(e));
     427}
     428
     429//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     430
     431inline G4double G4VEmProcess::ComputeCurrentLambda(G4double e)
     432{
     433  SelectModel(e, currentCoupleIndex);
     434  return currentModel->CrossSectionPerVolume(currentMaterial,currentParticle,
     435                                             e,(*theCuts)[currentCoupleIndex]);
     436}
     437
     438//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     439
     440inline G4double G4VEmProcess::GetCurrentLambda(G4double e)
     441{
     442  G4double x = 0.0;
     443  if(theLambdaTable) { x = GetLambdaFromTable(e); }
     444  else               { x = ComputeCurrentLambda(e); }
     445  return x;
     446}
     447
     448//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     449
     450inline G4double G4VEmProcess::GetLambda(G4double& kineticEnergy,
     451                                        const G4MaterialCutsCouple* couple)
     452{
     453  DefineMaterial(couple);
     454  return GetCurrentLambda(kineticEnergy);
     455}
     456
     457//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     458
     459inline G4double G4VEmProcess::RecalculateLambda(G4double e,
     460                                                const G4MaterialCutsCouple* couple)
     461{
     462  DefineMaterial(couple);
     463  return ComputeCurrentLambda(e);
    602464}
    603465
     
    625487}
    626488
    627 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    628 
    629 inline G4double G4VEmProcess::GetLambdaFromTable(G4double e)
    630 {
    631   return (((*theLambdaTable)[currentCoupleIndex])->Value(e));
    632 }
    633 
    634 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    635 
    636 inline G4double G4VEmProcess::GetCurrentLambda(G4double e)
    637 {
    638   G4double x = 0.0;
    639   if(theLambdaTable) { x = GetLambdaFromTable(e); }
    640   else               { x = ComputeCurrentLambda(e); }
    641   return x;
    642 }
    643 
    644 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    645 
    646 inline G4double G4VEmProcess::ComputeCurrentLambda(G4double e)
    647 {
    648   SelectModel(e, currentCoupleIndex);
    649   return currentModel->CrossSectionPerVolume(currentMaterial,particle,
    650                                              e,(*theCuts)[currentCoupleIndex]);
     489// ======== Get/Set inline methods used at initialisation ================
     490
     491inline void G4VEmProcess::SetLambdaBinning(G4int nbins)
     492{
     493  nLambdaBins = nbins;
     494}
     495
     496//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     497
     498inline G4int G4VEmProcess::LambdaBinning() const
     499{
     500  return nLambdaBins;
     501}
     502
     503//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     504
     505inline void G4VEmProcess::SetMinKinEnergy(G4double e)
     506{
     507  minKinEnergy = e;
     508}
     509
     510//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     511
     512inline G4double G4VEmProcess::MinKinEnergy() const
     513{
     514  return minKinEnergy;
     515}
     516
     517//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     518
     519inline void G4VEmProcess::SetMaxKinEnergy(G4double e)
     520{
     521  maxKinEnergy = e;
     522}
     523
     524//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     525
     526inline G4double G4VEmProcess::MaxKinEnergy() const
     527{
     528  return maxKinEnergy;
     529}
     530
     531//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     532
     533inline void G4VEmProcess::SetPolarAngleLimit(G4double val)
     534{
     535  if(val < 0.0)     polarAngleLimit = 0.0;
     536  else if(val > pi) polarAngleLimit = pi;
     537  else              polarAngleLimit = val;
     538}
     539
     540//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     541
     542inline G4double G4VEmProcess::PolarAngleLimit() const
     543{
     544  return polarAngleLimit;
     545}
     546
     547//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     548
     549inline const G4PhysicsTable* G4VEmProcess::LambdaTable() const
     550{
     551  return theLambdaTable;
     552}
     553
     554//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     555
     556inline const G4ParticleDefinition* G4VEmProcess::Particle() const
     557{
     558  return particle;
     559}
     560
     561//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     562
     563inline const G4ParticleDefinition* G4VEmProcess::SecondaryParticle() const
     564{
     565  return secondaryParticle;
     566}
     567
     568//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     569
     570inline void G4VEmProcess::SetLambdaFactor(G4double val)
     571{
     572  if(val > 0.0 && val <= 1.0) { lambdaFactor = val; }
     573}
     574
     575//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     576
     577inline void G4VEmProcess::SetIntegral(G4bool val)
     578{
     579  if(particle && particle != theGamma) { integral = val; }
     580  if(integral) { buildLambdaTable = true; }
     581}
     582
     583//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     584
     585inline G4bool G4VEmProcess::IsIntegral() const
     586{
     587  return integral;
     588}
     589
     590//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     591
     592inline void G4VEmProcess::SetApplyCuts(G4bool val)
     593{
     594  applyCuts = val;
     595}
     596
     597//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     598
     599inline void G4VEmProcess::SetBuildTableFlag(G4bool val)
     600{
     601  buildLambdaTable = val;
     602  if(!val) { integral = false; }
     603}
     604
     605//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     606
     607inline G4ParticleChangeForGamma* G4VEmProcess::GetParticleChange()
     608{
     609  return &fParticleChange;
     610}
     611
     612//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     613
     614inline void G4VEmProcess::SetParticle(const G4ParticleDefinition* p)
     615{
     616  particle = p;
     617  currentParticle = p;
     618}
     619
     620//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     621
     622inline void G4VEmProcess::SetSecondaryParticle(const G4ParticleDefinition* p)
     623{
     624  secondaryParticle = p;
     625}
     626
     627//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     628
     629inline void G4VEmProcess::SetStartFromNullFlag(G4bool val)
     630{
     631  startFromNull = val;
    651632}
    652633
Note: See TracChangeset for help on using the changeset viewer.