ATLAS Offline Software
MagFieldTestbedAlg.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 // G4FieldValidationAlg.h, (c) ATLAS Detector software
8 
9 #ifndef MAGFIELDTESTBEDALG_H
10 #define MAGFIELDTESTBEDALG_H 1
11 
12 // STL includes
13 #include <string>
14 #include <cmath>
15 
16 // FrameWork includes
17 #include "GaudiKernel/ServiceHandle.h"
19 #include "GaudiKernel/IChronoStatSvc.h"
20 
21 // forward declarations
22 class ITHistSvc;
23 class TTree;
24 class G4Field;
25 namespace MagField {
26  class IMagFieldSvc;
27 }
28 
29 
30 namespace MagField {
34  public:
35  //** Constructor with parameters */
36  MagFieldTestbedAlg( const std::string& name, ISvcLocator* pSvcLocator );
37 
39  virtual ~MagFieldTestbedAlg();
40 
43 
46 
49 
50  private:
51  bool checkWithReference();
52  void getFieldValue();
54 
56 
57  const G4Field *p_g4field = nullptr;
58 
60  std::string m_histStream;
61 
63 
64  TTree *m_tree;
65  std::string m_treeName;
66 
68  double m_minX;
69  double m_halfX;
70  double m_halfY;
71  double m_halfZ;
72 
73  int m_stepsX;
74  int m_stepsY;
75  int m_stepsZ;
77 
78 
79 
80  // debug
82 
83  std::string m_refFile;
84  std::string m_refTreeName;
87 
88  double m_xyzt[4];
89  double m_field[3];
90  double m_deriv[9]{};
91  double m_explicitX;
92  double m_explicitY;
93  double m_explicitZ;
94 
95 
96  bool m_complete;
97  bool m_useG4Field;
103 
104 
105  };
106 
107 } // end namespace MagField
108 
109 #endif
MagField::MagFieldTestbedAlg::m_useDerivatives
bool m_useDerivatives
only outer detector values will be tested
Definition: MagFieldTestbedAlg.h:99
MagField::MagFieldTestbedAlg::m_halfZ
double m_halfZ
the half-length along y
Definition: MagFieldTestbedAlg.h:71
MagField::MagFieldTestbedAlg::m_absTolerance
double m_absTolerance
absolute tolerance in field against reference
Definition: MagFieldTestbedAlg.h:85
MagField::MagFieldTestbedAlg::m_useG4Field
bool m_useG4Field
G4.
Definition: MagFieldTestbedAlg.h:97
MagField::MagFieldTestbedAlg::checkWithReference
bool checkWithReference()
check current field with reference field
Definition: MagFieldTestbedAlg.cxx:416
MagField::MagFieldTestbedAlg::m_onlyCheckSolenoid
bool m_onlyCheckSolenoid
only scan solenoid field
Definition: MagFieldTestbedAlg.h:100
MagField::MagFieldTestbedAlg::m_recordReadings
bool m_recordReadings
record readings (for reproducability) or not (for speed tests)
Definition: MagFieldTestbedAlg.h:98
MagField::MagFieldTestbedAlg::m_stepsZ
int m_stepsZ
the number of steps in Z
Definition: MagFieldTestbedAlg.h:75
MagField::MagFieldTestbedAlg::m_stepsY
int m_stepsY
the number of steps in Y
Definition: MagFieldTestbedAlg.h:74
MagField::MagFieldTestbedAlg::m_tree
TTree * m_tree
the ROOT tree containing the output
Definition: MagFieldTestbedAlg.h:64
MagField::MagFieldTestbedAlg::p_g4field
const G4Field * p_g4field
field service from G4
Definition: MagFieldTestbedAlg.h:57
MagField::MagFieldTestbedAlg::m_thistSvc
ServiceHandle< ITHistSvc > m_thistSvc
the histogram service
Definition: MagFieldTestbedAlg.h:59
MagField::MagFieldTestbedAlg::m_relTolerance
double m_relTolerance
relative tolerance in field against reference
Definition: MagFieldTestbedAlg.h:86
MagField::MagFieldTestbedAlg::m_numberOfReadings
long m_numberOfReadings
random readings instead of grid
Definition: MagFieldTestbedAlg.h:76
MagField::MagFieldTestbedAlg::m_explicitCoords
bool m_explicitCoords
give values to check explicitly
Definition: MagFieldTestbedAlg.h:102
MagField::MagFieldTestbedAlg::m_halfX
double m_halfX
the half-lenght along x
Definition: MagFieldTestbedAlg.h:69
MagField::MagFieldTestbedAlg::finalize
StatusCode finalize()
Athena algorithm's interface method finalize()
Definition: MagFieldTestbedAlg.cxx:171
MagField::MagFieldTestbedAlg::m_generateBox
bool m_generateBox
generate box
Definition: MagFieldTestbedAlg.h:67
MagField::MagFieldTestbedAlg::m_field
double m_field[3]
stores the field components
Definition: MagFieldTestbedAlg.h:89
MagField::MagFieldTestbedAlg::m_explicitZ
double m_explicitZ
if value to check is given explicitly
Definition: MagFieldTestbedAlg.h:93
AthAlgorithm.h
MagField::MagFieldTestbedAlg::m_chronoSvc
ServiceHandle< IChronoStatSvc > m_chronoSvc
the chrono service
Definition: MagFieldTestbedAlg.h:62
MagField::MagFieldTestbedAlg::m_deriv
double m_deriv[9]
stores derivatives TODO: currently only useMagFieldSvc = true
Definition: MagFieldTestbedAlg.h:90
MagField::MagFieldTestbedAlg::m_refFile
std::string m_refFile
reference field file name
Definition: MagFieldTestbedAlg.h:83
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
MagField::MagFieldTestbedAlg::fetchEnvironment
StatusCode fetchEnvironment()
get environment either for g4 or for magFieldSvc
Definition: MagFieldTestbedAlg.cxx:383
MagField::MagFieldTestbedAlg::initialize
StatusCode initialize()
Athena algorithm's interface method initialize()
Definition: MagFieldTestbedAlg.cxx:120
AthAlgorithm
Definition: AthAlgorithm.h:47
MagField
Local cache for magnetic field (based on MagFieldServices/AtlasFieldSvcTLS.h)
Definition: ForwardRegionFieldSvc.h:27
MagField::MagFieldTestbedAlg::m_treeName
std::string m_treeName
name of the Tree object
Definition: MagFieldTestbedAlg.h:65
MagField::MagFieldTestbedAlg::execute
StatusCode execute()
Athena algorithm's interface method execute()
Definition: MagFieldTestbedAlg.cxx:179
MagField::MagFieldTestbedAlg::m_minX
double m_minX
the minimum x for box generation
Definition: MagFieldTestbedAlg.h:68
MagField::MagFieldTestbedAlg::m_halfY
double m_halfY
the half-length along y
Definition: MagFieldTestbedAlg.h:70
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
MagField::MagFieldTestbedAlg::m_magFieldSvc
ServiceHandle< MagField::IMagFieldSvc > m_magFieldSvc
service to get vanilla field svc
Definition: MagFieldTestbedAlg.h:55
MagField::MagFieldTestbedAlg
Definition: MagFieldTestbedAlg.h:33
MagField::MagFieldTestbedAlg::m_refTreeName
std::string m_refTreeName
TTree object in reference file.
Definition: MagFieldTestbedAlg.h:84
MagField::MagFieldTestbedAlg::~MagFieldTestbedAlg
virtual ~MagFieldTestbedAlg()
Destructor.
Definition: MagFieldTestbedAlg.cxx:116
MagField::MagFieldTestbedAlg::getFieldValue
void getFieldValue()
get Field value either by G4 or by MagFieldSvc
Definition: MagFieldTestbedAlg.cxx:398
MagField::MagFieldTestbedAlg::m_explicitY
double m_explicitY
if value to check is given explicitly
Definition: MagFieldTestbedAlg.h:92
MagField::MagFieldTestbedAlg::m_stepsX
int m_stepsX
the number of steps in X
Definition: MagFieldTestbedAlg.h:73
MagField::MagFieldTestbedAlg::m_referenceCount
int m_referenceCount
Definition: MagFieldTestbedAlg.h:81
MagField::MagFieldTestbedAlg::MagFieldTestbedAlg
MagFieldTestbedAlg(const std::string &name, ISvcLocator *pSvcLocator)
Definition: MagFieldTestbedAlg.cxx:57
MagField::MagFieldTestbedAlg::m_histStream
std::string m_histStream
THistSvc stream name.
Definition: MagFieldTestbedAlg.h:60
MagField::MagFieldTestbedAlg::m_explicitX
double m_explicitX
if value to check is given explicitly
Definition: MagFieldTestbedAlg.h:91
MagField::MagFieldTestbedAlg::m_complete
bool m_complete
validation completed already?
Definition: MagFieldTestbedAlg.h:96
MagField::MagFieldTestbedAlg::m_coordsAlongBeam
bool m_coordsAlongBeam
coordinates on a beams in random directions
Definition: MagFieldTestbedAlg.h:101
ServiceHandle< MagField::IMagFieldSvc >
MagField::MagFieldTestbedAlg::m_xyzt
double m_xyzt[4]
stores the current xyzt position
Definition: MagFieldTestbedAlg.h:88