92 return StatusCode::SUCCESS;
97 const EventContext& ctx = Gaudi::Hive::currentContext();
106 cellContainer = caloCells.
cptr();
113 clusterContainer = caloClusters.
cptr();
130 std::vector<SG::WriteDecorHandle<xAOD::MuonContainer, float>> larEnergyInCones;
132 larEnergyInCones.emplace_back(
key, ctx);
135 std::map<const xAOD::IParticle*, std::vector<const CaloCell*>> muonCellsMap;
139 std::vector<const CaloCell*>
cells;
141 std::vector< float > cells_mu_x;
142 std::vector< float > cells_mu_y;
143 std::vector< float > cells_mu_z;
144 std::vector< float > cells_mu_eta;
145 std::vector< float > cells_mu_phi;
147 std::vector< float > cells_to_mu_dx;
148 std::vector< float > cells_to_mu_dy;
149 std::vector< float > cells_to_mu_dz;
150 std::vector< float > cells_to_mu_deta;
151 std::vector< float > cells_to_mu_dphi;
153 std::vector< float > cells_mu_dx;
154 std::vector< float > cells_mu_dedx;
155 std::vector< float > lar_energy_in_cones;
162 selected_mu(*
mu) = 0;
168 if (mu_track && mu_cluster && mu_cluster->
getCellLinks()) {
170 float e_trk_in_isocone(0.0);
171 std::vector<const xAOD::TrackParticle*> tracks_in_cone;
174 if (
track != mu_track) e_trk_in_isocone +=
track->e();
177 econe_mu(*
mu) = e_trk_in_isocone;
180 selected_mu(*
mu) = 0;
184 selected_mu(*
mu) = 1;
187 bool addAdditionalGapCrackCells =
false;
192 addAdditionalGapCrackCells =
true;
199 if (addAdditionalGapCrackCells) {
201 if (coordinates.size() == 5 ) {
202 double eta = coordinates[3];
203 double phi = coordinates[4];
218 std::vector<double> coordinates =
m_trackInCalo->getXYZEtaPhiInCellSampling(mu_track,
cell);
220 if (coordinates.size() == 5 ) {
223 cells_mu_dx.push_back( path_length );
224 cells_mu_dedx.push_back( (path_length > 0 ? (
cell->energy() / path_length) : -1.0) );
226 cells_mu_x.push_back(coordinates[0]);
227 cells_mu_y.push_back(coordinates[1]);
228 cells_mu_z.push_back(coordinates[2]);
229 cells_mu_eta.push_back(coordinates[3]);
230 cells_mu_phi.push_back(coordinates[4]);
232 cells_to_mu_dx.push_back(
cell->x() - coordinates[0]);
233 cells_to_mu_dy.push_back(
cell->y() - coordinates[1]);
234 cells_to_mu_dz.push_back(
cell->z() - coordinates[2]);
235 cells_to_mu_deta.push_back(
cell->eta() - coordinates[3]);
240 cells_mu_dx.push_back( 0.0 );
241 cells_mu_dedx.push_back( -2.0 );
243 cells_mu_x.push_back(0.0);
244 cells_mu_y.push_back(0.0);
245 cells_mu_z.push_back(0.0);
246 cells_mu_eta.push_back(0.0);
247 cells_mu_phi.push_back(0.0);
249 cells_to_mu_dx.push_back(0.0);
250 cells_to_mu_dy.push_back(0.0);
251 cells_to_mu_dz.push_back(0.0);
252 cells_to_mu_deta.push_back(0.0);
253 cells_to_mu_dphi.push_back(0.0);
260 if (clusterContainer) {
265 selected_mu(*
mu) = 0;
268 cellsMuonX(*
mu) = std::move(cells_mu_x);
269 cellsMuonY(*
mu) = std::move(cells_mu_y);
270 cellsMuonZ(*
mu) = std::move(cells_mu_z);
271 cellsMuonEta(*
mu) = std::move(cells_mu_eta);
272 cellsMuonPhi(*
mu) = std::move(cells_mu_phi);
273 cellsToMuonDx(*
mu) = std::move(cells_to_mu_dx);
274 cellsToMuonDy(*
mu) = std::move(cells_to_mu_dy);
275 cellsToMuonDz(*
mu) = std::move(cells_to_mu_dz);
276 cellsToMuonDeta(*
mu) = std::move(cells_to_mu_deta);
277 cellsToMuonDphi(*
mu) = std::move(cells_to_mu_dphi);
278 cellsMuonDx(*
mu) = std::move(cells_mu_dx);
279 cellsMuonDeDx(*
mu) = std::move(cells_mu_dedx);
281 for (
unsigned int icone = 0; icone < larEnergyInCones.size(); ++icone) {
282 larEnergyInCones[icone](*mu) = std::move(lar_energy_in_cones[icone]);
289 return StatusCode::SUCCESS;