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
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