ATLAS Offline Software
TRT_CalDbTool.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
3 */
4 
10 #include "TRT_CalDbTool.h"
11 
12 #include <fstream>
13 #include <iostream>
14 #include <iomanip>
15 #include <sstream>
16 
17 #include "GaudiKernel/IToolSvc.h"
18 #include "GaudiKernel/ThreadLocalContext.h"
20 
21 
22 TRT_CalDbTool::TRT_CalDbTool( const std::string& type, const std::string& name, const IInterface* parent)
23  : base_class(type, name, parent),
24  m_trtId(nullptr)
25 {}
26 
27 
29 {
30  ATH_MSG_DEBUG( " in initialize " );
31 
32 
33  // Get the TRT ID helper
34  StatusCode sc = detStore()->retrieve(m_trtId,"TRT_ID");
35  if(sc.isFailure()) {
36  ATH_MSG_FATAL("Problem retrieving TRTID helper");
37  return StatusCode::FAILURE;
38  }
39 
40  // Read keys
41 
46 
47  ATH_MSG_DEBUG(" TRT_CalDbTool::initialized ");
48 
49  return StatusCode::SUCCESS;
50 }
51 
52 
53 
55 {
56  ATH_MSG_DEBUG("TRT_CalDbTool finalize method called");
57  return StatusCode::SUCCESS;
58 }
59 
60 
61 const TRT_CalDbTool::RtRelationContainer* TRT_CalDbTool::getRtContainer() const {
62 
64  return *rtc;
65 }
66 
67 const TRT_CalDbTool::RtRelationContainer* TRT_CalDbTool::getErrContainer() const {
68 
70  return *rtc;
71 }
72 
73 const TRT_CalDbTool::RtRelationContainer* TRT_CalDbTool::getSlopeContainer() const {
74 
75  SG::ReadCondHandle<RtRelationContainer> rtc(m_slopeReadKey); // find the right conditions
76  return *rtc;
77 }
78 
79 const TRT_CalDbTool::StrawT0Container* TRT_CalDbTool::getT0Container() const {
80 
81  SG::ReadCondHandle<StrawT0Container> rtc(m_t0ReadKey); // find the right conditions
82  return *rtc;
83 }
84 
85 
86 
87 double TRT_CalDbTool::driftRadius(const double& time, float& t0, const Identifier& ident,bool& found) const
88 {
89  // Returns a drift radius, a t0 and a success indicator,
90  // given an identifier and a time given by (leading_edge_bin+0.5)*3.125ns
91  found=true;
92  t0 = this->getT0(ident);
94  double radius = 0;
95  if (rtr != nullptr)
96  radius = rtr->radius( time - t0 );
97  else
98  ATH_MSG_FATAL(" cannot find an rt-relation for TRT layer_or_wheel " << m_trtId->layer_or_wheel(ident) << " Please check IOV ranges ");
99 
100  ATH_MSG_VERBOSE(" time " << time << " t0 " << t0 << " t " << time-t0 << " radius " << radius);
101  //
102  if( radius<0 ) radius=0 ;
103  else if( radius>2.) radius=2.;
104 
105  // add protection for the turnover:
106  if (time - t0 > 55){
107  ATH_MSG_VERBOSE(" time " << time << " t0 " << t0 << " t " << time-t0 << " > 55, check Rt derivative");
108  // Check Second Derivative.
109  if (rtr != nullptr){
110  if (rtr->drdt( time - t0 ) < 0 ){
111  ATH_MSG_VERBOSE(" time " << time << " t0 " << t0 << " t " << time-t0 << " and rt derivative: " << rtr->drdt( time - t0 ));
112  radius=2.;
113  }
114  }
115  }
116  return radius;
117 }
118 
119 double TRT_CalDbTool::driftError( const double& time, const Identifier& ident,bool& found) const
120 {
121  // Returns an error on drift radius and a success indicator,
122  // given an identifier and a drift-time in ns
123  found=true;
124  const TRTCond::RtRelation* rtr = getErrors(ident) ;
125  double error=0.;
126  if(rtr) {
127  error = rtr->radius( time );
128  } else {
129  found=false;
130  return 0;
131  }
132  ATH_MSG_VERBOSE(" time " << time << " error on radius " << error);
133  return error;
134 }
135 
136 double TRT_CalDbTool::driftSlope( const double& time, const Identifier& ident,bool& found) const
137 {
138  // Returns an error on drift radius and a success indicator,
139  // given an identifier and a drift-time in ns
140  found=true;
141  const TRTCond::RtRelation* rtr = getSlopes(ident) ;
142  double slope=0.;
143  if(rtr) {
144  slope = rtr->radius( time );
145  } else {
146  found=false;
147  return 0;
148  }
149  ATH_MSG_VERBOSE(" time " << time << " slope on radius " << slope);
150  return slope;
151 }
152 
153 
154 
155 
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
TRT_CalDbTool::driftSlope
virtual double driftSlope(const double &time, const Identifier &ident, bool &found) const override
get a drift radius error for a given drifttime
Definition: TRT_CalDbTool.cxx:136
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
ALFA_EventTPCnv_Dict::t0
std::vector< ALFA_RawData_p1 > t0
Definition: ALFA_EventTPCnvDict.h:42
TRT_CalDbTool::getSlopes
virtual const TRTCond::RtRelation * getSlopes(const Identifier &id, int level=TRTCond::ExpandedIdentifier::STRAW) const override
get errors for an identifier
Definition: TRT_CalDbTool.h:126
TRT_CalDbTool::finalize
virtual StatusCode finalize() override
tool finalize
Definition: TRT_CalDbTool.cxx:54
TRT_CalDbTool::driftRadius
virtual double driftRadius(const double &time, float &t0, const Identifier &ident, bool &found) const override
get a drift radius for a given leading edge time
Definition: TRT_CalDbTool.cxx:87
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
TRT_CalDbTool::getErrors
virtual const TRTCond::RtRelation * getErrors(const Identifier &id, int level=TRTCond::ExpandedIdentifier::STRAW) const override
get errors for an identifier
Definition: TRT_CalDbTool.h:118
TRT_CalDbTool::getSlopeContainer
virtual const RtRelationContainer * getSlopeContainer() const override
Definition: TRT_CalDbTool.cxx:73
ReadCondHandle.h
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
TRT_CalDbTool::m_trtId
const TRT_ID * m_trtId
id helper
Definition: TRT_CalDbTool.h:87
TRTCond::RtRelation
Definition: RtRelation.h:27
TRT_CalDbTool::getRtContainer
virtual const RtRelationContainer * getRtContainer() const override
access to calibration constant containers
Definition: TRT_CalDbTool.cxx:61
TRT_CalDbTool::driftError
virtual double driftError(const double &time, const Identifier &ident, bool &found) const override
get a drift radius error for a given drifttime
Definition: TRT_CalDbTool.cxx:119
Identifier
Definition: DetectorDescription/Identifier/Identifier/Identifier.h:32
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
test_pyathena.parent
parent
Definition: test_pyathena.py:15
TRT_CalDbTool::initialize
virtual StatusCode initialize() override
tool initialize
Definition: TRT_CalDbTool.cxx:28
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
TRT_ID::layer_or_wheel
int layer_or_wheel(const Identifier &id) const
Definition: TRT_ID.h:884
python.PyKernel.detStore
detStore
Definition: PyKernel.py:41
TRT_CalDbTool::m_t0ReadKey
SG::ReadCondHandleKey< StrawT0Container > m_t0ReadKey
Definition: TRT_CalDbTool.h:93
TRT_CalDbTool::getT0Container
virtual const StrawT0Container * getT0Container() const override
Definition: TRT_CalDbTool.cxx:79
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
TRT::Hit::ident
@ ident
Definition: HitInfo.h:77
TRT_CalDbTool::TRT_CalDbTool
TRT_CalDbTool(const std::string &type, const std::string &name, const IInterface *parent)
typedefs, enums etc
Definition: TRT_CalDbTool.cxx:22
ParticleGun_SamplingFraction.radius
radius
Definition: ParticleGun_SamplingFraction.py:96
TRT_CalDbTool::m_rtReadKey
SG::ReadCondHandleKey< RtRelationContainer > m_rtReadKey
ReadHandle keys.
Definition: TRT_CalDbTool.h:90
TRT_CalDbTool::getRtRelation
virtual const TRTCond::RtRelation * getRtRelation(const Identifier &id, int level=TRTCond::ExpandedIdentifier::STRAW) const override
get an rtrelation for an identifier
Definition: TRT_CalDbTool.h:110
CondAlgsOpts.found
int found
Definition: CondAlgsOpts.py:101
CaloSwCorrections.time
def time(flags, cells_name, *args, **kw)
Definition: CaloSwCorrections.py:242
TRT_CalDbTool.h
interface to TRT calibration constants
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
TRTCond::RtRelation::radius
virtual float radius(float driftime) const =0
radius for given drifttime
TRTCond::RtRelation::drdt
virtual float drdt(float driftime) const =0
driftvelocity for given drifttime
TRT_CalDbTool::getErrContainer
virtual const RtRelationContainer * getErrContainer() const override
Definition: TRT_CalDbTool.cxx:67
TRT_CalDbTool::getT0
virtual float getT0(const Identifier &id, int level=TRTCond::ExpandedIdentifier::STRAW) const override
get T0 for an identifier
Definition: TRT_CalDbTool.h:134
get_generator_info.error
error
Definition: get_generator_info.py:40
error
Definition: IImpactPoint3dEstimator.h:70
TRT_CalDbTool::m_errReadKey
SG::ReadCondHandleKey< RtRelationContainer > m_errReadKey
Definition: TRT_CalDbTool.h:91
TRT_CalDbTool::m_slopeReadKey
SG::ReadCondHandleKey< RtRelationContainer > m_slopeReadKey
Definition: TRT_CalDbTool.h:92