65 if (evtStore()->
retrieve(TrackRecordColl, CollNameItr).isSuccess()) break ;
69 if (TrackRecordColl == NULL ) {
71 return StatusCode::RECOVERABLE;
78 DataVect rhoVertex; rhoVertex.reserve(TrackRecordColl->
size());
79 DataVect phiVertex; phiVertex.reserve(TrackRecordColl->
size());
80 DataVect zVertex; zVertex.reserve(TrackRecordColl->
size());
85 for (
const auto & record : *TrackRecordColl ) {
88 int pdgCode = record.GetPDGCode();
91 if (abs(pdgCode) != 13) {
92 ATH_MSG_DEBUG(
"Reject non-muon track with PDG ID " << pdgCode );
97 HepGeom::Point3D<double> vertex = record.GetPosition();
98 HepGeom::Vector3D<double> momentum = record.GetMomentum();
101 pt.emplace_back( momentum.perp()/CLHEP::GeV );
102 phi.emplace_back( momentum.phi() < 0 ? momentum.phi() + 2*
M_PI : momentum.phi() );
103 eta.emplace_back( momentum.pseudoRapidity() );
104 rhoVertex.emplace_back( vertex.perp()*CLHEP::mm/CLHEP::cm );
105 phiVertex.emplace_back( vertex.phi() < 0 ? vertex.phi() + 2*
M_PI : vertex.phi() );
106 zVertex.emplace_back( vertex.z()*CLHEP::mm/CLHEP::cm );
107 code.emplace_back( pdgCode );
113 const auto nEntries = pt.size();
114 dataMap[
"pt"] = std::move(pt);
115 dataMap[
"phi"] = std::move(
phi);
116 dataMap[
"eta"] = std::move(
eta);
117 dataMap[
"rhoVertex"] = std::move(rhoVertex);
118 dataMap[
"phiVertex"] = std::move(phiVertex);
119 dataMap[
"zVertex"] = std::move(zVertex);
120 dataMap[
"code"] = std::move(code);
121 dataMap[
"id"] = std::move(
id);
130 std::string emptyStr=
"";
131 return FormatTool->AddToEvent(
dataTypeName(), emptyStr, &dataMap);