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

update processes

Location:
trunk/source/processes/electromagnetic/highenergy
Files:
27 edited

Legend:

Unmodified
Added
Removed
  • trunk/source/processes/electromagnetic/highenergy/GNUmakefile

    r819 r961  
    1 # $Id: GNUmakefile,v 1.3 2005/05/18 10:12:32 vnivanch Exp $
     1# $Id: GNUmakefile,v 1.4 2008/03/06 11:47:10 vnivanch Exp $
    22# --------------------------------------------------------------------
    33# GNUmakefile for electromagnetic sub-library.  John Allison, 25/6/98.
     
    2525            -I$(G4BASE)/processes/electromagnetic/utils/include \
    2626            -I$(G4BASE)/processes/electromagnetic/standard/include \
     27            -I$(G4BASE)/processes/electromagnetic/muons/include \
    2728            -I$(G4BASE)/particles/management/include \
    2829            -I$(G4BASE)/particles/bosons/include \
  • trunk/source/processes/electromagnetic/highenergy/History

    r819 r961  
    1 $Id: History,v 1.22 2007/11/13 18:36:29 vnivanch Exp $
     1$Id: History,v 1.31 2009/02/20 16:38:33 vnivanch Exp $
    22-------------------------------------------------------------------
    33
     
    1717     * Reverse chronological order (last date on top), please *
    1818     ----------------------------------------------------------
     19
     2020 February 09: V.Ivanchenko (emhighenergy-V09-02-00)
     21- Cleanup: improved comments, move virtual methods from .hh to .cc
     22
     2316 October 08: V.Ivanchenko (emhighenergy-V09-01-06)
     24- Updated processes enumeration and printout
     25
     2621 July 08:  V.Ivanchenko (emhighenergy-V09-01-05)
     27- G4hBremsstrahlungModel, G4hPairProductionModel - do not use A in
     28                          the CrossSectionPerAtom
     29
     3010 July 08:  V.Ivanchenko (emhighenergy-V09-01-04)
     31- G4eeCrossSections - migrated to PDG 2006
     32- G4eeToHadronsMultiModel - added main reaction channels for omega and
     33                            phi resonances
     34- New models: G4eeTo3PiModel, G4eeToPGammaModel, G4ee2KChargedModel,
     35  G4ee2KNeutralModel
     36
     378 July 08:  V.Ivanchenko (emhighenergy-V09-01-03)
     38- G4GammaConversionToMuons - all exit() substituted by warnings
     39
     404 April 08:  V.Ivanchenko (emhighenergy-V09-01-02)
     41- G4hBremsstrahlungModel - remove static const
     42
     4314 March 08:  V.Ivanchenko (emhighenergy-V09-01-01)
     4406 March 08:  V.Ivanchenko (emhighenergy-V09-01-00)
     45- G4hBremsstrahlungModel, G4hBremsstrahlung, G4hPairProductionModel,
     46  G4hPairProduction are added
     47- SubType for all processes is initialized
    1948
    204913 November 07:  V.Ivanchenko (emhighenergy-V09-00-01)
  • trunk/source/processes/electromagnetic/highenergy/include/G4AnnihiToMuPair.hh

    r819 r961  
    2626//
    2727// $Id: G4AnnihiToMuPair.hh,v 1.2 2006/06/29 19:32:12 gunter Exp $
    28 // GEANT4 tag $Name: $
     28// GEANT4 tag $Name: geant4-09-02-ref-02 $
    2929//
    3030//         ------------ G4AnnihiToMuPair physics process ------
  • trunk/source/processes/electromagnetic/highenergy/include/G4BetheBlochNoDeltaModel.hh

    r819 r961  
    2424// ********************************************************************
    2525//
    26 // $Id: G4BetheBlochNoDeltaModel.hh,v 1.7 2006/06/29 19:32:14 gunter Exp $
    27 // GEANT4 tag $Name: $
     26// $Id: G4BetheBlochNoDeltaModel.hh,v 1.8 2009/02/20 16:38:33 vnivanch Exp $
     27// GEANT4 tag $Name: geant4-09-02-ref-02 $
    2828//
    2929// -------------------------------------------------------------------
     
    6868                                        G4double cutEnergy);
    6969
    70   virtual G4double ComputeCrossSectionPerElectron(
    71                                         const G4ParticleDefinition*,
    72                                         G4double kineticEnergy,
    73                                         G4double cutEnergy,
    74                                         G4double maxEnergy);
     70  virtual G4double CrossSectionPerVolume(const G4Material*,
     71                                         const G4ParticleDefinition*,
     72                                         G4double kineticEnergy,
     73                                         G4double cutEnergy,
     74                                         G4double maxEnergy);
    7575
    7676private:
     
    8484//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    8585
    86 inline G4double G4BetheBlochNoDeltaModel::ComputeDEDXPerVolume(
    87                             const G4Material* material,
    88                             const G4ParticleDefinition* pd,
    89                             G4double kinEnergy, G4double)
    90 {
    91   G4double dedx = G4BetheBlochModel::ComputeDEDXPerVolume(material, pd, kinEnergy, DBL_MAX);
    92   return dedx;
    93 }
    94 
    95 inline G4double G4BetheBlochNoDeltaModel::ComputeCrossSectionPerElectron(
    96                             const G4ParticleDefinition*,
    97                             G4double, G4double, G4double)
    98 {
    99   return 0.0;
    100 }
    101 
    102 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    103 
    10486#endif
  • trunk/source/processes/electromagnetic/highenergy/include/G4BraggNoDeltaModel.hh

    r819 r961  
    2424// ********************************************************************
    2525//
    26 // $Id: G4BraggNoDeltaModel.hh,v 1.6 2006/06/29 19:32:16 gunter Exp $
    27 // GEANT4 tag $Name: $
     26// $Id: G4BraggNoDeltaModel.hh,v 1.7 2009/02/20 16:38:33 vnivanch Exp $
     27// GEANT4 tag $Name: geant4-09-02-ref-02 $
    2828//
    2929// -------------------------------------------------------------------
     
    6868                                        G4double cutEnergy);
    6969
    70   virtual G4double ComputeCrossSectionPerElectron(
     70  virtual G4double CrossSectionPerVolume(const G4Material*,
    7171                                         const G4ParticleDefinition*,
    7272                                         G4double kineticEnergy,
    7373                                         G4double cutEnergy,
    7474                                         G4double maxEnergy);
    75 
    7675private:
    7776
     
    8483//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    8584
    86 inline G4double G4BraggNoDeltaModel::ComputeDEDXPerVolume(
    87                             const G4Material* material,
    88                             const G4ParticleDefinition* pd,
    89                             G4double kinEnergy, G4double)
    90 {
    91   G4double dedx = G4BraggIonModel::ComputeDEDXPerVolume(material, pd, kinEnergy, DBL_MAX);
    92   return dedx;
    93 }
    94 
    95 inline G4double G4BraggNoDeltaModel::ComputeCrossSectionPerElectron(
    96                             const G4ParticleDefinition*,
    97                             G4double, G4double, G4double)
    98 {
    99   return 0.0;
    100 }
    101 
    102 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    103 
    10485#endif
  • trunk/source/processes/electromagnetic/highenergy/include/G4GammaConversionToMuons.hh

    r819 r961  
    2626//
    2727// $Id: G4GammaConversionToMuons.hh,v 1.2 2006/06/29 19:32:18 gunter Exp $
    28 // GEANT4 tag $Name: $
     28// GEANT4 tag $Name: geant4-09-02-ref-02 $
    2929//
    3030//         ------------ G4GammaConversionToMuons physics process ------
  • trunk/source/processes/electromagnetic/highenergy/include/G4Vee2hadrons.hh

    r819 r961  
    2424// ********************************************************************
    2525//
    26 // $Id: G4Vee2hadrons.hh,v 1.3 2007/05/22 17:37:30 vnivanch Exp $
    27 // GEANT4 tag $Name: $
     26// $Id: G4Vee2hadrons.hh,v 1.4 2008/07/10 18:06:38 vnivanch Exp $
     27// GEANT4 tag $Name: geant4-09-02-ref-02 $
    2828//
    2929// -------------------------------------------------------------------
     
    6363public:
    6464
    65   G4Vee2hadrons() {};
     65  G4Vee2hadrons() : lowEnergy(0.0), highEnergy(1.1*GeV) {};
    6666
    6767  virtual ~G4Vee2hadrons() {};
     
    7676
    7777  virtual void SampleSecondaries(std::vector<G4DynamicParticle*>*,
    78                       G4double, const G4ThreeVector&) const = 0;
     78                                 G4double, const G4ThreeVector&) = 0;
     79
     80  void SetLowEnergy(G4double val) {lowEnergy = val;};
     81
     82  G4double LowEnergy() const {return lowEnergy;};
     83
     84  void SetHighEnergy(G4double val) {highEnergy = val;};
     85
     86  G4double HighEnergy() const {return highEnergy;};
    7987
    8088private:
     
    8492  G4Vee2hadrons(const  G4Vee2hadrons&);
    8593
     94  G4double lowEnergy;
     95  G4double highEnergy;
     96
    8697};
    8798
  • trunk/source/processes/electromagnetic/highenergy/include/G4eeCrossSections.hh

    r819 r961  
    2424// ********************************************************************
    2525//
    26 // $Id: G4eeCrossSections.hh,v 1.2 2006/06/29 19:32:22 gunter Exp $
    27 // GEANT4 tag $Name: $
     26// $Id: G4eeCrossSections.hh,v 1.3 2008/07/10 18:06:38 vnivanch Exp $
     27// GEANT4 tag $Name: geant4-09-02-ref-02 $
    2828//
    2929// -------------------------------------------------------------------
     
    7070  G4double CrossSection3pi(G4double);
    7171
     72  G4double CrossSectionPi0G(G4double);
     73
     74  G4double CrossSectionEtaG(G4double);
     75
    7276  G4double CrossSection2Kcharged(G4double);
    7377
    7478  G4double CrossSection2Kneutral(G4double);
     79
     80  std::complex<G4double> DpRho(G4double e);
    7581
    7682private:
     
    95101  G4double WidthPhi(G4double e);
    96102
    97   std::complex<G4double> DpRho(G4double e);
    98 
    99103  std::complex<G4double> DpOm(G4double e);
    100104
    101105  std::complex<G4double> DpPhi(G4double e);
    102 
    103106
    104107  // hide assignment operator
  • trunk/source/processes/electromagnetic/highenergy/include/G4eeToHadrons.hh

    r819 r961  
    2424// ********************************************************************
    2525//
    26 // $Id: G4eeToHadrons.hh,v 1.8 2007/05/23 08:50:41 vnivanch Exp $
    27 // GEANT4 tag $Name: $
     26// $Id: G4eeToHadrons.hh,v 1.9 2009/02/20 16:38:33 vnivanch Exp $
     27// GEANT4 tag $Name: geant4-09-02-ref-02 $
    2828//
    2929// -------------------------------------------------------------------
     
    7070
    7171  // Print out of the class parameters
    72   void PrintInfo();
     72  virtual void PrintInfo();
    7373
    7474  // Set the factor to artificially increase the crossSection (default 1)
     
    7777protected:
    7878
    79   void InitialiseProcess(const G4ParticleDefinition*);
     79  virtual void InitialiseProcess(const G4ParticleDefinition*);
    8080
    8181private:
     
    9292};
    9393
    94 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    95 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    96 
    97 inline G4bool G4eeToHadrons::IsApplicable(const G4ParticleDefinition& p)
    98 {
    99   return (&p == G4Positron::Positron());
    100 }
    101 
    10294//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
    10395
  • trunk/source/processes/electromagnetic/highenergy/include/G4eeToHadronsModel.hh

    r819 r961  
    2424// ********************************************************************
    2525//
    26 // $Id: G4eeToHadronsModel.hh,v 1.6 2007/05/22 17:37:30 vnivanch Exp $
    27 // GEANT4 tag $Name: $
     26// $Id: G4eeToHadronsModel.hh,v 1.7 2008/07/10 18:06:38 vnivanch Exp $
     27// GEANT4 tag $Name: geant4-09-02-ref-02 $
    2828//
    2929// -------------------------------------------------------------------
     
    6363public:
    6464
    65   G4eeToHadronsModel(const G4Vee2hadrons*, G4int ver=0,
     65  G4eeToHadronsModel(G4Vee2hadrons*, G4int ver=0,
    6666                     const G4String& nam = "eeToHadrons");
    6767
     
    6969
    7070  virtual void Initialise(const G4ParticleDefinition*, const G4DataVector&);
    71 
    72   G4double PeakEnergy() const;
    7371
    7472  virtual G4double CrossSectionPerVolume(const G4Material*,
     
    9997  G4DynamicParticle* GenerateCMPhoton(G4double);
    10098
     99  inline G4double PeakEnergy() const;
     100
    101101private:
    102102
     
    107107  G4eeToHadronsModel(const  G4eeToHadronsModel&);
    108108
    109   const G4Vee2hadrons*  model;
     109  G4Vee2hadrons*        model;
    110110  G4ParticleDefinition* theGamma;
    111111  G4PhysicsVector*      crossPerElectron;
     
    133133//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    134134
    135 inline G4double G4eeToHadronsModel::CrossSectionPerVolume(
    136                                       const G4Material* mat,
    137                                       const G4ParticleDefinition* p,
    138                                       G4double kineticEnergy,
    139                                       G4double, G4double)
    140 {
    141   return mat->GetElectronDensity()*
    142     ComputeCrossSectionPerElectron(p, kineticEnergy);
    143 }
    144 
    145 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    146 
    147 inline G4double G4eeToHadronsModel::ComputeCrossSectionPerAtom(
    148                                       const G4ParticleDefinition* p,
    149                                       G4double kineticEnergy,
    150                                       G4double Z, G4double,
    151                                       G4double, G4double)
    152 {
    153   return Z*ComputeCrossSectionPerElectron(p, kineticEnergy);
    154 }
    155 
    156 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    157 
    158135#endif
  • trunk/source/processes/electromagnetic/highenergy/include/G4eeToHadronsMultiModel.hh

    r819 r961  
    2424// ********************************************************************
    2525//
    26 // $Id: G4eeToHadronsMultiModel.hh,v 1.5 2007/05/23 08:50:41 vnivanch Exp $
    27 // GEANT4 tag $Name: $
     26// $Id: G4eeToHadronsMultiModel.hh,v 1.7 2009/02/20 16:38:33 vnivanch Exp $
     27// GEANT4 tag $Name: geant4-09-02-ref-02 $
    2828//
    2929// -------------------------------------------------------------------
     
    5959
    6060class G4eeCrossSections;
     61class G4Vee2hadrons;
    6162
    6263class G4eeToHadronsMultiModel : public G4VEmModel
     
    8485                                         G4double maxEnergy = DBL_MAX);
    8586
    86   virtual G4double ComputeCrossSectionPerElectron(
    87                                          const G4ParticleDefinition*,
    88                                          G4double kineticEnergy,
    89                                          G4double cutEnergy = 0.0,
    90                                          G4double maxEnergy = DBL_MAX);
    91 
    9287  virtual void SampleSecondaries(std::vector<G4DynamicParticle*>*,
    9388                                 const G4MaterialCutsCouple*,
     
    9691                                 G4double maxEnergy = DBL_MAX);
    9792
    98   void PrintInfo();
     93  virtual void PrintInfo();
    9994
    10095  // Set the factor to artificially increase the crossSection (default 1)
    10196  void SetCrossSecFactor(G4double fac);
    10297
     98  inline G4double ComputeCrossSectionPerElectron(
     99                                         const G4ParticleDefinition*,
     100                                         G4double kineticEnergy,
     101                                         G4double cutEnergy = 0.0,
     102                                         G4double maxEnergy = DBL_MAX);
     103
    103104private:
     105
     106  void AddEEModel(G4Vee2hadrons*);
    104107
    105108  // hide assignment operator
     
    128131//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    129132
    130 inline G4double G4eeToHadronsMultiModel::CrossSectionPerVolume(
    131                                       const G4Material* mat,
    132                                       const G4ParticleDefinition* p,
    133                                       G4double kineticEnergy,
    134                                       G4double, G4double)
    135 {
    136   return mat->GetElectronDensity()*
    137     ComputeCrossSectionPerElectron(p, kineticEnergy);
    138 }
    139 
    140 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    141 
    142 inline G4double G4eeToHadronsMultiModel::ComputeCrossSectionPerAtom(
    143                                       const G4ParticleDefinition* p,
    144                                       G4double kineticEnergy,
    145                                       G4double Z, G4double,
    146                                       G4double, G4double)
    147 {
    148   return Z*ComputeCrossSectionPerElectron(p, kineticEnergy);
    149 }
    150 
    151 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    152 
    153133inline G4double G4eeToHadronsMultiModel::ComputeCrossSectionPerElectron(
    154134                                      const G4ParticleDefinition*,
     
    169149//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    170150
    171 inline
    172 void G4eeToHadronsMultiModel::SampleSecondaries(std::vector<G4DynamicParticle*>* newp,
    173                                                 const G4MaterialCutsCouple* couple,
    174                                                 const G4DynamicParticle* dp,
    175                                                 G4double, G4double)
    176 {
    177   G4double kinEnergy = dp->GetKineticEnergy();
    178   if (kinEnergy > thKineticEnergy) {
    179     G4double q = cumSum[nModels-1]*G4UniformRand();
    180     for(G4int i=0; i<nModels; i++) {
    181       if(q <= cumSum[i]) {
    182         (models[i])->SampleSecondaries(newp, couple,dp);
    183         if(newp->size() > 0) fParticleChange->ProposeTrackStatus(fStopAndKill);
    184         break;
    185       }
    186     }
    187   }
    188 }
    189 
    190 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    191 
    192151#endif
  • trunk/source/processes/electromagnetic/highenergy/include/G4eeToTwoPiModel.hh

    r819 r961  
    2424// ********************************************************************
    2525//
    26 // $Id: G4eeToTwoPiModel.hh,v 1.3 2007/05/22 17:37:30 vnivanch Exp $
    27 // GEANT4 tag $Name: $
     26// $Id: G4eeToTwoPiModel.hh,v 1.5 2009/02/20 16:38:33 vnivanch Exp $
     27// GEANT4 tag $Name: geant4-09-02-ref-02 $
    2828//
    2929// -------------------------------------------------------------------
     
    6767  virtual ~G4eeToTwoPiModel();
    6868
    69   G4double ThresholdEnergy() const;
     69  virtual G4double ThresholdEnergy() const;
    7070
    71   G4double PeakEnergy() const;
     71  virtual G4double PeakEnergy() const;
    7272
    73   G4double ComputeCrossSection(G4double) const;
     73  virtual G4double ComputeCrossSection(G4double) const;
    7474
    75   G4PhysicsVector* PhysicsVector(G4double, G4double) const;
     75  virtual G4PhysicsVector* PhysicsVector(G4double, G4double) const;
    7676
    7777  virtual void SampleSecondaries(std::vector<G4DynamicParticle*>*,
    78               G4double, const G4ThreeVector&) const;
     78              G4double, const G4ThreeVector&);
    7979
    8080private:
    81 
    82   void Initialise();
    8381
    8482  // hide assignment operator
     
    9088  G4double massPi;
    9189  G4double massRho;
    92   G4double highEnergy;
    9390
    9491};
     
    9693//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    9794
    98 inline G4double G4eeToTwoPiModel::ThresholdEnergy() const
    99 {
    100   return 2.0*massPi;
    101 }
    102 
    103 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    104 
    105 inline G4double G4eeToTwoPiModel::PeakEnergy() const
    106 {
    107   return massRho;
    108 }
    109 
    110 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    111 
    112 inline G4double G4eeToTwoPiModel::ComputeCrossSection(G4double e) const
    113 {
    114   G4double ee = std::min(GeV,e);
    115   return cross->CrossSection2pi(ee);
    116 }
    117 
    118 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    119 
    12095#endif
  • trunk/source/processes/electromagnetic/highenergy/include/G4hhIonisation.hh

    r819 r961  
    2424// ********************************************************************
    2525//
    26 // $Id: G4hhIonisation.hh,v 1.5 2007/05/23 08:50:41 vnivanch Exp $
    27 // GEANT4 tag $Name: $
     26// $Id: G4hhIonisation.hh,v 1.6 2009/02/20 16:38:33 vnivanch Exp $
     27// GEANT4 tag $Name: geant4-09-02-ref-02 $
    2828//
    2929// -------------------------------------------------------------------
     
    6969  virtual ~G4hhIonisation();
    7070
    71   G4bool IsApplicable(const G4ParticleDefinition& p);
     71  virtual G4bool IsApplicable(const G4ParticleDefinition& p);
    7272
    73   G4double MinPrimaryEnergy(const G4ParticleDefinition* p,
    74                             const G4Material*, G4double cut);
     73  virtual G4double MinPrimaryEnergy(const G4ParticleDefinition* p,
     74                                    const G4Material*, G4double cut);
    7575
    7676  // Print out of the class parameters
     
    104104
    105105//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    106 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    107 
    108 inline G4bool G4hhIonisation::IsApplicable(const G4ParticleDefinition& p)
    109 {
    110   return (p.GetPDGCharge() != 0.0 && p.GetPDGMass() > 100.0*MeV &&
    111          !p.IsShortLived());
    112 }
    113 
    114 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    115 
    116 inline G4double G4hhIonisation::MinPrimaryEnergy(const G4ParticleDefinition*,
    117                                                 const G4Material*,
    118                                                 G4double cut)
    119 {
    120   G4double x = 0.5*cut/electron_mass_c2;
    121   G4double y = electron_mass_c2/mass;
    122   G4double g = x*y + std::sqrt((1. + x)*(1. + x*y*y));
    123   return mass*(g - 1.0);
    124 }
    125 
    126 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    127106
    128107#endif
  • trunk/source/processes/electromagnetic/highenergy/include/G4mplIonisation.hh

    r819 r961  
    2424// ********************************************************************
    2525//
    26 // $Id: G4mplIonisation.hh,v 1.5 2007/05/23 08:50:41 vnivanch Exp $
    27 // GEANT4 tag $Name: $
     26// $Id: G4mplIonisation.hh,v 1.6 2009/02/20 16:38:33 vnivanch Exp $
     27// GEANT4 tag $Name: geant4-09-02-ref-02 $
    2828//
    2929// -------------------------------------------------------------------
     
    7272  virtual ~G4mplIonisation();
    7373
    74   G4bool IsApplicable(const G4ParticleDefinition& p);
     74  virtual G4bool IsApplicable(const G4ParticleDefinition& p);
    7575
    7676  // Print out of the class parameters
     
    9494
    9595//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    96 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    97 
    98 inline G4bool G4mplIonisation::IsApplicable(const G4ParticleDefinition& p)
    99 {
    100   return (p.GetParticleName() == "monopole");
    101 }
    102 
    103 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    10496
    10597#endif
  • trunk/source/processes/electromagnetic/highenergy/include/G4mplIonisationModel.hh

    r819 r961  
    2424// ********************************************************************
    2525//
    26 // $Id: G4mplIonisationModel.hh,v 1.6 2007/11/13 18:36:29 vnivanch Exp $
    27 // GEANT4 tag $Name: $
     26// $Id: G4mplIonisationModel.hh,v 1.7 2009/02/20 16:38:33 vnivanch Exp $
     27// GEANT4 tag $Name: geant4-09-02-ref-02 $
    2828//
    2929// -------------------------------------------------------------------
     
    120120
    121121//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    122 
    123 inline void G4mplIonisationModel::SampleSecondaries(std::vector<G4DynamicParticle*>*,
    124                                                     const G4MaterialCutsCouple*,
    125                                                     const G4DynamicParticle*,
    126                                                     G4double,
    127                                                     G4double)
    128 {}
    129 
    130 inline G4double G4mplIonisationModel::Dispersion(
    131                           const G4Material* material,
    132                           const G4DynamicParticle* dp,
    133                                 G4double& tmax,
    134                                 G4double& length)
    135 {
    136   G4double siga = 0.0;
    137   G4double tau   = dp->GetKineticEnergy()/mass;
    138   if(tau > 0.0) {
    139     G4double electronDensity = material->GetElectronDensity();
    140     G4double gam   = tau + 1.0;
    141     G4double invbeta2 = (gam*gam)/(tau * (tau+2.0));
    142     siga  = (invbeta2 - 0.5) * twopi_mc2_rcl2 * tmax * length
    143       * electronDensity * chargeSquare;
    144   }
    145   return siga;
    146 }
    147 
    148 
    149 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
  • trunk/source/processes/electromagnetic/highenergy/src/G4AnnihiToMuPair.cc

    r819 r961  
    2525//
    2626//
    27 // $Id: G4AnnihiToMuPair.cc,v 1.3 2006/06/29 19:32:34 gunter Exp $
    28 // GEANT4 tag $Name: geant4-09-01-patch-02 $
     27// $Id: G4AnnihiToMuPair.cc,v 1.5 2008/10/16 14:29:48 vnivanch Exp $
     28// GEANT4 tag $Name: geant4-09-02-ref-02 $
    2929//
    3030//         ------------ G4AnnihiToMuPair physics process ------
     
    6666 
    6767 CrossSecFactor = 1.;
     68 SetProcessSubType(6);
     69
    6870}
    6971
     
    244246void G4AnnihiToMuPair::PrintInfoDefinition()
    245247{
    246   G4String comments ="e+e->mu+mu- annihilation, atomic e- at rest.\n";
    247   G4cout << G4endl << GetProcessName() << ":  " << comments
    248          << "        threshold at " << LowestEnergyLimit/GeV << " GeV"
     248  G4String comments ="e+e->mu+mu- annihilation, atomic e- at rest, SubType=.";
     249  G4cout << G4endl << GetProcessName() << ":  " << comments
     250         << GetProcessSubType() << G4endl;
     251  G4cout << "        threshold at " << LowestEnergyLimit/GeV << " GeV"
    249252         << " good description up to "
    250253         << HighestEnergyLimit/TeV << " TeV for all Z." << G4endl;
  • trunk/source/processes/electromagnetic/highenergy/src/G4BetheBlochNoDeltaModel.cc

    r819 r961  
    2424// ********************************************************************
    2525//
    26 // $Id: G4BetheBlochNoDeltaModel.cc,v 1.3 2006/06/29 19:32:36 gunter Exp $
    27 // GEANT4 tag $Name: $
     26// $Id: G4BetheBlochNoDeltaModel.cc,v 1.4 2009/02/20 16:38:33 vnivanch Exp $
     27// GEANT4 tag $Name: geant4-09-02-ref-02 $
    2828//
    2929// -------------------------------------------------------------------
     
    5858{}
    5959
     60//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     61
    6062G4BetheBlochNoDeltaModel::~G4BetheBlochNoDeltaModel()
    6163{}
     
    6365//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    6466
     67G4double G4BetheBlochNoDeltaModel::ComputeDEDXPerVolume(
     68                            const G4Material* material,
     69                            const G4ParticleDefinition* pd,
     70                            G4double kinEnergy, G4double)
     71{
     72  return
     73    G4BetheBlochModel::ComputeDEDXPerVolume(material, pd, kinEnergy, DBL_MAX);
     74}
    6575
     76//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     77
     78G4double G4BetheBlochNoDeltaModel::CrossSectionPerVolume(
     79                    const G4Material*,const G4ParticleDefinition*,
     80                    G4double, G4double, G4double)
     81{
     82  return 0.0;
     83}
     84
     85//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     86
     87
  • trunk/source/processes/electromagnetic/highenergy/src/G4BraggNoDeltaModel.cc

    r819 r961  
    2424// ********************************************************************
    2525//
    26 // $Id: G4BraggNoDeltaModel.cc,v 1.3 2006/06/29 19:32:38 gunter Exp $
    27 // GEANT4 tag $Name: $
     26// $Id: G4BraggNoDeltaModel.cc,v 1.4 2009/02/20 16:38:33 vnivanch Exp $
     27// GEANT4 tag $Name: geant4-09-02-ref-02 $
    2828//
    2929// -------------------------------------------------------------------
     
    5353//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    5454
    55 
    5655G4BraggNoDeltaModel::G4BraggNoDeltaModel(const G4ParticleDefinition*p,
    5756                                         const G4String& nam) :
    5857  G4BraggIonModel(p, nam)
    5958{}
     59
     60//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    6061
    6162G4BraggNoDeltaModel::~G4BraggNoDeltaModel()
     
    6465//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    6566
     67G4double G4BraggNoDeltaModel::ComputeDEDXPerVolume(
     68                            const G4Material* material,
     69                            const G4ParticleDefinition* pd,
     70                            G4double kinEnergy, G4double)
     71{
     72  return
     73    G4BraggIonModel::ComputeDEDXPerVolume(material, pd, kinEnergy, DBL_MAX);
     74}
    6675
     76//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     77
     78G4double G4BraggNoDeltaModel::CrossSectionPerVolume(
     79                            const G4Material*,
     80                            const G4ParticleDefinition*,
     81                            G4double, G4double, G4double)
     82{
     83  return 0.0;
     84}
     85
     86//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     87
     88
  • trunk/source/processes/electromagnetic/highenergy/src/G4GammaConversionToMuons.cc

    r819 r961  
    2525//
    2626//
    27 // $Id: G4GammaConversionToMuons.cc,v 1.4 2006/06/29 19:32:40 gunter Exp $
    28 // GEANT4 tag $Name: geant4-09-01-patch-02 $
     27// $Id: G4GammaConversionToMuons.cc,v 1.7 2008/10/16 14:29:48 vnivanch Exp $
     28// GEANT4 tag $Name: geant4-09-02-ref-02 $
    2929//
    3030//         ------------ G4GammaConversionToMuons physics process ------
     
    5151    HighestEnergyLimit(1e21*eV), // ok to 1e21eV=1e12GeV, then LPM suppression
    5252    CrossSecFactor(1.)
    53 { }
     53{
     54  SetProcessSubType(15);
     55}
    5456
    5557//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.....
     
    261263    G4double xxp=1.-4./3.*xPM; // the main xPlus dependence
    262264    result=xxp*log(W)*LogWmaxInv;
    263     if(result>1.)
    264     { G4cout << "error in dSigxPlusGen, result=" << result << " is >1" << '\n';
    265       exit(10);
     265    if(result>1.) {
     266      G4cout << "G4GammaConversionToMuons::PostStepDoIt WARNING:"
     267             << " in dSigxPlusGen, result=" << result << " > 1" << G4endl;
    266268    }
    267269  }
     
    285287      f1=(1.-2.*xPM+4.*xPM*t*(1.-t)) / (1.+C1/(t*t));
    286288      if(f1<0 || f1> f1_max) // should never happend
    287       { G4cout << "outside allowed range f1=" << f1 << G4endl;
    288         exit(1);
    289       }
     289        {
     290          G4cout << "G4GammaConversionToMuons::PostStepDoIt WARNING:"
     291                 << "outside allowed range f1=" << f1 << " is set to zero"
     292                 << G4endl;
     293          f1 = 0.0;
     294        }
    290295    }
    291296    while ( G4UniformRand()*f1_max > f1);
     
    299304      f2=1.-2.*xPM+4.*xPM*t*(1.-t)*(1.+cos(2.*psi));
    300305      if(f2<0 || f2> f2_max) // should never happend
    301       { G4cout << "outside allowed range f2=" << f2 << G4endl;
    302         exit(1);
    303       }
     306        {
     307          G4cout << "G4GammaConversionToMuons::PostStepDoIt WARNING:"
     308                 << "outside allowed range f2=" << f2 << " is set to zero"
     309                 << G4endl;
     310          f2 = 0.0;
     311        }
    304312    }
    305313    while ( G4UniformRand()*f2_max > f2);
     
    387395void G4GammaConversionToMuons::PrintInfoDefinition()
    388396{
    389   G4String comments ="gamma->mu+mu- Bethe Heitler process.\n";
     397  G4String comments ="gamma->mu+mu- Bethe Heitler process, SubType= ";
    390398  G4cout << G4endl << GetProcessName() << ":  " << comments
    391          << "        good cross section parametrization from "
     399         << GetProcessSubType() << G4endl;
     400  G4cout << "        good cross section parametrization from "
    392401         << G4BestUnit(LowestEnergyLimit,"Energy")
    393402         << " to " << HighestEnergyLimit/GeV << " GeV for all Z." << G4endl;
  • trunk/source/processes/electromagnetic/highenergy/src/G4eeCrossSections.cc

    r819 r961  
    2424// ********************************************************************
    2525//
    26 // $Id: G4eeCrossSections.cc,v 1.6 2006/06/29 19:32:42 gunter Exp $
    27 // GEANT4 tag $Name: $
     26// $Id: G4eeCrossSections.cc,v 1.7 2008/07/10 18:06:39 vnivanch Exp $
     27// GEANT4 tag $Name: geant4-09-02-ref-02 $
    2828//
    2929// -------------------------------------------------------------------
     
    3939//
    4040// Modifications:
    41 //
     41// 10.07.2008 Updated for PDG Jour. Physics, G33, 1 (2006)
    4242//
    4343// -------------------------------------------------------------------
     
    5252#include "G4PionMinus.hh"
    5353#include "G4PionZero.hh"
     54#include "G4Eta.hh"
    5455#include "G4KaonPlus.hh"
    5556#include "G4KaonMinus.hh"
     
    8081  MsPi = G4PionPlus::PionPlus()->GetPDGMass();
    8182  MsPi0= G4PionZero::PionZero()->GetPDGMass();
    82   MsEta= 547.30*MeV;
     83  MsEta= G4Eta::Eta()->GetPDGMass();
    8384  MsEtap=957.78*MeV;
    8485  MsKs = G4KaonZeroLong::KaonZeroLong()->GetPDGMass();
    85   MsKc=G4KaonPlus::KaonPlus()->GetPDGMass();
    86   MsRho= 770.0*MeV;
    87   MsOm = 781.94*MeV;
     86  MsKc = G4KaonPlus::KaonPlus()->GetPDGMass();
     87  MsRho= 775.5*MeV;
     88  MsOm = 782.62*MeV;
    8889  MsF0 = 980.0*MeV;
    89   MsA0 = 983.4*MeV;
    90   MsPhi= 1019.413*MeV;
     90  MsA0 = 984.7*MeV;
     91  MsPhi= 1019.46*MeV;
    9192  MsK892 = 891.66*MeV;
    92   MsK0892 = 896.10*MeV;
    93   GRho = 150.7*MeV;
    94   GOm = 8.41*MeV;
    95   GPhi = 4.43*MeV;
     93  MsK0892 = 896.0*MeV;
     94  GRho = 149.4*MeV;
     95  GOm = 8.49*MeV;
     96  GPhi = 4.26*MeV;
    9697  GK892 = 50.8*MeV;
    97   GK0892 = 50.5*MeV;
     98  GK0892 = 50.3*MeV;
    9899  PhRho = 0.0;
    99100  PhOm = 0.0;
     
    103104  BrRhoPiG = 4.5e-4;
    104105  BrRhoPi0G= 6.8e-4;
    105   BrRhoEtaG= 2.4e-4;
    106   BrRhoEe = 4.49e-5;
    107   BrOm3Pi = 0.888;
    108   BrOmPi0G= 0.085;
    109   BrOmEtaG= 6.5e-4;
    110   BrOm2Pi = 0.0221;
     106  BrRhoEtaG= 2.95e-4;
     107  BrRhoEe = 4.7e-5;
     108  BrOm3Pi = 0.891;
     109  BrOmPi0G= 0.089;
     110  BrOmEtaG= 4.9e-4;
     111  BrOm2Pi = 0.017;
    111112  PhOm2Pi = 90.0;
    112   BrOmEe = 7.07e-5;
    113   BrPhi2Kc = 0.491;
    114   BrPhiKsKl= 0.341;
    115   BrPhi3Pi = 0.155;
    116   BrPhiPi0G= 1.31e-3;
    117   BrPhiEtaG= 1.26e-2;
    118   BrPhi2Pi = 8.e-5;
     113  BrOmEe = 7.18e-5;
     114  BrPhi2Kc = 0.492;
     115  BrPhiKsKl= 0.34;
     116  BrPhi3Pi = 0.153;
     117  BrPhiPi0G= 1.25e-3;
     118  BrPhiEtaG= 1.301e-2;
     119  BrPhi2Pi = 7.3e-5;
    119120  PhPhi2Pi = -20.0*degree;
    120   BrPhiEe = 2.99e-4;
     121  BrPhiEe = 2.97e-4;
    121122
    122123  MsRho3 = MsRho*MsRho*MsRho;
     
    125126
    126127  MeVnb = 3.8938e+11*nanobarn;
    127   Alpha = 1.0/137.036;
     128  Alpha = fine_structure_const;
    128129
    129130  AOmRho = 3.0;
     
    134135  brsigpipi = 1.;
    135136
    136   msrho1450 = 1465.*MeV;
    137   msrho1700 = 1700.*MeV;
    138   grho1450 = 310.*MeV;
    139   grho1700 = 240.*MeV;
     137  msrho1450 = 1459.*MeV;
     138  msrho1700 = 1688.8*MeV;
     139  grho1450 = 171.*MeV;
     140  grho1700 = 161.*MeV;
    140141  arhoompi0 = 1.;
    141142  arho1450ompi0 = 1.;
     
    190191
    191192G4double G4eeCrossSections::CrossSection2pi(G4double e)
    192 {
    193  
     193{
    194194  complex<G4double> xr(cos(PhRho),sin(PhRho));
    195195  complex<G4double> xo(cos(PhOm2Pi),sin(PhOm2Pi));
     
    205205    + sqrt(Width2p(s,MsOm,GOm,BrOm2Pi,MsPi)*MsOm3*BrOmEe*GOm)*xo/dom
    206206    + sqrt(Width2p(s,MsPhi,GPhi,BrPhi2Pi,MsPi)*MsPhi3*BrPhiEe*GPhi)*xf/dphi;
     207
     208  G4double cross = 12.0*pi*MeVnb*norm(amp)/(e*s);
     209
     210  return cross;
     211}
     212
     213//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     214
     215G4double G4eeCrossSections::CrossSection3pi(G4double e)
     216{
     217  complex<G4double> xf(cos(PhPhi2Pi),sin(PhPhi));
     218
     219  G4double s = e*e;
     220  complex<G4double> dom  = DpOm(e);
     221  complex<G4double> dphi = DpPhi(e);
     222
     223  complex<G4double> amp =
     224    sqrt(Width3p(s,MsOm,GOm,BrOm3Pi)*MsOm3*BrOmEe*GOm)/dom
     225    + sqrt(Width3p(s,MsPhi,GPhi,BrPhi3Pi)*MsPhi3*BrPhiEe*GPhi)*xf/dphi;
     226
     227  G4double cross = 12.0*pi*MeVnb*norm(amp)/(e*s);
     228
     229  return cross;
     230}
     231
     232//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     233
     234G4double G4eeCrossSections::CrossSectionPi0G(G4double e)
     235{
     236  complex<G4double> xf(cos(PhPhi),sin(PhPhi));
     237
     238  G4double s = e*e;
     239  complex<G4double> drho = DpRho(e);
     240  complex<G4double> dom  = DpOm(e);
     241  complex<G4double> dphi = DpPhi(e);
     242
     243  complex<G4double> amp =
     244      sqrt(WidthPg(s,MsRho,GRho,BrRhoPi0G,MsPi0)*MsRho3*BrRhoEe*GRho)/drho
     245    + sqrt(WidthPg(s,MsOm,GOm,BrOmPi0G,MsPi0)*MsOm3*BrOmEe*GOm)/dom
     246    + sqrt(WidthPg(s,MsPhi,GPhi,BrPhiPi0G,MsPi0)*MsPhi3*BrPhiEe*GPhi)*xf/dphi;
     247
     248  G4double cross = 12.0*pi*MeVnb*norm(amp)/(e*s);
     249
     250  return cross;
     251}
     252
     253//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     254
     255G4double G4eeCrossSections::CrossSectionEtaG(G4double e)
     256{
     257  complex<G4double> xf(cos(PhPhi),sin(PhPhi));
     258
     259  G4double s = e*e;
     260  complex<G4double> drho = DpRho(e);
     261  complex<G4double> dom  = DpOm(e);
     262  complex<G4double> dphi = DpPhi(e);
     263
     264  complex<G4double> amp =
     265      sqrt(WidthPg(s,MsRho,GRho,BrRhoEtaG,MsEta)*MsRho3*BrRhoEe*GRho)/drho
     266    + sqrt(WidthPg(s,MsOm,GOm,BrOmEtaG,MsEta)*MsOm3*BrOmEe*GOm)/dom
     267    + sqrt(WidthPg(s,MsPhi,GPhi,BrPhiEtaG,MsEta)*MsPhi3*BrPhiEe*GPhi)*xf/dphi;
     268
     269  G4double cross = 12.0*pi*MeVnb*norm(amp)/(e*s);
     270
     271  return cross;
     272}
     273
     274//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     275
     276G4double G4eeCrossSections::CrossSection2Kcharged(G4double e)
     277{
     278  G4double s = e*e;
     279  complex<G4double> dphi = DpPhi(e);
     280
     281  complex<G4double> amp =
     282    sqrt(Width2p(s,MsPhi,GPhi,BrPhi2Kc,MsKc)*MsPhi3*BrPhiEe*GPhi)/dphi;
     283
     284  G4double cross = 12.0*pi*MeVnb*norm(amp)/(e*s);
     285
     286  return cross;
     287}
     288
     289//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     290
     291G4double G4eeCrossSections::CrossSection2Kneutral(G4double e)
     292{
     293  G4double s = e*e;
     294  complex<G4double> dphi = DpPhi(e);
     295
     296  complex<G4double> amp =
     297    sqrt(Width2p(s,MsPhi,GPhi,BrPhiKsKl,MsKs)*MsPhi3*BrPhiEe*GPhi)/dphi;
    207298
    208299  G4double cross = 12.0*pi*MeVnb*norm(amp)/(e*s);
     
    238329G4double G4eeCrossSections::PhaseSpace3p(G4double e)
    239330{
    240  
     331  //     E.A.Kuraev, Z.K.Silagadze.
     332  //  Once more about the omega->3 pi contact term.
     333  //  Yadernaya Phisica, 1995, V58, N9, p.1678-1694. 
     334
    241335  //  G4bool b;
    242336  //  G4double x = ph3p->GetValue(e, b);
  • trunk/source/processes/electromagnetic/highenergy/src/G4eeToHadrons.cc

    r819 r961  
    2424// ********************************************************************
    2525//
    26 // $Id: G4eeToHadrons.cc,v 1.7 2006/06/29 19:32:44 gunter Exp $
    27 // GEANT4 tag $Name: $
     26// $Id: G4eeToHadrons.cc,v 1.9 2009/02/20 16:38:33 vnivanch Exp $
     27// GEANT4 tag $Name: geant4-09-02-ref-02 $
    2828//
    2929// -------------------------------------------------------------------
     
    6464    isInitialised(false)
    6565{
    66     SetVerboseLevel(1);
     66  SetVerboseLevel(1);
     67  SetProcessSubType(fAnnihilationToHadrons);
    6768}
    6869
     
    7172G4eeToHadrons::~G4eeToHadrons()
    7273{}
     74
     75//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     76
     77G4bool G4eeToHadrons::IsApplicable(const G4ParticleDefinition& p)
     78{
     79  return (&p == G4Positron::Positron());
     80}
    7381
    7482//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
  • trunk/source/processes/electromagnetic/highenergy/src/G4eeToHadronsModel.cc

    r819 r961  
    2424// ********************************************************************
    2525//
    26 // $Id: G4eeToHadronsModel.cc,v 1.8 2007/05/22 17:37:30 vnivanch Exp $
    27 // GEANT4 tag $Name: $
     26// $Id: G4eeToHadronsModel.cc,v 1.9 2008/07/10 18:06:39 vnivanch Exp $
     27// GEANT4 tag $Name: geant4-09-02-ref-02 $
    2828//
    2929// -------------------------------------------------------------------
     
    6565using namespace std;
    6666
    67 G4eeToHadronsModel::G4eeToHadronsModel(const G4Vee2hadrons* m,
    68                                              G4int ver,
     67G4eeToHadronsModel::G4eeToHadronsModel(G4Vee2hadrons* m, G4int ver,
    6968                                       const G4String& nam)
    7069  : G4VEmModel(nam),
    71   model(m),
    72   crossPerElectron(0),
    73   crossBornPerElectron(0),
    74   isInitialised(false),
    75   nbins(100),
    76   verbose(ver)
    77 {
    78   theGamma      = G4Gamma::Gamma();
     70    model(m),
     71    crossPerElectron(0),
     72    crossBornPerElectron(0),
     73    isInitialised(false),
     74    nbins(100),
     75    verbose(ver)
     76{
     77  theGamma = G4Gamma::Gamma();
    7978}
    8079
     
    9695  isInitialised  = true;
    9796
     97  // Lab system
    9898  highKinEnergy = HighEnergyLimit();
    9999  lowKinEnergy  = LowEnergyLimit();
    100100
    101   emin  = model->ThresholdEnergy();
    102   emax = 2.0*electron_mass_c2*sqrt(1.0 + 0.5*highKinEnergy/electron_mass_c2);
    103   if(emin > emax) emin = emax;
    104 
    105   lowKinEnergy  = 0.5*emin*emin/electron_mass_c2 - 2.0*electron_mass_c2;
    106 
    107   epeak = min(model->PeakEnergy(), emax);
     101  // CM system
     102  emin  = model->LowEnergy();
     103  emax  = model->HighEnergy();
     104
     105  G4double emin0 =
     106    2.0*electron_mass_c2*sqrt(1.0 + 0.5*lowKinEnergy/electron_mass_c2);
     107  G4double emax0 =
     108    2.0*electron_mass_c2*sqrt(1.0 + 0.5*highKinEnergy/electron_mass_c2);
     109
     110  // recompute low energy
     111  if(emin0 > emax) {
     112    emin0 = emax;
     113    model->SetLowEnergy(emin0);
     114  }
     115  if(emin > emin0) {
     116    emin0 = emin;
     117    lowKinEnergy  = 0.5*emin*emin/electron_mass_c2 - 2.0*electron_mass_c2;
     118    SetLowEnergyLimit(lowKinEnergy);
     119  }
     120
     121  // recompute high energy
     122  if(emax < emax0) {
     123    emax0 = emax;
     124    highKinEnergy = 0.5*emax*emax/electron_mass_c2 - 2.0*electron_mass_c2;
     125    SetHighEnergyLimit(highKinEnergy);
     126  }
     127
     128  // peak energy
     129  epeak = std::min(model->PeakEnergy(), emax);
    108130  peakKinEnergy  = 0.5*epeak*epeak/electron_mass_c2 - 2.0*electron_mass_c2;
    109131
     
    148170    }
    149171  }
     172}
     173
     174//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     175
     176G4double G4eeToHadronsModel::CrossSectionPerVolume(
     177                                      const G4Material* mat,
     178                                      const G4ParticleDefinition* p,
     179                                      G4double kineticEnergy,
     180                                      G4double, G4double)
     181{
     182  return mat->GetElectronDensity()*
     183    ComputeCrossSectionPerElectron(p, kineticEnergy);
     184}
     185
     186//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     187
     188G4double G4eeToHadronsModel::ComputeCrossSectionPerAtom(
     189                                      const G4ParticleDefinition* p,
     190                                      G4double kineticEnergy,
     191                                      G4double Z, G4double,
     192                                      G4double, G4double)
     193{
     194  return Z*ComputeCrossSectionPerElectron(p, kineticEnergy);
    150195}
    151196
  • trunk/source/processes/electromagnetic/highenergy/src/G4eeToHadronsMultiModel.cc

    r819 r961  
    2424// ********************************************************************
    2525//
    26 // $Id: G4eeToHadronsMultiModel.cc,v 1.4 2007/05/23 08:50:41 vnivanch Exp $
    27 // GEANT4 tag $Name: $
     26// $Id: G4eeToHadronsMultiModel.cc,v 1.6 2008/07/11 17:49:11 vnivanch Exp $
     27// GEANT4 tag $Name: geant4-09-02-ref-02 $
    2828//
    2929// -------------------------------------------------------------------
     
    3434// File name:     G4eeToHadronsMultiModel
    3535//
    36 // Author:        Vladimir Ivanchenko on base of Michel Maire code
     36// Author:        Vladimir Ivanchenko
    3737//
    3838// Creation date: 02.08.2004
     
    5151#include "G4eeToHadronsMultiModel.hh"
    5252#include "G4eeToTwoPiModel.hh"
     53#include "G4eeTo3PiModel.hh"
     54#include "G4eeToPGammaModel.hh"
     55#include "G4ee2KNeutralModel.hh"
     56#include "G4ee2KChargedModel.hh"
    5357#include "G4eeCrossSections.hh"
     58#include "G4Vee2hadrons.hh"
    5459
    5560//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     
    8085//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    8186
    82 void G4eeToHadronsMultiModel::Initialise(const G4ParticleDefinition* p, const G4DataVector& v)
     87void G4eeToHadronsMultiModel::Initialise(const G4ParticleDefinition*,
     88                                         const G4DataVector&)
    8389{
    8490  if(!isInitialised) {
    8591    isInitialised = true;
    8692
    87     thKineticEnergy = DBL_MAX;
    88     maxKineticEnergy = HighEnergyLimit();
     93    thKineticEnergy  = DBL_MAX;
     94    maxKineticEnergy = 1.2*GeV;
    8995
    9096    cross = new G4eeCrossSections();
    91     G4eeToHadronsModel* model =
    92       new G4eeToHadronsModel(new G4eeToTwoPiModel(cross), verbose);
    93     models.push_back(model);
    94     model->SetHighEnergyLimit(maxKineticEnergy);
    95     model->Initialise(p, v);
    96     G4double emin = model->LowEnergyLimit();
    97     if(emin < thKineticEnergy) thKineticEnergy = emin;
    98     ekinMin.push_back(emin);
    99     ekinMax.push_back(model->HighEnergyLimit());
    100     ekinPeak.push_back(model->PeakEnergy());
    101     cumSum.push_back(0.0);
    102     nModels = 1;
    103 
    104     if(pParticleChange)
     97
     98    G4eeToTwoPiModel* m2pi = new G4eeToTwoPiModel(cross);
     99    m2pi->SetHighEnergy(maxKineticEnergy);
     100    AddEEModel(m2pi);
     101
     102    G4eeTo3PiModel* m3pi1 = new G4eeTo3PiModel(cross);
     103    m3pi1->SetHighEnergy(0.95*GeV);
     104    AddEEModel(m3pi1);
     105
     106    G4eeTo3PiModel* m3pi2 = new G4eeTo3PiModel(cross);
     107    m3pi2->SetLowEnergy(0.95*GeV);
     108    m3pi2->SetHighEnergy(maxKineticEnergy);
     109    AddEEModel(m3pi2);
     110
     111    G4ee2KChargedModel* m2kc = new G4ee2KChargedModel(cross);
     112    m2kc->SetHighEnergy(maxKineticEnergy);
     113    AddEEModel(m2kc);
     114
     115    G4ee2KNeutralModel* m2kn = new G4ee2KNeutralModel(cross);
     116    m2kn->SetHighEnergy(maxKineticEnergy);
     117    AddEEModel(m2kn);
     118
     119    G4eeToPGammaModel* mpg1 = new G4eeToPGammaModel(cross,"pi0");
     120    mpg1->SetLowEnergy(0.7*GeV);
     121    mpg1->SetHighEnergy(maxKineticEnergy);
     122    AddEEModel(mpg1);
     123
     124    G4eeToPGammaModel* mpg2 = new G4eeToPGammaModel(cross,"eta");
     125    mpg2->SetLowEnergy(0.7*GeV);
     126    mpg2->SetHighEnergy(maxKineticEnergy);
     127    AddEEModel(mpg2);
     128
     129    nModels = models.size();
     130
     131    if(pParticleChange) {
    105132      fParticleChange =
    106133        reinterpret_cast<G4ParticleChangeForGamma*>(pParticleChange);
    107     else
     134    } else {
    108135      fParticleChange = new G4ParticleChangeForGamma();
     136    }
     137  }
     138}
     139
     140//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     141
     142void G4eeToHadronsMultiModel::AddEEModel(G4Vee2hadrons* mod)
     143{
     144  G4eeToHadronsModel* model = new G4eeToHadronsModel(mod, verbose);
     145  model->SetLowEnergyLimit(LowEnergyLimit());
     146  model->SetHighEnergyLimit(HighEnergyLimit());
     147  models.push_back(model);
     148  G4double elow = mod->ThresholdEnergy();
     149  ekinMin.push_back(elow);
     150  if(thKineticEnergy > elow) thKineticEnergy = elow;
     151  ekinMax.push_back(mod->HighEnergy());
     152  ekinPeak.push_back(mod->PeakEnergy());
     153  cumSum.push_back(0.0);
     154}
     155
     156//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     157
     158G4double G4eeToHadronsMultiModel::CrossSectionPerVolume(
     159                                      const G4Material* mat,
     160                                      const G4ParticleDefinition* p,
     161                                      G4double kineticEnergy,
     162                                      G4double, G4double)
     163{
     164  return mat->GetElectronDensity()*
     165    ComputeCrossSectionPerElectron(p, kineticEnergy);
     166}
     167
     168//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     169
     170G4double G4eeToHadronsMultiModel::ComputeCrossSectionPerAtom(
     171                                      const G4ParticleDefinition* p,
     172                                      G4double kineticEnergy,
     173                                      G4double Z, G4double,
     174                                      G4double, G4double)
     175{
     176  return Z*ComputeCrossSectionPerElectron(p, kineticEnergy);
     177}
     178
     179
     180//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     181
     182void G4eeToHadronsMultiModel::SampleSecondaries(std::vector<G4DynamicParticle*>* newp,
     183                                                const G4MaterialCutsCouple* couple,
     184                                                const G4DynamicParticle* dp,
     185                                                G4double, G4double)
     186{
     187  G4double kinEnergy = dp->GetKineticEnergy();
     188  if (kinEnergy > thKineticEnergy) {
     189    G4double q = cumSum[nModels-1]*G4UniformRand();
     190    for(G4int i=0; i<nModels; i++) {
     191      if(q <= cumSum[i]) {
     192        (models[i])->SampleSecondaries(newp, couple,dp);
     193        if(newp->size() > 0) fParticleChange->ProposeTrackStatus(fStopAndKill);
     194        break;
     195      }
     196    }
    109197  }
    110198}
     
    115203{
    116204  if(verbose > 0) {
    117     G4cout << "      e+ annihilation into hadrons active above "
    118            << thKineticEnergy/GeV << " GeV"
     205    G4double e1 = 0.5*thKineticEnergy*thKineticEnergy/electron_mass_c2
     206      - 2.0*electron_mass_c2;
     207    G4double e2 = 0.5*maxKineticEnergy*maxKineticEnergy/electron_mass_c2
     208      - 2.0*electron_mass_c2;
     209    G4cout << "      e+ annihilation into hadrons active from "
     210           << e1/GeV << " GeV to " << e2/GeV << " GeV"
    119211           << G4endl;
    120212  }
     
    128220    csFactor = fac;
    129221    if(verbose > 0)
    130       G4cout << "### G4eeToHadronsMultiModel: The cross section for G4eeToHadronsMultiModel is  "
    131              << "increased by the Factor= " << csFactor << G4endl;
    132   }
    133 }
    134 
    135 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     222      G4cout << "### G4eeToHadronsMultiModel: The cross section for G4eeToHadronsMultiModel "
     223             << " is increased by the Factor= " << csFactor << G4endl;
     224  }
     225}
     226
     227//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
  • trunk/source/processes/electromagnetic/highenergy/src/G4eeToTwoPiModel.cc

    r819 r961  
    2424// ********************************************************************
    2525//
    26 // $Id: G4eeToTwoPiModel.cc,v 1.5 2007/05/22 17:37:30 vnivanch Exp $
    27 // GEANT4 tag $Name: $
     26// $Id: G4eeToTwoPiModel.cc,v 1.7 2009/02/20 16:38:33 vnivanch Exp $
     27// GEANT4 tag $Name: geant4-09-02-ref-02 $
    2828//
    2929// -------------------------------------------------------------------
     
    6464  cross(cr)
    6565{
    66   Initialise();
     66  massPi = G4PionPlus::PionPlus()->GetPDGMass();
     67  massRho = 775.5*MeV;
    6768}
    6869
     
    7475//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    7576
    76 void G4eeToTwoPiModel::Initialise()
     77G4double G4eeToTwoPiModel::ThresholdEnergy() const
    7778{
    78   massPi = G4PionPlus::PionPlus()->GetPDGMass();
    79   massRho = 770.*MeV;
    80   highEnergy = 1.*GeV;
    81   cross = new G4eeCrossSections();
     79  return 2.0*massPi;
     80}
     81
     82//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     83
     84G4double G4eeToTwoPiModel::PeakEnergy() const
     85{
     86  return massRho;
     87}
     88
     89//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     90
     91G4double G4eeToTwoPiModel::ComputeCrossSection(G4double e) const
     92{
     93  G4double ee = std::min(HighEnergy(),e);
     94  return cross->CrossSection2pi(ee);
    8295}
    8396
     
    87100                                                 G4double emax) const
    88101{
    89   G4double tmin = max(emin, 2.0*massPi);
    90   G4double tmax = max(tmin, emax);
     102  G4double tmin = std::max(emin, 2.0*massPi);
     103  G4double tmax = std::max(tmin, emax);
    91104  G4int nbins = (G4int)((tmax - tmin)/(5.*MeV));
    92105  G4PhysicsVector* v = new G4PhysicsLinearVector(emin,emax,nbins);
     106  v->SetSpline(true);
    93107  return v;
    94108}
     
    97111
    98112void G4eeToTwoPiModel::SampleSecondaries(std::vector<G4DynamicParticle*>* newp,
    99             G4double e, const G4ThreeVector& direction) const
     113            G4double e, const G4ThreeVector& direction)
    100114{
    101115
     
    113127  dir.rotateUz(direction);
    114128
    115   // create G4DynamicParticle object for delta ray
     129  // create G4DynamicParticle objects
    116130  G4DynamicParticle* pip =
    117131     new G4DynamicParticle(G4PionPlus::PionPlus(),dir,tkin);
  • trunk/source/processes/electromagnetic/highenergy/src/G4hhIonisation.cc

    r819 r961  
    2424// ********************************************************************
    2525//
    26 // $Id: G4hhIonisation.cc,v 1.6 2007/05/22 17:37:30 vnivanch Exp $
    27 // GEANT4 tag $Name: geant4-09-01-patch-02 $
     26// $Id: G4hhIonisation.cc,v 1.9 2009/02/20 16:38:33 vnivanch Exp $
     27// GEANT4 tag $Name: geant4-09-02-ref-02 $
    2828//
    2929// -------------------------------------------------------------------
     
    6464    isInitialised(false)
    6565{
    66   minKinEnergy = 0.1*keV;
    67   maxKinEnergy = 100.*TeV;
    68   SetDEDXBinning(120);
    69   SetMinKinEnergy(minKinEnergy);
    70   SetMaxKinEnergy(maxKinEnergy);
    7166  SetStepFunction(0.1, 0.1*mm);
    7267  SetVerboseLevel(1);
     68  SetProcessSubType(fIonisation);
    7369  mass = 0.0;
    7470  ratio = 0.0;
     
    7975G4hhIonisation::~G4hhIonisation()
    8076{}
     77
     78//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     79
     80G4bool G4hhIonisation::IsApplicable(const G4ParticleDefinition& p)
     81{
     82  return (p.GetPDGCharge() != 0.0 && p.GetPDGMass() > 100.0*MeV &&
     83         !p.IsShortLived());
     84}
     85
     86//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     87
     88G4double G4hhIonisation::MinPrimaryEnergy(const G4ParticleDefinition*,
     89                                          const G4Material*,
     90                                          G4double cut)
     91{
     92  G4double x = 0.5*cut/electron_mass_c2;
     93  G4double y = electron_mass_c2/mass;
     94  G4double g = x*y + std::sqrt((1. + x)*(1. + x*y*y));
     95  return mass*(g - 1.0);
     96}
    8197
    8298//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     
    101117  G4int nm = 1;
    102118
     119  minKinEnergy = MinKinEnergy();
     120
    103121  if(eth > minKinEnergy) {
    104122    G4VEmModel* em = new G4BraggNoDeltaModel();
     
    109127  }
    110128
    111   if(eth < maxKinEnergy) {
     129  if(eth < MaxKinEnergy()) {
    112130    G4VEmModel* em1 = new G4BetheBlochNoDeltaModel();
    113131    em1->SetLowEnergyLimit(std::max(eth,minKinEnergy));
    114     em1->SetHighEnergyLimit(maxKinEnergy);
     132    em1->SetHighEnergyLimit(MaxKinEnergy());
    115133    AddEmModel(nm, em1, flucModel);
    116134  }
    117135
    118   if(verboseLevel>0)
     136  if(verboseLevel>1) {
    119137    G4cout << "G4hhIonisation is initialised: Nmodels= " << nm << G4endl;
    120 
     138  }
    121139  isInitialised = true;
    122140}
     
    127145{
    128146  G4cout << "      Delta-ray will not be produced; "
    129          << "Bether-Bloch model for E > " << std::max(eth,minKinEnergy)
    130147         << G4endl;
    131   if(eth > minKinEnergy) G4cout
    132          << "      ICRU49 parametrisation scaled from protons below.";
    133   G4cout << G4endl;
    134148}
    135149
  • trunk/source/processes/electromagnetic/highenergy/src/G4mplIonisation.cc

    r819 r961  
    2424// ********************************************************************
    2525//
    26 // $Id: G4mplIonisation.cc,v 1.5 2007/05/31 11:13:31 vnivanch Exp $
    27 // GEANT4 tag $Name: geant4-09-01-patch-02 $
     26// $Id: G4mplIonisation.cc,v 1.8 2009/02/20 16:38:33 vnivanch Exp $
     27// GEANT4 tag $Name: geant4-09-02-ref-02 $
    2828//
    2929// -------------------------------------------------------------------
     
    6464
    6565  SetVerboseLevel(0);
     66  SetProcessSubType(fIonisation);
     67  SetStepFunction(0.2, 1*mm);
    6668}
    6769
     
    7072G4mplIonisation::~G4mplIonisation()
    7173{}
     74
     75//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     76
     77G4bool G4mplIonisation::IsApplicable(const G4ParticleDefinition& p)
     78{
     79  return (p.GetParticleName() == "monopole");
     80}
    7281
    7382//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     
    8291
    8392  G4mplIonisationModel* ion  = new G4mplIonisationModel(magneticCharge,"PAI");
    84   ion->SetLowEnergyLimit(0.1*keV);
    85   ion->SetHighEnergyLimit(100.*TeV);
     93  ion->SetLowEnergyLimit(MinKinEnergy());
     94  ion->SetHighEnergyLimit(MaxKinEnergy());
    8695  AddEmModel(0,ion,ion);
    87 
    88   SetStepFunction(0.2, 1*mm);
    8996
    9097  isInitialised = true;
  • trunk/source/processes/electromagnetic/highenergy/src/G4mplIonisationModel.cc

    r819 r961  
    2424// ********************************************************************
    2525//
    26 // $Id: G4mplIonisationModel.cc,v 1.5 2007/11/13 18:36:29 vnivanch Exp $
    27 // GEANT4 tag $Name: $
     26// $Id: G4mplIonisationModel.cc,v 1.6 2009/02/20 16:38:33 vnivanch Exp $
     27// GEANT4 tag $Name: geant4-09-02-ref-02 $
    2828//
    2929// -------------------------------------------------------------------
     
    139139//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    140140
    141 G4double G4mplIonisationModel::ComputeDEDXAhlen(const G4Material* material, G4double bg2)
     141G4double G4mplIonisationModel::ComputeDEDXAhlen(const G4Material* material,
     142                                                G4double bg2)
    142143{
    143144  G4double eDensity = material->GetElectronDensity();
     
    176177  return dedx;
    177178}
     179
     180//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     181
     182void G4mplIonisationModel::SampleSecondaries(std::vector<G4DynamicParticle*>*,
     183                                             const G4MaterialCutsCouple*,
     184                                             const G4DynamicParticle*,
     185                                             G4double,
     186                                             G4double)
     187{}
    178188
    179189//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     
    204214  return loss;
    205215}
     216
     217//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     218
     219G4double G4mplIonisationModel::Dispersion(const G4Material* material,
     220                                          const G4DynamicParticle* dp,
     221                                          G4double& tmax,
     222                                          G4double& length)
     223{
     224  G4double siga = 0.0;
     225  G4double tau   = dp->GetKineticEnergy()/mass;
     226  if(tau > 0.0) {
     227    G4double electronDensity = material->GetElectronDensity();
     228    G4double gam   = tau + 1.0;
     229    G4double invbeta2 = (gam*gam)/(tau * (tau+2.0));
     230    siga  = (invbeta2 - 0.5) * twopi_mc2_rcl2 * tmax * length
     231      * electronDensity * chargeSquare;
     232  }
     233  return siga;
     234}
     235
     236//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
Note: See TracChangeset for help on using the changeset viewer.