Geant4 11.1.1
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
G4TrajectoriesModel.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// John Allison 26th August 1998.
30// Model which knows how to draw GEANT4 trajectories.
31
33
35#include "G4VGraphicsScene.hh"
36#include "G4RunManager.hh"
38#include "G4Run.hh"
39#include "G4Event.hh"
40#include "G4AttDefStore.hh"
41#include "G4AttValue.hh"
42#include "G4AttDef.hh"
43#include "G4AttCheck.hh"
44#include "G4UIcommand.hh"
45#include "G4VVisManager.hh"
46
48:fpCurrentTrajectory(0)
49,fRunID(-1)
50,fEventID(-1)
51{
52 fType = "G4TrajectoriesModel";
53 fGlobalTag = "G4TrajectoriesModel for any type of trajectory";
55}
56
58
60
62{
64 const G4Run* currentRun = runManager->GetCurrentRun();
65 if(currentRun)
66 {
67 fRunID = currentRun->GetRunID();
68 }
69 else
70 {
71 fRunID = -1;
72 return;
73 }
74
75 const G4Event* event = fpMP->GetEvent();
76 if (event) {
77 fEventID = event->GetEventID();
78 } else {
79 fEventID = -1;
80 return;
81 }
82
83 G4TrajectoryContainer* TC = event -> GetTrajectoryContainer ();
84 if (!TC) return;
85
87 if (!pVVisManager) return;
88
89 pVVisManager->BeginDraw();
90 // The use of Begin/EndDraw (optional methods to improve drawing
91 // speed) assumes all trajectories are drawn with the same
92 // transformation. If not, a fatal exception with be raised in
93 // G4VisManager::DrawT.
94 for (std::size_t iT = 0; iT < TC->entries(); ++iT) {
95 fpCurrentTrajectory = (*TC) [iT];
96 // Debug trajectory:
97 // fpCurrentTrajectory->ShowTrajectory(); G4cout << G4endl;
98 // Debug G4AttValues:
99 // G4TrajectoriesModelDebugG4AttValues(fpCurrentTrajectory);
100 if (fpCurrentTrajectory)
101 sceneHandler.AddCompound (*fpCurrentTrajectory);
102 }
103 pVVisManager->EndDraw();
104}
105
106const std::map<G4String,G4AttDef>* G4TrajectoriesModel::GetAttDefs() const
107{
108 G4bool isNew;
109 std::map<G4String,G4AttDef>* store
110 = G4AttDefStore::GetInstance("G4TrajectoriesModel", isNew);
111 if (isNew) {
112 (*store)["RunID"] =
113 G4AttDef("RunID","Run ID","Physics","","G4int");
114 (*store)["EventID"] =
115 G4AttDef("EventID","Event ID","Physics","","G4int");
116 }
117 return store;
118}
119
120std::vector<G4AttValue>* G4TrajectoriesModel::CreateCurrentAttValues() const
121{
122 std::vector<G4AttValue>* values = new std::vector<G4AttValue>;
123 values->push_back
124 (G4AttValue("RunID",G4UIcommand::ConvertToString(fRunID),""));
125 values->push_back
126 (G4AttValue("EventID",G4UIcommand::ConvertToString(fEventID),""));
127 return values;
128}
129
130// Debug material...
131
132#include "G4VTrajectoryPoint.hh"
133
135{
136 // Trajectory attributes
137 { // Scope bracket - allows re-use of names without compiler warnings.
138 std::vector<G4AttValue>* attValues = pTraj->CreateAttValues();
139 if (attValues) {
140 G4AttCheck attCheck(attValues, pTraj->GetAttDefs());
141 G4cout << "\nProvided G4Atts:\n" << attCheck;
142 if (attCheck.Check()) G4cout << "Error" << G4endl;
143 else {
144 std::vector<G4AttValue> standardValues;
145 std::map<G4String,G4AttDef> standardDefinitions;
146 attCheck.Standard(&standardValues, &standardDefinitions);
147 G4cout << "\nStandard G4Atts:\n"
148 << G4AttCheck(&standardValues, &standardDefinitions);
149 }
150 delete attValues;
151 }
152 }
153 // Trajectory point attributes
154 for (G4int i = 0; i < pTraj->GetPointEntries(); ++i) {
155 G4VTrajectoryPoint* aPoint = pTraj->GetPoint(i);
156 std::vector<G4AttValue>* attValues = aPoint->CreateAttValues();
157 if (attValues) {
158 G4AttCheck attCheck(attValues, aPoint->GetAttDefs());
159 G4cout << "\nProvided G4Atts:\n" << attCheck;
160 if (attCheck.Check()) G4cout << "Error" << G4endl;
161 else {
162 std::vector<G4AttValue> standardValues;
163 std::map<G4String,G4AttDef> standardDefinitions;
164 attCheck.Standard(&standardValues, &standardDefinitions);
165 G4cout << "\nStandard G4Atts:\n"
166 << G4AttCheck(&standardValues, &standardDefinitions);
167 }
168 delete attValues;
169 }
170 }
171}
void G4TrajectoriesModelDebugG4AttValues(const G4VTrajectory *)
bool G4bool
Definition: G4Types.hh:86
int G4int
Definition: G4Types.hh:85
#define G4endl
Definition: G4ios.hh:57
G4GLOB_DLL std::ostream G4cout
G4bool Check(const G4String &leader="") const
Definition: G4AttCheck.cc:118
G4bool Standard(std::vector< G4AttValue > *standardValues, std::map< G4String, G4AttDef > *standardDefinitions) const
Definition: G4AttCheck.cc:348
const G4Event * GetEvent() const
static G4RunManager * GetMasterRunManager()
const G4Run * GetCurrentRun() const
Definition: G4Run.hh:49
G4int GetRunID() const
Definition: G4Run.hh:78
virtual void DescribeYourselfTo(G4VGraphicsScene &)
std::vector< G4AttValue > * CreateCurrentAttValues() const
const std::map< G4String, G4AttDef > * GetAttDefs() const
std::size_t entries() const
static G4String ConvertToString(G4bool boolVal)
Definition: G4UIcommand.cc:446
virtual void AddCompound(const G4VTrajectory &)=0
G4String fGlobalDescription
Definition: G4VModel.hh:100
G4String fType
Definition: G4VModel.hh:98
const G4ModelingParameters * fpMP
Definition: G4VModel.hh:102
G4String fGlobalTag
Definition: G4VModel.hh:99
virtual std::vector< G4AttValue > * CreateAttValues() const
virtual const std::map< G4String, G4AttDef > * GetAttDefs() const
virtual G4VTrajectoryPoint * GetPoint(G4int i) const =0
virtual G4int GetPointEntries() const =0
virtual std::vector< G4AttValue > * CreateAttValues() const
virtual const std::map< G4String, G4AttDef > * GetAttDefs() const
virtual void EndDraw()=0
static G4VVisManager * GetConcreteInstance()
virtual void BeginDraw(const G4Transform3D &objectTransformation=G4Transform3D())=0
std::map< G4String, G4AttDef > * GetInstance(const G4String &storeKey, G4bool &isNew)