Geant4 11.1.1
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4tgbRotationMatrixMgr.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// G4tgbRotationMatrixMgr implementation
27//
28// Author: P.Arce, CIEMAT (November 2007)
29// --------------------------------------------------------------------
30
32
33#include "G4SystemOfUnits.hh"
35#include "G4tgrMessenger.hh"
36
38 G4tgbRotationMatrixMgr::theInstance = nullptr;
39
40// --------------------------------------------------------------------
41G4tgbRotationMatrixMgr::G4tgbRotationMatrixMgr()
42{
43}
44
45// --------------------------------------------------------------------
47{
48 if(theInstance == nullptr)
49 {
50 theInstance = new G4tgbRotationMatrixMgr;
51 theInstance->CopyRotMats();
52 }
53 return theInstance;
54}
55
56// --------------------------------------------------------------------
58{
59 for(auto tgbcite = theTgbRotMats.cbegin();
60 tgbcite != theTgbRotMats.cend(); ++tgbcite)
61 {
62 delete(*tgbcite).second;
63 }
64 theTgbRotMats.clear();
65 delete theInstance;
66}
67
68// --------------------------------------------------------------------
69void G4tgbRotationMatrixMgr::CopyRotMats()
70{
71 G4mstgrrotm tgrRotms =
73 for(auto cite = tgrRotms.cbegin(); cite != tgrRotms.cend(); ++cite)
74 {
75 G4tgrRotationMatrix* tgr = (*cite).second;
77 theTgbRotMats[tgb->GetName()] = tgb;
78 }
79}
80
81// --------------------------------------------------------------------
83 const G4String& name)
84{
85#ifdef G4VERBOSE
87 {
88 G4cout << " G4tgbRotationMatrixMgr::FindOrBuildG4RotMatrix() - " << name
89 << G4endl;
90 }
91#endif
92 G4RotationMatrix* g4rotm = FindG4RotMatrix(name);
93 if(g4rotm == nullptr)
94 {
96 // GetRotMatrix() never returns 0, otherwise if not found, it crashes
97 g4rotm = hrotm->BuildG4RotMatrix();
98 }
99 return g4rotm;
100}
101
102// --------------------------------------------------------------------
104{
105 G4RotationMatrix* g4rotm = nullptr;
106
107 G4msg4rotm::const_iterator cite = theG4RotMats.find(name);
108 if(cite != theG4RotMats.cend())
109 {
110 g4rotm = (*cite).second;
111 }
112
113#ifdef G4VERBOSE
115 {
116 G4cout << " G4tgbRotationMatrixMgr::FindG4RotMatrix(): " << G4endl
117 << " Name: " << name << " = " << g4rotm << G4endl;
118 }
119#endif
120
121 return g4rotm;
122}
123
124// --------------------------------------------------------------------
127{
129
130 if(rotm == nullptr)
131 {
132 G4String ErrMessage = "Rotation Matrix " + name + " not found !";
133 G4Exception("G4tgbRotationMatrixFactory::FindOrBuildRotMatrix()",
134 "InvalidSetup", FatalException, ErrMessage);
135 }
136 return rotm;
137}
138
139// --------------------------------------------------------------------
141 const G4String& name)
142{
143 G4tgbRotationMatrix* rotm = nullptr;
144
145 G4mstgbrotm::const_iterator cite = theTgbRotMats.find(name);
146 if(cite != theTgbRotMats.cend())
147 {
148 rotm = (*cite).second;
149 }
150 return rotm;
151}
152
153// --------------------------------------------------------------------
154std::ostream& operator<<(std::ostream& os, const G4RotationMatrix& rot)
155{
156 os << "[ " << rot.thetaX() / deg << '\t' << rot.phiX() / deg << '\t'
157 << rot.thetaY() / deg << '\t' << rot.phiY() / deg << '\t'
158 << rot.thetaZ() / deg << '\t' << rot.phiZ() / deg << " ]" << G4endl;
159 return os;
160}
@ FatalException
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
Definition: G4Exception.cc:59
#define G4endl
Definition: G4ios.hh:57
G4GLOB_DLL std::ostream G4cout
std::ostream & operator<<(std::ostream &os, const G4RotationMatrix &rot)
std::map< G4String, G4tgrRotationMatrix * > G4mstgrrotm
double thetaY() const
Definition: Rotation.cc:140
double phiY() const
Definition: Rotation.cc:128
double thetaX() const
Definition: Rotation.cc:136
double phiX() const
Definition: Rotation.cc:124
double thetaZ() const
Definition: Rotation.cc:144
double phiZ() const
Definition: Rotation.cc:132
static G4tgbRotationMatrixMgr * GetInstance()
G4RotationMatrix * FindG4RotMatrix(const G4String &name)
G4RotationMatrix * FindOrBuildG4RotMatrix(const G4String &name)
G4tgbRotationMatrix * FindOrBuildTgbRotMatrix(const G4String &name)
G4tgbRotationMatrix * FindTgbRotMatrix(const G4String &name)
G4RotationMatrix * BuildG4RotMatrix()
const G4String & GetName()
static G4int GetVerboseLevel()
const G4mstgrrotm & GetRotMatMap() const
static G4tgrRotationMatrixFactory * GetInstance()
#define G4ThreadLocal
Definition: tls.hh:77