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;
122 (mu->muonType() != xAOD::Muon::Combined
126 selected_mu(*mu) = 0;
130 const xAOD::TrackParticle* mu_track = mu->trackParticle(xAOD::Muon::InnerDetectorTrackParticle);
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;
152 for (
const CaloCell* cell : *mu_cluster) {
155 if (cellContainer && (cell_dde->
getSampling() == CaloCell_ID::TileGap3)) {
156 addAdditionalGapCrackCells =
true;
159 cells.push_back(cell);
163 if (addAdditionalGapCrackCells) {
164 std::vector<double> coordinates =
m_trackInCalo->getXYZEtaPhiInCellSampling(mu_track, CaloCell_ID::TileGap3);
165 if (coordinates.size() == 5 ) {
166 double eta = coordinates[3];
167 double phi = coordinates[4];
168 for (
const CaloCell* cell : *cellContainer) {
170 if (cell_dde->
getSampling() == CaloCell_ID::TileGap3) {
173 cells.push_back(cell);
180 for (
const CaloCell* cell : cells) {
182 std::vector<double> coordinates =
m_trackInCalo->getXYZEtaPhiInCellSampling(mu_track, cell);
184 if (coordinates.size() == 5 ) {
186 float path_length =
m_trackInCalo->getPathInsideCell(mu_track, cell);
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);
222 muonCellsMap[mu] = cells;
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 if (!larEnergyInCones.empty() && lar_energy_in_cones.empty()) {
246 lar_energy_in_cones.resize(larEnergyInCones.size(), 0.F);
249 for (
unsigned int icone = 0; icone < larEnergyInCones.size(); ++icone) {
250 larEnergyInCones[icone](*mu) = lar_energy_in_cones[icone];
257 return StatusCode::SUCCESS;
virtual double phi() const override final
The azimuthal angle ( ) of the particle (has range to .)
virtual double eta() const override final
The pseudorapidity ( ) of the particle.
virtual double e() const override final
The total energy of the particle.