CMS 3D CMS Logo

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

Public Member Functions

 HGCalLayerClusterProducer (const edm::ParameterSet &)
 
void produce (edm::Event &, const edm::EventSetup &) override
 
 ~HGCalLayerClusterProducer () override
 
- 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

std::unique_ptr< HGCalClusteringAlgoBasealgo
 
reco::CaloCluster::AlgoId algoId
 
std::string detector
 
bool doSharing
 
edm::EDGetTokenT< HGCRecHitCollectionhits_bh_token
 
edm::EDGetTokenT< HGCRecHitCollectionhits_ee_token
 
edm::EDGetTokenT< HGCRecHitCollectionhits_fh_token
 
edm::EDGetTokenT< HGCRecHitCollectionhits_hfnose_token
 
unsigned int nHitsTime
 
std::string timeClname
 
double timeOffset
 

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 35 of file HGCalLayerClusterProducer.cc.

Constructor & Destructor Documentation

◆ HGCalLayerClusterProducer()

HGCalLayerClusterProducer::HGCalLayerClusterProducer ( const edm::ParameterSet ps)

Definition at line 62 of file HGCalLayerClusterProducer.cc.

64  doSharing(ps.getParameter<bool>("doSharing")),
65  detector(ps.getParameter<std::string>("detector")), // one of EE, FH, BH or "all"
66  timeClname(ps.getParameter<std::string>("timeClname")),
67  timeOffset(ps.getParameter<double>("timeOffset")),
68  nHitsTime(ps.getParameter<unsigned int>("nHitsTime")) {
69  if (detector == "HFNose") {
70  hits_hfnose_token = consumes<HGCRecHitCollection>(ps.getParameter<edm::InputTag>("HFNoseInput"));
72  } else if (detector == "all") {
73  hits_ee_token = consumes<HGCRecHitCollection>(ps.getParameter<edm::InputTag>("HGCEEInput"));
74  hits_fh_token = consumes<HGCRecHitCollection>(ps.getParameter<edm::InputTag>("HGCFHInput"));
75  hits_bh_token = consumes<HGCRecHitCollection>(ps.getParameter<edm::InputTag>("HGCBHInput"));
77  } else if (detector == "EE") {
78  hits_ee_token = consumes<HGCRecHitCollection>(ps.getParameter<edm::InputTag>("HGCEEInput"));
80  } else if (detector == "FH") {
81  hits_fh_token = consumes<HGCRecHitCollection>(ps.getParameter<edm::InputTag>("HGCFHInput"));
83  } else {
84  hits_bh_token = consumes<HGCRecHitCollection>(ps.getParameter<edm::InputTag>("HGCBHInput"));
86  }
87 
88  auto pluginPSet = ps.getParameter<edm::ParameterSet>("plugin");
89  if (detector == "HFNose") {
90  algo = HGCalLayerClusterAlgoFactory::get()->create("HFNoseCLUE", pluginPSet, consumesCollector());
91  algo->setAlgoId(algoId, true);
92  } else {
94  pluginPSet.getParameter<std::string>("type"), pluginPSet, consumesCollector());
95  algo->setAlgoId(algoId);
96  }
97 
98  produces<std::vector<float>>("InitialLayerClustersMask");
99  produces<std::vector<reco::BasicCluster>>();
100  produces<std::vector<reco::BasicCluster>>("sharing");
101  //density
102  produces<Density>();
103  //time for layer clusters
104  produces<edm::ValueMap<std::pair<float, float>>>(timeClname);
105 }

References algo, algoId, detector, get, edm::ParameterSet::getParameter(), reco::CaloCluster::hfnose, reco::CaloCluster::hgcal_em, reco::CaloCluster::hgcal_had, reco::CaloCluster::hgcal_mixed, hits_bh_token, hits_ee_token, hits_fh_token, hits_hfnose_token, AlCaHLTBitMon_QueryRunRegistry::string, timeClname, and undefined.

