147 auto result = std::make_unique<std::vector<Trackster>>();
148 auto mergedTrackstersTRK = std::make_unique<std::vector<Trackster>>();
151 std::vector<bool> usedTrackstersEM;
152 std::vector<bool> usedTrackstersTRK;
153 std::vector<bool> usedTrackstersHAD;
154 std::vector<bool> usedSeeds;
158 const auto &
tracks = *track_h;
162 const auto &layerClusters = *cluster_h;
166 const auto &trackstersEM = *trackstersem_h;
167 usedTrackstersEM.resize(trackstersEM.size(),
false);
171 const auto &trackstersTRK = *tracksterstrk_h;
172 usedTrackstersTRK.resize(trackstersTRK.size(),
false);
176 const auto &trackstersHAD = *trackstershad_h;
177 usedTrackstersHAD.resize(trackstersHAD.size(),
false);
181 const auto &seedingTrk = *seedingTrk_h;
182 usedSeeds.resize(seedingTrk.size(),
false);
184 fillTile(tracksterTile, trackstersEM, TracksterIterIndex::EM);
185 fillTile(tracksterTile, trackstersTRK, TracksterIterIndex::TRK);
186 fillTile(tracksterTile, trackstersHAD, TracksterIterIndex::HAD);
189 for (
auto const &
s : seedingTrk) {
194 <<
"Seed index: " << seedId <<
" internal index: " <<
s.index <<
" origin: " <<
s.origin
195 <<
" mom: " <<
s.directionAtOrigin <<
" pt: " <<
std::sqrt(
s.directionAtOrigin.perp2())
196 <<
" zSide: " <<
s.zSide <<
" collectionID: " <<
s.collectionID <<
" track pt " <<
tracks[
s.index].pt()
207 int tracksterTRK_idx = 0;
208 int tracksterHAD_idx = 0;
210 for (
auto const &
t : trackstersTRK) {
212 int entryEtaBin = tracksterTile[TracksterIterIndex::TRK].etaBin(
t.barycenter().eta());
213 int entryPhiBin = tracksterTile[TracksterIterIndex::TRK].phiBin(
t.barycenter().phi());
214 int bin = tracksterTile[TracksterIterIndex::TRK].globalBin(
t.barycenter().eta(),
t.barycenter().phi());
216 <<
"TrackstersMergeProducer Tracking obj: " <<
t.barycenter() <<
" in bin " <<
bin <<
" etaBin "
217 << entryEtaBin <<
" phiBin " << entryPhiBin << std::endl;
222 auto diff_pt =
t.raw_pt() - trk_pt;
224 auto w_cal = 1. / (pt_err * pt_err);
225 auto w_trk = 1. / (
track.ptError() *
track.ptError());
226 auto diff_pt_sigmas = diff_pt / pt_err;
227 auto e_over_h = (
t.raw_em_pt() / ((
t.raw_pt() -
t.raw_em_pt()) != 0. ? (
t.raw_pt() -
t.raw_em_pt()) : 1.));
229 <<
"trackster_pt: " <<
t.raw_pt() << std::endl
230 <<
"track pt (inner): " <<
track.pt() << std::endl
231 <<
"track eta (inner): " <<
track.eta() << std::endl
232 <<
"track _phi (inner): " <<
track.phi() << std::endl
233 <<
"track pt (outer): " <<
std::sqrt(
track.outerMomentum().perp2()) << std::endl
234 <<
"track eta (outer): " <<
track.outerMomentum().eta() << std::endl
235 <<
"track _phi (outer): " <<
track.outerMomentum().phi() << std::endl
236 <<
"pt_err_track: " <<
track.ptError() << std::endl
237 <<
"diff_pt: " << diff_pt << std::endl
238 <<
"pt_err: " << pt_err << std::endl
239 <<
"diff_pt_sigmas: " << diff_pt_sigmas << std::endl
240 <<
"w_cal: " << w_cal << std::endl
241 <<
"w_trk: " << w_trk << std::endl
242 <<
"average_pt: " << (
t.raw_pt() * w_cal + trk_pt * w_trk) / (w_cal + w_trk) << std::endl
243 <<
"e_over_h: " << e_over_h << std::endl;
249 auto gamma_pt =
std::min(diff_pt,
t.raw_em_pt());
252 <<
" Creating a photon from TRK Trackster with energy " << gamma_pt <<
" and direction "
253 <<
t.eigenvectors(0).eta() <<
", " <<
t.eigenvectors(0).phi() << std::endl;
258 <<
" Adding also a neutral hadron from TRK Trackster with energy " << diff_pt <<
" and direction "
259 <<
t.eigenvectors(0).eta() <<
", " <<
t.eigenvectors(0).phi() << std::endl;
264 <<
" Creating a neutral hadron from TRK Trackster with energy " << diff_pt <<
" and direction "
265 <<
t.eigenvectors(0).eta() <<
", " <<
t.eigenvectors(0).phi() << std::endl;
275 auto average_pt = (w_cal *
t.raw_pt() + trk_pt * w_trk) / (w_cal + w_trk);
277 <<
" Creating electron/charged hadron from TRK Trackster with weighted p_t " << average_pt
278 <<
" and direction " <<
track.eta() <<
", " <<
track.phi() << std::endl;
286 <<
" Creating electron/charged hadron from TRK Trackster with track p_t " << trk_pt <<
" and direction "
287 <<
track.eta() <<
", " <<
track.phi() << std::endl;
290 usedTrackstersTRK[tracksterTRK_idx] =
true;
295 tracksterTRK_idx = 0;
296 for (
auto const &
t : trackstersTRK) {
298 LogDebug(
"TrackstersMergeProducer") <<
" Considering trackster " << tracksterTRK_idx
299 <<
" as used: " << usedTrackstersTRK[tracksterTRK_idx] << std::endl;
301 if (!usedTrackstersTRK[tracksterTRK_idx]) {
303 <<
" Creating a charge hadron from TRK Trackster with track energy " <<
t.raw_energy() <<
" and direction "
304 <<
t.eigenvectors(0).eta() <<
", " <<
t.eigenvectors(0).phi() << std::endl;
310 auto tracksterEM_idx = 0;
311 for (
auto const &
t : trackstersEM) {
313 LogDebug(
"TrackstersMergeProducer") <<
" Considering trackster " << tracksterEM_idx
314 <<
" as used: " << usedTrackstersEM[tracksterEM_idx] << std::endl;
316 if (!usedTrackstersEM[tracksterEM_idx]) {
318 <<
" Creating a photon from EM Trackster with track energy " <<
t.raw_energy() <<
" and direction "
319 <<
t.eigenvectors(0).eta() <<
", " <<
t.eigenvectors(0).phi() << std::endl;
325 tracksterHAD_idx = 0;
326 for (
auto const &
t : trackstersHAD) {
328 LogDebug(
"TrackstersMergeProducer") <<
" Considering trackster " << tracksterHAD_idx
329 <<
" as used: " << usedTrackstersHAD[tracksterHAD_idx] << std::endl;
331 if (!usedTrackstersHAD[tracksterHAD_idx]) {
333 <<
" Creating a neutral hadron from HAD Trackster with track energy " <<
t.raw_energy() <<
" and direction "
334 <<
t.eigenvectors(0).eta() <<
", " <<
t.eigenvectors(0).phi() << std::endl;