144{
156 "G4ElectroNuclearReaction::ApplyYourself called for neither electron or positron");
160 for(size_t ii=0; ii<aTab->size(); ++ii) if ( std::abs((*aTab)[ii]->GetZ()-aZ) < .1)
161 {
162 anElement = (*aTab)[ii];
163 break;
164 }
165 if(0==anElement)
166 {
167 G4cerr<<
"***G4ElectroNuclearReaction::ApplyYourself: element with Z="
170 }
171
172
174 if(xSec<=0.)
175 {
178
180 return &theResult;
181 }
184 if( theElectronKinEnergy < photonEnergy )
185 {
186 G4cout<<
"G4ElectroNuclearReaction::ApplyYourself: photonEnergy is very high"<<
G4endl;
187 G4cout<<
">>> If this condition persists, please contact Geant4 group"<<
G4endl;
190
192 return &theResult;
193 }
195 G4double W=photonEnergy-photonQ2/dM;
196 if(getenv("debug_G4ElectroNuclearReaction") )
197 {
198 G4cout <<
"G4ElectroNuclearReaction: Equivalent Energy = "<<W<<
G4endl;
199 }
200 if(W<0.)
201 {
204
206 return &theResult;
207
208
209 }
216 delete theDynamicPhoton;
219 {
222
224 return &theResult;
225 }
227
228 G4double iniE=theElectronKinEnergy+me;
232 G4double iniP=std::sqrt(iniE*iniE-me2);
233 G4double finP=std::sqrt(finE*finE-me2);
234 G4double cost=(EEm+EEm-photonQ2)/iniP/finP;
235 if(cost> 1.) cost= 1.;
236 if(cost<-1.) cost=-1.;
241 G4double sint=std::sqrt(1.-cost*cost);
249
250
254 if (photonEnergy < 3*CLHEP::GeV)
255 result = theLEModel.
ApplyYourself(localTrack, aTargetNucleus, &theResult);
256 else {
257
261 result = &theResult;
262 }
263 return result;
264}
std::vector< G4Element * > G4ElementTable
G4ThreeVector G4ParticleMomentum
G4DLLIMPORT std::ostream G4cerr
G4DLLIMPORT std::ostream G4cout
Hep3Vector orthogonal() const
Hep3Vector cross(const Hep3Vector &) const
G4HadFinalState * ApplyYourself(const G4HadProjectile &aTrack, G4Nucleus &aTargetNucleus, G4HadFinalState *aChange=0)
const G4ThreeVector & GetMomentumDirection() const
G4ParticleDefinition * GetDefinition() const
G4double GetKineticEnergy() const
void SetKineticEnergy(G4double aEnergy)
G4double GetEquivalentPhotonQ2(G4double nu)
G4double GetEquivalentPhotonEnergy()
G4double GetVirtualFactor(G4double nu, G4double Q2)
static G4Electron * ElectronDefinition()
static G4Electron * Electron()
static const G4ElementTable * GetElementTable()
static G4Gamma * GammaDefinition()
void SetStatusChange(G4HadFinalStateStatus aS)
void AddSecondaries(const std::vector< G4HadSecondary > &addSecs)
void SetEnergyChange(G4double anEnergy)
void SetMomentumChange(const G4ThreeVector &aV)
const G4ParticleDefinition * GetDefinition() const
const G4LorentzVector & Get4Momentum() const
static G4Neutron * Neutron()
G4double GetPDGMass() const
static G4Positron * PositronDefinition()
static G4Proton * Proton()
G4HadFinalState * ApplyYourself(const G4HadProjectile &thePrimary, G4Nucleus &theNucleus)
G4double GetCrossSection(const G4DynamicParticle *, const G4Element *, const G4Material *mat=0)