◆ ~HGCalLayerClusterProducer()

HGCalLayerClusterProducer::~HGCalLayerClusterProducer ( )
inlineoverride

Definition at line 38 of file HGCalLayerClusterProducer.cc.

38 {}

Member Function Documentation

◆ fillDescriptions()

void HGCalLayerClusterProducer::fillDescriptions ( edm::ConfigurationDescriptions descriptions)
static

Definition at line 107 of file HGCalLayerClusterProducer.cc.

107  {
108  // hgcalLayerClusters
110  edm::ParameterSetDescription pluginDesc;
111  pluginDesc.addNode(edm::PluginDescription<HGCalLayerClusterAlgoFactory>("type", "CLUE", true));
112 
113  desc.add<edm::ParameterSetDescription>("plugin", pluginDesc);
114  desc.add<std::string>("detector", "all")
115  ->setComment("all (does not include HFNose); other options: EE, FH, HFNose; other value defaults to BH");
116  desc.add<bool>("doSharing", false);
117  desc.add<edm::InputTag>("HFNoseInput", edm::InputTag("HGCalRecHit", "HGCHFNoseRecHits"));
118  desc.add<edm::InputTag>("HGCEEInput", edm::InputTag("HGCalRecHit", "HGCEERecHits"));
119  desc.add<edm::InputTag>("HGCFHInput", edm::InputTag("HGCalRecHit", "HGCHEFRecHits"));
120  desc.add<edm::InputTag>("HGCBHInput", edm::InputTag("HGCalRecHit", "HGCHEBRecHits"));
121  desc.add<std::string>("timeClname", "timeLayerCluster");
122  desc.add<double>("timeOffset", 0.0);
123  desc.add<unsigned int>("nHitsTime", 3);
124  descriptions.add("hgcalLayerClusters", desc);
125 }

References edm::ConfigurationDescriptions::add(), edm::ParameterSetDescription::addNode(), submitPVResolutionJobs::desc, HLT_FULL_cff::InputTag, and AlCaHLTBitMon_QueryRunRegistry::string.

◆ produce()

void HGCalLayerClusterProducer::produce ( edm::Event evt,
const edm::EventSetup es 
)
override

Definition at line 127 of file HGCalLayerClusterProducer.cc.

