Geant4  10.02.p03
G4LatticeManager Class Reference

#include <G4LatticeManager.hh>

Collaboration diagram for G4LatticeManager:

Public Member Functions

void SetVerboseLevel (G4int vb)
 
void Reset ()
 
G4bool RegisterLattice (G4VPhysicalVolume *, G4LatticePhysical *)
 
G4bool RegisterLattice (G4VPhysicalVolume *, G4LatticeLogical *)
 
G4bool RegisterLattice (G4Material *, G4LatticeLogical *)
 
G4LatticeLogicalLoadLattice (G4Material *, const G4String &latDir)
 
G4LatticeLogicalGetLattice (G4Material *) const
 
G4bool HasLattice (G4Material *) const
 
G4LatticePhysicalLoadLattice (G4VPhysicalVolume *, const G4String &latDir)
 
G4LatticePhysicalGetLattice (G4VPhysicalVolume *) const
 
G4bool HasLattice (G4VPhysicalVolume *) const
 
G4double MapKtoV (G4VPhysicalVolume *, G4int, const G4ThreeVector &) const
 
G4ThreeVector MapKtoVDir (G4VPhysicalVolume *, G4int, const G4ThreeVector &) const
 

Static Public Member Functions

static G4LatticeManagerGetLatticeManager ()
 

Protected Types

typedef std::map< G4Material *, G4LatticeLogical * > LatticeMatMap
 
typedef std::set< G4LatticeLogical * > LatticeLogReg
 
typedef std::map< G4VPhysicalVolume *, G4LatticePhysical * > LatticeVolMap
 
typedef std::set< G4LatticePhysical * > LatticePhyReg
 

Protected Member Functions

void Clear ()
 

Protected Attributes

G4int verboseLevel
 
LatticeLogReg fLLattices
 
LatticeMatMap fLLatticeList
 
LatticePhyReg fPLattices
 
LatticeVolMap fPLatticeList
 

Private Member Functions

 G4LatticeManager ()
 
virtual ~G4LatticeManager ()
 

Static Private Attributes

static G4LatticeManagerfLM = 0
 

Detailed Description

Definition at line 48 of file G4LatticeManager.hh.

Member Typedef Documentation

◆ LatticeLogReg

typedef std::set<G4LatticeLogical*> G4LatticeManager::LatticeLogReg
protected

Definition at line 90 of file G4LatticeManager.hh.

◆ LatticeMatMap

Definition at line 89 of file G4LatticeManager.hh.

◆ LatticePhyReg

typedef std::set<G4LatticePhysical*> G4LatticeManager::LatticePhyReg
protected

Definition at line 96 of file G4LatticeManager.hh.

◆ LatticeVolMap

Definition at line 95 of file G4LatticeManager.hh.

Constructor & Destructor Documentation

◆ G4LatticeManager()

G4LatticeManager::G4LatticeManager ( )
private

Definition at line 54 of file G4LatticeManager.cc.

54  : verboseLevel(0) {
55  Clear();
56 }
Here is the call graph for this function:
Here is the caller graph for this function:

◆ ~G4LatticeManager()

G4LatticeManager::~G4LatticeManager ( )
privatevirtual

Definition at line 58 of file G4LatticeManager.cc.

58  {
59  Reset(); // Deletes all lattices
60 }
Here is the call graph for this function:

Member Function Documentation

◆ Clear()

void G4LatticeManager::Clear ( )
protected

Definition at line 80 of file G4LatticeManager.cc.

80  {
81  fPLatticeList.clear();
82  fPLattices.clear();
83 
84  fLLatticeList.clear();
85  fLLattices.clear();
86 }
LatticeVolMap fPLatticeList
LatticePhyReg fPLattices
LatticeMatMap fLLatticeList
LatticeLogReg fLLattices
Here is the caller graph for this function:

◆ GetLattice() [1/2]

G4LatticeLogical * G4LatticeManager::GetLattice ( G4Material Mat) const

Definition at line 210 of file G4LatticeManager.cc.

