CMS 3D CMS Logo

TICLLayerTileProducer.cc
Go to the documentation of this file.
1 // Author: Marco Rovere, marco.rovere@cern.ch
2 // Date: 05/2019
3 //
4 #include <memory> // unique_ptr
5 
11 
14 
16 
18 public:
19  explicit TICLLayerTileProducer(const edm::ParameterSet &ps);
20  ~TICLLayerTileProducer() override{};
21  void beginRun(edm::Run const &, edm::EventSetup const &) override;
22  void produce(edm::Event &, const edm::EventSetup &) override;
23  static void fillDescriptions(edm::ConfigurationDescriptions &descriptions);
24 
25 private:
31  bool doNose_;
32 };
33 
35  : detector_(ps.getParameter<std::string>("detector")) {
37  consumes<std::vector<reco::CaloCluster>>(ps.getParameter<edm::InputTag>("layer_HFNose_clusters"));
38  clusters_token_ = consumes<std::vector<reco::CaloCluster>>(ps.getParameter<edm::InputTag>("layer_clusters"));
39  geometry_token_ = esConsumes<CaloGeometry, CaloGeometryRecord, edm::Transition::BeginRun>();
40 
41  doNose_ = (detector_ == "HFNose");
42 
43  if (doNose_)
44  produces<TICLLayerTilesHFNose>();
45  else
46  produces<TICLLayerTiles>();
47 }
48 
52 }
53 
55  auto result = std::make_unique<TICLLayerTiles>();
56  auto resultHFNose = std::make_unique<TICLLayerTilesHFNose>();
57 
59  if (doNose_)
60  evt.getByToken(clusters_HFNose_token_, cluster_h);
61  else
62  evt.getByToken(clusters_token_, cluster_h);
63 
64  const auto &layerClusters = *cluster_h;
65  int lcId = 0;
66  for (auto const &lc : layerClusters) {
67  const auto firstHitDetId = lc.hitsAndFractions()[0].first;
68  int layer = rhtools_.getLayerWithOffset(firstHitDetId) +
69  rhtools_.lastLayer(doNose_) * ((rhtools_.zside(firstHitDetId) + 1) >> 1) - 1;
70 
71  assert(layer >= 0);
72 
73  if (doNose_)
74  resultHFNose->fill(layer, lc.eta(), lc.phi(), lcId);
75  else
76  result->fill(layer, lc.eta(), lc.phi(), lcId);
77  LogDebug("TICLLayerTileProducer") << "Adding layerClusterId: " << lcId << " into bin [eta,phi]: [ "
78  << (*result)[layer].etaBin(lc.eta()) << ", " << (*result)[layer].phiBin(lc.phi())
79  << "] for layer: " << layer << std::endl;
80  lcId++;
81  }
82  if (doNose_)
83  evt.put(std::move(resultHFNose));
84  else
85  evt.put(std::move(result));
86 }
87 
90  desc.add<std::string>("detector", "HGCAL");
91  desc.add<edm::InputTag>("layer_clusters", edm::InputTag("hgcalLayerClusters"));
92  desc.add<edm::InputTag>("layer_HFNose_clusters", edm::InputTag("hgcalLayerClustersHFNose"));
93  descriptions.add("ticlLayerTileProducer", desc);
94 }
95 
edm::EDGetTokenT< std::vector< reco::CaloCluster > > clusters_HFNose_token_
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:133
hgcal::RecHitTools rhtools_
void produce(edm::Event &, const edm::EventSetup &) override
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
void beginRun(edm::Run const &, edm::EventSetup const &) override
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:539
assert(be >=bs)
int zside(const DetId &id) const
Definition: RecHitTools.cc:163
constexpr std::array< uint8_t, layerIndexSize > layer
TICLLayerTileProducer(const edm::ParameterSet &ps)
edm::EDGetTokenT< std::vector< reco::CaloCluster > > clusters_token_
ESHandle< T > getHandle(const ESGetToken< T, R > &iToken) const
Definition: EventSetup.h:151
void add(std::string const &label, ParameterSetDescription const &psetDescription)
void setGeometry(CaloGeometry const &)
Definition: RecHitTools.cc:68
edm::ESGetToken< CaloGeometry, CaloGeometryRecord > geometry_token_
def move(src, dest)
Definition: eostools.py:511
Definition: Run.h:45
#define LogDebug(id)
unsigned int lastLayer(bool nose=false) const
Definition: RecHitTools.h:79
unsigned int getLayerWithOffset(const DetId &) const
Definition: RecHitTools.cc:365