582 const auto recotosim = *recotosimCollection;
590 for (std::vector<reco::GenParticle>::const_iterator it_p = genParticlesHandle->begin();
591 it_p != genParticlesHandle->end();
603 std::vector<int> daughters(it_p->daughterRefVector().size(), 0);
604 for (
unsigned j = 0;
j < it_p->daughterRefVector().size(); ++
j) {
605 daughters[
j] =
static_cast<int>(it_p->daughterRefVector().at(
j).key());
612 std::vector<reco::PFCandidate>
pfCandidates = *pfCandidatesHandle;
616 std::vector<reco::PFBlock> pfBlocks = *pfBlocksHandle;
619 const auto& all_elements_distances =
processBlocks(pfBlocks);
620 const auto& all_elements = all_elements_distances.first;
621 const auto& all_distances = all_elements_distances.second;
622 assert(!all_elements.empty());
624 for (
const auto&
d : all_distances) {
633 const auto vec_idx_in_all_elements =
find_element_ref(all_elements, trackref);
636 if (vec_idx_in_all_elements.empty()) {
640 if (recotosim.find(trackref) != recotosim.end()) {
641 const auto& tps = recotosim[trackref];
642 for (
const auto&
tp : tps) {
644 for (
auto idx_in_all_elements : vec_idx_in_all_elements) {
653 int idx_simcluster = 0;
655 for (
unsigned long ncaloparticle = 0; ncaloparticle < caloParticles.
size(); ncaloparticle++) {
656 const auto&
cp = caloParticles.
at(ncaloparticle);
660 for (
const auto& simcluster :
cp.simClusters()) {
662 map<uint64_t, double> detid_energy;
677 for (
const auto& hf : simcluster->hits_and_fractions()) {
684 const float x = pos.x();
685 const float y = pos.y();
686 const float z = pos.z();
687 const float eta = pos.eta();
688 const float phi = pos.phi();
700 detid_energy[
id.rawId()] += hf.second;
704 int simcluster_to_trackingparticle = -1;
705 for (
const auto& simtrack : simcluster->g4Tracks()) {
706 simtrack_x_.push_back(simtrack.trackerSurfacePosition().x());
707 simtrack_y_.push_back(simtrack.trackerSurfacePosition().y());
708 simtrack_z_.push_back(simtrack.trackerSurfacePosition().z());
712 for (
unsigned int itp = 0; itp < trackingParticles.
size(); itp++) {
713 const auto& simtrack2 = trackingParticles.
at(itp).g4Tracks().at(0);
715 if (simtrack.eventId() == simtrack2.eventId() && simtrack.trackId() == simtrack2.trackId()) {
716 simcluster_to_trackingparticle = itp;
733 for (
unsigned int ielem = 0; ielem < all_elements.size(); ielem++) {
734 const auto& elem = all_elements.at(ielem);
735 const auto& orig = elem.orig;
740 float sigmadeltap = 0.0;
747 float trajpoint = 0.0;
748 float eta_ecal = 0.0;
749 float phi_ecal = 0.0;
750 float eta_hcal = 0.0;
751 float phi_hcal = 0.0;
755 float muon_dt_hits = 0.0;
756 float muon_csc_hits = 0.0;
759 const auto& matched_pftrack = orig.trackRefPF();
760 if (matched_pftrack.isNonnull()) {
763 if (atHCAL.isValid()) {
764 eta_hcal = atHCAL.positionREP().eta();
765 phi_hcal = atHCAL.positionREP().phi();
767 if (atECAL.isValid()) {
768 eta_ecal = atECAL.positionREP().eta();
769 phi_ecal = atECAL.positionREP().phi();
780 charge = ref->charge();
786 muon_dt_hits = standAloneMu->hitPattern().numberOfValidMuonDTHits();
787 muon_csc_hits = standAloneMu->hitPattern().numberOfValidMuonCSCHits();
793 const auto& ref = orig2->GsftrackRef();
794 if (ref.isNonnull()) {
795 deltap = orig2->DeltaP();
796 sigmadeltap = orig2->SigmaDeltaP();
804 trajpoint = orig2->indTrajPoint();
805 charge = ref->charge();
810 const auto& vec = orig2->Pin();
817 energy = vec.energy();
818 if (!orig2->GsftrackRefPF().isNull()) {
819 charge = orig2->GsftrackRefPF()->charge();
826 if (ref.isNonnull()) {
829 px = ref->position().x();
830 py = ref->position().y();
831 pz = ref->position().z();
832 energy = ref->energy();
833 layer = ref->layer();
834 depth = ref->depth();
838 if (clref.isNonnull()) {
841 px = clref->position().x();
842 py = clref->position().y();
843 pz = clref->position().z();
844 energy = clref->energy();
849 if (
t.second == (
int)ielem) {
850 tps.push_back(
t.first);
855 if (
t.second == (
int)ielem) {
856 scs.push_back(
t.first);
884 for (
const auto& cand : pfCandidates) {
894 for (
const auto& el : cand.elementsInBlocks()) {
895 const auto idx_block = el.first.index();
896 unsigned idx_element_in_block = el.second;
899 for (
const auto& elem_with_index : all_elements) {
901 if (elem_with_index.idx_block == idx_block && elem_with_index.idx_elem == idx_element_in_block) {
vector< int > element_charge_
vector< float > pfcandidate_pz_
EventNumber_t event() const
vector< float > pfcandidate_px_
vector< int > simtrack_pid_
bool isNonnull() const
Checks for non-null.
vector< int > element_distance_j_
vector< float > element_pz_
vector< int > simcluster_ev_
vector< float > element_phi_
vector< float > gen_energy_
uint16_t *__restrict__ id
vector< int > simcluster_bx_
bool getByToken(EDGetToken token, Handle< PROD > &result) const
vector< float > simhit_phi_
vector< float > element_trajpoint_
vector< float > simcluster_px_
vector< float > simcluster_eta_
vector< float > element_py_
vector< float > element_eta_
vector< int > gen_charge_
auto const & tracks
cannot be loose
key_type key() const
Accessor for product key.
vector< int > simhit_idx_simcluster_
vector< int > simtrack_idx_simcluster_
vector< int > element_layer_
LuminosityBlockNumber_t luminosityBlock() const
vector< float > element_sigmadeltap_
vector< float > simcluster_py_
constexpr std::array< uint8_t, layerIndexSize > layer
bool getData(T &iHolder) const
vector< float > element_pt_
vector< float > element_eta_ecal_
vector< float > simhit_z_
edm::ESGetToken< CaloGeometry, CaloGeometryRecord > geometryToken_
edm::EDGetTokenT< std::vector< reco::GenParticle > > genParticles_
vector< float > simtrack_x_
vector< float > simhit_y_
vector< float > element_depth_
vector< float > simcluster_energy_
vector< int > find_element_ref(const vector< ElementWithIndex > &vec, const edm::RefToBase< reco::Track > &r)
vector< float > pfcandidate_phi_
edm::EDGetTokenT< edm::View< reco::Track > > tracks_
edm::EDGetTokenT< std::vector< reco::PFBlock > > pfBlocks_
vector< vector< int > > gen_daughters_
vector< pair< int, int > > element_to_candidate
vector< float > pfcandidate_eta_
vector< float > simcluster_phi_
vector< float > pfcandidate_pt_
vector< float > pfcandidate_py_
GlobalPoint getHitPosition(const DetId &id)
vector< int > element_distance_i_
vector< float > element_muon_csc_hits_
vector< float > simhit_x_
edm::EDGetTokenT< std::vector< reco::PFCandidate > > pfCandidates_
vector< int > simcluster_pid_
vector< int > simhit_det_
vector< int > simhit_subdet_
vector< float > element_energy_
edm::EventNumber_t ev_event_
edm::LuminosityBlockNumber_t ev_lumi_
vector< float > element_px_
vector< float > element_deltap_
void processTrackingParticles(const edm::View< TrackingParticle > &trackingParticles, edm::Handle< edm::View< TrackingParticle >> &trackingParticlesHandle)
edm::EDGetTokenT< edm::View< TrackingParticle > > trackingParticles_
vector< int > gen_status_
edm::EDGetTokenT< edm::View< CaloParticle > > caloParticles_
vector< float > element_phi_hcal_
vector< int > element_type_
vector< std::map< uint64_t, double > > simcluster_detids_
vector< float > simhit_frac_
const_reference at(size_type pos) const
vector< pair< int, int > > simcluster_to_element
vector< float > simcluster_pt_
vector< float > simcluster_pz_
vector< float > simtrack_y_
vector< int > pfcandidate_pdgid_
vector< float > pfcandidate_energy_
edm::EDGetTokenT< reco::RecoToSimCollection > tracks_recotosim_
vector< float > simhit_eta_
vector< float > element_muon_dt_hits_
edm::ESGetToken< HcalTopology, HcalRecNumberingRecord > topologyToken_
vector< pair< int, int > > trackingparticle_to_element
vector< float > element_phi_ecal_
pair< vector< ElementWithIndex >, vector< tuple< int, int, float > > > processBlocks(const std::vector< reco::PFBlock > &pfBlocks)
vector< float > simtrack_z_
vector< int > simcluster_idx_trackingparticle_
vector< int > simcluster_nhits_
void associateClusterToSimCluster(const vector< ElementWithIndex > &all_elements)
vector< float > element_eta_hcal_
vector< uint64_t > simhit_detid_
vector< float > element_distance_d_