57 return StatusCode::SUCCESS;
70 cellContainer = caloCells.
cptr();
77 clusterContainer = caloClusters.
cptr();
94 std::vector<SG::WriteDecorHandle<xAOD::MuonContainer, float>> larEnergyInCones;
96 larEnergyInCones.emplace_back(
key, ctx);
99 std::map<const xAOD::IParticle*, std::vector<const CaloCell*>> muonCellsMap;
103 std::vector<const CaloCell*>
cells;
105 std::vector< float > cells_mu_x;
106 std::vector< float > cells_mu_y;
107 std::vector< float > cells_mu_z;
108 std::vector< float > cells_mu_eta;
109 std::vector< float > cells_mu_phi;
111 std::vector< float > cells_to_mu_dx;
112 std::vector< float > cells_to_mu_dy;
113 std::vector< float > cells_to_mu_dz;
114 std::vector< float > cells_to_mu_deta;
115 std::vector< float > cells_to_mu_dphi;
117 std::vector< float > cells_mu_dx;
118 std::vector< float > cells_mu_dedx;
119 std::vector< float > lar_energy_in_cones;
126 selected_mu(*
mu) = 0;
132 if (mu_track && mu_cluster && mu_cluster->
getCellLinks()) {
134 float e_trk_in_isocone(0.0);
135 std::vector<const xAOD::TrackParticle*> tracks_in_cone;
138 if (
track != mu_track) e_trk_in_isocone +=
track->e();
141 econe_mu(*
mu) = e_trk_in_isocone;
144 selected_mu(*
mu) = 0;
148 selected_mu(*
mu) = 1;
151 bool addAdditionalGapCrackCells =
false;
156 addAdditionalGapCrackCells =
true;
163 if (addAdditionalGapCrackCells) {
165 if (coordinates.size() == 5 ) {
166 double eta = coordinates[3];
167 double phi = coordinates[4];
182 std::vector<double> coordinates =
m_trackInCalo->getXYZEtaPhiInCellSampling(mu_track,
cell);
184 if (coordinates.size() == 5 ) {
187 cells_mu_dx.push_back( path_length );
188 cells_mu_dedx.push_back( (path_length > 0 ? (
cell->energy() / path_length) : -1.0) );
190 cells_mu_x.push_back(coordinates[0]);
191 cells_mu_y.push_back(coordinates[1]);
192 cells_mu_z.push_back(coordinates[2]);
193 cells_mu_eta.push_back(coordinates[3]);
194 cells_mu_phi.push_back(coordinates[4]);
196 cells_to_mu_dx.push_back(
cell->x() - coordinates[0]);
197 cells_to_mu_dy.push_back(
cell->y() - coordinates[1]);
198 cells_to_mu_dz.push_back(
cell->z() - coordinates[2]);
199 cells_to_mu_deta.push_back(
cell->eta() - coordinates[3]);
204 cells_mu_dx.push_back( 0.0 );
205 cells_mu_dedx.push_back( -2.0 );
207 cells_mu_x.push_back(0.0);
208 cells_mu_y.push_back(0.0);
209 cells_mu_z.push_back(0.0);
210 cells_mu_eta.push_back(0.0);
211 cells_mu_phi.push_back(0.0);
213 cells_to_mu_dx.push_back(0.0);
214 cells_to_mu_dy.push_back(0.0);
215 cells_to_mu_dz.push_back(0.0);
216 cells_to_mu_deta.push_back(0.0);
217 cells_to_mu_dphi.push_back(0.0);
224 if (clusterContainer) {
229 selected_mu(*
mu) = 0;
232 cellsMuonX(*
mu) = std::move(cells_mu_x);
233 cellsMuonY(*
mu) = std::move(cells_mu_y);
234 cellsMuonZ(*
mu) = std::move(cells_mu_z);
235 cellsMuonEta(*
mu) = std::move(cells_mu_eta);
236 cellsMuonPhi(*
mu) = std::move(cells_mu_phi);
237 cellsToMuonDx(*
mu) = std::move(cells_to_mu_dx);
238 cellsToMuonDy(*
mu) = std::move(cells_to_mu_dy);
239 cellsToMuonDz(*
mu) = std::move(cells_to_mu_dz);
240 cellsToMuonDeta(*
mu) = std::move(cells_to_mu_deta);
241 cellsToMuonDphi(*
mu) = std::move(cells_to_mu_dphi);
242 cellsMuonDx(*
mu) = std::move(cells_mu_dx);
243 cellsMuonDeDx(*
mu) = std::move(cells_mu_dedx);
245 for (
unsigned int icone = 0; icone < larEnergyInCones.size(); ++icone) {
246 larEnergyInCones[icone](*mu) = std::move(lar_energy_in_cones[icone]);
253 return StatusCode::SUCCESS;