ATLAS Offline Software
Public Member Functions | List of all members
Geo2G4MatPropTableFactory Class Reference

#include <Geo2G4MatPropTableFactory.h>

Collaboration diagram for Geo2G4MatPropTableFactory:

Public Member Functions

G4MaterialPropertiesTable * Build (const GeoMaterialPropertiesTable *)
 

Detailed Description

Definition at line 11 of file Geo2G4MatPropTableFactory.h.

Member Function Documentation

◆ Build()

G4MaterialPropertiesTable * Geo2G4MatPropTableFactory::Build ( const GeoMaterialPropertiesTable thePropTable)

Definition at line 21 of file Geo2G4MatPropTableFactory.cxx.

22 {
23  static TableMap definedTables ATLAS_THREAD_SAFE;
24 
25  // For now just use a global lock. If this turns out to be a bottleneck
26  // switch to a concurrent map or similar.
27  static std::mutex tableMutex;
28  std::scoped_lock lock(tableMutex);
29 
30  //
31  // Check if this material has already been defined.
32  //
33  const auto itr = definedTables.find(thePropTable);
34  if(itr != definedTables.end())
35  return itr->second;
36 
37  G4MaterialPropertiesTable* newTable = new G4MaterialPropertiesTable();
38 
39  // Add properties to the table ...
40 
41  // 1. Const properties
44 
45  for(;it1_first!=it1_last;++it1_first)
46  newTable->AddConstProperty((it1_first->first).c_str(),it1_first->second);
47 
48  // 2. Vector properties
51 
52  for(;it2_first!=it2_last;++it2_first)
53  {
54  GeoMaterialPropertyVector* geoMPV = it2_first->second;
55  //from G4 9.6 G4MaterialPropertyVector is now a typedef of G4PhysicsOrderedFreeVector
56  G4MaterialPropertyVector* g4MPV = new G4MaterialPropertyVector();
57 
58  geoMPV->ResetIterator();
59 
60  while((*geoMPV).operator++())
61  {
62  //g4MPV->AddElement(geoMPV->GetPhotonMomentum(),geoMPV->GetProperty()); // G4 9.4 syntax
63  //assume G4PhysicsOrderedFreeVector::InsertValues is equivalent to G4MaterialPropertyVector::AddElement
64  g4MPV->InsertValues(geoMPV->GetPhotonMomentum(),geoMPV->GetProperty()); // G4 9.6 syntax
65  }
66 
67  newTable->AddProperty((it2_first->first).c_str(),g4MPV);
68  }
69 
70  // Save new table to the map
71  definedTables[thePropTable]=newTable;
72 
73  return newTable;
74 }

The documentation for this class was generated from the following files:
GeoMaterialPropertiesTable::endPMap
GeoMatPMap_ConstIt endPMap() const
Definition: GeoMaterialPropertiesTable.cxx:85
GeoMaterialPropertiesTable::endPVMap
GeoMatPVMap_ConstIt endPVMap() const
Definition: GeoMaterialPropertiesTable.cxx:75
BeamSpot::mutex
std::mutex mutex
Definition: InDetBeamSpotVertex.cxx:18
GeoMaterialPropertyVector::GetProperty
double GetProperty() const
Definition: GeoMaterialPropertyVector.cxx:85
GeoMaterialPropertiesTable::GeoMatPMap_ConstIt
GeoMatPMap::const_iterator GeoMatPMap_ConstIt
Definition: GeoMaterialPropertiesTable.h:33
GeoMaterialPropertyVector::ResetIterator
void ResetIterator()
Definition: GeoMaterialPropertyVector.cxx:70
GeoMaterialPropertyVector::GetPhotonMomentum
double GetPhotonMomentum() const
Definition: GeoMaterialPropertyVector.cxx:93
GeoMaterialPropertiesTable::GeoMatPVMap_ConstIt
GeoMatPVMap::const_iterator GeoMatPVMap_ConstIt
Definition: GeoMaterialPropertiesTable.h:32
GeoMaterialPropertiesTable::beginPMap
GeoMatPMap_ConstIt beginPMap() const
Definition: GeoMaterialPropertiesTable.cxx:80
ATLAS_THREAD_SAFE
#define ATLAS_THREAD_SAFE
Definition: checker_macros.h:211
GeoMaterialPropertiesTable::beginPVMap
GeoMatPVMap_ConstIt beginPVMap() const
Definition: GeoMaterialPropertiesTable.cxx:70
GeoMaterialPropertyVector
Definition: GeoMaterialPropertyVector.h:12