ATLAS Offline Software
Public Member Functions | Protected Attributes | Private Member Functions | Private Attributes | List of all members
GeoDetectorTool Class Referencefinal

#include "G4AtlasTools/GeoDetectorTool.h"

Inheritance diagram for GeoDetectorTool:
Collaboration diagram for GeoDetectorTool:

Public Member Functions

 GeoDetectorTool (const std::string &type, const std::string &name, const IInterface *parent)
 
 ~GeoDetectorTool ()
 
virtual StatusCode initialize () override final
 Athena method. More...
 
virtual void BuildGeometry () override final
 virtual methods being implemented here More...
 
virtual void PositionInParent () override final
 
virtual void Build () override
 purely virtual methods being implemented here More...
 
virtual void SetRotationAndOffset ()
 
virtual void BuildSubDetectors () override
 
virtual void SetEnvelope () override
 
virtual void ResetEnvelope () override
 
virtual void SetAsWorld () override
 
std::string GetDetectorName () const override
 
void SetDetectorName (const std::string &) override
 
void SetParent (IDetectorGeometryTool *) override
 
EnvelopeGetEnvelope () override final
 
G4VPhysicalVolume * GetWorldVolume () override final
 

Protected Attributes

ToolHandleArray< IDetectorGeometryToolm_subDetTools {this, "SubDetectors", {}, "Tool handle array of all subdetector tools"}
 
ServiceHandle< IG4GeometryNotifierSvcm_notifierSvc {this, "GeometryNotifierSvc", "G4GeometryNotifierSvc", "Detector name (same as the Tool name if not set"}
 
IDetectorGeometryToolm_theParent {}
 
Envelope m_envelope
 
Gaudi::Property< std::string > m_detectorName {this, "DetectorName", "", "Detector name (same as the Tool name if not set"}
 
bool m_isWorld {false}
 
Gaudi::Property< double > m_rotateX {this, "RotateX" , 0.0, "Rotation around the X-axis"}
 
Gaudi::Property< double > m_rotateY {this, "RotateY" , 0.0, "Rotation around the Y-axis"}
 
Gaudi::Property< double > m_rotateZ {this, "RotateZ" , 0.0, "Rotation around the Z-axis"}
 
Gaudi::Property< double > m_offsetX {this, "OffsetX" , 0.0, "Offset in the X-direction"}
 
Gaudi::Property< double > m_offsetY {this, "OffsetY" , 0.0, "Offset in the Y-direction"}
 
Gaudi::Property< double > m_offsetZ {this, "OffsetZ" , 0.0, "Offset in the Z-direction"}
 

Private Member Functions

G4LogicalVolume * Convert ()
 
bool IsTopTransform ()
 
void SetInitialTransformation ()
 

Private Attributes

std::string m_builderName
 
std::string m_dumpGDMLFile =""
 
bool m_blParamOn
 
bool m_blGetTopTransform
 
G4Transform3D m_topTransform
 
std::string m_geoDetectorName
 
ServiceHandle< IGeo2G4Svcm_geo2G4Svc {this, "Geo2G4Svc", "Geo2G4Svc", ""}
 

Detailed Description

Tool for building detectors out of a GeoModel description. Basically a carbon copy of GeoDetectorFacility in GeoDetectorPlugins which is supposed to replace.

Author
Andrea Dell'Acqua
Date
2015-03-10

Definition at line 31 of file GeoDetectorTool.h.

Constructor & Destructor Documentation

◆ GeoDetectorTool()

GeoDetectorTool::GeoDetectorTool ( const std::string &  type,
const std::string &  name,
const IInterface *  parent 
)

Definition at line 18 of file GeoDetectorTool.cxx.

20 {
21  m_topTransform.setIdentity();
22  ATH_MSG_DEBUG( "GeoDetectorTool constructor for " << name );
23  declareProperty("GeoDetectorName",m_geoDetectorName, "Name of the detector in GeoModel, if different from G4.");
24  declareProperty("GDMLFileOut",m_dumpGDMLFile,"File name where the GDML description for the detector will be dumped.");
25 
26 }