210  {
211  LatticeMatMap::const_iterator latFind = fLLatticeList.find(Mat);
212  if (latFind != fLLatticeList.end()) {
213  if (verboseLevel)
214  G4cout << "G4LatticeManager::GetLattice found " << latFind->second
215  << " for " << (Mat?Mat->GetName():"NULL") << "." << G4endl;
216  return latFind->second;
217  }
218 
219  if (verboseLevel)
220  G4cerr << "G4LatticeManager:: Found no matching lattices for "
221  << (Mat?Mat->GetName():"NULL") << "." << G4endl;
222 
223  return 0; // No lattice associated with volume
224 }
G4GLOB_DLL std::ostream G4cout
#define G4endl
Definition: G4ios.hh:61
const G4String & GetName() const
Definition: G4Material.hh:178
LatticeMatMap fLLatticeList
G4GLOB_DLL std::ostream G4cerr
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetLattice() [2/2]

G4LatticePhysical * G4LatticeManager::GetLattice ( G4VPhysicalVolume Vol) const

Definition at line 229 of file G4LatticeManager.cc.

229  {
230  LatticeVolMap::const_iterator latFind = fPLatticeList.find(Vol);
231  if (latFind != fPLatticeList.end()) {
232  if (verboseLevel)
233  G4cout << "G4LatticeManager::GetLattice found " << latFind->second
234  << " for " << (Vol?Vol->GetName():"default") << "." << G4endl;
235  return latFind->second;
236  }
237 
238  if (verboseLevel)
239  G4cerr << "G4LatticeManager::GetLattice found no matching lattices for "
240  << (Vol?Vol->GetName():"default") << "." << G4endl;
241 
242  return 0; // No lattice associated with volume
243 }
G4GLOB_DLL std::ostream G4cout
const G4String & GetName() const
LatticeVolMap fPLatticeList
#define G4endl
Definition: G4ios.hh:61
G4GLOB_DLL std::ostream G4cerr
Here is the call graph for this function:

◆ GetLatticeManager()

G4LatticeManager * G4LatticeManager::GetLatticeManager ( )
static

Definition at line 90 of file G4LatticeManager.cc.

90  {
91  // if no lattice manager exists, create one.
92  G4AutoLock latLock(&latMutex); // Protect before changing pointer
93  if (!fLM) fLM = new G4LatticeManager();
94  latLock.unlock();
95 
96  return fLM;
97 }
static G4LatticeManager * fLM
Here is the call graph for this function:
Here is the caller graph for this function:

◆ HasLattice() [1/2]

G4bool G4LatticeManager::HasLattice ( G4Material Mat) const

Definition at line 255 of file G4LatticeManager.cc.

255  {
256  return (fLLatticeList.find(Mat) != fLLatticeList.end());
257 }
LatticeMatMap fLLatticeList
Here is the caller graph for this function:

◆ HasLattice() [2/2]

G4bool G4LatticeManager::HasLattice ( G4VPhysicalVolume Vol) const

Definition at line 249 of file G4LatticeManager.cc.

249  {
250  return (fPLatticeList.find(Vol) != fPLatticeList.end());
251 }
LatticeVolMap fPLatticeList

◆ LoadLattice() [1/2]

G4LatticeLogical * G4LatticeManager::LoadLattice ( G4Material Mat,
const G4String latDir 
)

Definition at line 123 of file G4LatticeManager.cc.

124  {
125  if (verboseLevel) {
126  G4cout << "G4LatticeManager::LoadLattice material " << Mat->GetName()
127  << " " << latDir << G4endl;
128  }
129 
130  G4LatticeReader latReader(verboseLevel);
131  G4LatticeLogical* newLat = latReader.MakeLattice(latDir+"/config.txt");
132  if (verboseLevel>1) G4cout << " Created newLat " << newLat << G4endl;
133 
134  if (newLat) RegisterLattice(Mat, newLat);
135  else {
136  G4cerr << "ERROR creating " << latDir << " lattice for material "
137  << Mat->GetName() << G4endl;
138  }
139 
140  return newLat;
141 }
G4GLOB_DLL std::ostream G4cout
#define G4endl
Definition: G4ios.hh:61
const G4String & GetName() const
Definition: G4Material.hh:178
G4bool RegisterLattice(G4VPhysicalVolume *, G4LatticePhysical *)
G4GLOB_DLL std::ostream G4cerr
Here is the call graph for this function:
Here is the caller graph for this function:

