CMS 3D CMS Logo

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
TrackstersFromSimClustersProducer.cc
Go to the documentation of this file.
1 // Author: Felice Pantaleo - felice.pantaleo@cern.ch
2 // Date: 02/2021
3 
4 // user include files
5 
14 
17 
19 
24 
25 #include "TrackstersPCA.h"
26 #include <vector>
27 #include <iterator>
28 #include <algorithm>
29 using namespace ticl;
30 
31 namespace {
32  Trackster::ParticleType tracksterParticleTypeFromPdgId(int pdgId, int charge) {
33  if (pdgId == 111) {
35  } else {
36  pdgId = std::abs(pdgId);
37  if (pdgId == 22) {
39  } else if (pdgId == 11) {
41  } else if (pdgId == 13) {
43  } else {
44  bool isHadron = (pdgId > 100 and pdgId < 900) or (pdgId > 1000 and pdgId < 9000);
45  if (isHadron) {
46  if (charge != 0) {
48  } else {
50  }
51  } else {
53  }
54  }
55  }
56  }
57 } // namespace
58 
60 public:
63  static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
64 
65  void produce(edm::Event&, const edm::EventSetup&) override;
66 
67 private:
69  const bool doNose_ = false;
73 
75 
80 };
82 
84  : detector_(ps.getParameter<std::string>("detector")),
85  doNose_(detector_ == "HFNose"),
86  clusters_token_(consumes<std::vector<reco::CaloCluster>>(ps.getParameter<edm::InputTag>("layer_clusters"))),
87  clustersTime_token_(
88  consumes<edm::ValueMap<std::pair<float, float>>>(ps.getParameter<edm::InputTag>("time_layerclusters"))),
89  filtered_layerclusters_mask_token_(consumes<std::vector<float>>(ps.getParameter<edm::InputTag>("filtered_mask"))),
90  simclusters_token_(consumes<std::vector<SimCluster>>(ps.getParameter<edm::InputTag>("simclusters"))),
91  associatorLayerClusterSimCluster_(ps.getUntrackedParameter<edm::InputTag>("layerClusterSimClusterAssociator")),
92  associatorMapSimToReco_token_(
93  consumes<hgcal::SimToRecoCollectionWithSimClusters>(associatorLayerClusterSimCluster_)),
94  geom_token_(esConsumes()) {
95  produces<std::vector<Trackster>>();
96  produces<std::vector<float>>();
97 }
98 
100  // hgcalMultiClusters
102  desc.add<std::string>("detector", "HGCAL");
103  desc.add<edm::InputTag>("layer_clusters", edm::InputTag("hgcalLayerClusters"));
104  desc.add<edm::InputTag>("time_layerclusters", edm::InputTag("hgcalLayerClusters", "timeLayerCluster"));
105  desc.add<edm::InputTag>("filtered_mask", edm::InputTag("filteredLayerClustersSimTracksters", "ticlSimTracksters"));
106  desc.add<edm::InputTag>("simclusters", edm::InputTag("mix", "MergedCaloTruth"));
107  desc.addUntracked<edm::InputTag>("layerClusterSimClusterAssociator",
108  edm::InputTag("layerClusterSimClusterAssociationProducer"));
109  descriptions.add("trackstersFromSimClustersProducer", desc);
110 }
111 
113  auto result = std::make_unique<std::vector<Trackster>>();
114  auto output_mask = std::make_unique<std::vector<float>>();
115  const auto& layerClusters = evt.get(clusters_token_);
116  const auto& layerClustersTimes = evt.get(clustersTime_token_);
117  const auto& inputClusterMask = evt.get(filtered_layerclusters_mask_token_);
118  output_mask->resize(layerClusters.size(), 1.f);
119 
120  const auto& simclusters = evt.get(simclusters_token_);
121  const auto& simToRecoColl = evt.get(associatorMapSimToReco_token_);
122 
123  const auto& geom = es.getData(geom_token_);
125  auto num_simclusters = simclusters.size();
126  result->reserve(num_simclusters);
127  for (const auto& [key, values] : simToRecoColl) {
128  auto const& sc = *(key);
129  auto simClusterIndex = &sc - &simclusters[0];
130  Trackster tmpTrackster;
131  tmpTrackster.zeroProbabilities();
132  tmpTrackster.vertices().reserve(values.size());
133  tmpTrackster.vertex_multiplicity().reserve(values.size());
134 
135  for (auto const& [lc, energyScorePair] : values) {
136  if (inputClusterMask[lc.index()] > 0) {
137  tmpTrackster.vertices().push_back(lc.index());
138  double fraction = energyScorePair.first / lc->energy();
139  (*output_mask)[lc.index()] -= fraction;
140  tmpTrackster.vertex_multiplicity().push_back(static_cast<uint8_t>(std::clamp(1. / fraction, 0., 255.)));
141  }
142  }
143  tmpTrackster.setIdProbability(tracksterParticleTypeFromPdgId(sc.pdgId(), sc.charge()), 1.f);
144  tmpTrackster.setSeed(key.id(), simClusterIndex);
145  result->emplace_back(tmpTrackster);
146  }
149  evt.put(std::move(result));
150  evt.put(std::move(output_mask));
151 }
ConfigurationDescriptions.h
ticl::Trackster::ParticleType::neutral_hadron
TrackstersPCA.h
hgcal::RecHitTools
Definition: RecHitTools.h:23
TrackstersFromSimClustersProducer::filtered_layerclusters_mask_token_
const edm::EDGetTokenT< std::vector< float > > filtered_layerclusters_mask_token_
Definition: TrackstersFromSimClustersProducer.cc:72
MessageLogger.h
dqmMemoryStats.float
float
Definition: dqmMemoryStats.py:127
Trackster.h
ESHandle.h
f
double f[11][100]
Definition: MuScleFitUtils.cc:78
edm::EDGetTokenT
Definition: EDGetToken.h:33
edm
HLT enums.
Definition: AlignableModifier.h:19
ticl::Trackster::ParticleType::charged_hadron
TrackstersFromSimClustersProducer::fillDescriptions
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
Definition: TrackstersFromSimClustersProducer.cc:99
HLT_FULL_cff.InputTag
InputTag
Definition: HLT_FULL_cff.py:89285
ticl::Trackster::setSeed
void setSeed(edm::ProductID pid, int index)
Definition: Trackster.h:59
RecHitTools.h
TrackstersFromSimClustersProducer::produce
void produce(edm::Event &, const edm::EventSetup &) override
Definition: TrackstersFromSimClustersProducer.cc:112
edm::ParameterSetDescription
Definition: ParameterSetDescription.h:52
TrackstersFromSimClustersProducer::simclusters_token_
edm::EDGetTokenT< std::vector< SimCluster > > simclusters_token_
Definition: TrackstersFromSimClustersProducer.cc:74
EDProducer.h
SimCluster
Monte Carlo truth information used for tracking validation.
Definition: SimCluster.h:29
reco
fixed size matrix
Definition: AlignmentAlgorithmBase.h:45
ticl
Definition: Common.h:8
TrackstersFromSimClustersProducer::TrackstersFromSimClustersProducer
TrackstersFromSimClustersProducer(const edm::ParameterSet &)
Definition: TrackstersFromSimClustersProducer.cc:83
TrackstersFromSimClustersProducer::~TrackstersFromSimClustersProducer
~TrackstersFromSimClustersProducer() override
Definition: TrackstersFromSimClustersProducer.cc:62
hgcal
Definition: EgammaPCAHelper.h:31
ticl::assignPCAtoTracksters
void assignPCAtoTracksters(std::vector< Trackster > &, const std::vector< reco::CaloCluster > &, const edm::ValueMap< std::pair< float, float >> &, double, bool energyWeight=true)
Definition: TrackstersPCA.cc:12
MakerMacros.h
SimCluster.h
DEFINE_FWK_MODULE
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
edm::ConfigurationDescriptions::add
void add(std::string const &label, ParameterSetDescription const &psetDescription)
Definition: ConfigurationDescriptions.cc:57
HLT_FULL_cff.fraction
fraction
Definition: HLT_FULL_cff.py:52806
ticl::Trackster::zeroProbabilities
void zeroProbabilities()
Definition: Trackster.h:107
contentValuesCheck.values
values
Definition: contentValuesCheck.py:38
TrackstersFromSimClustersProducer
Definition: TrackstersFromSimClustersProducer.cc:59
ticl::Trackster::vertex_multiplicity
std::vector< uint8_t > & vertex_multiplicity()
Definition: Trackster.h:57
fillDescriptions
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
DDAxes::z
TrackstersFromSimClustersProducer::associatorLayerClusterSimCluster_
edm::InputTag associatorLayerClusterSimCluster_
Definition: TrackstersFromSimClustersProducer.cc:76
PFCluster.h
relativeConstraints.geom
geom
Definition: relativeConstraints.py:72
SimTracksters_cff.simclusters
simclusters
Definition: SimTracksters_cff.py:23
ParameterSetDescription.h
HLTEgPhaseIITestSequence_cff.layerClusters
layerClusters
Definition: HLTEgPhaseIITestSequence_cff.py:2506
ticl::Trackster::ParticleType::photon
edm::ConfigurationDescriptions
Definition: ConfigurationDescriptions.h:28
ticl::Trackster::ParticleType::muon
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
TrackstersFromSimClustersProducer::clustersTime_token_
const edm::EDGetTokenT< edm::ValueMap< std::pair< float, float > > > clustersTime_token_
Definition: TrackstersFromSimClustersProducer.cc:71
ALCARECOTkAlJpsiMuMu_cff.charge
charge
Definition: ALCARECOTkAlJpsiMuMu_cff.py:47
edm::ParameterSet
Definition: ParameterSet.h:47
Event.h
hgcal::SimToRecoCollectionWithSimClusters
edm::AssociationMap< edm::OneToManyWithQualityGeneric< SimClusterCollection, reco::CaloClusterCollection, std::pair< float, float > > > SimToRecoCollectionWithSimClusters
Definition: LayerClusterToSimClusterAssociatorBaseImpl.h:23
hgcal::RecHitTools::lastLayerEE
unsigned int lastLayerEE(bool nose=false) const
Definition: RecHitTools.h:64
TrackstersFromSimClustersProducer::geom_token_
edm::ESGetToken< CaloGeometry, CaloGeometryRecord > geom_token_
Definition: TrackstersFromSimClustersProducer.cc:78
edm::Event::put
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:133
trackerHitRTTI::vector
Definition: trackerHitRTTI.h:21
edm::stream::EDProducer
Definition: EDProducer.h:38
EgammaValidation_cff.pdgId
pdgId
Definition: EgammaValidation_cff.py:118
edm::EventSetup
Definition: EventSetup.h:58
hgcal::RecHitTools::getPositionLayer
GlobalPoint getPositionLayer(int layer, bool nose=false) const
Definition: RecHitTools.cc:138
edm::ESGetToken< CaloGeometry, CaloGeometryRecord >
edm::EventSetup::getData
bool getData(T &iHolder) const
Definition: EventSetup.h:127
TrackstersFromSimClustersProducer::clusters_token_
const edm::EDGetTokenT< std::vector< reco::CaloCluster > > clusters_token_
Definition: TrackstersFromSimClustersProducer.cc:70
ValueMap.h
TrackstersFromSimClustersProducer::doNose_
const bool doNose_
Definition: TrackstersFromSimClustersProducer.cc:69
LayerClusterToSimClusterAssociator.h
submitPVResolutionJobs.desc
string desc
Definition: submitPVResolutionJobs.py:251
eostools.move
def move(src, dest)
Definition: eostools.py:511
std
Definition: JetResolutionObject.h:76
Frameworkfwd.h
hgcal::RecHitTools::setGeometry
void setGeometry(CaloGeometry const &)
Definition: RecHitTools.cc:68
TrackstersFromSimClustersProducer::associatorMapSimToReco_token_
edm::EDGetTokenT< hgcal::SimToRecoCollectionWithSimClusters > associatorMapSimToReco_token_
Definition: TrackstersFromSimClustersProducer.cc:77
ticl::Trackster::vertices
std::vector< unsigned int > & vertices()
Definition: Trackster.h:56
ticl::Trackster::ParticleType::neutral_pion
or
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e< void, edm::EventID const &, edm::Timestamp const & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
Definition: Activities.doc:12
TrackstersFromSimClustersProducer::rhtools_
hgcal::RecHitTools rhtools_
Definition: TrackstersFromSimClustersProducer.cc:79
mps_fire.result
result
Definition: mps_fire.py:311
ticl::Trackster::ParticleType
ParticleType
Definition: Trackster.h:26
funct::abs
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
DeDxTools::esConsumes
ESGetTokenH3DDVariant esConsumes(std::string const &Reccord, edm::ConsumesCollector &)
Definition: DeDxTools.cc:283
edm::Event
Definition: Event.h:73
crabWrapper.key
key
Definition: crabWrapper.py:19
edm::Event::get
bool get(ProductID const &oid, Handle< PROD > &result) const
Definition: Event.h:342
edm::InputTag
Definition: InputTag.h:15
TrackstersFromSimClustersProducer::detector_
std::string detector_
Definition: TrackstersFromSimClustersProducer.cc:68
ticl::Trackster
Definition: Trackster.h:19
ticl::Trackster::setIdProbability
void setIdProbability(ParticleType type, float value)
Definition: Trackster.h:117
CaloCluster.h
ticl::Trackster::ParticleType::unknown
ticl::Trackster::ParticleType::electron