◆ ~GeoDetectorTool()

GeoDetectorTool::~GeoDetectorTool ( )
inline

Definition at line 36 of file GeoDetectorTool.h.

36 {}

Member Function Documentation

◆ Build()

void DetectorGeometryBase::Build ( )
overridevirtualinherited

purely virtual methods being implemented here

Definition at line 53 of file DetectorGeometryBase.cxx.

54 {
55  ATH_MSG_VERBOSE( name() << "::Build() (Base class method): Starting. Number of registered volumes "<<G4LogicalVolumeStore::GetInstance()->size() );
56 
57  SetEnvelope();
58  ATH_MSG_VERBOSE( name() << "::Build() - Envelope set. Number of registered volumes "<<G4LogicalVolumeStore::GetInstance()->size() );
59 
60  m_notifierSvc->SetCurrentDetectorName(m_detectorName.value());
61  BuildGeometry();
62  ATH_MSG_VERBOSE( name() << "::Build() - Geometry built. Number of registered volumes "<<G4LogicalVolumeStore::GetInstance()->size() );
63 
65  ATH_MSG_VERBOSE( name() << "::Build() - Volume moved around. Number of registered volumes "<<G4LogicalVolumeStore::GetInstance()->size() );
66 
68  ATH_MSG_VERBOSE( name() << "::Build() - Connected with parent. Number of registered volumes "<<G4LogicalVolumeStore::GetInstance()->size() );
69 
71  ATH_MSG_VERBOSE( name() << "::Build() (Base class method): Finished. Number of registered volumes "<<G4LogicalVolumeStore::GetInstance()->size() );
72  return;
73 }

◆ BuildGeometry()

void GeoDetectorTool::BuildGeometry ( )
finaloverridevirtual

virtual methods being implemented here

Reimplemented from DetectorGeometryBase.

Definition at line 59 of file GeoDetectorTool.cxx.

60 {
61  ATH_MSG_VERBOSE( name() << " GeoDetectorTool::BuildGeometry(): Starting" );
62  G4LogicalVolume* temp = this->Convert();
64 
65  if (this->IsTopTransform())
66  {
68  }
69  ATH_MSG_VERBOSE( name() << " GeoDetectorTool::BuildGeometry(): Finished" );
70 }

◆ BuildSubDetectors()

void DetectorGeometryBase::BuildSubDetectors ( )
overridevirtualinherited

Definition at line 155 of file DetectorGeometryBase.cxx.

156 {
157  ATH_MSG_VERBOSE( name() << "::BuildSubDetectors() (Base class method): Starting");
158  for (auto& subDetTool: m_subDetTools)
159  {
160  ATH_MSG_VERBOSE(name() << "::BuildSubDetectors() (Base class method): Positioning "<<subDetTool->GetDetectorName()<<" within "<<m_detectorName.value());
161  subDetTool->SetParent(this);
162  subDetTool->Build();
163  }
164  ATH_MSG_VERBOSE( name() << "::BuildSubDetectors() (Base class method): Finished");
165 }

◆ Convert()

G4LogicalVolume * GeoDetectorTool::Convert ( )
private

Definition at line 83 of file GeoDetectorTool.cxx.

84 {
85  ATH_MSG_VERBOSE( name() << " GeoDetectorTool::Convert(): Starting" );
86  ATH_MSG_DEBUG( name() << " GeoDetectorTool::Convert(): GeoDetectorName:builderName = "<<m_geoDetectorName<<":"<<m_builderName);
88  VolumeBuilder *b=Builder.GetVolumeBuilder(m_builderName);
89  b->SetParam(m_blParamOn);
90  G4LogicalVolume *temp=Builder.BuildTree();
91  if(this->IsTopTransform())
92  {
93  m_topTransform = Builder.GetDetectorTransform();
94  }
95 
96  ATH_MSG_VERBOSE( name() << " GeoDetectorTool::Convert(): Finished" );
97  return temp;
98 }