◆ LoadLattice() [2/2]

G4LatticePhysical * G4LatticeManager::LoadLattice ( G4VPhysicalVolume Vol,
const G4String latDir 
)

Definition at line 145 of file G4LatticeManager.cc.

146  {
147  if (verboseLevel) {
148  G4cout << "G4LatticeManager::LoadLattice volume " << Vol->GetName()
149  << " " << latDir << G4endl;
150  }
151 
152  G4Material* theMat = Vol->GetLogicalVolume()->GetMaterial();
153 
154  // Create and register the logical lattice, then the physical lattice
155  G4LatticeLogical* lLattice = LoadLattice(theMat, latDir);
156  if (!lLattice) return 0;
157 
158  G4LatticePhysical* pLattice =
159  new G4LatticePhysical(lLattice, Vol->GetFrameRotation());
160  if (pLattice) RegisterLattice(Vol, pLattice);
161 
162  if (verboseLevel>1) G4cout << " Created pLattice " << pLattice << G4endl;
163 
164  return pLattice;
165 }
const G4RotationMatrix * GetFrameRotation() const
G4Material * GetMaterial() const
G4GLOB_DLL std::ostream G4cout
G4LatticeLogical * LoadLattice(G4Material *, const G4String &latDir)
const G4String & GetName() const
#define G4endl
Definition: G4ios.hh:61
G4LogicalVolume * GetLogicalVolume() const
G4bool RegisterLattice(G4VPhysicalVolume *, G4LatticePhysical *)
Here is the call graph for this function:

◆ MapKtoV()

G4double G4LatticeManager::MapKtoV ( G4VPhysicalVolume Vol,
G4int  polarizationState,
const G4ThreeVector k 
) const

Definition at line 265 of file G4LatticeManager.cc.

267  {
268  G4LatticePhysical* theLattice = GetLattice(Vol);
269  if (verboseLevel)
270  G4cout << "G4LatticeManager::MapKtoV using lattice " << theLattice
271  << G4endl;
272 
273  // If no lattice available, use generic "speed of sound"
274  return theLattice ? theLattice->MapKtoV(polarizationState, k) : 300.*m/s;
275 }
G4double MapKtoV(G4int, G4ThreeVector) const
static const double s
Definition: G4SIunits.hh:168
G4GLOB_DLL std::ostream G4cout
G4LatticeLogical * GetLattice(G4Material *) const
#define G4endl
Definition: G4ios.hh:61
static const double m
Definition: G4SIunits.hh:128
Here is the call graph for this function:
Here is the caller graph for this function:

◆ MapKtoVDir()

G4ThreeVector G4LatticeManager::MapKtoVDir ( G4VPhysicalVolume Vol,
G4int  polarizationState,
const G4ThreeVector k 
) const

Definition at line 283 of file G4LatticeManager.cc.

285  {
286  G4LatticePhysical* theLattice = GetLattice(Vol);
287  if (verboseLevel)
288  G4cout << "G4LatticeManager::MapKtoVDir using lattice " << theLattice
289  << G4endl;
290 
291  // If no lattice available, propagate along input wavevector
292  return theLattice ? theLattice->MapKtoVDir(polarizationState, k) : k.unit();
293 }
G4GLOB_DLL std::ostream G4cout
G4LatticeLogical * GetLattice(G4Material *) const
Hep3Vector unit() const
G4ThreeVector MapKtoVDir(G4int, G4ThreeVector) const
#define G4endl
Definition: G4ios.hh:61
Here is the call graph for this function:
Here is the caller graph for this function:

◆ RegisterLattice() [1/3]

G4bool G4LatticeManager::RegisterLattice ( G4VPhysicalVolume Vol,
G4LatticePhysical Lat 
)

Definition at line 172 of file G4LatticeManager.cc.

