40 const typename ActsTrk::TrackContainer::ConstTrackProxy& track) {
42 tracksContainer.trackStateContainer().visitBackwards(
46 ](
const typename ActsTrk::TrackStateBackend::ConstTrackStateProxy &state) ->
void
48 if (state.hasUncalibratedSourceLink()) {
50 const xAOD::UncalibratedMeasurement *
51 measurement = &(ActsTrk::getUncalibratedMeasurement(state.getUncalibratedSourceLink().get<ATLASUncalibSourceLink>()));
52 assert( static_cast<unsigned int >(measurement->type() < xAOD::UncalibMeasType::nTypes));
53 ++hit_counts_out[static_cast<unsigned int >(measurement->type())];
55 catch (std::bad_any_cast &) {
59 return hit_counts_out;
63 StatusCode TrackAnalysisAlg::fillHistograms(
const EventContext& ctx)
const {
70 using ConstTrackProxy = ActsTrk::TrackContainer::ConstTrackProxy;
73 std::vector<ConstTrackProxy> proxies;
74 for (
auto proxy: *tracks ) {
75 proxies.push_back(
proxy);
78 std::vector<int> nSharedPerTrack {};
79 nSharedPerTrack.reserve(tracks->size());
81 std::vector<int> nSharedPixelBarrelLayer;
82 std::vector<int> nSharedPixelEndCapLayer;
83 std::vector<int> nSharedStripBarrelLayer;
84 std::vector<int> nSharedStripEndCapLayer;
85 nSharedPixelBarrelLayer.reserve(5*tracks->size());
86 nSharedPixelEndCapLayer.reserve(5*tracks->size());
87 nSharedStripBarrelLayer.reserve(5*tracks->size());
88 nSharedStripEndCapLayer.reserve(5*tracks->size());
90 for (
const auto track_proxy : proxies) {
92 track_proxy.container().trackStateContainer()
93 .visitBackwards(track_proxy.tipIndex(),
96 &nSharedPixelBarrelLayer, &nSharedPixelEndCapLayer,
97 &nSharedStripBarrelLayer, &nSharedStripEndCapLayer]
100 auto flags = state.typeFlags();
101 if (not flags.test(Acts::TrackStateFlag::SharedHitFlag)) return;
104 auto sl = state.getUncalibratedSourceLink().template get<ATLASUncalibSourceLink>();
105 assert( sl != nullptr);
106 const xAOD::UncalibratedMeasurement &cluster = getUncalibratedMeasurement(sl);
107 xAOD::DetectorIDHashType idHash = cluster.identifierHash();
109 xAOD::UncalibMeasType clusterType = cluster.type();
110 if (clusterType == xAOD::UncalibMeasType::PixelClusterType) {
111 const Identifier& id = m_pixelID->wafer_id(idHash);
112 auto barrel_or_endcap = m_pixelID->barrel_ec(id);
113 auto layer = m_pixelID->layer_disk(id);
114 if (barrel_or_endcap == 0) {
115 nSharedPixelBarrelLayer.push_back(layer);
117 nSharedPixelEndCapLayer.push_back(layer);
120 const Identifier&
id = m_stripID->wafer_id(idHash);
121 auto barrel_or_endcap = m_stripID->barrel_ec(
id);
122 auto layer = m_stripID->layer_disk(
id);
123 if (barrel_or_endcap == 0) {
124 nSharedStripBarrelLayer.push_back(
layer);
126 nSharedStripEndCapLayer.push_back(
layer);
131 nSharedPerTrack.push_back(nShared);
135 auto monitor_nsharedperlayer_pixelbarrel =
Monitored::Collection(
"NsharedPerLayer_pixelBarrel", nSharedPixelBarrelLayer);
136 auto monitor_nsharedperlayer_pixelendcap =
Monitored::Collection(
"NsharedPerLayer_pixelEndCap", nSharedPixelEndCapLayer);
137 auto monitor_nsharedperlayer_stripbarrel =
Monitored::Collection(
"NsharedPerLayer_stripBarrel", nSharedStripBarrelLayer);
138 auto monitor_nsharedperlayer_stripendcap =
Monitored::Collection(
"NsharedPerLayer_stripEndCap", nSharedStripEndCapLayer);
141 auto monitor_theta =
Monitored::Collection(
"theta", proxies, [](
const ConstTrackProxy&
tp){
return static_cast<double>(
tp.theta()); } );
143 [](
const ConstTrackProxy&
tp)
145 auto monitor_qoverp =
Monitored::Collection(
"qoverp", proxies, [](
const ConstTrackProxy&
tp){
return static_cast<double>(
tp.qOverP()); } );
146 auto monitor_phi =
Monitored::Collection(
"phi", proxies, [](
const ConstTrackProxy&
tp){
return static_cast<double>(
tp.phi()); } );
147 auto monitor_chi2 =
Monitored::Collection(
"chi2", proxies, [](
const ConstTrackProxy&
tp){
return static_cast<double>(
tp.chi2()); } );
148 auto monitor_chi2OverNdof =
Monitored::Collection(
"chi2OverNdof", proxies, [](
const ConstTrackProxy&
tp){
return static_cast<double>(
tp.chi2()/
tp.nDoF()); } );
149 auto monitor_ndof =
Monitored::Collection(
"ndof", proxies, [](
const ConstTrackProxy&
tp){
return static_cast<double>(
tp.nDoF()); } );
150 auto monitor_nstates =
Monitored::Collection(
"nStates", proxies, [](
const ConstTrackProxy&
tp){
return static_cast<double>(
tp.nTrackStates()); } );
156 auto monitor_nmeas =
Monitored::Collection(
"nMeasurements", proxies, [](
const ConstTrackProxy&
tp){
return static_cast<double>(
tp.nMeasurements()); } );
157 auto monitor_noutliers =
Monitored::Collection(
"nOutliers", proxies, [](
const ConstTrackProxy&
tp){
return static_cast<double>(
tp.nOutliers()); } );
158 auto monitor_nholes =
Monitored::Collection(
"nHoles", proxies, [](
const ConstTrackProxy&
tp){
return static_cast<double>(
tp.nHoles()); } );
159 auto monitor_surftype =
Monitored::Collection(
"surfaceType", proxies, [](
const ConstTrackProxy&
tp){
return static_cast<double>(
tp.referenceSurface().
type()); } );
162 fill(m_monGroupName.value(),
163 monitor_nsharedpertrack,
164 monitor_nsharedperlayer_pixelbarrel, monitor_nsharedperlayer_pixelendcap,
165 monitor_nsharedperlayer_stripbarrel, monitor_nsharedperlayer_stripendcap,
166 monitor_ntracks, monitor_theta, monitor_eta, monitor_phi,
167 monitor_qoverp, monitor_nstates, monitor_phi, monitor_chi2, monitor_chi2OverNdof,
168 monitor_ndof, monitor_nstates, monitor_nmeas, monitor_noutliers, monitor_nholes, monitor_surftype,
169 monitor_nPixelHits, monitor_nStripHits);
171 return StatusCode::SUCCESS;