◆ GetDetectorName()

std::string DetectorGeometryBase::GetDetectorName ( ) const
overrideinherited

Definition at line 180 of file DetectorGeometryBase.cxx.

181 {
182  return m_detectorName.value();
183 }

◆ GetEnvelope()

Envelope & DetectorGeometryBase::GetEnvelope ( )
finaloverrideinherited

Definition at line 195 of file DetectorGeometryBase.cxx.

196 {
197  return m_envelope;
198 }

◆ GetWorldVolume()

G4VPhysicalVolume * DetectorGeometryBase::GetWorldVolume ( )
finaloverrideinherited

Definition at line 200 of file DetectorGeometryBase.cxx.

201 {
202  if (m_isWorld)
204  else
205  {
206  ATH_MSG_ERROR("trying to get World from a DetectorTool which World is not!");
207  return 0;
208  }
209 }

◆ initialize()

StatusCode GeoDetectorTool::initialize ( )
finaloverridevirtual

Athena method.

called at initialization time, being customized here

Definition at line 28 of file GeoDetectorTool.cxx.

29 {
30  ATH_MSG_VERBOSE( name() << " GeoDetectorTool::initialize(): Starting" );
31  if(m_detectorName.empty())
32  {
33  m_detectorName = this->name();
34  // re-initialize m_detectorName in order to take the real detector name rather than the path to it
35  size_t ipos=m_detectorName.value().find_last_of('.');
36  size_t length=m_detectorName.value().size();
37  if (ipos<length)
38  {
39  ATH_MSG_VERBOSE( "m_detectorName: " << m_detectorName.value() << " needs to be reset.");
40  m_detectorName = m_detectorName.value().substr(ipos+1,length-ipos-1);
41  ATH_MSG_VERBOSE( "m_detectorName default value reset to " << m_detectorName.value());
42  }
43  }
44  ATH_MSG_DEBUG( name() << "GeoDetectorTool::initialize() : Detector name = " << m_detectorName.value() );
45  if(m_geoDetectorName.empty())
46  {
48  }
49  ATH_MSG_DEBUG( name() << "GeoDetectorTool::initialize() : Geo Detector name = " << m_geoDetectorName );
50 
51  ATH_CHECK(m_geo2G4Svc.retrieve());
52  m_builderName = m_geo2G4Svc->GetDefaultBuilder()->GetKey();
53  m_blGetTopTransform = m_geo2G4Svc->UseTopTransforms();
54  ATH_MSG_VERBOSE( name() << " GeoDetectorTool::initialize(): Finished" );
55  return StatusCode::SUCCESS;
56 }

◆ IsTopTransform()

bool GeoDetectorTool::IsTopTransform ( )
private

Definition at line 100 of file GeoDetectorTool.cxx.

101 {
102  return m_blGetTopTransform;
103 }

◆ PositionInParent()

void GeoDetectorTool::PositionInParent ( )
finaloverridevirtual

Reimplemented from DetectorGeometryBase.

Definition at line 72 of file GeoDetectorTool.cxx.

73 {
74  ATH_MSG_DEBUG( name() << " GeoDetectorTool::PositionInParent(): Starting" );
75 
77  if (!m_dumpGDMLFile.empty()) {
78  G4GDMLParser parser;
80  }
81 }

◆ ResetEnvelope()

void DetectorGeometryBase::ResetEnvelope ( )
overridevirtualinherited

Definition at line 171 of file DetectorGeometryBase.cxx.

172 {
173 }

◆ SetAsWorld()

void DetectorGeometryBase::SetAsWorld ( )
overridevirtualinherited

Definition at line 185 of file DetectorGeometryBase.cxx.

186 {
187  m_isWorld=true;
188 }

◆ SetDetectorName()

void DetectorGeometryBase::SetDetectorName ( const std::string &  s)
overrideinherited

Definition at line 175 of file DetectorGeometryBase.cxx.

176 {
178 }

◆ SetEnvelope()

