11 #include "G4LogicalVolume.hh" 12 #include "G4Material.hh" 13 #include "G4PVPlacement.hh" 14 #include "G4ReflectionFactory.hh" 15 #include "G4VPhysicalVolume.hh" 16 #include "G4VSolid.hh" 18 #include <CLHEP/Units/SystemOfUnits.h> 19 #include "G4UnitsTable.hh" 38 result =
new G4LogicalVolume(g4s, g4m,
part.name().name());
43 <<
"DDG4Builder::convertLV(): new G4LogicalVolume " <<
part.name().name()
44 <<
"\nDDG4Builder: newEvent: dd=" <<
part.ddname() <<
" g4=" <<
result->GetName();
60 edm::LogVerbatim(
"SimG4CoreGeometry") <<
"DDDetConstr::ConvertMaterial: material=" << material;
61 G4Material *
result =
nullptr;
71 " material is not valid from the Detector Description: " + material.
toString());
77 <<
" creating a G4-composite material. c=" <<
c <<
" d=" << material.
density() /
CLHEP::g * CLHEP::mole;
79 for (
int i = 0;
i <
c; ++
i) {
82 <<
" adding the composite=" << material.
name() <<
" fm=" << material.
constituent(
i).second;
89 <<
" z=" << material.
z() <<
" a=" << material.
a() /
CLHEP::g * CLHEP::mole
98 G4ReflectionFactory *refFact = G4ReflectionFactory::Instance();
99 refFact->SetScalePrecision(100. * refFact->GetScalePrecision());
107 for (; git != gend; ++git) {
111 " DDG4Builder::BuildGeometry() has encountered an " 112 "undefined DDLogicalPart named " +
118 Graph::edge_list::const_iterator cit = git->begin();
119 Graph::edge_list::const_iterator cend = git->end();
120 for (; cit != cend; ++cit) {
124 std::string err =
" DDG4Builder::BuildGeometry() in processing \"children\" has ";
125 err +=
"encountered an undefined DDLogicalPart named " + ddcurLP.
toString() +
" is a child of " +
133 rm.GetComponents(
x,
y,
z);
134 if ((
x.Cross(
y)).Dot(
z) < 0)
136 <<
"DDG4Builder: Reflection: " << gra.edgeData(cit->second)->ddrot()
137 <<
">>Placement d=" << gra.nodeData(cit->first).ddname() <<
" m=" << ddLP.
ddname()
138 <<
" cp=" << gra.edgeData(cit->second)->copyno() <<
" r=" << gra.edgeData(cit->second)->ddrot().ddname();
139 G4ThreeVector tempTran(gra.edgeData(cit->second)->trans().X(),
140 gra.edgeData(cit->second)->trans().Y(),
141 gra.edgeData(cit->second)->trans().Z());
142 G4Translate3D transl = tempTran;
143 CLHEP::HepRep3x3
temp(
x.X(),
x.Y(),
x.Z(),
y.X(),
y.Y(),
y.Z(),
z.X(),
z.Y(),
z.Z());
144 CLHEP::HepRotation hr(
temp);
146 <<
"Position " << gra.nodeData(cit->first).name().name() <<
":" 147 << gra.edgeData(cit->second)->copyno() +
offset +
tag <<
" in " << g4LV->GetName() <<
" at " << tempTran
148 <<
" with rotation matrix (" <<
x.X() <<
", " <<
x.Y() <<
", " <<
x.Z() <<
", " <<
y.X() <<
", " <<
y.Y()
149 <<
", " <<
y.Z() <<
", " <<
z.X() <<
", " <<
z.Y() <<
", " <<
z.Z() <<
")";
152 G4Transform3D trfrm = transl * G4Rotate3D(hr.inverse());
154 refFact->Place(trfrm,
155 gra.nodeData(cit->first).name().name(),
159 gra.edgeData(cit->second)->copyno() +
offset +
tag,
167 std::map<DDLogicalPart, G4LogicalVolume *>::const_iterator ddg4_it =
logs_.begin();
168 for (; ddg4_it !=
logs_.end(); ++ddg4_it) {
169 G4LogicalVolume *reflLogicalVolume = refFact->GetReflectedLV(ddg4_it->second);
170 if (reflLogicalVolume) {
176 <<
"DDG4Builder: dd=" << ddlv.
ddname() <<
" g4=" << reflLogicalVolume->GetName();
193 std::vector<const DDsvalues_type *>
result =
part.specifics();
194 bool foundIt =
false;
195 for (
auto stype :
result) {
201 std::vector<double>
temp =
val.doubles();
202 if (
temp.size() != 1) {
204 " DDG4Builder::getInt() Problem with Region tags - " 205 "one and only one allowed: " +
215 std::vector<const DDsvalues_type *>
result =
part.specifics();
216 bool foundIt =
false;
217 for (
auto stype :
result) {
223 std::vector<std::string>
temp =
val.strings();
224 if (
temp.size() != 1) {
226 " DDG4Builder::getDouble() Problem with Region tags " 227 "- one and only one allowed: " +
232 std::istringstream is(
temp[0]);
234 v =
v * G4UnitDefinition::GetValueOf(
unit.substr(1,
unit.size()));
Log< level::Info, true > LogVerbatim
std::map< DDLogicalPart, G4LogicalVolume * > logs_
math::Graph< DDLogicalPart, DDPosData * > Graph
G4LogicalVolume * convertLV(const DDLogicalPart &dLogical)
double getDouble(const std::string &s, const DDLogicalPart &dLogical)
DDMaterial is used to define and access material information.
G4LogicalVolumeToDDLogicalPartMap & map_
G4LogicalVolume * BuildGeometry(SensitiveDetectorCatalog &)
std::vector< DDG4Dispatchable * > DDG4DispContainer
std::map< DDSolid, G4VSolid * > sols_
const DDCompactView * compactView_
Compact representation of the geometrical detector hierarchy.
bool DDfetch(const DDsvalues_type *, DDValue &)
helper for retrieving DDValues from DDsvalues_type *.
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e g
A DDSolid represents the shape of a part.
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< double > > DD3Vector
G4Material * convertMaterial(const DDMaterial &dMaterial)
const std::string & name() const
Returns the name.
ROOT::Math::Rotation3D DDRotationMatrix
A DDRotationMatrix is currently implemented with a ROOT Rotation3D.
DDG4Builder(const DDCompactView *, G4LogicalVolumeToDDLogicalPartMap &, bool check)
std::map< DDMaterial, G4Material * > mats_
A DDLogicalPart aggregates information concerning material, solid and sensitveness ...
std::string toString() const
Graph::const_adj_iterator adjl_iterator
Basic3DVector unit() const
double density() const
returns the density
double z() const
retruns the atomic number
FractionV::value_type constituent(int i) const
returns the i-th compound material and its fraction-mass
const DDLogicalPart & root() const
returns the DDLogicalPart representing the root of the geometrical hierarchy
DDG4SolidConverter * solidConverter_
G4VSolid * convert(const DDSolid &)
int noOfConstituents() const
returns the number of compound materials or 0 for elementary materials
G4VSolid * convertSolid(const DDSolid &dSolid)
adj_list::const_iterator const_adj_iterator
double a() const
returns the atomic mass
void insert(const KeyType &, const ValueType &)
insert a new key-value-pair
const Graph & graph() const
Provides read-only access to the data structure of the compact-view.
def_type isDefined() const
DDG4DispContainer * theVectorOfDDG4Dispatchables_
int getInt(const std::string &s, const DDLogicalPart &dLogical)