Geant4  10.02.p03
G4RTPrimaryGeneratorAction Class Reference

#include <G4RTPrimaryGeneratorAction.hh>

Inheritance diagram for G4RTPrimaryGeneratorAction:
Collaboration diagram for G4RTPrimaryGeneratorAction:

Public Member Functions

 G4RTPrimaryGeneratorAction ()
 
virtual ~G4RTPrimaryGeneratorAction ()
 
virtual void GeneratePrimaries (G4Event *anEvent)
 
void SetUp ()
 
- Public Member Functions inherited from G4VUserPrimaryGeneratorAction
 G4VUserPrimaryGeneratorAction ()
 
virtual ~G4VUserPrimaryGeneratorAction ()
 

Private Attributes

G4ParticleDefinitionparticle_definition
 
G4double particle_energy
 
G4double particle_time
 
G4ThreeVector particle_polarization
 
G4VPhysicalVolumepWorld
 
EInside whereisit
 
G4int nColumn
 
G4int nRow
 
G4ThreeVector eyePosition
 
G4ThreeVector eyeDirection
 
G4ThreeVector up
 
G4double headAngle
 
G4double viewSpan
 
G4double stepAngle
 
G4double viewSpanX
 
G4double viewSpanY
 
G4bool distortionOn
 

Detailed Description

Definition at line 41 of file G4RTPrimaryGeneratorAction.hh.

Constructor & Destructor Documentation

◆ G4RTPrimaryGeneratorAction()

G4RTPrimaryGeneratorAction::G4RTPrimaryGeneratorAction ( )

Definition at line 42 of file G4RTPrimaryGeneratorAction.cc.

43 {
44  G4ThreeVector zero;
47  particle_time = 0.0;
48  particle_polarization = zero;
49 
50  pWorld = 0;
52 
53  nRow = 0;
54  nColumn = 0;
55 
56  eyePosition = zero;
57  eyeDirection = zero;
58  up = G4ThreeVector(0,1,0);
59  headAngle = 0.0;
60  viewSpan = 0.0;
61  stepAngle = 0.0;
62  viewSpanX = 0.0;
63  viewSpanY = 0.0;
64 
65  distortionOn = false;
66 }
CLHEP::Hep3Vector G4ThreeVector
static const double GeV
G4ParticleDefinition * particle_definition

◆ ~G4RTPrimaryGeneratorAction()

G4RTPrimaryGeneratorAction::~G4RTPrimaryGeneratorAction ( )
virtual

Definition at line 68 of file G4RTPrimaryGeneratorAction.cc.

69 {;}

Member Function Documentation

◆ GeneratePrimaries()

void G4RTPrimaryGeneratorAction::GeneratePrimaries ( G4Event anEvent)
virtual

Implements G4VUserPrimaryGeneratorAction.

Definition at line 71 of file G4RTPrimaryGeneratorAction.cc.

72 {
73  // Note: We don't use G4ParticleGun here, as instantiating a G4ParticleGun
74  // object causes creation of UI commands and corresponding UI messenger
75  // that interfare with normal G4ParticleGun UI commands.
76 
77  // evId = iRow * nColumn + iColumn
78  G4int evId = anEvent->GetEventID();
79  G4int iRow = evId / nColumn;
80  G4int iColumn = evId % nColumn;
81  G4double angleX = -(viewSpanX/2. - G4double(iColumn)*stepAngle);
82  G4double angleY = viewSpanY/2. - G4double(iRow)*stepAngle;
83  G4ThreeVector rayDirection;
84  if(distortionOn)
85  { rayDirection = G4ThreeVector(-std::tan(angleX)/std::cos(angleY),std::tan(angleY)/std::cos(angleX),1.0); }
86  else
87  { rayDirection = G4ThreeVector(-std::tan(angleX),std::tan(angleY),1.0); }
88  G4double cp = std::cos(eyeDirection.phi());
89  G4double sp = std::sqrt(1.-cp*cp);
90  G4double ct = std::cos(eyeDirection.theta());
91  G4double st = std::sqrt(1.-ct*ct);
92  G4double gam = std::atan2(ct*cp*up.x()+ct*sp*up.y()-st*up.z(), -sp*up.x()+cp*up.y());
93  rayDirection.rotateZ(-gam);
94  rayDirection.rotateZ(headAngle);
95  rayDirection.rotateUz(eyeDirection);
96 
97  G4ThreeVector rayPosition(eyePosition);
98  if (whereisit != kInside) {
99  // Eye position is outside the world, so move it inside.
100  G4double outsideDistance = pWorld->GetLogicalVolume()->GetSolid()->
101  DistanceToIn(rayPosition,rayDirection);
102  if(outsideDistance != kInfinity)
103  { rayPosition = rayPosition + (outsideDistance+0.001)*rayDirection; }
104  else
105  {
106  // Ray does not intercept world at all.
107  // Return without primary particle.
108  return;
109  }
110  }
111 
112  // create a new vertex
113  G4PrimaryVertex* vertex = new G4PrimaryVertex(rayPosition,particle_time);
114 
115  // create new primaries and set them to the vertex
118  particle->SetKineticEnergy( particle_energy );
119  particle->SetMass( mass );
120  particle->SetMomentumDirection( rayDirection.unit() );
124  vertex->SetPrimary( particle );
125 
126  anEvent->AddPrimaryVertex( vertex );
127 }
double phi() const
static const G4double kInfinity
Definition: geomdefs.hh:42
CLHEP::Hep3Vector G4ThreeVector
void AddPrimaryVertex(G4PrimaryVertex *aPrimaryVertex)
Definition: G4Event.hh:154
int G4int
Definition: G4Types.hh:78
void SetKineticEnergy(G4double eKin)
G4ParticleDefinition * particle_definition
double theta() const
Hep3Vector unit() const
Hep3Vector & rotateUz(const Hep3Vector &)
Definition: ThreeVector.cc:38
Hep3Vector & rotateZ(double)
Definition: ThreeVector.cc:110
void SetMass(G4double mas)
double x() const
double y() const
void SetMomentumDirection(const G4ThreeVector &p)
G4int GetEventID() const
Definition: G4Event.hh:151
double z() const
void SetPrimary(G4PrimaryParticle *pp)
double G4double
Definition: G4Types.hh:76
G4LogicalVolume * GetLogicalVolume() const
void SetPolarization(const G4ThreeVector &pol)
G4VSolid * GetSolid() const
static const G4double cp
Here is the call graph for this function:

