ATLAS Offline Software
MuonObj.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #ifndef MCPMUONOBJ_H
6 #define MCPMUONOBJ_H
7 
8 #include "xAODMuon/Muon.h"
11 
18 #include "ColumnarMuon/MuonDef.h"
24 
25 #include <optional>
26 
27 namespace
28 {
29  static constexpr double GeVtoMeV = 1e+3;
30  static constexpr double MeVtoGeV = 1e-3;
31 } // namespace
32 
33 
34 namespace MCP {
35 
42  columnar::Track1Accessor<columnar::ObjectColumn> m_tracksCB {*this, "CombinedMuonTrackParticles"};
43  columnar::Track2Accessor<columnar::ObjectColumn> m_tracksME {*this, "ExtrapolatedMuonTrackParticles"};
44  columnar::Track3Accessor<columnar::ObjectColumn> m_tracksFID {*this, "InDetForwardTrackParticles"};
45 
50 
52  columnar::MuonDecorator<float> ptOutDec {*this, "ptOut", {.replacesColumn = "pt"}};
56  columnar::MuonDecorator<float> chargeOutDec {*this, "chargeOut", {.replacesColumn = "charge"}};
59  columnar::MuonDecorator<float> dec_idPt{*this, "InnerDetectorPt"};
60  columnar::MuonDecorator<float> dec_mePt{*this, "MuonSpectrometerPt"};
61  columnar::MuonDecorator<float> dec_idCharge{*this, "InnerDetectorCharge"};
62  columnar::MuonDecorator<float> dec_meCharge{*this, "MuonSpectrometerCharge"};
66 
71  };
72 
74  struct TrackCalibObj{
75  TrackCalibObj() = default;
77  DataYear year, bool isData)
78  : type{t},
79  is_valid{track.has_value()},
80  uncalib_pt{(track.has_value()) ? acc.trkMomentumAcc.pt(track.value(),ParticleConstants::muonMassInMeV) * MeVtoGeV : 0},
82  eta{(track.has_value()) ? acc.trkMomentumAcc.eta(track.value(),ParticleConstants::muonMassInMeV) : FLT_MAX},
83  phi{(track.has_value()) ? acc.trkMomentumAcc.phi(track.value(),ParticleConstants::muonMassInMeV) : FLT_MAX},
84  mass{(track.has_value()) ? ParticleConstants::muonMassInMeV : 0},
87  year{year},
88  isData{isData},
89  pars{(track.has_value()) ? acc.trkDefiningParametersAcc(track.value())
90  : AmgVector(5)::Zero()},
91  covariance{(track.has_value())
92  ? acc.trkDefiningParametersCovAcc(track.value())
93  : AmgSymMatrix(5)::Zero()} {}
94 
96  double eta, double phi, DataYear year, bool isData)
97  : type{t},
98  is_valid{track.has_value()},
99  uncalib_pt{(track.has_value()) ? acc.trkMomentumAcc.pt(track.value(),ParticleConstants::muonMassInMeV) * MeVtoGeV : 0},
101  eta{eta},
102  phi{phi},
103  mass{(track.has_value()) ? ParticleConstants::muonMassInMeV : 0},
106  year{year},
107  isData{isData},
108  pars{(track.has_value()) ? acc.trkDefiningParametersAcc(track.value())
109  : AmgVector(5)()},
110  covariance{(track.has_value())
111  ? acc.trkDefiningParametersCovAcc(track.value())
112  : AmgSymMatrix(5)()} {}
113 
114  TrackCalibObj(TrackType t, int charge, double pt, double eta, double phi, double mass, AmgVector(5) pars, AmgSymMatrix(5) cov, DataYear year, bool isData):
115  type{t},
116  is_valid{true},
119  eta{eta},
120  phi{phi},
121  mass{mass},
124  year{year},
125  isData{isData},
126  pars {pars},
127  covariance{cov}
128  {}
129 
130  TrackCalibObj(TrackType t, double pt, double eta, double phi, DataYear year, bool isData):
131  type{t},
132  is_valid{true},
135  eta{eta},
136  phi{phi},
137  mass{-999},
138  uncalib_charge{-999},
139  calib_charge{-999},
140  year{year},
141  isData{isData},
142  pars (AmgVector(5)::Zero()),
143  covariance (AmgSymMatrix(5)::Zero())
144  {}
145 
146 
147 
149  const TrackType type{};
151  const bool is_valid{false};
153  const double uncalib_pt{0.};
155  double calib_pt{0.};
157  const double eta{0.};
159  const double phi{0.};
161  const double mass{0.};
163  const int uncalib_charge{0};
165  int calib_charge{0};
166  // Data year
167  const DataYear year{};
168  // isData
169  const bool isData{};
170 
172  const AmgVector(5) pars{AmgVector(5)::Zero()};
174  const AmgSymMatrix(5) covariance{AmgSymMatrix(5)::Zero()};
175  };
176 
177 
178  struct MuonObj
179  {
180  MuonObj(const TrackCalibObj& CB, const TrackCalibObj& ID, const TrackCalibObj& ME): ID{ID}, ME{ME}, CB{CB}{}
181 
185 
187  double rnd_g0{0.};
188  double rnd_g1{0.};
189  double rnd_g2{0.};
190  double rnd_g3{0.};
191  double rnd_g4{0.};
192  double rnd_g_highPt{0.};
193 
194  // the resolution category as given by the muon selection tool.
195  // this isn't always read or used, so it is an `std::optional`
196  // to generate an error if it is used without being set.
198  std::optional<ResolutionCategory> raw_mst_category;
199 
200  // Expected resolution number for statistical combination
201  double expectedResID{0.};
202  double expectedResME{0.};
203 
206 
207  inline double getCalibpt(TrackType type) const
208  {
209  if(type == MCP::TrackType::CB) return CB.calib_pt;
210  else if(type == MCP::TrackType::ID) return ID.calib_pt;
211  else if(type == MCP::TrackType::ME) return ME.calib_pt;
212  return 0;
213  }
214  };
215 }
216 #endif
MCP::TrackCalibObj::is_valid
const bool is_valid
Flag telling whether the track particle exists at all.
Definition: MuonObj.h:151
MCP::TrackCalibObj::TrackCalibObj
TrackCalibObj(const MuonCalibToolAccessors &acc, columnar::OptObjectId< columnar::MuonTrackDef > track, TrackType t, int charge, DataYear year, bool isData)
Definition: MuonObj.h:76
MCP::MuonObj::ME
TrackCalibObj ME
Definition: MuonObj.h:183
AllowedVariables::e
e
Definition: AsgElectronSelectorTool.cxx:37
base
std::string base
Definition: hcg.cxx:78
make_hlt_rep.pars
pars
Definition: make_hlt_rep.py:90
MCP::MuonCalibToolAccessors::MuonCalibToolAccessors
MuonCalibToolAccessors(columnar::ColumnarTool<> &base)
Definition: MuonObj.h:38
OptObjectId.h
MCP::MuonCalibToolAccessors::ptOutDec
columnar::MuonDecorator< float > ptOutDec
Definition: MuonObj.h:52
LinkColumn.h
CP::IMuonSelectionTool::ResolutionCategory
ResolutionCategory
Declare the interface that the class provides.
Definition: IMuonSelectionTool.h:31
MCP::MuonCalibToolAccessors::trkDefiningParametersAcc
columnar::TrackHelpers::DefiningParametersAccessor< columnar::MuonTrackDef > trkDefiningParametersAcc
Definition: MuonObj.h:69
MCP::MuonCalibToolAccessors::chargeOutDec
columnar::MuonDecorator< float > chargeOutDec
Definition: MuonObj.h:56
ID
std::vector< Identifier > ID
Definition: CalibHitIDCheck.h:24
MCP::MuonCalibToolAccessors::authorAcc
columnar::MuonAccessor< columnar::RetypeColumn< xAOD::Muon::Author, std::uint16_t > > authorAcc
Definition: MuonObj.h:58
MCP::MuonCalibToolAccessors::trkChargeAcc
columnar::TrackHelpers::ChargeAccessor< columnar::MuonTrackDef > trkChargeAcc
Definition: MuonObj.h:67
MCP::TrackCalibObj::uncalib_pt
const double uncalib_pt
Value of the track-pt pre-calibration.
Definition: MuonObj.h:153
Muon.h
MCP::MuonObj::getCalibpt
double getCalibpt(TrackType type) const
Definition: MuonObj.h:207
VariantDef.h
MCP::TrackCalibObj::TrackCalibObj
TrackCalibObj()=default
ParticleConstants::PDG2011::muonMassInMeV
constexpr double muonMassInMeV
the mass of the muon (in MeV)
Definition: ParticleConstants.h:29
MCP::MuonObj::expectedPercentResID
double expectedPercentResID
Definition: MuonObj.h:204
plotBeamSpotVxVal.cov
cov
Definition: plotBeamSpotVxVal.py:200
test_pyathena.pt
pt
Definition: test_pyathena.py:11
CP::MeVtoGeV
constexpr float MeVtoGeV
Definition: IsolationCloseByCorrectionTool.cxx:38
MCP::MuonObj::expectedResID
double expectedResID
Definition: MuonObj.h:201
columnar::OptObjectId
a class representing a single optional object (electron, muons, etc.)
Definition: ContainerId.h:179
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
MCP::TrackCalibObj::uncalib_charge
const int uncalib_charge
Value of the track-charge (before calibration)
Definition: MuonObj.h:163
VariantLinkColumn.h
python.CaloAddPedShiftConfig.type
type
Definition: CaloAddPedShiftConfig.py:42
MCP::TrackCalibObj::TrackCalibObj
TrackCalibObj(TrackType t, double pt, double eta, double phi, DataYear year, bool isData)
Definition: MuonObj.h:130
MCP::TrackCalibObj::year
const DataYear year
Definition: MuonObj.h:167
MCP::MuonObj::raw_mst_category
std::optional< ResolutionCategory > raw_mst_category
Definition: MuonObj.h:198
MCP::MuonCalibToolAccessors::m_tracksME
columnar::Track2Accessor< columnar::ObjectColumn > m_tracksME
Definition: MuonObj.h:43
MCP::TrackCalibObj::calib_charge
int calib_charge
Value of the track-charge (after calibration)
Definition: MuonObj.h:165
columnar::TrackHelpers::ChargeAccessor
Definition: TrackHelpers.h:31
IMuonSelectionTool.h
TrackHelpers.h
MCP::MuonObj::expectedPercentResME
double expectedPercentResME
Definition: MuonObj.h:205
MCP::MuonCalibToolAccessors::extrapolatedMuonSpectrometerTrackParticleLinkAcc
columnar::MuonAccessor< columnar::OptTrack2Id > extrapolatedMuonSpectrometerTrackParticleLinkAcc
Definition: MuonObj.h:65
MCP::MuonObj::MuonObj
MuonObj(const TrackCalibObj &CB, const TrackCalibObj &ID, const TrackCalibObj &ME)
Definition: MuonObj.h:180
MCP::MuonObj::rnd_g2
double rnd_g2
Definition: MuonObj.h:189
MCP::MuonCalibToolAccessors::inDetTrackParticleLinkAcc
columnar::MuonAccessor< columnar::ObjectLink< columnar::MuonTrackDef > > inDetTrackParticleLinkAcc
Definition: MuonObj.h:64
MCP::MuonObj::rnd_g_highPt
double rnd_g_highPt
Definition: MuonObj.h:192
MCP::MuonObj::rnd_g0
double rnd_g0
Random numbers helping for the calibration.
Definition: MuonObj.h:187
MCP::MuonCalibToolAccessors::dec_idCharge
columnar::MuonDecorator< float > dec_idCharge
Definition: MuonObj.h:61
MCP::MuonCalibToolAccessors::chargeAcc
columnar::MuonAccessor< float > chargeAcc
Definition: MuonObj.h:55
ColumnAccessor.h
MCP::MuonCalibToolAccessors::dec_idPt
columnar::MuonDecorator< float > dec_idPt
Definition: MuonObj.h:59
MCP::MuonCalibToolAccessors::ptAcc
columnar::MuonAccessor< columnar::RetypeColumn< double, float > > ptAcc
Definition: MuonObj.h:51
MCP::MuonCalibToolAccessors::m_muons
columnar::MuonAccessor< columnar::ObjectColumn > m_muons
Definition: MuonObj.h:40
AthenaPoolTestRead.acc
acc
Definition: AthenaPoolTestRead.py:16
ObjectColumn.h
ColumnarTool.h
MCP::MuonObj::expectedResME
double expectedResME
Definition: MuonObj.h:202
columnar::TrackHelpers::DefiningParametersCovAccessor
Definition: TrackHelpers.h:122
columnar::EventInfoHelpers::EventTypeAccessor
Definition: EventInfoHelpers.h:28
MCP::TrackCalibObj::eta
const double eta
Value of the track-eta.
Definition: MuonObj.h:157
MCP::MuonCalibToolAccessors::m_tracksFID
columnar::Track3Accessor< columnar::ObjectColumn > m_tracksFID
Definition: MuonObj.h:44
MuonDef.h
MCP::MuonObj::rnd_g1
double rnd_g1
Definition: MuonObj.h:188
MCP::MuonCalibToolAccessors::m_tracksID
columnar::Track0Accessor< columnar::ObjectColumn > m_tracksID
Definition: MuonObj.h:41
MCP::MuonCalibToolAccessors::muonTypeAcc
columnar::MuonAccessor< columnar::RetypeColumn< xAOD::Muon::MuonType, std::uint16_t > > muonTypeAcc
Definition: MuonObj.h:57
MCP::TrackCalibObj::type
const TrackType type
Flag telling the code whether this is CB/ME/ID.
Definition: MuonObj.h:149
MCP::TrackCalibObj::phi
const double phi
Value of the track-phi.
Definition: MuonObj.h:159
columnar::TrackHelpers::DefiningParametersAccessor
Definition: TrackHelpers.h:94
MCP::MuonObj::rnd_g3
double rnd_g3
Definition: MuonObj.h:190
MCP::TrackCalibObj::AmgVector
const AmgVector(5) pars
Track perigee parameters.
Definition: MuonObj.h:172
charge
double charge(const T &p)
Definition: AtlasPID.h:997
MCP::MuonCalibToolAccessors::runNumberAcc
columnar::EventInfoAccessor< uint32_t > runNumberAcc
Definition: MuonObj.h:47
MCP::MuonCalibToolAccessors::dec_mePt
columnar::MuonDecorator< float > dec_mePt
Definition: MuonObj.h:60
MCP
Definition: CalibContainer.h:18
MCP::TrackCalibObj::calib_pt
double calib_pt
Smeared track pt.
Definition: MuonObj.h:155
MCP::MuonObj::rnd_g4
double rnd_g4
Definition: MuonObj.h:191
MCP::MuonCalibToolAccessors::phiAcc
columnar::MuonAccessor< columnar::RetypeColumn< double, float > > phiAcc
Definition: MuonObj.h:54
EnumDef.h
MCP::TrackCalibObj::TrackCalibObj
TrackCalibObj(TrackType t, int charge, double pt, double eta, double phi, double mass, AmgVector(5) pars, AmgSymMatrix(5) cov, DataYear year, bool isData)
Definition: MuonObj.h:114
MCP::TrackType::CB
@ CB
MCP::MuonCalibToolAccessors::eventTypeAcc
columnar::EventInfoHelpers::EventTypeAccessor eventTypeAcc
Definition: MuonObj.h:46
MuonTrackHelpers.h
columnar::TrackHelpers::TrackMomentumAccessors
this gets the four momentum of a track, given the mass (and assuming a charge of +/- 1)
Definition: TrackHelpers.h:64
columnar
Definition: ClusterDef.h:16
MCP::TrackCalibObj::mass
const double mass
Value of the track-mass.
Definition: MuonObj.h:161
VariantAccessor.h
MCP::MuonObj::CB
TrackCalibObj CB
Definition: MuonObj.h:184
columnar::ColumnarTool
the base class for all columnar components
Definition: ColumnAccessorDataArray.h:17
MCP::MuonCalibToolAccessors::combinedTrackParticleLinkAcc
columnar::MuonAccessor< columnar::OptTrack1Id > combinedTrackParticleLinkAcc
Definition: MuonObj.h:63
MCP::TrackCalibObj::isData
const bool isData
Definition: MuonObj.h:169
MCP::MuonCalibToolAccessors
Accessors for the MuonCalibTool.
Definition: MuonObj.h:37
MCP::DataYear
DataYear
Definition: EnumDef.h:28
MCP::MuonObj
Definition: MuonObj.h:179
MCP::TrackCalibObj::TrackCalibObj
TrackCalibObj(const MuonCalibToolAccessors &acc, columnar::OptObjectId< columnar::MuonTrackDef > track, TrackType t, int charge, double eta, double phi, DataYear year, bool isData)
Definition: MuonObj.h:95
xAOD::track
@ track
Definition: TrackingPrimitives.h:513
columnar::AccessorTemplate
the raw column accessor template class
Definition: ColumnAccessor.h:81
EventInfoHelpers.h
MCP::TrackCalibObj::AmgSymMatrix
const AmgSymMatrix(5) covariance
Full track covariance matrix.
Definition: MuonObj.h:174
MCP::MuonCalibToolAccessors::trkMomentumAcc
columnar::TrackHelpers::TrackMomentumAccessors< columnar::MuonTrackDef > trkMomentumAcc
Definition: MuonObj.h:68
MCP::MuonCalibToolAccessors::etaAcc
columnar::MuonAccessor< columnar::RetypeColumn< double, float > > etaAcc
Definition: MuonObj.h:53
MCP::MuonCalibToolAccessors::m_tracksCB
columnar::Track1Accessor< columnar::ObjectColumn > m_tracksCB
Definition: MuonObj.h:42
MCP::TrackCalibObj
Basic object to cache all relevant information from the track.
Definition: MuonObj.h:74
MCP::MuonCalibToolAccessors::dec_meCharge
columnar::MuonDecorator< float > dec_meCharge
Definition: MuonObj.h:62
MCP::TrackType::ME
@ ME
MCP::MuonCalibToolAccessors::acc_rnd
columnar::EventInfoAccessor< unsigned int > acc_rnd
Definition: MuonObj.h:49
generate::Zero
void Zero(TH1D *hin)
Definition: generate.cxx:32
MCP::MuonCalibToolAccessors::eventNumberAcc
columnar::EventInfoAccessor< uint64_t > eventNumberAcc
Definition: MuonObj.h:48
MCP::MuonCalibToolAccessors::m_eventInfoCol
columnar::EventInfoAccessor< columnar::ObjectColumn > m_eventInfoCol
Definition: MuonObj.h:39
TrackType
Definition: TrackTypes.h:10
MCP::MuonCalibToolAccessors::trkDefiningParametersCovAcc
columnar::TrackHelpers::DefiningParametersCovAccessor< columnar::MuonTrackDef > trkDefiningParametersCovAcc
Definition: MuonObj.h:70
MCP::TrackType::ID
@ ID