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
G4TheRayTracer.hh
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
31
32#ifndef G4TheRayTracer_H
33#define G4TheRayTracer_H 1
34
35// class description:
36//
37// G4TheRayTracer
38// This is a graphics driver of Geant4 which generates a figure file by
39// ray tracing technique. The format of output figure file can be selected
40// by assigning a pointer of G4VFigureFileMaker concrete class object.
41// The main entry of ray tracing is Trace() method, which is available
42// only at Idle state. G4TheRayTracer shoots rays and controls its own event
43// loop. It generates G4Event objects used for its own purpose. When ray
44// tracing is working, all sensitive detectors are inactivated and all
45// user action classes are swapped out. Still, verbosities set to Geant4
46// manager classes are concerned. Thus, it is recommended to set verbosities
47// to minimum (usually zero).
48// G4TheRayTracer can visualise absolutely all kinds of geometrical shapes
49// which G4Navigator can deal with. Instead, it can NOT visualise hits
50// nor trajectories generated by usual simulation.
51
52#include "globals.hh"
53#include "G4ThreeVector.hh"
54#include "G4Colour.hh"
55
56class G4Event;
57class G4EventManager;
64class G4RTMessenger;
65class G4RayShooter;
68class G4VisAttributes;
69class G4VRTScanner;
70
71
73{
74 public: // with description
76 G4VRTScanner* scanner = 0);
77 // Constructor. The argument is the pointer to G4VFigureFileMaker
78 // concrete class object. If it is not set and
79 // SetFigureFileMaker() method is not invoked before Trace()
80 // command is invoked, then G4RTJpegMaker will be used and JPEG
81 // file will be generated. The second argument is a scanner that
82 // produces a sequence of window coordinates. If it is not set
83 // here or if SetScanner is not invoked before Trace(), a default
84 // G4RTSimpleScanner will be used.
85
86 public:
88
89 public: // with description
90 void Trace(G4String fileName);
91 // The main entry point which triggers ray tracing. "fileName" is output
92 // file name, and it must contain extention (e.g. myFigure.jpg). This
93 // method is available only if Geant4 is at Idle state.
94
95 protected:
97 // Event loop
98 void CreateFigureFile(G4String fileName);
99 // Create figure file after an event loop
100 G4bool GenerateColour(G4Event* anEvent);
101 // Calcurate RGB for one trajectory
102 void StoreUserActions();
103 void RestoreUserActions();
104 // Store and restore user action classes if defined
105
107 G4Colour GetMixedColour(G4Colour surfCol,G4Colour transCol,G4double weight=0.5);
109 G4bool ValidColour(const G4VisAttributes* visAtt);
110
111 public: // with description
113 // Set a concrete class of G4VFigureFileMaker for assigning the format of
114 // output figure file.
115 { theFigMaker = figMaker; }
117 inline void SetScanner(G4VRTScanner* scanner)
118 // Set a concrete class of G4VRTScanner for producing a sequence
119 // of window coordinates.
120 { theScanner = scanner; }
122
123 protected:
128
130
135
140
141 unsigned char* colorR;
142 unsigned char* colorG;
143 unsigned char* colorB;
144
147
154 G4double viewSpan; // Angle per 100 pixels
156
159
162
163 public:
164 inline void SetNColumn(G4int val) { nColumn = val; }
165 inline G4int GetNColumn() const { return nColumn; }
166 inline void SetNRow(G4int val) { nRow = val; }
167 inline G4int GetNRow() const { return nRow; }
168 inline void SetEyePosition(const G4ThreeVector& val) { eyePosition = val; }
169 inline G4ThreeVector GetEyePosition() const { return eyePosition; }
170 inline void SetTargetPosition(const G4ThreeVector& val) { targetPosition = val; }
172 inline void SetLightDirection(const G4ThreeVector& val) { lightDirection = val.unit(); }
174 inline void SetUpVector(const G4ThreeVector& val) { up = val; }
175 inline G4ThreeVector GetUpVector() const { return up; }
176 inline void SetHeadAngle(G4double val) { headAngle = val; }
177 inline G4double GetHeadAngle() const { return headAngle; }
178 inline void SetViewSpan(G4double val) { viewSpan = val; }
179 inline G4double GetViewSpan() const { return viewSpan; }
182 inline void SetDistortion(G4bool val) { distortionOn = val; }
183 inline G4bool GetDistortion() const { return distortionOn; }
186};
187
188#endif
double G4double
Definition: G4Types.hh:64
int G4int
Definition: G4Types.hh:66
bool G4bool
Definition: G4Types.hh:67
Hep3Vector unit() const
G4ThreeVector eyeDirection
void SetTargetPosition(const G4ThreeVector &val)
G4RTTrackingAction * theRayTracerTrackingAction
G4double GetViewSpan() const
G4UserTrackingAction * theUserTrackingAction
G4bool GenerateColour(G4Event *anEvent)
void SetUpVector(const G4ThreeVector &val)
G4RTSteppingAction * theRayTracerSteppingAction
G4int GetNColumn() const
void SetViewSpan(G4double val)
G4ThreeVector lightDirection
G4EventManager * theEventManager
G4UserStackingAction * theRayTracerStackingAction
G4UserEventAction * theUserEventAction
void SetNRow(G4int val)
unsigned char * colorG
G4double GetHeadAngle() const
G4UserSteppingAction * theUserSteppingAction
G4bool GetDistortion() const
G4Colour backgroundColour
unsigned char * colorR
G4double attenuationLength
void SetNColumn(G4int val)
G4bool CreateBitMap()
void SetLightDirection(const G4ThreeVector &val)
void SetDistortion(G4bool val)
G4ThreeVector GetTargetPosition() const
G4Colour GetSurfaceColour(G4RayTrajectoryPoint *point)
G4ThreeVector targetPosition
void SetAttenuationLength(G4double val)
G4UserEventAction * theRayTracerEventAction
G4VFigureFileMaker * theFigMaker
G4Colour GetBackgroundColour() const
void SetFigureFileMaker(G4VFigureFileMaker *figMaker)
G4VRTScanner * theScanner
void CreateFigureFile(G4String fileName)
void SetBackgroundColour(G4Colour val)
G4ThreeVector GetUpVector() const
G4UserStackingAction * theUserStackingAction
G4ThreeVector GetLightDirection() const
G4ThreeVector GetEyePosition() const
G4ThreeVector eyePosition
void SetHeadAngle(G4double val)
G4Colour Attenuate(G4RayTrajectoryPoint *point, G4Colour sourceCol)
void RestoreUserActions()
void SetScanner(G4VRTScanner *scanner)
G4Colour GetMixedColour(G4Colour surfCol, G4Colour transCol, G4double weight=0.5)
unsigned char * colorB
G4VRTScanner * GetScanner()
G4VFigureFileMaker * GetFigureFileMaker()
G4RTMessenger * theMessenger
G4RayShooter * theRayShooter
G4double GetAttenuationLength() const
G4ThreeVector up
G4int GetNRow() const
G4bool ValidColour(const G4VisAttributes *visAtt)
void SetEyePosition(const G4ThreeVector &val)
#define Trace(x)
Definition: zutil.h:247