Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
G4Scintillation.cc
Go to the documentation of this file.
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$
28//
29////////////////////////////////////////////////////////////////////////
30// Scintillation Light Class Implementation
31////////////////////////////////////////////////////////////////////////
32//
33// File: G4Scintillation.cc
34// Description: RestDiscrete Process - Generation of Scintillation Photons
35// Version: 1.0
36// Created: 1998-11-07
37// Author: Peter Gumplinger
38// Updated: 2010-10-20 Allow the scintillation yield to be a function
39// of energy deposited by particle type
40// Thanks to Zach Hartwig (Department of Nuclear
41// Science and Engineeering - MIT)
42// 2010-09-22 by Peter Gumplinger
43// > scintillation rise time included, thanks to
44// > Martin Goettlich/DESY
45// 2005-08-17 by Peter Gumplinger
46// > change variable name MeanNumPhotons -> MeanNumberOfPhotons
47// 2005-07-28 by Peter Gumplinger
48// > add G4ProcessType to constructor
49// 2004-08-05 by Peter Gumplinger
50// > changed StronglyForced back to Forced in GetMeanLifeTime
51// 2002-11-21 by Peter Gumplinger
52// > change to use G4Poisson for small MeanNumberOfPhotons
53// 2002-11-07 by Peter Gumplinger
54// > now allow for fast and slow scintillation component
55// 2002-11-05 by Peter Gumplinger
56// > now use scintillation constants from G4Material
57// 2002-05-09 by Peter Gumplinger
58// > use only the PostStepPoint location for the origin of
59// scintillation photons when energy is lost to the medium
60// by a neutral particle
61// 2000-09-18 by Peter Gumplinger
62// > change: aSecondaryPosition=x0+rand*aStep.GetDeltaPosition();
63// aSecondaryTrack->SetTouchable(0);
64// 2001-09-17, migration of Materials to pure STL (mma)
65// 2003-06-03, V.Ivanchenko fix compilation warnings
66//
67// mail: gum@triumf.ca
68//
69////////////////////////////////////////////////////////////////////////
70
71#include "G4ios.hh"
72#include "globals.hh"
74#include "G4SystemOfUnits.hh"
75#include "G4ParticleTypes.hh"
76#include "G4EmProcessSubType.hh"
77
78#include "G4Scintillation.hh"
79
80/////////////////////////
81// Class Implementation
82/////////////////////////
83
84 //////////////
85 // Operators
86 //////////////
87
88// G4Scintillation::operator=(const G4Scintillation &right)
89// {
90// }
91
92 /////////////////
93 // Constructors
94 /////////////////
95
97 G4ProcessType type)
98 : G4VRestDiscreteProcess(processName, type)
99{
101
103 fFiniteRiseTime = false;
104
105 YieldFactor = 1.0;
106 ExcitationRatio = 1.0;
107
109
112
113 if (verboseLevel>0) {
114 G4cout << GetProcessName() << " is created " << G4endl;
115 }
116
118
119 emSaturation = NULL;
120}
121
122 ////////////////
123 // Destructors
124 ////////////////
125
127{
128 if (theFastIntegralTable != NULL) {
131 }
132 if (theSlowIntegralTable != NULL) {
135 }
136}
137
138 ////////////
139 // Methods
140 ////////////
141
142// AtRestDoIt
143// ----------
144//
146G4Scintillation::AtRestDoIt(const G4Track& aTrack, const G4Step& aStep)
147
148// This routine simply calls the equivalent PostStepDoIt since all the
149// necessary information resides in aStep.GetTotalEnergyDeposit()
150
151{
152 return G4Scintillation::PostStepDoIt(aTrack, aStep);
153}
154
155// PostStepDoIt
156// -------------
157//
159G4Scintillation::PostStepDoIt(const G4Track& aTrack, const G4Step& aStep)
160
161// This routine is called for each tracking step of a charged particle
162// in a scintillator. A Poisson/Gauss-distributed number of photons is
163// generated according to the scintillation yield formula, distributed
164// evenly along the track segment and uniformly into 4pi.
165
166{
168
169 const G4DynamicParticle* aParticle = aTrack.GetDynamicParticle();
170 const G4Material* aMaterial = aTrack.GetMaterial();
171
172 G4StepPoint* pPreStepPoint = aStep.GetPreStepPoint();
173 G4StepPoint* pPostStepPoint = aStep.GetPostStepPoint();
174
175 G4ThreeVector x0 = pPreStepPoint->GetPosition();
176 G4ThreeVector p0 = aStep.GetDeltaPosition().unit();
177 G4double t0 = pPreStepPoint->GetGlobalTime();
178
179 G4double TotalEnergyDeposit = aStep.GetTotalEnergyDeposit();
180
181 G4MaterialPropertiesTable* aMaterialPropertiesTable =
182 aMaterial->GetMaterialPropertiesTable();
183 if (!aMaterialPropertiesTable)
184 return G4VRestDiscreteProcess::PostStepDoIt(aTrack, aStep);
185
186 G4MaterialPropertyVector* Fast_Intensity =
187 aMaterialPropertiesTable->GetProperty("FASTCOMPONENT");
188 G4MaterialPropertyVector* Slow_Intensity =
189 aMaterialPropertiesTable->GetProperty("SLOWCOMPONENT");
190
191 if (!Fast_Intensity && !Slow_Intensity )
192 return G4VRestDiscreteProcess::PostStepDoIt(aTrack, aStep);
193
194 G4int nscnt = 1;
195 if (Fast_Intensity && Slow_Intensity) nscnt = 2;
196
197 G4double ScintillationYield = 0.;
198
200 // The scintillation response is a function of the energy
201 // deposited by particle types.
202
203 // Get the definition of the current particle
204 G4ParticleDefinition *pDef = aParticle->GetDefinition();
205 G4MaterialPropertyVector *Scint_Yield_Vector = NULL;
206
207 // Obtain the G4MaterialPropertyVectory containing the
208 // scintillation light yield as a function of the deposited
209 // energy for the current particle type
210
211 // Protons
212 if(pDef==G4Proton::ProtonDefinition())
213 Scint_Yield_Vector = aMaterialPropertiesTable->
214 GetProperty("PROTONSCINTILLATIONYIELD");
215
216 // Deuterons
217 else if(pDef==G4Deuteron::DeuteronDefinition())
218 Scint_Yield_Vector = aMaterialPropertiesTable->
219 GetProperty("DEUTERONSCINTILLATIONYIELD");
220
221 // Tritons
222 else if(pDef==G4Triton::TritonDefinition())
223 Scint_Yield_Vector = aMaterialPropertiesTable->
224 GetProperty("TRITONSCINTILLATIONYIELD");
225
226 // Alphas
227 else if(pDef==G4Alpha::AlphaDefinition())
228 Scint_Yield_Vector = aMaterialPropertiesTable->
229 GetProperty("ALPHASCINTILLATIONYIELD");
230
231 // Ions (particles derived from G4VIon and G4Ions)
232 // and recoil ions below tracking cut from neutrons after hElastic
233 else if(pDef->GetParticleType()== "nucleus" ||
235 Scint_Yield_Vector = aMaterialPropertiesTable->
236 GetProperty("IONSCINTILLATIONYIELD");
237
238 // Electrons (must also account for shell-binding energy
239 // attributed to gamma from standard PhotoElectricEffect)
240 else if(pDef==G4Electron::ElectronDefinition() ||
242 Scint_Yield_Vector = aMaterialPropertiesTable->
243 GetProperty("ELECTRONSCINTILLATIONYIELD");
244
245 // Default for particles not enumerated/listed above
246 else
247 Scint_Yield_Vector = aMaterialPropertiesTable->
248 GetProperty("ELECTRONSCINTILLATIONYIELD");
249
250 // If the user has not specified yields for (p,d,t,a,carbon)
251 // then these unspecified particles will default to the
252 // electron's scintillation yield
253 if(!Scint_Yield_Vector){
254 Scint_Yield_Vector = aMaterialPropertiesTable->
255 GetProperty("ELECTRONSCINTILLATIONYIELD");
256 }
257
258 // Throw an exception if no scintillation yield is found
259 if (!Scint_Yield_Vector) {
261 ed << "\nG4Scintillation::PostStepDoIt(): "
262 << "Request for scintillation yield for energy deposit and particle type without correct entry in MaterialPropertiesTable\n"
263 << "ScintillationByParticleType requires at minimum that ELECTRONSCINTILLATIONYIELD is set by the user\n"
264 << G4endl;
265 G4String comments = "Missing MaterialPropertiesTable entry - No correct entry in MaterialPropertiesTable";
266 G4Exception("G4Scintillation::PostStepDoIt","Scint01",
267 FatalException,ed,comments);
268 return G4VRestDiscreteProcess::PostStepDoIt(aTrack, aStep);
269 }
270
271 if (verboseLevel>1) {
272 G4cout << "\n"
273 << "Particle = " << pDef->GetParticleName() << "\n"
274 << "Energy Dep. = " << TotalEnergyDeposit/MeV << "\n"
275 << "Yield = "
276 << Scint_Yield_Vector->Value(TotalEnergyDeposit)
277 << "\n" << G4endl;
278 }
279
280 // Obtain the scintillation yield using the total energy
281 // deposited by the particle in this step.
282
283 // Units: [# scintillation photons]
284 ScintillationYield = Scint_Yield_Vector->
285 Value(TotalEnergyDeposit);
286 } else {
287 // The default linear scintillation process
288 ScintillationYield = aMaterialPropertiesTable->
289 GetConstProperty("SCINTILLATIONYIELD");
290
291 // Units: [# scintillation photons / MeV]
292 ScintillationYield *= YieldFactor;
293 }
294
295 G4double ResolutionScale = aMaterialPropertiesTable->
296 GetConstProperty("RESOLUTIONSCALE");
297
298 // Birks law saturation:
299
300 //G4double constBirks = 0.0;
301
302 //constBirks = aMaterial->GetIonisation()->GetBirksConstant();
303
304 G4double MeanNumberOfPhotons;
305
306 // Birk's correction via emSaturation and specifying scintillation by
307 // by particle type are physically mutually exclusive
308
310 MeanNumberOfPhotons = ScintillationYield;
311 else if (emSaturation)
312 MeanNumberOfPhotons = ScintillationYield*
313 (emSaturation->VisibleEnergyDeposition(&aStep));
314 else
315 MeanNumberOfPhotons = ScintillationYield*TotalEnergyDeposit;
316
317 G4int NumPhotons;
318
319 if (MeanNumberOfPhotons > 10.)
320 {
321 G4double sigma = ResolutionScale * std::sqrt(MeanNumberOfPhotons);
322 NumPhotons = G4int(G4RandGauss::shoot(MeanNumberOfPhotons,sigma)+0.5);
323 }
324 else
325 {
326 NumPhotons = G4int(G4Poisson(MeanNumberOfPhotons));
327 }
328
329 if (NumPhotons <= 0)
330 {
331 // return unchanged particle and no secondaries
332
334
335 return G4VRestDiscreteProcess::PostStepDoIt(aTrack, aStep);
336 }
337
338 ////////////////////////////////////////////////////////////////
339
341
343 if (aTrack.GetTrackStatus() == fAlive )
345 }
346
347 ////////////////////////////////////////////////////////////////
348
349 G4int materialIndex = aMaterial->GetIndex();
350
351 // Retrieve the Scintillation Integral for this material
352 // new G4PhysicsOrderedFreeVector allocated to hold CII's
353
354 G4int Num = NumPhotons;
355
356 for (G4int scnt = 1; scnt <= nscnt; scnt++) {
357
358 G4double ScintillationTime = 0.*ns;
359 G4double ScintillationRiseTime = 0.*ns;
360 G4PhysicsOrderedFreeVector* ScintillationIntegral = NULL;
361
362 if (scnt == 1) {
363 if (nscnt == 1) {
364 if(Fast_Intensity){
365 ScintillationTime = aMaterialPropertiesTable->
366 GetConstProperty("FASTTIMECONSTANT");
367 if (fFiniteRiseTime) {
368 ScintillationRiseTime = aMaterialPropertiesTable->
369 GetConstProperty("FASTSCINTILLATIONRISETIME");
370 }
371 ScintillationIntegral =
373 }
374 if(Slow_Intensity){
375 ScintillationTime = aMaterialPropertiesTable->
376 GetConstProperty("SLOWTIMECONSTANT");
377 if (fFiniteRiseTime) {
378 ScintillationRiseTime = aMaterialPropertiesTable->
379 GetConstProperty("SLOWSCINTILLATIONRISETIME");
380 }
381 ScintillationIntegral =
383 }
384 }
385 else {
386 G4double YieldRatio = aMaterialPropertiesTable->
387 GetConstProperty("YIELDRATIO");
388 if ( ExcitationRatio == 1.0 ) {
389 Num = G4int (std::min(YieldRatio,1.0) * NumPhotons);
390 }
391 else {
392 Num = G4int (std::min(ExcitationRatio,1.0) * NumPhotons);
393 }
394 ScintillationTime = aMaterialPropertiesTable->
395 GetConstProperty("FASTTIMECONSTANT");
396 if (fFiniteRiseTime) {
397 ScintillationRiseTime = aMaterialPropertiesTable->
398 GetConstProperty("FASTSCINTILLATIONRISETIME");
399 }
400 ScintillationIntegral =
402 }
403 }
404 else {
405 Num = NumPhotons - Num;
406 ScintillationTime = aMaterialPropertiesTable->
407 GetConstProperty("SLOWTIMECONSTANT");
408 if (fFiniteRiseTime) {
409 ScintillationRiseTime = aMaterialPropertiesTable->
410 GetConstProperty("SLOWSCINTILLATIONRISETIME");
411 }
412 ScintillationIntegral =
414 }
415
416 if (!ScintillationIntegral) continue;
417
418 // Max Scintillation Integral
419
420 G4double CIImax = ScintillationIntegral->GetMaxValue();
421
422 for (G4int i = 0; i < Num; i++) {
423
424 // Determine photon energy
425
426 G4double CIIvalue = G4UniformRand()*CIImax;
427 G4double sampledEnergy =
428 ScintillationIntegral->GetEnergy(CIIvalue);
429
430 if (verboseLevel>1) {
431 G4cout << "sampledEnergy = " << sampledEnergy << G4endl;
432 G4cout << "CIIvalue = " << CIIvalue << G4endl;
433 }
434
435 // Generate random photon direction
436
437 G4double cost = 1. - 2.*G4UniformRand();
438 G4double sint = std::sqrt((1.-cost)*(1.+cost));
439
440 G4double phi = twopi*G4UniformRand();
441 G4double sinp = std::sin(phi);
442 G4double cosp = std::cos(phi);
443
444 G4double px = sint*cosp;
445 G4double py = sint*sinp;
446 G4double pz = cost;
447
448 // Create photon momentum direction vector
449
450 G4ParticleMomentum photonMomentum(px, py, pz);
451
452 // Determine polarization of new photon
453
454 G4double sx = cost*cosp;
455 G4double sy = cost*sinp;
456 G4double sz = -sint;
457
458 G4ThreeVector photonPolarization(sx, sy, sz);
459
460 G4ThreeVector perp = photonMomentum.cross(photonPolarization);
461
462 phi = twopi*G4UniformRand();
463 sinp = std::sin(phi);
464 cosp = std::cos(phi);
465
466 photonPolarization = cosp * photonPolarization + sinp * perp;
467
468 photonPolarization = photonPolarization.unit();
469
470 // Generate a new photon:
471
472 G4DynamicParticle* aScintillationPhoton =
474 photonMomentum);
475 aScintillationPhoton->SetPolarization
476 (photonPolarization.x(),
477 photonPolarization.y(),
478 photonPolarization.z());
479
480 aScintillationPhoton->SetKineticEnergy(sampledEnergy);
481
482 // Generate new G4Track object:
483
484 G4double rand;
485
486 if (aParticle->GetDefinition()->GetPDGCharge() != 0) {
487 rand = G4UniformRand();
488 } else {
489 rand = 1.0;
490 }
491
492 G4double delta = rand * aStep.GetStepLength();
493 G4double deltaTime = delta /
494 ((pPreStepPoint->GetVelocity()+
495 pPostStepPoint->GetVelocity())/2.);
496
497 // emission time distribution
498 if (ScintillationRiseTime==0.0) {
499 deltaTime = deltaTime -
500 ScintillationTime * std::log( G4UniformRand() );
501 } else {
502 deltaTime = deltaTime +
503 sample_time(ScintillationRiseTime, ScintillationTime);
504 }
505
506 G4double aSecondaryTime = t0 + deltaTime;
507
508 G4ThreeVector aSecondaryPosition =
509 x0 + rand * aStep.GetDeltaPosition();
510
511 G4Track* aSecondaryTrack =
512 new G4Track(aScintillationPhoton,aSecondaryTime,aSecondaryPosition);
513
514 aSecondaryTrack->SetTouchableHandle(
516 // aSecondaryTrack->SetTouchableHandle((G4VTouchable*)0);
517
518 aSecondaryTrack->SetParentID(aTrack.GetTrackID());
519
520 aParticleChange.AddSecondary(aSecondaryTrack);
521
522 }
523 }
524
525 if (verboseLevel>0) {
526 G4cout << "\n Exiting from G4Scintillation::DoIt -- NumberOfSecondaries = "
528 }
529
530 return G4VRestDiscreteProcess::PostStepDoIt(aTrack, aStep);
531}
532
533// BuildThePhysicsTable for the scintillation process
534// --------------------------------------------------
535//
536
538{
540
541 const G4MaterialTable* theMaterialTable =
543 G4int numOfMaterials = G4Material::GetNumberOfMaterials();
544
545 // create new physics table
546
549
550 // loop for materials
551
552 for (G4int i=0 ; i < numOfMaterials; i++)
553 {
554 G4PhysicsOrderedFreeVector* aPhysicsOrderedFreeVector =
556 G4PhysicsOrderedFreeVector* bPhysicsOrderedFreeVector =
558
559 // Retrieve vector of scintillation wavelength intensity for
560 // the material from the material's optical properties table.
561
562 G4Material* aMaterial = (*theMaterialTable)[i];
563
564 G4MaterialPropertiesTable* aMaterialPropertiesTable =
565 aMaterial->GetMaterialPropertiesTable();
566
567 if (aMaterialPropertiesTable) {
568
569 G4MaterialPropertyVector* theFastLightVector =
570 aMaterialPropertiesTable->GetProperty("FASTCOMPONENT");
571
572 if (theFastLightVector) {
573
574 // Retrieve the first intensity point in vector
575 // of (photon energy, intensity) pairs
576
577 G4double currentIN = (*theFastLightVector)[0];
578
579 if (currentIN >= 0.0) {
580
581 // Create first (photon energy, Scintillation
582 // Integral pair
583
584 G4double currentPM = theFastLightVector->Energy(0);
585
586 G4double currentCII = 0.0;
587
588 aPhysicsOrderedFreeVector->
589 InsertValues(currentPM , currentCII);
590
591 // Set previous values to current ones prior to loop
592
593 G4double prevPM = currentPM;
594 G4double prevCII = currentCII;
595 G4double prevIN = currentIN;
596
597 // loop over all (photon energy, intensity)
598 // pairs stored for this material
599
600 for (size_t ii = 1;
601 ii < theFastLightVector->GetVectorLength();
602 ++ii)
603 {
604 currentPM = theFastLightVector->Energy(ii);
605 currentIN = (*theFastLightVector)[ii];
606
607 currentCII = 0.5 * (prevIN + currentIN);
608
609 currentCII = prevCII +
610 (currentPM - prevPM) * currentCII;
611
612 aPhysicsOrderedFreeVector->
613 InsertValues(currentPM, currentCII);
614
615 prevPM = currentPM;
616 prevCII = currentCII;
617 prevIN = currentIN;
618 }
619
620 }
621 }
622
623 G4MaterialPropertyVector* theSlowLightVector =
624 aMaterialPropertiesTable->GetProperty("SLOWCOMPONENT");
625
626 if (theSlowLightVector) {
627
628 // Retrieve the first intensity point in vector
629 // of (photon energy, intensity) pairs
630
631 G4double currentIN = (*theSlowLightVector)[0];
632
633 if (currentIN >= 0.0) {
634
635 // Create first (photon energy, Scintillation
636 // Integral pair
637
638 G4double currentPM = theSlowLightVector->Energy(0);
639
640 G4double currentCII = 0.0;
641
642 bPhysicsOrderedFreeVector->
643 InsertValues(currentPM , currentCII);
644
645 // Set previous values to current ones prior to loop
646
647 G4double prevPM = currentPM;
648 G4double prevCII = currentCII;
649 G4double prevIN = currentIN;
650
651 // loop over all (photon energy, intensity)
652 // pairs stored for this material
653
654 for (size_t ii = 1;
655 ii < theSlowLightVector->GetVectorLength();
656 ++ii)
657 {
658 currentPM = theSlowLightVector->Energy(ii);
659 currentIN = (*theSlowLightVector)[ii];
660
661 currentCII = 0.5 * (prevIN + currentIN);
662
663 currentCII = prevCII +
664 (currentPM - prevPM) * currentCII;
665
666 bPhysicsOrderedFreeVector->
667 InsertValues(currentPM, currentCII);
668
669 prevPM = currentPM;
670 prevCII = currentCII;
671 prevIN = currentIN;
672 }
673
674 }
675 }
676 }
677
678 // The scintillation integral(s) for a given material
679 // will be inserted in the table(s) according to the
680 // position of the material in the material table.
681
682 theFastIntegralTable->insertAt(i,aPhysicsOrderedFreeVector);
683 theSlowIntegralTable->insertAt(i,bPhysicsOrderedFreeVector);
684
685 }
686}
687
688// Called by the user to set the scintillation yield as a function
689// of energy deposited by particle type
690
692{
693 if (emSaturation) {
694 G4Exception("G4Scintillation::SetScintillationByParticleType", "Scint02",
695 JustWarning, "Redefinition: Birks Saturation is replaced by ScintillationByParticleType!");
697 }
698 scintillationByParticleType = scintType;
699}
700
701// GetMeanFreePath
702// ---------------
703//
704
706 G4double ,
708{
710
711 return DBL_MAX;
712
713}
714
715// GetMeanLifeTime
716// ---------------
717//
718
721{
722 *condition = Forced;
723
724 return DBL_MAX;
725
726}
727
728G4double G4Scintillation::sample_time(G4double tau1, G4double tau2)
729{
730// tau1: rise time and tau2: decay time
731
732 while(1) {
733 // two random numbers
734 G4double ran1 = G4UniformRand();
735 G4double ran2 = G4UniformRand();
736 //
737 // exponential distribution as envelope function: very efficient
738 //
739 G4double d = (tau1+tau2)/tau2;
740 // make sure the envelope function is
741 // always larger than the bi-exponential
742 G4double t = -1.0*tau2*std::log(1-ran1);
743 G4double gg = d*single_exp(t,tau2);
744 if (ran2 <= bi_exp(t,tau1,tau2)/gg) return t;
745 }
746 return -1.0;
747}
@ fScintillation
G4double condition(const G4ErrorSymMatrix &m)
@ JustWarning
@ FatalException
G4ForceCondition
@ StronglyForced
@ Forced
std::vector< G4Material * > G4MaterialTable
G4long G4Poisson(G4double mean)
Definition: G4Poisson.hh:50
G4ProcessType
@ fSuspend
@ fAlive
double G4double
Definition: G4Types.hh:64
int G4int
Definition: G4Types.hh:66
bool G4bool
Definition: G4Types.hh:67
#define G4endl
Definition: G4ios.hh:52
G4DLLIMPORT std::ostream G4cout
#define G4UniformRand()
Definition: Randomize.hh:53
double z() const
Hep3Vector unit() const
double x() const
double y() const
Hep3Vector cross(const Hep3Vector &) const
static G4Alpha * AlphaDefinition()
Definition: G4Alpha.cc:84
static G4Deuteron * DeuteronDefinition()
Definition: G4Deuteron.cc:89
void SetPolarization(G4double polX, G4double polY, G4double polZ)
G4ParticleDefinition * GetDefinition() const
void SetKineticEnergy(G4double aEnergy)
static G4Electron * ElectronDefinition()
Definition: G4Electron.cc:89
G4double VisibleEnergyDeposition(const G4ParticleDefinition *, const G4MaterialCutsCouple *, G4double length, G4double edepTotal, G4double edepNIEL=0.0)
static G4Gamma * GammaDefinition()
Definition: G4Gamma.cc:81
G4MaterialPropertyVector * GetProperty(const char *key)
static const G4MaterialTable * GetMaterialTable()
Definition: G4Material.cc:562
G4MaterialPropertiesTable * GetMaterialPropertiesTable() const
Definition: G4Material.hh:251
static size_t GetNumberOfMaterials()
Definition: G4Material.cc:569
size_t GetIndex() const
Definition: G4Material.hh:261
static G4Neutron * NeutronDefinition()
Definition: G4Neutron.cc:99
static G4OpticalPhoton * OpticalPhoton()
void AddSecondary(G4Track *aSecondary)
virtual void Initialize(const G4Track &)
const G4String & GetParticleType() const
G4double GetPDGCharge() const
const G4String & GetParticleName() const
G4double GetEnergy(G4double aValue)
void insertAt(size_t, G4PhysicsVector *)
void clearAndDestroy()
G4double Value(G4double theEnergy)
size_t GetVectorLength() const
G4double Energy(size_t index) const
static G4Proton * ProtonDefinition()
Definition: G4Proton.cc:88
G4VParticleChange * PostStepDoIt(const G4Track &aTrack, const G4Step &aStep)
G4bool scintillationByParticleType
G4double GetMeanFreePath(const G4Track &aTrack, G4double, G4ForceCondition *)
G4VParticleChange * AtRestDoIt(const G4Track &aTrack, const G4Step &aStep)
G4double ExcitationRatio
G4bool fTrackSecondariesFirst
G4Scintillation(const G4String &processName="Scintillation", G4ProcessType type=fElectromagnetic)
G4double GetMeanLifeTime(const G4Track &aTrack, G4ForceCondition *)
void SetScintillationByParticleType(const G4bool)
G4PhysicsTable * theSlowIntegralTable
G4PhysicsTable * theFastIntegralTable
G4double GetVelocity() const
G4double GetGlobalTime() const
const G4ThreeVector & GetPosition() const
const G4TouchableHandle & GetTouchableHandle() const
Definition: G4Step.hh:78
G4ThreeVector GetDeltaPosition() const
G4StepPoint * GetPreStepPoint() const
G4double GetStepLength() const
G4double GetTotalEnergyDeposit() const
G4StepPoint * GetPostStepPoint() const
G4TrackStatus GetTrackStatus() const
G4int GetTrackID() const
void SetTouchableHandle(const G4TouchableHandle &apValue)
G4Material * GetMaterial() const
const G4DynamicParticle * GetDynamicParticle() const
void SetParentID(const G4int aValue)
static G4Triton * TritonDefinition()
Definition: G4Triton.cc:90
void ProposeTrackStatus(G4TrackStatus status)
G4int GetNumberOfSecondaries() const
void SetNumberOfSecondaries(G4int totSecondaries)
G4ParticleChange aParticleChange
Definition: G4VProcess.hh:289
G4int verboseLevel
Definition: G4VProcess.hh:368
void SetProcessSubType(G4int)
Definition: G4VProcess.hh:403
const G4String & GetProcessName() const
Definition: G4VProcess.hh:379
virtual G4VParticleChange * PostStepDoIt(const G4Track &, const G4Step &)
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41
std::ostringstream G4ExceptionDescription
Definition: globals.hh:76
#define DBL_MAX
Definition: templates.hh:83
#define ns
Definition: xmlparse.cc:597