Geant4  v4-10.4-release
 모두 클래스 네임스페이스들 파일들 함수 변수 타입정의 열거형 타입 열거형 멤버 Friends 매크로 그룹들 페이지들
G4SynchrotronRadiationInMat.cc
이 파일의 문서화 페이지로 가기
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: G4SynchrotronRadiationInMat.cc 108423 2018-02-13 11:18:13Z gcosmo $
28 //
29 // --------------------------------------------------------------
30 // GEANT 4 class implementation file
31 // CERN Geneva Switzerland
32 //
33 // History: first implementation,
34 // 21-5-98 V.Grichine
35 // 28-05-01, V.Ivanchenko minor changes to provide ANSI -wall compilation
36 // 04.03.05, V.Grichine: get local field interface
37 // 19-05-06, V.Ivanchenko rename from G4SynchrotronRadiation
38 //
39 //
41 
43 #include "G4PhysicalConstants.hh"
44 #include "G4SystemOfUnits.hh"
45 #include "G4Integrator.hh"
46 #include "G4EmProcessSubType.hh"
47 
49 //
50 // Constant for calculation of mean free path
51 //
52 
53 const G4double
56 
58 //
59 // Constant for calculation of characterictic energy
60 //
61 
62 const G4double
65 
67 //
68 // Array of integral probability of synchrotron photons:
69 //
70 // the corresponding energy = 0.0001*i*i*(characteristic energy)
71 //
72 
73 const G4double
75 {
76  1.000000e+00, 9.428859e-01, 9.094095e-01, 8.813971e-01, 8.565154e-01,
77  8.337008e-01, 8.124961e-01, 7.925217e-01, 7.735517e-01, 7.554561e-01,
78  7.381233e-01, 7.214521e-01, 7.053634e-01, 6.898006e-01, 6.747219e-01,
79  6.600922e-01, 6.458793e-01, 6.320533e-01, 6.185872e-01, 6.054579e-01,
80  5.926459e-01, 5.801347e-01, 5.679103e-01, 5.559604e-01, 5.442736e-01,
81  5.328395e-01, 5.216482e-01, 5.106904e-01, 4.999575e-01, 4.894415e-01,
82  4.791351e-01, 4.690316e-01, 4.591249e-01, 4.494094e-01, 4.398800e-01,
83  4.305320e-01, 4.213608e-01, 4.123623e-01, 4.035325e-01, 3.948676e-01,
84  3.863639e-01, 3.780179e-01, 3.698262e-01, 3.617858e-01, 3.538933e-01,
85  3.461460e-01, 3.385411e-01, 3.310757e-01, 3.237474e-01, 3.165536e-01,
86  3.094921e-01, 3.025605e-01, 2.957566e-01, 2.890784e-01, 2.825237e-01,
87  2.760907e-01, 2.697773e-01, 2.635817e-01, 2.575020e-01, 2.515365e-01,
88  2.456834e-01, 2.399409e-01, 2.343074e-01, 2.287812e-01, 2.233607e-01,
89  2.180442e-01, 2.128303e-01, 2.077174e-01, 2.027040e-01, 1.977885e-01,
90  1.929696e-01, 1.882457e-01, 1.836155e-01, 1.790775e-01, 1.746305e-01,
91  1.702730e-01, 1.660036e-01, 1.618212e-01, 1.577243e-01, 1.537117e-01,
92  1.497822e-01, 1.459344e-01, 1.421671e-01, 1.384791e-01, 1.348691e-01,
93  1.313360e-01, 1.278785e-01, 1.244956e-01, 1.211859e-01, 1.179483e-01,
94  1.147818e-01, 1.116850e-01, 1.086570e-01, 1.056966e-01, 1.028026e-01,
95  9.997405e-02, 9.720975e-02, 9.450865e-02, 9.186969e-02, 8.929179e-02,
96  8.677391e-02, 8.431501e-02, 8.191406e-02, 7.957003e-02, 7.728192e-02,
97  7.504872e-02, 7.286944e-02, 7.074311e-02, 6.866874e-02, 6.664538e-02,
98  6.467208e-02, 6.274790e-02, 6.087191e-02, 5.904317e-02, 5.726079e-02,
99  5.552387e-02, 5.383150e-02, 5.218282e-02, 5.057695e-02, 4.901302e-02,
100  4.749020e-02, 4.600763e-02, 4.456450e-02, 4.315997e-02, 4.179325e-02,
101  4.046353e-02, 3.917002e-02, 3.791195e-02, 3.668855e-02, 3.549906e-02,
102  3.434274e-02, 3.321884e-02, 3.212665e-02, 3.106544e-02, 3.003452e-02,
103  2.903319e-02, 2.806076e-02, 2.711656e-02, 2.619993e-02, 2.531021e-02,
104  2.444677e-02, 2.360897e-02, 2.279620e-02, 2.200783e-02, 2.124327e-02,
105  2.050194e-02, 1.978324e-02, 1.908662e-02, 1.841151e-02, 1.775735e-02,
106  1.712363e-02, 1.650979e-02, 1.591533e-02, 1.533973e-02, 1.478250e-02,
107  1.424314e-02, 1.372117e-02, 1.321613e-02, 1.272755e-02, 1.225498e-02,
108  1.179798e-02, 1.135611e-02, 1.092896e-02, 1.051609e-02, 1.011712e-02,
109  9.731635e-03, 9.359254e-03, 8.999595e-03, 8.652287e-03, 8.316967e-03,
110  7.993280e-03, 7.680879e-03, 7.379426e-03, 7.088591e-03, 6.808051e-03,
111  6.537491e-03, 6.276605e-03, 6.025092e-03, 5.782661e-03, 5.549027e-03,
112  5.323912e-03, 5.107045e-03, 4.898164e-03, 4.697011e-03, 4.503336e-03,
113  4.316896e-03, 4.137454e-03, 3.964780e-03, 3.798649e-03, 3.638843e-03,
114  3.485150e-03, 3.337364e-03, 3.195284e-03, 3.058715e-03, 2.927469e-03,
115  2.801361e-03, 2.680213e-03, 2.563852e-03, 2.452110e-03, 2.344824e-03
116 };
117 
119 //
120 // Constructor
121 //
122 
124  G4ProcessType type):G4VDiscreteProcess (processName, type),
125  LowestKineticEnergy (10.*keV),
126  theGamma (G4Gamma::Gamma() ),
127  theElectron ( G4Electron::Electron() ),
128  thePositron ( G4Positron::Positron() ),
129  fAlpha(0.0), fRootNumber(80),
130  fVerboseLevel( verboseLevel )
131 {
133 
134  fFieldPropagator = transportMgr->GetPropagatorInField();
138  fPsiGamma = fEta = fOrderAngleK = 0.0;
139 }
140 
142 //
143 // Destructor
144 //
145 
147 {}
148 
149 
150 G4bool
152 {
153  return ( ( &particle == (const G4ParticleDefinition *)theElectron ) ||
154  ( &particle == (const G4ParticleDefinition *)thePositron ));
155 }
156 
158 {
159  return fLambdaConst;
160 }
161 
163 {
164  return fEnergyConst;
165 }
166 
168 //
169 //
170 // Production of synchrotron X-ray photon
171 // GEANT4 internal units.
172 //
173 
174 
175 G4double
177  G4double,
179 {
180  // gives the MeanFreePath in GEANT4 internal units
181  G4double MeanFreePath;
182 
183  const G4DynamicParticle* aDynamicParticle = trackData.GetDynamicParticle();
184  // G4Material* aMaterial = trackData.GetMaterial();
185 
186  //G4bool isOutRange ;
187 
188  *condition = NotForced ;
189 
190  G4double gamma = aDynamicParticle->GetTotalEnergy()/
191  aDynamicParticle->GetMass();
192 
193  G4double particleCharge = aDynamicParticle->GetDefinition()->GetPDGCharge();
194 
195  G4double KineticEnergy = aDynamicParticle->GetKineticEnergy();
196 
197  if ( KineticEnergy < LowestKineticEnergy || gamma < 1.0e3 ) MeanFreePath = DBL_MAX;
198  else
199  {
200 
201  G4ThreeVector FieldValue;
202  const G4Field* pField = nullptr;
203 
204  G4FieldManager* fieldMgr=nullptr;
205  G4bool fieldExertsForce = false;
206 
207  if( (particleCharge != 0.0) )
208  {
209  fieldMgr = fFieldPropagator->FindAndSetFieldManager( trackData.GetVolume() );
210 
211  if ( fieldMgr != nullptr )
212  {
213  // If the field manager has no field, there is no field !
214 
215  fieldExertsForce = ( fieldMgr->GetDetectorField() != nullptr );
216  }
217  }
218  if ( fieldExertsForce )
219  {
220  pField = fieldMgr->GetDetectorField() ;
221  G4ThreeVector globPosition = trackData.GetPosition();
222 
223  G4double globPosVec[4], FieldValueVec[6];
224 
225  globPosVec[0] = globPosition.x();
226  globPosVec[1] = globPosition.y();
227  globPosVec[2] = globPosition.z();
228  globPosVec[3] = trackData.GetGlobalTime();
229 
230  pField->GetFieldValue( globPosVec, FieldValueVec );
231 
232  FieldValue = G4ThreeVector( FieldValueVec[0],
233  FieldValueVec[1],
234  FieldValueVec[2] );
235 
236 
237 
238  G4ThreeVector unitMomentum = aDynamicParticle->GetMomentumDirection();
239  G4ThreeVector unitMcrossB = FieldValue.cross(unitMomentum) ;
240  G4double perpB = unitMcrossB.mag() ;
241  G4double beta = aDynamicParticle->GetTotalMomentum()/
242  (aDynamicParticle->GetTotalEnergy() );
243 
244  if( perpB > 0.0 ) MeanFreePath = fLambdaConst*beta/perpB;
245  else MeanFreePath = DBL_MAX;
246  }
247  else MeanFreePath = DBL_MAX;
248  }
249  if(fVerboseLevel > 0)
250  {
251  G4cout<<"G4SynchrotronRadiationInMat::MeanFreePath = "<<MeanFreePath/m<<" m"<<G4endl;
252  }
253  return MeanFreePath;
254 }
255 
257 //
258 //
259 
262  const G4Step& stepData )
263 
264 {
265  aParticleChange.Initialize(trackData);
266 
267  const G4DynamicParticle* aDynamicParticle=trackData.GetDynamicParticle();
268 
269  G4double gamma = aDynamicParticle->GetTotalEnergy()/
270  (aDynamicParticle->GetMass() );
271 
272  if(gamma <= 1.0e3 )
273  {
274  return G4VDiscreteProcess::PostStepDoIt(trackData,stepData);
275  }
276  G4double particleCharge = aDynamicParticle->GetDefinition()->GetPDGCharge();
277 
278  G4ThreeVector FieldValue;
279  const G4Field* pField = nullptr ;
280 
281  G4FieldManager* fieldMgr=nullptr;
282  G4bool fieldExertsForce = false;
283 
284  if( (particleCharge != 0.0) )
285  {
286  fieldMgr = fFieldPropagator->FindAndSetFieldManager( trackData.GetVolume() );
287  if ( fieldMgr != nullptr )
288  {
289  // If the field manager has no field, there is no field !
290 
291  fieldExertsForce = ( fieldMgr->GetDetectorField() != nullptr );
292  }
293  }
294  if ( fieldExertsForce )
295  {
296  pField = fieldMgr->GetDetectorField() ;
297  G4ThreeVector globPosition = trackData.GetPosition() ;
298  G4double globPosVec[4], FieldValueVec[6] ;
299  globPosVec[0] = globPosition.x() ;
300  globPosVec[1] = globPosition.y() ;
301  globPosVec[2] = globPosition.z() ;
302  globPosVec[3] = trackData.GetGlobalTime();
303 
304  pField->GetFieldValue( globPosVec, FieldValueVec ) ;
305  FieldValue = G4ThreeVector( FieldValueVec[0],
306  FieldValueVec[1],
307  FieldValueVec[2] );
308 
309  G4ThreeVector unitMomentum = aDynamicParticle->GetMomentumDirection();
310  G4ThreeVector unitMcrossB = FieldValue.cross(unitMomentum);
311  G4double perpB = unitMcrossB.mag() ;
312  if(perpB > 0.0)
313  {
314  // M-C of synchrotron photon energy
315 
316  G4double energyOfSR = GetRandomEnergySR(gamma,perpB);
317 
318  if(fVerboseLevel > 0)
319  {
320  G4cout<<"SR photon energy = "<<energyOfSR/keV<<" keV"<<G4endl;
321  }
322  // check against insufficient energy
323 
324  if( energyOfSR <= 0.0 )
325  {
326  return G4VDiscreteProcess::PostStepDoIt(trackData,stepData);
327  }
328  G4double kineticEnergy = aDynamicParticle->GetKineticEnergy();
330  particleDirection = aDynamicParticle->GetMomentumDirection();
331 
332  // M-C of its direction, simplified dipole busted approach
333 
334  // G4double Teta = G4UniformRand()/gamma ; // Very roughly
335 
336  G4double cosTheta, sinTheta, fcos, beta;
337 
338  do
339  {
340  cosTheta = 1. - 2.*G4UniformRand();
341  fcos = (1 + cosTheta*cosTheta)*0.5;
342  }
343  // Loop checking, 07-Aug-2015, Vladimir Ivanchenko
344  while( fcos < G4UniformRand() );
345 
346  beta = std::sqrt(1. - 1./(gamma*gamma));
347 
348  cosTheta = (cosTheta + beta)/(1. + beta*cosTheta);
349 
350  if( cosTheta > 1. ) cosTheta = 1.;
351  if( cosTheta < -1. ) cosTheta = -1.;
352 
353  sinTheta = std::sqrt(1. - cosTheta*cosTheta );
354 
355  G4double Phi = twopi * G4UniformRand() ;
356 
357  G4double dirx = sinTheta*std::cos(Phi) ,
358  diry = sinTheta*std::sin(Phi) ,
359  dirz = cosTheta;
360 
361  G4ThreeVector gammaDirection ( dirx, diry, dirz);
362  gammaDirection.rotateUz(particleDirection);
363 
364  // polarization of new gamma
365 
366  // G4double sx = std::cos(Teta)*std::cos(Phi);
367  // G4double sy = std::cos(Teta)*std::sin(Phi);
368  // G4double sz = -std::sin(Teta);
369 
370  G4ThreeVector gammaPolarization = FieldValue.cross(gammaDirection);
371  gammaPolarization = gammaPolarization.unit();
372 
373  // (sx, sy, sz);
374  // gammaPolarization.rotateUz(particleDirection);
375 
376  // create G4DynamicParticle object for the SR photon
377 
379  gammaDirection,
380  energyOfSR );
381  aGamma->SetPolarization( gammaPolarization.x(),
382  gammaPolarization.y(),
383  gammaPolarization.z() );
384 
385 
387  aParticleChange.AddSecondary(aGamma);
388 
389  // Update the incident particle
390 
391  G4double newKinEnergy = kineticEnergy - energyOfSR ;
392 
393  if (newKinEnergy > 0.)
394  {
395  aParticleChange.ProposeMomentumDirection( particleDirection );
396  aParticleChange.ProposeEnergy( newKinEnergy );
398  }
399  else
400  {
403  G4double charge = aDynamicParticle->GetDefinition()->GetPDGCharge();
404  if (charge<0.)
405  {
407  }
408  else
409  {
411  }
412  }
413  }
414  else
415  {
416  return G4VDiscreteProcess::PostStepDoIt(trackData,stepData);
417  }
418  }
419  return G4VDiscreteProcess::PostStepDoIt(trackData,stepData);
420 }
421 
422 
423 G4double
425  const G4Step& )
426 
427 {
428  G4int i ;
429  G4double energyOfSR = -1.0 ;
430  //G4Material* aMaterial=trackData.GetMaterial() ;
431 
432  const G4DynamicParticle* aDynamicParticle=trackData.GetDynamicParticle();
433 
434  G4double gamma = aDynamicParticle->GetTotalEnergy()/
435  (aDynamicParticle->GetMass() ) ;
436 
437  G4double particleCharge = aDynamicParticle->GetDefinition()->GetPDGCharge();
438 
439  G4ThreeVector FieldValue;
440  const G4Field* pField = nullptr ;
441 
442  G4FieldManager* fieldMgr=nullptr;
443  G4bool fieldExertsForce = false;
444 
445  if( (particleCharge != 0.0) )
446  {
447  fieldMgr = fFieldPropagator->FindAndSetFieldManager( trackData.GetVolume() );
448  if ( fieldMgr != nullptr )
449  {
450  // If the field manager has no field, there is no field !
451 
452  fieldExertsForce = ( fieldMgr->GetDetectorField() != 0 );
453  }
454  }
455  if ( fieldExertsForce )
456  {
457  pField = fieldMgr->GetDetectorField();
458  G4ThreeVector globPosition = trackData.GetPosition();
459  G4double globPosVec[3], FieldValueVec[3];
460 
461  globPosVec[0] = globPosition.x();
462  globPosVec[1] = globPosition.y();
463  globPosVec[2] = globPosition.z();
464 
465  pField->GetFieldValue( globPosVec, FieldValueVec );
466  FieldValue = G4ThreeVector( FieldValueVec[0],
467  FieldValueVec[1],
468  FieldValueVec[2] );
469 
470  G4ThreeVector unitMomentum = aDynamicParticle->GetMomentumDirection();
471  G4ThreeVector unitMcrossB = FieldValue.cross(unitMomentum) ;
472  G4double perpB = unitMcrossB.mag();
473  if( perpB > 0.0 )
474  {
475  // M-C of synchrotron photon energy
476 
477  G4double random = G4UniformRand() ;
478  for(i=0;i<200;i++)
479  {
480  if(random >= fIntegralProbabilityOfSR[i]) break ;
481  }
482  energyOfSR = 0.0001*i*i*fEnergyConst*gamma*gamma*perpB ;
483 
484  // check against insufficient energy
485 
486  if(energyOfSR <= 0.0)
487  {
488  return -1.0 ;
489  }
490  //G4double kineticEnergy = aDynamicParticle->GetKineticEnergy();
491  //G4ParticleMomentum
492  //particleDirection = aDynamicParticle->GetMomentumDirection();
493 
494  // Gamma production cut in this material
495  //G4double
496  //gammaEnergyCut = (G4Gamma::GetCutsInEnergy())[aMaterial->GetIndex()];
497 
498  // SR photon has energy more than the current material cut
499  // M-C of its direction
500 
501  //G4double Teta = G4UniformRand()/gamma ; // Very roughly
502 
503  //G4double Phi = twopi * G4UniformRand() ;
504  }
505  else
506  {
507  return -1.0 ;
508  }
509  }
510  return energyOfSR ;
511 }
512 
514 //
515 //
516 
518 {
519  G4int i, iMax;
520  G4double energySR, random, position;
521 
522  iMax = 200;
523  random = G4UniformRand();
524 
525  for( i = 0; i < iMax; i++ )
526  {
527  if( random >= fIntegralProbabilityOfSR[i] ) break;
528  }
529  if(i <= 0 ) position = G4UniformRand(); // 0.
530  else if( i>= iMax) position = G4double(iMax);
531  else position = i + G4UniformRand(); // -1
532  //
533  // it was in initial implementation:
534  // energyOfSR = 0.0001*i*i*fEnergyConst*gamma*gamma*perpB ;
535 
536  energySR = 0.0001*position*position*fEnergyConst*gamma*gamma*perpB;
537 
538  if( energySR < 0. ) energySR = 0.;
539 
540  return energySR;
541 }
542 
544 //
545 // return
546 
548 {
549  G4double result, hypCos2, hypCos=std::cosh(t);
550 
551  hypCos2 = hypCos*hypCos;
552  result = std::cosh(5.*t/3.)*std::exp(t-fKsi*hypCos); // fKsi > 0. !
553  result /= hypCos2;
554  return result;
555 }
556 
558 //
559 // return the probability to emit SR photon with relative energy
560 // energy/energy_c >= ksi
561 // for ksi <= 0. P = 1., however the method works for ksi > 0 only!
562 
564 {
565  if (ksi <= 0.) return 1.0;
566  fKsi = ksi; // should be > 0. !
567  G4int n;
568  G4double result, a;
569 
570  a = fAlpha; // always = 0.
571  n = fRootNumber; // around default = 80
572 
574 
575  result = integral.Laguerre(this,
577 
578  result *= 3./5./pi;
579 
580  return result;
581 }
582 
584 //
585 // return an auxiliary function for K_5/3 integral representation
586 
588 {
589  G4double result, hypCos=std::cosh(t);
590 
591  result = std::cosh(5.*t/3.)*std::exp(t - fKsi*hypCos); // fKsi > 0. !
592  result /= hypCos;
593  return result;
594 }
595 
597 //
598 // return the probability to emit SR photon energy with relative energy
599 // energy/energy_c >= ksi
600 // for ksi <= 0. P = 1., however the method works for ksi > 0 only!
601 
603 {
604  if (ksi <= 0.) return 1.0;
605  fKsi = ksi; // should be > 0. !
606  G4int n;
607  G4double result, a;
608 
609  a = fAlpha; // always = 0.
610  n = fRootNumber; // around default = 80
611 
613 
614  result = integral.Laguerre(this,
616 
617  result *= 9.*std::sqrt(3.)*ksi/8./pi;
618 
619  return result;
620 }
621 
623 //
624 //
625 
627 {
628  G4double result, hypCos=std::cosh(t);
629 
630  result = std::cosh(fOrderAngleK*t)*std::exp(t - fEta*hypCos); // fEta > 0. !
631  result /= hypCos;
632  return result;
633 }
634 
636 //
637 // Return K 1/3 or 2/3 for angular distribution
638 
640 {
641  fEta = eta; // should be > 0. !
642  G4int n;
643  G4double result, a;
644 
645  a = fAlpha; // always = 0.
646  n = fRootNumber; // around default = 80
647 
649 
650  result = integral.Laguerre(this,
652 
653  return result;
654 }
655 
657 //
658 // Relative angle diff distribution for given fKsi, which is set externally
659 
661 {
662  G4double result, funK, funK2, gpsi2 = gpsi*gpsi;
663 
664  fPsiGamma = gpsi;
665  fEta = 0.5*fKsi*(1. + gpsi2)*std::sqrt(1. + gpsi2);
666 
667  fOrderAngleK = 1./3.;
668  funK = GetAngleK(fEta);
669  funK2 = funK*funK;
670 
671  result = gpsi2*funK2/(1. + gpsi2);
672 
673  fOrderAngleK = 2./3.;
674  funK = GetAngleK(fEta);
675  funK2 = funK*funK;
676 
677  result += funK2;
678  result *= (1. + gpsi2)*fKsi;
679 
680  return result;
681 }
682 
683 
685 
CLHEP::Hep3Vector G4ThreeVector
void SetPolarization(G4double polX, G4double polY, G4double polZ)
std::vector< ExP01TrackerHit * > a
Definition: ExP01Classes.hh:33
G4double GetPhotonEnergy(const G4Track &trackData, const G4Step &stepData)
static constexpr double hbar_Planck
G4double GetMeanFreePath(const G4Track &track, G4double previousStepSize, G4ForceCondition *condition) override
static constexpr double keV
Definition: G4SIunits.hh:216
#define G4endl
Definition: G4ios.hh:61
G4double Laguerre(T &typeT, F f, G4double alpha, G4int n)
const G4ThreeVector & GetMomentumDirection() const
G4double GetPDGCharge() const
double z() const
G4VParticleChange * PostStepDoIt(const G4Track &track, const G4Step &Step) override
Hep3Vector & rotateUz(const Hep3Vector &)
Definition: ThreeVector.cc:38
virtual G4VParticleChange * PostStepDoIt(const G4Track &, const G4Step &)
virtual void GetFieldValue(const double Point[4], double *fieldArr) const =0
Double_t beta
G4double condition(const G4ErrorSymMatrix &m)
void AddSecondary(G4Track *aSecondary)
G4ParticleChange aParticleChange
Definition: G4VProcess.hh:289
static G4Gamma * Gamma()
Definition: G4Gamma.cc:86
static const G4double fIntegralProbabilityOfSR[200]
static constexpr double m
Definition: G4SIunits.hh:129
double G4double
Definition: G4Types.hh:76
bool G4bool
Definition: G4Types.hh:79
G4FieldManager * FindAndSetFieldManager(G4VPhysicalVolume *pCurrentPhysVol)
G4ParticleDefinition * GetDefinition() const
#define position
Definition: xmlparse.cc:622
virtual void Initialize(const G4Track &)
G4ProcessType
static constexpr double electron_mass_c2
#define G4UniformRand()
Definition: Randomize.hh:53
G4double GetGlobalTime() const
static constexpr double twopi
Definition: G4SIunits.hh:76
const G4ThreeVector & GetPosition() const
const G4Field * GetDetectorField() const
Definition: G4Step.hh:76
void ProposeEnergy(G4double finalEnergy)
G4SynchrotronRadiationInMat(const G4String &processName="SynchrotronRadiation", G4ProcessType type=fElectromagnetic)
Hep3Vector unit() const
Hep3Vector cross(const Hep3Vector &) const
G4double G4ParticleHPJENDLHEData::G4double result
static G4TransportationManager * GetTransportationManager()
static constexpr double eplus
Definition: G4SIunits.hh:199
double mag() const
int G4int
Definition: G4Types.hh:78
static constexpr double c_light
const G4ParticleDefinition * thePositron
const G4ParticleDefinition * theElectron
G4double GetRandomEnergySR(G4double, G4double)
void ProposeMomentumDirection(G4double Px, G4double Py, G4double Pz)
void SetProcessSubType(G4int)
Definition: G4VProcess.hh:435
G4ForceCondition
G4double GetKineticEnergy() const
G4GLOB_DLL std::ostream G4cout
double x() const
G4PropagatorInField * GetPropagatorInField() const
Char_t n[5]
G4bool IsApplicable(const G4ParticleDefinition &) override
G4double GetMass() const
G4double GetTotalMomentum() const
static constexpr double pi
Definition: G4SIunits.hh:75
G4double fcos(G4double arg)
G4double GetTotalEnergy() const
double y() const
void ProposeLocalEnergyDeposit(G4double anEnergyPart)
static constexpr double fine_structure_const
#define DBL_MAX
Definition: templates.hh:83
void ProposeTrackStatus(G4TrackStatus status)
const G4DynamicParticle * GetDynamicParticle() const
G4VPhysicalVolume * GetVolume() const
void SetNumberOfSecondaries(G4int totSecondaries)