Geant4 10.7.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4TheMTRayTracer.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//
28
29#include "G4TheMTRayTracer.hh"
30#include "G4SystemOfUnits.hh"
31#include "G4RTMessenger.hh"
32#include "G4VFigureFileMaker.hh"
33#include "G4RTJpegMaker.hh"
34#include "G4RTRun.hh"
35#include "G4RTRunAction.hh"
37#include "G4VRTScanner.hh"
38
39#include "G4MTRunManager.hh"
40#include "G4SDManager.hh"
41#include "G4StateManager.hh"
42#include "G4Colour.hh"
43#include "G4VisAttributes.hh"
44#include "G4UImanager.hh"
45#include "G4UIcommand.hh"
46#include "G4VVisManager.hh"
48
49G4TheMTRayTracer* G4TheMTRayTracer::theInstance = nullptr;
50
52 G4VRTScanner* scanner)
53: G4TheRayTracer(figMaker,scanner)
54{
55 if(!theInstance)
56 { theInstance = this; }
57 else
58 { G4Exception("G4TheMTRayTracer::G4TheMTRayTracer","VisRayTracer00100",
59 FatalException,"G4TheMTRayTracer has to be a singleton.");}
64}
65
67{
69 {
72 }
74 {
75 delete theRTRunAction;
77 }
78}
79
80void G4TheMTRayTracer::Trace(const G4String& fileName)
81{
83 G4ApplicationState currentState = theStateMan->GetCurrentState();
84 if(currentState!=G4State_Idle)
85 {
86 G4cerr << "Illegal application state <" << theStateMan->GetStateString(currentState)
87 << "> - Trace() ignored. " << G4endl;
88 return;
89 }
90
91 if(!theFigMaker)
92 {
93 G4cerr << "Figure file maker class is not specified - Trace() ignored." << G4endl;
94 return;
95 }
96
98 G4int storeTrajectory = UI->GetCurrentIntValue("/tracking/storeTrajectory");
99 UI->ApplyCommand("/tracking/storeTrajectory 1");
100
102 eyeDirection = tmpVec.unit();
103 G4int nPixel = nColumn*nRow;
104 colorR = new unsigned char[nPixel];
105 colorG = new unsigned char[nPixel];
106 colorB = new unsigned char[nPixel];
107 unsigned char defR = (unsigned char)(G4int(255*backgroundColour.GetRed()));
108 unsigned char defG = (unsigned char)(G4int(255*backgroundColour.GetGreen()));
109 unsigned char defB = (unsigned char)(G4int(255*backgroundColour.GetBlue()));
110 for(G4int ii=0;ii<nPixel;++ii)
111 {
112 colorR[ii] = defR;
113 colorG[ii] = defG;
114 colorB[ii] = defB;
115 }
116
117 G4bool succeeded = CreateBitMap();
118 if(succeeded)
119 { CreateFigureFile(fileName); }
120 else
121 { G4cerr << "Could not create figure file" << G4endl;
122 G4cerr << "You might set the eye position outside of the world volume" << G4endl; }
123
124 G4String str = "/tracking/storeTrajectory " + G4UIcommand::ConvertToString(storeTrajectory);
125 UI->ApplyCommand(str);
126
127 delete [] colorR;
128 delete [] colorG;
129 delete [] colorB;
130}
131
133{
137
140
143}
144
146{
151}
152
154{
156 visMan->IgnoreStateChanges(true);
158
160
161 // Keep, then switch off any printing requests
162 auto runVerbosity = mrm->GetVerboseLevel();
163 auto runPrintProgress = mrm->GetPrintProgress();
164 G4UImanager::GetUIpointer()->ApplyCommand("/run/verbose 0");
165 G4UImanager::GetUIpointer()->ApplyCommand("/run/printProgress 0");
166
167 // Event loop
168 G4int nEvent = nRow*nColumn;
169//// mrm->BeamOn(nEvent);
170//// Temporary work-around until direct invokation of G4RunManager::BeamOn() works.
171 G4String str = "/run/beamOn " + G4UIcommand::ConvertToString(nEvent);
173
174 // Restore printing requests
175 str = "/run/verbose " + G4UIcommand::ConvertToString(runVerbosity);
177 str = "/run/printProgress " + G4UIcommand::ConvertToString(runPrintProgress);
179
181 visMan->IgnoreStateChanges(false);
182
183 const G4RTRun* theRun = static_cast<const G4RTRun*>(mrm->GetCurrentRun());
184 if(!theRun) return false;
185
186 G4THitsMap<G4Colour>* colMap = theRun->GetMap();
187 auto itr = colMap->GetMap()->cbegin();
188 for(;itr!=colMap->GetMap()->cend();++itr)
189 {
190 G4int key = itr->first;
191 G4Colour* col = itr->second;
192 colorR[key] = (unsigned char)(G4int(255*col->GetRed()));
193 colorG[key] = (unsigned char)(G4int(255*col->GetGreen()));
194 colorB[key] = (unsigned char)(G4int(255*col->GetBlue()));
195 }
196
198 G4int iRow, iColumn;
199 while (theScanner->Coords(iRow,iColumn))
200 {
201 G4int iCoord = iRow * nColumn + iColumn;
202 theScanner->Draw(colorR[iCoord],colorG[iCoord],colorB[iCoord]);
203 }
204
205 return true;
206}
207
G4ApplicationState
@ G4State_Idle
@ FatalException
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
Definition: G4Exception.cc:35
bool G4bool
Definition: G4Types.hh:86
int G4int
Definition: G4Types.hh:85
G4GLOB_DLL std::ostream G4cerr
#define G4endl
Definition: G4ios.hh:57
Hep3Vector unit() const
G4double GetBlue() const
Definition: G4Colour.hh:152
G4double GetRed() const
Definition: G4Colour.hh:150
G4double GetGreen() const
Definition: G4Colour.hh:151
virtual void SetUserAction(G4UserRunAction *userAction)
virtual void SetUserInitialization(G4VUserPhysicsList *userPL)
G4THitsMap< G4Colour > * GetMap() const
Definition: G4RTRun.hh:63
static G4MTRunManager * GetMTMasterRunManager()
const G4UserWorkerInitialization * GetUserWorkerInitialization() const
const G4Run * GetCurrentRun() const
const G4UserRunAction * GetUserRunAction() const
G4int GetPrintProgress()
G4int GetVerboseLevel() const
const G4ApplicationState & GetCurrentState() const
G4String GetStateString(const G4ApplicationState &aState) const
static G4StateManager * GetStateManager()
G4RTWorkerInitialization * theRTWorkerInitialization
virtual void StoreUserActions()
virtual void Trace(const G4String &fileName)
const G4UserWorkerInitialization * theUserWorkerInitialization
const G4UserRunAction * theUserRunAction
virtual G4bool CreateBitMap()
virtual void RestoreUserActions()
G4RTRunAction * theRTRunAction
virtual ~G4TheMTRayTracer()
G4TheMTRayTracer(G4VFigureFileMaker *figMaker=0, G4VRTScanner *scanner=0)
G4ThreeVector eyeDirection
unsigned char * colorG
G4Colour backgroundColour
unsigned char * colorR
G4ThreeVector targetPosition
void CreateFigureFile(const G4String &fileName)
G4VFigureFileMaker * theFigMaker
G4VRTScanner * theScanner
G4ThreeVector eyePosition
unsigned char * colorB
static G4String ConvertToString(G4bool boolVal)
Definition: G4UIcommand.cc:430
G4int ApplyCommand(const char *aCommand)
Definition: G4UImanager.cc:485
G4int GetCurrentIntValue(const char *aCommand, G4int parameterNumber=1, G4bool reGet=true)
Definition: G4UImanager.cc:231
static G4UImanager * GetUIpointer()
Definition: G4UImanager.cc:77
virtual void Initialize(G4int nRow, G4int nColumn)=0
virtual void Draw(unsigned char red, unsigned char green, unsigned char blue)
Definition: G4VRTScanner.hh:70
virtual G4bool Coords(G4int &iRow, G4int &iColumn)=0
Map_t * GetMap() const
Definition: G4THitsMap.hh:151
virtual void IgnoreStateChanges(G4bool)
static G4VVisManager * GetConcreteInstance()