ATLAS Offline Software
RPC_ResidualPullCalculator.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 
9 
10 //================ Constructor =================================================
11 
12 Muon::RPC_ResidualPullCalculator::RPC_ResidualPullCalculator(const std::string& t, const std::string& n, const IInterface* p) :
13  AthAlgTool(t,n,p)
14 {
15  declareInterface<IResidualPullCalculator>(this);
16 }
17 
18 //================ Initialisation =================================================
19 
21 {
22  ATH_CHECK(m_idHelperSvc.retrieve());
23  ATH_MSG_DEBUG ("initialize() successful in " << name());
24  return StatusCode::SUCCESS;
25 }
26 
27 //================ calculate residuals for RPC ==================================
28 std::array<double,5>
30  const Trk::MeasurementBase* measurement,
31  const Trk::TrackParameters* trkPar,
32  const Trk::ResidualPull::ResidualType /*resType*/,
34  std::array<double, 5> residuals{};
35  if (!trkPar || !measurement) return residuals;
37 
38  if( ID.is_valid() && m_idHelperSvc->isRpc(ID) ) {
39 
40  if (measurement->localParameters().parameterKey() == 1) {
41  // convention to be interpreted by TrkValTools: 2nd coordinate codes orientation of RPC
42  residuals[Trk::loc1] = measurement->localParameters()[Trk::loc1]
43  - trkPar->parameters()[Trk::loc1];
44  } else {
45  ATH_MSG_WARNING ( "RPC ClusterOnTrack does not carry the expected "
46  << "LocalParameters structure!" );
47  return residuals;
48  }
49 
50  } else {
51  ATH_MSG_DEBUG ( "Input problem measurement is not RPC." );
52  return residuals;
53  }
54  return residuals;
55 }
56 
57 //================ calculate residuals and pulls for RPC ==================================
58 std::optional<Trk::ResidualPull> Muon::RPC_ResidualPullCalculator::residualPull(
59  const Trk::MeasurementBase* measurement,
60  const Trk::TrackParameters* trkPar,
61  const Trk::ResidualPull::ResidualType resType,
63 
64  if (!trkPar || !measurement) return std::nullopt;
65 
67  if( ID.is_valid() && m_idHelperSvc->isRpc(ID) ) {
68 
69  // if no covariance for the track parameters is given the pull calculation is not valid
70  const AmgSymMatrix(5)* trkCov = trkPar->covariance();
71  bool pullIsValid = (trkCov);
72 
73  // calculate residual
74  std::vector<double> residual(1);
75  std::vector<double> pull(1);
76  if (measurement->localParameters().parameterKey() == 1) {
77  // convention to be interpreted by TrkValTools: 2nd coordinate codes orientation of RPC
78  residual[Trk::loc1] = measurement->localParameters()[Trk::loc1]
79  - trkPar->parameters()[Trk::loc1];
80  } else {
81  ATH_MSG_WARNING ( "RPC ClusterOnTrack does not carry the expected "
82  << "LocalParameters structure!" );
83  return std::nullopt;
84  }
85 
86  // calculate pull
87  if (pullIsValid)
88  pull[Trk::loc1] = calcPull(residual[Trk::loc1],
89  measurement->localCovariance()(Trk::loc1,Trk::loc1),
90  (*trkCov)(Trk::loc1,Trk::loc1),
91  resType);
92  else
93  pull[Trk::loc1] = calcPull(residual[Trk::loc1],
94  measurement->localCovariance()(Trk::loc1,Trk::loc1),
95  0,
96  resType);
97 
98  // create the Trk::ResidualPull.
99  ATH_MSG_DEBUG ( "Calculating Pull for channel " << m_idHelperSvc->toString(ID) << " residual " << residual[Trk::loc1] << " pull " << pull[Trk::loc1] );
100  return std::make_optional<Trk::ResidualPull>(
101  std::move(residual), std::move(pull), pullIsValid, resType, 1);
102 
103  } else {
104  ATH_MSG_DEBUG ( "Input problem measurement is not RPC." );
105  return std::nullopt;
106  }
107 }
108 
109 
114  const double residual,
115  const double locMesCov,
116  const double locTrkCov,
117  const Trk::ResidualPull::ResidualType& resType ) {
118 
119  double ErrorSum(0.0);
120  if (resType == Trk::ResidualPull::Unbiased) {
121  if( locMesCov + locTrkCov > 0 ) ErrorSum = sqrt(locMesCov + locTrkCov);
122  } else if (resType == Trk::ResidualPull::Biased) {
123  if ((locMesCov - locTrkCov) < 0.) {
124  return 0;
125  }
126  ErrorSum = sqrt(locMesCov - locTrkCov);
127  } else ErrorSum = sqrt(locMesCov);
128  if (ErrorSum != 0) return residual/ErrorSum;
129  return 0;
130 }
RPC_ResidualPullCalculator.h
python.PerfMonSerializer.p
def p
Definition: PerfMonSerializer.py:743
ID
std::vector< Identifier > ID
Definition: CalibHitIDCheck.h:24
Trk::LocalParameters::parameterKey
int parameterKey() const
Identifier key for matrix expansion/reduction.
ClusterSeg::residual
@ residual
Definition: ClusterNtuple.h:20
Muon::RPC_ResidualPullCalculator::residualPull
virtual std::optional< Trk::ResidualPull > residualPull(const Trk::MeasurementBase *measurement, const Trk::TrackParameters *trkPar, const Trk::ResidualPull::ResidualType, const Trk::TrackState::MeasurementType) const override
This function returns (creates!) a Trk::ResidualPull object, which contains the values of residual an...
Definition: RPC_ResidualPullCalculator.cxx:58
Trk::ResidualPull::Unbiased
@ Unbiased
RP with track state that has measurement not included.
Definition: ResidualPull.h:57
Muon::RPC_ResidualPullCalculator::residuals
virtual std::array< double, 5 > residuals(const Trk::MeasurementBase *measurement, const Trk::TrackParameters *trkPar, const Trk::ResidualPull::ResidualType, const Trk::TrackState::MeasurementType) const override
This function is a light-weight version of the function above, designed for track fitters where speed...
Definition: RPC_ResidualPullCalculator.cxx:29
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
AmgSymMatrix
#define AmgSymMatrix(dim)
Definition: EventPrimitives.h:52
IdentifierExtractor.h
Muon::RPC_ResidualPullCalculator::RPC_ResidualPullCalculator
RPC_ResidualPullCalculator(const std::string &, const std::string &, const IInterface *)
Definition: RPC_ResidualPullCalculator.cxx:12
Identifier
Definition: DetectorDescription/Identifier/Identifier/Identifier.h:32
beamspotman.n
n
Definition: beamspotman.py:731
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
Trk::TrackState::MeasurementType
MeasurementType
enum describing the flavour of MeasurementBase
Definition: TrackStateDefs.h:26
python.StandardJetMods.pull
pull
Definition: StandardJetMods.py:264
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
Trk::ParametersBase
Definition: ParametersBase.h:55
Trk::MeasurementBase::localCovariance
const Amg::MatrixX & localCovariance() const
Interface method to get the localError.
Definition: MeasurementBase.h:138
Trk::MeasurementBase
Definition: MeasurementBase.h:58
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
Muon::RPC_ResidualPullCalculator::initialize
virtual StatusCode initialize() override
Definition: RPC_ResidualPullCalculator.cxx:20
Muon::RPC_ResidualPullCalculator::calcPull
static double calcPull(const double residual, const double locMesCov, const double locTrkCov, const Trk::ResidualPull::ResidualType &)
internal structuring: common method to calculate the hit pull.
Definition: RPC_ResidualPullCalculator.cxx:113
LocalParameters.h
Trk::MeasurementBase::localParameters
const LocalParameters & localParameters() const
Interface method to get the LocalParameters.
Definition: MeasurementBase.h:132
Trk::IdentifierExtractor::extract
static void extract(std::vector< Identifier > &ids, const std::vector< const MeasurementBase * > &measurements)
Definition: IdentifierExtractor.cxx:13
Trk::ResidualPull::Biased
@ Biased
RP with track state including the hit.
Definition: ResidualPull.h:55
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
AthAlgTool
Definition: AthAlgTool.h:26
Trk::loc1
@ loc1
Definition: ParamDefs.h:40
Trk::ResidualPull::ResidualType
ResidualType
Definition: ResidualPull.h:53