122 {
123
125
127
130 if(
sc.isFailure() || !vtxTES ) {
132 return StatusCode::SUCCESS;
133 }
134
136
137 const Rec::TrackParticleContainer* tpbTES=nullptr;
139
142 if(
sc.isFailure() || !tpbTES ) {
144 return StatusCode::SUCCESS;
145 }
146 ATH_MSG_DEBUG(
"TrackParticleCandidate Collection successfully retrieved");
147 }
148 else {
150 if(
sc.isFailure() || !trkTES ) {
152 return StatusCode::SUCCESS;
153 }
154 ATH_MSG_DEBUG(
"TrackParticleCandidate Collection successfully retrieved");
155 }
156
157 std::map<std::string,TrackCollection*> trackmap;
158 std::map<std::string,Trk::TrackParticleBaseCollection*> tpbmap;
159
160
161
164 trackmap[thisKey] = tempTracks;
166
167 } else {
169 }
170 }
171
174 tpbmap[thisKey] = tempTpbs;
177 } else {
179 }
180 }
181
183
184 for (const Rec::TrackParticle* tpb: *tpbTES){
186 bool trackmatched = false;
187
188
190
191 int i_vtx = 0;
192
193
194
195 std::stringstream sss;
196 std::string oeNameString;
197 oeNameString.reserve(20);
198 for (const Trk::VxCandidate* vtx : *vtxTES){
200 i_vtx++;
201 const std::vector<Trk::VxTrackAtVertex*> & vertexTracks = *vtx->vxTrackAtVertex();
202 ATH_MSG_DEBUG(
"parent vertex has "<<vertexTracks.size()<<
" tracks, at position: "<<vtx->recVertex().position().x());
203 std::vector<Trk::VxTrackAtVertex*>::const_iterator tavI = vertexTracks.begin();
204 std::vector<Trk::VxTrackAtVertex*>::const_iterator tavIe= vertexTracks.end();
205 for (; tavI != tavIe; ++tavI){
207 if (trkPerigee == vxTrkPerigee) {trackmatched = true;}
208 }
209 Trk::TrackParticleBase *trkCopy1 = new Trk::TrackParticleBase((*tpb));
210 Trk::TrackParticleBase *trkCopy2 = new Trk::TrackParticleBase((*tpb));
211 if (!trackmatched){
212 oeNameString.clear();
215 sss.str("");
217 std::string oecontainerName = sss.str();
218 std::string allNameString = "all";
219 sss.str("");
221 std::string allcontainerName = sss.str();
222 ATH_MSG_DEBUG(
"found an unmatched trackparticlebase, giving it the key: "<< oecontainerName);
223 tpbmap[oecontainerName]->push_back(trkCopy1);
224 ATH_MSG_DEBUG(
"found an unmatched trackparticlebase, giving it the key: "<< allcontainerName);
225 tpbmap[allcontainerName]->push_back(trkCopy2);
229 }
230 if (trackmatched){
231 oeNameString.clear();
234 sss.str("");
236 std::string oecontainerName = sss.str();
237 std::string allNameString = "all";
238 sss.str("");
240 std::string allcontainerName = sss.str();
241 ATH_MSG_DEBUG(
"found a matched trackparticlebase, giving it the key: "<< oecontainerName);
242 tpbmap[oecontainerName]->push_back(trkCopy1);
243 ATH_MSG_DEBUG(
"found a matched trackparticlebase, giving it the key: "<< allcontainerName);
244 tpbmap[allcontainerName]->push_back(trkCopy2);
248 }
249 }
250 }
251 }
252 }
256
257 for (; trkItr != trkItrE; ++trkItr){
258 const Trk::Perigee* trkPerigee = (*trkItr)->perigeeParameters();
259 bool trackmatched = false;
260
261
264
266
267 int i_vtx = 0;
268
269
270
271 std::stringstream sss;
272 std::string oeNameString;
273 oeNameString.reserve(20);
274 for (; vtxItr != vtxItrE; ++vtxItr){
276 i_vtx++;
277 const std::vector<Trk::VxTrackAtVertex*> & vertexTracks = (*(*vtxItr)->vxTrackAtVertex());
278 ATH_MSG_DEBUG(
"parent vertex has "<<vertexTracks.size()<<
" tracks, at position: "<<(*vtxItr)->recVertex().position().x());
279 std::vector<Trk::VxTrackAtVertex*>::const_iterator tavI = vertexTracks.begin();
280 std::vector<Trk::VxTrackAtVertex*>::const_iterator tavIe= vertexTracks.end();
281 for (; tavI != tavIe; ++tavI){
283 if (trkPerigee == vxTrkPerigee) {trackmatched = true;}
284 }
285 Trk::Track *trkCopy1 = new Trk::Track((*(*trkItr)));
286 Trk::Track *trkCopy2 = new Trk::Track((*(*trkItr)));
287 if (!trackmatched){
288 oeNameString.clear();
291 sss.str("");
293 std::string oecontainerName = sss.str();
294 std::string allNameString = "all";
295 sss.str("");
297 std::string allcontainerName = sss.str();
298 ATH_MSG_DEBUG(
"found an unmatched track, giving it the key: "<< oecontainerName);
299 trackmap[oecontainerName]->push_back(trkCopy1);
300 ATH_MSG_DEBUG(
"found an unmatched track, giving it the key: "<< allcontainerName);
301 trackmap[allcontainerName]->push_back(trkCopy2);
305 }
306 if (trackmatched){
307 oeNameString.clear();
310 sss.str("");
312 std::string oecontainerName = sss.str();
313 std::string allNameString = "all";
314 sss.str("");
316 std::string allcontainerName = sss.str();
317 ATH_MSG_DEBUG(
"found a matched track, giving it the key: "<< oecontainerName);
318 trackmap[oecontainerName]->push_back(trkCopy1);
319 ATH_MSG_DEBUG(
"found a matched track, giving it the key: "<< allcontainerName);
320 trackmap[allcontainerName]->push_back(trkCopy2);
324 }
325 }
326 }
327 }
328 }
331 if(
evtStore()->record(tpbmap[key],key,
false).isFailure() ){
333 }
334 }
335 } else {
337 if(
evtStore()->record(trackmap[key],key,
false).isFailure() ){
339 }
340 }
341 }
344 return StatusCode::SUCCESS;
345}
#define ATH_MSG_WARNING(x)
DataVector< Trk::Track > TrackCollection
This typedef represents a collection of Trk::Track objects.
Athena::TPCnvVers::Old VxContainer
ServiceHandle< StoreGateSvc > & evtStore()
DataModel_detail::const_iterator< DataVector > const_iterator
size_type size() const noexcept
Returns the number of elements in the collection.
bool contains(const std::string &s, const std::string ®x)
does a string contain the substring
ParametersT< TrackParametersDim, Charged, PerigeeSurface > Perigee
DataVector< TrackParticleBase > TrackParticleBaseCollection
ParametersBase< TrackParametersDim, Charged > TrackParameters
retrieve(aClass, aKey=None)