127  {
132 
133  std::unique_ptr<std::vector<reco::BasicCluster>> clusters(new std::vector<reco::BasicCluster>),
134  clusters_sharing(new std::vector<reco::BasicCluster>);
135  auto density = std::make_unique<Density>();
136 
137  algo->getEventSetup(es);
138 
139  //make a map detid-rechit
140  // NB for the moment just host EE and FH hits
141  // timing in digi for BH not implemented for now
142  std::unordered_map<uint32_t, const HGCRecHit*> hitmap;
143 
144  switch (algoId) {
146  evt.getByToken(hits_hfnose_token, hfnose_hits);
147  algo->populate(*hfnose_hits);
148  for (auto const& it : *hfnose_hits)
149  hitmap[it.detid().rawId()] = &(it);
150  break;
152  evt.getByToken(hits_ee_token, ee_hits);
153  algo->populate(*ee_hits);
154  for (auto const& it : *ee_hits)
155  hitmap[it.detid().rawId()] = &(it);
156  break;
158  evt.getByToken(hits_fh_token, fh_hits);
159  evt.getByToken(hits_bh_token, bh_hits);
160  if (fh_hits.isValid()) {
161  algo->populate(*fh_hits);
162  for (auto const& it : *fh_hits)
163  hitmap[it.detid().rawId()] = &(it);
164  } else if (bh_hits.isValid()) {
165  algo->populate(*bh_hits);
166  }
167  break;
169  evt.getByToken(hits_ee_token, ee_hits);
170  algo->populate(*ee_hits);
171  for (auto const& it : *ee_hits) {
172  hitmap[it.detid().rawId()] = &(it);
173  }
174  evt.getByToken(hits_fh_token, fh_hits);
175  algo->populate(*fh_hits);
176  for (auto const& it : *fh_hits) {
177  hitmap[it.detid().rawId()] = &(it);
178  }
179  evt.getByToken(hits_bh_token, bh_hits);
180  algo->populate(*bh_hits);
181  break;
182  default:
183  break;
184  }
185  algo->makeClusters();
186  *clusters = algo->getClusters(false);
187  if (doSharing)
188  *clusters_sharing = algo->getClusters(true);
189 
190  auto clusterHandle = evt.put(std::move(clusters));
191  auto clusterHandleSharing = evt.put(std::move(clusters_sharing), "sharing");
192 
193  //Keep the density
194  *density = algo->getDensity();
195  evt.put(std::move(density));
196 
197  edm::PtrVector<reco::BasicCluster> clusterPtrs, clusterPtrsSharing;
198 
199  std::vector<std::pair<float, float>> times;
200  times.reserve(clusterHandle->size());
201 
202  for (unsigned i = 0; i < clusterHandle->size(); ++i) {
203  edm::Ptr<reco::BasicCluster> ptr(clusterHandle, i);
204  clusterPtrs.push_back(ptr);
205 
206  std::pair<float, float> timeCl(-99., -1.);
207 
208  const reco::CaloCluster& sCl = (*clusterHandle)[i];
209  if (sCl.size() >= nHitsTime) {
210  std::vector<float> timeClhits;
211  std::vector<float> timeErrorClhits;
212 
213  for (auto const& hit : sCl.hitsAndFractions()) {
214  auto finder = hitmap.find(hit.first);
215  if (finder == hitmap.end())
216  continue;
217 
218  //time is computed wrt 0-25ns + offset and set to -1 if no time
219  const HGCRecHit* rechit = finder->second;
220  float rhTimeE = rechit->timeError();
221  //check on timeError to exclude scintillator
222  if (rhTimeE < 0.)
223  continue;
224  timeClhits.push_back(rechit->time() - timeOffset);
225  timeErrorClhits.push_back(1. / (rhTimeE * rhTimeE));
226  }
228  timeCl = timeEstimator.fixSizeHighestDensity(timeClhits, timeErrorClhits, nHitsTime);
229  }
230  times.push_back(timeCl);
231  }
232  std::unique_ptr<std::vector<float>> layerClustersMask(new std::vector<float>);
233  layerClustersMask->resize(clusterHandle->size(), 1.0);
234  evt.put(std::move(layerClustersMask), "InitialLayerClustersMask");
235 
236  auto timeCl = std::make_unique<edm::ValueMap<std::pair<float, float>>>();
238  filler.insert(clusterHandle, times.begin(), times.end());
239  filler.fill();
240  evt.put(std::move(timeCl), timeClname);
241 
242  if (doSharing) {
243  for (unsigned i = 0; i < clusterHandleSharing->size(); ++i) {
244  edm::Ptr<reco::BasicCluster> ptr(clusterHandleSharing, i);
245  clusterPtrsSharing.push_back(ptr);
246  }
247  }
248  algo->reset();
249 }

References algo, algoId, bsc_activity_cfg::clusters, fastSimProducer_cff::density, doSharing, trigObjTnPSource_cfi::filler, HLT_FULL_cff::finder, hgcalsimclustertime::ComputeClusterTime::fixSizeHighestDensity(), edm::Event::getByToken(), reco::CaloCluster::hfnose, reco::CaloCluster::hgcal_em, reco::CaloCluster::hgcal_had, reco::CaloCluster::hgcal_mixed, hits_bh_token, hits_ee_token, hits_fh_token, hits_hfnose_token, reco::CaloCluster::hitsAndFractions(), mps_fire::i, edm::HandleBase::isValid(), eostools::move(), nHitsTime, edm::PtrVector< T >::push_back(), edm::Event::put(), edm::PtrVectorBase::reserve(), reco::CaloCluster::size(), CaloRecHit::time(), timeClname, HGCRecHit::timeError(), and timeOffset.

