source: trunk/source/processes/electromagnetic/xrays/include/G4Cerenkov.hh@ 1036

Last change on this file since 1036 was 1007, checked in by garnier, 17 years ago

update to geant4.9.2

File size: 8.4 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//
27// $Id: G4Cerenkov.hh,v 1.10 2008/10/22 01:17:36 gum Exp $
28// GEANT4 tag $Name: geant4-09-02 $
29//
30//
31////////////////////////////////////////////////////////////////////////
32// Cerenkov Radiation Class Definition
33////////////////////////////////////////////////////////////////////////
34//
35// File: G4Cerenkov.hh
36// Description: Discrete Process - Generation of Cerenkov Photons
37// Version: 2.0
38// Created: 1996-02-21
39// Author: Juliet Armstrong
40// Updated: 2007-09-30 change inheritance to G4VDiscreteProcess
41// 2005-07-28 add G4ProcessType to constructor
42// 1999-10-29 add method and class descriptors
43// 1997-04-09 by Peter Gumplinger
44// > G4MaterialPropertiesTable; new physics/tracking scheme
45// mail: gum@triumf.ca
46//
47////////////////////////////////////////////////////////////////////////
48
49#ifndef G4Cerenkov_h
50#define G4Cerenkov_h 1
51
52/////////////
53// Includes
54/////////////
55
56#include "globals.hh"
57#include "templates.hh"
58#include "Randomize.hh"
59#include "G4ThreeVector.hh"
60#include "G4ParticleMomentum.hh"
61#include "G4Step.hh"
62#include "G4VProcess.hh"
63#include "G4OpticalPhoton.hh"
64#include "G4DynamicParticle.hh"
65#include "G4Material.hh"
66#include "G4PhysicsTable.hh"
67#include "G4MaterialPropertiesTable.hh"
68#include "G4PhysicsOrderedFreeVector.hh"
69
70// Class Description:
71// Discrete Process -- Generation of Cerenkov Photons.
72// Class inherits publicly from G4VDiscreteProcess.
73// Class Description - End:
74
75/////////////////////
76// Class Definition
77/////////////////////
78
79class G4Cerenkov : public G4VProcess
80{
81
82private:
83
84 //////////////
85 // Operators
86 //////////////
87
88 // G4Cerenkov& operator=(const G4Cerenkov &right);
89
90public: // Without description
91
92 ////////////////////////////////
93 // Constructors and Destructor
94 ////////////////////////////////
95
96 G4Cerenkov(const G4String& processName = "Cerenkov",
97 G4ProcessType type = fElectromagnetic);
98
99 // G4Cerenkov(const G4Cerenkov &right);
100
101 ~G4Cerenkov();
102
103 ////////////
104 // Methods
105 ////////////
106
107public: // With description
108
109 G4bool IsApplicable(const G4ParticleDefinition& aParticleType);
110 // Returns true -> 'is applicable', for all charged particles.
111
112 G4double GetMeanFreePath(const G4Track& aTrack,
113 G4double ,
114 G4ForceCondition* );
115 // Returns the discrete step limit and sets the 'StronglyForced'
116 // condition for the DoIt to be invoked at every step.
117
118 G4double PostStepGetPhysicalInteractionLength(const G4Track& aTrack,
119 G4double ,
120 G4ForceCondition* );
121 // Returns the discrete step limit and sets the 'StronglyForced'
122 // condition for the DoIt to be invoked at every step.
123
124 G4VParticleChange* PostStepDoIt(const G4Track& aTrack,
125 const G4Step& aStep);
126 // This is the method implementing the Cerenkov process.
127
128 // no operation in AtRestDoIt and AlongStepDoIt
129 virtual G4double AlongStepGetPhysicalInteractionLength(
130 const G4Track&,
131 G4double ,
132 G4double ,
133 G4double& ,
134 G4GPILSelection*
135 ) { return -1.0; };
136
137 virtual G4double AtRestGetPhysicalInteractionLength(
138 const G4Track& ,
139 G4ForceCondition*
140 ) { return -1.0; };
141
142 // no operation in AtRestDoIt and AlongStepDoIt
143 virtual G4VParticleChange* AtRestDoIt(
144 const G4Track& ,
145 const G4Step&
146 ) {return 0;};
147
148 virtual G4VParticleChange* AlongStepDoIt(
149 const G4Track& ,
150 const G4Step&
151 ) {return 0;};
152
153 void SetTrackSecondariesFirst(const G4bool state);
154 // If set, the primary particle tracking is interrupted and any
155 // produced Cerenkov photons are tracked next. When all have
156 // been tracked, the tracking of the primary resumes.
157
158 void SetMaxBetaChangePerStep(const G4double d);
159 // Set the maximum allowed change in beta = v/c in % (perCent)
160 // per step.
161
162 void SetMaxNumPhotonsPerStep(const G4int NumPhotons);
163 // Set the maximum number of Cerenkov photons allowed to be
164 // generated during a tracking step. This is an average ONLY;
165 // the actual number will vary around this average. If invoked,
166 // the maximum photon stack will roughly be of the size set.
167 // If not called, the step is not limited by the number of
168 // photons generated.
169
170 G4PhysicsTable* GetPhysicsTable() const;
171 // Returns the address of the physics table.
172
173 void DumpPhysicsTable() const;
174 // Prints the physics table.
175
176private:
177
178 void BuildThePhysicsTable();
179
180 /////////////////////
181 // Helper Functions
182 /////////////////////
183
184 G4double GetAverageNumberOfPhotons(const G4double charge,
185 const G4double beta,
186 const G4Material *aMaterial,
187 const G4MaterialPropertyVector* Rindex) const;
188
189 ///////////////////////
190 // Class Data Members
191 ///////////////////////
192
193protected:
194
195 G4PhysicsTable* thePhysicsTable;
196 // A Physics Table can be either a cross-sections table or
197 // an energy table (or can be used for other specific
198 // purposes).
199
200private:
201
202 G4bool fTrackSecondariesFirst;
203 G4double fMaxBetaChange;
204 G4int fMaxPhotons;
205};
206
207////////////////////
208// Inline methods
209////////////////////
210
211inline
212G4bool G4Cerenkov::IsApplicable(const G4ParticleDefinition& aParticleType)
213{
214 if (aParticleType.GetParticleName() != "chargedgeantino" ) {
215 return (aParticleType.GetPDGCharge() != 0);
216 } else {
217 return false;
218 }
219}
220
221inline
222void G4Cerenkov::SetTrackSecondariesFirst(const G4bool state)
223{
224 fTrackSecondariesFirst = state;
225}
226
227inline
228void G4Cerenkov::SetMaxBetaChangePerStep(const G4double value)
229{
230 fMaxBetaChange = value*perCent;
231}
232
233inline
234void G4Cerenkov::SetMaxNumPhotonsPerStep(const G4int NumPhotons)
235{
236 fMaxPhotons = NumPhotons;
237}
238
239inline
240void G4Cerenkov::DumpPhysicsTable() const
241{
242 G4int PhysicsTableSize = thePhysicsTable->entries();
243 G4PhysicsOrderedFreeVector *v;
244
245 for (G4int i = 0 ; i < PhysicsTableSize ; i++ )
246 {
247 v = (G4PhysicsOrderedFreeVector*)(*thePhysicsTable)[i];
248 v->DumpValues();
249 }
250}
251
252inline
253G4PhysicsTable* G4Cerenkov::GetPhysicsTable() const
254{
255 return thePhysicsTable;
256}
257
258#endif /* G4Cerenkov_h */
Note: See TracBrowser for help on using the repository browser.