Geant4 11.2.2
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
49#define G4warn G4cout
50
51G4TheMTRayTracer* G4TheMTRayTracer::theInstance = nullptr;
52
54 G4VRTScanner* scanner)
55: G4TheRayTracer(figMaker,scanner)
56{
57 if(!theInstance)
58 { theInstance = this; }
59 else
60 { G4Exception("G4TheMTRayTracer::G4TheMTRayTracer","VisRayTracer00100",
61 FatalException,"G4TheMTRayTracer has to be a singleton.");}
66}
67
69{
70 if (theInstance) return theInstance;
71 else return new G4TheMTRayTracer;
72}
73
75(G4VFigureFileMaker* figMaker,G4VRTScanner* scanner)
76{
77 if (theInstance) {
78 theFigMaker=figMaker;
79 theScanner=scanner;
80 return theInstance;
81 }
82 else return new G4TheMTRayTracer(figMaker,scanner);
83}
84
98
99void G4TheMTRayTracer::Trace(const G4String& fileName)
100{
102 G4ApplicationState currentState = theStateMan->GetCurrentState();
103 if(currentState!=G4State_Idle)
104 {
105 G4warn << "Illegal application state <" << theStateMan->GetStateString(currentState)
106 << "> - Trace() ignored. " << G4endl;
107 return;
108 }
109
110 if(!theFigMaker)
111 {
112 G4warn << "Figure file maker class is not specified - Trace() ignored." << G4endl;
113 return;
114 }
115
117 G4int storeTrajectory = UI->GetCurrentIntValue("/tracking/storeTrajectory");
118 UI->ApplyCommand("/tracking/storeTrajectory 1");
119
121 eyeDirection = tmpVec.unit();
122 G4int nPixel = nColumn*nRow;
123 colorR = new unsigned char[nPixel];
124 colorG = new unsigned char[nPixel];
125 colorB = new unsigned char[nPixel];
126 unsigned char defR = (unsigned char)(G4int(255*backgroundColour.GetRed()));
127 unsigned char defG = (unsigned char)(G4int(255*backgroundColour.GetGreen()));
128 unsigned char defB = (unsigned char)(G4int(255*backgroundColour.GetBlue()));
129 for(G4int ii=0;ii<nPixel;++ii)
130 {
131 colorR[ii] = defR;
132 colorG[ii] = defG;
133 colorB[ii] = defB;
134 }
135
136 G4bool succeeded = CreateBitMap();
137 if(succeeded)
138 { CreateFigureFile(fileName); }
139 else
140 { G4warn << "Could not create figure file" << G4endl;
141 G4warn << "You might set the eye position outside of the world volume" << G4endl; }
142
143 G4String str = "/tracking/storeTrajectory " + G4UIcommand::ConvertToString(storeTrajectory);
144 UI->ApplyCommand(str);
145
146 delete [] colorR;
147 delete [] colorG;
148 delete [] colorB;
149}
150
163
171
173{
175 visMan->IgnoreStateChanges(true);
177
179
180 // Keep, then switch off any printing requests
181 auto runVerbosity = mrm->GetVerboseLevel();
182 auto runPrintProgress = mrm->GetPrintProgress();
183 G4UImanager::GetUIpointer()->ApplyCommand("/run/verbose 0");
184 G4UImanager::GetUIpointer()->ApplyCommand("/run/printProgress 0");
185
186 // Event loop
187 G4int nEvent = nRow*nColumn;
188//// mrm->BeamOn(nEvent);
189//// Temporary work-around until direct invokation of G4RunManager::BeamOn() works.
190 G4String str = "/run/beamOn " + G4UIcommand::ConvertToString(nEvent);
192
193 // Restore printing requests
194 str = "/run/verbose " + G4UIcommand::ConvertToString(runVerbosity);
196 str = "/run/printProgress " + G4UIcommand::ConvertToString(runPrintProgress);
198
200 visMan->IgnoreStateChanges(false);
201
202 const G4RTRun* theRun = static_cast<const G4RTRun*>(mrm->GetCurrentRun());
203 if(!theRun) return false;
204
205 G4THitsMap<G4Colour>* colMap = theRun->GetMap();
206 auto itr = colMap->GetMap()->cbegin();
207 for(;itr!=colMap->GetMap()->cend();++itr)
208 {
209 G4int key = itr->first;
210 G4Colour* col = itr->second;
211 colorR[key] = (unsigned char)(G4int(255*col->GetRed()));
212 colorG[key] = (unsigned char)(G4int(255*col->GetGreen()));
213 colorB[key] = (unsigned char)(G4int(255*col->GetBlue()));
214 }
215
217 G4int iRow, iColumn;
218 while (theScanner->Coords(iRow,iColumn))
219 {
220 G4int iCoord = iRow * nColumn + iColumn;
221 theScanner->Draw(colorR[iCoord],colorG[iCoord],colorB[iCoord]);
222 }
223
224 return true;
225}
226
G4ApplicationState
@ G4State_Idle
@ FatalException
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
#define G4warn
Definition G4Scene.cc:41
bool G4bool
Definition G4Types.hh:86
int G4int
Definition G4Types.hh:85
#define G4endl
Definition G4ios.hh:67
Hep3Vector unit() const
G4double GetBlue() const
Definition G4Colour.hh:154
G4double GetRed() const
Definition G4Colour.hh:152
G4double GetGreen() const
Definition G4Colour.hh:153
void SetUserAction(G4UserRunAction *userAction) override
void SetUserInitialization(G4VUserPhysicsList *userPL) override
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()
static G4TheMTRayTracer * Instance()
G4RTRunAction * theRTRunAction
virtual ~G4TheMTRayTracer()
G4TheMTRayTracer(G4VFigureFileMaker *figMaker=0, G4VRTScanner *scanner=0)
G4ThreeVector eyeDirection
static G4VRTScanner * theScanner
static G4VFigureFileMaker * theFigMaker
unsigned char * colorG
G4Colour backgroundColour
unsigned char * colorR
G4ThreeVector targetPosition
void CreateFigureFile(const G4String &fileName)
G4ThreeVector eyePosition
unsigned char * colorB
static G4String ConvertToString(G4bool boolVal)
G4int ApplyCommand(const char *aCommand)
G4int GetCurrentIntValue(const char *aCommand, G4int parameterNumber=1, G4bool reGet=true)
static G4UImanager * GetUIpointer()
virtual void Initialize(G4int nRow, G4int nColumn)=0
virtual void Draw(unsigned char red, unsigned char green, unsigned char blue)
virtual G4bool Coords(G4int &iRow, G4int &iColumn)=0
Map_t * GetMap() const
virtual void IgnoreStateChanges(G4bool)
static G4VVisManager * GetConcreteInstance()