173  {
174  if (!Vol || !Lat) return false; // Don't register null pointers
175 
176  G4AutoLock latLock(&latMutex); // Protect before changing registry
177 
178  // SPECIAL: Register first lattice with a null volume to act as default
179  if (fPLatticeList.empty()) fPLatticeList[0] = Lat;
180 
181  fPLattices.insert(Lat);
182  fPLatticeList[Vol] = Lat;
183 
184  latLock.unlock();
185 
186  if (verboseLevel) {
187  G4cout << "G4LatticeManager::RegisterLattice: "
188  << " Total number of physical lattices: " << fPLatticeList.size()-1
189  << " (" << fPLattices.size() << " unique)" << G4endl;
190  }
191 
192  return true;
193 }
G4GLOB_DLL std::ostream G4cout
LatticeVolMap fPLatticeList
#define G4endl
Definition: G4ios.hh:61
LatticePhyReg fPLattices
Here is the call graph for this function:
Here is the caller graph for this function:

◆ RegisterLattice() [2/3]

G4bool G4LatticeManager::RegisterLattice ( G4VPhysicalVolume Vol,
G4LatticeLogical LLat 
)

Definition at line 195 of file G4LatticeManager.cc.

196  {
197  if (!Vol || !LLat) return false; // Don't register null pointers
198 
199  // Make sure logical lattice is registered for material
201 
202  // Create and register new physical lattice to go with volume
203  return RegisterLattice(Vol, new G4LatticePhysical(LLat, Vol->GetFrameRotation()));
204 }
const G4RotationMatrix * GetFrameRotation() const
G4Material * GetMaterial() const
G4LogicalVolume * GetLogicalVolume() const
G4bool RegisterLattice(G4VPhysicalVolume *, G4LatticePhysical *)
Here is the call graph for this function:

◆ RegisterLattice() [3/3]

G4bool G4LatticeManager::RegisterLattice ( G4Material Mat,
G4LatticeLogical Lat 
)

Definition at line 103 of file G4LatticeManager.cc.

104  {
105  if (!Mat || !Lat) return false; // Don't register null pointers
106 
107  G4AutoLock latLock(&latMutex); // Protect before changing registry
108  fLLattices.insert(Lat); // Take ownership in registry
109  fLLatticeList[Mat] = Lat;
110  latLock.unlock();
111 
112  if (verboseLevel) {
113  G4cout << "G4LatticeManager::RegisterLattice: "
114  << " Total number of logical lattices: " << fLLatticeList.size()
115  << " (" << fLLattices.size() << " unique)" << G4endl;
116  }
117 
118  return true;
119 }
G4GLOB_DLL std::ostream G4cout
#define G4endl
Definition: G4ios.hh:61
LatticeMatMap fLLatticeList
LatticeLogReg fLLattices
Here is the call graph for this function:

◆ Reset()

void G4LatticeManager::Reset ( )

Definition at line 64 of file G4LatticeManager.cc.

64  {
65  for (LatticeLogReg::iterator lm=fLLattices.begin();
66  lm != fLLattices.end(); ++lm) {
67  delete (*lm);
68  }
69 
70  for (LatticePhyReg::iterator pm=fPLattices.begin();
71  pm != fPLattices.end(); ++pm) {
72  delete (*pm);
73  }
74 
75  Clear();
76 }
LatticePhyReg fPLattices
LatticeLogReg fLLattices
Here is the call graph for this function:
Here is the caller graph for this function:

◆ SetVerboseLevel()

void G4LatticeManager::SetVerboseLevel ( G4int  vb)
inline

Definition at line 55 of file G4LatticeManager.hh.

55 { verboseLevel = vb; }
Here is the call graph for this function:

Member Data Documentation

◆ fLLatticeList

LatticeMatMap G4LatticeManager::fLLatticeList
protected

Definition at line 93 of file G4LatticeManager.hh.

◆ fLLattices

LatticeLogReg G4LatticeManager::fLLattices
protected

Definition at line 92 of file G4LatticeManager.hh.

◆ fLM

G4LatticeManager * G4LatticeManager::fLM = 0
staticprivate

Definition at line 50 of file G4LatticeManager.hh.

◆ fPLatticeList

LatticeVolMap G4LatticeManager::fPLatticeList
protected

Definition at line 99 of file G4LatticeManager.hh.

◆ fPLattices

LatticePhyReg G4LatticeManager::fPLattices
protected

Definition at line 98 of file G4LatticeManager.hh.

◆ verboseLevel

G4int G4LatticeManager::verboseLevel
protected

Definition at line 87 of file G4LatticeManager.hh.


The documentation for this class was generated from the following files: