ATLAS Offline Software
Loading...
Searching...
No Matches
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
24
25#include <optional>
26
27namespace
28{
29 static constexpr double GeVtoMeV = 1e+3;
30 static constexpr double MeVtoGeV = 1e-3;
31} // namespace
32
33
34namespace MCP {
35
39 columnar::EventInfoAccessor<columnar::ObjectColumn> m_eventInfoCol {*this, "EventInfo", {.addMTDependency=true}};
42 columnar::Track1Accessor<columnar::ObjectColumn> m_tracksCB {*this, "CombinedMuonTrackParticles"};
43 columnar::Track2Accessor<columnar::ObjectColumn> m_tracksME {*this, "ExtrapolatedMuonTrackParticles"};
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
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},
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},
117 uncalib_pt{pt*MeVtoGeV},
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},
133 uncalib_pt{pt*MeVtoGeV},
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
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};
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 {
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
double charge(const T &p)
Definition AtlasPID.h:997
#define AmgSymMatrix(dim)
#define AmgVector(rows)
ResolutionCategory
Declare the interface that the class provides.
the base class for all columnar components
a class representing a single optional object (electron, muons, etc.)
this gets the four momentum of a track, given the mass (and assuming a charge of +/- 1)
std::string base
Definition hcg.cxx:81
constexpr float MeVtoGeV
DataYear
Definition EnumDef.h:28
TrackType
Definition EnumDef.h:13
AccessorTemplate< ContainerId::eventInfo, CT, ColumnAccessMode::input, CM > EventInfoAccessor
AccessorTemplate< ContainerId::track0, CT, ColumnAccessMode::input, CM > Track0Accessor
Definition TrackDef.h:52
AccessorTemplate< ContainerId::muon, CT, ColumnAccessMode::output, CM > MuonDecorator
Definition MuonDef.h:28
AccessorTemplate< ContainerId::track3, CT, ColumnAccessMode::input, CM > Track3Accessor
Definition TrackDef.h:64
AccessorTemplate< ContainerId::track2, CT, ColumnAccessMode::input, CM > Track2Accessor
Definition TrackDef.h:60
AccessorTemplate< ContainerId::track1, CT, ColumnAccessMode::input, CM > Track1Accessor
Definition TrackDef.h:56
AccessorTemplate< ContainerId::muon, CT, ColumnAccessMode::input, CM > MuonAccessor
Definition MuonDef.h:27
Accessors for the MuonCalibTool.
Definition MuonObj.h:37
columnar::MuonAccessor< columnar::RetypeColumn< double, float > > etaAcc
Definition MuonObj.h:53
columnar::EventInfoAccessor< uint32_t > runNumberAcc
Definition MuonObj.h:47
columnar::MuonAccessor< columnar::RetypeColumn< double, float > > ptAcc
Definition MuonObj.h:51
columnar::EventInfoAccessor< unsigned int > acc_rnd
Definition MuonObj.h:49
columnar::MuonDecorator< float > chargeOutDec
Definition MuonObj.h:56
columnar::MuonAccessor< columnar::RetypeColumn< double, float > > phiAcc
Definition MuonObj.h:54
columnar::Track0Accessor< columnar::ObjectColumn > m_tracksID
Definition MuonObj.h:41
columnar::MuonAccessor< columnar::ObjectLink< columnar::MuonTrackDef > > inDetTrackParticleLinkAcc
Definition MuonObj.h:64
columnar::MuonAccessor< columnar::RetypeColumn< xAOD::Muon::MuonType, std::uint16_t > > muonTypeAcc
Definition MuonObj.h:57
columnar::MuonDecorator< float > dec_meCharge
Definition MuonObj.h:62
columnar::MuonAccessor< columnar::OptTrack1Id > combinedTrackParticleLinkAcc
Definition MuonObj.h:63
columnar::MuonDecorator< float > dec_idPt
Definition MuonObj.h:59
columnar::TrackHelpers::DefiningParametersCovAccessor< columnar::MuonTrackDef > trkDefiningParametersCovAcc
Definition MuonObj.h:70
columnar::Track1Accessor< columnar::ObjectColumn > m_tracksCB
Definition MuonObj.h:42
columnar::MuonDecorator< float > dec_idCharge
Definition MuonObj.h:61
columnar::EventInfoHelpers::EventTypeAccessor eventTypeAcc
Definition MuonObj.h:46
columnar::TrackHelpers::TrackMomentumAccessors< columnar::MuonTrackDef > trkMomentumAcc
Definition MuonObj.h:68
columnar::MuonDecorator< float > dec_mePt
Definition MuonObj.h:60
columnar::Track2Accessor< columnar::ObjectColumn > m_tracksME
Definition MuonObj.h:43
columnar::TrackHelpers::ChargeAccessor< columnar::MuonTrackDef > trkChargeAcc
Definition MuonObj.h:67
columnar::MuonDecorator< float > ptOutDec
Definition MuonObj.h:52
columnar::MuonAccessor< float > chargeAcc
Definition MuonObj.h:55
columnar::TrackHelpers::DefiningParametersAccessor< columnar::MuonTrackDef > trkDefiningParametersAcc
Definition MuonObj.h:69
columnar::MuonAccessor< columnar::OptTrack2Id > extrapolatedMuonSpectrometerTrackParticleLinkAcc
Definition MuonObj.h:65
columnar::EventInfoAccessor< uint64_t > eventNumberAcc
Definition MuonObj.h:48
columnar::EventInfoAccessor< columnar::ObjectColumn > m_eventInfoCol
Definition MuonObj.h:39
columnar::MuonAccessor< columnar::RetypeColumn< xAOD::Muon::Author, std::uint16_t > > authorAcc
Definition MuonObj.h:58
MuonCalibToolAccessors(columnar::ColumnarTool<> &base)
Definition MuonObj.h:38
columnar::Track3Accessor< columnar::ObjectColumn > m_tracksFID
Definition MuonObj.h:44
columnar::MuonAccessor< columnar::ObjectColumn > m_muons
Definition MuonObj.h:40
double rnd_g1
Definition MuonObj.h:188
double rnd_g3
Definition MuonObj.h:190
double expectedResID
Definition MuonObj.h:201
double expectedPercentResME
Definition MuonObj.h:205
double rnd_g0
Random numbers helping for the calibration.
Definition MuonObj.h:187
double expectedResME
Definition MuonObj.h:202
double getCalibpt(TrackType type) const
Definition MuonObj.h:207
double rnd_g2
Definition MuonObj.h:189
MuonObj(const TrackCalibObj &CB, const TrackCalibObj &ID, const TrackCalibObj &ME)
Definition MuonObj.h:180
TrackCalibObj ID
Definition MuonObj.h:182
std::optional< ResolutionCategory > raw_mst_category
Definition MuonObj.h:198
CP::IMuonSelectionTool::ResolutionCategory ResolutionCategory
Definition MuonObj.h:197
double rnd_g_highPt
Definition MuonObj.h:192
double expectedPercentResID
Definition MuonObj.h:204
TrackCalibObj CB
Definition MuonObj.h:184
TrackCalibObj ME
Definition MuonObj.h:183
double rnd_g4
Definition MuonObj.h:191
Basic object to cache all relevant information from the track.
Definition MuonObj.h:74
const bool is_valid
Flag telling whether the track particle exists at all.
Definition MuonObj.h:151
const int uncalib_charge
Value of the track-charge (before calibration)
Definition MuonObj.h:163
int calib_charge
Value of the track-charge (after calibration)
Definition MuonObj.h:165
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
const double eta
Value of the track-eta.
Definition MuonObj.h:157
const DataYear year
Definition MuonObj.h:167
TrackCalibObj(TrackType t, double pt, double eta, double phi, DataYear year, bool isData)
Definition MuonObj.h:130
const double phi
Value of the track-phi.
Definition MuonObj.h:159
const double mass
Value of the track-mass.
Definition MuonObj.h:161
const AmgVector(5) pars
Track perigee parameters.
Definition MuonObj.h:172
TrackCalibObj(const MuonCalibToolAccessors &acc, columnar::OptObjectId< columnar::MuonTrackDef > track, TrackType t, int charge, DataYear year, bool isData)
Definition MuonObj.h:76
const double uncalib_pt
Value of the track-pt pre-calibration.
Definition MuonObj.h:153
const bool isData
Definition MuonObj.h:169
TrackCalibObj()=default
double calib_pt
Smeared track pt.
Definition MuonObj.h:155
const TrackType type
Flag telling the code whether this is CB/ME/ID.
Definition MuonObj.h:149
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
const AmgSymMatrix(5) covariance
Full track covariance matrix.
Definition MuonObj.h:174