void DetectorGeometryBase::SetEnvelope ( )
overridevirtualinherited

Definition at line 167 of file DetectorGeometryBase.cxx.

168 {
169 }

◆ SetInitialTransformation()

void GeoDetectorTool::SetInitialTransformation ( )
private

Definition at line 105 of file GeoDetectorTool.cxx.

106 {
107  ATH_MSG_VERBOSE( name() << " GeoDetectorTool::SetInitialTransformation(): Starting" );
108  if (!m_envelope.theRotation)
109  {
110  ATH_MSG_VERBOSE( name() << " GeoDetectorTool::SetInitialTransformation(): Creating new G4RotationMatrix" );
111  m_envelope.theRotation=new G4RotationMatrix;
112  }
113  *(m_envelope.theRotation)=m_topTransform.getRotation().inverse();
114  m_envelope.thePosition=m_topTransform.getTranslation();
115  ATH_MSG_VERBOSE( name() << " GeoDetectorTool::SetInitialTransformation(): Finished" );
116 }

◆ SetParent()

void DetectorGeometryBase::SetParent ( IDetectorGeometryTool p)
overrideinherited

Definition at line 190 of file DetectorGeometryBase.cxx.

191 {
192  m_theParent=p;
193 }

◆ SetRotationAndOffset()

void DetectorGeometryBase::SetRotationAndOffset ( )
virtualinherited

Definition at line 80 of file DetectorGeometryBase.cxx.

81 {
82  ATH_MSG_VERBOSE( name() << "::SetRotationAndOffset() (Base class method)");
83  // Firstly do the rotation
85  {
86  // m_envelope.theRotation is null, so create an identity
87  // rotation first.
88  // FIXME probably a neater way to do this part.
89  m_envelope.theRotation=new G4RotationMatrix;
90  // add the extra rotations.
95  {
96  // Override the rotation for m_envelope.thePositionedVolume.
98  }
99  }
100  else
101  {
102  // m_envelope.theRotation already exists, so just add the
103  // extra rotations.
104  m_envelope.theRotation->rotateX(m_rotateX);
105  m_envelope.theRotation->rotateY(m_rotateY);
106  m_envelope.theRotation->rotateZ(m_rotateZ);
107  }
108  // Secondly add the additional position offset to the existing
109  // m_envelope.thePosition vector.
112  {
113  // Override the translation for m_envelope.thePositionedVolume.
115  }
116 
117  ATH_MSG_VERBOSE( name() << "::SetRotationAndOffset() (Base class method): Finished" );
118  return;
119 }

Member Data Documentation

◆ m_blGetTopTransform

bool GeoDetectorTool::m_blGetTopTransform
private

Definition at line 52 of file GeoDetectorTool.h.

◆ m_blParamOn

bool GeoDetectorTool::m_blParamOn
private

Definition at line 51 of file GeoDetectorTool.h.

◆ m_builderName

std::string GeoDetectorTool::m_builderName
private

Definition at line 49 of file GeoDetectorTool.h.

◆ m_detectorName

Gaudi::Property<std::string> DetectorGeometryBase::m_detectorName {this, "DetectorName", "", "Detector name (same as the Tool name if not set"}
protectedinherited

Definition at line 71 of file DetectorGeometryBase.h.

◆ m_dumpGDMLFile

std::string GeoDetectorTool::m_dumpGDMLFile =""
private

Definition at line 50 of file GeoDetectorTool.h.

◆ m_envelope

Envelope DetectorGeometryBase::m_envelope
protectedinherited

Definition at line 70 of file DetectorGeometryBase.h.

◆ m_geo2G4Svc

ServiceHandle<IGeo2G4Svc> GeoDetectorTool::m_geo2G4Svc {this, "Geo2G4Svc", "Geo2G4Svc", ""}
private

Definition at line 58 of file GeoDetectorTool.h.

◆ m_geoDetectorName

std::string GeoDetectorTool::m_geoDetectorName
private

Definition at line 54 of file GeoDetectorTool.h.

