CMS 3D CMS Logo

List of all members | Public Member Functions | Static Public Member Functions | Private Attributes
HGCalLayerClustersFromSoAProducer Class Reference
Inheritance diagram for HGCalLayerClustersFromSoAProducer:
edm::stream::EDProducer<>

Public Member Functions

 HGCalLayerClustersFromSoAProducer (edm::ParameterSet const &config)
 
void produce (edm::Event &iEvent, edm::EventSetup const &iSetup) override
 
 ~HGCalLayerClustersFromSoAProducer () override=default
 
- Public Member Functions inherited from edm::stream::EDProducer<>
 EDProducer ()=default
 
 EDProducer (const EDProducer &)=delete
 
bool hasAbilityToProduceInBeginLumis () const final
 
bool hasAbilityToProduceInBeginProcessBlocks () const final
 
bool hasAbilityToProduceInBeginRuns () const final
 
bool hasAbilityToProduceInEndLumis () const final
 
bool hasAbilityToProduceInEndProcessBlocks () const final
 
bool hasAbilityToProduceInEndRuns () const final
 
const EDProduceroperator= (const EDProducer &)=delete
 

Static Public Member Functions

static void fillDescriptions (edm::ConfigurationDescriptions &descriptions)
 

Private Attributes

reco::CaloCluster::AlgoId algoId_
 
std::string detector_
 
edm::EDGetTokenT< HGCalSoARecHitsHostCollection > const getTokenSoACells_
 
edm::EDGetTokenT< HGCalSoAClustersHostCollection > const getTokenSoAClusters_
 
edm::EDGetTokenT< HGCalSoARecHitsExtraHostCollection > const getTokenSoARecHitsExtra_
 
unsigned int hitsTime_
 
std::string timeClname_
 

Additional Inherited Members

- Public Types inherited from edm::stream::EDProducer<>
using CacheTypes = CacheContexts< T... >
 
using GlobalCache = typename CacheTypes::GlobalCache
 
using HasAbility = AbilityChecker< T... >
 
using InputProcessBlockCache = typename CacheTypes::InputProcessBlockCache
 
using LuminosityBlockCache = typename CacheTypes::LuminosityBlockCache
 
using LuminosityBlockContext = LuminosityBlockContextT< LuminosityBlockCache, RunCache, GlobalCache >
 
using LuminosityBlockSummaryCache = typename CacheTypes::LuminosityBlockSummaryCache
 
using RunCache = typename CacheTypes::RunCache
 
using RunContext = RunContextT< RunCache, GlobalCache >
 
using RunSummaryCache = typename CacheTypes::RunSummaryCache
 

Detailed Description

Definition at line 28 of file HGCalLayerClustersFromSoAProducer.cc.

Constructor & Destructor Documentation

◆ HGCalLayerClustersFromSoAProducer()

HGCalLayerClustersFromSoAProducer::HGCalLayerClustersFromSoAProducer ( edm::ParameterSet const &  config)
inline

Definition at line 30 of file HGCalLayerClustersFromSoAProducer.cc.

References algoId_, detector_, reco::CaloCluster::hfnose, reco::CaloCluster::hgcal_em, reco::CaloCluster::hgcal_had, AlCaHLTBitMon_QueryRunRegistry::string, and timeClname_.

31  : getTokenSoAClusters_(consumes(config.getParameter<edm::InputTag>("src"))),
32  getTokenSoACells_(consumes(config.getParameter<edm::InputTag>("hgcalRecHitsSoA"))),
33  getTokenSoARecHitsExtra_(consumes(config.getParameter<edm::InputTag>("hgcalRecHitsLayerClustersSoA"))),
34  detector_(config.getParameter<std::string>("detector")),
35  hitsTime_(config.getParameter<unsigned int>("nHitsTime")),
36  timeClname_(config.getParameter<std::string>("timeClname")) {
37 #if DEBUG_CLUSTERS_ALPAKA
38  moduleLabel_ = config.getParameter<std::string>("@module_label");
39 #endif
40  if (detector_ == "HFNose") {
42  } else if (detector_ == "EE") {
44  } else { //for FH or BH
46  }
47 
48  produces<std::vector<float>>("InitialLayerClustersMask");
49  produces<std::vector<reco::BasicCluster>>();
50  produces<edm::ValueMap<std::pair<float, float>>>(timeClname_);
51  }
edm::EDGetTokenT< HGCalSoARecHitsExtraHostCollection > const getTokenSoARecHitsExtra_
Definition: config.py:1
edm::EDGetTokenT< HGCalSoAClustersHostCollection > const getTokenSoAClusters_
edm::EDGetTokenT< HGCalSoARecHitsHostCollection > const getTokenSoACells_

◆ ~HGCalLayerClustersFromSoAProducer()

HGCalLayerClustersFromSoAProducer::~HGCalLayerClustersFromSoAProducer ( )
overridedefault

Member Function Documentation

◆ fillDescriptions()

static void HGCalLayerClustersFromSoAProducer::fillDescriptions ( edm::ConfigurationDescriptions descriptions)
inlinestatic