Member Data Documentation

◆ algo

std::unique_ptr<HGCalClusteringAlgoBase> HGCalLayerClusterProducer::algo
private

Definition at line 51 of file HGCalLayerClusterProducer.cc.

Referenced by HGCalLayerClusterProducer(), and produce().

◆ algoId

reco::CaloCluster::AlgoId HGCalLayerClusterProducer::algoId
private

Definition at line 49 of file HGCalLayerClusterProducer.cc.

Referenced by HGCalLayerClusterProducer(), and produce().

◆ detector

std::string HGCalLayerClusterProducer::detector
private

Definition at line 53 of file HGCalLayerClusterProducer.cc.

Referenced by HGCalLayerClusterProducer().

◆ doSharing

bool HGCalLayerClusterProducer::doSharing
private

Definition at line 52 of file HGCalLayerClusterProducer.cc.

Referenced by produce().

◆ hits_bh_token

edm::EDGetTokenT<HGCRecHitCollection> HGCalLayerClusterProducer::hits_bh_token
private

Definition at line 46 of file HGCalLayerClusterProducer.cc.

Referenced by HGCalLayerClusterProducer(), and produce().

◆ hits_ee_token

edm::EDGetTokenT<HGCRecHitCollection> HGCalLayerClusterProducer::hits_ee_token
private

Definition at line 44 of file HGCalLayerClusterProducer.cc.

Referenced by HGCalLayerClusterProducer(), and produce().

◆ hits_fh_token

edm::EDGetTokenT<HGCRecHitCollection> HGCalLayerClusterProducer::hits_fh_token
private

Definition at line 45 of file HGCalLayerClusterProducer.cc.

Referenced by HGCalLayerClusterProducer(), and produce().

◆ hits_hfnose_token

edm::EDGetTokenT<HGCRecHitCollection> HGCalLayerClusterProducer::hits_hfnose_token
private

Definition at line 47 of file HGCalLayerClusterProducer.cc.

Referenced by HGCalLayerClusterProducer(), and produce().

◆ nHitsTime

unsigned int HGCalLayerClusterProducer::nHitsTime
private

Definition at line 57 of file HGCalLayerClusterProducer.cc.

Referenced by produce().

◆ timeClname

std::string HGCalLayerClusterProducer::timeClname
private

Definition at line 55 of file HGCalLayerClusterProducer.cc.

Referenced by HGCalLayerClusterProducer(), and produce().

◆ timeOffset

double HGCalLayerClusterProducer::timeOffset
private

Definition at line 56 of file HGCalLayerClusterProducer.cc.

Referenced by produce().