◆ m_isWorld

bool DetectorGeometryBase::m_isWorld {false}
protectedinherited

Definition at line 72 of file DetectorGeometryBase.h.

◆ m_notifierSvc

ServiceHandle<IG4GeometryNotifierSvc> DetectorGeometryBase::m_notifierSvc {this, "GeometryNotifierSvc", "G4GeometryNotifierSvc", "Detector name (same as the Tool name if not set"}
protectedinherited

Definition at line 66 of file DetectorGeometryBase.h.

◆ m_offsetX

Gaudi::Property<double> DetectorGeometryBase::m_offsetX {this, "OffsetX" , 0.0, "Offset in the X-direction"}
protectedinherited

Definition at line 76 of file DetectorGeometryBase.h.

◆ m_offsetY

Gaudi::Property<double> DetectorGeometryBase::m_offsetY {this, "OffsetY" , 0.0, "Offset in the Y-direction"}
protectedinherited

Definition at line 77 of file DetectorGeometryBase.h.

◆ m_offsetZ

Gaudi::Property<double> DetectorGeometryBase::m_offsetZ {this, "OffsetZ" , 0.0, "Offset in the Z-direction"}
protectedinherited

Definition at line 78 of file DetectorGeometryBase.h.

◆ m_rotateX

Gaudi::Property<double> DetectorGeometryBase::m_rotateX {this, "RotateX" , 0.0, "Rotation around the X-axis"}
protectedinherited

Definition at line 73 of file DetectorGeometryBase.h.

◆ m_rotateY

Gaudi::Property<double> DetectorGeometryBase::m_rotateY {this, "RotateY" , 0.0, "Rotation around the Y-axis"}
protectedinherited

Definition at line 74 of file DetectorGeometryBase.h.

◆ m_rotateZ

Gaudi::Property<double> DetectorGeometryBase::m_rotateZ {this, "RotateZ" , 0.0, "Rotation around the Z-axis"}
protectedinherited

Definition at line 75 of file DetectorGeometryBase.h.

◆ m_subDetTools

ToolHandleArray<IDetectorGeometryTool> DetectorGeometryBase::m_subDetTools {this, "SubDetectors", {}, "Tool handle array of all subdetector tools"}
protectedinherited

Definition at line 64 of file DetectorGeometryBase.h.

◆ m_theParent

IDetectorGeometryTool* DetectorGeometryBase::m_theParent {}
protectedinherited

Definition at line 68 of file DetectorGeometryBase.h.

◆ m_topTransform

G4Transform3D GeoDetectorTool::m_topTransform
private

Definition at line 53 of file GeoDetectorTool.h.


