ATLAS Offline Software
TRT_DriftCircleOnTrackRecalibrateTool.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 // Implementation file for class TRT_DriftCircleOnTrackRecalibrateTool
8 // (c) ATLAS Detector software
10 // AlgTool used for TRT_DriftCircleOnTrack object production
12 
13 
20 
21 
23 // Constructor
25 
27 (const std::string& ty,const std::string& na,const IInterface* pa)
28  : AthAlgTool(ty,na,pa),
29  m_riontrackTube("InDet::TRT_DriftCircleOnTrackNoDriftTimeTool/TRT_DriftCircleOnTrackNoDriftTimeTool"),
30  m_drifttool("TRT_DriftFunctionTool"),
31  m_useToTCorrection(false),
32  m_scalefactor(2.)
33 {
34  declareInterface<IRIO_OnTrackCreator>(this);
35  declareProperty("RIOonTrackToolTube", m_riontrackTube );
36  declareProperty("DriftFunctionTool", m_drifttool);
37  declareProperty("ScaleHitUncertainty", m_scalefactor );
38  declareProperty("useDriftTimeToTCorrection",m_useToTCorrection);
39 }
40 
42 // Destructor
44 
46 
48 // Initialisation
50 
52 {
54 
55  if(m_drifttool.retrieve().isFailure()){
56  msg(MSG::FATAL) << "Failed to retrieve tool " << m_drifttool << endmsg;
57  return StatusCode::FAILURE;
58  }
59 
60  if(m_riontrackTube.retrieve().isFailure()){
61  msg(MSG::FATAL) << "Failed to retrieve tool " << m_riontrackTube << endmsg;
62  return StatusCode::FAILURE;
63  }
64 
67  return sc;
68 }
69 
71 // Finalize
73 
75 {
76  StatusCode sc = AlgTool::finalize(); return sc;
77 }
78 
80 // Trk::TRT_DriftCircleOnTrack production
82 
84 (const Trk::PrepRawData& rio,const Trk::TrackParameters& TP) const
85 {
86  const InDet::TRT_DriftCircle* DC = dynamic_cast<const InDet::TRT_DriftCircle*>(&rio);
87  if(!DC) return nullptr;
88 
89  Trk::RIO_OnTrack *rot=nullptr;
90 
91  //recalculate driftradius using the new calibration constants
92  bool isOK=false;
93  double t0=0.;
94  double rawtime = m_drifttool->rawTime(DC->driftTimeBin());
95 
96  if (m_useToTCorrection) {
97  rawtime -= m_drifttool->driftTimeToTCorrection(DC->timeOverThreshold(), DC->identify());
98  }
99 
100  double driftradius = m_drifttool->driftRadius(rawtime,DC->identify(),t0,isOK);
101  double error = m_drifttool->errorOfDriftRadius(rawtime-t0,DC->identify());
102 
103  double distance=fabs(fabs(TP.parameters()[0])-driftradius);
104 
105 
106  msg(MSG::VERBOSE)<<"Old radius: "<< DC->localPosition()[Trk::driftRadius]<<" -> new radius: "<<driftradius<<endmsg;
107 
109 
110  //tube hit
111  //
112  rot=m_riontrackTube->correct(rio,TP);
113  }
114  else {
115  // precision hit
116  //
117  const InDetDD::TRT_BaseElement* pE = DC->detectorElement(); if(!pE) return nullptr;
118  IdentifierHash iH = pE->identifyHash();
119  const Amg::VectorX& P = TP.parameters();
120  double se = sin(P[3]);
121  Amg::Vector3D dir(cos(P[2])*se,sin(P[2])*se,cos(P[3]));
122 
123  double predictedLocZ=P[1];
124 
125  double sign = (TP.parameters()[0] < 0.) ? -1. : 1.;
126 
127  // only create objects within the active area
128  //
129  double sl = pE->strawLength()*.5;
130  if (predictedLocZ > sl) predictedLocZ = sl;
131  else if(predictedLocZ <-sl) predictedLocZ =-sl;
132 
133 
135  Amg::MatrixX cov(DC->localCovariance()*escale2);
136 
137  if (!m_trtErrorScalingKey.key().empty()) {
138  const EventContext& ctx = Gaudi::Hive::currentContext();
139  double mu=0.;
140  if (!m_lumiDataKey.empty()) {
142  mu = lumiData->lbAverageInteractionsPerCrossing();
143  }
144 
145  bool endcap = false;
146  if(dynamic_cast<const InDetDD::TRT_EndcapElement*>(pE)) endcap = true;
148  cov = Trk::ErrorScalingCast<TRTRIO_OnTrackErrorScaling>(*error_scaling)
149  ->getScaledCovariance(std::move(cov), endcap, mu);
150  }
151 
154 
155  rot=new InDet::TRT_DriftCircleOnTrack(DC,std::move(lp),std::move(cov),iH,predictedLocZ,dir,Trk::DECIDED);
156  }
157  return rot;
158 }
159 
160 
InDet::TRT_DriftCircleOnTrackRecalibrateTool::correct
virtual Trk::RIO_OnTrack * correct(const Trk::PrepRawData &, const Trk::TrackParameters &) const override
abstract base method for the creation of RIO_OnTrack it takes a RIO (PrepRawData) and the given Track...
Definition: TRT_DriftCircleOnTrackRecalibrateTool.cxx:84
Trk::LocalParameters
Definition: LocalParameters.h:98
python.tests.PyTestsLib.finalize
def finalize(self)
_info( "content of StoreGate..." ) self.sg.dump()
Definition: PyTestsLib.py:53
InDetDD::TRT_BaseElement::strawLength
virtual const double & strawLength() const =0
Active straw length.
Amg::VectorX
Eigen::Matrix< double, Eigen::Dynamic, 1 > VectorX
Dynamic Vector - dynamic allocation.
Definition: EventPrimitives.h:32
Amg::MatrixX
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic > MatrixX
Dynamic Matrix - dynamic allocation.
Definition: EventPrimitives.h:29
python.Constants.FATAL
int FATAL
Definition: Control/AthenaCommon/python/Constants.py:19
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
Trk::locX
@ locX
Definition: ParamDefs.h:43
InDet::TRT_DriftCircleOnTrackRecalibrateTool::TRT_DriftCircleOnTrackRecalibrateTool
TRT_DriftCircleOnTrackRecalibrateTool(const std::string &, const std::string &, const IInterface *)
Definition: TRT_DriftCircleOnTrackRecalibrateTool.cxx:27
AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
InDet::TRT_DriftCircle::timeOverThreshold
double timeOverThreshold() const
returns Time over threshold in ns
initialize
void initialize()
Definition: run_EoverP.cxx:894
Trk::PrepRawData::localCovariance
const Amg::MatrixX & localCovariance() const
return const ref to the error matrix
ALFA_EventTPCnv_Dict::t0
std::vector< ALFA_RawData_p1 > t0
Definition: ALFA_EventTPCnvDict.h:42
InDet::TRT_DriftCircle::detectorElement
virtual const InDetDD::TRT_BaseElement * detectorElement() const override final
return the detector element corresponding to this PRD
plotBeamSpotVxVal.cov
cov
Definition: plotBeamSpotVxVal.py:201
InDetDD::TRT_EndcapElement
Definition: TRT_EndcapElement.h:44
Trk::RIO_OnTrack
Definition: RIO_OnTrack.h:70
drawFromPickle.cos
cos
Definition: drawFromPickle.py:36
SG::VarHandleKey::key
const std::string & key() const
Return the StoreGate ID for the referenced object.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:141
SG::VarHandleKey::empty
bool empty() const
Test if the key is blank.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:150
InDet::TRT_DriftCircle::driftTimeBin
int driftTimeBin() const
returns the leading edge bin defined as in TRT_LoLumRawData to be the first 0-1 transition
keylayer_zslicemap.se
se
Definition: keylayer_zslicemap.py:194
InDet::TRT_DriftCircleOnTrack
Definition: TRT_DriftCircleOnTrack.h:53
InDet::TRT_DriftCircle
Definition: TRT_DriftCircle.h:32
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
Trk::DefinedParameter
std::pair< double, ParamDefs > DefinedParameter
Definition: DefinedParameter.h:27
InDet::TRT_DriftCircleOnTrackRecalibrateTool::m_lumiDataKey
SG::ReadCondHandleKey< LuminosityCondData > m_lumiDataKey
Definition: TRT_DriftCircleOnTrackRecalibrateTool.h:64
InDet::TRT_DriftCircleOnTrackRecalibrateTool::m_useToTCorrection
bool m_useToTCorrection
Shall the Time over Threshold correction be used?
Definition: TRT_DriftCircleOnTrackRecalibrateTool.h:70
TRT_EndcapElement.h
InDet::TRT_DriftCircleOnTrackRecalibrateTool::initialize
virtual StatusCode initialize() override
Definition: TRT_DriftCircleOnTrackRecalibrateTool.cxx:51
endmsg
#define endmsg
Definition: AnalysisConfig_Ntuple.cxx:63
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
Trk::driftRadius
@ driftRadius
trt, straws
Definition: ParamDefs.h:59
sign
int sign(int a)
Definition: TRT_StrawNeighbourSvc.h:127
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
InDet::TRT_DriftCircleOnTrackRecalibrateTool::m_drifttool
ToolHandle< ITRT_DriftFunctionTool > m_drifttool
Definition: TRT_DriftCircleOnTrackRecalibrateTool.h:61
Trk::ParametersBase
Definition: ParametersBase.h:55
TRT_DriftCircleOnTrack.h
InDetDD::TRT_BaseElement::identifyHash
virtual IdentifierHash identifyHash() const override final
identifier hash
beamspotman.dir
string dir
Definition: beamspotman.py:623
Trk::DECIDED
@ DECIDED
sign of drift radius has been determined
Definition: DriftCircleStatus.h:18
Trk::PrepRawData
Definition: PrepRawData.h:62
Trk::PrepRawData::identify
Identifier identify() const
return the identifier
ITRT_DriftFunctionTool.h
TRT_DriftCircleOnTrackRecalibrateTool.h
LuminosityCondData::lbAverageInteractionsPerCrossing
float lbAverageInteractionsPerCrossing() const
Definition: LuminosityCondData.cxx:26
Trk::PrepRawData::localPosition
const Amg::Vector2D & localPosition() const
return the local position reference
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
InDet::TRT_DriftCircleOnTrackRecalibrateTool::finalize
virtual StatusCode finalize() override
Definition: TRT_DriftCircleOnTrackRecalibrateTool.cxx:74
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
LocalParameters.h
ParticleGun_SamplingFraction.radius
radius
Definition: ParticleGun_SamplingFraction.py:96
ErrorScalingCast.h
InDet::TRT_DriftCircleOnTrackRecalibrateTool::m_scalefactor
double m_scalefactor
Definition: TRT_DriftCircleOnTrackRecalibrateTool.h:71
AthCommonMsg< AlgTool >::msg
MsgStream & msg() const
Definition: AthCommonMsg.h:24
InDet::TRT_DriftCircleOnTrackRecalibrateTool::m_riontrackTube
ToolHandle< Trk::IRIO_OnTrackCreator > m_riontrackTube
Definition: TRT_DriftCircleOnTrackRecalibrateTool.h:60
python.Constants.VERBOSE
int VERBOSE
Definition: Control/AthenaCommon/python/Constants.py:14
drawFromPickle.sin
sin
Definition: drawFromPickle.py:36
InDet::TRT_DriftCircleOnTrackRecalibrateTool::m_trtErrorScalingKey
SG::ReadCondHandleKey< RIO_OnTrackErrorScaling > m_trtErrorScalingKey
Definition: TRT_DriftCircleOnTrackRecalibrateTool.h:68
AthAlgTool
Definition: AthAlgTool.h:26
IdentifierHash
Definition: IdentifierHash.h:38
CaloNoise_fillDB.mu
mu
Definition: CaloNoise_fillDB.py:53
error
Definition: IImpactPoint3dEstimator.h:70
Amg::distance
float distance(const Amg::Vector3D &p1, const Amg::Vector3D &p2)
calculates the distance between two point in 3D space
Definition: GeoPrimitivesHelpers.h:54
InDet::TRT_DriftCircleOnTrackRecalibrateTool::~TRT_DriftCircleOnTrackRecalibrateTool
virtual ~TRT_DriftCircleOnTrackRecalibrateTool()
InDetDD::TRT_BaseElement
Definition: TRT_BaseElement.h:57