47 {
48 const EventContext& ctx = Gaudi::Hive::currentContext();
49
50
51
52
53
54
55
57 if(!trackCollection.isValid()) {
59 return nullptr;
60 }
61
62
63 const Trk::PRDtoTrackMap *prd_to_track_map;
64 std::unique_ptr<Trk::PRDtoTrackMap> prd_to_track_map_cleanup;
67 if (!prd_to_track_map_handle.isValid()) {
69 return nullptr;
70 }
71 prd_to_track_map=prd_to_track_map_handle.cptr();
72 }
73 else {
74 prd_to_track_map_cleanup =
m_assoTool->createPRDtoTrackMap();
75
76 for (const Trk::Track* track : *trackCollection) {
80 return nullptr;
81 }
82 }
83 prd_to_track_map = prd_to_track_map_cleanup.get();
84 }
85
86 std::unique_ptr<MinBiasPRDAssociation> PRDAssociation(std::make_unique<MinBiasPRDAssociation>());
88
90 if(!pixelClusters.isValid()) {
92 return nullptr;
93 }
94
95 InDet::PixelClusterContainer::const_iterator pixCollItr = pixelClusters->begin();
96 InDet::PixelClusterContainer::const_iterator pixCollEnd = pixelClusters->end();
97 for(; pixCollItr!=pixCollEnd; ++pixCollItr){
98
99 InDet::PixelClusterCollection::const_iterator pixItr = (*pixCollItr)->begin();
100 InDet::PixelClusterCollection::const_iterator pixEnd = (*pixCollItr)->end();
101 for(; pixItr!=pixEnd; ++pixItr){
102
103
104 if(prd_to_track_map->
isUsed(*(*pixItr)))
continue;
105
106
107 PRDAssociation->nPixelUA++;
108
109
110 const InDetDD::SiDetectorElement *
det = (*pixItr)->detectorElement();
111
112
113 if(
det->isBarrel()) PRDAssociation->nPixelBarrelUA++;
114
115
117 if((*pixItr)->globalPosition().z()<0){
118 PRDAssociation->nPixelEndCapCUA++;
119 }else{
120 PRDAssociation->nPixelEndCapAUA++;
121 }
122 }
123
124
125 if(
det->isBlayer()) PRDAssociation->nBlayerUA++;
126 }
127 }
128 }
129
130
133 if(!SCTClusters.isValid()) {
135 return nullptr;
136 }
137
138 InDet::SCT_ClusterContainer::const_iterator sctCollItr = SCTClusters->begin();
139 InDet::SCT_ClusterContainer::const_iterator sctCollEnd = SCTClusters->end();
140 for(; sctCollItr!=sctCollEnd; ++sctCollItr){
141
142 InDet::SCT_ClusterCollection::const_iterator sctItr = (*sctCollItr)->begin();
143 InDet::SCT_ClusterCollection::const_iterator sctEnd = (*sctCollItr)->end();
144 for(; sctItr!=sctEnd; ++sctItr){
145
146
147 if(prd_to_track_map->
isUsed(*(*sctItr)))
continue;
148
149
150 PRDAssociation->nSCTUA++;
151
152
153 const InDetDD::SiDetectorElement *
det = (*sctItr)->detectorElement();
154
155
156 if(
det->isBarrel()) PRDAssociation->nSCTBarrelUA++;
157
158
160 if((*sctItr)->globalPosition().z()<0){
161 PRDAssociation->nSCTEndCapCUA++;
162 }else{
163 PRDAssociation->nSCTEndCapAUA++;
164 }
165 }
166 }
167 }
168 }
169
170
173 if(!TRTDriftCircles.isValid()) {
175 return nullptr;
176 }
177
178 InDet::TRT_DriftCircleContainer::const_iterator trtCollItr = TRTDriftCircles->begin();
179 InDet::TRT_DriftCircleContainer::const_iterator trtCollEnd = TRTDriftCircles->end();
180 for(; trtCollItr!=trtCollEnd; ++trtCollItr){
181
182 InDet::TRT_DriftCircleCollection::const_iterator trtItr = (*trtCollItr)->begin();
183 InDet::TRT_DriftCircleCollection::const_iterator trtEnd = (*trtCollItr)->end();
184 for(; trtItr!=trtEnd; ++trtItr){
185
186
187 if(prd_to_track_map->
isUsed(*(*trtItr)))
continue;
188
189
190 PRDAssociation->nTRTUA++;
191
192
193 const InDetDD::TRT_BaseElement *
det = (*trtItr)->detectorElement();
194
196
197
199
200
202 if(
det->center().z()<0){
203 PRDAssociation->nTRTEndCapCUA++;
204 }else{
205 PRDAssociation->nTRTEndCapAUA++;
206 }
207 }
208 }
209 }
210 }
211
212 return PRDAssociation.release();
213}
bool isUsed(const PrepRawData &prd) const
does this PRD belong to at least one track?
::StatusCode StatusCode
StatusCode definition for legacy code.