92 return StatusCode::SUCCESS;
105 cellContainer = caloCells.
cptr();
112 clusterContainer = caloClusters.
cptr();
129 std::vector<SG::WriteDecorHandle<xAOD::MuonContainer, float>> larEnergyInCones;
131 larEnergyInCones.emplace_back(
key, ctx);
134 std::map<const xAOD::IParticle*, std::vector<const CaloCell*>> muonCellsMap;
138 std::vector<const CaloCell*>
cells;
140 std::vector< float > cells_mu_x;
141 std::vector< float > cells_mu_y;
142 std::vector< float > cells_mu_z;
143 std::vector< float > cells_mu_eta;
144 std::vector< float > cells_mu_phi;
146 std::vector< float > cells_to_mu_dx;
147 std::vector< float > cells_to_mu_dy;
148 std::vector< float > cells_to_mu_dz;
149 std::vector< float > cells_to_mu_deta;
150 std::vector< float > cells_to_mu_dphi;
152 std::vector< float > cells_mu_dx;
153 std::vector< float > cells_mu_dedx;
154 std::vector< float > lar_energy_in_cones;
161 selected_mu(*
mu) = 0;
167 if (mu_track && mu_cluster && mu_cluster->
getCellLinks()) {
169 float e_trk_in_isocone(0.0);
170 std::vector<const xAOD::TrackParticle*> tracks_in_cone;
173 if (
track != mu_track) e_trk_in_isocone +=
track->e();
176 econe_mu(*
mu) = e_trk_in_isocone;
179 selected_mu(*
mu) = 0;
183 selected_mu(*
mu) = 1;
186 bool addAdditionalGapCrackCells =
false;
191 addAdditionalGapCrackCells =
true;
198 if (addAdditionalGapCrackCells) {
200 if (coordinates.size() == 5 ) {
201 double eta = coordinates[3];
202 double phi = coordinates[4];
217 std::vector<double> coordinates =
m_trackInCalo->getXYZEtaPhiInCellSampling(mu_track,
cell);
219 if (coordinates.size() == 5 ) {
222 cells_mu_dx.push_back( path_length );
223 cells_mu_dedx.push_back( (path_length > 0 ? (
cell->energy() / path_length) : -1.0) );
225 cells_mu_x.push_back(coordinates[0]);
226 cells_mu_y.push_back(coordinates[1]);
227 cells_mu_z.push_back(coordinates[2]);
228 cells_mu_eta.push_back(coordinates[3]);
229 cells_mu_phi.push_back(coordinates[4]);
231 cells_to_mu_dx.push_back(
cell->x() - coordinates[0]);
232 cells_to_mu_dy.push_back(
cell->y() - coordinates[1]);
233 cells_to_mu_dz.push_back(
cell->z() - coordinates[2]);
234 cells_to_mu_deta.push_back(
cell->eta() - coordinates[3]);
239 cells_mu_dx.push_back( 0.0 );
240 cells_mu_dedx.push_back( -2.0 );
242 cells_mu_x.push_back(0.0);
243 cells_mu_y.push_back(0.0);
244 cells_mu_z.push_back(0.0);
245 cells_mu_eta.push_back(0.0);
246 cells_mu_phi.push_back(0.0);
248 cells_to_mu_dx.push_back(0.0);
249 cells_to_mu_dy.push_back(0.0);
250 cells_to_mu_dz.push_back(0.0);
251 cells_to_mu_deta.push_back(0.0);
252 cells_to_mu_dphi.push_back(0.0);
259 if (clusterContainer) {
264 selected_mu(*
mu) = 0;
267 cellsMuonX(*
mu) = std::move(cells_mu_x);
268 cellsMuonY(*
mu) = std::move(cells_mu_y);
269 cellsMuonZ(*
mu) = std::move(cells_mu_z);
270 cellsMuonEta(*
mu) = std::move(cells_mu_eta);
271 cellsMuonPhi(*
mu) = std::move(cells_mu_phi);
272 cellsToMuonDx(*
mu) = std::move(cells_to_mu_dx);
273 cellsToMuonDy(*
mu) = std::move(cells_to_mu_dy);
274 cellsToMuonDz(*
mu) = std::move(cells_to_mu_dz);
275 cellsToMuonDeta(*
mu) = std::move(cells_to_mu_deta);
276 cellsToMuonDphi(*
mu) = std::move(cells_to_mu_dphi);
277 cellsMuonDx(*
mu) = std::move(cells_mu_dx);
278 cellsMuonDeDx(*
mu) = std::move(cells_mu_dedx);
280 for (
unsigned int icone = 0; icone < larEnergyInCones.size(); ++icone) {
281 larEnergyInCones[icone](*mu) = std::move(lar_energy_in_cones[icone]);
288 return StatusCode::SUCCESS;