Definition at line 153 of file HGCalLayerClustersFromSoAProducer.cc.

References edm::ConfigurationDescriptions::addWithDefaultLabel(), submitPVResolutionJobs::desc, ProducerED_cfi::InputTag, and AlCaHLTBitMon_QueryRunRegistry::string.

153  {
155  desc.add<edm::InputTag>("src", edm::InputTag("hltHgcalSoALayerClustersProducer"));
156  desc.add<edm::InputTag>("hgcalRecHitsLayerClustersSoA", edm::InputTag("hltHgcalSoARecHitsLayerClustersProducer"));
157  desc.add<edm::InputTag>("hgcalRecHitsSoA", edm::InputTag("hltHgcalSoARecHitsProducer"));
158  desc.add<unsigned int>("nHitsTime", 3);
159  desc.add<std::string>("timeClname", "timeLayerCluster");
161  "detector", "EE", true, edm::Comment("the HGCAL component used to create clusters.")),
162  edm::allowedValues<std::string>("EE", "FH"));
163  descriptions.addWithDefaultLabel(desc);
164  }
void addWithDefaultLabel(ParameterSetDescription const &psetDescription)

◆ produce()

void HGCalLayerClustersFromSoAProducer::produce ( edm::Event iEvent,
edm::EventSetup const &  iSetup 
)
inlineoverride

Definition at line 55 of file HGCalLayerClustersFromSoAProducer.cc.

References algoId_, cms::cuda::assert(), bsc_activity_cfg::clusters, reco::CaloID::DET_HGCAL_ENDCAP, detector_, ALCARECOPPSCalTrackBasedSel_cff::detid, hgcalUtils::DumpClusters::dumpInfos(), hgcalUtils::DumpClustersSoA::dumpInfos(), hgcalUtils::DumpCellsSoA::dumpInfos(), f, trigObjTnPSource_cfi::filler, hgcalsimclustertime::ComputeClusterTime::fixSizeHighestDensity(), getTokenSoACells_, getTokenSoAClusters_, getTokenSoARecHitsExtra_, hitsTime_, mps_fire::i, iEvent, eostools::move(), convertSQLiteXML::runNumber, hcalRecHitTable_cff::time, and timeClname_.

