48 #include "Math/Transform3D.h"
74 : orig(_orig), idx_block(_idx_block), idx_elem(_idx_elem){};
79 for (
unsigned int i = 0;
i < vec.size();
i++) {
80 const auto& elem = vec.at(
i);
82 const auto& ref = elem.orig.trackRef();
83 if (ref.isNonnull() && ref->extra().isNonnull()) {
84 if (ref.key() ==
r.key()) {
96 for (
const auto& rh :
rechits) {
97 for (
const auto& sh :
simhits) {
98 if (rh.first == sh.first) {
100 ret += rh.second * sh.second;
123 void endJob()
override;
128 pair<vector<ElementWithIndex>, vector<tuple<int, int, float>>> processBlocks(
129 const std::vector<reco::PFBlock>& pfBlocks);
131 void associateClusterToSimCluster(
const vector<ElementWithIndex>& all_elements);
133 void clearVariables();
281 tracks_recotosim_ = consumes<reco::RecoToSimCollection>(
edm::InputTag(
"trackingParticleRecoTrackAsssociation"));
282 trackingParticles_ = consumes<edm::View<TrackingParticle>>(
edm::InputTag(
"mix",
"MergedTrackTruth"));
283 caloParticles_ = consumes<edm::View<CaloParticle>>(
edm::InputTag(
"mix",
"MergedCaloTruth"));
284 genParticles_ = consumes<std::vector<reco::GenParticle>>(
edm::InputTag(
"genParticles"));
285 pfBlocks_ = consumes<std::vector<reco::PFBlock>>(
edm::InputTag(
"particleFlowBlock"));
286 pfCandidates_ = consumes<std::vector<reco::PFCandidate>>(
edm::InputTag(
"particleFlow"));
287 tracks_ = consumes<edm::View<reco::Track>>(
edm::InputTag(
"generalTracks"));
290 geometryToken_ = esConsumes<CaloGeometry, CaloGeometryRecord>(
edm::ESInputTag{});
291 topologyToken_ = esConsumes<HcalTopology, HcalRecNumberingRecord>(
edm::ESInputTag{});
295 fs->
make<TH1F>(
"total",
"total", 100, 0, 5.);
297 t_ = fs->
make<TTree>(
"pftree",
"pftree");
300 t_->Branch(
"event", &ev_event_);
301 t_->Branch(
"lumi", &ev_lumi_);
302 t_->Branch(
"run", &ev_run_);
304 t_->Branch(
"trackingparticle_eta", &trackingparticle_eta_);
305 t_->Branch(
"trackingparticle_phi", &trackingparticle_phi_);
306 t_->Branch(
"trackingparticle_pt", &trackingparticle_pt_);
307 t_->Branch(
"trackingparticle_px", &trackingparticle_px_);
308 t_->Branch(
"trackingparticle_py", &trackingparticle_py_);
309 t_->Branch(
"trackingparticle_pz", &trackingparticle_pz_);
310 t_->Branch(
"trackingparticle_energy", &trackingparticle_energy_);
311 t_->Branch(
"trackingparticle_dvx", &trackingparticle_dvx_);
312 t_->Branch(
"trackingparticle_dvy", &trackingparticle_dvy_);
313 t_->Branch(
"trackingparticle_dvz", &trackingparticle_dvz_);
314 t_->Branch(
"trackingparticle_bx", &trackingparticle_bx_);
315 t_->Branch(
"trackingparticle_ev", &trackingparticle_ev_);
316 t_->Branch(
"trackingparticle_pid", &trackingparticle_pid_);
318 t_->Branch(
"simcluster_eta", &simcluster_eta_);
319 t_->Branch(
"simcluster_phi", &simcluster_phi_);
320 t_->Branch(
"simcluster_pt", &simcluster_pt_);
321 t_->Branch(
"simcluster_px", &simcluster_px_);
322 t_->Branch(
"simcluster_py", &simcluster_py_);
323 t_->Branch(
"simcluster_pz", &simcluster_pz_);
324 t_->Branch(
"simcluster_energy", &simcluster_energy_);
325 t_->Branch(
"simcluster_bx", &simcluster_bx_);
326 t_->Branch(
"simcluster_ev", &simcluster_ev_);
327 t_->Branch(
"simcluster_pid", &simcluster_pid_);
328 t_->Branch(
"simcluster_idx_trackingparticle", &simcluster_idx_trackingparticle_);
329 t_->Branch(
"simcluster_nhits", &simcluster_nhits_);
332 t_->Branch(
"simhit_frac", &simhit_frac_);
333 t_->Branch(
"simhit_x", &simhit_x_);
334 t_->Branch(
"simhit_y", &simhit_y_);
335 t_->Branch(
"simhit_z", &simhit_z_);
336 t_->Branch(
"simhit_det", &simhit_det_);
337 t_->Branch(
"simhit_subdet", &simhit_subdet_);
338 t_->Branch(
"simhit_eta", &simhit_eta_);
339 t_->Branch(
"simhit_phi", &simhit_phi_);
340 t_->Branch(
"simhit_idx_simcluster", &simhit_idx_simcluster_);
341 t_->Branch(
"simhit_detid", &simhit_detid_);
343 t_->Branch(
"rechit_e", &rechit_e_);
344 t_->Branch(
"rechit_x", &rechit_x_);
345 t_->Branch(
"rechit_y", &rechit_y_);
346 t_->Branch(
"rechit_z", &rechit_z_);
347 t_->Branch(
"rechit_det", &rechit_det_);
348 t_->Branch(
"rechit_subdet", &rechit_subdet_);
349 t_->Branch(
"rechit_eta", &rechit_eta_);
350 t_->Branch(
"rechit_phi", &rechit_phi_);
351 t_->Branch(
"rechit_idx_element", &rechit_idx_element_);
352 t_->Branch(
"rechit_detid", &rechit_detid_);
355 t_->Branch(
"simtrack_x", &simtrack_x_);
356 t_->Branch(
"simtrack_y", &simtrack_y_);
357 t_->Branch(
"simtrack_z", &simtrack_z_);
358 t_->Branch(
"simtrack_idx_simcluster_", &simtrack_idx_simcluster_);
359 t_->Branch(
"simtrack_pid", &simtrack_pid_);
361 t_->Branch(
"gen_eta", &gen_eta_);
362 t_->Branch(
"gen_phi", &gen_phi_);
363 t_->Branch(
"gen_pt", &gen_pt_);
364 t_->Branch(
"gen_px", &gen_px_);
365 t_->Branch(
"gen_py", &gen_py_);
366 t_->Branch(
"gen_pz", &gen_pz_);
367 t_->Branch(
"gen_energy", &gen_energy_);
368 t_->Branch(
"gen_charge", &gen_charge_);
369 t_->Branch(
"gen_pdgid", &gen_pdgid_);
370 t_->Branch(
"gen_status", &gen_status_);
371 t_->Branch(
"gen_daughters", &gen_daughters_);
374 t_->Branch(
"element_pt", &element_pt_);
375 t_->Branch(
"element_px", &element_px_);
376 t_->Branch(
"element_py", &element_py_);
377 t_->Branch(
"element_pz", &element_pz_);
378 t_->Branch(
"element_deltap", &element_deltap_);
379 t_->Branch(
"element_sigmadeltap", &element_sigmadeltap_);
380 t_->Branch(
"element_eta", &element_eta_);
381 t_->Branch(
"element_phi", &element_phi_);
382 t_->Branch(
"element_energy", &element_energy_);
383 t_->Branch(
"element_eta_ecal", &element_eta_ecal_);
384 t_->Branch(
"element_phi_ecal", &element_phi_ecal_);
385 t_->Branch(
"element_eta_hcal", &element_eta_hcal_);
386 t_->Branch(
"element_phi_hcal", &element_phi_hcal_);
387 t_->Branch(
"element_charge", &element_charge_);
388 t_->Branch(
"element_type", &element_type_);
389 t_->Branch(
"element_layer", &element_layer_);
390 t_->Branch(
"element_depth", &element_depth_);
391 t_->Branch(
"element_trajpoint", &element_trajpoint_);
392 t_->Branch(
"element_muon_dt_hits", &element_muon_dt_hits_);
393 t_->Branch(
"element_muon_csc_hits", &element_muon_csc_hits_);
396 t_->Branch(
"element_distance_i", &element_distance_i_);
397 t_->Branch(
"element_distance_j", &element_distance_j_);
398 t_->Branch(
"element_distance_d", &element_distance_d_);
400 t_->Branch(
"pfcandidate_eta", &pfcandidate_eta_);
401 t_->Branch(
"pfcandidate_phi", &pfcandidate_phi_);
402 t_->Branch(
"pfcandidate_pt", &pfcandidate_pt_);
403 t_->Branch(
"pfcandidate_px", &pfcandidate_px_);
404 t_->Branch(
"pfcandidate_py", &pfcandidate_py_);
405 t_->Branch(
"pfcandidate_pz", &pfcandidate_pz_);
406 t_->Branch(
"pfcandidate_energy", &pfcandidate_energy_);
407 t_->Branch(
"pfcandidate_pdgid", &pfcandidate_pdgid_);
410 t_->Branch(
"trackingparticle_to_element", &trackingparticle_to_element);
411 t_->Branch(
"simcluster_to_element", &simcluster_to_element);
412 t_->Branch(
"simcluster_to_element_cmp", &simcluster_to_element_cmp);
413 t_->Branch(
"element_to_candidate", &element_to_candidate);
423 trackingparticle_to_element.clear();
424 simcluster_to_element.clear();
425 simcluster_to_element_cmp.clear();
426 element_to_candidate.clear();
428 trackingparticle_eta_.clear();
429 trackingparticle_phi_.clear();
430 trackingparticle_pt_.clear();
431 trackingparticle_px_.clear();
432 trackingparticle_py_.clear();
433 trackingparticle_pz_.clear();
434 trackingparticle_energy_.clear();
435 trackingparticle_dvx_.clear();
436 trackingparticle_dvy_.clear();
437 trackingparticle_dvz_.clear();
438 trackingparticle_bx_.clear();
439 trackingparticle_ev_.clear();
440 trackingparticle_ovx_.clear();
441 trackingparticle_ovy_.clear();
442 trackingparticle_ovz_.clear();
443 trackingparticle_exx_.clear();
444 trackingparticle_exy_.clear();
445 trackingparticle_mother_.clear();
446 trackingparticle_pid_.clear();
448 simcluster_eta_.clear();
449 simcluster_phi_.clear();
450 simcluster_pt_.clear();
451 simcluster_energy_.clear();
452 simcluster_pid_.clear();
453 simcluster_detids_.clear();
454 simcluster_bx_.clear();
455 simcluster_ev_.clear();
456 simcluster_px_.clear();
457 simcluster_py_.clear();
458 simcluster_pz_.clear();
459 simcluster_idx_trackingparticle_.clear();
460 simcluster_nhits_.clear();
463 simhit_frac_.clear();
468 simhit_subdet_.clear();
471 simhit_idx_simcluster_.clear();
472 simhit_detid_.clear();
479 rechit_subdet_.clear();
482 rechit_idx_element_.clear();
483 rechit_detid_.clear();
489 simtrack_idx_simcluster_.clear();
490 simtrack_pid_.clear();
502 gen_daughters_.clear();
508 element_deltap_.clear();
509 element_sigmadeltap_.clear();
510 element_eta_.clear();
511 element_phi_.clear();
512 element_energy_.clear();
513 element_eta_ecal_.clear();
514 element_phi_ecal_.clear();
515 element_eta_hcal_.clear();
516 element_phi_hcal_.clear();
517 element_charge_.clear();
518 element_type_.clear();
519 element_layer_.clear();
520 element_depth_.clear();
521 element_trajpoint_.clear();
522 element_muon_dt_hits_.clear();
523 element_muon_csc_hits_.clear();
525 element_distance_i_.clear();
526 element_distance_j_.clear();
527 element_distance_d_.clear();
529 pfcandidate_eta_.clear();
530 pfcandidate_phi_.clear();
531 pfcandidate_pt_.clear();
532 pfcandidate_px_.clear();
533 pfcandidate_py_.clear();
534 pfcandidate_pz_.clear();
535 pfcandidate_energy_.clear();
536 pfcandidate_pdgid_.clear();
543 bool present =
false;
549 present = geom_sd->
present(
id);
561 auto& pG = iSetup.
getData(geometryToken_);
563 auto&
pT = iSetup.
getData(topologyToken_);
568 iEvent.getByToken(trackingParticles_, trackingParticlesHandle);
572 iEvent.getByToken(caloParticles_, caloParticlesHandle);
577 iEvent.getByToken(tracks_recotosim_, recotosimCollection);
578 const auto recotosim = *recotosimCollection;
581 iEvent.getByToken(tracks_, trackHandle);
585 iEvent.getByToken(genParticles_, genParticlesHandle);
586 for (std::vector<reco::GenParticle>::const_iterator it_p = genParticlesHandle->begin();
587 it_p != genParticlesHandle->end();
589 gen_eta_.push_back(it_p->eta());
590 gen_phi_.push_back(it_p->phi());
591 gen_pt_.push_back(it_p->pt());
592 gen_px_.push_back(it_p->px());
593 gen_py_.push_back(it_p->py());
594 gen_pz_.push_back(it_p->pz());
595 gen_energy_.push_back(it_p->energy());
596 gen_charge_.push_back(it_p->charge());
597 gen_pdgid_.push_back(it_p->pdgId());
598 gen_status_.push_back(it_p->status());
599 std::vector<int>
daughters(it_p->daughterRefVector().size(), 0);
600 for (
unsigned j = 0;
j < it_p->daughterRefVector().size(); ++
j) {
601 daughters[
j] = static_cast<int>(it_p->daughterRefVector().at(
j).key());
607 iEvent.getByToken(pfCandidates_, pfCandidatesHandle);
608 std::vector<reco::PFCandidate>
pfCandidates = *pfCandidatesHandle;
611 iEvent.getByToken(pfBlocks_, pfBlocksHandle);
612 std::vector<reco::PFBlock> pfBlocks = *pfBlocksHandle;
615 const auto& all_elements_distances = processBlocks(pfBlocks);
616 const auto& all_elements = all_elements_distances.first;
617 const auto& all_distances = all_elements_distances.second;
618 assert(!all_elements.empty());
620 for (
const auto&
d : all_distances) {
621 element_distance_i_.push_back(get<0>(
d));
622 element_distance_j_.push_back(get<1>(
d));
623 element_distance_d_.push_back(get<2>(
d));
629 const auto vec_idx_in_all_elements =
find_element_ref(all_elements, trackref);
632 if (vec_idx_in_all_elements.empty()) {
636 if (recotosim.find(trackref) != recotosim.end()) {
637 const auto& tps = recotosim[trackref];
638 for (
const auto&
tp : tps) {
640 for (
auto idx_in_all_elements : vec_idx_in_all_elements) {
641 trackingparticle_to_element.emplace_back(tpr.
key(), idx_in_all_elements);
649 int idx_simcluster = 0;
651 for (
unsigned long ncaloparticle = 0; ncaloparticle <
caloParticles.size(); ncaloparticle++) {
656 for (
const auto& simcluster :
cp.simClusters()) {
658 map<uint64_t, double> detid_energy;
660 simcluster_nhits_.push_back(
nhits);
661 simcluster_eta_.push_back(simcluster->p4().eta());
662 simcluster_phi_.push_back(simcluster->p4().phi());
663 simcluster_pt_.push_back(simcluster->p4().pt());
664 simcluster_energy_.push_back(simcluster->energy());
665 simcluster_pid_.push_back(simcluster->pdgId());
666 simcluster_bx_.push_back(simcluster->eventId().bunchCrossing());
667 simcluster_ev_.push_back(simcluster->eventId().event());
669 simcluster_px_.push_back(simcluster->p4().x());
670 simcluster_py_.push_back(simcluster->p4().y());
671 simcluster_pz_.push_back(simcluster->p4().z());
673 for (
const auto&
hf : simcluster->hits_and_fractions()) {
677 const auto&
pos = getHitPosition(
id);
680 const float x =
pos.x();
681 const float y =
pos.y();
682 const float z =
pos.z();
683 const float eta =
pos.eta();
684 const float phi =
pos.phi();
686 simhit_frac_.push_back(
hf.second);
687 simhit_x_.push_back(x);
688 simhit_y_.push_back(y);
689 simhit_z_.push_back(z);
690 simhit_det_.push_back(
id.det());
691 simhit_subdet_.push_back(
id.subdetId());
692 simhit_eta_.push_back(
eta);
693 simhit_phi_.push_back(phi);
694 simhit_idx_simcluster_.push_back(idx_simcluster);
695 simhit_detid_.push_back(
id.rawId());
696 detid_energy[
id.rawId()] +=
hf.second;
700 int simcluster_to_trackingparticle = -1;
701 for (
const auto& simtrack : simcluster->g4Tracks()) {
702 simtrack_x_.push_back(simtrack.trackerSurfacePosition().x());
703 simtrack_y_.push_back(simtrack.trackerSurfacePosition().y());
704 simtrack_z_.push_back(simtrack.trackerSurfacePosition().z());
705 simtrack_idx_simcluster_.push_back(idx_simcluster);
706 simtrack_pid_.push_back(simtrack.type());
711 if (simtrack.eventId() == simtrack2.eventId() && simtrack.trackId() == simtrack2.trackId()) {
712 simcluster_to_trackingparticle = itp;
719 simcluster_detids_.push_back(detid_energy);
720 simcluster_idx_trackingparticle_.push_back(simcluster_to_trackingparticle);
726 associateClusterToSimCluster(all_elements);
729 for (
unsigned int ielem = 0; ielem < all_elements.size(); ielem++) {
730 const auto& elem = all_elements.at(ielem);
731 const auto& orig = elem.orig;
736 float sigmadeltap = 0.0;
743 float trajpoint = 0.0;
744 float eta_ecal = 0.0;
745 float phi_ecal = 0.0;
746 float eta_hcal = 0.0;
747 float phi_hcal = 0.0;
751 float muon_dt_hits = 0.0;
752 float muon_csc_hits = 0.0;
755 const auto& matched_pftrack = orig.trackRefPF();
756 if (matched_pftrack.isNonnull()) {
759 if (atHCAL.isValid()) {
760 eta_hcal = atHCAL.positionREP().eta();
761 phi_hcal = atHCAL.positionREP().phi();
763 if (atECAL.isValid()) {
764 eta_ecal = atECAL.positionREP().eta();
765 phi_ecal = atECAL.positionREP().phi();
782 muon_dt_hits = standAloneMu->hitPattern().numberOfValidMuonDTHits();
783 muon_csc_hits = standAloneMu->hitPattern().numberOfValidMuonCSCHits();
789 const auto& ref = orig2->GsftrackRef();
790 if (ref.isNonnull()) {
791 deltap = orig2->DeltaP();
792 sigmadeltap = orig2->SigmaDeltaP();
800 trajpoint = orig2->indTrajPoint();
806 const auto& vec = orig2->Pin();
814 if (!orig2->GsftrackRefPF().isNull()) {
815 charge = orig2->GsftrackRefPF()->charge();
822 if (ref.isNonnull()) {
825 px = ref->position().x();
826 py = ref->position().y();
827 pz = ref->position().z();
829 layer = ref->layer();
830 depth = ref->depth();
834 if (clref.isNonnull()) {
837 px = clref->position().x();
838 py = clref->position().y();
839 pz = clref->position().z();
844 for (
const auto&
t : trackingparticle_to_element) {
845 if (
t.second == (
int)ielem) {
846 tps.push_back(
t.first);
850 for (
const auto&
t : simcluster_to_element) {
851 if (
t.second == (
int)ielem) {
852 scs.push_back(
t.first);
856 element_pt_.push_back(
pt);
857 element_px_.push_back(
px);
858 element_py_.push_back(
py);
859 element_pz_.push_back(pz);
860 element_deltap_.push_back(deltap);
861 element_sigmadeltap_.push_back(sigmadeltap);
862 element_eta_.push_back(
eta);
863 element_phi_.push_back(phi);
864 element_energy_.push_back(
energy);
865 element_eta_ecal_.push_back(eta_ecal);
866 element_phi_ecal_.push_back(phi_ecal);
867 element_eta_hcal_.push_back(eta_hcal);
868 element_phi_hcal_.push_back(phi_hcal);
869 element_charge_.push_back(
charge);
870 element_type_.push_back(
type);
871 element_layer_.push_back(
layer);
872 element_depth_.push_back(
depth);
873 element_trajpoint_.push_back(trajpoint);
874 element_muon_dt_hits_.push_back(muon_dt_hits);
875 element_muon_csc_hits_.push_back(muon_csc_hits);
881 pfcandidate_eta_.push_back(
cand.eta());
882 pfcandidate_phi_.push_back(
cand.phi());
883 pfcandidate_pt_.push_back(
cand.pt());
884 pfcandidate_px_.push_back(
cand.px());
885 pfcandidate_py_.push_back(
cand.py());
886 pfcandidate_pz_.push_back(
cand.pz());
887 pfcandidate_energy_.push_back(
cand.energy());
888 pfcandidate_pdgid_.push_back(
cand.pdgId());
890 for (
const auto& el :
cand.elementsInBlocks()) {
891 const auto idx_block = el.first.index();
892 unsigned idx_element_in_block = el.second;
895 for (
const auto& elem_with_index : all_elements) {
897 if (elem_with_index.idx_block == idx_block && elem_with_index.idx_elem == idx_element_in_block) {
902 element_to_candidate.push_back(make_pair(ielem, icandidate));
908 ev_event_ =
iEvent.id().event();
909 ev_lumi_ =
iEvent.id().luminosityBlock();
910 ev_run_ =
iEvent.id().run();
917 for (
unsigned long ntrackingparticle = 0; ntrackingparticle <
trackingParticles.size(); ntrackingparticle++) {
923 if (!
tp.decayVertices().empty()) {
924 vtx =
tp.decayVertices().at(0)->position();
926 auto orig_vtx =
tp.vertex();
929 trackingparticle_eta_.push_back(
tp.p4().eta());
930 trackingparticle_phi_.push_back(
tp.p4().phi());
931 trackingparticle_pt_.push_back(
tp.p4().pt());
932 trackingparticle_px_.push_back(
tp.p4().px());
933 trackingparticle_py_.push_back(
tp.p4().py());
934 trackingparticle_pz_.push_back(
tp.p4().pz());
935 trackingparticle_energy_.push_back(
tp.p4().energy());
936 trackingparticle_dvx_.push_back(
vtx.x());
937 trackingparticle_dvy_.push_back(
vtx.y());
938 trackingparticle_dvz_.push_back(
vtx.z());
939 trackingparticle_bx_.push_back(
tp.eventId().bunchCrossing());
940 trackingparticle_ev_.push_back(
tp.eventId().event());
942 trackingparticle_ovx_.push_back(orig_vtx.x());
943 trackingparticle_ovy_.push_back(orig_vtx.y());
944 trackingparticle_ovz_.push_back(orig_vtx.z());
946 trackingparticle_pid_.push_back(
tp.pdgId());
952 int k = (
n * (
n - 1) / 2) - (
n -
i) * ((
n -
i) - 1) / 2 +
j -
i - 1;
957 int i =
n - 2 - floor(
sqrt(-8 *
k + 4 *
n * (
n - 1) - 7) / 2.0 - 0.5);
958 int j =
k +
i + 1 -
n * (
n - 1) / 2 + (
n -
i) * ((
n -
i) - 1) / 2;
959 return make_pair(
i,
j);
963 const std::vector<reco::PFBlock>& pfBlocks) {
964 vector<ElementWithIndex>
ret;
965 vector<tuple<int, int, float>> distances;
969 for (
const auto&
block : pfBlocks) {
971 const auto& linkdata =
block.linkData();
974 for (
const auto&
link : linkdata) {
975 const auto vecidx =
link.first;
976 const auto dist =
link.second.distance;
978 auto globalindex_i = ij.first +
ret.size();
979 auto globalindex_j = ij.second +
ret.size();
980 distances.push_back(make_tuple(globalindex_i, globalindex_j, dist));
983 for (
const auto& elem :
block.elements()) {
985 ret.push_back(elem_index);
990 return make_pair(
ret, distances);
995 vector<map<uint64_t, double>> detids_elements;
996 map<uint64_t, double> rechits_energy_all;
999 for (
const auto& elem : all_elements) {
1000 map<uint64_t, double> detids;
1001 const auto&
type = elem.orig.type();
1006 const auto& clref = elem.orig.clusterRef();
1007 assert(clref.isNonnull());
1008 const auto& cluster = *clref;
1011 const vector<reco::PFRecHitFraction>& rechit_fracs = cluster.recHitFractions();
1012 for (
const auto& rh : rechit_fracs) {
1014 if (detids.find(pfrh.
detId()) != detids.end()) {
1017 detids[pfrh.
detId()] += pfrh.
energy() * rh.fraction();
1025 const auto&
pos = getHitPosition(
id);
1032 rechit_x_.push_back(x);
1033 rechit_y_.push_back(y);
1034 rechit_z_.push_back(z);
1035 rechit_det_.push_back(
id.det());
1036 rechit_subdet_.push_back(
id.subdetId());
1037 rechit_eta_.push_back(
eta);
1038 rechit_phi_.push_back(phi);
1039 rechit_e_.push_back(pfrh.
energy() * rh.fraction());
1040 rechit_idx_element_.push_back(idx_element);
1041 rechit_detid_.push_back(
id.rawId());
1042 rechits_energy_all[
id.rawId()] += pfrh.
energy() * rh.fraction();
1046 assert(clref.isNonnull());
1047 const auto& cluster = *clref;
1050 const auto& rechit_fracs = cluster.hitsAndFractions();
1051 for (
const auto& rh : rechit_fracs) {
1052 if (detids.find(rh.first.rawId()) != detids.end()) {
1055 detids[rh.first.rawId()] += cluster.energy() * rh.second;
1056 const auto id = rh.first;
1063 const auto&
pos = getHitPosition(
id);
1070 rechit_x_.push_back(x);
1071 rechit_y_.push_back(y);
1072 rechit_z_.push_back(z);
1073 rechit_det_.push_back(
id.det());
1074 rechit_subdet_.push_back(
id.subdetId());
1075 rechit_eta_.push_back(
eta);
1076 rechit_phi_.push_back(phi);
1077 rechit_e_.push_back(rh.second);
1078 rechit_idx_element_.push_back(idx_element);
1079 rechit_detid_.push_back(
id.rawId());
1080 rechits_energy_all[
id.rawId()] += cluster.energy() * rh.second;
1083 detids_elements.push_back(detids);
1089 for (
const auto& detids : detids_elements) {
1090 int isimcluster = 0;
1091 if (!detids.empty()) {
1092 double sum_e_tot = 0.0;
1093 for (
const auto&
c : detids) {
1094 sum_e_tot +=
c.second;
1097 for (
const auto& simcluster_detids : simcluster_detids_) {
1098 double sum_e_tot_sc = 0.0;
1099 for (
const auto&
c : simcluster_detids) {
1100 sum_e_tot_sc +=
c.second;
1106 simcluster_to_element.push_back(make_pair(isimcluster, ielement));
1107 simcluster_to_element_cmp.push_back((
float)
cmp);
1124 aField_ = &(*magfield);