63 ATH_MSG_DEBUG(
"Filling Histograms for " << name() <<
" ... " );
68 using ConstTrackProxy = ActsTrk::TrackContainer::ConstTrackProxy;
71 std::vector<ConstTrackProxy> proxies;
72 for (
auto proxy: *tracks ) {
73 proxies.push_back(proxy);
76 std::vector<int> nSharedPerTrack {};
77 nSharedPerTrack.reserve(tracks->size());
79 std::vector<int> nSharedPixelBarrelLayer;
80 std::vector<int> nSharedPixelEndCapLayer;
81 std::vector<int> nSharedStripBarrelLayer;
82 std::vector<int> nSharedStripEndCapLayer;
83 nSharedPixelBarrelLayer.reserve(5*tracks->size());
84 nSharedPixelEndCapLayer.reserve(5*tracks->size());
85 nSharedStripBarrelLayer.reserve(5*tracks->size());
86 nSharedStripEndCapLayer.reserve(5*tracks->size());
88 for (
const auto track_proxy : proxies) {
90 track_proxy.container().trackStateContainer()
91 .visitBackwards(track_proxy.tipIndex(),
94 &nSharedPixelBarrelLayer, &nSharedPixelEndCapLayer,
95 &nSharedStripBarrelLayer, &nSharedStripEndCapLayer]
98 auto flags = state.typeFlags();
99 if (not flags.isSharedHit()) return;
102 auto cluster = detail::xAODUncalibMeasCalibrator::unpack(state.getUncalibratedSourceLink());
103 assert( cluster != nullptr);
104 xAOD::DetectorIDHashType idHash = cluster->identifierHash();
106 xAOD::UncalibMeasType clusterType = cluster->type();
107 if (clusterType == xAOD::UncalibMeasType::PixelClusterType) {
108 const Identifier& id = m_pixelID->wafer_id(idHash);
109 auto barrel_or_endcap = m_pixelID->barrel_ec(id);
110 auto layer = m_pixelID->layer_disk(id);
111 if (barrel_or_endcap == 0) {
112 nSharedPixelBarrelLayer.push_back(layer);
114 nSharedPixelEndCapLayer.push_back(layer);
118 auto barrel_or_endcap =
m_stripID->barrel_ec(
id);
120 if (barrel_or_endcap == 0) {
121 nSharedStripBarrelLayer.push_back(layer);
123 nSharedStripEndCapLayer.push_back(layer);
128 nSharedPerTrack.push_back(nShared);
132 auto monitor_nsharedperlayer_pixelbarrel =
Monitored::Collection(
"NsharedPerLayer_pixelBarrel", nSharedPixelBarrelLayer);
133 auto monitor_nsharedperlayer_pixelendcap =
Monitored::Collection(
"NsharedPerLayer_pixelEndCap", nSharedPixelEndCapLayer);
134 auto monitor_nsharedperlayer_stripbarrel =
Monitored::Collection(
"NsharedPerLayer_stripBarrel", nSharedStripBarrelLayer);
135 auto monitor_nsharedperlayer_stripendcap =
Monitored::Collection(
"NsharedPerLayer_stripEndCap", nSharedStripEndCapLayer);
138 auto monitor_theta =
Monitored::Collection(
"theta", proxies, [](
const ConstTrackProxy& tp){
return static_cast<double>(tp.theta()); } );
140 [](
const ConstTrackProxy& tp)
141 {
return static_cast<double>( -std::log(std::tan(tp.theta() * 0.5)) ); } );
142 auto monitor_qoverp =
Monitored::Collection(
"qoverp", proxies, [](
const ConstTrackProxy& tp){
return static_cast<double>(tp.qOverP()); } );
143 auto monitor_pt =
Monitored::Collection(
"pt", proxies, [](
const ConstTrackProxy& tp){
return tp.transverseMomentum(); } );
144 auto monitor_phi =
Monitored::Collection(
"phi", proxies, [](
const ConstTrackProxy& tp){
return static_cast<double>(tp.phi()); } );
145 auto monitor_chi2 =
Monitored::Collection(
"chi2", proxies, [](
const ConstTrackProxy& tp){
return static_cast<double>(tp.chi2()); } );
146 auto monitor_chi2OverNdof =
Monitored::Collection(
"chi2OverNdof", proxies, [](
const ConstTrackProxy& tp){
return static_cast<double>(tp.chi2()/tp.nDoF()); } );
147 auto monitor_ndof =
Monitored::Collection(
"ndof", proxies, [](
const ConstTrackProxy& tp){
return static_cast<double>(tp.nDoF()); } );
148 auto monitor_nstates =
Monitored::Collection(
"nStates", proxies, [](
const ConstTrackProxy& tp){
return static_cast<double>(tp.nTrackStates()); } );
150 auto monitor_nPixelHits =
Monitored::Collection(
"nPixelHits", proxies, [&tracks](
const ConstTrackProxy& tp){
152 auto monitor_nStripHits =
Monitored::Collection(
"nStripHits", proxies, [&tracks](
const ConstTrackProxy& tp){
154 auto monitor_nmeas =
Monitored::Collection(
"nMeasurements", proxies, [](
const ConstTrackProxy& tp){
return static_cast<double>(tp.nMeasurements()); } );
155 auto monitor_noutliers =
Monitored::Collection(
"nOutliers", proxies, [](
const ConstTrackProxy& tp){
return static_cast<double>(tp.nOutliers()); } );
156 auto monitor_nholes =
Monitored::Collection(
"nHoles", proxies, [](
const ConstTrackProxy& tp){
return static_cast<double>(tp.nHoles()); } );
157 auto monitor_surftype =
Monitored::Collection(
"surfaceType", proxies, [](
const ConstTrackProxy& tp){
return static_cast<double>(tp.referenceSurface().
type()); } );
160 fill(m_monGroupName.value(),
161 monitor_nsharedpertrack,
162 monitor_nsharedperlayer_pixelbarrel, monitor_nsharedperlayer_pixelendcap,
163 monitor_nsharedperlayer_stripbarrel, monitor_nsharedperlayer_stripendcap,
164 monitor_ntracks, monitor_theta, monitor_eta, monitor_phi, monitor_pt,
165 monitor_qoverp, monitor_nstates, monitor_phi, monitor_chi2, monitor_chi2OverNdof,
166 monitor_ndof, monitor_nstates, monitor_nmeas, monitor_noutliers, monitor_nholes, monitor_surftype,
167 monitor_nPixelHits, monitor_nStripHits);
169 return StatusCode::SUCCESS;