reco::CaloCluster::size
size_t size() const
size in number of hits (e.g. in crystals for ECAL)
Definition: CaloCluster.h:187
mps_fire.i
i
Definition: mps_fire.py:428
HGCalLayerClusterProducer::doSharing
bool doSharing
Definition: HGCalLayerClusterProducer.cc:52
HLT_FULL_cff.finder
finder
Definition: HLT_FULL_cff.py:51974
HLT_FULL_cff.InputTag
InputTag
Definition: HLT_FULL_cff.py:89301
HGCalLayerClusterProducer::algoId
reco::CaloCluster::AlgoId algoId
Definition: HGCalLayerClusterProducer.cc:49
edm::ParameterSetDescription
Definition: ParameterSetDescription.h:52
edm::PluginDescription
Definition: PluginDescription.h:98
HGCalLayerClusterProducer::timeClname
std::string timeClname
Definition: HGCalLayerClusterProducer.cc:55
edm::Handle
Definition: AssociativeIterator.h:50
HGCRecHit::timeError
float timeError() const
Definition: HGCRecHit.cc:79
HGCalLayerClusterProducer::hits_bh_token
edm::EDGetTokenT< HGCRecHitCollection > hits_bh_token
Definition: HGCalLayerClusterProducer.cc:46
hgcalsimclustertime::ComputeClusterTime::fixSizeHighestDensity
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)
Definition: ComputeClusterTime.cc:66
HGCalLayerClusterProducer::hits_hfnose_token
edm::EDGetTokenT< HGCRecHitCollection > hits_hfnose_token
Definition: HGCalLayerClusterProducer.cc:47
edm::ConfigurationDescriptions::add
void add(std::string const &label, ParameterSetDescription const &psetDescription)
Definition: ConfigurationDescriptions.cc:57
edm::PtrVector
Definition: PtrVector.h:36
reco::CaloCluster
Definition: CaloCluster.h:31
reco::CaloCluster::undefined
Definition: CaloCluster.h:44
edm::Event::getByToken
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:539
HGCalLayerClusterProducer::timeOffset
double timeOffset
Definition: HGCalLayerClusterProducer.cc:56
reco::CaloCluster::hfnose
Definition: CaloCluster.h:43
CaloRecHit::time
constexpr float time() const
Definition: CaloRecHit.h:31
HGCRecHit
Definition: HGCRecHit.h:14
bsc_activity_cfg.clusters
clusters
Definition: bsc_activity_cfg.py:36
edm::PtrVector::push_back
void push_back(Ptr< T > const &iPtr)
Definition: PtrVector.h:149
HGCalLayerClusterProducer::hits_ee_token
edm::EDGetTokenT< HGCRecHitCollection > hits_ee_token
Definition: HGCalLayerClusterProducer.cc:44
HGCalLayerClusterProducer::algo
std::unique_ptr< HGCalClusteringAlgoBase > algo
Definition: HGCalLayerClusterProducer.cc:51
edm::ParameterSet
Definition: ParameterSet.h:47
HGCalLayerClusterProducer::hits_fh_token
edm::EDGetTokenT< HGCRecHitCollection > hits_fh_token
Definition: HGCalLayerClusterProducer.cc:45
reco::CaloCluster::hitsAndFractions
const std::vector< std::pair< DetId, float > > & hitsAndFractions() const
Definition: CaloCluster.h:210
trigObjTnPSource_cfi.filler
filler
Definition: trigObjTnPSource_cfi.py:21
HGCalLayerClusterProducer::detector
std::string detector
Definition: HGCalLayerClusterProducer.cc:53
edm::Event::put
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:133
edm::ParameterSetDescription::addNode
ParameterDescriptionNode * addNode(ParameterDescriptionNode const &node)
Definition: ParameterSetDescription.cc:41
get
#define get
reco::CaloCluster::hgcal_had
Definition: CaloCluster.h:41
AlCaHLTBitMon_QueryRunRegistry.string
string string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
edm::Ptr
Definition: AssociationVector.h:31
submitPVResolutionJobs.desc
string desc
Definition: submitPVResolutionJobs.py:251
eostools.move
def move(src, dest)
Definition: eostools.py:511
reco::CaloCluster::hgcal_mixed
Definition: CaloCluster.h:42
edm::ValueMap
Definition: ValueMap.h:107
HGCalLayerClusterProducer::nHitsTime
unsigned int nHitsTime
Definition: HGCalLayerClusterProducer.cc:57
hgcalsimclustertime::ComputeClusterTime
Definition: ComputeClusterTime.h:23
edm::ParameterSet::getParameter
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
reco::CaloCluster::hgcal_em
Definition: CaloCluster.h:40
edm::HandleBase::isValid
bool isValid() const
Definition: HandleBase.h:70
edm::InputTag
Definition: InputTag.h:15
hit
Definition: SiStripHitEffFromCalibTree.cc:88
fastSimProducer_cff.density
density
Definition: fastSimProducer_cff.py:61
edm::PtrVectorBase::reserve
void reserve(size_type n)
Reserve space for RefVector.
Definition: PtrVectorBase.h:93