59 static const G4double coef = 0.4*std::sqrt(3.)/fine_structure_const;
64 G4cout<<
"G4QSynchRad::MeanFreePath: gamma = "<<gamma<<
G4endl;
67 if( gamma > minGamma )
71 G4cout<<
"G4QSynchRad::MeanFreePath: Radius = "<<R/meter<<
" [m]"<<
G4endl;
73 if(R > 0.) MFP= coef*R/gamma;
76 G4cout<<
"G4QSynchRad::MeanFreePath = "<<MFP/centimeter<<
" [cm]"<<
G4endl;
84 static const G4double hc = 1.5 * c_light * hbar_Planck;
88 if(gamma <= minGamma )
91 G4cout<<
"-Warning-G4QSynchRad::PostStepDoIt is called for small gamma="<<gamma<<
G4endl;
100 G4cout<<
"-Warning-G4QSynchRad::PostStepDoIt: zero or negativ radius ="
101 <<R/meter<<
" [m]"<<
G4endl;
105 G4double EPhoton = hc * gamma * gamma * gamma / R;
108 if (rnd < 0.5 ) EPhoton *= .65 * rnd * rnd * rnd;
109 else if(rnd > .997) EPhoton *= 15.-1.03*std::log((1.-rnd)/dd+1.);
114 EPhoton*=(2806.+28./rnd)/(1.+500./r2/r2+6500.*(std::sqrt(dr)+28.*dr*dr*dr));
117 G4cout<<
"G4SynchRad::PostStepDoIt: PhotonEnergy = "<<EPhoton/keV<<
" [keV]"<<
G4endl;
121 G4cout<<
"-Warning-G4QSynchRad::PostStepDoIt: zero or negativ photon energy="
122 <<EPhoton/keV<<
" [keV]"<<
G4endl;
134 G4cout<<
"-Warning-G4QSynchRad::PostStepDoIt: PhotonEnergy > TotalKinEnergy"<<
G4endl;
151 static const G4double unk = meter*tesla/0.3/gigaelectronvolt;
154 if(z == 0.)
return 0.;
172 if(OrtB == 0.)
return 0.;
173 Polarization = Ort/OrtB;
176 G4cout<<
"G4QSynchRad::GetRadius: P(GeV)="<<mom/GeV<<
", B(tesla)="<<OrtB/tesla<<
G4endl;
179 return mom * unk / z / OrtB;
#define G4HadronicDeprecate(name)
G4DLLIMPORT std::ostream G4cout
Hep3Vector cross(const Hep3Vector &) const
const G4ThreeVector & GetMomentumDirection() const
void SetPolarization(G4double polX, G4double polY, G4double polZ)
G4ParticleDefinition * GetDefinition() const
G4double GetKineticEnergy() const
G4double GetTotalEnergy() const
G4double GetTotalMomentum() const
const G4Field * GetDetectorField() const
virtual void GetFieldValue(const double Point[4], double *fieldArr) const =0
void AddSecondary(G4Track *aSecondary)
void ProposeEnergy(G4double finalEnergy)
virtual void Initialize(const G4Track &)
G4double GetPDGCharge() const
G4FieldManager * FindAndSetFieldManager(G4VPhysicalVolume *pCurrentPhysVol)
G4QSynchRad(const G4String &processName="CHIPS_SynchrotronRadiation", G4ProcessType type=fElectromagnetic)
G4double GetRadius(const G4Track &track)
G4VParticleChange * PostStepDoIt(const G4Track &track, const G4Step &step)
G4double GetMeanFreePath(const G4Track &track, G4double step, G4ForceCondition *fCond)
G4VPhysicalVolume * GetVolume() const
const G4ThreeVector & GetPosition() const
const G4DynamicParticle * GetDynamicParticle() const
static G4TransportationManager * GetTransportationManager()
G4PropagatorInField * GetPropagatorInField() const
virtual G4VParticleChange * PostStepDoIt(const G4Track &, const G4Step &)
void ProposeTrackStatus(G4TrackStatus status)
void ProposeLocalEnergyDeposit(G4double anEnergyPart)
void SetNumberOfSecondaries(G4int totSecondaries)
G4ParticleChange aParticleChange