55  {
56  auto const& deviceData = iEvent.get(getTokenSoAClusters_);
57 
58  auto const& deviceSoARecHitsExtra = iEvent.get(getTokenSoARecHitsExtra_);
59  auto const soaRecHitsExtra_v = deviceSoARecHitsExtra.view();
60 
61  auto const& deviceSoACells = iEvent.get(getTokenSoACells_);
62  auto const soaCells_v = deviceSoACells.view();
63 
64  auto const deviceView = deviceData.view();
65 
66  std::unique_ptr<std::vector<reco::BasicCluster>> clusters(new std::vector<reco::BasicCluster>);
67  clusters->reserve(deviceData->metadata().size());
68 
69  // Create a vector of <clusters> locations, where each location holds a
70  // vector of <nCells> floats. These vectors are used to compute the time for
71  // each cluster.
72  std::vector<std::vector<float>> times(deviceData->metadata().size());
73  std::vector<std::vector<float>> timeErrors(deviceData->metadata().size());
74 
75  for (int i = 0; i < deviceData->metadata().size(); ++i) {
76  std::vector<std::pair<DetId, float>> thisCluster;
77  thisCluster.reserve(deviceView.cells(i));
78  clusters->emplace_back(deviceView.energy(i),
79  math::XYZPoint(deviceView.x(i), deviceView.y(i), deviceView.z(i)),
81  std::move(thisCluster),
82  algoId_);
83  clusters->back().setSeed(deviceView.seed(i));
84  times[i].reserve(deviceView.cells(i));
85  timeErrors[i].reserve(deviceView.cells(i));
86  }
87 
88  // Populate hits and fractions required to compute the cluster's time.
89  // This procedure is complex and involves two SoAs: the original RecHits
90  // SoA and the clustering algorithm's output SoA. Both SoAs have the same
91  // cardinality, and crucially, the output SoA includes the cluster index.
92  for (int32_t i = 0; i < soaRecHitsExtra_v.metadata().size(); ++i) {
93  if (soaRecHitsExtra_v[i].clusterIndex() == -1) {
94  continue;
95  }
96  assert(soaRecHitsExtra_v[i].clusterIndex() < (int)clusters->size());
97  (*clusters)[soaRecHitsExtra_v[i].clusterIndex()].addHitAndFraction(soaCells_v[i].detid(), 1.f);
98  if (soaCells_v[i].timeError() < 0.f) {
99  continue;
100  }
101  times[soaRecHitsExtra_v[i].clusterIndex()].push_back(soaCells_v[i].time());
102  timeErrors[soaRecHitsExtra_v[i].clusterIndex()].push_back(
103  1.f / (soaCells_v[i].timeError() * soaCells_v[i].timeError()));
104  }
105 
106  // Finally, compute and assign the time to each cluster.
107  std::vector<std::pair<float, float>> cluster_times;
108  cluster_times.reserve(clusters->size());
110  for (unsigned i = 0; i < clusters->size(); ++i) {
111  if (detector_ != "BH") {
112  cluster_times.push_back(timeEstimator.fixSizeHighestDensity(times[i], timeErrors[i], hitsTime_));
113  } else {
114  cluster_times.push_back(std::pair<float, float>(-99.f, -1.f));
115  }
116  }
117 
118 #if DEBUG_CLUSTERS_ALPAKA
119  auto runNumber = iEvent.eventAuxiliary().run();
120  auto lumiNumber = iEvent.eventAuxiliary().luminosityBlock();
121  auto evtNumber = iEvent.eventAuxiliary().id().event();
122 
123  hgcalUtils::DumpCellsSoA dumperCellsSoA;
124  dumperCellsSoA.dumpInfos(deviceSoACells, moduleLabel_, runNumber, lumiNumber, evtNumber);
125 
127  dumper.dumpInfos(*clusters, moduleLabel_, runNumber, lumiNumber, evtNumber, true);
128 
129  hgcalUtils::DumpClustersSoA dumperSoA;
130  dumperSoA.dumpInfos(deviceSoARecHitsExtra, moduleLabel_, runNumber, lumiNumber, evtNumber);
131 #endif
132 
133  auto clusterHandle = iEvent.put(std::move(clusters));
134 
135  auto timeCl = std::make_unique<edm::ValueMap<std::pair<float, float>>>();
137  filler.insert(clusterHandle, cluster_times.begin(), cluster_times.end());
138  filler.fill();
139  iEvent.put(std::move(timeCl), timeClname_);
140 
141  // The layerClusterMask for the HGCAL detector is created at a later
142  // stage, when the layer clusters from the different components of HGCAL
143  // are merged together into a unique collection. For the case of HFNose,
144  // since there is no further merging step needed, we create the
145  // layerClustersMask directly here.
146  if (detector_ == "HFNose") {
147  std::unique_ptr<std::vector<float>> layerClustersMask(new std::vector<float>);
148  layerClustersMask->resize(clusterHandle->size(), 1.0);
149  iEvent.put(std::move(layerClustersMask), "InitialLayerClustersMask");
150  }
151  }
edm::EDGetTokenT< HGCalSoARecHitsExtraHostCollection > const getTokenSoARecHitsExtra_
void dumpInfos(const T &clusters, const std::string &moduleLabel, edm::RunNumber_t run, edm::LuminosityBlockNumber_t lumi, edm::EventNumber_t event, bool dumpCellsDetId=false) const
edm::EDGetTokenT< HGCalSoAClustersHostCollection > const getTokenSoAClusters_
assert(be >=bs)
std::pair< float, float > fixSizeHighestDensity(std::vector< float > &time, std::vector< float > weight=std::vector< float >(), unsigned int minNhits=3, float deltaT=0.210, float timeWidthBy=0.5)
int iEvent
Definition: GenABIO.cc:224
edm::EDGetTokenT< HGCalSoARecHitsHostCollection > const getTokenSoACells_
double f[11][100]
void dumpInfos(const T &cells, const std::string &moduleLabel, edm::RunNumber_t run, edm::LuminosityBlockNumber_t lumi, edm::EventNumber_t event) const
void dumpInfos(const T &clustersSoA, const std::string &moduleLabel, edm::RunNumber_t run, edm::LuminosityBlockNumber_t lumi, edm::EventNumber_t event) const
XYZPointD XYZPoint
point in space with cartesian internal representation
Definition: Point3D.h:12
def move(src, dest)
Definition: eostools.py:511

Member Data Documentation

◆ algoId_

reco::CaloCluster::AlgoId HGCalLayerClustersFromSoAProducer::algoId_
private

◆ detector_

std::string HGCalLayerClustersFromSoAProducer::detector_
private

◆ getTokenSoACells_

edm::EDGetTokenT<HGCalSoARecHitsHostCollection> const HGCalLayerClustersFromSoAProducer::getTokenSoACells_
private

Definition at line 168 of file HGCalLayerClustersFromSoAProducer.cc.

Referenced by produce().

◆ getTokenSoAClusters_

edm::EDGetTokenT<HGCalSoAClustersHostCollection> const HGCalLayerClustersFromSoAProducer::getTokenSoAClusters_
private

Definition at line 167 of file HGCalLayerClustersFromSoAProducer.cc.

Referenced by produce().

◆ getTokenSoARecHitsExtra_

edm::EDGetTokenT<HGCalSoARecHitsExtraHostCollection> const HGCalLayerClustersFromSoAProducer::getTokenSoARecHitsExtra_
private

Definition at line 169 of file HGCalLayerClustersFromSoAProducer.cc.

Referenced by produce().

◆ hitsTime_

unsigned int HGCalLayerClustersFromSoAProducer::hitsTime_
private

Definition at line 171 of file HGCalLayerClustersFromSoAProducer.cc.

Referenced by produce().

◆ timeClname_

std::string HGCalLayerClustersFromSoAProducer::timeClname_
private