The documentation for this class was generated from the following files:
DetectorGeometryBase::SetEnvelope
virtual void SetEnvelope() override
Definition: DetectorGeometryBase.cxx:167
python.CaloScaleNoiseConfig.parser
parser
Definition: CaloScaleNoiseConfig.py:75
DetectorGeometryBase::m_rotateX
Gaudi::Property< double > m_rotateX
Definition: DetectorGeometryBase.h:73
python.SystemOfUnits.s
int s
Definition: SystemOfUnits.py:131
Envelope::thePositionedVolume
G4VPhysicalVolume * thePositionedVolume
Definition: IDetectorGeometryTool.h:21
GeoDetectorTool::m_dumpGDMLFile
std::string m_dumpGDMLFile
Definition: GeoDetectorTool.h:50
Envelope::theEnvelope
G4LogicalVolume * theEnvelope
Definition: IDetectorGeometryTool.h:20
DetectorGeometryBase::m_rotateZ
Gaudi::Property< double > m_rotateZ
Definition: DetectorGeometryBase.h:75
DetectorGeometryBase::BuildGeometry
virtual void BuildGeometry() override
Definition: DetectorGeometryBase.cxx:75
DetectorGeometryBase::m_subDetTools
ToolHandleArray< IDetectorGeometryTool > m_subDetTools
Definition: DetectorGeometryBase.h:64
VolumeBuilder
Definition: Simulation/G4Utilities/Geo2G4/src/VolumeBuilder.h:20
Geo2G4Builder
Main builder to create/position all volumes described in a GeoModel Tree.
Definition: Geo2G4Builder.h:33
DetectorGeometryBase::m_isWorld
bool m_isWorld
Definition: DetectorGeometryBase.h:72
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
DetectorGeometryBase::SetRotationAndOffset
virtual void SetRotationAndOffset()
Definition: DetectorGeometryBase.cxx:80
GeoDetectorTool::IsTopTransform
bool IsTopTransform()
Definition: GeoDetectorTool.cxx:100
DetectorGeometryBase::m_offsetZ
Gaudi::Property< double > m_offsetZ
Definition: DetectorGeometryBase.h:78
GeoDetectorTool::m_topTransform
G4Transform3D m_topTransform
Definition: GeoDetectorTool.h:53
python.setupRTTAlg.size
int size
Definition: setupRTTAlg.py:39
DetectorGeometryBase::m_offsetY
Gaudi::Property< double > m_offsetY
Definition: DetectorGeometryBase.h:77
DetectorGeometryBase::m_offsetX
Gaudi::Property< double > m_offsetX
Definition: DetectorGeometryBase.h:76
GeoDetectorTool::m_builderName
std::string m_builderName
Definition: GeoDetectorTool.h:49
Envelope::thePosition
G4ThreeVector thePosition
Definition: IDetectorGeometryTool.h:23
python.utils.AtlRunQueryDQUtils.p
p
Definition: AtlRunQueryDQUtils.py:210
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
test_pyathena.parent
parent
Definition: test_pyathena.py:15
GeoDetectorTool::m_geoDetectorName
std::string m_geoDetectorName
Definition: GeoDetectorTool.h:54
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
DetectorGeometryBase::DetectorGeometryBase
DetectorGeometryBase(const std::string &type, const std::string &name, const IInterface *parent)
Definition: DetectorGeometryBase.cxx:13
DetectorGeometryBase::m_notifierSvc
ServiceHandle< IG4GeometryNotifierSvc > m_notifierSvc
Definition: DetectorGeometryBase.h:66
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:228
plotBeamSpotMon.b
b
Definition: plotBeamSpotMon.py:77
GeoDetectorTool::Convert
G4LogicalVolume * Convert()
Definition: GeoDetectorTool.cxx:83
GeoDetectorTool::SetInitialTransformation
void SetInitialTransformation()
Definition: GeoDetectorTool.cxx:105
DetectorGeometryBase::m_envelope
Envelope m_envelope
Definition: DetectorGeometryBase.h:70
DetectorGeometryBase::PositionInParent
virtual void PositionInParent() override
Definition: DetectorGeometryBase.cxx:120
DetectorGeometryBase::m_detectorName
Gaudi::Property< std::string > m_detectorName
Definition: DetectorGeometryBase.h:71
DetectorGeometryBase::BuildSubDetectors
virtual void BuildSubDetectors() override
Definition: DetectorGeometryBase.cxx:155
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
GeoDetectorTool::m_blParamOn
bool m_blParamOn
Definition: GeoDetectorTool.h:51
Envelope::theRotation
G4RotationMatrix * theRotation
Definition: IDetectorGeometryTool.h:22
GeoDetectorTool::m_blGetTopTransform
bool m_blGetTopTransform
Definition: GeoDetectorTool.h:52
DetectorGeometryBase::m_rotateY
Gaudi::Property< double > m_rotateY
Definition: DetectorGeometryBase.h:74
DetectorGeometryBase::m_theParent
IDetectorGeometryTool * m_theParent
Definition: DetectorGeometryBase.h:68
length
double length(const pvec &v)
Definition: FPGATrackSimLLPDoubletHoughTransformTool.cxx:26
GeoDetectorTool::m_geo2G4Svc
ServiceHandle< IGeo2G4Svc > m_geo2G4Svc
Definition: GeoDetectorTool.h:58