Ignore:
Timestamp:
Apr 6, 2009, 12:21:12 PM (15 years ago)
Author:
garnier
Message:

update processes

File:
1 edited

Legend:

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

    r819 r961  
    2424// ********************************************************************
    2525//
    26 // $Id: G4EmCorrections.hh,v 1.10 2008/01/11 19:55:29 vnivanch Exp $
    27 // GEANT4 tag $Name: geant4-09-01-patch-02 $
     26// $Id: G4EmCorrections.hh,v 1.24 2008/09/12 14:44:48 vnivanch Exp $
     27// GEANT4 tag $Name: geant4-09-02-ref-02 $
    2828//
    2929// -------------------------------------------------------------------
     
    4141// 28.04.2006 General cleanup, add finite size corrections (V.Ivanchenko)
    4242// 13.05.2006 Add corrections for ion stopping (V.Ivanhcenko)
     43// 20.05.2008 Removed Finite Size correction (V.Ivanchenko)
     44// 12.09.2008 Added inlined interfaces to effective charge (V.Ivanchenko)
    4345//
    4446// Class Description:
     
    5860#include "G4Material.hh"
    5961#include "G4ParticleDefinition.hh"
     62#include "G4NistManager.hh"
    6063
    6164class G4VEmModel;
    6265class G4PhysicsVector;
    6366class G4IonTable;
    64 class G4NistManager;
     67class G4MaterialCutsCouple;
    6568
    6669class G4EmCorrections
     
    7376  virtual ~G4EmCorrections();
    7477
    75   G4double HighOrderCorrections(const G4ParticleDefinition* p,
    76                                 const G4Material* material,
    77                                       G4double kineticEnergy);
    78 
    79   G4double Bethe(const G4ParticleDefinition* p,
    80                  const G4Material* material,
     78  G4double HighOrderCorrections(const G4ParticleDefinition*,
     79                                const G4Material*,
     80                                G4double kineticEnergy,
     81                                G4double cutEnergy);
     82
     83  G4double IonHighOrderCorrections(const G4ParticleDefinition*,
     84                                   const G4MaterialCutsCouple*,
     85                                   G4double kineticEnergy);
     86
     87  G4double ComputeIonCorrections(const G4ParticleDefinition*,
     88                                 const G4Material*,
     89                                 G4double kineticEnergy);
     90
     91  G4double IonBarkasCorrection(const G4ParticleDefinition*,
     92                               const G4Material*,
     93                               G4double kineticEnergy);
     94
     95  G4double Bethe(const G4ParticleDefinition*,
     96                 const G4Material*,
    8197                 G4double kineticEnergy);
    8298
    83   G4double SpinCorrection(const G4ParticleDefinition* p,
    84                           const G4Material* material,
     99  G4double SpinCorrection(const G4ParticleDefinition*,
     100                          const G4Material*,
    85101                          G4double kineticEnergy);
    86102
    87   G4double KShellCorrection(const G4ParticleDefinition* p,
    88                             const G4Material* material,
     103  G4double KShellCorrection(const G4ParticleDefinition*,
     104                            const G4Material*,
    89105                            G4double kineticEnergy);
    90106
    91   G4double LShellCorrection(const G4ParticleDefinition* p,
    92                             const G4Material* material,
     107  G4double LShellCorrection(const G4ParticleDefinition*,
     108                            const G4Material*,
    93109                            G4double kineticEnergy);
    94110
    95   G4double ShellCorrection(const G4ParticleDefinition* p,
    96                            const G4Material* material,
     111  G4double ShellCorrection(const G4ParticleDefinition*,
     112                           const G4Material*,
    97113                           G4double kineticEnergy);
    98114
    99   G4double ShellCorrectionSTD(const G4ParticleDefinition* p,
    100                               const G4Material* material,
     115  G4double ShellCorrectionSTD(const G4ParticleDefinition*,
     116                              const G4Material*,
    101117                              G4double kineticEnergy);
    102118
    103   G4double DensityCorrection(const G4ParticleDefinition* p,
    104                              const G4Material* material,
     119  G4double DensityCorrection(const G4ParticleDefinition*,
     120                             const G4Material*,
    105121                             G4double kineticEnergy);
    106122
    107   G4double BarkasCorrection(const G4ParticleDefinition* p,
    108                             const G4Material* material,
     123  G4double BarkasCorrection(const G4ParticleDefinition*,
     124                            const G4Material*,
    109125                            G4double kineticEnergy);
    110126
    111   G4double BlochCorrection(const G4ParticleDefinition* p,
    112                            const G4Material* material,
     127  G4double BlochCorrection(const G4ParticleDefinition*,
     128                           const G4Material*,
    113129                           G4double kineticEnergy);
    114130
    115   G4double MottCorrection(const G4ParticleDefinition* p,
    116                           const G4Material* material,
     131  G4double MottCorrection(const G4ParticleDefinition*,
     132                          const G4Material*,
    117133                          G4double kineticEnergy);
    118134
    119   G4double FiniteSizeCorrection(const G4ParticleDefinition* p,
    120                                 const G4Material* material,
    121                                 G4double kineticEnergy);
    122 
    123   G4double NuclearDEDX(const G4ParticleDefinition* p,
    124                        const G4Material* material,
     135  G4double NuclearDEDX(const G4ParticleDefinition*,
     136                       const G4Material*,
    125137                       G4double kineticEnergy,
    126138                       G4bool fluct = true);
    127139
    128140  void AddStoppingData(G4int Z, G4int A, const G4String& materialName,
    129                        G4PhysicsVector& dVector);
    130 
     141                       G4PhysicsVector* dVector);
     142
     143  void InitialiseForNewRun();
     144
     145  // effective charge correction using stopping power data
    131146  G4double EffectiveChargeCorrection(const G4ParticleDefinition*,
    132147                                     const G4Material*,
    133                                      G4double);
    134 
    135   G4ionEffectiveCharge* GetIonEffectiveCharge(G4VEmModel* m = 0);
    136 
    137   G4int GetNumberOfStoppingVectors();
     148                                     G4double kineticEnergy);
     149
     150  // effective charge of an ion
     151  inline G4double GetParticleCharge(const G4ParticleDefinition*,
     152                                    const G4Material*,
     153                                    G4double kineticEnergy);
     154
     155  inline
     156  G4double EffectiveChargeSquareRatio(const G4ParticleDefinition*,
     157                                      const G4Material*,
     158                                      G4double kineticEnergy);
     159
     160  // ionisation models for ions
     161  inline void SetIonisationModels(G4VEmModel* m1 = 0, G4VEmModel* m2 = 0);
     162
     163  inline G4int GetNumberOfStoppingVectors();
    138164
    139165private:
     
    141167  void Initialise();
    142168
    143   G4PhysicsVector* InitialiseMaterial(const G4Material* mat);
    144 
    145   void SetupKinematics(const G4ParticleDefinition* p,
    146                        const G4Material* material,
     169  void BuildCorrectionVector();
     170
     171  void SetupKinematics(const G4ParticleDefinition*,
     172                       const G4Material*,
    147173                       G4double kineticEnergy);
    148174
     
    207233  G4double     Z23[100];
    208234
     235  std::vector<const G4Material*> currmat;
     236  std::vector<G4double>          thcorr[100];
     237  size_t        ncouples;
     238
    209239  const G4ParticleDefinition* particle;
    210240  const G4ParticleDefinition* curParticle;
     
    218248  G4double  mass;
    219249  G4double  massFactor;
     250  G4double  formfact;
     251  G4double  eth;
    220252  G4double  tau;
    221253  G4double  gamma;
     
    225257  G4double  ba2;
    226258  G4double  tmax;
    227   G4double  tmax0;
    228259  G4double  charge;
    229260  G4double  q2;
     261  G4double  eCorrMin;
     262  G4double  eCorrMax;
     263  G4int     nbinCorr;
    230264
    231265  G4AtomicShells        shells;
     
    234268  G4NistManager*        nist;
    235269  const G4IonTable*     ionTable;
    236   G4VEmModel*           ionModel;
     270  G4VEmModel*           ionLEModel;
     271  G4VEmModel*           ionHEModel;
    237272
    238273  // Ion stopping data
    239274  G4int                       nIons;
    240275  G4int                       idx;
     276  G4int                       currentZ;
    241277  std::vector<G4int>          Zion;
    242278  std::vector<G4int>          Aion;
    243279  std::vector<G4String>       materialName;
     280
     281  std::vector<const G4ParticleDefinition*> ionList;
    244282
    245283  std::vector<const G4Material*> materialList;
     
    271309               z21*((xv-x1)*(y2-yv)+(yv-y1)*(x2-xv))))
    272310         / ((x2-x1)*(y2-y1));
     311}
     312
     313inline
     314void G4EmCorrections::SetIonisationModels(G4VEmModel* m1, G4VEmModel* m2)
     315{
     316  if(m1) ionLEModel = m1;
     317  if(m2) ionHEModel = m2;
     318}
     319
     320inline G4int G4EmCorrections::GetNumberOfStoppingVectors()
     321{
     322  return nIons;
     323}
     324
     325inline G4double
     326G4EmCorrections::GetParticleCharge(const G4ParticleDefinition* p,
     327                                   const G4Material* mat,
     328                                   G4double kineticEnergy)
     329{
     330  return effCharge.EffectiveCharge(p,mat,kineticEnergy);
     331}
     332
     333inline G4double
     334G4EmCorrections::EffectiveChargeSquareRatio(const G4ParticleDefinition* p,
     335                                            const G4Material* mat,
     336                                            G4double kineticEnergy)
     337{
     338  return effCharge.EffectiveChargeSquareRatio(p,mat,kineticEnergy);
    273339}
    274340
     
    289355    G4double ratio = electron_mass_c2/mass;
    290356    tmax  = 2.0*electron_mass_c2*bg2 /(1. + 2.0*gamma*ratio + ratio*ratio);
    291     tmax0 = tmax;
    292357    charge  = p->GetPDGCharge()/eplus;
    293     if(charge < 1.5)  q2 = charge*charge;
     358    if(charge < 1.5)  {q2 = charge*charge;}
    294359    else {
    295360      q2 = effCharge.EffectiveChargeSquareRatio(p,mat,kinEnergy);
    296361      charge = std::sqrt(q2);
    297362    }
    298     if(mass > 120.*MeV)
    299       tmax = std::min(tmax,51200.*electron_mass_c2*std::pow(proton_mass_c2/mass,0.666667));
    300363  }
    301364  if(mat != material) {
Note: See TracChangeset for help on using the changeset viewer.