source: trunk/source/processes/electromagnetic/standard/include/G4IonCoulombScatteringModel.hh @ 1350

Last change on this file since 1350 was 1350, checked in by garnier, 13 years ago

update to last version 4.9.4

File size: 5.7 KB
Line 
1//
2// ********************************************************************
3// * License and Disclaimer                                           *
4// *                                                                  *
5// * The  Geant4 software  is  copyright of the Copyright Holders  of *
6// * the Geant4 Collaboration.  It is provided  under  the terms  and *
7// * conditions of the Geant4 Software License,  included in the file *
8// * LICENSE and available at  http://cern.ch/geant4/license .  These *
9// * include a list of copyright holders.                             *
10// *                                                                  *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work  make  any representation or  warranty, express or implied, *
14// * regarding  this  software system or assume any liability for its *
15// * use.  Please see the license in the file  LICENSE  and URL above *
16// * for the full disclaimer and the limitation of liability.         *
17// *                                                                  *
18// * This  code  implementation is the result of  the  scientific and *
19// * technical work of the GEANT4 collaboration.                      *
20// * By using,  copying,  modifying or  distributing the software (or *
21// * any work based  on the software)  you  agree  to acknowledge its *
22// * use  in  resulting  scientific  publications,  and indicate your *
23// * acceptance of all terms of the Geant4 Software license.          *
24// ********************************************************************
25//
26//      G4IonCoulombScatteringModel.hh
27// -------------------------------------------------------------------
28//
29// GEANT4 Class header file
30//
31// File name:    G4IonCoulombScatteringModel
32//
33// Author:      Cristina Consolandi
34//
35// Creation date: 05.10.2010 from G4eCoulombScatteringModel
36//                              & G4CoulombScatteringModel
37//
38//
39// Class Description:
40//      Single Scattering Model for
41//      for protons, alpha and heavy Ions
42//
43// Reference:           
44//      M.J. Boschini et al. "Nuclear and Non-Ionizing Energy-Loss
45//      for Coulomb ScatteredParticles from Low Energy up to Relativistic
46//      Regime in Space Radiation Environment"
47//      Accepted for publication in the Proceedings of  the  ICATPP Conference
48//      on Cosmic Rays for Particle and Astroparticle Physics, Villa  Olmo, 7-8
49//      October,  2010, to be published by World Scientific (Singapore).
50//
51//      Available for downloading at:
52//      http://arxiv.org/abs/1011.4822
53//
54// -------------------------------------------------------------------
55//
56
57#ifndef G4IonCoulombScatteringModel_h
58#define G4IonCoulombScatteringModel_h 1
59
60#include "G4VEmModel.hh"
61#include "globals.hh"
62#include "G4NistManager.hh"
63#include "G4IonCoulombCrossSection.hh"
64
65#include <vector>
66using namespace std;
67
68class G4ParticleChangeForGamma;
69class G4ParticleDefinition;
70
71class G4IonCoulombScatteringModel : public G4VEmModel
72{
73
74public:
75
76        G4IonCoulombScatteringModel(const G4String& nam = "IonCoulombScattering");
77 
78        virtual ~G4IonCoulombScatteringModel();
79
80        virtual void Initialise(const G4ParticleDefinition*, const G4DataVector&);
81 
82        virtual G4double ComputeCrossSectionPerAtom(
83                                const G4ParticleDefinition*,
84                                G4double kinEnergy, 
85                                G4double Z, 
86                                G4double A, 
87                                G4double cut,
88                                G4double emax);
89
90        virtual void SampleSecondaries(std::vector<G4DynamicParticle*>*,
91                                 const G4MaterialCutsCouple*,
92                                 const G4DynamicParticle*,
93                                 G4double tmin,
94                                 G4double maxEnergy);
95
96
97       
98        inline void SetRecoilThreshold(G4double eth);
99        void        SetHeavyIonCorr(G4int b) {heavycorr=b; };
100        G4int       GetHeavyIonCorr() {return heavycorr; };
101
102
103
104
105protected: 
106
107         
108        inline void DefineMaterial(const G4MaterialCutsCouple*);
109 
110        inline void SetupParticle(const G4ParticleDefinition*);
111
112
113
114private:
115
116
117        // hide assignment operator
118  G4IonCoulombScatteringModel & operator=(const G4IonCoulombScatteringModel &right);
119  G4IonCoulombScatteringModel(const  G4IonCoulombScatteringModel&);
120
121
122protected:
123
124
125        G4ParticleTable*          theParticleTable;
126        G4ParticleChangeForGamma* fParticleChange; 
127        G4NistManager*            fNistManager;
128        G4IonCoulombCrossSection* ioncross;       
129
130        const std::vector<G4double>* pCuts;
131        const G4MaterialCutsCouple* currentCouple; 
132        const G4Material*           currentMaterial;
133        const G4Element*            currentElement;
134        G4int                       currentMaterialIndex;
135
136
137        G4int                     heavycorr;
138
139        G4double                  cosThetaMin;
140        G4double                  recoilThreshold;
141                               
142
143        // projectile
144        const G4ParticleDefinition* particle;           
145        const G4ParticleDefinition* theProton; 
146        G4double                  mass;         
147        G4double                  lowEnergyLimit;
148
149
150private:
151
152        G4bool                    isInitialised;       
153
154};
155
156//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
157void G4IonCoulombScatteringModel::DefineMaterial(const G4MaterialCutsCouple* cup)
158{ 
159        if(cup != currentCouple) {
160                currentCouple = cup;
161                currentMaterial = cup->GetMaterial();
162                currentMaterialIndex = currentCouple->GetIndex();
163
164                }
165}
166
167//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
168
169inline
170void G4IonCoulombScatteringModel::SetupParticle(const G4ParticleDefinition* p)
171{
172        if(p != particle) {
173                particle = p;
174                mass = particle->GetPDGMass();
175                ioncross->SetupParticle(p);
176                }
177}
178//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
179
180inline void G4IonCoulombScatteringModel::SetRecoilThreshold(G4double eth)
181{
182        recoilThreshold = eth;
183}
184
185//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
186
187#endif
Note: See TracBrowser for help on using the repository browser.