ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
Simulation
G4Atlas
G4AtlasTools
src
GlobalFieldManagerTool.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
3
*/
4
5
// Main header
6
#include "
G4AtlasTools/GlobalFieldManagerTool.h
"
7
8
// Local package include
9
#include "
TightMuonSteppingFieldManager.h
"
10
11
// Geant4 includes
12
#include "G4ChordFinder.hh"
13
#include "G4FieldManager.hh"
14
#include "G4MagIntegratorStepper.hh"
15
#include "G4MagneticField.hh"
16
#include "G4PropagatorInField.hh"
17
#include "G4TransportationManager.hh"
18
#include "G4Version.hh"
19
#include "G4VIntegrationDriver.hh"
20
21
//-----------------------------------------------------------------------------
22
// Tool constructor
23
//-----------------------------------------------------------------------------
24
GlobalFieldManagerTool::GlobalFieldManagerTool
(
const
std::string&
type
,
25
const
std::string& name,
26
const
IInterface* parent)
27
:
G4FieldManagerToolBase
(
type
, name, parent)
28
{
29
}
30
31
//-----------------------------------------------------------------------------
32
// Initialize a field manager
33
//-----------------------------------------------------------------------------
34
StatusCode
GlobalFieldManagerTool::initializeField
()
35
{
36
ATH_MSG_DEBUG
(
"initializeField"
);
37
38
if
(
m_fieldOn
) {
39
40
// Retrieve the G4MagneticField
41
G4MagneticField* field =
m_fieldSvc
->getField();
42
43
// Retrieve the global field manager
44
auto
transpManager = G4TransportationManager::GetTransportationManager();
45
46
auto
* field_manager = [&] () -> G4FieldManager* {
47
if
(
m_useTightMuonStepping
){
48
// In the case of tight stepping we need to make our own global field manager
49
// Create a new field manager
50
auto
* stepping_field_manager =
new
TightMuonSteppingFieldManager
();
51
52
// Assign it to the global field manager
53
transpManager->SetFieldManager(stepping_field_manager);
54
return
stepping_field_manager;
55
}
else
{
56
// Otherwise get the default from the transportation manager
57
return
transpManager->GetFieldManager();
58
}
59
}();
60
61
// Configure the field manager
62
field_manager->SetDetectorField(field);
63
ATH_CHECK
(
setFieldParameters
(field_manager) );
64
65
// Create and configure the ChordFinder
66
field_manager->CreateChordFinder(field);
67
68
#if G4VERSION_NUMBER < 1040
69
ATH_MSG_DEBUG
(
"Old style stepper setting"
);
70
G4MagIntegratorStepper* stepper =
getStepper
(
m_integratorStepper
, field);
71
G4MagInt_Driver* magDriver = field_manager->GetChordFinder()->GetIntegrationDriver();
72
magDriver->RenewStepperAndAdjust(stepper);
73
#else
74
ATH_MSG_DEBUG
(
"New style stepper setting"
);
75
G4VIntegrationDriver* driver = createDriverAndStepper(
m_integratorStepper
, field);
76
G4ChordFinder* chordFinder = field_manager->GetChordFinder();
77
chordFinder->SetIntegrationDriver(driver);
78
#endif
79
80
// Configure the propagator
81
G4PropagatorInField* propagator = transpManager->GetPropagatorInField();
82
if
(
m_maxStep
>0) propagator->SetLargestAcceptableStep(
m_maxStep
);
83
}
84
85
return
StatusCode::SUCCESS;
86
}
ATH_CHECK
#define ATH_CHECK
Evaluate an expression and check for errors.
Definition
AthCheckMacros.h:40
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition
AthMsgStreamMacros.h:29
GlobalFieldManagerTool.h
TightMuonSteppingFieldManager.h
G4FieldManagerToolBase::setFieldParameters
StatusCode setFieldParameters(G4FieldManager *fieldMgr) const
Common method to apply configuredfield parameters.
Definition
G4FieldManagerToolBase.cxx:239
G4FieldManagerToolBase::getStepper
G4MagIntegratorStepper * getStepper(const std::string &stepperType, G4MagneticField *field) const
Common method to construct a stepper of requested type.
Definition
G4FieldManagerToolBase.cxx:190
G4FieldManagerToolBase::m_maxStep
Gaudi::Property< double > m_maxStep
Definition
G4FieldManagerToolBase.h:84
G4FieldManagerToolBase::m_fieldSvc
ServiceHandle< IG4FieldSvc > m_fieldSvc
Handle to the G4 field service.
Definition
G4FieldManagerToolBase.h:65
G4FieldManagerToolBase::m_fieldOn
Gaudi::Property< bool > m_fieldOn
Definition
G4FieldManagerToolBase.h:68
G4FieldManagerToolBase::G4FieldManagerToolBase
G4FieldManagerToolBase(const std::string &type, const std::string &name, const IInterface *parent)
Standard constructor.
Definition
G4FieldManagerToolBase.cxx:52
G4FieldManagerToolBase::m_integratorStepper
Gaudi::Property< std::string > m_integratorStepper
The type of stepper to use.
Definition
G4FieldManagerToolBase.h:71
GlobalFieldManagerTool::m_useTightMuonStepping
Gaudi::Property< bool > m_useTightMuonStepping
Tight muon stepping parameters via the field manager's configure for track.
Definition
GlobalFieldManagerTool.h:37
GlobalFieldManagerTool::GlobalFieldManagerTool
GlobalFieldManagerTool(const std::string &type, const std::string &name, const IInterface *parent)
Standard constructor.
Definition
GlobalFieldManagerTool.cxx:24
GlobalFieldManagerTool::initializeField
StatusCode initializeField() override final
Initialize a field manager.
Definition
GlobalFieldManagerTool.cxx:34
TightMuonSteppingFieldManager
G4FieldManager that sets tight stepping for muons; caches global values for other particles.
Definition
TightMuonSteppingFieldManager.h:24
type
Generated on
for ATLAS Offline Software by
1.17.0