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

Location:
trunk/source/processes/electromagnetic/utils/include
Files:
9 edited

Legend:

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

    r1228 r1315  
    2424// ********************************************************************
    2525//
    26 // $Id: G4EmCalculator.hh,v 1.19 2009/11/11 23:59:48 vnivanch Exp $
    27 // GEANT4 tag $Name: geant4-09-03 $
     26// $Id: G4EmCalculator.hh,v 1.20 2010/04/13 10:58:03 vnivanch Exp $
     27// GEANT4 tag $Name: geant4-09-04-beta-cand-01 $
    2828//
    2929//
     
    249249  const G4Material*            currentMaterial;
    250250  const G4ParticleDefinition*  currentParticle;
     251  const G4ParticleDefinition*  lambdaParticle;
    251252  const G4ParticleDefinition*  baseParticle;
    252253  const G4PhysicsTable*        currentLambda;
     
    260261
    261262  G4String                     currentName;
     263  G4String                     lambdaName;
    262264  G4double                     currentCut;
    263265  G4double                     chargeSquare;
  • trunk/source/processes/electromagnetic/utils/include/G4EmConfigurator.hh

    r1228 r1315  
    2424// ********************************************************************
    2525//
    26 // $Id: G4EmConfigurator.hh,v 1.2 2008/11/21 12:30:29 vnivanch Exp $
    27 // GEANT4 tag $Name: geant4-09-03 $
     26// $Id: G4EmConfigurator.hh,v 1.3 2010/04/12 11:44:40 vnivanch Exp $
     27// GEANT4 tag $Name: geant4-09-04-beta-cand-01 $
    2828//
    2929// -------------------------------------------------------------------
     
    5858//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
    5959
     60class G4VEnergyLossProcess;
     61class G4VEmProcess;
     62class G4VMultipleScattering;
     63
    6064class G4EmConfigurator
    6165{
    6266public:
    6367 
    64   G4EmConfigurator();
     68  G4EmConfigurator(G4int verboseLevel = 1);
    6569 
    6670  ~G4EmConfigurator();
    6771
    68   // Add EM model to the list of extra models potentially to be
    69   // declared for the G4Region and energy interval
    70   //
    71   void AddExtraEmModel(const G4String& particleName,
    72                        G4VEmModel*, G4VEmFluctuationModel* fm = 0);
    73 
    74   // Declare EM model for particle type and process to
    75   // be active for the G4Region and energy interval
    76   // The model should be previously added to the configurator
    77   // or be "dummy"
    78   //
    79   void AddModelForRegion(const G4String& particleName,
    80                          const G4String& processName,
    81                          const G4String& modelName,
    82                          const G4String& regionName = "",
    83                          G4double emin = 0.0,
    84                          G4double emax = DBL_MAX,
    85                          const G4String& flucModelName = "");
    86 
    8772  // Set EM model for particle type and process to
    8873  // be active for the G4Region and energy interval
     74  // The model will be added to the list
    8975  //
    9076  void SetExtraEmModel(const G4String& particleName,
     
    9783
    9884  // Add all previously declared models to corresponding processes
     85  // Can be called in ConstructPhysics
     86  //
    9987  void AddModels();
     88
     89  // These methods called by G4LossTableManager
     90  //
     91  void PrepareModels(const G4ParticleDefinition* aParticle,
     92                     G4VEnergyLossProcess* p);
     93
     94  void PrepareModels(const G4ParticleDefinition* aParticle,
     95                     G4VEmProcess* p);
     96
     97  void PrepareModels(const G4ParticleDefinition* aParticle,
     98                     G4VMultipleScattering* p);
     99
     100  void Clear();
     101
     102  inline void SetVerbose(G4int value);
    100103
    101104private:
    102105
    103   void SetModelForRegion(const G4String& particleName,
     106  G4Region* FindRegion(const G4String&);
     107
     108  void SetModelForRegion(G4VEmModel* model,
     109                         G4VEmFluctuationModel* fm,
     110                         G4Region* reg,
     111                         const G4String& particleName,
    104112                         const G4String& processName,
    105                          const G4String& modelName,
    106                          const G4String& regionName,
    107                          const G4String& flucModelName,
    108113                         G4double emin,
    109114                         G4double emax);
     115
     116  G4bool UpdateModelEnergyRange(G4VEmModel* mod,
     117                                G4double emin, G4double emax);
    110118
    111119  // hide assignment operator
     
    113121  G4EmConfigurator(const G4EmConfigurator&);
    114122
     123  std::vector<G4VEmModel*> models; 
     124  std::vector<G4VEmFluctuationModel*> flucModels; 
    115125  std::vector<G4String> particles; 
    116126  std::vector<G4String> processes; 
    117   std::vector<G4String> models; 
    118127  std::vector<G4String> regions; 
    119   std::vector<G4String> flucModels; 
    120128  std::vector<G4double> lowEnergy;
    121129  std::vector<G4double> highEnergy;
    122130 
    123   std::vector<G4String> particleList; 
    124   std::vector<G4VEmModel*> modelList;
    125   std::vector<G4VEmFluctuationModel*> flucModelList;
    126 
    127131  G4int index;
     132  G4int verbose;
    128133};
    129134
    130135//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
     136
     137inline void G4EmConfigurator::SetVerbose(G4int value)
     138{
     139  verbose = value;
     140}
    131141
    132142#endif
  • trunk/source/processes/electromagnetic/utils/include/G4EmCorrections.hh

    r1228 r1315  
    2424// ********************************************************************
    2525//
    26 // $Id: G4EmCorrections.hh,v 1.24 2008/09/12 14:44:48 vnivanch Exp $
    27 // GEANT4 tag $Name: geant4-09-03 $
     26// $Id: G4EmCorrections.hh,v 1.25 2010/06/04 09:28:46 vnivanch Exp $
     27// GEANT4 tag $Name: geant4-09-04-beta-cand-01 $
    2828//
    2929// -------------------------------------------------------------------
     
    5656
    5757#include "globals.hh"
    58 #include "G4AtomicShells.hh"
    5958#include "G4ionEffectiveCharge.hh"
    6059#include "G4Material.hh"
     
    263262  G4int     nbinCorr;
    264263
    265   G4AtomicShells        shells;
    266264  G4ionEffectiveCharge  effCharge;
    267265
     
    356354    tmax  = 2.0*electron_mass_c2*bg2 /(1. + 2.0*gamma*ratio + ratio*ratio);
    357355    charge  = p->GetPDGCharge()/eplus;
    358     if(charge < 1.5)  {q2 = charge*charge;}
    359     else {
    360       q2 = effCharge.EffectiveChargeSquareRatio(p,mat,kinEnergy);
    361       charge = std::sqrt(q2);
    362     }
     356    //if(charge < 1.5)  {q2 = charge*charge;}
     357    //else {
     358    //  q2 = effCharge.EffectiveChargeSquareRatio(p,mat,kinEnergy);
     359    //  charge = std::sqrt(q2);
     360    //}
     361    if(charge > 1.5) { charge = effCharge.EffectiveCharge(p,mat,kinEnergy); }
     362    q2 = charge*charge;
    363363  }
    364364  if(mat != material) {
  • trunk/source/processes/electromagnetic/utils/include/G4LossTableManager.hh

    r1228 r1315  
    2424// ********************************************************************
    2525//
    26 // $Id: G4LossTableManager.hh,v 1.55 2009/10/29 19:25:28 vnivanch Exp $
    27 // GEANT4 tag $Name: geant4-09-03 $
     26// $Id: G4LossTableManager.hh,v 1.58 2010/04/27 16:59:52 vnivanch Exp $
     27// GEANT4 tag $Name: geant4-09-04-beta-cand-01 $
    2828//
    2929//
     
    6161// 12-02-07 Add SetSkin, SetLinearLossLimit (V.Ivanchenko)
    6262// 18-06-07 Move definition of msc parameters to G4EmProcessOptions (V.Ivanchenko)
     63// 12-04-10 Added PreparePhsyicsTables and BuildPhysicsTables entries (V.Ivanchenko)
    6364//
    6465// Class Description:
     
    9394class G4EmConfigurator;
    9495class G4LossTableBuilder;
     96class G4Region;
    9597
    9698class G4LossTableManager
     
    103105  ~G4LossTableManager();
    104106
     107  //-------------------------------------------------
     108  // called from destructor
     109  //-------------------------------------------------
     110
    105111  void Clear();
    106112
    107   // get the DEDX or the range for a given particle/energy/material
     113  //-------------------------------------------------
     114  // initialisation before a new run
     115  //-------------------------------------------------
     116
     117  void PreparePhysicsTable(const G4ParticleDefinition* aParticle,
     118                           G4VEnergyLossProcess* p);
     119  void PreparePhysicsTable(const G4ParticleDefinition* aParticle,
     120                           G4VEmProcess* p);
     121  void PreparePhysicsTable(const G4ParticleDefinition* aParticle,
     122                           G4VMultipleScattering* p);
     123  void BuildPhysicsTable(const G4ParticleDefinition* aParticle);
     124  void BuildPhysicsTable(const G4ParticleDefinition* aParticle,
     125                         G4VEnergyLossProcess* p);
     126
     127  //-------------------------------------------------
     128  // Run time access to DEDX, range, energy for a given particle,
     129  // energy, and G4MaterialCutsCouple
     130  //-------------------------------------------------
     131
    108132  inline G4double GetDEDX(
    109133    const G4ParticleDefinition *aParticle,
     
    141165          G4double& length);
    142166
    143   // to be called only by energy loss processes
     167  //-------------------------------------------------
     168  // Methods to be called only at initialisation
     169  //-------------------------------------------------
     170
    144171  void Register(G4VEnergyLossProcess* p);
    145172
     
    162189  void DeRegister(G4VEmFluctuationModel* p);
    163190
    164   void EnergyLossProcessIsInitialised(const G4ParticleDefinition* aParticle,
    165                                       G4VEnergyLossProcess* p);
    166  
    167191  void RegisterIon(const G4ParticleDefinition* aParticle,
    168192                   G4VEnergyLossProcess* p);
     
    171195                             G4VEnergyLossProcess* p);
    172196
    173   void BuildPhysicsTable(const G4ParticleDefinition* aParticle,
    174                          G4VEnergyLossProcess* p);
    175 
    176197  void SetLossFluctuations(G4bool val);
    177198
    178   void SetSubCutoff(G4bool val);
     199  void SetSubCutoff(G4bool val, const G4Region* r=0);
    179200
    180201  void SetIntegral(G4bool val);
     
    198219  void SetLambdaBinning(G4int val);
    199220
     221  G4int GetNumberOfBinsPerDecade() const;
     222
    200223  void SetStepFunction(G4double v1, G4double v2);
    201224
     
    214237  void SetVerbose(G4int val);
    215238
     239  //-------------------------------------------------
     240  // Access methods
     241  //-------------------------------------------------
     242
    216243  G4EnergyLossMessenger* GetMessenger();
    217244
     
    241268
    242269private:
     270
     271  //-------------------------------------------------
     272  // Private methods and members
     273  //-------------------------------------------------
    243274
    244275  G4LossTableManager();
     
    251282  void ParticleHaveNoLoss(const G4ParticleDefinition* aParticle);
    252283
    253   void SetParameters(G4VEnergyLossProcess*);
     284  void SetParameters(const G4ParticleDefinition* aParticle,
     285                     G4VEnergyLossProcess*);
    254286
    255287  void CopyDEDXTables();
    256288
    257 private:
    258 
    259289  static G4LossTableManager* theInstance;
    260290
    261291  typedef const G4ParticleDefinition* PD;
     292
    262293  std::map<PD,G4VEnergyLossProcess*,std::less<PD> > loss_map;
    263294
     
    279310  PD                    currentParticle;
    280311  PD                    theElectron;
     312  PD                    firstParticle;
    281313
    282314  G4int n_loss;
     
    284316
    285317  G4bool all_tables_are_built;
    286   //  G4bool first_entry;
     318  G4bool startInitialisation;
     319
    287320  G4bool lossFluctuationFlag;
    288321  G4bool subCutoffFlag;
     
    290323  G4bool integral;
    291324  G4bool integralActive;
    292   G4bool all_tables_are_stored;
    293325  G4bool buildCSDARange;
    294326  G4bool minEnergyActive;
     
    314346  G4EmConfigurator*           emConfigurator;
    315347
    316   const G4ParticleDefinition* firstParticle;
     348  G4int nbinsLambda;
     349  G4int nbinsPerDecade;
    317350  G4int verbose;
    318351
     
    322355//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.....
    323356
     357inline G4VEnergyLossProcess* G4LossTableManager::GetEnergyLossProcess(
     358          const G4ParticleDefinition *aParticle)
     359{
     360  if(aParticle != currentParticle) {
     361    currentParticle = aParticle;
     362    std::map<PD,G4VEnergyLossProcess*,std::less<PD> >::const_iterator pos;
     363    if ((pos = loss_map.find(aParticle)) != loss_map.end()) {
     364      currentLoss = (*pos).second;
     365    } else {
     366      currentLoss = 0;
     367     // ParticleHaveNoLoss(aParticle);
     368    }
     369  }
     370  return currentLoss;
     371}
     372
     373//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
     374
    324375inline G4double G4LossTableManager::GetDEDX(
    325376          const G4ParticleDefinition *aParticle,
     
    327378          const G4MaterialCutsCouple *couple)
    328379{
    329   if(aParticle != currentParticle) GetEnergyLossProcess(aParticle);
     380  if(aParticle != currentParticle) { GetEnergyLossProcess(aParticle); }
    330381  G4double x;
    331   if(currentLoss) x = currentLoss->GetDEDX(kineticEnergy, couple);
    332   else            x = G4EnergyLossTables::GetDEDX(
    333                       currentParticle,kineticEnergy,couple,false);
     382  if(currentLoss) { x = currentLoss->GetDEDX(kineticEnergy, couple); }
     383  else            { x = G4EnergyLossTables::GetDEDX(currentParticle,
     384                                                    kineticEnergy,couple,false); }
    334385  return x;
    335386}
     
    342393          const G4MaterialCutsCouple *couple)
    343394{
    344   if(aParticle != currentParticle) GetEnergyLossProcess(aParticle);
     395  if(aParticle != currentParticle) { GetEnergyLossProcess(aParticle); }
    345396  G4double x = 0.0;
    346   if(currentLoss) x = currentLoss->GetDEDXForSubsec(kineticEnergy, couple);
     397  if(currentLoss) { x = currentLoss->GetDEDXForSubsec(kineticEnergy, couple); }
    347398  return x;
    348399}
     
    355406          const G4MaterialCutsCouple *couple)
    356407{
    357   if(aParticle != currentParticle) GetEnergyLossProcess(aParticle);
     408  if(aParticle != currentParticle) { GetEnergyLossProcess(aParticle); }
    358409  G4double x = DBL_MAX;
    359   if(currentLoss) x = currentLoss->GetCSDARange(kineticEnergy, couple);
     410  if(currentLoss) { x = currentLoss->GetCSDARange(kineticEnergy, couple); }
    360411  return x;
    361412}
     
    368419          const G4MaterialCutsCouple *couple)
    369420{
    370   if(aParticle != currentParticle) GetEnergyLossProcess(aParticle);
     421  if(aParticle != currentParticle) { GetEnergyLossProcess(aParticle); }
    371422  G4double x;
    372   if(currentLoss) x = currentLoss->GetRangeForLoss(kineticEnergy, couple);
    373   else    
    374     x = G4EnergyLossTables::GetRange(currentParticle,kineticEnergy,couple,false);
     423  if(currentLoss) { x = currentLoss->GetRangeForLoss(kineticEnergy, couple); }
     424  else { x = G4EnergyLossTables::GetRange(currentParticle,kineticEnergy,
     425                                          couple,false); }
    375426  return x;
    376427}
     
    383434          const G4MaterialCutsCouple *couple)
    384435{
    385   if(aParticle != currentParticle) GetEnergyLossProcess(aParticle);
     436  if(aParticle != currentParticle) { GetEnergyLossProcess(aParticle); }
    386437  G4double x;
    387   if(currentLoss) x = currentLoss->GetRange(kineticEnergy, couple);
    388   else    
    389     x = G4EnergyLossTables::GetRange(currentParticle,kineticEnergy,couple,false);
     438  if(currentLoss) { x = currentLoss->GetRange(kineticEnergy, couple); }
     439  else { x = G4EnergyLossTables::GetRange(currentParticle,kineticEnergy,
     440                                          couple,false); }
    390441  return x;
    391442}
     
    398449          const G4MaterialCutsCouple *couple)
    399450{
    400   if(aParticle != currentParticle) GetEnergyLossProcess(aParticle);
     451  if(aParticle != currentParticle) { GetEnergyLossProcess(aParticle); }
    401452  G4double x;
    402   if(currentLoss) x = currentLoss->GetKineticEnergy(range, couple);
    403   else            x = G4EnergyLossTables::GetPreciseEnergyFromRange(
    404                       currentParticle,range,couple,false);
     453  if(currentLoss) { x = currentLoss->GetKineticEnergy(range, couple); }
     454  else { x = G4EnergyLossTables::GetPreciseEnergyFromRange(currentParticle,range,
     455                                                           couple,false); }
    405456  return x;
    406457}
     
    428479//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
    429480
    430 inline G4VEnergyLossProcess* G4LossTableManager::GetEnergyLossProcess(
    431           const G4ParticleDefinition *aParticle)
    432 {
    433   if(aParticle != currentParticle) {
    434     currentParticle = aParticle;
    435     std::map<PD,G4VEnergyLossProcess*,std::less<PD> >::const_iterator pos;
    436     if ((pos = loss_map.find(aParticle)) != loss_map.end()) {
    437       currentLoss = (*pos).second;
    438     } else {
    439       currentLoss = 0;
    440      // ParticleHaveNoLoss(aParticle);
    441     }
    442   }
    443   return currentLoss;
    444 }
    445 
    446 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
    447 
    448481#endif
    449482
  • trunk/source/processes/electromagnetic/utils/include/G4VAtomDeexcitation.hh

    r1228 r1315  
    2424// ********************************************************************
    2525//
    26 // $Id: G4VAtomDeexcitation.hh,v 1.1 2009/07/09 11:42:52 vnivanch Exp $
    27 // GEANT4 tag $Name: geant4-09-03 $
     26// $Id: G4VAtomDeexcitation.hh,v 1.3 2010/03/30 09:19:56 vnivanch Exp $
     27// GEANT4 tag $Name: geant4-09-04-beta-cand-01 $
    2828//
    2929// -------------------------------------------------------------------
     
    6363  virtual ~G4VAtomDeexcitation();
    6464
    65   //initialization
     65  //========== initialization ==========
     66
    6667  virtual void PreparePhysicsTable(const G4ParticleDefinition&);
    6768  virtual void BuildPhysicsTable(const G4ParticleDefinition&);
    68 
    69   // Get atomic shell by shell index, used by discrete processes
    70   // (for example, photoelectric), when shell vacancy sampled by the model
    71   virtual const G4AtomicChell* GetAtomicShell(G4int Z, G4int ShellIndex);
    72 
    73   // selection of random shell for ionisation process
    74   virtual const G4AtomicShell* SelectRandomShell(const G4DynamicParticle*,
    75                                                  G4int Z);
    76 
    77   // generation of deexcitation for given atom and shell vacancy
    78   virtual void GenerateParticles(std::vector<G4DynamicParticle*>*,
    79                                  const G4AtomicChell*, G4int Z);
    80 
    81   // access or compute PIXE cross section
    82   virtual G4double GetPIXECrossSection (const G4ParticleDefinition*,
    83                                         G4int Z, G4double kinE);
    84 
    85   // calculate PIXE cross section from the models
    86   virtual G4double CalculatePIXECrossSection(const G4ParticleDefinition*,
    87                                              G4int Z, G4double kinE);
    88 
    89   // Sampling of PIXE for ionisation processes
    90   virtual void
    91   AlongStepDeexcitation(std::vector<G4DynamicParticle*>* secVect,
    92                         const G4DynamicParticle* icidentParticle,
    93                         const G4MaterialCutsCouple*,
    94                         G4double trueStepLenght,
    95                         G4double eLoss);
    96 
    97   // Check if deexcitation is active for a given geometry volume
    98   G4bool CheckActiveRegion(G4int coupleIndex);
    99 
    100   // Access flags defined in the CheckActiveVolume method
    101   inline G4bool IsFluorescenceActive() const;
    102   inline G4bool IsPIXECrossSectionActive() const;
    10369
    10470  // PIXE model name
     
    11581  void SetPIXECrossSectionActiveRegion(const G4String& rname = "");
    11682
     83  //========== Run time methods ==========
     84
     85  // Check if deexcitation is active for a given geometry volume
     86  G4bool CheckFluorescenceActiveRegion(G4int coupleIndex);
     87
     88  // Check if deexcitation is active for a given geometry volume
     89  G4bool CheckPIXEActiveRegion(G4int coupleIndex);
     90
     91  // Get atomic shell by shell index, used by discrete processes
     92  // (for example, photoelectric), when shell vacancy sampled by the model
     93  const G4AtomicShell* GetAtomicShell(G4int Z, G4int ShellIndex);
     94
     95  // selection of random shell for ionisation process
     96  virtual const G4AtomicShell* SelectRandomShell(const G4DynamicParticle*,
     97                                                 G4int Z);
     98
     99  // generation of deexcitation for given atom and shell vacancy
     100  virtual void GenerateParticles(std::vector<G4DynamicParticle*>*,
     101                                 const G4AtomicShell*, G4int Z) = 0;
     102
     103  // access or compute PIXE cross section
     104  virtual G4double GetPIXECrossSection (const G4ParticleDefinition*,
     105                                        G4int Z, G4double kinE) = 0;
     106
     107  // calculate PIXE cross section from the models
     108  virtual G4double CalculatePIXECrossSection(const G4ParticleDefinition*,
     109                                             G4int Z, G4double kinE) = 0;
     110
     111  // Sampling of PIXE for ionisation processes
     112  virtual void
     113  AlongStepDeexcitation(std::vector<G4DynamicParticle*>* secVect,
     114                        const G4DynamicParticle* icidentParticle,
     115                        const G4MaterialCutsCouple*,
     116                        G4double trueStepLenght,
     117                        G4double eLoss) = 0;
     118
     119
     120
    117121private:
    118122
     
    122126
    123127  G4String namePIXE;
    124   G4bool isFluoActive;
    125   G4bool isPIXEActive;
    126128
    127129};
    128 
    129 inline G4bool IsFluorescenceActive() const
    130 {
    131   return isFluoActive;
    132 }
    133 
    134 inline G4bool IsPIXECrossSectionActive() const
    135 {
    136   return isPIXEActive;
    137 }
    138130
    139131inline
  • trunk/source/processes/electromagnetic/utils/include/G4VEmModel.hh

    r1228 r1315  
    2424// ********************************************************************
    2525//
    26 // $Id: G4VEmModel.hh,v 1.72 2009/09/23 14:42:47 vnivanch Exp $
    27 // GEANT4 tag $Name: geant4-09-03 $
     26// $Id: G4VEmModel.hh,v 1.75 2010/05/26 10:41:34 vnivanch Exp $
     27// GEANT4 tag $Name: geant4-09-04-beta-cand-01 $
    2828//
    2929// -------------------------------------------------------------------
     
    150150
    151151  // Compute effective ion charge square
     152  virtual G4double ChargeSquareRatio(const G4Track&);
     153
     154  // Compute effective ion charge square
    152155  virtual G4double GetChargeSquareRatio(const G4ParticleDefinition*,
    153156                                        const G4Material*,
     
    228231                                             G4double maxEnergy = DBL_MAX);
    229232
     233  // select isotope in order to have precise mass of the nucleus
     234  inline G4int SelectIsotopeNumber(const G4Element*);
     235
    230236  // atom can be selected effitiantly if element selectors are initialised
    231237  inline const G4Element* SelectRandomAtom(const G4MaterialCutsCouple*,
     
    236242
    237243  // to select atom cross section per volume is recomputed for each element
    238   inline const G4Element* SelectRandomAtom(const G4Material*,
    239                                            const G4ParticleDefinition*,
    240                                            G4double kineticEnergy,
    241                                            G4double cutEnergy = 0.0,
    242                                            G4double maxEnergy = DBL_MAX);
    243 
    244   // select isotope in order to have precise mass of the nucleus
    245   inline G4int SelectIsotopeNumber(const G4Element*);
     244  const G4Element* SelectRandomAtom(const G4Material*,
     245                                    const G4ParticleDefinition*,
     246                                    G4double kineticEnergy,
     247                                    G4double cutEnergy = 0.0,
     248                                    G4double maxEnergy = DBL_MAX);
    246249
    247250  //------------------------------------------------------------------------
     
    291294  inline void SetCurrentCouple(const G4MaterialCutsCouple*);
    292295
     296  inline const G4Element* GetCurrentElement() const;
     297
    293298protected:
    294299
     
    296301
    297302  inline void SetCurrentElement(const G4Element*);
    298 
    299   inline const G4Element* GetCurrentElement() const;
    300303
    301304private:
     
    341344};
    342345
    343 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
     346// ======== Run time inline methods ================
     347
     348inline void G4VEmModel::SetCurrentCouple(const G4MaterialCutsCouple* p)
     349{
     350  currentCouple = p;
     351}
     352
     353//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
     354
     355inline const G4MaterialCutsCouple* G4VEmModel::CurrentCouple() const
     356{
     357  return currentCouple;
     358}
     359
     360//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
     361
     362inline void G4VEmModel::SetCurrentElement(const G4Element* elm)
     363{
     364  currentElement = elm;
     365}
     366
     367//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
     368
     369inline const G4Element* G4VEmModel::GetCurrentElement() const
     370{
     371  return currentElement;
     372}
     373
     374//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
     375
     376inline
     377G4double G4VEmModel::MaxSecondaryKinEnergy(const G4DynamicParticle* dynPart)
     378{
     379  return MaxSecondaryEnergy(dynPart->GetDefinition(),
     380                            dynPart->GetKineticEnergy());
     381}
     382
    344383//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
    345384
     
    375414  G4double mfp = DBL_MAX;
    376415  G4double cross = CrossSectionPerVolume(material,p,ekin,emin,emax);
    377   if (cross > DBL_MIN) mfp = 1./cross;
     416  if (cross > DBL_MIN) { mfp = 1./cross; }
    378417  return mfp;
    379418}
     
    415454//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
    416455
    417 inline
    418 const G4Element* G4VEmModel::SelectRandomAtom(const G4Material* material,
    419                                               const G4ParticleDefinition* pd,
    420                                               G4double kinEnergy,
    421                                               G4double tcut,
    422                                               G4double tmax)
    423 {
    424   const G4ElementVector* theElementVector = material->GetElementVector();
    425   G4int n = material->GetNumberOfElements() - 1;
    426   currentElement = (*theElementVector)[n];
    427   if (n > 0) {
    428     G4double x = G4UniformRand()*
    429                  G4VEmModel::CrossSectionPerVolume(material,pd,kinEnergy,tcut,tmax);
    430     for(G4int i=0; i<n; i++) {
    431       if (x <= xsec[i]) {
    432         currentElement = (*theElementVector)[i];
    433         break;
    434       }
    435     }
    436   }
    437   return currentElement;
    438 }
    439 
    440 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
    441 
    442456inline G4int G4VEmModel::SelectIsotopeNumber(const G4Element* elm)
    443457{
     
    450464      G4double* ab = elm->GetRelativeAbundanceVector();
    451465      G4double x = G4UniformRand();
    452       for(; idx<ni; idx++) {
     466      for(; idx<ni; ++idx) {
    453467        x -= ab[idx];
    454         if (x <= 0.0) break;
     468        if (x <= 0.0) { break; }
    455469      }
    456       if(idx >= ni) idx = ni - 1;
     470      if(idx >= ni) { idx = ni - 1; }
    457471    }
    458472    N = elm->GetIsotope(idx)->GetN();
     
    461475}
    462476
    463 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
     477// ======== Get/Set inline methods used at initialisation ================
    464478
    465479inline G4VEmFluctuationModel* G4VEmModel::GetModelOfFluctuations()
     
    578592{
    579593  nuclearStopping = val;
    580 }
    581 
    582 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
    583 
    584 inline
    585 G4double G4VEmModel::MaxSecondaryKinEnergy(const G4DynamicParticle* dynPart)
    586 {
    587   return MaxSecondaryEnergy(dynPart->GetDefinition(),
    588                             dynPart->GetKineticEnergy());
    589594}
    590595
     
    601606                                          G4VEmFluctuationModel* f = 0)
    602607{
    603   if(p && pParticleChange != p) pParticleChange = p;
     608  if(p && pParticleChange != p) { pParticleChange = p; }
    604609  fluc = f;
    605610}
     
    607612//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
    608613
    609 inline void G4VEmModel::SetCurrentCouple(const G4MaterialCutsCouple* p)
    610 {
    611   currentCouple = p;
    612 }
    613 
    614 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
    615 
    616 inline const G4MaterialCutsCouple* G4VEmModel::CurrentCouple() const
    617 {
    618   return currentCouple;
    619 }
    620 
    621 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
    622 
    623 inline void G4VEmModel::SetCurrentElement(const G4Element* elm)
    624 {
    625   currentElement = elm;
    626 }
    627 
    628 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
    629 
    630 inline const G4Element* G4VEmModel::GetCurrentElement() const
    631 {
    632   return currentElement;
    633 }
    634 
    635 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
    636 
    637614#endif
    638615
  • 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
  • trunk/source/processes/electromagnetic/utils/include/G4VEnergyLossProcess.hh

    r1196 r1315  
    2424// ********************************************************************
    2525//
    26 // $Id: G4VEnergyLossProcess.hh,v 1.89 2009/07/03 14:39:17 vnivanch Exp $
     26// $Id: G4VEnergyLossProcess.hh,v 1.92 2010/04/28 14:43:13 vnivanch Exp $
    2727// GEANT4 tag $Name:
    2828//
     
    196196  // Sampling of secondaries in vicinity of geometrical boundary
    197197  void SampleSubCutSecondaries(std::vector<G4Track*>&, const G4Step&,
    198                                G4VEmModel* model, G4int matIdx,
    199                                G4double& extraEdep);
     198                               G4VEmModel* model, G4int matIdx);
    200199
    201200  // PostStep sampling of secondaries
     
    418417  // Run time method for simulation of ionisation
    419418  //------------------------------------------------------------------------
     419
     420  // access atom on which interaction happens
     421  const G4Element* GetCurrentElement() const;
    420422
    421423  // sample range at the end of a step
     
    553555};
    554556
    555 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    556 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     557// ======== Run time inline methods ================
    557558
    558559inline size_t G4VEnergyLossProcess::CurrentMaterialCutsCoupleIndex() const
     
    586587//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    587588
    588 inline void G4VEnergyLossProcess::SetFluctModel(G4VEmFluctuationModel* p)
    589 {
    590   fluctModel = p;
    591 }
    592 
    593 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    594 
    595 inline G4VEmFluctuationModel* G4VEnergyLossProcess::FluctModel()
    596 {
    597   return fluctModel;
    598 }
    599 
    600 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    601 
    602 inline void G4VEnergyLossProcess::SetParticle(const G4ParticleDefinition* p)
    603 {
    604   particle = p;
    605 }
    606 
    607 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    608 
    609 inline void G4VEnergyLossProcess::SetSecondaryParticle(const G4ParticleDefinition* p)
    610 {
    611   secondaryParticle = p;
    612 }
    613 
    614 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    615 
    616 inline void G4VEnergyLossProcess::SetBaseParticle(const G4ParticleDefinition* p)
    617 {
    618   baseParticle = p;
    619 }
    620 
    621 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    622 
    623 inline const G4ParticleDefinition* G4VEnergyLossProcess::Particle() const
    624 {
    625   return particle;
    626 }
    627 
    628 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    629 
    630 inline const G4ParticleDefinition* G4VEnergyLossProcess::BaseParticle() const
    631 {
    632   return baseParticle;
    633 }
    634 
    635 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    636 
    637 inline const G4ParticleDefinition* G4VEnergyLossProcess::SecondaryParticle() const
    638 {
    639   return secondaryParticle;
    640 }
    641 
    642 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    643 
    644 inline void G4VEnergyLossProcess::SetLossFluctuations(G4bool val)
    645 {
    646   lossFluctuationFlag = val;
    647 }
    648 
    649 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    650 
    651 inline void G4VEnergyLossProcess::SetRandomStep(G4bool val)
    652 {
    653   rndmStepFlag = val;
    654 }
    655 
    656 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    657 
    658 inline void G4VEnergyLossProcess::SetIntegral(G4bool val)
    659 {
    660   integral = val;
    661 }
    662 
    663 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    664  
    665 inline G4bool G4VEnergyLossProcess::IsIntegral() const
    666 {
    667   return integral;
    668 }
    669 
    670 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    671 
    672 inline void G4VEnergyLossProcess::SetIonisation(G4bool val)
    673 {
    674   isIonisation = val;
    675   if(val) aGPILSelection = CandidateForSelection;
    676   else    aGPILSelection = NotCandidateForSelection;
    677 }
    678 
    679 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    680 
    681 inline G4bool G4VEnergyLossProcess::IsIonisationProcess() const
    682 {
    683   return isIonisation;
    684 }
    685 
    686 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    687 
    688 inline void G4VEnergyLossProcess::SetLinearLossLimit(G4double val)
    689 {
    690   linLossLimit = val;
    691 }
    692 
    693 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    694 
    695 inline void G4VEnergyLossProcess::SetMinSubRange(G4double val)
    696 {
    697   minSubRange = val;
    698 }
    699 
    700 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    701 
    702 inline void G4VEnergyLossProcess::SetLambdaFactor(G4double val)
    703 {
    704   if(val > 0.0 && val <= 1.0) lambdaFactor = val;
    705 }
    706 
    707 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    708 
    709 void G4VEnergyLossProcess::SetStepFunction(G4double v1, G4double v2)
    710 {
    711   dRoverRange = v1;
    712   finalRange = v2;
    713   if (dRoverRange > 0.999) dRoverRange = 1.0;
    714   currentCouple = 0;
    715   mfpKinEnergy  = DBL_MAX;
    716 }
    717 
    718 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    719 
    720 inline void G4VEnergyLossProcess::SetLowestEnergyLimit(G4double val)
    721 {
    722   lowestKinEnergy = val;
    723 }
    724 
    725 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    726 
    727 inline G4int G4VEnergyLossProcess::NumberOfSubCutoffRegions() const
    728 {
    729   return nSCoffRegions;
    730 }
    731 
    732 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    733 
    734 inline G4int G4VEnergyLossProcess::NumberOfDERegions() const
    735 {
    736   return nDERegions;
    737 }
    738 
    739 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    740 
    741 inline void G4VEnergyLossProcess::SetDEDXBinning(G4int nbins)
    742 {
    743   nBins = nbins;
    744 }
    745 
    746 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    747 
    748 inline void G4VEnergyLossProcess::SetLambdaBinning(G4int nbins)
    749 {
    750   nBins = nbins;
    751 }
    752 
    753 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    754 
    755 inline void G4VEnergyLossProcess::SetDEDXBinningForCSDARange(G4int nbins)
    756 {
    757   nBinsCSDA = nbins;
    758 }
    759 
    760 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    761 
    762 inline void G4VEnergyLossProcess::SetMinKinEnergy(G4double e)
    763 {
    764   minKinEnergy = e;
    765 }
    766 
    767 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    768 
    769 inline G4double G4VEnergyLossProcess::MinKinEnergy() const
    770 {
    771   return minKinEnergy;
    772 }
    773 
    774 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    775 
    776 inline void G4VEnergyLossProcess::SetMaxKinEnergy(G4double e)
    777 {
    778   maxKinEnergy = e;
    779   if(e < maxKinEnergyCSDA) maxKinEnergyCSDA = e;
    780 }
    781 
    782 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    783 
    784 inline G4double G4VEnergyLossProcess::MaxKinEnergy() const
    785 {
    786   return maxKinEnergy;
    787 }
    788 
    789 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    790 
    791 inline void G4VEnergyLossProcess::SetMaxKinEnergyForCSDARange(G4double e)
    792 {
    793   maxKinEnergyCSDA = e;
    794 }
    795 
    796 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    797 
    798 inline G4double G4VEnergyLossProcess::GetDEDX(G4double& kineticEnergy,
    799                                         const G4MaterialCutsCouple* couple)
     589inline void
     590G4VEnergyLossProcess::DefineMaterial(const G4MaterialCutsCouple* couple)
     591{
     592  if(couple != currentCouple) {
     593    currentCouple   = couple;
     594    currentMaterial = couple->GetMaterial();
     595    currentMaterialIndex = couple->GetIndex();
     596    mfpKinEnergy = DBL_MAX;
     597  }
     598}
     599
     600//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     601
     602inline void G4VEnergyLossProcess::SetDynamicMassCharge(G4double massratio,
     603                                                       G4double charge2ratio)
     604{
     605  massRatio     = massratio;
     606  chargeSqRatio = charge2ratio;
     607  reduceFactor  = 1.0/(chargeSqRatio*massRatio);
     608}
     609
     610//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     611
     612inline G4double G4VEnergyLossProcess::GetDEDXForScaledEnergy(G4double e)
     613{
     614  G4double x = ((*theDEDXTable)[currentMaterialIndex]->Value(e))*chargeSqRatio;
     615  if(e < minKinEnergy) { x *= std::sqrt(e/minKinEnergy); }
     616  return x;
     617}
     618
     619//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     620
     621inline G4double G4VEnergyLossProcess::GetSubDEDXForScaledEnergy(G4double e)
     622{
     623  G4double x = ((*theDEDXSubTable)[currentMaterialIndex]->Value(e))*chargeSqRatio;
     624  if(e < minKinEnergy) { x *= std::sqrt(e/minKinEnergy); }
     625  return x;
     626}
     627
     628//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     629
     630inline G4double G4VEnergyLossProcess::GetIonisationForScaledEnergy(G4double e)
     631{
     632  //G4double x = 0.0;
     633  //  if(theIonisationTable) {
     634  G4double x = ((*theIonisationTable)[currentMaterialIndex]->Value(e))*chargeSqRatio;
     635  if(e < minKinEnergy) { x *= std::sqrt(e/minKinEnergy); }
     636  //}
     637  return x;
     638}
     639
     640//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     641
     642inline
     643G4double G4VEnergyLossProcess::GetSubIonisationForScaledEnergy(G4double e)
     644{
     645  //  G4double x = 0.0;
     646  //if(theIonisationSubTable) {
     647  G4double x = ((*theIonisationSubTable)[currentMaterialIndex]->Value(e))*chargeSqRatio;
     648  if(e < minKinEnergy) { x *= std::sqrt(e/minKinEnergy); }
     649  //}
     650  return x;
     651}
     652
     653//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     654
     655inline G4double G4VEnergyLossProcess::GetScaledRangeForScaledEnergy(G4double e)
     656{
     657  G4double x = ((*theRangeTableForLoss)[currentMaterialIndex])->Value(e);
     658  if(e < minKinEnergy) { x *= std::sqrt(e/minKinEnergy); }
     659  return x;
     660}
     661
     662//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     663
     664inline G4double
     665G4VEnergyLossProcess::GetLimitScaledRangeForScaledEnergy(G4double e)
     666{
     667  G4double x;
     668
     669  if (e < maxKinEnergyCSDA) {
     670    x = ((*theCSDARangeTable)[currentMaterialIndex])->Value(e);
     671    if(e < minKinEnergy) x *= std::sqrt(e/minKinEnergy);
     672  } else {
     673    x = theRangeAtMaxEnergy[currentMaterialIndex] +
     674         (e - maxKinEnergyCSDA)/theDEDXAtMaxEnergy[currentMaterialIndex];
     675  }
     676  return x;
     677}
     678
     679//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     680
     681inline G4double G4VEnergyLossProcess::ScaledKinEnergyForLoss(G4double r)
     682{
     683  G4PhysicsVector* v = (*theInverseRangeTable)[currentMaterialIndex];
     684  G4double rmin = v->Energy(0);
     685  G4double e = 0.0;
     686  if(r >= rmin) { e = v->Value(r); }
     687  else if(r > 0.0) {
     688    G4double x = r/rmin;
     689    e = minKinEnergy*x*x;
     690  }
     691  return e;
     692}
     693
     694//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     695
     696inline G4double G4VEnergyLossProcess::GetLambdaForScaledEnergy(G4double e)
     697{
     698  return chargeSqRatio*(((*theLambdaTable)[currentMaterialIndex])->Value(e));
     699}
     700
     701//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     702
     703inline G4double
     704G4VEnergyLossProcess::GetDEDX(G4double& kineticEnergy,
     705                              const G4MaterialCutsCouple* couple)
    800706{
    801707  DefineMaterial(couple);
     
    805711//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    806712
    807 inline G4double G4VEnergyLossProcess::GetDEDXForSubsec(G4double& kineticEnergy,
    808                                         const G4MaterialCutsCouple* couple)
     713inline G4double
     714G4VEnergyLossProcess::GetDEDXForSubsec(G4double& kineticEnergy,
     715                                                const G4MaterialCutsCouple* couple)
    809716{
    810717  DefineMaterial(couple);
     
    814721//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    815722
    816 inline G4double G4VEnergyLossProcess::GetRange(G4double& kineticEnergy,
    817                                          const G4MaterialCutsCouple* couple)
     723inline G4double
     724G4VEnergyLossProcess::GetRange(G4double& kineticEnergy,
     725                               const G4MaterialCutsCouple* couple)
    818726{
    819727  G4double x = fRange;
     
    831739//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    832740
    833 inline G4double G4VEnergyLossProcess::GetCSDARange(
    834        G4double& kineticEnergy, const G4MaterialCutsCouple* couple)
     741inline G4double
     742G4VEnergyLossProcess::GetCSDARange(G4double& kineticEnergy,
     743                                   const G4MaterialCutsCouple* couple)
    835744{
    836745  DefineMaterial(couple);
     
    844753//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    845754
    846 inline G4double G4VEnergyLossProcess::GetRangeForLoss(
    847                 G4double& kineticEnergy,
    848                 const G4MaterialCutsCouple* couple)
     755inline G4double
     756G4VEnergyLossProcess::GetRangeForLoss(G4double& kineticEnergy,
     757                                      const G4MaterialCutsCouple* couple)
    849758{
    850759  DefineMaterial(couple);
     
    859768//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    860769
    861 inline G4double G4VEnergyLossProcess::GetKineticEnergy(
    862                 G4double& range,
    863                 const G4MaterialCutsCouple* couple)
     770inline G4double
     771G4VEnergyLossProcess::GetKineticEnergy(G4double& range,
     772                                       const G4MaterialCutsCouple* couple)
    864773{
    865774  DefineMaterial(couple);
     
    871780//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    872781
    873 inline G4double G4VEnergyLossProcess::GetLambda(G4double& kineticEnergy,
    874                                           const G4MaterialCutsCouple* couple)
     782inline G4double
     783G4VEnergyLossProcess::GetLambda(G4double& kineticEnergy,
     784                                const G4MaterialCutsCouple* couple)
    875785{
    876786  DefineMaterial(couple);
    877787  G4double x = 0.0;
    878   if(theLambdaTable) x = GetLambdaForScaledEnergy(kineticEnergy*massRatio);
     788  if(theLambdaTable) { x = GetLambdaForScaledEnergy(kineticEnergy*massRatio); }
    879789  return x;
    880 }
    881 
    882 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    883 
    884 inline G4bool G4VEnergyLossProcess::TablesAreBuilt() const
    885 {
    886   return  tablesAreBuilt;
    887 }
    888 
    889 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    890 
    891 inline G4PhysicsTable* G4VEnergyLossProcess::DEDXTable() const
    892 {
    893   return theDEDXTable;
    894 }
    895 
    896 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    897 
    898 inline G4PhysicsTable* G4VEnergyLossProcess::DEDXTableForSubsec() const
    899 {
    900   return theDEDXSubTable;
    901 }
    902 
    903 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    904 
    905 inline G4PhysicsTable* G4VEnergyLossProcess::DEDXunRestrictedTable() const
    906 {
    907   return theDEDXunRestrictedTable;
    908 }
    909 
    910 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    911 
    912 inline G4PhysicsTable* G4VEnergyLossProcess::IonisationTable() const
    913 {
    914   G4PhysicsTable* t = theDEDXTable;
    915   if(theIonisationTable) t = theIonisationTable;
    916   return t;
    917 }
    918 
    919 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    920 
    921 inline G4PhysicsTable* G4VEnergyLossProcess::IonisationTableForSubsec() const
    922 {
    923   G4PhysicsTable* t = theDEDXSubTable;
    924   if(theIonisationSubTable) t = theIonisationSubTable;
    925   return t;
    926 }
    927 
    928 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    929 
    930 inline G4PhysicsTable* G4VEnergyLossProcess::CSDARangeTable() const
    931 {
    932   return theCSDARangeTable;
    933 }
    934 
    935 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    936 
    937 inline G4PhysicsTable* G4VEnergyLossProcess::RangeTableForLoss() const
    938 {
    939   return theRangeTableForLoss;
    940 }
    941 
    942 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    943 
    944 inline G4PhysicsTable* G4VEnergyLossProcess::InverseRangeTable() const
    945 {
    946   return theInverseRangeTable;
    947 }
    948 
    949 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    950 
    951 inline G4PhysicsTable* G4VEnergyLossProcess::LambdaTable()
    952 {
    953   return theLambdaTable;
    954 }
    955 
    956 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    957 
    958 inline G4PhysicsTable* G4VEnergyLossProcess::SubLambdaTable()
    959 {
    960   return theSubLambdaTable;
    961 }
    962 
    963 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    964 
    965 inline G4double G4VEnergyLossProcess::SampleRange()
    966 {
    967   G4double e = amu_c2*preStepKinEnergy/particle->GetPDGMass();
    968   G4double s = fRange*std::pow(10.,vstrag->Value(e));
    969   G4double x = fRange + G4RandGauss::shoot(0.0,s);
    970   if(x > 0.0) fRange = x;
    971   return fRange;
    972 }
    973 
    974 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    975 
    976 inline void G4VEnergyLossProcess::SetDynamicMassCharge(G4double massratio,
    977                                                        G4double charge2ratio)
    978 {
    979   massRatio     = massratio;
    980   chargeSqRatio = charge2ratio;
    981   reduceFactor  = 1.0/(chargeSqRatio*massRatio);
    982 }
    983 
    984 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    985 
    986 inline void G4VEnergyLossProcess::DefineMaterial(
    987             const G4MaterialCutsCouple* couple)
    988 {
    989   if(couple != currentCouple) {
    990     currentCouple   = couple;
    991     currentMaterial = couple->GetMaterial();
    992     currentMaterialIndex = couple->GetIndex();
    993     mfpKinEnergy = DBL_MAX;
    994   }
    995 }
    996 
    997 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    998 
    999 inline G4double G4VEnergyLossProcess::GetDEDXForScaledEnergy(G4double e)
    1000 {
    1001   G4double x = ((*theDEDXTable)[currentMaterialIndex]->Value(e))*chargeSqRatio;
    1002   if(e < minKinEnergy) x *= std::sqrt(e/minKinEnergy);
    1003   return x;
    1004 }
    1005 
    1006 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    1007 
    1008 inline G4double G4VEnergyLossProcess::GetSubDEDXForScaledEnergy(G4double e)
    1009 {
    1010   G4double x = ((*theDEDXSubTable)[currentMaterialIndex]->Value(e))*chargeSqRatio;
    1011   if(e < minKinEnergy) x *= std::sqrt(e/minKinEnergy);
    1012   return x;
    1013 }
    1014 
    1015 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    1016 
    1017 inline G4double G4VEnergyLossProcess::GetIonisationForScaledEnergy(G4double e)
    1018 {
    1019   //G4double x = 0.0;
    1020   //  if(theIonisationTable) {
    1021   G4double x = ((*theIonisationTable)[currentMaterialIndex]->Value(e))*chargeSqRatio;
    1022   if(e < minKinEnergy) x *= std::sqrt(e/minKinEnergy);
    1023   //}
    1024   return x;
    1025 }
    1026 
    1027 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    1028 
    1029 inline
    1030 G4double G4VEnergyLossProcess::GetSubIonisationForScaledEnergy(G4double e)
    1031 {
    1032   //  G4double x = 0.0;
    1033   //if(theIonisationSubTable) {
    1034   G4double x = ((*theIonisationSubTable)[currentMaterialIndex]->Value(e))*chargeSqRatio;
    1035   if(e < minKinEnergy) x *= std::sqrt(e/minKinEnergy);
    1036   //}
    1037   return x;
    1038 }
    1039 
    1040 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    1041 
    1042 inline G4double G4VEnergyLossProcess::GetScaledRangeForScaledEnergy(G4double e)
    1043 {
    1044   G4double x = ((*theRangeTableForLoss)[currentMaterialIndex])->Value(e);
    1045   if(e < minKinEnergy) x *= std::sqrt(e/minKinEnergy);
    1046   return x;
    1047 }
    1048 
    1049 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    1050 
    1051 inline G4double G4VEnergyLossProcess::GetLimitScaledRangeForScaledEnergy(
    1052                 G4double e)
    1053 {
    1054   G4double x;
    1055 
    1056   if (e < maxKinEnergyCSDA) {
    1057     x = ((*theCSDARangeTable)[currentMaterialIndex])->Value(e);
    1058     if(e < minKinEnergy) x *= std::sqrt(e/minKinEnergy);
    1059   } else {
    1060     x = theRangeAtMaxEnergy[currentMaterialIndex] +
    1061          (e - maxKinEnergyCSDA)/theDEDXAtMaxEnergy[currentMaterialIndex];
    1062   }
    1063   return x;
    1064 }
    1065 
    1066 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    1067 
    1068 inline G4double G4VEnergyLossProcess::ScaledKinEnergyForLoss(G4double r)
    1069 {
    1070   G4PhysicsVector* v = (*theInverseRangeTable)[currentMaterialIndex];
    1071   G4double rmin = v->Energy(0);
    1072   G4double e = 0.0;
    1073   if(r >= rmin) { e = v->Value(r); }
    1074   else if(r > 0.0) {
    1075     G4double x = r/rmin;
    1076     e = minKinEnergy*x*x;
    1077   }
    1078   return e;
    1079 }
    1080 
    1081 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    1082 
    1083 inline G4double G4VEnergyLossProcess::GetLambdaForScaledEnergy(G4double e)
    1084 {
    1085   return chargeSqRatio*(((*theLambdaTable)[currentMaterialIndex])->Value(e));
    1086790}
    1087791
     
    1111815//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    1112816
     817inline G4double G4VEnergyLossProcess::SampleRange()
     818{
     819  G4double e = amu_c2*preStepKinEnergy/particle->GetPDGMass();
     820  G4double s = fRange*std::pow(10.,vstrag->Value(e));
     821  G4double x = fRange + G4RandGauss::shoot(0.0,s);
     822  if(x > 0.0) { fRange = x; }
     823  return fRange;
     824}
     825
     826// ======== Get/Set inline methods used at initialisation ================
     827
     828inline void G4VEnergyLossProcess::SetFluctModel(G4VEmFluctuationModel* p)
     829{
     830  fluctModel = p;
     831}
     832
     833//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     834
     835inline G4VEmFluctuationModel* G4VEnergyLossProcess::FluctModel()
     836{
     837  return fluctModel;
     838}
     839
     840//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     841
     842inline void G4VEnergyLossProcess::SetParticle(const G4ParticleDefinition* p)
     843{
     844  particle = p;
     845}
     846
     847//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     848
     849inline void G4VEnergyLossProcess::SetSecondaryParticle(const G4ParticleDefinition* p)
     850{
     851  secondaryParticle = p;
     852}
     853
     854//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     855
     856inline void G4VEnergyLossProcess::SetBaseParticle(const G4ParticleDefinition* p)
     857{
     858  baseParticle = p;
     859}
     860
     861//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     862
     863inline const G4ParticleDefinition* G4VEnergyLossProcess::Particle() const
     864{
     865  return particle;
     866}
     867
     868//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     869
     870inline const G4ParticleDefinition* G4VEnergyLossProcess::BaseParticle() const
     871{
     872  return baseParticle;
     873}
     874
     875//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     876
     877inline const G4ParticleDefinition* G4VEnergyLossProcess::SecondaryParticle() const
     878{
     879  return secondaryParticle;
     880}
     881
     882//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     883
     884inline void G4VEnergyLossProcess::SetLossFluctuations(G4bool val)
     885{
     886  lossFluctuationFlag = val;
     887}
     888
     889//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     890
     891inline void G4VEnergyLossProcess::SetRandomStep(G4bool val)
     892{
     893  rndmStepFlag = val;
     894}
     895
     896//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     897
     898inline void G4VEnergyLossProcess::SetIntegral(G4bool val)
     899{
     900  integral = val;
     901}
     902
     903//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     904 
     905inline G4bool G4VEnergyLossProcess::IsIntegral() const
     906{
     907  return integral;
     908}
     909
     910//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     911
     912inline void G4VEnergyLossProcess::SetIonisation(G4bool val)
     913{
     914  isIonisation = val;
     915  if(val) { aGPILSelection = CandidateForSelection; }
     916  else    { aGPILSelection = NotCandidateForSelection; }
     917}
     918
     919//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     920
     921inline G4bool G4VEnergyLossProcess::IsIonisationProcess() const
     922{
     923  return isIonisation;
     924}
     925
     926//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     927
     928inline void G4VEnergyLossProcess::SetLinearLossLimit(G4double val)
     929{
     930  linLossLimit = val;
     931}
     932
     933//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     934
     935inline void G4VEnergyLossProcess::SetMinSubRange(G4double val)
     936{
     937  minSubRange = val;
     938}
     939
     940//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     941
     942inline void G4VEnergyLossProcess::SetLambdaFactor(G4double val)
     943{
     944  if(val > 0.0 && val <= 1.0) { lambdaFactor = val; }
     945}
     946
     947//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     948
     949void G4VEnergyLossProcess::SetStepFunction(G4double v1, G4double v2)
     950{
     951  dRoverRange = v1;
     952  finalRange = v2;
     953  if (dRoverRange > 0.999) { dRoverRange = 1.0; }
     954  currentCouple = 0;
     955  mfpKinEnergy  = DBL_MAX;
     956}
     957
     958//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     959
     960inline void G4VEnergyLossProcess::SetLowestEnergyLimit(G4double val)
     961{
     962  lowestKinEnergy = val;
     963}
     964
     965//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     966
     967inline G4int G4VEnergyLossProcess::NumberOfSubCutoffRegions() const
     968{
     969  return nSCoffRegions;
     970}
     971
     972//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     973
     974inline G4int G4VEnergyLossProcess::NumberOfDERegions() const
     975{
     976  return nDERegions;
     977}
     978
     979//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     980
     981inline void G4VEnergyLossProcess::SetDEDXBinning(G4int nbins)
     982{
     983  nBins = nbins;
     984}
     985
     986//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     987
     988inline void G4VEnergyLossProcess::SetLambdaBinning(G4int nbins)
     989{
     990  nBins = nbins;
     991}
     992
     993//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     994
     995inline void G4VEnergyLossProcess::SetDEDXBinningForCSDARange(G4int nbins)
     996{
     997  nBinsCSDA = nbins;
     998}
     999
     1000//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     1001
     1002inline void G4VEnergyLossProcess::SetMinKinEnergy(G4double e)
     1003{
     1004  minKinEnergy = e;
     1005}
     1006
     1007//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     1008
     1009inline G4double G4VEnergyLossProcess::MinKinEnergy() const
     1010{
     1011  return minKinEnergy;
     1012}
     1013
     1014//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     1015
     1016inline void G4VEnergyLossProcess::SetMaxKinEnergy(G4double e)
     1017{
     1018  maxKinEnergy = e;
     1019  if(e < maxKinEnergyCSDA) { maxKinEnergyCSDA = e; }
     1020}
     1021
     1022//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     1023
     1024inline G4double G4VEnergyLossProcess::MaxKinEnergy() const
     1025{
     1026  return maxKinEnergy;
     1027}
     1028
     1029//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     1030
     1031inline void G4VEnergyLossProcess::SetMaxKinEnergyForCSDARange(G4double e)
     1032{
     1033  maxKinEnergyCSDA = e;
     1034}
     1035
     1036
     1037//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     1038
     1039inline G4bool G4VEnergyLossProcess::TablesAreBuilt() const
     1040{
     1041  return  tablesAreBuilt;
     1042}
     1043
     1044//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     1045
     1046inline G4PhysicsTable* G4VEnergyLossProcess::DEDXTable() const
     1047{
     1048  return theDEDXTable;
     1049}
     1050
     1051//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     1052
     1053inline G4PhysicsTable* G4VEnergyLossProcess::DEDXTableForSubsec() const
     1054{
     1055  return theDEDXSubTable;
     1056}
     1057
     1058//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     1059
     1060inline G4PhysicsTable* G4VEnergyLossProcess::DEDXunRestrictedTable() const
     1061{
     1062  return theDEDXunRestrictedTable;
     1063}
     1064
     1065//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     1066
     1067inline G4PhysicsTable* G4VEnergyLossProcess::IonisationTable() const
     1068{
     1069  G4PhysicsTable* t = theDEDXTable;
     1070  if(theIonisationTable) { t = theIonisationTable; }
     1071  return t;
     1072}
     1073
     1074//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     1075
     1076inline G4PhysicsTable* G4VEnergyLossProcess::IonisationTableForSubsec() const
     1077{
     1078  G4PhysicsTable* t = theDEDXSubTable;
     1079  if(theIonisationSubTable) { t = theIonisationSubTable; }
     1080  return t;
     1081}
     1082
     1083//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     1084
     1085inline G4PhysicsTable* G4VEnergyLossProcess::CSDARangeTable() const
     1086{
     1087  return theCSDARangeTable;
     1088}
     1089
     1090//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     1091
     1092inline G4PhysicsTable* G4VEnergyLossProcess::RangeTableForLoss() const
     1093{
     1094  return theRangeTableForLoss;
     1095}
     1096
     1097//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     1098
     1099inline G4PhysicsTable* G4VEnergyLossProcess::InverseRangeTable() const
     1100{
     1101  return theInverseRangeTable;
     1102}
     1103
     1104//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     1105
     1106inline G4PhysicsTable* G4VEnergyLossProcess::LambdaTable()
     1107{
     1108  return theLambdaTable;
     1109}
     1110
     1111//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     1112
     1113inline G4PhysicsTable* G4VEnergyLossProcess::SubLambdaTable()
     1114{
     1115  return theSubLambdaTable;
     1116}
     1117
     1118//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     1119
    11131120#endif
  • trunk/source/processes/electromagnetic/utils/include/G4VMultipleScattering.hh

    r1228 r1315  
    2424// ********************************************************************
    2525//
    26 // $Id: G4VMultipleScattering.hh,v 1.62 2009/10/29 17:56:04 vnivanch Exp $
    27 // GEANT4 tag $Name: geant4-09-03 $
     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 $
    2828//
    2929// -------------------------------------------------------------------
     
    154154  // The function overloads the corresponding function of the base
    155155  // class.
    156   inline G4double PostStepGetPhysicalInteractionLength(
     156  G4double PostStepGetPhysicalInteractionLength(
    157157                                            const G4Track&,
    158158                                            G4double  previousStepSize,
     
    160160
    161161  // Along step actions
    162   inline G4VParticleChange* AlongStepDoIt(const G4Track&, const G4Step&);
     162  G4VParticleChange* AlongStepDoIt(const G4Track&, const G4Step&);
    163163
    164164  // Post step actions
    165   inline G4VParticleChange* PostStepDoIt(const G4Track&, const G4Step&);
     165  G4VParticleChange* PostStepDoIt(const G4Track&, const G4Step&);
    166166
    167167  // This method does not used for tracking, it is intended only for tests
    168   inline G4double ContinuousStepLimit(const G4Track& track,
    169                                       G4double previousStepSize,
    170                                       G4double currentMinimalStep,
    171                                       G4double& currentSafety);
     168  G4double ContinuousStepLimit(const G4Track& track,
     169                               G4double previousStepSize,
     170                               G4double currentMinimalStep,
     171                               G4double& currentSafety);
    172172
    173173  //------------------------------------------------------------------------
     
    318318};
    319319
    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
     322inline const G4MaterialCutsCouple*
     323G4VMultipleScattering::CurrentMaterialCutsCouple() const
     324{
     325  return currentCouple;
     326}
     327
     328//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     329
     330inline
     331void G4VMultipleScattering::DefineMaterial(const G4MaterialCutsCouple* couple)
     332{
     333  if(couple != currentCouple) {
     334    currentCouple   = couple;
     335    currentMaterialIndex = couple->GetIndex();
     336  }
    497337}
    498338
     
    509349    x = currentModel->CrossSection(currentCouple,p,e);
    510350  }
    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; }
    513353  return x;
    514354}
     
    516356//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    517357
    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;
     358inline G4VEmModel* G4VMultipleScattering::SelectModel(G4double kinEnergy)
     359{
     360  return modelManager->SelectModel(kinEnergy, currentMaterialIndex);
     361}
     362
     363//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     364
     365inline 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
     373inline void G4VMultipleScattering::SetBinning(G4int nbins)
     374{
     375  nBins = nbins;
     376}
     377
     378//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     379
     380inline G4int G4VMultipleScattering::Binning() const
     381{
     382  return nBins;
     383}
     384
     385//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     386
     387inline void G4VMultipleScattering::SetMinKinEnergy(G4double e)
     388{
     389  minKinEnergy = e;
     390}
     391
     392//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     393
     394inline G4double G4VMultipleScattering::MinKinEnergy() const
     395{
     396  return minKinEnergy;
     397}
     398
     399//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     400
     401inline void G4VMultipleScattering::SetMaxKinEnergy(G4double e)
     402{
     403  maxKinEnergy = e;
     404}
     405
     406//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     407
     408inline G4double G4VMultipleScattering::MaxKinEnergy() const
     409{
     410  return maxKinEnergy;
     411}
     412
     413//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     414
     415inline  void G4VMultipleScattering::SetBuildLambdaTable(G4bool val)
     416{
     417  buildLambdaTable = val;
     418}
     419
     420//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     421
     422inline G4PhysicsTable* G4VMultipleScattering::LambdaTable() const
     423{
     424  return theLambdaTable;
     425}
     426
     427//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     428
     429inline  const G4ParticleDefinition* G4VMultipleScattering::Particle() const
     430{
     431  return currentParticle;
     432}
     433
     434//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     435
     436inline  G4bool G4VMultipleScattering::LateralDisplasmentFlag() const
     437{
     438  return latDisplasment;
     439}
     440
     441//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     442
     443inline  void G4VMultipleScattering::SetLateralDisplasmentFlag(G4bool val)
     444{
     445  latDisplasment = val;
     446}
     447
     448//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     449
     450inline  G4double G4VMultipleScattering::Skin() const
     451{
     452  return skin;
     453}
     454
     455//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     456
     457inline  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
     465inline  G4double G4VMultipleScattering::RangeFactor() const
     466{
     467  return facrange;
     468}
     469
     470//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     471
     472inline  void G4VMultipleScattering::SetRangeFactor(G4double val)
     473{
     474  if(val > 0.0) facrange = val;
     475}
     476
     477//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     478
     479inline  G4double G4VMultipleScattering::GeomFactor() const
     480{
     481  return facgeom;
     482}
     483
     484//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     485
     486inline  void G4VMultipleScattering::SetGeomFactor(G4double val)
     487{
     488  if(val > 0.0) facgeom = val;
     489}
     490
     491//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     492
     493inline  G4double G4VMultipleScattering::PolarAngleLimit() const
     494{
     495  return polarAngleLimit;
     496}
     497
     498//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     499
     500inline  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
     509inline G4MscStepLimitType G4VMultipleScattering::StepLimitType() const
     510{
     511  return stepLimit;
     512}
     513
     514//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     515
     516inline void G4VMultipleScattering::SetStepLimitType(G4MscStepLimitType val)
     517{
     518  stepLimit = val;
     519  if(val == fMinimal) { facrange = 0.2; }
    571520}
    572521
Note: See TracChangeset for help on using the changeset viewer.