◆ SetUp()

void G4RTPrimaryGeneratorAction::SetUp ( )

Definition at line 129 of file G4RTPrimaryGeneratorAction.cc.

130 {
132  particle_definition = particleTable->FindParticle("geantino");
134  {
135  G4String msg;
136  msg = " G4RayTracer uses geantino to trace the ray, but your physics list does not\n";
137  msg += "define G4Geantino. Please add G4Geantino in your physics list.";
138  G4Exception("G4RTPrimaryGeneratorAction::SetUp","VisRayTracer00101",FatalException,msg);
139  }
140 
142  nRow = rt->nRow;
143  nColumn = rt->nColumn;
144  eyePosition = rt->eyePosition;
146  viewSpan = rt->viewSpan;
147  stepAngle = viewSpan/100.;
151 
153  GetNavigatorForTracking()->GetWorldVolume();
155 }
G4ParticleDefinition * FindParticle(G4int PDGEncoding)
G4ThreeVector eyeDirection
G4ParticleDefinition * particle_definition
virtual EInside Inside(const G4ThreeVector &p) const =0
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41
static G4TransportationManager * GetTransportationManager()
static G4ParticleTable * GetParticleTable()
static G4TheMTRayTracer * theInstance
G4ThreeVector eyePosition
G4LogicalVolume * GetLogicalVolume() const
G4VSolid * GetSolid() const
Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ distortionOn

G4bool G4RTPrimaryGeneratorAction::distortionOn
private

Definition at line 72 of file G4RTPrimaryGeneratorAction.hh.

◆ eyeDirection

G4ThreeVector G4RTPrimaryGeneratorAction::eyeDirection
private

Definition at line 64 of file G4RTPrimaryGeneratorAction.hh.

◆ eyePosition

G4ThreeVector G4RTPrimaryGeneratorAction::eyePosition
private

Definition at line 63 of file G4RTPrimaryGeneratorAction.hh.

◆ headAngle

G4double G4RTPrimaryGeneratorAction::headAngle
private

Definition at line 66 of file G4RTPrimaryGeneratorAction.hh.

◆ nColumn

G4int G4RTPrimaryGeneratorAction::nColumn
private

Definition at line 60 of file G4RTPrimaryGeneratorAction.hh.

◆ nRow

G4int G4RTPrimaryGeneratorAction::nRow
private

Definition at line 61 of file G4RTPrimaryGeneratorAction.hh.

◆ particle_definition

G4ParticleDefinition* G4RTPrimaryGeneratorAction::particle_definition
private

Definition at line 52 of file G4RTPrimaryGeneratorAction.hh.

◆ particle_energy

G4double G4RTPrimaryGeneratorAction::particle_energy
private

Definition at line 53 of file G4RTPrimaryGeneratorAction.hh.

◆ particle_polarization

G4ThreeVector G4RTPrimaryGeneratorAction::particle_polarization
private

Definition at line 55 of file G4RTPrimaryGeneratorAction.hh.

◆ particle_time

G4double G4RTPrimaryGeneratorAction::particle_time
private

Definition at line 54 of file G4RTPrimaryGeneratorAction.hh.

◆ pWorld

G4VPhysicalVolume* G4RTPrimaryGeneratorAction::pWorld
private

Definition at line 57 of file G4RTPrimaryGeneratorAction.hh.

◆ stepAngle

G4double G4RTPrimaryGeneratorAction::stepAngle
private

Definition at line 68 of file G4RTPrimaryGeneratorAction.hh.

◆ up

G4ThreeVector G4RTPrimaryGeneratorAction::up
private

Definition at line 65 of file G4RTPrimaryGeneratorAction.hh.

◆ viewSpan

G4double G4RTPrimaryGeneratorAction::viewSpan
private

Definition at line 67 of file G4RTPrimaryGeneratorAction.hh.

◆ viewSpanX

G4double G4RTPrimaryGeneratorAction::viewSpanX
private

Definition at line 69 of file G4RTPrimaryGeneratorAction.hh.

◆ viewSpanY

G4double G4RTPrimaryGeneratorAction::viewSpanY
private

Definition at line 70 of file G4RTPrimaryGeneratorAction.hh.

◆ whereisit

EInside G4RTPrimaryGeneratorAction::whereisit
private

Definition at line 58 of file G4RTPrimaryGeneratorAction.hh.


The documentation for this class was generated from the following files: